Skip to content

Soft / routing / verifiable

Not every rule should live in the AI’s context. There are three kinds, and each one needs a different enforcement surface. Putting the wrong type in the wrong place is the most common reason “I added a rule and it still fails.”

Three types: soft guidance (persona, tone — works in context), process routing (skill triggers, action classification — platform orchestration), and verifiable rules (checkable output criteria — output validation). See the canonical table and annotations in wiki/concepts/constraint-taxonomy.md.

Soft guidance works in context because it biases token prediction in a direction the model can hold throughout generation — it never has to detect a precise moment. “Lead with the answer” shifts the whole distribution.

Routing and verifiable rules fail in context because they need a deterministic checkpoint — did this message trigger a skill?, does this output contain the required field? — and a model under task pressure doesn’t reliably self-gate. They’re enforced better by code that runs before or after the model, where the check can actually fire (and retry on failure).

You annotate each rule in the source file; the compile step routes by annotation:

  • softCONTEXT.md, injected into the model
  • routing + verifiableENFORCEMENT.md, consumed by your platform’s orchestration or validation layer

On a platform with no orchestration layer, ENFORCEMENT.md is concatenated as a fallback — with the known caveat that in-context compliance on those rule types is low. The annotation is the contract between your source files and whatever enforces them.

  • Added a rule, still fails → it’s probably routing/verifiable sitting in context. Move it to enforcement.
  • Removed a rule, nothing changed → it was already enforced elsewhere; the context copy was decoration.
  • More detail made it worse → see Why context rots.

Canonical node, with worked examples: wiki/concepts/constraint-taxonomy.md.