[object Object]

← back to Secrets Manager

secrets-manager: fix 2 pre-existing fan bugs (contrarian Hole 4, TK-10045)

a6259c866f31b37577d237eb82214260da640bbf · 2026-07-30 07:15:10 -0700 · Steve

- SHOPIFY_ORDERS_TOKEN skill dest used 'path' not 'name' -> fanOut skill branch built skills/undefined/.env (token never reached weekend-csv-products). Fixed to name.
- cmdSync iterated only ROUTES.services, skipping ~37 top-level legacy routes (SHOPIFY_ORDERS_TOKEN, SPOONFLOWER_*, GOOGLE_DRIVE_*, TWILIO_*...) on every sync. Now fans services+top-level = 103 keys.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

Files touched

Diff

commit a6259c866f31b37577d237eb82214260da640bbf
Author: Steve <steve@designerwallcoverings.com>
Date:   Thu Jul 30 07:15:10 2026 -0700

    secrets-manager: fix 2 pre-existing fan bugs (contrarian Hole 4, TK-10045)
    
    - SHOPIFY_ORDERS_TOKEN skill dest used 'path' not 'name' -> fanOut skill branch built skills/undefined/.env (token never reached weekend-csv-products). Fixed to name.
    - cmdSync iterated only ROUTES.services, skipping ~37 top-level legacy routes (SHOPIFY_ORDERS_TOKEN, SPOONFLOWER_*, GOOGLE_DRIVE_*, TWILIO_*...) on every sync. Now fans services+top-level = 103 keys.
    
    Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---
 cli.js      | 9 ++++++++-
 routes.json | 2 +-
 2 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/cli.js b/cli.js
index 8988044..cfa47c0 100755
--- a/cli.js
+++ b/cli.js
@@ -411,7 +411,14 @@ async function cmdCheck(key) {
 function cmdSync() {
   const master = loadEnvFile(MASTER_ENV);
   let total = 0;
-  for (const k of Object.keys(ROUTES.services)) {
+  // Iterate BOTH .services AND legacy top-level routed keys — cmdSync previously
+  // only walked .services, so ~47 top-level routes (SHOPIFY_ORDERS_TOKEN, SPOONFLOWER_*,
+  // GOOGLE_DRIVE_*, TWILIO_*, the OPENAI/ELEVENLABS legacy entries…) never re-fanned
+  // on `sync` — the same .services-only blind spot that caused the 2026-06-03 half-fire.
+  const META = new Set(['_comment', 'services', 'leak_patterns']);
+  const topLevel = Object.keys(ROUTES).filter(k => !META.has(k) && ROUTES[k] && ROUTES[k].destinations);
+  const allKeys = [...new Set([...Object.keys(ROUTES.services), ...topLevel])];
+  for (const k of allKeys) {
     if (master[k]) total += fanOut(k, master[k]).length;
   }
   console.log(`sync: re-wrote ${total} destination entries from master`);
diff --git a/routes.json b/routes.json
index c329a6c..b5d64d5 100644
--- a/routes.json
+++ b/routes.json
@@ -1447,7 +1447,7 @@
     "destinations": [
       {
         "type": "skill",
-        "path": "/Users/macstudio3/.claude/skills/weekend-csv-products/.env"
+        "name": "weekend-csv-products"
       }
     ]
   },

← f9531b0 scoping: mark skill .env as review_required (Claude-consumed  ·  back to Secrets Manager  ·  auto-save: 2026-07-30T07:45:45 (1 files) — registry.json acccd86 →