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:
1 parent
9a00fb8a7e
commit
250511d480
11 files changed
+911
-2
No files matched your search
@@ -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` |
|
||||
Reference in new issue
Block a user