Stable diagnostics are indexed by phase and code so callers can distinguish reader, normalization, runtime, warning, and resource outcomes.
Current guarantees
- E300–E340 cover unbound names, application, arity, assignment, pair/range/type/numeric faults, value contexts, letrec, user errors, exception flow, and stale escapes.
- E1xx belongs to reader/static normalization; W2xx/W3xx belongs to ordered warnings.
- ResourceLimit is deliberately outside catchable E3xx and is reported as its own outcome.
Stable runtime codes
| Code | Condition | Phase / catchability |
|---|---|---|
| E300 / E303 | unbound read / set! of unbound name | runtime / catchable |
| E301 / E302 | non-procedure application / arity mismatch | runtime / catchable |
| E310 / E311 / E312 | pair-list domain / range-index / primitive type | runtime / catchable |
| E313 / E314 | division by zero / non-finite production | runtime / catchable |
| E320 / E321 | value-count misuse / uninitialized letrec read | runtime / catchable |
| E330 / E331 / E332 | user error / uncaught raise / non-continuable handler return | runtime / signal-specific |
| E340 | escape continuation no longer active | runtime / catchable fault after consumption |
| ResourceLimit | declared recursion/resource ceiling | resource / not catchable as E3xx |
Boundaries
- Codes are stable contracts only where the runtime SSOT pins them.