29-Jun-2026
- Reworked daemon orchestration so
/Library/LaunchDaemons/<rdnn>.dor.plistnow runs lightweightdor-starter.zshevery 60 seconds instead of launching the main reminder script directly. - Added runtime scheduler assets
/Library/Management/<rdnn>/dor-starter.zsh,dor-state.plist, anddor.pid, withNextScheduledReminder/DaemonLastTriggeredstate managed throughPlistBuddy. - Added
DailyReminderTimespreference (HH:MMCSV, local time) so baseline reminder slots are admin-controlled through deployed.plist/.mobileconfigcontent, with default08:00,12:00,16:00. - Added
MinutesBeforeDeadlineReminderSchedulepreference (45,30,15,10,5by default) for discrete final-minute reminders before the effective DDM enforcement deadline, with per-threshold delivery state stored indor-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 default-on past-deadline aggressive mode with
AggressiveModePastDeadlineHours,AggressiveModeFrequencyMinutes, update-focused aggressive title/message localization, demo/preview support, exact redisplay scheduling throughdor-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.
- 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, andUninstallreset paths to unload and remove every discovered DDM OS Reminder LaunchDaemon plist before recreating the current heartbeat daemon. - Added an
assemble.zshsource-version guard so artifacts fail fast when the wrapper, assembler, and embeddedreminderDialog.zshversions are out of sync. - Updated
Resources/sample.plist,Resources/reminderDialogPreferenceTest.zsh,README.md,Resources/README.md, andAGENTS.mdto document the heartbeat starter architecture and newdor-runtime asset names. - Updated deadline display placeholders and infobox
Deadline/Day(s) Remainingvalues to follow the effective enforcement deadline, including trusted padded enforcement dates, so reminder copy matches macOS managed-update notifications.
What's Changed
- 4.0.0b2 by @dan-snelson in #111
- 4.0.0b14 by @dan-snelson in #112
- 4.0.0b17 by @dan-snelson in #113
Full Changelog: v3.3.0...v4.0.0b17