Skip to content

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

Part of a-claim-stands-only-on-its-evidence — A claim that something is enforced, tested or delivered stands only on recorded evidence that would have caught it being false.

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

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.

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