review-wave-8 — the pre-release gate passes: one contract-observable divergence found and fixed (pg's negative-seed GREATEST clamp + offsets CHECK contradicted ADR-023 §2's stored-checkpoint annotation; raw seed now, window open until first publish); the close-out's registered suite-duty follow-up discharged (negative heartbeat(extend) leg in job_handle_validity_predicate, negative save_offset seed leg in receiver_close_and_save_arms — stamped, uniform, green on all three columns vs the live harness server); the class-1 termination of record landed in ADR-017 §2 (no undisposed candidate remains; the window closes permanently at the first cargo publish); release-facing spec set flipped stable with dated gate annotations (core-contract, overview, queues, deployment current, the architecture README — Current State through wave 8, engine-mem's table row corrected); implementation.md records updated; N-1/Findings 2–3/flake/publish-prep audits recorded; all gates re-run green incl. fuzz replay, wasm32, doc gate
This commit is contained in:
1 parent
4a7520c817
commit
5385f6bee3
12 files changed
+479
-72
No files matched your search
+26
-16
@@ -1,8 +1,9 @@
|
||||
---
|
||||
status: draft
|
||||
last_updated: "2026-10-10 (ADR-024: the mem engine adopted as a third
|
||||
engine — engine-mem.md added, ADR table row, index updated for the
|
||||
implementation phase)"
|
||||
status: stable
|
||||
last_updated: "2026-10-11 (the wave-8 review gate passed — pre-release
|
||||
freeze: the release-facing spec set flipped stable, Current State
|
||||
refreshed through wave 8; the class-1 window's dispositions complete,
|
||||
the window terminates at first publish)"
|
||||
---
|
||||
|
||||
# alkstore — Architecture
|
||||
@@ -14,29 +15,38 @@ engine native underneath (see [overview.md](overview.md)).
|
||||
|
||||
## Current State
|
||||
|
||||
**Phase 1 (Implementation) — waves 1–5 implemented and reviewed.**
|
||||
**Phase 1 (Implementation) — waves 1–8 implemented and reviewed; the
|
||||
pre-release gate passed (2026-10-11).**
|
||||
Phase 0 is complete (`docs/research/phase-0.md`): both POCs ran and
|
||||
passed, the scope inventory is confirmed, and the crate split,
|
||||
drivers, and ownership postures are decided. All open questions are
|
||||
resolved (through ADR-023), and the engine specs flipped `stable` at
|
||||
the wave-5 review gate. Waves 1–5 (core, substrate fork, SQLite
|
||||
engine, Postgres engine, contract suite) are implemented and reviewed
|
||||
per `docs/plans/implementation.md`. The mem engine was adopted as a
|
||||
third engine by [ADR-024](decisions/024-mem-engine.md) (2026-10-10,
|
||||
wave 6 — release readiness renumbered to wave 7).
|
||||
the wave-5 review gate, the mem spec at wave 6. Waves 1–7 (core,
|
||||
substrate fork, SQLite engine, Postgres engine, contract suite, mem
|
||||
engine, fuzzing) are implemented and reviewed; wave 8 (release
|
||||
readiness: crate docs, the deployment matrix's final pass, the
|
||||
README, publish prep — with N-1's growth-posture acceptance, review
|
||||
003 Findings 2–3, the flake investigation, and the class-1 window's
|
||||
last dispositions riding it) passed its review gate on 2026-10-11.
|
||||
ADR-024 adopted the mem engine as a third engine (2026-10-10,
|
||||
[ADR-024](decisions/024-mem-engine.md)). The class-1 amend-in-place
|
||||
window ([ADR-017](decisions/017-contract-versioning.md) §2)
|
||||
dispositions are complete; the window terminates permanently at the
|
||||
first `cargo publish` of `alkstore` — the gate's blessing covers
|
||||
publishing.
|
||||
|
||||
## Architecture Documents
|
||||
|
||||
| Doc | Status | Purpose | Key OQs |
|
||||
|---|---|---|---|
|
||||
| [overview.md](overview.md) | draft | Crate family, feature surface, non-goals, evidence base | — |
|
||||
| [core-contract.md](core-contract.md) | draft | The unified trait surface, delivery guarantees, tx seam | OQ-10 (resolved) |
|
||||
| [overview.md](overview.md) | stable | Crate family, feature surface, non-goals, evidence base | — |
|
||||
| [core-contract.md](core-contract.md) | stable | The unified trait surface, delivery guarantees, tx seam | OQ-10 (resolved) |
|
||||
| [engine-sqlite.md](engine-sqlite.md) | stable | SQLite engine: forked-substrate/rusqlite mapping | OQ-06 (resolved), OQ-12 (resolved), OQ-13 (resolved) |
|
||||
| [engine-postgres.md](engine-postgres.md) | stable | Postgres engine: tokio-postgres/LISTEN mapping | OQ-08 (resolved), OQ-12 (resolved), OQ-13 (resolved) |
|
||||
| [engine-mem.md](engine-mem.md) | draft | Mem engine: in-process ephemeral mapping of the contract ([ADR-024](decisions/024-mem-engine.md)) | — |
|
||||
| [queues.md](queues.md) | draft | Queue/scheduler/outbox semantics depth (resolved: ADR-009/ADR-010) | OQ-05 (resolved), OQ-09 (resolved), OQ-06 (resolved) |
|
||||
| [deployment.md](deployment.md) | draft | Host semantics, connection budgets, knobs, matrix | OQ-08 (resolved) |
|
||||
| [open-questions.md](open-questions.md) | draft | OQ tracker (promoted from OQ-ST register) | — |
|
||||
| [engine-mem.md](engine-mem.md) | stable | Mem engine: in-process ephemeral mapping of the contract ([ADR-024](decisions/024-mem-engine.md)) | — |
|
||||
| [queues.md](queues.md) | stable | Queue/scheduler/outbox semantics depth (resolved: ADR-009/ADR-010) | OQ-05 (resolved), OQ-09 (resolved), OQ-06 (resolved) |
|
||||
| [deployment.md](deployment.md) | stable | Host semantics, connection budgets, knobs, matrix | OQ-08 (resolved) |
|
||||
| [open-questions.md](open-questions.md) | draft | OQ tracker (promoted from OQ-ST register) — the register's own lifecycle; the question set is closed | — |
|
||||
|
||||
## Architecture Decision Records
|
||||
|
||||
|
||||
@@ -1,6 +1,11 @@
|
||||
---
|
||||
status: draft
|
||||
last_updated: "2026-10-11 (the pre-release class-1 close-out pass — the publish→wake ordering tolerance recorded; ADR-023 §2's `heartbeat(extend)`/`save_offset` classifications; `EventReceiver::try_recv`'s closed shape; `get_job`'s id-global prose)"
|
||||
status: stable
|
||||
last_updated: "2026-10-11 (the pre-release class-1 close-out pass — the
|
||||
publish→wake ordering tolerance recorded; ADR-023 §2's
|
||||
`heartbeat(extend)`/`save_offset` classifications;
|
||||
`EventReceiver::try_recv`'s closed shape; `get_job`'s id-global prose —
|
||||
then wave-8 gate: flipped stable with the close-out pass's suite legs
|
||||
landed; the contract text freezes at the gate, ADR-017 §2)"
|
||||
---
|
||||
|
||||
# Core contract
|
||||
@@ -792,8 +797,10 @@ before the engine specs are called `stable`:
|
||||
totality over non-positive values covers `heartbeat(extend)`'s
|
||||
relative-deadline argument and `save_offset`'s offset — both
|
||||
classified 2026-10-11 by the close-out pass, the ADR-023 §2
|
||||
annotation; their suite rows are the follow-up that
|
||||
classification implies).
|
||||
annotation; their suite legs landed at the wave-8 gate in
|
||||
`job_handle_validity_predicate` and
|
||||
`receiver_close_and_save_arms`, uniformly green on all three
|
||||
engines).
|
||||
- **`encode_payload` typed failure**
|
||||
([ADR-023](decisions/023-fourth-review-round.md) §1) — the helper
|
||||
returns `Result<Vec<u8>, Error::Codec>`; enqueue/publish store and
|
||||
|
||||
@@ -128,7 +128,16 @@ duty — that is what makes them non-events).
|
||||
extensions*, fall in this class in fact — nothing was released
|
||||
when they were made, so their additions ship inside the initial
|
||||
contract v1 text (the initial release carries ADR-008 through
|
||||
ADR-017 whole).
|
||||
ADR-017 whole). *(Termination of record, 2026-10-11 — the wave-8
|
||||
review gate: the pre-release class-1 close-out pass landed every
|
||||
recorded disposition (the publish→wake ordering tolerance; the
|
||||
ADR-023 §2 `heartbeat(extend)`/`save_offset` classifications; the
|
||||
`EventReceiver::try_recv` closed shape; the `get_job` prose; the
|
||||
mem-arithmetic no-action) and the gate audited that **no
|
||||
undisposed class-1 candidate remains**. The class terminates
|
||||
permanently at the core crate's first `cargo publish` — the 0.1.0
|
||||
release this gate blesses, per §1's amendment; from that publish
|
||||
on, contract changes are classes 2–4 only.)*
|
||||
2. **Additive extension** (the ADR-009/010 *shape*, applied
|
||||
post-release) — a new trait method, a new type, a new error
|
||||
variant, a new field on a consumer-read value type (§3's
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
---
|
||||
status: draft
|
||||
last_updated: "2026-10-10 (ADR-024 — the mem engine joins the crate
|
||||
family as `alkstore-mem`; family/ADR tables updated)"
|
||||
status: stable
|
||||
last_updated: "2026-10-11 (wave-8 gate: flipped stable — the family
|
||||
picture frozen with the shipped thing; no further surface under
|
||||
development)"
|
||||
---
|
||||
|
||||
# alkstore — Overview
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
---
|
||||
status: draft
|
||||
last_updated: "2026-10-11 (close-out pass: the reads sentence now says the uniform shapes — get_job id-global on the handle, get_job_tx queue-filtered)"
|
||||
status: stable
|
||||
last_updated: "2026-10-11 (the reads sentence now says the uniform
|
||||
shapes — get_job id-global on the handle, get_job_tx queue-filtered;
|
||||
wave-8 gate: flipped stable, the release-facing semantic depth frozen
|
||||
with the contract)"
|
||||
---
|
||||
|
||||
# Queues, scheduler, outbox — semantics depth
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
---
|
||||
status: draft
|
||||
last_updated: "2026-10-10 (wave 8 decomposed — the release-readiness
|
||||
task set: seven independent entry tasks incl. the frontmatter cleanup
|
||||
and the renumber sweep, then matrix → README → publish prep → gate.
|
||||
Waves 1–7 implemented + reviewed; Findings 2–3, the fired flake-watch
|
||||
trigger, and the class-1 window's last dispositions ride wave 8.)"
|
||||
last_updated: "2026-10-11 (wave 8 implemented + reviewed — the release
|
||||
gate passed: the class-1 window's dispositions complete, the suite's
|
||||
registered boundary-legs follow-up landed, all gates re-run green;
|
||||
implementation complete pending the user's manual `cargo publish`.)"
|
||||
---
|
||||
|
||||
# alkstore — Implementation plan
|
||||
@@ -50,7 +49,7 @@ readiness is wave 8.
|
||||
| 5 | [Contract suite](#wave-5--contract-suite): the cross-engine equivalence properties (core-contract.md §Verification backlog), version-stamped per ADR-017 | waves 3 + 4 | implemented + reviewed (2026-10-10) |
|
||||
| 6 | [Mem engine](#wave-6--mem-engine): separate `alkstore-mem` crate, full contract v1 over in-memory mechanisms (tx overlay, queue/scheduler/streams/locks/wakes), the suite's third factory column (born pinned), wasm32 compile-clean acceptance | waves 1 + 5 | implemented + reviewed (2026-10-10) |
|
||||
| [7](#wave-7--fuzzing) | [Fuzzing](#wave-7--fuzzing): the `fuzz/` sidecar workspace (cargo-fuzz targets over the payload codec, the three `@every` parsers, name validation), committed seed corpora + the corpus-replay gate, detached campaigns | wave 6 | implemented + reviewed (2026-10-10) |
|
||||
| [8](#wave-8--release-readiness) | [Release readiness](#wave-8--release-readiness): crate docs, deployment matrix final pass, README (written last, honestly), publish prep | wave 7 | decomposed (2026-10-10) |
|
||||
| [8](#wave-8--release-readiness) | [Release readiness](#wave-8--release-readiness): crate docs, deployment matrix final pass, README (written last, honestly), publish prep | wave 7 | implemented + reviewed (2026-10-11) |
|
||||
|
||||
## Wave 1 — Foundations
|
||||
|
||||
@@ -757,4 +756,34 @@ decomposes. Specific gates:
|
||||
recommendation: **wave 5 decomposes after the two HIGH fixes land**
|
||||
(the suite's wake-driven rows would otherwise inherit a hang-shaped
|
||||
false failure); 3–7 may trail into wave 5's window if the
|
||||
fix-batch gate judges them wake-independent.
|
||||
fix-batch gate judges them wake-independent.- **Wave-8 review gate** (`review-wave-8`, 2026-10-11) — the
|
||||
pre-release gate passed: the docs honesty audit clean (README trace
|
||||
list spot-read true, the deployment matrix's rows read true as
|
||||
implemented, crate-doc posture claims consistent with the matrix,
|
||||
the env-boundary grep re-run current); the contract-window closure
|
||||
audited — all five wave-6 dispositions verified landed with dated
|
||||
citations, **the class-1 termination of record landed in ADR-017
|
||||
§2** (the window closes permanently at the first `cargo publish` of
|
||||
`alkstore`; no undisposed class-1 candidate remains); the
|
||||
close-out's registered suite-duty follow-up audited and **landed at
|
||||
the gate** — one divergence found: pg's negative-seed clamp
|
||||
(`GREATEST(offset, 0)` + the offsets-table `CHECK`) contradicted
|
||||
ADR-023 §2's "a negative is stored as the checkpoint" annotation on
|
||||
`get_offset`, fixed engine-side (raw seed, no CHECK), with the
|
||||
negative-`heartbeat(extend)` and negative-`save_offset` suite legs
|
||||
landed in `job_handle_validity_predicate` /
|
||||
`receiver_close_and_save_arms` (stamped, uniform, green on all
|
||||
three columns); N-1's conscious acceptance and Findings 2–3's
|
||||
landed/parked dispositions audited as decisions of record; the
|
||||
flake outcome audited (lock row root-caused harness-model,
|
||||
test-side fixed, watch retired; the trim row and the new
|
||||
stream-ordering observation stay watch-flagged — no live engine
|
||||
bug, not blocking); publish-prep evidence re-verified this gate
|
||||
session (fresh package listing + exclusion re-run, no leakage); the
|
||||
frontmatter sweep + renumber spot-checks re-run green; all gates
|
||||
re-run green including the fuzz replay, wasm32, and the doc gate;
|
||||
the release-facing spec set (core-contract.md, overview.md,
|
||||
queues.md, deployment.md, the architecture README) flipped
|
||||
`stable`. Implementation complete pending the user's manual
|
||||
`cargo publish` (the checklist of record is in
|
||||
`tasks/release-publish-prep.md`).
|
||||
Reference in new issue
Block a user