> ## Documentation Index
> Fetch the complete documentation index at: https://docs.canary.effectiveai.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Check messages

> Look up a compiler message by its code, with an example that gets it and the fix.

*Generated from the `rslc` compiler.*

`rslc check` prints one message for each problem it finds. A rater passes when the check finds zero problems. Each message starts with a stable code:

```text theme={"languages":{"custom":["languages/rsl.tmLanguage.json"]}}
error: E-PROVENANCE rater.rsl:17:5: constant `rate_per_1000` has no citation
  = because: every filed number cites the filing region that states it; a number no filing states says why in `[reason: "…"]`
  = help: cite the region that states it, `rate_per_1000 [cite: manual:p12] = …`, or say why no filing does: `rate_per_1000 [reason: "unit conversion"] = …`
  = applicability: manual
```

| Part | Meaning |
| - | - |
| `E-PROVENANCE` | The code. Look it up on this page, or run `rslc explain E-PROVENANCE`. |
| `rater.rsl:17:5` | The file, the line and the column. |
| `because` | The rule the code states. |
| `help` | The rewrite that satisfies the rule. |
| `applicability` | `machine`: a tool applies the rewrite as written. `placeholders`: fill each placeholder first. `manual`: the rewrite needs a decision. |

`rslc check --json` gives the same messages as one JSON value, for a tool.

Each code links to an explanation, an example rater that gets the message, and the fix.

## Calculations that can fail

A calculation gives a value for every request the rater accepts. These messages name a request that leaves a calculation short of a value.

| Code | Message |
| - | - |
| [`E-CYCLE`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/calculations#e-cycle) | A calculation must avoid reading its own value |
| [`E-OPTION-MATCH`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/calculations#e-option-match) | An optional value needs both match arms |
| [`E-MATCH`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/calculations#e-match) | A match needs an arm for every value |
| [`E-TOPN-LIMIT`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/calculations#e-topn-limit) | A topn limit must be a whole count |
| [`E-LOOKUP-GAP`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/calculations#e-lookup-gap) | A lookup needs a row for every key |
| [`E-ROOT`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/calculations#e-root) | A root needs a valid value and degree |
| [`E-POW-EXPONENT`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/calculations#e-pow-exponent) | A power needs an exponent it computes exactly |
| [`E-KEY-RANGE`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/calculations#e-key-range) | A lookup key must stay inside the bands |
| [`E-KEY-HOLE`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/calculations#e-key-hole) | A calculated band key needs a filed rounding |
| [`E-INTERP-RANGE`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/calculations#e-interp-range) | An interpolated key stays between the filed points |
| [`E-DIV-ZERO`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/calculations#e-div-zero) | A divisor must exclude zero |
| [`E-DATE-RANGE`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/calculations#e-date-range) | A shifted date must stay in the calendar |
| [`E-EMPTY-FOLD`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/calculations#e-empty-fold) | Max, min and avg need one element |
| [`E-QUADRATIC`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/calculations#e-quadratic) | Walk a list once, on its parent |
| [`E-MAP-DOMAIN`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/calculations#e-map-domain) | A map read must name a defined member |

## Numbers and rounding

RSL calculates with exact numbers. These messages concern precision, rounding and ranges.

| Code | Message |
| - | - |
| [`E-QUANTUM`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/numbers#e-quantum) | A type name has one precision |
| [`E-ROUND`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/numbers#e-round) | A rounding states its scale and mode |
| [`E-FOLD-KEY`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/numbers#e-fold-key) | A stepwise fold names its order |
| [`E-COMPUTED-RANGE`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/numbers#e-computed-range) | A calculation proves its declared range |

## Inputs and rules

An input states the values it accepts. These messages concern input types, ranges and business rules.

| Code | Message |
| - | - |
| [`E-ENUM-NARROW`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/inputs#e-enum-narrow) | A narrowed enum removes members of its parent |
| [`E-ENUM-BACKING`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/inputs#e-enum-backing) | A CSV-backed enum needs its member file |
| [`E-RANGE`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/inputs#e-range) | A range states two bounds in increasing order |
| [`E-DEFAULT`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/inputs#e-default) | An omitted input needs an explicit value |
| [`E-INPUT-GENERATE`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/inputs#e-input-generate) | The rules admit at least one request |
| [`E-ENUM-NUMERIC`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/inputs#e-enum-numeric) | An ordered scale of numbers is a number |
| [`E-CODE-PATTERN`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/inputs#e-code-pattern) | A code value matches its declared pattern |
| [`E-INPUT-DOMAIN`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/inputs#e-input-domain) | A number input states its precision and range |
| [`E-REFINEMENT`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/inputs#e-refinement) | A rule takes the form its position accepts |
| [`E-ANNOTATION`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/inputs#e-annotation) | A refusal code follows its rule, in capitals |
| [`E-REFINE-CANONICAL`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/inputs#e-refine-canonical) | A bound on an input is a range |
| [`E-REFINE-UPWARD`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/inputs#e-refine-upward) | A rule reads its own record and below |
| [`E-DERIVABLE-INPUT`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/inputs#e-derivable-input) | Calculate a value that other inputs fix |

## Questions, choices and shared facts

An input carries the question a person answers. These messages concern follow-up inputs, question text, choices and shared facts.

| Code | Message |
| - | - |
| [`E-FOLLOW-UP-READ`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/questions#e-follow-up-read) | Read a follow-up input where its condition holds |
| [`E-FOLLOW-UP-TYPE`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/questions#e-follow-up-type) | A follow-up input takes a plain type |
| [`E-FROM`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/questions#e-from) | A suggestion's source stays out of the price |
| [`E-QUESTION`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/questions#e-question) | A question names what its record holds |
| [`E-QUESTION-WHY`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/questions#e-question-why) | A rater's own question says why |
| [`E-CHOICE`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/questions#e-choice) | A choice states its default |
| [`E-CHOICE-SHAPE`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/questions#e-choice-shape) | A shared choice states its shape |
| [`E-CHOICE-CODE`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/questions#e-choice-code) | A choice sells one shared coverage code |
| [`E-FACT-PACKAGE`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/questions#e-fact-package) | A shared-facts package holds only facts |
| [`E-FACT-REDECLARED`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/questions#e-fact-redeclared) | A shared fact is declared once |
| [`E-FACT-BINDING`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/questions#e-fact-binding) | A binding names a fact its package declares |
| [`E-NARROW`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/questions#e-narrow) | A narrowed shared fact needs a decline code |

## Tables

A table declares its key dimensions and its columns. These messages concern table declarations, CSV files and lookups.

| Code | Message |
| - | - |
| [`E-TABLE-COL`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/tables#e-table-col) | Each table cell fits its declared column |
| [`E-LOOKUP-SYNTAX`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/tables#e-lookup-syntax) | A table read uses its checked spelling |
| [`E-DIMENSION`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/tables#e-dimension) | Dimension types are well formed and key tables |
| [`E-BAND-SENTINEL`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/tables#e-band-sentinel) | An outer band is open at its end |
| [`E-BAND-DEGENERATE`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/tables#e-band-degenerate) | Each band cut appears once |
| [`E-DECIMAL-SCALE`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/tables#e-decimal-scale) | Each number lies on its declared precision |
| [`E-TABLE-WILDCARD`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/tables#e-table-wildcard) | Each key cell names one exact value |
| [`E-LOOKUP-OVERLAP`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/tables#e-lookup-overlap) | Each table key appears on one row |
| [`E-OTHERWISE-DEAD`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/tables#e-otherwise-dead) | An `otherwise` row covers a key |
| [`E-INTERP-KEY`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/tables#e-interp-key) | An interpolated table is keyed by filed points |
| [`E-MAP-DATA-SIZED`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/tables#e-map-data-sized) | Read one member of a CSV-backed enum |
| [`E-KEY-TYPE`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/tables#e-key-type) | Use `Key(T)` on an input or table column |
| [`E-GEOGRAPHY`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/tables#e-geography) | A geography declares every field of its grid |

## Names, types and records

These messages concern names, types, records and the values that pass between them.

| Code | Message |
| - | - |
| [`E-UNRESOLVED`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/names#e-unresolved) | Every name matches a declaration |
| [`E-DATE`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/names#e-date) | A date literal names a real calendar day |
| [`E-PATTERN`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/names#e-pattern) | A match arm uses a pattern RSL knows |
| [`E-TYPE`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/names#e-type) | Each value has the type its place expects |
| [`E-DATA-AS-CODE`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/names#e-data-as-code) | A long list of values needs a file |
| [`E-SELECT-TIE`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/names#e-select-tie) | A selection states how a tie breaks |
| [`E-KEYED-ORDER`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/names#e-keyed-order) | A keyed list is unordered |
| [`E-UNION`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/names#e-union) | A union arm holds inputs only |
| [`E-UNION-USE`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/names#e-union-use) | A union is read through a match |
| [`E-RECORD-ROOT`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/names#e-record-root) | A rater has one top record |
| [`E-RECORD-POSITION`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/names#e-record-position) | Each record type sits at one field |
| [`E-RECORD-RECURSIVE`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/names#e-record-recursive) | The record tree is finite |
| [`E-REF-SCOPE`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/names#e-ref-scope) | A reference points into a keyed list |
| [`E-ANCESTOR-READ`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/names#e-ancestor-read) | A type name reads an enclosing record |
| [`E-INTERNAL`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/names#e-internal) | Report a compiler fault to Effective |

## The header and the outcomes

The `spec` block identifies a rater, and `RatingOutcomes` selects its results.

| Code | Message |
| - | - |
| [`E-RATING-OUTCOME`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/header#e-rating-outcome) | A rater declares its premium outcome |
| [`E-RATER-METADATA`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/header#e-rater-metadata) | The header names carrier, state, product and date |
| [`E-RATER-METADATA-INVALID`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/header#e-rater-metadata-invalid) | The header names the rater with product |
| [`E-OUTCOME-ROUND`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/header#e-outcome-round) | A rating outcome is a rounded value |
| [`E-RSL-VERSION`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/header#e-rsl-version) | A rater declares an RSL version rslc reads |
| [`E-RSL-PATCH`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/header#e-rsl-patch) | A rule clause needs RSL 0.4.1 |

## Citations

Each filed number cites the document that states it.

| Code | Message |
| - | - |
| [`E-PROVENANCE`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/citations#e-provenance) | A filed number needs a citation |
| [`E-SOURCE-SCHEMA`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/citations#e-source-schema) | A source has an artifact and a kind |
| [`E-CITATION`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/citations#e-citation) | A citation names a declared source and region |
| [`E-PROVENANCE-RUNTIME`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/citations#e-provenance-runtime) | Provenance stays out of rating data |
| [`E-PROVENANCE-COMMENT`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/citations#e-provenance-comment) | Evidence belongs in a citation |

## Tidy raters

These messages keep a rater short: each one names a construct that a simpler form replaces.

| Code | Message |
| - | - |
| [`E-ORPHAN-COMPUTED`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/tidy#e-orphan-computed) | Every calculation feeds a rating outcome |
| [`E-UNREAD-INPUT`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/tidy#e-unread-input) | Every input rates or decides eligibility |
| [`E-TABLE-UNUSED-DIM`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/tidy#e-table-unused-dim) | Each table dimension changes an output |
| [`E-IF-AS-TABLE`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/tidy#e-if-as-table) | A long band chain belongs in a table |
| [`E-TABLE-DUPLICATE`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/tidy#e-table-duplicate) | Each filed column lives in one table |
| [`E-TABLE-SINGLE-MEMBER-KEY`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/tidy#e-table-single-member-key) | A table key has two or more values |
| [`E-HOIST`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/tidy#e-hoist) | A calculation belongs where its value varies |
| [`E-TABLE-UNUSED`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/tidy#e-table-unused) | A lookup reads every table and column |
| [`E-TABLE-CONSTANT-COLUMN`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/tidy#e-table-constant-column) | A column with one value is a constant |
| [`E-TABLE-FORMULA`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/tidy#e-table-formula) | A straight-line table is a formula |

## The rating manual

Labels, notes, stages and concepts describe a rater as its manual reads. These messages compare that description with the calculations.

| Code | Message |
| - | - |
| [`E-CONCEPT-UNKNOWN`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/manual#e-concept-unknown) | A concept type names a vocabulary concept |
| [`E-CONCEPT-TARGET`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/manual#e-concept-target) | A concept sits where its vocabulary allows |
| [`E-CONCEPT-UNIT`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/manual#e-concept-unit) | A concept's unit matches the value's type |
| [`E-CONCEPT-SHAPE`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/manual#e-concept-shape) | A concept's formula has the concept's shape |
| [`E-UNIT-MIX`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/manual#e-unit-mix) | Arithmetic combines units that agree |
| [`E-STAGE-UNDECLARED`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/manual#e-stage-undeclared) | A step names a stage that `Stages` declares |
| [`E-STAGE-MISSING`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/manual#e-stage-missing) | Every step joins a stage |
| [`E-STAGE-ORDER`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/manual#e-stage-order) | A stage reads its own or earlier stages |
| [`E-GROUP`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/manual#e-group) | A `collect` group needs a title and members |
| [`E-NOTE-MISSING`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/manual#e-note-missing) | A step or its stage has a note |
| [`E-NOTE-SENTENCE`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/manual#e-note-sentence) | A note is one short sentence |
| [`E-MEANING-KEY`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/manual#e-meaning-key) | A record's brackets take `label` and `note` |
| [`E-ROUND-SPLIT`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/manual#e-round-split) | A rounding stays with its arithmetic |
| [`E-MAX-BRANCH`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/manual#e-max-branch) | Write the larger of two values with `max` |
| [`E-CHAIN`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/manual#e-chain) | Arithmetic reads named values |
| [`E-ROLE-FLOW`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/manual#e-role-flow) | The premium build reads each role its way |
| [`E-ROLE-CONCEPT`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/manual#e-role-concept) | A concept's role matches its use |
| [`E-CONCEPT-PARENT`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/manual#e-concept-parent) | A concept has a role |
| [`E-VOCABULARY`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/manual#e-vocabulary) | The spec names a vocabulary rslc knows |

## Guidelines

A guideline uses a rater and adds roles, question owners and referrals.

| Code | Message |
| - | - |
| [`E-USE`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/guidelines#e-use) | Read a used program through its outcomes |
| [`E-ROLE`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/guidelines#e-role) | A role is declared before it is named |
| [`E-REFER`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/guidelines#e-refer) | Each referral has its own name |

## Older raters and placeholders

These messages name a form from an earlier RSL version, or a part of a rater that is still a placeholder.

| Code | Message |
| - | - |
| [`E-LOOKUP-TOTAL`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/older#e-lookup-total) | State a lookup's default in the table |
| [`E-ENTITY-REL`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/older#e-entity-rel) | Give each record one enclosing record |
| [`E-AXIS-SUBSET`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/older#e-axis-subset) | Give each map key one declaration |
| [`E-HOLE`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/older#e-hole) | Replace a placeholder with a calculation |
| [`E-ROUND-INC`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/older#e-round-inc) | Round to a scale and a mode |
| [`E-TABLE-MODE`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/older#e-table-mode) | Declare a table with dims and bands |
| [`E-REQUIRES`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/older#e-requires) | Keep exact constraint forms in constraints |
| [`E-REJECT`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/older#e-reject) | A reject needs a code and message |
| [`E-MERGE-FIDELITY`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/older#e-merge-fidelity) | Declare each map once, over one enum |
| [`E-BAND-COVERAGE`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/older#e-band-coverage) | Cover every lookup key with a band |
| [`E-EXTERN-REMOVED`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/older#e-extern-removed) | Declare an external table as an ordinary table |
| [`E-TEXT-REMOVED`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/older#e-text-removed) | Replace Text with a code or an enum |
| [`E-AXIS-INDEX`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/older#e-axis-index) | Read a map at a key it defines |
| [`E-REQUIRES-REMOVED`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/older#e-requires-removed) | Write a record rule as a refinement |
| [`E-RANGE-REMOVED`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/older#e-range-removed) | Write a value range as a refinement |
| [`E-AXES-REMOVED`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/older#e-axes-removed) | Replace an axis with an enum and maps |
| [`E-RELATION-REMOVED`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/older#e-relation-removed) | Declare records and contain them by type |
| [`E-REJECT-REMOVED`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/older#e-reject-removed) | State a refusal as an input refinement |
| [`E-OTHERWISE-REJECT-REMOVED`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/older#e-otherwise-reject-removed) | Refuse an unrated key at the input |
| [`E-CHECKED-REMOVED`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/older#e-checked-removed) | Prove a range from the inputs |
| [`E-SLOT-REMOVED`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/older#e-slot-removed) | Let the formula state the rule |
| [`E-INVARIANT`](https://docs.canary.effectiveai.app/rsl/reference/check-messages/older#e-invariant) | Meet each structural rule of a rater |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.