# M4b task 16: `brokerd`'s refusal without a runner says why **Branch:** `m4b` (run `git switch m4b`; `git status --short` must be empty, otherwise stop) **Commit subject:** `brokerd: the refusal without a runner names the missing [runner] section` ## Goal When `brokerd.toml` has no `[runner]` section, every allowed call is answered with the fixed sentence `REFUSING`. It still says `the runner arrives in M3b`, which stopped being true when M3b merged: the model, and the owner reading its answer, are told to wait for something that has already happened. Found in the M4b device check (review of 2026-09-24, finding 2). The sentence becomes: ```text no tool runner is configured: brokerd.toml has no [runner] section ``` It is still a fixed sentence (it reaches the model), so nothing else changes. ## Files - Copy: a **new version** of the given `crates/brokerd/tests/runner.rs` (one assertion: the new sentence) - Modify: `crates/brokerd/src/runner.rs`, `docs/implementer-log.md` - Do **not** change `crates/loopd/tests/broker_port.rs`: it has the old sentence as test data only, and `loopd` never checks it. ## The change, exactly In `crates/brokerd/src/runner.rs`, the line ```rust pub const REFUSING: &str = "the runner arrives in M3b"; ``` becomes ```rust pub const REFUSING: &str = "no tool runner is configured: brokerd.toml has no [runner] section"; ``` The doc comment above it stays as it is. ## Steps - [ ] **1. Copy.** `git switch m4b`, then `cp docs/plans/M4b/files/crates/brokerd/tests/runner.rs crates/brokerd/tests/` - [ ] **2. See it fail.** `cargo test -p brokerd --test runner`. Expected: one test fails, `the_production_runtime_refuses_every_call`, on the sentence. - [ ] **3. Make the change.** Run `cargo fmt --all`. - [ ] **4. See it pass.** `cargo test -p brokerd --test runner`: every test passes. Then `cargo test -p brokerd`: every suite passes. - [ ] **5. Run the gate.** `make gate`. Expected last line: `gate: ok`, with the same number of tests as before this task (about 846). - [ ] **6. Log and commit.** `git add crates/brokerd docs/implementer-log.md Cargo.lock && git commit` ## Done when - `cargo test -p brokerd` passes; `make gate` prints `gate: ok`. ## Stop and report if - Any other test fails because of the sentence. Do not change that test.