pub struct Deliverable {
pub id: String,
pub owned_files: Vec<OwnedFile>,
pub prerequisites: Vec<Prerequisite>,
pub estimated_effort_hours: Option<f32>,
pub duration_hours: Option<f32>,
pub estimate: Option<Estimate>,
pub metadata: Value,
pub milestone: bool,
pub earning_rule: Option<EarningRule>,
}Expand description
A single unit of work scheduled by the Planner.
owned_files is the load-bearing field for concurrent dispatch: the
Planner guarantees that two deliverables with conflicting owned_files
claims (exclusive conflicts with anything; append/append may share) will
never be returned in the same Cohort and will never both hold active
locks. This is the only mechanism the Planner uses to prevent
write-write conflicts; implementations of crate::ports::Planner
must therefore reject any plan that contains a deliverable whose
owned_files are not specified up front.
Fields§
§id: StringUnique identifier within the plan. The Planner rejects duplicate
ids at submit time with PlannerError::InvalidGraph.
owned_files: Vec<OwnedFile>Exact file paths the implementer is going to write while completing
this deliverable. The absence of conflicting claims across deliverables
is the lock-contention invariant; see crate::ports::Planner::acquire_cohort semantics.
prerequisites: Vec<Prerequisite>Ids of other deliverables in the same plan that must reach
DeliverableStatus::Complete before this one becomes eligible
for acquisition.
estimated_effort_hours: Option<f32>Estimated wall-clock effort, used by critical-path math in
PlanStatus::critical_path. None means the planner derives an
estimate with EffortEstimator.
duration_hours: Option<f32>Calendar time the deliverable occupies on the schedule, in hours. When set it replaces the effort estimate as the scheduled length; effort stays the cost basis. Must be finite and >= 0.
estimate: Option<Estimate>Optional three-point effort estimate. Scheduled-length precedence is
duration_hours > estimated_effort_hours > estimate.likely >
0 for a milestone > the estimator’s default. So only when neither
duration_hours nor estimated_effort_hours is set is likely the
scheduled length and the basis for cost and DRAG, and only then does
Monte Carlo sample the estimate.
metadata: ValueFree-form metadata. Conventionally carries model hints, human descriptions, links to specs, etc. The Planner does not interpret this field.
milestone: boolTrue for a milestone: a zero-effort marker whose schedule and
critical path plan.status reports in milestones. A deliverable
with metadata.milestone == true is treated the same way.
earning_rule: Option<EarningRule>How earned value credits partial progress. None means
EarningRule::ZeroHundred; an explicit zero_hundred deserializes
as None and hashes like it. Part of the plan’s identity (hashed).
Implementations§
Source§impl Deliverable
impl Deliverable
Sourcepub fn is_milestone(&self) -> bool
pub fn is_milestone(&self) -> bool
Whether this deliverable is a milestone, via the milestone field or
the legacy metadata.milestone == true convention.