#[non_exhaustive]pub struct ProposalRecord {
pub proposal_id: String,
pub title: String,
pub summary: String,
pub details: Vec<u8>,
pub tags: Vec<String>,
pub proposer: String,
pub supersedes_proposal_id: Option<String>,
pub disposition: ProposalDisposition,
}Expand description
One proposal as it stands in the session’s serialized mode_state.
#[non_exhaustive] (0.8.0, DECISIONS.md D7), for the same reason as
the handoff and quorum records: this is runtime-produced coordination
state, deserialized from accepted envelopes, that grows a field whenever
the mode learns something new — ProposalState::rejections and
ProposalState::phase both carry #[serde(default)] because they were
added after the fact, and each would be a constructible_struct_adds_field
major today. release-plz.toml’s semver_check = true turns that into a
blocked release PR across all seven lockstep crates. 0.8.0 is already being
taken for the handoff field, so sealing the rest of the class here costs
nothing extra and makes every future field additive.
Fields stay pub and readable; only construction by struct literal from
another crate is refused, and nothing outside macp-modes constructs one —
the mode mints them from accepted envelopes, which is why no constructor is
offered in their place.
Fields (Non-exhaustive)§
This struct is marked as non-exhaustive
Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.proposal_id: String§title: String§summary: String§details: Vec<u8>§proposer: String§supersedes_proposal_id: Option<String>§disposition: ProposalDisposition