Skip to content

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

Part of repository-automation-is-typed — Repository automation is typed capabilities that Rhai orchestrates, and domain-logic shell only shrinks.

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.

Searches the titles and descriptions of every page this site publishes.