I3424 — No inference transport is reachable from the shell closure of any declared hook command, and reasoning check refuses one that is
Add a hooks check to reasoning check that derives the hook closure. It starts from each hook command share/providers.yaml declares and the shims under .claude/hooks, takes the majordomus subcommand each shim runs, and follows the lib/ shell units that subcommand sources. It refuses a closure that names scripts/advisor-consult, scripts/lib/advisors or scripts/lib/inference. The check lists any Rust capability a hook subcommand reaches as outside its closure, so the limit is stated rather than hidden. A person-invoked consultation outside the closure is not refused.
BLOCKED wave 0 · p1 · implementation profile · parallel safe
Blocked. This issue cannot start until milestone:an-inference-names-its-source-and-budget is done. The status is derived from that, not declared.
Objective
Add a hooks check to reasoning check that derives the hook closure. It starts from each hook command share/providers.yaml declares and the shims under .claude/hooks, takes the majordomus subcommand each shim runs, and follows the lib/ shell units that subcommand sources. It refuses a closure that names scripts/advisor-consult, scripts/lib/advisors or scripts/lib/inference. The check lists any Rust capability a hook subcommand reaches as outside its closure, so the limit is stated rather than hidden. A person-invoked consultation outside the closure is not refused.
Why
The owner's 2026-10-19 Cognitive Fabric pack puts deterministic work first and hooks on the sensor side (campaigns/prismatic-way-cognitive-fabric-prompt-pack/prompts/04_REASONING_MESH.md, contracts/ECONOMICS.md). This is wave 0: one check over a tree that is clean today.
Current state
The tree is clean today by grep: git grep for advisor-consult or lib/advisors over lib, bin, .claude/hooks and share finds only share/advisors.yaml. lib/session.sh:662-672 derives knowledge with no model, and no Rust code in reasoning/ spawns a process. The hooks exec bin/majordomus subcommands (.claude/hooks/majordomus-capture). Nothing refuses a regression. CHECKS (apps/majordomus-cli/src/reasoning/check.rs:454) has catalogue, adapters, coupling, ci, claims and records.
Desired state
CHECKS gains hooks. A fixture hook whose closure reaches the transport is a finding, and this repository is clean. doctor reports the check like the others.
Scope
- apps/majordomus-cli/src/reasoning/check.rs
- docs/REASONING.md
Out of scope
- Forbidding a consultation a person invokes explicitly
- Inspecting provider client internals
- Following Rust call graphs (listed as outside the closure)
Dependencies
None. This issue is a root of the graph.
Acceptance criteria
- A fixture shim whose subcommand sources a lib/ unit naming scripts/advisor-consult yields a hooks finding naming the file and the hook
- A lib/ unit outside every hook closure that names the transport yields no finding
- This checkout yields no hooks finding
- The check runs with no network and no model
Validation
- cargo test --manifest-path apps/majordomus-cli/Cargo.toml --lib reasoning::check
- bash test/run.sh 736_reasoning_check_refuses_drift
- majordomus reasoning check
Evidence required
- a_hook_that_calls_an_advisor_is_refused
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/I3424.yaml. Read it back with majordomus plan show I3424.