# Reminder-Storm Regression, July 23, 2026

## Incident

One retained 3.3-second Channel 1 event previously produced reminders 3-7
within roughly two minutes. The corrected policy requires one trusted PTT to
produce one staged update with no repeat schedule unless later evidence proves
multiple presses, Morse-like signaling, directed voice, or an emergency.

## Implemented Safeguards

- A single trusted PTT emits one `ptt_press` update and forces repeat policy
  `none`.
- Acknowledgment or dismissal updates incident state and deactivates the
  reminder schedule in one SQLite transaction.
- A scheduler atomically leases the exact due row before delivery. A second
  overlapping or restarted worker cannot claim the same due time.
- Inference claims preserve acknowledged, dismissed, and closed states.
- Inference and reminder push paths recheck persisted resolution immediately
  before delivery.
- Schedule advancement cannot reactivate a resolved incident.

An external push already in flight when acknowledgment occurs may complete.
Every reminder still pending in SQLite is canceled immediately and cannot be
resurrected by inference or scheduler restart.

## Regression Coverage

The complete radio suite passed 77 tests. The reminder-storm acceptance cases
are:

```text
test_single_trusted_ptt_pushes_once_without_reminder_schedule
test_acknowledgment_atomically_cancels_pending_reminders
test_stale_inference_cannot_resurrect_closed_incident
test_overlapping_workers_cannot_claim_same_reminder
test_scheduler_restart_does_not_duplicate_a_claimed_reminder
```

Command:

```bash
/home/david/.venvs/radio/bin/python -m unittest -v test_radio_emergency
```

## Deployment Verification

After service deployment:

- the scheduler, inference worker, API, and indicator were active;
- the managed receiver was restored to all-FRS mode;
- Channel 1 was centered at `462.5625 MHz`;
- IQ input was `12 MS/s`;
- all 22 FRS probes were active;
- idle waterfall cadence returned to 2 rows/s after browser disconnect;
- audio and waterfall client counts returned to zero;
- transcription and inference queues were zero;
- receiver driver-anomaly count was zero;
- active reminder schedule count was zero.

## Remaining Live Gate

Software regression coverage is accepted. Full Phase 0 acceptance still
requires a controlled State F run proving one real phone notification for one
PTT, immediate cancellation after real acknowledgment, no stale inference
follow-up, and no duplicate delivery after a managed scheduler restart.
