Skip to content

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.
choose openEsc close