13-Oct-2026
-
Added a read-only client-state diagnosis helper and agent skill so Mac Admins can upload the client-side log,
/var/log/install.log, and client-side.plistand get a fact sheet of effective settings,install.logdeclaration evidence, and the last run's recorded resolver result (Issue #147)Resources/diagnoseReminderState.zshwrites nothing. The client log'sNormal DDM resolver resultline is authoritative for what that Mac did. The fact sheet follows the5.1.0install.log timestamp rule and minute-threshold order, and it redacts usernames,/Userspaths, install.log computer names, and labeled serial numbers.- Agent instructions live at
Resources/skills/diagnose-client-state/SKILL.md, with links from.github/skills,.agents/skills, and.claude/skills.
-
AllandScriptredeployments now keep/Library/Management/<rdnn>/dor-state.plist, so redeploying inside aMinutesBeforeDeadlineReminderSchedulewindow no longer shows an already-delivered pre-deadline threshold reminder again (Issue #149)- Pre-deadline threshold delivery records and
UpdateTonightSuppressionUntilcarry across the redeploy; threshold records still reset automatically when the deadline/version signature changes. - Only
NextScheduledReminderis cleared, so the refreshed heartbeat still evaluates reminders right after deployment (and a staleFALSEvalue cannot silence the Mac). - Deployment logs
[NOTICE]when scheduler state is preserved and whenNextScheduledReminderis cleared. An unreadable state file is logged at[WARNING]and left for the starter and runtime to quarantine. Scriptnow unloads and removes the current heartbeat LaunchDaemon before stopping the active runtime and clearingNextScheduledReminder(asAllalready did), so a heartbeat firing mid-redeploy can no longer relaunch the previousdor.zshbeside the replacement or overwrite the cleared schedule. The LaunchDaemon is recreated and loaded at the end of deployment as before.- Upgrade note: Only
Uninstallremovesdor-state.plist, matching the aggressive-mode kill switchdor-aggressive-kill.
- Pre-deadline threshold delivery records and
-
Replaced the percentage-based low-disk-space warning with a fixed GB threshold, so large disks no longer warn with hundreds of GB free and small disks no longer under-warn (Issue #146; idea credit: @zte303, DDM-Notify-Basic)
- New
MinimumDiskFreeGBpreference (Resources/sample.plistdefault26, matching Apple's last published macOS upgrade requirement (Monterey: 26 GB);0disables) is compared against the existing Finder-aligned available-capacity value (diskutilfallback) in decimal GB, matching the displayed value. {diskSpaceHumanReadable}and the infobox Free Disk Space line are unchanged.- Each evaluation logs
[INFO] Disk space: … free; MinimumDiskFreeGB threshold … GB; warning shown|suppressed. - Applied the same change to
Resources/reminderDialogPreferenceTest.zshandResources/createPlist.zsh. - Upgrade note:
MinimumDiskFreePercentageis deprecated. WhenMinimumDiskFreeGBis not set, an existingMinimumDiskFreePercentagevalue is still honored and logged at[WARNING]; when both are set,MinimumDiskFreeGBwins and the legacy key is logged as ignored. Support will be removed in6.0.0. Regenerated configuration carries onlyMinimumDiskFreeGB. - Prior-plist import in
assemble.zshnames the replacement instead of listingMinimumDiskFreePercentageas an unsupported key:⚠️ Replaced deprecated MinimumDiskFreePercentage (10%) with MinimumDiskFreeGB (26 GB, sample default), or⚠️ Dropping deprecated MinimumDiskFreePercentage (…%); keeping imported MinimumDiskFreeGB (… GB)when the prior plist already has both (or… imported MinimumDiskFreeGB '…' was invalid, using MinimumDiskFreeGB (26 GB, sample default)when its value is outside0–999). When a prior plist carriedMinimumDiskFreePercentage, production builds also listMinimumDiskFreeGBunder Recommended review items.
- New
-
Prior-plist import in
assemble.zshnow skips numeric values outside0–999(keeping the sample default and printing⚠️ Skipping invalid integer value … (expected 0-999)), matching the runtime, which already ignored them. -
Infobox Deadline now renders in red whenever Day(s) Remaining does, including the final ~12 hours before the effective deadline when Day(s) Remaining rounds to
0(requires swiftDialog markdown-color support) (Issue #143)Resources/reminderDialogPreferenceTest.zshapplies the same highlighting, so--pre-deadline-thresholdand--aggressivepreviews show Deadline and Day(s) Remaining in red.- Square brackets in a red-highlighted deadline (for example, from a custom
DateFormatDeadlineHumanReadable) render as parentheses in the infobox Deadline and the red deadline enforcement sentence, so a literal]no longer ends swiftDialog's:red[…]markup early. Uncolored output is unchanged.
Full Changelog: v5.1.0...v5.1.0