0013 — The v1alpha3 lane ships in provider v2.1
- Status: accepted
- Date: 2026-08-06
- Owners: Takoform maintainers
Context
Provider v2.0.0 is published and Registry-verified against Host API forms.takoform.com/v1alpha2 and the nine candidate Forms. Decisions 0008 through 0012 change the Form model, the wire envelope, connections, and artifact transport incompatibly at the API-lane level. Editing the published v1alpha2 lane in place would break provider-v2 reproducibility and the immutability promises of forms/candidates/v1alpha2 and the published schemas.
At the provider level, however, the new lane is purely additive: every existing v2.0.0 resource type, configuration, and persisted state remains valid and untouched, and the new family resources are new types. Under versioning.md, compatible new resource types and host-client capabilities stay within the current provider major.
Decision
The redesign ships as a new Host API lane carried by a provider minor; the published API lanes freeze.
- Host API:
forms.takoform.com/v1alpha3, discovered at/.well-known/takoform/v1alpha3with API base/apis/forms.takoform.com/v1alpha3. v1alpha1 and v1alpha2 discovery and wire behavior are retained unchanged. Host API group identity and provider SemVer remain independent axes. - Long-running operations: create, update, delete, import, and artifact commit may return an Operation resource polled at
/operations/{id}withRetry-After, exponential backoff with full jitter, an overall deadline, and resumable operation IDs. Fixed-interval busy polling is removed. - A closed portable error taxonomy is extended (
rate_limited,deadline_exceeded,operation_cancelled,operation_not_found,dependency_in_use,deletion_protected,artifact_missing,artifact_invalid,unsupported_capability,migration_required,uid_mismatch,revision_conflict,generation_conflict). - Host Support Profiles are readable API surfaces (
/support/forms,/support/interfaces/...,/support/bindings/...) declaring supported exact refs, closed capability subsets, and limits. Price, SKU, region, and quota never appear there. - Provider v2.1.0 is the next release line: it keeps the nine retained v1alpha2 resource types byte-compatible, and adds the v1alpha3 client, typed per-Form family resources over a shared lifecycle core, a multi-FormRef registry dispatching on the exact FormRef recorded in state, family state identity
space/apiVersion/kind/uid, a JSON-serializedstatus.outputsdocument (outputs_json), per-resource timeouts, artifact upload, and no global mutation mutex. A generictakoform_resourcecarries third-party family Forms. Existing v2.0.0 state is never reinterpreted; family resources use new state. release/version.jsoncontinues to describe the latest assigned release (v2.0.0) until the owner's release flow assigns v2.1.0 with signed Registry-readback evidence; a repository worktree never claims an unpublished version as released.- Removing the retained v1alpha2 resource types remains a future provider major and a separate decision.
- The v1alpha2 candidates, registry, and generator are retained read-only for reproducibility; they are labelled retained provider-v2 preview source and are not part of the new design.
Consequences
- New public schema identities: form-ref/form-definition/host-discovery/ host-api-wire v1alpha3, package-index v1alpha4, operation v1alpha1, and host-support-profile v1alpha1, appended without touching published
$idbytes. - The per-package Interface distribution ordered by this redesign is deferred: Interface candidates ship as digest-bound definition documents under
interfaces/candidates/v1alpha1, and no Interface Package envelope identity is published or specified yet (../interface-contract/). - The provider is one client among several: the CLI, SDKs, and controllers consume the same Host API.
- Conformance splits per API lane; v1alpha2 checks keep running against retained sources.
- One provider binary serves both lanes; discovery negotiation is per lane, and each resource type requires its own lane.
Rejected alternatives
- Evolve the v1alpha2 wire in place with optional fields. Rejected because the envelope, connection, and artifact changes are semantic, not additive; optionality would fork behavior inside one identity.
- A new provider major ("v3.0.0") for the new lane. Rejected because the addition breaks no existing configuration or state; spending the major now would misuse SemVer and force an unnecessary migration signal on users.
- Skip the new lane and wait for Stable Forms. Rejected because the category-shaped candidates cannot earn stability; the shape-preserving redesign is the prerequisite for any maturity progress.