[object Object]

← back to Dw Yolo Loop

gmc-feed-guard TK-10952: mirror crash artifact to skill dir, fix cron-fire-canary detection

7e33d8b3d2cf1d8a32fa43bb3d2788a4b43b8640 · 2026-09-01 04:13:04 -0700 · Steve Abrams

- Add _SKILL_GUARD constant and mirror crash-handler writes to
  ~/.claude/skills/gmc-feed-guard/data/latest.json so the crash
  artifact stays in sync with the main artifact path.
- Previous session (HEAD) already added SKILL_DIR mirror for normal
  runs and verdict field — this extends the same pattern to crashes.
- Rebuilt cron-fire-canary manifest: primary_artifact_path now set to
  skill dir, so cron-fire-canary correctly detects freshness vs stale
  and classifies exit=2 (FAIL verdict) as a designed signal exit (ok),
  not a crash.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

Files touched

Diff

commit 7e33d8b3d2cf1d8a32fa43bb3d2788a4b43b8640
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Tue Sep 1 04:13:04 2026 -0700

    gmc-feed-guard TK-10952: mirror crash artifact to skill dir, fix cron-fire-canary detection
    
    - Add _SKILL_GUARD constant and mirror crash-handler writes to
      ~/.claude/skills/gmc-feed-guard/data/latest.json so the crash
      artifact stays in sync with the main artifact path.
    - Previous session (HEAD) already added SKILL_DIR mirror for normal
      runs and verdict field — this extends the same pattern to crashes.
    - Rebuilt cron-fire-canary manifest: primary_artifact_path now set to
      skill dir, so cron-fire-canary correctly detects freshness vs stale
      and classifies exit=2 (FAIL verdict) as a designed signal exit (ok),
      not a crash.
    
    Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
---
 scripts/gmc-feed-guard/gmc-feed-guard.mjs | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/scripts/gmc-feed-guard/gmc-feed-guard.mjs b/scripts/gmc-feed-guard/gmc-feed-guard.mjs
index ca2cd2c..13be5ee 100644
--- a/scripts/gmc-feed-guard/gmc-feed-guard.mjs
+++ b/scripts/gmc-feed-guard/gmc-feed-guard.mjs
@@ -11,17 +11,17 @@
 // to data/latest.json (heartbeat stays honest) and exit 1 (not silent exit 2).
 import fs from 'fs';
 const _DIR_GUARD = process.env.HOME+'/Projects/dw-yolo-loop/scripts/gmc-feed-guard/data';
+const _SKILL_GUARD = process.env.HOME+'/.claude/skills/gmc-feed-guard/data';
 process.on('unhandledRejection', (err) => {
   console.error('[gmc-feed-guard] CRASH:', err?.message || err);
-  try {
-    fs.mkdirSync(_DIR_GUARD, {recursive:true});
-    fs.writeFileSync(_DIR_GUARD+'/latest.json', JSON.stringify({
-      generated_at: new Date().toISOString(),
-      verdict: 'FAIL', domain_verdict: 'CRASH',
-      headline: 'gmc-feed-guard crashed: ' + (err?.message || String(err)),
-      status: 'FAIL', sample_leaks: -1, error: String(err?.message || err),
-    }, null, 2));
-  } catch(_) {}
+  const crashOut = JSON.stringify({
+    generated_at: new Date().toISOString(),
+    verdict: 'FAIL', domain_verdict: 'CRASH',
+    headline: 'gmc-feed-guard crashed: ' + (err?.message || String(err)),
+    status: 'FAIL', sample_leaks: -1, error: String(err?.message || err),
+  }, null, 2);
+  try { fs.mkdirSync(_DIR_GUARD, {recursive:true}); fs.writeFileSync(_DIR_GUARD+'/latest.json', crashOut); } catch(_) {}
+  try { fs.mkdirSync(_SKILL_GUARD, {recursive:true}); fs.writeFileSync(_SKILL_GUARD+'/latest.json', crashOut); } catch(_) {}
   process.exit(1);
 });
 const T=(fs.readFileSync(process.env.HOME+'/Projects/secrets-manager/.env','utf8').match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m)||[])[1];

← 1956af9 TK-10952: gmc-feed-guard — add unhandledRejection handler fo  ·  back to Dw Yolo Loop  ·  fix(gmc-feed-guard): variant-based sample-leak classifier — 6108f5b →