Digest scheduling is pure, read end to end and well tested; the AI key panel now loses its only Remove path for a lapsed add-on.
- Digest subscribers gain send_hour plus day/hour/timezone scheduling
- isDigestDue claims a row only inside the subscriber’s local send window
- AI provider and auto-triage merge into one AI settings tab
Before merge
Findings
OpenRouterKeyPanel returns AddOnUpsell before the saved-key branch whenever the add-on lapses, so the only Remove call site is unreachable. Pass onRemove down and keep the saved-key row next to the add-on button.
Production impact · last 7 days
Observability coverage: 2 of 2 changes observable