# Apple Notes Prod Checklist

> Production checklist for Apple Notes automation deployments. Trigger: "apple notes production checklist".

- Skill: `gabrielmoreira/apple-notes-prod-checklist` (Agent Skill)
- Install (CLI): `npx skillmds@latest add gabrielmoreira/apple-notes-prod-checklist`
- Raw SKILL.md: https://api.skillmd.com/api/skills/gabrielmoreira/apple-notes-prod-checklist/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- License: MIT
- Author: gabrielmoreira (https://skillmd.com/u/gabrielmoreira)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/gabrielmoreira/apple-notes-prod-checklist

---

# Apple Notes Production Checklist

## Overview

Before deploying Apple Notes automation to a production macOS machine, validate every dependency: TCC permissions, iCloud sync health, Notes.app availability, error handling robustness, and data security. Unlike cloud services where deployment is a push, Apple Notes automation requires physical or remote access to a Mac with a logged-in user session. This checklist ensures nothing is missed before going live.

## Prerequisites

- An owned, interactive macOS host with the target account and an approved automation consent path.
- A documented backup and restore exercise for the specific notes and folders the automation may change.
- A non-production test folder or account for any write-path verification; production validation must be read-only by default.

## Instructions

1. Complete the checklist on the exact host and user context that will run the automation.
2. Verify only the account and folders explicitly in scope; do not enumerate or export unrelated notes.
3. Treat a failed authorization, sync, or backup check as a deployment stop, not a warning.
4. Run a write-path test only in the designated test folder, confirm cleanup manually, and retain no note body in logs.

## Pre-Deployment Checklist

### Permissions and Access

- [ ] TCC automation permission granted (System Settings > Privacy > Automation)
- [ ] Permission tested from the exact context that will run in production (Terminal, launchd, etc.)
- [ ] Full Disk Access granted if reading Notes database directly (not recommended)
- [ ] Script runs without interactive prompts (no "Allow" dialogs left)

### Application Configuration

- [ ] Notes.app configured to launch at login (System Settings > General > Login Items)
- [ ] Target Apple ID / iCloud account signed in and syncing
- [ ] "On My Mac" account enabled if local storage is needed
- [ ] Correct default account set for automation scripts

### Data and Sync

- [ ] iCloud sync verified working (create note on Mac, verify on iPhone)
- [ ] Backup strategy documented (JSON export on schedule)
- [ ] Exported data files have restricted permissions (`chmod 600`)
- [ ] No sensitive data written to logs or temp files

### Reliability

- [ ] Error handling for all AppleEvent failure codes (-1743, -1712, -609, -1728)
- [ ] Retry logic with exponential backoff for transient failures
- [ ] Write operations throttled (max 1 per second for iCloud sync)
- [ ] Health check script deployed and running on schedule
- [ ] Alerting configured for automation failures (macOS notification or webhook)

### Compatibility

- [ ] Script tested on target macOS version (`sw_vers`)
- [ ] JXA API compatibility verified for target OS (Ventura/Sonoma/Sequoia)
- [ ] Node.js version matches production (if using child_process for osascript)

## Validation Script

```bash
#!/bin/bash
echo "=== Apple Notes Production Readiness ==="
PASS=0; FAIL=0; WARN=0

check() {
  local label=$1 result=$2
  if [ "$result" = "PASS" ]; then echo "[PASS] $label"; PASS=$((PASS+1))
  elif [ "$result" = "WARN" ]; then echo "[WARN] $label"; WARN=$((WARN+1))
  else echo "[FAIL] $label"; FAIL=$((FAIL+1)); fi
}

# macOS version
VER=$(sw_vers -productVersion)
check "macOS version ($VER)" "$(echo "$VER" | grep -qE '^1[3-9]|^[2-9]' && echo PASS || echo WARN)"

# Notes.app running
check "Notes.app running" "$(pgrep -x Notes > /dev/null && echo PASS || echo FAIL)"

# JXA access
NOTE_COUNT=$(osascript -l JavaScript -e 'Application("Notes").defaultAccount.notes.length' 2>/dev/null)
check "JXA access (${NOTE_COUNT:-0} notes)" "$([ -n "$NOTE_COUNT" ] && echo PASS || echo FAIL)"

# iCloud sync daemon
check "iCloud sync daemon (bird)" "$(pgrep -x bird > /dev/null && echo PASS || echo WARN)"

# Keep readiness validation read-only. Exercise writes separately in a named,
# non-production test folder with an operator present and a verified cleanup plan.

echo ""
echo "=== Results: $PASS passed, $WARN warnings, $FAIL failed ==="
[ "$FAIL" -gt 0 ] && echo "BLOCKED: Fix failures before deploying" && exit 1
[ "$WARN" -gt 0 ] && echo "READY with warnings" && exit 0
echo "READY for production" && exit 0
```

## Error Handling

| Issue | Cause | Solution |
|-------|-------|----------|
| Validation passes locally, fails on target Mac | Different macOS version or Apple ID | Run validation script on the exact production machine |
| Write test fails | Account is read-only (Gmail IMAP) | Switch to iCloud or "On My Mac" account |
| Notes.app not at login items | Removed after macOS update | Re-add via System Settings > General > Login Items |
| Health check does not alert | Notification permissions denied for Terminal | Grant notification permission in System Settings |
| iCloud sync lag in production | Large attachment uploads | Monitor with `brctl status`; set expectations for sync delay |

## Output

The readiness run prints a pass/warn/fail summary without note contents, IDs, or account identifiers. A non-zero exit means the deployment is blocked. Store only the timestamp, host inventory identifier, and checklist decision in the change record.

## Examples

Before a scheduled deployment, run the read-only validation script from the launch context and attach its redacted summary to the change record. If write verification is needed, create and clean up a note in the pre-approved test folder during a supervised maintenance window; do not use a default account folder as a test target.

## Resources

- [Mac Automation Scripting Guide](https://developer.apple.com/library/archive/documentation/LanguagesUtilities/Conceptual/MacAutomationScriptingGuide/)
- [macOS Login Items](https://support.apple.com/guide/mac-help/open-items-automatically-when-you-log-in-mh15189/mac)
- [Apple System Status](https://www.apple.com/support/systemstatus/)

## Next Steps

For deploying as a launchd service, see `apple-notes-deploy-integration`. For ongoing monitoring, see `apple-notes-observability`.

