The review of tasks 01 to 15 goes in the implementer log, with the device check against the owner's Mattermost. Three follow-ups: - 16: the refusal without a runner says why. - 17: the texts that say who asked. - 18: approvals from non-approvers in direct or group messages go to an approver. Task 14's given serve_approvals.rs becomes serve_approvals.rs-task14, since task 18 hands over a new version. Tip T31 is added. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
64 lines
2.3 KiB
Markdown
64 lines
2.3 KiB
Markdown
# 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.
|