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

+81
View File
@@ -0,0 +1,81 @@
---
id: suite-opts-backoff-rows
name: Contract-suite rows — backoff-curve equivalence + the deferred enqueue-opts clock legs
status: pending
depends_on: []
scope: narrow
risk: low
impact: phase
level: implementation
tags: [wave-5, contract-suite, queues]
---
## Description
Complete the arithmetic-equivalence backlog rows
(core-contract.md §Verification backlog): "Backoff-curve and
stamp-resolution equivalence across engines" and the two
wall-clock-adjacent legs the existing `enqueue_opts_resolution` row
explicitly deferred ("The `run_at`-alone-literal and
neither-field-resolves-to-now legs ... pin with wave 5's equivalence
row").
Work:
- **Extend `enqueue_opts_resolution` in place** (one owner per
property — the row's own doc comment names this wave-5 completion;
stamps accumulate per the convention): the `run_at`-alone literal
leg (a future `run_at` is the row's ready time verbatim; a past
`run_at` resolves to ready-now — the boundary-total rule, ADR-023
§2) and the neither-field leg (ready now — tolerance-bounded
proximity, never a tight timing assert).
- **Add `backoff_curve_equivalence`** — the equal-jitter exponential
curve (ADR-010 §3): `delay ∈ [base·2^(a−1)/2, base·2^(a−1)]` per
attempt, uniform jitter over the lower half — *the range, not a
jitter label, is the definition*. Drive claim → `retry(err, None)`
cycles on a queue with a small `backoff_base_s` stamp (2 s keeps
the integer-second row resolution honest: ranges [1,2], [2,4],
[4,8] across the first attempts; the inter-attempt waits stay
tolerance-bounded and sequential), reading the computed delay back
via `get_job`'s `run_at` minus now, asserting range membership per
attempt on both engines — identical bounds is the equivalence pin
(ADR-012 §2: engine-side arithmetic, suite-pinned identical
outputs). Include the explicit-delay override leg
(`retry(err, Some(d))` honored — a `Some(0)` resolves ready-now per
the boundary-total rule). **The 1-hour cap leg is not
suite-pinnable** (reaching capped attempts requires waiting out
minute-scale delays); it stays pinned engine-side (both engines'
unit tests already pin the curve against the ADR text — the
wave-3/4 reviews verified it) — record that disposition in Notes
for the review gate.
## Acceptance Criteria
- [ ] `enqueue_opts_resolution` extended with both clock legs; its
doc comment's deferral note updated (stamps accumulate)
- [ ] `backoff_curve_equivalence` exists, version-stamped (ADR-010 §3,
ADR-020 §1–§3, ADR-012 §2, ADR-023 §2)
- [ ] Rows wired into both engines' `contract_suite.rs` targets
- [ ] SQLite column green server-less; pg column green against the
harness server
- [ ] The cap-leg disposition recorded in Notes
- [ ] `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 (backoff-curve
and stamp-resolution equivalence; enqueue-opts resolution equivalence)
- docs/architecture/decisions/010-queue-semantics-depth.md §3
- docs/architecture/decisions/020-enqueue-opt-semantics-and-bridges.md §1–§3
- docs/architecture/decisions/012-forked-substrate-design.md §2
- alkstore-contract-suite/src/properties.rs (`enqueue_opts_resolution`'s
deferral note)
## Notes
> To be filled by implementation agent
## Summary
> To be filled on completion