pub struct ReleasePlan {
pub plan_id: String,
pub contract_schema_version: u32,
pub head_sha: String,
pub version: String,
pub targets: Vec<PlanTarget>,
pub phases: Vec<PlanPhase>,
pub homebrew_tap: Option<String>,
pub license: Option<String>,
}Expand description
A sealed, content-addressed release plan — the artifact release plan
emits and a human approves.
Every field except Self::plan_id is an input to the content address
(plan_id is the SHA-256 digest over those inputs — plus the full
normalized contract and a domain/seal-format tag — so it is derived, never
authored, and is deliberately excluded from the hashed pre-image: a hash
cannot cover itself). See crate::release::plan for the exact pre-image.
Fields§
§plan_id: StringThe content-addressed plan id: a lowercase 64-character SHA-256 hex
digest over the sealed pre-image (see crate::release::plan for
exactly what is hashed). Stable — identical inputs always yield this same
id; any change to a hashed input yields a different one. This is the
token passed back as release cut --plan <plan_id>.
contract_schema_version: u32The OSS-RELEASE.md contract-document schema version this plan was
sealed against (part of the content address). A schema bump between
approval and execution is drift.
head_sha: StringThe git HEAD commit sha the plan was sealed against. A new commit
between approval and execution is drift.
version: StringThe chosen release version (the human’s bump per design §3.4), supplied
as a validated input to release plan. Sealed verbatim; changing it
requires a new plan.
targets: Vec<PlanTarget>The ordered, concrete publish targets a cut would execute — one per
configured ecosystem → package → registry, with null package names
resolved from detected repo facts where possible.
phases: Vec<PlanPhase>The invariant coordinator phase sequence a cut drives (ADR-0002 §2): dry-run-all → build-all → publish-all → tag → dist (the post-tag distribution finalize, e.g. the Homebrew formula whose tarball only exists after the tag). Constant for every plan and therefore not part of the content address (an invariant cannot drift); carried here so the sealed artifact is self-describing for the approver.
homebrew_tap: Option<String>The Homebrew tap repo (owner/repo) the cut’s generated formula is
pushed to, or null when the contract configured none. Copied verbatim
from the (already content-addressed) normalized contract’s
distribution.homebrew_tap — carried on the plan, like Self::phases,
only so the coordinator can hand it to the Homebrew adapter’s
first-formula bootstrap without re-reading the contract. Being a copy of a
value the pre-image already hashes, it changes no plan_id.
license: Option<String>The SPDX license expression the cut’s generated Homebrew formula records,
copied from the normalized contract’s license. Carried for the same
reason (and with the same content-address neutrality) as
Self::homebrew_tap.
Trait Implementations§
Source§impl Clone for ReleasePlan
impl Clone for ReleasePlan
Source§fn clone(&self) -> ReleasePlan
fn clone(&self) -> ReleasePlan
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for ReleasePlan
impl Debug for ReleasePlan
impl Eq for ReleasePlan
Source§impl PartialEq for ReleasePlan
impl PartialEq for ReleasePlan
Source§impl Serialize for ReleasePlan
impl Serialize for ReleasePlan
impl StructuralPartialEq for ReleasePlan
Auto Trait Implementations§
impl Freeze for ReleasePlan
impl RefUnwindSafe for ReleasePlan
impl Send for ReleasePlan
impl Sync for ReleasePlan
impl Unpin for ReleasePlan
impl UnsafeUnpin for ReleasePlan
impl UnwindSafe for ReleasePlan
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.