I1120 — A refusal says what to do about it
Make every refusal in this subsystem name the source of truth, what was observed, what was expected and the command that repairs it — through the diagnostics framework that already exists.
BLOCKED wave 4 · p1 · implementation profile · parallel safe
Blocked. This issue cannot start until I1108 is done. The status is derived from that, not declared.
Objective
Make every refusal in this subsystem name the source of truth, what was observed, what was expected and the command that repairs it — through the diagnostics framework that already exists.
Why
The operations here refuse often by design: an edited bridge, a stale ledger, a non-conforming path, a plan that would touch something it does not own. A refusal that only says no turns a safety property into an obstacle.
Current state
Errors in the executable carry structured detail in places and a bare message in others. The new operations have no convention yet.
Desired state
Each refusal is actionable, and a person who has never read this code can act on it without reading this code.
Scope
- apps/majordomus-cli/src/error.rs
Out of scope
- A second diagnostics framework
- A message that reports a condition without naming the repair
Dependencies
What waits on this
Acceptance criteria
- A refusal names the file or path, what was found, what was expected and the command that repairs it
- An edited bridge, a ledger mismatch, a non-conforming path and a plan touching something unowned each have their own message rather than a shared generic one
- The messages are exercised by tests, so a change that degrades one is caught
- Machine-readable output carries the same detail as the human-readable form
Validation
- cargo test --workspace --all-features
- bash test/run.sh
Evidence required
- failures_actionable
Evidence
None recorded. Every token above needs a command or an artifact behind it before this issue can be completed; narrative is refused.
Risk
Message quality is the first thing to decay under time pressure and the last thing anybody tests. Testing the messages is what keeps them.
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/I1120.yaml. Read it back with majordomus plan show I1120.