Norma
Search the build
-
9e31d8b2026-09-26 auto-data-snapshot: 2026-09-26T17:20:23 (1 data files) — agents/instagram-agent/public/ig-activity.json -
0482d692026-09-26 auto-data-snapshot: 2026-09-26T16:49:35 (1 data files) — agents/instagram-agent/public/ig-activity.json -
4b3f6902026-09-26 auto-data-snapshot: 2026-09-26T16:19:05 (1 data files) — agents/instagram-agent/public/ig-activity.json -
78e64462026-09-26 auto-data-snapshot: 2026-09-26T15:18:06 (1 data files) — agents/instagram-agent/public/ig-activity.json -
fa1c94d2026-09-26 auto-data-snapshot: 2026-09-26T14:47:36 (1 data files) — agents/instagram-agent/public/ig-activity.json -
2a0952d2026-09-26 auto-data-snapshot: 2026-09-26T14:17:06 (1 data files) — agents/instagram-agent/public/ig-activity.json -
794ff102026-09-26 auto-data-snapshot: 2026-09-26T13:46:36 (1 data files) — agents/instagram-agent/public/ig-activity.json -
f3ba8a22026-09-26 auto-data-snapshot: 2026-09-26T12:44:57 (1 data files) — agents/instagram-agent/public/ig-activity.json -
8d330062026-09-26 auto-data-snapshot: 2026-09-26T12:14:18 (1 data files) — agents/instagram-agent/public/ig-activity.json -
a0710ce2026-09-26 auto-data-snapshot: 2026-09-26T11:43:40 (1 data files) — agents/instagram-agent/public/ig-activity.json -
4b34ad02026-09-26 auto-data-snapshot: 2026-09-26T11:13:09 (1 data files) — agents/instagram-agent/public/ig-activity.json -
10d2a692026-09-26 auto-data-snapshot: 2026-09-26T10:42:21 (1 data files) — agents/instagram-agent/public/ig-activity.json -
453c0c12026-09-26 auto-data-snapshot: 2026-09-26T09:40:15 (1 data files) — agents/instagram-agent/public/ig-activity.json -
4cd15692026-09-26 auto-data-snapshot: 2026-09-26T08:50:16 (1 data files) — agents/instagram-agent/public/ig-activity.json -
345b1f72026-09-26 auto-data-snapshot: 2026-09-26T08:19:11 (1 data files) — agents/instagram-agent/public/ig-activity.json -
c69b9b42026-09-26 TK-11383: enroll beverlyandhillsdesigns + filthyrichlivingcom (Steve approved) -
68d9f752026-09-26 auto-data-snapshot: 2026-09-26T07:48:27 (1 data files) — agents/instagram-agent/enrollment-hold.json -
3b667312026-09-26 TK-11383: link-drift canary now measures the not-yet-linked accounts -
8df6d232026-09-25 auto-data-snapshot: 2026-09-25T20:06:56 (1 data files) — agents/instagram-agent/public/ig-activity.json -
85367112026-09-25 auto-data-snapshot: 2026-09-25T19:36:29 (1 data files) — agents/instagram-agent/public/ig-activity.json -
9b1c2832026-09-25 auto-data-snapshot: 2026-09-25T19:06:05 (1 data files) — agents/instagram-agent/public/ig-activity.json -
a08a5332026-09-25 auto-data-snapshot: 2026-09-25T18:05:08 (1 data files) — agents/instagram-agent/public/ig-activity.json -
b9e21ed2026-09-25 auto-data-snapshot: 2026-09-25T17:34:43 (1 data files) — agents/instagram-agent/public/ig-activity.json -
a8dc9102026-09-25 auto-data-snapshot: 2026-09-25T17:04:17 (1 data files) — agents/instagram-agent/public/ig-activity.json -
a1009e82026-09-25 auto-data-snapshot: 2026-09-25T16:33:34 (1 data files) — agents/instagram-agent/public/ig-activity.json -
2ae0e102026-09-25 auto-data-snapshot: 2026-09-25T14:28:14 (1 data files) — agents/instagram-agent/public/ig-activity.json -
bb460282026-09-25 auto-data-snapshot: 2026-09-25T13:56:04 (1 data files) — agents/instagram-agent/public/ig-activity.json -
8d734f42026-09-25 auto-data-snapshot: 2026-09-25T13:25:27 (1 data files) — agents/instagram-agent/public/ig-activity.json -
d7f53d62026-09-25 auto-data-snapshot: 2026-09-25T12:54:38 (1 data files) — agents/instagram-agent/public/ig-activity.json -
5dd74e62026-09-25 auto-data-snapshot: 2026-09-25T11:35:27 (2 data files) — agents/instagram-agent/enrollment-hold.json agents/instagram-agent/link-watchlist.json -
d5f7e722026-09-25 auto-data-snapshot: 2026-09-25T11:23:40 (1 data files) — agents/instagram-agent/public/ig-activity.json -
aeef0142026-09-25 auto-data-snapshot: 2026-09-25T10:52:57 (1 data files) — agents/instagram-agent/public/ig-activity.json -
f1172aa2026-09-25 auto-data-snapshot: 2026-09-25T10:22:25 (1 data files) — agents/instagram-agent/public/ig-activity.json -
dfde7952026-09-25 auto-data-snapshot: 2026-09-25T09:51:23 (1 data files) — agents/instagram-agent/public/ig-activity.json -
e84f0c82026-09-25 auto-data-snapshot: 2026-09-25T08:49:33 (1 data files) — agents/instagram-agent/public/ig-activity.json -
fe9bc802026-09-24 auto-data-snapshot: 2026-09-24T19:59:12 (1 data files) — agents/instagram-agent/public/ig-activity.json -
993ddb02026-09-24 auto-data-snapshot: 2026-09-24T18:58:12 (1 data files) — agents/instagram-agent/public/ig-activity.json -
948c7542026-09-24 auto-data-snapshot: 2026-09-24T18:27:35 (1 data files) — agents/instagram-agent/public/ig-activity.json -
da37b292026-09-24 auto-data-snapshot: 2026-09-24T17:57:06 (1 data files) — agents/instagram-agent/public/ig-activity.json -
f13fc622026-09-24 auto-data-snapshot: 2026-09-24T15:23:04 (1 data files) — agents/instagram-agent/public/ig-activity.json -
e8abb092026-09-24 auto-data-snapshot: 2026-09-24T14:52:05 (1 data files) — agents/instagram-agent/public/ig-activity.json -
8d888162026-09-24 auto-data-snapshot: 2026-09-24T14:21:31 (1 data files) — agents/instagram-agent/public/ig-activity.json -
a55ec102026-09-24 auto-data-snapshot: 2026-09-24T13:20:22 (1 data files) — agents/instagram-agent/public/ig-activity.json -
afc4a572026-09-24 auto-data-snapshot: 2026-09-24T12:49:23 (1 data files) — agents/instagram-agent/public/ig-activity.json -
c60f0a22026-09-24 auto-data-snapshot: 2026-09-24T12:18:37 (1 data files) — agents/instagram-agent/public/ig-activity.json -
ffd99012026-09-24 auto-data-snapshot: 2026-09-24T11:48:03 (1 data files) — agents/instagram-agent/public/ig-activity.json -
141010c2026-09-24 auto-data-snapshot: 2026-09-24T11:17:31 (1 data files) — agents/instagram-agent/public/ig-activity.json -
f2ebe672026-09-24 auto-data-snapshot: 2026-09-24T10:15:55 (1 data files) — agents/instagram-agent/public/ig-activity.json -
a8d5d4d2026-09-24 auto-data-snapshot: 2026-09-24T09:44:11 (1 data files) — agents/instagram-agent/public/ig-activity.json -
3aaa5ae2026-09-24 auto-data-snapshot: 2026-09-24T09:12:24 (1 data files) — agents/instagram-agent/public/ig-activity.json -
1912f2c2026-09-24 auto-data-snapshot: 2026-09-24T08:40:54 (1 data files) — agents/instagram-agent/public/ig-activity.json -
1875fdd2026-09-23 auto-data-snapshot: 2026-09-23T19:33:27 (1 data files) — agents/instagram-agent/public/ig-activity.json -
533b6c72026-09-23 auto-data-snapshot: 2026-09-23T19:02:06 (1 data files) — agents/instagram-agent/public/ig-activity.json -
e4eff412026-09-23 auto-data-snapshot: 2026-09-23T18:30:30 (1 data files) — agents/instagram-agent/public/ig-activity.json -
e7836e82026-09-23 auto-data-snapshot: 2026-09-23T17:59:00 (1 data files) — agents/instagram-agent/public/ig-activity.json -
496024d2026-09-23 auto-data-snapshot: 2026-09-23T16:24:32 (1 data files) — agents/instagram-agent/public/ig-activity.json -
1972c062026-09-23 auto-data-snapshot: 2026-09-23T15:21:10 (1 data files) — agents/instagram-agent/public/ig-activity.json -
e1fd5e42026-09-23 auto-data-snapshot: 2026-09-23T14:48:42 (1 data files) — agents/instagram-agent/public/ig-activity.json -
80106d82026-09-23 auto-data-snapshot: 2026-09-23T14:17:00 (1 data files) — agents/instagram-agent/public/ig-activity.json -
2a66b452026-09-23 auto-data-snapshot: 2026-09-23T13:45:21 (1 data files) — agents/instagram-agent/public/ig-activity.json -
47547072026-09-23 auto-data-snapshot: 2026-09-23T12:42:16 (1 data files) — agents/instagram-agent/public/ig-activity.json -
ffc8c4a2026-09-23 auto-data-snapshot: 2026-09-23T12:09:58 (1 data files) — agents/instagram-agent/public/ig-activity.json -
cd2c9a92026-09-23 auto-data-snapshot: 2026-09-23T11:38:28 (1 data files) — agents/instagram-agent/public/ig-activity.json -
07a55352026-09-23 auto-data-snapshot: 2026-09-23T11:06:44 (1 data files) — agents/instagram-agent/public/ig-activity.json -
a7004092026-09-23 auto-data-snapshot: 2026-09-23T10:35:16 (1 data files) — agents/instagram-agent/public/ig-activity.json -
93b06512026-09-23 auto-data-snapshot: 2026-09-23T10:03:20 (1 data files) — agents/instagram-agent/public/ig-activity.json -
837a31a2026-09-23 auto-data-snapshot: 2026-09-23T08:59:35 (1 data files) — agents/instagram-agent/public/ig-activity.json -
2a45d232026-09-23 auto-data-snapshot: 2026-09-23T08:28:09 (1 data files) — agents/instagram-agent/public/ig-activity.json -
67d6abb2026-09-22 auto-data-snapshot: 2026-09-22T20:24:44 (1 data files) — agents/instagram-agent/public/ig-activity.json -
ed9e1d22026-09-22 auto-data-snapshot: 2026-09-22T19:53:25 (1 data files) — agents/instagram-agent/public/ig-activity.json -
064d2a22026-09-22 auto-data-snapshot: 2026-09-22T19:22:08 (1 data files) — agents/instagram-agent/public/ig-activity.json -
1ef550f2026-09-22 auto-data-snapshot: 2026-09-22T18:50:47 (1 data files) — agents/instagram-agent/public/ig-activity.json -
a7871652026-09-22 auto-data-snapshot: 2026-09-22T18:19:13 (1 data files) — agents/instagram-agent/public/ig-activity.json -
4d72bce2026-09-22 auto-data-snapshot: 2026-09-22T17:47:37 (1 data files) — agents/instagram-agent/public/ig-activity.json -
99a208b2026-09-22 auto-data-snapshot: 2026-09-22T17:15:32 (1 data files) — agents/instagram-agent/public/ig-activity.json -
abdc01a2026-09-22 auto-data-snapshot: 2026-09-22T16:42:26 (1 data files) — agents/instagram-agent/public/ig-activity.json -
208a4072026-09-22 auto-data-snapshot: 2026-09-22T16:09:18 (1 data files) — agents/instagram-agent/public/ig-activity.json -
e01ed702026-09-22 auto-data-snapshot: 2026-09-22T15:00:06 (1 data files) — agents/instagram-agent/public/ig-activity.json -
a49b9b92026-09-22 auto-data-snapshot: 2026-09-22T14:27:31 (1 data files) — agents/instagram-agent/public/ig-activity.json -
40ce82a2026-09-22 auto-data-snapshot: 2026-09-22T13:54:25 (1 data files) — agents/instagram-agent/public/ig-activity.json -
45bd9802026-09-22 auto-data-snapshot: 2026-09-22T13:21:57 (1 data files) — agents/instagram-agent/public/ig-activity.json -
bcd8d1f2026-09-22 auto-data-snapshot: 2026-09-22T12:49:04 (1 data files) — agents/instagram-agent/public/ig-activity.json -
a79d3632026-09-22 auto-data-snapshot: 2026-09-22T12:15:47 (1 data files) — agents/instagram-agent/public/ig-activity.json -
68d4d0c2026-09-22 auto-data-snapshot: 2026-09-22T11:43:24 (1 data files) — agents/instagram-agent/public/ig-activity.json -
087f2d72026-09-22 auto-data-snapshot: 2026-09-22T11:11:00 (1 data files) — agents/instagram-agent/public/ig-activity.json -
8f1455a2026-09-22 IG post path: durable jewelry-counter exclusion gate (TK-12012) -
987ab622026-09-22 instagram-agent: add loopback co-listener so 127.0.0.1:9810 answers (TK-12012) -
1665ba42026-09-22 auto-data-snapshot: 2026-09-22T10:38:29 (1 data files) — agents/instagram-agent/public/ig-activity.json -
1281a692026-09-22 auto-data-snapshot: 2026-09-22T09:54:34 (1 data files) — agents/instagram-agent/public/ig-activity.json -
29aeff62026-09-21 auto-data-snapshot: 2026-09-21T19:40:08 (1 data files) — agents/instagram-agent/public/ig-activity.json -
3100c512026-09-21 auto-data-snapshot: 2026-09-21T17:27:28 (1 data files) — agents/instagram-agent/public/ig-activity.json -
660bef22026-09-21 auto-data-snapshot: 2026-09-21T16:51:55 (1 data files) — agents/instagram-agent/public/ig-activity.json -
8de32082026-09-21 auto-data-snapshot: 2026-09-21T15:52:40 (1 data files) — agents/instagram-agent/public/ig-activity.json -
376a2492026-09-21 auto-data-snapshot: 2026-09-21T15:19:42 (1 data files) — agents/instagram-agent/public/ig-activity.json -
5b56cd72026-09-21 auto-data-snapshot: 2026-09-21T14:47:29 (1 data files) — agents/instagram-agent/public/ig-activity.json -
8303e302026-09-21 auto-data-snapshot: 2026-09-21T14:14:31 (1 data files) — agents/instagram-agent/public/ig-activity.json -
68432782026-09-21 auto-data-snapshot: 2026-09-21T13:42:13 (1 data files) — agents/instagram-agent/public/ig-activity.json -
e1270862026-09-21 auto-data-snapshot: 2026-09-21T13:09:50 (1 data files) — agents/instagram-agent/public/ig-activity.json -
4bb8b812026-09-21 auto-data-snapshot: 2026-09-21T12:37:32 (1 data files) — agents/instagram-agent/public/ig-activity.json -
a1938452026-09-21 auto-data-snapshot: 2026-09-21T10:59:35 (1 data files) — agents/instagram-agent/public/ig-activity.json -
2c9de6f2026-09-21 auto-data-snapshot: 2026-09-21T10:26:58 (1 data files) — agents/instagram-agent/public/ig-activity.json -
315760f2026-09-21 auto-data-snapshot: 2026-09-21T09:54:10 (1 data files) — agents/instagram-agent/public/ig-activity.json -
42d2ea42026-09-21 auto-data-snapshot: 2026-09-21T09:21:33 (1 data files) — agents/instagram-agent/public/ig-activity.json -
f1ed42e2026-09-21 auto-data-snapshot: 2026-09-21T08:49:26 (1 data files) — agents/instagram-agent/public/ig-activity.json -
746c0312026-09-20 security(TK-11783): strip hardcoded Google OAuth secrets from Norma Gmail-search scripts -
909b29d2026-09-19 auto-data-snapshot: 2026-09-19T20:05:42 (1 data files) — agents/instagram-agent/public/ig-activity.json -
9d9890a2026-09-19 auto-data-snapshot: 2026-09-19T19:32:43 (1 data files) — agents/instagram-agent/public/ig-activity.json -
0bd36f72026-09-19 auto-data-snapshot: 2026-09-19T18:59:45 (1 data files) — agents/instagram-agent/public/ig-activity.json -
ac9eadc2026-09-19 auto-data-snapshot: 2026-09-19T18:28:04 (1 data files) — agents/instagram-agent/public/ig-activity.json -
101d5e72026-09-19 auto-data-snapshot: 2026-09-19T17:24:27 (1 data files) — agents/instagram-agent/public/ig-activity.json -
4fcff8d2026-09-19 auto-data-snapshot: 2026-09-19T15:17:08 (1 data files) — agents/instagram-agent/public/ig-activity.json -
8c5a6462026-09-19 auto-data-snapshot: 2026-09-19T14:45:24 (1 data files) — agents/instagram-agent/public/ig-activity.json -
d980f272026-09-19 auto-data-snapshot: 2026-09-19T14:13:49 (1 data files) — agents/instagram-agent/public/ig-activity.json -
787e3232026-09-19 auto-data-snapshot: 2026-09-19T13:09:57 (1 data files) — agents/instagram-agent/public/ig-activity.json -
266c3ac2026-09-19 auto-data-snapshot: 2026-09-19T12:38:08 (1 data files) — agents/instagram-agent/public/ig-activity.json -
b5f80542026-09-19 auto-data-snapshot: 2026-09-19T12:06:31 (1 data files) — agents/instagram-agent/public/ig-activity.json -
b99b7322026-09-19 auto-data-snapshot: 2026-09-19T11:34:41 (1 data files) — agents/instagram-agent/public/ig-activity.json -
9bffedd2026-09-19 auto-data-snapshot: 2026-09-19T11:03:02 (1 data files) — agents/instagram-agent/public/ig-activity.json -
6faf1702026-09-19 auto-data-snapshot: 2026-09-19T10:31:17 (1 data files) — agents/instagram-agent/public/ig-activity.json -
a37d1712026-09-19 auto-data-snapshot: 2026-09-19T09:59:20 (1 data files) — agents/instagram-agent/public/ig-activity.json -
85cd52f2026-09-19 auto-data-snapshot: 2026-09-19T08:55:30 (1 data files) — agents/instagram-agent/public/ig-activity.json -
95c9f652026-09-19 auto-data-snapshot: 2026-09-19T08:23:45 (1 data files) — agents/instagram-agent/public/ig-activity.json -
bd28c152026-09-18 auto-data-snapshot: 2026-09-18T20:12:47 (1 data files) — agents/instagram-agent/public/ig-activity.json -
42bb2fc2026-09-18 auto-data-snapshot: 2026-09-18T19:41:16 (1 data files) — agents/instagram-agent/public/ig-activity.json -
fd9d6172026-09-18 auto-data-snapshot: 2026-09-18T19:09:31 (1 data files) — agents/instagram-agent/public/ig-activity.json -
74d2b402026-09-18 auto-data-snapshot: 2026-09-18T18:37:36 (1 data files) — agents/instagram-agent/public/ig-activity.json -
fac91ef2026-09-18 auto-data-snapshot: 2026-09-18T17:33:52 (1 data files) — agents/instagram-agent/public/ig-activity.json -
91a83822026-09-18 auto-data-snapshot: 2026-09-18T15:26:25 (1 data files) — agents/instagram-agent/public/ig-activity.json -
54c3aaf2026-09-18 auto-data-snapshot: 2026-09-18T14:54:24 (1 data files) — agents/instagram-agent/public/ig-activity.json -
9a25cad2026-09-18 auto-data-snapshot: 2026-09-18T14:19:46 (1 data files) — agents/instagram-agent/public/ig-activity.json -
c7716da2026-09-18 auto-data-snapshot: 2026-09-18T13:45:34 (1 data files) — agents/instagram-agent/public/ig-activity.json -
6d76d0a2026-09-18 auto-data-snapshot: 2026-09-18T13:12:29 (1 data files) — agents/instagram-agent/public/ig-activity.json -
bc090632026-09-18 auto-data-snapshot: 2026-09-18T12:06:20 (1 data files) — agents/instagram-agent/public/ig-activity.json -
bd49ca52026-09-18 auto-data-snapshot: 2026-09-18T11:33:43 (1 data files) — agents/instagram-agent/public/ig-activity.json -
c7a8d962026-09-18 auto-data-snapshot: 2026-09-18T11:01:55 (1 data files) — agents/instagram-agent/public/ig-activity.json -
70516d02026-09-18 auto-data-snapshot: 2026-09-18T10:30:02 (1 data files) — agents/instagram-agent/public/ig-activity.json -
8d4abb52026-09-18 auto-data-snapshot: 2026-09-18T09:58:36 (1 data files) — agents/instagram-agent/public/ig-activity.json -
e961ae42026-09-18 auto-data-snapshot: 2026-09-18T09:26:51 (1 data files) — agents/instagram-agent/public/ig-activity.json -
9d087432026-09-18 auto-data-snapshot: 2026-09-18T08:54:50 (1 data files) — agents/instagram-agent/public/ig-activity.json -
a5de3c32026-09-17 auto-data-snapshot: 2026-09-17T20:05:20 (1 data files) — agents/instagram-agent/public/ig-activity.json -
7c1745e2026-09-17 auto-data-snapshot: 2026-09-17T19:01:39 (1 data files) — agents/instagram-agent/public/ig-activity.json -
b0732862026-09-17 auto-data-snapshot: 2026-09-17T18:29:30 (1 data files) — agents/instagram-agent/public/ig-activity.json -
64acf0c2026-09-17 auto-data-snapshot: 2026-09-17T17:57:46 (1 data files) — agents/instagram-agent/public/ig-activity.json -
715ba392026-09-17 auto-data-snapshot: 2026-09-17T17:25:36 (1 data files) — agents/instagram-agent/public/ig-activity.json -
2d33a042026-09-17 auto-data-snapshot: 2026-09-17T15:48:34 (1 data files) — agents/instagram-agent/public/ig-activity.json -
dcd20ae2026-09-17 auto-data-snapshot: 2026-09-17T14:44:50 (1 data files) — agents/instagram-agent/public/ig-activity.json -
3b6e9ca2026-09-17 auto-data-snapshot: 2026-09-17T14:12:57 (1 data files) — agents/instagram-agent/public/ig-activity.json -
d5822552026-09-17 auto-data-snapshot: 2026-09-17T13:41:27 (1 data files) — agents/instagram-agent/public/ig-activity.json -
69a7a042026-09-17 auto-data-snapshot: 2026-09-17T13:09:20 (1 data files) — agents/instagram-agent/public/ig-activity.json -
c1c63122026-09-17 auto-data-snapshot: 2026-09-17T12:37:18 (1 data files) — agents/instagram-agent/public/ig-activity.json -
f35cb1e2026-09-17 auto-data-snapshot: 2026-09-17T12:05:07 (1 data files) — agents/instagram-agent/public/ig-activity.json -
9e3ae572026-09-17 auto-data-snapshot: 2026-09-17T11:32:24 (1 data files) — agents/instagram-agent/public/ig-activity.json -
20a2b042026-09-17 auto-data-snapshot: 2026-09-17T10:59:25 (1 data files) — agents/instagram-agent/public/ig-activity.json -
ed6484f2026-09-17 auto-data-snapshot: 2026-09-17T09:53:49 (1 data files) — agents/instagram-agent/public/ig-activity.json -
942c82c2026-09-17 auto-data-snapshot: 2026-09-17T09:20:48 (1 data files) — agents/instagram-agent/public/ig-activity.json -
dd269ce2026-09-17 auto-data-snapshot: 2026-09-17T08:48:40 (1 data files) — agents/instagram-agent/public/ig-activity.json -
e1053292026-09-17 auto-data-snapshot: 2026-09-17T08:16:42 (1 data files) — agents/instagram-agent/public/ig-activity.json -
dd07b0c2026-09-16 auto-data-snapshot: 2026-09-16T20:01:35 (1 data files) — agents/instagram-agent/public/ig-activity.json -
9c2f3c52026-09-16 auto-data-snapshot: 2026-09-16T19:29:54 (1 data files) — agents/instagram-agent/public/ig-activity.json -
60a53572026-09-16 auto-data-snapshot: 2026-09-16T18:58:01 (1 data files) — agents/instagram-agent/public/ig-activity.json -
4de85f22026-09-16 auto-data-snapshot: 2026-09-16T18:26:15 (1 data files) — agents/instagram-agent/public/ig-activity.json -
41fdaef2026-09-16 auto-data-snapshot: 2026-09-16T17:20:14 (1 data files) — agents/instagram-agent/public/ig-activity.json -
29f39352026-09-16 auto-data-snapshot: 2026-09-16T15:11:20 (1 data files) — agents/instagram-agent/public/ig-activity.json -
7245d572026-09-16 auto-data-snapshot: 2026-09-16T14:34:47 (1 data files) — agents/instagram-agent/public/ig-activity.json -
b80bd242026-09-16 auto-data-snapshot: 2026-09-16T13:57:01 (1 data files) — agents/instagram-agent/public/ig-activity.json -
ce81b112026-09-16 auto-data-snapshot: 2026-09-16T13:25:12 (1 data files) — agents/instagram-agent/public/ig-activity.json -
f67d9372026-09-16 auto-data-snapshot: 2026-09-16T12:52:52 (1 data files) — agents/instagram-agent/public/ig-activity.json -
3c799e22026-09-16 auto-data-snapshot: 2026-09-16T12:19:41 (1 data files) — agents/instagram-agent/public/ig-activity.json -
ca6be7f2026-09-16 auto-data-snapshot: 2026-09-16T11:47:18 (1 data files) — agents/instagram-agent/public/ig-activity.json -
b58d0fe2026-09-16 auto-data-snapshot: 2026-09-16T10:40:23 (1 data files) — agents/instagram-agent/public/ig-activity.json -
289bc372026-09-16 auto-data-snapshot: 2026-09-16T10:07:35 (1 data files) — agents/instagram-agent/public/ig-activity.json -
43e3a672026-09-16 auto-data-snapshot: 2026-09-16T09:33:20 (1 data files) — agents/instagram-agent/public/ig-activity.json -
98ef1392026-09-16 auto-data-snapshot: 2026-09-16T08:57:47 (1 data files) — agents/instagram-agent/public/ig-activity.json -
bab569c2026-09-16 auto-data-snapshot: 2026-09-16T08:24:08 (1 data files) — agents/instagram-agent/public/ig-activity.json -
31f41a52026-09-15 auto-data-snapshot: 2026-09-15T19:39:01 (1 data files) — agents/instagram-agent/public/ig-activity.json -
006bd202026-09-15 auto-data-snapshot: 2026-09-15T19:06:59 (1 data files) — agents/instagram-agent/public/ig-activity.json -
1a52d092026-09-15 auto-data-snapshot: 2026-09-15T18:34:22 (1 data files) — agents/instagram-agent/public/ig-activity.json -
28813f12026-09-15 auto-data-snapshot: 2026-09-15T18:00:40 (1 data files) — agents/instagram-agent/public/ig-activity.json -
323cddc2026-09-15 auto-data-snapshot: 2026-09-15T16:53:16 (1 data files) — agents/instagram-agent/public/ig-activity.json -
963d43c2026-09-15 auto-data-snapshot: 2026-09-15T15:48:53 (1 data files) — agents/instagram-agent/public/ig-activity.json -
e2042642026-09-15 auto-data-snapshot: 2026-09-15T15:16:50 (1 data files) — agents/instagram-agent/public/ig-activity.json -
31674ec2026-09-15 auto-data-snapshot: 2026-09-15T14:44:34 (1 data files) — agents/instagram-agent/public/ig-activity.json -
14bfbd92026-09-15 auto-data-snapshot: 2026-09-15T14:13:07 (1 data files) — agents/instagram-agent/public/ig-activity.json -
00378e52026-09-15 auto-data-snapshot: 2026-09-15T13:40:09 (1 data files) — agents/instagram-agent/public/ig-activity.json -
82f070a2026-09-15 auto-data-snapshot: 2026-09-15T13:06:09 (1 data files) — agents/instagram-agent/public/ig-activity.json -
6e0bdcd2026-09-15 auto-data-snapshot: 2026-09-15T12:33:48 (1 data files) — agents/instagram-agent/public/ig-activity.json -
ef025992026-09-15 auto-data-snapshot: 2026-09-15T12:00:25 (1 data files) — agents/instagram-agent/public/ig-activity.json -
33c83872026-09-15 auto-data-snapshot: 2026-09-15T11:25:48 (1 data files) — agents/instagram-agent/public/ig-activity.json -
9d9aa192026-09-15 auto-data-snapshot: 2026-09-15T10:20:50 (1 data files) — agents/instagram-agent/public/ig-activity.json -
71c7ed22026-09-15 auto-data-snapshot: 2026-09-15T09:48:56 (1 data files) — agents/instagram-agent/public/ig-activity.json -
42474d72026-09-15 auto-data-snapshot: 2026-09-15T09:16:55 (1 data files) — agents/instagram-agent/public/ig-activity.json -
71949d32026-09-15 auto-data-snapshot: 2026-09-15T08:44:47 (1 data files) — agents/instagram-agent/public/ig-activity.json -
10065cd2026-09-14 auto-data-snapshot: 2026-09-14T19:58:15 (1 data files) — agents/instagram-agent/public/ig-activity.json -
33e39ff2026-09-14 auto-data-snapshot: 2026-09-14T19:26:33 (1 data files) — agents/instagram-agent/public/ig-activity.json -
eb5cead2026-09-14 auto-data-snapshot: 2026-09-14T18:54:45 (1 data files) — agents/instagram-agent/public/ig-activity.json -
8a65e7e2026-09-14 auto-data-snapshot: 2026-09-14T17:51:11 (1 data files) — agents/instagram-agent/public/ig-activity.json -
38a9d9e2026-09-14 auto-data-snapshot: 2026-09-14T17:18:57 (1 data files) — agents/instagram-agent/public/ig-activity.json -
ba03c192026-09-14 auto-data-snapshot: 2026-09-14T16:46:18 (1 data files) — agents/instagram-agent/public/ig-activity.json -
a0c313b2026-09-14 auto-data-snapshot: 2026-09-14T16:13:45 (1 data files) — agents/instagram-agent/public/ig-activity.json -
a6a2a582026-09-14 auto-data-snapshot: 2026-09-14T15:41:36 (1 data files) — agents/instagram-agent/public/ig-activity.json -
31ae1482026-09-14 auto-data-snapshot: 2026-09-14T15:08:48 (1 data files) — agents/instagram-agent/public/ig-activity.json -
58aed5f2026-09-14 auto-data-snapshot: 2026-09-14T14:36:24 (1 data files) — agents/instagram-agent/public/ig-activity.json -
6aa5fcb2026-09-14 auto-data-snapshot: 2026-09-14T14:02:07 (1 data files) — agents/instagram-agent/public/ig-activity.json -
cfcf5942026-09-14 auto-data-snapshot: 2026-09-14T12:23:25 (1 data files) — agents/instagram-agent/public/ig-activity.json -
ebec51a2026-09-14 auto-data-snapshot: 2026-09-14T11:51:41 (1 data files) — agents/instagram-agent/public/ig-activity.json -
40738302026-09-14 auto-data-snapshot: 2026-09-14T11:19:45 (1 data files) — agents/instagram-agent/public/ig-activity.json -
4b2fe3c2026-09-14 auto-data-snapshot: 2026-09-14T10:47:22 (1 data files) — agents/instagram-agent/public/ig-activity.json -
e8153862026-09-14 Stop git bleed: untrack CTA recordings + demo videos, gitignore them (TK-11533) -
4cd56272026-09-14 auto-data-snapshot: 2026-09-14T10:14:59 (1 data files) — agents/instagram-agent/public/ig-activity.json -
e0d03252026-09-14 auto-data-snapshot: 2026-09-14T08:53:29 (1 data files) — agents/instagram-agent/public/ig-activity.json -
11eb4af2026-09-14 auto-data-snapshot: 2026-09-14T08:21:43 (1 data files) — agents/instagram-agent/public/ig-activity.json -
51c03052026-09-13 TK-11383: bring the PUBLISHER's enrollment hold to parity with the builder -
36f4ede2026-09-13 TK-11383: close the allowlist-expansion path to unapproved public IG posting -
3bdc7a52026-09-13 TK-11383: enforce the enrollment hold at the PUBLISHER too, not just the builder -
72f09762026-09-13 TK-11383: enforce the designerschat enrollment hold at the PUBLISHER too -
123570c2026-09-13 TK-11383: make build-registry.js stop silently changing who posts publicly -
414dbe22026-09-13 fix: extend dw-ig-link-drift with business_management edge for linked-but-not-granted pages (TK-11604) -
4aca47c2026-09-13 TK-11383: read-only probe that sees Pages outside the pages_show_list allowlist -
77e1cb62026-09-12 auto-data-snapshot: 2026-09-12T19:54:34 (1 data files) — agents/instagram-agent/public/ig-activity.json -
ae5e1102026-09-12 auto-data-snapshot: 2026-09-12T19:22:21 (1 data files) — agents/instagram-agent/public/ig-activity.json -
eb8d7992026-09-12 auto-data-snapshot: 2026-09-12T18:49:52 (1 data files) — agents/instagram-agent/public/ig-activity.json -
50e05c92026-09-12 auto-data-snapshot: 2026-09-12T18:17:16 (1 data files) — agents/instagram-agent/public/ig-activity.json -
060c0fb2026-09-12 auto-data-snapshot: 2026-09-12T17:44:46 (1 data files) — agents/instagram-agent/public/ig-activity.json -
71eed632026-09-12 auto-data-snapshot: 2026-09-12T15:35:41 (1 data files) — agents/instagram-agent/public/ig-activity.json -
c3ea4ba2026-09-12 auto-data-snapshot: 2026-09-12T15:03:15 (1 data files) — agents/instagram-agent/public/ig-activity.json -
8459a902026-09-12 auto-data-snapshot: 2026-09-12T14:31:21 (1 data files) — agents/instagram-agent/public/ig-activity.json -
cdd26772026-09-12 auto-data-snapshot: 2026-09-12T13:59:14 (1 data files) — agents/instagram-agent/public/ig-activity.json -
55815392026-09-12 auto-data-snapshot: 2026-09-12T13:27:22 (1 data files) — agents/instagram-agent/public/ig-activity.json -
d23b6822026-09-12 auto-data-snapshot: 2026-09-12T12:53:51 (1 data files) — agents/instagram-agent/public/ig-activity.json -
d0906992026-09-12 auto-data-snapshot: 2026-09-12T12:21:53 (1 data files) — agents/instagram-agent/public/ig-activity.json -
d48923f2026-09-12 auto-data-snapshot: 2026-09-12T11:17:22 (1 data files) — agents/instagram-agent/public/ig-activity.json -
801e98e2026-09-12 auto-data-snapshot: 2026-09-12T10:45:06 (1 data files) — agents/instagram-agent/public/ig-activity.json -
53004f42026-09-12 auto-data-snapshot: 2026-09-12T10:01:53 (1 data files) — agents/instagram-agent/public/ig-activity.json -
dac63972026-09-12 auto-data-snapshot: 2026-09-12T09:28:54 (1 data files) — agents/instagram-agent/public/ig-activity.json -
06a6ced2026-09-12 auto-data-snapshot: 2026-09-12T08:55:55 (1 data files) — agents/instagram-agent/public/ig-activity.json -
fa267f52026-09-12 auto-data-snapshot: 2026-09-12T08:20:59 (1 data files) — agents/instagram-agent/public/ig-activity.json -
b57185c2026-09-11 auto-data-snapshot: 2026-09-11T20:13:51 (1 data files) — agents/instagram-agent/public/ig-activity.json -
12f96132026-09-11 auto-data-snapshot: 2026-09-11T19:40:57 (1 data files) — agents/instagram-agent/public/ig-activity.json -
6a0ef262026-09-11 auto-data-snapshot: 2026-09-11T19:08:01 (1 data files) — agents/instagram-agent/public/ig-activity.json -
ca90a342026-09-11 auto-data-snapshot: 2026-09-11T18:34:41 (1 data files) — agents/instagram-agent/public/ig-activity.json -
17d8eec2026-09-11 auto-data-snapshot: 2026-09-11T18:01:28 (1 data files) — agents/instagram-agent/public/ig-activity.json -
0409f8f2026-09-11 auto-data-snapshot: 2026-09-11T17:28:45 (1 data files) — agents/instagram-agent/public/ig-activity.json -
ecd9f692026-09-11 auto-data-snapshot: 2026-09-11T15:49:18 (1 data files) — agents/instagram-agent/public/ig-activity.json -
94fb1f22026-09-11 auto-data-snapshot: 2026-09-11T15:15:48 (1 data files) — agents/instagram-agent/public/ig-activity.json -
007a4072026-09-11 auto-data-snapshot: 2026-09-11T14:39:38 (1 data files) — agents/instagram-agent/public/ig-activity.json -
913ad782026-09-11 auto-data-snapshot: 2026-09-11T13:57:49 (1 data files) — agents/instagram-agent/public/ig-activity.json -
42016d62026-09-11 Revert "TK-11383: enroll @designerschat — IG fleet 35 -> 36" -
e94fe252026-09-11 TK-11383: enroll @designerschat — IG fleet 35 -> 36 -
19a34d72026-09-11 TK-11383: make the page-link driver self-diagnosing -
aff44902026-09-11 auto-data-snapshot: 2026-09-11T13:23:02 (1 data files) — agents/instagram-agent/public/ig-activity.json -
0e601bd2026-09-11 auto-data-snapshot: 2026-09-11T12:47:38 (1 data files) — agents/instagram-agent/public/ig-activity.json -
90929b02026-09-11 TK-11383: add drive-page-link.mjs — Steve-run openclaw driver to the Linked accounts screen -
8e37bdd2026-09-11 auto-data-snapshot: 2026-09-11T12:03:30 (1 data files) — agents/instagram-agent/public/ig-activity.json -
a8c6b492026-09-11 auto-data-snapshot: 2026-09-11T11:23:31 (1 data files) — agents/instagram-agent/public/ig-activity.json -
0e18a602026-09-11 TK-11383: correct two false claims in the IG fleet runbook -
ad635212026-09-11 auto-data-snapshot: 2026-09-11T10:49:53 (1 data files) — agents/instagram-agent/public/ig-activity.json -
5ac561d2026-09-11 auto-data-snapshot: 2026-09-11T10:08:53 (1 data files) — agents/instagram-agent/public/ig-activity.json -
09270d92026-09-11 auto-data-snapshot: 2026-09-11T09:31:49 (1 data files) — agents/instagram-agent/public/ig-activity.json -
4f72e042026-09-11 auto-data-snapshot: 2026-09-11T08:57:34 (1 data files) — agents/instagram-agent/public/ig-activity.json -
4d399e12026-09-11 Verify Norma browser journeys with settled cross-browser evidence -
2f0cf942026-09-11 auto-data-snapshot: 2026-09-11T08:16:47 (3 data files) — agents/instagram-agent/public/ig-activity.json verification/browser-ux-isolated.json verification/browser-ux-live-public.json -
cd1437d2026-09-11 snapshot before TK-11315 browser verification -
8bb36682026-09-10 auto-data-snapshot: 2026-09-10T19:39:42 (1 data files) — agents/instagram-agent/public/ig-activity.json -
04e5c692026-09-10 auto-data-snapshot: 2026-09-10T18:53:21 (1 data files) — agents/instagram-agent/public/ig-activity.json -
facf8432026-09-10 auto-data-snapshot: 2026-09-10T18:07:04 (1 data files) — agents/instagram-agent/public/ig-activity.json -
1102d512026-09-10 auto-data-snapshot: 2026-09-10T17:34:11 (1 data files) — agents/instagram-agent/public/ig-activity.json -
870187f2026-09-10 auto-data-snapshot: 2026-09-10T17:00:45 (1 data files) — agents/instagram-agent/public/ig-activity.json -
9e3651e2026-09-10 auto-data-snapshot: 2026-09-10T16:27:35 (1 data files) — agents/instagram-agent/public/ig-activity.json -
5cff8ea2026-09-10 auto-data-snapshot: 2026-09-10T14:47:21 (1 data files) — agents/instagram-agent/public/ig-activity.json -
701d8382026-09-10 auto-data-snapshot: 2026-09-10T14:13:31 (1 data files) — agents/instagram-agent/public/ig-activity.json -
425ca862026-09-10 auto-data-snapshot: 2026-09-10T13:39:50 (1 data files) — agents/instagram-agent/public/ig-activity.json -
2dfeaf32026-09-10 auto-data-snapshot: 2026-09-10T13:02:09 (1 data files) — agents/instagram-agent/public/ig-activity.json -
8188dd02026-09-10 auto-data-snapshot: 2026-09-10T12:25:41 (1 data files) — agents/instagram-agent/public/ig-activity.json -
1a8004a2026-09-10 auto-data-snapshot: 2026-09-10T11:43:04 (1 data files) — agents/instagram-agent/public/ig-activity.json -
da7926a2026-09-10 auto-data-snapshot: 2026-09-10T11:08:25 (1 data files) — agents/instagram-agent/public/ig-activity.json -
55cd9d92026-09-10 auto-data-snapshot: 2026-09-10T10:34:55 (1 data files) — agents/instagram-agent/public/ig-activity.json -
0ac35e52026-09-10 auto-data-snapshot: 2026-09-10T10:01:38 (1 data files) — agents/instagram-agent/public/ig-activity.json -
4ba47612026-09-10 auto-data-snapshot: 2026-09-10T09:22:46 (1 data files) — agents/instagram-agent/public/ig-activity.json -
3c09c192026-09-10 auto-data-snapshot: 2026-09-10T08:48:14 (1 data files) — agents/instagram-agent/public/ig-activity.json -
09fe7b82026-09-10 TK-11367: fix delete tool's silent false-negative + add real approval gates -
ff181242026-09-10 auto-data-snapshot: 2026-09-10T08:12:39 (1 data files) — agents/instagram-agent/public/ig-activity.json -
ac130fd2026-09-10 TK-11367: account-scoped Novasuede guard for Norma's daily cadence -
2c9013b2026-09-10 IG fleet: re-enroll @grassclothwallpaper (34->35) — link restored, Steve-approved TK-10740 -
690a70b2026-09-10 TK-10758: ID-pinned eraser for the 2 residual sassy reposts -
dd683032026-09-10 IG fleet: add read-only link-drift checker (TK-10740) -
58215ca2026-09-09 auto-data-snapshot: 2026-09-09T20:06:23 (1 data files) — agents/instagram-agent/public/ig-activity.json -
fa07a522026-09-09 auto-data-snapshot: 2026-09-09T19:32:54 (1 data files) — agents/instagram-agent/public/ig-activity.json -
a4716db2026-09-09 auto-data-snapshot: 2026-09-09T18:59:42 (1 data files) — agents/instagram-agent/public/ig-activity.json -
ba584862026-09-09 auto-data-snapshot: 2026-09-09T18:26:03 (1 data files) — agents/instagram-agent/public/ig-activity.json -
d7ae6b92026-09-09 auto-data-snapshot: 2026-09-09T17:19:59 (1 data files) — agents/instagram-agent/public/ig-activity.json -
52e19582026-09-09 auto-data-snapshot: 2026-09-09T15:02:32 (1 data files) — agents/instagram-agent/public/ig-activity.json -
e2bf5962026-09-09 auto-data-snapshot: 2026-09-09T14:29:35 (1 data files) — agents/instagram-agent/public/ig-activity.json -
664e5a22026-09-09 auto-data-snapshot: 2026-09-09T13:56:45 (1 data files) — agents/instagram-agent/public/ig-activity.json -
5f2a7172026-09-09 auto-data-snapshot: 2026-09-09T13:23:51 (1 data files) — agents/instagram-agent/public/ig-activity.json -
280a57a2026-09-09 auto-data-snapshot: 2026-09-09T12:49:50 (1 data files) — agents/instagram-agent/public/ig-activity.json -
fd2e3672026-09-09 auto-data-snapshot: 2026-09-09T12:16:55 (1 data files) — agents/instagram-agent/public/ig-activity.json -
81d6d392026-09-09 auto-data-snapshot: 2026-09-09T11:42:56 (1 data files) — agents/instagram-agent/public/ig-activity.json -
1113c0b2026-09-09 auto-data-snapshot: 2026-09-09T11:09:48 (1 data files) — agents/instagram-agent/public/ig-activity.json -
fc631f62026-09-09 Update Norma UX evidence from isolated run -
d02cb542026-09-09 auto-data-snapshot: 2026-09-09T10:04:38 (1 data files) — agents/instagram-agent/public/ig-activity.json -
2f246a72026-09-09 auto-data-snapshot: 2026-09-09T09:32:15 (4 data files) — agents/instagram-agent/public/ig-activity.json cta/CTA-REPORT.md cta/cta-mini.json cta/route-check.json -
152d0072026-09-09 auto-data-snapshot: 2026-09-09T08:59:31 (1 data files) — agents/instagram-agent/public/ig-activity.json -
3d903d42026-09-09 Record Norma UX browser evidence -
f3552f72026-09-09 auto-data-snapshot: 2026-09-09T08:26:36 (1 data files) — agents/instagram-agent/public/ig-activity.json -
b70d36d2026-09-09 Clear Norma release lint and type gate -
55fb2ea2026-09-09 Clean lint autofix whitespace -
494dad32026-09-09 Align Norma lint toolchain and autofix safe issues -
318ab902026-09-08 Make session secret narrowing explicit -
9a97f8a2026-09-08 Harden Norma OAuth webhooks and release checks -
db3be272026-09-08 auto-data-snapshot: 2026-09-08T20:11:26 (1 data files) — agents/instagram-agent/public/ig-activity.json -
ac036522026-09-08 auto-data-snapshot: 2026-09-08T19:39:23 (1 data files) — agents/instagram-agent/public/ig-activity.json -
ddd386c2026-09-08 auto-data-snapshot: 2026-09-08T19:07:26 (1 data files) — agents/instagram-agent/public/ig-activity.json -
4fe632a2026-09-08 auto-data-snapshot: 2026-09-08T18:35:21 (1 data files) — agents/instagram-agent/public/ig-activity.json -
fc89a412026-09-08 auto-data-snapshot: 2026-09-08T18:03:25 (1 data files) — agents/instagram-agent/public/ig-activity.json -
f133f552026-09-08 auto-data-snapshot: 2026-09-08T15:35:04 (1 data files) — agents/instagram-agent/public/ig-activity.json -
40c5bce2026-09-08 auto-data-snapshot: 2026-09-08T14:56:20 (1 data files) — agents/instagram-agent/public/ig-activity.json -
6911c0e2026-09-08 auto-data-snapshot: 2026-09-08T14:18:02 (1 data files) — agents/instagram-agent/public/ig-activity.json -
f71b9c32026-09-08 auto-data-snapshot: 2026-09-08T13:39:29 (1 data files) — agents/instagram-agent/public/ig-activity.json -
d63f76f2026-09-08 auto-data-snapshot: 2026-09-08T12:55:25 (1 data files) — agents/instagram-agent/public/ig-activity.json -
158d3c02026-09-08 auto-data-snapshot: 2026-09-08T12:16:02 (1 data files) — agents/instagram-agent/public/ig-activity.json -
d40b9cc2026-09-08 auto-data-snapshot: 2026-09-08T11:37:41 (1 data files) — agents/instagram-agent/public/ig-activity.json -
4d4f9ab2026-09-08 auto-data-snapshot: 2026-09-08T10:58:37 (1 data files) — agents/instagram-agent/public/ig-activity.json -
bce41422026-09-08 auto-data-snapshot: 2026-09-08T10:19:39 (1 data files) — agents/instagram-agent/public/ig-activity.json -
60a5e152026-09-08 auto-data-snapshot: 2026-09-08T09:40:47 (1 data files) — agents/instagram-agent/public/ig-activity.json -
c3dbf272026-09-08 auto-data-snapshot: 2026-09-08T09:02:39 (1 data files) — agents/instagram-agent/public/ig-activity.json -
44ce45b2026-09-08 auto-data-snapshot: 2026-09-08T08:24:00 (1 data files) — agents/instagram-agent/public/ig-activity.json -
5f0326a2026-09-07 auto-data-snapshot: 2026-09-07T19:41:38 (1 data files) — agents/instagram-agent/public/ig-activity.json -
a53f7122026-09-07 auto-data-snapshot: 2026-09-07T19:03:42 (1 data files) — agents/instagram-agent/public/ig-activity.json -
202b70e2026-09-07 auto-data-snapshot: 2026-09-07T18:25:33 (1 data files) — agents/instagram-agent/public/ig-activity.json -
5e9b3502026-09-07 auto-data-snapshot: 2026-09-07T17:47:47 (1 data files) — agents/instagram-agent/public/ig-activity.json -
98efb142026-09-07 auto-data-snapshot: 2026-09-07T17:09:46 (1 data files) — agents/instagram-agent/public/ig-activity.json -
b38bcfa2026-09-07 auto-data-snapshot: 2026-09-07T16:31:47 (1 data files) — agents/instagram-agent/public/ig-activity.json -
0e5da272026-09-07 auto-data-snapshot: 2026-09-07T15:53:48 (1 data files) — agents/instagram-agent/public/ig-activity.json -
81a0af52026-09-07 auto-data-snapshot: 2026-09-07T15:15:55 (1 data files) — agents/instagram-agent/public/ig-activity.json -
c3504752026-09-07 auto-data-snapshot: 2026-09-07T14:38:12 (1 data files) — agents/instagram-agent/public/ig-activity.json -
95c833a2026-09-07 auto-data-snapshot: 2026-09-07T14:00:10 (1 data files) — agents/instagram-agent/public/ig-activity.json -
2d6006f2026-09-07 auto-data-snapshot: 2026-09-07T13:22:13 (1 data files) — agents/instagram-agent/public/ig-activity.json -
ac0b5012026-09-07 auto-data-snapshot: 2026-09-07T12:38:54 (1 data files) — agents/instagram-agent/public/ig-activity.json -
8afe3432026-09-07 auto-data-snapshot: 2026-09-07T12:00:23 (1 data files) — agents/instagram-agent/public/ig-activity.json -
a95d93f2026-09-07 auto-data-snapshot: 2026-09-07T11:21:50 (1 data files) — agents/instagram-agent/public/ig-activity.json -
d8fcf782026-09-07 auto-data-snapshot: 2026-09-07T10:43:18 (1 data files) — agents/instagram-agent/public/ig-activity.json -
bb2e9322026-09-07 auto-data-snapshot: 2026-09-07T10:04:46 (1 data files) — agents/instagram-agent/public/ig-activity.json -
3c2ed322026-09-07 auto-data-snapshot: 2026-09-07T09:25:49 (1 data files) — agents/instagram-agent/public/ig-activity.json -
d46e7c02026-09-07 auto-data-snapshot: 2026-09-07T08:47:31 (1 data files) — agents/instagram-agent/public/ig-activity.json -
b01709d2026-09-07 auto-data-snapshot: 2026-09-07T08:09:05 (1 data files) — agents/instagram-agent/public/ig-activity.json -
2e29d6c2026-09-05 auto-data-snapshot: 2026-09-05T20:16:42 (1 data files) — agents/instagram-agent/public/ig-activity.json -
1c383442026-09-05 auto-data-snapshot: 2026-09-05T19:38:25 (1 data files) — agents/instagram-agent/public/ig-activity.json -
de727f82026-09-05 auto-data-snapshot: 2026-09-05T19:00:09 (1 data files) — agents/instagram-agent/public/ig-activity.json -
9289eee2026-09-05 auto-data-snapshot: 2026-09-05T18:21:36 (1 data files) — agents/instagram-agent/public/ig-activity.json -
689ad592026-09-05 auto-data-snapshot: 2026-09-05T17:43:09 (1 data files) — agents/instagram-agent/public/ig-activity.json -
b09567d2026-09-05 auto-data-snapshot: 2026-09-05T15:09:59 (1 data files) — agents/instagram-agent/public/ig-activity.json -
5e6cde32026-09-05 auto-data-snapshot: 2026-09-05T14:31:27 (1 data files) — agents/instagram-agent/public/ig-activity.json -
afcd15f2026-09-05 auto-data-snapshot: 2026-09-05T13:53:26 (1 data files) — agents/instagram-agent/public/ig-activity.json -
60242132026-09-05 auto-data-snapshot: 2026-09-05T13:15:00 (1 data files) — agents/instagram-agent/public/ig-activity.json -
faf4a412026-09-05 auto-data-snapshot: 2026-09-05T12:36:37 (1 data files) — agents/instagram-agent/public/ig-activity.json -
c79f07f2026-09-05 auto-data-snapshot: 2026-09-05T11:58:24 (1 data files) — agents/instagram-agent/public/ig-activity.json -
833ccff2026-09-05 auto-data-snapshot: 2026-09-05T11:20:09 (1 data files) — agents/instagram-agent/public/ig-activity.json -
f29b4402026-09-05 auto-data-snapshot: 2026-09-05T10:42:02 (1 data files) — agents/instagram-agent/public/ig-activity.json -
219ac642026-09-05 auto-data-snapshot: 2026-09-05T10:03:39 (1 data files) — agents/instagram-agent/public/ig-activity.json -
df6fe092026-09-05 auto-data-snapshot: 2026-09-05T09:24:41 (1 data files) — agents/instagram-agent/public/ig-activity.json -
d368c382026-09-05 auto-data-snapshot: 2026-09-05T08:46:42 (1 data files) — agents/instagram-agent/public/ig-activity.json -
eaf71752026-09-04 auto-data-snapshot: 2026-09-04T19:59:19 (1 data files) — agents/instagram-agent/public/ig-activity.json -
f9276852026-09-04 auto-data-snapshot: 2026-09-04T19:20:56 (1 data files) — agents/instagram-agent/public/ig-activity.json -
b0d29972026-09-04 auto-data-snapshot: 2026-09-04T18:42:47 (1 data files) — agents/instagram-agent/public/ig-activity.json -
3c230582026-09-04 auto-data-snapshot: 2026-09-04T18:04:25 (1 data files) — agents/instagram-agent/public/ig-activity.json -
fa4859a2026-09-04 auto-data-snapshot: 2026-09-04T17:26:14 (1 data files) — agents/instagram-agent/public/ig-activity.json -
baf3fb92026-09-04 auto-data-snapshot: 2026-09-04T15:31:50 (1 data files) — agents/instagram-agent/public/ig-activity.json -
360fef92026-09-04 auto-data-snapshot: 2026-09-04T14:52:10 (1 data files) — agents/instagram-agent/public/ig-activity.json -
784b4b92026-09-04 auto-data-snapshot: 2026-09-04T14:13:19 (1 data files) — agents/instagram-agent/public/ig-activity.json -
08fe7b62026-09-04 auto-data-snapshot: 2026-09-04T13:35:12 (1 data files) — agents/instagram-agent/public/ig-activity.json -
2b32aed2026-09-04 auto-data-snapshot: 2026-09-04T12:55:58 (1 data files) — agents/instagram-agent/public/ig-activity.json -
2b2cdb92026-09-04 auto-data-snapshot: 2026-09-04T12:10:54 (1 data files) — agents/instagram-agent/public/ig-activity.json -
c4439f72026-09-04 auto-data-snapshot: 2026-09-04T11:31:34 (1 data files) — agents/instagram-agent/public/ig-activity.json -
40ad9192026-09-04 auto-data-snapshot: 2026-09-04T10:48:46 (1 data files) — agents/instagram-agent/public/ig-activity.json -
e6506242026-09-04 auto-data-snapshot: 2026-09-04T10:10:38 (1 data files) — agents/instagram-agent/public/ig-activity.json -
105b6582026-09-04 auto-data-snapshot: 2026-09-04T09:09:45 (1 data files) — agents/instagram-agent/public/ig-activity.json -
35f19212026-09-04 auto-data-snapshot: 2026-09-04T08:26:29 (1 data files) — agents/instagram-agent/public/ig-activity.json -
531a4a42026-09-03 auto-data-snapshot: 2026-09-03T20:10:09 (1 data files) — agents/instagram-agent/public/ig-activity.json -
a2a082e2026-09-03 auto-data-snapshot: 2026-09-03T19:32:13 (1 data files) — agents/instagram-agent/public/ig-activity.json -
66e15b32026-09-03 auto-data-snapshot: 2026-09-03T18:54:12 (1 data files) — agents/instagram-agent/public/ig-activity.json -
0d3e8892026-09-03 auto-data-snapshot: 2026-09-03T18:17:45 (1 data files) — agents/instagram-agent/public/ig-activity.json -
3e9fbec2026-09-03 auto-data-snapshot: 2026-09-03T17:39:42 (1 data files) — agents/instagram-agent/public/ig-activity.json -
381eecd2026-09-03 auto-data-snapshot: 2026-09-03T15:45:08 (1 data files) — agents/instagram-agent/public/ig-activity.json -
6843c462026-09-03 auto-data-snapshot: 2026-09-03T15:07:41 (1 data files) — agents/instagram-agent/public/ig-activity.json -
6bba4fa2026-09-03 auto-data-snapshot: 2026-09-03T14:29:24 (1 data files) — agents/instagram-agent/public/ig-activity.json -
8d6ad092026-09-03 auto-data-snapshot: 2026-09-03T13:47:49 (1 data files) — agents/instagram-agent/public/ig-activity.json -
da3c94d2026-09-03 auto-data-snapshot: 2026-09-03T13:07:42 (1 data files) — agents/instagram-agent/public/ig-activity.json -
d3df7242026-09-03 auto-data-snapshot: 2026-09-03T12:32:21 (1 data files) — agents/instagram-agent/public/ig-activity.json -
75844f82026-09-03 auto-data-snapshot: 2026-09-03T11:49:57 (1 data files) — agents/instagram-agent/public/ig-activity.json -
0edb69d2026-09-03 auto-data-snapshot: 2026-09-03T11:10:51 (1 data files) — agents/instagram-agent/public/ig-activity.json -
77c12db2026-09-03 auto-data-snapshot: 2026-09-03T10:32:28 (1 data files) — agents/instagram-agent/public/ig-activity.json -
3424b882026-09-03 auto-data-snapshot: 2026-09-03T09:53:05 (1 data files) — agents/instagram-agent/public/ig-activity.json -
52410172026-09-03 auto-data-snapshot: 2026-09-03T09:14:19 (1 data files) — agents/instagram-agent/public/ig-activity.json -
1b4d5fa2026-09-03 auto-data-snapshot: 2026-09-03T08:35:39 (1 data files) — agents/instagram-agent/public/ig-activity.json -
26a21882026-09-02 auto-data-snapshot: 2026-09-02T19:55:31 (1 data files) — agents/instagram-agent/public/ig-activity.json -
d47bb932026-09-02 auto-data-snapshot: 2026-09-02T19:17:50 (1 data files) — agents/instagram-agent/public/ig-activity.json -
1308b512026-09-02 auto-data-snapshot: 2026-09-02T18:39:50 (1 data files) — agents/instagram-agent/public/ig-activity.json -
c3a185b2026-09-02 auto-data-snapshot: 2026-09-02T18:02:03 (1 data files) — agents/instagram-agent/public/ig-activity.json -
7c3d21c2026-09-02 auto-data-snapshot: 2026-09-02T17:24:05 (1 data files) — agents/instagram-agent/public/ig-activity.json -
5fa7cd92026-09-02 auto-data-snapshot: 2026-09-02T16:03:42 (1 data files) — agents/instagram-agent/public/ig-activity.json -
a82dd032026-09-02 auto-data-snapshot: 2026-09-02T15:21:07 (1 data files) — agents/instagram-agent/public/ig-activity.json -
e4feac52026-09-02 auto-data-snapshot: 2026-09-02T14:42:45 (1 data files) — agents/instagram-agent/public/ig-activity.json -
846e7902026-09-02 auto-data-snapshot: 2026-09-02T14:03:59 (1 data files) — agents/instagram-agent/public/ig-activity.json -
8cd45152026-09-02 auto-data-snapshot: 2026-09-02T13:25:17 (1 data files) — agents/instagram-agent/public/ig-activity.json -
533c5c62026-09-02 auto-data-snapshot: 2026-09-02T12:46:36 (1 data files) — agents/instagram-agent/public/ig-activity.json -
0c42c772026-09-02 auto-data-snapshot: 2026-09-02T12:07:47 (1 data files) — agents/instagram-agent/public/ig-activity.json -
bd729232026-09-02 auto-data-snapshot: 2026-09-02T11:28:31 (1 data files) — agents/instagram-agent/public/ig-activity.json -
f4e158e2026-09-02 auto-data-snapshot: 2026-09-02T10:48:45 (1 data files) — agents/instagram-agent/public/ig-activity.json -
a324bd72026-09-02 auto-data-snapshot: 2026-09-02T10:09:29 (1 data files) — agents/instagram-agent/public/ig-activity.json -
daa09d92026-09-02 auto-data-snapshot: 2026-09-02T09:35:20 (1 data files) — agents/instagram-agent/public/ig-activity.json -
24803732026-09-02 auto-data-snapshot: 2026-09-02T09:04:08 (1 data files) — agents/instagram-agent/public/ig-activity.json -
43a6b322026-09-02 auto-data-snapshot: 2026-09-02T08:25:36 (1 data files) — agents/instagram-agent/public/ig-activity.json -
8195dc42026-09-01 auto-data-snapshot: 2026-09-01T19:53:19 (1 data files) — agents/instagram-agent/public/ig-activity.json -
3b5d7982026-09-01 auto-data-snapshot: 2026-09-01T19:16:04 (1 data files) — agents/instagram-agent/public/ig-activity.json -
ceacd852026-09-01 auto-data-snapshot: 2026-09-01T18:38:25 (1 data files) — agents/instagram-agent/public/ig-activity.json -
c3684d92026-09-01 auto-data-snapshot: 2026-09-01T18:00:51 (1 data files) — agents/instagram-agent/public/ig-activity.json -
18ab19b2026-09-01 auto-data-snapshot: 2026-09-01T17:22:42 (1 data files) — agents/instagram-agent/public/ig-activity.json -
430062e2026-09-01 auto-data-snapshot: 2026-09-01T16:07:10 (1 data files) — agents/instagram-agent/public/ig-activity.json -
bc141302026-09-01 auto-data-snapshot: 2026-09-01T15:29:45 (1 data files) — agents/instagram-agent/public/ig-activity.json -
0acd26d2026-09-01 auto-data-snapshot: 2026-09-01T14:52:01 (1 data files) — agents/instagram-agent/public/ig-activity.json -
9b1947d2026-09-01 auto-data-snapshot: 2026-09-01T14:14:21 (1 data files) — agents/instagram-agent/public/ig-activity.json -
941e0432026-09-01 auto-data-snapshot: 2026-09-01T13:36:10 (1 data files) — agents/instagram-agent/public/ig-activity.json -
4605cdd2026-09-01 auto-data-snapshot: 2026-09-01T12:55:30 (1 data files) — agents/instagram-agent/public/ig-activity.json -
1edc8702026-09-01 auto-data-snapshot: 2026-09-01T12:16:45 (1 data files) — agents/instagram-agent/public/ig-activity.json -
fc99c842026-09-01 auto-data-snapshot: 2026-09-01T11:38:20 (1 data files) — agents/instagram-agent/public/ig-activity.json -
7b0c23f2026-09-01 auto-data-snapshot: 2026-09-01T10:56:56 (1 data files) — agents/instagram-agent/public/ig-activity.json -
b91e7cf2026-09-01 auto-data-snapshot: 2026-09-01T10:19:15 (1 data files) — agents/instagram-agent/public/ig-activity.json -
49a86b82026-09-01 auto-data-snapshot: 2026-09-01T09:42:16 (1 data files) — agents/instagram-agent/public/ig-activity.json -
a61acb42026-09-01 auto-data-snapshot: 2026-09-01T09:05:22 (1 data files) — agents/instagram-agent/public/ig-activity.json -
d9d84fe2026-09-01 auto-data-snapshot: 2026-09-01T08:28:16 (1 data files) — agents/instagram-agent/public/ig-activity.json -
09918402026-08-31 auto-data-snapshot: 2026-08-31T20:06:26 (1 data files) — agents/instagram-agent/public/ig-activity.json -
58bd8342026-08-31 auto-data-snapshot: 2026-08-31T19:29:32 (1 data files) — agents/instagram-agent/public/ig-activity.json -
c526f802026-08-31 auto-data-snapshot: 2026-08-31T18:52:39 (1 data files) — agents/instagram-agent/public/ig-activity.json -
071fb8b2026-08-31 auto-data-snapshot: 2026-08-31T18:15:28 (1 data files) — agents/instagram-agent/public/ig-activity.json -
222d28f2026-08-31 auto-data-snapshot: 2026-08-31T17:38:21 (1 data files) — agents/instagram-agent/public/ig-activity.json -
cfcb8d12026-08-31 auto-data-snapshot: 2026-08-31T16:59:21 (1 data files) — agents/instagram-agent/public/ig-activity.json -
c9689762026-08-31 auto-data-snapshot: 2026-08-31T16:22:16 (1 data files) — agents/instagram-agent/public/ig-activity.json -
ab3efbb2026-08-31 auto-data-snapshot: 2026-08-31T15:44:48 (1 data files) — agents/instagram-agent/public/ig-activity.json -
b414d0e2026-08-31 auto-data-snapshot: 2026-08-31T15:07:00 (1 data files) — agents/instagram-agent/public/ig-activity.json -
20f8e1c2026-08-31 auto-data-snapshot: 2026-08-31T14:28:57 (1 data files) — agents/instagram-agent/public/ig-activity.json -
abf140c2026-08-31 auto-data-snapshot: 2026-08-31T13:51:21 (1 data files) — agents/instagram-agent/public/ig-activity.json -
49422972026-08-31 auto-data-snapshot: 2026-08-31T13:13:14 (1 data files) — agents/instagram-agent/public/ig-activity.json -
023e8a72026-08-31 auto-data-snapshot: 2026-08-31T12:34:16 (1 data files) — agents/instagram-agent/public/ig-activity.json -
331fc8b2026-08-31 auto-data-snapshot: 2026-08-31T11:55:57 (1 data files) — agents/instagram-agent/public/ig-activity.json -
1e14ffe2026-08-31 auto-data-snapshot: 2026-08-31T11:17:15 (1 data files) — agents/instagram-agent/public/ig-activity.json -
61b4acb2026-08-31 auto-data-snapshot: 2026-08-31T10:38:49 (1 data files) — agents/instagram-agent/public/ig-activity.json -
2f54b802026-08-31 auto-data-snapshot: 2026-08-31T10:06:07 (1 data files) — agents/instagram-agent/public/ig-activity.json -
be89cc32026-08-31 auto-data-snapshot: 2026-08-31T09:29:05 (1 data files) — agents/instagram-agent/public/ig-activity.json -
1e76e1a2026-08-31 auto-data-snapshot: 2026-08-31T08:52:01 (1 data files) — agents/instagram-agent/public/ig-activity.json -
4c30e512026-08-31 auto-data-snapshot: 2026-08-31T08:15:07 (1 data files) — agents/instagram-agent/public/ig-activity.json -
c7d0a872026-08-29 auto-data-snapshot: 2026-08-29T20:09:38 (1 data files) — agents/instagram-agent/public/ig-activity.json -
d238df42026-08-29 auto-data-snapshot: 2026-08-29T19:32:52 (1 data files) — agents/instagram-agent/public/ig-activity.json -
06a97dd2026-08-29 auto-data-snapshot: 2026-08-29T18:56:11 (1 data files) — agents/instagram-agent/public/ig-activity.json -
5ae95562026-08-29 auto-data-snapshot: 2026-08-29T18:19:19 (1 data files) — agents/instagram-agent/public/ig-activity.json -
0b22a6a2026-08-29 auto-data-snapshot: 2026-08-29T17:42:33 (1 data files) — agents/instagram-agent/public/ig-activity.json -
9f376482026-08-29 auto-data-snapshot: 2026-08-29T15:52:29 (1 data files) — agents/instagram-agent/public/ig-activity.json -
bf429972026-08-29 auto-data-snapshot: 2026-08-29T15:15:52 (1 data files) — agents/instagram-agent/public/ig-activity.json -
e17d0a12026-08-29 auto-data-snapshot: 2026-08-29T14:38:58 (1 data files) — agents/instagram-agent/public/ig-activity.json -
52359bc2026-08-29 auto-data-snapshot: 2026-08-29T14:01:46 (1 data files) — agents/instagram-agent/public/ig-activity.json -
a1f23442026-08-29 auto-data-snapshot: 2026-08-29T13:24:48 (1 data files) — agents/instagram-agent/public/ig-activity.json -
c9da9b32026-08-29 auto-data-snapshot: 2026-08-29T12:47:37 (1 data files) — agents/instagram-agent/public/ig-activity.json -
b4f28772026-08-29 auto-data-snapshot: 2026-08-29T12:10:50 (1 data files) — agents/instagram-agent/public/ig-activity.json -
04e0c112026-08-29 auto-data-snapshot: 2026-08-29T11:33:46 (1 data files) — agents/instagram-agent/public/ig-activity.json -
cf09a7a2026-08-29 auto-data-snapshot: 2026-08-29T10:56:48 (1 data files) — agents/instagram-agent/public/ig-activity.json -
0c2e0852026-08-29 auto-data-snapshot: 2026-08-29T10:19:53 (1 data files) — agents/instagram-agent/public/ig-activity.json -
678bc692026-08-29 auto-data-snapshot: 2026-08-29T09:43:04 (1 data files) — agents/instagram-agent/public/ig-activity.json -
e5f3bcc2026-08-29 auto-data-snapshot: 2026-08-29T09:06:18 (1 data files) — agents/instagram-agent/public/ig-activity.json -
a45f28a2026-08-29 auto-data-snapshot: 2026-08-29T08:29:29 (1 data files) — agents/instagram-agent/public/ig-activity.json -
3c619db2026-08-28 auto-data-snapshot: 2026-08-28T19:30:46 (1 data files) — agents/instagram-agent/public/ig-activity.json -
6def0172026-08-28 auto-data-snapshot: 2026-08-28T18:53:51 (1 data files) — agents/instagram-agent/public/ig-activity.json -
3cbdc472026-08-28 auto-data-snapshot: 2026-08-28T18:16:57 (1 data files) — agents/instagram-agent/public/ig-activity.json -
62081502026-08-28 auto-data-snapshot: 2026-08-28T17:39:54 (1 data files) — agents/instagram-agent/public/ig-activity.json -
f7dda892026-08-28 auto-data-snapshot: 2026-08-28T17:02:53 (1 data files) — agents/instagram-agent/public/ig-activity.json -
425bdab2026-08-28 auto-data-snapshot: 2026-08-28T15:48:59 (1 data files) — agents/instagram-agent/public/ig-activity.json -
c831e8d2026-08-28 auto-data-snapshot: 2026-08-28T15:12:09 (1 data files) — agents/instagram-agent/public/ig-activity.json -
6551ffb2026-08-28 auto-data-snapshot: 2026-08-28T14:34:59 (1 data files) — agents/instagram-agent/public/ig-activity.json -
09259db2026-08-28 auto-data-snapshot: 2026-08-28T13:58:10 (1 data files) — agents/instagram-agent/public/ig-activity.json -
96ad14e2026-08-28 auto-data-snapshot: 2026-08-28T13:21:26 (1 data files) — agents/instagram-agent/public/ig-activity.json -
a7cab9b2026-08-28 auto-data-snapshot: 2026-08-28T12:44:16 (1 data files) — agents/instagram-agent/public/ig-activity.json -
bd8aa332026-08-28 auto-data-snapshot: 2026-08-28T12:07:22 (1 data files) — agents/instagram-agent/public/ig-activity.json -
fe374272026-08-28 auto-data-snapshot: 2026-08-28T11:30:23 (1 data files) — agents/instagram-agent/public/ig-activity.json -
16c82052026-08-28 auto-data-snapshot: 2026-08-28T10:53:29 (1 data files) — agents/instagram-agent/public/ig-activity.json -
41d4f792026-08-28 auto-data-snapshot: 2026-08-28T10:16:39 (1 data files) — agents/instagram-agent/public/ig-activity.json -
a278a272026-08-28 auto-data-snapshot: 2026-08-28T09:39:28 (1 data files) — agents/instagram-agent/public/ig-activity.json -
0aed9bf2026-08-28 auto-data-snapshot: 2026-08-28T09:02:22 (1 data files) — agents/instagram-agent/public/ig-activity.json -
cbd83212026-08-28 auto-data-snapshot: 2026-08-28T08:24:14 (1 data files) — agents/instagram-agent/public/ig-activity.json -
4b4bb892026-08-28 auto-data-snapshot: 2026-08-28T07:45:44 (1 data files) — scripts/password-restore/admin-2026-08-28T14-32-40-840Z.json -
159c3e52026-08-28 scripts: restore-admin-hash helper (revert a tier_credentials hash from a saved restore file) -
db0ecc22026-08-28 feat(set-admin-password): NEW_PW_B64 input to survive shell '!' mangling -
7c027a12026-08-28 fix(set-admin-password): read .env.local first, echo DB host, abort on multi-row (Cody gate) -
c5e8f582026-08-28 scripts: reversible set-admin-password helper (bcrypt, captures old hash) -
1ea90de2026-08-27 auto-data-snapshot: 2026-08-27T20:01:28 (1 data files) — agents/instagram-agent/public/ig-activity.json -
f08a3ee2026-08-27 auto-data-snapshot: 2026-08-27T19:24:37 (1 data files) — agents/instagram-agent/public/ig-activity.json -
5e380e22026-08-27 auto-data-snapshot: 2026-08-27T18:47:45 (1 data files) — agents/instagram-agent/public/ig-activity.json -
3e6347f2026-08-27 auto-data-snapshot: 2026-08-27T18:10:50 (1 data files) — agents/instagram-agent/public/ig-activity.json -
c756e292026-08-27 auto-data-snapshot: 2026-08-27T17:33:56 (1 data files) — agents/instagram-agent/public/ig-activity.json -
735514a2026-08-27 auto-data-snapshot: 2026-08-27T15:43:16 (1 data files) — agents/instagram-agent/public/ig-activity.json -
f93292f2026-08-27 auto-data-snapshot: 2026-08-27T15:06:17 (1 data files) — agents/instagram-agent/public/ig-activity.json -
edaf1f52026-08-27 auto-data-snapshot: 2026-08-27T14:29:15 (1 data files) — agents/instagram-agent/public/ig-activity.json -
042267e2026-08-27 auto-data-snapshot: 2026-08-27T13:51:49 (1 data files) — agents/instagram-agent/public/ig-activity.json -
d43ec192026-08-27 auto-data-snapshot: 2026-08-27T13:15:02 (1 data files) — agents/instagram-agent/public/ig-activity.json -
c575b9a2026-08-27 auto-data-snapshot: 2026-08-27T12:38:09 (1 data files) — agents/instagram-agent/public/ig-activity.json -
f3efdf72026-08-27 auto-data-snapshot: 2026-08-27T12:01:15 (1 data files) — agents/instagram-agent/public/ig-activity.json -
2c3fe952026-08-27 auto-data-snapshot: 2026-08-27T11:24:00 (1 data files) — agents/instagram-agent/public/ig-activity.json -
afb0c092026-08-27 TK-10449: regenerate IG registry from live token — @grassclothwallpaper link dropped (35->34 postable, verified) -
0045a7c2026-08-27 auto-data-snapshot: 2026-08-27T10:47:06 (1 data files) — agents/instagram-agent/public/ig-activity.json -
63141e32026-08-27 auto-data-snapshot: 2026-08-27T10:10:28 (1 data files) — agents/instagram-agent/public/ig-activity.json -
7abb93e2026-08-27 auto-data-snapshot: 2026-08-27T09:33:34 (1 data files) — agents/instagram-agent/public/ig-activity.json -
00f0dfd2026-08-27 auto-data-snapshot: 2026-08-27T08:56:28 (1 data files) — agents/instagram-agent/public/ig-activity.json -
cae79462026-08-27 auto-data-snapshot: 2026-08-27T08:19:36 (1 data files) — agents/instagram-agent/public/ig-activity.json -
5e7147f2026-08-26 auto-data-snapshot: 2026-08-26T20:07:56 (1 data files) — agents/instagram-agent/public/ig-activity.json -
5f5472e2026-08-26 auto-data-snapshot: 2026-08-26T19:31:35 (1 data files) — agents/instagram-agent/public/ig-activity.json -
1dbcd5a2026-08-26 auto-data-snapshot: 2026-08-26T18:55:11 (1 data files) — agents/instagram-agent/public/ig-activity.json -
4355e0f2026-08-26 auto-data-snapshot: 2026-08-26T18:18:32 (1 data files) — agents/instagram-agent/public/ig-activity.json -
e12abed2026-08-26 auto-data-snapshot: 2026-08-26T17:42:06 (1 data files) — agents/instagram-agent/public/ig-activity.json -
73e83b32026-08-26 auto-data-snapshot: 2026-08-26T17:05:40 (1 data files) — agents/instagram-agent/public/ig-activity.json -
549be2e2026-08-26 auto-data-snapshot: 2026-08-26T16:29:03 (1 data files) — agents/instagram-agent/public/ig-activity.json -
dddca162026-08-26 auto-data-snapshot: 2026-08-26T15:52:28 (1 data files) — agents/instagram-agent/public/ig-activity.json -
f4b84bd2026-08-26 auto-data-snapshot: 2026-08-26T15:16:03 (1 data files) — agents/instagram-agent/public/ig-activity.json -
449fa922026-08-26 auto-data-snapshot: 2026-08-26T14:39:25 (1 data files) — agents/instagram-agent/public/ig-activity.json -
a60fb442026-08-26 auto-data-snapshot: 2026-08-26T14:02:58 (1 data files) — agents/instagram-agent/public/ig-activity.json -
362538b2026-08-26 auto-data-snapshot: 2026-08-26T13:25:11 (1 data files) — agents/instagram-agent/public/ig-activity.json -
745fed22026-08-26 auto-data-snapshot: 2026-08-26T12:47:56 (1 data files) — agents/instagram-agent/public/ig-activity.json -
13c81bc2026-08-26 auto-data-snapshot: 2026-08-26T12:08:58 (1 data files) — agents/instagram-agent/public/ig-activity.json -
9df48682026-08-26 auto-data-snapshot: 2026-08-26T11:30:17 (1 data files) — agents/instagram-agent/public/ig-activity.json -
69077d02026-08-26 auto-data-snapshot: 2026-08-26T10:53:15 (1 data files) — agents/instagram-agent/public/ig-activity.json -
c8be6e52026-08-26 auto-data-snapshot: 2026-08-26T10:15:42 (1 data files) — agents/instagram-agent/public/ig-activity.json -
560e3c12026-08-26 auto-data-snapshot: 2026-08-26T09:38:32 (1 data files) — agents/instagram-agent/public/ig-activity.json -
8d639f12026-08-26 auto-data-snapshot: 2026-08-26T09:01:00 (1 data files) — agents/instagram-agent/public/ig-activity.json -
ca257a92026-08-26 auto-data-snapshot: 2026-08-26T08:21:31 (1 data files) — agents/instagram-agent/public/ig-activity.json -
6d4b1d02026-08-25 auto-data-snapshot: 2026-08-25T19:29:44 (1 data files) — agents/instagram-agent/public/ig-activity.json -
44723242026-08-25 auto-data-snapshot: 2026-08-25T18:53:12 (1 data files) — agents/instagram-agent/public/ig-activity.json -
ea61d892026-08-25 auto-data-snapshot: 2026-08-25T18:16:26 (1 data files) — agents/instagram-agent/public/ig-activity.json -
6dcc6802026-08-25 auto-data-snapshot: 2026-08-25T17:39:55 (1 data files) — agents/instagram-agent/public/ig-activity.json -
99f3fe22026-08-25 auto-data-snapshot: 2026-08-25T17:03:18 (1 data files) — agents/instagram-agent/public/ig-activity.json -
6697b0e2026-08-25 auto-data-snapshot: 2026-08-25T16:26:17 (1 data files) — agents/instagram-agent/public/ig-activity.json -
f70a2792026-08-25 auto-data-snapshot: 2026-08-25T15:49:32 (1 data files) — agents/instagram-agent/public/ig-activity.json -
c8193532026-08-25 auto-data-snapshot: 2026-08-25T15:12:26 (1 data files) — agents/instagram-agent/public/ig-activity.json -
fdd80a02026-08-25 auto-data-snapshot: 2026-08-25T14:34:54 (1 data files) — agents/instagram-agent/public/ig-activity.json -
419678e2026-08-25 auto-data-snapshot: 2026-08-25T13:58:08 (1 data files) — agents/instagram-agent/public/ig-activity.json -
276ac8f2026-08-25 auto-data-snapshot: 2026-08-25T13:21:24 (1 data files) — agents/instagram-agent/public/ig-activity.json -
9677aff2026-08-25 auto-data-snapshot: 2026-08-25T12:44:18 (1 data files) — agents/instagram-agent/public/ig-activity.json -
f2d128e2026-08-25 auto-data-snapshot: 2026-08-25T12:06:42 (1 data files) — agents/instagram-agent/public/ig-activity.json -
52bbfee2026-08-25 auto-data-snapshot: 2026-08-25T11:28:19 (1 data files) — agents/instagram-agent/public/ig-activity.json -
be054e02026-08-25 auto-data-snapshot: 2026-08-25T10:46:10 (1 data files) — agents/instagram-agent/public/ig-activity.json -
fcabb6e2026-08-25 auto-data-snapshot: 2026-08-25T10:08:44 (1 data files) — agents/instagram-agent/public/ig-activity.json -
9d967d32026-08-25 auto-data-snapshot: 2026-08-25T09:32:22 (1 data files) — agents/instagram-agent/public/ig-activity.json -
29e25052026-08-25 auto-data-snapshot: 2026-08-25T08:55:17 (1 data files) — agents/instagram-agent/public/ig-activity.json -
60d2b882026-08-25 Add delete-novasuede-graph.js — gated Graph-API removal of 33 Novasuede IG posts (dry-run default, --go to execute) -
b2e74132026-08-24 auto-data-snapshot: 2026-08-24T20:06:56 (1 data files) — agents/instagram-agent/public/ig-activity.json -
64979542026-08-24 auto-data-snapshot: 2026-08-24T19:34:57 (1 data files) — agents/instagram-agent/public/ig-activity.json -
993670d2026-08-24 auto-data-snapshot: 2026-08-24T18:33:36 (1 data files) — agents/instagram-agent/public/ig-activity.json -
6dfdfbf2026-08-24 auto-data-snapshot: 2026-08-24T18:03:09 (1 data files) — agents/instagram-agent/public/ig-activity.json -
cd870f82026-08-24 auto-data-snapshot: 2026-08-24T17:32:43 (1 data files) — agents/instagram-agent/public/ig-activity.json -
b7e398b2026-08-24 auto-data-snapshot: 2026-08-24T17:02:17 (1 data files) — agents/instagram-agent/public/ig-activity.json -
6f489312026-08-24 auto-data-snapshot: 2026-08-24T16:31:44 (1 data files) — agents/instagram-agent/public/ig-activity.json -
62a177a2026-08-24 auto-data-snapshot: 2026-08-24T15:30:55 (1 data files) — agents/instagram-agent/public/ig-activity.json -
44be7e92026-08-24 auto-data-snapshot: 2026-08-24T15:00:29 (1 data files) — agents/instagram-agent/public/ig-activity.json -
fe68aed2026-08-24 auto-data-snapshot: 2026-08-24T14:29:57 (1 data files) — agents/instagram-agent/public/ig-activity.json -
48108a42026-08-24 auto-data-snapshot: 2026-08-24T13:59:29 (1 data files) — agents/instagram-agent/public/ig-activity.json -
2759e572026-08-24 auto-data-snapshot: 2026-08-24T13:25:50 (1 data files) — agents/instagram-agent/public/ig-activity.json -
d4ae3a22026-08-24 auto-data-snapshot: 2026-08-24T12:55:01 (1 data files) — agents/instagram-agent/public/ig-activity.json -
d451e582026-08-24 auto-data-snapshot: 2026-08-24T12:20:25 (1 data files) — agents/instagram-agent/public/ig-activity.json -
223ab9d2026-08-24 auto-data-snapshot: 2026-08-24T11:44:27 (1 data files) — agents/instagram-agent/public/ig-activity.json -
bdb262c2026-08-24 auto-data-snapshot: 2026-08-24T11:12:29 (1 data files) — agents/instagram-agent/public/ig-activity.json -
674adb12026-08-24 auto-data-snapshot: 2026-08-24T10:40:26 (1 data files) — agents/instagram-agent/public/ig-activity.json -
c1c2d222026-08-24 auto-data-snapshot: 2026-08-24T10:08:33 (1 data files) — agents/instagram-agent/public/ig-activity.json -
b2932af2026-08-24 auto-data-snapshot: 2026-08-24T09:36:43 (1 data files) — agents/instagram-agent/public/ig-activity.json -
c868ff82026-08-24 auto-data-snapshot: 2026-08-24T09:04:34 (1 data files) — agents/instagram-agent/public/ig-activity.json -
ee56ffa2026-08-24 auto-data-snapshot: 2026-08-24T08:30:43 (1 data files) — agents/instagram-agent/public/ig-activity.json -
d521f5c2026-08-22 auto-data-snapshot: 2026-08-22T20:21:39 (1 data files) — agents/instagram-agent/public/ig-activity.json -
c52f42e2026-08-22 auto-data-snapshot: 2026-08-22T19:49:55 (1 data files) — agents/instagram-agent/public/ig-activity.json -
8862da52026-08-22 auto-data-snapshot: 2026-08-22T19:18:13 (1 data files) — agents/instagram-agent/public/ig-activity.json -
c01c4e02026-08-22 auto-data-snapshot: 2026-08-22T18:46:26 (1 data files) — agents/instagram-agent/public/ig-activity.json -
2df7cff2026-08-22 auto-data-snapshot: 2026-08-22T18:14:40 (1 data files) — agents/instagram-agent/public/ig-activity.json -
13869212026-08-22 auto-data-snapshot: 2026-08-22T17:42:55 (1 data files) — agents/instagram-agent/public/ig-activity.json -
ab7e6f22026-08-22 auto-data-snapshot: 2026-08-22T17:10:07 (1 data files) — agents/instagram-agent/public/ig-activity.json -
27a23782026-08-22 auto-data-snapshot: 2026-08-22T16:38:17 (1 data files) — agents/instagram-agent/public/ig-activity.json -
ae293622026-08-22 auto-data-snapshot: 2026-08-22T16:06:34 (1 data files) — agents/instagram-agent/public/ig-activity.json -
2e0c17b2026-08-22 auto-data-snapshot: 2026-08-22T15:34:47 (1 data files) — agents/instagram-agent/public/ig-activity.json -
5ee131f2026-08-22 auto-data-snapshot: 2026-08-22T15:02:59 (1 data files) — agents/instagram-agent/public/ig-activity.json -
aff723e2026-08-22 auto-data-snapshot: 2026-08-22T14:31:07 (1 data files) — agents/instagram-agent/public/ig-activity.json -
0ef65b82026-08-22 auto-data-snapshot: 2026-08-22T13:59:22 (1 data files) — agents/instagram-agent/public/ig-activity.json -
15e89a32026-08-22 auto-data-snapshot: 2026-08-22T13:27:36 (1 data files) — agents/instagram-agent/public/ig-activity.json -
4b722b02026-08-22 auto-data-snapshot: 2026-08-22T12:55:46 (1 data files) — agents/instagram-agent/public/ig-activity.json -
1061cc72026-08-22 auto-data-snapshot: 2026-08-22T12:23:53 (1 data files) — agents/instagram-agent/public/ig-activity.json -
e11994d2026-08-22 auto-data-snapshot: 2026-08-22T11:52:06 (1 data files) — agents/instagram-agent/public/ig-activity.json -
069fb022026-08-22 auto-data-snapshot: 2026-08-22T10:47:10 (1 data files) — agents/instagram-agent/public/ig-activity.json -
e3de0b42026-08-22 auto-data-snapshot: 2026-08-22T10:15:24 (1 data files) — agents/instagram-agent/public/ig-activity.json -
f0d65772026-08-22 auto-data-snapshot: 2026-08-22T09:43:39 (1 data files) — agents/instagram-agent/public/ig-activity.json -
ce53f0e2026-08-22 auto-data-snapshot: 2026-08-22T09:11:56 (1 data files) — agents/instagram-agent/public/ig-activity.json -
7b7c7622026-08-22 auto-data-snapshot: 2026-08-22T08:40:11 (1 data files) — agents/instagram-agent/public/ig-activity.json -
999d36a2026-08-21 auto-data-snapshot: 2026-08-21T19:54:30 (1 data files) — agents/instagram-agent/public/ig-activity.json -
288ffe72026-08-21 auto-data-snapshot: 2026-08-21T19:22:48 (1 data files) — agents/instagram-agent/public/ig-activity.json -
eb4f51b2026-08-21 auto-data-snapshot: 2026-08-21T18:51:04 (1 data files) — agents/instagram-agent/public/ig-activity.json -
b83df232026-08-21 auto-data-snapshot: 2026-08-21T18:19:14 (1 data files) — agents/instagram-agent/public/ig-activity.json -
2cb74262026-08-21 auto-data-snapshot: 2026-08-21T17:47:31 (1 data files) — agents/instagram-agent/public/ig-activity.json -
79b0b6f2026-08-21 auto-data-snapshot: 2026-08-21T17:15:45 (1 data files) — agents/instagram-agent/public/ig-activity.json -
549a3602026-08-21 auto-data-snapshot: 2026-08-21T16:12:08 (1 data files) — agents/instagram-agent/public/ig-activity.json -
0324fdc2026-08-21 auto-data-snapshot: 2026-08-21T15:40:21 (1 data files) — agents/instagram-agent/public/ig-activity.json -
63161822026-08-21 auto-data-snapshot: 2026-08-21T15:08:36 (1 data files) — agents/instagram-agent/public/ig-activity.json -
619aa112026-08-21 auto-data-snapshot: 2026-08-21T14:05:07 (1 data files) — agents/instagram-agent/public/ig-activity.json -
f107a6e2026-08-21 auto-data-snapshot: 2026-08-21T13:33:25 (1 data files) — agents/instagram-agent/public/ig-activity.json -
668801f2026-08-21 auto-data-snapshot: 2026-08-21T13:00:36 (1 data files) — agents/instagram-agent/public/ig-activity.json -
7c3a14c2026-08-21 auto-data-snapshot: 2026-08-21T12:28:01 (1 data files) — agents/instagram-agent/public/ig-activity.json -
239fa122026-08-21 auto-data-snapshot: 2026-08-21T11:56:19 (1 data files) — agents/instagram-agent/public/ig-activity.json -
78c00122026-08-21 auto-data-snapshot: 2026-08-21T11:24:34 (1 data files) — agents/instagram-agent/public/ig-activity.json -
677b9132026-08-21 auto-data-snapshot: 2026-08-21T10:52:53 (1 data files) — agents/instagram-agent/public/ig-activity.json -
649ef2d2026-08-21 auto-data-snapshot: 2026-08-21T10:21:05 (1 data files) — agents/instagram-agent/public/ig-activity.json -
83d491f2026-08-21 auto-data-snapshot: 2026-08-21T09:49:18 (1 data files) — agents/instagram-agent/public/ig-activity.json -
41fb8dd2026-08-21 auto-data-snapshot: 2026-08-21T09:17:35 (1 data files) — agents/instagram-agent/public/ig-activity.json -
28e34db2026-08-21 auto-data-snapshot: 2026-08-21T08:45:49 (1 data files) — agents/instagram-agent/public/ig-activity.json -
1d1def02026-08-20 auto-data-snapshot: 2026-08-20T20:00:17 (1 data files) — agents/instagram-agent/public/ig-activity.json -
f0bfecf2026-08-20 auto-data-snapshot: 2026-08-20T19:28:34 (1 data files) — agents/instagram-agent/public/ig-activity.json -
d8a11b02026-08-20 auto-data-snapshot: 2026-08-20T18:56:52 (1 data files) — agents/instagram-agent/public/ig-activity.json -
762d1212026-08-20 auto-data-snapshot: 2026-08-20T17:52:14 (1 data files) — agents/instagram-agent/public/ig-activity.json -
ca1c6ed2026-08-20 auto-data-snapshot: 2026-08-20T17:19:08 (1 data files) — agents/instagram-agent/public/ig-activity.json -
23c99ec2026-08-20 TK-10573: finish-fabric-fridays.sh wrapper (bakes the ™ handle to dodge paste truncation) -
75071112026-08-20 TK-10758: reshare-erase pacing 15s->5s (browser-free, own accounts) -
404bd152026-08-20 TK-10758: stop+erase sassy reposts of others' content - disabled reshare launchd jobs, browser-free erase reconciler (114 live across 4 accts) -
75f97622026-08-20 TK-10573 GATE2: browser-free Graph-API reconcile + delete tooling (57 eligible, canary-first) -
4c96ddd2026-08-20 auto-data-snapshot: 2026-08-20T15:43:22 (1 data files) — agents/instagram-agent/public/ig-activity.json -
ef9b5f42026-08-20 auto-data-snapshot: 2026-08-20T15:11:42 (1 data files) — agents/instagram-agent/public/ig-activity.json -
7ed8cc62026-08-20 auto-data-snapshot: 2026-08-20T14:39:47 (1 data files) — agents/instagram-agent/public/ig-activity.json -
35f7f912026-08-20 auto-data-snapshot: 2026-08-20T14:07:04 (1 data files) — agents/instagram-agent/public/ig-activity.json -
ee8f0c12026-08-20 auto-data-snapshot: 2026-08-20T13:34:43 (1 data files) — agents/instagram-agent/public/ig-activity.json -
d56dad62026-08-20 auto-data-snapshot: 2026-08-20T13:00:52 (1 data files) — agents/instagram-agent/public/ig-activity.json -
f5631e82026-08-20 auto-data-snapshot: 2026-08-20T12:27:13 (1 data files) — agents/instagram-agent/public/ig-activity.json -
44890cf2026-08-20 auto-data-snapshot: 2026-08-20T11:53:54 (1 data files) — agents/instagram-agent/public/ig-activity.json -
b4eecbd2026-08-20 auto-data-snapshot: 2026-08-20T11:21:15 (1 data files) — agents/instagram-agent/public/ig-activity.json -
590a7182026-08-20 auto-data-snapshot: 2026-08-20T10:47:55 (1 data files) — agents/instagram-agent/public/ig-activity.json -
8b169232026-08-20 auto-data-snapshot: 2026-08-20T10:13:33 (1 data files) — agents/instagram-agent/public/ig-activity.json -
d101cd62026-08-20 auto-data-snapshot: 2026-08-20T09:38:44 (1 data files) — agents/instagram-agent/public/ig-activity.json -
0efb5772026-08-20 auto-data-snapshot: 2026-08-20T09:06:02 (1 data files) — agents/instagram-agent/public/ig-activity.json -
9210e352026-08-20 auto-data-snapshot: 2026-08-20T08:33:21 (1 data files) — agents/instagram-agent/public/ig-activity.json -
053f8cb2026-08-19 auto-data-snapshot: 2026-08-19T20:02:37 (1 data files) — agents/instagram-agent/public/ig-activity.json -
98f14b12026-08-19 auto-data-snapshot: 2026-08-19T19:30:02 (1 data files) — agents/instagram-agent/public/ig-activity.json -
bfbd18d2026-08-19 auto-data-snapshot: 2026-08-19T18:57:31 (1 data files) — agents/instagram-agent/public/ig-activity.json -
4c4f0042026-08-19 auto-data-snapshot: 2026-08-19T18:24:30 (1 data files) — agents/instagram-agent/public/ig-activity.json -
1dcd27f2026-08-19 auto-data-snapshot: 2026-08-19T17:51:58 (1 data files) — agents/instagram-agent/public/ig-activity.json -
d1aab432026-08-19 auto-data-snapshot: 2026-08-19T15:07:55 (1 data files) — agents/instagram-agent/public/ig-activity.json -
d68b1ae2026-08-19 auto-data-snapshot: 2026-08-19T14:34:38 (1 data files) — agents/instagram-agent/public/ig-activity.json -
a27e1292026-08-19 auto-data-snapshot: 2026-08-19T14:01:25 (1 data files) — agents/instagram-agent/public/ig-activity.json -
66676d52026-08-19 auto-data-snapshot: 2026-08-19T13:27:48 (1 data files) — agents/instagram-agent/public/ig-activity.json -
9e411fa2026-08-19 auto-data-snapshot: 2026-08-19T12:54:53 (1 data files) — agents/instagram-agent/public/ig-activity.json -
41dd04e2026-08-19 auto-data-snapshot: 2026-08-19T12:22:10 (1 data files) — agents/instagram-agent/public/ig-activity.json -
7bdb1f62026-08-19 auto-data-snapshot: 2026-08-19T11:48:49 (1 data files) — agents/instagram-agent/public/ig-activity.json -
e98056b2026-08-19 auto-data-snapshot: 2026-08-19T11:14:55 (1 data files) — agents/instagram-agent/public/ig-activity.json -
0530e762026-08-19 auto-data-snapshot: 2026-08-19T10:40:44 (1 data files) — agents/instagram-agent/public/ig-activity.json -
8a9b8bf2026-08-19 auto-data-snapshot: 2026-08-19T09:34:55 (1 data files) — agents/instagram-agent/public/ig-activity.json -
22bbd5f2026-08-19 auto-data-snapshot: 2026-08-19T09:03:01 (1 data files) — agents/instagram-agent/public/ig-activity.json -
93fc1672026-08-19 auto-data-snapshot: 2026-08-19T08:31:04 (1 data files) — agents/instagram-agent/public/ig-activity.json -
bcb37cc2026-08-18 auto-data-snapshot: 2026-08-18T19:51:40 (1 data files) — agents/instagram-agent/public/ig-activity.json -
2f1d84f2026-08-18 auto-data-snapshot: 2026-08-18T19:20:00 (1 data files) — agents/instagram-agent/public/ig-activity.json -
c6f58012026-08-18 auto-data-snapshot: 2026-08-18T18:16:14 (1 data files) — agents/instagram-agent/public/ig-activity.json -
4292ee72026-08-18 auto-data-snapshot: 2026-08-18T17:44:33 (1 data files) — agents/instagram-agent/public/ig-activity.json -
5aaef1d2026-08-18 auto-data-snapshot: 2026-08-18T17:12:33 (1 data files) — agents/instagram-agent/public/ig-activity.json -
128ac1b2026-08-18 chore: refactor (named consts, optional chaining) + v1.4.0 (session close) -
f60474f2026-08-18 auto-data-snapshot: 2026-08-18T15:36:46 (1 data files) — agents/instagram-agent/public/ig-activity.json -
6512f672026-08-18 auto-data-snapshot: 2026-08-18T15:04:50 (1 data files) — agents/instagram-agent/public/ig-activity.json -
965f96d2026-08-18 instagram: per-account 'what to post next from DW Shopify' notes board (/notes) -
f85f2582026-08-18 auto-data-snapshot: 2026-08-18T14:32:35 (1 data files) — agents/instagram-agent/public/ig-activity.json -
8cfcfe22026-08-18 instagram: keep ALL accounts live via cron (not just DW) -
835c0322026-08-18 instagram: cross-account post Calendar view (/calendar) -
d987feb2026-08-18 auto-data-snapshot: 2026-08-18T13:28:17 (1 data files) — agents/instagram-agent/public/ig-activity.json -
d86e0272026-08-18 auto-data-snapshot: 2026-08-18T12:56:03 (1 data files) — agents/instagram-agent/public/ig-activity.json -
ea7bf522026-08-18 instagram-agent: harden getJSON (response-stream error + retry, fixes mid-body ECONNRESET crash) + backfill-all.js driver; gitignore regenerable live-media caches -
85104372026-08-18 auto-data-snapshot: 2026-08-18T12:24:13 (1 data files) — agents/instagram-agent/public/ig-activity.json -
e25f2702026-08-18 instagram-agent /live: account dropdown — switch between all 35 IG accounts (one shared META token), per-account cache, whitelist-guarded, auto-loads an empty account on select -
5b9bed42026-08-18 auto-data-snapshot: 2026-08-18T11:49:58 (1 data files) — agents/instagram-agent/public/ig-activity.json -
2900a0c2026-08-18 instagram-agent: gitignore .env* (holds live IG token) -
7ff01522026-08-18 instagram-agent: add /live daily-posts board — real DW feed (Graph /media, paginated+cached, grouped by day) with delete-any (reuses proven openclaw delete path), sort+density controls, hourly refresh cron -
db594452026-08-18 auto-data-snapshot: 2026-08-18T11:17:58 (1 data files) — agents/instagram-agent/public/ig-activity.json -
6f7c8f22026-08-18 auto-data-snapshot: 2026-08-18T10:46:23 (1 data files) — agents/instagram-agent/public/ig-activity.json -
2f0ec642026-08-18 auto-data-snapshot: 2026-08-18T10:14:32 (2 data files) — agents/instagram-agent/package-lock.json agents/instagram-agent/public/ig-activity.json -
7db7ec92026-08-18 chore: correct version bump — instagram-agent 1.3.0->1.3.1 (prior commit bumped root package.json by mistake; restored root to 0.1.4) -
8b971152026-08-18 auto-data-snapshot: 2026-08-18T09:42:51 (1 data files) — package-lock.json -
62527ad2026-08-18 chore: instagram-agent v1.3.1 (session close — IG delete hardening + button-role selector fix) -
490f67a2026-08-18 auto-data-snapshot: 2026-08-18T09:11:00 (1 data files) — agents/instagram-agent/public/ig-activity.json -
b1d73e32026-08-18 auto-data-snapshot: 2026-08-18T08:40:41 (1 data files) — agents/instagram-agent/public/ig-activity.json -
05271462026-08-17 auto-data-snapshot: 2026-08-17T20:02:38 (1 data files) — agents/instagram-agent/public/ig-activity.json -
1bc0edc2026-08-17 auto-data-snapshot: 2026-08-17T19:32:24 (1 data files) — agents/instagram-agent/public/ig-activity.json -
4d823872026-08-17 auto-data-snapshot: 2026-08-17T18:31:52 (1 data files) — agents/instagram-agent/public/ig-activity.json -
135cd412026-08-17 auto-data-snapshot: 2026-08-17T18:01:33 (1 data files) — agents/instagram-agent/public/ig-activity.json -
58ce89f2026-08-17 auto-data-snapshot: 2026-08-17T17:31:10 (1 data files) — agents/instagram-agent/public/ig-activity.json -
6350ced2026-08-17 auto-data-snapshot: 2026-08-17T17:00:51 (1 data files) — agents/instagram-agent/public/ig-activity.json -
e166f172026-08-17 auto-data-snapshot: 2026-08-17T16:30:27 (1 data files) — agents/instagram-agent/public/ig-activity.json -
cc615682026-08-17 auto-data-snapshot: 2026-08-17T15:29:38 (1 data files) — agents/instagram-agent/public/ig-activity.json -
ac04e282026-08-17 auto-data-snapshot: 2026-08-17T14:59:21 (1 data files) — agents/instagram-agent/public/ig-activity.json -
d0fd9c22026-08-17 auto-data-snapshot: 2026-08-17T14:29:06 (1 data files) — agents/instagram-agent/public/ig-activity.json -
8293e852026-08-17 auto-data-snapshot: 2026-08-17T13:58:50 (1 data files) — agents/instagram-agent/public/ig-activity.json -
4c9304a2026-08-17 IG TK-10617: Option A helper — detect logged-in account + delete its posts (owner-check safe) -
84174632026-08-17 Fix IG delete: target the Delete BUTTON, not the 'Delete post?' heading -
d73a58c2026-08-17 auto-data-snapshot: 2026-08-17T12:27:54 (1 data files) — agents/instagram-agent/public/ig-activity.json -
121aa262026-08-17 auto-data-snapshot: 2026-08-17T11:57:38 (1 data files) — agents/instagram-agent/public/ig-activity.json -
2aff5972026-08-17 auto-data-snapshot: 2026-08-17T11:27:07 (1 data files) — agents/instagram-agent/public/ig-activity.json -
f079a272026-08-17 auto-data-snapshot: 2026-08-17T10:56:53 (1 data files) — agents/instagram-agent/public/ig-activity.json -
15fb56b2026-08-17 auto-data-snapshot: 2026-08-17T10:26:39 (1 data files) — agents/instagram-agent/public/ig-activity.json -
80a6ffe2026-08-17 chore: instagram-agent v1.3.0 (session close — /spoonflower purge viewer) -
04b7ade2026-08-17 Harden IG delete-originals.js: retry stale refs, recover dead tabs, patient positive-signal login check -
1e26b112026-08-17 IG /spoonflower: server-inject data into the page so it renders without an authed XHR -
c573cf52026-08-17 IG: add /spoonflower purge viewer (thumbnails + live delete-status board) -
3f46ac82026-08-17 auto-data-snapshot: 2026-08-17T09:04:04 (1 data files) — agents/instagram-agent/public/ig-activity.json -
f5dd47f2026-08-17 chore: instagram-agent package-lock v1.2.1 (session close) -
7098b6c2026-08-17 chore: instagram-agent v1.2.1 (session close — Spoonflower blocklist + delete tooling) -
4533e802026-08-17 snapshot before restart: preserve in-flight work -
eca6e1e2026-08-17 chore: lint, refactor, v1.2.0 (session close) -
a843c5b2026-08-17 auto-data-snapshot: 2026-08-17T08:03:25 (1 data files) — agents/instagram-agent/.gitignore -
c90044b2026-08-17 IG: add serialized, per-account-aware Spoonflower delete script (openclaw) -
ffc93032026-08-17 Bulk-select delete on IG auto-post viewer -
1b1e7d42026-08-17 ig: wrong-image delete tooling — 4 posts (metallic/suede), pre-approved, hold execution -
b5cd4412026-08-17 IG reshare: blocklist Spoonflower (competitor) fleet-wide + scrub vendor file + add scan tool -
ec918712026-08-17 Gate live IG delete behind IG_LIVE_DELETE flag (default off, tombstone-only) -
8529d5a2026-08-17 IG auto-post viewer with inline delete (GET /posts on :9810) -
06c151b2026-08-17 docs(sessions): resume — outage recovery, pm2 reconcile (TK-10606), TK-10293 gate verified green + Playwright env-fix learnings -
acd40042026-08-17 ig(TK-10573): GATE2 fan-out — split 85 originals into 10 batch tickets + iTerm2 delete windows -
ca8370c2026-08-16 auto-data-snapshot: 2026-08-16T09:54:36 (1 data files) — agents/instagram-agent/public/ig-activity.json -
8ac3cb32026-08-16 ig(TK-10573): repost the held metallicwallpaper post; lift HOLD -
447e5e52026-08-15 docs(sessions): resume TK-10573 IG redo — HOLD safety fix + gated remainders -
00269092026-08-15 ig(TK-10573): HOLD unpublished repost from delete tooling + commit redo viewers -
3166e1b2026-08-15 auto-data-snapshot: 2026-08-15T20:14:06 (1 data files) — agents/instagram-agent/public/ig-activity.json -
9ecd8cd2026-08-15 auto-data-snapshot: 2026-08-15T19:12:38 (1 data files) — agents/instagram-agent/public/ig-activity.json -
aeeb37a2026-08-15 auto-data-snapshot: 2026-08-15T18:52:36 (1 data files) — agents/instagram-agent/public/ig-activity.json -
e77fc0f2026-08-15 auto-data-snapshot: 2026-08-15T18:22:11 (1 data files) — agents/instagram-agent/public/ig-activity.json -
f214d2f2026-08-15 auto-data-snapshot: 2026-08-15T17:51:45 (1 data files) — agents/instagram-agent/public/ig-activity.json -
19af23e2026-08-15 auto-data-snapshot: 2026-08-15T17:21:18 (1 data files) — agents/instagram-agent/public/ig-activity.json -
0f30e212026-08-15 auto-data-snapshot: 2026-08-15T16:50:52 (1 data files) — agents/instagram-agent/public/ig-activity.json -
059e3cc2026-08-15 auto-data-snapshot: 2026-08-15T16:20:27 (1 data files) — agents/instagram-agent/public/ig-activity.json -
d2d94042026-08-15 auto-data-snapshot: 2026-08-15T15:50:00 (1 data files) — agents/instagram-agent/public/ig-activity.json -
da1e4e92026-08-15 auto-data-snapshot: 2026-08-15T14:18:43 (1 data files) — agents/instagram-agent/public/ig-activity.json -
996d8402026-08-15 auto-data-snapshot: 2026-08-15T13:48:16 (1 data files) — agents/instagram-agent/public/ig-activity.json -
0625c5f2026-08-15 auto-data-snapshot: 2026-08-15T13:17:24 (1 data files) — agents/instagram-agent/public/ig-activity.json -
c27c9572026-08-15 auto-data-snapshot: 2026-08-15T12:46:51 (1 data files) — agents/instagram-agent/public/ig-activity.json -
4b1e4c02026-08-15 auto-data-snapshot: 2026-08-15T11:45:53 (1 data files) — agents/instagram-agent/public/ig-activity.json -
f1b2aea2026-08-15 auto-data-snapshot: 2026-08-15T10:44:53 (1 data files) — agents/instagram-agent/public/ig-activity.json -
ba37fdd2026-08-15 auto-data-snapshot: 2026-08-15T10:14:23 (1 data files) — agents/instagram-agent/public/ig-activity.json -
279017c2026-08-15 auto-data-snapshot: 2026-08-15T09:43:56 (1 data files) — agents/instagram-agent/public/ig-activity.json -
ea9baa02026-08-15 auto-data-snapshot: 2026-08-15T09:13:26 (1 data files) — agents/instagram-agent/public/ig-activity.json -
b4a10be2026-08-15 auto-data-snapshot: 2026-08-15T08:12:28 (1 data files) — agents/instagram-agent/public/ig-activity.json -
0ff33f92026-08-15 Norma IG cadence: 8s timeout on Boost fetch (Cody FIX-FIRST, yoloforever cycle 1) -
4b58e972026-08-15 IG cadence: close carousel room-image dedup gap (Cody gate) — ledger now records ALL slides + dedup skips candidates whose room OR swatch was already posted, so room photos no longer repeat across accounts -
43de9ea2026-08-15 Norma IG cadence: fresh-source via Boost API (fixes clean-product pool exhaustion) -
191eee12026-08-15 IG cadence: dedup by IMAGE filename (not just product handle) — stops creating same-image duplicates (multiple handles share one image, e.g. Quick Ship Durable Walls) -
eb6bf212026-08-15 IG: duplicate-image detector — md5-hash each post's image per account, flag OLDEST of each dup set for deletion (feeds delete cockpit; deletion stays manual) -
d822b582026-08-15 IG posts: 2-slide carousel — room-setting photo first, product swatch second (Steve 8/15); leak-guarded, single-image fallback when no room setting; cadence inherits it via post-to --product -
e654e892026-08-15 IG cadence: exclude @beverlyhillsvideos (dedicated LIVE reel poster bhv-ig-6h owns it) — was double-served, mixing off-brand static images into a curated luxury-store-reel feed -
c6b549a2026-08-15 auto-data-snapshot: 2026-08-15T07:41:54 (1 data files) — agents/instagram-agent/IG-RESHARE-OPS.md -
1e765082026-08-15 IG cadence: fix 4 dormant accounts (hospitality/interiorvideos/shelter/library) - multi-word keywords returned 0 storefront results; swap to clean-product keywords so they post on the live cadence -
6b1c0df2026-08-14 auto-data-snapshot: 2026-08-14T19:30:43 (1 data files) — agents/instagram-agent/public/ig-activity.json -
cce6e172026-08-14 auto-data-snapshot: 2026-08-14T19:00:16 (1 data files) — agents/instagram-agent/public/ig-activity.json -
a1279172026-08-14 auto-data-snapshot: 2026-08-14T18:29:45 (1 data files) — agents/instagram-agent/public/ig-activity.json -
003881c2026-08-14 auto-data-snapshot: 2026-08-14T17:28:57 (1 data files) — agents/instagram-agent/public/ig-activity.json -
039ad5d2026-08-14 chore: lint fixes (guard JSONL parses, __dirname paths, fix reshare href), v1.1.1 -> v1.1.2 (session close) -
aca7fab2026-08-14 IG reshare: curate real populated community hashtags for all 32 accounts (drop dead handle-tags) — previously-empty accounts now find vendor-matched posts; regen preserves curation -
d165d002026-08-14 IG reshare: fix robustness gap — track vendor list + hashtag map as config (were gitignored), add build-ig-data.js regen script -
86d4ac62026-08-14 IG: robust 48h Phase-1 check reminder (launchd one-shot Aug 16 -> verify accounts + CNCP card + notification, self-unloads) -
ed1358f2026-08-14 IG fleet interaction: phased reshare-fleet + comment auto-reply (positivity-filtered, spam+self skip) + reply-fleet + staged launchd plists (phase 1: 5 accounts) -
1079fad2026-08-14 IG: generic per-account hashtag-reshare engine (all 32 niche accounts, per-account hashtags, DW-vendor credit, same 6/day+dedup+own-exclude rails) -
8ad73fc2026-08-14 IG: fabric-friday reshare launchd plist (4x/day spaced, cap 6/day) — Steve installs -
0ba22ac2026-08-14 IG fabric-friday reshare: daily auto-mode — dedup, exclude own posts, hard cap 6/day, business-hours gate; + engagement monitor -
05e17862026-08-14 IG: delete-viewer cockpit generator — visual selectable board of old dupes, one-tap open-to-delete + progress tracking -
9cc01ed2026-08-14 IG fabric-friday reshare: match #fabricfriday posts against DW vendor DB (FileMaker Supplier + registry, 505 names), normalized matching for correct credit, posts via Graph API -
5dec32d2026-08-14 IG: #fabricfriday reshare tool (hashtag-search picks + sassy credit caption, draft/gated --go); crediting blocked on oEmbed perm/login -
abf763c2026-08-14 IG cadence: 3 posts/day per account, spaced ~3.3h during business hours (was 1/day); batch 4->6 -
41aaea02026-08-14 IG cadence: exclude @goldleafwallpaper (owned by dedicated RML poster) to end double-serving -
93908bc2026-08-14 auto-data-snapshot: 2026-08-14T11:23:02 (1 data files) — agents/instagram-agent/public/ig-activity.json -
0e010342026-08-14 auto-data-snapshot: 2026-08-14T10:52:23 (1 data files) — agents/instagram-agent/public/ig-activity.json -
f92f6e22026-08-14 IG redo: openclaw deletion driver for originals (probe-first, canary, paced --go, verify-each) -
70e6d072026-08-14 IG redo: make driver idempotent/resumable (skip already-reposted keys from redo-results) -
6e373042026-08-14 IG redo: caption polish (quote-strip colors, broaden SKU suffix, 429 retry) + redo-last5 driver (dry-run + gated --go) -
285fb062026-08-14 IG captions: show name+color+SKU (DW model), remove http link from autoCaption -
f9e68db2026-08-14 auto-data-snapshot: 2026-08-14T08:19:45 (1 data files) — agents/instagram-agent/public/ig-activity.json -
d39a8c42026-08-13 auto-data-snapshot: 2026-08-13T19:38:43 (1 data files) — agents/instagram-agent/public/ig-activity.json -
36693e62026-08-13 auto-data-snapshot: 2026-08-13T19:08:13 (1 data files) — agents/instagram-agent/public/ig-activity.json -
7b0cfcd2026-08-13 auto-data-snapshot: 2026-08-13T18:37:41 (1 data files) — agents/instagram-agent/public/ig-activity.json -
221265d2026-08-13 auto-data-snapshot: 2026-08-13T18:07:15 (1 data files) — agents/instagram-agent/public/ig-activity.json -
6bfef8e2026-08-13 auto-data-snapshot: 2026-08-13T17:06:27 (1 data files) — agents/instagram-agent/public/ig-activity.json -
635e4e12026-08-13 auto-data-snapshot: 2026-08-13T08:21:55 (1 data files) — agents/instagram-agent/public/ig-activity.json -
92189152026-08-12 auto-data-snapshot: 2026-08-12T19:37:30 (1 data files) — agents/instagram-agent/public/ig-activity.json -
d6ec6752026-08-12 auto-data-snapshot: 2026-08-12T19:06:56 (1 data files) — agents/instagram-agent/public/ig-activity.json -
5c95fa72026-08-12 auto-data-snapshot: 2026-08-12T18:36:17 (1 data files) — agents/instagram-agent/public/ig-activity.json -
012d3752026-08-12 auto-data-snapshot: 2026-08-12T18:04:53 (1 data files) — agents/instagram-agent/public/ig-activity.json -
6a1df862026-08-12 auto-data-snapshot: 2026-08-12T17:03:39 (1 data files) — agents/instagram-agent/public/ig-activity.json -
52237e52026-08-12 auto-data-snapshot: 2026-08-12T11:28:02 (1 data files) — agents/instagram-agent/public/ig-activity.json -
001e0e92026-08-12 auto-data-snapshot: 2026-08-12T10:57:24 (1 data files) — agents/instagram-agent/public/ig-activity.json -
970272b2026-08-12 IG runbook: add Phase 0b — link the 5 email-discovered owned accounts -
5b914e42026-08-12 IG fleet: fold 5 email-discovered owned accounts into manifest + stage themes -
2da89802026-08-12 auto-data-snapshot: 2026-08-12T10:26:55 (1 data files) — agents/instagram-agent/public/ig-activity.json -
f619a9d2026-08-12 fix(instagram): correct #36 record — @hospitalityfabrics NOT linked to its Page (Connect never completed); needs IG login, not a role-assign -
0f9872f2026-08-12 auto-data-snapshot: 2026-08-12T09:56:27 (1 data files) — agents/instagram-agent/accounts.json -
603bf3a2026-08-12 auto-data-snapshot: 2026-08-12T09:25:42 (1 data files) — agents/instagram-agent/public/ig-activity.json -
aa159ab2026-08-12 chore(instagram): reload registry from live token — 35/35 accounts verified active+postable -
05a2f9e2026-08-12 auto-data-snapshot: 2026-08-12T08:54:38 (1 data files) — agents/instagram-agent/public/ig-activity.json -
87153f02026-08-12 feat(instagram): 23 launch-ready onboarding kits (bio+captions+visual+tags+email), built via 4 parallel subagents -
54d99eb2026-08-12 docs(instagram): phone-verify decision = Steve's phone manual relay -
c76b9712026-08-12 docs(instagram): openclaw-driven paced fleet-build runbook (phase 0 hospitality fabrics, phase 1 pilot, phase 2 scale) -
10b76952026-08-12 feat(instagram): IG fleet build manifest + pre-staged cadence themes for 22 new lines -
344ee9b2026-08-12 docs(instagram): record hospitalityfabrics Page decision (create Hospitality Fabrics Page, DTD 8/8) -
5f056582026-08-12 auto-data-snapshot: 2026-08-12T08:23:24 (1 data files) — agents/instagram-agent/public/ig-activity.json -
b83f6172026-08-12 auto-data-snapshot: 2026-08-12T07:52:17 (1 data files) — agents/instagram-agent/package-lock.json -
aa2a34b2026-08-12 chore: lint fixes (surface local feed write errors, non-blocking intra-batch sleep) + version bump (session close) -
2fa68ee2026-08-12 daily-cadence: ffepurchasing -> woven texture (broader clean pool) -
5fd46842026-08-12 daily-cadence: broaden beverlyhillsvideos/ffepurchasing keywords (narrow pools exhausted, couldn't source) -
8c1fc0a2026-08-11 auto-data-snapshot: 2026-08-11T13:51:52 (1 data files) — agents/instagram-agent/public/ig-activity.json -
40f38252026-08-11 auto-data-snapshot: 2026-08-11T13:21:01 (1 data files) — agents/instagram-agent/public/ig-activity.json -
f700cdd2026-08-11 daily-cadence: posting-hours guard (Mon-Sat 08:00-20:00) + draft launchd plist for durable cadence -
1ec24352026-08-11 daily-cadence: velocity tripwire (stop batch on 'restricted') + intra-batch pacing -
18ad4012026-08-11 IG daily cadence: 1 post/day per account, 6 days/week (rest Sun) — ledger-derived coverage, auto-sourced guard-passed products per account theme, sensitive→Cody -
f0e553d2026-08-11 IG captions: strip internal mfr SKU numbers from title (Koroseal '2308790' was leaking) -
4dbe72e2026-08-11 IG: private-label leak guard — refuse to post products whose image URL/vendor exposes a hidden upstream (luca/momentum/wallquest/etc.) -
c9d175d2026-08-11 auto-data-snapshot: 2026-08-11T11:45:12 (1 data files) — agents/instagram-agent/public/ig-activity.json -
cf737ee2026-08-11 IG post skill: poll container readiness before publish (fixes 'Media ID is not available' race) -
56427de2026-08-11 auto-data-snapshot: 2026-08-11T10:12:37 (1 data files) — agents/instagram-agent/public/ig-activity.json -
eee32bd2026-08-11 auto-data-snapshot: 2026-08-11T09:10:52 (1 data files) — agents/instagram-agent/public/ig-activity.json -
8fe7c412026-08-11 auto-data-snapshot: 2026-08-11T08:39:13 (1 data files) — agents/instagram-agent/public/ig-activity.json -
2d8bec82026-08-11 ig-activity: best-effort scp to live marketing.dw after each post (keeps panel fresh) -
37895ae2026-08-11 IG captions: strip price + raw vendor (was leaking $4.25 memo price); quality + DW-service messaging, per-product variation (anti-spam) -
85c76192026-08-10 auto-data-snapshot: 2026-08-10T13:03:09 (1 data files) — agents/instagram-agent/package-lock.json -
02b2ffa2026-08-10 chore: lint (0 fixes) + refactor (STORY_TTL_MS) + v1.1.0 (session close) -
8a9959f2026-08-10 IG poster: --product <handle> pulls a real DW product (live storefront) and auto-composes image+caption; verified dry-run on Shakespeare Mural -
5dd450b2026-08-10 IG poster hardening: carousel (2-10 img) posts, verify/health-sweep, --all throttle, follower-ranked list, account param wired into reel+story (registry-first, legacy env preserved), POSTING.md docs -
dfc3f022026-08-10 IG: verified inside Business Suite — 35 = complete existing postable fleet; 45 unlinked pages have no IG; only @hospitalityfabrics exists-but-unlinked (parked for Steve) -
0daec042026-08-10 IG: linking checklist for the 45 unlinked Pages (tiered by brand value) -
57ebb5d2026-08-10 IG poster: poll container to FINISHED for images too (fixes 'Media ID is not available'); verified live post to @patterndesignlab -
6b3ec242026-08-10 IG multi-account posting: registry + resolver + post-to CLI over 35 linked accounts (shared META token, dry-run-gated) -
564be772026-08-10 TK-10395: cap reel container poll at 12x4s so 3x-retry worst case < client 240s -
98970112026-08-10 TK-10395: bounded retry-on-2207076 in reel skill (Meta transient media-upload failure) -
cbfbf082026-08-08 Norma pre-deploy gate: run durable smoke battery before any live restart -
f2f2df62026-08-08 deploy hygiene (TK-10370): build-then-restart-then-health-gate reload + silence lockfile-root warning -
bc9cfde2026-08-07 auto-data-snapshot: 2026-08-07T18:31:41 (2 data files) — package-lock.json package.json -
dd761042026-08-07 security: npm audit fix --omit=dev (non-breaking) — resolves 4 vulns (3 moderate, 1 critical/uuid) leaving 4 sharp-libvips highs (need next@16 major bump, gated) -
efc419d2026-08-06 chore: refactor (drop dead testpulse login in api-smoke) + v0.1.4 (session close) -
a9459082026-08-06 test(cycle7 Cody-gate): mutation role-matrix + isolation positive-control -
f7e95d82026-08-06 test(cycle7): authorization-matrix + tenant-isolation suite (real tenant fixtures) -
2a8a6c72026-08-06 test(cycle6 Cody-gate): CRUD tests real org id-space; non-hollow admin E2E -
e958e072026-08-06 test(cycle6): CRUD lifecycle suite (create->read->update->delete) + admin E2E journey -
d26f6c62026-08-06 fix(cycle5 Cody-gate): truly-empty-body probe + readJson across 93 routes -
959da8b2026-08-06 test+fix(cycle5): write-path smoke (216 mutations) + Playwright E2E (3 tiers) + fixes surfaced -
9ba79402026-08-06 auto-data-snapshot: 2026-08-06T10:52:46 (2 data files) — package-lock.json package.json -
39264f32026-08-06 fix(api)+test: close Cody-gate gaps — all 14 uuid=text casts + org-scoped smoke + deterministic fixture -
eb853c32026-08-06 fix(api): 4 GET-500s surfaced by api-smoke (onboard/library real; auth-google/clickup status) -
8bbee182026-08-06 test(api-smoke): durable fs-enumerated GET sweep over all 271 routes (test:api/test:smoke) -
f4c16152026-08-06 auto-data-snapshot: 2026-08-06T10:21:57 (1 data files) — package.json -
24209b82026-08-05 auto-save: 2026-08-05T14:42:56 (14 files) — app/api/cron/gmail-sync/route.ts app/api/cron/ingest-news/route.ts app/api/geo/advocacy/route.ts app/api/geo/hotspots/route.ts app/api/geo/moveon/route.ts -
b98a5b62026-08-05 security(yoloforever c1): rate-limit public petition CREATE (anon spam vector Cody reproduced); drop admin /api/petitions from pulse-public middleware bypass (defense-in-depth); +2 regression assertions (20 green) -
89bc5322026-08-05 test: add green security-regression suite (18 assertions) + wire npm test / npm run test:instance — asserts every 2026-08-05 campaign fix holds -
e390f1a2026-08-05 security(cycle-2): pin retired gemini-2.0-flash -> 2.5-flash (35 files); /api/users admin-only (was staff-readable); rate-limit public petition-sign; retire legacy-token->admin path; guard gmail/send null-org; ingest-news reports failure honestly (no more success:true on 0-inserted) -
e0ef0092026-08-05 security(A-prime): scope login brute-force limiter per (ip,username) to kill tenant-wide lockout DoS; prefer cf-connecting-ip/x-real-ip over forgeable XFF; stop CRON_SECRET falling back to AUTH_PASSWORD -
f63804e2026-08-05 security: fix cycle-1 defects — add requireRole to 5 social routes (were pulse-open), validate norma-imp-by token in impersonate DELETE (privilege-escalation), HMAC-verify registry session (was 403-for-all + crafted-token bypass); add scratch-DB test instance + durable test suite -
d9cb4a22026-08-05 auto-save: 2026-08-05T13:12:15 (2 files) — scripts/test-instance.sh tests/ -
df259fc2026-08-05 login: standard username/password only (remove Google/Apple OAuth); harden /api/auth/login to 400 on non-JSON body -
19d20a62026-07-29 SECURITY incident 2026-07-29: agent-base fail-closed on empty AUTH_PASSWORD + bind 127.0.0.1 by default (was the empty-password all-interfaces RCE vector) -
0ecc4bb2026-07-23 instagram-agent fully LIVE: real token installed, monitor/discover/report un-stubbed (Steve-authorized), Graph v21 metrics fixed -
009cc0e2026-07-23 auto-save: 2026-07-23T08:19:35 (2 files) — agents/instagram-agent/skills/discover.js agents/instagram-agent/skills/monitor.js -
d6a46ba2026-07-23 auto-save: 2026-07-23T07:19:17 (1 files) — scripts/gmail-backfill.mjs -
71ee9902026-07-14 instagram-agent: env-configurable Graph host (IG_GRAPH_HOST) — support Facebook-Login flow (page token + IG business id) alongside Instagram-Login -
42967672026-07-13 instagram-agent: make reel skill account-aware (close cross-brand IG-token leak) -
4b35b8b2026-07-13 chore: v0.1.3 (dashboard CSS refactor) -
06efeb42026-07-13 refactor(agent-base): hoist static dashboard CSS to a module const -
3f1fb792026-07-13 chore: version bump (session close — SSRF guard + security P0 verification) -
d89eedb2026-07-12 docs(security): record P0#1-3 + P1 SSRF remediation as resolved in April audit -
339bfa12026-07-12 security(P1): add shared SSRF guard blocking private/reserved/loopback hosts on user-URL fetches -
e849e5e2026-07-12 chore: version bump (session close — Norma platform + agent recovery, login/schema-drift fixes, dashboard) -
56c18192026-07-11 Fix tier_credentials schema drift in users + gmail routes -
67b9d9d2026-07-11 Fix tier_credentials schema drift in auth + impersonate routes -
34faae12026-07-11 Fix tier_credentials schema drift in settings CRUD routes -
02aa4652026-07-11 auto-save: 2026-07-11T08:42:28 (1 files) — app/api/auth/login/route.ts -
a56a5b22026-07-10 dashboard: harden escaping for attribute context (contrarian gate) -
e1711092026-07-10 Norma dashboard: enrich GET / with insights + media grid (cache-backed) -
d5eb7cb2026-07-10 Norma instagram-agent: add RECOVERY.md (deps-location gotcha, auth, durability) -
c3b02e42026-07-10 agent-base: fix route shadowing + server-render status dashboard -
d870e862026-07-10 Norma agents: add read-only status dashboard at GET / (behind auth) -
6bfda492026-06-01 Global search: mount on Supervisor + Pulse tiers -
d1e1e9f2026-05-31 fix: add rel=noopener noreferrer to 32 target=_blank links in inbox mockup index; expand .gitignore backup patterns -
de055dc2026-05-30 security: strip hardcoded dw_admin DSN password -> env-first (.mjs straggler). No rotation/deploy. -
351dc6f2026-05-30 security: strip hardcoded dw_admin DSN password -> env-first/passwordless. No rotation/deploy. -
9f230e82026-05-30 security: strip hardcoded dw_admin DSN password -> env-first (DATABASE_URL); passwordless localhost fallback. No rotation/deploy. -
d7ebee02026-05-28 wire Morning Batch + weekly_intelligence to PM2 cron — fixes 77d/72d stale tables -
1c814a52026-05-28 norma-scraper: load .env.local via interpreter_args so SESSION_SECRET reaches the cron — fixes 401 loop -
9da39712026-05-21 defensive: explicit body[data-inbox-theme='classic-dense'] selector -
e7eb3fb2026-05-21 feat(theme): hoist InboxThemeBanner + AgeThemeSlider into app/layout.tsx -
da7d4032026-05-20 docs(sessions): log brute-force-protection learnings (commit a934a3b) -
a934a3b2026-05-20 feat(auth): brute-force-resistant login rate-limit (10 fails/15min per IP, 30min lockout) -
27ac3982026-05-20 tasks: mark #52 (admin impersonation UI) DONE -
983afae2026-05-20 feat(impersonate): wire the View-as dropdown + Acting-as banner into AppShell -
6427fe32026-05-20 session 2026-05-20: log roles+perms+modal-fanout+gmail-per-user+disk-save+admin-union -
491a4692026-05-20 docs+infra: gmail connect note (password redacted) + linter-touched messages route -
6daaa2a2026-05-20 fix(theme): apply 32 inbox-theme skins at body level so dropdown clicks visibly re-skin the whole page -
1b1cbbd2026-05-20 fix(theme): apply inbox-theme skins at body level so dropdown clicks re-skin the whole page immediately -
493c5ca2026-05-20 feat(theme): full-width inbox-theme banner at top of AppShell -
aff91062026-05-20 feat(theme): hoist inbox theme switcher to global AppShell header -
52b42ae2026-05-20 fix(gmail): scope Gmail CRM to current user's mailbox, not hardcoded natalia -
1a1a9c92026-05-20 feat(modals): fan out ResizableModal to 22 modals across 15 files -
48c4ff82026-05-20 feat(inbox): +16 themes (v17-v32) — total 32 live + dropdown-wired -
66f0f442026-05-20 feat(inbox): 10 more theme mockups (v7-v16) + live theme dropdown in GmailCRMTab -
c0401852026-05-20 session 2026-05-20: log roles/perms/modals + infra fires + 4 user seed -
0cc4fc02026-05-20 feat(mockups): 6 inbox UI variants — Classic Dense / Notion Cards / Linear Keyboard / Apple Mail / Front Conversation / Hey Zero-Distraction -
0b3e6f52026-05-20 feat(modals): shared ResizableModal with full-screen toggle + drag-resize -
364302c2026-05-20 feat(gmail): per-message Assign-to + per-user read receipts + inline-expand layout -
4cf48122026-05-20 feat(auth): intern role + user fields + admin-editable role × feature permissions matrix -
cfcf5512026-05-20 feat(admin): comprehensive API/Token/MCP registry + age-adaptive theme slider -
806aa472026-05-20 ux(gmail): land with full-width inbox — default showContacts to false so users see all mail first; Contacts toggle stays in toolbar for outreach drilldown -
be67c762026-05-20 session 2026-05-20: log 9 task entries (petition debounce, modal video, 4 pay-down todos) -
48eadf22026-05-20 docs: modal training one-pager for SDCC staff (companion to walkthrough video) -
4974b872026-05-20 fix(editor): set immediatelyRender:false on Tiptap useEditor — Next 15 + React 19 SSR hydration error blocked petition pipeline editor render -
e4d293d2026-05-20 fix(pipeline/reorder): cast org_id param as ::uuid not ::text — pipeline drag-drop was 500-ing for staff role with non-null orgId due to same uuid=text operator mismatch already fixed in pipeline/stats + settings -
8e332652026-05-20 petition create: debounce double-submit via useRef guard + 30-min server-side merge window -
bb7a05d2026-05-20 fix(api): cast org_id param as ::uuid not ::text in pipeline/stats + settings -
15fe5082026-05-20 docs: morning wakeup brief — DB password fix + verification path -
433445a2026-05-20 fix(pulse-public): silence 401 spam, unblock topics for guests, hide Apple OAuth stub, add sign-in CTA -
b7eda892026-05-20 fix(types): unblock SocialTab render, IntegrationsTab metadata, credentials rowCount null -
3defa0e2026-05-19 instagram-agent: enable live reel/story/post publishing via graph.instagram.com (Instagram Login API) -
36f759a2026-05-13 snapshot: 12 file(s) changed, ~12 modified -
e5b64d82026-05-06 initial scaffold (gitify-all 2026-05-06)
Authors
- auto-commit-fleet703
- Steve206
- steve5
Agents used
Skills used
- /instagram-agent702
- /ig-activity691
- /claude16
- /code16
- /pulse11
- /accounts9
- /posts9
- /login9
- /petitions9
- /route9
- /auth8
- /day7
- /messages7
- /live6
- /gmail6
- /spoonflower5
- /grants5
- /mockups5
- /inbox5
- /story4
- /page4
- /library4
- /cron4
- /index4
- /graph3
- /calendar3
- /package-lock3
- /registry3
- /send3
- /staff3
Creative ideas + design notes
3b66731 · 2026-09-26 · TK-11383: link-drift canary now measures the not-yet-linked accounts
check-link-drift.js dropped every UNLINKED Page, so the two accounts waiting on Steve's phone (nationalpaperhangers, protestdaily) were unmeasured. That blind spot was why TK-11383 had to stay a ticket instead of a canary row. Now: - link-watchlist.json pages resolve to awaiting_link / newly_linked / not_found (not_found is NOT-MEASURED and stays WARN) - enrollment-hold decision split: decided-no (designerschat) is not drift; pending-steve or a MISSING decision keeps WARN (fail-closed) - a corrupt hold or watchlist file exits 2 and gives no verdict - test-link-drift.mjs: 11 hermetic negative tests, including a contrast proving the pre-change detector was blind Read-only detector. Posts nothing and writes no registry. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Sy7SKYqHt2gwdfTTD3az7V
8f1455a · 2026-09-22 · IG post path: durable jewelry-counter exclusion gate (TK-12012)
Steve directive 2026-09-22: stop posting any Instagram with jewelry counters (scope = jewelry ONLY; room-setting carousels stay). Wire the vision jewelry check into the Norma post path so no jewelry-counter image can be published. - jewelry-gate.js: classify each candidate image at SELECTION time (ollama qwen2.5vl free / Gemini fallback), URL/file-keyed cache so vision is called once per image. Blocks jewelry:true AND undecidable (fail-closed); never drops room:true. - post-to.js: gate carousel + single feed/story image URLs before publish; carousel degrades to single when a slide is dropped, skips when all blocked. Posting stays DISARMED. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CRkDtx31oCvHHaMfJf9CzT
987ab62 · 2026-09-22 · instagram-agent: add loopback co-listener so 127.0.0.1:9810 answers (TK-12012)
BIND_HOST=100.82.17.107 pinned the single primary bind to the Tailscale IP, which drops the 127.0.0.1 bind and broke every local consumer (dw-marketing-reels nightly publish, dw-follow-counts) with connection-refused since 09-21. Add a guarded second loopback-only listener on the same Express app. Never 0.0.0.0. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CRkDtx31oCvHHaMfJf9CzT
746c031 · 2026-09-20 · security(TK-11783): strip hardcoded Google OAuth secrets from Norma Gmail-search scripts
client_secret (…FrL8) + refresh/access tokens (…hepo) were hardcoded in 3 tracked scripts and re-committed nightly by the auto-data-snapshot cron (growing exposure). Moved the values into the gitignored .env.local and switched the scripts to read process.env.GOOGLE_CLIENT_SECRET / GOOGLE_ACCESS_TOKEN / GOOGLE_REFRESH_TOKEN via a zero-dependency .env.local loader (no dotenv dep added), with fail-loud guards. No `|| '<literal>'` fallback — the secret is fully out of tracked source. - scripts/search-sacbee.js: client_secret + inline access/refresh tokens → env - scripts/search-latimes-gmail.js: client_secret → env (tokens still from DB) - scripts/search-kqed.mjs: client_secret → env (tokens still from DB; ESM loader) Verified: git grep of the tracked tree = 0 literal occurrences; all 3 syntax-OK; env loader resolves all 3 vars from .env.local (last4 matches removed values, so auth is unchanged). Public CLIENT_ID left as-is (not a secret). NOT DONE (stays gated in TK-11783): the secret is still in git HISTORY (history purge) and the key itself is NOT rotated (Steve's console action). This is code hygiene only — no rotation, no push, no deploy. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01A3PFQP7b2cFzSLAN6gB4ZB
e815386 · 2026-09-14 · Stop git bleed: untrack CTA recordings + demo videos, gitignore them (TK-11533)
~1.03GB of cta/rec/*.webm + demos/*.{webm,mp4} were tracked with no gitignore
rule, so every CTA run re-committed video into history (Norma .git = 1.13GiB,
the sole dw-backup-canary FAIL). This --cached untrack keeps all files on disk
and stops future growth. Historical blobs still need a gated filter-repo purge
to reclaim the 1.13GiB (drafted to pending-approval).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0132onhpKJhTymjiFZCPn6ux
51c0305 · 2026-09-13 · TK-11383: bring the PUBLISHER's enrollment hold to parity with the builder
36f4ede hardened build-registry.js to match the hold three ways (registry key,
handle field, ig_user_id) but left daily-cadence.js matching only the registry
key. That made the publisher the WEAKER of the two layers -- and the publisher is
where the irreversible public post happens, so it is the one that must not be
bypassable. Verified in an offline sandbox against three injected bypass shapes:
the old publisher caught 1 of 3, this one catches 3 of 3.
The two shapes the key-only match let through, both of which would have posted
publicly to a held account:
- PAGE_ID-keyed record with handle:null. The unlisted merge keys an account by
page_id whenever the Graph edge returns username:null, and a handle lookup
can never match that.
- RENAMED account. A handle-keyed hold stops matching the moment the owner
renames; ig_user_id is immutable and is literally what post-to.js publishes
to (POST /{ig-user-id}/media_publish).
Also reports hold entries that matched NOTHING -- a typo'd handle is otherwise
indistinguishable from a working denylist. That report is computed from what
actually fired, not by re-scanning the registry, because the held accounts have
already been deleted by then and a re-scan reports every entry that just fired
as "matched nothing": a guard must not misreport its own successful match.
Unchanged and re-verified: corrupt hold file aborts (exit 1), absent hold file
warns loudly and continues, a clean registry drops nothing.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XQTf1fpLGZCEv79K8G9Gma
36f4ede · 2026-09-13 · TK-11383: close the allowlist-expansion path to unapproved public IG posting
accounts.json decides who com.steve.dw-ig-cadence posts to PUBLICLY. Two
defects let never-approved accounts reach it. Both were verified by an
injected fault BEFORE fixing, not by a happy-path check.
1. Transient-property gate. @beverlyandhillsdesigns + @filthyrichlivingcom
are IG-linked and publish-capable today (live content_publishing_limit on
the shared token). The ONLY thing excluding them was that they sit outside
Meta's pages_show_list allowlist, so they fell behind --include-unlisted.
That property is transient, and the FB app-access grant this ticket is
waiting on Steve for is exactly what removes it -- after which a plain
`node build-registry.js` would enrol both with no gate at all. The most
likely next event on this ticket silently armed two brand accounts.
Both are now on enrollment-hold.json, keyed on identity, so the hold
survives that expansion. Recorded honestly as never-decided, NOT a revert
(unlike designerschat/42016d6) -- their enrolment is Steve's open decision.
2. Hold bypass, found while testing 1. The hold was applied only to the
/me/accounts set; the --include-unlisted merge wrote into the same object
without consulting it. Measured: with both handles ON the hold list,
`--print --include-unlisted` still emitted both (37 accounts, "HOLD: 1").
The flag an operator would reach for defeated the guard.
Hardening from the second-model review (codex 429 spend-capped; Kimi k3):
* Holds match three ways -- normalised key, the account's handle field, and
ig_user_id. ig_user_id is load-bearing: it is immutable and is what the
publisher posts to (post-to.js -> /{ig-user-id}/media_publish), while a
username can be renamed by the owner at any time. It also covers the
unlisted merge keying an account by page_id when the edge returns
username:null, which a handle lookup can never match.
* Write-boundary assertion. Both defects were the same shape: a guard that
ran before a later mutation. Re-applying after each merge only works if
every future merge site remembers. The assertion re-checks the assembled
object immediately before serialisation and exits 1 rather than write.
* A hold matching nothing now reports HOLD ARMED instead of being silent --
a legitimately-not-yet-visible account and a typo'd one looked identical.
Includes a peer session's complementary isEnrolled() change from the same
working tree: enrolment is reported from actual membership in `accounts`,
never asserted from the requested flag (it was durably recording held-out
handles as enrolled:true).
Verified (live accounts.json never written -- --print and an isolated copy):
--print --include-unlisted 35, all 3 held absent, HOLD: 3
(was 37 / HOLD: 1 -- goes red)
--print --include-held --include-unlisted 38, all 3 enrolled -- YES path works
plain --print 35, same handle set as committed,
no record differs outside volatile counts
publisher, synthetic 38-account registry HOLD ENFORCED on all 3, dropped
guard neutered + real write attempted exit 1, accounts.json NOT written
Reversible: git revert this commit. Steve's YES/NO decision is untouched;
this removes only the silent path. Enrolling is still one explicit command.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014BUF96kL2o6FoEgNGaojd3
3bdc7a5 · 2026-09-13 · TK-11383: enforce the enrollment hold at the PUBLISHER too, not just the builder
Follow-up to 123570c after a second-model review (Kimi) flagged that a hold enforced only in build-registry.js is defeated by the very things that bypass the builder: a hand-edited accounts.json, an `--include-held` build that gets committed, or an older checkout. The irreversible action — a public post — happens in daily-cadence.js, which posts to every key of accounts.json. So the publisher now enforces the SAME enrollment-hold.json independently, right where the harm would occur: any held handle that somehow reached the registry is dropped from HANDLES before selection and cannot post. Failure posture mirrors the builder for consistency: a corrupt hold file fails CLOSED (aborts the whole run, exit 1 — an untrustworthy denylist must not read as "no holds"); an absent file warns loudly and continues (documented fresh state; the written registry already excludes held handles). Absent is not fleet-halting because halting all 35 accounts over one missing config file is disproportionate, and the file is committed. Tested read-only (--status, never posts): normal run unchanged and emits no false HOLD line; a corrupted enrollment-hold.json makes the real cadence abort exit 1; and a synthetic registry containing @designerschat has it dropped with a loud HOLD ENFORCED line before any posting logic. Undo: git revert HEAD (1 file, no runtime state touched). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01M85r8WQP2nf5jssn8RiuDA
72f0976 · 2026-09-13 · TK-11383: enforce the designerschat enrollment hold at the PUBLISHER too
Kimi second-model review of 123570c: a builder-only hold guard is defeated by a hand-edit of accounts.json, a committed `--include-held` output, an old checkout, or Meta expanding the pages_show_list allowlist. The irreversible action — a public post — lives in daily-cadence.js, so the guard belongs there too, using the mechanism that file already honours. - account-themes.json: convert the designerschat override from a keyword to a `skip`. daily-cadence.js already excludes any handle with a skip (eligible = HANDLES.filter(h => !themeFor(h).skip)), so even if designerschat re-enters accounts.json by ANY path, the cadence will not post to it. A skip can only PREVENT a post, never cause one. - build-registry.js: a MISSING enrollment-hold.json now warns loudly instead of silently failing open (a corrupt file already fails closed). The hard backstop for the account that matters is now the publisher-side skip above, which does not depend on this file existing. Verified two independent layers: (1) default rebuild still reproduces the committed accounts.json with byte-identical records and no designerschat (set-diff, not a count check — Kimi's nit); (2) injecting designerschat into a registry via --include-held and running the publisher's exact eligibility logic excludes it (skip honoured). Nothing posted, no registry rewritten. Undo: git revert HEAD. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
123570c · 2026-09-13 · TK-11383: make build-registry.js stop silently changing who posts publicly
accounts.json drives com.steve.dw-ig-cadence, which posts PUBLICLY without
--dry. build-registry.js rebuilds that file from GET /me/accounts and, until
now, could silently change its contents in BOTH directions with no output:
1. SILENT DROP. /me/accounts is filtered by the `pages_show_list` granular
scope, a fixed 80-Page allowlist. @beverlyandhillsdesigns and
@filthyrichlivingcom are fully IG-linked but outside it, so a rebuild
dropped them and printed a plausible total. Now every run also reads the
uncapped business_management owned_pages/client_pages edge and reports any
IG-linked owned Page /me/accounts could not see -- to stderr AND into the
written registry (unlisted_ig_linked), so the omission survives the
scrollback. An unreadable edge records null + unlisted_scan_error, never a
confident zero (CLAUDE.md TK-11431 rule 1). --include-unlisted enrolls them
once Steve approves.
2. SILENT ADD (the dangerous one). @designerschat was linked on 2026-09-11 but
its enrollment was explicitly REVERTED by Steve in 42016d6. Nothing enforced
that: the Page is inside the allowlist and account-themes.json gives it a
keyword with no skip flag, so a plain rebuild re-enrolled it and the next
cadence run would have posted to it. The decision now lives in
enrollment-hold.json and is enforced; --include-held overrides.
Default behaviour is now strictly MORE correct: a default rebuild reproduces
the committed accounts.json exactly (35 keys, identical records). Before this
change it produced 36.
Also retracts a false claim in probe-owned-pages.js's header that "POSTING
still requires the app-access grant". The publish path never uses a Page token
(POST /{ig-user-id}/media_publish with the shared user token;
instagram_content_publish is target=ALL), and content_publishing_limit returns
a live quota for both allowlist-invisible accounts. Recorded as strong
inference, not proof -- the decisive test is a public post, which is gated.
Tested (--print only, nothing written, no post): default reproduces the
committed registry and reports both drops loudly; --include-unlisted yields 38;
--include-held yields 36. Negative tests: an injected me/businesses fault
reports NOT-MEASURED rather than zero, and a corrupt enrollment-hold.json fails
CLOSED with exit 1 rather than enrolling held accounts.
Undo: git revert HEAD (3 files, no runtime state touched).
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01M85r8WQP2nf5jssn8RiuDA
414dbe2 · 2026-09-13 · fix: extend dw-ig-link-drift with business_management edge for linked-but-not-granted pages (TK-11604)
check-link-drift.js was blind to IG accounts whose Facebook Pages are owned by
a Business Manager but not in the app's pages_show_list allowlist (~80 Page IDs
from when the grant was made). Any Page created after that grant was invisible to
/me/accounts and therefore not diffed, producing a silent NOT-MEASURED false-green.
This mirrors the approach already proven in probe-owned-pages.js (TK-11383):
- Pass 1 (unchanged): /me/accounts — app-granted pages
- Pass 2 (new): /me/businesses → owned_pages + client_pages via business_management
scope, which is granted target=ALL with no allowlist
BM-discovered accounts are merged into `live` (deduped), marked
via_business_management:true, and surfaced in the linked-not-enrolled list.
The BM pass fails gracefully: if the scope is absent or an edge errors, it logs
and continues — the /me/accounts result is still reported, never silently skipped.
New report fields: biz_mgmt_checked, biz_mgmt_new_accounts, biz_mgmt_error.
4aca47c · 2026-09-13 · TK-11383: read-only probe that sees Pages outside the pages_show_list allowlist
check-link-drift.js and probe-unlinked.js both read GET /me/accounts, which is
filtered by the pages_show_list granular scope. On this token that scope is a
FIXED allowlist of 80 Page IDs predating the newer Pages, so any Page created
since is invisible to both tools regardless of its IG-link state. That is
NOT-MEASURED, not "no drift", and it read green for days.
business_management on the same token has target=ALL, so
GET /{business}/owned_pages?fields=instagram_business_account sees every owned
Page and its IG link. probe-owned-pages.js uses that edge and reports, per Page,
whether it is IG-linked and whether it is inside the allowlist -- so the
linked-but-not-app-granted state is now visible instead of silent.
Measurement blindness solved; posting still needs the app-access grant, since
a Page token (?fields=access_token) remains #100-blocked outside the allowlist.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YDXDvUmj1KEEMzWw76MpFU
e94fe25 · 2026-09-11 · TK-11383: enroll @designerschat — IG fleet 35 -> 36
Steve completed the IG<->Page link in the Instagram app; Meta propagated it a few minutes later (earlier probes were simply too early, not failures). Verified before writing, per the memo's explicit warning that build-registry.js rewrites the WHOLE registry: the --print dry run diffed against the live accounts.json showed ADDED 1 (designerschat), REMOVED 0, CHANGED 0. No unrelated account was swept in. Page 109985254012064 'Designers Chat' now reports ig_business=designerschat and connected=designerschat, matching the shape of the working reference borninbeverlyhills. check-link-drift returns IN_SYNC 80/36/36. Backup of the prior registry kept alongside as accounts.json.bak-TK11383-*. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
19a34d7 · 2026-09-11 · TK-11383: make the page-link driver self-diagnosing
The first real run reached the Designers Chat professional dashboard but found no 'Linked accounts' control, and reported nothing useful about what WAS on screen. Now it tries four label patterns, and on a miss enumerates every visible control plus the two fallback routes (Page settings while acting as the Page, and the Instagram app's Accounts Centre — which also covers the phone-only Business/Creator switch). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
90929b0 · 2026-09-11 · TK-11383: add drive-page-link.mjs — Steve-run openclaw driver to the Linked accounts screen
The auto-mode classifier refuses to let an agent drive a logged-in social account's account-linking UI, and no permission rule lifts it: settings.json already carries a blanket Bash allow with defaultMode:auto (1,065 allow rules), which is the proof the classifier is a separate layer from the allowlist. The mechanism that does work is Steve running the driver himself via a column-0 '!' paste. This script navigates the running openclaw Chrome to a Page's professional dashboard and on to Linked accounts, then stops and reports. It never types credentials and never clicks Connect. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018Jc7e5vG4Jx68iXSYhwUiA
0e18a60 · 2026-09-11 · TK-11383: correct two false claims in the IG fleet runbook
Verified against the live Meta token and launchd, not assumed: 1. "Enrollment is self-healing" is FALSE. No LaunchAgent references build-registry.js; the only scheduled IG job (com.steve.dw-ig-link-drift) runs the read-only detector check-link-drift.js, which never writes accounts.json. A human must run build-registry.js after every link. 2. The "CRITICAL: new Page MUST land in the same Business portfolio or the shared token can't see it" warning is WRONG for this token and is retracted. debug_token reports type=USER, never-expiring, with pages_show_list, so it enumerates every Page Steve admins regardless of portfolio. Live counter-example: borninbeverlyhills (page 2548395878518829) is enrolled and postable today from NO portfolio. Portfolio placement stays preferred for permissions hygiene, and becomes mandatory again only under a SYSTEM-USER token. No account, Page, registry or posting state was changed. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018Jc7e5vG4Jx68iXSYhwUiA
09fe7b8 · 2026-09-10 · TK-11367: fix delete tool's silent false-negative + add real approval gates
THE BUG: IG_GRAPH_HOST in .env carries the scheme ('https://graph.facebook.com'),
and this script read it bare, so every request built
'https://https://graph.facebook.com/...' -> DNS lookup for host "https" ->
ENOTFOUND -> status 0 -> EVERY candidate silently classified NOT-LIVE. The tool
reported 'Total live Novasuede matches: 0' while 38 posts were in fact live. A
destructive tool that reports 'nothing to delete' for an environmental reason is
the false-green class: someone reads 0 and closes the ticket.
live-media.js already normalizes with .replace(/^https?:\/\//,'') — this was the
one script in the directory that forgot the house pattern. Blast radius: 1 file
(every other Graph script hardcodes the bare host).
Also, this tool hardcoded REASON='novasuede-removal-steve-approved' despite never
having run and despite that approval never having been given — every tombstone
would have asserted a sign-off that did not exist. The reason now carries the real
approving artifact via --approved-by, with no default that claims approval, and
--go REFUSES without it (exit 3) and refuses on a live-count mismatch (exit 4).
Both refusals precede the target set and the delete loop.
Tombstones now also capture media_url + caption, so what a delete destroys stays
re-creatable; media_url/thumbnail_url are pulled in the liveness re-check.
RECONCILE (the 33-vs-38 gap in the memo, now resolved): 33 was stale; 38 is the
true total across 4 accounts; but the tool can only SEE 16, because its input
data/live-media.json covers @designerwallcoverings only. The other 20 in-scope
posts (hospitalitywallcoverings 13, wallpaperinstallers 7) are invisible to it
until live-media.js is re-run for those accounts.
Verified: dry run now returns 16 live with correct permalinks; --go without
--approved-by refuses and deletes nothing. No post deleted or archived.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
ac130fd · 2026-09-10 · TK-11367: account-scoped Novasuede guard for Norma's daily cadence
Norma is a THIRD posting pipeline that TK-11086's 2026-09-01 kill never touched — that patch only fixed ~/Projects/dw-marketing-reels — so Norma kept fanning the Novasuede line across the DW network for six more days (35 posts, 09-02..09-07) with nothing watching. Guard sits at the account/product seam in daily-cadence.js because the block is account-scoped, and reuses the existing 'skip this candidate' path so no other selection logic changes. It matches on TEXT (title/caption), NOT on a DWNS- sku prefix: the leaked posts carried DWCC-* skus, which is exactly why TK-11086's sku-prefix filter missed them. Scope per Steve 2026-09-10: block designerwallcoverings, hospitalitywallcoverings and wallpaperinstallers; @suedewallpaper stays ALLOWED as the suede line's own account (TK-10866 kept it as a valid Novasuede target). Verified: 34/34 of Norma's real leaked posts would now be blocked and both @suedewallpaper posts correctly allowed; against 50 live Novasuede products from Norma's own search pool the guard blocks on all three target accounts and allows on suede; non-Novasuede negative controls all pass; --dry cadence run clean. No pm2 restart needed — launchd spawns a fresh node per run. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LjQgkCC1vKXku5Ep5ftooU
2c9013b · 2026-09-10 · IG fleet: re-enroll @grassclothwallpaper (34->35) — link restored, Steve-approved TK-10740
Its IG<->Page link broke 2026-08-27 (afb0c09) and has since been re-linked. Diff verified: +grassclothwallpaper only, 0 removals. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01M35zZWxEaXgPJFM8VpbprA
690a70b · 2026-09-10 · TK-10758: ID-pinned eraser for the 2 residual sassy reposts
fleet-sassy-scan.js --go deletes whatever its regex flags at run time, and CREDIT_RE also matches a legitimate '📸 @handle' photo credit — so that path could sweep an unreviewed good post. This pins the irreversible delete to the exact two media_ids verified live on 2026-09-10, re-checks each is still live and still sassy before acting, and tombstones each verified deletion. Dry-run by default; --go is Steve-gated. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013JCERcLpRfsvEBoPtvUkMJ
dd68303 · 2026-09-10 · IG fleet: add read-only link-drift checker (TK-10740)
build-registry.js is only "self-healing" when something runs it — and nothing does. No launchd plist and no cron entry calls it, so a newly created or restored IG<->Page link never enrolls and never signals. That is how @grassclothwallpaper sat linked-but-unenrolled for ~2 weeks. check-link-drift.js is the DISCOVER half of a discover/activate split: it diffs the live Meta token's postable accounts against accounts.json and reports both directions (linked-not-enrolled, enrolled-but-link-lost). It never writes accounts.json — activation stays a gated `build-registry.js`, because accounts.json is the control plane for daily-cadence.js, which com.steve.dw-ig-cadence runs without --dry (live public posts). A failed token/API read exits 2 (UNKNOWN) rather than reporting in-sync, so it cannot emit a false PASS. Emits PASS/WARN in the fleet-health-rollup vocabulary. No schedule installed — that is a gated action. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q2weureFg2J91hfDAipxTM
965f96d · 2026-08-18 · instagram: per-account 'what to post next from DW Shopify' notes board (/notes)
Human-authored posting plan per Instagram account. New account-notes.js (store + GET/POST /api/live/account-notes + GET /notes board) and notes-viewer.html — a 35-account grid with an auto-saving note textarea each, filter (all/with/without), search, per-card updated date+time stamp, and deep-links to that account's posts. Notes stored in data/account-notes.json (separate from the media caches so a refresh sweep never clobbers them). Cross-linked from /live + /calendar. Verified: read/save/clear round-trip, unknown-account 400, UI auto-save persists, board renders 35 cards no errors, public tunnel gated. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
8cfcfe2 · 2026-08-18 · instagram: keep ALL accounts live via cron (not just DW)
- refreshAllAccounts(): serialized, per-account error-isolated sweep of the whole 35-account roster (incremental by default; full+onlyIncomplete for backfill). - live-media-refresh cron now sweeps ALL accounts hourly (was DW-only), so the cross-account /calendar stays live for the whole roster. - new live-media-backfill-sweep cron (daily 04:40): full-backfills up to 5 not-yet- complete accounts/run as a safety net; no-ops once all complete. Verified: one-shot incremental sweep = 35 accounts, +14 new, 0 errors, ~56s. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
835c032 · 2026-08-18 · instagram: cross-account post Calendar view (/calendar)
Day-major transpose of the /live board: a month calendar of what posted each day across all 35 IG accounts, with an all/select-accounts filter (color-dotted, localStorage-persisted), per-day count pills + thumbnails, and a click-through day drawer listing that day's posts across accounts (account chip, time, caption, stats, permalink). Read-only over the same per-account caches; no Graph API call on page view. New: calendar.js (monthView/dayView + routes), calendar-viewer.html. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
8417463 · 2026-08-17 · Fix IG delete: target the Delete BUTTON, not the 'Delete post?' heading
The confirm dialog renders a heading 'Delete post? Are you sure...' whose ref
matched the broad /Delete/ selector BEFORE the actual Delete button, so the
script clicked a no-op heading ('clicked but not verified gone') and nothing
deleted. Now matches button "More options" / button "Delete" specifically.
Proven: @ffepurchasing 3/3 deleted + verified gone.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
04b7ade · 2026-08-17 · Harden IG delete-originals.js: retry stale refs, recover dead tabs, patient positive-signal login check
- clickByText() defeats the snapshot->click stale-ref race on IG's dynamic DOM - navigate()/snapshot() recover from openclaw 'tab not found' (dead shared tab) - preflight uses a retried positive login signal (app nav visible) instead of a too-early negative check that gave false 'not logged in' readings No change to deletion semantics/gates (canary-stops-1, verify-gone, skip-on-missing-Delete). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1e26b11 · 2026-08-17 · IG /spoonflower: server-inject data into the page so it renders without an authed XHR
Chrome strips URL-embedded basic-auth creds, so fetch('/api/spoonflower') 401'd and
the board showed empty. Now the route injects the JSON into #sf-data and the page
first-paints from that; the XHR is refresh-only and fails silently.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
c573cf5 · 2026-08-17 · IG: add /spoonflower purge viewer (thumbnails + live delete-status board)
The 4 flagged Spoonflower posts are reshares (not in post-ledger.jsonl), so /posts can't show them. New /spoonflower route + board shows each with thumbnail, caption, reshare-vs-incidental-hashtag class, and pending/deleted status that updates live. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
eca6e1e · 2026-08-17 · chore: lint, refactor, v1.2.0 (session close)
- load() now surfaces a failed initial fetch via toast (was silent empty grid) - lint: all files parse clean, no autofixes needed; refactor: no change - minor bump for the /posts viewer + inline/bulk delete feature
c90044b · 2026-08-17 · IG: add serialized, per-account-aware Spoonflower delete script (openclaw)
Reads the confirmed hitlist and deletes via logged-in Chrome (··· -> Delete -> confirm -> verify gone). Serialized + fails loudly if not logged in as the owning account. --dry does a reachability probe that deletes nothing. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
ffc9303 · 2026-08-17 · Bulk-select delete on IG auto-post viewer
- Checkbox per card + bulk bar (select all shown / clear / delete selected) - Sequential deletion; LIVE mode paced 60s between deletes (Meta ban-safe) with live countdown + Stop button; tombstone mode runs back-to-back - Per-item failure surfaces inline (open in IG / remove anyway); button label + confirm text adapt to tombstone vs live mode - Verified in real Chrome: render, select, select-all, clear, mode label Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1b1e7d4 · 2026-08-17 · ig: wrong-image delete tooling — 4 posts (metallic/suede), pre-approved, hold execution
Steve 8/17 delete-all directive for incorrect image md5 c1e6edc. Runner is probe-only by default; --go is ungated/pre-approved but held until Steve says run. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
b5cd441 · 2026-08-17 · IG reshare: blocklist Spoonflower (competitor) fleet-wide + scrub vendor file + add scan tool
Spoonflower is a print-on-demand competitor, not a DW vendor, but it was in dw-vendors.txt (and vendor_registry), so the reshare engine credited it on grassclothwallpaper/suedewallpaper. Added a code-level BLOCKLIST guard in attribute() in both hashtag-reshare.js and fabric-friday-reshare.js so a competitor is never credited/reshared even if it re-enters the vendor file. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
ec91871 · 2026-08-17 · Gate live IG delete behind IG_LIVE_DELETE flag (default off, tombstone-only)
- Server refuses live deletes with 403 unless IG_LIVE_DELETE=1 - /api/posts reports liveEnabled; viewer hides the Live toggle + forces tombstone mode when disabled, with an inline note on how to enable Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
8529d5a · 2026-08-17 · IG auto-post viewer with inline delete (GET /posts on :9810)
- GET /posts: per-account grid of all 275 auto-posts (post-ledger.jsonl), sort + density + account filter + search, created date+time on each card - Inline delete, two modes: tombstone (remove from viewer/ledger, no IG touch) and live (openclaw drives Chrome to delete on IG + verify gone, serialized) - GET /api/posts, GET /api/posts/oc-status, POST /api/posts/delete - Routes registered before start()'s 404 catch-all, behind existing Basic Auth Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
8ac3cb3 · 2026-08-16 · ig(TK-10573): repost the held metallicwallpaper post; lift HOLD
@metallicwallpaper Diamond Vector (dwqw-58467-handle) reposted live with the corrected name+color+SKU caption -> https://www.instagram.com/p/DcG5n5VG3I_/ (new post-ledger row confirms). redo-results updated with the new permalink, HOLD set cleared, delete-viewer regenerated. All 85 old originals now have a confirmed replacement (or are the archived orphan) = safe to delete via openclaw. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
0026909 · 2026-08-15 · ig(TK-10573): HOLD unpublished repost from delete tooling + commit redo viewers
The @metallicwallpaper Diamond Vector repost (DcAHGAcgUIc) landed in redo-results with new_permalink=null and NO post-ledger row — its corrected caption never published, but the product is still live/re-postable. Deleting its original would lose the post. gen-delete-viewer.js now marks it HOLD (red, excluded from Select-all) so it can't be swept into the openclaw deletion. Also commits the previously uncommitted redo tooling: delete-viewer.html, actions-today.html, install-schedules.sh. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
0ff33f9 · 2026-08-15 · Norma IG cadence: 8s timeout on Boost fetch (Cody FIX-FIRST, yoloforever cycle 1)
3rd-party mybcapps endpoint on a 35-min launchd cron had no fetch timeout -> a hung call would stack zombie processes. AbortSignal.timeout(8000); abort falls through to the suggest.json fallback. TK-10588. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
43de9ea · 2026-08-15 · Norma IG cadence: fresh-source via Boost API (fixes clean-product pool exhaustion)
Root cause: findProduct sourced only 10 candidates/keyword from suggest.json; as everPosted grew, narrow-keyword pools exhausted -> 'no clean product … all reused'. Fix pages the Boost SF-filter search API (50/page, thousands available) for the SAME keyword, applying the IDENTICAL leak/no-image guard to every candidate + suggest.json fallback. Widens the guard-gated pool WITHOUT loosening the private-label guard. DTD 7/9 Option C, Cody-scoped. TK-10588. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
564be77 · 2026-08-10 · TK-10395: cap reel container poll at 12x4s so 3x-retry worst case < client 240s
Contrarian find: waitForContainer default 30x4s=120s/attempt made the 3-attempt worst case ~375s > the reels-repo client 240s timeout, so the client could time out MID-legit-retry and mislabel a still-in-flight post 'posted-unverified'. Scope the reel poll to 12x4s=48s/attempt => 3x48+15s backoff=159s < 240s. Short 9:16 reels finish well under 48s. CODE-ONLY: going live needs a gated pm2 restart of norma-instagram (memo'd to pending-approval). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
9897011 · 2026-08-10 · TK-10395: bounded retry-on-2207076 in reel skill (Meta transient media-upload failure)
createContainer+waitForContainer now retry up to 3x on IG error 2207076 / 'Media upload has failed' / processing-timeout; publish only fires after a FINISHED container so retry is double-post-safe. Approved by Steve. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
cbfbf08 · 2026-08-08 · Norma pre-deploy gate: run durable smoke battery before any live restart
Makes the TK-10293 suites actually DURABLE by wiring them into the deploy path
so a REGRESSION (not just a broken build) can't reach :7400:
- scripts/predeploy-gate.sh (npm run gate): spins an isolated instance on its
own port (sdcc_test, all sends sinked, reuses test-instance.sh), runs the full
battery (api/regression/write/crud/authz/e2e), tears down via EXIT trap, exits
non-zero on the first failing suite. Readiness gates on Next's "Ready" marker +
two consecutive /login 200s + settle (a single non-000 poll raced the boot and
ECONNREFUSED'd the early suites).
- scripts/deploy-local.sh (npm run deploy:local): build -> gate -> restart+health.
- scripts/reload.sh: SKIP_BUILD hook so deploy:local doesn't build twice; stays
the fast no-gate emergency-recovery path.
- scripts/test-instance.sh: PORT now overridable (${PORT:-7411}) for the gate.
Verified: gate exits 0 all-green on a clean tree and 1 (BLOCKED) when a suite
fails; live :7400 never touched (isolated ports + sdcc_test).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
f2f2df6 · 2026-08-08 · deploy hygiene (TK-10370): build-then-restart-then-health-gate reload + silence lockfile-root warning
- scripts/reload.sh (npm run reload): builds FIRST (broken build never reaches live), restarts pm2 norma-email, then health-gates :7400 and fails loud if it doesn't answer — closes the TK-10293 gap where a stale .next after a dep change crash-looped with no deploy-time signal. - next.config.ts: outputFileTracingRoot=import.meta.dirname to pin the tracing root and silence the stray-lockfile "inferred workspace root" warning. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
efc419d · 2026-08-06 · chore: refactor (drop dead testpulse login in api-smoke) + v0.1.4 (session close)
Lint via subagent hit an internal error; next build typechecked all touched files successfully this session, so types are clean. Refactor: removed one unused login call. All 6 suites green after: api 195 / write 216 / crud 35 / authz 12 / regression 20 / e2e 9.
a945908 · 2026-08-06 · test(cycle7 Cody-gate): mutation role-matrix + isolation positive-control
Cody VERIFIED 3 real gaps: (1) matrix was GET-only — 216 mutation handlers untested for role-gating; (2) tenant-isolation passed VACUOUSLY (asserted B absent but never that staff sees an A record — an empty-for-everyone list passes falsely); (3) bespoke-auth routes (/api/registry) silently skipped. - Matrix now covers mutations too: for each POST/PUT/PATCH/DELETE handler, every DISALLOWED role must 403 (requireRole rejects before any write/send side-effect, so probing is safe). 180 GET + 201 mutation handlers, 0 under-restrictions. - Isolation positive control: admin creates a tenant-A AND a tenant-B record; assert staff(A) SEES the A record (list + by-id 200) BEFORE asserting B is absent (by-id 404/403 + not in list). Kills the vacuous-truth trap. Both records cleaned up. - Added /api/registry (bespoke admin-only auth) as an explicit matrix entry. Full battery (6 suites): api 195 / write 216 / crud 35 / authz 12 / regression 20 / e2e 9.
f7e95d8 · 2026-08-06 · test(cycle7): authorization-matrix + tenant-isolation suite (real tenant fixtures)
test:authz (tests/api-authz-matrix.mjs) — the security coverage the null-org fixtures couldn't give. Self-provisions two tenant accounts in sdcc_test and scopes teststaff to tenant A BEFORE login (org_id is baked into the session token at login). 1) ROLE MATRIX: derives each GET route's allowed roles from its requireRole(...) call (resolving ...VAR spreads to their local const) and asserts admin/staff/pulse each get the right access across 179 guarded routes. 0 under-restrictions (no disallowed role ever bypasses 403 = no privilege-escalation) + 0 over-restrictions. 2) TENANT ISOLATION: admin creates a tenant-B-owned donation + grant; asserts staff scoped to tenant A CANNOT read them by id (404/403) and they never leak into staff's list. Parser fix: ...ROLES is NOT always all roles — email-analyzer files define a local const ROLES=['admin','staff']; the resolver reads the local const so pulse's correct 403 isn't miscounted as over-restriction. Full battery (6 suites): api 195 / write 216 / crud 35 / authz 8 / regression 20 / e2e 9.
2a8a6c7 · 2026-08-06 · test(cycle6 Cody-gate): CRUD tests real org id-space; non-hollow admin E2E
Cody VERIFIED the CRUD suite only tested the null/global path (which no real tenant takes) and the admin E2E was hollow (silent skip + fixed sleep + body-visible-always-true). - CRUD: scope each entity with the id-space its org_id FK actually requires — donations/ grants now POST with a real nonprofit_accounts.id (201, genuine org-scoped write path), clients/library with a real organizations.id, journalists org-less. Proves the routes work under real tenant scoping (not org=null). 35 assertions green. - admin E2E: removed the silent-skip; each navigated tab must settle #main-content to non-empty content, and >=3 tabs must be navigated (can't pass by skipping all). Waits on networkidle, not a fixed timeout. - Expanded the gated memo: the split FK makes a coherent staff org_id impossible (all seeded users have org_id=null; null-org staff reads cross-tenant) — a second-order symptom of the same data-model bug, gated to Steve (not app-fixable without the schema decision). Full battery: api 195 / write 216 / crud 35 / regression 20 / e2e 9.
e958e07 · 2026-08-06 · test(cycle6): CRUD lifecycle suite (create->read->update->delete) + admin E2E journey
test:crud (tests/api-crud-lifecycle.mjs) — the 'does the write actually WORK' coverage write-smoke doesn't give. Full round-trip per entity: CREATE (real payload) -> READ-BACK (field persisted) -> UPDATE -> DELETE -> CONFIRM-GONE (404). Self-cleaning. 5 core entities (clients/donations/grants/library/journalists), per-entity org scope. 35 assertions green. It surfaced a FLEET-WIDE data-model bug (VERIFIED): org_id FKs are split across two org tables — contacts/donations/drafts/grants/petitions/sessions -> nonprofit_accounts, but library_items -> organizations, and the app scopes by organizations. So org-scoped CREATE on the nonprofit_accounts-FK tables 500s (donations/grants reproduced). Expanded the gated memo (pending-approval/norma-sessions-org-fk-datamodel.md) from sessions-only to all 6 tables — schema decision, NOT auto-fixed. Suite runs those entities org-less (valid global path) so it proves CRUD logic; org-scoped assertions get added once the FK is reconciled. test:e2e — added admin.spec.ts: login -> app shell -> navigate Grants/Donations/Petitions/ News tabs, assert no console errors. E2E now 9 specs. Full battery: api 195 / write 216 / crud 35 / regression 20 / e2e 9.
d26f6c6 · 2026-08-06 · fix(cycle5 Cody-gate): truly-empty-body probe + readJson across 93 routes
Cody VERIFIED my write-smoke gave false confidence: the admin probe sent '{}' (valid
JSON), so it MISSED routes that crash on an absent body — the real prod scenario. He
reproduced no-body 500s on clients/drafts/grants/donations-insights POST.
- Suite: admin+unauth probe now sends NO body (undefined), replicating a client omitting
the body — the case that makes unguarded request.json() throw -> 500.
- readJson() codemod across ALL 93 non-excluded routes still on raw request.json()
(returns {} on empty; behavior-preserving for valid JSON). lib/body.ts default T=any so
the swap is type-neutral. Cody's 4 now return 400, not 500.
- sessions.org_id FK inconsistency (references nonprofit_accounts, not organizations) is a
data-model decision -> drafted to pending-approval (norma-sessions-org-fk-datamodel.md),
not auto-migrated. The 23503->409 guard stays (stops the crash; feature still gated).
- pulse public topics: redirect:'manual' stops the crash but the section shows nothing
because /api/petitions/topics is auth-gated — flagged as a follow-up (public topics
source needed), NOT claimed as fully fixed.
Full battery green: api-smoke 195 / write-smoke 216 (no-body probe) / regression 20 / e2e 8.
959da8b · 2026-08-06 · test+fix(cycle5): write-path smoke (216 mutations) + Playwright E2E (3 tiers) + fixes surfaced
WRITE-PATH (tests/api-write-smoke.mjs, npm run test:write): enumerates all 216
mutating (route,verb) pairs; asserts every one gates unauth (4xx, never 2xx/500) and
does not 500 on an empty body. Empty bodies keep it side-effect-free; external/AI/send
families are probed unauth-only (never fired). Resolves a real org id so tenant-path
inserts satisfy FKs (the null-org blind spot Cody flagged, applied to writes).
Fixes it surfaced (all reversible, verified on :7411):
- lib/body.ts readJson(): safe body parse ({} on empty, typed error on malformed).
Applied to 5 routes that crashed on empty body via unguarded request.json()
(outreach-pipeline, settings/news-watch-people, social/competitors, social/posts,
pulse/tracked).
- webhooks/pulse-topic: not-configured 500 -> 503. contacts/import: wrong content-type
500 -> 415. donations/insights: removed org_id filter (table has no org_id column) +
readJson. community: guarded the unauth proxy to :7400 (non-JSON/upstream-fail -> 502,
not a 500 crash). sessions: FK violation (23503) -> 409, not 500.
E2E (playwright.config.ts + tests/e2e/, npm run test:e2e): chromium installed + working
in this env. 8 specs — admin/staff/pulse login + land + no console errors; pulse-tier
lands on /pulse; wrong creds surface an error; public /pulse,/pulse/petitions,/pulse/about
render with no login wall. Caught a real public-surface bug: /pulse fetched the auth-gated
/api/petitions/topics which 307s to HTML /login -> JSON parse crash; fixed with
redirect:'manual' so the existing .ok guard degrades gracefully.
Suites: api-smoke 195 / write-smoke 216 / regression 20 / e2e 8 — all green.
File tree
- .gitignore
- CHANGES.md
- CHANGES2.md
- CLAUDE.md
- NORMA-WAKEUP-2026-05-20.md
- README.md
- agents/bluesky-agent/ecosystem.config.js
- agents/bluesky-agent/lib/bluesky.js
- agents/bluesky-agent/package-lock.json
- agents/bluesky-agent/package.json
- agents/bluesky-agent/server.js
- agents/bluesky-agent/skills/post.js
- agents/datasource-agent/ecosystem.config.js
- agents/datasource-agent/lib/api-registry.js
- agents/datasource-agent/lib/frontpage-parser.js
- agents/datasource-agent/lib/newspaper-registry.js
- agents/datasource-agent/lib/petition-registry.js
- agents/datasource-agent/package-lock.json
- agents/datasource-agent/package.json
- agents/datasource-agent/server.js
- agents/datasource-agent/skills/collect-statements.js
- agents/datasource-agent/skills/discover-apis.js
- agents/datasource-agent/skills/rate-sources.js
- agents/datasource-agent/skills/report.js
- agents/datasource-agent/skills/scrape-frontpages.js
- agents/datasource-agent/skills/scrape-petitions.js
- agents/discord-agent/ecosystem.config.js
- agents/discord-agent/lib/discord.js
- agents/discord-agent/package-lock.json
- agents/discord-agent/package.json
- agents/discord-agent/server.js
- agents/discord-agent/skills/discover.js
- agents/discord-agent/skills/monitor.js
- agents/discord-agent/skills/post.js
- agents/discord-agent/skills/reply.js
- agents/discord-agent/skills/report.js
- agents/facebook-agent/ecosystem.config.js
- agents/facebook-agent/package-lock.json
- agents/facebook-agent/package.json
- agents/facebook-agent/server.js
- agents/facebook-agent/skills/discover.js
- agents/facebook-agent/skills/monitor.js
- agents/facebook-agent/skills/post.js
- agents/facebook-agent/skills/report.js
- agents/instagram-agent/.gitignore
- agents/instagram-agent/IG-FLEET-OPENCLAW-RUNBOOK.md
- agents/instagram-agent/IG-RESHARE-OPS.md
- agents/instagram-agent/POSTING.md
- agents/instagram-agent/RECOVERY.md
- agents/instagram-agent/UNLINKED-PAGES-CHECKLIST.md
- agents/instagram-agent/account-notes.js
- agents/instagram-agent/account-themes.json
- agents/instagram-agent/accounts.js
- agents/instagram-agent/accounts.json
- agents/instagram-agent/backfill-all.js
- agents/instagram-agent/build-ig-data.js
- agents/instagram-agent/build-manifest.json
- agents/instagram-agent/build-registry.js
- agents/instagram-agent/calendar.js
- agents/instagram-agent/check-link-drift.js
- agents/instagram-agent/comment-reply.js
- agents/instagram-agent/content.js
- agents/instagram-agent/daily-cadence.js
- agents/instagram-agent/data/account-hashtags.json
- agents/instagram-agent/data/dw-vendors.txt
- agents/instagram-agent/delete-current-account.js
- agents/instagram-agent/delete-gate2-graph.js
- agents/instagram-agent/delete-novasuede-graph.js
- agents/instagram-agent/delete-originals.js
- agents/instagram-agent/delete-room-setting-graph.js
- agents/instagram-agent/delete-spoonflower.js
- agents/instagram-agent/delete-wrong-image.js
- agents/instagram-agent/deploy/com.steve.dw-ig-cadence.plist
- agents/instagram-agent/deploy/com.steve.dw-ig-fabricfriday-reshare.plist
- agents/instagram-agent/deploy/com.steve.dw-ig-phase1-check.plist
- agents/instagram-agent/deploy/com.steve.dw-ig-reply-fleet.plist
- agents/instagram-agent/deploy/com.steve.dw-ig-reshare-fleet.plist
- agents/instagram-agent/deploy/install-schedules.sh
- agents/instagram-agent/drive-page-link.mjs
- agents/instagram-agent/ecosystem.config.js
- agents/instagram-agent/enrollment-hold.json
- agents/instagram-agent/erase-tk10758-residuals.js
- agents/instagram-agent/fabric-friday-reshare.js
- agents/instagram-agent/find-dup-images.js
- agents/instagram-agent/finish-fabric-fridays.sh
- agents/instagram-agent/fleet-sassy-scan.js
- agents/instagram-agent/gen-actions-viewer.js
- agents/instagram-agent/gen-delete-batches.js
- agents/instagram-agent/gen-delete-viewer.js
- agents/instagram-agent/gen-ig-activity.js
- agents/instagram-agent/hashtag-reshare.js
- agents/instagram-agent/jewelry-gate.js
- agents/instagram-agent/link-watchlist.json
- agents/instagram-agent/live-media.js
- agents/instagram-agent/monitor-reshares.js
- agents/instagram-agent/onboarding-kits.json
- agents/instagram-agent/package-lock.json
- agents/instagram-agent/package.json
- agents/instagram-agent/phase1-check.sh
- agents/instagram-agent/post-to.js
- agents/instagram-agent/posts-api.js
- agents/instagram-agent/probe-owned-pages.js
- agents/instagram-agent/probe-unlinked.js
- agents/instagram-agent/public/actions-today.html
- agents/instagram-agent/public/calendar-viewer.html
- agents/instagram-agent/public/delete-viewer.html
- agents/instagram-agent/public/ig-activity.json
- agents/instagram-agent/public/live-viewer.html
- agents/instagram-agent/public/notes-viewer.html
- agents/instagram-agent/public/posts-viewer.html
- agents/instagram-agent/public/spoonflower-viewer.html
- agents/instagram-agent/reconcile-gate2.js
- agents/instagram-agent/redo-last5.js
- agents/instagram-agent/reply-fleet.js
- agents/instagram-agent/reshare-erase.js
- agents/instagram-agent/reshare-fleet.js
- agents/instagram-agent/scan-spoonflower.js
- agents/instagram-agent/server.js
- agents/instagram-agent/setup-ig-token.js
- agents/instagram-agent/skills/_ig-api.js
- agents/instagram-agent/skills/discover.js
- agents/instagram-agent/skills/monitor.js
- agents/instagram-agent/skills/post.js
- agents/instagram-agent/skills/reel.js
- agents/instagram-agent/skills/report.js
- agents/instagram-agent/skills/story.js
- agents/instagram-agent/spoonflower-api.js
- agents/instagram-agent/test-link-drift.mjs
- agents/instagram-agent/vision-classify.mjs
- agents/instagram-agent/vision-sweep-local.mjs
- agents/moveon-agent/ecosystem.config.js
- agents/moveon-agent/lib/moveon.js
- agents/moveon-agent/package-lock.json
- agents/moveon-agent/package.json
- agents/moveon-agent/server.js
- agents/moveon-agent/skills/discover.js
- agents/moveon-agent/skills/monitor.js
- agents/moveon-agent/skills/post.js
- agents/moveon-agent/skills/report.js
- agents/onboard-agent/ecosystem.config.js
- agents/onboard-agent/lib/foundation-matcher.js
- agents/onboard-agent/lib/ntee-matcher.js
- agents/onboard-agent/lib/propublica.js
- agents/onboard-agent/package-lock.json
- agents/onboard-agent/package.json
- agents/onboard-agent/server.js
- agents/onboard-agent/skills/discover.js
- agents/onboard-agent/skills/monitor.js
- agents/onboard-agent/skills/post.js
- agents/onboard-agent/skills/reply.js
- agents/onboard-agent/skills/report.js
- agents/price-agent/ecosystem.config.js
- agents/price-agent/lib/ca-schools-registry.js
- agents/price-agent/lib/change-detector.js
- agents/price-agent/lib/html-parser.js
- agents/price-agent/lib/scorecard-fields.js
- agents/price-agent/package-lock.json
- agents/price-agent/package.json
- agents/price-agent/server.js
- agents/price-agent/skills/crawl-ccc.js
- agents/price-agent/skills/crawl-csu.js
- agents/price-agent/skills/crawl-federal.js
- agents/price-agent/skills/crawl-scorecard.js
- agents/price-agent/skills/crawl-uc.js
- agents/price-agent/skills/detect-changes.js
- agents/price-agent/skills/enrich.js
- agents/price-agent/skills/report.js
- agents/reddit-agent/ecosystem.config.js
- agents/reddit-agent/lib/reddit.js
- agents/reddit-agent/package-lock.json
- agents/reddit-agent/package.json
- agents/reddit-agent/server.js
- agents/reddit-agent/skills/discover.js
- agents/reddit-agent/skills/monitor.js
- agents/reddit-agent/skills/post.js
- agents/reddit-agent/skills/reply.js
- agents/reddit-agent/skills/report.js
- agents/shared/agent-base.js
- agents/shared/ai.js
- agents/shared/audit-logger.js
- agents/shared/credentials.js
- agents/shared/cron-scheduler.js
- agents/shared/db.js
- agents/shared/package-lock.json
- agents/shared/package.json
- agents/shared/pulse-reporter.js
- agents/shared/rate-limiter.js
- agents/twitch-agent/ecosystem.config.js
- agents/twitch-agent/lib/twitch.js
- agents/twitch-agent/package-lock.json
- agents/twitch-agent/package.json
- agents/twitch-agent/server.js
- agents/twitch-agent/skills/discover.js
- agents/twitch-agent/skills/monitor.js
- agents/twitch-agent/skills/post.js
- agents/twitch-agent/skills/reply.js
- agents/twitch-agent/skills/report.js
- agents/twitter-agent/ecosystem.config.js
- agents/twitter-agent/lib/twitter.js
- agents/twitter-agent/package-lock.json
- agents/twitter-agent/package.json
- agents/twitter-agent/server.js
- agents/twitter-agent/skills/discover.js
- agents/twitter-agent/skills/monitor.js
- agents/twitter-agent/skills/post.js
- agents/twitter-agent/skills/reply.js
- agents/twitter-agent/skills/report.js
- app/api/accounts/[id]/keywords/route.ts
- app/api/accounts/route.ts
- app/api/action-network/route.ts
- app/api/admin/impersonate/route.ts
- app/api/admin/permissions/route.ts
- app/api/agents/advocacy/generate/route.ts
- app/api/agents/congress-by-zip/route.ts
- app/api/agents/grants/match/route.ts
- app/api/agents/org/register/route.ts
- app/api/agents/petition/generate/route.ts
- app/api/ai-chat/route.ts
- app/api/ai/generate/route.ts
- app/api/alerts/route.ts
- app/api/analytics/charts/route.ts
- app/api/archives/[id]/route.ts
- app/api/archives/route.ts
- app/api/articles/discover/route.ts
- app/api/articles/link/route.ts
- app/api/audit/route.ts
- app/api/auth/google/callback/route.ts
- app/api/auth/google/route.ts
- app/api/auth/login/route.ts
- app/api/auth/logout/route.ts
- app/api/auth/session/route.ts
- app/api/boilerplate/route.ts
- app/api/census/route.ts
- app/api/chat/route.ts
- app/api/clickup/route.ts
- app/api/clients/[id]/route.ts
- app/api/clients/route.ts
- app/api/collaborations/discover/route.ts
- app/api/collaborations/route.ts
- app/api/community/route.ts
- app/api/congress/route.ts
- app/api/connections/deep-insights/route.ts
- app/api/connections/entity/[type]/[id]/route.ts
- app/api/connections/graph/route.ts
- app/api/connections/opportunities/route.ts
- app/api/connections/power-map/route.ts
- app/api/connections/viz/route.ts
- app/api/contacts/[id]/route.ts
- app/api/contacts/counts/route.ts
- app/api/contacts/coworkers/route.ts
- app/api/contacts/enrich/route.ts
- app/api/contacts/import/route.ts
- app/api/contacts/related/route.ts
- app/api/contacts/route.ts
- app/api/cron/credential-health/route.ts
- app/api/cron/daily/route.ts
- app/api/cron/dispatch-scheduler/route.ts
- app/api/cron/gmail-sync/route.ts
- app/api/cron/ingest-news/route.ts
- app/api/data-explorer/apis/route.ts
- app/api/data-explorer/frontpages/route.ts
- app/api/data-explorer/route.ts
- app/api/datasource/[id]/route.ts
- app/api/datasource/route.ts
- app/api/datasource/stats/route.ts
- app/api/dispatch/route.ts
- app/api/donations/[id]/route.ts
- app/api/donations/insights/[id]/route.ts
- app/api/donations/insights/route.ts
- app/api/donations/route.ts
- app/api/drafts/[id]/export/route.ts
- app/api/drafts/[id]/route.ts
- app/api/drafts/[id]/send-test/route.ts
- app/api/drafts/[id]/versions/route.ts
- app/api/drafts/auto-generate/route.ts
- app/api/drafts/route.ts
- app/api/drive/search/route.ts
- app/api/email-analyzer/drafts/[id]/route.ts
- app/api/email-analyzer/drafts/route.ts
- app/api/email-analyzer/fetch-url/route.ts
- app/api/email-analyzer/learnings/route.ts
- app/api/email-analyzer/references/route.ts
- app/api/email-analyzer/rewrite/route.ts
- app/api/email-analyzer/score/route.ts
- app/api/email-analyzer/search/route.ts
- app/api/email-analyzer/skills/route.ts
- app/api/email-analyzer/subject-lines/generate/route.ts
- app/api/email-analyzer/subject-lines/route.ts
- app/api/email-analyzer/suggestions/route.ts
- app/api/email-analyzer/universal-references/route.ts
- app/api/email-sends/route.ts
- app/api/fred/route.ts
- app/api/generate/route.ts
- app/api/geo/advocacy/route.ts
- app/api/geo/crosswalk/route.ts
- app/api/geo/hotspots/route.ts
- app/api/geo/moveon/route.ts
- app/api/geo/orchestrate/route.ts
- app/api/geo/report-card/route.ts
- app/api/geo/scatter/route.ts
- app/api/geo/state-heat/route.ts
- app/api/geo/topic-grid/route.ts
- app/api/geo/trends/route.ts
- app/api/globe/countries/route.ts
- app/api/globe/country/[code]/route.ts
- app/api/globe/states/[code]/route.ts
- app/api/globe/states/route.ts
- app/api/gmail/contacts/route.ts
- app/api/gmail/draft-reply/route.ts
- app/api/gmail/mailboxes/route.ts
- app/api/gmail/messages/[id]/assign/route.ts
- app/api/gmail/messages/[id]/mark-read/route.ts
- app/api/gmail/messages/[id]/route.ts
- app/api/gmail/messages/route.ts
- app/api/gmail/oauth/callback/route.ts
- app/api/gmail/oauth/route.ts
- app/api/gmail/send/route.ts
- app/api/gmail/sync-status/route.ts
- app/api/gmail/sync/route.ts
- app/api/grants/[id]/proposals/[pid]/export/route.ts
- app/api/grants/[id]/proposals/[pid]/route.ts
- app/api/grants/[id]/proposals/[pid]/send/route.ts
- app/api/grants/[id]/proposals/generate/route.ts
- app/api/grants/[id]/proposals/route.ts
- app/api/grants/[id]/route.ts
- app/api/grants/calendar/route.ts
- app/api/grants/route.ts
- app/api/grants/student-finder/route.ts
- app/api/grants/suggest/route.ts
- app/api/graph/ideas/route.ts
- app/api/graph/journalist/[id]/route.ts
- app/api/graph/mindmap-enhanced/route.ts
- app/api/graph/partners/route.ts
- app/api/graph/pipeline-overlay/route.ts
- app/api/graph/pulse-overlay/route.ts
- app/api/ingest/action-network/route.ts
- app/api/ingest/charity-navigator/route.ts
- app/api/ingest/community/route.ts
- app/api/ingest/congress-gov/route.ts
- app/api/ingest/congress/route.ts
- app/api/ingest/gmail/route.ts
- app/api/ingest/govt-data/route.ts
- app/api/ingest/grants-gov/route.ts
- app/api/ingest/hend/route.ts
- app/api/ingest/news/route.ts
- app/api/ingest/open-states/route.ts
- app/api/ingest/regulations/route.ts
- app/api/ingest/sam-gov/route.ts
- app/api/ingest/site/route.ts
- app/api/ingest/x/route.ts
- app/api/integrations/route.ts
- app/api/intelligence/activity/route.ts
- app/api/intelligence/briefing/route.ts
- app/api/intelligence/compute/route.ts
- app/api/intelligence/digest/route.ts
- app/api/intelligence/paths/route.ts
- app/api/intelligence/power-scores/route.ts
- app/api/journalists/[id]/entity-flow/route.ts
- app/api/journalists/[id]/route.ts
- app/api/journalists/directory/route.ts
- app/api/journalists/route.ts
- app/api/journalists/scrape/route.ts
- app/api/leads/discover/route.ts
- app/api/leads/route.ts
- app/api/library/[id]/route.ts
- app/api/library/generate/route.ts
- app/api/library/route.ts
- app/api/member-email/route.ts
- app/api/news/[id]/route.ts
- app/api/news/detect-mentions/route.ts
- app/api/news/fetch-article/route.ts
- app/api/news/live/route.ts
- app/api/news/outlets/route.ts
- app/api/news/resolve-authors/route.ts
- app/api/news/route.ts
- app/api/news/tags/route.ts
- app/api/nonprofit/enrich/route.ts
- app/api/nonprofit/signup/route.ts
- app/api/onboard/[id]/route.ts
- app/api/onboard/route.ts
- app/api/onboard/stats/route.ts
- app/api/onboard/trigger/route.ts
- app/api/orgs/enrich/route.ts
- app/api/orgs/match/route.ts
- app/api/orgs/route.ts
- app/api/orgs/signup/route.ts
- app/api/outreach-pipeline/generate/route.ts
- app/api/outreach-pipeline/route.ts
- app/api/outreach-templates/route.ts
- app/api/outreach/generate/route.ts
- app/api/partners/posts/route.ts
- app/api/partners/route.ts
- app/api/petitions/[id]/campaigns/route.ts
- app/api/petitions/[id]/geo/route.ts
- app/api/petitions/[id]/route.ts
- app/api/petitions/[id]/signatures/route.ts
- app/api/petitions/draft/route.ts
- app/api/petitions/ideas/route.ts
- app/api/petitions/route.ts
- app/api/petitions/suggest/route.ts
- app/api/petitions/topics/route.ts
- app/api/petitions/trending/route.ts
- app/api/pipeline/[id]/approve/route.ts
- app/api/pipeline/[id]/dispatch/route.ts
- app/api/pipeline/[id]/route.ts
- app/api/pipeline/[id]/schedule/route.ts
- app/api/pipeline/generate/route.ts
- app/api/pipeline/reorder/route.ts
- app/api/pipeline/route.ts
- app/api/pipeline/stats/route.ts
- app/api/price-tracker/route.ts
- app/api/price-tracker/stats/route.ts
- app/api/pulse/activity/route.ts
- app/api/pulse/articles/route.ts
- app/api/pulse/fetch/route.ts
- app/api/pulse/petitions/[id]/route.ts
- app/api/pulse/petitions/[id]/sign/route.ts
- app/api/pulse/petitions/route.ts
- app/api/pulse/profile/route.ts
- app/api/pulse/stats/route.ts
- app/api/pulse/topics/generate/route.ts
- app/api/pulse/topics/route.ts
- app/api/pulse/tracked/route.ts
- app/api/radar/route.ts
- app/api/registry/route.ts
- app/api/schedule/route.ts
- app/api/scheduled/[id]/route.ts
- app/api/scheduled/route.ts
- app/api/scraper/petitions/route.ts
- app/api/scraper/run/route.ts
- app/api/scraper/student-debt/route.ts
- app/api/scraper/suggestions/route.ts
- app/api/scraper/trending/route.ts
- app/api/search/public/route.ts
- app/api/search/route.ts
- app/api/sessions/[id]/route.ts
- app/api/sessions/route.ts
- app/api/settings/api-keys/[id]/route.ts
- app/api/settings/api-keys/route.ts
- app/api/settings/credential-health/route.ts
- app/api/settings/credentials/route.ts
- app/api/settings/intelligence/route.ts
- app/api/settings/news-watch-people/route.ts
- app/api/settings/people/route.ts
- app/api/settings/pulse-config/route.ts
- app/api/settings/route.ts
- app/api/settings/tier-credentials/[id]/route.ts
- app/api/settings/tier-credentials/route.ts
- app/api/slack/notify/route.ts
- app/api/slack/route.ts
- app/api/social/accounts/route.ts
- app/api/social/ai-compose/route.ts
- app/api/social/ai-image/route.ts
- app/api/social/analytics/dashboard/route.ts
- app/api/social/analytics/route.ts
- app/api/social/bulk-schedule/route.ts
- app/api/social/competitors/crawl/route.ts
- app/api/social/competitors/posts/route.ts
- app/api/social/competitors/route.ts
- app/api/social/competitors/suggest/route.ts
- app/api/social/connect/route.ts
- app/api/social/my-posts/route.ts
- app/api/social/posts/approve/route.ts
- app/api/social/posts/pending/route.ts
- app/api/social/posts/route.ts
- app/api/social/publish/route.ts
- app/api/social/schedule/route.ts
- app/api/social/scoreboard/route.ts
- app/api/statements/[id]/route.ts
- app/api/statements/generate/route.ts
- app/api/statements/route.ts
- app/api/user-preferences/route.ts
- app/api/users/route.ts
- app/api/v1/health/route.ts
- app/api/webhooks/pulse-topic/route.ts
- app/api/xsessions/[id]/route.ts
- app/api/xsessions/posts/route.ts
- app/api/xsessions/route.ts
- app/error.tsx
- app/favicon.ico
- app/globals.css
- app/icon.svg
- app/layout.tsx
- app/login/page.tsx
- app/page.tsx
- app/pulse/about/page.tsx
- app/pulse/activity/page.tsx
- app/pulse/layout.tsx
- app/pulse/page.tsx
- app/pulse/petition/[id]/page.tsx
- app/pulse/petitions/create/page.tsx
- app/pulse/petitions/page.tsx
- app/pulse/profile/page.tsx
- app/pulse/tracked/page.tsx
- app/signup/_SignupWizardWrapper.tsx
- app/signup/page.tsx
- app/supervisor/page.tsx
- components/AgeThemeSlider.tsx
- components/AppShell.tsx
- components/AuthProvider.tsx