The open issue backlog (~60 issues, mostly filed by systematic reviews as isolated symptoms) decomposes into 8 root-cause clusters. Each has a tracking issue with the diagnosis, a refactor design sketch, member task list, and sequencing notes. Attacking the root causes closes the members structurally instead of point-fixing each symptom against code that the next cluster rewrites anyway.
The trackers
| Tracker |
Root cause |
Closes |
| #214 — Push provider unification |
APNs/FCM copy-paste divergence + lossy Result<bool> outcome |
13 issues |
| #215 — Typed config |
Ad-hoc validation, duplicated defaults, silent coercions |
12 issues |
| #216 — Task lifecycle |
Detached tasks, no supervision, inverted teardown order |
5 issues (incl. the one HIGH, #193) |
| #221 — Secret hygiene |
Zeroization + redaction by discipline, not by boundary |
7 issues (3 core + 4 riders) |
| #217 — NIP-59 validation |
Scattered/incomplete unwrap invariants |
4 issues |
| #218 — Transactional rate-limit admission |
Charge-before-decide with partial refunds; global-lock capacity path |
8 issues |
| #219 — Health/readiness rework |
Side-effecting reads, static readiness, coupled /metrics |
5 issues |
| #220 — Retry/backoff policy |
Uncapped Retry-After; permit release breaks the live-task bound |
3 issues |
Waves
Wave 0 — now (merge/close in-flight point fixes):
Wave 1 — parallel tracks (disjoint files):
Wave 2 — after #214:
The hottest file is dispatcher.rs (#214, #218 touch different functions); retry.rs is the true bottleneck and drives the one hard ordering edge.
Coverage
All 50 open PR-less issues are assigned to exactly one tracker (47) or the wave-0 list (3); all 10 issues with in-flight PRs are annotated in their tracker with merge-first/supersede guidance. Riders that execute in one tracker but are verified by another (#172, #126, #156, #164) are cross-listed explicitly in #221.
The open issue backlog (~60 issues, mostly filed by systematic reviews as isolated symptoms) decomposes into 8 root-cause clusters. Each has a tracking issue with the diagnosis, a refactor design sketch, member task list, and sequencing notes. Attacking the root causes closes the members structurally instead of point-fixing each symptom against code that the next cluster rewrites anyway.
The trackers
Result<bool>outcomeWaves
Wave 0 — now (merge/close in-flight point fixes):
PushOutcome/TokenCachedesign expresses; its tests become spec material; [MEDIUM] APNs 403 / FCM 401 invalidates the cached auth token but returns Permanent for the current request — drops one notification per device instead of retrying with a fresh token #85 stays open under Tracking: unify APNs/FCM push-provider machinery — shared auth cache + rich PushOutcome #214).EventOutcome::Failedin the processing-duration histogram, inflating the failure bucket #152 — addEventOutcome::Shedso backpressure stops inflating thefailedhistogram buckettoken_bytes.is_empty()guard inEventProcessor::process_inner(sibling of #97) #178 — remove the unreachabletoken_bytes.is_empty()guard inprocess_innerWave 1 — parallel tracks (disjoint files):
Wave 2 — after #214:
InFlightTrackerontoTaskTracker(noted in Tracking: structured task lifecycle — supervision, startup ordering, staged shutdown #216).The hottest file is
dispatcher.rs(#214, #218 touch different functions);retry.rsis the true bottleneck and drives the one hard ordering edge.Coverage
All 50 open PR-less issues are assigned to exactly one tracker (47) or the wave-0 list (3); all 10 issues with in-flight PRs are annotated in their tracker with merge-first/supersede guidance. Riders that execute in one tracker but are verified by another (#172, #126, #156, #164) are cross-listed explicitly in #221.