Error index

Every diagnostic the Resilient compiler emits gets a stable code — E0001, E0002, etc. When you see one in your terminal or IDE, look it up here for a minimal reproducing example and the standard fix.


Layout

Codes are grouped by the pipeline stage that can emit them:

  • E0001..E0003 — parser
  • E0004..E0006, E0015 — name resolution
  • E0007, E0013, E0016, E0017 — type checker
  • E0008, E0009, E0014, E0018 — runtime (interpreter / VM / JIT)
  • E0010, E0019 — contracts (requires / ensures)
  • E0011, E0012 — declarations / bindings
  • E0020 — effects / purity
  • E0021 — trait objects (dyn Trait)

Numbers are sticky: once assigned, a code is never reused. If a diagnostic is removed, its code is retired but the docs page stays as a redirect so external cheat sheets don’t silently break.

Status

RES-206a shipped the initial registry + docs pages for the first ten codes. RES-4115 (E-E4) extended the registry to E0011..E0021, added the rz explain E00NN / rz errors list CLI subcommands, migrated the high-traffic typechecker/parser/runtime call sites to emit their code behind RESILIENT_RICH_DIAG=1 (byte-identical output otherwise, so .expected.txt goldens stay pinned), and added two CI-enforced guards:

  • docs_error_registry_generation_smoke.rs validates every page’s front matter (title, parent, nav_order, permalink) and heading against diag::codes, and checks this index links every registered code in registry order — so the registry and the docs site can’t silently drift apart.
  • codeless_diagnostic_lint_smoke.rs fails the build if a new render_*_error funnel function (or Diagnostic::new call site outside diag.rs’s own tests) is added without a registered code, via a shrinking allowlist of the pre-existing legacy call sites that still return a bare, codeless String.

Browse

See the sidebar for the full list, or jump directly:


Table of contents