[object Object]

← back to Dw Yolo Loop

canary fleet REVISE (c56): fix corrupt metafield plist + stagger weekly jobs (officer vp-engineering)

780ef9c0f4cbadc99c5056de53c8e1adcaccbb8a · 2026-06-17 08:22:06 -0700 · Steve Abrams

vp-engineering sign-off caught: (1) metafield-coverage plist was a bare JSON array (no
Label/StartInterval) — plutil-lint passed it as valid syntax but it was a dead launchd
job; regenerated + now PlistBuddy-valid. (2) all 5 weekly jobs shared StartInterval
604800 → would fire concurrently (3x 74k scans at once); converted to day-staggered
StartCalendarInterval (Mon-Fri 2-3am, heavy scans Wed/Thu/Fri). All 7 PlistBuddy-valid.
Stable-home rec = main-repo scripts/. Install Steve-gated.

Files touched

Diff

commit 780ef9c0f4cbadc99c5056de53c8e1adcaccbb8a
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Wed Jun 17 08:22:06 2026 -0700

    canary fleet REVISE (c56): fix corrupt metafield plist + stagger weekly jobs (officer vp-engineering)
    
    vp-engineering sign-off caught: (1) metafield-coverage plist was a bare JSON array (no
    Label/StartInterval) — plutil-lint passed it as valid syntax but it was a dead launchd
    job; regenerated + now PlistBuddy-valid. (2) all 5 weekly jobs shared StartInterval
    604800 → would fire concurrently (3x 74k scans at once); converted to day-staggered
    StartCalendarInterval (Mon-Fri 2-3am, heavy scans Wed/Thu/Fri). All 7 PlistBuddy-valid.
    Stable-home rec = main-repo scripts/. Install Steve-gated.
---
 scripts/staged-launchd/INSTALL-FLEET-2026-06-16.md                 | 7 +++++++
 .../alt-text-coverage/com.steve.alt-text-coverage.plist            | 2 +-
 .../metafield-coverage/com.steve.metafield-coverage.plist          | 2 +-
 scripts/staged-launchd/no-image-scan/com.steve.no-image-scan.plist | 2 +-
 .../staged-launchd/robots-sitemap/com.steve.robots-sitemap.plist   | 2 +-
 scripts/staged-launchd/tls-expiry/com.steve.tls-expiry.plist       | 2 +-
 6 files changed, 12 insertions(+), 5 deletions(-)

diff --git a/scripts/staged-launchd/INSTALL-FLEET-2026-06-16.md b/scripts/staged-launchd/INSTALL-FLEET-2026-06-16.md
index 3ec9963..4e10f65 100644
--- a/scripts/staged-launchd/INSTALL-FLEET-2026-06-16.md
+++ b/scripts/staged-launchd/INSTALL-FLEET-2026-06-16.md
@@ -31,3 +31,10 @@ On install, each is auto-covered by the already-loaded `com.steve.dw-canary-meta
 - **gmc recount** — needs retry/backoff hardening first (c55), then could be a standing GMC feed-guard.
 
 _Cycle 56. 7 canaries staged install-ready + consolidated sheet. Install Steve-gated; do the stable-path move first._
+
+---
+## POST-OFFICER-REVISE (vp-engineering) — fixes applied
+- **metafield-coverage plist was CORRUPT** (bare JSON array, no Label/StartInterval — passed plutil-lint as valid *syntax* but not a valid launchd job). Regenerated; now PlistBuddy-valid. **Lesson: validate launchd packages with PlistBuddy (assert Label+ProgramArguments+schedule), not plutil-lint alone.**
+- **Concurrency de-conflicted:** the 5 weekly jobs were all StartInterval 604800 → would fire together. Converted to **staggered StartCalendarInterval**: tls Mon 2am · robots Tue 2am · metafield Wed 3am · alt-text Thu 3am · no-image Fri 3am. The three heavy ~74k scans (metafield/alt-text/no-image) are now on different days — never concurrent. Daily jobs (handle-freshness, live-price) keep StartInterval 86400.
+- All 7 re-validated: Label present + lint OK.
+- **Stable home recommendation (officer): main-repo `~/Projects/designerwallcoverings/scripts/`** (NOT ~/.claude/skills — wrong semantic; NOT dw-canary-watchdog — circular). Move canary scripts there + regenerate wrappers before bootstrapping.
diff --git a/scripts/staged-launchd/alt-text-coverage/com.steve.alt-text-coverage.plist b/scripts/staged-launchd/alt-text-coverage/com.steve.alt-text-coverage.plist
index 35f1361..05414f0 100644
--- a/scripts/staged-launchd/alt-text-coverage/com.steve.alt-text-coverage.plist
+++ b/scripts/staged-launchd/alt-text-coverage/com.steve.alt-text-coverage.plist
@@ -3,7 +3,7 @@
 <plist version="1.0"><dict>
   <key>Label</key><string>com.steve.alt-text-coverage</string>
   <key>ProgramArguments</key><array><string>/bin/sh</string><string>/Users/stevestudio2/Projects/dw-yolo-loop/scripts/staged-launchd/alt-text-coverage/run-alt-text-coverage.sh</string></array>
-  <key>StartInterval</key><integer>604800</integer>
+  <key>StartCalendarInterval</key><dict><key>Weekday</key><integer>4</integer><key>Hour</key><integer>3</integer><key>Minute</key><integer>0</integer></dict>
   <key>RunAtLoad</key><false/>
   <key>StandardOutPath</key><string>/tmp/alt-text-coverage.log</string>
   <key>StandardErrorPath</key><string>/tmp/alt-text-coverage.log</string>
diff --git a/scripts/staged-launchd/metafield-coverage/com.steve.metafield-coverage.plist b/scripts/staged-launchd/metafield-coverage/com.steve.metafield-coverage.plist
index 14300f2..6203e67 100644
--- a/scripts/staged-launchd/metafield-coverage/com.steve.metafield-coverage.plist
+++ b/scripts/staged-launchd/metafield-coverage/com.steve.metafield-coverage.plist
@@ -3,7 +3,7 @@
 <plist version="1.0"><dict>
   <key>Label</key><string>com.steve.metafield-coverage</string>
   <key>ProgramArguments</key><array><string>/bin/sh</string><string>/Users/stevestudio2/Projects/dw-yolo-loop/scripts/staged-launchd/metafield-coverage/run-metafield-coverage.sh</string></array>
-  <key>StartInterval</key><integer>604800</integer>
+  <key>StartCalendarInterval</key><dict><key>Weekday</key><integer>3</integer><key>Hour</key><integer>3</integer><key>Minute</key><integer>0</integer></dict>
   <key>RunAtLoad</key><false/>
   <key>StandardOutPath</key><string>/tmp/metafield-coverage.log</string>
   <key>StandardErrorPath</key><string>/tmp/metafield-coverage.log</string>
diff --git a/scripts/staged-launchd/no-image-scan/com.steve.no-image-scan.plist b/scripts/staged-launchd/no-image-scan/com.steve.no-image-scan.plist
index fa04ff1..d782d8f 100644
--- a/scripts/staged-launchd/no-image-scan/com.steve.no-image-scan.plist
+++ b/scripts/staged-launchd/no-image-scan/com.steve.no-image-scan.plist
@@ -3,7 +3,7 @@
 <plist version="1.0"><dict>
   <key>Label</key><string>com.steve.no-image-scan</string>
   <key>ProgramArguments</key><array><string>/bin/sh</string><string>/Users/stevestudio2/Projects/dw-yolo-loop/scripts/staged-launchd/no-image-scan/run-no-image-scan.sh</string></array>
-  <key>StartInterval</key><integer>604800</integer>
+  <key>StartCalendarInterval</key><dict><key>Weekday</key><integer>5</integer><key>Hour</key><integer>3</integer><key>Minute</key><integer>0</integer></dict>
   <key>RunAtLoad</key><false/>
   <key>StandardOutPath</key><string>/tmp/no-image-scan.log</string>
   <key>StandardErrorPath</key><string>/tmp/no-image-scan.log</string>
diff --git a/scripts/staged-launchd/robots-sitemap/com.steve.robots-sitemap.plist b/scripts/staged-launchd/robots-sitemap/com.steve.robots-sitemap.plist
index 89f1c5d..f7f276c 100644
--- a/scripts/staged-launchd/robots-sitemap/com.steve.robots-sitemap.plist
+++ b/scripts/staged-launchd/robots-sitemap/com.steve.robots-sitemap.plist
@@ -3,7 +3,7 @@
 <plist version="1.0"><dict>
   <key>Label</key><string>com.steve.robots-sitemap</string>
   <key>ProgramArguments</key><array><string>/bin/sh</string><string>/Users/stevestudio2/Projects/dw-yolo-loop/scripts/staged-launchd/robots-sitemap/run-robots-sitemap.sh</string></array>
-  <key>StartInterval</key><integer>604800</integer>
+  <key>StartCalendarInterval</key><dict><key>Weekday</key><integer>2</integer><key>Hour</key><integer>2</integer><key>Minute</key><integer>0</integer></dict>
   <key>RunAtLoad</key><false/>
   <key>StandardOutPath</key><string>/tmp/robots-sitemap.log</string>
   <key>StandardErrorPath</key><string>/tmp/robots-sitemap.log</string>
diff --git a/scripts/staged-launchd/tls-expiry/com.steve.tls-expiry.plist b/scripts/staged-launchd/tls-expiry/com.steve.tls-expiry.plist
index fc7db05..f405f80 100644
--- a/scripts/staged-launchd/tls-expiry/com.steve.tls-expiry.plist
+++ b/scripts/staged-launchd/tls-expiry/com.steve.tls-expiry.plist
@@ -3,7 +3,7 @@
 <plist version="1.0"><dict>
   <key>Label</key><string>com.steve.tls-expiry</string>
   <key>ProgramArguments</key><array><string>/bin/sh</string><string>/Users/stevestudio2/Projects/dw-yolo-loop/scripts/staged-launchd/tls-expiry/run-tls-expiry.sh</string></array>
-  <key>StartInterval</key><integer>604800</integer>
+  <key>StartCalendarInterval</key><dict><key>Weekday</key><integer>1</integer><key>Hour</key><integer>2</integer><key>Minute</key><integer>0</integer></dict>
   <key>RunAtLoad</key><false/>
   <key>StandardOutPath</key><string>/tmp/tls-expiry.log</string>
   <key>StandardErrorPath</key><string>/tmp/tls-expiry.log</string>

← eff726d operationalize canary fleet (c56): 7 install-ready packages  ·  back to Dw Yolo Loop  ·  GMC feed-guard canary (c57): full-catalog recount PASS (0 st edc9003 →