← back to Norma
IG fleet: fold 5 email-discovered owned accounts into manifest + stage themes
5b914e4d573b15f915cca8bcb0f85e8d81d810e7 · 2026-08-12 10:37:02 -0700 · steve@designerwallcoverings.com
Files touched
M agents/instagram-agent/account-themes.jsonM agents/instagram-agent/build-manifest.jsonA agents/instagram-agent/probe-unlinked.js
Diff
commit 5b914e4d573b15f915cca8bcb0f85e8d81d810e7
Author: steve@designerwallcoverings.com <steve@designerwallcoverings.com>
Date: Wed Aug 12 10:37:02 2026 -0700
IG fleet: fold 5 email-discovered owned accounts into manifest + stage themes
---
agents/instagram-agent/account-themes.json | 9 ++++++-
agents/instagram-agent/build-manifest.json | 11 ++++++++
agents/instagram-agent/probe-unlinked.js | 42 ++++++++++++++++++++++++++++++
3 files changed, 61 insertions(+), 1 deletion(-)
diff --git a/agents/instagram-agent/account-themes.json b/agents/instagram-agent/account-themes.json
index 75d022e..247e8ed 100644
--- a/agents/instagram-agent/account-themes.json
+++ b/agents/instagram-agent/account-themes.json
@@ -61,6 +61,13 @@
"tradeonlytextiles": { "keyword": "textile" },
"charlestonwallpaper": { "keyword": "charleston traditional" },
"chicagowallpaper": { "keyword": "chicago modern" },
- "asseeninmovies": { "keyword": "dramatic scenic", "sensitive": true }
+ "asseeninmovies": { "keyword": "dramatic scenic", "sensitive": true },
+
+ "_email_sweep_note": "Below: owned/active accounts found in the 2026-08-12 email sweep, staged for the moment each IG is connected to its Page (build-registry then enrolls it). Inert until the handle is linked. protestdaily is skip — it's a news/media account, not a wallcovering product feed; give it bespoke content, never the DW-product cadence.",
+ "designerschat": { "keyword": "interior design" },
+ "beverlyandhillsdesigns": { "keyword": "glamour interior design" },
+ "filthyrichlivingcom": { "keyword": "luxury glamour" },
+ "nationalpaperhangers": { "keyword": "wallpaper installation" },
+ "protestdaily": { "skip": "news/media account — not a wallcovering product cadence; post bespoke content only" }
}
}
diff --git a/agents/instagram-agent/build-manifest.json b/agents/instagram-agent/build-manifest.json
index 5f3d2d8..e2c0024 100644
--- a/agents/instagram-agent/build-manifest.json
+++ b/agents/instagram-agent/build-manifest.json
@@ -33,6 +33,17 @@
"already_decided": [
{ "page_name": "Hospitality Fabrics (CREATE)", "handle": "hospitalityfabrics", "status": "exists", "line": "Hospitality fabrics", "theme_keyword": "hospitality fabric", "sensitive": false, "note": "DTD 8/8 2026-08-12 — account exists (360 followers), CREATE the 'Hospitality Fabrics' Page then link + assign, then re-run build-registry (fleet 35->36)." }
],
+ "existing_owned_unlinked": {
+ "_note": "Owned, ACTIVE Instagram accounts surfaced by the 2026-08-12 email sweep (recipient-handle on real IG notification mail = account Steve controls) that are NOT in the 35 postable. Each is human-gated: Meta reserves the IG->Page connect for the account's own login, and Page-creation via Graph API was deprecated in 2023, so neither step is scriptable. Graph-probed 2026-08-12 (probe-unlinked.js against the shared token, 80 Pages). action=link_only -> Page already on token, just connect the IG; action=page_needed_then_link -> no Page on token, create the Page (UI) then connect. After either, re-run build-registry.js to auto-enroll.",
+ "verified_against": "me/accounts probe 2026-08-12 + George email sweep (601 IG mails, 4 mailboxes)",
+ "accounts": [
+ { "page_name": "Designers Chat", "handle": "designerschat", "status": "exists", "action": "link_only", "line": "Community / designers chat", "theme_keyword": "interior design", "sensitive": false, "note": "Page 'Designers Chat' IS on the token (no IG linked). IG @designerschat is active ('someone started following you' 8/7). Correction: the UNLINKED-PAGES-CHECKLIST filed this Tier-2 as 'no IG' — email proves the IG exists. Just connect it." },
+ { "page_name": "Beverly & Hills Designs", "handle": "beverlyandhillsdesigns", "status": "exists_ig_no_page", "action": "page_needed_then_link", "line": "Design / brand", "theme_keyword": "glamour interior design", "sensitive": false, "note": "No matching Page on token; IG active (recipient of feed/suggestion mail). Set IG to Business/Creator, create a Page, connect, assign, re-run build-registry." },
+ { "page_name": "Filthy Rich Living", "handle": "filthyrichlivingcom", "status": "exists_ig_no_page", "action": "page_needed_then_link", "line": "Luxury lifestyle", "theme_keyword": "luxury glamour", "sensitive": false, "note": "No Page on token; IG active + owns info@filthyrichliving.com. Create Page + connect." },
+ { "page_name": "National Paper Hangers", "handle": "nationalpaperhangers", "status": "exists_ig_no_page", "action": "page_needed_then_link", "line": "Installer directory", "theme_keyword": "wallpaper installation", "sensitive": false, "note": "No Page on token; IG active + owns info@nationalpaperhangers.com. Sibling of the live @wallpaperinstallers. Create Page + connect." },
+ { "page_name": "Protest Daily", "handle": "protestdaily", "status": "exists_ig_no_page", "action": "page_needed_then_link", "line": "News / media (venture)", "theme_keyword": null, "sensitive": true, "note": "No Page on token; IG active. NOT a wallcovering account — the DW-product daily cadence does NOT fit; theme is skip. Link it so it's postable, but feed it its own (non-product) content, not the auto-cadence." }
+ ]
+ },
"tier2_link_only_if_posting": ["Designers Chat","Interior Designer Showroom","Local Design Firms","Local Designer Directory","DesignerWallpaperForum.com","WallpaperWeekly.com (overlaps @grassclothwallpaper)","To The Trade Daily","All News Daily","DSGN TV","Wallpaper Design Competition","NOTVRequired.com"],
"tier3_dups_skip": ["Brazilliance Walls & Fabrics","Traditional Whimsy Home","FFE Purchasing Group"],
"tier4_junk_skip": ["Bubbe","Why Legalize - Marijuana","Faux News Live","LAFires.org - Los Angeles Fires","Los Angeles Fires"]
diff --git a/agents/instagram-agent/probe-unlinked.js b/agents/instagram-agent/probe-unlinked.js
new file mode 100644
index 0000000..3acff03
--- /dev/null
+++ b/agents/instagram-agent/probe-unlinked.js
@@ -0,0 +1,42 @@
+#!/usr/bin/env node
+/* Probe the link-state of the owned-but-unenrolled accounts found in email.
+ * Reuses build-registry's token resolver; token stays in memory, never printed. */
+const fs = require('fs');
+const path = require('path');
+const os = require('os');
+const GRAPH = process.env.IG_GRAPH_HOST || 'https://graph.facebook.com';
+const V = process.env.IG_GRAPH_VERSION || 'v21.0';
+
+function token() {
+ if (process.env.META_ACCESS_TOKEN) return process.env.META_ACCESS_TOKEN;
+ try {
+ const p = path.join(os.homedir(), 'Projects/secrets-manager/.env');
+ const line = fs.readFileSync(p, 'utf8').split('\n').find((l) => l.startsWith('META_ACCESS_TOKEN='));
+ if (line) return line.slice('META_ACCESS_TOKEN='.length).trim();
+ } catch {}
+ return '';
+}
+
+const NEEDLES = ['beverly', 'filthy', 'protest', 'paperhanger', 'paper hanger', 'designers chat', 'designerschat', 'hospitality fabric', 'dsgn'];
+
+(async () => {
+ const t = token();
+ if (!t) { console.error('no token'); process.exit(1); }
+ let url = `${GRAPH}/${V}/me/accounts?fields=name,instagram_business_account{username},connected_instagram_account{username}&limit=100&access_token=${encodeURIComponent(t)}`;
+ const pages = [];
+ while (url) {
+ const r = await fetch(url); const j = await r.json();
+ if (j.error) { console.error('ERR', j.error.message); process.exit(1); }
+ pages.push(...(j.data || []));
+ url = j.paging && j.paging.next ? j.paging.next : null;
+ }
+ console.log('pages on token:', pages.length);
+ const hit = pages.filter((p) => NEEDLES.some((n) => (p.name || '').toLowerCase().includes(n)));
+ console.log('=== matching Pages ===');
+ for (const p of hit) {
+ const ig = p.instagram_business_account && p.instagram_business_account.username;
+ const ci = p.connected_instagram_account && p.connected_instagram_account.username;
+ console.log(`- "${p.name}" | ig_business=${ig || '—'} | connected=${ci || '—'}`);
+ }
+ if (!hit.length) console.log('(no Page names match — these accounts have NO Page on this token)');
+})();
← 2da8980 auto-data-snapshot: 2026-08-12T10:26:55 (1 data files) — age
·
back to Norma
·
IG runbook: add Phase 0b — link the 5 email-discovered owned 970272b →