I1803 — New shell is refused without a declared exemption, and the migration inventory is tracked
Refuse a new shell file under a governed path unless a machine-readable exemption list names it, and track the inventory of existing shell with each unit's disposition.
DONE wave 0 · p1 · implementation profile · parallel safe
Part of automation — Repository automation is scripted capabilities over typed Rust, not shell.
Objective
Refuse a new shell file under a governed path unless a machine-readable exemption list names it, and track the inventory of existing shell with each unit's disposition.
Why
Migration shrinks shell only if nothing grows it back. The audit of 2026-09-15 classified 223 units (scripts/ci 44 files and 6,017 lines; other scripts and bin 82 files and 14,860 lines; lib 45 files and 19,513 lines; 216 shell cases and 30,872 lines): 97 core Rust, 32 orchestration, 34 glue, 3 dead, 14 generated, 43 platform adaptor. Worked on branch feature/new-shell-is-refused.
Current state
Nothing refuses a new shell file; the inventory exists only as an audit report.
Desired state
A gate and an exemption list; the inventory is a tracked, machine-readable record each migration updates.
Scope
- scripts
- .ai/repo
- test
Out of scope
- Migrating any unit
Dependencies
None. This issue is a root of the graph.
Acceptance criteria
- a new shell file under a governed path without an exemption fails the gate
- every existing shell unit appears in the inventory with its disposition
Validation
- bash test/run.sh
Evidence required
- new_shell_refused
Evidence
| covers | type | command | result | at commit |
|---|---|---|---|---|
| new_shell_refused | test | majordomus shell check | delivered on master by 4a05b62920 (2026-09-15): shell.check and the shell-inventory gate refuse a shell unit the inventory does not exempt (docs/SHELL.md); this record arrived on master only on 2026-10-14 with ADR 0069 | 4a05b62 |
Timeline
- started
- 2026-10-14T21:36:29Z
- verified
- —
- completed
- 2026-10-14T21:36:57Z
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/I1803.yaml. Read it back with majordomus plan show I1803.