ADR 0192: static guidance earns delivery by the routing test
Status: accepted; gives the guidance-words ceiling its admission rule, builds on the moment-of-need channels of ADR 0172 and historical ADR 0185, and continues the practice ADR 0188 applied to one sentence.
Context
§discern now delivers operating knowledge to agents through three channels: the compiled guidance (static — read once at session start, decaying over a long session), the result envelope (hints, refusals, and messages arriving at the exact moment of a call), and the self-describing tool surface (descriptions and parameter schemas, always in an MCP session's context).
The static channel was governed only by a word ceiling, and the ceiling was being outgrown rather than enforced: the measured count tracked 825 → 900 in a week, with the limit raised twice — every addition individually justified, no addition ever asked to justify its channel. Meanwhile the logbook kept showing that static words don't survive to their moment: skipped-prepare fired on ten branches while the prepare line sat in both static surfaces, and the unchanged-tree rerun loop only ended when a refusal (historical ADR 0185) replaced prose. Delivery at the moment of need also asks nothing of a model's recall, which matters because discern serves every coding agent, not only the strongest.
Decision
§A sentence earns a place in the bundled guidance templates only by the routing test: it must be needed before the first relevant tool call, and that call must be unable to deliver it. Mechanics that an envelope, a refusal, or a tool description already carries belong to that channel alone.
Two standing exemptions, both because no verb-mediated channel can arrive in time:
- The channel-down fallback. The CLI troubleshooting path is read when the MCP channel is unavailable, so it must be static.
- Destructive-class rules that verb-bypassing edits can violate — working on the trunk, adopting another effort's worktree. A file edit calls no verb first, so static prose (and session hooks) are the only channels that can pre-empt it. These rules may repeat across surfaces; the redundancy is protective, and weaker models lean on it.
Delivery is judged at the client floor. A client that loads tool schemas only on demand cannot learn from a schema that a capability exists, so the existence of a discovery surface — the map's search — earns a static line even while its mechanics live in the schema.
The ceiling is pinned at the routed value and moves only for sentences that pass the test.
Consequences
§- The guidance reads as pre-call policy; mechanics live where they fire. A change to a verb's mechanics no longer needs a guidance edit.
- The behaviour detectors act as the guidance's regression suite: a detector that keeps firing indicts a delivery channel, and the response ladder is enforce > refuse > hint > static prose — never more static words.
- The shipped corpus is registry-guarded (
tests/guidance_corpus_guard_test.ts), so routing prose between channels cannot strand a stale command, tool, or skill reference. - The test is applied in review, recorded here and beside the standard in
discern.toml; it is judgment, not lint — a machine cannot decide what a call can deliver.