3.4 KiB
3.4 KiB
id, name, status, depends_on, scope, risk, impact, level, tags
| id | name | status | depends_on | scope | risk | impact | level | tags | |||
|---|---|---|---|---|---|---|---|---|---|---|---|
| suite-opts-backoff-rows | Contract-suite rows — backoff-curve equivalence + the deferred enqueue-opts clock legs | pending | narrow | low | phase | implementation |
|
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_resolutionin place (one owner per property — the row's own doc comment names this wave-5 completion; stamps accumulate per the convention): therun_at-alone literal leg (a futurerun_atis the row's ready time verbatim; a pastrun_atresolves 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 smallbackoff_base_sstamp (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 viaget_job'srun_atminus 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 — aSome(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_resolutionextended with both clock legs; its doc comment's deferral note updated (stamps accumulate)backoff_curve_equivalenceexists, version-stamped (ADR-010 §3, ADR-020 §1–§3, ADR-012 §2, ADR-023 §2)- Rows wired into both engines'
contract_suite.rstargets - 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-postgresgreen (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