I3957 — No entry path or gate builds: the launcher, the gates, the test harness and the just bridge call the tree's executable and fail fast or use a release of the same generation
Change bin/majordomus-cli so a missing or stale executable exits 12 naming the explicit build for every caller, or answers through the installed release only when its build generation matches the tree; make the nine cargo-run gates of .ai/repo/ci/gates.yaml, test/lib.sh and the just bridge call the tree's executable; make the edit guard and the pre-commit guard declare their outcome instead of passing silently.
READY wave 0 · p0 · implementation profile · runs alone
Ready. Every dependency is done, so majordomus plan start I3957 will be accepted.
Objective
Change bin/majordomus-cli so a missing or stale executable exits 12 naming the explicit build for every caller, or answers through the installed release only when its build generation matches the tree; make the nine cargo-run gates of .ai/repo/ci/gates.yaml, test/lib.sh and the just bridge call the tree's executable; make the edit guard and the pre-commit guard declare their outcome instead of passing silently.
Why
The owner, 2026-10-22: ADR 0172 is replaced (by ADR 0224) and I3180 cancelled, after a pre-push timed out at ninety minutes in cargo-run gates queued behind the shared build lock, and the architecture review recorded as intent every-capability-has-one-owner-and-the-cli-never-builds.
Current state
Measured on master 2034d4a3f0b: see milestone ordinary-commands-never-build.
Desired state
Zero cargo invocations from any ordinary path with the executable missing or stale; a mismatched release refused; no silent pass.
Scope
- bin/majordomus-cli
- bin/majordomus-mcp
- lib/rust_bin.sh
- test/lib.sh
- .ai/repo/ci/gates.yaml
- .claude/hooks/majordomus-edit-guard
- .githooks/
- apps/majordomus-cli/src/command_graph/bridge.rs
- .ai/repo/project/intents/every-capability-has-one-owner-and-the-cli-never-builds.yaml
- test/cases/3958_no_entry_path_or_gate_builds.sh
Out of scope
- Migrating shell domain logic
Dependencies
None. This issue is a root of the graph.
Acceptance criteria
- A case extending the stand-in-cargo fixtures of cases 3831 and 3177 walks every command path through bin/majordomus, bin/majordomus-cli, bin/majordomus-mcp, the just bridge, each git hook and every gate, with the executable missing and then stale, and counts zero cargo invocations
- An installed release whose build generation differs from the tree is refused, and one whose generation matches is used
- The edit guard and the pre-commit guard name their outcome for a stale executable; neither passes silently
- Cases 3177, 3221 and 3831 still pass, or are amended with the reason ADR 0224 gives
Validation
- bin/majordomus plan validate
- MJ_TEST_JOBS=2 bash test/run.sh 3958_no_entry_path_or_gate_builds
Evidence required
- zero_cargo_case
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/I3957.yaml. Read it back with majordomus plan show I3957.