Repository navigation
Description
Found while giving Android per-day wake times for its phone alarm (#1858).
What the setting does today
WindDownNudge.perDayWakeOverrides has exactly two readers:
wakeMinutes(forWeekday:)→nudgeMinuteOfDay(forWeekday:)→ the wind-down nudge fan-out;SmartAlarmView, which edits them.
Nothing else reads them. The alarm backup itself takes a single time plus a day set:
static func scheduleSmartAlarmBackupNotification(minutes: Int, weekdays: Set<Int>, …)So a per-day override moves the evening reminder and leaves the wake on the default time.
Why that is worse than not offering it
The control lives in SmartAlarmView — the alarm screen — beside the wake time. Someone who sets "Tuesday 03:30" there has every reason to expect to be woken at 03:30 on Tuesday. They will be woken at the default time instead, with only the reminder shifting, and nothing on screen says so.
That is the same complaint that produced #1858 on Android, one platform over: a user asked for 04:45 on three days and 03:30 on two, could not express it, and reasonably concluded the feature was broken. Here it looks expressible and silently is not.
Options, since this is a scope decision rather than an obvious bug
- Honour the overrides in the backup notification. It already fans out per-weekday ids (
smartAlarmBackupIds, and it clears both shapes), so the structure is there — each weekday trigger would take that day's own time instead of the sharedminutes. This is what Android now does. - Scope the control to what it actually affects — move it under the wind-down section, or label it as the reminder's schedule.
- Leave it, if the backup notification is deliberately kept simple because iOS cannot ring a real alarm and the strap buzz is the real wake.
Worth a decision either way: the current state is the one option that misleads.
Related
- Apple: the per-day wind-down nudge fires on the wrong day for an early wake #1863 — the per-day nudge fires on the wrong weekday for an early wake (a real bug in the same code, on both platforms; Android is fixed, Swift is not).
- Phone alarm has no per-day wake times, though the strap alarm on the same screen does #1858 / PR alarm: per-day wake times for the phone alarm (#1858) #1859 — the Android side, where per-day times now drive the alarm, the strap buzz, the guarantee card and the wind-down.
Also worth noting for whoever picks this up: Android now stores per-day overrides in TWO places — NoopPrefs.smartAlarmDayOverrides (strap, #554) and SmartAlarmStore.targetOverrides (phone, #1859) — while Apple has one. Same "dow:minute" encoding and validation on all three, so there is no format drift, but the question of whether one set should drive both alarms is open on both platforms.
Activity
alarm: per-day wake times for the phone alarm (#1859)
test: fix ryanbr#1864 override test — weekdays:[] means every day, so…
alarm: per-day wake overrides now drive the strap alarm and backup no…
evoveotech commentedon Sep 10, 2026
Verified fixed:
scheduleSmartAlarmBackupNotificationnow acceptsoverrides: [Int: Int]and fans out to per-weekday triggers at each day's own wake time. Explicit#1864comments inStrand/App/AppModel.swiftlines 1372-1395.Alarms screen: say which wake time actually wakes you
Alarms screen: say which wake time actually wakes you
Alarms screen: say which wake time actually wakes you, and when (#2353)
Recompute quiet advice and handle each wake occurrence once
Merge the published design and feature hosts
Declare planner twins and remove unused adaptive policy
Refresh the planner parity inventory through the guarded flow