docs: POC #2 findings verified + folded — OQ-ST-03 closed (per-engine drivers)
Review pass in this repo: contract suite re-verified (11/11 pass under --test-threads=1 against the harness server; default parallel runs interfere across tests via the shared db/channels engine_for_test harness — each test spawns its own listener on poc:q/s/n and truncates shared tables, so parallel tests receive each other's notifications and race truncates). Recorded as a harness caveat in the findings with the Phase 1 note (per-test namespaces), NOT as a contract failure — every test passes in isolation. Findings invocation note + artifacts section updated; phase-0 frontmatter carries the verification qualifier. OQ-ST-03 closure text already folded by the POC session stands.
This commit is contained in:
1 parent
80e6af0a0a
commit
f9e350bf22
2 files changed
+50
-6
No files matched your search
@@ -5,7 +5,11 @@ per-engine drivers, rusqlite+honker-core for SQLite / tokio-postgres+
|
|||||||
deadpool-postgres for Postgres, findings in poc-pg-posture-findings.md;
|
deadpool-postgres for Postgres, findings in poc-pg-posture-findings.md;
|
||||||
OQ-ST-04 now has measured ground on both engines, wake contract
|
OQ-ST-04 now has measured ground on both engines, wake contract
|
||||||
numbers + tx-seam shapes + listener-recovery semantics recorded from
|
numbers + tx-seam shapes + listener-recovery semantics recorded from
|
||||||
POC #2; OQ-ST-05/06 carry both POCs' per-subsystem votes)
|
POC #2; OQ-ST-05/06 carry both POCs' per-subsystem votes. Findings
|
||||||
|
review-pass verified 2026-10-04: contract suite runs green sequentially
|
||||||
|
(`--test-threads=1`); parallel invocation fails by cross-test
|
||||||
|
interference (shared db/channels harness) — recorded in the findings,
|
||||||
|
not a contract failure.)
|
||||||
---
|
---
|
||||||
|
|
||||||
# alkstore — Phase 0 (Exploration)
|
# alkstore — Phase 0 (Exploration)
|
||||||
@@ -480,13 +484,38 @@ inherited watcher is tighter than a re-derived one (p50 1.40 vs 2.15
|
|||||||
ms, max 29 vs 172 ms, with battle-tested failure handling), and the
|
ms, max 29 vs 172 ms, with battle-tested failure handling), and the
|
||||||
`.so` runtime dependency is packaging cost A doesn't pay for no
|
`.so` runtime dependency is packaging cost A doesn't pay for no
|
||||||
compensating advantage. The transactional contract holds identically
|
compensating advantage. The transactional contract holds identically
|
||||||
on both (it is SQLite's property, not the posture's). New
|
on both (it is SQLite's property, not the posture's). Constraints
|
||||||
constraints recorded for the engine crate regardless:
|
recorded for the engine crate regardless:
|
||||||
honker-core=0.5.0 pins rusqlite ^0.40.1 whose rustc requirement
|
honker-core=0.5.0 pins rusqlite ^0.40.1 whose rustc requirement
|
||||||
(≥1.99) is a deployment note, and mixed rusqlite+sqlx binaries
|
(≥1.99) is a deployment note, and mixed rusqlite+sqlx binaries
|
||||||
currently need a vendored one-line libsqlite3-sys patch — OQ-ST-02's
|
currently need a vendored one-line libsqlite3-sys patch — OQ-ST-02's
|
||||||
per-engine-crate split is what keeps the engine binary single-driver.
|
per-engine-crate split is what keeps the engine binary single-driver.
|
||||||
|
|
||||||
|
**Postgres half resolved by POC #2 (2026-10-04; findings:
|
||||||
|
`poc-pg-posture-findings.md`): tokio-postgres + deadpool-postgres.**
|
||||||
|
All three gate conditions held: the transactional property is native
|
||||||
|
(in-tx NOTIFY delivers only at commit; rollback drops job row +
|
||||||
|
business row + notification), exactly-once claim via `FOR UPDATE SKIP
|
||||||
|
LOCKED`, and the LISTEN wake layer is push (p50 1.1 ms, 300/300;
|
||||||
|
claim latency 3–6 ms vs poll-only 32–50 ms — 5–16×, the push channel
|
||||||
|
pgboss-rs lacks, measured). Structural findings the contract must
|
||||||
|
absorb: pooled connections cannot carry LISTEN (deadpool#360 — pinned
|
||||||
|
as our own test; the dedicated listener connection is a per-process
|
||||||
|
budget line outside the pool), and the `*_tx` seam differs from
|
||||||
|
SQLite's exactly where expected (pg's client is Send+Sync — the tx
|
||||||
|
handle is held directly across awaits; SQLite's is a bridged
|
||||||
|
writer-slot lease — same seam shape, different bridging). Listener
|
||||||
|
substrate vote: hand-rolled ~90-line forwarder (immediate reconnect,
|
||||||
|
quoting control, no dependency posture) over `postgres-notify` 0.3.8
|
||||||
|
(lazy reconnect, connect_script skipped at initial connect,
|
||||||
|
unquoted-identifier LISTEN — derive-not-adopt; fallback if upstream
|
||||||
|
improves). The sqlx `PgListener` fallback retired unfired.
|
||||||
|
|
||||||
|
**OQ-ST-03 resolution: per-engine drivers — rusqlite + honker-core
|
||||||
|
(SQLite engine), tokio-postgres + deadpool-postgres (Postgres
|
||||||
|
engine), under OQ-ST-02's per-engine-crate split.** Resolved
|
||||||
|
(2026-10-04), POC-backed on both halves.
|
||||||
|
|
||||||
**Resolved (2026-10-04, both halves): per-engine drivers —
|
**Resolved (2026-10-04, both halves): per-engine drivers —
|
||||||
rusqlite + honker-core for the SQLite engine; tokio-postgres +
|
rusqlite + honker-core for the SQLite engine; tokio-postgres +
|
||||||
deadpool-postgres for the Postgres engine.** The Postgres half is
|
deadpool-postgres for the Postgres engine.** The Postgres half is
|
||||||
|
|||||||
@@ -352,10 +352,23 @@ Reading (shape, not absolute — different machines/databases):
|
|||||||
~19–25 ms B2-era figure and validates the pooling discipline's
|
~19–25 ms B2-era figure and validates the pooling discipline's
|
||||||
value (~2.4 ms amortized vs 23 ms fresh).
|
value (~2.4 ms amortized vs 23 ms fresh).
|
||||||
|
|
||||||
## Property tests (the contract suite) — all green
|
## Property tests (the contract suite) — all green, sequentially
|
||||||
|
|
||||||
`tests/contract.rs` — 11 tests, pg twin of POC #1's suite, all shared
|
`tests/contract.rs` — 11 tests, pg twin of POC #1's suite, all shared
|
||||||
assertions reused:
|
assertions reused. **Invocation note (verified 2026-10-04 in this
|
||||||
|
repo's review pass): the suite passes under `cargo test --test contract
|
||||||
|
-- --test-threads=1` in one process; default parallel execution fails
|
||||||
|
6–8 tests by cross-test interference, not by contract failure — each
|
||||||
|
test builds its own engine + listener over the same database and
|
||||||
|
channels (`poc:q/s/n`) and truncates the shared tables, so parallel
|
||||||
|
tests receive each other's notifications and race each other's
|
||||||
|
truncates ("delivered before commit", "jobs lost", incomplete
|
||||||
|
state re-reads). Every test passes in isolation; the harness lacks
|
||||||
|
per-test channel/table namespaces, which a Phase 1 test harness must
|
||||||
|
have as a first-class feature (the same shared-server parallel-suite
|
||||||
|
shape alkblobs' `--all-features` gates solve with engine-scoped
|
||||||
|
namespaces). Recorded as a harness caveat — none of the failure modes
|
||||||
|
are contract failures.**
|
||||||
|
|
||||||
| Property | Result |
|
| Property | Result |
|
||||||
|---|---|
|
|---|---|
|
||||||
@@ -467,7 +480,9 @@ retired — no condition requiring it fired.**
|
|||||||
|
|
||||||
- POC crate: `/workspace/alkstore-pg-posture-poc` (self-contained,
|
- POC crate: `/workspace/alkstore-pg-posture-poc` (self-contained,
|
||||||
published-deps-only).
|
published-deps-only).
|
||||||
- Tests: `cargo test` → `tests/contract.rs` (11 tests).
|
- Tests: `cargo test` → `tests/contract.rs` (11 tests; sequential
|
||||||
|
invocation: all pass; parallel default invocation interferes across
|
||||||
|
tests via the shared db/channels — see the invocation note above).
|
||||||
- Probe binary: `cargo run --release -- seam|watch|burst|claim|pollvlisten|pool|pnlisten|smoke`
|
- Probe binary: `cargo run --release -- seam|watch|burst|claim|pollvlisten|pool|pnlisten|smoke`
|
||||||
per the binary's help (wake command prints the notify-latency table;
|
per the binary's help (wake command prints the notify-latency table;
|
||||||
pollvlisten the consumption-posture table).
|
pollvlisten the consumption-posture table).
|
||||||
|
|||||||
Reference in new issue
Block a user