{"slug":"secrets-manager","total":214,"limit":100,"offset":0,"since":null,"commits":[{"hash":"eb703f4","date":"2026-09-26 09:04:05 -0700","author":"Steve Abrams","subject":"rotate-dw-admin-full.sh: client-side SCRAM-SHA-256 so plaintext never reaches Postgres (TK-11480)","body":"ALTER now carries a pre-hashed verifier (pw to python on stdin, never argv), so\nlog_statement / pg_stat_statements can never capture the plaintext. Harness T6\nproves it on a real throwaway PG14 cluster (TCP-only; new pw authenticates, wrong\npw rejected) and goes RED on a corrupted verifier. T6 fails NOT-MEASURED if the\ncluster does not start (fixed a false-green negative control). 22/22 green.\n\nCo-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01J3gBZfBgR2c7TZugF5Ybz4"},{"hash":"5673bb9","date":"2026-09-26 08:53:47 -0700","author":"Steve Abrams","subject":"rotate-dw-admin-full.sh: repair 4 reproduced defects + synthetic harness (TK-11480)","body":"Fixes: password in python3 argv (now printf builtin); ssh pipe+heredoc stdin\ncollision (script now the ssh command, pw alone on stdin); CHG passed as argv\nnot env (zero restarts); no errexit (failed Mac2 ALTER continued to prod).\nHardening per contrarian review: pm2 jlist failure fails closed (was a silent\nzero-restart via process substitution), exclusive timestamped backups, opt-in\nsplit-brain start, broad-cwd restart guard, partial-rotation STATE report,\nxtrace disabled. test/rotate-dw-admin-full.test.sh: 19/19 green; RED vs original.\nNo secret read, script never executed against a real host.\n\nCo-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01J3gBZfBgR2c7TZugF5Ybz4"},{"hash":"576e596","date":"2026-09-25 11:53:05 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-25T11:52:49 (1 data files) — registry.json","body":""},{"hash":"4464cbf","date":"2026-09-24 14:21:33 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-24T14:21:31 (1 data files) — registry.json","body":""},{"hash":"4efb136","date":"2026-09-23 17:50:52 -0700","author":"Steve Abrams","subject":"routes: register Kamatera full-monte/.env as a GEMINI_API_KEY destination (enrichment key switched off depleted account, TK-12090)","body":""},{"hash":"b5cdf49","date":"2026-09-23 12:42:17 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-23T12:42:16 (1 data files) — registry.json","body":""},{"hash":"c7c44d9","date":"2026-09-23 12:24:06 -0700","author":"Steve","subject":"TK-12029: DW_SESSION_SECRET route moved to services.* with env_file destinations (bare top-level array was silently ignored by fanOut)","body":"Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_0136w4V3yGy3mAqRf1dtgYkr"},{"hash":"474abf9","date":"2026-09-23 11:57:40 -0700","author":"Steve","subject":"TK-12029: route DW_SESSION_SECRET to all three local HMAC verifiers (room-setting-app, ImportNewSkufromURL, Letsbegin)","body":"Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_0136w4V3yGy3mAqRf1dtgYkr"},{"hash":"1ebb068","date":"2026-09-23 10:02:48 -0700","author":"Steve Abrams","subject":"register GEMINI_API_KEY_PATTY + GEMINI_API_KEY_POPPY — fixes unrouted leak targets for TK-11786 Gemini rotation","body":""},{"hash":"0a9d893","date":"2026-09-23 09:31:45 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-23T09:31:43 (1 data files) — registry.json","body":""},{"hash":"64fcb40","date":"2026-09-22 16:42:28 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-22T16:42:26 (1 data files) — registry.json","body":""},{"hash":"5b2b417","date":"2026-09-22 16:09:20 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-22T16:09:18 (1 data files) — registry.json","body":""},{"hash":"542d9ff","date":"2026-09-22 15:03:00 -0700","author":"Steve Abrams","subject":"routes: register BROWSERBASE_API_KEY + PROJECT_ID destinations (were unrouted → stale key shadowed ImportNewSkufromURL, causing fleet-wide BB 401)","body":""},{"hash":"3c08671","date":"2026-09-22 14:50:34 -0700","author":"Steve","subject":"verify: okStatuses now requires a paired bodyMustContain body proof to certify a key","body":"Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01DP24DdLpG6PHXgmjr47TVb"},{"hash":"ceab226","date":"2026-09-22 13:02:32 -0700","author":"Steve","subject":"Register DW_SESSION_SECRET route -> room-setting-app/.env.local (TK-11786 auth fix wiring)","body":"Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01G3ChReG53fwpNgUESv4SY7"},{"hash":"30819c4","date":"2026-09-22 12:49:05 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-22T12:49:04 (2 data files) — registry.json routes.json","body":""},{"hash":"08b3e97","date":"2026-09-22 12:15:53 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-22T12:15:47 (3 data files) — data/latest.json registry.json routes.json","body":""},{"hash":"5ed32a4","date":"2026-09-18 14:54:55 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-18T14:54:24 (1 data files) — registry.json","body":""},{"hash":"368acb8","date":"2026-09-17 11:33:11 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-17T11:32:24 (1 data files) — registry.json","body":""},{"hash":"af8153b","date":"2026-09-17 09:54:38 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-17T09:53:49 (2 data files) — registry.json routes.json","body":""},{"hash":"b0935a9","date":"2026-09-16 12:34:12 -0700","author":"Steve Abrams","subject":"TK-11683: document ENOENT-exclusion tradeoff (codex-check/Grok) — single-cycle self-healing vs chronic-WARN masking","body":"Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01Qf3DHSrZSGBXkNENgsYdM8"},{"hash":"11e21a4","date":"2026-09-16 12:29:22 -0700","author":"Steve Abrams","subject":"TK-11683: harden transcript scanner read loop (mid-write race) — retry-read once + exclude ENOENT-vanished files from unreadable, add fail-safe negative test","body":"A live transcript caught mid-write or rotated away between find-enumeration and\nread (TK-11795) flipped the whole canary to WARN 'cannot certify clean'. Now:\nretry the read once after a 150ms sync sleep for the transient case; a VANISHED\nfile (ENOENT — no longer on disk, so it cannot hold a persistent secret) is\nexcluded rather than counted as an unmeasured gap; a genuinely-unreadable\n(non-ENOENT) file surviving the retry still counts unreadable -> WARN. Negative\ntest extended to prove the fail-safe direction holds (EACCES file -> WARN).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01Qf3DHSrZSGBXkNENgsYdM8"},{"hash":"7c0d555","date":"2026-09-16 10:08:09 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-16T10:07:35 (1 data files) — registry.json","body":""},{"hash":"0a2ee5b","date":"2026-09-14 16:14:28 -0700","author":"Steve Abrams","subject":"TK-11745: stage collision-safe Stripe live-key routes for professional-directory rotation fan-out","body":""},{"hash":"9bbbe67","date":"2026-09-14 01:09:03 -0700","author":"Steve Abrams","subject":"TK-11683: reversible dry-run redactor for Claude session transcripts","body":"Masks high-confidence live-secret spans (the hc:true patterns the scanner\nflags, shared via transcript-secret-lib.mjs so redaction touches exactly what\nthe scan reports) with a REDACTED:pattern:last4:sha16 placeholder.\n\nReversibility: backs up each file (chmod 600) BEFORE any write, records a\nrestore-map (sha_before/sha_after + redacted digests, never a raw value), and\n--restore reverses byte-for-byte. Dry-run is the DEFAULT; a live --apply is\nrefused without an explicit --yes-modify-live confirm flag. Ships a negative\ntest proving dry-run is a no-op, --apply masks + self-verifies clean, the\nrestore-map holds no raw secret, and --restore reverses exactly.\n\nThe actual live-transcript sweep is DESTRUCTIVE and stays Steve-gated.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: 963c1354-d10a-451f-8e5b-936663056ab7 (yoloforever-night)"},{"hash":"0795811","date":"2026-09-14 01:05:52 -0700","author":"Steve Abrams","subject":"TK-11683: read-only live-secret scanner for Claude session transcripts","body":"Sweeps ~/.claude/projects/**/*.jsonl for high-confidence live-secret patterns\n(reuses the secrets skill's routes.json leak_patterns + adds AKIA/private-key/\ngitlab/sendgrid/twilio/bearer/env-key). Closes the gap where cli.js cmdAudit\nnever scanned the transcript tree. Emits DIGEST-ONLY findings\n{file,line,pattern,last4,sha256_16} — never a raw secret value — and a\ndata/latest.json verdict in the fleet-health PASS/WARN/FAIL vocabulary\n(unmeasured input is never a false PASS). Ships --test negative test proving it\nFLAGS an injected fake secret + ignores a clean/placeholder line + goes FAIL +\nleaks no raw value. Detection logic shared via transcript-secret-lib.mjs so the\n(gated) redactor masks exactly what the scanner flags. Scan output dir gitignored.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>"},{"hash":"4930415","date":"2026-09-13 03:10:18 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-13T03:09:46 (1 data files) — routes.json","body":""},{"hash":"cd4cd10","date":"2026-09-13 01:02:44 -0700","author":"Steve Abrams","subject":"secrets routes: add govarbitrage as GOOGLE_PLACES_API_KEY fan-out destination","body":"So a future key rotation covers govarbitrage/.env, which was previously missed.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01G37asNBxx31ZhuCqY5kk46"},{"hash":"cc062c2","date":"2026-09-12 12:59:24 -0700","author":"Steve Abrams","subject":"TK-11502: register SHOPIFY_ADMIN_ACCESS_TOKEN as managed key (verify=Shopify Admin shop.json), stop TK-10930 drift","body":"Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01REdBiwStXHMkuwrHD8Rfzc"},{"hash":"bf737ca","date":"2026-09-11 12:47:43 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-11T12:47:38 (1 data files) — registry.json","body":""},{"hash":"98ffa8e","date":"2026-09-11 08:57:37 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-11T08:57:34 (1 data files) — routes.json","body":""},{"hash":"287df5a","date":"2026-09-08 09:43:51 -0700","author":"Steve Abrams","subject":"routes: add DEEPSEEK_API_KEY with DeepSeek balance verify endpoint","body":"Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01ELf753u6xu7AiZjNRD4yY6"},{"hash":"346ba84","date":"2026-09-08 09:40:49 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-08T09:40:47 (1 data files) — registry.json","body":""},{"hash":"2532072","date":"2026-09-08 09:02:40 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-08T09:02:39 (1 data files) — registry.json","body":""},{"hash":"1f37027","date":"2026-09-04 09:09:57 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-04T09:09:45 (2 data files) — registry.json routes.json","body":""},{"hash":"90f733b","date":"2026-09-03 14:29:25 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-03T14:29:24 (1 data files) — routes.json","body":""},{"hash":"9e77f88","date":"2026-09-03 07:56:58 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-03T07:56:56 (1 data files) — registry.json","body":""},{"hash":"9036967","date":"2026-09-03 07:47:29 -0700","author":"Steve Abrams","subject":"Route Charge and Explore test webhook secret","body":""},{"hash":"3990c33","date":"2026-09-03 07:43:31 -0700","author":"Steve Abrams","subject":"Route Charge and Explore Stripe test key","body":""},{"hash":"d972b48","date":"2026-09-02 20:35:17 -0700","author":"Steve Abrams","subject":"add safe local credentials center","body":""},{"hash":"08ddb77","date":"2026-09-02 17:24:07 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-02T17:24:05 (1 data files) — verification/credentials-center-e2e.png","body":""},{"hash":"17a01c9","date":"2026-09-01 07:51:06 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-01T07:51:05 (1 data files) — registry.json","body":""},{"hash":"1e0b985","date":"2026-08-31 17:38:21 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-31T17:38:21 (1 data files) — registry.json","body":""},{"hash":"891f556","date":"2026-08-31 11:17:16 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-31T11:17:15 (1 data files) — tk11025-restore-map.json","body":""},{"hash":"4df7ff6","date":"2026-08-31 11:07:43 -0700","author":"Steve Abrams","subject":"rotate xAI and Moonshot credential records","body":""},{"hash":"8cc46a5","date":"2026-08-31 02:09:46 -0700","author":"Steve Abrams","subject":"Push Grok key to remote DTD panel","body":""},{"hash":"1881ae9","date":"2026-08-31 02:06:33 -0700","author":"Steve Abrams","subject":"Route Grok key to remote DTD panel","body":""},{"hash":"4bc2dfa","date":"2026-08-31 02:00:56 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-31T02:00:54 (2 data files) — remote-routes.json routes.json","body":""},{"hash":"015d8a6","date":"2026-08-31 00:07:17 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-31T00:07:16 (1 data files) — registry.json","body":""},{"hash":"d56076d","date":"2026-08-30 21:32:01 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-30T21:32:01 (1 data files) — registry.json","body":""},{"hash":"063ec71","date":"2026-08-30 19:40:36 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-30T19:40:35 (1 data files) — registry.json","body":""},{"hash":"82baf8b","date":"2026-08-29 14:06:36 -0700","author":"Steve Abrams","subject":"register Norma reels authorization route","body":""},{"hash":"cae0e8c","date":"2026-08-29 14:06:26 -0700","author":"Steve Abrams","subject":"quote spaced secrets for shell consumers","body":""},{"hash":"87ca939","date":"2026-08-29 12:47:38 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-29T12:47:37 (2 data files) — registry.json routes.json","body":""},{"hash":"2363f17","date":"2026-08-28 22:24:37 -0700","author":"Steve Abrams","subject":"Sanitize verifier report fields","body":""},{"hash":"f585023","date":"2026-08-28 22:22:48 -0700","author":"Steve Abrams","subject":"Harden secret freshness verification failures","body":""},{"hash":"76a6bf3","date":"2026-08-28 22:18:37 -0700","author":"Steve Abrams","subject":"Add secret freshness report command","body":""},{"hash":"b712be4","date":"2026-08-28 08:31:24 -0700","author":"Steve Abrams","subject":"register Shopify full-access token routes","body":""},{"hash":"6205d31","date":"2026-08-28 07:45:45 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-28T07:45:44 (2 data files) — registry.json routes.json","body":""},{"hash":"11003cd","date":"2026-08-28 06:30:23 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-28T06:30:22 (1 data files) — registry.json","body":""},{"hash":"0b03b92","date":"2026-08-28 01:33:49 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-28T01:33:48 (1 data files) — routes.json","body":""},{"hash":"c9561cd","date":"2026-08-28 00:56:57 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-28T00:56:56 (2 data files) — registry.json routes.json","body":""},{"hash":"82ca00d","date":"2026-08-26 08:21:32 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-26T08:21:31 (1 data files) — registry.json","body":""},{"hash":"77e01b5","date":"2026-08-19 11:14:56 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-19T11:14:55 (1 data files) — registry.json","body":""},{"hash":"ea8709c","date":"2026-08-19 09:34:56 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-19T09:34:55 (1 data files) — registry.json","body":""},{"hash":"141197b","date":"2026-08-14 13:55:46 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-14T13:55:45 (1 data files) — registry.json","body":""},{"hash":"35d45b7","date":"2026-08-12 17:03:42 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-12T17:03:39 (1 data files) — registry.json","body":""},{"hash":"cc73261","date":"2026-08-12 09:56:28 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-12T09:56:27 (1 data files) — registry.json","body":""},{"hash":"34dcb5d","date":"2026-08-11 07:20:34 -0700","author":"steve","subject":"secrets: backup-before-overwrite guard in writeEnvFile (timestamped .bak on real change, prune last 5) — born from the ZENDESK secret incident","body":""},{"hash":"1465ee8","date":"2026-08-11 07:05:15 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-11T07:04:50 (1 data files) — registry.json","body":""},{"hash":"bb1e570","date":"2026-08-10 22:20:28 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-10T22:20:03 (1 data files) — registry.json","body":""},{"hash":"671c2d3","date":"2026-08-10 21:49:31 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-10T21:49:05 (1 data files) — registry.json","body":""},{"hash":"9e29295","date":"2026-08-10 15:38:33 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-10T15:38:06 (1 data files) — registry.json","body":""},{"hash":"05ae97c","date":"2026-08-10 14:36:16 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-10T14:35:45 (1 data files) — registry.json","body":""},{"hash":"a134765","date":"2026-08-10 13:34:32 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-10T13:34:07 (1 data files) — registry.json","body":""},{"hash":"0b2ec88","date":"2026-08-10 10:58:44 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-10T10:58:17 (2 data files) — registry.json routes.json","body":""},{"hash":"f5bf9c3","date":"2026-08-10 10:27:55 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-10T10:27:30 (1 data files) — registry.json","body":""},{"hash":"7de1947","date":"2026-08-10 09:26:02 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-10T09:25:36 (1 data files) — registry.json","body":""},{"hash":"0d61dd5","date":"2026-08-09 09:46:59 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-09T09:46:33 (3 data files) — registry.json routes.json routes.json.bak.1786292832","body":""},{"hash":"3ec1257","date":"2026-08-07 10:09:33 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-07T10:09:04 (1 data files) — registry.json","body":""},{"hash":"94d6549","date":"2026-08-06 15:32:38 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-06T15:32:11 (1 data files) — registry.json","body":""},{"hash":"f2c9818","date":"2026-08-06 14:30:23 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-06T14:29:57 (1 data files) — registry.json","body":""},{"hash":"769e028","date":"2026-08-05 14:20:59 -0700","author":"Steve","subject":"routes: fan BRAVE_SEARCH_API_KEY to rentv/.env (PR LinkedIn enrichment)","body":""},{"hash":"6c6f7be","date":"2026-08-05 14:12:39 -0700","author":"Steve Abrams","subject":"auto-save: 2026-08-05T14:12:38 (1 files) — registry.json","body":""},{"hash":"d1886dc","date":"2026-08-05 12:11:53 -0700","author":"Steve Abrams","subject":"auto-save: 2026-08-05T12:11:52 (1 files) — registry.json","body":""},{"hash":"cc9dcfe","date":"2026-08-05 08:40:36 -0700","author":"Steve Abrams","subject":"auto-save: 2026-08-05T08:40:35 (1 files) — registry.json","body":""},{"hash":"fa122d3","date":"2026-08-04 13:03:32 -0700","author":"Steve Abrams","subject":"auto-save: 2026-08-04T13:03:31 (1 files) — registry.json","body":""},{"hash":"98cf4a1","date":"2026-08-04 11:32:55 -0700","author":"Steve Abrams","subject":"auto-save: 2026-08-04T11:32:54 (1 files) — registry.json","body":""},{"hash":"61fc594","date":"2026-08-04 10:32:28 -0700","author":"Steve Abrams","subject":"auto-save: 2026-08-04T10:32:27 (1 files) — registry.json","body":""},{"hash":"a198f88","date":"2026-08-03 12:24:01 -0700","author":"Steve Abrams","subject":"auto-save: 2026-08-03T12:23:59 (1 files) — registry.json","body":""},{"hash":"c68e00d","date":"2026-08-03 11:53:47 -0700","author":"Steve Abrams","subject":"auto-save: 2026-08-03T11:53:46 (1 files) — registry.json","body":""},{"hash":"31eccc0","date":"2026-08-03 10:23:03 -0700","author":"Steve Abrams","subject":"auto-save: 2026-08-03T10:23:02 (2 files) — registry.json routes.json","body":""},{"hash":"c560ed9","date":"2026-08-02 07:13:16 -0700","author":"Steve Abrams","subject":"auto-save: 2026-08-02T07:13:15 (1 files) — registry.json","body":""},{"hash":"28bb624","date":"2026-07-30 15:22:58 -0700","author":"steve@designerwallcoverings.com","subject":"secrets: DSN_REWRITE superset fix — map real dw_admin PG key names to DATABASE_URL so DB rotation rewrites the DSN (TK-10045, fixes half-fire)","body":""},{"hash":"d7a8605","date":"2026-07-30 15:19:05 -0700","author":"Steve Abrams","subject":"auto-save: 2026-07-30T15:19:04 (1 files) — registry.json","body":""},{"hash":"86c3ed3","date":"2026-07-30 08:27:54 -0700","author":"Steve","subject":"secrets: record rotated OPENAI_API_KEY digest in registry (session close)","body":""},{"hash":"60e3fb0","date":"2026-07-30 08:16:48 -0700","author":"Steve","subject":"secrets: extend OPENAI_API_KEY route to holdforme/model-arena/wallco-ai/whatsmystyle/B_Version_1 (were on dead key)","body":""},{"hash":"642707c","date":"2026-07-30 08:16:09 -0700","author":"Steve Abrams","subject":"auto-save: 2026-07-30T08:16:08 (1 files) — registry.json","body":""},{"hash":"acccd86","date":"2026-07-30 07:45:46 -0700","author":"Steve Abrams","subject":"auto-save: 2026-07-30T07:45:45 (1 files) — registry.json","body":""},{"hash":"a6259c8","date":"2026-07-30 07:15:10 -0700","author":"Steve","subject":"secrets-manager: fix 2 pre-existing fan bugs (contrarian Hole 4, TK-10045)","body":"- 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.\n- 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.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>"}]}