I3159 — A shell unit is deleted only after a parity case shows its replacement gives the same verdict on the same fixture
Generalise I1804's per-gate parity into a harness: the inventory record of a unit being migrated names its parity case, the case runs the legacy and the new path on one fixture and compares exit code and structured output, and the shell check refuses deleting a class A or B unit whose record names no passing parity case.
BLOCKED wave 3 · p2 · implementation profile · parallel safe
Blocked. This issue cannot start until I1804 is done. The status is derived from that, not declared.
Objective
Generalise I1804's per-gate parity into a harness: the inventory record of a unit being migrated names its parity case, the case runs the legacy and the new path on one fixture and compares exit code and structured output, and the shell check refuses deleting a class A or B unit whose record names no passing parity case.
Why
Owner direction 2026-09-15 and 2026-10-17: characterise and differential-test legacy scripts before deletion; classify each difference as fix, architectural change or compatibility requirement. It extends milestone automation. Sources: chatgpt-majordomus:c140#2, chatgpt-majordomus:c244#8, chatgpt-majordomus:c290#2.
Current state
I1804 asks parity for the ratchet gates only; inventory.jsonl has no parity field.
Desired state
A parity field and a harness every migration uses.
Scope
- .ai/repo/automation
- apps/majordomus-cli/src/capability/builtin/shell.rs
- test/lib.sh
- docs/SHELL.md
- apps/majordomus-cli/src/automation/mod.rs
- test/cases/366_automation_inventory_agrees_with_the_tree.sh
- test/cases/365_new_shell_is_refused.sh
Dependencies
Acceptance criteria
- A deletion without a parity case is refused
- A recorded difference carries its classification
- Each new case named here takes its number from `scripts/case-numbers next` and is announced on the board before the file is written (ADR 0053); a case number written in this record before that is provisional
Validation
- bin/majordomus-cli shell check
- bash test/run.sh 365_new_shell_is_refused
Evidence required
- case_parity_before_deletion
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/I3159.yaml. Read it back with majordomus plan show I3159.