D Pinned details (informative)
This appendix indexes the details identified in
PLAN.md §6.2.
The normative decisions are in the linked chapters and
appendix C. The reference pin is
5e7bbd5c26b0702c6fd652356b2289da0710ac3c, as defined in
§1.2.
Each example link names an exact id from an extractable iris example
block and leads to its containing section. Reference status distinguishes
examples that agree with the pin from deliberate Iris differences.
D.1 Input lexing
| PLAN.md §6.2 subitem | Decision | Normative section | Executable examples | Reference status |
|---|---|---|---|---|
| Integer token syntax | Complete signed decimal, within the signed 64-bit domain. | §4.4 | input-integer-spellings, input-integer-token |
Pinned reference |
| Float token syntax and exponents | Complete decimal binary64 conversion with the specified rounding and underflow rules. | §4.5 | input-float-spellings, input-float-normal-boundary, input-float-underflow |
Pinned reference |
Leading + for integers |
Accepted on input. | §4.4 | input-integer-spellings |
Pinned reference |
Leading + for floats |
Accepted on input. | §4.5 | input-float-spellings |
Pinned reference |
inf rejection |
Infinity spellings are rejected. | §4.5 | input-float-inf |
Pinned reference |
nan rejection |
NaN spellings are rejected. | §4.5 | input-float-nan |
Pinned reference |
| Hexadecimal integer rejection | Hexadecimal input is rejected. | §4.4 | input-integer-hex |
Pinned reference |
| Hexadecimal float rejection | Hexadecimal input is rejected. | §4.5 | input-float-hex |
Pinned reference |
| Default whitespace | Six ASCII bytes separate ordinary tokens. | §4.2 | input-ascii-whitespace, notation-crlf-tab |
Pinned reference |
| VT/FF versus line blanks | VT and FF separate tokens but remain in line text and do not satisfy pattern blanks. | §4.2, §7.2 | input-ascii-whitespace, input-line-blanks, input-pattern-blanks |
Pinned reference |
| CR LF and lone CR | Only LF ends a physical line; CR counts as one byte. | §4.1, §4.6 | input-line-endings, input-crlf-columns, input-cr-columns |
Pinned reference |
| Final newline | A final LF is optional, including for patterns. | §4.1, §7.3 | input-line-endings, structure-line-final-lf |
Pinned reference |
D.2 Positions and UTF-8
| PLAN.md §6.2 subitem | Decision | Normative section | Executable examples | Reference status |
|---|---|---|---|---|
| Column unit | Columns count bytes, independently of Unicode code points or grapheme clusters. | §4.6 | input-byte-columns |
Pinned reference |
| Tabs | A tab advances the column by one. | §4.6 | input-byte-columns, input-crlf-columns |
Pinned reference |
| Input-wide UTF-8 | Validate all supplied bytes after parameter admission and before execution; locate the first ill-formed subsequence. | §4.10 | input-invalid-utf8-comment, input-invalid-utf8-tail |
Iris difference C.1 |
| Read-value UTF-8 | Validate each actually read word/rest value, including when byte settings split valid input. | §4.10 | input-invalid-utf8-split |
Iris difference C.1 |
| Reader-spec UTF-8 | Validate the whole source before lexing, with a byte column on failure. | §5.1 | reader-invalid-utf8-string, reader-invalid-utf8-comment |
Iris difference C.2 |
D.3 Comment and stop prefixes
| PLAN.md §6.2 subitem | Decision | Normative section | Executable examples | Reference status |
|---|---|---|---|---|
| Prefix boundary class | The final and following bytes use ASCII letters, digits, and underscore. | §4.7 | input-comment-boundaries, input-prefix-underscore |
Pinned reference |
| Non-ASCII prefix/following bytes | Non-ASCII bytes are outside the boundary class. | §4.7 | input-prefix-nonascii, input-comment-boundaries |
Pinned reference |
| Stop boundary rule | Stop uses the same boundary test as comment. | §4.7 | input-stop-boundaries |
Pinned reference |
D.4 Work budgets
| PLAN.md §6.2 subitem | Decision | Normative section | Executable examples | Reference status |
|---|---|---|---|---|
| Idle limit and iterations | B = 2^20; charge each counted iteration that consumes no input; equality succeeds. | §10.1, §10.2 | budgets-idle-under, budgets-idle-equal, budgets-idle-over |
Pinned reference |
| Empty-row charges | Charge positive dimension prefixes of empty ordinary arrays and the row count of zero-column alphabets. | §10.2 | budgets-idle-empty-prefixes, values-alphabet-empty |
Pinned reference |
| Expression formula and charges | Limit B + 16*N; use the exact event and lifted-dependency tables. | §10.1, §10.3, §10.4 | budgets-effort-under, budgets-effort-equal, budgets-effort-over |
Pinned reference |
| Input byte length | N is the entire original byte length, including ignored tails and multibyte characters. | §10.1 | budgets-effort-raw-bytes |
Pinned reference |
| Counter lifetime | Both counters span the whole read or catalog operation without resets. | §10.1, §10.5 | budgets-idle-no-reset |
Pinned reference |
| Exact budget arithmetic | Mathematical nonnegative integers; the ordinary boundary examples do not reproduce the pinned overflow bug (see below). | §10.1 | budgets-effort-equal, budgets-effort-over |
Iris difference C.3 |
C.3 is a source-backed correction to overflow in the pinned budget arithmetic. No full-size reader/input reproduction was run; the linked ordinary boundary examples agree with the reference and cover accounting, not overflow. C.3 identifies the affected source expressions and the verification limit.
D.5 Integer semantics
| PLAN.md §6.2 subitem | Decision | Normative section | Executable examples | Reference status |
|---|---|---|---|---|
| 64-bit checked arithmetic | All integer arithmetic is exact or fails on overflow. | §8.4 | data-integer-limits, expressions-add-overflow, expressions-addition-underflow, expressions-negate-minimum |
Pinned reference |
| Truncating division | The quotient truncates toward zero. | §8.4 | expressions-integer-results, expressions-minimum-div-minus-one |
Pinned reference |
| Negative remainder operands | The remainder has the dividend's sign; minimum-int modulo -1 fails. | §8.4 | expressions-integer-results, expressions-minimum-mod-minus-one |
Pinned reference |
| Power results and overflow | Nonnegative exponents produce exact in-range powers; negative exponents and overflow fail. | §8.4 | expressions-power-results, expressions-power-overflow, expressions-negative-exponent |
Pinned reference |
D.6 Error order
| PLAN.md §6.2 subitem | Decision | Normative section | Executable examples | Reference status |
|---|---|---|---|---|
| Phase order | Complete-source lexing precedes parsing; global conflicts precede resolution, parameter admission, and execution. | §11.2 | errors-lex-before-syntax, errors-binding-before-type |
Pinned reference |
| Structural prechecks and component order | Structural-name conflicts precede expression resolution; type bounds resolve before dimensions. | §11.2 | errors-record-precheck-before-field, errors-resolver-type-before-dimensions |
Pinned reference |
| Runtime statement and operand order | Follow executed statements, each statement's local evaluation order, and operand order. | §11.2, §6.7, §8.1, §8.9 | expressions-operand-before-type, expressions-index-base-first, values-offset-list-timing |
Pinned reference |
| Sections ties | The first matching arm and first missing required arm use declaration order. | §7.8 | structure-sections-first-arm, structure-sections-missing |
Pinned reference |
| Deferred failures | Only specified instance rejections defer; later hard or immediately selected failures can become primary. | §9.5, §11.2 | instances-name-becomes-selected, instances-skipped-hard-error |
Pinned reference |
D.7 Name scopes
| PLAN.md §6.2 subitem | Decision | Normative section | Executable examples | Reference status |
|---|---|---|---|---|
| Ordinary record names | Use the remaining-repeat judgments and shallow whole-array exceptions. | §8.12 | expressions-whole-vs-record, expressions-ambiguous-repeat |
Pinned reference |
Explicit each names |
Current record inside its repeat; implicit quantification only in checks outside it. | §8.12, §7.6 | structure-record-each-only, expressions-each-outside |
Pinned reference |
| Nested repeats and field/list paths | Align nested records and require explicit paths for nested structural lists. | §8.12, §7.1 | expressions-nested-fields, expressions-nested-list-unqualified |
Pinned reference |
| Type-name scopes and bounds | Lexical visibility, no visible shadowing; bounds freeze when definitions execute. | §6.5 | values-type-forward, values-type-escape, values-range-timing |
Pinned reference |
D.8 Matrix layouts
| PLAN.md §6.2 subitem | Decision | Normative section | Executable examples | Reference status |
|---|---|---|---|---|
FULL_MATRIX |
Row-major, rectangular, without mirroring. | §6.8 | values-layout-full-matrix, values-layout-rectangular |
Pinned reference |
UPPER_ROW |
Strict upper triangle by row, then mirror. | §6.8 | values-layout-upper-row |
Pinned reference |
LOWER_ROW |
Strict lower triangle by row, then mirror. | §6.8 | values-layout-lower-row |
Pinned reference |
UPPER_DIAG_ROW |
Upper triangle including diagonal by row, then mirror. | §6.8 | values-layout-upper-diag-row |
Pinned reference |
LOWER_DIAG_ROW |
Lower triangle including diagonal by row, then mirror. | §6.8 | values-layout-lower-diag-row |
Pinned reference |
UPPER_COL |
Strict upper triangle by column, then mirror. | §6.8 | values-layout-upper-col |
Pinned reference |
LOWER_COL |
Strict lower triangle by column, then mirror. | §6.8 | values-layout-lower-col |
Pinned reference |
UPPER_DIAG_COL |
Upper triangle including diagonal by column, then mirror. | §6.8 | values-layout-upper-diag-col |
Pinned reference |
LOWER_DIAG_COL |
Lower triangle including diagonal by column, then mirror. | §6.8 | values-layout-lower-diag-col |
Pinned reference |
D.9 Instances and catalog
| PLAN.md §6.2 subitem | Decision | Normative section | Executable examples | Reference status |
|---|---|---|---|---|
| Ordinal selection and name priority | Complete integer conversion selects a 1-based ordinal before name matching. | §9.4 | instances-frame-selection, instances-ordinal-before-name |
Pinned reference |
| Name selection, duplicates, and empty names | Exact local derived names; first match wins; unusable names derive the empty string. | §9.4 | instances-text-selection, instances-duplicate-names, instances-empty-name-selection |
Pinned reference |
| Retained data, frames, and unread tail | Copy the retained frame into prefix data; explicit selection returns immediately. | §9.3, §9.4 | instances-frame-selection, instances-retained-frame-visible |
Pinned reference |
| Catalog entries, optionality, and order | Return instances, then optional name and failed vectors, in pass order. | §9.6 | catalog-failure-summaries, catalog-unusable-name, catalog-empty-file |
Pinned reference |
| Catalog rejection summaries and recovery | Retain exact first-rejection summaries; hard failures and missing-arm EOF abort. | §9.5, §9.6 | catalog-failure-summaries, catalog-missing-arm-at-end |
Pinned reference |
D.10 dzn output
| PLAN.md §6.2 subitem | Decision | Normative section | Executable examples | Reference status |
|---|---|---|---|---|
| Names, integers, and entry order | Frozen quoting set, exact signed decimal integers, definition order. | §B.1, §B.2 | dzn-scalars-names-order |
Pinned reference |
| Float text | Increasing-precision round-trip search with fixed notation thresholds and exponent spelling. | §B.3 | dzn-float-spellings |
Pinned reference |
| Floats just below 1e17 | Exact starting precision prevents omitted leaf text. | §B.3 | dzn-float-precision-gap |
Iris difference C.4 |
| String escaping | Quote UTF-8 bytes with the specified control escapes. | §B.4 | dzn-string-bytes |
Pinned reference |
| Rectangular, empty, ragged, and deep arrays | Choose matrix, arrayNd, or nested one-tuples from resulting shape and depth. | §B.5, §B.6 | dzn-rectangular-arrays, dzn-empty-arrays, dzn-ragged-and-deep |
Pinned reference |
| Catalog, separators, LF, and errors | Render catalog data unchanged; exact assignment separators and LF; render only successful data. | §B.7, §B.8 | dzn-catalog-summaries, dzn-empty-data |
Pinned reference |