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

# The D-code registry

Every stable error code, generated from the one registry the compiler
enforces. Codes + line numbers are the conformance-normative half of an
expected-error file; the kebab-case names are mnemonics for humans and
grep — not part of the contract. Message prose and suggestions are
non-normative and may be reworded freely.

**GENERATED FILE — do not edit.** The source of truth is
`/packages/lang/src/schema/errors.ts`. Edit the registry and run
`pnpm gen:errors`; CI pins this file to the generator's output. Spec and
docs prose cite codes from this file and never invent them — when adding
a condition, take the block's stated next free code.

Rules of the registry (from the source): a code names one semantic
condition; several throw sites may share a code, one site never emits
two; codes are NEVER renumbered or reused — a retired condition keeps
its code, marked retired below.

## D01xx — lexical (tokenize)

| Code  | Name                            | Status |
| ----- | ------------------------------- | ------ |
| D0101 | `unterminated-string`           | active |
| D0102 | `bad-length-literal`            | active |
| D0103 | `unexpected-character`          | active |
| D0104 | `hyphenated-name-before-length` | active |

**Next free code in this block: D0105.** New conditions take the next number; gaps below it are deliberate growth room, never free.

## D02xx — statement syntax

| Code  | Name                                     | Status                                                                                                    |
| ----- | ---------------------------------------- | --------------------------------------------------------------------------------------------------------- |
| D0201 | `unexpected-end-of-line`                 | active                                                                                                    |
| D0202 | `expected-word`                          | active                                                                                                    |
| D0203 | `expected-name`                          | active                                                                                                    |
| D0204 | `length-needs-units`                     | active                                                                                                    |
| D0205 | `expected-length`                        | active                                                                                                    |
| D0206 | `expected-string`                        | active                                                                                                    |
| D0207 | `expected-punctuation`                   | active                                                                                                    |
| D0208 | `unexpected-trailing-tokens`             | active                                                                                                    |
| D0209 | `missing-statement-keyword`              | active                                                                                                    |
| D0210 | `reserved-statement`                     | active                                                                                                    |
| D0211 | `unknown-statement`                      | active                                                                                                    |
| D0212 | `id-shadows-reserved-word`               | active                                                                                                    |
| D0213 | `unexpected-token-in-statement`          | active                                                                                                    |
| D0220 | `metric-not-in-v0`                       | active                                                                                                    |
| D0221 | `unknown-unit-system`                    | active                                                                                                    |
| D0222 | `bad-grid-axis`                          | active                                                                                                    |
| D0223 | `walltype-width-expression`              | active                                                                                                    |
| D0224 | `walltype-needs-width-or-layers`         | active                                                                                                    |
| D0225 | `core-layers-not-contiguous`             | active                                                                                                    |
| D0226 | `retired-justify-spelling`               | active                                                                                                    |
| D0227 | `unknown-justification`                  | active                                                                                                    |
| D0228 | `wall-top-and-height`                    | active                                                                                                    |
| D0229 | `opening-from-renamed`                   | active                                                                                                    |
| D0230 | `not-a-direction-keyword`                | active                                                                                                    |
| D0231 | `bad-swing-direction`                    | active                                                                                                    |
| D0232 | `door-flip-ambiguous`                    | active                                                                                                    |
| D0233 | `opening-needs-width`                    | active                                                                                                    |
| D0234 | `coordinate-pair-or-line-datum-expected` | active                                                                                                    |
| D0235 | `carrier-clause-needs-first-person-side` | active                                                                                                    |
| D0236 | `carrier-extent-not-a-datum`             | active                                                                                                    |
| D0237 | `wall-type-leads-the-statement`          | active                                                                                                    |
| D0238 | `wall-end-expression-needs-a-datum`      | active                                                                                                    |
| D0239 | `door-leads-with-its-type`               | active                                                                                                    |
| D0240 | `type-parameter-needs-literal`           | active                                                                                                    |
| D0241 | `type-omits-required-parameter`          | active                                                                                                    |
| D0242 | `kind-reserved`                          | active                                                                                                    |
| D0243 | `unknown-type-parameter`                 | active                                                                                                    |
| D0244 | `delegation-needs-value-type`            | active                                                                                                    |
| D0245 | `unquoted-text-value`                    | active                                                                                                    |
| D0246 | `instance-outside-type-declaration`      | active                                                                                                    |
| D0247 | `required-marker-misplaced`              | active                                                                                                    |
| D0248 | `block-colon-without-block`              | active                                                                                                    |
| D0249 | `unexpected-indent`                      | active                                                                                                    |
| D0250 | `inconsistent-block-indent`              | active                                                                                                    |
| D0251 | `statement-has-no-block-form`            | active                                                                                                    |
| D0252 | `block-line-holds-one-parameter`         | active                                                                                                    |
| D0253 | `on-renamed-along`                       | active                                                                                                    |
| D0254 | `room-label-renamed-name`                | active                                                                                                    |
| D0255 | `declaration-missing-id`                 | active                                                                                                    |
| D0256 | `view-kind-reserved`                     | active                                                                                                    |
| D0257 | `unknown-view-kind`                      | active                                                                                                    |
| D0258 | `view-body-reserved`                     | active                                                                                                    |
| D0259 | `level-height-and-top`                   | retired v0.4 decision 83 — `height` beside `above` is legal (the override)                                |
| D0260 | `level-needs-height-or-top`              | retired v0.4 decision 83 — a level with neither is legal syntax; the missing story is D0526 at resolution |
| D0261 | `view-range-word-anchored`               | active                                                                                                    |
| D0262 | `one-view-per-file`                      | active                                                                                                    |
| D0263 | `view-file-content`                      | active                                                                                                    |
| D0264 | `kind-reserved-as-id`                    | active                                                                                                    |
| D0265 | `section-takes-no-level`                 | active                                                                                                    |
| D0266 | `plan-needs-of`                          | active                                                                                                    |
| D0267 | `section-axis-unknown`                   | active                                                                                                    |
| D0268 | `section-axis-mixed`                     | active                                                                                                    |
| D0269 | `section-trim-not-anchored`              | active                                                                                                    |
| D0270 | `plan-range-takes-length`                | active                                                                                                    |
| D0272 | `window-needs-sill`                      | active                                                                                                    |
| D0273 | `level-top-retired`                      | active                                                                                                    |
| D0274 | `parameter-reserved`                     | active                                                                                                    |
| D0275 | `opening-needs-height`                   | active                                                                                                    |

**Next free code in this block: D0276.** New conditions take the next number; gaps below it are deliberate growth room, never free.

## D03xx — reference spelling & lookup

| Code  | Name                                     | Status                                                                                                             |
| ----- | ---------------------------------------- | ------------------------------------------------------------------------------------------------------------------ |
| D0301 | `wrong-reference-kind`                   | active                                                                                                             |
| D0302 | `reserved-reference`                     | active                                                                                                             |
| D0303 | `unknown-qualified-datum`                | retired 2026-09-17 — an unknown `grid.X` / `level.X` in an expression is D0305, like every unknown reference       |
| D0304 | `element-anchors-reserved`               | retired v0.2 session 1 — accessors shipped (D0310+)                                                                |
| D0305 | `unknown-reference`                      | active                                                                                                             |
| D0306 | `bare-reference`                         | active                                                                                                             |
| D0307 | `too-many-ambiguous-names`               | retired 2026-09-17 — a bare name never resolves, so it is never ambiguous; a bare spelling is D0306                |
| D0310 | `accessor-unknown-element`               | retired 2026-09-17 — an accessor on an unknown element is D0305, the one unknown-reference error                   |
| D0311 | `accessor-unknown-datum`                 | active                                                                                                             |
| D0312 | `accessor-wrong-category`                | active                                                                                                             |
| D0313 | `line-datum-in-expression`               | active                                                                                                             |
| D0314 | `opening-datum-outside-host-measurement` | active                                                                                                             |
| D0315 | `datum-name-reserved-or-pending`         | active                                                                                                             |
| D0316 | `second-person-travel-qualifier`         | active                                                                                                             |
| D0317 | `qualifier-not-applicable`               | active                                                                                                             |
| D0318 | `wall-not-axis-aligned`                  | active                                                                                                             |
| D0319 | `plane-datum-in-coordinate-slot`         | active                                                                                                             |
| D0320 | `top-anchor-bad-datum`                   | active                                                                                                             |
| D0321 | `opening-vertical-datum-unconsumable`    | active                                                                                                             |
| D0322 | `wall-datum-in-opening-measurement`      | active                                                                                                             |
| D0323 | `bad-carrier-ref`                        | active                                                                                                             |
| D0324 | `unknown-extent-ref`                     | retired 2026-09-17 — an unknown extent is D0305; the extent's shape errors keep their codes                        |
| D0325 | `room-anchored-to-element`               | active                                                                                                             |
| D0326 | `retired-datum-spelling`                 | active                                                                                                             |
| D0327 | `wall-face-needs-side`                   | active                                                                                                             |
| D0328 | `roomline-not-referenceable`             | retired 2026-09-17 — a roomline reference is D0301: a known category nothing may reference, with the leaf sentence |
| D0329 | `view-extent-anchored-to-element`        | active                                                                                                             |
| D0330 | `level-elev-anchored-to-element`         | active                                                                                                             |

**Next free code in this block: D0331.** New conditions take the next number; gaps below it are deliberate growth room, never free.

## D04xx — expressions & dimensional typing

| Code  | Name                         | Status |
| ----- | ---------------------------- | ------ |
| D0401 | `expected-closing-paren`     | active |
| D0402 | `expected-expression-factor` | active |
| D0403 | `missing-operator`           | active |
| D0404 | `no-negative-literal`        | active |
| D0410 | `bare-number-term`           | active |
| D0411 | `length-minus-position`      | active |
| D0412 | `position-plus-position`     | active |
| D0413 | `axis-mismatch-subtraction`  | active |
| D0414 | `position-scaling`           | active |
| D0415 | `area-not-in-v0`             | active |
| D0416 | `bad-divisor`                | active |
| D0417 | `division-by-zero`           | active |
| D0420 | `wrong-direction-grid`       | active |
| D0421 | `level-in-plan-slot`         | active |
| D0422 | `wrong-axis-position`        | active |
| D0423 | `unanchored-length`          | active |
| D0424 | `bare-number-in-slot`        | active |
| D0425 | `position-for-length-slot`   | active |
| D0426 | `unresolvable-expression`    | active |

**Next free code in this block: D0427.** New conditions take the next number; gaps below it are deliberate growth room, never free.

## D05xx — declarations & resolution

| Code  | Name                              | Status                                                                                                                         |
| ----- | --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
| D0501 | `duplicate-id`                    | active                                                                                                                         |
| D0502 | `datum-cycle`                     | active                                                                                                                         |
| D0503 | `failed-reference-cascade`        | active                                                                                                                         |
| D0504 | `opening-cycle`                   | active                                                                                                                         |
| D0505 | `multiple-levels`                 | retired v0.4 session 3e — multi-story shipped (decision 74); a second level is legal, and an element's ambiguous base is D0520 |
| D0506 | `ambiguous-opening-reference`     | retired 2026-09-17 — a reference names its category, so a bare id can never name two things; a bare spelling is D0306          |
| D0507 | `unknown-walltype`                | retired 2026-09-17 — an unknown walltype is D0305, like every unknown reference                                                |
| D0508 | `no-level-declared`               | active                                                                                                                         |
| D0509 | `unknown-level-reference`         | retired 2026-09-17 — an unknown level in `base`, `top` or `above` is D0305, like every unknown reference                       |
| D0510 | `unknown-host-wall`               | retired 2026-09-17 — an unknown host wall is D0305, like every unknown reference                                               |
| D0511 | `unknown-opening-reference`       | retired 2026-09-17 — an unknown measurement reference is D0305, like every unknown reference                                   |
| D0512 | `element-anchor-cycle`            | active                                                                                                                         |
| D0513 | `unknown-door-or-window-type`     | retired 2026-09-17 — an unknown doortype or windowtype is D0305, like every unknown reference                                  |
| D0514 | `parameter-fixed-by-type`         | active                                                                                                                         |
| D0515 | `delegated-parameter-missing`     | active                                                                                                                         |
| D0516 | `user-parameter-type-conflict`    | active                                                                                                                         |
| D0517 | `required-parameter-not-positive` | active                                                                                                                         |
| D0518 | `parameter-not-declared-by-type`  | active                                                                                                                         |
| D0519 | `unknown-viewtype`                | retired 2026-09-17 — an unknown viewtype is D0305, like every unknown reference                                                |
| D0520 | `element-level-ambiguous`         | active                                                                                                                         |
| D0521 | `file-level-statement-repeated`   | active                                                                                                                         |
| D0522 | `view-range-inverted`             | active                                                                                                                         |
| D0523 | `above-needs-standing-level`      | active                                                                                                                         |
| D0524 | `level-above-ambiguous`           | active                                                                                                                         |
| D0525 | `no-level-above`                  | active                                                                                                                         |
| D0526 | `level-needs-height`              | active                                                                                                                         |

**Next free code in this block: D0527.** New conditions take the next number; gaps below it are deliberate growth room, never free.

## D06xx — geometry & placement

| Code  | Name                                | Status                                                                                   |
| ----- | ----------------------------------- | ---------------------------------------------------------------------------------------- |
| D0601 | `zero-length-wall`                  | active                                                                                   |
| D0602 | `core-justify-unsupported`          | retired v0.4 session 2a — side × plane justify shipped (`justify left foc`, decision 66) |
| D0603 | `wall-top-below-base`               | active                                                                                   |
| D0604 | `grid-parallel-to-wall`             | active                                                                                   |
| D0605 | `wall-parallel-to-wall`             | active                                                                                   |
| D0606 | `reference-in-other-wall`           | active                                                                                   |
| D0607 | `opening-overflows-wall`            | active                                                                                   |
| D0608 | `extent-never-crosses-carrier`      | active                                                                                   |
| D0609 | `wall-not-clear-of-carrier`         | active                                                                                   |
| D0610 | `openings-overlap`                  | active                                                                                   |
| D0611 | `on-carrier-not-a-declared-datum`   | active                                                                                   |
| D0612 | `view-extent-inside-out`            | active                                                                                   |
| D0613 | `level-above-below-elev`            | active                                                                                   |
| D0614 | `section-depth-zero`                | active                                                                                   |
| D0615 | `section-trim-inverted`             | active                                                                                   |
| D0616 | `opening-overflows-wall-vertically` | active                                                                                   |

**Next free code in this block: D0617.** New conditions take the next number; gaps below it are deliberate growth room, never free.

## D07xx — graphic standard

| Code  | Name                          | Status |
| ----- | ----------------------------- | ------ |
| D0701 | `token-reference-unknown`     | active |
| D0702 | `token-reference-cycle`       | active |
| D0703 | `token-type-mismatch`         | active |
| D0704 | `token-value-invalid`         | active |
| D0705 | `scale-without-values`        | active |
| D0706 | `scale-context-unknown`       | active |
| D0707 | `role-unknown`                | active |
| D0708 | `category-unknown`            | active |
| D0709 | `hatch-not-seamless`          | active |
| D0710 | `object-style-missing`        | active |
| D0711 | `scale-follows-chain`         | active |
| D0712 | `material-word-claimed-twice` | active |
| D0713 | `construct-unsupported`       | active |
| D0714 | `dialect-unknown`             | active |
| D0715 | `source-unreadable`           | active |
| D0716 | `token-defined-twice`         | active |

**Next free code in this block: D0717.** New conditions take the next number; gaps below it are deliberate growth room, never free.
