decompose wave 5 — contract suite: audit-first split of the verification backlog (engines' columns already discharge most rows; map in review-wave-5's appendix), seven mechanism-grouped suite-row tasks (queue depth, scheduler, tx commit-atomicity, streams, locks, wakes, opts/backoff equivalence), two engine-side hardening tasks (sqlite commit-error arm, pg F-1 defense-in-depth), and the review-wave-5 gate that flips the engine specs to stable

This commit is contained in:
glm-5.3-flash committed 2026-10-10 05:37:53 +00:00
1 parent 9a00fb8a7e
commit 250511d480
11 files changed
+911 -2

No files matched your search

+127
View File
@@ -0,0 +1,127 @@
---
id: review-wave-5
name: Wave 5 review gate — the suite as compatibility instrument
status: pending
depends_on: [suite-queue-depth-rows, suite-scheduler-rows, suite-tx-commit-atomicity-rows, suite-stream-rows, suite-lock-rows, suite-wake-rows, suite-opts-backoff-rows, sqlite-commit-error-arm, pg-suite-infra-hardening]
scope: broad
risk: low
impact: project
level: review
tags: [wave-5, review-gate]
---
## Description
The wave-5 review gate (docs/plans/implementation.md §Review gates):
"the suite as compatibility instrument — every backlog row present,
version-stamped, green on both engines; this is the gate that flips
the engine specs to `stable`."
Primary lenses:
1. **Backlog audit — every row present.** Walk
core-contract.md §Verification backlog item by item against the
suite (and the engine-side pins for the SQLite-scoped rows) and
record the discharge map. The decomposition's audit (below) is the
starting point — verify each "discharged" claim by reading the
pinning row/test, not by trusting the map.
2. **Version stamps.** Every row's `Contract stamp:` items cite ADR §
per `version_stamp.rs`'s convention; stamps accumulate on
amendment (the extended `enqueue_opts_resolution` row is the
amendment case to check); greppable via `STAMP_MARKER`. Cross-check
against ADR-017 §2's no-silent-change discipline: every stamp's
cited ADR § actually pins the behavior tested.
3. **Green on both engines.** The SQLite column green server-less;
the pg column green against the harness server (twice, the
wave-4 gate's posture). Workspace gates green
(build/test/clippy/fmt).
4. **Dispositions audited.** The decomposition parked several
judgment calls in task Notes — verify each was made and recorded:
the M-1 retention-failure pin's location (suite row vs engine-side),
the beyond-64 skip-forward leg's location, the backoff cap leg's
location, the scheduler fire-wake parity call, the lock-row
divergence call (if any), the SQLite reconnect-success test
taken/not-taken.
5. **Conformance spot-checks.** The rows assert what the ADR text
pins (no weaker, no stronger — a row pinning beyond the ADR text
is a suite defect: it would fail a correct engine); the
determinism posture holds (tolerance-bounded state assertions
only, no timing-value asserts, no two-task races) including the
scheduler rows' documented posture extension; no duplication
between rows' legs.
6. **Flip the engine specs to `stable`** — `engine-sqlite.md` and
`engine-postgres.md` frontmatter `status: draft` → `status:
stable`, with dated `last_updated` annotations citing this gate.
Update `docs/plans/implementation.md`: the wave table's wave-5
status, a review-rounds entry for this gate.
## Acceptance Criteria
- [ ] Backlog discharge map recorded (every §Verification backlog item
→ its pinning row/test or an explicit gap with a disposition)
- [ ] Every row version-stamped per convention; amendment stamps
accumulated; stamps verified against the cited ADR text
- [ ] Suite green on both engines (SQLite server-less; pg vs harness,
two consecutive full runs); workspace gates green
- [ ] All parked dispositions from the wave-5 tasks audited and
recorded
- [ ] Engine specs flipped to `stable` with dated annotations;
implementation.md updated (wave table + review rounds)
- [ ] Findings recorded; wave 6 decomposition may proceed
## References
- docs/plans/implementation.md §Review gates (wave 5), §The waves
- docs/architecture/core-contract.md §Verification backlog
- docs/architecture/decisions/017-contract-versioning.md §4.2
- docs/architecture/decisions/022-contract-suite-layout.md
- alkstore-contract-suite/src/version_stamp.rs (the stamp convention)
## Notes
> To be filled by implementation agent
## Summary
> To be filled on completion
## Appendix — the decomposition's backlog audit (verify, don't trust)
Discharged by existing rows (waves 1/3/4 — verify each):
| Backlog item | Discharged by |
|---|---|
| Name validation at every entry point (ADR-008 §4) | `name_validation_rejects_empty_and_reserved` (exemplar) |
| `schedule()` queue-argument validation (ADR-021 §3) | same exemplar row |
| Numeric-domain semantics (ADR-023 §2) | `extent_clamp_semantics` + `duration_refusal_on_non_positive_ttl` |
| `encode_payload` typed failure + round-trip (ADR-023 §1, ADR-020 §4) | `payload_round_trip_stores_exact_encoding` |
| `PayloadTooLarge` occurrence asymmetry (ADR-016 §5) | `payload_too_large_never_produced_on_sqlite` + `payload_too_large_produced_on_pg` |
| Drop = rollback no-ghosts (ADR-021 §4) | `drop_rollback_leaves_no_ghosts` |
| In-tx read-your-own-writes (ADR-021 §1) | `in_tx_reads_see_own_writes` |
| `save_offset_tx` exactly-once-within-a-business-tx shape | discharged across `in_tx_reads_see_own_writes` (own-save visibility) + `drop_rollback_leaves_no_ghosts` (the save never lands on rollback) — verify the combination genuinely covers the backlog row's claim |
| Receiver error/close arms + save-offset monotone composition (ADR-021 §5, ADR-019 §6) | `receiver_close_and_save_arms` (both columns; the pg reconnect-stays-open leg pins engine-side — verify that pin exists) |
| Plain-path SQLite open (ADR-023 §3) | engine-side: `uri_shaped_open_path_is_a_literal_filename` (`open_tests.rs`) — SQLite-scoped backlog row per the sqlite-engine-integration task |
| Watcher cadence default + knob (ADR-023 §4) | engine-side: `poll_interval_flows_to_the_watcher_config` (`open_tests.rs`) — same scoping |
Added by wave-5 tasks (verify presence + stamps):
| Backlog item | Wave-5 task |
|---|---|
| Job-handle validity predicate (ADR-010 §2) | `suite-queue-depth-rows` |
| ADR-010 depth: reclaim-eats-attempt, dead-letter, no-stranded-rows sweep + M-1 retention pin | `suite-queue-depth-rows` |
| Scheduler boundary/catch-up/leadership (ADR-009) | `suite-scheduler-rows` |
| `outbox_enqueue_tx` commit-atomicity (ADR-014) | `suite-tx-commit-atomicity-rows` |
| `publish_with_key_tx` commit-atomicity (ADR-015 §2) | `suite-tx-commit-atomicity-rows` |
| `with_tx` panic disposition (N-5) | `suite-tx-commit-atomicity-rows` |
| Cross-engine stream ordering equivalence (ADR-015 §3/§4) | `suite-stream-rows` |
| `trim_to` full semantics (ADR-015 §5) | `suite-stream-rows` |
| Lock TTL/expiry re-acquisition + concurrent loser (ADR-008 §7) | `suite-lock-rows` |
| Wake semantics under `WakeReceiver` shapes (ADR-008 §3) | `suite-wake-rows` |
| Backoff-curve equivalence (ADR-010 §3) + deferred opts clock legs (ADR-020) | `suite-opts-backoff-rows` |
Engine-side hardening riding the wave-5 window:
| Item | Task |
|---|---|
| SQLite commit-error-arm coverage (wave-3 review deferral) | `sqlite-commit-error-arm` |
| F-1 defense-in-depth (pg test-infra; not load-bearing) | `pg-suite-infra-hardening` |