Skip to content

Commit a710d7c

Browse files
++
1 parent 149d3cf commit a710d7c

6 files changed

Lines changed: 75 additions & 18 deletions

.tasks/DELEGATE_WORK_HANDOFF.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ Artifacts:
7777
- `.tasks/done/TASK-217-effect-native-oidc-npm-release.md` — verified OIDC already configured
7878

7979
**Commits**
80-
- (pending commit)
80+
- `a4e704bf` — feat(release): CI + distribution infrastructure (Round 78)
8181

8282
**Environment**
8383
- OS: darwin (macOS ARM64)
@@ -132,7 +132,7 @@ crsqlite.dylib 2.7MB (Zig build, was ~15MB Rust)
132132
- Empty BLOB PK parity fix (WF-028)
133133

134134
**Commits**
135-
- (pending commit)
135+
- `5bfeb9ac` — feat(release): 0.16.300-preview infrastructure (Round 77)
136136

137137
**Environment**
138138
- OS: darwin (macOS ARM64)

.tasks/backlog/TASK-209-release-0.16.300-preview.md

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,13 @@ This list is intended to be exhaustive. Each blocker must have an owning task ca
4242
- Status: DONE (Round 77) — no CDN dependency, 30/30 browser tests pass
4343

4444
### CI / validation
45-
- [x] **CI re-enabled and passing** on Linux + macOS, including WASM + browser tests.
45+
- [x] **CI re-enabled** on Linux + macOS (workflow restored, split strategy implemented).
4646
- Task: `.tasks/done/TASK-207-reenable-ci-for-release.md`
47-
- Status: DONE (Round 78) — workflow re-enabled, split strategy implemented
48-
- Follow-up: `.tasks/triage/TASK-220-verify-ci-passes-after-reenable.md`
47+
- Status: DONE (Round 78)
48+
- [ ] **Verify CI passes on GitHub after re-enable** (required jobs green).
49+
- Task: `.tasks/triage/TASK-220-verify-ci-passes-after-reenable.md`
50+
- [ ] **Merge atomicity test expectations match current sync policy** (and pass in CI).
51+
- Task: `.tasks/triage/TASK-221-merge-atomicity-test-alignment.md`
4952
- [x] **Oracle-dependent tests have a CI strategy**.
5053
- Task: `.tasks/done/TASK-214-ci-oracle-strategy.md`
5154
- Status: DONE (Round 78) — required vs optional jobs split, 23 zig-only tests identified

.tasks/triage/TASK-203-empty-blob-pk-encoding-divergence.md renamed to .tasks/done/TASK-203-empty-blob-pk-encoding-divergence.md

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@
44
Fix the PK blob encoding for empty blob primary keys to match Rust/C oracle.
55

66
## Status
7-
- State: triage
7+
- State: done
88
- Priority: LOW (edge case, not blocking sync)
99
- Discovered: 2025-12-20 (TASK-133)
1010

11-
## Problem
11+
## Problem (historical)
1212

13-
When a table has an empty blob (`X''`) as its primary key value, the encoded PK in `crsql_changes` differs:
13+
When a table has an empty blob (`X''`) as its primary key value, the encoded PK in `crsql_changes` used to differ:
1414

1515
```
1616
Zig: 0105
@@ -41,16 +41,17 @@ This is a rare edge case and doesn't affect sync correctness (the blob value its
4141

4242
## Acceptance Criteria
4343

44-
1. [ ] Empty blob PK encoded as `0104` (matching Rust/C)
45-
2. [ ] `bash zig/harness/test-pk-blob-parity.sh` passes 9/9
44+
1. [x] Empty blob PK encoded as `0104` (matching Rust/C)
45+
2. [x] `bash zig/harness/test-pk-blob-parity.sh` passes 9/9
4646

4747
## Parent Docs / Cross-links
4848

4949
- Test: `zig/harness/test-pk-blob-parity.sh` (WF-028)
5050
- Related: `.tasks/done/TASK-133-pk-blob-format-edge-case-parity.md`
5151

5252
## Progress Log
53-
- 2025-12-25: Created from Round 73 test results.
53+
- 2025-12-25: Captured as edge-case parity follow-up.
5454

5555
## Completion Notes
56-
(Empty until done.)
56+
- 2025-12-26: Verified fixed — `bash zig/harness/test-pk-blob-parity.sh` now passes WF-028 (empty blob PK encoding = `0104`).
57+
- Fix landed in Round 77 (`5bfeb9ac`), tracked in `research/zig-cr/92-gap-backlog.md`.
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
# TASK-221 — Merge Atomicity Test Alignment (Unknown Column Policy)
2+
3+
## Goal
4+
Reconcile `zig/harness/test-merge-atomicity.sh` expectations with the current “unknown columns are ignored” sync policy, and ensure CI gating reflects the intended contract.
5+
6+
## Status
7+
- State: triage
8+
- Priority: HIGH (blocks CI release-gate if required)
9+
- Created: 2025-12-26
10+
- Triggered by: running `bash zig/harness/test-merge-atomicity.sh` during “Update tasks”
11+
12+
## Context
13+
We decided/implemented lenient schema mismatch behavior (unknown columns ignored) to support rolling upgrades.
14+
15+
`zig/harness/test-merge-atomicity.sh` currently injects an “error” by using `cid = 'NONEXISTENT_COLUMN'` in a multi-row `INSERT INTO crsql_changes ... VALUES (...), (...);`.
16+
17+
With unknown-column rows now ignored by policy, the statement can legitimately succeed while applying the valid subset. This makes Test 2 and Test 7 fail.
18+
19+
Observed current output:
20+
- `bash zig/harness/test-merge-atomicity.sh`: **6 passed, 2 failed**
21+
- Fails: Test 2, Test 7
22+
23+
## Files to Modify
24+
- `zig/harness/test-merge-atomicity.sh`
25+
- `zig/harness/test-parity.sh` (only if needed)
26+
- `.github/workflows/zig-tests.yaml` (if CI gating needs adjustment)
27+
28+
## Acceptance Criteria
29+
1. [ ] Choose and document the intended contract:
30+
- (A) “Best-effort apply” within a statement when some rows are ignorable by policy, OR
31+
- (B) “Strict all-or-nothing” even for unknown columns
32+
2. [ ] Update `zig/harness/test-merge-atomicity.sh` so its error injection remains a hard error under the chosen policy.
33+
- Examples of “hard error” injectors:
34+
- invalid table name
35+
- invalid pk encoding / malformed pk blob
36+
- invalid site_id length (if strict validation is enforced)
37+
3. [ ] `bash zig/harness/test-merge-atomicity.sh` passes.
38+
4. [ ] CI required jobs stay green (or `test-merge-atomicity.sh` is removed from required set until fixed, explicitly documented).
39+
40+
## Parent Docs / Cross-links
41+
- Policy wish: `.wishes/blocked-on-tom/zig-merge-atomicity-vs-lenient-schema-mismatch.md`
42+
- Lenient schema mismatch implementation: `.tasks/done/TASK-186-schema-mismatch-unknown-column-behavior.md`
43+
- CI test grouping: `.tasks/done/TASK-214-ci-oracle-strategy.md`
44+
- Release tracker: `.tasks/backlog/TASK-209-release-0.16.300-preview.md`
45+
46+
## Progress Log
47+
- 2025-12-26: Confirmed test failures locally; filed as triage.
48+
49+
## Completion Notes
50+
(Empty until done.)

.wishes/blocked-on-tom/zig-empty-blob-pk-encoding-parity.md renamed to .wishes/done/zig-empty-blob-pk-encoding-parity.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ Even though empty BLOB PKs are rare, this is an encoding-level contract, and it
3535
- Existing triage task: `.tasks/triage/TASK-203-empty-blob-pk-encoding-divergence.md`
3636
- Test: `zig/harness/test-pk-blob-parity.sh` (WF-028)
3737

38-
## Decision requested from Tom
39-
- Accept divergence (document + adjust tests), OR
40-
- Approve parity fix in Zig (recommended)
38+
## Completion Notes
39+
- 2025-12-26: WF-028 now passes; Zig encodes empty BLOB PK as `0104`.
40+
- Verification: `bash zig/harness/test-pk-blob-parity.sh`
41+
- Fix commit: `5bfeb9ac` (Round 77)

research/zig-cr/92-gap-backlog.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# 92-gap-backlog
22

3-
> Last updated: 2025-12-25 (Post-Round 78: CI + Distribution — ALL TECHNICAL BLOCKERS CLEARED)
3+
> Last updated: 2025-12-26 (Post-Round 78: CI + Distribution — ready for verification)
44
55
## Status
66

@@ -66,22 +66,24 @@ No active tasks.
6666
- [x] **TASK-219**: Test suite review ✓ — 72 tests, blind spots documented
6767
- [x] **WF-028**: Empty BLOB PK encoding ✓ — fixed in api.zig bind_blob()
6868

69-
### Triage Inbox (2 items)
69+
### Triage Inbox (4 items)
7070
| Task | Priority | Summary | Disposition |
7171
|------|----------|---------|-------------|
72+
| **TASK-220** | HIGH | Verify CI passes after re-enable | Release blocker (verification) |
73+
| **TASK-221** | HIGH | Merge atomicity test alignment | Release blocker (CI gate risk) |
7274
| **TASK-200** | LOW | Zig validation gaps (more permissive) | Nice to have |
7375
| **TASK-201** | LOW | Performance regression tests | Nice to have |
7476

7577
### Blocked on Tom
7678
| Item | Summary |
7779
|------|---------|
7880
| **release-readiness-decision.md** | Tom sign-off gate for releasing `0.16.300-preview` |
81+
| **zig-merge-atomicity-vs-lenient-schema-mismatch.md** | Clarify batch-apply semantics under unknown-column ignore policy |
7982

8083
### Known Limitations
8184
- **crsql_changes SELECT perf**: ~2-7x slower on wide tables vs Rust/C (COUNT is fast, SELECT * is slow)
8285

8386
### Blocked on Tom (edge-case parity decisions)
84-
- `./.wishes/blocked-on-tom/zig-empty-blob-pk-encoding-parity.md` — decide whether to fix empty BLOB PK encoding (recommended: fix parity)
8587
- `./.wishes/blocked-on-tom/zig-merge-atomicity-vs-lenient-schema-mismatch.md` — decide atomicity semantics under lenient unknown-column policy (recommended: best-effort apply)
8688

8789
### Completed Round 76 (2025-12-25) — seq divergence + schema mismatch fixes

0 commit comments

Comments
 (0)