I0005 — Implement the plan command surface
Give a worker one command that answers what is ready, why something is blocked, what the graph looks like, and that moves an issue through its lifecycle while refusing illegal transitions.
DONE wave 4 · p0 · implementation profile · runs alone
Part of M000 — Milestone and DAG driven development.
Objective
Give a worker one command that answers what is ready, why something is blocked, what the graph looks like, and that moves an issue through its lifecycle while refusing illegal transitions.
Why
A model nobody can query is a filing cabinet. The command is how a fresh session with no conversation history finds its work.
Current state
The engine existed with no interface.
Desired state
majordomus plan validate, status, list, show, ready, blocked, waves, graph, next, body, start, verify, evidence and done all read the one model.
Scope
- lib/plan.sh
- bin/majordomus
- docs/CLI.md
Out of scope
- Any network call; the CLI never leaves the machine
Dependencies
What waits on this
- I0007DONE Enforce the canonical model as doctrine
- I0008DONE Project the model to GitHub milestones and issues
- I0009DONE Project the model into the website
- I0013DONE Document the semantics and the dogfooding rule
- I0014DONE Make the worker instructions require the model
Acceptance criteria
- plan start refuses an issue that is not READY
- plan done refuses while a required evidence token has no evidence
- plan evidence refuses a token the issue does not require
- plan evidence refuses without a command or an artifact
- every subcommand answers --help and an unknown one exits 2
Validation
- bash test/run.sh 43_plan_command
Evidence required
- command_test
Evidence
| covers | type | command | result | at commit |
|---|---|---|---|---|
| command_test | test | bash test/run.sh 43_plan_command | 1 passed, 0 failed | 2dd5915 |
Risk
Low
Timeline
- started
- 2026-09-04T03:12:50Z
- verified
- 2026-09-04T03:12:51Z
- completed
- 2026-09-04T03:12:53Z
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/I0005.yaml. Read it back with majordomus plan show I0005.