{
  "registry": "grip.denial-reasons",
  "grip": "1.0-draft.2",
  "source": "Appendix A — Denial-reason registry (initial)",
  "extension_policy": "Public proposal. Implementation-defined denials MUST use GRIP_DENY_POLICY with a namespaced X_{VENDOR}_* subcode plus prose; conformance reporting surfaces each deployment's POLICY fraction.",
  "codes": [
    { "code": "GRIP_DENY_SCOPE", "meaning": "act outside the Grant's allow under the dominant-class matching rule", "rule": 3 },
    { "code": "GRIP_DENY_BUDGET", "meaning": "a present budget axis of any ancestor would be exceeded", "rule": 4, "precedence": "evaluated BEFORE any Stop is raised (§4.5)" },
    { "code": "GRIP_DENY_EXPIRED", "meaning": "Grant, Mandate, or the referenced Stop expired at act time", "rule": 3 },
    { "code": "GRIP_DENY_STOP_REQUIRED", "meaning": "settle-class act with no approved, unconsumed, act-matching Stop", "rule": 5 },
    { "code": "GRIP_DENY_STOP_REJECTED", "meaning": "the referenced Stop was rejected", "rule": 5 },
    { "code": "GRIP_DENY_SETTLED", "meaning": "the Mandate has a terminal Settlement", "rule": 6 },
    { "code": "GRIP_DENY_RATE", "meaning": "implementation concurrency/fairness bound, including stop.request discipline", "rule": null },
    { "code": "GRIP_DENY_UNKNOWN_CRIT", "meaning": "object carries an unimplemented critical extension or unmeterable budget axis; decision.crit_object names it", "rule": null, "note": "A branch denied for this reason receives the verdict unevaluable-critical, not chain failure (§4.6)." },
    { "code": "GRIP_DENY_POLICY", "meaning": "implementation-defined; namespaced subcode + prose required", "rule": null }
  ]
}
