Expand description
Public wire DTO for the sealed, content-addressed release plan
(ossctl release plan — ADR-0002 §3).
A ReleasePlan is the read-only pre-image a human approves: the ordered
concrete target set a cut would publish, the invariant phase sequence the
coordinator will drive, the git HEAD it was sealed against, the chosen
release version, and the content-addressed ReleasePlan::plan_id. release cut --plan <plan_id> re-derives the plan from current repo state and
refuses (plan_stale) if the id no longer matches — so a commit, a manifest
rename, a schema bump, or a different chosen version between approval and
execution aborts rather than silently publishing something else.
Consumers read this document under the CLI’s canonical data envelope:
{schema_version, data: <this shape>, warnings} — the same envelope every
ossctl --json command shares (crate::SCHEMA_VERSION versions that wire
envelope). Like facts and audit, the plan is derived, never authored,
so it has no document version of its own; the envelope’s schema_version is
the wire version consumers gate on. ReleasePlan::contract_schema_version
is a content field (the contract-document version the plan was sealed
against, part of the content address), not the wire-envelope version.
The plan reuses Ecosystem, Registry, and Adapter from the
canonical contract model rather than restating their wire strings: the plan,
the contract, and the release adapters must agree on "rust" /
"crates.io" / "cargo-publish" down to the byte, and sharing the one enum
makes that agreement structural instead of coincidental.
Structs§
- Plan
Target - One concrete publish destination in a sealed plan.
- Release
Plan - A sealed, content-addressed release plan — the artifact
release planemits and a human approves.
Enums§
- Plan
Phase - One phase of the coordinator’s irreversibility-ordered pipeline (ADR-0002
§2). The sequence is invariant across every plan;
PlanPhase::sequenceyields it in order.