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,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
|
||||
Reference in new issue
Block a user