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

+73
View File
@@ -0,0 +1,73 @@
---
id: suite-wake-rows
name: Contract-suite row — wake semantics under the pinned WakeReceiver shapes
status: pending
depends_on: []
scope: narrow
risk: low
impact: phase
level: implementation
tags: [wave-5, contract-suite, notify]
---
## Description
Add the wake-semantics contract row to
`alkstore-contract-suite/src/properties.rs` and wire it into both
engines' suite targets, discharging the backlog row "Wake semantics
under `WakeReceiver` shapes" (core-contract.md §Verification
backlog): the POCs verified wake delivery/coalescing through their own
probe types; the pinned `Wake { channel }` / recv forms (ADR-008 §3)
need the suite's own property on both engines.
Row to add:
- **`wake_receiver_shapes`** — the wake contract's pinnable core,
tolerance-bounded (wakes are best-effort hints — the row asserts
state outcomes, never delivery counts or latencies):
- a pre-attached listener receives a wake after a committed
`notify` on its channel (`recv`/`try_recv`/`recv_timeout` forms
all exercised; the wake's `channel` field matches the listened
channel — the one piece of semantic content a wake carries);
- a burst of notifies yields *at least one* wake — never an exact
per-notify count (coalescing is the documented engine asymmetry:
possibly coalesced on SQLite, per-notify on pg; the row pins the
floor, not the shape);
- a listener attached *after* a commit never sees that commit's
notify (no-replay — `recv_timeout` idles; the pg no-replay hole
and SQLite's burst coalescing are both legal under this pin);
- wakes from a *different* channel do not arrive on this listener
(channel-scoped delivery — the invalidation-key property caching
subscribers rely on).
The failure-surface arms (watcher death → `recv() -> None` on SQLite;
the synthetic reconnect-wake on pg) are the engine-differing close
arms — already pinned engine-side and in the receiver-arms row's
disposal leg; this row does not re-pin them (cross-reference in the
doc comment).
## Acceptance Criteria
- [ ] The row exists, version-stamped (ADR-006, ADR-008 §3)
- [ ] Wired into both engines' `contract_suite.rs` targets
- [ ] SQLite column green server-less; pg column green against the
harness server
- [ ] The row's doc comment cross-references the close-arm pins it
deliberately does not duplicate
- [ ] `cargo test -p alkstore-sqlite -p alkstore-postgres` green
(pg rows skip cleanly server-less); clippy `-D warnings`; fmt clean
## References
- docs/architecture/core-contract.md §Verification backlog (wake
semantics under WakeReceiver shapes); §notify/listen
- docs/architecture/decisions/006-wake-and-delivery-contract.md
- docs/architecture/decisions/008-contract-v1-pinning.md §3
## Notes
> To be filled by implementation agent
## Summary
> To be filled on completion