Joseph Doherty
12e6f0d2c5
fix(localdb): create the database file's parent directory (0.1.1)
...
SQLite creates the database FILE on demand but never its parent DIRECTORY, and
SqliteLocalDb opens the file eagerly in its constructor — so a configured path
under a not-yet-existing directory was a hard startup failure ("SQLite Error
14: unable to open database file") rather than a first run that just worked.
Relative defaults like ./data/app.db hit it routinely; a containerized consumer
escapes only when a volume mount happens to create the directory first.
ScadaBridge found this during LocalDb Phase 2 and worked around it app-side
(SiteLocalDbDirectory.Ensure). Every other consumer still had the gap, so the
guarantee belongs here.
The standing objection to a library that creates directories is that it can
mask a mis-typed path by silently starting an empty database. That does not
apply: SQLite ALREADY does exactly that for a mis-typed file NAME. Refusing to
create the directory protects nothing — it only makes the two halves of one
path behave inconsistently and turns the directory half into an opaque error.
A creation failure (permissions, read-only mount) now throws an
InvalidOperationException naming the directory and the cause, instead of
surfacing as SQLite error 14. That is a change of exception type, but only on a
path that already failed hard.
Both behaviours are pinned and verified to fail with the call removed.
147 tests pass, 0 warnings. Published to the Gitea feed at 0.1.1.
Claude-Session: https://claude.ai/code/session_01BL2Vu1ESDQ9SCN4gVKkdts
2026-07-20 04:51:18 -04:00
Joseph Doherty
b2345c32d4
test(localdb): convergence polish — provable LWW race arbitration, collection serialization, dead-letter diagnostics
...
Claude-Session: https://claude.ai/code/session_01BL2Vu1ESDQ9SCN4gVKkdts
2026-07-18 01:06:00 -04:00
Joseph Doherty
c5352f3ed8
feat(localdb): periodic oplog maintenance service (caps enforcement + tombstone pruning, both roles)
...
Claude-Session: https://claude.ai/code/session_01BL2Vu1ESDQ9SCN4gVKkdts
2026-07-18 01:02:06 -04:00
Joseph Doherty
154d584190
fix(localdb): capture triggers survive consumer upserts (explicit ON CONFLICT upsert form, outer-statement override)
2026-07-18 00:57:27 -04:00
Joseph Doherty
801b042208
test(localdb): bidirectional convergence + randomized property tests
...
Claude-Session: https://claude.ai/code/session_01BL2Vu1ESDQ9SCN4gVKkdts
2026-07-18 00:51:16 -04:00
Joseph Doherty
eb40cd8f29
fix(localdb): telemetry review fixes — meter naming, snapshot status, session-count Connected
...
Claude-Session: https://claude.ai/code/session_01BL2Vu1ESDQ9SCN4gVKkdts
2026-07-18 00:14:57 -04:00
Joseph Doherty
be4ca76f5f
feat(localdb): telemetry meters + ISyncStatus
...
Claude-Session: https://claude.ai/code/session_01BL2Vu1ESDQ9SCN4gVKkdts
2026-07-18 00:03:39 -04:00
Joseph Doherty
8befebd476
fix(localdb): snapshot review fixes — MAX-guarded complete watermark, keyset pagination, phantom-row guard
...
Claude-Session: https://claude.ai/code/session_01BL2Vu1ESDQ9SCN4gVKkdts
2026-07-17 23:50:42 -04:00
Joseph Doherty
130e9c918f
feat(localdb): snapshot resync (LWW-merging, tombstone-carrying, delta resume)
...
Claude-Session: https://claude.ai/code/session_01BL2Vu1ESDQ9SCN4gVKkdts
2026-07-17 23:35:50 -04:00
Joseph Doherty
e92cdc6d3a
fix(localdb): adapter review fixes — deterministic pump teardown, always-hosted initiator, backoff clamp
...
Claude-Session: https://claude.ai/code/session_01BL2Vu1ESDQ9SCN4gVKkdts
2026-07-17 23:13:02 -04:00
Joseph Doherty
a64fc26391
feat(localdb): gRPC sync adapters, background service, replication DI
...
Claude-Session: https://claude.ai/code/session_01BL2Vu1ESDQ9SCN4gVKkdts
2026-07-17 23:01:29 -04:00
Joseph Doherty
183901e8ac
test(localdb): pin drift-watermark branch; guard writer loop against completed-lane spin
2026-07-17 22:50:33 -04:00
Joseph Doherty
92ccbac8db
fix(localdb): sync session concurrency fixes — two-lane writer, teardown fault fidelity, per-entry drift, gated snapshot seam
2026-07-17 22:44:42 -04:00
Joseph Doherty
925623b878
feat(localdb): SyncSession protocol state machine (handshake fail-closed, bidirectional delta pump)
2026-07-17 22:26:03 -04:00
Joseph Doherty
b223507070
fix(localdb): applier review fixes — null-row_json guard, clock recovery via last_seen_hlc, fidelity + guard tests
...
Claude-Session: https://claude.ai/code/session_01BL2Vu1ESDQ9SCN4gVKkdts
2026-07-17 22:15:51 -04:00
Joseph Doherty
d7cbdce65c
feat(localdb): LWW applier (hlc+node_id tie-break, applying guard, dead-letter, atomic watermark)
...
Claude-Session: https://claude.ai/code/session_01BL2Vu1ESDQ9SCN4gVKkdts
2026-07-17 22:03:24 -04:00
Joseph Doherty
3cf8cabaf9
fix(localdb): oplog store review fixes — ack clamping, age-based pruning, monotonicity tests
...
Claude-Session: https://claude.ai/code/session_01BL2Vu1ESDQ9SCN4gVKkdts
2026-07-17 21:55:25 -04:00
Joseph Doherty
4f9982c53f
fix(localdb): DI review fixes — onReady leak guard, BusyTimeoutMs ctor guard, shared allow-list
2026-07-17 21:47:28 -04:00
Joseph Doherty
529585163c
feat(localdb): oplog store (batch read, ack watermark, pruning caps, tombstone retention)
...
Claude-Session: https://claude.ai/code/session_01BL2Vu1ESDQ9SCN4gVKkdts
2026-07-17 21:45:20 -04:00
Joseph Doherty
c061ba733f
feat(localdb): options validation + AddZbLocalDb DI; fail-fast on unsupported parameter collections
2026-07-17 21:40:23 -04:00
Joseph Doherty
3d72d2ee4b
test(localdb): pin the S2 stale-rowid guard (in-txn + mixed multi-row PK-change regression tests)
2026-07-17 21:37:11 -04:00
Joseph Doherty
df2518611f
fix(localdb): capture-layer review fixes — BLOB fail-closed, identifier escaping, master lock, PK-change tombstone, digest canon
2026-07-17 21:30:45 -04:00
Joseph Doherty
f4063f811f
feat(localdb): opt-in table registration + capture triggers (oplog + row_version, applying guard)
2026-07-17 21:18:08 -04:00
Joseph Doherty
12b8839f33
fix(localdb): Task 4 review fixes — synchronous allow-list, dictionary params, async conn setup, dispose guard
2026-07-17 21:11:07 -04:00
Joseph Doherty
827bf44684
test(localdb): review fixes — index assertion, AUTOINCREMENT rationale, ReadMeta guard, concurrent HLC test
2026-07-17 21:05:10 -04:00
Joseph Doherty
83f384247c
feat(localdb): SqliteLocalDb host (WAL, UDF-registered connections, HLC recovery, consumer SQL API)
2026-07-17 21:03:39 -04:00
Joseph Doherty
fb8f751fac
feat(localdb): lib-owned schema (meta/oplog/peer_state/row_version/applying/dead_letter)
2026-07-17 21:00:04 -04:00
Joseph Doherty
cf58077398
feat(localdb): hybrid logical clock (UTC-ms<<16 | counter)
2026-07-17 20:58:02 -04:00
Joseph Doherty
61e5564c26
feat(localdb): scaffold ZB.MOM.WW.LocalDb (core/contracts/replication + tests)
...
Claude-Session: https://claude.ai/code/session_01BL2Vu1ESDQ9SCN4gVKkdts
2026-07-17 20:55:56 -04:00