I3156 — Every command path is implemented by one executable, and the other only delegates
Derive, from the command graph's existing join of share/commands.yaml and the Rust registry, the implementing executable of every command path (program plus its full word sequence); report a path both implement outside a declared delegation as a commands validate finding; serve the reading on CLI, MCP and /ui. Delegation stays read from docs/generated/cli.yaml at run time.
READY wave 0 · p1 · implementation profile · parallel safe
Ready. Every dependency is done, so majordomus plan start I3156 will be accepted.
Objective
Derive, from the command graph's existing join of share/commands.yaml and the Rust registry, the implementing executable of every command path (program plus its full word sequence); report a path both implement outside a declared delegation as a commands validate finding; serve the reading on CLI, MCP and /ui. Delegation stays read from docs/generated/cli.yaml at run time.
Why
The justfile header says two executables share the name majordomus. On 2026-10-12 the shell reading of the model reported 318 drift findings where the Rust executable reported 26 (.github/workflows/github.yml); the workflow now forces the Rust path, which fixes the symptom and not the class. It extends milestone automation. Proposed in ADR 0184 (Every command name is implemented by exactly one executable, and the other only delegates) (proposed; it carries no authority until the owner accepts it). Sources: chatgpt-majordomus:c225#2, chatgpt-majordomus:c233#2, chatgpt-majordomus:c268#2.
Current state
share/commands.yaml describes the shell tool and doctor proves it agrees with bin/majordomus; command_graph/mod.rs already joins both origins (qualify_collisions); bin/majordomus reads its delegation from docs/generated/cli.yaml (bin/majordomus:100-103) and hands over by subcommand word.
Desired state
One owner per command path, a finding otherwise; delegation unchanged in form.
Scope
- share/commands.yaml
- bin/majordomus
- apps/majordomus-cli/src/command_graph
- docs/COMMANDS.md
Out of scope
- Porting a command (the cutover issues do that)
Dependencies
None. This issue is a root of the graph.
What waits on this
Acceptance criteria
- A name implemented by both executables without a delegation is a finding of commands validate
- The table is served on CLI and MCP
- Exit codes and output of delegated names are unchanged
Validation
- cargo test --manifest-path apps/majordomus-cli/Cargo.toml --lib command_graph::
- bash test/run.sh 101_command_graph 30_command_registry
Evidence required
- test_one_executable_per_command
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/I3156.yaml. Read it back with majordomus plan show I3156.