reschedulePersistedAlarms re-armed every stored alarm through the native recompute engine (trustDartTrigger defaulted to false). That engine can diverge from Dart's next-occurrence verdict and arm the alarm for the wrong day, so it silently never fires. Because this runs on boot, unlock and ACTION_MY_PACKAGE_REPLACED (which fires on every app install), each new build re-broke correctly-armed alarms while snooze kept working (snooze never touches the recompute for its trigger value). Trust the persisted trigger (Dart's own verdict, saved when the alarm was last armed) whenever it is still in the future; a genuinely stale past trigger still falls back to the native recompute inside scheduleSpec.