ADR 0016: Explain stability contract

Decision

Explain output is structured data with stable semantics; rendering is not stable. Clients — web UIs, MCP agents, chat surfaces, dashboards — bind to the reason data (:reason keywords like :fact/missing, :role/unsatisfied, plus their payload keys), never to English strings.

The compatibility rules:

Context

Explain is the product surface, which makes it the API everyone will integrate against. Without this contract, MCP and UI clients would inevitably couple to English strings, and improving a message would become a breaking change — freezing exactly the layer that must stay free to improve. The kernel-speaks-data rule (PLAN §5) already provides the mechanism; this ADR adds the promise.

Consequences

see history · edit this page