|
| 1 | +[review] |
| 2 | +schema = "sqlquack.recorder-change-review.v1" |
| 3 | +decision = "D118" |
| 4 | +related = ["D110a", "D133"] |
| 5 | +pull_request = 142 |
| 6 | +branch = "fix/typed-timestamp-literals" |
| 7 | +commit = "32ba12e8c2426d24b81694b27d5230233c2da104" |
| 8 | +base = "c2cbe9d247d9a1fe5e3b6ff01ed272a2b35fc01d" |
| 9 | +merge_base = "c2cbe9d247d9a1fe5e3b6ff01ed272a2b35fc01d" |
| 10 | +receipts = ["a1ecdbed import-20261104-171 (9 receipts)"] |
| 11 | +review_entry = "wip/typed-literals-auditor-review 615a5c2a (auditor-expressions-016)" |
| 12 | +reviewed_at = "2026-11-07T05:00:13Z" |
| 13 | +round = 1 |
| 14 | +verdict = "approved" |
| 15 | +checked = [ |
| 16 | + "Read the four commits 2541bfd0, a1ecdbed, 45691acb and 32ba12e8 against c2cbe9d2. The parser changes are both Snowflake-only: parse_primary_datetime_literal checks is_snowflake(), and try_parse_snowflake_named_type_literal checks applies_snowflake_context_rules. The SQ0211 refusal sits in snowflake_rejections.", |
| 17 | + "Receipts: import 171 has nine rows, k8a36862, k69fcf514, k624d77c2, kaf2e829, k5ee29352, kf2531b90 and the TIMESTAMP_LTZ case with 1003/42000, and kdf44dc07 (TIMESTAMP_NTZ(3)) and kfadd3f56 (TIMESTAMP_TZ(3)) with 2121/42601. Each matches its case's expect: the seven are reject, and the two are accept with stage semantic, marked settled accept (D133).", |
| 18 | + "Built 32ba12e8 and ran 26 statements through sqlquack check. TIMESTAMP_NTZ, timestamp_ltz, TIMESTAMP_TZ, TIMESTAMPTZ, TimestampNtz and DATETIME before a string, and TIMESTAMP_NTZ /* c */ '...', give SQ0001 with the caret on the string. TIMESTAMP_NTZ(3), TIMESTAMP_NTZ ( 3 ), TIMESTAMP_LTZ(3), TIMESTAMPNTZ(3) and TIMESTAMP_TZ(3) before a string give SQ0211 on the whole literal, also inside WHERE. TIMESTAMP, DATE and TIME literals, '...'::TIMESTAMP_NTZ(3), CAST(... AS TIMESTAMP_TZ(3)), TO_TIMESTAMP_NTZ, DATETIME(3) without a string, and columns named timestamp_ntz or datetime still pass.", |
| 19 | + "syntax-coverage at 32ba12e8 (parser tree 90d18284): the only stale form is date-time-constant, with definition 31d338a9 and fingerprint c8570c5f against auditor-expressions-009's 365bfe1c, 6e1a8f44 and a8d9cb16, as the lane said. family expressions gives it 16/16 [StaleReview]. With auditor-expressions-016 added, stale is empty, validate passes, the form is Verified 16/16, and diff against baseline.json gains o009-o017 and loses no form.", |
| 20 | + "Case builder: copied coverage/syntax to scratch and rebuilt with the --held held.jsonl list. With 32ba12e8's cases.py, expressions and functions are byte-identical to the committed files. ddl, dml, query and utility differ only by the 10 settlements #143 carries. With c2cbe9d2's cases.py, expressions differs on 13 cases (setup and setup_sha256 only), and a full rebuild differs on 182 ddl and 209 functions setups plus 40 expect and stage changes.", |
| 21 | + "Did not re-run clippy, the Rust test suites, pytest, fensu or generate_diagnostics --check. Those figures are the lane's.", |
| 22 | +] |
| 23 | + |
| 24 | +[[review.finding]] |
| 25 | +kind = "extrapolation_noted" |
| 26 | +blocking = false |
| 27 | +detail = "Only TIMESTAMP_NTZ(3) and TIMESTAMP_TZ(3) have a 2121 receipt. SQ0211 also fires for TIMESTAMP_LTZ(3), TIMESTAMPNTZ(3), TIMESTAMPLTZ(3) and TIMESTAMPTZ(3), which have no receipt. DATETIME(3) '...' gets a generic SQ0001 ('Invalid expression / Unexpected token') at the string. TIMESTAMP(3) '...' and TIME(3) '...' are accepted, and no receipt covers them either. All of these still refuse or pass the same way they did on main, so nothing regresses. Add the six spellings as negative neighbours in the next import, so that their phase and code are recorded rather than inferred." |
| 28 | + |
| 29 | +[[review.finding]] |
| 30 | +kind = "builder_side_effect" |
| 31 | +blocking = false |
| 32 | +detail = "Because receipts are now looked up by setup digest alone, more run-database receipts find their setup. So run_database_setups' setup_review list goes from empty to 16 cases: 14 ddl (alter-external-volume, alter-materialized-view, alter-restricted-session-scope, alter-semantic-view, alter-stream, alter-type, desc-transaction, show-mcp-servers) and 2 functions (system-resolve-python-packages). Each has counted receipts in both the syntax and the non-syntax phase. None of the committed files change, because flagged cases get no run-database setup either way. The list is new review work, though, and the PR body does not mention it." |
| 33 | + |
| 34 | +[[review.finding]] |
| 35 | +kind = "ordering" |
| 36 | +blocking = false |
| 37 | +detail = "The pending settlements belong in #143, not here. #143 was generated with this builder, and main's builder would mis-render it, so #143 must land after #142. The review entry auditor-expressions-016 has to land with #142, or the form stays reported as lost: cherry-pick 615a5c2a's parent bf97f064 and 615a5c2a, or merge wip/typed-literals-auditor-review." |
| 38 | + |
| 39 | +[review.files_sha256] |
| 40 | +"crates/sqlquack-syntax/src/parser/_helpers/types/data_types.rs" = "1aff45fb8104735304161b63c7b453c09f91c81cd1d126a960c87bfd76debbe0" |
| 41 | +"crates/sqlquack-syntax/src/parser/_helpers/expressions/primary.rs" = "31b4498a8c2a62100c39b0480458ebff4869bf351e58ad7def358f5adeb4a339" |
| 42 | +"crates/sqlquack-syntax/src/expressions/types/constants.rs" = "e4635ab328a94ca7377debb1983d9fad578f701596495e25711597952ec9b6c1" |
| 43 | +"crates/sqlquack-core/src/refusals/_helpers/rejections.rs" = "4d531bbfbed3aa99b87441c80a492950ecbc2f7d53a745152a4f2625f593493e" |
| 44 | +"crates/sqlquack-core/src/diagnostics/constants.rs" = "cc519aca11e662789186221e5fe13da6dddd50c0d7dca0f82dfd1ccc3cd446b4" |
| 45 | +"crates/sqlquack-core/src/diagnostics/codes.lock" = "8998ec1640cd7769ce3d85364f639f5b7c705108b39215789c9778c203fb0801" |
| 46 | +"scripts/syntax_obligations/_helpers/cases.py" = "b57ddfdd8df2a17510d9753b6e4088551204e7aa01f852452a85d0cd9221dd5e" |
| 47 | +"coverage/syntax/obligations/expressions.toml" = "bc3de6da0f7ebb6a029832f36002c520f6773c04fc6d0f3da8b01423f115ca8c" |
| 48 | +"coverage/syntax/cases/expressions.jsonl" = "6107154d282c24a3872cbb328dcaeed818567524fba57b86df5d436a7687872d" |
| 49 | +"coverage/syntax/marks/expressions.jsonl" = "82846670c494b1db75e2020fa41e0de504b54b29c763fc2ca6382038cf3adccc" |
| 50 | +"coverage/syntax/receipts/import-20261104-171.jsonl" = "aa3ff207e91b57c010069068a11f43c09eff8d2ba04ac077684358a684fffd44" |
| 51 | +"coverage/syntax/reviews/auditor-expressions.toml" = "2238fcb20e2e525d23e6404da073a1a524a603af2105f0fc53288e476015c341" |
0 commit comments