Skip to main content

Module plan

Module plan 

Source
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§

PlanTarget
One concrete publish destination in a sealed plan.
ReleasePlan
A sealed, content-addressed release plan — the artifact release plan emits and a human approves.

Enums§

PlanPhase
One phase of the coordinator’s irreversibility-ordered pipeline (ADR-0002 §2). The sequence is invariant across every plan; PlanPhase::sequence yields it in order.