[object Object]

← back to Nas Setup

belt-and-suspenders: stagger user-agent belts past their root siblings (dwdump 03:45->03:55, realestate 03:50->03:58) — avoids the write-collision once Option-B FDA lands, adds temporal redundancy, and makes tomorrow's log the proof the user belt fires unattended (Cody cycle-11 gate, TK-10547)

d41f040d1d1a2f7e68764b07c0375c5300049eeb · 2026-08-14 12:15:46 -0700 · Steve Abrams

Files touched

Diff

commit d41f040d1d1a2f7e68764b07c0375c5300049eeb
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Fri Aug 14 12:15:46 2026 -0700

    belt-and-suspenders: stagger user-agent belts past their root siblings (dwdump 03:45->03:55, realestate 03:50->03:58) — avoids the write-collision once Option-B FDA lands, adds temporal redundancy, and makes tomorrow's log the proof the user belt fires unattended (Cody cycle-11 gate, TK-10547)
---
 launchd/com.steve.nas-dwdump-mirror.plist          | 70 ++++++++-----------
 launchd/com.steve.nas-realestate-dump-mirror.plist | 80 ++++++++++------------
 2 files changed, 64 insertions(+), 86 deletions(-)

diff --git a/launchd/com.steve.nas-dwdump-mirror.plist b/launchd/com.steve.nas-dwdump-mirror.plist
index fa4dc97..a036365 100644
--- a/launchd/com.steve.nas-dwdump-mirror.plist
+++ b/launchd/com.steve.nas-dwdump-mirror.plist
@@ -1,47 +1,35 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<!--
-  com.steve.nas-dwdump-mirror — pull the nightly Kamatera dw_unified dump to BOTH
-  on-prem destinations (3-2-1 topology, DTD verdict 2026-06-26): Henry local drive
-  + NAS 2TB share. Each leg is independent — the Henry leg works today; the NAS leg
-  auto-activates once /Volumes/DW-Backups is mounted.
-  Runs 03:45 (after the 03:00 Kamatera db-backup.sh has finished writing).
-  Safe to load NOW: the Henry leg runs nightly, the NAS leg no-ops until mounted.
-  Adjust the *_BACKUP_DIR env vars below if your paths differ.
--->
 <plist version="1.0">
 <dict>
-  <key>Label</key>
-  <string>com.steve.nas-dwdump-mirror</string>
-  <key>ProgramArguments</key>
-  <array>
-    <!-- non-SIP Homebrew bash as the TCC responsible process: SIP /bin/bash cannot durably hold
-         the Full-Disk/removable-volume grant for a launchd job, so writes to /Volumes/Henry EPERM'd
-         ("not writable"). /opt/homebrew/bin/bash (non-SIP) holds the grant — proven: the loaded
-         com.steve.backup-daemon-health agent reads Henry through this exact binary every hour, and
-         the sibling realestate user agent already uses it. Swapped 2026-08-14 (TK-10547) to match. -->
-    <string>/opt/homebrew/bin/bash</string>
-    <string>/Users/macstudio3/Projects/nas-setup/scripts/pull-dw-dump.sh</string>
-  </array>
-  <key>EnvironmentVariables</key>
-  <dict>
-    <key>HENRY_BACKUP_DIR</key>
-    <string>/Volumes/Henry/dw-backups/dw_unified</string>
-    <key>NAS_BACKUP_DIR</key>
-    <string>/Volumes/DW-Backups/dw_unified</string>
-    <key>PATH</key>
-    <string>/opt/homebrew/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
-  </dict>
-  <key>StartCalendarInterval</key>
-  <dict>
-    <key>Hour</key><integer>3</integer>
-    <key>Minute</key><integer>45</integer>
-  </dict>
-  <key>RunAtLoad</key>
-  <false/>
-  <key>StandardOutPath</key>
-  <string>/Users/macstudio3/Projects/nas-setup/data/launchd.out.log</string>
-  <key>StandardErrorPath</key>
-  <string>/Users/macstudio3/Projects/nas-setup/data/launchd.err.log</string>
+	<key>EnvironmentVariables</key>
+	<dict>
+		<key>HENRY_BACKUP_DIR</key>
+		<string>/Volumes/Henry/dw-backups/dw_unified</string>
+		<key>NAS_BACKUP_DIR</key>
+		<string>/Volumes/DW-Backups/dw_unified</string>
+		<key>PATH</key>
+		<string>/opt/homebrew/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
+	</dict>
+	<key>Label</key>
+	<string>com.steve.nas-dwdump-mirror</string>
+	<key>ProgramArguments</key>
+	<array>
+		<string>/opt/homebrew/bin/bash</string>
+		<string>/Users/macstudio3/Projects/nas-setup/scripts/pull-dw-dump.sh</string>
+	</array>
+	<key>RunAtLoad</key>
+	<false/>
+	<key>StandardErrorPath</key>
+	<string>/Users/macstudio3/Projects/nas-setup/data/launchd.err.log</string>
+	<key>StandardOutPath</key>
+	<string>/Users/macstudio3/Projects/nas-setup/data/launchd.out.log</string>
+	<key>StartCalendarInterval</key>
+	<dict>
+		<key>Hour</key>
+		<integer>3</integer>
+		<key>Minute</key>
+		<integer>55</integer>
+	</dict>
 </dict>
 </plist>
diff --git a/launchd/com.steve.nas-realestate-dump-mirror.plist b/launchd/com.steve.nas-realestate-dump-mirror.plist
index c3cad59..0c54278 100644
--- a/launchd/com.steve.nas-realestate-dump-mirror.plist
+++ b/launchd/com.steve.nas-realestate-dump-mirror.plist
@@ -1,51 +1,41 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<!--
-  com.steve.nas-realestate-dump-mirror — pull the nightly Kamatera `realestate` dump to BOTH
-  on-prem destinations (Henry local drive + NAS 2TB share), mirroring the dw_unified job.
-  Added 2026-08-06 (TK-10076 Gate D): realestate (rentv_licensed_targets ~102k rows, serving
-  /api/summit/licensed + public /services) had no offsite copy. Reuses the same parameterized
-  pull-dw-dump.sh via PGDUMP_GLOB + *_BACKUP_DIR overrides. Runs 03:50 (5 min after the
-  dw_unified pull, both after the 03:00 PT Kamatera dumps). NAS leg no-ops until mounted.
--->
 <plist version="1.0">
 <dict>
-  <key>Label</key>
-  <string>com.steve.nas-realestate-dump-mirror</string>
-  <key>ProgramArguments</key>
-  <array>
-    <!-- non-SIP bash as the TCC responsible process: SIP /bin/bash cannot durably hold an
-         FDA grant for launchd, so writes to /Volumes/Henry EPERM'd. /opt/homebrew/bin/bash
-         (Homebrew, non-SIP) CAN hold the grant. Requires Homebrew bash to have Full Disk
-         Access (System Settings → Privacy → Full Disk Access). Swapped 2026-08-07 TK-10323. -->
-    <string>/opt/homebrew/bin/bash</string>
-    <string>/Users/macstudio3/Projects/nas-setup/scripts/pull-dw-dump.sh</string>
-  </array>
-  <key>EnvironmentVariables</key>
-  <dict>
-    <key>HENRY_BACKUP_DIR</key>
-    <string>/Volumes/Henry/dw-backups/realestate</string>
-    <key>NAS_BACKUP_DIR</key>
-    <string>/Volumes/DW-Backups/realestate</string>
-    <key>PGDUMP_GLOB</key>
-    <string>/root/backups/db/realestate_*.dump</string>
-    <key>PGDUMP_FLOOR_MB</key>
-    <string>1</string>
-    <key>PGDUMP_TOC_FLOOR</key>
-    <string>5</string>
-    <key>PATH</key>
-    <string>/opt/homebrew/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
-  </dict>
-  <key>StartCalendarInterval</key>
-  <dict>
-    <key>Hour</key><integer>3</integer>
-    <key>Minute</key><integer>50</integer>
-  </dict>
-  <key>RunAtLoad</key>
-  <false/>
-  <key>StandardOutPath</key>
-  <string>/Users/macstudio3/Projects/nas-setup/data/launchd-realestate.out.log</string>
-  <key>StandardErrorPath</key>
-  <string>/Users/macstudio3/Projects/nas-setup/data/launchd-realestate.err.log</string>
+	<key>EnvironmentVariables</key>
+	<dict>
+		<key>HENRY_BACKUP_DIR</key>
+		<string>/Volumes/Henry/dw-backups/realestate</string>
+		<key>NAS_BACKUP_DIR</key>
+		<string>/Volumes/DW-Backups/realestate</string>
+		<key>PATH</key>
+		<string>/opt/homebrew/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
+		<key>PGDUMP_FLOOR_MB</key>
+		<string>1</string>
+		<key>PGDUMP_GLOB</key>
+		<string>/root/backups/db/realestate_*.dump</string>
+		<key>PGDUMP_TOC_FLOOR</key>
+		<string>5</string>
+	</dict>
+	<key>Label</key>
+	<string>com.steve.nas-realestate-dump-mirror</string>
+	<key>ProgramArguments</key>
+	<array>
+		<string>/opt/homebrew/bin/bash</string>
+		<string>/Users/macstudio3/Projects/nas-setup/scripts/pull-dw-dump.sh</string>
+	</array>
+	<key>RunAtLoad</key>
+	<false/>
+	<key>StandardErrorPath</key>
+	<string>/Users/macstudio3/Projects/nas-setup/data/launchd-realestate.err.log</string>
+	<key>StandardOutPath</key>
+	<string>/Users/macstudio3/Projects/nas-setup/data/launchd-realestate.out.log</string>
+	<key>StartCalendarInterval</key>
+	<dict>
+		<key>Hour</key>
+		<integer>3</integer>
+		<key>Minute</key>
+		<integer>58</integer>
+	</dict>
 </dict>
 </plist>

← 4a447c8 daemon-health: belt-and-suspenders model (Steve ruled 8/14 '  ·  back to Nas Setup  ·  daemon-health: accept single-belt operation as PASS (Steve 8 3c61bc3 →