I3155 — The shell check reports shell by disposition, and the count of domain-logic shell never rises against the merge base
Add a ratchet to majordomus shell check comparing the class-A unit and line counts with the merge base and refusing an increase or an unexplained relabel, serve the per-class counts as a reading on CLI, MCP and HTTP, and draw that reading as the shell observatory on /ui.
READY wave 0 · p2 · implementation profile · parallel safe
Ready. Every dependency is done, so majordomus plan start I3155 will be accepted.
Objective
Add a ratchet to majordomus shell check comparing the class-A unit and line counts with the merge base and refusing an increase or an unexplained relabel, serve the per-class counts as a reading on CLI, MCP and HTTP, and draw that reading as the shell observatory on /ui.
Why
The README of .ai/repo/automation says 'The list only shrinks' but nothing compares with master; the owner asked for progress measured by logic removed, not .sh counts (2026-10-12), and a derived shell observatory (2026-10-17). It extends milestone automation. Sources: chatgpt-majordomus:c105#1, chatgpt-majordomus:c230#5, chatgpt-majordomus:c290#2.
Current state
inventory.jsonl: 237 records, dispositions A-F (113 A; counted at 707a04c with wc -l and grep -c on the disposition field); shell check refuses unexempted units; the judgement lives in apps/majordomus-cli/src/automation/mod.rs.
Desired state
A rise in class A fails the check; counts are derived, never typed into prose.
Scope
- apps/majordomus-cli/src/capability/builtin/shell.rs
- .ai/repo/automation
- docs/SHELL.md
- test/cases/365_new_shell_is_refused.sh
- apps/majordomus-cli/src/automation/mod.rs
- apps/majordomus-cli/src/commands/shell.rs
- apps/majordomus-cli/src/ui/mod.rs
- apps/majordomus-cli/src/ui/governance.rs
- docs/generated/modules/shell.md
Dependencies
None. This issue is a root of the graph.
Acceptance criteria
- A branch adding a class-A unit is refused
- Counts by class are on CLI and MCP
- /ui shows the per-class counts and their change against the merge base from the same reading, and the published page is checked to carry them
- 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_domain_shell_only_shrinks
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/I3155.yaml. Read it back with majordomus plan show I3155.