Description
Disposition 1 of design #3702 Phase 3 (audit task 5613, 2026-11-03). mergeQuiet now rejects out-of-range clock times (#3686), so no new bad row can be stored, but rows written before that fix are still read raw:
inQuietHours(pm-stack/aggregator/src/alerts.ts:168) convertsquiet.start/quiet.endwithtoMin()without validating them, so a stored99:99becomes minute 6039 and24:60becomes 1500 — the window silently becomes a different one (often suppressing almost the whole day).- The
/alertsprefs form renders the stored string straight back (pm-stack/aggregator/src/render.tsformQuietStart/formQuietEnd).
Design decision 3 says stored rows are not silently rewritten, so the fix is a read-side sanitize (pass stored values through mergeQuiet before use, or clamp per field to the default) and/or a one-off data fix with the row ids recorded. Either way the audit wants the old rows' fate to be explicit rather than a silent reinterpretation.
Also covers the stored-invalid-tz half of disposition 3: an unknown stored zone makes inQuietHours fail open (return false, no suppression) — deliberate for delivery, but the read path should probably fall back to the default zone instead of disabling quiet hours.
Acceptance: a test that a stored 99:99/24:60/bad-tz row produces the default window (or a documented fail-open), and a note on #3702 saying whether production rows were found and fixed.
Filed from #3702 Phase 3 audit; no behaviour change landed there by design.
Activity
40 remaining items
dezren39 commentedon Nov 4, 2026
agent-note:v1
opencodeand the lane ledger already carries bound claimant session ses_e5e5cad3cadffemQ5io2NYBnVf. Handed off to that session — PR fix(aggregator): sanitize stored quiet prefs on read #5169 is canonical for issue aggregator(alerts): sanitize stored out-of-range quiet prefs at read time (#3702 disposition 1) #4978. No duplicate session should be launched.dezren39 commentedon Nov 4, 2026
🤖 Agent note · handed off
opencodedezren39 commentedon Nov 4, 2026
🤖 Agent note · handed off
dezren39 commentedon Nov 4, 2026
🤖 Agent note · handed off
opencodedezren39 commentedon Nov 4, 2026
agent-note:v1
task 8593 picked up by lane code-g; execution lane opencode with a bound claimant session already recorded (ses_e5e5cad3cadffemQ5io2NYBnVf) — handed off; the bound session drives task 8593 to its terminal state. Issue #4978 OPEN, PR #5169 OPEN (canonical), no hard-stop labels.
dezren39 commentedon Nov 4, 2026
🤖 Agent note · bound
dezren39 commentedon Nov 4, 2026
🤖 Agent note · handed off
opencode; handed off to the laptop opencode claimant, which launches the bound session that drives task 8593 to its terminal state.dezren39 commentedon Nov 4, 2026
🤖 Agent note · handed off
dezren39 commentedon Nov 4, 2026
dezren39 commentedon Nov 4, 2026
🤖 Agent note · picked up
dezren39 commentedon Nov 4, 2026
🤖 Agent note · handed off
dezren39 commentedon Nov 4, 2026
🤖 Agent note · handed off
ses_e5e59053e56ffewpbGrfQr5kp5