{"slug":"dw-marketing-reels","total":341,"limit":100,"offset":0,"since":null,"commits":[{"hash":"794f9d3","date":"2026-09-26 07:18:22 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-26T07:18:02 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json","body":""},{"hash":"df87ba0","date":"2026-09-25 07:43:04 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-25T07:42:43 (1 data files) — data/reels.json","body":""},{"hash":"86a6ab3","date":"2026-09-25 07:12:35 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-25T07:12:13 (2 data files) — data/new-arrivals.json data/video-suggestions.json","body":""},{"hash":"63dc811","date":"2026-09-24 07:38:19 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-24T07:37:57 (2 data files) — data/new-arrivals.json data/reels.json","body":""},{"hash":"926295d","date":"2026-09-24 07:06:52 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-24T07:06:26 (1 data files) — data/video-suggestions.json","body":""},{"hash":"ee925af","date":"2026-09-23 07:25:44 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-23T07:25:20 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json","body":""},{"hash":"bfae37c","date":"2026-09-22 11:09:53 -0700","author":"Steve Abrams","subject":"Reel publish path: durable jewelry-counter HOLD gate (TK-12012)","body":"Steve directive 2026-09-22: stop posting any Instagram with jewelry counters\n(scope = jewelry ONLY; room-setting reels stay). publish-social.mjs publishes\nthe finished mp4, so this is the last line before a reel goes public.\n\n- jewelry-gate.mjs: sample frames from the actual mp4 (ffmpeg) and classify each\n  (ollama qwen2.5vl free / Gemini fallback), mp4-keyed cache. HOLD if any frame\n  is jewelry:true OR undecidable (fail-closed); room frames never hold.\n- publish-social.mjs: jewelry-hold block before publish -> status\n  held-jewelry-review on IG + TikTok, posts nothing.\n- jewelry-sweep-pending.mjs: quarantine any staged jewelry reel in the queue.\n\nPosting stays DISARMED. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01CRkDtx31oCvHHaMfJf9CzT"},{"hash":"b26c6e3","date":"2026-09-22 09:56:27 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-22T09:54:34 (2 data files) — data/new-arrivals.json data/video-suggestions.json","body":""},{"hash":"edb7119","date":"2026-09-21 21:22:26 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-21T20:34:48 (1 data files) — data/reels.json","body":""},{"hash":"3a27964","date":"2026-09-21 19:07:58 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-21T17:27:28 (1 data files) — data/reels.json","body":""},{"hash":"aa9405d","date":"2026-09-21 14:15:27 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-21T14:14:31 (1 data files) — data/reels.json","body":""},{"hash":"cef5109","date":"2026-09-21 11:33:28 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-21T11:31:47 (1 data files) — data/reels.json","body":""},{"hash":"bf73045","date":"2026-09-21 07:14:01 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-21T07:12:32 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json","body":""},{"hash":"87825fe","date":"2026-09-20 07:17:00 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-20T07:15:24 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json","body":""},{"hash":"2f9e4f3","date":"2026-09-19 07:21:27 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-19T07:20:19 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json","body":""},{"hash":"80feb0e","date":"2026-09-18 07:19:01 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-18T07:17:32 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json","body":""},{"hash":"c8d821b","date":"2026-09-17 07:14:01 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-17T07:12:37 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json","body":""},{"hash":"e262e15","date":"2026-09-16 14:39:21 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-16T14:34:47 (1 data files) — data/reels.json","body":""},{"hash":"5ca3af8","date":"2026-09-16 14:07:33 -0700","author":"Steve Abrams","subject":"TK-10929: report the real IG publish error instead of a hardcoded 2207076 diagnosis","body":"The failure alert (CNCP card + George email) hardcoded a diagnosis — \"a 2207076\nthat survived the 3x retry -> verify IG content-publish permission / re-auth\" —\nand emitted it for EVERY publish failure regardless of the actual error.\n\nFor three weeks the real error was \"fetch failed\": a TRANSPORT failure, because\nthe Norma instagram-agent on :9810 was dead (never pm2-save'd, so the Sep-14\nreboot left it permanently down). Node's undici only throws \"fetch failed\" when\nthe connection itself fails; a genuine Meta error arrives as a parsed code. But\nevery alert asserted a credential problem, so TK-10929 sat blocked on \"NEEDS\nSTEVE: IG content-publish re-auth, not agent-fixable\" while meta-token-canary\nreported the tokens HEALTHY the entire time.\n\ncheck-publish-status.mjs already printed the true reason on stderr; cron-run.sh\njust discarded it. Now it captures that output, echoes it, and puts the observed\ntext in the alert plus a triage pointer at the right component.\n\nAn alert must never assert a cause it did not measure.\n\nVerified with fault injection: on an injected \"fetch failed\" the alert carries\nthe real error + names norma-instagram, and the fabricated re-auth text is gone;\non a successful publish no alert fires and the OK line still reaches the log.\n\nCo-Authored-By: Claude Opus 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01DdCubRnaMxvZPUoqCxMbZs"},{"hash":"59d297d","date":"2026-09-16 11:16:17 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-16T11:14:29 (1 data files) — data/reels.json","body":""},{"hash":"6f7ec8d","date":"2026-09-16 07:21:19 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-16T07:20:09 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json","body":""},{"hash":"bca0ea3","date":"2026-09-15 20:12:11 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-15T20:11:00 (1 data files) — data/reels.json","body":""},{"hash":"aeb579e","date":"2026-09-15 17:29:40 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-15T17:25:31 (1 data files) — data/reels.json","body":""},{"hash":"3c5fc64","date":"2026-09-15 14:14:02 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-15T14:13:07 (1 data files) — data/reels.json","body":""},{"hash":"3e90676","date":"2026-09-15 11:28:55 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-15T11:25:48 (1 data files) — data/reels.json","body":""},{"hash":"5d2875d","date":"2026-09-15 07:42:14 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-15T07:41:08 (1 data files) — data/reels.json","body":""},{"hash":"160f39e","date":"2026-09-15 07:10:27 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-15T07:09:15 (2 data files) — data/new-arrivals.json data/video-suggestions.json","body":""},{"hash":"75b25e0","date":"2026-09-14 20:31:17 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-14T20:30:10 (1 data files) — data/reels.json","body":""},{"hash":"d2cfd81","date":"2026-09-14 17:20:30 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-14T17:18:57 (1 data files) — data/reels.json","body":""},{"hash":"9adfbeb","date":"2026-09-14 14:37:50 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-14T14:36:24 (1 data files) — data/reels.json","body":""},{"hash":"69a74ce","date":"2026-09-14 11:20:55 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-14T11:19:45 (1 data files) — data/reels.json","body":""},{"hash":"b064cc9","date":"2026-09-14 07:19:23 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-14T07:18:26 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json","body":""},{"hash":"d83b43c","date":"2026-09-13 07:36:25 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-13T07:34:50 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json","body":""},{"hash":"71efd85","date":"2026-09-12 07:43:08 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-12T07:18:58 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json","body":""},{"hash":"13c8ae4","date":"2026-09-11 07:44:41 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-11T07:43:45 (1 data files) — data/reels.json","body":""},{"hash":"1448291","date":"2026-09-11 07:12:05 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-11T07:11:09 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json","body":""},{"hash":"abf7562","date":"2026-09-10 07:39:04 -0700","author":"Steve Abrams","subject":"TK-10866: record 2-method verification that all 13 jewelry-creative reels are gone","body":"Method A (Graph /media, all 4 owning accounts): 0/13 present. Flags the real\ncontrol failure — REELS_seen=0 on suedewallpaper + textilewallpaper (7 of the\n13), where exact media_count parity did NOT rescue the absence.\nMethod B (authenticated openclaw browser, bracketed +/- controls): all 13\nnot-available. Owner-context probe separates deleted from archived for the 3\ncommercialwallcoverings reels.\n\nCo-Authored-By: Claude Opus 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01LjQgkCC1vKXku5Ep5ftooU"},{"hash":"898fb5d","date":"2026-09-10 07:35:01 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-10T07:33:05 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json","body":""},{"hash":"0dbf765","date":"2026-09-09 07:22:45 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-09T07:22:07 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json","body":""},{"hash":"d7e6aaa","date":"2026-09-08 07:47:41 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-08T07:45:26 (2 data files) — data/new-arrivals.json data/reels.json","body":""},{"hash":"84d581c","date":"2026-09-08 07:09:18 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-08T07:07:04 (1 data files) — data/video-suggestions.json","body":""},{"hash":"a2280c7","date":"2026-09-07 07:32:47 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-07T07:30:29 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json","body":""},{"hash":"8cfbff3","date":"2026-09-06 07:49:51 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-06T07:47:41 (1 data files) — data/reels.json","body":""},{"hash":"4e1e6ca","date":"2026-09-06 07:11:33 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-06T07:09:19 (2 data files) — data/new-arrivals.json data/video-suggestions.json","body":""},{"hash":"7f0f260","date":"2026-09-05 07:32:31 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-05T07:30:17 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json","body":""},{"hash":"a80a4b2","date":"2026-09-04 10:39:26 -0700","author":"Claude","subject":"snapshot before deploy: graduate-flipbook work-in-progress (not authored here)","body":"Working tree was dirty on arrival with another lane's in-flight graduate-flipbook\nwork (server.js + 4 public/collections/graduate-flipbook/* + build-graduate-interactive.mjs\n+ 2 storefront/graduate-interactive/*). Snapshotted per standing rule so the\ndeploy Steve approved is revertable and that lane's work is not lost.\n\nCo-Authored-By: Claude Opus 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_015XxMVSyKj1qHnXH2fLCT49"},{"hash":"f829c3c","date":"2026-09-04 07:12:45 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-04T07:10:31 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json","body":""},{"hash":"9300090","date":"2026-09-03 15:47:23 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-03T15:45:08 (2 data files) — storefront/staged-tk10427/ROLLBACK-index-20260903-152741.json storefront/staged-tk10427/index.NEW-20260903-152741.json","body":""},{"hash":"f637f7d","date":"2026-09-03 14:13:14 -0700","author":"Claude","subject":"TK-10427: codex-review hardening — drop tag:section (no nested <section> inside Shopify wrapper), add post-merge index.json integrity check (every order id resolves, JSON re-parses)","body":"Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_015XxMVSyKj1qHnXH2fLCT49"},{"hash":"ec5eff3","date":"2026-09-03 14:12:31 -0700","author":"Claude","subject":"TK-10427: add OS 2.0 section file + rollback-first one-command homepage push","body":"The staged artifact was a Custom-Liquid paste blob with no schema, which is\nwhy the only ship path was a manual theme-editor paste. Adds:\n- dw-collection-films.SECTION.liquid (same validated 3-card markup + schema)\n- PUSH-collection-films.sh (--dry-run/--apply/--rollback): snapshots\n  templates/index.json, PUTs the section asset, wires it into the homepage\n  order, verifies dwcf markers on the live page.\n\nDry-run verified: mutation adds exactly 1 section, removes 0, changes 0,\npreserves relative order. All 3 CTA collections 200, all 6 media assets 206.\nLive fire stays Steve-gated.\n\nCo-Authored-By: Claude Opus 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_015XxMVSyKj1qHnXH2fLCT49"},{"hash":"eeb5b35","date":"2026-09-03 11:13:25 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-03T11:10:51 (2 data files) — storefront/graduate-interactive/ROLLBACK-dw-collection-hero-20260903-111103.json storefront/graduate-interactive/ROLLBACK-dw-collection-hero-20260903-111144.json","body":""},{"hash":"61d0771","date":"2026-09-03 10:34:54 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-03T10:32:28 (1 data files) — public/collections/graduate-flipbook/graduate-narration.m4a","body":""},{"hash":"7af26f8","date":"2026-09-03 07:20:40 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-03T07:17:12 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json","body":""},{"hash":"675eacc","date":"2026-09-02 10:45:47 -0700","author":"Steve Abrams","subject":"reels: drop @philipperomano aspirational placeholder (dup of active @philliperomanodesigns)","body":"Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_018vRibsro4pmQ5QrgV1d676"},{"hash":"aca98b5","date":"2026-09-02 07:12:27 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-02T07:10:19 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json","body":""},{"hash":"58acd0e","date":"2026-09-01 17:11:51 -0700","author":"Steve Abrams","subject":"TK-11086: kill novasuede auto-posting to DW network — exclude Novasuede from nightly new-arrivals reel feed + disarm novasuede-color-post wrapper","body":"Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>"},{"hash":"5b23029","date":"2026-09-01 07:15:22 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-01T07:13:20 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json","body":""},{"hash":"5b2c0d3","date":"2026-08-31 10:01:59 -0700","author":"Steve Abrams","subject":"TK-10427: stage all-3 Collection Films (Majilite smart-collection create cmd + 3-card paste), gated","body":"Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>"},{"hash":"3f14cc3","date":"2026-08-31 09:57:04 -0700","author":"Steve Abrams","subject":"TK-10427: stage 2-card Collection Films ship artifacts (Path A push script + Path B paste snippet)","body":""},{"hash":"20b07bf","date":"2026-08-31 07:40:03 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-31T07:38:15 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json","body":""},{"hash":"7db7152","date":"2026-08-31 01:00:47 -0700","author":"Steve Abrams","subject":"offload regenerable media dirs to Henry NAS (TK-10902); ignore output dirs","body":""},{"hash":"e1c1a20","date":"2026-08-30 07:17:20 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-30T07:15:22 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json","body":""},{"hash":"fab6017","date":"2026-08-29 17:29:34 -0700","author":"Steve Abrams","subject":"publish reel media before Instagram handoff","body":""},{"hash":"78de2e0","date":"2026-08-29 14:40:48 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-29T14:38:58 (1 data files) — data/reels.json","body":""},{"hash":"d3c89a6","date":"2026-08-29 14:09:49 -0700","author":"Steve Abrams","subject":"snapshot before fixing reel publish order","body":""},{"hash":"36f458d","date":"2026-08-29 13:26:39 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-29T13:24:48 (2 data files) — data/new-arrivals.json data/reels.json","body":""},{"hash":"e3e42f6","date":"2026-08-29 11:35:46 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-29T11:33:46 (1 data files) — data/reels.json","body":""},{"hash":"5c63a99","date":"2026-08-29 10:21:48 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-29T10:19:53 (2 data files) — data/new-arrivals.json data/reels.json","body":""},{"hash":"25111d1","date":"2026-08-29 07:17:30 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-29T07:15:37 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json","body":""},{"hash":"c32a540","date":"2026-08-28 20:46:28 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-28T20:44:41 (1 data files) — data/reels.json","body":""},{"hash":"dac3ecd","date":"2026-08-28 17:41:47 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-28T17:39:54 (1 data files) — data/reels.json","body":""},{"hash":"8451522","date":"2026-08-28 14:36:59 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-28T14:34:59 (1 data files) — data/reels.json","body":""},{"hash":"3d7dade","date":"2026-08-28 11:32:18 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-28T11:30:23 (1 data files) — data/reels.json","body":""},{"hash":"13908e4","date":"2026-08-28 07:47:51 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-28T07:45:44 (1 data files) — data/reels.json","body":""},{"hash":"e6e0068","date":"2026-08-28 07:10:07 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-28T07:08:13 (2 data files) — data/new-arrivals.json data/video-suggestions.json","body":""},{"hash":"be44d56","date":"2026-08-27 20:40:14 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-27T20:38:24 (1 data files) — data/reels.json","body":""},{"hash":"2718c82","date":"2026-08-27 17:35:46 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-27T17:33:56 (1 data files) — data/reels.json","body":""},{"hash":"b76e4fe","date":"2026-08-27 14:31:10 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-27T14:29:15 (1 data files) — data/reels.json","body":""},{"hash":"0f45dfe","date":"2026-08-27 11:26:00 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-27T11:24:00 (1 data files) — data/reels.json","body":""},{"hash":"4d8acc2","date":"2026-08-27 07:44:16 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-27T07:42:31 (2 data files) — data/new-arrivals.json data/reels.json","body":""},{"hash":"2fe7523","date":"2026-08-27 07:07:50 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-27T07:06:07 (1 data files) — data/video-suggestions.json","body":""},{"hash":"d7e8e41","date":"2026-08-26 20:46:10 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-26T20:44:26 (1 data files) — data/reels.json","body":""},{"hash":"9269c6e","date":"2026-08-26 17:43:49 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-26T17:42:06 (1 data files) — data/reels.json","body":""},{"hash":"1fcc5bc","date":"2026-08-26 14:41:10 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-26T14:39:25 (1 data files) — data/reels.json","body":""},{"hash":"b914f09","date":"2026-08-26 12:19:12 -0700","author":"steve","subject":"TK-10866: complete deletion manifest — all 37 colors resolved to 13 reels via git-history permalink recovery","body":""},{"hash":"69910ec","date":"2026-08-26 12:08:02 -0700","author":"steve","subject":"TK-10866: stage Novasuede jewelry-reel deletion target manifest (5 known reels + 24 unknown colors to harvest)","body":""},{"hash":"aa363eb","date":"2026-08-26 11:33:07 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-26T11:30:17 (1 data files) — data/reels.json","body":""},{"hash":"c0c76ea","date":"2026-08-26 11:20:25 -0700","author":"Steve Abrams","subject":"Add glitter_walls_design as a tracked (non-postable) IG source on marketing.dw","body":"External account (NOT DW-owned) seeded the Glitter Walls collection; add it as a\nread-only tracked/inspiration source via data/tracked-ig-sources.json + a read-only\n/api/tracked-ig-sources endpoint + a labeled 'Tracked / inspiration accounts' panel.\nDeliberately kept OUT of readAccountsUnion() so it can never appear in the publish\ndropdown or pass the /api/reel-account validity check. TK-10884.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>"},{"hash":"9de1fc9","date":"2026-08-26 08:34:49 -0700","author":"Steve","subject":"Reel Studio: render a single photo + song → mp4 (Composer handoff target)","body":"New render path behind the MCC Composer's 'Build this reel' handoff. build-photo-song-reel.mjs\ntakes ONE photo + a song + caption and renders a 1080x1920 reel (photo full-frame + slow\nken-burns + caption overlay + DW outro) via HyperFrames ($0 local), then muxes the REAL\nsong as the audio track (build-reel.mjs muxes silence; here the music is the point) with a\nsilent-AAC fallback so it's always IG-Reels-publishable. New POST /api/build-photo-reel\nendpoint: same ALLOW_BUILD gate + single-job lock as run(), inputs via env, validates the\nphoto is an http(s) URL.\n\nVerified: rendered a real 15.0s mp4 = h264 1080x1920 + aac (song muxed); endpoint 202 on\nvalid input, 409 while a build runs; manifest entry written.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>"},{"hash":"99c71a8","date":"2026-08-26 08:28:01 -0700","author":"Steve Abrams","subject":"novasuede color post (TK-10866): drop designerwallcoverings from rotation + swap jewelry creative for SKU-labeled product swatch","body":"- Rotation limited to suedewallpaper,textilewallpaper,commercialwallcoverings; hard guard strips designerwallcoverings even if re-added via NS_ACCOUNTS\n- Creative now uses the product swatch (images/colors) with the real DWNS-* SKU overlaid + in the caption; jewelry-counter photo removed from the reel\n- SKU map (data/novasuede-sku-map.json) joined from dw_unified novasuede_catalog by name-slug; 142/142 verified, zero fabrication\n- caption + header comment de-jeweled\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>"},{"hash":"5e4c954","date":"2026-08-26 08:23:32 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-26T08:21:31 (2 data files) — data/novasuede-sku-map.json package-lock.json","body":""},{"hash":"e170f19","date":"2026-08-26 08:04:22 -0700","author":"Steve Abrams","subject":"chore: bump v0.9.3 (session close — TK-10447 IG roster verify + publish guard)","body":"Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>"},{"hash":"81cc78d","date":"2026-08-26 07:46:44 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-26T07:44:57 (2 data files) — data/new-arrivals.json data/reels.json","body":""},{"hash":"2ce5720","date":"2026-08-26 07:09:53 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-26T07:08:04 (1 data files) — data/video-suggestions.json","body":""},{"hash":"c7a48e3","date":"2026-08-25 20:44:42 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-25T20:42:55 (1 data files) — data/reels.json","body":""},{"hash":"9b8ae10","date":"2026-08-25 17:41:41 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-25T17:39:55 (1 data files) — data/reels.json","body":""},{"hash":"c396f4b","date":"2026-08-25 14:45:11 -0700","author":"Steve Abrams","subject":"publish-ig.mjs: refuse non-postable accounts at the resolver with a clear reason (TK-10447)","body":"The roster demotion protected the console UI but NOT the publish script: resolveAccountUid\nstill resolved grasscloth's ig_user_id (present but unreachable), so a cron/retry/manual\n--account ig-grassclothwallpaper would march into the Graph post and fail with an opaque\n'Object does not exist'. Now the resolver carries status and the publish path hard-fails\nBEFORE the media/Graph calls on any status != ready, printing the real reason.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>"},{"hash":"0537a8a","date":"2026-08-25 14:37:02 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-25T14:34:54 (1 data files) — data/reels.json","body":""},{"hash":"099834d","date":"2026-08-25 11:38:32 -0700","author":"Steve Abrams","subject":"reels IG roster: demote unreachable @grassclothwallpaper to needs-relink (TK-10447)","body":"Empirical Graph API verification (read-only, $0) of all 35 'ready' accounts on the\nshared durable META token found 34 resolve and 1 does not: ig_user_id 17841408868631110\n(@grassclothwallpaper) returns 'Object does not exist / missing permissions' while the\naccount still exists publicly (HTTP 200) — unlinked from the Page/Business or stale ID.\nAdded a NEEDS_RELINK manifest to the generator so it's durably demoted to status\n'needs-relink' (was falsely 'ready'), preventing a silent publish failure. Roster is now\n34 verified-postable + 1 needs-relink + 5 aspirational. Re-link is a gated Meta action.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>"},{"hash":"71d633f","date":"2026-08-25 11:16:00 -0700","author":"Steve Abrams","subject":"chore: reels.json sync + version bump (session close: IG accounts wired + deployed)","body":""}]}