# Task 04: build frontend interface

## Purpose

Turn the current kinds into a stable backend interface rather than accumulating
branches in `build_extension.py`.

## Required interface

Each backend receives verified source, host tools, target configuration,
declared native dependencies, staging directory, and ABI contract. It returns a
wheel tree or wheel plus build evidence. It cannot mutate the ABI.

Retain proven setuptools/Cython and PyO3 behavior. Add another frontend only
when a selected cohort package requires it; likely candidates include PEP 517
wheel hooks, Meson, or scikit-build/CMake. Do not implement all frontends
speculatively.

Keep package quirks in patches/recipes and backend mechanics in adapters.

## Exit gate

- Backend selection is explicit and schema-validated.
- The generic orchestrator has no package-name checks.
- Existing fixtures pass through the interface.
- One pyproject-only package runs through a real isolated PEP 517 path.

