decompose review-004 recorded findings: 15 disposition tasks + the review-004-fixes gate (sqlite seam panic-safety, watcher-death subscribe + initial-stat, bridge alignment, scheduler classification, substrate SAFETY delta; pg forwarder hardening + diagnosability, BIGINT stamp decision + fix, log-facade decision; core offset pin + Display forging, mem doc notes, pg identifier note, tokio dev-dep normalization) — taskgraph validate green (95)
This commit is contained in:
1 parent
029f885aa1
commit
9bbe645558
16 files changed
+1131
No files matched your search
@@ -0,0 +1,65 @@
|
||||
---
|
||||
id: sqlite-fix-scheduler-error-classification
|
||||
name: Classify run_schedules' renew-failure arms (review 004 item 9)
|
||||
status: pending
|
||||
depends_on: []
|
||||
scope: narrow
|
||||
risk: low
|
||||
impact: component
|
||||
level: implementation
|
||||
tags: [review-004-fixes, sqlite-engine, scheduler]
|
||||
---
|
||||
|
||||
## Description
|
||||
|
||||
The SQLite `run_schedules` error flattening, per
|
||||
`docs/reviews/004-pre-release-general-review.md` §"Findings recorded,
|
||||
not fixed" item 9: the renew arm maps *any* renew failure — including
|
||||
the closed-store `Database` error — to `LeadershipLost`
|
||||
(`scheduler.rs:216`, `lease.renew(LEADER_TTL_S).await.unwrap_or(false)`),
|
||||
misdirecting the documented respawn recipe at a dead store (an operator
|
||||
respawns a leader against a store that is closed).
|
||||
|
||||
Decide the right arm set and implement it: closed-store vs
|
||||
leadership-lost vs storage failure — what `run_schedules` returns on a
|
||||
dead store, and what stays `LeadershipLost`.
|
||||
|
||||
**Contract-adjacent — check the window state first.** This is an
|
||||
error-classification change on a stable surface (what error a public
|
||||
scheduler entry point returns is contract-observable). As of the
|
||||
decomposition (2026-10-11) no publish tag exists, so the class-1
|
||||
window is presumed open — verify, and if open, land with a dated
|
||||
ADR-023 §2-style annotation of the classification. If the window has
|
||||
closed (the user has published), raise with the user before changing
|
||||
the observable error surface, per AGENTS.md's ADR-wins discipline.
|
||||
|
||||
## Acceptance Criteria
|
||||
|
||||
- [ ] The arm set is decided and recorded in Notes (which error maps
|
||||
where, citing the contract text that pins `run_schedules`' error
|
||||
surface); the closed-store arm no longer reports
|
||||
`LeadershipLost`
|
||||
- [ ] The window state was verified and recorded; a dated annotation
|
||||
landed if class-1, or user sign-off if post-publish
|
||||
- [ ] A test pins the closed-store arm (and the genuine
|
||||
leadership-lost arm's unchanged disposition)
|
||||
- [ ] The documented respawn recipe's text (wherever it lives) matches
|
||||
the new classification
|
||||
- [ ] `cargo test -p alkstore-sqlite`, clippy `-D warnings`, fmt
|
||||
clean; workspace gates green server-less
|
||||
|
||||
## References
|
||||
|
||||
- docs/reviews/004-pre-release-general-review.md §"Findings recorded,
|
||||
not fixed" item 9 (the finding, the "record, don't rush" note this
|
||||
task discharges)
|
||||
- docs/architecture/core-contract.md (the scheduler error surface)
|
||||
- alkstore-sqlite/src/scheduler.rs:205-216 (the flattening site)
|
||||
|
||||
## Notes
|
||||
|
||||
> To be filled by implementation agent
|
||||
|
||||
## Summary
|
||||
|
||||
> To be filled on completion
|
||||
Reference in new issue
Block a user