Marketing Command Center

repo: ~/Projects/marketing-command-center · 1021 commits · 26 in last 24h, 115 in last 7d · ▂▄▅▆▅▅█

Search the build

1021 commits indexed

  1. 8ebc070 2026-09-26 auto-data-snapshot: 2026-09-26T17:20:23 (1 data files) — public/ig-activity.json
  2. 9638cdc 2026-09-26 auto-data-snapshot: 2026-09-26T16:49:35 (1 data files) — public/ig-activity.json
  3. 614fb5e 2026-09-26 auto-data-snapshot: 2026-09-26T16:19:05 (1 data files) — public/ig-activity.json
  4. 21ef6a4 2026-09-26 auto-data-snapshot: 2026-09-26T15:18:06 (1 data files) — public/ig-activity.json
  5. 5cf26b1 2026-09-26 auto-data-snapshot: 2026-09-26T14:47:36 (1 data files) — public/ig-activity.json
  6. 736f603 2026-09-26 auto-data-snapshot: 2026-09-26T14:17:06 (1 data files) — public/ig-activity.json
  7. 9cd2583 2026-09-26 auto-data-snapshot: 2026-09-26T13:46:36 (1 data files) — public/ig-activity.json
  8. 2b74b8d 2026-09-26 auto-data-snapshot: 2026-09-26T13:16:02 (1 data files) — public/ig-activity.json
  9. b1173c4 2026-09-26 auto-data-snapshot: 2026-09-26T12:44:57 (1 data files) — public/ig-activity.json
  10. 367ae59 2026-09-26 auto-data-snapshot: 2026-09-26T12:14:18 (1 data files) — public/ig-activity.json
  11. f1a8d44 2026-09-26 auto-data-snapshot: 2026-09-26T11:43:40 (1 data files) — public/ig-activity.json
  12. 8b241fc 2026-09-26 auto-data-snapshot: 2026-09-26T11:13:09 (1 data files) — public/ig-activity.json
  13. c0f8776 2026-09-26 auto-data-snapshot: 2026-09-26T10:42:21 (1 data files) — public/ig-activity.json
  14. 933b121 2026-09-26 ig-activity: use shared ordered Norma auth (IG_AGENT_AUTH -> agent .env -> NORMA_IG_PASS) instead of stale NORMA_IG_PASS (TK-12342)
  15. 25c7678 2026-09-26 auto-data-snapshot: 2026-09-26T09:40:15 (1 data files) — public/ig-activity.json
  16. af0204b 2026-09-26 TK-11856 rc-propagation (RSYNC): mcc-clients-refresh propagates extract/crawl/enrich/manifest/rsync rc
  17. f88c44a 2026-09-26 follow-counts: read Norma auth from secrets-manager IG_AGENT_AUTH first, fall through on 401/403 to instagram-agent .env then NORMA_IG_PASS (TK-12327)
  18. c82763c 2026-09-26 auto-data-snapshot: 2026-09-26T08:50:16 (3 data files) — data/com.steve.dw-follow-counts.plist.bak-TK-12008 data/follow-counts-history.json.bak-TK-12008 public/ig-activity.json
  19. 8377f04 2026-09-26 follow-counts: write no row on failure + exit 2 (no SIMULATED nulls, TK-11431 class); timestamp every attempt; job 06:05->07:05 clear of 5am fleet restart (TK-12008)
  20. 14cd75b 2026-09-26 auto-data-snapshot: 2026-09-26T08:19:11 (1 data files) — public/ig-activity.json
  21. 84614b4 2026-09-26 auto-data-snapshot: 2026-09-26T07:48:27 (1 data files) — data/vendor-linkedin-cache.json
  22. a8b9d6f 2026-09-25 auto-data-snapshot: 2026-09-25T20:06:56 (1 data files) — public/ig-activity.json
  23. fb20d03 2026-09-25 auto-data-snapshot: 2026-09-25T19:36:29 (1 data files) — public/ig-activity.json
  24. 80835d3 2026-09-25 auto-data-snapshot: 2026-09-25T19:06:05 (1 data files) — public/ig-activity.json
  25. dfaa487 2026-09-25 auto-data-snapshot: 2026-09-25T18:05:08 (1 data files) — public/ig-activity.json
  26. d014dcc 2026-09-25 auto-data-snapshot: 2026-09-25T17:34:43 (1 data files) — public/ig-activity.json
  27. da31ada 2026-09-25 auto-data-snapshot: 2026-09-25T17:04:17 (1 data files) — public/ig-activity.json
  28. c02d39f 2026-09-25 auto-data-snapshot: 2026-09-25T16:33:34 (1 data files) — public/ig-activity.json
  29. f232ea2 2026-09-25 auto-data-snapshot: 2026-09-25T14:28:14 (1 data files) — public/ig-activity.json
  30. bd903cd 2026-09-25 follow-counts: read Norma instagram-agent .env for Basic-auth (stale NORMA_IG_PASS caused 403 'Invalid credentials'); retry boot-race connection errors (TK-12008)
  31. f9ac112 2026-09-25 auto-data-snapshot: 2026-09-25T13:56:04 (1 data files) — public/ig-activity.json
  32. 73a194a 2026-09-25 auto-data-snapshot: 2026-09-25T13:25:27 (1 data files) — public/ig-activity.json
  33. e97e3e7 2026-09-25 auto-data-snapshot: 2026-09-25T12:54:38 (1 data files) — public/ig-activity.json
  34. b09f4d7 2026-09-25 auto-data-snapshot: 2026-09-25T11:23:40 (1 data files) — public/ig-activity.json
  35. 686d493 2026-09-25 auto-data-snapshot: 2026-09-25T10:52:57 (1 data files) — public/ig-activity.json
  36. 36bf027 2026-09-25 auto-data-snapshot: 2026-09-25T10:22:25 (1 data files) — public/ig-activity.json
  37. a607b9d 2026-09-25 auto-data-snapshot: 2026-09-25T09:51:23 (1 data files) — public/ig-activity.json
  38. c498a93 2026-09-25 auto-data-snapshot: 2026-09-25T08:43:42 (1 data files) — public/ig-activity.json
  39. d1034c3 2026-09-25 auto-data-snapshot: 2026-09-25T07:42:43 (1 data files) — data/vendor-linkedin-cache.json
  40. 8703d2d 2026-09-24 auto-data-snapshot: 2026-09-24T19:59:12 (1 data files) — public/ig-activity.json
  41. 382c5ef 2026-09-24 auto-data-snapshot: 2026-09-24T18:58:12 (1 data files) — public/ig-activity.json
  42. d273174 2026-09-24 auto-data-snapshot: 2026-09-24T18:27:35 (1 data files) — public/ig-activity.json
  43. 2a1dba1 2026-09-24 auto-data-snapshot: 2026-09-24T17:57:06 (1 data files) — public/ig-activity.json
  44. 89aaf78 2026-09-24 auto-data-snapshot: 2026-09-24T15:23:04 (1 data files) — public/ig-activity.json
  45. 563029a 2026-09-24 auto-data-snapshot: 2026-09-24T14:52:05 (1 data files) — public/ig-activity.json
  46. 22b0d16 2026-09-24 auto-data-snapshot: 2026-09-24T14:21:31 (1 data files) — public/ig-activity.json
  47. 7266567 2026-09-24 auto-data-snapshot: 2026-09-24T13:51:00 (2 data files) — public/ig-activity.json scripts/.li-cma-watch-seen.json
  48. 26dbf49 2026-09-24 auto-data-snapshot: 2026-09-24T12:49:23 (1 data files) — public/ig-activity.json
  49. c28abd4 2026-09-24 auto-data-snapshot: 2026-09-24T12:18:37 (1 data files) — public/ig-activity.json
  50. 4d87f3a 2026-09-24 auto-data-snapshot: 2026-09-24T11:48:03 (1 data files) — public/ig-activity.json
  51. 701cd39 2026-09-24 auto-data-snapshot: 2026-09-24T11:17:31 (1 data files) — public/ig-activity.json
  52. d088006 2026-09-24 auto-data-snapshot: 2026-09-24T10:15:55 (1 data files) — public/ig-activity.json
  53. a262834 2026-09-24 auto-data-snapshot: 2026-09-24T09:44:11 (1 data files) — public/ig-activity.json
  54. db9d9c5 2026-09-24 auto-data-snapshot: 2026-09-24T09:12:24 (1 data files) — public/ig-activity.json
  55. 2fd3197 2026-09-24 auto-data-snapshot: 2026-09-24T08:40:54 (1 data files) — public/ig-activity.json
  56. 3a8a382 2026-09-24 auto-data-snapshot: 2026-09-24T08:09:22 (1 data files) — data/vendor-linkedin-cache.json
  57. 145b507 2026-09-24 auto-data-snapshot: 2026-09-24T07:37:57 (1 data files) — data/vendor-linkedin-cache.json
  58. 945fee5 2026-09-23 auto-data-snapshot: 2026-09-23T19:33:27 (1 data files) — public/ig-activity.json
  59. aa031c9 2026-09-23 auto-data-snapshot: 2026-09-23T19:02:06 (1 data files) — public/ig-activity.json
  60. 0877d2d 2026-09-23 auto-data-snapshot: 2026-09-23T18:30:30 (1 data files) — public/ig-activity.json
  61. cd8cc6d 2026-09-23 auto-data-snapshot: 2026-09-23T17:59:00 (1 data files) — public/ig-activity.json
  62. debd90b 2026-09-23 auto-data-snapshot: 2026-09-23T16:24:32 (1 data files) — public/ig-activity.json
  63. bad37ba 2026-09-23 auto-data-snapshot: 2026-09-23T15:21:10 (1 data files) — public/ig-activity.json
  64. 151b706 2026-09-23 auto-data-snapshot: 2026-09-23T14:48:42 (1 data files) — public/ig-activity.json
  65. d06528d 2026-09-23 auto-data-snapshot: 2026-09-23T14:17:00 (1 data files) — public/ig-activity.json
  66. e5a77c3 2026-09-23 auto-data-snapshot: 2026-09-23T13:45:21 (1 data files) — public/ig-activity.json
  67. bc84346 2026-09-23 auto-data-snapshot: 2026-09-23T12:42:16 (1 data files) — public/ig-activity.json
  68. 244b637 2026-09-23 auto-data-snapshot: 2026-09-23T12:09:58 (1 data files) — public/ig-activity.json
  69. f4e33e1 2026-09-23 auto-data-snapshot: 2026-09-23T11:38:28 (1 data files) — public/ig-activity.json
  70. 4455838 2026-09-23 auto-data-snapshot: 2026-09-23T11:06:44 (1 data files) — public/ig-activity.json
  71. a32a394 2026-09-23 auto-data-snapshot: 2026-09-23T10:35:16 (1 data files) — public/ig-activity.json
  72. 4a39a88 2026-09-23 auto-data-snapshot: 2026-09-23T10:03:20 (1 data files) — public/ig-activity.json
  73. b01016e 2026-09-23 auto-data-snapshot: 2026-09-23T08:59:35 (1 data files) — public/ig-activity.json
  74. 708aba5 2026-09-23 auto-data-snapshot: 2026-09-23T08:28:09 (1 data files) — public/ig-activity.json
  75. 7b35d8c 2026-09-23 auto-data-snapshot: 2026-09-23T07:56:48 (1 data files) — data/vendor-linkedin-cache.json
  76. 09fefec 2026-09-22 auto-data-snapshot: 2026-09-22T20:24:44 (1 data files) — public/ig-activity.json
  77. 5e41753 2026-09-22 auto-data-snapshot: 2026-09-22T19:53:25 (1 data files) — public/ig-activity.json
  78. 42ac55a 2026-09-22 auto-data-snapshot: 2026-09-22T18:50:47 (1 data files) — public/ig-activity.json
  79. 53697fa 2026-09-22 auto-data-snapshot: 2026-09-22T18:19:13 (1 data files) — public/ig-activity.json
  80. c46917a 2026-09-22 auto-data-snapshot: 2026-09-22T17:47:37 (1 data files) — public/ig-activity.json
  81. b17577e 2026-09-22 auto-data-snapshot: 2026-09-22T17:15:32 (1 data files) — public/ig-activity.json
  82. 920fcdb 2026-09-22 auto-data-snapshot: 2026-09-22T16:42:26 (1 data files) — public/ig-activity.json
  83. 1eac83b 2026-09-22 auto-data-snapshot: 2026-09-22T16:09:18 (1 data files) — public/ig-activity.json
  84. 2899c2b 2026-09-22 auto-data-snapshot: 2026-09-22T15:36:13 (1 data files) — public/ig-activity.json
  85. 5c2363c 2026-09-22 auto-data-snapshot: 2026-09-22T14:27:31 (1 data files) — public/ig-activity.json
  86. cfa77b7 2026-09-22 auto-data-snapshot: 2026-09-22T13:54:25 (1 data files) — public/ig-activity.json
  87. 1f60b47 2026-09-22 auto-data-snapshot: 2026-09-22T13:21:57 (1 data files) — public/ig-activity.json
  88. 302d8d4 2026-09-22 auto-data-snapshot: 2026-09-22T12:49:04 (1 data files) — public/ig-activity.json
  89. 7807454 2026-09-22 auto-data-snapshot: 2026-09-22T12:15:47 (1 data files) — public/ig-activity.json
  90. fb77fd9 2026-09-22 auto-data-snapshot: 2026-09-22T11:43:24 (1 data files) — public/ig-activity.json
  91. 50a1171 2026-09-22 auto-data-snapshot: 2026-09-22T11:11:00 (1 data files) — public/ig-activity.json
  92. 1a7a028 2026-09-22 auto-data-snapshot: 2026-09-22T07:25:22 (2 data files) — data/vendor-linkedin-cache.json public/ig-activity.json
  93. 4973104 2026-09-21 auto-data-snapshot: 2026-09-21T20:34:48 (1 data files) — public/ig-activity.json
  94. f7cbe12 2026-09-21 auto-data-snapshot: 2026-09-21T19:40:08 (1 data files) — public/ig-activity.json
  95. ed12824 2026-09-21 auto-data-snapshot: 2026-09-21T17:27:28 (1 data files) — public/ig-activity.json
  96. f3fabc1 2026-09-21 auto-data-snapshot: 2026-09-21T16:51:55 (1 data files) — public/ig-activity.json
  97. 744570b 2026-09-21 auto-data-snapshot: 2026-09-21T15:52:40 (1 data files) — public/ig-activity.json
  98. 7069bd2 2026-09-21 auto-data-snapshot: 2026-09-21T15:19:42 (1 data files) — public/ig-activity.json
  99. b415c7b 2026-09-21 auto-data-snapshot: 2026-09-21T14:47:29 (1 data files) — public/ig-activity.json
  100. 9fcdc47 2026-09-21 auto-data-snapshot: 2026-09-21T14:14:31 (1 data files) — public/ig-activity.json
  101. 72ebb5d 2026-09-21 auto-data-snapshot: 2026-09-21T13:42:13 (1 data files) — public/ig-activity.json
  102. f039e84 2026-09-21 auto-data-snapshot: 2026-09-21T13:09:50 (1 data files) — public/ig-activity.json
  103. bebba41 2026-09-21 auto-data-snapshot: 2026-09-21T12:37:32 (1 data files) — public/ig-activity.json
  104. 2c6dd58 2026-09-21 auto-data-snapshot: 2026-09-21T11:31:47 (1 data files) — public/ig-activity.json
  105. ab3179f 2026-09-21 auto-data-snapshot: 2026-09-21T10:26:58 (1 data files) — public/ig-activity.json
  106. 16f64ae 2026-09-21 auto-data-snapshot: 2026-09-21T09:54:10 (1 data files) — public/ig-activity.json
  107. 08ab26a 2026-09-21 auto-data-snapshot: 2026-09-21T09:21:33 (1 data files) — public/ig-activity.json
  108. d824a02 2026-09-21 auto-data-snapshot: 2026-09-21T08:49:26 (1 data files) — public/ig-activity.json
  109. 8c7619a 2026-09-21 auto-data-snapshot: 2026-09-21T07:45:09 (1 data files) — data/vendor-linkedin-cache.json
  110. 36d7a9e 2026-09-20 auto-data-snapshot: 2026-09-20T07:48:13 (1 data files) — data/vendor-linkedin-cache.json
  111. 58653af 2026-09-20 auto-data-snapshot: 2026-09-20T05:34:32 (1 data files) — public/data/clients-manifest.json
  112. 8005c87 2026-09-19 auto-data-snapshot: 2026-09-19T20:05:42 (1 data files) — public/ig-activity.json
  113. 8076dc7 2026-09-19 auto-data-snapshot: 2026-09-19T19:32:43 (1 data files) — public/ig-activity.json
  114. ae60c86 2026-09-19 auto-data-snapshot: 2026-09-19T18:59:45 (1 data files) — public/ig-activity.json
  115. 980dddf 2026-09-19 auto-data-snapshot: 2026-09-19T18:28:04 (1 data files) — public/ig-activity.json
  116. 8de9404 2026-09-19 auto-data-snapshot: 2026-09-19T17:24:27 (1 data files) — public/ig-activity.json
  117. 4fe202c 2026-09-19 auto-data-snapshot: 2026-09-19T15:17:08 (1 data files) — public/ig-activity.json
  118. 81ecf6a 2026-09-19 auto-data-snapshot: 2026-09-19T14:45:24 (1 data files) — public/ig-activity.json
  119. b631ca5 2026-09-19 auto-data-snapshot: 2026-09-19T14:13:49 (1 data files) — public/ig-activity.json
  120. 3938279 2026-09-19 auto-data-snapshot: 2026-09-19T13:09:57 (1 data files) — public/ig-activity.json
  121. 22ac35f 2026-09-19 auto-data-snapshot: 2026-09-19T12:38:08 (1 data files) — public/ig-activity.json
  122. fb4030d 2026-09-19 auto-data-snapshot: 2026-09-19T12:06:31 (1 data files) — public/ig-activity.json
  123. 3179657 2026-09-19 auto-data-snapshot: 2026-09-19T11:34:41 (1 data files) — public/ig-activity.json
  124. 265e34f 2026-09-19 auto-data-snapshot: 2026-09-19T11:03:02 (1 data files) — public/ig-activity.json
  125. b6c9289 2026-09-19 auto-data-snapshot: 2026-09-19T10:31:17 (1 data files) — public/ig-activity.json
  126. ff97b0b 2026-09-19 auto-data-snapshot: 2026-09-19T09:59:20 (1 data files) — public/ig-activity.json
  127. 4d5a974 2026-09-19 auto-data-snapshot: 2026-09-19T08:55:30 (1 data files) — public/ig-activity.json
  128. d7fe16e 2026-09-19 auto-data-snapshot: 2026-09-19T08:23:45 (1 data files) — public/ig-activity.json
  129. 81985d4 2026-09-19 auto-data-snapshot: 2026-09-19T07:52:01 (1 data files) — data/vendor-linkedin-cache.json
  130. 6785325 2026-09-18 auto-data-snapshot: 2026-09-18T20:12:47 (1 data files) — public/ig-activity.json
  131. eb75c3a 2026-09-18 auto-data-snapshot: 2026-09-18T19:41:16 (1 data files) — public/ig-activity.json
  132. 40cc536 2026-09-18 auto-data-snapshot: 2026-09-18T19:09:31 (1 data files) — public/ig-activity.json
  133. ff8b2a0 2026-09-18 auto-data-snapshot: 2026-09-18T18:37:36 (1 data files) — public/ig-activity.json
  134. d1eba83 2026-09-18 auto-data-snapshot: 2026-09-18T18:05:41 (1 data files) — public/ig-activity.json
  135. de4ea65 2026-09-18 auto-data-snapshot: 2026-09-18T17:33:52 (1 data files) — public/ig-activity.json
  136. c179d0a 2026-09-18 auto-data-snapshot: 2026-09-18T15:26:25 (1 data files) — public/ig-activity.json
  137. f20ab7a 2026-09-18 auto-data-snapshot: 2026-09-18T14:54:24 (1 data files) — public/ig-activity.json
  138. beb580b 2026-09-18 auto-data-snapshot: 2026-09-18T14:19:46 (1 data files) — public/ig-activity.json
  139. fccbad6 2026-09-18 auto-data-snapshot: 2026-09-18T13:45:34 (1 data files) — public/ig-activity.json
  140. e3e23c7 2026-09-18 auto-data-snapshot: 2026-09-18T13:12:29 (1 data files) — public/ig-activity.json
  141. 34234e7 2026-09-18 auto-data-snapshot: 2026-09-18T12:06:20 (1 data files) — public/ig-activity.json
  142. da894d6 2026-09-18 auto-data-snapshot: 2026-09-18T11:33:43 (1 data files) — public/ig-activity.json
  143. 1a37b7a 2026-09-18 auto-data-snapshot: 2026-09-18T11:01:55 (1 data files) — public/ig-activity.json
  144. 5e0a7ee 2026-09-18 auto-data-snapshot: 2026-09-18T10:30:02 (1 data files) — public/ig-activity.json
  145. 293f89e 2026-09-18 auto-data-snapshot: 2026-09-18T09:58:36 (1 data files) — public/ig-activity.json
  146. 04baea4 2026-09-18 auto-data-snapshot: 2026-09-18T09:26:51 (1 data files) — public/ig-activity.json
  147. 5a84b95 2026-09-18 auto-data-snapshot: 2026-09-18T08:54:50 (1 data files) — public/ig-activity.json
  148. b3d725b 2026-09-18 auto-data-snapshot: 2026-09-18T07:49:41 (1 data files) — data/vendor-linkedin-cache.json
  149. 887fa3d 2026-09-17 auto-data-snapshot: 2026-09-17T20:05:20 (1 data files) — public/ig-activity.json
  150. 90ce958 2026-09-17 auto-data-snapshot: 2026-09-17T19:01:39 (1 data files) — public/ig-activity.json
  151. d0b7745 2026-09-17 auto-data-snapshot: 2026-09-17T18:29:30 (1 data files) — public/ig-activity.json
  152. 5dcea36 2026-09-17 auto-data-snapshot: 2026-09-17T17:57:46 (1 data files) — public/ig-activity.json
  153. 3bc1851 2026-09-17 auto-data-snapshot: 2026-09-17T17:25:36 (1 data files) — public/ig-activity.json
  154. da91694 2026-09-17 auto-data-snapshot: 2026-09-17T15:48:34 (1 data files) — public/ig-activity.json
  155. a41a347 2026-09-17 auto-data-snapshot: 2026-09-17T15:16:40 (1 data files) — public/ig-activity.json
  156. 6d4ed40 2026-09-17 auto-data-snapshot: 2026-09-17T14:12:57 (1 data files) — public/ig-activity.json
  157. 5b44e38 2026-09-17 auto-data-snapshot: 2026-09-17T13:41:27 (1 data files) — public/ig-activity.json
  158. 02ccc4a 2026-09-17 auto-data-snapshot: 2026-09-17T13:09:20 (1 data files) — public/ig-activity.json
  159. fcfbe99 2026-09-17 auto-data-snapshot: 2026-09-17T12:37:18 (1 data files) — public/ig-activity.json
  160. c281ef6 2026-09-17 auto-data-snapshot: 2026-09-17T12:05:07 (1 data files) — public/ig-activity.json
  161. f631b75 2026-09-17 auto-data-snapshot: 2026-09-17T11:32:24 (1 data files) — public/ig-activity.json
  162. faabcf5 2026-09-17 auto-data-snapshot: 2026-09-17T10:59:25 (1 data files) — public/ig-activity.json
  163. 00f0156 2026-09-17 auto-data-snapshot: 2026-09-17T09:53:49 (1 data files) — public/ig-activity.json
  164. 4a796c0 2026-09-17 auto-data-snapshot: 2026-09-17T09:20:48 (1 data files) — public/ig-activity.json
  165. ce7d5af 2026-09-17 auto-data-snapshot: 2026-09-17T08:48:40 (1 data files) — public/ig-activity.json
  166. 43e4c37 2026-09-17 auto-data-snapshot: 2026-09-17T08:16:42 (1 data files) — public/ig-activity.json
  167. ecd25f9 2026-09-17 auto-data-snapshot: 2026-09-17T07:44:57 (1 data files) — data/vendor-linkedin-cache.json
  168. 7449889 2026-09-16 auto-data-snapshot: 2026-09-16T20:01:35 (1 data files) — public/ig-activity.json
  169. 5487444 2026-09-16 auto-data-snapshot: 2026-09-16T19:29:54 (1 data files) — public/ig-activity.json
  170. 7fbab20 2026-09-16 auto-data-snapshot: 2026-09-16T18:58:01 (1 data files) — public/ig-activity.json
  171. b8fa836 2026-09-16 auto-data-snapshot: 2026-09-16T18:26:15 (1 data files) — public/ig-activity.json
  172. bc06053 2026-09-16 auto-data-snapshot: 2026-09-16T17:53:57 (1 data files) — public/ig-activity.json
  173. 9f6db14 2026-09-16 auto-data-snapshot: 2026-09-16T17:20:14 (1 data files) — public/ig-activity.json
  174. 10153d7 2026-09-16 auto-data-snapshot: 2026-09-16T15:11:20 (1 data files) — public/ig-activity.json
  175. d037e32 2026-09-16 auto-data-snapshot: 2026-09-16T14:34:47 (1 data files) — public/ig-activity.json
  176. 19c4d3a 2026-09-16 auto-data-snapshot: 2026-09-16T13:57:01 (1 data files) — public/ig-activity.json
  177. 7895f61 2026-09-16 auto-data-snapshot: 2026-09-16T13:25:12 (1 data files) — public/ig-activity.json
  178. 205a9fc 2026-09-16 auto-data-snapshot: 2026-09-16T12:52:52 (3 data files) — .gitignore data/cc-import-fm-clients-mailable.json public/ig-activity.json
  179. cc4fa74 2026-09-16 auto-data-snapshot: 2026-09-16T12:19:41 (1 data files) — public/ig-activity.json
  180. d30e16d 2026-09-16 auto-data-snapshot: 2026-09-16T11:47:18 (1 data files) — public/ig-activity.json
  181. c814f52 2026-09-16 auto-data-snapshot: 2026-09-16T11:14:29 (1 data files) — public/ig-activity.json
  182. 5ec8670 2026-09-16 auto-data-snapshot: 2026-09-16T10:07:35 (1 data files) — public/ig-activity.json
  183. 2d17949 2026-09-16 auto-data-snapshot: 2026-09-16T09:33:20 (1 data files) — public/ig-activity.json
  184. b45bcf2 2026-09-16 auto-data-snapshot: 2026-09-16T08:57:47 (1 data files) — public/ig-activity.json
  185. ee4b93b 2026-09-16 auto-data-snapshot: 2026-09-16T08:24:08 (1 data files) — public/ig-activity.json
  186. 91fb509 2026-09-16 auto-data-snapshot: 2026-09-16T07:52:09 (1 data files) — data/vendor-linkedin-cache.json
  187. 5aa408e 2026-09-15 auto-data-snapshot: 2026-09-15T19:39:01 (1 data files) — public/ig-activity.json
  188. 688db72 2026-09-15 auto-data-snapshot: 2026-09-15T19:06:59 (1 data files) — public/ig-activity.json
  189. 6d52432 2026-09-15 auto-data-snapshot: 2026-09-15T18:34:22 (1 data files) — public/ig-activity.json
  190. 5f42e93 2026-09-15 auto-data-snapshot: 2026-09-15T18:00:40 (1 data files) — public/ig-activity.json
  191. 9afc360 2026-09-15 auto-data-snapshot: 2026-09-15T16:53:16 (1 data files) — public/ig-activity.json
  192. d0f88f5 2026-09-15 auto-data-snapshot: 2026-09-15T15:48:53 (1 data files) — public/ig-activity.json
  193. 24cdd53 2026-09-15 auto-data-snapshot: 2026-09-15T15:16:50 (1 data files) — public/ig-activity.json
  194. bb377de 2026-09-15 auto-data-snapshot: 2026-09-15T14:44:34 (1 data files) — public/ig-activity.json
  195. 9624e01 2026-09-15 auto-data-snapshot: 2026-09-15T14:13:07 (1 data files) — public/ig-activity.json
  196. ff31ecf 2026-09-15 auto-data-snapshot: 2026-09-15T13:40:09 (1 data files) — public/ig-activity.json
  197. dd8415e 2026-09-15 auto-data-snapshot: 2026-09-15T13:06:09 (1 data files) — public/ig-activity.json
  198. 1e2665b 2026-09-15 auto-data-snapshot: 2026-09-15T12:33:48 (1 data files) — public/ig-activity.json
  199. 96fe5ff 2026-09-15 auto-data-snapshot: 2026-09-15T12:00:25 (1 data files) — public/ig-activity.json
  200. bc5a605 2026-09-15 auto-data-snapshot: 2026-09-15T11:25:48 (1 data files) — public/ig-activity.json
  201. 5f3690d 2026-09-15 auto-data-snapshot: 2026-09-15T10:20:50 (1 data files) — public/ig-activity.json
  202. 2512169 2026-09-15 auto-data-snapshot: 2026-09-15T09:48:56 (1 data files) — public/ig-activity.json
  203. ec2b7d7 2026-09-15 auto-data-snapshot: 2026-09-15T09:16:55 (1 data files) — public/ig-activity.json
  204. 39aa96c 2026-09-15 auto-data-snapshot: 2026-09-15T08:44:47 (1 data files) — public/ig-activity.json
  205. 72b8ca2 2026-09-15 auto-data-snapshot: 2026-09-15T07:41:08 (1 data files) — data/vendor-linkedin-cache.json
  206. 39f2347 2026-09-14 auto-data-snapshot: 2026-09-14T19:58:15 (1 data files) — public/ig-activity.json
  207. d7640e4 2026-09-14 auto-data-snapshot: 2026-09-14T19:26:33 (1 data files) — public/ig-activity.json
  208. 8b2ba33 2026-09-14 auto-data-snapshot: 2026-09-14T18:54:45 (1 data files) — public/ig-activity.json
  209. 25532da 2026-09-14 auto-data-snapshot: 2026-09-14T17:51:11 (1 data files) — public/ig-activity.json
  210. dcf3ad1 2026-09-14 auto-data-snapshot: 2026-09-14T17:18:57 (1 data files) — public/ig-activity.json
  211. 01f6937 2026-09-14 auto-data-snapshot: 2026-09-14T16:46:18 (1 data files) — public/ig-activity.json
  212. 92326af 2026-09-14 auto-data-snapshot: 2026-09-14T16:13:45 (1 data files) — public/ig-activity.json
  213. ba4d235 2026-09-14 auto-data-snapshot: 2026-09-14T15:41:36 (1 data files) — public/ig-activity.json
  214. a85c662 2026-09-14 auto-data-snapshot: 2026-09-14T15:08:48 (1 data files) — public/ig-activity.json
  215. 1c1ff58 2026-09-14 auto-data-snapshot: 2026-09-14T14:36:24 (1 data files) — public/ig-activity.json
  216. a4f8adf 2026-09-14 auto-data-snapshot: 2026-09-14T14:02:07 (1 data files) — public/ig-activity.json
  217. ccf341c 2026-09-14 auto-data-snapshot: 2026-09-14T13:27:58 (1 data files) — public/ig-activity.json
  218. d54192f 2026-09-14 auto-data-snapshot: 2026-09-14T12:23:25 (1 data files) — public/ig-activity.json
  219. 68f776f 2026-09-14 auto-data-snapshot: 2026-09-14T11:51:41 (1 data files) — public/ig-activity.json
  220. 35c27f7 2026-09-14 auto-data-snapshot: 2026-09-14T11:19:45 (1 data files) — public/ig-activity.json
  221. 152c458 2026-09-14 auto-data-snapshot: 2026-09-14T10:47:22 (1 data files) — public/ig-activity.json
  222. 5383da6 2026-09-14 auto-data-snapshot: 2026-09-14T10:14:59 (1 data files) — public/ig-activity.json
  223. 8cacbd5 2026-09-14 auto-data-snapshot: 2026-09-14T08:53:29 (1 data files) — public/ig-activity.json
  224. e4e4e11 2026-09-14 auto-data-snapshot: 2026-09-14T08:21:43 (1 data files) — public/ig-activity.json
  225. 3cdac65 2026-09-14 auto-data-snapshot: 2026-09-14T07:49:56 (1 data files) — data/vendor-linkedin-cache.json
  226. 6124ffb 2026-09-13 auto-data-snapshot: 2026-09-13T08:07:44 (1 data files) — data/vendor-linkedin-cache.json
  227. d43ac46 2026-09-13 auto-data-snapshot: 2026-09-13T07:34:50 (1 data files) — data/vendor-linkedin-cache.json
  228. 2813046 2026-09-12 auto-data-snapshot: 2026-09-12T19:54:34 (1 data files) — public/ig-activity.json
  229. 6540093 2026-09-12 auto-data-snapshot: 2026-09-12T19:22:21 (1 data files) — public/ig-activity.json
  230. 405d9cf 2026-09-12 auto-data-snapshot: 2026-09-12T18:49:52 (1 data files) — public/ig-activity.json
  231. 03bfc83 2026-09-12 auto-data-snapshot: 2026-09-12T18:17:16 (1 data files) — public/ig-activity.json
  232. 8e280ee 2026-09-12 auto-data-snapshot: 2026-09-12T17:44:46 (1 data files) — public/ig-activity.json
  233. 6d2a471 2026-09-12 auto-data-snapshot: 2026-09-12T15:35:41 (1 data files) — public/ig-activity.json
  234. 2bea801 2026-09-12 auto-data-snapshot: 2026-09-12T15:03:15 (1 data files) — public/ig-activity.json
  235. 8238767 2026-09-12 auto-data-snapshot: 2026-09-12T14:31:21 (1 data files) — public/ig-activity.json
  236. cc91ebc 2026-09-12 auto-data-snapshot: 2026-09-12T13:59:14 (1 data files) — public/ig-activity.json
  237. 159a00c 2026-09-12 auto-data-snapshot: 2026-09-12T13:27:22 (1 data files) — public/ig-activity.json
  238. 3c68149 2026-09-12 auto-data-snapshot: 2026-09-12T12:53:51 (1 data files) — public/ig-activity.json
  239. 3bd0056 2026-09-12 auto-data-snapshot: 2026-09-12T12:21:53 (1 data files) — public/ig-activity.json
  240. 531a904 2026-09-12 auto-data-snapshot: 2026-09-12T11:49:26 (1 data files) — public/ig-activity.json
  241. 1735973 2026-09-12 auto-data-snapshot: 2026-09-12T10:45:06 (1 data files) — public/ig-activity.json
  242. d46c797 2026-09-12 auto-data-snapshot: 2026-09-12T10:01:53 (1 data files) — public/ig-activity.json
  243. e111b4b 2026-09-12 auto-data-snapshot: 2026-09-12T09:28:54 (1 data files) — public/ig-activity.json
  244. 02b91c7 2026-09-12 auto-data-snapshot: 2026-09-12T08:55:55 (1 data files) — public/ig-activity.json
  245. d1e4e96 2026-09-12 auto-data-snapshot: 2026-09-12T08:20:59 (2 data files) — data/vendor-linkedin-cache.json public/ig-activity.json
  246. d422e45 2026-09-12 auto-data-snapshot: 2026-09-12T07:18:58 (1 data files) — data/vendor-linkedin-cache.json
  247. 5f43df1 2026-09-11 auto-data-snapshot: 2026-09-11T20:13:51 (1 data files) — public/ig-activity.json
  248. a2bf4c2 2026-09-11 auto-data-snapshot: 2026-09-11T19:40:57 (1 data files) — public/ig-activity.json
  249. 256dafe 2026-09-11 auto-data-snapshot: 2026-09-11T19:08:01 (1 data files) — public/ig-activity.json
  250. 4305835 2026-09-11 auto-data-snapshot: 2026-09-11T18:34:41 (1 data files) — public/ig-activity.json
  251. a7f863b 2026-09-11 auto-data-snapshot: 2026-09-11T18:01:28 (1 data files) — public/ig-activity.json
  252. 989377a 2026-09-11 auto-data-snapshot: 2026-09-11T15:49:18 (1 data files) — public/ig-activity.json
  253. ec8e5b7 2026-09-11 auto-data-snapshot: 2026-09-11T15:15:48 (1 data files) — public/ig-activity.json
  254. e52a78b 2026-09-11 auto-data-snapshot: 2026-09-11T14:39:38 (1 data files) — public/ig-activity.json
  255. 32d2a35 2026-09-11 auto-data-snapshot: 2026-09-11T13:57:49 (1 data files) — public/ig-activity.json
  256. 5518a4f 2026-09-11 auto-data-snapshot: 2026-09-11T13:23:02 (1 data files) — public/ig-activity.json
  257. e235bac 2026-09-11 auto-data-snapshot: 2026-09-11T12:47:38 (1 data files) — public/ig-activity.json
  258. 545f47b 2026-09-11 auto-data-snapshot: 2026-09-11T12:03:30 (1 data files) — public/ig-activity.json
  259. c926829 2026-09-11 auto-data-snapshot: 2026-09-11T11:23:31 (1 data files) — public/ig-activity.json
  260. a4c96ac 2026-09-11 auto-data-snapshot: 2026-09-11T10:49:53 (1 data files) — public/ig-activity.json
  261. 599661d 2026-09-11 auto-data-snapshot: 2026-09-11T10:08:53 (1 data files) — public/ig-activity.json
  262. 309b864 2026-09-11 auto-data-snapshot: 2026-09-11T09:31:49 (1 data files) — public/ig-activity.json
  263. 0a0e288 2026-09-11 auto-data-snapshot: 2026-09-11T08:57:34 (1 data files) — public/ig-activity.json
  264. 3ccc6aa 2026-09-11 auto-data-snapshot: 2026-09-11T07:43:45 (1 data files) — data/vendor-linkedin-cache.json
  265. 5485fa8 2026-09-10 auto-data-snapshot: 2026-09-10T19:39:42 (1 data files) — public/ig-activity.json
  266. fc147e3 2026-09-10 auto-data-snapshot: 2026-09-10T18:53:21 (1 data files) — public/ig-activity.json
  267. 527c1c2 2026-09-10 auto-data-snapshot: 2026-09-10T18:07:04 (1 data files) — public/ig-activity.json
  268. 5a27215 2026-09-10 auto-data-snapshot: 2026-09-10T17:34:11 (1 data files) — public/ig-activity.json
  269. 09808ff 2026-09-10 auto-data-snapshot: 2026-09-10T17:00:45 (1 data files) — public/ig-activity.json
  270. 2b3e914 2026-09-10 auto-data-snapshot: 2026-09-10T16:27:35 (1 data files) — public/ig-activity.json
  271. f31a3fb 2026-09-10 auto-data-snapshot: 2026-09-10T14:47:21 (1 data files) — public/ig-activity.json
  272. ad37579 2026-09-10 auto-data-snapshot: 2026-09-10T14:13:31 (1 data files) — public/ig-activity.json
  273. 4f18929 2026-09-10 auto-data-snapshot: 2026-09-10T13:39:50 (1 data files) — public/ig-activity.json
  274. 908324f 2026-09-10 auto-data-snapshot: 2026-09-10T13:02:09 (1 data files) — public/ig-activity.json
  275. 2330213 2026-09-10 auto-data-snapshot: 2026-09-10T12:25:41 (1 data files) — public/ig-activity.json
  276. 76c44dc 2026-09-10 auto-data-snapshot: 2026-09-10T11:43:04 (1 data files) — public/ig-activity.json
  277. 1c634b1 2026-09-10 auto-data-snapshot: 2026-09-10T11:08:25 (1 data files) — public/ig-activity.json
  278. b4274dd 2026-09-10 auto-data-snapshot: 2026-09-10T10:34:55 (1 data files) — public/ig-activity.json
  279. ffb510e 2026-09-10 auto-data-snapshot: 2026-09-10T10:01:38 (1 data files) — public/ig-activity.json
  280. d5aac39 2026-09-10 auto-data-snapshot: 2026-09-10T09:22:46 (1 data files) — public/ig-activity.json
  281. bc474c4 2026-09-10 auto-data-snapshot: 2026-09-10T08:48:14 (1 data files) — public/ig-activity.json
  282. a588181 2026-09-10 auto-data-snapshot: 2026-09-10T08:12:39 (2 data files) — data/vendor-linkedin-cache.json public/ig-activity.json
  283. 4244dc0 2026-09-10 auto-data-snapshot: 2026-09-10T07:33:05 (1 data files) — data/vendor-linkedin-cache.json
  284. 229f73f 2026-09-09 auto-data-snapshot: 2026-09-09T20:06:23 (1 data files) — public/ig-activity.json
  285. cbc65a2 2026-09-09 auto-data-snapshot: 2026-09-09T19:32:54 (1 data files) — public/ig-activity.json
  286. c53c326 2026-09-09 auto-data-snapshot: 2026-09-09T18:59:42 (1 data files) — public/ig-activity.json
  287. 9fa18ec 2026-09-09 auto-data-snapshot: 2026-09-09T18:26:03 (1 data files) — public/ig-activity.json
  288. 18ba33e 2026-09-09 auto-data-snapshot: 2026-09-09T17:52:57 (1 data files) — public/ig-activity.json
  289. afb9cb7 2026-09-09 auto-data-snapshot: 2026-09-09T15:02:32 (1 data files) — public/ig-activity.json
  290. 4739843 2026-09-09 auto-data-snapshot: 2026-09-09T14:29:35 (1 data files) — public/ig-activity.json
  291. f63b4e5 2026-09-09 auto-data-snapshot: 2026-09-09T13:56:45 (1 data files) — public/ig-activity.json
  292. d95a6c3 2026-09-09 auto-data-snapshot: 2026-09-09T13:23:51 (1 data files) — public/ig-activity.json
  293. 0b4f803 2026-09-09 auto-data-snapshot: 2026-09-09T12:49:50 (1 data files) — public/ig-activity.json
  294. 9ceda0d 2026-09-09 auto-data-snapshot: 2026-09-09T12:16:55 (1 data files) — public/ig-activity.json
  295. 95c84b7 2026-09-09 auto-data-snapshot: 2026-09-09T11:42:56 (1 data files) — public/ig-activity.json
  296. 595f043 2026-09-09 auto-data-snapshot: 2026-09-09T11:09:48 (1 data files) — public/ig-activity.json
  297. adc33fe 2026-09-09 auto-data-snapshot: 2026-09-09T10:37:25 (1 data files) — public/ig-activity.json
  298. 9ab3193 2026-09-09 auto-data-snapshot: 2026-09-09T09:32:15 (1 data files) — public/ig-activity.json
  299. 28043ec 2026-09-09 auto-data-snapshot: 2026-09-09T08:59:31 (1 data files) — public/ig-activity.json
  300. ea8a9fa 2026-09-09 auto-data-snapshot: 2026-09-09T08:26:36 (1 data files) — public/ig-activity.json
  301. 7b1b5f6 2026-09-09 auto-data-snapshot: 2026-09-09T07:54:04 (1 data files) — data/vendor-linkedin-cache.json
  302. a392a9a 2026-09-08 auto-data-snapshot: 2026-09-08T20:11:26 (1 data files) — public/ig-activity.json
  303. 9473817 2026-09-08 auto-data-snapshot: 2026-09-08T19:39:23 (1 data files) — public/ig-activity.json
  304. dc205f7 2026-09-08 auto-data-snapshot: 2026-09-08T19:07:26 (1 data files) — public/ig-activity.json
  305. 9b19a8f 2026-09-08 auto-data-snapshot: 2026-09-08T18:35:21 (1 data files) — public/ig-activity.json
  306. 70c4255 2026-09-08 auto-data-snapshot: 2026-09-08T18:03:25 (1 data files) — public/ig-activity.json
  307. f2e1d6c 2026-09-08 auto-data-snapshot: 2026-09-08T15:35:04 (1 data files) — public/ig-activity.json
  308. a7ceb7f 2026-09-08 auto-data-snapshot: 2026-09-08T14:56:20 (1 data files) — public/ig-activity.json
  309. 8a7a7fb 2026-09-08 auto-data-snapshot: 2026-09-08T14:18:02 (1 data files) — public/ig-activity.json
  310. 77d4cf4 2026-09-08 auto-data-snapshot: 2026-09-08T13:39:29 (1 data files) — public/ig-activity.json
  311. a01d618 2026-09-08 auto-data-snapshot: 2026-09-08T12:55:25 (1 data files) — public/ig-activity.json
  312. 2a4b6d6 2026-09-08 auto-data-snapshot: 2026-09-08T12:16:02 (1 data files) — public/ig-activity.json
  313. b5d4ff1 2026-09-08 auto-data-snapshot: 2026-09-08T11:37:41 (1 data files) — public/ig-activity.json
  314. f1fc028 2026-09-08 auto-data-snapshot: 2026-09-08T10:58:37 (1 data files) — public/ig-activity.json
  315. 92506f3 2026-09-08 auto-data-snapshot: 2026-09-08T10:19:39 (1 data files) — public/ig-activity.json
  316. 53bf9a4 2026-09-08 auto-data-snapshot: 2026-09-08T09:40:47 (1 data files) — public/ig-activity.json
  317. 3c48a8e 2026-09-08 auto-data-snapshot: 2026-09-08T09:02:39 (1 data files) — public/ig-activity.json
  318. 85185ac 2026-09-08 auto-data-snapshot: 2026-09-08T07:45:26 (1 data files) — data/vendor-linkedin-cache.json
  319. c49cb64 2026-09-07 auto-data-snapshot: 2026-09-07T19:41:38 (1 data files) — public/ig-activity.json
  320. e5cf09c 2026-09-07 auto-data-snapshot: 2026-09-07T19:03:42 (1 data files) — public/ig-activity.json
  321. 8aa5186 2026-09-07 auto-data-snapshot: 2026-09-07T18:25:33 (1 data files) — public/ig-activity.json
  322. a0e914d 2026-09-07 auto-data-snapshot: 2026-09-07T17:47:47 (1 data files) — public/ig-activity.json
  323. b58e9fe 2026-09-07 auto-data-snapshot: 2026-09-07T17:09:46 (1 data files) — public/ig-activity.json
  324. 609dbf9 2026-09-07 auto-data-snapshot: 2026-09-07T16:31:47 (1 data files) — public/ig-activity.json
  325. cfe9402 2026-09-07 auto-data-snapshot: 2026-09-07T15:53:48 (1 data files) — public/ig-activity.json
  326. a37391f 2026-09-07 auto-data-snapshot: 2026-09-07T15:15:55 (1 data files) — public/ig-activity.json
  327. bc410c0 2026-09-07 auto-data-snapshot: 2026-09-07T14:38:12 (1 data files) — public/ig-activity.json
  328. d9e1b0c 2026-09-07 auto-data-snapshot: 2026-09-07T14:00:10 (1 data files) — public/ig-activity.json
  329. 4e3d6bf 2026-09-07 auto-data-snapshot: 2026-09-07T13:22:13 (1 data files) — public/ig-activity.json
  330. 818b441 2026-09-07 auto-data-snapshot: 2026-09-07T12:38:54 (1 data files) — public/ig-activity.json
  331. d7a36e9 2026-09-07 auto-data-snapshot: 2026-09-07T12:00:23 (1 data files) — public/ig-activity.json
  332. cf41e90 2026-09-07 auto-data-snapshot: 2026-09-07T11:21:50 (1 data files) — public/ig-activity.json
  333. a5ef781 2026-09-07 auto-data-snapshot: 2026-09-07T10:43:18 (1 data files) — public/ig-activity.json
  334. 32998cd 2026-09-07 auto-data-snapshot: 2026-09-07T10:04:46 (1 data files) — public/ig-activity.json
  335. 322d5f5 2026-09-07 auto-data-snapshot: 2026-09-07T09:25:49 (1 data files) — public/ig-activity.json
  336. 7d2fbd3 2026-09-07 auto-data-snapshot: 2026-09-07T08:47:31 (1 data files) — public/ig-activity.json
  337. e870246 2026-09-07 auto-data-snapshot: 2026-09-07T08:09:05 (2 data files) — data/vendor-linkedin-cache.json public/ig-activity.json
  338. 881187d 2026-09-06 auto-data-snapshot: 2026-09-06T07:47:41 (1 data files) — data/vendor-linkedin-cache.json
  339. f18b823 2026-09-06 auto-data-snapshot: 2026-09-06T04:34:41 (1 data files) — public/data/clients-manifest.json
  340. f498511 2026-09-05 auto-data-snapshot: 2026-09-05T20:16:42 (1 data files) — public/ig-activity.json
  341. 9cb91d3 2026-09-05 auto-data-snapshot: 2026-09-05T19:38:25 (1 data files) — public/ig-activity.json
  342. 7ff8985 2026-09-05 auto-data-snapshot: 2026-09-05T19:00:09 (1 data files) — public/ig-activity.json
  343. 3cbb2fa 2026-09-05 auto-data-snapshot: 2026-09-05T18:21:36 (1 data files) — public/ig-activity.json
  344. 968e6a8 2026-09-05 auto-data-snapshot: 2026-09-05T17:43:09 (1 data files) — public/ig-activity.json
  345. 4d16417 2026-09-05 auto-data-snapshot: 2026-09-05T15:09:59 (1 data files) — public/ig-activity.json
  346. 730f0cf 2026-09-05 auto-data-snapshot: 2026-09-05T14:31:27 (1 data files) — public/ig-activity.json
  347. 472a3be 2026-09-05 auto-data-snapshot: 2026-09-05T13:53:26 (1 data files) — public/ig-activity.json
  348. 9bebe5a 2026-09-05 auto-data-snapshot: 2026-09-05T13:15:00 (1 data files) — public/ig-activity.json
  349. 5f9f413 2026-09-05 auto-data-snapshot: 2026-09-05T12:36:37 (1 data files) — public/ig-activity.json
  350. a0b79fe 2026-09-05 auto-data-snapshot: 2026-09-05T11:58:24 (1 data files) — public/ig-activity.json
  351. f5046f7 2026-09-05 auto-data-snapshot: 2026-09-05T11:20:09 (1 data files) — public/ig-activity.json
  352. 4e911ca 2026-09-05 auto-data-snapshot: 2026-09-05T10:42:02 (1 data files) — public/ig-activity.json
  353. 1c94c42 2026-09-05 auto-data-snapshot: 2026-09-05T10:03:39 (1 data files) — public/ig-activity.json
  354. 9fedb96 2026-09-05 auto-data-snapshot: 2026-09-05T09:24:41 (1 data files) — public/ig-activity.json
  355. 273c469 2026-09-05 auto-data-snapshot: 2026-09-05T08:46:42 (1 data files) — public/ig-activity.json
  356. 56d15e8 2026-09-05 auto-data-snapshot: 2026-09-05T08:08:29 (1 data files) — data/vendor-linkedin-cache.json
  357. 19f7998 2026-09-04 snapshot before restart: preserve in-flight work
  358. 3643590 2026-09-04 auto-data-snapshot: 2026-09-04T19:59:19 (1 data files) — public/ig-activity.json
  359. abb66d3 2026-09-04 auto-data-snapshot: 2026-09-04T19:20:56 (1 data files) — public/ig-activity.json
  360. 9bd0333 2026-09-04 auto-data-snapshot: 2026-09-04T18:42:47 (1 data files) — public/ig-activity.json
  361. 7abb302 2026-09-04 auto-data-snapshot: 2026-09-04T18:04:25 (1 data files) — public/ig-activity.json
  362. bce6d3d 2026-09-04 auto-data-snapshot: 2026-09-04T17:26:14 (1 data files) — public/ig-activity.json
  363. 9eb5f8d 2026-09-04 auto-data-snapshot: 2026-09-04T15:31:50 (1 data files) — public/ig-activity.json
  364. 67406c3 2026-09-04 auto-data-snapshot: 2026-09-04T14:52:10 (1 data files) — public/ig-activity.json
  365. f319c01 2026-09-04 auto-data-snapshot: 2026-09-04T14:13:19 (1 data files) — public/ig-activity.json
  366. 463eeea 2026-09-04 auto-data-snapshot: 2026-09-04T13:35:12 (1 data files) — public/ig-activity.json
  367. 0d6b66e 2026-09-04 auto-data-snapshot: 2026-09-04T12:55:58 (1 data files) — public/ig-activity.json
  368. 0cdca41 2026-09-04 auto-data-snapshot: 2026-09-04T12:10:54 (1 data files) — public/ig-activity.json
  369. 8020299 2026-09-04 auto-data-snapshot: 2026-09-04T11:31:34 (1 data files) — public/ig-activity.json
  370. 1688cd6 2026-09-04 auto-data-snapshot: 2026-09-04T10:48:46 (1 data files) — public/ig-activity.json
  371. 2c58508 2026-09-04 auto-data-snapshot: 2026-09-04T10:10:38 (1 data files) — public/ig-activity.json
  372. 47fbb5c 2026-09-04 auto-data-snapshot: 2026-09-04T09:31:20 (1 data files) — public/ig-activity.json
  373. 62e4ac7 2026-09-04 auto-data-snapshot: 2026-09-04T09:09:45 (1 data files) — public/ig-activity.json
  374. 35d6eaa 2026-09-04 auto-data-snapshot: 2026-09-04T07:48:37 (1 data files) — data/vendor-linkedin-cache.json
  375. 9a5bdc9 2026-09-03 auto-data-snapshot: 2026-09-03T20:10:09 (1 data files) — public/ig-activity.json
  376. 7092e2b 2026-09-03 auto-data-snapshot: 2026-09-03T19:32:13 (1 data files) — public/ig-activity.json
  377. 5b2bb84 2026-09-03 auto-data-snapshot: 2026-09-03T18:54:12 (1 data files) — public/ig-activity.json
  378. 8263e37 2026-09-03 auto-data-snapshot: 2026-09-03T18:17:45 (1 data files) — public/ig-activity.json
  379. baf94a0 2026-09-03 auto-data-snapshot: 2026-09-03T17:39:42 (1 data files) — public/ig-activity.json
  380. 19ea0b6 2026-09-03 auto-data-snapshot: 2026-09-03T15:45:08 (1 data files) — public/ig-activity.json
  381. e492dee 2026-09-03 auto-data-snapshot: 2026-09-03T15:07:41 (1 data files) — public/ig-activity.json
  382. ecc2c7c 2026-09-03 auto-data-snapshot: 2026-09-03T14:29:24 (1 data files) — public/ig-activity.json
  383. 527ee99 2026-09-03 auto-data-snapshot: 2026-09-03T13:47:49 (1 data files) — public/ig-activity.json
  384. bdaea5d 2026-09-03 auto-data-snapshot: 2026-09-03T13:07:42 (1 data files) — public/ig-activity.json
  385. e5f8ac8 2026-09-03 auto-data-snapshot: 2026-09-03T12:32:21 (1 data files) — public/ig-activity.json
  386. 5430cac 2026-09-03 auto-data-snapshot: 2026-09-03T11:49:57 (1 data files) — public/ig-activity.json
  387. da0f1f8 2026-09-03 Add separate Showroom picker area to Make-a-post so showroom-only lines (PJ) stay out of the general pool with correct language
  388. d3e2d6d 2026-09-03 auto-data-snapshot: 2026-09-03T11:10:51 (1 data files) — public/ig-activity.json
  389. 64b7fcf 2026-09-03 quickpost picker: inline nav-agent controls — density slider + Grid/List/Details(kv) views
  390. 23750b0 2026-09-03 auto-data-snapshot: 2026-09-03T10:32:28 (1 data files) — public/ig-activity.json
  391. 797b41c 2026-09-03 auto-data-snapshot: 2026-09-03T09:53:05 (1 data files) — public/ig-activity.json
  392. 98c9c00 2026-09-03 auto-data-snapshot: 2026-09-03T09:14:19 (1 data files) — public/ig-activity.json
  393. e749ba2 2026-09-03 auto-data-snapshot: 2026-09-03T08:35:39 (1 data files) — public/ig-activity.json
  394. fd5cb67 2026-09-03 auto-data-snapshot: 2026-09-03T07:56:56 (1 data files) — data/vendor-linkedin-cache.json
  395. 124469d 2026-09-02 auto-data-snapshot: 2026-09-02T19:55:31 (1 data files) — public/ig-activity.json
  396. abe8dc1 2026-09-02 auto-data-snapshot: 2026-09-02T19:17:50 (1 data files) — public/ig-activity.json
  397. bba4673 2026-09-02 auto-data-snapshot: 2026-09-02T18:39:50 (1 data files) — public/ig-activity.json
  398. 6311737 2026-09-02 auto-data-snapshot: 2026-09-02T18:02:03 (1 data files) — public/ig-activity.json
  399. ad9c8c7 2026-09-02 auto-data-snapshot: 2026-09-02T16:03:42 (1 data files) — public/ig-activity.json
  400. c4ba963 2026-09-02 auto-data-snapshot: 2026-09-02T15:21:07 (1 data files) — public/ig-activity.json
  401. 3069056 2026-09-02 auto-data-snapshot: 2026-09-02T14:42:45 (1 data files) — public/ig-activity.json
  402. 0109848 2026-09-02 auto-data-snapshot: 2026-09-02T14:03:59 (1 data files) — public/ig-activity.json
  403. c0a1f43 2026-09-02 auto-data-snapshot: 2026-09-02T13:25:17 (1 data files) — public/ig-activity.json
  404. 2042c30 2026-09-02 auto-data-snapshot: 2026-09-02T12:46:36 (1 data files) — public/ig-activity.json
  405. c64b0dc 2026-09-02 auto-data-snapshot: 2026-09-02T12:07:47 (1 data files) — public/ig-activity.json
  406. 1cb2617 2026-09-02 auto-data-snapshot: 2026-09-02T11:28:31 (1 data files) — public/ig-activity.json
  407. 57e7e6d 2026-09-02 auto-data-snapshot: 2026-09-02T10:48:45 (1 data files) — public/ig-activity.json
  408. 5d18fd3 2026-09-02 auto-data-snapshot: 2026-09-02T09:35:20 (1 data files) — public/ig-activity.json
  409. aa79d00 2026-09-02 auto-data-snapshot: 2026-09-02T09:04:08 (1 data files) — public/ig-activity.json
  410. 56ac388 2026-09-02 auto-data-snapshot: 2026-09-02T08:25:36 (1 data files) — public/ig-activity.json
  411. f36bd8d 2026-09-02 auto-data-snapshot: 2026-09-02T07:48:02 (1 data files) — data/vendor-linkedin-cache.json
  412. 75d892a 2026-09-01 auto-data-snapshot: 2026-09-01T19:53:19 (1 data files) — public/ig-activity.json
  413. bcea696 2026-09-01 auto-data-snapshot: 2026-09-01T19:16:04 (1 data files) — public/ig-activity.json
  414. f3ddc8b 2026-09-01 auto-data-snapshot: 2026-09-01T18:38:25 (1 data files) — public/ig-activity.json
  415. dd33025 2026-09-01 auto-data-snapshot: 2026-09-01T18:00:51 (1 data files) — public/ig-activity.json
  416. cecb809 2026-09-01 make Quick Post music honest and verify publish safety
  417. ba9ebc4 2026-09-01 auto-data-snapshot: 2026-09-01T17:22:42 (6 data files) — public/ig-activity.json screenrecord/quickpost/rec/run0/page@544d43a6ff2a10b8cb3e83cbcc4d56de.mp4 screenrecord/quickpost/rec/run1/page@d10a227ebe0a4f40d039440b59598320.mp4 screenrecord/quickpost/rec/run2/page@eb90353e6de8eba25641923003da52ff.mp4 screenrecord/quickpost/rec/run3/page@504411666a3211af05bc80dce17ed577.mp4
  418. 9594fa6 2026-09-01 prove Quick Post across browsers and click orders
  419. 10ebd67 2026-09-01 auto-data-snapshot: 2026-09-01T16:07:10 (1 data files) — public/ig-activity.json
  420. 935c582 2026-09-01 auto-data-snapshot: 2026-09-01T15:29:45 (1 data files) — public/ig-activity.json
  421. c6f10b6 2026-09-01 auto-data-snapshot: 2026-09-01T14:52:01 (1 data files) — public/ig-activity.json
  422. 3d82bb8 2026-09-01 auto-data-snapshot: 2026-09-01T14:14:21 (1 data files) — public/ig-activity.json
  423. 8ea018e 2026-09-01 auto-data-snapshot: 2026-09-01T13:36:10 (1 data files) — public/ig-activity.json
  424. a162aa2 2026-09-01 auto-data-snapshot: 2026-09-01T12:55:30 (1 data files) — public/ig-activity.json
  425. b07efa8 2026-09-01 Add Glitter & Sequin exclusivity email draft (TK-11075) — send-ready CC campaign, all links live-verified 200
  426. f9cdfa0 2026-09-01 auto-data-snapshot: 2026-09-01T12:16:45 (1 data files) — public/ig-activity.json
  427. 52c4045 2026-09-01 auto-data-snapshot: 2026-09-01T11:38:20 (1 data files) — public/ig-activity.json
  428. c6836e5 2026-09-01 auto-data-snapshot: 2026-09-01T10:56:56 (1 data files) — public/ig-activity.json
  429. 73c4d57 2026-09-01 auto-data-snapshot: 2026-09-01T10:19:15 (1 data files) — public/ig-activity.json
  430. 8d308b4 2026-09-01 auto-data-snapshot: 2026-09-01T09:42:16 (1 data files) — public/ig-activity.json
  431. 5c99403 2026-09-01 auto-data-snapshot: 2026-09-01T09:05:22 (1 data files) — public/ig-activity.json
  432. 5999977 2026-09-01 new-arrivals-reel: distinct-colorway heroes (URL-keyed cache + byte-distinct assert) + SKU lower-third
  433. b7ffb5f 2026-09-01 auto-data-snapshot: 2026-09-01T07:51:05 (1 data files) — data/vendor-linkedin-cache.json
  434. d28190e 2026-09-01 Add New Arrivals 9:16 short-form video builder (local, $0)
  435. 9a0aa08 2026-08-31 auto-data-snapshot: 2026-08-31T20:06:26 (1 data files) — public/ig-activity.json
  436. 7f2c426 2026-08-31 auto-data-snapshot: 2026-08-31T19:29:32 (1 data files) — public/ig-activity.json
  437. c6bc26f 2026-08-31 auto-data-snapshot: 2026-08-31T18:52:39 (1 data files) — public/ig-activity.json
  438. b58a7d1 2026-08-31 auto-data-snapshot: 2026-08-31T18:15:28 (1 data files) — public/ig-activity.json
  439. a4681db 2026-08-31 auto-data-snapshot: 2026-08-31T17:38:21 (1 data files) — public/ig-activity.json
  440. 78e62b1 2026-08-31 auto-data-snapshot: 2026-08-31T16:59:21 (1 data files) — public/ig-activity.json
  441. d8f62cb 2026-08-31 auto-data-snapshot: 2026-08-31T16:22:16 (1 data files) — public/ig-activity.json
  442. b4d6d2e 2026-08-31 auto-data-snapshot: 2026-08-31T15:44:48 (1 data files) — public/ig-activity.json
  443. 2534ddf 2026-08-31 auto-data-snapshot: 2026-08-31T15:07:00 (2 data files) — data/vendor-linkedin-cache.json public/ig-activity.json
  444. 6c4b6cf 2026-08-31 ingest-checker: re-export staleness reminder to steve-personal via George (env/keychain auth, no hardcoded secret)
  445. 793ca1d 2026-08-31 auto-data-snapshot: 2026-08-31T14:28:57 (1 data files) — public/ig-activity.json
  446. 3bf588c 2026-08-31 vendors: robust auto-updating social pipeline — weekly social-refresh (IG API + local LinkedIn OG harvest→prod sync + contact regen + heartbeat) & standing export-ingest checker (watcher-only)
  447. e39578f 2026-08-31 vendors: paced LinkedIn follows slug-resolver (OG probe + variant fallback, rate-wall guard); 210 confident / 95 review / 93 unresolved
  448. 67ef2f1 2026-08-31 auto-data-snapshot: 2026-08-31T13:51:21 (1 data files) — public/ig-activity.json
  449. f5354e1 2026-08-31 vendors panel: '👥 My vendor contacts (N)' button + /contacts + /contacts/sheet routes (internal contact sheet in the command center; hidden if no data)
  450. 2e93a4c 2026-08-31 vendors: strict LinkedIn-connection x vendor_registry contact-sheet generator (who I know inside each DW vendor); PII outputs gitignored
  451. 8f46fdc 2026-08-31 vendors: LinkedIn Connections.csv importer + network-firms rollup (INTERNAL/PII gitignored)
  452. 0cc700b 2026-08-31 auto-data-snapshot: 2026-08-31T13:13:14 (1 data files) — public/ig-activity.json
  453. 0d65527 2026-08-31 vendors: LinkedIn 'Company Follows' CSV importer + auto-merge into the LinkedIn amplify harvester (firms Steve follows)
  454. 4bbd244 2026-08-31 auto-data-snapshot: 2026-08-31T12:34:16 (10 data files) — data/vendor-linkedin-cache.json demo/out/frame-000.png demo/out/frame-001.png demo/out/frame-002.png demo/out/frame-003.png
  455. be836bb 2026-08-31 vendors: harden fetchLiOg — linkedin-host guard, redirect:manual, content-type check (codex-check fold-in)
  456. b8fe12e 2026-08-31 vendors panel: add 'Pull ALL vendor accounts' + IG coverage note + LinkedIn amplify section (reference/attribution-amplify, no <a>-wrapped cards); licdn img-proxy allowlist
  457. 6ccae80 2026-08-31 vendors: add LinkedIn vendor→company mapping + public OG harvester (reference/attribution-amplify, no API/auth)
  458. d56a62c 2026-08-31 TK-10519: safe no-publish TikTok integration demo video (recorder + mp4) for portal Save
  459. 6bd3d5c 2026-08-31 auto-data-snapshot: 2026-08-31T11:55:57 (9 data files) — demo/out/frame-000.png demo/out/frame-001.png demo/out/frame-002.png demo/out/frame-003.png demo/out/frame-004.png
  460. 320353a 2026-08-31 auto-data-snapshot: 2026-08-31T11:17:15 (1 data files) — public/ig-activity.json
  461. 7f577a1 2026-08-31 auto-data-snapshot: 2026-08-31T10:38:49 (1 data files) — public/ig-activity.json
  462. 6eeba61 2026-08-31 auto-data-snapshot: 2026-08-31T10:06:07 (1 data files) — public/ig-activity.json
  463. 3bdf1e0 2026-08-31 auto-data-snapshot: 2026-08-31T09:29:05 (1 data files) — public/ig-activity.json
  464. 1ea7c37 2026-08-31 auto-data-snapshot: 2026-08-31T08:52:01 (1 data files) — public/ig-activity.json
  465. e749915 2026-08-31 auto-data-snapshot: 2026-08-31T08:15:07 (1 data files) — public/ig-activity.json
  466. ae6f6ab 2026-08-30 deploy-safety: exclude data/ from rsync (TK-10984)
  467. 0e51848 2026-08-30 add creds-in-URL fetch guard to gated pages (TK-10984)
  468. b18c921 2026-08-30 Record Codex launchd validation comparison
  469. d5e756d 2026-08-30 prove every Quick Post control across browsers
  470. 092a26c 2026-08-30 Add --dry-run readiness self-test to calendar snapshot publisher
  471. d54ceab 2026-08-30 auto-data-snapshot: 2026-08-30T09:05:58 (4 data files) — cta/CTA-REPORT.md screenrecord/quickpost/DEBUG-REPORT.md screenrecord/quickpost/debug-log.jsonl verification/e2e-proof.json
  472. 772ed7d 2026-08-30 auto-data-snapshot: 2026-08-30T04:46:23 (1 data files) — public/data/clients-manifest.json
  473. 7268a71 2026-08-29 auto-data-snapshot: 2026-08-29T20:09:38 (1 data files) — public/ig-activity.json
  474. 165d43f 2026-08-29 auto-data-snapshot: 2026-08-29T19:32:52 (1 data files) — public/ig-activity.json
  475. 553a4e5 2026-08-29 auto-data-snapshot: 2026-08-29T18:56:11 (1 data files) — public/ig-activity.json
  476. a4cb476 2026-08-29 auto-data-snapshot: 2026-08-29T18:19:19 (1 data files) — public/ig-activity.json
  477. eb8b600 2026-08-29 auto-data-snapshot: 2026-08-29T17:42:33 (1 data files) — public/ig-activity.json
  478. ff521a3 2026-08-29 add true no-write fanout inspection
  479. 17c61d4 2026-08-29 auto-data-snapshot: 2026-08-29T15:52:29 (1 data files) — public/ig-activity.json
  480. 5d09e35 2026-08-29 auto-data-snapshot: 2026-08-29T15:15:52 (1 data files) — public/ig-activity.json
  481. db8976b 2026-08-29 auto-data-snapshot: 2026-08-29T14:38:58 (1 data files) — public/ig-activity.json
  482. e52ce14 2026-08-29 auto-data-snapshot: 2026-08-29T14:01:46 (1 data files) — public/ig-activity.json
  483. dd7ead8 2026-08-29 auto-data-snapshot: 2026-08-29T13:24:48 (1 data files) — public/ig-activity.json
  484. 4b81a12 2026-08-29 auto-data-snapshot: 2026-08-29T12:47:37 (1 data files) — public/ig-activity.json
  485. 71ebcfd 2026-08-29 auto-data-snapshot: 2026-08-29T12:10:50 (1 data files) — public/ig-activity.json
  486. aecd04c 2026-08-29 auto-data-snapshot: 2026-08-29T11:33:46 (1 data files) — public/ig-activity.json
  487. 998fae5 2026-08-29 auto-data-snapshot: 2026-08-29T10:56:48 (1 data files) — public/ig-activity.json
  488. 231b6e3 2026-08-29 auto-data-snapshot: 2026-08-29T10:19:53 (1 data files) — public/ig-activity.json
  489. db20407 2026-08-29 auto-data-snapshot: 2026-08-29T09:43:04 (1 data files) — public/ig-activity.json
  490. ce6476e 2026-08-29 auto-data-snapshot: 2026-08-29T09:06:18 (1 data files) — public/ig-activity.json
  491. 7a096d2 2026-08-29 auto-data-snapshot: 2026-08-29T08:29:29 (1 data files) — public/ig-activity.json
  492. 98d5e1d 2026-08-28 auto-data-snapshot: 2026-08-28T20:07:34 (1 data files) — public/ig-activity.json
  493. e044b6d 2026-08-28 auto-data-snapshot: 2026-08-28T19:30:46 (1 data files) — public/ig-activity.json
  494. b3f94d1 2026-08-28 auto-data-snapshot: 2026-08-28T18:53:51 (1 data files) — public/ig-activity.json
  495. d31a913 2026-08-28 auto-data-snapshot: 2026-08-28T18:16:57 (1 data files) — public/ig-activity.json
  496. 818c310 2026-08-28 auto-data-snapshot: 2026-08-28T17:39:54 (1 data files) — public/ig-activity.json
  497. ca3e866 2026-08-28 auto-data-snapshot: 2026-08-28T15:48:59 (1 data files) — public/ig-activity.json
  498. da31cd6 2026-08-28 auto-data-snapshot: 2026-08-28T15:12:09 (1 data files) — public/ig-activity.json
  499. 61a29b6 2026-08-28 auto-data-snapshot: 2026-08-28T14:34:59 (1 data files) — public/ig-activity.json
  500. 61d9ee2 2026-08-28 keep social board images durable
  501. dec35e1 2026-08-28 auto-data-snapshot: 2026-08-28T13:58:10 (1 data files) — public/ig-activity.json
  502. 1716482 2026-08-28 auto-data-snapshot: 2026-08-28T13:21:26 (1 data files) — public/ig-activity.json
  503. 3162ffc 2026-08-28 auto-data-snapshot: 2026-08-28T12:44:16 (1 data files) — public/ig-activity.json
  504. 4423391 2026-08-28 auto-data-snapshot: 2026-08-28T12:07:22 (3 data files) — cta/CTA-REPORT.md public/ig-activity.json screenrecord/debug-log.jsonl
  505. 9d23907 2026-08-28 auto-data-snapshot: 2026-08-28T11:30:23 (1 data files) — public/ig-activity.json
  506. 21e3d21 2026-08-28 refresh final click-through evidence
  507. 6f64f44 2026-08-28 auto-data-snapshot: 2026-08-28T10:53:29 (1 data files) — public/ig-activity.json
  508. 5de9f9e 2026-08-28 record final MCC proof commit
  509. 193bd34 2026-08-28 make MCC first run simpler and verify quick post
  510. 2f5e1c4 2026-08-28 auto-data-snapshot: 2026-08-28T10:16:39 (1 data files) — public/ig-activity.json
  511. 7bf7cfa 2026-08-28 ignore generated CTA screenshots
  512. 5b4d463 2026-08-28 finish cross browser quick post proof
  513. def5ea9 2026-08-28 make quick post choices clearer and safer
  514. 00e262c 2026-08-28 add honest cross browser CTA harness
  515. 337477c 2026-08-28 auto-data-snapshot: 2026-08-28T09:39:28 (1 data files) — public/ig-activity.json
  516. ef2303b 2026-08-28 record MCC UX verification evidence
  517. 8cbe82e 2026-08-28 simplify MCC navigation and expand quick post assets
  518. 3a9133d 2026-08-28 make quick post asset picking simpler
  519. a34711a 2026-08-28 snapshot before MCC click-through debug
  520. 4c82b97 2026-08-28 make social posting simple and credential safe
  521. 2fd6afa 2026-08-28 snapshot before kid-friendly post creator
  522. fb2eec3 2026-08-27 auto-data-snapshot: 2026-08-27T20:01:28 (1 data files) — public/ig-activity.json
  523. 1b36b7e 2026-08-27 auto-data-snapshot: 2026-08-27T19:24:37 (1 data files) — public/ig-activity.json
  524. 6a3a361 2026-08-27 auto-data-snapshot: 2026-08-27T18:47:45 (1 data files) — public/ig-activity.json
  525. b947c5e 2026-08-27 auto-data-snapshot: 2026-08-27T18:10:50 (1 data files) — public/ig-activity.json
  526. 83330f0 2026-08-27 auto-data-snapshot: 2026-08-27T17:33:56 (1 data files) — public/ig-activity.json
  527. d90cd5f 2026-08-27 auto-data-snapshot: 2026-08-27T15:43:16 (1 data files) — public/ig-activity.json
  528. 2a84d3d 2026-08-27 auto-data-snapshot: 2026-08-27T15:06:17 (1 data files) — public/ig-activity.json
  529. 89ad266 2026-08-27 auto-data-snapshot: 2026-08-27T14:29:15 (1 data files) — public/ig-activity.json
  530. 4b39e10 2026-08-27 auto-data-snapshot: 2026-08-27T13:51:49 (1 data files) — public/ig-activity.json
  531. 0e7f234 2026-08-27 auto-data-snapshot: 2026-08-27T13:15:02 (1 data files) — public/ig-activity.json
  532. 1e77747 2026-08-27 auto-data-snapshot: 2026-08-27T12:38:09 (1 data files) — public/ig-activity.json
  533. 7048f8f 2026-08-27 auto-data-snapshot: 2026-08-27T12:01:15 (1 data files) — public/ig-activity.json
  534. ce4139f 2026-08-27 auto-data-snapshot: 2026-08-27T11:24:00 (1 data files) — public/ig-activity.json
  535. e0f24f8 2026-08-27 auto-data-snapshot: 2026-08-27T10:47:06 (1 data files) — public/ig-activity.json
  536. 5e15df4 2026-08-27 auto-data-snapshot: 2026-08-27T10:10:28 (1 data files) — public/ig-activity.json
  537. dd4eb66 2026-08-27 auto-data-snapshot: 2026-08-27T09:33:34 (1 data files) — public/ig-activity.json
  538. e0e946d 2026-08-27 auto-data-snapshot: 2026-08-27T08:56:28 (1 data files) — public/ig-activity.json
  539. e672b7f 2026-08-27 auto-data-snapshot: 2026-08-27T08:19:36 (1 data files) — public/ig-activity.json
  540. e125f37 2026-08-27 TK-10844: fix 0/35 postable IG accounts — add postable flag to build-dw-accounts.js
  541. e10eae7 2026-08-26 auto-data-snapshot: 2026-08-26T20:07:56 (1 data files) — public/ig-activity.json
  542. 8d5cfbe 2026-08-26 auto-data-snapshot: 2026-08-26T19:31:35 (1 data files) — public/ig-activity.json
  543. 406ad8c 2026-08-26 auto-data-snapshot: 2026-08-26T18:55:11 (1 data files) — public/ig-activity.json
  544. 6be9d7c 2026-08-26 auto-data-snapshot: 2026-08-26T18:18:32 (1 data files) — public/ig-activity.json
  545. 1df6632 2026-08-26 auto-data-snapshot: 2026-08-26T17:42:06 (1 data files) — public/ig-activity.json
  546. 34da8f5 2026-08-26 auto-data-snapshot: 2026-08-26T17:05:40 (1 data files) — public/ig-activity.json
  547. a2a6b93 2026-08-26 auto-data-snapshot: 2026-08-26T16:29:03 (1 data files) — public/ig-activity.json
  548. bb707aa 2026-08-26 auto-data-snapshot: 2026-08-26T15:52:28 (1 data files) — public/ig-activity.json
  549. f3a50e4 2026-08-26 auto-data-snapshot: 2026-08-26T15:16:03 (1 data files) — public/ig-activity.json
  550. fcc4a43 2026-08-26 auto-data-snapshot: 2026-08-26T14:39:25 (1 data files) — public/ig-activity.json
  551. 8bd716d 2026-08-26 auto-data-snapshot: 2026-08-26T14:02:58 (1 data files) — public/ig-activity.json
  552. b258ba0 2026-08-26 auto-data-snapshot: 2026-08-26T13:25:11 (1 data files) — public/ig-activity.json
  553. 19d867f 2026-08-26 Suede Edit v3: swap Phillip Jeffries -> Hollywood in Explore commercial row (hollywood-wallcoverings, 200, no Momentum/Versa leak); CC drafts recreated
  554. c79dd5b 2026-08-26 auto-data-snapshot: 2026-08-26T12:47:56 (1 data files) — public/ig-activity.json
  555. 63b11af 2026-08-26 Suede Edit v2: 2-line hero (How to Specify Faux Suede) + Explore=6 commercial brands (Koroseal/Wolf-Gordon/Carnegie/Innovations/Phillip Jeffries/Maya Romanoff); 22/22 links 200; CC drafts recreated
  556. 624d90e 2026-08-26 Add The Suede Edit CC campaign (Novasuede + Ultrasuede, benefits, collection links) — built, verified 16/16 links 200, contrarian-passed; send gated
  557. 498ed36 2026-08-26 auto-data-snapshot: 2026-08-26T12:08:58 (2 data files) — data/campaign-drafts/BRIEF-suede-edit.md public/ig-activity.json
  558. dae221f 2026-08-26 auto-data-snapshot: 2026-08-26T11:30:17 (1 data files) — public/ig-activity.json
  559. 4a5c25f 2026-08-26 auto-data-snapshot: 2026-08-26T10:53:15 (1 data files) — public/ig-activity.json
  560. bb9113e 2026-08-26 auto-data-snapshot: 2026-08-26T10:15:42 (1 data files) — public/ig-activity.json
  561. b1a75bf 2026-08-26 auto-data-snapshot: 2026-08-26T09:38:32 (1 data files) — public/ig-activity.json
  562. 6bb98c4 2026-08-26 auto-data-snapshot: 2026-08-26T09:01:00 (1 data files) — public/ig-activity.json
  563. 7186df0 2026-08-26 Composer: 'Build this reel' handoff to Reel Studio + fix reels-proxy POST body
  564. fb74fe6 2026-08-25 auto-data-snapshot: 2026-08-25T20:06:24 (1 data files) — public/ig-activity.json
  565. 24298ac 2026-08-25 auto-data-snapshot: 2026-08-25T19:29:44 (1 data files) — public/ig-activity.json
  566. a618314 2026-08-25 auto-data-snapshot: 2026-08-25T18:53:12 (1 data files) — public/ig-activity.json
  567. 60d0193 2026-08-25 auto-data-snapshot: 2026-08-25T18:16:26 (1 data files) — public/ig-activity.json
  568. e5979ba 2026-08-25 auto-data-snapshot: 2026-08-25T17:39:55 (1 data files) — public/ig-activity.json
  569. 4230a05 2026-08-25 auto-data-snapshot: 2026-08-25T17:03:18 (1 data files) — public/ig-activity.json
  570. 9e7eef7 2026-08-25 auto-data-snapshot: 2026-08-25T16:26:17 (1 data files) — public/ig-activity.json
  571. 17ce2dd 2026-08-25 auto-data-snapshot: 2026-08-25T15:49:32 (1 data files) — public/ig-activity.json
  572. 0c05ad7 2026-08-25 auto-data-snapshot: 2026-08-25T15:12:26 (1 data files) — public/ig-activity.json
  573. 99745a1 2026-08-25 auto-data-snapshot: 2026-08-25T14:34:54 (1 data files) — public/ig-activity.json
  574. 3377217 2026-08-25 auto-data-snapshot: 2026-08-25T13:58:08 (1 data files) — public/ig-activity.json
  575. 5e61b4d 2026-08-25 auto-data-snapshot: 2026-08-25T13:21:24 (1 data files) — public/ig-activity.json
  576. 23aefba 2026-08-25 auto-data-snapshot: 2026-08-25T12:44:18 (1 data files) — public/ig-activity.json
  577. cd7a2c5 2026-08-25 Add durable regenerate+publish job for calendarhub activation snapshot
  578. 2302081 2026-08-25 auto-data-snapshot: 2026-08-25T12:06:42 (1 data files) — public/ig-activity.json
  579. 55e8f26 2026-08-25 Board: show format + song chips on staged social cards
  580. 81fe0b8 2026-08-25 auto-data-snapshot: 2026-08-25T11:28:19 (2 data files) — data/vendor-posts-cache.json public/ig-activity.json
  581. 3a6c04f 2026-08-25 Nav: ⌘K command palette + regroup + relabels + collapsible groups
  582. 33e8840 2026-08-25 chore: v1.11.0 (session close) — vendor-amplify + Make-it-ours feature set
  583. 796eba1 2026-08-25 Add /posts/refresh-one endpoint: fresh IG image on 'Make it ours' click (kills stale-URL 403); reuses bulk-refresh path, handle-allowlisted, graceful degrade
  584. 3c85e99 2026-08-25 Composer: one create flow — photo → details → song → decide reel-or-what
  585. 4a911a5 2026-08-25 assets: background catalog warmer (boot + 6h) + manual refresh endpoint + UI freshness signal
  586. 4c5fac6 2026-08-25 Route settlement vision gate to local $0 ollama qwen2.5vl (both paid vision keys depleted); fail-closed preserved, env-overridable
  587. 88aa02b 2026-08-25 Owned·DW Fleet: apply contrarian fixes (sort actionability + NaN/URL guards)
  588. 7064e7c 2026-08-25 Re-route Make-it-ours off Gemini: settlement vision → Claude, room render → Replicate SDXL
  589. 834187d 2026-08-25 auto-data-snapshot: 2026-08-25T10:46:10 (1 data files) — public/ig-activity.json
  590. 9690867 2026-08-25 Owned·DW Fleet: add 7-day cadence + 'slowing' signal
  591. f91859a 2026-08-25 Refine Owned·DW Fleet: surface dormant + repetition health signals + sort
  592. 6b6da55 2026-08-25 Add "Make it ours" DW-original creative system to #vendors amplify
  593. c12730b 2026-08-25 Show last 6 posts per owned account in the #vendors Owned·DW Fleet section
  594. 37ff9a8 2026-08-25 mcc: credential-safe fetch guard in shell (inoculate root-relative /api/* fetches)
  595. 3b784fd 2026-08-25 Guard: suppress amplify controls for never-front-facing brands (Schumacher) on #vendors panel
  596. 7e55f1a 2026-08-25 Add per-post "Post from" account selector + "Make unique" per-account captions to #vendors amplify
  597. 96ae557 2026-08-25 auto-data-snapshot: 2026-08-25T10:08:44 (3 data files) — data/quickpost-drafts.json data/vendor-amplify-drafts.json public/ig-activity.json
  598. e2c5740 2026-08-25 Add per-post vendor-amplify controls (X Post / Copy kit / Amplify) to #vendors panel
  599. 107e329 2026-08-25 Make the IG account pickers real: persist handle server-side + guard follow-counts
  600. 82a9086 2026-08-25 auto-data-snapshot: 2026-08-25T09:32:22 (1 data files) — public/ig-activity.json
  601. 093bb57 2026-08-25 Embed all 35 DW-owned Instagram accounts across every social/account panel
  602. aa6a459 2026-08-25 auto-data-snapshot: 2026-08-25T08:55:17 (1 data files) — public/ig-activity.json
  603. 059034e 2026-08-25 MCC IG re-pull: hourly 6am-6pm cron cadence (was daily), board staleness threshold 14h
  604. 0fd3052 2026-08-24 auto-data-snapshot: 2026-08-24T20:06:56 (1 data files) — public/ig-activity.json
  605. 7923245 2026-08-24 auto-data-snapshot: 2026-08-24T19:34:57 (1 data files) — public/ig-activity.json
  606. a735d60 2026-08-24 auto-data-snapshot: 2026-08-24T18:33:36 (1 data files) — public/ig-activity.json
  607. 992a824 2026-08-24 auto-data-snapshot: 2026-08-24T18:03:09 (1 data files) — public/ig-activity.json
  608. 2833981 2026-08-24 auto-data-snapshot: 2026-08-24T17:32:43 (1 data files) — public/ig-activity.json
  609. f6d39c9 2026-08-24 auto-data-snapshot: 2026-08-24T17:02:17 (1 data files) — public/ig-activity.json
  610. 6e9798f 2026-08-24 auto-data-snapshot: 2026-08-24T16:31:44 (1 data files) — public/ig-activity.json
  611. f6514dc 2026-08-24 auto-data-snapshot: 2026-08-24T15:30:55 (1 data files) — public/ig-activity.json
  612. e734750 2026-08-24 auto-data-snapshot: 2026-08-24T15:00:29 (1 data files) — public/ig-activity.json
  613. 6874f81 2026-08-24 auto-data-snapshot: 2026-08-24T14:29:57 (1 data files) — public/ig-activity.json
  614. 2c4768e 2026-08-24 auto-data-snapshot: 2026-08-24T13:59:29 (1 data files) — public/ig-activity.json
  615. b776f78 2026-08-24 auto-data-snapshot: 2026-08-24T13:25:50 (1 data files) — public/ig-activity.json
  616. c7aba34 2026-08-24 auto-data-snapshot: 2026-08-24T12:55:01 (1 data files) — public/ig-activity.json
  617. c115ac8 2026-08-24 auto-data-snapshot: 2026-08-24T12:20:25 (1 data files) — public/ig-activity.json
  618. ce597a1 2026-08-24 auto-data-snapshot: 2026-08-24T11:12:29 (1 data files) — public/ig-activity.json
  619. 1db75a2 2026-08-24 auto-data-snapshot: 2026-08-24T10:40:26 (1 data files) — public/ig-activity.json
  620. 4594a51 2026-08-24 auto-data-snapshot: 2026-08-24T10:08:33 (1 data files) — public/ig-activity.json
  621. 7ec64f1 2026-08-24 auto-data-snapshot: 2026-08-24T09:36:43 (1 data files) — public/ig-activity.json
  622. 37d1c6a 2026-08-24 auto-data-snapshot: 2026-08-24T09:04:34 (1 data files) — public/ig-activity.json
  623. 88a6a15 2026-08-24 auto-data-snapshot: 2026-08-24T08:30:43 (1 data files) — public/ig-activity.json
  624. cc01a1b 2026-08-23 auto-data-snapshot: 2026-08-23T03:47:15 (1 data files) — public/data/clients-manifest.json
  625. 63a3994 2026-08-22 auto-data-snapshot: 2026-08-22T20:21:39 (1 data files) — public/ig-activity.json
  626. 868808e 2026-08-22 auto-data-snapshot: 2026-08-22T19:49:55 (1 data files) — public/ig-activity.json
  627. 442b983 2026-08-22 auto-data-snapshot: 2026-08-22T18:46:26 (1 data files) — public/ig-activity.json
  628. 74fee51 2026-08-22 auto-data-snapshot: 2026-08-22T18:14:40 (1 data files) — public/ig-activity.json
  629. 268e030 2026-08-22 auto-data-snapshot: 2026-08-22T17:42:55 (1 data files) — public/ig-activity.json
  630. f7323ed 2026-08-22 auto-data-snapshot: 2026-08-22T17:10:07 (1 data files) — public/ig-activity.json
  631. e88d456 2026-08-22 auto-data-snapshot: 2026-08-22T16:38:17 (1 data files) — public/ig-activity.json
  632. 82f668c 2026-08-22 auto-data-snapshot: 2026-08-22T16:06:34 (1 data files) — public/ig-activity.json
  633. 3dbf80d 2026-08-22 auto-data-snapshot: 2026-08-22T15:34:47 (1 data files) — public/ig-activity.json
  634. cd4e287 2026-08-22 auto-data-snapshot: 2026-08-22T14:31:07 (1 data files) — public/ig-activity.json
  635. 8ff7acd 2026-08-22 auto-data-snapshot: 2026-08-22T13:59:22 (1 data files) — public/ig-activity.json
  636. 19d42ec 2026-08-22 auto-data-snapshot: 2026-08-22T13:27:36 (1 data files) — public/ig-activity.json
  637. 0ef1eb5 2026-08-22 auto-data-snapshot: 2026-08-22T12:55:46 (1 data files) — public/ig-activity.json
  638. e0b8452 2026-08-22 auto-data-snapshot: 2026-08-22T12:23:53 (1 data files) — public/ig-activity.json
  639. 2f68ea2 2026-08-22 auto-data-snapshot: 2026-08-22T11:52:06 (1 data files) — public/ig-activity.json
  640. 3143152 2026-08-22 auto-data-snapshot: 2026-08-22T11:19:22 (1 data files) — public/ig-activity.json
  641. 4728757 2026-08-22 auto-data-snapshot: 2026-08-22T10:47:10 (1 data files) — public/ig-activity.json
  642. 07d072a 2026-08-22 auto-data-snapshot: 2026-08-22T10:15:24 (1 data files) — public/ig-activity.json
  643. aac7030 2026-08-22 auto-data-snapshot: 2026-08-22T09:43:39 (1 data files) — public/ig-activity.json
  644. 1ae9a0c 2026-08-22 auto-data-snapshot: 2026-08-22T09:11:56 (1 data files) — public/ig-activity.json
  645. c31ae82 2026-08-22 auto-data-snapshot: 2026-08-22T08:40:11 (1 data files) — public/ig-activity.json
  646. 45a25a6 2026-08-21 auto-data-snapshot: 2026-08-21T19:54:30 (1 data files) — public/ig-activity.json
  647. 2c35650 2026-08-21 auto-data-snapshot: 2026-08-21T19:22:48 (1 data files) — public/ig-activity.json
  648. 2e106b0 2026-08-21 auto-data-snapshot: 2026-08-21T18:19:14 (1 data files) — public/ig-activity.json
  649. 6c8a09c 2026-08-21 auto-data-snapshot: 2026-08-21T17:47:31 (1 data files) — public/ig-activity.json
  650. 6f37b85 2026-08-21 auto-data-snapshot: 2026-08-21T17:15:45 (1 data files) — public/ig-activity.json
  651. fd3dfa6 2026-08-21 auto-data-snapshot: 2026-08-21T16:12:08 (1 data files) — public/ig-activity.json
  652. c3f1519 2026-08-21 auto-data-snapshot: 2026-08-21T15:40:21 (1 data files) — public/ig-activity.json
  653. b5d2219 2026-08-21 auto-data-snapshot: 2026-08-21T15:08:36 (1 data files) — public/ig-activity.json
  654. dc9723f 2026-08-21 auto-data-snapshot: 2026-08-21T14:05:07 (1 data files) — public/ig-activity.json
  655. e1da0da 2026-08-21 auto-data-snapshot: 2026-08-21T13:33:25 (1 data files) — public/ig-activity.json
  656. a49891c 2026-08-21 auto-data-snapshot: 2026-08-21T13:00:36 (1 data files) — public/ig-activity.json
  657. 7e47c32 2026-08-21 auto-data-snapshot: 2026-08-21T12:28:01 (1 data files) — public/ig-activity.json
  658. 232ca92 2026-08-21 auto-data-snapshot: 2026-08-21T11:56:19 (1 data files) — public/ig-activity.json
  659. 69099f1 2026-08-21 auto-data-snapshot: 2026-08-21T11:24:34 (1 data files) — public/ig-activity.json
  660. bffa73a 2026-08-21 auto-data-snapshot: 2026-08-21T10:52:53 (1 data files) — public/ig-activity.json
  661. 6378401 2026-08-21 auto-data-snapshot: 2026-08-21T09:49:18 (1 data files) — public/ig-activity.json
  662. 622e649 2026-08-21 auto-data-snapshot: 2026-08-21T09:17:35 (1 data files) — public/ig-activity.json
  663. 537bf0e 2026-08-21 auto-data-snapshot: 2026-08-21T08:45:49 (1 data files) — public/ig-activity.json
  664. 476d5e9 2026-08-20 auto-data-snapshot: 2026-08-20T20:00:17 (1 data files) — public/ig-activity.json
  665. e3f0620 2026-08-20 auto-data-snapshot: 2026-08-20T19:28:34 (1 data files) — public/ig-activity.json
  666. b8b8a3f 2026-08-20 auto-data-snapshot: 2026-08-20T18:56:52 (1 data files) — public/ig-activity.json
  667. bf65f44 2026-08-20 auto-data-snapshot: 2026-08-20T17:52:14 (1 data files) — public/ig-activity.json
  668. a1773ab 2026-08-20 auto-data-snapshot: 2026-08-20T17:19:08 (1 data files) — public/ig-activity.json
  669. a34a89c 2026-08-20 auto-data-snapshot: 2026-08-20T15:43:22 (1 data files) — public/ig-activity.json
  670. ad663e1 2026-08-20 auto-data-snapshot: 2026-08-20T15:11:42 (1 data files) — public/ig-activity.json
  671. c003bb1 2026-08-20 auto-data-snapshot: 2026-08-20T14:39:47 (1 data files) — public/ig-activity.json
  672. 65c7b6b 2026-08-20 auto-data-snapshot: 2026-08-20T14:07:04 (1 data files) — public/ig-activity.json
  673. 12f1193 2026-08-20 auto-data-snapshot: 2026-08-20T13:34:43 (1 data files) — public/ig-activity.json
  674. 2f49bbb 2026-08-20 auto-data-snapshot: 2026-08-20T13:00:52 (1 data files) — public/ig-activity.json
  675. 4a27c05 2026-08-20 auto-data-snapshot: 2026-08-20T12:27:13 (1 data files) — public/ig-activity.json
  676. e9daffa 2026-08-20 auto-data-snapshot: 2026-08-20T11:53:54 (1 data files) — public/ig-activity.json
  677. cf89518 2026-08-20 auto-data-snapshot: 2026-08-20T11:21:15 (1 data files) — public/ig-activity.json
  678. 352cd28 2026-08-20 auto-data-snapshot: 2026-08-20T10:47:55 (1 data files) — public/ig-activity.json
  679. 14ba93b 2026-08-20 auto-data-snapshot: 2026-08-20T10:13:33 (2 data files) — package-lock.json public/ig-activity.json
  680. 940696a 2026-08-20 chore: v1.10.4 — meta-token-health retry/expiry hardening (session close)
  681. 169f8b1 2026-08-20 auto-data-snapshot: 2026-08-20T09:38:44 (2 data files) — data/vendor-posts-cache.json public/ig-activity.json
  682. 8718269 2026-08-20 meta-token-health: retry transient Graph blips + only prescribe token-paste on true expiry (fix 8/20 false alarm)
  683. 62c9b25 2026-08-20 auto-data-snapshot: 2026-08-20T09:06:02 (1 data files) — public/ig-activity.json
  684. a580982 2026-08-20 auto-data-snapshot: 2026-08-20T08:33:21 (1 data files) — public/ig-activity.json
  685. 0e84e13 2026-08-20 nav-agent: sync v1.3 (host left-sidebar collapse on load)
  686. e3b286d 2026-08-19 auto-data-snapshot: 2026-08-19T20:02:37 (1 data files) — public/ig-activity.json
  687. f4553d9 2026-08-19 auto-data-snapshot: 2026-08-19T19:30:02 (1 data files) — public/ig-activity.json
  688. 20a9987 2026-08-19 auto-data-snapshot: 2026-08-19T18:57:31 (1 data files) — public/ig-activity.json
  689. 0229a78 2026-08-19 auto-data-snapshot: 2026-08-19T18:24:30 (1 data files) — public/ig-activity.json
  690. b1a31ce 2026-08-19 auto-data-snapshot: 2026-08-19T17:51:58 (1 data files) — public/ig-activity.json
  691. 260774e 2026-08-19 auto-data-snapshot: 2026-08-19T15:07:55 (1 data files) — public/ig-activity.json
  692. 7bee982 2026-08-19 auto-data-snapshot: 2026-08-19T14:34:38 (1 data files) — public/ig-activity.json
  693. 8e114fc 2026-08-19 nav-agent: List data full-width tight columns (grid) — layout fix
  694. 0eb7d46 2026-08-19 Refresh nav-agent to v1.2 (adds kv-list compact List view, default-off)
  695. ce97a74 2026-08-19 auto-data-snapshot: 2026-08-19T14:01:25 (1 data files) — public/ig-activity.json
  696. 5f3811d 2026-08-19 auto-data-snapshot: 2026-08-19T13:27:48 (1 data files) — public/ig-activity.json
  697. 9188307 2026-08-19 auto-data-snapshot: 2026-08-19T12:54:53 (1 data files) — public/ig-activity.json
  698. 8504ad6 2026-08-19 auto-data-snapshot: 2026-08-19T12:22:10 (1 data files) — public/ig-activity.json
  699. 5466aea 2026-08-19 auto-data-snapshot: 2026-08-19T11:48:49 (1 data files) — public/ig-activity.json
  700. 6a2b7ba 2026-08-19 auto-data-snapshot: 2026-08-19T11:14:55 (1 data files) — public/ig-activity.json
  701. 2ee91c6 2026-08-19 auto-data-snapshot: 2026-08-19T10:40:44 (1 data files) — public/ig-activity.json
  702. 4d55ade 2026-08-19 auto-data-snapshot: 2026-08-19T10:08:05 (1 data files) — public/ig-activity.json
  703. 4de36be 2026-08-19 auto-data-snapshot: 2026-08-19T09:03:01 (1 data files) — public/ig-activity.json
  704. e6ace9c 2026-08-19 auto-data-snapshot: 2026-08-19T08:31:04 (1 data files) — public/ig-activity.json
  705. 9ef8dfa 2026-08-18 auto-data-snapshot: 2026-08-18T19:51:40 (1 data files) — public/ig-activity.json
  706. d04ee54 2026-08-18 auto-data-snapshot: 2026-08-18T19:20:00 (1 data files) — public/ig-activity.json
  707. 7f9f7d8 2026-08-18 auto-data-snapshot: 2026-08-18T18:48:21 (1 data files) — public/ig-activity.json
  708. 2d2532b 2026-08-18 auto-data-snapshot: 2026-08-18T17:44:33 (1 data files) — public/ig-activity.json
  709. cb7879c 2026-08-18 auto-data-snapshot: 2026-08-18T17:12:33 (1 data files) — public/ig-activity.json
  710. bbb5bca 2026-08-18 auto-data-snapshot: 2026-08-18T15:36:46 (1 data files) — public/ig-activity.json
  711. 585fd5b 2026-08-18 auto-data-snapshot: 2026-08-18T15:04:50 (1 data files) — public/ig-activity.json
  712. ca13b0c 2026-08-18 auto-data-snapshot: 2026-08-18T14:32:35 (1 data files) — public/ig-activity.json
  713. 69c3845 2026-08-18 auto-data-snapshot: 2026-08-18T13:28:17 (1 data files) — public/ig-activity.json
  714. 7aa25da 2026-08-18 auto-data-snapshot: 2026-08-18T12:56:03 (1 data files) — public/ig-activity.json
  715. 2bfd308 2026-08-18 auto-data-snapshot: 2026-08-18T12:24:13 (2 data files) — data/campaign-drafts/the-classics-VERIFIED-2026-08-18.png public/ig-activity.json
  716. 907af99 2026-08-18 auto-data-snapshot: 2026-08-18T11:49:58 (2 data files) — data/campaign-drafts/the-classics-collective-2026-08-18.png public/ig-activity.json
  717. 215f443 2026-08-18 auto-data-snapshot: 2026-08-18T11:17:58 (1 data files) — public/ig-activity.json
  718. 62b3f17 2026-08-18 auto-data-snapshot: 2026-08-18T10:46:23 (1 data files) — public/ig-activity.json
  719. fd2b38a 2026-08-18 auto-data-snapshot: 2026-08-18T10:14:32 (1 data files) — public/ig-activity.json
  720. a3948d2 2026-08-18 auto-data-snapshot: 2026-08-18T09:42:51 (1 data files) — public/ig-activity.json
  721. 88db0cf 2026-08-18 auto-data-snapshot: 2026-08-18T09:11:00 (1 data files) — public/ig-activity.json
  722. 0eb138c 2026-08-18 auto-data-snapshot: 2026-08-18T08:40:41 (1 data files) — public/ig-activity.json
  723. d53796d 2026-08-17 auto-data-snapshot: 2026-08-17T20:02:38 (1 data files) — public/ig-activity.json
  724. cdbb880 2026-08-17 auto-data-snapshot: 2026-08-17T19:32:24 (1 data files) — public/ig-activity.json
  725. b4cfce1 2026-08-17 auto-data-snapshot: 2026-08-17T18:31:52 (1 data files) — public/ig-activity.json
  726. d2244d6 2026-08-17 auto-data-snapshot: 2026-08-17T18:01:33 (1 data files) — public/ig-activity.json
  727. ab28207 2026-08-17 auto-data-snapshot: 2026-08-17T17:31:10 (1 data files) — public/ig-activity.json
  728. 8f8f42f 2026-08-17 auto-data-snapshot: 2026-08-17T17:00:51 (1 data files) — public/ig-activity.json
  729. 7576dff 2026-08-17 auto-data-snapshot: 2026-08-17T16:30:27 (1 data files) — public/ig-activity.json
  730. 2d898c5 2026-08-17 auto-data-snapshot: 2026-08-17T15:29:38 (1 data files) — public/ig-activity.json
  731. 0a636ab 2026-08-17 auto-data-snapshot: 2026-08-17T14:59:21 (1 data files) — public/ig-activity.json
  732. 03d771a 2026-08-17 auto-data-snapshot: 2026-08-17T14:29:06 (1 data files) — public/ig-activity.json
  733. 68b69b5 2026-08-17 auto-data-snapshot: 2026-08-17T13:58:50 (1 data files) — public/ig-activity.json
  734. c56ea49 2026-08-17 auto-data-snapshot: 2026-08-17T12:27:54 (1 data files) — public/ig-activity.json
  735. dc4f455 2026-08-17 auto-data-snapshot: 2026-08-17T11:57:38 (1 data files) — public/ig-activity.json
  736. 9013d42 2026-08-17 auto-data-snapshot: 2026-08-17T11:27:07 (1 data files) — public/ig-activity.json
  737. 490cea0 2026-08-17 auto-data-snapshot: 2026-08-17T10:56:53 (1 data files) — public/ig-activity.json
  738. 1b23c66 2026-08-17 auto-data-snapshot: 2026-08-17T10:26:39 (1 data files) — public/ig-activity.json
  739. baa6ac7 2026-08-17 auto-data-snapshot: 2026-08-17T09:04:04 (1 data files) — public/ig-activity.json
  740. c2bf2e6 2026-08-17 snapshot before restart: preserve in-flight work
  741. 679a39e 2026-08-17 ig-activity: honest banner when Norma delete-host unreachable (e.g. from Kamatera); disable delete buttons there
  742. 4fd1cb4 2026-08-17 ig-activity: IG Posts panel — show all fleet IG posts + per-post delete proxied to Norma's gated/serialized delete
  743. 0c84eb5 2026-08-17 copy: consolidate onto shared lib/fetch-timeout.js (drop duplicate helper)
  744. f6af2dd 2026-08-16 auto-data-snapshot: 2026-08-16T09:54:36 (1 data files) — public/ig-activity.json
  745. ee1e924 2026-08-16 modules: hard-timeout all remaining unguarded external fetches
  746. c683e16 2026-08-16 copy: hard-timeout the Anthropic/Gemini fetches (no more infinite hang)
  747. 6b14b13 2026-08-16 auto-data-snapshot: 2026-08-16T03:49:55 (1 data files) — public/data/clients-manifest.json
  748. 5869a28 2026-08-15 engine: make GET /today non-blocking + add generation run-lock
  749. a30458a 2026-08-15 auto-data-snapshot: 2026-08-15T20:14:06 (1 data files) — public/ig-activity.json
  750. 630b418 2026-08-15 auto-data-snapshot: 2026-08-15T19:12:38 (1 data files) — public/ig-activity.json
  751. 357aa6c 2026-08-15 auto-data-snapshot: 2026-08-15T18:52:36 (1 data files) — public/ig-activity.json
  752. 7e2e925 2026-08-15 auto-data-snapshot: 2026-08-15T18:22:11 (1 data files) — public/ig-activity.json
  753. 17012b7 2026-08-15 auto-data-snapshot: 2026-08-15T17:51:45 (1 data files) — public/ig-activity.json
  754. fa2c9e7 2026-08-15 auto-data-snapshot: 2026-08-15T17:21:18 (1 data files) — public/ig-activity.json
  755. 00921d8 2026-08-15 auto-data-snapshot: 2026-08-15T16:50:52 (1 data files) — public/ig-activity.json
  756. 8754f8d 2026-08-15 auto-data-snapshot: 2026-08-15T16:20:27 (1 data files) — public/ig-activity.json
  757. 4d01b4f 2026-08-15 auto-data-snapshot: 2026-08-15T15:50:00 (1 data files) — public/ig-activity.json
  758. 9907a59 2026-08-15 auto-data-snapshot: 2026-08-15T14:18:43 (1 data files) — public/ig-activity.json
  759. 2bd45d6 2026-08-15 auto-data-snapshot: 2026-08-15T13:48:16 (1 data files) — public/ig-activity.json
  760. bad79a1 2026-08-15 auto-data-snapshot: 2026-08-15T13:17:24 (1 data files) — public/ig-activity.json
  761. 16d890b 2026-08-15 auto-data-snapshot: 2026-08-15T12:46:51 (1 data files) — public/ig-activity.json
  762. fd4a4f8 2026-08-15 auto-data-snapshot: 2026-08-15T11:45:53 (1 data files) — public/ig-activity.json
  763. 1bc9a30 2026-08-15 auto-data-snapshot: 2026-08-15T10:44:53 (1 data files) — public/ig-activity.json
  764. becccd5 2026-08-15 auto-data-snapshot: 2026-08-15T10:14:23 (1 data files) — public/ig-activity.json
  765. 754a810 2026-08-15 auto-data-snapshot: 2026-08-15T09:43:56 (1 data files) — public/ig-activity.json
  766. b9e5b7f 2026-08-15 auto-data-snapshot: 2026-08-15T09:13:26 (1 data files) — public/ig-activity.json
  767. 2531f81 2026-08-15 auto-data-snapshot: 2026-08-15T08:12:28 (1 data files) — public/ig-activity.json
  768. 8734648 2026-08-14 auto-data-snapshot: 2026-08-14T19:30:43 (1 data files) — public/ig-activity.json
  769. 03d918d 2026-08-14 auto-data-snapshot: 2026-08-14T19:00:16 (1 data files) — public/ig-activity.json
  770. 439b363 2026-08-14 auto-data-snapshot: 2026-08-14T18:29:45 (1 data files) — public/ig-activity.json
  771. 239a911 2026-08-14 auto-data-snapshot: 2026-08-14T17:28:57 (1 data files) — public/ig-activity.json
  772. 833b32b 2026-08-14 auto-data-snapshot: 2026-08-14T11:23:02 (1 data files) — public/ig-activity.json
  773. 1985b40 2026-08-14 auto-data-snapshot: 2026-08-14T10:52:23 (1 data files) — public/ig-activity.json
  774. cb2cbac 2026-08-14 auto-data-snapshot: 2026-08-14T08:19:45 (1 data files) — public/ig-activity.json
  775. 062bb9e 2026-08-13 auto-data-snapshot: 2026-08-13T19:38:43 (1 data files) — public/ig-activity.json
  776. d1a2ddd 2026-08-13 auto-data-snapshot: 2026-08-13T19:08:13 (1 data files) — public/ig-activity.json
  777. ad6dd0a 2026-08-13 auto-data-snapshot: 2026-08-13T18:37:41 (1 data files) — public/ig-activity.json
  778. 7aa1f7d 2026-08-13 auto-data-snapshot: 2026-08-13T18:07:15 (1 data files) — public/ig-activity.json
  779. 8d790fe 2026-08-13 auto-data-snapshot: 2026-08-13T17:06:27 (1 data files) — public/ig-activity.json
  780. 7eaa41f 2026-08-13 nav-agent: universal grid-controls drop-in on internal dashboard/command-center pages (STRONG-only)
  781. 9c6fd71 2026-08-13 auto-data-snapshot: 2026-08-13T08:21:55 (1 data files) — public/ig-activity.json
  782. 22e1fa7 2026-08-12 auto-data-snapshot: 2026-08-12T19:37:30 (1 data files) — public/ig-activity.json
  783. 3fdad13 2026-08-12 auto-data-snapshot: 2026-08-12T19:06:56 (1 data files) — public/ig-activity.json
  784. bed8a93 2026-08-12 tiktok: align OAuth scope to draft-mode (video.upload,user.info.basic) + add DW Marketing app icon asset
  785. de9aaf3 2026-08-12 auto-data-snapshot: 2026-08-12T18:36:17 (1 data files) — public/ig-activity.json
  786. 960ca43 2026-08-12 auto-data-snapshot: 2026-08-12T18:04:53 (1 data files) — public/ig-activity.json
  787. cc56d38 2026-08-12 auto-data-snapshot: 2026-08-12T17:03:39 (3 data files) — package-lock.json public/ig-activity.json scripts/.li-cma-watch-seen.json
  788. aaf5279 2026-08-12 deploy: /channels/health probe + Quick Post token dots live (v1.10.3)
  789. f874f5b 2026-08-12 channels: consolidated /health probe (fb/ig/tiktok/linkedin/threads/bluesky/youtube) + Quick Post per-platform token dots
  790. a89c005 2026-08-12 channels: add read-only GET /tiktok-health token-validity probe (creator_info; token never leaves server)
  791. 941504a 2026-08-12 auto-data-snapshot: 2026-08-12T16:33:05 (2 data files) — data/quickpost-drafts.json package-lock.json
  792. 311ff85 2026-08-12 Quick Post live path: + Threads/Bluesky, 'Publish live' hands off to Composer (prefill + targeted account + dry-run+confirm) — no direct live post
  793. a03f7e3 2026-08-12 deploy: Easy Post buttons live on marketing.dw (v1.10.0)
  794. f8591dc 2026-08-12 Easy Post buttons: shared stage-a-draft component + Quick Post panel + Compose row + asset-card buttons (gated)
  795. eacbee8 2026-08-12 MCC promo v3: DTD fix — hub screenshots as intentional app-windows, zoom-cropped to read on phone (9:16+4:5+1:1)
  796. 517468b 2026-08-12 Stage MCC streamline promo social DRAFTS (TikTok/IG/FB) — captions finalized to DW luxe voice, draft-only
  797. 7e7292e 2026-08-12 auto-data-snapshot: 2026-08-12T15:01:25 (1 data files) — videos/mcc-streamline-promo/.media/audio/narration.wav
  798. 1444bf7 2026-08-12 MCC deploy: exclude churning videos/*/renders build artifacts (rsync code-24 aborted reload) — TK-10504
  799. dee3f1f 2026-08-12 MCC promo v2: hook-first, tighter (15.9s), new hook line; 9:16 + 4:5 + 1:1 aspects
  800. 79e1798 2026-08-12 MCC LinkedIn Network Feed: paste-URL curation board (the working populate path) — TK-10504
  801. 1749ce4 2026-08-12 MCC LinkedIn Network Feed: mark EXPERIMENTAL — scrape non-functional vs LinkedIn's current feed (TK-10504)
  802. 2a3f00f 2026-08-12 HyperFrames social promo for streamlined MCC (9:16 + 1:1, cloned VO + captions)
  803. 7c9bd03 2026-08-12 auto-data-snapshot: 2026-08-12T14:30:58 (20 data files) — package-lock.json videos/mcc-streamline-promo/.media/audio/narration.wav videos/mcc-streamline-promo/.media/preferences.json videos/mcc-streamline-promo/AGENTS.md videos/mcc-streamline-promo/BRIEF.md
  804. 189b7f7 2026-08-12 MCC deploy: protect remote linkedin-feed.json harvest output from rsync clobber (TK-10504)
  805. 46e18c8 2026-08-12 MCC LinkedIn: Network Feed — openclaw harvest of own feed + gated reshare + download-to-assets
  806. 454644c 2026-08-12 deploy: Insights hub live on Kamatera (v1.9.1)
  807. 7014784 2026-08-12 Collapse 8 Preview panels into a single Insights hub (tabbed, single-pane swap); nav now 6 groups (v1.9.1)
  808. 39e86ec 2026-08-12 auto-data-snapshot: 2026-08-12T14:00:30 (1 data files) — package-lock.json
  809. 0e5e905 2026-08-12 deploy: streamlined MCC (6 groups, Compose+Calendar hubs) live on Kamatera (v1.9.0)
  810. 574b206 2026-08-12 Streamline MCC: 28 tabs → 6 calendar-led groups; merge engine+composer → Compose (tabs+sound wiring) and calendars+calendar → Calendar hub; hide 8 mock panels under Preview (v1.9.0)
  811. 75ad81c 2026-08-12 auto-data-snapshot: 2026-08-12T12:59:45 (1 data files) — package-lock.json
  812. 985e409 2026-08-12 deploy: social-selection bar live on marketing.dw #sounds (v1.8.3)
  813. 13b1209 2026-08-12 Sounds: drag songs (or tap +) into a social-selection bar — chips, dedupe, remove, Copy list, localStorage-persisted (v1.8.3)
  814. 488e005 2026-08-12 chore: refactor (drop unused param), v1.8.2 (session close)
  815. 0b8eb41 2026-08-12 Sounds panel: move assets into left panel with in-panel iframe preview, no link-out
  816. 12f7c09 2026-08-12 auto-data-snapshot: 2026-08-12T11:28:02 (1 data files) — public/ig-activity.json
  817. 9e11306 2026-08-12 auto-data-snapshot: 2026-08-12T10:57:24 (1 data files) — public/ig-activity.json
  818. 409d4bd 2026-08-12 auto-data-snapshot: 2026-08-12T10:26:55 (1 data files) — public/ig-activity.json
  819. 9696abb 2026-08-12 auto-data-snapshot: 2026-08-12T09:25:42 (1 data files) — public/ig-activity.json
  820. bb5951c 2026-08-12 auto-data-snapshot: 2026-08-12T08:54:38 (1 data files) — public/ig-activity.json
  821. 8bf16c6 2026-08-12 auto-data-snapshot: 2026-08-12T08:23:24 (1 data files) — public/ig-activity.json
  822. 9bbf423 2026-08-11 auto-data-snapshot: 2026-08-11T13:51:52 (1 data files) — public/ig-activity.json
  823. bcab1e9 2026-08-11 auto-data-snapshot: 2026-08-11T13:21:01 (1 data files) — public/ig-activity.json
  824. eba1217 2026-08-11 auto-data-snapshot: 2026-08-11T11:45:12 (1 data files) — public/ig-activity.json
  825. 7f4de3c 2026-08-11 auto-data-snapshot: 2026-08-11T10:12:37 (1 data files) — public/ig-activity.json
  826. fb98d9a 2026-08-11 auto-data-snapshot: 2026-08-11T09:10:52 (1 data files) — public/ig-activity.json
  827. 1ec9940 2026-08-11 IG activity panel: grid/list toggle + sort by all columns (dropdown + clickable headers)
  828. 1ccbe05 2026-08-11 Add IG Network Activity panel (what's posted + where, per-card date/time, sort+density)
  829. a924073 2026-08-09 auto-data-snapshot: 2026-08-09T04:37:25 (1 data files) — public/data/clients-manifest.json
  830. 4ff6ad3 2026-08-02 auto-save: 2026-08-02T04:12:02 (1 files) — public/data/clients-manifest.json
  831. eb62709 2026-07-30 auto-save: 2026-07-30T15:49:17 (1 files) — package-lock.json
  832. 37441d3 2026-07-30 fix(linkedin): blank media title default + video-wins when both media refs given (Cody-verified)
  833. 60ffd0e 2026-07-30 chore: lint+refactor, fix channels postLinkedIn video routing, vN (session close)
  834. ef6776b 2026-07-30 linkedin(mcc): incorporate native image/video posting into the command center
  835. 42fc9c3 2026-07-30 auto-save: 2026-07-30T14:48:53 (1 files) — docs/submissions/linkedin-cas-11523819-followup.md
  836. 39fcdef 2026-07-27 MCC bluesky: fail loud if image can't embed — never silently post text-only
  837. f4429c8 2026-07-27 auto-save: 2026-07-27T15:21:37 (1 files) — data/cc-warmup-seed-200.json
  838. a9436a5 2026-07-27 auto-save: 2026-07-27T14:51:27 (1 files) — data/cc-import-activities-audit.jsonl
  839. d530fe4 2026-07-27 auto-save: 2026-07-27T14:21:14 (2 files) — data/cc-import-fm-clients-hold.json data/cc-import-fm-clients-mailable.json
  840. 747d83a 2026-07-26 auto-save: 2026-07-26T04:40:35 (1 files) — public/data/clients-manifest.json
  841. 38e14e7 2026-07-22 auto-save: 2026-07-22T12:44:11 (1 files) — package-lock.json
  842. 85f3566 2026-07-22 chore: version bump (session close)
  843. 5d1c41b 2026-07-22 chore(mcc): move IG re-pull schedule from Mac2 launchd to Kamatera-local cron
  844. 6b2db25 2026-07-22 auto-save: 2026-07-22T12:13:58 (1 files) — data/ig-repull-status.json
  845. 21be5cc 2026-07-22 feat(mcc): board shows IG re-pull health at a glance + Run-now fix button
  846. 6d2f55b 2026-07-22 chore(mcc): daily launchd job for the IG media re-pull (Mac2 → Kamatera SSH)
  847. 214b1bb 2026-07-22 fix(mcc): IG re-pull only touches at-risk images, never clobbers stable URLs
  848. 971082a 2026-07-22 feat(mcc): IG Graph API re-pull to restore durable thumbnails for published IG posts
  849. 2ffb36f 2026-07-22 fix(mcc): durable local cache for expiring IG/fbcdn post images + graceful placeholder
  850. 243d9c5 2026-07-22 fix(mcc): guard panel-router race that blanked panels + untrack screen-record videos
  851. 5a92b90 2026-07-22 auto-save: 2026-07-22T10:13:11 (5 files) — scripts/repro-run3.js screenrecord/DEBUG-REPORT.md scripts/probe-403.js scripts/verify-fix.js scripts/verify-fix2.js
  852. c073e61 2026-07-22 auto-save: 2026-07-22T09:43:01 (8 files) — public/app.js screenrecord/ scripts/nav-map.js scripts/probe-403-and-posts.js scripts/repro-race.js
  853. 355b730 2026-07-22 auto-save: 2026-07-22T08:42:49 (1 files) — package-lock.json
  854. 0eff96e 2026-07-22 chore: v1.7.0 (session close — Threads un-gate, image+SKU generation, honest postable status, /publish skip)
  855. 29d1ff2 2026-07-22 channels: /publish skips non-postable + media-mismatched channels
  856. 69af9fe 2026-07-22 channels: add honest 'postable' status — connected != can-actually-post
  857. d84dc2a 2026-07-22 engine: untrack runtime engine-queue.json + protect it on deploy
  858. d9e22d3 2026-07-22 engine: image-grounded captions (vision) + always include DW SKU
  859. 7ff5d7c 2026-07-22 deploy: ship Threads un-gate to Kamatera MCC (app 69 reloaded, health 200)
  860. 2545273 2026-07-22 engine: stop birth-gating Threads suggestions (DW is a Meta tester, publishes without App Review)
  861. 5459b68 2026-07-21 LinkedIn: filed Developer Support ticket CAS-11523819 to unblock CMA (auto-added defaults on app 257140099)
  862. aae7c9c 2026-07-21 LinkedIn: record CMA self-serve blocker (auto-added default products grey Request access; app 257140099 created+verified, client 86z1h5ic86lw65, org 3090253)
  863. 2becbe5 2026-07-21 submissions: Facebook pages_manage_posts App Review package (dashboard steps + use-case + screencast script + reviewer repro)
  864. eb16f00 2026-07-21 submissions: LinkedIn dedicated-app + Community Management API request package (new-app spec + email-verify + post-approval finish)
  865. 4e9c425 2026-07-21 submissions: TikTok production App Review package (fields + scope text + demo shot-list + submit steps)
  866. 33d5174 2026-07-21 chore: v1.6.3 (session close — FB page names fix)
  867. 3779b0f 2026-07-21 engine: add LinkedIn as 7th channel — image-upload adapter (initializeUpload→PUT→post), status entry, trade-voice captions, channel backfill for already-generated days
  868. 71a303c 2026-07-21 5x: Engine panel verified clean on live marketing.dw (0 app defects; 2 harness fixes, 1 phantom discarded)
  869. 024a26b 2026-07-21 channels: show real Facebook Page names instead of raw IDs in status panel
  870. 0210a80 2026-07-21 engine: contrarian fixes — YT approve defaults private, edit routed through CAS (double-post guard), TZ pinned PT, productUrl in outbound content (+bluesky budget), LLM claim-grounding
  871. 0b73831 2026-07-21 engine: brain (candidates+llm+generate), scheduler (CAS tick+crash sweep), Engine panel UI
  872. 0938d51 2026-07-21 engine: core module (store/config/skeleton) + channels.postLive + leak-deny lib
  873. e8501e8 2026-07-21 assets: local qwen2.5vl vision enrichment (aiTags) + search
  874. 70479a4 2026-07-21 youtube: add force-ssl scope for videos.update (visibility control)
  875. e10410d 2026-07-21 youtube: add /youtube/visibility endpoint (flip private↔public via videos.update)
  876. 85d08d7 2026-07-21 youtube: build resumable videos.insert upload pipeline (postYouTube) + token refresh
  877. ed9e2e2 2026-07-21 channels: derive TikTok + YouTube account handles from env (accounts rail was blank for both)
  878. ca60a5c 2026-07-21 chore: v-bump (session close — TikTok token-mirror fix)
  879. 34ea50f 2026-07-21 TikTok App Review: mark posting pipeline VERIFIED (creator_info ok); demo needs only a hosted video + gated test-post
  880. a9c34db 2026-07-21 Add TikTok App Review submission package (production fields + demo script + posting-pipeline prereq)
  881. 63d0cd0 2026-07-20 TikTok: mirror OAuth token into env on callback (fixes Bearer undefined on post) + demo recorder scaffold
  882. 9a142fd 2026-07-20 auto-save: 2026-07-20T15:02:48 (1 files) — package-lock.json
  883. 76de953 2026-07-20 chore: v1.6.1 (session close — Schumacher calendar filter)
  884. 5ea8d24 2026-07-20 calendars: filter Schumacher (internal-only) out of both calendar layers at source
  885. 540ae08 2026-07-20 chore: lint + refactor + v1.6.0 (session close — reel/FB-page picker hardening)
  886. 97dcfe7 2026-07-20 Composer: add reel/story asset picker + Facebook Page selector
  887. 02a76e0 2026-07-19 auto-save: 2026-07-19T07:55:24 (1 files) — package-lock.json
  888. 947d85f 2026-07-19 chore: v1.5.0 (session close — Clients & Prospects panel, Threads accounts, gated CC import staging)
  889. 861cc69 2026-07-19 auto-save: 2026-07-19T04:54:45 (1 files) — public/data/clients-manifest.json
  890. d77d6ee 2026-07-17 chore: lint, refactor (drop dead env()), v1.4.0 (session close)
  891. c1d7a1d 2026-07-17 instagram: poll media container status until FINISHED before publish — fixes 'Media ID is not available' (Meta processes images async)
  892. 47459ec 2026-07-17 cc-import: stage gated FM-client → Constant Contact import (34,825 contacts; scraped list excluded); upload drafted to pending-approval (DTD verdict A)
  893. c333624 2026-07-17 auto-save: 2026-07-17T09:46:05 (2 files) — modules/channels/index.js public/panels/composer.js
  894. 19aea36 2026-07-17 bluesky: rich-text FACETS — #hashtags + links now clickable (UTF-8 byte-offset aware per docs.bsky.app)
  895. c16d138 2026-07-17 Vendor IG: mark BN Walls 'none found' (no Business-Discovery-readable IG); drop orphan cache entry
  896. 3c65730 2026-07-17 auto-save: 2026-07-17T09:16:00 (1 files) — package-lock.json
  897. 01590c1 2026-07-17 chore: lint (with-open autofix), refactor (none needed), v1.3.0 → v1.3.1 (session close)
  898. 959a2f0 2026-07-17 Vendor IG Reporting: wire never-expiring page token, page-token discovery, standalone refresh CLI; populate 33/34 vendors
  899. b69f993 2026-07-17 MCC Clients: server-side notes store so notes sync across devices
  900. 8738173 2026-07-17 deploy: exclude live-authoritative runtime data (outbox/tokens/pages/assets) from rsync — deploys were clobbering the live Meta token, staged posts, and UI-added assets
  901. 2888aa4 2026-07-17 board UX: add 'Clear staged' — dismisses stale staged/pending/failed cards (keeps posted history) via new POST /api/channels/outbox/clear; Compose links to Composer
  902. 075ec0c 2026-07-17 Vendor IG Reporting: render last 3 posts inline per vendor (was 10-photo grid)
  903. 922c32f 2026-07-17 clients panel: chip clicks open target in a right-side drawer (website embeds live; LinkedIn/IG show one-click card since they block framing)
  904. 2aac093 2026-07-17 MCC Clients: per-contact notes field below each firm card
  905. 30afe18 2026-07-17 MCC Clients: show full address + phone + real domain + best contact/follow per firm
  906. 7877a92 2026-07-17 composer: banner preview respects template aspect-ratio (#2) + warns when no asset selected (#3) — contrarian findings. Font-fail finding (#1) verified PHANTOM (allow-same-origin loads fonts), dropped.
  907. 01d65e1 2026-07-17 composer: Banners tab renders a LIVE banner preview (real /api/layouts/render HTML in the middle zone) instead of a dead deep-link
  908. a4a92b1 2026-07-17 layouts: fix malformed placeholder SKUs — DW-GL-001 → DWGL-100001 (real DW format DW<code>-######)
  909. 4877837 2026-07-17 5x: contrarian gate resolved — generate+publish now functionally verified end-to-end
  910. f3e5129 2026-07-17 composer: Generate copy now sends kind=instagram (was 'social' → silently degraded to headline). Contrarian catch.
  911. 27b2af2 2026-07-17 5x: composer clean-twice report
  912. 917acca 2026-07-17 5x sweep 4: add inline SVG favicon — kills the app-wide /favicon.ico 404 (last console error)
  913. c5779ce 2026-07-17 5x sweep 2: composer drops broken asset thumbnails (dead URLs no longer 404-spam the console or show broken tiles)
  914. 8b2fd01 2026-07-16 composer: new central board — combine asset/banner + copy → publish to all connected socials at once
  915. 5e38c36 2026-07-16 clients panel: one-click 'Copy not-actioned emails' (respects search+filters, skips already-actioned)
  916. 05fccc4 2026-07-16 clients panel: 'not actioned' filter + LinkedIn/Instagram actioned timestamp columns in CSV export
  917. 88eb92d 2026-07-16 clients panel: inline LinkedIn/Instagram Follow chips under each name + date-time stamp on Follow/message click (persisted per contact/channel)
  918. bb5f304 2026-07-16 docs: IG fleet connect checklist (35 live + convert/link steps for the rest)
  919. bec82b0 2026-07-16 channels: add /ig-audit — enumerate ALL Instagram accounts (page-linked + business owned/client), not just the 34 page-linked
  920. a8a2166 2026-07-16 auto-save: 2026-07-16T16:43:46 (1 files) — package-lock.json
  921. 25362f4 2026-07-16 chore: lint, refactor, v1.3.0 (session close)
  922. 1473c68 2026-07-16 auto-save: 2026-07-16T12:13:12 (1 files) — public/data/clients-manifest.json
  923. 5723126 2026-07-16 clients panel: coverage summary (contacts/emails/IG/LinkedIn across all groups); manifest carries per-group counts
  924. b1d1fc7 2026-07-16 clients panel: dedup + field-merge in All Prospects (LA groups overlap; keeps richest contact record)
  925. d544ba1 2026-07-16 clients panel: merged ★ All Prospects group (search/sort/filter/export across all ~5.9k firms; each tagged by city)
  926. 63885bc 2026-07-16 clients panel: quick filters (email/IG/LinkedIn/uncontacted), Copy-all-emails, IG+LinkedIn count pills, density toggle (completes sort+density rule)
  927. d885131 2026-07-16 auto-save: 2026-07-16T11:43:05 (1 files) — public/data/clients-manifest.json
  928. 1a67441 2026-07-16 clients panel: search across ALL fields + sort dropdown (name/city/state/has-email/IG/LinkedIn), persisted
  929. e0ae6f5 2026-07-16 clients: browser+local-model contact enrichment (direct Instagram/LinkedIn + email gap-fill)
  930. ad37a60 2026-07-16 refresh-clients.sh: read CSVs from project data/sources (launchd can't read ~/Downloads — TCC), nullglob rsync
  931. 87dc441 2026-07-16 calendars: decouple launched layer so it stays live where bulk_fivefield_worklist is absent (Kamatera)
  932. c1ee3c8 2026-07-16 clients panel: per-group CSV export (respects filter; includes emails + LinkedIn/IG URLs; local download, not CC)
  933. b50489a 2026-07-16 refresh-clients.sh: mkdir lock (macOS has no flock)
  934. 09230f0 2026-07-16 refresh-clients.sh: pin PATH for launchd (node/python/homebrew)
  935. 2ba021c 2026-07-16 register clients module in registry so the panel mounts in the nav
  936. 0ed9d95 2026-07-16 clients panel: FM client DB (43k) + CSV prospect groups, LinkedIn+Instagram discovery
  937. bfbe222 2026-07-16 followlist: add build:followlist refresh script + CRCP broker section
  938. e347c43 2026-07-16 linkedin panel: add Follow list mode (ported from li-clicklist.html)
  939. 063dc28 2026-07-16 All Calendars: add Launched layer — already-live products on their launch date, own modal, v1.2.0
  940. d28f0d1 2026-07-16 PR naturals mailer: SISAL search link to page 1 (verified 1002 results, sisal SKUs on top)
  941. b3300df 2026-07-16 PR naturals mailer: point SISAL tile at sisal search (page 5), keep pr-naturals UTMs
  942. f2866e6 2026-07-16 chore: harden calendars module (pool error log, load() try/catch, fieldvis merge), v1.1.0 (session close)
  943. a83ad8f 2026-07-15 Place All Calendars in the Planning nav group (next to Marketing Calendar)
  944. b93e4e1 2026-07-15 Untrack regenerable 13MB activation snapshot (gitignored — was committed by add -A)
  945. c3e1ea5 2026-07-15 All Calendars: front-end panel (facet rail + multi-layer month grid + drag reschedule)
  946. bd25186 2026-07-15 channels: resolve IG per-page (bulk field dead) + add /meta-token paste-ingest route to bypass blocked OAuth redirect
  947. fea8d92 2026-07-15 All Calendars module: backend (activation projection + shopify enrichment + marketing/campaign overlays)
  948. 81c03cf 2026-07-15 channels: Meta connect now upgrades short→long-lived token + re-caches all 80 Pages so the whole IG fleet comes back permanent (not 1-hour)
  949. 9ef59f0 2026-07-15 Add deploy/apply-cutover.sh — paste-safe one-command nginx cutover/restore (backup+install+test+reload+verify)
  950. 4a03044 2026-07-15 accounts panel: use live Meta token-health so a dead token flips to needs-creds instead of showing green
  951. a26137e 2026-07-15 Fix staged vhost: MCC front door + public /reels/*.mp4 + /privacy + /terms passthroughs to reels app (:9848) — restores media/legal fetch after the domain flipped to the MCC without them
  952. 49dbc5c 2026-07-15 chore: v1.0.2 (session close — PR naturals draft iterations)
  953. eb09669 2026-07-15 Stage DW-marketing consolidation (DTD verdict A): nginx vhost swap → MCC on DW domain + agentabrams 301 + CUTOVER runbook (staged, not applied)
  954. 98f32bf 2026-07-15 PR naturals v3 design: uniform 620x620 tiles (grasscloth source was 527px, CDN can't upscale -> swapped to full-size original)
  955. e98234f 2026-07-15 texture tiles → vendor+tag collection links (browser-verified via CTA agent)
  956. a71c5e9 2026-07-15 naturals mailer: swap hero to Bellagio Weave roomset (pattern repeat issue on flat swatch)
  957. a7aea85 2026-07-15 PR naturals v3 — logo masthead, 888 phone, appointment banner, uniform square tiles, minimal footer
  958. 1a54554 2026-07-15 PR naturals v2 mailer — 6 material categories from the July drop, dark editorial layout
  959. 778a375 2026-07-15 Phillipe Romano naturals campaign draft — Bellagio roomset hero + 6-series grid
  960. b904d73 2026-07-15 grasscloth campaign draft — Zoffany Kensington hero + Designtex colorway grid
  961. 0f129eb 2026-07-15 add reels module — embed dw-marketing-reels console via same-origin proxy (Range passthrough for video seek); add fix-connie-creds.sh
  962. 0f46bdd 2026-07-15 auto-save: 2026-07-15T11:36:14 (1 files) — scripts/fix-connie-creds.sh
  963. f2636e3 2026-07-15 channels: Instagram-account selector — pick 1-to-all IG accounts
  964. df1e623 2026-07-14 chore: lint fixes (jget r.ok guard, .env value quoting per unquoted-sourcing rule, comment typo), v1.0.1 (session close)
  965. f872cf0 2026-07-14 channels: three-valued is_valid guard so a Graph rate-limit/error can't false-flip a valid Meta token to needsReconnect
  966. c60d8ff 2026-07-14 Expand Sounds catalog: +6 royalty-free libraries & SFX, live TikTok trending-sounds link, Grateful Dead essential-eras section (30 sources)
  967. 8bb0bc5 2026-07-14 Add Sounds & Assets panel: curated free/royalty-free music + TikTok assets, brand-safety badged (Grateful Dead archive listen-only)
  968. fa0d1c1 2026-07-14 deploy: ship Accounts panel to Kamatera; fix .deploy.conf HEALTH_URL to :9662 (was pointing at vendor-scrapers on 9661)
  969. 3b13d2e 2026-07-14 Add Accounts panel: Amazon-style social-account filter rail with connection status + inline how-to-fix credentials
  970. 897ebac 2026-07-03 chore: macstudio3 migration — reconcile from mac2 + repoint paths (stevestudio2→macstudio3, node/npm/npx→/opt/homebrew)
  971. 67b4c0c 2026-06-30 auto-save: 2026-06-30T12:40:24 (1 files) — scripts/cc-agent-discover.js
  972. fa747ed 2026-06-24 deploy.conf: fix MCC health URL to :9661 + guard gitignored follow-counts data from rsync --delete
  973. 90978c9 2026-06-24 Add Followers/Following tab to DW Marketing Command Center
  974. eac09ca 2026-06-24 CC module: proxy Connie cc-agent when no local CTCT token (DTD verdict C)
  975. 88a51a7 2026-06-22 Social: real approval pipeline + instant posting + truthful live/simulated UX
  976. fe2afd8 2026-06-17 meta-token-health: fix dead George alert URL (HTTPS flip 2026-06-17)
  977. de6eb5f 2026-06-16 Security: remove browser-shipped basic-auth password from client boot-error (was the now-rotated DWMarketing2026!) — gitleaks-flagged browser-shipped cred in public/app.js
  978. ad0fc2a 2026-06-16 Add META token health canary (Council #4): GET /me liveness + expiry warn + heartbeat stamp; alerts CNCP+George on expiry (the silent failure that darkened the Vendor IG panel)
  979. 938df84 2026-06-16 Code-health: gitignore *.bak + runtime social-queue.json (untrack it), add rel=noopener to activation-page link
  980. 78312e8 2026-06-16 Vendor IG roster: add web-confirmed @schumacher1889 (was 'no IG found'); 34/38 now have IG
  981. 96afa0a 2026-06-16 Vendor IG roster: add last-10-posts grid per vendor via Instagram Business Discovery (server-side, cached, graceful degrade on expired token)
  982. 8e94008 2026-06-15 Channels: add Bluesky (live, app-password) + Threads (review-gated) publishers; board shows them as real columns
  983. e76aecd 2026-06-15 Add Meta App Review prep doc (System-User route + full review steps, paste-ready justifications)
  984. 5435736 2026-06-15 Channels: add Facebook/Instagram Page picker — select WHICH of your 80 Pages (+ 11 linked IG) to post to.
  985. a32a889 2026-06-15 Add Streams Board — Hootsuite-style column view (social channels + Constant Contact)
  986. 535807b 2026-06-15 MCC polish: publish-time caveats for half-wired channels (TikTok private-only, YouTube uploads-not-wired) on chips + confirm dialog, created date+time + sort on Channels outbox, float CC import+ranked-opens above mock live cards
  987. 9968bde 2026-06-14 MCC should-fix sweep: unify Kravet block (lib/kravet.js, server+client single source, caption/name-aware, button disabled on block), add CA §17529.5 subject/from screening, origin-absolute fetches in assets+CC panels, align OAUTH_REDIRECT_BASE default, add 5th LinkedIn template
  988. da76726 2026-06-14 MCC officer-review fixes: fail-closed auth (remove hardcoded password default), HttpOnly/Secure cookie, gitignore runtime-state files, fix Wallpaper->Wallcovering leak
  989. 4715bb6 2026-06-14 MCC QA fixes: re-render #3 (Anemone Blush, was off-theme) + #5 (statement mural, was tiled); soften mural copy to drop false 'no repeats' claim
  990. 2a5b559 2026-06-14 Channels: bake the Meta 4-step setup doc into the Meta card (Ads-app gotcha + Other/Business → Instagram+FB Login products → App Review Standard Access → then mint token); Meta parked
  991. 744335b 2026-06-14 MCC: approve + schedule the 8 launch social posts (Bold Blush 6/15-16, Custom Mural 6/17-18); LinkedIn drafts marked ready (manual)
  992. e0f2be0 2026-06-14 MCC: swap in AI room-renders for the 8 launch drafts (Gemini 2.5 flash image, hosted on product galleries); drafts stay unapproved/unscheduled
  993. eaee696 2026-06-14 MCC: attach on-theme product imagery to the 8 staged Bold Blush + Custom Mural drafts (Shopify CDN URLs, Meta-fetchable)
  994. 5d49b72 2026-06-14 MCC: stage Bold Blush + Custom Mural launch posts — 8 social drafts (IG/Pinterest/TikTok/FB) + 2 LinkedIn trade drafts, all unapproved/unscheduled (scheduler-safe), awaiting imagery + Meta token
  995. 54fd8bb 2026-06-13 CC Phase 1 (DTD verdict A): CSV import (contacts/campaigns/opens, no token) + ranked opens (campaigns by open-rate, most-engaged contacts) — normalized ctct-store, same shape the live v3 API will write
  996. 0c63f9f 2026-06-13 Image Bank: finish Repost UI — gated modal (image preview, required @credit, rights-confirm + #ad, wallpaper-ban) → stages via /repost, never auto-posts
  997. 923cb9c 2026-06-13 LinkedIn module (DTD verdict A): draft-first composer w/ DW B2B templates + char counter + wallpaper word-ban + copy/deep-link manual post + saved drafts; gated official-API publish (never auto-fires, Phase 2 token) — nav under Social Media
  998. c04d2b7 2026-06-13 Image Bank: gated STAGE-ONLY /repost endpoint (rights-confirm + Kravet-block + auto-credit + wallpaper-word-ban + #ad) + /reposts list — UI button pending
  999. 961a1bb 2026-06-13 Image Bank: Instagram ingest — public-permalink og:image grab (no token, tagged uncleared) + our/vendor IG roster (33 accounts) with regram allow/review/block (Kravet-family blocked) + instagram source filter
  1000. 267a4bb 2026-06-13 Asset Library = Image Bank: add GDrive (folder rclone-import + file share-link), Harvest-from-campaign-HTML, Constant Contact library (Phase 2 gated) ingesters + sort + source filter
  1001. bdfc352 2026-06-13 Channels: self-serve Activate page — paste app creds in-browser (written to .env, never echoed), copy redirect URIs, portal links, one-click Connect; /setup + guarded /config endpoints
  1002. 2b26633 2026-06-13 MCC shell: fetch against location.origin so embedded-URL credentials don't throw 'URL includes credentials'
  1003. c79449d 2026-06-13 MCC shell: fix auth-cookie so fetch() works (was hanging on Loading), grouped hamburger nav w/ Social Media leading, hardened boot + error states
  1004. c6baf4f 2026-06-12 social: add validated meta-go-live.sh (Graph-verify token → deploy to Kamatera → confirm backend:meta); gitignore meta-creds.env
  1005. 0f9d596 2026-06-12 social: add free Meta Graph (IG+FB) publish backend behind ayrsharePost abstraction
  1006. 751cc47 2026-06-12 gitignore transient social-publish-log.json
  1007. cfea2d7 2026-06-12 social: Ayrshare live-publish + scheduler scaffold (gated, off by default)
  1008. a905372 2026-06-10 backsync: pull Yuri's 10 CRM features from prod (RFM, send-times, ab-tests, profiles, segment-perf, templates, journeys, browse-abandon, copy-scoring, playbook) — Mac2 source now matches live 18-panel build
  1009. 57a572a 2026-06-10 vendors module: prefer headless-verified follower counts + verifiedLive flag; BN Walls recheck
  1010. 1cc1006 2026-06-10 Vendor IG: headless-verified follower counts (33 live, real numbers) — Rebel Walls 361K, Phillip Jeffries 527K, exact small-account figures
  1011. a57c5b8 2026-06-10 Channels OAuth connect machinery: per-platform connect/callback (YouTube/Google, TikTok, Meta FB+IG) + token store + one-click Connect buttons; reads app client creds from env
  1012. b546fbd 2026-06-10 Copy panel: Gemini path (preferred over dead Anthropic) → real AI copy via valid Gemini key
  1013. a85f5b2 2026-06-10 Channels publishing engine: FB/IG/TikTok/YouTube adapters (real Graph/TikTok API behind credential gates) + Connections+Composer panel + staged outbox until accounts authorized. The posting-machine spine.
  1014. dc913ce 2026-06-10 Vendor IG Reporting panel: DW + 37 vendor Instagram accounts roster (33 found, ~4.5M combined reach), sortable, for social/competitive reporting
  1015. d54875f 2026-06-10 3 more panels (parallel agents): Performance dashboard (KPIs+SVG charts+GA4 path), Social Scheduler (queue board, gated publish), Audience Segments (RFM-ready rule builder) — 8 panels total
  1016. 7207cc9 2026-06-10 assets: full-catalog search via Shopify predictive search (suggest.json)
  1017. 0696349 2026-06-10 assets: image Asset Library module (upload / URL / live DW-catalog pull) + Layouts picker
  1018. 0f49e0b 2026-06-10 load .env file in server.js so PORT/creds come from file (fixes prod EADDRINUSE on default 9661)
  1019. 4b6184a 2026-06-10 deploy config → port 9662 (9660/9661 taken on Kamatera)
  1020. e8363ce 2026-06-10 4 panels built (parallel agents): Constant Contact (mock+gated sends), Marketing Calendar, Suggested Copy, On-Demand Layouts — all mount + smoke-tested
  1021. de56576 2026-06-10 scaffold: modular marketing command center shell (express, basic-auth, panel loader, module contract)

Authors

Agents used

  • secrets-manager1

Skills used

  • /ig-activity681
  • /vendor-linkedin-cache32
  • /data14
  • /clients-manifest12
  • /out9
  • /channels9
  • /publish9
  • /claude8
  • /code8
  • /quickpost8
  • /assets6
  • /index6
  • /rec5
  • /mcc-streamline-promo5
  • /feed5
  • /page4
  • /reels4
  • /catch4
  • /fbcdn4
  • /cache4
  • /pages4
  • /panels4
  • /com3
  • /campaign-drafts3
  • /video3
  • /render3
  • /social3
  • /calendar3
  • /accounts3
  • /today3

Creative ideas + design notes

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

933b121 · 2026-09-26 · ig-activity: use shared ordered Norma auth (IG_AGENT_AUTH -> agent .env -> NORMA_IG_PASS) instead of stale NORMA_IG_PASS (TK-12342)
- lib/norma-auth.js: extract follow-counts' ordered-credential helper + normaFetch (401/403 falls through)
- follow-counts now imports the shared helper (no behavior change)
- ig-activity delete-status/delete use normaFetch; auth rejection now 502 ok:false, not 200 ok:true
- oc-status timeout 8s -> 20s (openclaw probe takes 5-14s)
- scripts/norma-auth-check.js: read-only check, exit 1 on auth fail, 2 unreachable

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GEE4jWy9RBmz5QnR2xcvno
af0204b · 2026-09-26 · TK-11856 rc-propagation (RSYNC): mcc-clients-refresh propagates extract/crawl/enrich/manifest/rsync rc
Exit-code ONLY, no behavior change (Steve ruling 2026-09-26 Q1/Q2): every step still runs as
before; the wrapper now exits with the first nonzero rc of its side-effecting step(s) instead of
swallowing it, so cron-fire-canary's exit corroboration can see a failed run. No heartbeat file added.
Revert: git -C /Users/macstudio3/Projects/marketing-command-center revert <this sha>

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YaiWjfgEuKQLTb5cdDreS3
f88c44a · 2026-09-26 · follow-counts: read Norma auth from secrets-manager IG_AGENT_AUTH first, fall through on 401/403 to instagram-agent .env then NORMA_IG_PASS (TK-12327)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RZxSBvMaQ2irhbKdpmgRPj
8377f04 · 2026-09-26 · follow-counts: write no row on failure + exit 2 (no SIMULATED nulls, TK-11431 class); timestamp every attempt; job 06:05->07:05 clear of 5am fleet restart (TK-12008)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C29dMTKDo1Ff3goeJgr2XY
bd903cd · 2026-09-25 · follow-counts: read Norma instagram-agent .env for Basic-auth (stale NORMA_IG_PASS caused 403 'Invalid credentials'); retry boot-race connection errors (TK-12008)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01D7LB6rCwpA7ubJTqYzqXEX
19f7998 · 2026-09-04 · snapshot before restart: preserve in-flight work
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011gbmuMHgCLDEPM4TpfAr4G
da0f1f8 · 2026-09-03 · Add separate Showroom picker area to Make-a-post so showroom-only lines (PJ) stay out of the general pool with correct language
Backend (modules/assets/index.js): read the canonical showroom-vendors.json at
runtime (60s memo, default [Phillip Jeffries]); carry vendor + a showroom flag
through both catalog maps; add GET /api/assets/showroom that surfaces showroom
lines via on-site search (they are absent from browse by design); include the
canonical vendor list in catalog responses. Keyed off the list, never a
hardcoded name.

Frontend (quickpost.html/js): new 'Showroom' filter chip; showroom assets are
EXCLUDED from All ideas / DW picks and shown ONLY under Showroom; each showroom
card carries a Showroom pill; a persistent correct-language reminder banner
(invite to the DW showroom / book a visit -- never shop now / buy online) shows
when the Showroom area is active or a showroom picture is selected, and again in
the review step. Grid/List/Details + density + click-to-select preserved.

Verified headless: 18/18 checks (no PJ under All ideas/DW picks; Showroom chip
shows badged PJ cards + banner; 3 views + density; selection; zero console errors).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018GDFjK9hKdrY7ExEupvWGr
64b7fcf · 2026-09-03 · quickpost picker: inline nav-agent controls — density slider + Grid/List/Details(kv) views
The 'Make a post' picture picker was a fixed cramped grid with no way to
space out or re-view the images. Add an inline control row (matching the
wizard's kid-simple styling): a Grid/List/Details view toggle and a density
slider that drives --cols on the grid so cards spread out. Details is the
nav-agent kv-list third view (thumb + name + KIND/TAGS chips). Selection
works in every view and persists across view/density re-renders; choices
persist to localStorage. Verified headless across all 3 views, density,
selection, persistence — zero console errors.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018GDFjK9hKdrY7ExEupvWGr
5999977 · 2026-09-01 · new-arrivals-reel: distinct-colorway heroes (URL-keyed cache + byte-distinct assert) + SKU lower-third
Fixes the two v1 bugs: (1) index-keyed image cache reused shared/wrong-colorway
heroes — now reads correct_image_url, keys the cache by URL hash, and asserts
all 10 heroes are byte-distinct before rendering; (2) adds a SKU lower-third
line (DW/Shopify SKU primary in cream + Sanderson article secondary). Reads
/tmp/na10-verified.json. $0 local (ffmpeg + ImageMagick).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
d28190e · 2026-09-01 · Add New Arrivals 9:16 short-form video builder (local, $0)
Reusable ffmpeg+ImageMagick reel generator: title card -> per-product
editorial beats (framed swatch + DW wordmark / New Arrival lower-third)
-> CTA card, over a locally-synthesized ambient music bed. TikTok/Reels/
Shorts ready (1080x1920). No paid API, no publish.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
092a26c · 2026-08-30 · Add --dry-run readiness self-test to calendar snapshot publisher
Regenerate + full validation gate, then stop before the rsync/ssh publish +
cache-bust so anyone can re-prove the job is healthy without touching Kamatera
prod. Additive, gated behind --dry-run/--check/DRY_RUN=1; the launchd plist
passes no args so the scheduled 6:30 PT run is unaffected. TK-10893.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
7186df0 · 2026-08-26 · Composer: 'Build this reel' handoff to Reel Studio + fix reels-proxy POST body
Finish the create flow's last link — a composed photo + song + caption now actually
RENDERS to a reel. The composer's photo+song+reel hint became a 'Build this reel ->' button
that POSTs the recipe to /api/reels/ui/api/build-photo-reel (proxied to the reels app) and
opens Reel Studio to watch the render.

Fix (found in verification): the reels reverse-proxy did req.pipe(up), but express.json had
ALREADY consumed the POST body upstream — so every proxied POST forwarded an EMPTY body and
the reel endpoint 400'd on a valid request. Now re-serializes the parsed body + sets
Content-Length; GET/video streams still pipe raw.

Verified: proxied POST → 202 (body arrives); the button appears on photo+song+Reel; a real
mp4 with the song comes out the far end. Note: render only runs on the studio host
(ALLOW_BUILD=1); prod serves reels, so it reports that honestly.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
cd7a2c5 · 2026-08-25 · Add durable regenerate+publish job for calendarhub activation snapshot
Timeline activation layer froze at 2026-08-16 (~a week) because prod (Kamatera)
can't project bulk_fivefield_worklist (Mac2-only, split-ownership) and nothing
regenerated+redeployed the snapshot file. This Mac2 job regenerates from the live
worklist, HARD-validates (activation_live + count floor + window anchored to
today+1), atomically publishes the single file to Kamatera, and busts prod cache.
launchd plist staged but NOT installed (scheduled-job install is gated).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
55e8f26 · 2026-08-25 · Board: show format + song chips on staged social cards
Close the create-flow loop — a post composed as a Reel with a song now shows its
🎬 Reel / 📱 Post / 📖 Story / 🎠 Carousel format + 🎵 song as chips on the Streams
Pipeline, so 'assemble → stage → review' is visible instead of the recipe vanishing
into the outbox JSON. Reads the format/song the composer now persists on each
outbox entry; additive (cards without them are unchanged).

Verified: staged reel+song → board shows 🎬 Reel + 🎵 song chips; no page errors.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
3a6c04f · 2026-08-25 · Nav: ⌘K command palette + regroup + relabels + collapsible groups
Make the Command Center easy to navigate (Steve: 'is the UI easy to navigate?').
Design merged from two parallel review lenses (ui-ux-designer + general), then
contrarian-hardened.

- ⌘K / Ctrl-K command palette (public/cmd-palette.js) — fuzzy jump to any of 33
  panels, ↑↓ wrap + Enter, matches title AND group, includes hidden/merged panels
  with a 'via Host' breadcrumb; a 'Search panels…' trigger in the sidebar
- Regroup (app.js GROUPS): Calendar · Compose · Plan · Library · Insights ·
  Accounts&Email — un-strands 'IG Posts' from the dead 'More' bucket into Insights
- TITLE_OVERRIDES (rail label only, never touches the module a peer session owns):
  vendors→'IG Account Health' (it now holds the Owned·DW Fleet view), board→'Streams
  Pipeline', layouts→'Layouts'
- Collapsible nav groups, expanded by default, persisted (localStorage mcc_nav_collapsed)

Contrarian fixes (Cody, FIX FIRST):
- palette z-index 2001→10001 so it wins over the 9999 clients drawer / amplify
  popover / quickpost toast
- route() highlights a hidden panel's HOST nav item (was leaving the sidebar blank)
- Tab now dismisses+restores focus (ARIA combobox) instead of swallowing the key
- '/' shortcut only fires from a non-interactive context

Verified: palette opens/filters/navigates, Ctrl+K + Tab + arrows, no 'More' orphan,
relabels render, collapse persists, hidden-panel nav highlights host, z-index 10001,
no page errors.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
3c85e99 · 2026-08-25 · Composer: one create flow — photo → details → song → decide reel-or-what
Turn the Composer into the single 'pick a photo, add details, add a song, decide
the format' flow Steve wants, instead of hopping between Assets / Sounds / Reels /
Social panels.
- Format selector (📱 Feed post / 🎬 Reel / 📖 Story / 🎠 Carousel) in the assembly column
- Song picker sourced from the Sounds library (/api/sounds/catalog, 30 tracks) —
  search + in-place preview + selected-track chip with remove
- Smart coupling: adding a song auto-switches format→Reel (a photo can't carry audio
  as a feed post); picking a reel VIDEO also sets format→Reel
- Contextual hint: a still photo + song = a video → assemble here, then 'build in
  Reel Studio' (#reels) which renders the photo over the track
- format + song carried through /api/channels/publish and persisted on the outbox
  entry (additive, like handles) so the recipe survives for review/render

Verified: 4 format pills, 30-track picker, song→auto-Reel, chip renders; backend
round-trip persists format=reel + song on the outbox; no page errors.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
88aa02b · 2026-08-25 · Owned·DW Fleet: apply contrarian fixes (sort actionability + NaN/URL guards)
Cody the Contrarian red-team caught 3 real issues:
- Attention sort was backwards: a DEAD (dormant) account that was also repetitive
  outranked a LIVE account spamming the same product right now. Re-scored by
  ACTIONABILITY — active-repetitive(4) > went-dark-with-history(3) > slowing(2) >
  never-posted/no-creds(1) > healthy(0). Now the fixable-right-now accounts top
  the list, not the structurally-dead ones.
- repetitive now requires !dormant (a dead account repeating old posts is not
  actionable) — also removes the noisy '↻ same' badge from dormant rows.
- NaN guard: an unparseable ledger ts no longer yields daysOld=NaN (which read as
  'healthy' and broke the sort comparator) — treated as no-date → dormant.
- permalink href now rejects non-http(s) URIs (javascript:/data:) defensively.
- recent sort reuses the guarded daysOld instead of raw Date math.

Verified: computed vs rendered attention order match (scores 4,2,1,0 monotonic);
active-repetitive tops the list; 0 dormant rows show repetitive; 0 unsafe hrefs;
no page errors.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
9690867 · 2026-08-25 · Owned·DW Fleet: add 7-day cadence + 'slowing' signal
Next refinement on the health view: distinguish 'posting daily' from 'posted once
10 days ago' among the non-dormant accounts.
- week7: posts in the last 7 days, shown per account as '· N/7d'
- 🐢 slowing flag (blue): non-dormant but ≤1 post in the last 7 days — catches
  accounts trailing off BEFORE they cross the 14-day dormant line
- summary now leads with 'active this week' + a slowing count
- attention-sort weighting: dormant(3) > repetitive(2) > slowing(1)

Verified: summary '27/35 active this week · 6 dormant · 2 slowing · 2 repetitive';
/7d recency renders; no page errors.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
f91859a · 2026-08-25 · Refine Owned·DW Fleet: surface dormant + repetition health signals + sort
Turn the owned-account posts view from a flat alpha list into an at-a-glance health
read, operationalizing the two real problems the data showed:
- 💤 dormant flag: 0 posts or none in >14 days (the 6 no-creds accounts, plus any
  that go quiet); the row is tinted so it stands out
- ↻ N× same flag: ≥4 of the last 6 posts share one product title (catches
  @asseeninhotels posting the same SKU 6×, @suedewallpaper 4×)
- summary line: 'X/35 posting · Y dormant · Z repetitive'
- per-account recency ('N posts · Xd ago')
- sort control (Needs attention [default] / Recent activity / Most posts / A→Z),
  localStorage-persisted per the standing sort rule

Verified: summary 29/35 · 6 dormant · 2 repetitive; flags render; attention-sort puts
flagged accounts first; re-sort works; no page errors.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
6b6da55 · 2026-08-25 · Add "Make it ours" DW-original creative system to #vendors amplify
Per-post "✦ Make it ours" button transforms a vendor pattern into a genuinely
DW-original branded asset (never reposts the vendor raw photo). Treatment 1
"Branded card" ($0, client Canvas compositor -> 1080x1080 + 1080x1350, DW wordmark
+ hairline frame + availability strip + pattern name). Treatment 2 "Room setting"
reuses the existing DW room-setting-generator pipeline (:8106, gemini-2.5-flash-image
~$0.03/render, cost shown before generating). Every asset runs the settlement
post-gen-vision gate (canonical checker port, fail-safe -> NEEDS_REVIEW) before save;
BLOCK is not saved. Restricted (never-front-facing) brands get no creative controls.
Assets save to public/amp-assets/ (gitignored + rsync-excluded) and REPLACE the raw
vendor photo in the staged draft (draft.dwAsset). No IG/Meta publish call anywhere;
engine-queue/channels-outbox/meta-pages untouched. Same-origin img-proxy (allowlisted)
lets the Canvas compositor read CORS-tainted IG images.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
c12730b · 2026-08-25 · Show last 6 posts per owned account in the #vendors Owned·DW Fleet section
The owned-fleet section only showed name + link. Now each of the 35 owned accounts
renders its last 6 Instagram posts inline (thumb + title + date · type), sourced from
the fleet post ledger (/api/ig-activity/posts — same data as the IG Activity panel),
reusing the existing .ig-li styling the external-vendor rows use. Best-effort: rows
still render if the ledger is unreachable; the 6 no-creds accounts show 'No posts yet'.

Verified: 35 blocks, 170 post rows, 6 empty-states, thumbnails + styling applied, no
page errors.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
37ff9a8 · 2026-08-25 · mcc: credential-safe fetch guard in shell (inoculate root-relative /api/* fetches)
Same creds-in-URL trap as the reels fix: opening the command center with
credentials in the URL poisons document.baseURI, so root-relative fetches
(/api/social/*, /api/calendar/*, /api/templates/*, /api/segments, /api/send-times)
throw synchronously. location.origin-prefixed calls were already safe; this guards
the rest by resolving every non-absolute request URL against the creds-free location.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
7e55f1a · 2026-08-25 · Add per-post "Post from" account selector + "Make unique" per-account captions to #vendors amplify
Feature A: compact "Post from ▾" popover (searchable checkbox list of the 35
owned DW IG accounts, All/None), count badge, selection persisted in
localStorage keyed by a stable post id (permalink, djb2-hash fallback), rebuilt
on render. Body-appended popover rides a document-level delegated listener; the
in-row triggers ride the existing #vend-rows listener — both survive re-render.

Feature B: "✦ Make unique" generates a deterministic unique caption per selected
account (seeded by postId+handle so stable across renders, distinct per account,
different per post) — same photo, varied hook/emoji/hashtag-order/sentence-order,
always vendor credit + DW CTA with the vendor-amplify UTM link. Editable textarea
per account (edits persisted on input), per-account copy, regenerate.

"Stage drafts" POSTs to a NEW data/vendor-amplify-drafts.json via a small
validated, atomic-write endpoint — never the live engine-queue/channels-outbox/
meta-pages files. No auto-post; publishing stays Steve-gated. Generation is $0
local (deterministic client-side engine, no API, no network).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
e2c5740 · 2026-08-25 · Add per-post vendor-amplify controls (X Post / Copy kit / Amplify) to #vendors panel
Each Instagram post in postList now renders a compact right-aligned control row
(sibling of the post anchor inside an .ig-item wrapper — valid HTML, no <button>
nested in the <a>): 𝕏 Post opens the X composer with a DW visit link, ⧉ Copy kit
copies a paste-ready caption block (clipboard API -> textarea/execCommand ->
window.prompt fallback, never silently no-ops), ⚡ Amplify does both. Raw kit text
and X URL are stored in a per-post ampKits map (keyed by data-amp-id) so clipboard
text pastes as clean human text, not HTML entities. A single delegated click
listener bound to #vend-rows survives every re-render. Campaign-level UTM only
(utm_campaign=vendor-amplify, utm_medium=social, utm_source=x|copy).
107e329 · 2026-08-25 · Make the IG account pickers real: persist handle server-side + guard follow-counts
Contrarian (Cody) red-team found the composer/social/quickpost account pickers
were UI-only — the selected account was sent client-side but every backend built
its persisted entry WITHOUT the handle, so the selection was silently dropped.
Fix: persist it additively (gated publish behavior untouched).
- modules/social: entry now carries handle (@ stripped) → the card renders @handle
- modules/quickpost: draft + publish entries carry handle
- modules/channels: /publish records handles[] on the outbox entry (live + staged)
- board.js: IG stream filter now matches the handles[] array, not just singular
- follow-counts.js: guard window.MCC_ACCOUNTS so a failed helper load degrades to
  the /accounts rows instead of throwing and killing the panel

Verified: POST→read-back shows handle persisted on all three; 7/7 browser smoke
green, no page errors.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
093bb57 · 2026-08-25 · Embed all 35 DW-owned Instagram accounts across every social/account panel
Add one canonical accounts source (data/dw-ig-accounts.json, built from Norma's
registry by scripts/build-dw-accounts.js) served at GET /api/dw-accounts and read
by a shared public/dw-accounts.js helper. Retrofit the 9 social/account panels
(ig-activity, accounts, channels, composer, social, follow-counts, quickpost,
vendors, board) to union the canonical 35 with each panel's dynamic data so every
owned account shows everywhere — not just the ones with posts/data on a surface.
No new nav panel (endpoint mounts directly like clients-notes).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
059034e · 2026-08-25 · MCC IG re-pull: hourly 6am-6pm cron cadence (was daily), board staleness threshold 14h
Change the ig-media-repull job from daily 06:40 to hourly 06:00-18:00 (0 6-18 * * *)
so published-IG board thumbnails stay durable through the workday and refresh again
each morning at 6am. Board health-strip staleness threshold 36h->14h (tolerates the
intended 18:00->06:00 overnight sleep; errors still show red). Doc carries the exact
apply + revert crontab one-liners for Kamatera.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
ee1e924 · 2026-08-16 · modules: hard-timeout all remaining unguarded external fetches
Node's global fetch has no default timeout, so a stalled upstream would hang
the awaiting request forever. Added lib/fetch-timeout.js (shared AbortController
wrapper, 45s, MCC_FETCH_TIMEOUT_MS override) and routed the last 5 unguarded
external calls through it:
  playbook      → Gemini generateContent
  performance   → GA4 Data API runReport
  follow-counts → Norma :9810 monitor
  profiles      → Constant Contact v3
  segments      → Constant Contact v3
Abort throws an error each caller's existing try/catch already handles (error
surface / mock fallback). Completes the fetch-timeout sweep started in engine
+ copy. (copy keeps its earlier local helper; identical behavior.)
c683e16 · 2026-08-16 · copy: hard-timeout the Anthropic/Gemini fetches (no more infinite hang)
Node's fetch has no default timeout, so a stalled upstream would hang
POST /generate and /score forever, spinning the user's button. Added a
shared fetchWithTimeout (AbortController, 45s, COPY_LLM_TIMEOUT_MS override)
and routed all three external LLM calls through it. Abort throws an
AbortError the existing callers already handle (500 for generate, heuristic
fallback for score). Mirrors the guards engine/llm.js already had.
5869a28 · 2026-08-15 · engine: make GET /today non-blocking + add generation run-lock
GET /api/engine/today would run the full local-LLM caption batch inline
(sequential candidates x qwen3 vision+chat, 45s/90s per-call timeouts), so
the default endpoint blocked for minutes. The panel already dodged this via
?generate=0, but the bare endpoint hung any direct/health caller.

- generate.js: coalesce concurrent generateToday() onto one in-flight run
  (run-lock) + export isGenerating(); prevents parallel batches hammering Ollama.
- index.js /today: default now kicks generation in the background and returns
  current items immediately with {generating}. ?wait=1 keeps the old sync
  behavior; ?generate=0 (panel poll) unchanged.
bed8a93 · 2026-08-12 · tiktok: align OAuth scope to draft-mode (video.upload,user.info.basic) + add DW Marketing app icon asset
Drop video.publish (Direct Post) from the requested TikTok scope — the DW Marketing
app grants only user.info.basic + video.upload (draft mode), so requesting video.publish
would fail OAuth with unauthorized_scope. Draft-mode also fits the human-gated posting
workflow. Adds a generated 1024x1024 on-brand app icon (Chrome-headless render).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
79e1798 · 2026-08-12 · MCC LinkedIn Network Feed: paste-URL curation board (the working populate path) — TK-10504
Paste a LinkedIn post URL -> official LinkedIn embed iframe (video plays inline) +
gated Reshare-from-DW-Page + Download-to-assets (when the public post exposes an
og:video licdn URL). Backend: urnFromUrl parser (activity/ugcPost/share, incl.
url-encoded), best-effort OG enrichment (6s timeout, graceful degrade), curated
store data/linkedin-feed-curated.json (gitignored + rsync-protected). Reuses the
existing gated reshare + licdn-guarded download routes. The experimental openclaw
auto-harvest scaffold stays below, clearly labeled. TOS-clean: no scraping.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1749ce4 · 2026-08-12 · MCC LinkedIn Network Feed: mark EXPERIMENTAL — scrape non-functional vs LinkedIn's current feed (TK-10504)
Per Steve's call: keep the harvester + routes scaffold, relabel the live button
'↻ Refresh (experimental)', add an honest in-panel banner explaining LinkedIn now
serves automation Chrome a stripped feed (hashed classes, no DOM URNs, blob video),
and document the empirical finding in the harvester header. Download-to-assets +
gated Reshare remain functional when a card is present.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
46e18c8 · 2026-08-12 · MCC LinkedIn: Network Feed — openclaw harvest of own feed + gated reshare + download-to-assets
- scripts/linkedin-feed-harvest.mjs: manual openclaw real-Chrome harvest of Steve's
  own LinkedIn home feed -> data/linkedin-feed.json (video posts + progressive mp4
  sources). Login-guarded single-run research aid; never an auto-poster.
- modules/linkedin: GET /feed, POST /feed/harvest(+status), /feed/download
  (licdn-only SSRF guard -> shared Asset Library), /feed/reshare (gated: confirm+
  approved+connected, honest API result).
- panel: third 'Network feed' mode — poster cards, Download to assets, gated
  Reshare from DW Page.

TK-10504. LinkedIn has no feed-read API; reads Steve's logged-in session locally
per his authorization. Deploy to Kamatera is gated.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
37441d3 · 2026-07-30 · fix(linkedin): blank media title default + video-wins when both media refs given (Cody-verified)
- linkedin/index.js: media.title defaults to '' not the literal 'video'/'image' (junk on public posts).
- channels/index.js: postLinkedIn isVideo = !!videoUrl so a video isn't silently dropped when a thumbnail image is also passed.
- NOTE: Cody's 'uploadedPartIds should be uploadPartId' finding was VERIFIED FALSE against LinkedIn's Videos API docs (uploadedPartIds ARE the PUT ETags) — no change made there.
60ffd0e · 2026-07-30 · chore: lint+refactor, fix channels postLinkedIn video routing, vN (session close)
- channels postLinkedIn: route videoUrl → /rest/videos (init+multipart PUT+finalize)
  instead of the images endpoint; add Content-Type octet-stream to image PUT.
  (lint-flagged critical: 'video' in mediaTypes exposed the image-only path.)
- linkedin/index.js: drop dead ETag case-fallback (Fetch headers are case-insensitive).
- version bump.
ef6776b · 2026-07-30 · linkedin(mcc): incorporate native image/video posting into the command center
Port the linkedin-api CLI's media flow (initializeUpload → PUT part(s) →
finalizeUpload → post-with-URN) into the MCC LinkedIn adapter so it posts
text + native image/video (was text-only). /publish accepts {video|image|url}
(local path or http URL, e.g. the reels /reels/<file>.mp4); still fully gated
(confirm+approve+connected). channels POSTABILITY: linkedin mediaTypes now
include video. Verified: staged path returns the media ref, posts nothing
until a token lands.
39fcdef · 2026-07-27 · MCC bluesky: fail loud if image can't embed — never silently post text-only
postBluesky() previously swallowed any image fetch/uploadBlob failure and posted
text-only anyway (embed left undefined), which slips past the route-level text-only
guard (content.mediaUrl was truthy upstream) and violates Steve's 2026-07-17
'DW never posts text-only' rule — silently, on ok:true. Now aborts the post with a
loud error on any fetch/upload failure. Found by /contrarian gating TK-8.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
5d1c41b · 2026-07-22 · chore(mcc): move IG re-pull schedule from Mac2 launchd to Kamatera-local cron
The re-pull's script AND data both live on Kamatera, so a Mac2 launchd job SSHing
in was a needless cross-machine dependency (Mac2 asleep / SSH hiccup at 06:20 would
silently skip it — the exact drift the job exists to prevent). Now a self-contained
root crontab entry on Kamatera (06:40 daily). Removed the Mac2 wrapper + plist;
added scripts/ig-repull-SCHEDULE.md documenting the cron. Verified: cron present,
a manual Kamatera run wrote a fresh healthy status, Mac2 job booted out + gone.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
21be5cc · 2026-07-22 · feat(mcc): board shows IG re-pull health at a glance + Run-now fix button
The daily IG media re-pull (com.steve.mcc-ig-repull) had no surface — you couldn't
see if it was running or stale. Now the Streams Board shows a health strip above
the columns: green/amber/red dot + last-run time + result, and a "Run now" button.

- ig-media-repull.js: writes data/ig-repull-status.json every run (ranAt/mode/
  recovered/graphErr/downloadDead/unrecoverable/ok).
- channels: GET /api/channels/ig-repull-status (reads it) + POST /api/channels/
  ig-repull-run (triggers --apply as a guarded child; 409 if already running).
- board.js: #bd-repull-health strip — amber if never-run or stale (>36h), red on
  graph/download errors, green when clean; "Run now" POSTs then refreshes.

Verified locally: status write, GET, POST trigger, concurrent-run 409 guard, and
the strip renders (green dot, timestamp, Run-now button).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
6d2f55b · 2026-07-22 · chore(mcc): daily launchd job for the IG media re-pull (Mac2 → Kamatera SSH)
scripts/ig-repull-cron.sh: wrapper the LaunchAgent runs — SSHes to Kamatera and
runs ig-media-repull.js --apply, logging to ~/.claude/logs/mcc-ig-repull.log.
scripts/com.steve.mcc-ig-repull.plist: reference copy of the installed LaunchAgent
(runs daily 06:20; the live copy lives in ~/Library/LaunchAgents). Matches the DW
scheduled-ops pattern (launchd on Mac2 SSHing to Kamatera, like the canaries).
Bootstrapped + kick-tested end-to-end: SSH → --apply → exit 0.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
214b1bb · 2026-07-22 · fix(mcc): IG re-pull only touches at-risk images, never clobbers stable URLs
The re-pull was over-eager — it would refresh a published-IG post even when its
mediaUrl is already a durable cdn.shopify.com image, downgrading a full-res photo
to a square IG thumbnail. Now it only targets items whose current mediaUrl is
missing or an expiring ig/fbcdn signed URL; stable non-IG hosts are left alone.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
971082a · 2026-07-22 · feat(mcc): IG Graph API re-pull to restore durable thumbnails for published IG posts
scripts/ig-media-repull.js: for every outbox item successfully published to
Instagram (detail[].id = media id, detail[].igId = business account), fetch the
media object's CURRENT media_url/thumbnail_url from Graph v23.0 — a fresh live URL
— and cache the bytes locally keyed by the STABLE media id, then rewrite the
item's mediaUrl to the /cache/media path. Makes published-IG thumbnails durable
regardless of future signed-URL rotation. Token resolved per-igId from
meta-pages.json (per-Page token), falling back to META_ACCESS_TOKEN/IG_ACCESS_TOKEN.

Dry-run by default (read-only Graph calls + report); --apply caches + rewrites the
outbox after backing it up. Items with a dead IG url but NO media id (failed
cross-posts) are reported unrecoverable — the placeholder tile is correct for those.

lib/media-cache.js: factor out fetchImageBuffer + writeAtomic; add exported
cacheAs(url, keyBase) for explicit-key (media-id) caching used by the re-pull.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2ffb36f · 2026-07-22 · fix(mcc): durable local cache for expiring IG/fbcdn post images + graceful placeholder
Board post thumbnails embed raw Instagram/fbcdn CDN URLs whose _nc_ohc/oh/oe
signature is time-boxed; once it expires the URL 403s for everyone (verified:
even a bare server-side fetch 403s), so the <img> failed and the old
onerror hid it -> blank tile ("posts all blank").

- lib/media-cache.js: localize() maps an IG/fbcdn URL to /cache/media/<sha1(path)>.<ext>,
  serving a cached local copy if present and background-downloading (best-effort,
  6s timeout, SSRF host-allowlist, atomic write) any missing one so the next load
  self-heals. Cache key is the media PATH (not the rotating signed query) so one
  media = one file. Never blocks the response.
- channels /api/outbox: localizeItems() the outbox before serving.
- board.js: on img error, swap to an inline branded "image unavailable" SVG tile
  instead of hiding — a dead/uncached image now reads as intentional, not blank.
- .gitignore: public/cache/ (locally-cached media, not source).

Verified end-to-end: outbox GET returns the localized /cache/media path and the
file serves 200; download pipeline writes valid image bytes. Deploy held (gated).
Note: images whose URL already expired before caching can't be recovered here —
fully restoring those needs a re-pull of fresh media from the IG Graph API (follow-up).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
243d9c5 · 2026-07-22 · fix(mcc): guard panel-router race that blanked panels + untrack screen-record videos
route() in public/app.js had no concurrency guard across its two awaits (fetch
panel HTML, load panel JS), so rapid panel switching interleaved two route()
calls that both wrote the shared #panel — a stale one landed after the fresh
render and wiped it (title stays, zero cards/API/errors = "posts all blank").
Added a latest-wins token: after each await, bail if a newer nav superseded.
Verified via /screenrecord (5-run order-varied recording, run3 reproduced the
all-blank cascade) + a fixed-app.js-over-live-data proxy A/B. Deploy held (gated).

Also .gitignore screenrecord/rec/ + *.webm and untrack the 10 committed webm
recordings (7.5MB) an auto-save hook had pulled into history going forward.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
29d1ff2 · 2026-07-22 · channels: /publish skips non-postable + media-mismatched channels
A full-fan-out publish used to FIRE every connected channel and collect
guaranteed errors (FB App-Review #200, LinkedIn 401, TikTok/YouTube image-as-
video). Now /publish consults the postable signal + media-type fit and SKIPS
(stages with a clear reason) any channel that can't actually take this post,
firing only the ones that will land. Result rows carry skipped:true + reason.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
69af9fe · 2026-07-22 · channels: add honest 'postable' status — connected != can-actually-post
The status endpoint reported connected:true for channels that cannot post
(Facebook needs pages_manage_posts App Review; LinkedIn token is unscoped/dead;
TikTok/YouTube are video-only), which misled callers twice. Added a POSTABILITY
map encoding the known structural blocks and surface per channel:
  postable     — connected AND not structurally blocked (the real signal)
  mediaTypes   — what it accepts (image caller must check; TikTok/YouTube = video-only)
  postableNote — the why (App Review / dead token / video-only)
Also corrected the stale Threads caveat (tester-mode posts live without App Review).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
d84dc2a · 2026-07-22 · engine: untrack runtime engine-queue.json + protect it on deploy
engine-queue.json holds live approve/arm/post status mutated only by the running
MCC — it was git-tracked (a latent trap: every deploy/commit carried a stale
snapshot). Untracked it + gitignored (its sibling engine-config.json already is),
and added it + engine-config.json to .deploy.conf RSYNC_EXTRA_EXCLUDES so a
--delete rsync can never clobber the live queue.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
d9e22d3 · 2026-07-22 · engine: image-grounded captions (vision) + always include DW SKU
Two changes to daily post-suggestion generation:

1. VISION-GROUNDED COPY — captionsFor() now runs a vision pass (qwen2.5vl:7b)
   on the actual product image first, producing a factual visual brief (motif,
   scale, color, texture) that grounds the qwen3:14b copy. Old captions were
   text-only from title/tags and read generic; new ones describe what the image
   actually shows. Graceful: image fetch / vision failure (incl. non-Mac hosts
   that can't reach ollama) resolves to '' and captions fall back to text-only.
   One vision call per product (not per channel). Source label gains '+vision'.

2. ALWAYS INCLUDE THE DW SKU — candidates.resolveSku() fills dwSku from
   dw_sku || sku || variant_sku (strips the '-Sample' suffix; dw_sku is often
   empty on the mirror). llm.withSku() then guarantees the SKU in every caption,
   sized so channel limits never truncate it, and strips any dangling '· SKU'
   tail when no code exists. SYSTEM/userPrompt updated to request it (belt) with
   withSku as the deterministic backstop (suspenders).

Verified end-to-end on the real Onda image: vision read the wave motif, all 7
channels carried '· SKU DWTT-73419' within limits; empty-SKU + broken-image
edge cases degrade cleanly. $0 (local ollama).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2545273 · 2026-07-22 · engine: stop birth-gating Threads suggestions (DW is a Meta tester, publishes without App Review)
Threads posts live in tester mode (proven: postThreads() succeeded this batch),
but generate.js was stamping every new Threads item status:gated from the static
GATED_CHANNELS map. Removed threads from that map so items are born 'suggested'
and approvable; the per-post approve->schedule step is still the real publish gate.
TikTok stays gated (genuinely SELF_ONLY until app audit).

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

File tree

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

Other build journals

← Marketing Campaigns  ·  all 4 projects  ·  Maya Width Fix →

Export

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

rendered in 40ms