DDM-OS-Reminder
AGENTS.md131 starsChanged 3 days agoMITView on GitHub
We split this AGENTS.md into the rules it gives an agent
48 rules. About 0 are common, 23 are distinctive, and 25 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈23
Distinctive · estimate
This author's own choices. Worth a look.
25
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 31
Default user-facing communication mode: $caveman full, except for security warnings, irreversible actions, or clear user confusion.
- Distinctive: line 33
Use surgical edits. Reference exact functions, sections, preference keys, or paths instead of pasting broad rewrites.
- Distinctive: line 34
Treat context like scalpel, not net.
- Very specific: line 35
After any edit to reminderDialog.zsh, launchDaemonManagement.zsh, or assemble.zsh, run zsh -n on modified scripts immediately.
- Very specific: line 36
After reminder runtime behavior changes, use zsh reminderDialog.zsh demo as first feedback loop.
- Distinctive: line 37
When reminder logic affects deployment behavior, re-assemble before treating change as deployment-ready.
- Distinctive: line 38
Never introduce debug, fixture, or local-test behavior into default production paths unless task explicitly requires it.
- Distinctive: line 39
Prefer batching related work into one well-scoped prompt.
- Very specific: line 45
Use pre-release-review for an independent, read-only release-readiness audit.
- Very specific: line 48
Start from nearest owning function or decision path in reminderDialog.zsh.
- Very specific: line 51
Run zsh -n reminderDialog.zsh immediately after edit.
- Very specific: line 52
Run zsh reminderDialog.zsh demo as first behavior check.
- Distinctive: line 53
If deployment behavior changed, re-assemble and review affected docs.
- Very specific: line 58
Run zsh -n on every touched Zsh script immediately after edit.
- Very specific: line 60
Do not regenerate tracked Artifacts/ unless task explicitly requires it.
- Very specific: line 63
Start from Resources/sample.plist and nearby runtime preference reads.
- Very specific: line 65
Keep PlistBuddy-based reads and existing key-mapping behavior.
- Distinctive: line 67
Update docs and changelog when operator-facing behavior changes.
- Very specific: line 71
Run zsh Resources/diagnoseReminderState.zsh when available.
- Distinctive: line 73
Read-only: do not write preferences, scheduler state, or LaunchDaemons.
- Very specific: line 76
Treat .github/workflows/security-scan.yml as a blocking security gate: Semgrep runs with --error, Gitleaks is blocking, and finalizer steps …
- Distinctive: line 78
When refreshing action pins, resolve annotated tags to the underlying commit SHA before updating the workflow.
- Distinctive: line 79
Do not weaken blocking scan behavior, SARIF upload conditions, or finalizer failure logic unless the task explicitly asks for a policy …
- Distinctive: line 84
Read any repository file.
- Distinctive: line 85
Run non-mutating searches, diffs, syntax checks, and demo-mode validation.
- Distinctive: line 87
Update docs that must stay aligned with behavior changed in current task.
- Distinctive: line 90
Add new production dependencies or external runtime checks.
- Distinctive: line 100
Add non-macOS behavior or vendor-lock core reminder flow to one MDM.
- Distinctive: line 104
When files disagree, prefer:
- Very specific: line 130
Keep preference behavior stable: Managed Preferences -> Local Preferences -> Defaults.
- Distinctive: line 132
Keep user-facing reminder behavior clear, actionable, and observable through structured logging.
- Distinctive: line 133
Keep assembled deployment workflow predictable across heartbeat daemon, starter/state assets, script, plist, mobileconfig, and …
- Very specific: line 161
Only starter-launched runs should mutate dor-state.plist or dor.pid.
- Very specific: line 176
Default RDNN placeholder is org.churchofjesuschrist.
- Very specific: line 178
Treat Artifacts/ as generated but potentially tracked output.
- Distinctive: line 182
Check git status before editing shared docs, generated artifacts, or cross-cutting files so unrelated local work is not overwritten.
- Distinctive: line 183
Avoid hidden behavior changes during refactors.
- Very specific: line 184
If behavior, preferences, or operator workflow change, update affected docs in README.md, Resources/README.md, Diagrams/, and CHANGELOG.md …
- Very specific: line 189
Keep lowerCamelCase for variables and function names.
- Very specific: line 190
Keep function declaration style function name() { with same-line braces for control flow.
- Very specific: line 191
Prefer "${var}" expansions and existing quoting patterns.
- Distinctive: line 193
Keep comments intentional and sparse.
- Very specific: line 195
Keep new deadline, suppression, or restart-threshold logic observable with [NOTICE] or [WARNING] logs.
- Very specific: line 215
Run zsh -n on every modified Zsh script, including Resources/diagnoseReminderState.zsh when touched.
- Very specific: line 221
When behavior, preferences, or operator workflows change, update affected docs in README.md, Resources/README.md, Diagrams/, and …
- Distinctive: line 222
Do not add new production dependencies without explicit approval.
- Very specific: line 229
Keep scriptVersion aligned across shipped scripts when release-affecting changes touch versioned artifacts.
- Distinctive: line 233
Verify no test-only, demo-only, or local fixture behavior leaked into production reminder flow.
≈ “Common” is an estimate: at least 1 in 5 of the 36,368 AGENTS.md files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
AGENTS.md
Single source of truth for coding agents (Claude Code, Cursor, Copilot, Aider, etc.) working in this repo.
Takes precedence over README.md, CONTRIBUTING.md, Resources/projectPlan.md, and similar instruction files when workflow rules conflict.
Claude Code users: symlink with ln -s AGENTS.md CLAUDE.md or reference via @AGENTS.md from a minimal CLAUDE.md.
Orchestration Contract
This file codifies repo rules, boundaries, workflows, and repeatable skills. If same correction repeats, formalize it here instead of re-prompting it.
Project Overview
DDM OS Reminder is macOS-only, MDM-agnostic reminder system for DDM-enforced macOS update deadlines.
- Primary runtime flow lives in
reminderDialog.zsh, deployed as/Library/Management/<rdnn>/dor.zshthroughlaunchDaemonManagement.zsh, and packaged byassemble.zsh. - v4 scheduling uses a heartbeat
LaunchDaemonwhich callsdor-starter.zsh; the starter consults/Library/Management/<rdnn>/dor-state.plistbefore deciding whether to launchdor.zsh. assemble.zshembedsreminderDialog.zshintolaunchDaemonManagement.zshvia heredoc. Reminder logic changes are not deployment-ready until re-assembled.- Runtime reads
/var/log/install.log, resolves trustworthy DDM enforcement state, then uses swiftDialog to present user-facing reminder messaging. - Optional emergency fallback lives at
/Library/Management/<rdnn>/dor-fallback-declaration.plist; runtime may select it after normal DDM resolution returnsmissing,conflict,noMatch, orinvalidVersion. - Baseline reminder slots are admin-controlled through
DailyReminderTimesin deployed preferences. Mutable scheduler state does not belong in managed/local preference payloads. - Past-deadline aggressive mode is default-on through
AggressiveModePastDeadlineHours/AggressiveModeFrequencyMinutes; support suppression is runtime-only via/Library/Management/<rdnn>/dor-aggressive-kill. - Project does not perform OS updates, target non-macOS platforms, or act as general-purpose update/remediation framework.
Key Commands
- Validate syntax after every Zsh edit:
zsh -n reminderDialog.zsh,zsh -n launchDaemonManagement.zsh,zsh -n assemble.zsh,zsh -n Resources/reminderDialogPreferenceTest.zsh, andzsh -n Resources/diagnoseReminderState.zshwhen touched - Fastest runtime smoke test:
zsh reminderDialog.zsh demo - Build deployable artifacts:
zsh assemble.zsh - Review build and packaging workflow:
zsh assemble.zsh --help - Preference/dialog validation helper:
zsh Resources/reminderDialogPreferenceTest.zsh --help - Client-state diagnosis (uploaded logs/plist):
zsh Resources/diagnoseReminderState.zsh --help
Agent Workflow
- Confirm this file is loaded before starting non-trivial work.
- Default user-facing communication mode:
$caveman full, except for security warnings, irreversible actions, or clear user confusion. - Ground decisions in repo truth first: inspect script behavior, nearby docs, and helpers before changing policy or behavior.
- Use surgical edits. Reference exact functions, sections, preference keys, or paths instead of pasting broad rewrites.
- Treat context like scalpel, not net. Gather only enough local evidence to make smallest correct change.
- After any edit to
reminderDialog.zsh,launchDaemonManagement.zsh, orassemble.zsh, runzsh -non modified scripts immediately. - After reminder runtime behavior changes, use
zsh reminderDialog.zsh demoas first feedback loop. - When reminder logic affects deployment behavior, re-assemble before treating change as deployment-ready.
- Never introduce debug, fixture, or local-test behavior into default production paths unless task explicitly requires it.
- Prefer batching related work into one well-scoped prompt; if repeated task pattern emerges, capture it in Skills below.
Skills
Invoke relevant skill name during planning.
Pre-release Review Skill
Use pre-release-review for an independent, read-only release-readiness audit. Supply the target version; branches default to development and main. Keep the detailed review workflow in that canonical skill.
Reminder Runtime Change Skill
- Start from nearest owning function or decision path in
reminderDialog.zsh. - Preserve DDM trust rules, suppression semantics, and structured logging.
- Preserve scheduler contract: baseline runs resolve from
DailyReminderTimes; exact-time reschedules live indor-state.plist; manual/demo runs do not mutate daemon scheduler state. - Run
zsh -n reminderDialog.zshimmediately after edit. - Run
zsh reminderDialog.zsh demoas first behavior check. - If deployment behavior changed, re-assemble and review affected docs.
Deployment Flow Change Skill
- Trace change across
launchDaemonManagement.zsh,assemble.zsh, generated plist/mobileconfig expectations,dor-starter.zsh/dor-state.plist/dor.pidruntime assets, and RDNN-sensitive paths. - Preserve embedded-script contract:
reminderDialog.zshchanges are not live in deployment flow until assembled. - Run
zsh -non every touched Zsh script immediately after edit. - Review
Resources/README.mdand packaging helpers before calling work complete. - Do not regenerate tracked
Artifacts/unless task explicitly requires it.
Preference or Localization Change Skill
- Start from
Resources/sample.plistand nearby runtime preference reads. - Preserve precedence
Managed Preferences -> Local Preferences -> Defaults. - Keep
PlistBuddy-based reads and existing key-mapping behavior. - Validate fallback behavior, especially English and existing language families.
- Update docs and changelog when operator-facing behavior changes.
Diagnose Client State Skill
- Required uploads are the client-side log,
/var/log/install.log, and the client-side.plist. - Run
zsh Resources/diagnoseReminderState.zshwhen available; followResources/skills/diagnose-client-state/SKILL.md. - The client log's
DDM update check:line (Normal DDM resolver resultbefore5.2.0) is what that Mac did. Do not re-decide resolver status. - Read-only: do not write preferences, scheduler state, or LaunchDaemons.
Security Workflow Change Skill
- Treat
.github/workflows/security-scan.ymlas a blocking security gate: Semgrep runs with--error, Gitleaks is blocking, and finalizer steps should fail when findings or upload failures require attention. - Pin every GitHub Actions
uses:reference insecurity-scan.ymlto a full 40-character commit SHA, not a mutable tag or branch. Keep the upstream tag as a trailing maintenance comment, for exampleuses: actions/checkout@<40-char-sha> # v6. - When refreshing action pins, resolve annotated tags to the underlying commit SHA before updating the workflow.
- Do not weaken blocking scan behavior, SARIF upload conditions, or finalizer failure logic unless the task explicitly asks for a policy change.
- Validate workflow edits with
git diff --checkand confirm no mutable action refs remain insecurity-scan.yml.
Boundaries
Always allowed without asking
- Read any repository file.
- Run non-mutating searches, diffs, syntax checks, and demo-mode validation.
- Make small targeted edits that preserve established Zsh style and repo contracts.
- Update docs that must stay aligned with behavior changed in current task.
Ask before doing
- Add new production dependencies or external runtime checks.
- Regenerate or replace tracked files under
Artifacts/. - Change preference names, default values, precedence, or deployed plist/mobileconfig contracts.
- Change LaunchDaemon label/path conventions, RDNN placeholder strategy, or script/log path contracts.
- Change default reminder timing, post-deadline restart behavior, or user-facing suppression semantics.
- Prepare release-facing updates whose main purpose is packaging, artifact refresh, or release publication.
Never do
- Break RDNN consistency across
reminderDialog.zsh,launchDaemonManagement.zsh, generated plist, and generated mobileconfig. - Replace
PlistBuddy-based preference reads withdefaults read. - Add non-macOS behavior or vendor-lock core reminder flow to one MDM.
- Overwrite unrelated local changes or edit outside task scope without explicit approval.
Source of Truth
When files disagree, prefer:
reminderDialog.zsh,launchDaemonManagement.zsh, andassemble.zshfor implemented behavior, deployment flow, andscriptVersion.Resources/sample.plistfor canonical deployable preference surface and shipped default values.README.md,Resources/README.md, andDiagrams/for current operator and deployment documentation.CHANGELOG.mdfor shipped behavior history and release notes.Resources/projectPlan.mdfor historical architecture and product context, not runtime truth.
Mission and Scope
Mission: give Mac admins prominent, actionable, customizable user messaging for DDM-enforced macOS update deadlines while staying MDM-agnostic, deployment-friendly, and operationally observable.
In scope:
- DDM-enforced macOS update deadline detection and reminder messaging
- swiftDialog UX and supporting deployment workflow
- LaunchDaemon-managed scheduling, preference-driven customization, and structured logging
- Packaging helpers, configuration generation, localization support, and admin validation tooling
Out of scope:
- non-macOS support
- performing OS updates as primary behavior
- general software-update prompting beyond DDM-enforced macOS deadlines
- replacing MDM platforms, softwareupdate orchestration, or full compliance suites
Implementation Priorities
- Preserve trustworthy DDM deadline and target-version resolution from
/var/log/install.logand related declaration state. - Preserve RDNN consistency end-to-end. Silent RDNN mismatch is highest-risk configuration bug.
- Keep preference behavior stable:
Managed Preferences -> Local Preferences -> Defaults. - Keep reminder semantics stable: quiet period begins after user interaction, not dialog display; past-due enforcement state may wait up to 5 minutes for refreshed DDM state before acting; aggressive mode starts after
AggressiveModePastDeadlineHoursunless the support kill switch exists; once aggressive mode is active,Open Software Updateand dismissal paths keep exact-time redisplay scheduling until compliance or support suppression. - Keep user-facing reminder behavior clear, actionable, and observable through structured logging.
- Keep assembled deployment workflow predictable across heartbeat daemon, starter/state assets, script, plist, mobileconfig, and self-extracting helper paths.
Key Files
reminderDialog.zsh: core runtime logic, deadline parsing, user checks, dialog rendering, logginglaunchDaemonManagement.zsh: deployment and reset logic, heartbeat LaunchDaemon creation/loading, embeddeddor.zshand generateddor-starter.zshwriter, runtime asset cleanup, MDM Script Parameter 4 reset handling, and Parameters 5/6 fallback persistenceassemble.zsh: artifact builder, RDNN harmonization, heredoc embedding, syntax checks, plist and mobileconfig generationREADME.md: current project overview, features, upgrade notes, operator guidanceResources/README.md: assembly, packaging, plist/mobileconfig, EA, preference-test, and client-state diagnosis instructionsResources/sample.plist: canonical localization and preference surface for generated configsResources/reminderDialogPreferenceTest.zsh: preference-driven dialog validation helperResources/diagnoseReminderState.zsh: read-only, redacted fact sheet from uploaded client log,install.log, and plist, or from live paths on the affected Mac via--rdnn; opt-in--no-redactionwith--rdnnalso saves the unredacted fact sheet to/Library/Management/<rdnn>/Resources/skills/diagnose-client-state/SKILL.md: agent instructions for client-state diagnosisCHANGELOG.md: release history and shipped behavior summaryArtifacts/: generated build outputs that may be tracked; do not refresh casually
Current Runtime Hotspots
- Deadline resolution must fail safely when declaration state is missing, conflicting, invalid, or stale. Recognized unresolved states suppress reminder dialog unless a validated DDM Emergency Fallback is selected.
- DDM Emergency Fallback is eligible for resolver statuses
missing,conflict,noMatch, andinvalidVersion; confirmed DDM always wins, absent or invalid fallback preserves suppression, and unknown states fail closed. Exception: aconflictfrom a leftover declaration (Declaration persisted after 'No updates found for DDM to enforce') or a different offered update (Available descriptor <version> disagrees with DDM declaration <version>) that the installed macOS already meets skips fallback and logs at[NOTICE], not[WARNING]. - Fallback configuration stays in
dor-fallback-declaration.plist, never managed/local preferences ordor-state.plist. Past fallback deadlines use their supplied timestamp and never wait forsetPastDuePaddedEnforcementDate. - Post-deadline restart workflow gates on effective post-deadline epoch when safely resolved, not raw
EnforcedInstallDatealone. - Quiet period starts after user interaction, not when dialog first appears.
- Baseline reminder slots resolve from
DailyReminderTimesin deployed preferences. Default sample values (08:00,12:00,16:00) are fallback defaults, not runtime hardcodes. - Pre-deadline minute thresholds resolve from
MinutesBeforeDeadlineReminderSchedule(45,30,15,10,5by default). Per-threshold delivery state stays indor-state.plist. - Past-deadline aggressive cadence resolves from
AggressiveModePastDeadlineHours(2by default) andAggressiveModeFrequencyMinutes(20by default). Mac Admins can effectively suppress it with a high hour value such as720; support can temporarily suppress it with/Library/Management/<rdnn>/dor-aggressive-kill. - Low-battery warning (
MinimumBatteryPercentage,0–100, default50;0disables) is messaging-only: warn only on positivepmset -g psevidence (Battery Power+ parsed-InternalBattery-charge below threshold), never on AC/UPS/no-battery/unreadable states, never gatePrompt/Force, keep{batteryWarningMessage}in restart mode, and never simulate power state in production (preview viareminderDialogPreferenceTest.zsh --battery-percentage). - Update Tonight suppression is runtime-only (no preference key). Same-day, post-boot
SUOSUInstallTonightManager: Queued+SUOSUScheduler: ARMED (… simulated=NO)evidence for the target version suppresses normal reminders until local midnight. Threshold, aggressive, and Force bypass it, and it never applies when the effective deadline is at or before midnight.UpdateTonightSuppressionUntillives only indor-state.plist. dor-starter.zshis expected to exit quietly whenNextScheduledReminderisFALSEor future-dated. Exception: once per boot, the first heartbeat with a console user launchesDOR_LAUNCH_REASON=postBoot(markerLastBootReevaluation=kern.boottimeepoch); that run only moves the schedule earlier unless a threshold, aggressive, or Force reminder is due. During a Maintenance DarkWake (pmset -g systemstatelistsCPUbut notGraphics), a due starter logs[NOTICE] DarkWake detected …and exits without launching or writing state; unrecognizedpmsetoutput fails open. Checkdor-state.plistbefore treating a no-op heartbeat as failure.- No reminder mode bypasses the runtime DarkWake check before dialog build: a DarkWake run schedules an exact retry 60 seconds later (starter runs only) and logs
No reminder shown: the Mac is in a Maintenance DarkWake …, so threshold, aggressive, and Force reminders never slip to a later baseline slot. The Force loop indisplayReminderDialogre-checks before each redisplay and before a timer (4) restart viadeferForceRestartForDarkWake(60-second retry, no restart); a0click still restarts. - Only starter-launched runs should mutate
dor-state.plistordor.pid; direct/manual/demo runs bypass daemon scheduler writes. - Once aggressive mode is active,
Open Software Updateand dismissal paths should keep exact-time redisplay scheduling; non-aggressive update flows still return to the next baseline reminder slot unless a configured pre-deadline minute threshold or the aggressive-mode start (effective deadline +AggressiveModePastDeadlineHours, kill switch absent) is earlier. displayReminderDialogre-runsevaluateAggressiveModeStatewhen the dialog returns, before the threshold auto-refresh dispatch, so a reminder (threshold or not) answered after the aggressive-mode start schedulesAggressiveModeFrequencyMinutesfrom the answer. A threshold dialog ending without a user-interaction return code stays undelivered and retries in 60 seconds only when that retry is before the effective deadline; return code9never retries.- When
/var/db/softwareupdate/SoftwareUpdateDDMStatePersistence.plistis readable,install.logdeclaration candidates must match one of its activeDeclarations(TargetOSVersion+TargetLocalDateTime); runtime and both Pending-OS EAs share this rule. Missing or unrecognized plist keepsinstall.log-only behavior with runtime[WARNING](accepted residual risk documented inSECURITY.md). Update Tonight positive evidence must come fromsoftwareupdated[pid]. assemble.zshsplicesScriptLoginto generated Zsh; imported values must passisSafeScriptLogPath(plain absolute path,<rdnn>.logbasename) and the assembled script is re-checked withzsh -nafter the finalscriptLogrewrite.- Console-user resolution rejects
loginwindow,_mbsetupuser, androotbefore building per-user dialog context. - Root runtime temp files (icons, swiftDialog
--commandfile, threshold marker) live only in per-runmktemp -d/var/tmp/<organizationScriptName>.XXXXXX(root0755, files0644; swiftDialog 3 reads them as console user). Never write fixed/var/tmpnames as root. - Branding icons: one reachability wait (up to 5 seconds), then parallel
curlwith one retry; only image MIME types count as success. Last good downloads cache as root-owned/Library/Management/<rdnn>/dor-icon-macos-<major|default>.pnganddor-icon-overlay-<light|dark>.png(not written in demo mode), copied into the per-run directory before use. Fallback: macOS icon to cache, thenSoftware Update.app, thenFinder.app; overlay to cache, then no--overlayicon. - swiftDialog runs from
/Library/Application Support/Dialog/Dialog.app/Contents/MacOS/dialogcli; rootPATHexcludes/usr/local. All/Scriptredeploys preservedor-aggressive-kill,dor-state.plist(clearing onlyNextScheduledReminder), anddor-icon-*cache files; onlyUninstallremoves them. Deployeddor.zsh/dor-starter.zshare written to adjacent temp files,zsh -nvalidated, then atomically moved.reminderDialog.zshchanges are not live insidelaunchDaemonManagement.zshuntilzsh assemble.zshruns.
Repository Rules
- Repo does not use
VERSION.txt. Release-state truth comes from scriptscriptVersionvalues plusREADME.mdandCHANGELOG.md. assemble.zshis enforcement point for RDNN alignment and deployable artifact generation.- Default RDNN placeholder is
org.churchofjesuschrist. Preserve suffix meanings:dor= LaunchDaemon/runtime asset prefix,dorm= managed preference domain suffix. - Admin-controlled baseline schedule lives in
DailyReminderTimeswithin managed/local preferences. Mutable scheduler state must stay indor-state.plist, not deployable preference payloads. - Treat
Artifacts/as generated but potentially tracked output. Do not rebuild or replace artifacts unless task specifically calls for it. - Localization additions should usually start in
Resources/sample.plist; runtime and config generators are designed to carry those keys forward. - GitHub Actions in
.github/workflows/security-scan.ymlmust use full commit-SHA pins foruses:actions, with the human tag retained only as a comment (for example# v6). - Submit PR-targeted guidance against
developmentbranch unless task or maintainer instruction says otherwise. - Check
git statusbefore editing shared docs, generated artifacts, or cross-cutting files so unrelated local work is not overwritten. - Avoid hidden behavior changes during refactors.
- If behavior, preferences, or operator workflow change, update affected docs in
README.md,Resources/README.md,Diagrams/, andCHANGELOG.mdas needed.
Scripting Style
These rules override ad-hoc prompting. Match established shipped-script style unless user explicitly asks otherwise.
- Keep lowerCamelCase for variables and function names. Exception: existing
PLACEHOLDER_MAP. - Keep function declaration style
function name() {with same-line braces for control flow. - Prefer
"${var}"expansions and existing quoting patterns. - Preserve visual sectioning: hash walls, hash-space clusters, dash sub-sections, and roomy spacing.
- Keep comments intentional and sparse. Use them for why or what-next, not line-by-line narration.
- Route logging through existing helper functions and preserve format
<scriptName> (<version>): <timestamp> - [<level>] <message>. - Keep new deadline, suppression, or restart-threshold logic observable with
[NOTICE]or[WARNING]logs. - Preserve preference reads through
PlistBuddyand existing key-mapping logic. - Preserve deployed naming and path conventions tied to RDNN:
/Library/LaunchDaemons/{RDNN}.dor.plist/Library/Management/{RDNN}/dor.zsh/Library/Management/{RDNN}/dor-starter.zsh/Library/Management/{RDNN}/dor-state.plist/Library/Management/{RDNN}/dor.pid/Library/Managed Preferences/{RDNN}.dorm.plist/var/log/{RDNN}.log
Quality Bar
- DDM resolution must fail safely when declaration state is missing, conflicting, invalid, or stale.
- Reminder suppression rules must stay explicit and logged.
- Demo mode must remain fast, reliable local validation path.
- LaunchDaemon deployment and reset flow must stay predictable and recoverable.
- Generated plist and mobileconfig output must remain aligned with runtime preference surface.
- Localization changes must not break English fallback behavior or existing language families.
Required Validation
- Run
zsh -non every modified Zsh script, includingResources/diagnoseReminderState.zshwhen touched. - For
reminderDialog.zshbehavior changes, runzsh reminderDialog.zsh demo. - For
assemble.zshor deployment-flow changes, review generated artifact expectations againstResources/README.mdand related docs before calling work complete. - For packaging changes, account for self-extracting bundle workflow in
Resources/createSelfExtracting.zshand validate generated.mobileconfigwith/usr/bin/plutil -lint. - For
.github/workflows/security-scan.ymlchanges, verify GitHub Actionsuses:refs are pinned to full commit SHAs and no mutable action tags or branches remain. - For
AGENTS.mdor docs-only changes, verify Markdown structure, terminology, links, and repo references. - When behavior, preferences, or operator workflows change, update affected docs in
README.md,Resources/README.md,Diagrams/, andCHANGELOG.mdas needed. - Do not add new production dependencies without explicit approval.
Release Checklist
Apply only for release or packaging prep.
For a pre-release review, follow Resources/skills/pre-release-review/SKILL.md. The audit does not authorize packaging or artifact regeneration.
- Keep
scriptVersionaligned across shipped scripts when release-affecting changes touch versioned artifacts. - Confirm
README.mdandCHANGELOG.mdmatch current behavior, defaults, and deployment workflow. - Rebuild artifacts only when release or packaging task explicitly requires it.
- Review RDNN-sensitive paths, plist/mobileconfig output names, and script log path behavior when touching assembly or deployment code.
- Verify no test-only, demo-only, or local fixture behavior leaked into production reminder flow.
Maintenance
This file is versioned with project. When workflow rules, validation requirements, repo boundaries, or source-of-truth guidance change, update AGENTS.md. Keep file concise, directive, and focused on agent decision-making.
Where files are headingNew AGENTS.md files have more rules about keeping secrets out of the code, and fewer about code style.
Of the AGENTS.md files we read, the 28,693 first seen in the last six months, against the older ones: the kind of rule that gained most share, and the kind that lost most. About files like this in general, not this one, and an estimate, since a kind is a pattern in the words.
In this repositoryOne other file it gives its agents.
- .github/copilot-instructions.mdCopilot instructions
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

