Skip to content

DDM OS Reminder (4.0.0)

Latest

Choose a tag to compare

@dan-snelson dan-snelson released this 09 Jul 19:51
v4.0.0
406d49d

09-Jul-2026

  • Reworked daemon orchestration so /Library/LaunchDaemons/<rdnn>.dor.plist now runs lightweight dor-starter.zsh every 60 seconds instead of launching the main reminder script directly.
  • Added runtime scheduler assets /Library/Management/<rdnn>/dor-starter.zsh, dor-state.plist, and dor.pid, with NextScheduledReminder / DaemonLastTriggered state managed through PlistBuddy.
  • Added DailyReminderTimes preference (HH:MM CSV, local time) so baseline reminder slots are admin-controlled through deployed .plist / .mobileconfig content, with default 08:00,12:00,16:00.
  • Added MinutesBeforeDeadlineReminderSchedule preference (45,30,15,10,5 by default) for discrete final-minute reminders before the effective DDM enforcement deadline, with per-threshold delivery state stored in dor-state.plist.
  • Added pre-deadline threshold dialog copy keys, localized sample strings, preview support, and quiet-period bypass logic so configured 45/30/15/10/5-minute reminders are not suppressed by earlier interactions.
  • Added plist-backed timing controls for quiet-period suppression, outside-window periodic reminders, secondary-button disable/hide behavior, and past-deadline Force-mode restart cadence: QuietPeriodMinutes, OutsideDisplayWindowPeriodicReminderDays, DisableButton2InsteadOfHide, PastDeadlineRestartMinimumUptimeMinutes, PastDeadlineForceTimerSeconds, and PastDeadlineForceRedisplayDelaySeconds.
  • Added default-on past-deadline aggressive mode with AggressiveModePastDeadlineHours, AggressiveModeFrequencyMinutes, update-focused aggressive title/message localization, demo/preview support, exact redisplay scheduling through dor-state.plist, and support kill switch /Library/Management/<rdnn>/dor-aggressive-kill.
  • Tightened aggressive-mode scheduling so daemon-managed reminder runs continue exact redisplay cadence even after the user clicks Open Software Update, preserving persistent prompting until compliance or support suppression.
  • Added color-safe pre-deadline threshold emphasis placeholders so final-minute warning and action sentences render red on swiftDialog builds with markdown color support.
  • Added automatic refresh for open daemon-managed reminder dialogs when a configured final-minute threshold becomes due, closing the stale swiftDialog process and immediately queuing the latest due threshold reminder.
  • Fixed post-dialog pre-deadline scheduling so if a threshold dialog remains open while later thresholds pass, the latest due threshold is queued immediately instead of falling back to the baseline schedule.
  • Hardened runtime scheduler state handling so malformed dor-state.plist files are logged, quarantined, and recreated instead of causing the heartbeat to relaunch dor.zsh every 60 seconds.
  • Updated Resources/reminderDialogPreferenceTest.zsh to warn when runtime scheduler state cannot be inspected instead of reporting unreadable dor-state.plist values as unset.
  • Fixed rendered deadline punctuation so relative times such as Today, 5:50 a.m. do not gain a duplicate period when managed copy adds sentence punctuation after the deadline placeholder.
  • Updated runtime scheduling to honor exact quiet-period redisplay times, while keeping direct/manual/demo runs from mutating daemon scheduler state.
  • Updated All, LaunchDaemon, and Uninstall reset paths to unload and remove every discovered DDM OS Reminder LaunchDaemon plist before recreating the current heartbeat daemon, while reporting absent runtime assets separately from removed files.
  • Added an assemble.zsh source-version guard so artifacts fail fast when the wrapper, assembler, and embedded reminderDialog.zsh versions are out of sync.
  • Updated Resources/sample.plist, Resources/reminderDialogPreferenceTest.zsh, README.md, Resources/README.md, and AGENTS.md to document the heartbeat starter architecture and new dor- runtime asset names.
  • Updated deadline display placeholders and infobox Deadline / Day(s) Remaining values to follow the effective enforcement deadline, including trusted padded enforcement dates, so reminder copy matches macOS managed-update notifications.

Screenshot 2026-06-29 at 5 38 54 PM Screenshot 2026-06-27 at 9 09 01 AM

What's Changed

Full Changelog: v3.3.0...v4.0.0