Dw Marketing Reels

repo: ~/Projects/dw-marketing-reels · 341 commits · 1 in last 24h, 14 in last 7d · ▂▆█▂▄▄▂

Search the build

341 commits indexed

  1. 794f9d3 2026-09-26 auto-data-snapshot: 2026-09-26T07:18:02 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json
  2. df87ba0 2026-09-25 auto-data-snapshot: 2026-09-25T07:42:43 (1 data files) — data/reels.json
  3. 86a6ab3 2026-09-25 auto-data-snapshot: 2026-09-25T07:12:13 (2 data files) — data/new-arrivals.json data/video-suggestions.json
  4. 63dc811 2026-09-24 auto-data-snapshot: 2026-09-24T07:37:57 (2 data files) — data/new-arrivals.json data/reels.json
  5. 926295d 2026-09-24 auto-data-snapshot: 2026-09-24T07:06:26 (1 data files) — data/video-suggestions.json
  6. ee925af 2026-09-23 auto-data-snapshot: 2026-09-23T07:25:20 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json
  7. bfae37c 2026-09-22 Reel publish path: durable jewelry-counter HOLD gate (TK-12012)
  8. b26c6e3 2026-09-22 auto-data-snapshot: 2026-09-22T09:54:34 (2 data files) — data/new-arrivals.json data/video-suggestions.json
  9. edb7119 2026-09-21 auto-data-snapshot: 2026-09-21T20:34:48 (1 data files) — data/reels.json
  10. 3a27964 2026-09-21 auto-data-snapshot: 2026-09-21T17:27:28 (1 data files) — data/reels.json
  11. aa9405d 2026-09-21 auto-data-snapshot: 2026-09-21T14:14:31 (1 data files) — data/reels.json
  12. cef5109 2026-09-21 auto-data-snapshot: 2026-09-21T11:31:47 (1 data files) — data/reels.json
  13. bf73045 2026-09-21 auto-data-snapshot: 2026-09-21T07:12:32 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json
  14. 87825fe 2026-09-20 auto-data-snapshot: 2026-09-20T07:15:24 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json
  15. 2f9e4f3 2026-09-19 auto-data-snapshot: 2026-09-19T07:20:19 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json
  16. 80feb0e 2026-09-18 auto-data-snapshot: 2026-09-18T07:17:32 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json
  17. c8d821b 2026-09-17 auto-data-snapshot: 2026-09-17T07:12:37 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json
  18. e262e15 2026-09-16 auto-data-snapshot: 2026-09-16T14:34:47 (1 data files) — data/reels.json
  19. 5ca3af8 2026-09-16 TK-10929: report the real IG publish error instead of a hardcoded 2207076 diagnosis
  20. 59d297d 2026-09-16 auto-data-snapshot: 2026-09-16T11:14:29 (1 data files) — data/reels.json
  21. 6f7ec8d 2026-09-16 auto-data-snapshot: 2026-09-16T07:20:09 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json
  22. bca0ea3 2026-09-15 auto-data-snapshot: 2026-09-15T20:11:00 (1 data files) — data/reels.json
  23. aeb579e 2026-09-15 auto-data-snapshot: 2026-09-15T17:25:31 (1 data files) — data/reels.json
  24. 3c5fc64 2026-09-15 auto-data-snapshot: 2026-09-15T14:13:07 (1 data files) — data/reels.json
  25. 3e90676 2026-09-15 auto-data-snapshot: 2026-09-15T11:25:48 (1 data files) — data/reels.json
  26. 5d2875d 2026-09-15 auto-data-snapshot: 2026-09-15T07:41:08 (1 data files) — data/reels.json
  27. 160f39e 2026-09-15 auto-data-snapshot: 2026-09-15T07:09:15 (2 data files) — data/new-arrivals.json data/video-suggestions.json
  28. 75b25e0 2026-09-14 auto-data-snapshot: 2026-09-14T20:30:10 (1 data files) — data/reels.json
  29. d2cfd81 2026-09-14 auto-data-snapshot: 2026-09-14T17:18:57 (1 data files) — data/reels.json
  30. 9adfbeb 2026-09-14 auto-data-snapshot: 2026-09-14T14:36:24 (1 data files) — data/reels.json
  31. 69a74ce 2026-09-14 auto-data-snapshot: 2026-09-14T11:19:45 (1 data files) — data/reels.json
  32. b064cc9 2026-09-14 auto-data-snapshot: 2026-09-14T07:18:26 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json
  33. d83b43c 2026-09-13 auto-data-snapshot: 2026-09-13T07:34:50 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json
  34. 71efd85 2026-09-12 auto-data-snapshot: 2026-09-12T07:18:58 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json
  35. 13c8ae4 2026-09-11 auto-data-snapshot: 2026-09-11T07:43:45 (1 data files) — data/reels.json
  36. 1448291 2026-09-11 auto-data-snapshot: 2026-09-11T07:11:09 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json
  37. abf7562 2026-09-10 TK-10866: record 2-method verification that all 13 jewelry-creative reels are gone
  38. 898fb5d 2026-09-10 auto-data-snapshot: 2026-09-10T07:33:05 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json
  39. 0dbf765 2026-09-09 auto-data-snapshot: 2026-09-09T07:22:07 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json
  40. d7e6aaa 2026-09-08 auto-data-snapshot: 2026-09-08T07:45:26 (2 data files) — data/new-arrivals.json data/reels.json
  41. 84d581c 2026-09-08 auto-data-snapshot: 2026-09-08T07:07:04 (1 data files) — data/video-suggestions.json
  42. a2280c7 2026-09-07 auto-data-snapshot: 2026-09-07T07:30:29 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json
  43. 8cfbff3 2026-09-06 auto-data-snapshot: 2026-09-06T07:47:41 (1 data files) — data/reels.json
  44. 4e1e6ca 2026-09-06 auto-data-snapshot: 2026-09-06T07:09:19 (2 data files) — data/new-arrivals.json data/video-suggestions.json
  45. 7f0f260 2026-09-05 auto-data-snapshot: 2026-09-05T07:30:17 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json
  46. a80a4b2 2026-09-04 snapshot before deploy: graduate-flipbook work-in-progress (not authored here)
  47. f829c3c 2026-09-04 auto-data-snapshot: 2026-09-04T07:10:31 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json
  48. 9300090 2026-09-03 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
  49. f637f7d 2026-09-03 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)
  50. ec5eff3 2026-09-03 TK-10427: add OS 2.0 section file + rollback-first one-command homepage push
  51. eeb5b35 2026-09-03 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
  52. 61d0771 2026-09-03 auto-data-snapshot: 2026-09-03T10:32:28 (1 data files) — public/collections/graduate-flipbook/graduate-narration.m4a
  53. 7af26f8 2026-09-03 auto-data-snapshot: 2026-09-03T07:17:12 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json
  54. 675eacc 2026-09-02 reels: drop @philipperomano aspirational placeholder (dup of active @philliperomanodesigns)
  55. aca98b5 2026-09-02 auto-data-snapshot: 2026-09-02T07:10:19 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json
  56. 58acd0e 2026-09-01 TK-11086: kill novasuede auto-posting to DW network — exclude Novasuede from nightly new-arrivals reel feed + disarm novasuede-color-post wrapper
  57. 5b23029 2026-09-01 auto-data-snapshot: 2026-09-01T07:13:20 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json
  58. 5b2c0d3 2026-08-31 TK-10427: stage all-3 Collection Films (Majilite smart-collection create cmd + 3-card paste), gated
  59. 3f14cc3 2026-08-31 TK-10427: stage 2-card Collection Films ship artifacts (Path A push script + Path B paste snippet)
  60. 20b07bf 2026-08-31 auto-data-snapshot: 2026-08-31T07:38:15 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json
  61. 7db7152 2026-08-31 offload regenerable media dirs to Henry NAS (TK-10902); ignore output dirs
  62. e1c1a20 2026-08-30 auto-data-snapshot: 2026-08-30T07:15:22 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json
  63. fab6017 2026-08-29 publish reel media before Instagram handoff
  64. 78de2e0 2026-08-29 auto-data-snapshot: 2026-08-29T14:38:58 (1 data files) — data/reels.json
  65. d3c89a6 2026-08-29 snapshot before fixing reel publish order
  66. 36f458d 2026-08-29 auto-data-snapshot: 2026-08-29T13:24:48 (2 data files) — data/new-arrivals.json data/reels.json
  67. e3e42f6 2026-08-29 auto-data-snapshot: 2026-08-29T11:33:46 (1 data files) — data/reels.json
  68. 5c63a99 2026-08-29 auto-data-snapshot: 2026-08-29T10:19:53 (2 data files) — data/new-arrivals.json data/reels.json
  69. 25111d1 2026-08-29 auto-data-snapshot: 2026-08-29T07:15:37 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json
  70. c32a540 2026-08-28 auto-data-snapshot: 2026-08-28T20:44:41 (1 data files) — data/reels.json
  71. dac3ecd 2026-08-28 auto-data-snapshot: 2026-08-28T17:39:54 (1 data files) — data/reels.json
  72. 8451522 2026-08-28 auto-data-snapshot: 2026-08-28T14:34:59 (1 data files) — data/reels.json
  73. 3d7dade 2026-08-28 auto-data-snapshot: 2026-08-28T11:30:23 (1 data files) — data/reels.json
  74. 13908e4 2026-08-28 auto-data-snapshot: 2026-08-28T07:45:44 (1 data files) — data/reels.json
  75. e6e0068 2026-08-28 auto-data-snapshot: 2026-08-28T07:08:13 (2 data files) — data/new-arrivals.json data/video-suggestions.json
  76. be44d56 2026-08-27 auto-data-snapshot: 2026-08-27T20:38:24 (1 data files) — data/reels.json
  77. 2718c82 2026-08-27 auto-data-snapshot: 2026-08-27T17:33:56 (1 data files) — data/reels.json
  78. b76e4fe 2026-08-27 auto-data-snapshot: 2026-08-27T14:29:15 (1 data files) — data/reels.json
  79. 0f45dfe 2026-08-27 auto-data-snapshot: 2026-08-27T11:24:00 (1 data files) — data/reels.json
  80. 4d8acc2 2026-08-27 auto-data-snapshot: 2026-08-27T07:42:31 (2 data files) — data/new-arrivals.json data/reels.json
  81. 2fe7523 2026-08-27 auto-data-snapshot: 2026-08-27T07:06:07 (1 data files) — data/video-suggestions.json
  82. d7e8e41 2026-08-26 auto-data-snapshot: 2026-08-26T20:44:26 (1 data files) — data/reels.json
  83. 9269c6e 2026-08-26 auto-data-snapshot: 2026-08-26T17:42:06 (1 data files) — data/reels.json
  84. 1fcc5bc 2026-08-26 auto-data-snapshot: 2026-08-26T14:39:25 (1 data files) — data/reels.json
  85. b914f09 2026-08-26 TK-10866: complete deletion manifest — all 37 colors resolved to 13 reels via git-history permalink recovery
  86. 69910ec 2026-08-26 TK-10866: stage Novasuede jewelry-reel deletion target manifest (5 known reels + 24 unknown colors to harvest)
  87. aa363eb 2026-08-26 auto-data-snapshot: 2026-08-26T11:30:17 (1 data files) — data/reels.json
  88. c0c76ea 2026-08-26 Add glitter_walls_design as a tracked (non-postable) IG source on marketing.dw
  89. 9de1fc9 2026-08-26 Reel Studio: render a single photo + song → mp4 (Composer handoff target)
  90. 99c71a8 2026-08-26 novasuede color post (TK-10866): drop designerwallcoverings from rotation + swap jewelry creative for SKU-labeled product swatch
  91. 5e4c954 2026-08-26 auto-data-snapshot: 2026-08-26T08:21:31 (2 data files) — data/novasuede-sku-map.json package-lock.json
  92. e170f19 2026-08-26 chore: bump v0.9.3 (session close — TK-10447 IG roster verify + publish guard)
  93. 81cc78d 2026-08-26 auto-data-snapshot: 2026-08-26T07:44:57 (2 data files) — data/new-arrivals.json data/reels.json
  94. 2ce5720 2026-08-26 auto-data-snapshot: 2026-08-26T07:08:04 (1 data files) — data/video-suggestions.json
  95. c7a48e3 2026-08-25 auto-data-snapshot: 2026-08-25T20:42:55 (1 data files) — data/reels.json
  96. 9b8ae10 2026-08-25 auto-data-snapshot: 2026-08-25T17:39:55 (1 data files) — data/reels.json
  97. c396f4b 2026-08-25 publish-ig.mjs: refuse non-postable accounts at the resolver with a clear reason (TK-10447)
  98. 0537a8a 2026-08-25 auto-data-snapshot: 2026-08-25T14:34:54 (1 data files) — data/reels.json
  99. 099834d 2026-08-25 reels IG roster: demote unreachable @grassclothwallpaper to needs-relink (TK-10447)
  100. 71d633f 2026-08-25 chore: reels.json sync + version bump (session close: IG accounts wired + deployed)
  101. 1e97884 2026-08-25 5x: verify accounts console clean twice (35 ready/5 pending); report
  102. 69537a3 2026-08-25 chore: harden /api/youtube (escapeAttr href, strict video-id regex), v0.9.1 (session close)
  103. b778dff 2026-08-25 publish-ig.mjs: resolve per-account ig_user_id (--account / reel.igAccount) on the shared token; DRY-gate unchanged
  104. 5363df3 2026-08-25 Wire all 35 postable IG accounts as ready in reels console (shared durable META token; no per-account creds)
  105. 276feb4 2026-08-25 reels UI: Post to YouTube button on each studio video chip
  106. 2165410 2026-08-25 reels: prune 3 dead 2026-07-13 entries whose mp4s never rendered (kills gallery 404s)
  107. bc84029 2026-08-25 Embed all 35 DW-owned IG accounts in the Reels console (list + publish dropdown)
  108. 973621a 2026-08-25 reels: credential-safe fetch guard so Suggested videos loads when opened with creds-in-URL
  109. 1dffe68 2026-08-25 auto-data-snapshot: 2026-08-25T07:39:06 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json
  110. 398c079 2026-08-24 auto-data-snapshot: 2026-08-24T20:43:45 (1 data files) — data/reels.json
  111. aa47c21 2026-08-24 auto-data-snapshot: 2026-08-24T17:32:43 (1 data files) — data/reels.json
  112. fbce1f4 2026-08-24 auto-data-snapshot: 2026-08-24T14:29:57 (1 data files) — data/reels.json
  113. bbc5dd8 2026-08-24 auto-data-snapshot: 2026-08-24T11:12:29 (1 data files) — data/reels.json
  114. bf33312 2026-08-24 auto-data-snapshot: 2026-08-24T07:26:56 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json
  115. cd41514 2026-08-23 auto-data-snapshot: 2026-08-23T11:14:30 (1 data files) — data/reels.json
  116. 4baaa0c 2026-08-23 auto-data-snapshot: 2026-08-23T07:31:56 (1 data files) — data/video-suggestions.json
  117. 435e04c 2026-08-22 auto-data-snapshot: 2026-08-22T20:21:39 (1 data files) — data/reels.json
  118. 95fcd4e 2026-08-22 auto-data-snapshot: 2026-08-22T17:10:07 (1 data files) — data/reels.json
  119. e3629c3 2026-08-22 auto-data-snapshot: 2026-08-22T14:31:07 (1 data files) — data/reels.json
  120. b185325 2026-08-22 auto-data-snapshot: 2026-08-22T11:19:22 (1 data files) — data/reels.json
  121. 57e6065 2026-08-22 auto-data-snapshot: 2026-08-22T07:36:43 (2 data files) — data/new-arrivals.json data/reels.json
  122. c09f468 2026-08-22 auto-data-snapshot: 2026-08-22T07:04:52 (1 data files) — data/video-suggestions.json
  123. 09af9aa 2026-08-21 auto-data-snapshot: 2026-08-21T20:26:15 (1 data files) — data/reels.json
  124. 7b8b165 2026-08-21 auto-data-snapshot: 2026-08-21T17:15:45 (1 data files) — data/reels.json
  125. bc4e2b3 2026-08-21 auto-data-snapshot: 2026-08-21T14:36:52 (1 data files) — data/reels.json
  126. c15a0a3 2026-08-21 auto-data-snapshot: 2026-08-21T11:24:34 (1 data files) — data/reels.json
  127. 8a3c162 2026-08-21 auto-data-snapshot: 2026-08-21T07:42:04 (1 data files) — data/reels.json
  128. 1c2c3c0 2026-08-21 auto-data-snapshot: 2026-08-21T07:10:15 (2 data files) — data/new-arrivals.json data/video-suggestions.json
  129. 2ee7384 2026-08-20 auto-data-snapshot: 2026-08-20T20:32:50 (1 data files) — data/reels.json
  130. f99c8f4 2026-08-20 auto-data-snapshot: 2026-08-20T17:19:08 (1 data files) — data/reels.json
  131. fea3365 2026-08-20 auto-data-snapshot: 2026-08-20T14:39:47 (1 data files) — data/reels.json
  132. e1cc35f 2026-08-20 auto-data-snapshot: 2026-08-20T11:21:15 (1 data files) — data/reels.json
  133. 61ec24a 2026-08-20 auto-data-snapshot: 2026-08-20T07:27:40 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json
  134. f4f6f9f 2026-08-19 auto-data-snapshot: 2026-08-19T20:35:06 (1 data files) — data/reels.json
  135. a254c56 2026-08-19 auto-data-snapshot: 2026-08-19T17:18:59 (1 data files) — data/reels.json
  136. 68ee736 2026-08-19 auto-data-snapshot: 2026-08-19T14:34:38 (1 data files) — data/reels.json
  137. 07aa1f3 2026-08-19 auto-data-snapshot: 2026-08-19T11:14:55 (1 data files) — data/reels.json
  138. b31260e 2026-08-19 auto-data-snapshot: 2026-08-19T07:27:42 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json
  139. 1f3cc99 2026-08-18 auto-data-snapshot: 2026-08-18T11:17:58 (1 data files) — data/reels.json
  140. e6a15d2 2026-08-18 auto-data-snapshot: 2026-08-18T07:39:56 (2 data files) — data/new-arrivals.json data/reels.json
  141. 3555a6e 2026-08-18 auto-data-snapshot: 2026-08-18T07:09:42 (1 data files) — data/video-suggestions.json
  142. 6cbe522 2026-08-17 auto-data-snapshot: 2026-08-17T11:27:07 (1 data files) — data/reels.json
  143. 22ed700 2026-08-17 auto-data-snapshot: 2026-08-17T07:32:48 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json
  144. 8d29423 2026-08-16 auto-data-snapshot: 2026-08-16T14:28:13 (1 data files) — data/reels.json
  145. b60b912 2026-08-16 auto-data-snapshot: 2026-08-16T11:25:44 (1 data files) — data/reels.json
  146. 060827b 2026-08-16 auto-data-snapshot: 2026-08-16T07:22:50 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json
  147. 174c519 2026-08-15 auto-data-snapshot: 2026-08-15T11:15:20 (1 data files) — data/reels.json
  148. c991259 2026-08-15 auto-data-snapshot: 2026-08-15T07:11:28 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json
  149. 2171549 2026-08-14 auto-data-snapshot: 2026-08-14T11:23:02 (1 data files) — data/reels.json
  150. db27c1b 2026-08-14 auto-data-snapshot: 2026-08-14T09:20:46 (1 data files) — data/novasuede-post-state.json
  151. c11367d 2026-08-14 auto-data-snapshot: 2026-08-14T07:18:58 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json
  152. 423d2ca 2026-08-13 chore: lint, refactor, v0.9.0 (session close) — commercial flip-book logos/1.3s/narration
  153. 94e00f5 2026-08-13 commercial flip-book: remove per-page logos + 1.3s/flip + gap-free narration; rerender/redeploy (?v=4)
  154. 854502c 2026-08-13 commercial flip-book: 2s/flip + narration synced over each pattern; rerender+redeploy (?v=3)
  155. 293b995 2026-08-13 commercial flip-book: add vendor logo per page + fix intro/Koroseal VO overlap (cover=7) + rerender/redeploy
  156. b043fd1 2026-08-13 auto-data-snapshot: 2026-08-13T11:25:20 (11 data files) — data/commercial-collection.json data/reels.json flipbooks/commercial-collection/assets/logos/carnegie.png flipbooks/commercial-collection/assets/logos/designtex.png flipbooks/commercial-collection/assets/logos/hollywood.png
  157. f1edf79 2026-08-13 auto-data-snapshot: 2026-08-13T07:20:35 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json
  158. 978ef0c 2026-08-12 auto-data-snapshot: 2026-08-12T12:29:13 (2 data files) — public/collections/commercial-collection-banner.jpg public/collections/commercial-collection-poster.jpg
  159. 54152e7 2026-08-12 Add commercial-collection flip-book (24 products, 8 vendors, Steve VO)
  160. 05271fe 2026-08-12 auto-data-snapshot: 2026-08-12T11:58:35 (3 data files) — data/commercial-collection.json flipbooks/commercial-collection/audio.json flipbooks/commercial-collection/lines.txt
  161. 19b0eea 2026-08-12 auto-data-snapshot: 2026-08-12T11:28:02 (1 data files) — data/reels.json
  162. dc0d3b7 2026-08-12 auto-data-snapshot: 2026-08-12T09:25:42 (1 data files) — data/novasuede-post-state.json
  163. 58e6509 2026-08-12 auto-data-snapshot: 2026-08-12T07:20:53 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json
  164. c4022db 2026-08-11 auto-data-snapshot: 2026-08-11T17:27:46 (15 data files) — spotlight-work/tmp-swatch/majilite-attache-rose-gold.png spotlight-work/tmp-swatch/majilite-burnished-metal-mercury.png spotlight-work/tmp-swatch/majilite-charm-antique-gold.png spotlight-work/tmp-swatch/majilite-charm-metallic-taupe.png spotlight-work/tmp-swatch/majilite-eclipse-fx-metallic-taupe.png
  165. f21cf40 2026-08-11 auto-data-snapshot: 2026-08-11T11:14:15 (1 data files) — data/reels.json
  166. 5be46a4 2026-08-11 chore: refactor (env-var alert routing), v0.8.8 (session close)
  167. 15c6386 2026-08-11 TK-10395: delayed re-queue — re-attempt a Meta-2207076-failed reel on later slots (bounded 4x, double-post-safe, give-up alert at cap)
  168. 176622f 2026-08-11 auto-data-snapshot: 2026-08-11T07:35:48 (2 data files) — data/new-arrivals.json data/reels.json
  169. c462617 2026-08-11 TK-10395 REOPEN: run publish-gate+alert BEFORE the push (a full Kamatera hung the push and swallowed the 07:10 alert); bound rsync with timeout; exit non-zero last
  170. 9ab766d 2026-08-11 auto-data-snapshot: 2026-08-11T07:04:50 (1 data files) — data/video-suggestions.json
  171. 886d6f6 2026-08-10 reels: drop @novasuede from rotation — not Steve's IG handle
  172. 0c4948f 2026-08-10 chore: version bump (session close)
  173. 92cd2da 2026-08-10 reels: novasuede 3x/week schedule infra (cron wrapper + launchd plist, RunAtLoad=false, not installed)
  174. d1fa7d7 2026-08-10 auto-data-snapshot: 2026-08-10T19:14:48 (1 data files) — deploy/com.steve.novasuede-color-post.plist
  175. eeb1f09 2026-08-10 auto-data-snapshot: 2026-08-10T18:13:07 (1 data files) — data/novasuede-post-state.json
  176. 57ef021 2026-08-10 auto-data-snapshot: 2026-08-10T17:42:11 (1 data files) — data/novasuede-post-state.json
  177. 951f996 2026-08-10 reels: novasuede-run-all.mjs — 3 new colours per account, fan to all suggested accounts
  178. 1651946 2026-08-10 auto-data-snapshot: 2026-08-10T17:11:22 (1 data files) — data/novasuede-post-state.json
  179. d7e908b 2026-08-10 reels: novasuede 'new colour 3x/week' generator + account rotation (jewelry + music)
  180. ae7b91d 2026-08-10 reels: build-novasuede.mjs — 15s Novasuede color-story reel
  181. bba1c99 2026-08-10 chore: version bump (session close)
  182. 93b2964 2026-08-10 chore: storefront grid auto-fit, v0.8.5 (session close)
  183. 579a1a7 2026-08-10 Collection Films: fix dead Shop CTAs to vendor-collection routes, hold Majilite (no live collection), a11y play button, auto-fit grid
  184. f1f111b 2026-08-10 Storefront Collection Films: 3 cards (Maya Romanoff + Glitter Walls + Majilite)
  185. 4680a24 2026-08-10 Glitter Walls portrait IG cut
  186. 9c2e670 2026-08-10 Glitter Walls flip book (color story, 24 SKUs, walls&furniture renders) + marketing.dw page
  187. 1cda4a2 2026-08-10 Storefront: DW Collection Films custom-liquid section (flip books for DW Shopify homepage)
  188. 1871275 2026-08-10 reels: Majilite jewelry-case image pipeline + spotlight reel + alt tags
  189. 03e14be 2026-08-10 Maya Romanoff flip book (materials story, 24 SKUs, 4 chapters) + walls&furniture renders + portrait IG cut + marketing.dw page
  190. 8c7ac9c 2026-08-10 Majilite flip book: fix Shop CTA to working vendor-filter collection URL
  191. 4807b5b 2026-08-10 chore: sync package-lock version (session close)
  192. 5e6973b 2026-08-10 chore: wire sync-reels predeploy hook + version bump (session close)
  193. 1d80d73 2026-08-10 Add sync-reels predeploy guard: auto-refresh reels/ from freshest render before deploy (fixes stale-embed desync)
  194. 305a06c 2026-08-10 Majilite flip book: real Replicate commercial rooms on verso (24 rooms, flux-kontext-pro, ~$0.96)
  195. 105bde3 2026-08-10 Majilite flip book: real walls+furniture room renders in verso (24x nano-banana)
  196. 692459d 2026-08-10 reels: 15/30s runtime + open on a product image (no blank IG index thumbnail)
  197. c2672a4 2026-08-10 Fix Majilite flip book Shop CTA -> /collections/all/majilite (vendor tag view; /collections/majilite 404s)
  198. 877778e 2026-08-10 Majilite Metallics flip book (colorway story, 24 SKUs, 4 metal-tone chapters) + marketing.dw page
  199. 386055f 2026-08-10 auto-data-snapshot: 2026-08-10T11:29:10 (2 data files) — data/new-arrivals.json data/reels.json
  200. 060af89 2026-08-10 TK-10395: monitor fails loud on armed 'posted-unverified' (was silent-green)
  201. da29f0a 2026-08-10 TK-10395: wire push-alert (CNCP card + George email to steve-office) on nightly IG-publish failure [Steve APPROVED: PUSH OPEN]
  202. 7ad29bf 2026-08-10 TK-10395: fix retry/timeout race (client 90s->240s) + wire publish-result gate into nightly cron (contrarian finds)
  203. d52056c 2026-08-10 TK-10395: add read-only publish-status monitor (catches 2207076 recurrence after retry, closes silent-green gap)
  204. 50543e2 2026-08-10 TK-10395: surface Norma's real IG-publish error instead of a bare 'error'
  205. db2c644 2026-08-10 auto-data-snapshot: 2026-08-10T07:21:36 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json
  206. 250015b 2026-08-09 TK-10389: add nightly reels-pipeline launchd plist (cron-run.sh @07:10) — install gated to Steve
  207. 97c644c 2026-08-09 auto-data-snapshot: 2026-08-09T07:12:34 (1 data files) — data/video-suggestions.json
  208. 9bd4b07 2026-08-08 auto-data-snapshot: 2026-08-08T07:24:16 (1 data files) — data/video-suggestions.json
  209. 134fc69 2026-08-07 auto-data-snapshot: 2026-08-07T07:29:27 (3 data files) — data/new-arrivals.json data/reels.json data/video-suggestions.json
  210. 969a8a8 2026-08-06 auto-save: 2026-08-06T07:19:35 (3 files) — data/new-arrivals.json data/reels.json data/video-suggestions.json
  211. 2532687 2026-08-05 auto-save: 2026-08-05T07:40:04 (2 files) — data/new-arrivals.json data/reels.json
  212. 9fc4c0f 2026-08-05 auto-save: 2026-08-05T07:09:54 (1 files) — data/video-suggestions.json
  213. 6a68353 2026-08-04 auto-save: 2026-08-04T16:35:00 (1 files) — flipbooks/franquemont-london-reel/
  214. a02cf7a 2026-08-04 auto-save: 2026-08-04T16:04:49 (6 files) — server.js data/fetch-collection-products.mjs data/franquemont-london.json flipbooks/franquemont-london/ public/collections/franquemont-london-poster.jpg
  215. c5c736e 2026-08-04 auto-save: 2026-08-04T15:04:21 (3 files) — flipbooks/innovations-usa/audio.json flipbooks/innovations-usa/index.html flipbooks/innovations-usa/lines.txt
  216. 830d92d 2026-08-04 auto-save: 2026-08-04T14:34:11 (1 files) — flipbooks/innovations-usa/lines.txt
  217. ca1162d 2026-08-04 auto-save: 2026-08-04T14:04:01 (3 files) — flipbooks/innovations-usa/audio.json flipbooks/innovations-usa/index.html flipbooks/innovations-usa/lines.txt
  218. 992c769 2026-08-04 auto-save: 2026-08-04T13:33:48 (6 files) — server.js data/fetch-innovations-recent.mjs data/innovations-usa.json flipbooks/innovations-usa/ public/collections/innovations-usa-poster.jpg
  219. 792dc26 2026-08-04 auto-save: 2026-08-04T07:31:10 (3 files) — data/new-arrivals.json data/reels.json data/video-suggestions.json
  220. d02f547 2026-08-03 auto-save: 2026-08-03T07:21:35 (3 files) — data/new-arrivals.json data/reels.json data/video-suggestions.json
  221. 8d34fed 2026-08-02 auto-save: 2026-08-02T07:13:15 (3 files) — data/new-arrivals.json data/reels.json data/video-suggestions.json
  222. 1b6ec56 2026-08-01 auto-save: 2026-08-01T07:34:56 (3 files) — data/new-arrivals.json data/reels.json data/video-suggestions.json
  223. c6001f7 2026-07-31 auto-save: 2026-07-31T07:25:03 (3 files) — data/new-arrivals.json data/reels.json data/video-suggestions.json
  224. e2a5719 2026-07-30 chore: gitignore *.bak + untrack stray graduate-collection.html.bak
  225. bda7ca9 2026-07-30 auto-save: 2026-07-30T14:18:43 (2 files) — public/collections/graduate-collection.html public/collections/graduate-collection.html.bak
  226. b5e457e 2026-07-30 auto-save: 2026-07-30T13:48:32 (3 files) — theme-edits/graduate/dw-collection-hero.20260730-134622.BACKUP.liquid theme-edits/graduate/dw-collection-hero.FIXED.liquid theme-edits/graduate/dw-collection-hero.LIVE.liquid
  227. 3aafc8c 2026-07-30 auto-save: 2026-07-30T13:18:21 (1 files) — flipbooks/graduate-collection/index.html
  228. 5cc7a27 2026-07-30 auto-save: 2026-07-30T12:48:10 (1 files) — package-lock.json
  229. 649c3a2 2026-07-30 chore: v0.8.3 (session close)
  230. 3996465 2026-07-30 Graduate Collection: LinkedIn (personal + business) + YouTube post drafts
  231. 904e5cb 2026-07-30 Graduate flipbook player: speed-only bottom-left, social icons as static bottom-right video overlay (marketing.dw + Shopify)
  232. dea3771 2026-07-30 auto-save: 2026-07-30T12:17:59 (1 files) — public/collections/graduate-collection.html
  233. f62526c 2026-07-30 Graduate flipbook: bottom-left speed+volume sliders + download/social-share icons (marketing.dw + Shopify theme)
  234. d6bc7a1 2026-07-30 Graduate flipbook: slow another 50% (124s)
  235. c1e6f34 2026-07-30 record: pre-edit backup of live theme dw-collection-hero.liquid (Graduate flipbook inject)
  236. 839a744 2026-07-30 Graduate flipbook: combined all-clean set (55 patterns, both vendor tags), 86s
  237. 1b2b7e2 2026-07-30 Graduate flipbook: remove cheetah (21 patterns) + half-speed (48s)
  238. 892ea6d 2026-07-30 chore: untrack regenerable flipbook artifacts + version bump (session close)
  239. 7714ca7 2026-07-30 Graduate page: copy fix (leopards not tigers, 23 patterns)
  240. fd0b2c0 2026-07-30 Graduate flipbook: settlement cleanup — regen from 23 clean patterns (dropped 12 directional-leaf/bird designs), clean banner
  241. 6426992 2026-07-30 marketing.dw: expose /collections/<slug> pages + assets publicly (Graduate go-live)
  242. fb34647 2026-07-30 Graduate collection page: banner header to 50vh
  243. 248390c 2026-07-30 auto-save: 2026-07-30T09:46:44 (35 files) — flipbooks/graduate-collection/STORYBOARD.md flipbooks/graduate-collection/assets/img/p10.jpg flipbooks/graduate-collection/assets/img/p11.jpg flipbooks/graduate-collection/assets/img/p12.jpg flipbooks/graduate-collection/assets/img/p13.jpg
  244. 76e3f7b 2026-07-30 Graduate Collection flipbook: reusable generator + narrated spread video + marketing.dw collection page
  245. a22d0df 2026-07-30 auto-save: 2026-07-30T09:16:33 (3 files) — data/graduate-collection.json flipbooks/ scripts/build-collection-flipbook.mjs
  246. 8892eec 2026-07-30 auto-save: 2026-07-30T07:15:28 (2 files) — data/new-arrivals.json data/reels.json
  247. 4ff81aa 2026-07-29 auto-save: 2026-07-29T07:37:00 (1 files) — data/new-arrivals.json
  248. 1fa6444 2026-07-29 auto-save: 2026-07-29T07:06:42 (1 files) — data/video-suggestions.json
  249. 78a6a3e 2026-07-28 auto-save: 2026-07-28T14:31:09 (1 files) — data/video-jobs.json
  250. 926c0a9 2026-07-28 auto-save: 2026-07-28T14:01:00 (2 files) — data/video-jobs.json data/video-suggestions.json
  251. 522cc20 2026-07-28 reels: add 1:1 (1080x1080) New Arrivals square-reel pipeline (build-reel-1x1.mjs) — TK-00128
  252. ccd338e 2026-07-28 auto-save: 2026-07-28T07:28:16 (3 files) — data/new-arrivals.json data/reels.json data/video-suggestions.json
  253. 9829533 2026-07-27 reels: add TIKTOK_DRY_RUN wiring-verify mode for postTikTok (no publish) — TK-00128
  254. e30682f 2026-07-27 tiktok-audit-demo: turnkey capture runbook for the App-Review demo video (TK-00128)
  255. bc02a05 2026-07-27 reels: build TikTok Content-Posting-API uploader (dormant, gated on audit) — TK-00128
  256. eb7ecf5 2026-07-27 auto-save: 2026-07-27T16:52:13 (1 files) — data/reels.json
  257. 8adb693 2026-07-27 reels: fix IG async-publish timeout (first live post landed despite 12s client timeout)
  258. 5121ca1 2026-07-27 reels: honest TikTok status + FTC content-claims hold guard (pre-arm)
  259. 19e8ca4 2026-07-27 reels: consolidate LEAK_DENY to one canonical-synced module + fail-closed leak gate
  260. 4f97f1f 2026-07-27 reels: guard against duplicate social post of an already-'posted' reels[0] on nightly re-run
  261. be479b7 2026-07-27 auto-save: 2026-07-27T07:18:47 (3 files) — data/new-arrivals.json data/reels.json data/video-suggestions.json
  262. 2cae939 2026-07-26 auto-save: 2026-07-26T07:11:20 (3 files) — data/new-arrivals.json data/reels.json data/video-suggestions.json
  263. d9aab81 2026-07-25 auto-save: 2026-07-25T07:34:42 (3 files) — data/new-arrivals.json data/reels.json data/video-suggestions.json
  264. 689fe27 2026-07-24 chore: vN patch (session close — image backfill)
  265. 8d53d7f 2026-07-24 record completed image backfill: upload-imageless-11 (11/11 EUR SKUs imaged, Steve-approved live Shopify write, verified in mirror)
  266. 5ebec05 2026-07-24 auto-save: 2026-07-24T07:26:03 (3 files) — data/new-arrivals.json data/reels.json data/video-suggestions.json
  267. d86340e 2026-07-23 Pin autonomous Claude CLI invocation to Opus (--model opus)
  268. acc7a77 2026-07-23 auto-save: 2026-07-23T07:19:17 (3 files) — data/new-arrivals.json data/reels.json data/video-suggestions.json
  269. ce006d6 2026-07-22 chore: lint, refactor, v0.8.0 (session close)
  270. d385b43 2026-07-22 Route 9:16 catalog reels through build-reel.mjs ($0, IG-publishable, gallery-visible)
  271. f9fdb8f 2026-07-22 auto-save: 2026-07-22T07:42:20 (3 files) — data/video-jobs.json data/video-suggestions.json output/
  272. 8227e20 2026-07-22 video-runner: give renders narrated audio via auto-resolved HYPERFRAMES_PYTHON
  273. 6eb3061 2026-07-22 Harden video-runner: retry transient API rate-limits before erroring
  274. c0278de 2026-07-22 auto-save: 2026-07-22T07:12:00 (3 files) — data/new-arrivals.json data/reels.json scripts/video-runner.mjs
  275. 96a00f6 2026-07-22 Add hypergen daily video-suggestions tab (4 ideas/day, dated + used-stamp)
  276. aea6ea1 2026-07-21 auto-save: 2026-07-21T07:36:20 (2 files) — data/new-arrivals.json data/reels.json
  277. f9ce647 2026-07-20 chore: colorwheel-reel builder cleanup + dl warn (session close)
  278. c1c43c6 2026-07-20 Fix Threads post: reposted shop-by-color with correct caption (old mismatched post pending manual delete)
  279. 59fcd75 2026-07-20 Shop-by-color reel also posted to Threads (video)
  280. 4d8994e 2026-07-20 chore: v0.6.0 — /showcase brand-films gallery (session close)
  281. af86e6b 2026-07-20 auto-save: 2026-07-20T07:30:40 (2 files) — data/new-arrivals.json data/reels.json
  282. d028c21 2026-07-19 auto-save: 2026-07-19T07:25:16 (2 files) — data/new-arrivals.json data/reels.json
  283. e5e041b 2026-07-18 auto-save: 2026-07-18T07:20:11 (2 files) — data/new-arrivals.json data/reels.json
  284. f3f78cd 2026-07-17 auto-save: 2026-07-17T19:47:29 (1 files) — package-lock.json
  285. e86b958 2026-07-17 Shop-by-color reel posted: Instagram + Bluesky live; Facebook blocked on token scope
  286. 42687b8 2026-07-17 add public /showcase brand-films gallery page (all 6 promo cuts)
  287. 8c77003 2026-07-17 Add shop-by-color reel builder — opens on the color wheel (frame-0 thumbnail fix)
  288. 579b3f6 2026-07-17 chore: v0.5.0 (session close) — Video Studio + color-index hardening
  289. f801707 2026-07-17 reels.json: record IG publish (new-arrivals-audio reel → posted, instagram.com/reel/Da5sp25DyRu)
  290. 5408290 2026-07-17 add platform-tailored IG + TikTok captions to brand-promo reels
  291. 9651df2 2026-07-17 point deploy health-check at public /privacy (true 200, not auth 401)
  292. dcec44c 2026-07-17 stage DW brand promo 15s short cut (3 aspects) into marketing reels panel
  293. 5f5394e 2026-07-17 5x: report — 4 sweeps; fixed preload storm + console persistence (pm2); M3 'JS error' verified benign (video-preload ERR_ABORTED, no real error)
  294. eba4f19 2026-07-17 5x sweep 2: gallery videos preload=none — kills the 21-video simultaneous metadata-preload storm (ERR_ABORTED noise); videos still play on click
  295. 55e44f8 2026-07-17 deploy: cert-safe nginx script to add public /reels/*.mp4 passthrough to the live marketing.dw vhost (enables Meta media-fetch for IG publishing)
  296. 878597b 2026-07-17 fix .deploy.conf health-check port 9848→9600 (reels app real port; 9848 is corkwallcovering)
  297. 463adc4 2026-07-17 console: relative studio-media URL so the video gallery works inside the MCC iframe proxy (/api/reels/ui)
  298. 8ed53f5 2026-07-17 stage DW brand promo (3 aspects) into marketing reels panel
  299. f0a2257 2026-07-17 DW New Arrivals collection-reveal reel (9:16, product-launch-video/HyperFrames): 8-frame cartesian storyboard + frames, Kokoro VO + MusicGen BGM, captions, transitions
  300. d648cd2 2026-07-17 video-studio hardening (contrarian FIX-FIRST): realpathSync kills symlink escape on /studio-media + public /reels/; https-URL/.eml validation + 20-job cap on queue; runner requires CLAUDE_BIN & fails loud (no silent ENOENT); job chips show created-time + host-not-armed warning
  301. f2f4363 2026-07-17 New Arrivals reel: 7 curated heroes + local Kokoro VO + MusicGen BGM (/bin/zsh)
  302. 1d2a1cb 2026-07-17 console: Video Studio — buttons to queue IG reel / URL→reel / newsletter→video + rendered-video gallery (/api/videos) + gated runner (VIDEO_AUTORUN off = waits for studio session; never auto-posts)
  303. f7b3987 2026-07-16 shop-by-color wheel: -50% wheel+dots, mobile+touch, >=80 SKUs (min:80), add-sample-to-cart per card
  304. 907a60d 2026-07-16 colorwheel: canonical /pages/shop-by-color body (new wheel, replaces static swatch page); /pages/colors 301→shop-by-color
  305. 1dfe5d5 2026-07-16 colorwheel: Shopify /pages/colors widget (scoped inline build, hits public color-widen API)
  306. 5f28b85 2026-07-16 colorwheel: add 6-dot palette below wheel, paginated left/right through 24 curated colors
  307. 8098337 2026-07-16 colorwheel: widen to 15% ΔE band (big data set), fix spin/click color mismatch, drop hex+count, center dot = picked color
  308. 5ca3fe3 2026-07-16 shop-by-color motion wheel (local preview :9851, proxies live color-index endpoint) + drafted 12-image Shopify upload script (Steve-run/gated)
  309. 51d3d22 2026-07-16 Source real product images for 12/14 imageless DW products via Browserbase (O&L family blocked host bypass)
  310. 979735d 2026-07-16 auto-save: 2026-07-16T08:12:03 (9 files) — fetch-ol-images.cjs fetch-ol-manifest.json fetch-remaining.cjs fetch-remaining.json harvest-colorways-results.json
  311. cc29f33 2026-07-16 auto-save: 2026-07-16T07:11:48 (2 files) — data/new-arrivals.json data/reels.json
  312. 55f1b05 2026-07-15 chore: v0.4.1
  313. eae2436 2026-07-15 auto-save: 2026-07-15T14:07:06 (2 files) — public/index.html server.js
  314. 2cd59c0 2026-07-15 chore: v0.4.0 (session close) — FB-graph IG publish + publish-ig.mjs + privacy/terms + audio-mux fix
  315. 15079e2 2026-07-15 Add self-contained scripts/publish-ig.mjs — post a reel to IG from the marketing project via the FB-graph flow (durable page token), no Norma dependency; SOCIAL_LIVE_ARMED-gated with a public-media reachability guard
  316. c5afbac 2026-07-15 auto-save: 2026-07-15T07:35:12 (2 files) — data/new-arrivals.json data/reels.json
  317. 390b976 2026-07-14 Add public /privacy + /terms pages (no-auth) for Meta app publish requirement
  318. 59b2d6b 2026-07-14 build-reel: mux silent AAC track into every reel — IG Reels require audio (no-audio MP4 fails Meta processing w/ error 2207082)
  319. 7d816dd 2026-07-14 auto-save: 2026-07-14T07:29:44 (2 files) — data/new-arrivals.json data/reels.json
  320. ac1da40 2026-07-13 Add package-lock.json — unblocks deploy (npm ci requires a lockfile; project is zero-dep)
  321. 9ed9b0f 2026-07-13 New Arrivals reel (2026-07-13-21-49) + refreshed feed (24 arrivals)
  322. 66cb716 2026-07-13 Fix console port default 9846->9848 (matches .deploy.conf + README) — 9846 silently collided with live dw-staged-active-viewer
  323. d02c9bb 2026-07-13 Fix publish-status unwrap: read Norma's .result envelope + explicit r.simulated (kills false 'posted' on no-creds + false 'simulated' on live post) + no-creds badge — contrarian gate
  324. fea25bd 2026-07-13 chore: v0.3.0 — multi-account IG picker + meta-token canary + live-post payload fix (session close)
  325. d9ccbc0 2026-07-13 auto-save: 2026-07-13T08:23:39 (1 files) — data/reels.json
  326. aa4f29e 2026-07-13 5 themed reels (Thibaut, Grasscloth Edit, Phillip Jeffries, Statement Murals, Schumacher) + fetch upgrades: leak-deny filter at feed level, multi-page collection fetch, spread sampling, Repeat-spec title cleanup
  327. 34da727 2026-07-13 auto-save: 2026-07-13T07:23:25 (2 files) — data/new-arrivals.json data/reels.json
  328. 4321527 2026-07-13 Pin SOCIAL_LIVE_ARMED=0 in nightly plist — schedule can never inherit an armed env (contrarian hardening)
  329. 829f7fe 2026-07-13 Fix live-post payload: send video_url (Norma reel.js contract), not mediaUrl — contrarian-caught silent 500
  330. f6b331e 2026-07-13 auto-save: 2026-07-13T01:21:52 (3 files) — data/new-arrivals.json data/reels.json scripts/fetch-new-arrivals.mjs
  331. 2db6c90 2026-07-13 docs: publish-social — reels now public (media blocker cleared), only SOCIAL_LIVE_ARMED remains
  332. 2c90228 2026-07-13 chore: lint, refactor (hoist SLUG), doc outroBig, v0.2.0 (session close)
  333. 582f1f1 2026-07-13 Multi-account Instagram picker: DW-family account registry + per-reel Post-to selector + account-routed publish
  334. 808fac7 2026-07-13 Dry-run publish status for cork reel: IG ready-pending-arm (media URL public), TikTok pending-reconnect
  335. 78da8fd 2026-07-12 Themeable reels + Phillipe Romano cork reel (env-driven copy/caption/slug + vendor/title/dedupe fetch filters)
  336. 2f74ee0 2026-07-12 Safety-when-on: ARMED gate (no live post until SOCIAL_LIVE_ARMED=1) + private-label leak filter in captions (contrarian fixes)
  337. 1584e5c 2026-07-12 Public media exemption: GET /reels/*.mp4 unauthenticated (console/APIs stay gated) — so Meta/TikTok can fetch reels
  338. 20c8b48 2026-07-12 Auto-post to IG/TikTok (fail-safe pending-creds) + captions + publish-status panel
  339. a1ba7d4 2026-07-12 Build-gate for read-only public deploy + nightly push to Kamatera
  340. 7630cbd 2026-07-12 Add nightly runner (gated plist), README, deploy config
  341. fc8c20e 2026-07-12 DW Marketing new-arrivals reels: HyperFrames reel generator + auth-gated console (:9848)

Authors

Agents used

  • comms-compliance2

Skills used

  • /reels143
  • /new-arrivals77
  • /video-suggestions67
  • /collections17
  • /graduate-collection10
  • /innovations-usa9
  • /claude7
  • /code7
  • /index7
  • /commercial-collection7
  • /assets7
  • /novasuede-post-state5
  • /tmp-swatch5
  • /lines4
  • /week4
  • /graduate-interactive3
  • /colors3
  • /logos3
  • /audio3
  • /majilite3
  • /graduate3
  • /dw-collection-hero3
  • /video-jobs3
  • /video3
  • /pages3
  • /graduate-flipbook2
  • /staged-tk104272
  • /tracked-ig-sources2
  • /novasuede-sku-map2
  • /youtube2

Creative ideas + design notes

Commits with substantial prose (≥120 chars) — the rationale behind each move.

bfae37c · 2026-09-22 · Reel publish path: durable jewelry-counter HOLD gate (TK-12012)
Steve directive 2026-09-22: stop posting any Instagram with jewelry counters
(scope = jewelry ONLY; room-setting reels stay). publish-social.mjs publishes
the finished mp4, so this is the last line before a reel goes public.

- jewelry-gate.mjs: sample frames from the actual mp4 (ffmpeg) and classify each
  (ollama qwen2.5vl free / Gemini fallback), mp4-keyed cache. HOLD if any frame
  is jewelry:true OR undecidable (fail-closed); room frames never hold.
- publish-social.mjs: jewelry-hold block before publish -> status
  held-jewelry-review on IG + TikTok, posts nothing.
- jewelry-sweep-pending.mjs: quarantine any staged jewelry reel in the queue.

Posting stays DISARMED. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CRkDtx31oCvHHaMfJf9CzT
5ca3af8 · 2026-09-16 · TK-10929: report the real IG publish error instead of a hardcoded 2207076 diagnosis
The failure alert (CNCP card + George email) hardcoded a diagnosis — "a 2207076
that survived the 3x retry -> verify IG content-publish permission / re-auth" —
and emitted it for EVERY publish failure regardless of the actual error.

For three weeks the real error was "fetch failed": a TRANSPORT failure, because
the Norma instagram-agent on :9810 was dead (never pm2-save'd, so the Sep-14
reboot left it permanently down). Node's undici only throws "fetch failed" when
the connection itself fails; a genuine Meta error arrives as a parsed code. But
every alert asserted a credential problem, so TK-10929 sat blocked on "NEEDS
STEVE: IG content-publish re-auth, not agent-fixable" while meta-token-canary
reported the tokens HEALTHY the entire time.

check-publish-status.mjs already printed the true reason on stderr; cron-run.sh
just discarded it. Now it captures that output, echoes it, and puts the observed
text in the alert plus a triage pointer at the right component.

An alert must never assert a cause it did not measure.

Verified with fault injection: on an injected "fetch failed" the alert carries
the real error + names norma-instagram, and the fabricated re-auth text is gone;
on a successful publish no alert fires and the OK line still reaches the log.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DdCubRnaMxvZPUoqCxMbZs
abf7562 · 2026-09-10 · TK-10866: record 2-method verification that all 13 jewelry-creative reels are gone
Method A (Graph /media, all 4 owning accounts): 0/13 present. Flags the real
control failure — REELS_seen=0 on suedewallpaper + textilewallpaper (7 of the
13), where exact media_count parity did NOT rescue the absence.
Method B (authenticated openclaw browser, bracketed +/- controls): all 13
not-available. Owner-context probe separates deleted from archived for the 3
commercialwallcoverings reels.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LjQgkCC1vKXku5Ep5ftooU
a80a4b2 · 2026-09-04 · snapshot before deploy: graduate-flipbook work-in-progress (not authored here)
Working tree was dirty on arrival with another lane's in-flight graduate-flipbook
work (server.js + 4 public/collections/graduate-flipbook/* + build-graduate-interactive.mjs
+ 2 storefront/graduate-interactive/*). Snapshotted per standing rule so the
deploy Steve approved is revertable and that lane's work is not lost.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015XxMVSyKj1qHnXH2fLCT49
f637f7d · 2026-09-03 · 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)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015XxMVSyKj1qHnXH2fLCT49
ec5eff3 · 2026-09-03 · TK-10427: add OS 2.0 section file + rollback-first one-command homepage push
The staged artifact was a Custom-Liquid paste blob with no schema, which is
why the only ship path was a manual theme-editor paste. Adds:
- dw-collection-films.SECTION.liquid (same validated 3-card markup + schema)
- PUSH-collection-films.sh (--dry-run/--apply/--rollback): snapshots
  templates/index.json, PUTs the section asset, wires it into the homepage
  order, verifies dwcf markers on the live page.

Dry-run verified: mutation adds exactly 1 section, removes 0, changes 0,
preserves relative order. All 3 CTA collections 200, all 6 media assets 206.
Live fire stays Steve-gated.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015XxMVSyKj1qHnXH2fLCT49
675eacc · 2026-09-02 · reels: drop @philipperomano aspirational placeholder (dup of active @philliperomanodesigns)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018vRibsro4pmQ5QrgV1d676
c0c76ea · 2026-08-26 · Add glitter_walls_design as a tracked (non-postable) IG source on marketing.dw
External account (NOT DW-owned) seeded the Glitter Walls collection; add it as a
read-only tracked/inspiration source via data/tracked-ig-sources.json + a read-only
/api/tracked-ig-sources endpoint + a labeled 'Tracked / inspiration accounts' panel.
Deliberately kept OUT of readAccountsUnion() so it can never appear in the publish
dropdown or pass the /api/reel-account validity check. TK-10884.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
9de1fc9 · 2026-08-26 · Reel Studio: render a single photo + song → mp4 (Composer handoff target)
New render path behind the MCC Composer's 'Build this reel' handoff. build-photo-song-reel.mjs
takes ONE photo + a song + caption and renders a 1080x1920 reel (photo full-frame + slow
ken-burns + caption overlay + DW outro) via HyperFrames ($0 local), then muxes the REAL
song as the audio track (build-reel.mjs muxes silence; here the music is the point) with a
silent-AAC fallback so it's always IG-Reels-publishable. New POST /api/build-photo-reel
endpoint: same ALLOW_BUILD gate + single-job lock as run(), inputs via env, validates the
photo is an http(s) URL.

Verified: rendered a real 15.0s mp4 = h264 1080x1920 + aac (song muxed); endpoint 202 on
valid input, 409 while a build runs; manifest entry written.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
99c71a8 · 2026-08-26 · novasuede color post (TK-10866): drop designerwallcoverings from rotation + swap jewelry creative for SKU-labeled product swatch
- Rotation limited to suedewallpaper,textilewallpaper,commercialwallcoverings; hard guard strips designerwallcoverings even if re-added via NS_ACCOUNTS
- Creative now uses the product swatch (images/colors) with the real DWNS-* SKU overlaid + in the caption; jewelry-counter photo removed from the reel
- SKU map (data/novasuede-sku-map.json) joined from dw_unified novasuede_catalog by name-slug; 142/142 verified, zero fabrication
- caption + header comment de-jeweled

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
c396f4b · 2026-08-25 · publish-ig.mjs: refuse non-postable accounts at the resolver with a clear reason (TK-10447)
The roster demotion protected the console UI but NOT the publish script: resolveAccountUid
still resolved grasscloth's ig_user_id (present but unreachable), so a cron/retry/manual
--account ig-grassclothwallpaper would march into the Graph post and fail with an opaque
'Object does not exist'. Now the resolver carries status and the publish path hard-fails
BEFORE the media/Graph calls on any status != ready, printing the real reason.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
099834d · 2026-08-25 · reels IG roster: demote unreachable @grassclothwallpaper to needs-relink (TK-10447)
Empirical Graph API verification (read-only, $0) of all 35 'ready' accounts on the
shared durable META token found 34 resolve and 1 does not: ig_user_id 17841408868631110
(@grassclothwallpaper) returns 'Object does not exist / missing permissions' while the
account still exists publicly (HTTP 200) — unlinked from the Page/Business or stale ID.
Added a NEEDS_RELINK manifest to the generator so it's durably demoted to status
'needs-relink' (was falsely 'ready'), preventing a silent publish failure. Roster is now
34 verified-postable + 1 needs-relink + 5 aspirational. Re-link is a gated Meta action.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
276feb4 · 2026-08-25 · reels UI: Post to YouTube button on each studio video chip
Adds POST /api/youtube (uploads one studio mp4 to the DW channel as UNLISTED
via the youtube-upload skill) + a per-chip button in the #sec-videos gallery.
Unlisted is the safe/reversible default; the returned watch link is Steve's to
flip Public in Studio. Gated by ALLOW_BUILD so the public Kamatera deploy
answers 'runs on the studio host' (no python/secrets there). Path is
realpath+root guarded like /studio-media/.
2165410 · 2026-08-25 · reels: prune 3 dead 2026-07-13 entries whose mp4s never rendered (kills gallery 404s)
schumacher-texture / statement-murals / grasscloth-edit (07-13 08:00 batch) have
full metadata in reels.json but no rendered .mp4 on disk, so the gallery 404s on
each. Removed. Note: statement-murals featured an Et Cie mural — Et Cie rights
were revoked and all products archived 2026-08-13, so it must not be re-rendered.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
bc84029 · 2026-08-25 · Embed all 35 DW-owned IG accounts in the Reels console (list + publish dropdown)
The console sourced accounts from its own data/ig-accounts.json (7 entries) — missing
34 of the canonical 35 owned accounts. Add a canonical file mirrored from Norma
(scripts/build-dw-accounts.js → data/dw-canonical-accounts.json) and union it into the
account list server-side (readAccountsUnion), so #sec-accts AND the #pubAcct publish
dropdown AND every per-reel .pick-acct now offer all owned accounts (41 total = 7
managed + 34 canonical). The reel-account validator uses the union too, so canonical
accounts are valid reel targets. Managed entries win on handle-dedupe (keep ids/creds);
canonical-only accounts show '(needs creds)'. ig-accounts.json untouched.

Verified: /api/ig-accounts returns 41, ids valid, dedupe correct; browser shows 41 in
the list and 41 in both dropdown paths, no page errors.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
973621a · 2026-08-25 · reels: credential-safe fetch guard so Suggested videos loads when opened with creds-in-URL
Opening /api/reels/ui/ with credentials in the URL (saved bookmark / Chrome-
remembered basic-auth) poisoned document.baseURI, making every bare-relative
fetch('api/...') throw 'Request cannot be constructed from a URL that includes
credentials'. loadSuggestions() swallowed it and fell to the empty state, so
#sec-suggest showed 'No suggestions yet' despite 136 existing ideas. Resolve
relative fetch URLs against the credential-free location instead of baseURI.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
886d6f6 · 2026-08-10 · reels: drop @novasuede from rotation — not Steve's IG handle
@novasuede is not Steve's account; removed from the default target list in both the runner and the
single-colour generator. The 3x/week campaign posts only to Steve's own accounts (@suedewallpaper,
@textilewallpaper, @commercialwallcoverings, @designerwallcoverings). Novasuede stays the product/
site brand in the content. Armed launchd job picks up the new default automatically.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
951f996 · 2026-08-10 · reels: novasuede-run-all.mjs — 3 new colours per account, fan to all suggested accounts
One campaign 'drop': for each account [novasuede, suedewallpaper, textilewallpaper,
commercialwallcoverings, designerwallcoverings] pick 3 NEW colours (global de-dup), build a 15s
post (jewelry-display + swatch per colour + music bed, first frame = jewelry display), push +
post to that account. Colours marked posted ONLY on real publish (dry run = build-only, no state
change). Live multi-account fire is armed via NS_POST=1 (Steve-gated). Feeds the 3x/week schedule.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
d7e908b · 2026-08-10 · reels: novasuede 'new colour 3x/week' generator + account rotation (jewelry + music)
build-novasuede-color-post.mjs picks the next unposted colour (rotation state) and the next
target account round-robin across [novasuede, suedewallpaper, textilewallpaper,
commercialwallcoverings, designerwallcoverings], builds a 15s post (jewelry-display hero +
suede swatch + samples-free outro) with a jazz MUSIC bed, first frame = jewelry display.
First drop LIVE: Acorn → @suedewallpaper (novasuede skipped: pending-creds).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
ae7b91d · 2026-08-10 · reels: build-novasuede.mjs — 15s Novasuede color-story reel
Hero opens on a real suede swatch (most-saturated picked color) — NOT the misleading
Drapery_Drama.jpg lifestyle photo. Color cards from novasuede colors-data.json + local
swatches, 'samples no charge for professionals' outro, Steve cloned-voice VO muxed, first
frame = product swatch (clean IG index thumbnail). 15s (NS_TARGET override).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
579a1a7 · 2026-08-10 · Collection Films: fix dead Shop CTAs to vendor-collection routes, hold Majilite (no live collection), a11y play button, auto-fit grid
- filter.p.vendor= is silently ignored on this store (S&D vendor facet off) -> all 3 CTAs landed on unfiltered /collections/all. Repointed to /collections/maya-romanoff + /collections/glitter-walls (both 200, populated).
- /collections/majilite + /collections/majilite-metallics both 404 (line is sample/quote-only, TK-10425) -> Majilite card held (commented, one-line re-enable) so no shopper hits a 404.
- grid -> repeat(auto-fit, minmax(300px,384px)) centered so 2 cards render balanced (no orphan column).
- play overlay div -> <button> (fixes WCAG 2.1.1 keyboard-operability); native <video controls> kept as no-JS fallback.

TK-10427
1871275 · 2026-08-10 · reels: Majilite jewelry-case image pipeline + spotlight reel + alt tags
- batch-jewelry.mjs: 1 jewelry-display-case image per Majilite item via gpt-image-1
  (swatch as reference so the exact metallic material is applied); local-only, resumable,
  running cost total. (Gemini room-gen is out of prepaid credits — OpenAI used instead.)
- build-spotlight.mjs: 30s single-product spotlight reel (brand → material → jewelry-case
  shots → 'samples no charge for professionals' outro) with Steve's cloned-voice VO muxed;
  first frame is a product image (clean IG index thumbnail).
- gen-alt-tags.mjs: alt text per image — '<Item>, Majilite metallic wallcovering —
  jewelry display cases and fabrics' → alt.txt + alt-tags.json.
- gitignore generated assets (majilite-jewelry/, spotlight-work/).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
692459d · 2026-08-10 · reels: 15/30s runtime + open on a product image (no blank IG index thumbnail)
Steve 2026-08-10: every reel must be exactly 15s or 30s and its FIRST frame must be
a real product image, never a blank card — Instagram uses frame 0 as the grid/Reels
('index mode') thumbnail, and the old solid-cream intro (text fading in from opacity 0)
rendered a blank cream tile. Now: REEL_TARGET (15|30, default 30) derives PER so total
lands exactly on target; the intro is image-backed (items[0] full-bleed + scrim + title
overlay, image visible at frame 0 with a gentle ken-burns). Verified: 30.0s render, frame0
is a product photo. REEL_TARGET=15 for a 15s cut.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
060af89 · 2026-08-10 · TK-10395: monitor fails loud on armed 'posted-unverified' (was silent-green)
Contrarian find: check-publish-status treated 'posted-unverified' as GOOD and
the dup-guard skips it next run — so a timed-out-uncertain post that actually
failed would silently never reach IG while the monitor stayed green (the exact
TK-10395 failure class). Armed 'posted-unverified' now exits 1 → verify on IG
out-of-band. Unarmed tolerated; 'posted' control unaffected. Proven by test.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
50543e2 · 2026-08-10 · TK-10395: surface Norma's real IG-publish error instead of a bare 'error'
- !res.ok now includes body.error/note/message (was dropped) so the armed nightly run logs the actual cause
- guard the 200-OK-with-internal-failure path so a skill-level error isn't mislabeled 'posted'
- root cause is NOT a dead token (meta-token-canary: meta-ig-norma HEALTHY, expires=never) — this makes the next run reveal the true Norma-side error

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
522cc20 · 2026-07-28 · reels: add 1:1 (1080x1080) New Arrivals square-reel pipeline (build-reel-1x1.mjs) — TK-00128
Local $0 ffmpeg/ImageMagick build: 8 varied products from data/new-arrivals.json,
Didot titles + gold meta over scrim, cream intro/outro cards, push-in + crossfades.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
9829533 · 2026-07-27 · reels: add TIKTOK_DRY_RUN wiring-verify mode for postTikTok (no publish) — TK-00128
dryRunTikTok() exercises the real pre-publish path: token refresh (auth
plumbing, rotates+persists), creator_info (validates token + reads the
privacy levels the app is actually allowed to use), and init-body assembly
— then STOPS before video/init. Nothing is uploaded, no post is created.

Wired into postTikTok as an un-armed escape hatch (TIKTOK_DRY_RUN=1), so the
wiring can be verified without TIKTOK_LIVE_ARMED and without the pending
TikTok app audit. Live publish path unchanged and still gated.

Offline test (fetch stubbed, throwaway HOME): SELF_ONLY -> wouldPost true;
PUBLIC_TO_EVERYONE on unaudited app -> wouldPost false; only token +
creator_info called, no init/upload/status. $0 (no live API call).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
e30682f · 2026-07-27 · tiktok-audit-demo: turnkey capture runbook for the App-Review demo video (TK-00128)
Scene-by-scene shot list with embedded narration + who-does-what roles (Steve: OAuth
consent + account-Private toggle + button clicks; me: cue/narrate/record/trim/split).
Encodes the unaudited-app trap (account must be Private during the post) and the ≤50MB
split. Readiness verified 2026-07-27. Live capture is a ~10-min guided pass.
bc02a05 · 2026-07-27 · reels: build TikTok Content-Posting-API uploader (dormant, gated on audit) — TK-00128
- scripts/tiktok-post.mjs: ports the proven FILE_UPLOAD flow (creator_info → init →
  PUT bytes → poll) from tiktok-oauth-catcher/fire-test-post.sh, plus the token refresh
  the nightly cron needs (TikTok access tokens expire ~24h; refresh tokens rotate and are
  persisted back to the canonical secrets .env). Reads creds from secrets (single source).
- publish-social postTikTok: wired to the uploader behind its OWN gate TIKTOK_LIVE_ARMED,
  decoupled from IG's SOCIAL_LIVE_ARMED. Dormant → 'ready-pending-tiktok-arm'.
- privacy defaults SELF_ONLY; refuses a privacy level the app isn't allowed (→ 'pending-audit').

EXTERNAL BLOCKER: the DW production TikTok app is UNAUDITED, so PUBLIC posting is impossible
until TikTok approves the audit (unaudited apps: SELF_ONLY to a private account only). Code is
ready; the first live run is Steve-gated (posts + rotates the shared refresh token).
Verified: syntax, exports resolve, dry resolution = ready-pending-tiktok-arm, leak gate passes.
8adb693 · 2026-07-27 · reels: fix IG async-publish timeout (first live post landed despite 12s client timeout)
First live DW IG reel posted 2026-07-27 (reel/DbUK59zFdfL) but the client saw a 12s
timeout mid-publish (IG container->poll->publish runs ~30-60s), recording a false error.
- bump IG post timeout 12s->90s so a real post is captured as posted.
- on timeout: return posted-unverified (NOT error) - the request was already sent, so a
  blind retry would DUPLICATE the post; the dup-guard now skips posted-unverified too.
Reconciled reels[0] to posted (permalink) so the nightly cron cannot double-post.

TK-14.
5121ca1 · 2026-07-27 · reels: honest TikTok status + FTC content-claims hold guard (pre-arm)
- postTikTok: when armed+token'd but the Content Posting API uploader isn't built,
  return status 'not-implemented' + console.warn instead of a silent 'pending-reconnect'
  that could read as handled on an armed run (contrarian: silent-success bomb).
- Content-claims gate (comms-compliance Fix 1): HOLD any reel whose caption carries an
  unsubstantiated factual claim ('For 25 years', 'As seen in AD/Elle Decor/WSJ') — status
  'held-claims-review' — until CLAIMS_SUBSTANTIATED=1. Verified: holds exactly the 3
  dw-brand-promo reels (15-17), none of the other 30. Fail-safe default = hold.

TK-14. Lets Steve arm the pipeline WITHOUT the unsubstantiated promo reels posting.
19e8ca4 · 2026-07-27 · reels: consolidate LEAK_DENY to one canonical-synced module + fail-closed leak gate
- scripts/leak-deny.mjs: single source of truth for the private-label denylist,
  synced to canonical dw-leak-scanner. Adds names the 3 hand-copied regexes had
  DRIFTED and were missing: lillian august (leaked 2026-07-06), rigo, rigowall.
  Per-term anchoring: leading-\b on 'versa' (catches standalone + concatenated,
  safe on Adversarial/conversation/Universal), both-\b on 'rigo' (protects Rigoletto).
- build-reel / build-colorwheel-reel / fetch-new-arrivals: import the shared module,
  removing 3 drift-prone copies.
- scripts/scan-leaks.mjs + npm 'scan': fail-closed gate over the staged manifests.
- cron-run.sh: run the gate BEFORE publish+push — a leaked name can no longer reach
  a public post. Turns the old one-shot '0 leaks' assertion into a standing gate.

Verified: 22/22 leak+FP assertions pass; gate PASSES on the 33 staged reels.
TK-14. Contrarian-gated (FIX FIRST verdict applied).
4f97f1f · 2026-07-27 · reels: guard against duplicate social post of an already-'posted' reels[0] on nightly re-run
comms-compliance find (TK-14): main() always takes reels[0]; if a nightly build
fails to prepend a new reel but publish-social still runs, an already-posted reel
would be resubmitted to the Graph API (duplicate public post). Skip only a confirmed
'posted'/'already-posted' state; every non-terminal state (pending-creds/
ready-pending-arm/error) is still (re)attempted. Full idempotency-key dedup for the
error-response-leg edge is a follow-up. Contrarian-gated.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
d86340e · 2026-07-23 · Pin autonomous Claude CLI invocation to Opus (--model opus)
Bare 'claude' spawn inherited the CLI's drifting default model; pin to Opus
so this build/gen loop always runs on the intended model.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
ce006d6 · 2026-07-22 · chore: lint, refactor, v0.8.0 (session close)
- video-runner: hoist prompt(j) to a single const (drop duplicate call in retry loop)
- lint pass: 0 autofixes needed; flagged pre-existing serveFile Range-header
  null-deref for a future scoped fix (not session code)
d385b43 · 2026-07-22 · Route 9:16 catalog reels through build-reel.mjs ($0, IG-publishable, gallery-visible)
Running a real render exposed that new-arrivals-reel via claude -p was slow
(~8min), cost API, produced a SILENT reel, and orphaned it in output/ (invisible
to the gallery). The repo's own build-reel.mjs renders the same reel in ~20s, $0
(local ffmpeg/Chrome), with an IG-publishable AAC track, straight into reels/.
- video-runner: new-arrivals-reel@9:16 → build-reel.mjs (no arming needed);
  1:1 + url/newsletter keep the gated claude -p skill path; retry wraps both
- server: /api/videos gallery now also scans output/ (+ serve guard) so the
  HyperFrames url/newsletter renders that land there are visible + playable
8227e20 · 2026-07-22 · video-runner: give renders narrated audio via auto-resolved HYPERFRAMES_PYTHON
Auto-resolve the local HyperFrames TTS venv (~/.hyperframes/tts-venv/bin/python)
and inject it only into the render child's env — so auto-rendered reels get
voiceover/BGM without arming or mutating the pm2/server environment. Honours an
explicit HYPERFRAMES_PYTHON if already set.
6eb3061 · 2026-07-22 · Harden video-runner: retry transient API rate-limits before erroring
Root cause of the studio host's 'claude exit 1' renders was a transient Anthropic
throttle ('Server is temporarily limiting requests'), which permanently killed the
job with no retry. Now:
- capture claude stderr, classify transient (rate-limit/overloaded/429/529/reset)
- retry with exponential backoff (VIDEO_MAX_TRIES=3, VIDEO_BACKOFF_MS=20000)
- record attempts + a human-readable reason in job.note (not opaque 'exit 1')
- console surfaces the last few errored renders with their reason so failures
  don't vanish silently
Applies to both the manual studio buttons and the new suggestions 'Use it' flow.
96a00f6 · 2026-07-22 · Add hypergen daily video-suggestions tab (4 ideas/day, dated + used-stamp)
- scripts/suggest-videos.mjs: $0-local daily generator, 4 ideas/day from
  New Arrivals catalog, append-only history, idempotent per PT date
- server.js: GET /api/video/suggestions, POST /api/video/suggest,
  POST /api/video/suggestions/use (queues the render + stamps used_at/used_where);
  shared buildVideoJob/enqueueVideoJob helpers reused by the manual queue door
- public/index.html: Suggested-videos tab — day-grouped cards, created date+time
  chip, Use-it button, and a when/where used-stamp; gated on allowBuild
- com.steve.dw-video-suggest launchd agent: fills today's 4 daily at 7:05 PT (ideas only)
f2f4363 · 2026-07-17 · New Arrivals reel: 7 curated heroes + local Kokoro VO + MusicGen BGM (/bin/zsh)
- Curated 7 hero picks (1-2 colorways/pattern) across Rebel Walls murals + Thibaut
- 1080x1920 9:16, 22.8s, yuv420p 30fps, AAC 44.1kHz
- Real local audio: Kokoro TTS voiceover (bf_isabella) over ducked MusicGen ambient bed
- Fixed banned-word: caption hashtags now #Wallcovering/#Wallcoverings (was #Wallpaper)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

File tree

154 files tracked. Click any to browse the source at HEAD.

Other build journals

← Dw Mailer Glitter Naturals Custom  ·  all 4 projects  ·  Dw Marketing Viewer →

Export

commits.csv · feed.atom · project.json · commits.json

rendered in 4ms