2.6 KiB
id, name, status, depends_on, scope, risk, impact, level, tags
| id | name | status | depends_on | scope | risk | impact | level | tags | ||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| pg-fix-scheduler-tick-seam | pg scheduler — transient-fault tick seam: retry/exhaustion arms tested (review 003 Finding 1) | pending | narrow | low | component | implementation |
|
Description
Review 003 Finding 1 (MEDIUM — docs/reviews/003-wave-5-general-review.md):
the pg scheduler's transient-error retry loop
(alkstore-postgres/src/scheduler.rs:680-704, tick_with_retries)
has never executed under any test — pg-fix-scheduler-resilience
pinned its constants (the_tick_retry_policy_is_pinned) but the
loop that uses them (retry, backoff sleeps, exhaustion error, the
eprintln diagnostic — lcov 171-184, 237-260) is dead code under
test, with no fault seam anywhere in the pg scheduler for tick_once.
This is the last uncovered hardening arm from the wave-4 fix batch,
and the exact class that produced review 002's live bugs.
Fix shape (the review's recommendation): a cfg(test) transient-
fault seam on the pg tick path, following the sqlite-commit-error-arm precedent — a one-shot armed flag feeding a fabricated
transient error into the real retry loop (never a replica):
- (a) one retried tick then success: the seam faults once, the next
tick_oncesucceeds, the job processes — the retry + backoff-sleep arms execute for real; - (b) exhaustion: the seam faults the max retry count, the loop
exhausts to the typed error shape and the
eprintlndiagnostic fires, the runner survives (the resilience property the fix promised).
Cross-test safety is per-store scoping (the commit-fault seam's pattern); no production-path changes — the seam is cfg-gated, born disarmed, consumed-on-use.
Acceptance Criteria
- The seam lands cfg(test)-gated; the real
tick_with_retriesexecutes under test (no loop replication) - Arms (a) and (b) pinned as above; the runner survives exhaustion
cargo test -p alkstore-postgresgreen against the harness server; skips clean server-less- Clippy
-D warnings, fmt clean; workspace gates green
References
- docs/reviews/003-wave-5-general-review.md §Finding 1 (sites, lcov inventory, recommendation)
- docs/architecture/decisions/024-mem-engine.md (the wave-6 window this rider rides — the plan's wave-6 section, "Riding the window")
- tasks/sqlite-commit-error-arm.md (the seam pattern of record)
- tasks/pg-fix-scheduler-resilience.md (the constants the loop uses)
Notes
To be filled by implementation agent
Summary
To be filled on completion