I2902 — A status names the moves it admits, and every surface reads that
Give plan::Transition the rule of which status admits which move (READY start, ACTIVE verify, VERIFY done), used by plan::transition's refusal, ui/idd.rs and cockpit::plan::moves, with a test that they agree.
READY wave 0 · p2 · implementation profile · runs alone
Part of idd-reads-at-a-glance — The intent workspace reads at a glance and leads everywhere it names.
Ready. Every dependency is done, so majordomus plan start I2902 will be accepted.
Objective
Give plan::Transition the rule of which status admits which move (READY start, ACTIVE verify, VERIFY done), used by plan::transition's refusal, ui/idd.rs and cockpit::plan::moves, with a test that they agree.
Why
idd.rs maps READY, ACTIVE and VERIFY to moves on its own (idd.rs:383, :470); plan.rs owns the moves but keeps the admitting status only inside its refusals.
Current state
The status-to-move map is written in three places.
Desired state
One function answers it; the UI, the Cockpit and the refusal read it.
Scope
- apps/majordomus-cli/src/plan.rs
- apps/majordomus-cli/src/ui/idd.rs
- apps/majordomus-cli/src/cockpit/plan.rs
- .ai/repo/project
- docs
- site
Dependencies
None. This issue is a root of the graph.
What waits on this
Acceptance criteria
- The workspace offers exactly the move plan.transition would accept for each status
- No status string is compared in ui/idd.rs
Validation
- majordomus plan validate
- cargo test --lib plan::
- cargo test --test ui_idd_moves
Evidence
None recorded. Every token above needs a command or an artifact behind it before this issue can be completed; narrative is refused.
Timeline
- started
- —
- verified
- —
- completed
- —
Those three fields, the evidence above and the state of the dependencies are all the status is made of. There is no status field to disagree with them.
Canonical record: .ai/repo/project/issues/I2902.yaml. Read it back with majordomus plan show I2902.