I3123 — finish refuses a verify command the profile does not admit for the change, and keeps its output
Let a profile or policy declare the verify commands (or command prefixes) a completed outcome may cite per scope class. finish refuses a command outside that set, beyond the no-op and print refusal already in mj_verify_is_vacuous, and records the tail of its output with the exit code.
READY wave 0 · p2 · implementation profile · parallel safe
Ready. Every dependency is done, so majordomus plan start I3123 will be accepted.
Objective
Let a profile or policy declare the verify commands (or command prefixes) a completed outcome may cite per scope class. finish refuses a command outside that set, beyond the no-op and print refusal already in mj_verify_is_vacuous, and records the tail of its output with the exit code.
Why
The 2026-10-08 audit (c193#1) found vacuous verify commands (ls, true, test 1) accepted. Measured on master 707a04c: lib/finish.sh:161 refuses true, :, exit 0, echo and printf, but not ls or test 1. No policy pins what verifies a change. It extends milestone architecture-is-enforced. Sources: chatgpt-majordomus:c193#1.
Current state
mj_verify_is_vacuous in lib/finish.sh; profile key verification.verify_command_required.
Desired state
A profile key verification.verify_commands; a refusal names the admitted set.
Scope
- lib/finish.sh
- .ai/repo/profiles
- share/allow/profile.txt
- share/schemas/majordomus/profile/profile.v1.schema.json
- share/events.yaml
- test/cases/06_finish.sh
- docs/SCHEMAS.md
Out of scope
- Judging whether a real command is the right one for the change
Dependencies
None. This issue is a root of the graph.
What waits on this
- I3128BLOCKED init ends with what it found in the repository it adopted, each finding naming its file
Acceptance criteria
- A completed finish citing ls or test 1 under a profile with an admitted set is refused
- An admitted command passes and its output tail is in the ledger
- doctor admits the new profile key verification.verify_commands through share/allow/profile.txt
Validation
- MJ_TEST_JOBS=4 bash test/run.sh 06_finish
Evidence required
- case_verify_command_admitted
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/I3123.yaml. Read it back with majordomus plan show I3123.