← back to Dw Yolo Loop
operationalize canary fleet (c56): 7 install-ready packages + consolidated INSTALL sheet
eff726de4e877073cd1c7438df0a7076d41f5441 · 2026-06-17 08:19:00 -0700 · Steve Abrams
Promoted the run's shippable read-only canaries to install-ready launchd packages via
the c34 harness: handle-freshness + live-price (daily), tls-expiry/robots-sitemap/
metafield-coverage/alt-text/no-image (weekly). Each = plist + heartbeat-wrapper +
meta-watchdog manifest row + INSTALL.txt; all plists lint OK. Consolidated INSTALL-FLEET
sheet written. FIXED a harness bug: promote-canary.sh had a hardcoded main-repo BASE path
(wrote packages into the main repo, contaminating the write-session tree) — reverted that
contamination + made BASE script-relative (worktree-aware). Caveat flagged: scripts live in
the worktree; move to a stable path before installing permanent jobs. Install Steve-gated.
Files touched
A scripts/staged-launchd/INSTALL-FLEET-2026-06-16.mdM scripts/staged-launchd/alt-text-coverage/INSTALL.txtM scripts/staged-launchd/alt-text-coverage/com.steve.alt-text-coverage.plistM scripts/staged-launchd/alt-text-coverage/run-alt-text-coverage.shM scripts/staged-launchd/handle-freshness/INSTALL.txtM scripts/staged-launchd/handle-freshness/com.steve.handle-freshness.plistM scripts/staged-launchd/handle-freshness/run-handle-freshness.shM scripts/staged-launchd/live-price-canary/INSTALL.txtM scripts/staged-launchd/live-price-canary/com.steve.live-price-canary.plistM scripts/staged-launchd/live-price-canary/run-live-price-canary.shM scripts/staged-launchd/metafield-coverage/INSTALL.txtM scripts/staged-launchd/metafield-coverage/com.steve.metafield-coverage.plistM scripts/staged-launchd/metafield-coverage/run-metafield-coverage.shA scripts/staged-launchd/no-image-scan/INSTALL.txtA scripts/staged-launchd/no-image-scan/com.steve.no-image-scan.plistA scripts/staged-launchd/no-image-scan/manifest-row.jsonA scripts/staged-launchd/no-image-scan/run-no-image-scan.shM scripts/staged-launchd/promote-canary.shM scripts/staged-launchd/robots-sitemap/INSTALL.txtM scripts/staged-launchd/robots-sitemap/com.steve.robots-sitemap.plistM scripts/staged-launchd/robots-sitemap/run-robots-sitemap.shM scripts/staged-launchd/tls-expiry/INSTALL.txtM scripts/staged-launchd/tls-expiry/com.steve.tls-expiry.plistM scripts/staged-launchd/tls-expiry/run-tls-expiry.sh
Diff
commit eff726de4e877073cd1c7438df0a7076d41f5441
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Wed Jun 17 08:19:00 2026 -0700
operationalize canary fleet (c56): 7 install-ready packages + consolidated INSTALL sheet
Promoted the run's shippable read-only canaries to install-ready launchd packages via
the c34 harness: handle-freshness + live-price (daily), tls-expiry/robots-sitemap/
metafield-coverage/alt-text/no-image (weekly). Each = plist + heartbeat-wrapper +
meta-watchdog manifest row + INSTALL.txt; all plists lint OK. Consolidated INSTALL-FLEET
sheet written. FIXED a harness bug: promote-canary.sh had a hardcoded main-repo BASE path
(wrote packages into the main repo, contaminating the write-session tree) — reverted that
contamination + made BASE script-relative (worktree-aware). Caveat flagged: scripts live in
the worktree; move to a stable path before installing permanent jobs. Install Steve-gated.
---
scripts/staged-launchd/INSTALL-FLEET-2026-06-16.md | 33 ++++++++++++++++++++++
.../staged-launchd/alt-text-coverage/INSTALL.txt | 2 +-
.../com.steve.alt-text-coverage.plist | 2 +-
.../alt-text-coverage/run-alt-text-coverage.sh | 2 +-
.../staged-launchd/handle-freshness/INSTALL.txt | 2 +-
.../com.steve.handle-freshness.plist | 2 +-
.../handle-freshness/run-handle-freshness.sh | 2 +-
.../staged-launchd/live-price-canary/INSTALL.txt | 2 +-
.../com.steve.live-price-canary.plist | 2 +-
.../live-price-canary/run-live-price-canary.sh | 2 +-
.../staged-launchd/metafield-coverage/INSTALL.txt | 2 +-
.../com.steve.metafield-coverage.plist | 2 +-
.../metafield-coverage/run-metafield-coverage.sh | 2 +-
scripts/staged-launchd/no-image-scan/INSTALL.txt | 4 +++
.../no-image-scan/com.steve.no-image-scan.plist | 10 +++++++
.../staged-launchd/no-image-scan/manifest-row.json | 9 ++++++
.../no-image-scan/run-no-image-scan.sh | 7 +++++
scripts/staged-launchd/promote-canary.sh | 2 +-
scripts/staged-launchd/robots-sitemap/INSTALL.txt | 2 +-
.../robots-sitemap/com.steve.robots-sitemap.plist | 2 +-
.../robots-sitemap/run-robots-sitemap.sh | 2 +-
scripts/staged-launchd/tls-expiry/INSTALL.txt | 2 +-
.../tls-expiry/com.steve.tls-expiry.plist | 2 +-
.../staged-launchd/tls-expiry/run-tls-expiry.sh | 2 +-
24 files changed, 82 insertions(+), 19 deletions(-)
diff --git a/scripts/staged-launchd/INSTALL-FLEET-2026-06-16.md b/scripts/staged-launchd/INSTALL-FLEET-2026-06-16.md
new file mode 100644
index 0000000..3ec9963
--- /dev/null
+++ b/scripts/staged-launchd/INSTALL-FLEET-2026-06-16.md
@@ -0,0 +1,33 @@
+# Canary fleet — consolidated INSTALL sheet (cycle 56)
+
+7 read-only canaries built across this run, staged install-ready via promote-canary.sh. **All install steps are Steve-gated.** Each package dir has: `com.steve.<label>.plist`, `run-<label>.sh` (runs the canary + writes a `~/.claude/heartbeats/<label>.stamp`), `manifest-row.json` (for the dw-canary-watchdog), `INSTALL.txt`.
+
+| Canary | cadence | what it monitors |
+|---|---|---|
+| handle-freshness | daily | storefront-404 drift on ACTIVE handles (mirror status lag) |
+| live-price-canary | daily | true displayed-price health (NO_PRICE spike = blank-price regression) |
+| tls-expiry | weekly | fleet cert expiry (<21d warn / <7d fail) |
+| robots-sitemap | weekly | crawl-directive + sitemap health (Googlebot-block, missing sitemap) |
+| metafield-coverage | weekly | repped-vendor specs/images/color enrichment SLO |
+| alt-text-coverage | weekly | image alt-text coverage (image-SEO + WCAG) |
+| no-image-scan | weekly | ACTIVE products with zero images (dead PDP + feed disqualifier) |
+
+## ⚠️ BEFORE INSTALL — stable path (important)
+The canary scripts currently live in the **git worktree** `~/Projects/dw-yolo-loop` (the wrappers point there). A worktree is **not a stable home for permanent jobs** — if it's ever removed, the installed canaries break. **Recommended:** before bootstrapping, copy the canary script dirs + these packages into a stable location (the main `~/Projects/designerwallcoverings/scripts/` on a merged branch, or `~/.claude/skills/`), and regenerate the wrappers to point there (re-run promote-canary.sh from the stable copy — it's now script-relative). Then install.
+
+## Install (per canary, after the path move)
+```
+cp scripts/staged-launchd/<label>/com.steve.<label>.plist ~/Library/LaunchAgents/
+launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.steve.<label>.plist
+# + add the staged manifest-row.json into ~/Projects/dw-canary-watchdog/manifest.json (canaries[])
+```
+On install, each is auto-covered by the already-loaded `com.steve.dw-canary-meta-watchdog` (it reads the heartbeat stamp). On FAIL each self-alerts to CNCP + George per its own logic.
+
+## Not promoted (with reasons)
+- **dup-title-scan** — a `.sh` one-shot report (not a node canary); it's an enrichment-backlog sizer, not a recurring health check.
+- **availability-drift** — KILLED c21 (cry-wolf on a trade store).
+- **queue-slo-snapshot** — Kamatera-only (Mac2 queue mirror frozen); can't run usefully here.
+- **dup-image / dup-sku / orphan-products / orphan-collections / collection-leak** — one-shot audits (clean/known results); re-run on demand, not standing.
+- **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._
diff --git a/scripts/staged-launchd/alt-text-coverage/INSTALL.txt b/scripts/staged-launchd/alt-text-coverage/INSTALL.txt
index e4dfa9a..c405acc 100644
--- a/scripts/staged-launchd/alt-text-coverage/INSTALL.txt
+++ b/scripts/staged-launchd/alt-text-coverage/INSTALL.txt
@@ -1,4 +1,4 @@
# Steve-gated install for com.steve.alt-text-coverage:
-cp "/Users/stevestudio2/Projects/designerwallcoverings/scripts/staged-launchd/alt-text-coverage/com.steve.alt-text-coverage.plist" ~/Library/LaunchAgents/
+cp "/Users/stevestudio2/Projects/dw-yolo-loop/scripts/staged-launchd/alt-text-coverage/com.steve.alt-text-coverage.plist" ~/Library/LaunchAgents/
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.steve.alt-text-coverage.plist
# then add manifest-row.json into ~/Projects/dw-canary-watchdog/manifest.json (canaries[])
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 4e81bc0..35f1361 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
@@ -2,7 +2,7 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<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/designerwallcoverings/scripts/staged-launchd/alt-text-coverage/run-alt-text-coverage.sh</string></array>
+ <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>RunAtLoad</key><false/>
<key>StandardOutPath</key><string>/tmp/alt-text-coverage.log</string>
diff --git a/scripts/staged-launchd/alt-text-coverage/run-alt-text-coverage.sh b/scripts/staged-launchd/alt-text-coverage/run-alt-text-coverage.sh
index a790820..bf56e87 100755
--- a/scripts/staged-launchd/alt-text-coverage/run-alt-text-coverage.sh
+++ b/scripts/staged-launchd/alt-text-coverage/run-alt-text-coverage.sh
@@ -1,7 +1,7 @@
#!/bin/sh
# auto-generated by promote-canary.sh — runs alt-text-coverage then writes its heartbeat stamp
mkdir -p "$HOME/.claude/heartbeats"
-"/usr/local/bin/node" "/Users/stevestudio2/Projects/designerwallcoverings/scripts/alt-text-coverage/alt-text-coverage-audit.mjs"; rc=$?
+"/usr/local/bin/node" "/Users/stevestudio2/Projects/dw-yolo-loop/scripts/alt-text-coverage/alt-text-coverage-audit.mjs"; rc=$?
# rc 0=PASS, 2=FAIL-verdict — both mean the canary actually executed → stamp it
if [ $rc -eq 0 ] || [ $rc -eq 2 ]; then date -u +%Y-%m-%dT%H:%M:%SZ > "$HOME/.claude/heartbeats/alt-text-coverage.stamp"; fi
exit $rc
diff --git a/scripts/staged-launchd/handle-freshness/INSTALL.txt b/scripts/staged-launchd/handle-freshness/INSTALL.txt
index e333f57..003bf17 100644
--- a/scripts/staged-launchd/handle-freshness/INSTALL.txt
+++ b/scripts/staged-launchd/handle-freshness/INSTALL.txt
@@ -1,4 +1,4 @@
# Steve-gated install for com.steve.handle-freshness:
-cp "/Users/stevestudio2/Projects/designerwallcoverings/scripts/staged-launchd/handle-freshness/com.steve.handle-freshness.plist" ~/Library/LaunchAgents/
+cp "/Users/stevestudio2/Projects/dw-yolo-loop/scripts/staged-launchd/handle-freshness/com.steve.handle-freshness.plist" ~/Library/LaunchAgents/
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.steve.handle-freshness.plist
# then add manifest-row.json into ~/Projects/dw-canary-watchdog/manifest.json (canaries[])
diff --git a/scripts/staged-launchd/handle-freshness/com.steve.handle-freshness.plist b/scripts/staged-launchd/handle-freshness/com.steve.handle-freshness.plist
index 1db78c1..57fba58 100644
--- a/scripts/staged-launchd/handle-freshness/com.steve.handle-freshness.plist
+++ b/scripts/staged-launchd/handle-freshness/com.steve.handle-freshness.plist
@@ -2,7 +2,7 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0"><dict>
<key>Label</key><string>com.steve.handle-freshness</string>
- <key>ProgramArguments</key><array><string>/bin/sh</string><string>/Users/stevestudio2/Projects/designerwallcoverings/scripts/staged-launchd/handle-freshness/run-handle-freshness.sh</string></array>
+ <key>ProgramArguments</key><array><string>/bin/sh</string><string>/Users/stevestudio2/Projects/dw-yolo-loop/scripts/staged-launchd/handle-freshness/run-handle-freshness.sh</string></array>
<key>StartInterval</key><integer>86400</integer>
<key>RunAtLoad</key><false/>
<key>StandardOutPath</key><string>/tmp/handle-freshness.log</string>
diff --git a/scripts/staged-launchd/handle-freshness/run-handle-freshness.sh b/scripts/staged-launchd/handle-freshness/run-handle-freshness.sh
index 5c59ea3..2c5a3c2 100755
--- a/scripts/staged-launchd/handle-freshness/run-handle-freshness.sh
+++ b/scripts/staged-launchd/handle-freshness/run-handle-freshness.sh
@@ -1,7 +1,7 @@
#!/bin/sh
# auto-generated by promote-canary.sh — runs handle-freshness then writes its heartbeat stamp
mkdir -p "$HOME/.claude/heartbeats"
-"/usr/local/bin/node" "/Users/stevestudio2/Projects/designerwallcoverings/scripts/handle-freshness/handle-freshness-canary.mjs"; rc=$?
+"/usr/local/bin/node" "/Users/stevestudio2/Projects/dw-yolo-loop/scripts/handle-freshness/handle-freshness-canary.mjs"; rc=$?
# rc 0=PASS, 2=FAIL-verdict — both mean the canary actually executed → stamp it
if [ $rc -eq 0 ] || [ $rc -eq 2 ]; then date -u +%Y-%m-%dT%H:%M:%SZ > "$HOME/.claude/heartbeats/handle-freshness.stamp"; fi
exit $rc
diff --git a/scripts/staged-launchd/live-price-canary/INSTALL.txt b/scripts/staged-launchd/live-price-canary/INSTALL.txt
index 35069e1..9b819da 100644
--- a/scripts/staged-launchd/live-price-canary/INSTALL.txt
+++ b/scripts/staged-launchd/live-price-canary/INSTALL.txt
@@ -1,4 +1,4 @@
# Steve-gated install for com.steve.live-price-canary:
-cp "/Users/stevestudio2/Projects/designerwallcoverings/scripts/staged-launchd/live-price-canary/com.steve.live-price-canary.plist" ~/Library/LaunchAgents/
+cp "/Users/stevestudio2/Projects/dw-yolo-loop/scripts/staged-launchd/live-price-canary/com.steve.live-price-canary.plist" ~/Library/LaunchAgents/
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.steve.live-price-canary.plist
# then add manifest-row.json into ~/Projects/dw-canary-watchdog/manifest.json (canaries[])
diff --git a/scripts/staged-launchd/live-price-canary/com.steve.live-price-canary.plist b/scripts/staged-launchd/live-price-canary/com.steve.live-price-canary.plist
index 6770391..3949a83 100644
--- a/scripts/staged-launchd/live-price-canary/com.steve.live-price-canary.plist
+++ b/scripts/staged-launchd/live-price-canary/com.steve.live-price-canary.plist
@@ -2,7 +2,7 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0"><dict>
<key>Label</key><string>com.steve.live-price-canary</string>
- <key>ProgramArguments</key><array><string>/bin/sh</string><string>/Users/stevestudio2/Projects/designerwallcoverings/scripts/staged-launchd/live-price-canary/run-live-price-canary.sh</string></array>
+ <key>ProgramArguments</key><array><string>/bin/sh</string><string>/Users/stevestudio2/Projects/dw-yolo-loop/scripts/staged-launchd/live-price-canary/run-live-price-canary.sh</string></array>
<key>StartInterval</key><integer>86400</integer>
<key>RunAtLoad</key><false/>
<key>StandardOutPath</key><string>/tmp/live-price-canary.log</string>
diff --git a/scripts/staged-launchd/live-price-canary/run-live-price-canary.sh b/scripts/staged-launchd/live-price-canary/run-live-price-canary.sh
index 2f06eac..fc1f171 100755
--- a/scripts/staged-launchd/live-price-canary/run-live-price-canary.sh
+++ b/scripts/staged-launchd/live-price-canary/run-live-price-canary.sh
@@ -1,7 +1,7 @@
#!/bin/sh
# auto-generated by promote-canary.sh — runs live-price-canary then writes its heartbeat stamp
mkdir -p "$HOME/.claude/heartbeats"
-"/usr/local/bin/node" "/Users/stevestudio2/Projects/designerwallcoverings/scripts/live-price-canary/live-price-canary.mjs"; rc=$?
+"/usr/local/bin/node" "/Users/stevestudio2/Projects/dw-yolo-loop/scripts/live-price-canary/live-price-canary.mjs"; rc=$?
# rc 0=PASS, 2=FAIL-verdict — both mean the canary actually executed → stamp it
if [ $rc -eq 0 ] || [ $rc -eq 2 ]; then date -u +%Y-%m-%dT%H:%M:%SZ > "$HOME/.claude/heartbeats/live-price-canary.stamp"; fi
exit $rc
diff --git a/scripts/staged-launchd/metafield-coverage/INSTALL.txt b/scripts/staged-launchd/metafield-coverage/INSTALL.txt
index bbd13b0..245d93a 100644
--- a/scripts/staged-launchd/metafield-coverage/INSTALL.txt
+++ b/scripts/staged-launchd/metafield-coverage/INSTALL.txt
@@ -1,4 +1,4 @@
# Steve-gated install for com.steve.metafield-coverage:
-cp "/Users/stevestudio2/Projects/designerwallcoverings/scripts/staged-launchd/metafield-coverage/com.steve.metafield-coverage.plist" ~/Library/LaunchAgents/
+cp "/Users/stevestudio2/Projects/dw-yolo-loop/scripts/staged-launchd/metafield-coverage/com.steve.metafield-coverage.plist" ~/Library/LaunchAgents/
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.steve.metafield-coverage.plist
# then add manifest-row.json into ~/Projects/dw-canary-watchdog/manifest.json (canaries[])
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 383c682..14300f2 100644
--- a/scripts/staged-launchd/metafield-coverage/com.steve.metafield-coverage.plist
+++ b/scripts/staged-launchd/metafield-coverage/com.steve.metafield-coverage.plist
@@ -2,7 +2,7 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<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/designerwallcoverings/scripts/staged-launchd/metafield-coverage/run-metafield-coverage.sh</string></array>
+ <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>RunAtLoad</key><false/>
<key>StandardOutPath</key><string>/tmp/metafield-coverage.log</string>
diff --git a/scripts/staged-launchd/metafield-coverage/run-metafield-coverage.sh b/scripts/staged-launchd/metafield-coverage/run-metafield-coverage.sh
index f1f976a..192f309 100755
--- a/scripts/staged-launchd/metafield-coverage/run-metafield-coverage.sh
+++ b/scripts/staged-launchd/metafield-coverage/run-metafield-coverage.sh
@@ -1,7 +1,7 @@
#!/bin/sh
# auto-generated by promote-canary.sh — runs metafield-coverage then writes its heartbeat stamp
mkdir -p "$HOME/.claude/heartbeats"
-"/usr/local/bin/node" "/Users/stevestudio2/Projects/designerwallcoverings/scripts/metafield-coverage/metafield-coverage-audit.mjs"; rc=$?
+"/usr/local/bin/node" "/Users/stevestudio2/Projects/dw-yolo-loop/scripts/metafield-coverage/metafield-coverage-audit.mjs"; rc=$?
# rc 0=PASS, 2=FAIL-verdict — both mean the canary actually executed → stamp it
if [ $rc -eq 0 ] || [ $rc -eq 2 ]; then date -u +%Y-%m-%dT%H:%M:%SZ > "$HOME/.claude/heartbeats/metafield-coverage.stamp"; fi
exit $rc
diff --git a/scripts/staged-launchd/no-image-scan/INSTALL.txt b/scripts/staged-launchd/no-image-scan/INSTALL.txt
new file mode 100644
index 0000000..f155a7e
--- /dev/null
+++ b/scripts/staged-launchd/no-image-scan/INSTALL.txt
@@ -0,0 +1,4 @@
+# Steve-gated install for com.steve.no-image-scan:
+cp "/Users/stevestudio2/Projects/dw-yolo-loop/scripts/staged-launchd/no-image-scan/com.steve.no-image-scan.plist" ~/Library/LaunchAgents/
+launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.steve.no-image-scan.plist
+# then add manifest-row.json into ~/Projects/dw-canary-watchdog/manifest.json (canaries[])
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
new file mode 100644
index 0000000..fa04ff1
--- /dev/null
+++ b/scripts/staged-launchd/no-image-scan/com.steve.no-image-scan.plist
@@ -0,0 +1,10 @@
+<?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">
+<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>RunAtLoad</key><false/>
+ <key>StandardOutPath</key><string>/tmp/no-image-scan.log</string>
+ <key>StandardErrorPath</key><string>/tmp/no-image-scan.log</string>
+</dict></plist>
diff --git a/scripts/staged-launchd/no-image-scan/manifest-row.json b/scripts/staged-launchd/no-image-scan/manifest-row.json
new file mode 100644
index 0000000..246e73d
--- /dev/null
+++ b/scripts/staged-launchd/no-image-scan/manifest-row.json
@@ -0,0 +1,9 @@
+{
+ "label": "no-image-scan",
+ "cadence": "every 604800s (StartInterval)",
+ "stamp": "~/.claude/heartbeats/no-image-scan.stamp",
+ "artifact": "~/.claude/heartbeats/no-image-scan.stamp",
+ "launchd_log": "/tmp/no-image-scan.log",
+ "warn_after": 700000,
+ "fail_after": 1300000
+}
diff --git a/scripts/staged-launchd/no-image-scan/run-no-image-scan.sh b/scripts/staged-launchd/no-image-scan/run-no-image-scan.sh
new file mode 100755
index 0000000..3516f9f
--- /dev/null
+++ b/scripts/staged-launchd/no-image-scan/run-no-image-scan.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+# auto-generated by promote-canary.sh — runs no-image-scan then writes its heartbeat stamp
+mkdir -p "$HOME/.claude/heartbeats"
+"/usr/local/bin/node" "/Users/stevestudio2/Projects/dw-yolo-loop/scripts/no-image-scan/no-image-scan.mjs"; rc=$?
+# rc 0=PASS, 2=FAIL-verdict — both mean the canary actually executed → stamp it
+if [ $rc -eq 0 ] || [ $rc -eq 2 ]; then date -u +%Y-%m-%dT%H:%M:%SZ > "$HOME/.claude/heartbeats/no-image-scan.stamp"; fi
+exit $rc
diff --git a/scripts/staged-launchd/promote-canary.sh b/scripts/staged-launchd/promote-canary.sh
index 26d1877..17f7d93 100644
--- a/scripts/staged-launchd/promote-canary.sh
+++ b/scripts/staged-launchd/promote-canary.sh
@@ -16,7 +16,7 @@
set -e
LABEL="$1"; SCRIPT="$2"; INTERVAL="$3"; WARN="${4:-$((INTERVAL*2))}"; FAIL="${5:-$((INTERVAL*3))}"
[ -z "$LABEL" ] || [ -z "$SCRIPT" ] || [ -z "$INTERVAL" ] && { echo "usage: promote-canary.sh <label> <script.mjs> <interval_s> [warn] [fail]"; exit 2; }
-BASE="/Users/stevestudio2/Projects/designerwallcoverings/scripts/staged-launchd/$LABEL"
+BASE="$(cd "$(dirname "$0")" && pwd)/$LABEL" # worktree-aware: write next to this script, not a hardcoded repo
mkdir -p "$BASE"
NODE="$(command -v node || echo /usr/local/bin/node)"
diff --git a/scripts/staged-launchd/robots-sitemap/INSTALL.txt b/scripts/staged-launchd/robots-sitemap/INSTALL.txt
index 42dd25e..79b8d75 100644
--- a/scripts/staged-launchd/robots-sitemap/INSTALL.txt
+++ b/scripts/staged-launchd/robots-sitemap/INSTALL.txt
@@ -1,4 +1,4 @@
# Steve-gated install for com.steve.robots-sitemap:
-cp "/Users/stevestudio2/Projects/designerwallcoverings/scripts/staged-launchd/robots-sitemap/com.steve.robots-sitemap.plist" ~/Library/LaunchAgents/
+cp "/Users/stevestudio2/Projects/dw-yolo-loop/scripts/staged-launchd/robots-sitemap/com.steve.robots-sitemap.plist" ~/Library/LaunchAgents/
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.steve.robots-sitemap.plist
# then add manifest-row.json into ~/Projects/dw-canary-watchdog/manifest.json (canaries[])
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 731825e..89f1c5d 100644
--- a/scripts/staged-launchd/robots-sitemap/com.steve.robots-sitemap.plist
+++ b/scripts/staged-launchd/robots-sitemap/com.steve.robots-sitemap.plist
@@ -2,7 +2,7 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<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/designerwallcoverings/scripts/staged-launchd/robots-sitemap/run-robots-sitemap.sh</string></array>
+ <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>RunAtLoad</key><false/>
<key>StandardOutPath</key><string>/tmp/robots-sitemap.log</string>
diff --git a/scripts/staged-launchd/robots-sitemap/run-robots-sitemap.sh b/scripts/staged-launchd/robots-sitemap/run-robots-sitemap.sh
index cd64071..6bf394b 100755
--- a/scripts/staged-launchd/robots-sitemap/run-robots-sitemap.sh
+++ b/scripts/staged-launchd/robots-sitemap/run-robots-sitemap.sh
@@ -1,7 +1,7 @@
#!/bin/sh
# auto-generated by promote-canary.sh — runs robots-sitemap then writes its heartbeat stamp
mkdir -p "$HOME/.claude/heartbeats"
-"/usr/local/bin/node" "/Users/stevestudio2/Projects/designerwallcoverings/scripts/robots-sitemap/robots-sitemap-canary.mjs"; rc=$?
+"/usr/local/bin/node" "/Users/stevestudio2/Projects/dw-yolo-loop/scripts/robots-sitemap/robots-sitemap-canary.mjs"; rc=$?
# rc 0=PASS, 2=FAIL-verdict — both mean the canary actually executed → stamp it
if [ $rc -eq 0 ] || [ $rc -eq 2 ]; then date -u +%Y-%m-%dT%H:%M:%SZ > "$HOME/.claude/heartbeats/robots-sitemap.stamp"; fi
exit $rc
diff --git a/scripts/staged-launchd/tls-expiry/INSTALL.txt b/scripts/staged-launchd/tls-expiry/INSTALL.txt
index 113ce6b..d0aa380 100644
--- a/scripts/staged-launchd/tls-expiry/INSTALL.txt
+++ b/scripts/staged-launchd/tls-expiry/INSTALL.txt
@@ -1,4 +1,4 @@
# Steve-gated install for com.steve.tls-expiry:
-cp "/Users/stevestudio2/Projects/designerwallcoverings/scripts/staged-launchd/tls-expiry/com.steve.tls-expiry.plist" ~/Library/LaunchAgents/
+cp "/Users/stevestudio2/Projects/dw-yolo-loop/scripts/staged-launchd/tls-expiry/com.steve.tls-expiry.plist" ~/Library/LaunchAgents/
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.steve.tls-expiry.plist
# then add manifest-row.json into ~/Projects/dw-canary-watchdog/manifest.json (canaries[])
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 9942e96..fc7db05 100644
--- a/scripts/staged-launchd/tls-expiry/com.steve.tls-expiry.plist
+++ b/scripts/staged-launchd/tls-expiry/com.steve.tls-expiry.plist
@@ -2,7 +2,7 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<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/designerwallcoverings/scripts/staged-launchd/tls-expiry/run-tls-expiry.sh</string></array>
+ <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>RunAtLoad</key><false/>
<key>StandardOutPath</key><string>/tmp/tls-expiry.log</string>
diff --git a/scripts/staged-launchd/tls-expiry/run-tls-expiry.sh b/scripts/staged-launchd/tls-expiry/run-tls-expiry.sh
index 1d899cc..8079011 100755
--- a/scripts/staged-launchd/tls-expiry/run-tls-expiry.sh
+++ b/scripts/staged-launchd/tls-expiry/run-tls-expiry.sh
@@ -1,7 +1,7 @@
#!/bin/sh
# auto-generated by promote-canary.sh — runs tls-expiry then writes its heartbeat stamp
mkdir -p "$HOME/.claude/heartbeats"
-"/usr/local/bin/node" "/Users/stevestudio2/Projects/designerwallcoverings/scripts/tls-expiry/tls-expiry-canary.mjs"; rc=$?
+"/usr/local/bin/node" "/Users/stevestudio2/Projects/dw-yolo-loop/scripts/tls-expiry/tls-expiry-canary.mjs"; rc=$?
# rc 0=PASS, 2=FAIL-verdict — both mean the canary actually executed → stamp it
if [ $rc -eq 0 ] || [ $rc -eq 2 ]; then date -u +%Y-%m-%dT%H:%M:%SZ > "$HOME/.claude/heartbeats/tls-expiry.stamp"; fi
exit $rc
← 0af28b1 GMC exclusion verification (c55): exclusion CONFIRMED — 20/2
·
back to Dw Yolo Loop
·
canary fleet REVISE (c56): fix corrupt metafield plist + sta 780ef9c →