pub struct LifecycleRequest {
pub action: LifecycleAction,
pub schedule_id: CycleScheduleId,
pub cycle_id: Option<GeneratedCycleId>,
pub actor: String,
pub reason: Option<String>,
pub timestamp: Option<String>,
pub confirmed: bool,
pub capacity: Option<CapacityCalculation>,
}Expand description
The explicit, confirmed intent to carry out one lifecycle action.
Every field is supplied and none is inferred. timestamp is the caller’s explicit
instant — this codebase has no clock — required by every action that writes;
reason is required by the five actions that record one (see
LifecycleAction::requires_reason).
Fields§
§action: LifecycleActionWhich action to carry out.
schedule_id: CycleScheduleIdThe schedule to act on, by stable id.
cycle_id: Option<GeneratedCycleId>The instance to act on, when the action names one.
actor: StringWho asked — the audit actor.
reason: Option<String>Why, when the action records one.
timestamp: Option<String>The explicit instant (RFC 3339, YYYY-MM-DDTHH:MM:SSZ) the action happened.
confirmed: boolWhether the caller confirmed the action. An unconfirmed request is inert.
capacity: Option<CapacityCalculation>The capacity calculation a close records as its evidence, when the caller
computed one (mission cycle-capacity-planning-01M3C85C, WP04).
The caller supplies this, and a later reader must not “fix” that by teaching
apply to build one. The close path has no Config and no issue store —
only the cycle records, the schedule index and this request — so it cannot run
the calculation, and threading a store through apply would change every CLI,
TUI and MCP call site for a value those surfaces already hold. The caller that
owns the project configuration and the issue store computes it (one
CapacityCalculation::for_scope) and sets it here.
None — the default, and what every caller written before this field did —
means the close captures no capacity evidence, which is exactly the
issue-181 behaviour: a snapshot with an empty measurements map. A payload
this mission wrote reads back as “no capacity evidence”, never an error, so an
un-updated caller is not broken by the field’s arrival.
Implementations§
Source§impl LifecycleRequest
impl LifecycleRequest
Sourcepub fn new(
action: LifecycleAction,
schedule_id: CycleScheduleId,
actor: impl Into<String>,
) -> Self
pub fn new( action: LifecycleAction, schedule_id: CycleScheduleId, actor: impl Into<String>, ) -> Self
A request that is not yet confirmed.
Sourcepub fn with_capacity(self, calculation: CapacityCalculation) -> Self
pub fn with_capacity(self, calculation: CapacityCalculation) -> Self
Record the capacity calculation a close should capture as its evidence.
Sourcepub fn for_cycle(self, cycle_id: GeneratedCycleId) -> Self
pub fn for_cycle(self, cycle_id: GeneratedCycleId) -> Self
Name the instance the action targets.
Sourcepub fn with_reason(self, reason: impl Into<String>) -> Self
pub fn with_reason(self, reason: impl Into<String>) -> Self
Record why.
Sourcepub fn with_timestamp(self, timestamp: impl Into<String>) -> Self
pub fn with_timestamp(self, timestamp: impl Into<String>) -> Self
Record the explicit instant.
Trait Implementations§
Source§impl Clone for LifecycleRequest
impl Clone for LifecycleRequest
Source§impl Debug for LifecycleRequest
impl Debug for LifecycleRequest
impl Eq for LifecycleRequest
Source§impl PartialEq for LifecycleRequest
impl PartialEq for LifecycleRequest
impl StructuralPartialEq for LifecycleRequest
Auto Trait Implementations§
impl Freeze for LifecycleRequest
impl RefUnwindSafe for LifecycleRequest
impl Send for LifecycleRequest
impl Sync for LifecycleRequest
impl Unpin for LifecycleRequest
impl UnsafeUnpin for LifecycleRequest
impl UnwindSafe for LifecycleRequest
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§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more