You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: backlog/tasks/task-28 - Quote-real-column-identifiers-consistently-across-the-SQL-gen-layer-library-wide-CamelCase-fix.md
+9-3Lines changed: 9 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -3,11 +3,11 @@ id: TASK-28
3
3
title: >-
4
4
Fold unquoted identifiers to lowercase like DataFusion (library-wide CamelCase
5
5
handling)
6
-
status: In Progress
6
+
status: Done
7
7
assignee:
8
8
- Wren
9
9
created_date: '2026-07-18 19:48'
10
-
updated_date: '2026-07-22 17:35'
10
+
updated_date: '2026-07-23 00:33'
11
11
labels:
12
12
- bug
13
13
- sql-surface
@@ -28,7 +28,7 @@ SEVERITY: high. Wren found (while investigating _compose.py:214) that CamelCase
28
28
<!-- AC:BEGIN -->
29
29
-[x]#1 Native + codegen FOLD unquoted identifiers to lowercase like the DataFusion oracle (columns, compound col/field parts, SELECT aliases); quoted "Age" stays case-exact everywhere. Root cause was the engines DIDN'T fold — they accepted SQL the oracle rejects. Users quote CamelCase columns themselves (intentional, documented papercut).
30
30
-[x]#2 TASK-25 force-quote reverted: transformer refs carry the user's original quoting — {t}(LotArea) folds-and-fails, {t}("LotArea") works. Old test_camelcase_columns_compose (asserted unquoted 'just works') flipped to quoted-works / unquoted-fails.
31
-
-[]#3 state-key columns stay unquoted (_compose.py:214 invariant preserved + documented with a comment).
31
+
-[x]#3 state-key columns stay unquoted (_compose.py:214 invariant preserved + documented with a comment).
-[x]#5 Ceiling (ponytail note, expr_build.rs): a real CamelCase table/struct-column qualifier is NOT folded — unreachable today (tables are always __THIS__/generated); flagged for when qualified tables become reachable.
34
34
<!-- AC:END -->
@@ -53,6 +53,12 @@ created: 2026-07-22 17:35
53
53
---
54
54
Reopened: AC #3 (state-key comment at _compose.py:214) was ticked off the merge report but the comment is NOT in the landed diff of 7f21dbe. Wren has the fix ready as fadd87e — Done again once it lands on master.
55
55
---
56
+
57
+
author: Iris (PM)
58
+
created: 2026-07-23 00:33
59
+
---
60
+
AC#3 closed for real: a83ece0 on master adds the 8-line comment in sql_transform/_compose.py documenting why state-key columns are rebuilt unquoted (state_key() is lowercase by construction, so unquoted folding is a no-op; quoting would pin generated-name casing). Verified against the diff, not the merge report.
Copy file name to clipboardExpand all lines: backlog/tasks/task-33 - chore-rebuild-native-_interpreter.pyd-when-src-.rs-is-stale-before-tests.md
+10-4Lines changed: 10 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,11 +1,11 @@
1
1
---
2
2
id: TASK-33
3
3
title: 'chore: rebuild native _interpreter.pyd when src/*.rs is stale before tests'
4
-
status: In Progress
4
+
status: Done
5
5
assignee:
6
6
- '@Wren'
7
7
created_date: '2026-07-19 15:43'
8
-
updated_date: '2026-07-22 17:35'
8
+
updated_date: '2026-07-23 00:33'
9
9
labels:
10
10
- dev-ex
11
11
- native
@@ -26,8 +26,8 @@ The native _interpreter.pyd can silently run STALE: if any src/*.rs is newer tha
26
26
27
27
## Acceptance Criteria
28
28
<!-- AC:BEGIN -->
29
-
-[]#1 Running the suite auto-rebuilds native when any src/*.rs is newer than the built _interpreter.pyd; an up-to-date build is a no-op (no forced rebuild cost)
30
-
-[]#2 A deliberately-stale .pyd no longer yields phantom failures — the guard rebuilds first
29
+
-[x]#1 Running the suite auto-rebuilds native when any src/*.rs is newer than the built _interpreter.pyd; an up-to-date build is a no-op (no forced rebuild cost)
30
+
-[x]#2 A deliberately-stale .pyd no longer yields phantom failures — the guard rebuilds first
31
31
<!-- AC:END -->
32
32
33
33
## Comments
@@ -38,4 +38,10 @@ created: 2026-07-22 17:35
38
38
---
39
39
Bumped Low → Medium: stale native .pyd builds cause phantom test failures across every dev lane after a pull — cheap guard, broad payoff.
40
40
---
41
+
42
+
author: Iris (PM)
43
+
created: 2026-07-23 00:33
44
+
---
45
+
Landed as 953c726 on master. tests/_native_guard.ensure_native_built() runs at top of conftest.py before the native import; cheap mtime compare (newest src/**/*.rs vs built .pyd, located on disk), shells maturin develop only when stale. Both ACs verified live per commit; tests/test_native_guard.py covers is_stale() (missing/newer/older/tie/nested). Suite 497 passed / 14 skipped. Known ceiling noted in-code: no lock under pytest-xdist.
0 commit comments