Skip to content

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

coverstypecommandresultat commit
new_shell_refusedtestmajordomus shell checkdelivered 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 00694a05b62

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.

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