Skip to content

Commit c62f319

Browse files
committed
T1.6c docs: the decision row renumbered E79
E78 is T1.28b's on lane 1b, under review, so this package's decision row, the register's DT-5 and PK-5 references, the design and tracker rows, as-built, date-rules.md, dependencies.md and the parser's and the adapter's comments name E79. as-built also says what no test holds: a day-first literal read before a D8 one gives no warning when the run ends with the core's error. Signed-off-by: Adi Wadaskar <awadaskar@nvidia.com>
1 parent 30be44e commit c62f319

12 files changed

Lines changed: 21 additions & 20 deletions

File tree

‎docs/design/rust-core/phase-0/date-rules.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ In short:
156156
The core reads a literal by these rules over its fields, written down from the reference's answers and held to them (`sdm-pql`'s `tests/dates.json`, `dates.rs`; decision E69); no pandas or `dateutil` code is ported.
157157

158158
- A literal whose every run of digits has four digits or fewer: D2's order; a year below 100 placed around the current year where no date field has three digits or more (D5); the year 0 only as a first field of exactly `0000`, a month and a day of one or two digits, and a time of day, if any, of fields of one or two digits (D7); a time of day by value, an hour to 23, a minute and a second to 59 (D6).
159-
- A literal with a run of five digits or more (D8) is refused by name from T1.6c, before any field is read: `validate_query` ends with `INVALID_REQUEST` naming the rule `date_literal_packed` and the literal's span, never its text (`Reading::Packed`; Phase 1 decision E78, register DT-5, the owner's decision of 2026-10-12). The reference reads such a literal through `dateutil`, as the core did from T1.6b to T1.6c, by these rules, kept as the record of what is refused:
159+
- A literal with a run of five digits or more (D8) is refused by name from T1.6c, before any field is read: `validate_query` ends with `INVALID_REQUEST` naming the rule `date_literal_packed` and the literal's span, never its text (`Reading::Packed`; Phase 1 decision E79, register DT-5, the owner's decision of 2026-10-12). The reference reads such a literal through `dateutil`, as the core did from T1.6b to T1.6c, by these rules, kept as the record of what is refused:
160160
- a first field of six digits is a year, month and day of two digits each, in D2's order, the year placed by D5; of eight, a four-digit year, a month and a day; of twelve, then an hour and minutes; of fourteen, then seconds;
161161
- after such a field, each of the other two date fields, in order: with `-` as the separator once an hour is known, a UTC offset west of Greenwich (`HHMM`, or one or two digits of hours), the later one overriding; otherwise two or four digits are an hour (and minutes) when no hour is known yet, six digits an `HHMMSS` time; anything else is refused;
162162
- any other first field: the three date fields in D2's order, a field of three digits or more a year as written, two such refused (D9), the year placed by D5 only where no date field has three digits or more (the long run then is in the time of day);

‎docs/design/rust-core/phase-1/as-built.md‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -402,12 +402,13 @@ The checks of T1.19's former exit, each with the seeded fault that fails it (fil
402402

403403
## T1.6c
404404

405-
D8 date literals refused by name (the owner's decision of 2026-10-12; decision E78; register DT-5 and PK-5), each claim with its mechanism.
405+
D8 date literals refused by name (the owner's decision of 2026-10-12; decision E79; register DT-5 and PK-5), each claim with its mechanism.
406406

407407
- The refusal: `dates.rs`'s `Reader::read` answers `Reading::Packed` for a literal any of whose six runs of digits (the `DATE` token's three, the `TIME` token's three) has five digits or more, before any field is read, so it never needs the current year and is never `Unplaced`; `Reader::long` is gone, and with it the only reading that gave an offset (`Stamp::offset` stays, always none, since `PqlLiteral::Time` carries one). Every other literal goes to `Reader::plain` as before. Held by `dates.rs`'s own tests (D8's former examples packed with and without a year, the four-digit boundary read) and `sdm-pql`'s `tests/dates.rs` (`a_run_of_five_digits_is_refused_as_packed_and_needs_no_year`; all 7,749 D8 rows of `dates.json` and T0.6's four held to `Packed`, the reference's readings kept in the files; the plain rows still the reference's).
408408
- Where it is refused: `ast::constant` turns `Packed` into `BuildError::Packed(location)`, carried up as `ParseError::Packed` and `Unparsed::Packed`, so the node the visitor builds first decides, as for any node refusal (`pql_adapter.rs`'s `an_earlier_refusal_wins_and_the_first_packed_literal_ends_the_parse`); a literal in an `IN` list is built the same way (`a_packed_date_in_an_array_is_refused_by_name`).
409409
- The error: `sdm_core::pql`'s `packed` makes `INVALID_REQUEST` (kind `invalid_request`) with `operation` `validate_query`, `rule` `date_literal_packed` and the literal's `start_row`, `start_col`, `end_row`, `end_col`, as D4's warning places a literal, never its text (`the_packed_refusal_names_the_literal_s_place_as_d4_s_warning_does`; `dispatch.rs`'s `a_packed_date_literal_ends_validate_query_with_the_core_s_error`, and a packed date needing no resolvable local zone). The Python host raises it by its code, `StructuredDataError` with those `details` (`test_the_routing_seam.py`'s `test_a_packed_date_literal_is_refused_by_name_on_the_core`, through `materialize`); rust-host gives it through `HostRun` (`s0_cases.rs`'s `a_packed_date_literal_is_refused_by_name_on_the_pure_rust_host`). `python-old` still reads them (`test_the_old_route_still_reads_a_packed_date_literal`).
410410
- What stays: D1 to D7 read, D4 warns and D9 is `PQL_VALUE_INVALID_LITERAL` as before, on both routes alike (`a_literal_with_no_run_of_five_digits_reads_as_before`, `test_a_literal_with_no_run_of_five_digits_answers_as_on_the_old_route`); the 417 corpus queries, none with a D8 literal, unchanged.
411411
- The D8 literals the reference refuses (a year past 9999, an impossible value, two long fields) are refused by this rule in place of `PQL_VALUE_INVALID_LITERAL`: a refusal before and after, its diagnostic changed (DT-5's new behavior); the quirk rows `10000-01-01` and `date-digit-counts/long-year` hold it (`pql_quirks.rs`).
412412
- The S0 cases: T1.6b's acceptance twins `s0.accept.date-packed` and `s0.accept.date-long-field` are removed with their two `python-ref` lines and baselines, under DT-5's `case_outcomes` (`removed` on `python-core`, `python-old` and `rust-host`, generated by `ratchet.py check`), since a changed case file no longer matches the identity its reference line records (`tests/test_contract_reference.py`); the proposed baselines are `ratchet.py accept`'s over the gate's observations, kept to the cases the checkpoint baselines, as at T1.6b. T1.12's diagnostic pair of the same inputs stays, held to the refusal by `s0_cases.rs` and `tests/test_contract_cases.py`.
413+
- Not held: a day-first literal read before the D8 one in the same query gives its `DATE_LITERAL_DAY_FIRST` warning on the visitor's list, but the run ends with the core's error, which carries no warnings, so that warning is not shown; no test asserts it either way (the orchestrator's call, 2026-10-12).
413414
- The tests are the test author's (`T1.6c tests:` commits); no implementer commit changes them.

0 commit comments

Comments
 (0)