Architecture
⚠️ This page = LIVE STATUS, not DOCTRINE
The content system doctrine (rules, processes, patterns, specs, guardrails, owners&apps, n8n error notif) now lives on Notion:
→ 🎬 EO Content System — doctrine (Notion HQ sub-page)
This tools-side page holds the live status per content type (A map/types/tree/waves, B current databases, C status per type, D prompt guards + coverage map pointer, E inventories, F n8n error state, G/H/I flow diagrams with dated change banners, J maintenance). One page = one role. Anti-drift guaranteed.
What this page is for — for AL and Claude.
Dynamic snapshot of the state of EO content production pipelines…
Dynamic snapshot of the state of EO content production pipelines. Read by Claude to understand where each content type stands (carousels v1 done, shorts v1 done, newsletter todo, etc.), the real Notion tree as of today, dated prompt results, and n8n implementation state per workflow. For the rules, open the Notion doctrine above (🎬 EO Content System).
Table of contents
- A — Content waves flow (cross-content tree)
- B · Notion content databases (one base per platform)
- C · Status per content type (C.1-C.8)
- D · Prompt coverage: guards + coverage map
- E · Useful pointers (frontend + workflows + Notion HQ)
- F · n8n error notification state
- G · Carousel production flow (visual)
- H · Shorts production flow (visual)
- I · Quote production flow (visual)
- J · Maintenance
A · Content system: map, types, pages, waves · rebuilt 2026-07-28
OPEN IN OWN WINDOW (right-click → new window) → A.1 TRANSFORMATION MAP · A.2 CONTENT TYPES · A.3 NOTION TREE · A.3 MASTER TABLE · A.4 WAVES & TRIGGERS
Every Notion link below carries a chip with the page's real last edit date, read from the Notion API by the eo…
Every Notion link below carries a chip with the page's real last edit date, read from the Notion API by the eo-backup-worker cron (daily 10:00 UTC) and stored in D1. A gold chip = the page changed after you last flipped its Up to date switch. A red chip = the date you hand-wrote in the Notion title is older than the real last edit, so the title is lying. Nothing here is typed by hand.
A.0 · The prompts launchable as soon as the long form script exists· added 2026-08-04
Short form here. The full numbered run sheet of every prompt, gate by gate, lives on its card in A.3b, the master table. Two prompts are deliberately absent from this list because they cannot run at script time: Video Edit Pass needs your preliminary montage, and Shorts Auto-Publisher needs the exported files. Both are documented in A.3b.
Title only · Chapter Suggestions · Description YouTube v4.2
IN: the grammar 5 step title process, the video page, the script, the Video duration property.
STEPS: read the 5 step process, read the script and the duration, produce 1 conviction title (43 chars, 10 words, extreme opinion).
OUT: one validated title in the conversation. The page never says where to write it, so you carry it over by hand. Gap kept as is, not invented.
Chapter Suggestions v1.0
IN: the video page carrying the cleaned script (no script means STOP), Description Grammar v4.1 sections 2 and 2bis, Alex Tone.
STEPS: read the script in order, find the natural breaks, propose 5 to 9 chapters, quote each opening sentence verbatim, position it as a percentage, write a working title per chapter, grep your own output for MM:SS, insert the toggle after Script Cleaned.
OUT: one toggle Chapter Suggestions [date] in the video page, zero timestamp anywhere, plus a warning when two anchors sit under 3 percent apart. You keep, merge or drop, then place the FCPX markers.
Description v4.2
IN: Description Grammar sections 1 to 5, SEO Appendix bundles A to D, the validated title, the full script, the existing timestamps, and your current YT Studio tags if the video is live.
STEPS: generate the hook, build the timestamps (00:00 first, positions locked when the video is already published), pick 3 hashtags and 8 to 10 tags by explicit cascade, produce the paste ready blocks, insert them before the Script toggle.
OUT: one toggle YouTube Description Run [date] with 6 children, a comma separated tag list and a full description block. Nothing else in the page is touched. You paste both into Studio.
Long Form Thumbnail · TT/IG/FB Long Form Thumbnail
IN: the Thumbnail x Title x IN-BETWEEN Grammar, machine tagged blocks only, plus the video page and its script. The script alone is the source: any title already on the page is ignored and no external search is allowed.
STEPS: central concept → register (3) → family and sub-type → Pre and Post prompts → 5 layer test per prompt → 5 title variants → recommendation → 12 point IN-BETWEEN checklist → GO or NO-GO.
OUT: one parent toggle above the Script toggle with 3 children, the image prompts in English ready to paste, and the yellow items you have to arbitrate (legibility at 120x68 px, video duration). You run the image generation.
TT/IG/FB Long Form Thumbnail
IN: the Thumbnail Long-Form TT IG FB Grammar holding the TYPE 6 template, the video page, and the video number read from the page title.
STEPS: fetch the page, extract N, read the script, fill HEADLINE, SCENE_BRIEF, FRAMING_DESCRIPTION and BACKGROUND_BRIEF, write the toggle under the script toggle, reply with a recap.
OUT: one toggle Vn_TT-IG-FB_Thumbnail with the prompt in a code block. No photo gate here: you attach your photo yourself in the image tool.
Text Displays + Diagrams v1.1 · Suno Background Music Run
IN: Video Diagrams Grammar v2.0, plus /backdata/display-doctrine-doc which is mandatory as soon as a diagram is involved, plus your photo of the diagram which IS the layout, plus your answer on which colors go where.
STEPS: fetch the grammar, fetch the doctrine page if a diagram is involved, ask the video number and the need, take the photo as the layout, ask the colors, copy the templates into the video own visuals folder, fill the copies, render to h264, send a screenshot.
OUT: filled copies and rendered .mov in videos/long-form/ongoing/V{N}/visuals/. Masters stay pristine. No Notion write, no upload.
Suno Background Music Run v1.0
IN: the Suno grammar (prompt bank, mapping table, dB mix rule), the background-music bank folder checked writable, and your answer on which Suno account.
STEPS: phase 0 invariants executed not declared, take the family (default B), display the bank prompt verbatim for you to paste, HARD STOP while you listen and name the keepers, store the mp3 in your category folder under the canonical name, add the mapping rows in the same turn, run the dash and folder gates.
OUT: new mp3 in editing-bank/background-music/, new rows in the grammar mapping table, Finder opened. No PostFast, no posting. You pick the tracks, always.
Six-Platform Long-Form Captions v1.0
STEPS: read the script, take the ledger allocation, identify the central claim, the strongest source faithful hook, the dominant mode and the conclusion the video earns, pick 3 surgical hashtags from the bundles, write the 6 captions to their exact length bands, self check (lengths, source fidelity, zero dash, zero forbidden CTA, X and Threads genuinely distinct), then write into the source page.
OUT: one parent toggle Six-Platform Long-Form Captions [date] with exactly 6 child toggles, paste ready text only, no counts and no labels. Zero planner row, zero file, zero schedule, zero upload: out of scope by design. You paste and publish yourself.
Duration rule 05/08: if the video exceeds the platform limit (Threads 5 min, LinkedIn about 15 min), the post goes out as NATIVE TEXT ONLY, no video and no link.
Quote Extraction then Quote
IN: the source long form links (default, the last 7 not yet extracted), Quote Grammar sections A and C, the existing Backup Base rows and Planner titles for dedup, and the Insight Ledger.
STEPS: phase 0 invariants, ledger allocation written before generating, read each script, extract 5 to 10 verbatim punchlines (strongest one liner is the hard minimum), assign one Kind of 7, dedup, working title without Qxx, CHECKPOINT you validate, then pose the rows.
OUT: rows in Quotes EO Backup Base, Validation No, Status Not started, no date and no image key. You do the clean up and the Qxx numbering.
Quote
IN: 7 invariants each run as a real test call, the Quote Content Planner (all rows, Validation Yes and Status Not started), the live slot, the safe zone re-fetched at every Canva clone, the Canva brand template, the PostFast API, the X and Threads bases.
STEPS: invariants, ledger, query, live slot, Multi-pages derivation, weight and interleaving, new Qxx and dates, CHECKPOINT on the order, 3 platform captions with the first line check, Canva clone and export, pixel check, CHECKPOINT on the PNGs, PostFast upload, 2 satellites X and Threads, verify, then approvals on your trigger.
OUT: PNG 1080x1350 in content/quotes/2026/, planner rows carrying Qxx, date, 3 captions, image key and Status In progress, 2 satellite rows per quote. Visuals publish TT/IG/FB only since 04/08, X and Threads run as satellites.
Multi-Platform Generation v2.4 (LK/X/TH)
STEPS: phase 0 fetch 6 invariants → this prompt CREATES the Insight Ledger for the video, the complete 15 to 25 insight list, and allocates per platform BEFORE dispatch → 1 analysis (5 angles, 5 distinct modes, one voice each, quotation map, 15 hooks) → 2 dispatch 3 parallel sub-agents → 3 global self checks (first line collision, dead hooks, dashes, vocabulary, mode diversity) → 4 AL CHECKPOINT, dry run by default → 5 rows posed Validation=No → 6 report.
OUT: about 30 to 36 assets, LinkedIn 5 with their comment reply, X 16 to 22, Threads 5, all Status Not started, Validation No, no date. Plus the video Insight Ledger, created here. You validate then flip them to published.
Contradiction still on the page: the body writes into the separate Backup Bases while the 07/08 decision retired those bases in favour of Status=Backup inside the published planners.
Weekly Newsletter · Substack Essay · Pinterest Generation v3.0
IN: one long form page and its script, its only input, plus the Newsletter Grammar, Alex Tone, the multi-platform sections 9 to 11, the Notes of the previous rows for the 4 send cycle position, the live send slot, and the ledger.
STEPS: phase 0 invariants and the grammar draft gate, ledger, read the transcript, one dominant angle, one Mode and one Audience, 3 subject candidates, write hook plus 400 to 700 word body plus video pivot plus reply ask, 9 self checks, create the row, set the date to the next live slot.
OUT: exactly 1 row in Newsletter Per Long-Form Stack, Validation=No, the email in Description and in a body toggle. Nothing is sent. Once you flip Validation to Yes, the dispatch worker (daily cron 06:30 UTC) schedules the broadcast at the row date, signature auto since 04/08.
Substack Essay from Long-Form v1.0
IN: one source, long form clean script or Improvised, the Substack Grammar fetched live, the memory rules, the References bank, the ledger when the source is a video.
STEPS: fetch the grammar, ledger, read the source, ONE central angle in depth, Mode and Audience, size L or M, blocking gate: propose the historical or philosophical references and WAIT for your validation, file them, then write opening, escalation, single pivot, synthesis, close, never a CTA, then self check.
OUT: 1 row in the Substack Pipeline, a direct queue with no backup and no Validation field, the full essay in the row body. Publication stays manual. No scheduling guard is described on that page, so the date is yours.
Pinterest Generation v3.0
IN: your input block (video, pin type, destination, go. slug, count, dry run), the Pinterest Grammar in full, the live pinterest planning anchor and weekly schedule re-fetched at the moment of use, the PostFast account and board ids resolved live, the HTML pin master.
STEPS: scope line first → 0 resolve the source and announce it out loud → 0.1 to 0.9 the nine invariants → 1 script read and N distinct angles → 2 AL text GATE (angles and punchlines) → 3 headless HTML render, never an image tool → 4 metadata with the live field limits → 5 self checks → 6 AL visual GATE → 7 scheduling → 9 planner rows → 10 n8n webhook.
OUT: PNG pins in content/pinterest/[batch-slug]/, one planner row per pin with the image keys, posts left in PENDING_APPROVAL. While the weekly Pinterest line carries ON HOLD, rows are written WITHOUT a date. You approve every pin in PostFast before anything publishes.
Carousel Long Form · Carousel Substack (both on every LF, doctrine 04/08)
STEPS: invariants → ledger allocation → angular analysis → visceral gems → number of carousels → slicing → composition by ARC (Section J, 4 tests) → guardrails → 3 distinct captions TT/IG/FB → 3 native satellite posts → 10 slide image prompts plus 1 landscape cover → first line self check → scheduling guard → 4 Notion rows → AL GATE, go visuels → handover to the Carousel Production Pipeline phases 2 to 8.
OUT: per carousel, 4 rows, the Carousels Content Planner main row plus the LinkedIn, X and Threads Repurposed satellites. The carousel and its 3 satellites count as ONE ledger allocation unit. Long Form publishes on the week slot with the Posting Date on the MAIN ROW; Substack goes to Backup with no date and you arm it.
Contradictions still on both pages: the Towards value, the content-system line to read and the cover method are stated twice and differently. The dated 04/08 corrections toggle is the recent one.
Off the list: SHORTS, n-2 cycle, Titles & Captions v1.0 orchestrator
STEPS: 0 fetch invariants → ledger allocation → 1 A/B titles, rotating patterns → 2 four caption blocks YT/TT/IG/FB per the Voice Matrix → 3 self checks printed, including the first line rule under 25 characters on every pair → 4 AL GATE 1 (A/B table, nothing written before your answer) → 5 double write on the EXISTING rows, properties plus body, previous scripts saved under their own heading → 6 calls 5-Batch Thumbnails (photo gate, deterministic position draw, tbprompt plus body) → 7 AL GATE 2 (covers) → 8 calls Auto-Publisher (upload, keys, next free slot dates re-fetched, Status Ready, n8n triggered) → 9 report.
OUT: EXISTING shorts rows updated, never a new one, with the title and the 4 platform blocks in both the property and the body. This prompt sets no date, no Status, no media key. The dates, the keys and the publication come from the Auto-Publisher in phase 8, TikTok drafts stay manual.
Two more shorts prompts exist and cannot run at script time, so they sit only in A.3b: Video Edit Pass v1.0 (08/08) which runs on your preliminary montage and always writes a separate -edit-v1.mp4 next to the original, and Shorts Auto-Publisher itself.
A.1 · Content transformation map: what becomes what· last updated 2026-09-22
A.2 · Content types: readiness, full circuit, derivation · merged 2026-07-28
videos/long-form/ongoing/V{N}/videos/short-form/ongoing/ + videos/stock/short-form/content/quotes/2026/content/lifestyle/editing-bank/background-music/v2-canonical/ + videos/V{N}-slug/visuals/EO/ = iCloud Documents / DD / Elite Outsiders| Content type | Planner | Backup base | Finder folder | Read by | Where the copy-paste text lives |
|---|---|---|---|---|---|
| Long form YouTube | YouTube Long Form Content Planner [EO] 25/07/2026update 29 rows on 29/07 | none | EO/videos/long-form/ ongoing V8 and V9, posted V1 to V7 + Archives, standby, 192 real files in posted | manual human + Claude | Inside the planner ROW PAGE, not in a column: toggles YouTube Description Run and Full Transcript, then the heading Multi-Platform Content with one toggle per platform, LinkedIn to Instagram. read live on the row "I Chose Trauma Over My Family", 29/07 |
| Pinterest Content Planner [EO] 0 rows | none | EO/content/pinterest/ exists but empty, 0 files · masters and previews live in the tools repo, public/assets/content-system/pinterest/{masters,previews} | n8n EO Pinterest Auto-Publisher inactive | Planner columns Pin Title, Description, Alt Text, Angle. columns exist, 0 rows, so nothing to copy today | |
| Substack | Substack Pipeline 24 rows | none | none nothing under EO/content/; EO/visuals/profile-pics-banners/Substack is brand identity, not content | manual | The full essay sits in the body of the planner row page. Short fields: columns Description, Platform Subtleties, Native posts LI/X/Threads. not every row carries a body yet |
| Carousels | Carousels Content Planner[EO] 16/05/2026update 2 rows | Carousels EO - Backup Base stub page, never converted to a base, 0 rows | EO/content/carousels/ carousel1 23 files, carousel2 12 finals plus its _sources folder | n8n EO Carousels Auto-Publisher active | Planner column Description for the post caption, column Native posts LI/X/Threads for the satellites. Slide text is baked into the PNG, not stored as text. |
| Shorts | Shorts EO-Posting Planning 10 rows | Shorts EO - Backup Base 11 rows | EO/videos/short-form/ ongoing V5Sfs to V8Sfs, posted 80 real files | n8n EO Shorts Auto-Publisher active | Planner column Description, one block per platform prefixed YT: / TT: / IG: / FB:. Thumbnail brief in column tbprompt, script in the row page toggle Script. |
| Quotes | Quote Content Planner [EO] 16/05/2026 43 rows | Quotes EO - Backup Base inline base Quote Content Planner [EO] - 16/05/2026 (1), 41 rows | EO/content/quotes/2026/ 21 PNG at root + _archive/wave1-deprecated, 23 files in all | n8n EO Quotes Weekly active | Planner column Caption. The quote itself is baked into the PNG; the Caption column is the post text. |
| Lifestyle | Lifestyle Content Planner [EO] 16/05/2026 63 rows | Lifestyle EO - Backup Base stub page, never converted to a base, 0 rows | EO/content/lifestyle/ DAD 22, doggy 9, sunset 26, work 11, plus _trash · only type with a descriptions file, lifestyle-descriptions.txt regenerated 29/07/2026 | n8n EO Lifestyle Auto-Publisher inactive | Planner column Caption, shot brief in column Visual Description. Same captions also readable offline in the Finder file lifestyle-descriptions.txt. |
| Newsletter | Weekly Newsletter Per Long-Form Stack [EO] 3 rows on 29/07 | none | none no heavy media | manual sent through Kit | Planner columns Subject, Preview Text and Description (the whole body). only the produced row, Newsletter W31, also repeats the paste-ready blocks in its page under a SCHEDULED IN KIT callout; the other 2 rows have an empty page |
| Suno background music | none only a grammar and a prompt | none | EO/editing-bank/background-music/ 44 files, 7 subfolders named by AL: almost happy, chill (top), fine, heavy, soft (top), topx1, topx3 · confirmed as the canonical bank inside the grammar itself | manual | No planner and no base: the paste-ready Suno prompt lives in the Prompt Suno Background Music Run page. Output is audio, no post text. |
| YouTube chapters | none only the prompt Chapter Suggestions [EO]; declared storage is the Notion page of the video itself, Gling_Edits board step | none | none | manual | In the row page of the long form planner, same place as the description. No column and no single page lists them all. |
| Textual LinkedIn | LinkedIn Repurposed Content Planner [EO] 16/05/2026 7 rows | LinkedIn Backup Base [EO] / 24-05-2026 0 rows | none text only | manual | Planner column Post Content. The backup base has the same column but 0 rows, so today the planner is the only place. |
| Textual X | X Repurposed Content Planner [EO] 16/05/2026 36 rows | X Backup Base [EO] / 24-05-2026 0 rows | none text only | manual | Planner column Post Content. Same text as Threads by design. |
| Textual Threads | Threads Repurposed Content Planner [EO] 22/05/2026 20 rows | Threads Backup Base [EO] / 24-05-2026 0 rows | none text only | manual | Planner column Post Content. Same text as X by design. |
12 open anomalies, re-checked live 29/07/2026 (backup bases, naming traps, two video trees) plus 4 calls for AL
- Quotes backup base: inline copy of the planner, 41 rows against 43, can diverge.
- Carousels backup base: still a stub page, holds Q33 Sovereign voids in free blocks.
- Lifestyle backup base: still a stub page, convert or drop is grammar item 11.6.
- LinkedIn, X and Threads backup bases still hold 0 rows since 24/05/2026.
- Long form YouTube has no backup base although it sources the whole repurposing chain.
- HUB Digest still points Shorts at container
45328224instead of the base31a28224.
- Two video trees:
EO/videos/is canonical,EO/content/videos/is legacy but still holds masters. - Descriptions file sitting next to its batch: 1 content type of 13, Lifestyle.
- Pinterest folder created 28/07 is still empty, planner at 0 rows, workflow inactive.
- Newsletter: 2 bases alive, the live one 3 rows, pipeline-1 1 row staged in TRASH.
- Suno music and YouTube chapters have a grammar and a prompt but no tracking object.
- Lifestyle is the fullest planner, 63 rows, yet its publisher stays inactive.
- HUB Digest now reads
b90924a6as Substack Pipeline, the invented carousels planner is gone. - [DELETE]LinkedIn-X-Threads Repurposed Backup (
36328224...431323fc) is now in the Notion bin.
- Quotes: keep the inline copy, or build a real backup base with its own schema.
- Newsletter: confirm pipeline-1 goes to the bin, so only one base remains.
EO/content/videos/: confirm it is legacy before merging intoEO/videos/.- Carousels and Lifestyle: convert the stubs, or drop them and accept no backup.
DOES IT FIT 9:16 · MEASURED PER FAMILY, ONE REAL FILE EACH · 30/07/2026
| # | Family | Fits 9:16 · measured | Font spec | Template file | Example · large → small |
|---|---|---|---|---|---|
| 1 | Plan announcement | Yesbottom-anchored 30/07 (was left-anchored + vertically centered) · L 99–101% (554–612px, right at the edge) · M 62–76% (378–460px) · S 49–58% (297–351px) · last line's bottom lands exactly on y=680 (63% height) at every tier — the gold dashed chin line on content-system's Subtitles safe-zone overlay | Large 88px + 52px index · Medium 60px + 36px · Small 40px + 24px | v2-canonical/plan-announcement.html |
|
| 2 | Callout | NoL 186–228% (1133–1383px) · M 127–155% (773–943px) · S fits at 78–95% (474–578px) | Large 110px · Medium 75px · Small 46px | v2-canonical/td-callout.html |
|
| 3 | Punch 1 word | NoL 312% (1900px, clipped by the 1920px canvas) · M 215% (1306px) · S fits at 98% (594px) | Large 320px · Medium 220px · Small 100px | v2-canonical/td-punch-one-word.html |
|
| 4 | Rule / principe | NoL ≥316% (1920px, fills the canvas) · M 216% (1316px) · S fits at 95% (578px) | Large 120px · Medium 82px · Small 36px | v2-canonical/td-rule.html |
|
| 5 | Chapter title | NoL 125% (763px) · M and S fit: M 86% (524px) · S 59% (358px) | Large 160px · Medium 110px · Small 75px | v2-canonical/td-chapter-title.html |
|
| 6 | Stat / number | MarginalL: number 105% (640px), context 129% (784px) · M: number 72% (436px), context 88% (534px) · S fits both: number 49% (296px), context 59% (356px) | Large 420px + 44px context · Medium 286px + 30px · Small 194px + 20px | v2-canonical/td-stat-number.html |
|
HOW TO READ THE GRID PRODUCE, STORE, PLAN, PUBLISH per row, and the one human gate that arms a row
One row per content type, read left to right: PRODUCE → STORE (backup base in Notion, or Finder for heavy media) → PLAN (AL's manual move into a planner, the human filter, on purpose) → PUBLISH. The Ready pill says whether the type can run today (hover it for the exact reason). The second line of each row carries the derivation model (what it comes from, what it spawns) and your own notes.
Bases, who feeds whom (the rule behind every row, written down 29/07/2026): prompts pose rows into the bases with Validation = No or Not started, never armed. AL validates or arms (Validation = Yes, Status = In progress or Ready): that flip is the ONLY human gate. Robots read only armed rows, publish at the row's Posting Date, and write back Done + Posted At. A backup base is the reserve and safety copy, a planner is the execution queue a robot actually reads. The exact pairing differs per type and lives in each grammar; this page only shows where each one sits.
This block replaces three older ones, merged on 2026-07-28 with nothing dropped: Content types (added 28/07) +…
This block replaces three older ones, merged on 2026-07-28 with nothing dropped: Content types (added 28/07) + Storage & flow map (added 26/07) + Derivation map (added 22/07). The derivation columns fuse two views in one place: the per-type nature (written net-new vs inherited from another type) and the graph role from the Notion planners' Kind convention (From = source content type, Towards = what it spawns). Detailed per-format flows: G Carousel · H Shorts · I Quote.
Newsletter signup
Manifesto purchase
Booking
Login
Only consented people.
Send slot: Saturday 2:00 PM Vietnam (permanent; Sunday 09/08 was a one-off exception).
AUTOMATIC OUTGOING EMAILS 4 emails go to subscribers, 13 robot reports go to AL, verified 29/07/2026
videos/long-form/ongoing/V{N}/01-rushes · 02-audio · 03-gling · visuals · final · posted/ · V{N} auto-named hourlyno Notion backup base: scripts live in Scripts-DTBvideos/short-form/ongoing/ + videos/stock/short-form/heavy media, surplus goes to stock · per video: 03-gling (intermediate) + final (publication)NOTION Shorts Content Planner page (wrapper, being unified by AL)content/quotes/2026/ (Qxx-title.png)9078c89a-5334-43fa-b501-7ac535d31c0dnewsletter-dispatch robotsend day: Saturday 2:00 PM Vietnam, permanent slot (AL decision 09/08/2026 · W31 went out Saturday 01/08 · W32 went out Sunday 09/08 as a one-off exception)how the robot runs, and what it replaced
eo-backup-worker, daily cron 06:30 UTC: reads the Notion base, schedules every row with Validation = Yes and an empty Kit Broadcast ID at least 1h in the future, writes the broadcast id back (idempotent), mails AL the exact subject and timebuilt 28/07/2026 · first newsletter scheduled Saturday 01/08/2026 (AL moved it from Sunday the same evening, Kit broadcast re-dated and verified) · replaces the older line "n8n auto-send via Kit, Saturday 14:00 Paris": no such n8n send ever ran, the base was read by nobodycontent/lifestyle/a few in advance · to confirm: 8-weeks-in-advance folderNOTION to confirmv2-canonical/ masters (20 HTML)outputs per video: videos/V{N}-slug/visuals/editing-bank/background-music/ (categories: topx, chill, heavy...)Column 3 is always a MANUAL AL move: nothing reaches a planner without the human filter…
Column 3 is always a MANUAL AL move: nothing reaches a planner without the human filter. 1 Carousels OR rule: 1 carousel per Substack article · 1-3 carousels per Long-Form video. 2 Shorts: source clips are LF-derived (Gling) but AL writes a script per short; legacy concept-shorts-from-scratch (face-cam / slideshow / green-screen / POV) are a secondary path, not the v1 pipeline. 3 Quote OR rule: default = LF script (auto cron Monday 04:30 UTC); Scratch = a validated quote AL inserts manually into the backup base.
Towards only, no FromFrom and TowardsFrom only, spawns nothingThis table is the per-TYPE model. The per-PIECE truth (which exact Long-Form spawned which exact carousel) lives in each planner's From / Towards columns, auto-filled by the generating Prompt (see content production doctrine §14).
BOARD ↔ FINDER LINKAGE (added 2026-07-26) 4 rules: gold FINDER button on every Finder-touching step, 6 wired folder families, hourly folder auto-naming, full tree in Notion
1. Every Finder-touching step of the LF board carries a gold FINDER button: one left-click opens the exact folder via theeofinder:// URL scheme (local applet ~/Applications/EOFinder.app).2. Wired folders: LF_EDIT steps →
videos/long-form/ongoing/ · exports → same · shorts edit/store → videos/short-form/ongoing/ + videos/stock/short-form/ · lifestyle → content/lifestyle/ · thumbnails export → visuals/thumbnails/ · quotes PNG review → content/quotes/2026/.3. Folder naming is AUTOMATED: the LaunchAgent
com.eo.v-folder-sync (hourly, local) reads the YouTube LF Content Planner and keeps ongoing/ folders named V{N} - {title} for every Ongoing/Planned row: creates from _template/ when missing, renames when the title changes, never deletes. Log: ~/Library/Logs/eo-v-folder-sync.log.4. Full tree + per-video convention: Finder EO — Detailed tree (Notion).
A.3 · Notion pages: the real tree, then the master table · tree re-fetched live 2026-07-29 · run sheets added 2026-08-09
2026-08-08: this tree, its master table and its anomaly list are the dated 29/07 snapshot, kept as-is. Since then the separate LK / X / Threads Backup Bases were deleted (backup content = Status=Backup rows inside each Repurposed planner) and the live database list is maintained in section B.
Every prompt card below now carries a closed run sheet, opened with the line What it does…
Every prompt card below now carries a closed run sheet, opened with the line What it does. Each one gives three things read from the live Notion page, never guessed: INPUTS, what the prompt goes and fetches and where, ACTIONS, the numbered chronological list of what it actually does including every human gate, and OUTPUTS, what exists once the run is over, which rows in which planner with which property values, which files, which posts, and what is left for you to validate. Where a Notion page contradicts itself, the contradiction is written down in the run sheet rather than silently resolved.
The Insight Ledger is transversal…
The Insight Ledger is transversal. It is not a prompt and it governs all derivative formats, not only LinkedIn, X and Threads: shorts, quotes, both carousels, the newsletter, the Substack essay, the 6 full video captions, LinkedIn, X and Threads. It is created automatically by the first prompt of the cycle that exploits the video, and you have nothing to launch. The reason it reads as a LinkedIn, X and Threads thing is a board artefact: the step Create Insight Ledger was placed inside the phase named [LK,X,TH} because the first consuming prompt lives in that phase. The step was not moved, so no dependency broke, but its label was made explicit on 09/08/2026. Full doctrine in the Insight Ledger EO card of the TRANSVERSE lane below.
Flattened tree, re-fetched from the Notion API on 29/07/2026…
Flattened tree, re-fetched from the Notion API on 29/07/2026. Notion column containers are not shown: they carry no name and no content, so their children hang directly under the section above them. Section names in white caps are the real Notion headings of the hub. Right-aligned chip on every prompt line = recommended Claude runtime (model + reasoning effort) to run it with. Colors = same code as the master table below: prompts · grammars · planners · backup bases · DBs · doctrine.
8 changes between the 26/07 tree and this 29/07 re-fetch
- The 10 untitled column wrappers are gone from Notion itself, the hub now runs on named sections.
- Scripts-DTB is in the Notion bin: long form scripts live in past-scripts and in each planner row.
- Multi-Platform grammars v1.3 and v1.4 and prompts v1.3 and v2.0 binned, only v1.5 and v2.2 remain.
- Newsletter pipeline-1 moved into the TRASH page, pending AL confirmation.
- 4 aggregator pages created: HUB Digest, Decisions Log, Positioning & funnel, System logic & maps.
- New production pages: Prompt Substack Essay v1.0, Suno grammar and prompt, Prompt Chapter Suggestions, Shorts technical specs, Stories & Highlights v2, Feedbacks & RETEX.
- Pinterest grammar v1.7 to v1.8, Pinterest prompt v2.9 to v3.0.
- Still open: the root Content Planners section is a table of links, not the physical home of the planners.
A.3b · Prompts & grammars master table · moved here 2026-07-26
HOW TO READ THIS TABLE lanes, WIRED dot, Ready pill scores the page not the type, notes are yours
Every active production page of the EO Notion: one lane per stage, one card per page. ● WIRED = the page is attached to a step of the LF board right now (36 of 72); ○ not wired = it exists but no step points to it. The Ready pill answers one question: can this prompt + grammar pair run today? Same code as A.2: 3 runnable, 2 one known hole, 1 not runnable yet, · not a pair (base, planner, DB, doctrine). Hover any pill for the exact reason. This Ready pill scores the PAGE (is it attached to a step, does its family have a hole). The Ready pill in A.2 scores the CONTENT TYPE (do the two Notion pages exist, is publishing wired or covered by a documented manual kit). A page can sit at 1 here while its type sits at 2 above, without contradiction. Obsolete pages are excluded (archived in Notion, never deleted). Notes are yours: click NOTE on a card and type, it saves on its own.
COVERAGE PROOF 72 pages in 11 lanes, 36 wired, checked against the two live board keys in D1
Coverage checked 29/07/2026 against the two live board keys in D1 (cross_platform_content_process_v2 and gantt_long_v2): this table covers 77 pages in 11 lanes, 39 of them wired to a step (72 and 36 before the 09/08/2026 pass). Every Notion page carried by a board step now has a card, none is counted nowhere. Nine cards were added that day: the new pinterest lane (grammar, prompt, planner), the chapters prompt and the background music prompt in edit, the Carousels content hub in carousel, Multi-Platform Grammar v1.5 merged in textual, and the newsletter pair in substack. The 28/07 triage page sitting at the Elite-Outsiders root is deliberately left out: this table lists active production pages, archived and triage zones are excluded by design. 09/08/2026 pass: five cards added, four live prompts that existed and were counted nowhere (Six-Platform Long-Form Captions 02/08, Shorts Titles and Captions 04/08, Substack Essay from Long-Form 29/07, Video Edit Pass 08/08) plus the Insight Ledger doctrine (08/08). Same maintenance lesson as the coverage map: a page that falls between two lanes stays invisible until it gets its own card.
What it does · inputs, steps, outputs
- Video Diagrams Grammar v2.0 in Notion: closed palette, CTA and URL menu, text display families.
- /backdata/display-doctrine-doc, mandatory and not optional as soon as a DIAGRAM is involved: render pipeline, measurement discipline, choreography, square and band adaptation.
- AL, asked directly: video number or slug, and what he needs (diagram photo, which text displays, CTA or URL).
- AL photo of the diagram, which IS the layout, plus his answer on which colors go where.
- Template folders visuals/reference-html/v2-canonical/ (displays, CTAs, URLs) and v2-diagrams/ (diagrams), render script _render/render-html-to-mov.js.
- Fetch Video Diagrams Grammar v2.0.
- If a diagram is involved, also fetch the display doctrine backdata page.
- Ask AL the video number or slug and exactly what he needs.
- For a diagram, take AL photo as the layout, no reinterpretation.
- Ask AL which colors go where, every single time.
- Copy the matching templates into that video own visuals/ subfolder. Templates stay pristine.
- Fill the copies, never the masters.
- Render each copy to h264 with render-html-to-mov.js, ProRes only on an explicit need.
- Send AL a screenshot of the result.
- Generate nothing AL did not ask for.
- Filled HTML copies plus rendered .mov files in videos/long-form/ongoing/V{N}/visuals/.
- Source templates untouched in v2-canonical/ and v2-diagrams/.
- A screenshot sent to AL.
- No Notion row, no planner write, no upload.
- AL validates visually and asks for the fix pass if needed.
What it does · inputs, steps, outputs
- The .fcpxml exported from Gling, supplied by AL.
- The exact name and full path of the 4K master, for example video_4K.mov in /Users/alexandre/Downloads/.
- Inside the file, the asset and media tags carrying the low resolution file name.
- No Notion page, no planner, no API. This one is a pure file rewrite.
- Open the .fcpxml.
- Find every reference to the low resolution file in the asset and media tags.
- Replace the file name with the 4K file name.
- Replace the src path with the file:/// path of the 4K master.
- Replace the resolution, 854x480 or 1280x720, with 3840x2160.
- Touch nothing else: the timecodes are the Gling cut points and never move.
- Never alter the XML structure, only paths, names and resolution.
- Warn AL when Gling applied zooms, their values are calibrated for the low resolution.
- Flag it before modifying when the file references several sources, for example a split video.
- Return the modified .fcpxml.
- One modified .fcpxml, importable straight into Final Cut, Gling cuts intact in 4K.
- Warnings on zooms or on multiple referenced sources.
- Nothing written to Notion, no planner row, no upload.
- AL imports in FCPX, selects all clips and switches Spatial Conform from Fit to None.
What it does · inputs, steps, outputs
- The RAW Gling transcript, pasted in full.
- Video title, duration, and the Notion link of the video page.
- No grammar page is fetched: the cleaning rules live inside the prompt itself.
- Take the raw transcript plus title, duration and Notion link.
- Strip stutters and restarts.
- Strip the non-meaningful oral fillers.
- Keep the INTENTIONAL repetitions: the test is whether they add rhythm or force.
- Keep the meaningful pauses marked by periods or line breaks.
- Fix the obvious Gling transcription errors, keeping the most probable word in AL context.
- Never reformulate and never paraphrase. AL exact words stay.
- Never reorder sentences: the oral sequentiality is preserved.
- Keep the spoken forms, the direct engagement expressions and the swear words that carry signature.
- Keep the EO concept names as they are, with no added explanation.
- Check the two failure modes: over-cleaning reads like a written article, under-cleaning leaves fillers on every sentence.
- Deliver the clean script as plain text, never inside a code block.
- Write BOTH versions into the video planner page, under two toggles named Script Raw and Script Cleaned {date}.
- Close the cleaned toggle with the provenance sentence naming the raw toggle as the untouched source.
- Report the word count before, after, and the reduction percentage.
- Ping AL that both toggles are saved and the downstream pipelines can run.
- Two toggles in the video page: Script Raw, verbatim and never deleted, and Script Cleaned {date}.
- The cleaned script becomes the canonical input of carousels, multi-platform captions, shorts and the YouTube description.
- The raw version keeps feeding quote extraction and the newsletter.
- A word count statistic and a ping to AL.
- Named next step: run Chapter Suggestions v1.0, zero timestamps, AL places the markers in FCPX.
What it does · inputs, steps, outputs
- Notion link of the video page, which must already carry the cleaned Gling transcript. No script means STOP and ask AL, never work from the title alone.
- Description Grammar v4.1, section 2 (label prohibitions) and section 2bis (the 4 step process).
- Alex Tone.
- Board context: LF board steps Gling_Edits and Editing cuts and structure.
- Phase 0, fetch the video page and its full script, and stop if there is none.
- Phase 0, fetch Description Grammar v4.1 sections 2 and 2bis.
- Phase 0, fetch Alex Tone.
- Phase 1, read the whole script in order.
- Phase 1, find the natural breaks: scene change, register change, the moment a mechanism gets named, the pivot, the framework, the close.
- Phase 1, propose between 5 and 9 chapters, chapter 1 anchored on the very first line of the script.
- Phase 1, make the last chapter the system anchor, or the close when the video is storytelling driven.
- Phase 2, quote the exact opening sentence of each chapter, word for word.
- Phase 2, give its position as an approximate percentage of script length. Never MM:SS, never a duration.
- Phase 3, write one WORKING TITLE per chapter under Description Grammar section 2, about 5 words, no clickbait, no spoiler.
- Phase 3, alternate the registers per section 2bis, never 3 of the same in a row.
- Phase 4, grep the output for MM:SS. One hit means delete it and redo phase 2.
- Phase 4, check zero dash, zero emoji, 5 to 9 chapters, verbatim anchors, chapter 1 on line 1.
- Phase 4, warn AL when two anchors sit under 3 percent apart: once edited they risk falling under the 10 second minimum YouTube needs for a marker.
- Phase 5, insert a toggle named Chapter Suggestions [DATE] right after Script Cleaned [DATE], touching nothing else.
- Phase 5, per chapter write 5 fields: Working title, Starts at, Approximate position, Register, Why here, with the page color code.
- Phase 5, close with total chapters, register balance, and the reminder that no timestamp was produced.
- HUMAN GATE, AL keeps, merges or drops chapters freely, then drops the markers in Final Cut.
- Once the edit is locked the real positions exist, and the Description prompt writes the final labels onto them.
- One toggle Chapter Suggestions [DATE] in the video page, 5 to 9 chapter blocks, zero timestamp anywhere.
- Working titles explicitly flagged as drafts, positions expressed in percentages only.
- A warning list of anchors sitting too close together.
- No planner row, no file, no upload. No other toggle on the page is touched.
- AL owns the boundaries, then places the FCPX markers.
What it does · inputs, steps, outputs
- Suno Background Music Grammar: section 2 prompt bank and families, section 4 mapping table, section 5 dB mix and fade, section 6 punchline rule.
- Grammar and prompt articulation doctrine.
- Phase 0 invariants, executed and not declared: grammar reachable with a non-empty bank, editing-bank/background-music/ present and writable, AL confirms which Suno account is used, run inputs confirmed.
- Run inputs: family filter (default B, background underscore), N candidates (default 6), target video or plain bank refill.
- Phase 0, check the grammar is reachable and its section 2 bank is not empty.
- Phase 0, check background-music/ exists and is writable.
- Phase 0, ask AL which Suno account is used this run.
- Phase 0, confirm family, N and target. Any failure stops the run, no bypass.
- Phase 1, read the grammar bank and take the requested family, default B.
- Phase 1, use the bank prompts verbatim: any new wording is an invention and needs AL validation before entering the bank.
- Phase 1, at the marked moment of choice, match the family to the target format and state the reasoning in one line.
- Phase 2, display the exact prompt text in one copy-ready message for AL to paste into Suno, loop suffix appended.
- Phase 2, apply Suno prompt hygiene: never loop or groove, prefer underscore, bed, stillness.
- CHECKPOINT AL, hard stop. AL listens and names the keepers. Never pick for him, never suggest a best unless asked.
- Phase 3, store each chosen mp3 in the AL named category folder, naming EO-bg-YYYY-MM-DD-family-slug.mp3.
- Phase 3, never overwrite and never delete, move only, suffix -2 on a name collision.
- Phase 4, same turn, add one row per track to the grammar section 4 mapping table and fill the empty family cells.
- Phase 5, run the dash gate, the no-invention check and the folder check.
- Report tracks generated and kept, files added with their folder, mapping rows added, and open the Finder folder.
- New mp3 files in editing-bank/background-music/<category>/ under the canonical name.
- New rows in the grammar section 4 mapping table. No existing row dropped, the page is never wholesale replaced.
- The Finder folder opened automatically, plus a report with the 3 links in process order.
- No PostFast, no posting, no batch DB write. Local files and grammar rows only.
- AL picks the tracks, and validates any prompt text that is not already in the bank.
What it does · inputs, steps, outputs
- Thumbnail x Title x IN-BETWEEN Grammar: FULL-PICTURE, Titles, IN-BETWEEN and THUMBNAILS with the 3 formalized families, the 5 layer ultimate test and the selection process.
- Reading filter, non negotiable: only the machine tagged blocks are read. Every AL tagged block is ignored entirely, not one example is taken from it.
- The Notion page of the video, script inside its Script toggle.
- Anti bias rule: the script alone is the source. Any title already sitting on the page is ignored and no external search is allowed.
- Fetch the grammar and mentally filter out the AL only blocks.
- Fetch the video page directly from its link, no search, no guess, no cross reference.
- Run the 3 toggles in order: Thumbnail, then Title, then IN-BETWEEN.
- Thumbnail step 1, extract the central concept of the script in one sentence.
- Thumbnail step 2, name the register: relational, visceral, or structural and oppositional.
- Thumbnail step 3, pick the family among the 3 formalized ones, and the sub-type.
- Thumbnail step 4, produce the Pre and Post prompts, or the 3 prompts, one sub-toggle each, full English text.
- Thumbnail step 5, run the 5 layer ultimate test on each prompt, PASS or FAIL per prompt.
- Title, apply the title rules to the script and produce 5 variants with their metrics, characters, words, levers.
- Title, give the final recommendation plus a backup variant.
- IN-BETWEEN, run the 12 point checklist on the title by thumbnail combo.
- IN-BETWEEN, mark the points that pass under reserve: those need AL arbitration.
- IN-BETWEEN, give the global GO or NO-GO verdict.
- Write the whole result into the video page, above the Script toggle.
- Conditional gate: propose 2 or 3 competing readings only when the central concept is genuinely ambiguous, otherwise execute with no intermediate question.
- One parent toggle in the video page above Script, named Re-run Thumbnail x Title x IN-BETWEEN [date], with 3 child toggles.
- Toggle 1 carries the 5 steps, one sub-toggle per image prompt and one per 5 layer test.
- Toggle 2 carries the title rules, the 5 variants and the recommendation.
- Toggle 3 carries the 12 point checklist and the GO or NO-GO.
- Image prompts written in English, ready to paste. AL runs the image generation himself.
- AL arbitrates every yellow item, in particular legibility at 120x68 px and video duration.
What it does · inputs, steps, outputs
- The grammar page, toggle Process titre EO en 5 etapes, inside section 1 Titles.
- The video page, pasted by AL into the link placeholder.
- The script, read from the Script toggle or from the page body.
- The Video duration property of that page.
- Open the grammar and its 5 step title process.
- Open the video page provided.
- Read the script in the Script toggle, or in the page content.
- Read the Video duration property.
- Produce one validated title by running the 5 steps.
- One validated title.
- Gap kept from the page itself: it never says where the title is written, so today it lands in the conversation and AL carries it over by hand. Documented here rather than guessed.
- No planner row, no file, no toggle.
What it does · inputs, steps, outputs
- Thumbnail Long-Form {TT,IG,FB} Grammar, which holds the TYPE 6 image prompt template.
- The Notion video page carrying the script, link pasted by AL.
- The video number N read from the page title, for example V7 gives 7.
- No photo gate here: AL attaches his own photo later, inside the image tool.
- Fetch the video page over the Notion connector.
- Extract the video number N from the page title.
- Read the script inside the script toggle of that page.
- Generate the TYPE 6 image prompt, filling HEADLINE, SCENE_BRIEF, FRAMING_DESCRIPTION and BACKGROUND_BRIEF.
- Write a new toggle Vn_TT-IG-FB_Thumbnail just under the script toggle, prompt inside a code block.
- Reply with a short recap: headline, framing, background brief, and why that framing.
- One toggle Vn_TT-IG-FB_Thumbnail in the video page, ready to paste prompt in a code block.
- A chat recap plus confirmation the toggle exists.
- AL pastes the prompt into the image tool and attaches his photo at that moment.
- No planner row, no file, no upload.
What it does · inputs, steps, outputs
- Description Grammar: section 1 canonical template, sections 2 and 2bis timestamps, section 3 hashtag cascade, section 4 YT Studio tag cascade, section 5 hook generator.
- SEO Technical Appendix v5.1, bundles A to D by tiers 0 to 3. Signature claims are banned as tags except the 10 that carry real volume.
- From the video page: validated title, full script, and the existing timestamps in the Description property.
- The current YouTube Studio tags when the video is already published, asked to AL or read from a screenshot.
- Read the validated title from the page title property.
- Read the full script from the Script or Full Transcript toggle.
- Read the existing timestamps from the Description property.
- Ask AL for the current YT Studio tags when the video is already live.
- Generate the hook, 2 to 3 lines, per section 5.
- Build the timestamp list per sections 2 and 2bis: MM:SS two digits, first one always 00:00, no numbering, no narrative separators.
- Lock onto the existing published positions when the video is already out. Labels get rewritten, positions never move, because AL does not re-edit the montage.
- Pick the 3 hashtags with the explicit cascade, justifying 2 and 3.
- Pick 8 to 10 YT Studio tags with the explicit cascade, each with its source bundle, tier and reason.
- Produce the paste ready comma separated tag list, strict format, no numbering and no line break.
- Produce the full paste ready description block.
- Insert everything in the video page just before the Script toggle, inside a parent toggle YouTube Description Run [date].
- Touch nothing else: never rename the page, never modify an existing toggle.
- One parent toggle YouTube Description Run [date] with 6 child toggles: HOOK, TIMESTAMPS, HASHTAGS cascade, TAGS YT Studio cascade, TAGS paste ready, FULL DESCRIPTION BLOCK.
- A comma separated tag list for the Tags field and a full block for the Description field.
- Nothing else in the page is touched.
- AL pastes both blocks into YouTube Studio himself.
What it does · inputs, steps, outputs
- Shorts Auto-Publisher Grammar, sections 1 to 14, fetched before any action.
- Live slots from /backdata/content-system, read at write time and never hardcoded.
- Shorts EO Posting Planning, the base the workflow reads and updates.
- Platform Voice Matrix, canonical source of the per platform captions.
- The terminal output of the upload script, pasted by AL, used to match each file name to its row.
- Videos in 1080p, .mov or .mp4, 60 s or under, 250 MB limit, in one single folder.
- Repo n8nxpostfast with upload-video.sh, deploy-to-n8n.sh and the workflow JSON, plus the secrets file for the PostFast and n8n keys.
- n8n workflow NgJNAYfiTgxqehu2 and its production webhook. The workflow JSON is the authority on any execution fact.
- AL exports the shorts in 1080p into a single folder.
- AL runs the upload loop, which pushes every video and cover to PostFast.
- AL pastes the whole terminal output back.
- Fetch the grammar before any action.
- Match each file name to its short number and its planner row, then write PostFast Media Key and PostFast Thumbnail Key.
- Scheduling guard, fetch the live plannings at write time and read the slots for shorts.
- Scheduling guard, query the planner for shorts already carrying a future Posting Date, whatever their status.
- Scheduling guard, take the next free slots strictly after the last scheduled row, future only, one short per calendar day.
- Stop and ping AL on any collision, ambiguity, or missing planning line.
- Write the exact slot label used into the row Notes, or into the run report.
- Verify each Description carries the 4 platform blocks YT, TT, IG, FB, written upstream by the titles and captions prompt.
- Set Status to Ready on each short row.
- Run the pre-execute checklist: media key filled, future dates one per day, description blocks present, no ghost Ready short, PostFast Scheduled tab empty, Facebook gate status.
- Trigger the production webhook once the checklist is fully green. Since 07/08/2026 this replaces the manual Execute click.
- The workflow publishes and flips each Notion row to Posted.
- AL finishes each TikTok draft by hand in the mobile app, cover included.
- Shorts planner rows carrying media keys, thumbnail keys, future Posting Dates, the 4 platform description blocks, then Status Ready, then Status Posted.
- PostFast posts per short: YouTube Short automatic, Instagram Reel, Facebook Reel, TikTok as a draft.
- One n8n execution on NgJNAYfiTgxqehu2, verified after the fact against PostFast.
- The slot label traced in the row Notes or in the report.
- AL finishes the TikTok drafts by hand and confirms the Facebook leg, which has never been validated on a real short.
What it does · inputs, steps, outputs
- Thumbnail Shorts Grammar, which holds the 5 type templates and the eligible position matrix.
- The 5 shorts as ROWS of Shorts EO Posting Planning, never pages. AL pastes the 5 Short IDs, or nothing and the current week rows are taken.
- Short ID column, format LF-Sn. Fallback since 04/08/2026: the formula is unreadable through the connector, so the identifier is rebuilt as V{Associated LF}-S{Short number}. Never parsed from the title, the title is free text.
- Description column of each row: the script source, blocks SM and YT, the YT block being the reference for scoring and headline. Row bodies are empty, there is no toggle to read.
- The ISO week number, used by the deterministic position draw.
- Read the 5 rows and rebuild each Short ID from Associated LF and Short number.
- Read each script in the Description column, YT block as reference.
- Score each script on the emotional rubric: trauma direct +3, vulnerability +3, family +2, reconstruction +1, tactical 0.
- Assign the 5 types, one per short: highest score takes Visage, most metaphorical takes Symbole, the rest take Silhouette, Macro or Paysage.
- Build the list of ELIGIBLE positions from the template matrix, those that never mask the subject.
- Compute index = (sum of the Short ID character codes + ISO week number) modulo the eligible count.
- Take the position at that index, 1 to 56 left aligned, 57 to 60 centered, next eligible one on a collision.
- PHOTO GATE: if any short lands on Visage or Silhouette, stop, ask AL for his photo and nothing else, and wait. This is what makes the run semi automatic.
- Generate the 5 image prompts, filling HEADLINE, SUBTITLE, SCENE_BRIEF, POSITION_DESCRIPTION and TEXT_ALIGNMENT.
- Write the complete prompt into the tbprompt property of each row, one prompt per row.
- Paste the same prompt into the row page body, under a heading Thumbnail prompt V{N}-S{n}, in a code block. The property is what tools read, the body is what AL opens.
- Reply with a recap table: Short, Score, TYPE, Position, Alignment, Reason. No toggle anywhere.
- 5 rows of Shorts EO Posting Planning with tbprompt filled, plus the same prompt in each row body. Zero toggle created.
- A recap table in the conversation.
- No file written by the run. Covers land later in videos/short-form/ongoing/V{N}Sfs/ready/, 1080x1920, named V{N}-S{n}-two-words, never upscaled.
- AL pastes each prompt into the image tool with his photo where required, post produces, uploads to PostFast, then the Auto-Publisher takes over.
What it does · inputs, steps, outputs
- AL preliminary short montage: cuts, captions and base overlays already baked into the export. That file is the input, and it is NEVER overwritten.
- Phase 0, 4 pages applied in block: EO Short Edit Grammar (families, routes, density doctrine, rule of thirds, hard brand rules, pattern status ledger), the content-system shorts specs and safe zone fetched with the access service token, the Video Diagrams Grammar (closed palette, fonts, render mechanics), and the execution rules doctrine.
- TARGET: the file AL names, for example edit pass on V9-S2, or by default every export in videos/short-form/ongoing/ that has no -edit sibling yet.
- Tooling checked as invariants: ffprobe and ffmpeg, node, the render script, whisper, the Inter and Inter, -apple-system, BlinkMacSystemFont, Segoe UI, sans-serif fonts, more than 2 GB free disk.
- Asset sources: AI stills, background removal for cutouts, and the v2-canonical HTML overlay masters, which are COPIED and never filled directly.
- Phase 0a, check the target exists, ffprobe passes, and record duration, resolution and fps. 1080x1920 vertical expected.
- Phase 0b, check ffmpeg, node and the render script are present.
- Phase 0c, check whisper is available.
- Phase 0d, check Inter and Inter, -apple-system, BlinkMacSystemFont, Segoe UI, sans-serif are installed.
- Phase 0e, check the grammar and the content-system were really fetched.
- Phase 0f, check free disk above 2 GB.
- Phase 0g, state the scope out loud: LOCAL writes only, no upload, no post, no batch DB write. State whether dry run is on. Any failure stops the run, never bypass.
- Step 1, run whisper on the audio for word level timestamps.
- Step 1, extract 1 frame per second and read the frames.
- Step 1, identify the hook window of 3 to 5 s, the key words, entities, numbers, beat changes, and the pixel band occupied by AL captions, which becomes a no go zone for events.
- Step 2, draft the EDIT PLAN: one table with t_start, t_end, trigger word, pattern id, route, asset to produce, justification and safe zone check.
- Step 2, apply the density doctrine: one event per 1 to 2 s in the hook, one per 2 to 4 s in the body, ceiling 12 to 18 events per short.
- Step 2, for a batch, WRITE the rule of thirds allocation first: which shorts run proven patterns, which run variants, which run new ones.
- Step 3, CHECKPOINT AL: show the edit plan and the allocation and wait for the go. No asset is produced before it. In dry run the run ends here with DRY-RUN COMPLETE.
- Step 4, produce the assets into {video-folder}/edit-pass/: stills and background removed cutouts.
- Step 4, build the HTML overlays by COPYING the v2-canonical masters, never filling a master, and render them at 1080x1920 or native size for chips.
- Step 4, verify every rendered file on a real extracted frame before use. CSS effects have silently rendered nothing before.
- Step 5, assemble with ffmpeg: splice the full frame inserts, apply the punch ins and flashes, composite the screen blend overlays and the timed PNGs, then append the end element.
- Step 5, pass the original voice track through untouched. Inserts sit under the running voice and never cut it.
- Step 5, write {original-basename}-edit-v1.mp4 NEXT TO the original, incrementing to v2 or v3 when an edit file already exists.
- Step 6, extract a frame at each planned event midpoint and read it: event visible, colors inside the closed palette, AL captions not covered, safe zone respected.
- Step 6, ffprobe the output: duration equals original plus inserted seconds, audio stream intact, then spot check 3 random windows.
- Step 7, run the dash gate on the report and every rendered text source, no emoji, English only on rendered text, every hex inside the closed palette.
- Step 8, report in process order.
- One edited file per target, {original-basename}-edit-v1.mp4, written next to the original. The original is never touched.
- The produced assets in {video-folder}/edit-pass/: stills, cutouts, rendered overlay movs and timed PNG overlays. The v2-canonical masters stay unfilled.
- A report with the Finder link to the video folder and edit-pass/, the executed event table against the plan with the skips explained, the manual route handoff list for AL, a pattern status ledger update proposal, and the Notion links edited.
- No PostFast, no n8n, no planner row. Publishing stays with the Shorts Auto-Publisher.
- AL gives the go at the checkpoint, then executes the manual routes in FCPX himself: whip pan with real motion blur, torn paper split and speed ramps, never as a cheap ffmpeg imitation. Caption styling stays upstream in his FCPX phase, baked captions cannot be restyled here.
- Doctrine on the page: the first ever run is a rehearsal on ONE short before any batch use.
What it does · inputs, steps, outputs
- Pasted by AL: the N short scripts verbatim numbered S1 to SN, the Notion link of the parent long form, its V number, and optionally the cover headlines for the anti repetition check.
- Phase 0, 7 invariants fetched in parallel: Shorts Auto-Publisher Grammar section 4 which is the Description contract, the shorts technical specs holding the title process, the 200 character rule, the tag rules and the per platform limits, the SEO Appendix which is the AUTHORITY on hashtags and tags and wins any disagreement, the parent long form page for context only, the memory rules, the Platform Voice Matrix, and the LIVE plannings.
- Fallback since 04/08/2026: the live planner sits behind the access gate, so the deployed source file is read locally instead. Never skip that read.
- Destination: Shorts EO Posting Planning.
- INSIGHT LEDGER of the source video.
- Phase 0, fetch the 7 invariants in parallel. Never work from memory on the Appendix.
- Ledger guard, fetch or create the ledger, use only free insights, write the allocation before generating.
- Phase 1, per short produce TWO title options A and B, 100 characters max, under 10 words, diagnostic hook only.
- Phase 1, use two different patterns per short and rotate across the batch, never the same pattern on two consecutive shorts.
- Phase 1, apply the anti repetition against the cover text and the hook subtitles, and the retired vocabulary bans.
- Phase 2, write one Description per short with exactly 4 blocks, YT, TT, IG, FB, each at line start and separated by a blank line.
- Phase 2, the YT block opens with 200 characters of pure natural hook, then the uncovered transcript for SEO, then exactly 3 hashtags and 5 tags including the 2 tier 0 tags.
- Phase 2, TT, IG and FB get 3 to 5 hashtags each, in their own register per the Voice Matrix, so no two captions duplicate.
- Phase 3, run the self check BEFORE writing anything, and print every count.
- Phase 3, FIRST LINE RULE: longest common prefix under 25 characters on the first 60 of EVERY caption pair. On a YT and TT clash the YouTube description is never touched, TikTok gets the fresh opening.
- Phase 3, any failure regenerates that short. A failing row is never written.
- Phase 4, FIRST HUMAN GATE: print one table per short with both titles, the pick and its reason, the 4 blocks, the hashtags and the tags, then STOP. Nothing is written before AL answers A, B or a rewrite.
- Phase 5, query the planner on Associated LF equals V{N}, match each short by Short number and UPDATE the EXISTING row. Never create a new one.
- Phase 5, before overwriting the Description, copy its current script blocks verbatim into the row body under a heading Script V{N}-S{n}, because the thumbnails prompt reads the script there.
- Phase 5, set the title to the option AL picked, write the 4 blocks, verify the short number and the parent, and set From to YouTube Long Form.
- Phase 5, mirror everything into the row page body so the property and the body say exactly the same thing.
- Phase 5, leave Status, Posting Date, media keys, thumbnail key, overlay, tier, type and tbprompt untouched. Never set a date.
- Phase 6, run the 5-Batch Thumbnails prompt, which fills the 5 tbprompt properties and stops on its own photo gate.
- Phase 6, once AL has generated and post produced the covers, show them back in batch order with their short number and title.
- Phase 7, SECOND HUMAN GATE: stop again and wait for AL go or his send backs.
- Phase 8, on the go only, run the Shorts Auto-Publisher, which uploads, writes the keys, sets the dates, flips Status to Ready and triggers the workflow.
- Phase 8, HARD GUARD: re-fetch the plannings before ANY date is written, and if the slot moved the new one wins and it is said out loud in the report.
- Phase 9, report the rows written, the self check counts, the covers with their file names, what stayed manual, and a confirmation that the YouTube leg actually landed.
- The EXISTING shorts planner rows updated: title, the 4 platform description blocks, short number and parent verified, From set. No new row is created.
- Each row body rewritten with the title, the 4 captions, the 3 hashtags and the 5 tags, plus the previous script kept verbatim under its own heading.
- The Insight Ledger updated with the shorts allocations.
- The 5 tbprompt properties filled by the thumbnails prompt, then the covers produced by AL in videos/short-form/ongoing/V{N}Sfs/ready/, 1080x1920.
- Explicitly NOT produced here: dates, Status, media keys, cuts, covers, scheduling.
- AL answers 2 gates, generates the covers, finishes TikTok by hand and checks the YouTube leg.
- Open point kept from the page: nothing carries the optimized title to YouTube yet. The 3 options sit on the page and AL has to pick one.
What it does · inputs, steps, outputs
- Quote Grammar, the grammar and prompt doctrine, and the Platform Voice Matrix.
- Phase 0 invariants, each run as a REAL test call: the 3 secrets present, Canva brand templates reachable, the Quote Content Planner readable, content-system answering 200 behind the access token, the X and Threads bases carrying Posting Date and Posted At, the Canva template exposing its 5 slots, the iCloud quotes folder present.
- Quote Content Planner, ALL rows and no sampling, filtered on Validation Yes and Status Not started.
- Live schedule read from content-system at run time, plus the safe zone re-fetched at the moment of EACH Canva clone, never cached.
- Canva brand template, folder, signature asset and background asset. PostFast signed upload API. The X and Threads satellite bases.
- INSIGHT LEDGER of the source video.
- Phase 0, execute the 7 invariant tests for real and print the raw results. No OK without a real call.
- Ledger guard, fetch or create the ledger, use only free or already quote allocated insights, write the allocation before generating.
- Phase 1, query the planner, all rows, keep Validation Yes and Status Not started.
- Phase 2, read the live Quote slot. If it moved, log it, update the weekly n8n workflow and reschedule the future unpublished rows.
- Phase 3.1, derive Multi-pages from the caption length and correct the Notion column when it disagrees.
- Phase 3.2 to 3.4, compute the weight, interleave heavy, medium and light, then compute the new Qxx and the Posting Date with the hour drawn inside the live slot.
- Phase 3, regenerate and deploy the live /backdata/quotes tool only if the order actually changed.
- CHECKPOINT AL, send the simulation link and wait for the validation of the order. Nothing moves without it.
- Phase 4, apply the new Qxx titles and Posting Dates in batch, then ping AL.
- Phase 4B, write 3 distinct captions: TT visceral, IG diagnostic, FB narrative. The punchline lives on the visual, so no caption re-cites it in its opening.
- Phase 4B self check, fail loud before writing: pairwise first line under 25 characters of common prefix, zero dash, zero invention.
- Phase 5, per row, fetch the safe zone live, clone the Canva brand template and move it into the quotes folder.
- Phase 5, identify the 5 slots by their initial state and never by element id, and never touch the background asset.
- Phase 5, run the borderline test and the shrink loop on the text height, escalating to multi-pages when it overflows.
- Phase 5, export each page as a 1080x1350 PNG in pro quality and download it into the iCloud quotes folder as Qxx-short-title.
- Phase 5, run the pixel check on the 4 corners and the reserved zones. No upload without a pass.
- CHECKPOINT AL, open the Finder folder and wait for the visual go, because the next phase is destructive.
- Phase 6, validate the files, request signed upload URLs, push every PNG and write the PostFast Image Key back into the row.
- Phase 7, create 2 satellite rows per quote, X and Threads, same Posting Date, Kind From Quote. No LinkedIn row.
- Phase 8, verify keys and captions, verify the satellite counts, and move Status to In progress.
- Phase 9, on AL trigger only, approve each PostFast post through the dashboard and confirm the approval state.
- PNG files 1080x1350 in content/quotes/2026/, single page or p1, p2 for multi-pages.
- Quote Content Planner rows updated: Multi-pages corrected, Qxx title, Posting Date, the 3 platform captions, PostFast Image Key, Status In progress. The legacy Caption column is never touched.
- Two satellite rows per quote, one X and one Threads, same date, no LinkedIn.
- PostFast uploads, then approved posts after AL go.
- The live /backdata/quotes tool redeployed only when the order changed, and the weekly n8n workflow updated when the slot moved.
- AL validates the order, inspects the PNGs, validates the TikTok music and triggers the approval phase. Status goes to Done by n8n at the push, not by this run.
What it does · inputs, steps, outputs
- Source: the Notion link of the long form or long forms. Default batch, the last 7 published long forms not yet extracted. The --auto flag skips the checkpoint.
- Phase 0 invariants in parallel: Quote Grammar sections A and C, the source pages and their full scripts, the existing rows of Quotes EO Backup Base and the Quote Content Planner titles for dedup, and the memory rules on invention, dashes and filtering.
- INSIGHT LEDGER of the source video: the child page Insight Ledger V{N} under the video row of the YouTube Long Form Content Planner.
- Phase 0, fetch the 4 invariants in parallel. Stop loudly on any failure, no bypass.
- Ledger guard, fetch the Insight Ledger of the source video before generating anything.
- Ledger guard, create the ledger first when it does not exist: the COMPLETE list of 15 to 25 insights, all unallocated.
- Ledger guard, use only free insights or insights already allocated to quotes.
- Ledger guard, write the allocation, label plus date, BEFORE generating.
- Phase 1, read the full script of each source.
- Phase 1.1, extract 5 to 10 verbatim punchlines per source, the single strongest one liner being the hard minimum. Never pad.
- Phase 1.2, zero paraphrase and zero rewriting. A line that only works rewritten is dropped or flagged, never rewritten.
- Phase 1.3, assign one Kind per punchline among the 7 Quote Grammar categories.
- Phase 1.4, skip anything already in the Backup Base or the Planner, matching on caption text, and list the skips.
- Phase 1.5, give each keeper a short working title, no Qxx prefix. Numbering is planner only and comes later.
- Phase 2, CHECKPOINT AL, dry run by default: deliver the candidate report and wait for GO, STOP or MODIFY. Skipped only with --auto.
- AL OVERRIDE, absolute: once AL edits a candidate, his latest version becomes the canonical caption and is posed exactly as sent.
- Phase 3, batch create one row per punchline in Quotes EO Backup Base.
- Phase 3, set Title, Caption verbatim with line breaks, Kind, Source Title, Source Link, Source Type, Validation No, Status Not started. Dates and image key stay empty.
- Phase 4, report the count and the base link, then STOP. No visual, no planner row, no satellite, no scheduling.
- New rows in Quotes EO Backup Base: Validation No, Status Not started, no date and no image key.
- The Insight Ledger carrying the quote allocations, or created from scratch when it was missing.
- A report with the count, the base link and the duplicates skipped.
- AL does the clean up: Validation Yes, copy to the Quote Content Planner, Qxx sticky numbering, then he triggers the production run.
What it does · inputs, steps, outputs
- Prerequisites: the video is Status Posted, the Gling transcript is cleaned, and the cleaned script is stored in the video Notion page.
- Pasted by AL: video title, duration, Notion link, and the cleaned script or its link.
- Grammars: Carousel from Long-Form, Carousel common rules B to G, PostFast platform specs, Cross-platform from Carousel, Multi-Platform grammar hub, Platform Voice Matrix.
- Phase 0, 7 invariants as real calls: secrets, Notion auth on the 4 planners plus the source row, content-system answering 200, the From and Towards schemas, the carousels n8n workflow active, the clean script sub-page present, the iCloud carousels folder writable.
- Live plannings for the scheduling guard, and the SEO Appendix as the only hashtag and tag pool.
- INSIGHT LEDGER of the source video.
- Phase 0, run the 7 invariants for real and list the raw results. Stop and ping AL on any failure.
- Ledger guard, fetch or create the ledger, take only free insights, write the allocation before generating.
- Phase 1, read the cleaned script, identify the 3 angles, compute their proportions and name the dominant one.
- Phase 2, extract every visceral gem in the strict sense and annotate its source angle.
- Phase 3, decide the number of carousels, 1, 2 or 3, density gate before duration gate.
- Phase 4, split by angle by default, or by transversal theme when the material is a catalogue.
- Phase 5, compose each carousel: slide 1 cover with the carousel title and not the video title, slides 2 to 9 one gem each, slide 10 the fixed CTA.
- Phase 6, verify the proportions hold within 15 points.
- Phase 7, apply every guardrail: slide length, jargon, voice, uniform CTA, anti repetition, non transposable scenes, no curative claim.
- Phase 8, write 3 DISTINCT captions, TT, IG, FB, with 5 hashtags on TT and IG and 3 on FB, no cross promotion toward YouTube.
- Phase 9, write the 3 native satellite posts, LinkedIn, X and Threads, each in its own form.
- Produce the image prompts for the 10 slides plus 1 landscape 1200x630 cover prompt.
- Self check first line: common prefix under 25 characters across the 3 captions, rewriting strictly from the script, zero invention.
- Scheduling guard: live plannings at write time, next free slot strictly after the last scheduled row, stop on collision, trace the exact slot label.
- Create the main row in Carousels Content Planner with the source fields, the 3 caption blocks and the 3 native posts.
- Create the LinkedIn, X and Threads Repurposed rows: Status In progress, From Carousel, Posting Date re-fetched live at row creation.
- Repeat the 4 rows for each carousel produced.
- HUMAN GATE, ping AL after each carousel and wait for the go on the visuals.
- On the go, hand over to the Carousel Production Pipeline, phases 2 to 8, one carousel at a time.
- Per carousel, 4 Notion rows: the Carousels Content Planner main row plus one LinkedIn, one X and one Threads Repurposed satellite.
- The Insight Ledger updated. The carousel and its 3 satellites count as ONE allocation unit, and from that write the insight is locked for every other format.
- In the response: the analysis recap, the 10 slides in clear, the 3 captions, the 3 native posts and the 11 image prompts.
- The exact slot label traced in the row Notes or in the run report.
- Contradiction kept from the page itself: the body and the 04/08 corrections toggle disagree on the Towards value, on which content-system line to read, and on the cover method. The corrections toggle is the dated one.
- AL validates each carousel and says go before any image generation.
What it does · inputs, steps, outputs
- Prerequisites: the Substack article is published with a live public URL and respects the Substack templates, size M or L.
- Pasted by AL: the published link and the exact article title, or the full article text.
- Grammars: Carousel from Substack, common rules B to G, PostFast specs, Substack templates and rules, Cross-platform from Carousel, the grammar hub, the Platform Voice Matrix.
- Phase 0, 6 invariants, the same as the long form version minus the source video row check.
- INSIGHT LEDGER of the long form the article derives from. Skipped entirely when the article is Improvised.
- Phase 0, run the 6 invariants for real and stop on any failure.
- Ledger guard, applied only when the article traces back to a video, skipped for an Improvised source.
- Phase 1, structural reading: the 5 narrative phases, the exact title, the philosophical reference and the exact pivot point.
- Phase 2, extract the 8 gems for the middle slides, one per narrative phase in order.
- Phase 3, compose the carousel: slide 1 carrying the EXACT article title, slides 2 to 9 the gems, slide 10 the fixed Substack CTA.
- Phase 4, apply every guardrail: 35 words max per slide, jargon whitelist and blacklist, literary voice, no curative claim, philosophical reference present.
- Phase 5, write 3 DISTINCT captions TT, IG, FB, 5 hashtags on TT and IG and 3 on FB, no link in bio pointing to Substack.
- Phase 6, write the 3 native posts, plus one long X Article when the material justifies it.
- Produce the 10 image prompts plus 1 landscape 1200x630 cover prompt.
- Self check first line across the 3 captions, rewriting openings strictly from the article.
- Create the main row in Carousels Content Planner, Source Type Substack, plus the 3 Repurposed satellite rows.
- HUMAN GATE, ping AL and wait for the go on the visuals.
- On the go, hand over to the Carousel Production Pipeline, phases 2 to 8.
- Exactly ONE carousel per article. The rule is strict: 1 Substack article equals 1 carousel, never more.
- 4 Notion rows: the main carousel row plus the LinkedIn, X and Threads satellites.
- The Substack carousel is STANDBY by default and goes to backup, so the run arms no date. AL arms the Posting Date himself.
- The 10 slides, 3 captions, 3 native posts and the image prompts in the response.
- Contradiction kept from the page itself: the date instruction is stated three different ways on that page and is not reconciled there.
What it does · inputs, steps, outputs
- ARCHIVED on 28/07/2026, do not run. Parent page is the superseded grammars and prompts archive. Kept for history, URL never deleted.
- Same entry point as the live orchestrator: one long form video, or one Substack article with From Improvised.
- It dispatched 6 sub-agents instead of 3: LinkedIn, X, Threads, Substack essayist, Newsletter, and a Quote extractor.
- It posted the rows DIRECTLY into the published planners, with no validation step in between.
- Roughly 30 to 40 rows written straight into 5 published planners plus the quotes backup, Status Not started, no Validation field.
- Why it was replaced: the live version poses into backup with Validation No, drops the quote extractor sub-agent, and follows the Backup Base doctrine.
- Nothing runs from this page today. The live orchestrator is the v2.4 card in this same lane.
What it does · inputs, steps, outputs
- Source: the Notion link of ONE long form, or one Substack article whose From is Improvised. A non Improvised Substack stops the run as a probable duplicate of its source video.
- Phase 0, 6 resources fetched in parallel: the source page and its transcript, the Multi-Platform Grammar, the Backup Base Doctrine, the grammar hub, the live content-system, and the memory rules on dashes, invention, filtering and doc contamination.
- The SEO Appendix as the hashtag and tag pool.
- INSIGHT LEDGER: this prompt is the CANONICAL CREATOR of the ledger for the video, because it already reads the whole transcript in its phase 1.
- Verify the source type, and stop immediately on a non Improvised Substack.
- Phase 0, fetch the 6 invariants in parallel.
- Ledger, create it during phase 1 when absent: the COMPLETE list of 15 to 25 insights, not the top 8.
- Ledger, allocate every insight carried by a retained angle, hook or asset to its platform BEFORE the phase 2 dispatch.
- Phase 1, read the whole transcript and identify 5 to 7 distinct angles, forcing 5 DIFFERENT modes across the 5 retained.
- Phase 1, assign one audience per angle and exactly one narrative voice, I led, You led or Mixed.
- Phase 1, build the quotation map: every direct quote and its speaker, before dispatch.
- Phase 1, issue the density verdict and warn AL before phase 2 when the transcript is thin.
- Phase 1, produce 15 hook candidates, 3 per angle, all 15 different, all extreme opinions.
- Phase 2, launch the 3 sub-agents IN PARALLEL, LinkedIn, X and Threads, each fetching its own grammar live for anti contamination.
- Sub-agent 1, 5 LinkedIn posts of 1500 to 3000 characters plus one self comment reply each.
- Sub-agent 2, 15 to 20 X standalones plus 1 long form essay. Threads are retired since 08/08/2026.
- Sub-agent 3, 5 native Threads posts of 200 to 500 characters, genuinely distinct from X.
- Phase 3, global self checks: zero dash, zero obsolete hashtag, zero forbidden CTA, curative vocabulary flagged for human review.
- Phase 3, mode diversity 5 of 5, anti AI heuristics, quotation fidelity, assigned voice respected.
- Phase 3, first line collision check across the 3 sub-agents, tolerance zero, plus the dead hook check.
- Phase 4, AL CHECKPOINT, dry run by default: the report shows the 5 angles, the 15 hooks verbatim, the asset counts and the draft page links, then waits.
- Phase 4, AL answers POSER, STOP or MODIFY. The checkpoint is skipped only if --auto was explicitly passed.
- Phase 5, batch create the rows in the 3 destinations: Status Not started, Validation No, Towards empty, no date.
- Phase 6, final report with the 3 planner links, the row counts, the self check confirmations and the pending AL validation.
- Roughly 30 to 36 assets across the 3 destinations: LinkedIn 5, X 16 to 22, Threads 5.
- Every row: Status Not started, Validation No, Towards empty, Posting Date empty, plus Audience Segment, Mode, Content Type, Source Lien and Source Titre.
- The Insight Ledger CREATED for the video, with the per platform allocation written before dispatch.
- Three temporary Notion draft sub-pages under a parent Multi-Platform Drafts page.
- Contradiction kept from the page itself: the body still writes into the separate Backup Bases while the 07/08 decision toggle says those bases are retired and the rows now go into the published planners with Status Backup. The body was never rewritten.
- AL validates, then flips the rows from backup to published.
What it does · inputs, steps, outputs
- Trigger: the final script exists in the long form Notion page. Nothing else is required, not the final title, not the thumbnail, not the edit, not the export, not the publication date.
- The Notion URL of the source long form page, pasted by AL.
- The complete source page and its complete final script, the ONLY content source.
- Multi-Platform Grammar v1.5 and the Multi-Platform Grammar HUB, which govern transformation, voice, platform form, hashtags and anti rules. Their delivery destination is overridden by this prompt.
- The SEO Appendix bundles A to D, the only hashtag pool, exact canonical phrases only.
- INSIGHT LEDGER of the source video.
- Start immediately once the source URL is present.
- Fetch and read the complete source page and its complete final script.
- Fetch the grammar v1.5 and the hub, and apply their platform rules except for their destination.
- Ledger guard, fetch or create the ledger, take only free insights, write the allocation before generating.
- Internal analysis, identify the central claim.
- Identify the strongest source faithful hook.
- Identify the dominant narrative mode: story, shift, diagnostic, framework or manifesto.
- Identify the conclusion the video actually earns.
- Select 3 surgical hashtags exclusively from the Appendix bundles, exact canonical phrases, no invention, no synonym, no combination.
- Keep that analysis internal: it never lands in the source page.
- Write LinkedIn: 1500 to 2800 characters targeting 2000 to 2500, extreme opinion hook on line 1, airy paragraphs, 5 hashtags max, no comment reply and no alternative.
- Write X: one standalone native post, 280 characters max, 2 to 4 short lines, no hashtag by default.
- Write Threads: 200 to 500 characters, genuinely distinct from X, more relational and scene led without weakening the claim.
- Write Facebook: 400 to 800 characters, hook plus 2 or 3 short paragraphs plus a closing line, exactly 5 hashtags.
- Write TikTok: 100 to 300 characters, shock line plus 1 or 2 development lines, raw and frontal, exactly 5 hashtags.
- Write Instagram: 200 to 500 characters, shock line plus 3 to 5 breathing lines plus a closing line, exactly 5 hashtags.
- Self check the 6 outputs: lengths in range, every claim traceable to the script, zero forbidden CTA, zero dash, every surgical hashtag an exact bundle entry, X and Threads genuinely distinct, and the text making sense with the full horizontal video attached.
- Write the result into the source page as a parent toggle Six-Platform Long-Form Captions [date] with exactly 6 child toggles, in the fixed platform order.
- Put only the paste ready published text plus its hashtags in each child toggle: no counts, no labels, no editorial notes, no alternatives, no code block.
- Update the 6 children in place instead of duplicating when a parent toggle of the same name already exists, preserving unrelated page content.
- VIDEO LENGTH RULE: when the full video exceeds a platform cap, Threads 5 minutes and LinkedIn about 15 minutes native, the post ships as NATIVE TEXT ONLY. No truncated video, no external link, no forced YouTube redirection.
- Return only 3 things: the source page link, the confirmation that 6 paste ready captions were written, and any fidelity issue that genuinely needs an AL decision.
- One parent toggle in the source long form page with 6 paste ready captions: LinkedIn, X, Threads, Facebook, TikTok, Instagram, in that fixed order.
- The Insight Ledger updated with the allocations.
- No planner row, no database row, no file, no schedule, no PostFast draft, no upload, no publication. All of it is out of scope by design.
- AL pastes and publishes the 6 captions himself, and settles any flagged fidelity or written profanity point.
What it does · inputs, steps, outputs
- One long form Notion page and its script. The page states this is its only input.
- Phase 0 invariants in parallel: the source page and its full script, no script means stop and ask AL, the Newsletter Grammar which is the law of this email, Alex Tone, and Multi-Platform Grammar sections 9 to 11 only.
- The Script Clean sub-page wins over the raw one when both exist.
- The Notes of the previous newsletter rows, read to find the position in the fixed 4 send link cycle.
- Live plannings for the send slot.
- INSIGHT LEDGER of the source video.
- Phase 0, fetch the source page and its script, stop and ask AL if there is none.
- Phase 0, fetch the Newsletter Grammar, Alex Tone, and the multi-platform sections 9 to 11.
- Phase 0 GATE, if the Newsletter Grammar still carries its draft marker, tell AL and wait for his explicit go.
- Ledger guard, fetch or create the ledger, use only free insights, write the allocation before generating.
- Phase 1, read the entire transcript, taking the Script Clean sub-page when the script lives there.
- Phase 1, pick the dominant angle plus at most one secondary angle.
- Phase 1, assign one Mode and one Audience Segment.
- Phase 1, extract 2 to 3 hook candidates from the script itself, word to word or lightly condensed.
- Phase 2, write 3 subject candidates under the grammar rules, applying the subject and hook collision rule.
- Phase 2, write the email: hook of 1 to 3 lines, body of 400 to 700 words on one angle, video pivot with the naked YouTube link, close with the mandatory reply ask.
- Phase 2, no greeting line and no signature, the sending tool appends the signature.
- Phase 3, run the 9 checks: dashes, emoji, CTA vocabulary, coaching and curative vocabulary, rhetorical questions, medical directives, word count floor 300 and ceiling 900, anti AI heuristics, source fidelity.
- Phase 3, read the fixed 4 send cycle position from the Notes of the previous rows, cold start being cycle 1 of 4.
- Phase 4, create exactly 1 row in Newsletter Per Long-Form Stack with the 11 property values.
- Phase 5, report the row link, the 3 subjects, the angle, mode and audience, the word count and the self check results.
- Phase 5, set the send date to the NEXT occurrence of the live slot, and remind AL that nothing goes out while Validation is No.
- HUMAN GATE, AL reviews the row, edits the body or swaps the subject, then flips Validation to Yes. The run never does it.
- Exactly 1 row in Newsletter Per Long-Form Stack: Titre Newsletter W{ISO week}, Description carrying the paste ready email, Notes carrying the 3 subjects, the preview text, the mode, the audience, the cycle position and the self check summary. Validation No, Advance Draft Idea, Status Not started, Content Type Standalone, From YouTube Long Form.
- The row body shows the subject, the 2 alternates and the preview text, then a toggle holding the exact email text and nothing else.
- The Insight Ledger updated. The newsletter angle is what the video does NOT say, so it should consume few or no insights, but it still reads the ledger to verify it repeats nothing.
- Nothing is sent. Once AL flips Validation to Yes, the dispatch worker, daily cron 06:30 UTC, schedules the broadcast at the row date.
- Contradiction kept from the page itself: phase 4 says to leave the publication date empty while phase 5.2 says to set it to the next slot. Not reconciled there.
What it does · inputs, steps, outputs
- ONE source: the long form video page with its clean script, or an Improvised source, an idea, a note, a few lines, a spoken thought from AL. An already published essay stops the run as a probable duplicate.
- Phase 0, first action before anything else, anti contamination, never write from memory: Substack Grammar and Rules fetched live, plus the memory rules on dashes, invention and filtering.
- The References bank, where validated references get filed.
- Destination: Substack Pipeline, a direct queue with no backup base and no Validation field.
- INSIGHT LEDGER of the source video, only when the source traces back to a video.
- Phase 0.1, fetch the Substack grammar live.
- Phase 0.2, read the 3 critical memory rules.
- Ledger guard, fetch or create the ledger, use only free insights, write the allocation before generating.
- Phase 1, read the whole source.
- Phase 1.1, pick ONE central angle and develop it in depth. Never a recap of several angles.
- Phase 1.2, assign one Mode.
- Phase 1.3, assign one Audience Segment.
- Phase 1.4, set the size: L by default at 2500 to 3500 words, M at 1200 to 2000 when the source is under 40 min or mono thesis. Tell AL before writing when an Improvised idea is too thin.
- Phase 2, HUMAN GATE: propose any historical or philosophical reference to AL and state who, what work, what concept and what structural job it does in this essay.
- Phase 2, cap at 1 to 2 anchors, taken from the source itself or explicitly validated by AL.
- Phase 2, WAIT for AL validation. Nothing is written before it.
- Phase 2, file each validated reference in the References bank in the standard format.
- Phase 3, write the essay: concrete opening, escalation layer by layer, a single pivot, an explicit synthesis, a close of 2 to 4 sentences, never a CTA.
- Phase 3, format with H2 sections only, paragraphs of 3 to 6 sentences, numbered lists only, no bold in the body, italics reserved for works and foreign words.
- Self check, grep dashes, non numbered bullets, H3 headers, bold in body, CTA vocabulary and rhetorical questions. Tolerance zero, fix and re-run.
- Pose 1 row in the Substack Pipeline and report to AL.
- 1 row in the Substack Pipeline, a direct queue: title from the grammar title rules, the FULL essay in the row body as prose with no code block, Content Type Essay, Audience Segment, Mode, From, Advance Draft Idea, Status Not started, source link.
- The Insight Ledger updated, and the validated references filed in the References bank.
- A report with the title, the word count, the mode, the audience, the references used and the row link.
- AL validates the references BEFORE writing, that gate is blocking. Publication stays manual.
- Gap kept from the page itself: no scheduling guard and no date property is described there, so how that row gets a date is written nowhere.
What it does · inputs, steps, outputs
- The input block filled by AL: video, source type, pin type, destination page, go. slug, pin count, dry run flag.
- The Pinterest Grammar, fetched entirely and applied in full.
- Live mutable values re-fetched at the moment of use and never cached across phases: the pinterest planning anchor of content-system for dimensions, field limits, cadence and hard rules, plus the weekly schedule days and slots.
- PostFast platform specs, the Pinterest Content Planner, the YouTube Long Form Content Planner Past view for source resolution, the secrets file, the PostFast API for accounts and boards, the go. short link checked with a no redirect curl, and the HTML pin master to clone.
- Write the scope line FIRST: Pinterest only, every other format rule ignored.
- Phase 0.0, resolve the source: prose is used as is, a Notion URL is fetched, empty means stop and ask AL, latest or a number is resolved against the planner Past view.
- Phase 0.0, find the Script Clean or Script sub-page, and stop if there is none.
- Phase 0.0, ANNOUNCE the resolved source out loud before continuing. Mandatory, always.
- Phase 0.1 to 0.9, print the mode, check the 3 secrets, confirm Notion auth and the 7 canonical board options, confirm content-system answers 200 with the pinterest anchor, capture the PostFast Pinterest account id, map the 7 board names to their ids, read the API docs, check the go. slug returns a 302 carrying the pinterest UTM, list the angles already used for this source, confirm the output folder is writable.
- Phase 1, read the script and extract N DISTINCT angles, one punchline of 12 words max each.
- Phase 2, HUMAN GATE: print the angles and punchlines, stop, and wait for the go before authoring a single visual.
- Phase 3, clone the HTML master, fill the text nodes and render each pin to PNG in headless Chrome. Never through an image tool.
- Phase 4, write the per pin metadata with the field limits re-fetched live: title 100, description 500, alt text 500, 1 to 3 canonical boards, destination URL.
- Phase 5, run the self check greps, banned claim wording, practitioner claims, dashes, lengths, uniqueness, English, and print them line by line.
- Phase 6, HUMAN GATE: print the full table plus the rendered previews, stop, and wait for the go before any external action.
- Phase 7, re-fetch the weekly Pinterest schedule live, read the dates already taken, and assign the pins to the first free slots.
- Phase 9, create one row per pin in the Pinterest Content Planner with all the fields and the image keys.
- Phase 10, trigger the Pinterest auto-publisher webhook. Skipped in dry run.
- Report the Finder link, the row links, the webhook status, and the reminder that every pin still needs AL approval in PostFast.
- PNG pins in content/pinterest/[batch-slug]/: pin-01.png and up for static pins, pin-NN-p1 to p5 for multi-page pins.
- Media uploaded to PostFast via signed URLs, except in dry run.
- One planner row per pin: Status In progress when the media is uploaded, Not started in dry run, PostFast Image Keys in page order, PostFast Post Id left for n8n.
- While the weekly Pinterest line carries the ON HOLD stamp, rows are written WITHOUT a date and nothing is scheduled. The targeted slot is written in the row body, since that planner has no Notes column.
- The n8n publisher then sets each pin to Scheduled with approval pending and writes the post id back.
- AL gives 2 gos, angles then visuals, and approves every pin in the PostFast dashboard before anything publishes.
What it is · not a prompt, a register
- It is a REGISTER, one per long form video, and it is the law that stops the same punchline coming back on every platform.
- AL launches nothing and pre fills nothing. The ledger is filled by runs, never by hand.
- The FIRST prompt of the cycle that exploits the video creates it, automatically.
- The canonical creator is Prompt Multi-Platform Generation, because it already reads the whole transcript in its phase 1.
- Any other patched prompt that finds no ledger creates it before generating, so no run ever selects from a partial or absent list.
- Where it lives: a CHILD PAGE of the video row inside the YouTube Long Form Content Planner, titled Insight Ledger V{N}, or Insight Ledger {video title} when there is no V number. No planner property and no schema is touched.
- One table, 15 to 25 rows at creation, 4 columns.
- Insight: a short verbatim quote of the script, 1 to 2 lines. Zero invention.
- Label: 3 to 6 words naming the mechanism or the moment.
- Allocated to: EMPTY at creation, and at most ONE value ever, from the closed format list.
- Allocated on: the date, written together with the allocation.
- The COMPLETE list, not the top 8. The second tier insights are exactly what the smaller formats need so they stop cannibalizing the signature lines.
- Closed allocation list: Shorts, X, Quote, Carousel Long Form plus its satellites, Carousel Substack plus its satellites, Threads, LinkedIn, Newsletter, Substack essay, the 6 full video captions, and Pinterest.
- One insight equals ONE format outside the long form. A signature punchline appears in exactly one derivative format.
- The long form itself is not a format here: the video keeps everything, the ledger governs derivatives only.
- WHY THE CONFUSION EXISTS: on the LF board the step Create Insight Ledger sits inside the phase labelled [LK,X,TH} only because the first consuming prompt lives there. The ledger was never limited to those 3 platforms. The board step label was made explicit on 09/08/2026 so it can no longer be read that way.
- ONE ALLOCATION UNIT: a carousel and its LinkedIn, X and Threads satellites count as ONE format and one allocation. From that write the insight is locked for every other format, including the LinkedIn, X and Threads posts derived straight from the long form.
- Exclusions: Improvised and non video sources have no ledger, and Pinterest is authored and never video derived.
- Carried: Multi-Platform Generation (creator), Six-Platform Long-Form Captions, Shorts Titles and Captions, Quote Extraction, Quote, Carousel from Long-Form, Carousel from Substack, Weekly Newsletter, Substack Essay.
- Not patched on purpose: Shorts Auto-Publisher (publishing mechanics only, its captions are governed upstream), Description Generation YouTube (the video own surface, not a derivative), Cross-platform from Carousel (consumed as a grammar, the carousel runs already carry the guard), Pinterest (authored, never video derived), and every production prompt (they build the video, they do not consume it).
- Nothing to launch, ever.
- Full override: he can free, reassign or add insights directly in the ledger, and his edits win.
- Prompts stop and ping him when a format cannot work without an already allocated insight. They never double allocate silently.
- Nothing else writes to the ledger: no workflow, no cron.
NOTES (AL 25-26/07) 4 rules: schedule source of truth, one prompt one place, Multi-Platform settled, archive never delete
1. Every production prompt re-fetches content-system §5 Plannings at run time — the schedule source of truth. Change the planning, the prompts follow.
2. One prompt lives in ONE place in the workflow. The LF board enforces it on assignment (move / bypass / cancel). Same rule now applies to URLs, except Finder folder paths which several steps legitimately share.
3. Multi-Platform Generation settled on 28/07/2026: one live grammar (v1.5 merged) and one live prompt (v2.1, 5 sub-agents → Backup Bases). The 15/05 and 24/05 grammars and the v1.3 and v2.0 prompts are archived, URLs unchanged.
4. Obsolete pages are archived, never deleted: old script/visuals prompts under the archived Visual Designs hub, old shorts prompts in the "À trier" zone.
A.4 · Waves & triggers: what fires what, in parallel · last updated 2026-09-22
Overview of the EO content production flow. Long-form is the source of everything. Once the LF script is available, many processes fire in parallel (waves) to produce all of the week's content in ~4h instead of 12h sequentially.
This tree is the guardrail for understanding the arrows in /backdata/lf-cross-platform-content (Gantt View). If a new content type appears or the sequence shifts, update HERE at the same time as in the board (4-legged stool — see Grammar+Prompt agent contract §11).
Main triggers (what fires what)
Two kinds of arrow below: content dependency (A must exist before B) and machine trigger (a cron or a webhook actually fires B). The machine triggers are tagged ROBOT.
Waves logic: the parallelized batch lets us chain all of the week's content in ~4h instead of 12h sequentially. If a new content type appears or a trigger changes, update here + in the board /backdata/lf-cross-platform-content at the same time (4-legged stool, non-negotiable).
B · Notion content databases: one base per platform · rewritten 2026-08-08
2026-08-08: the full Notion tree snapshot that lived here (dated 2026-05-17) was retired: it described a tree …
2026-08-08: the full Notion tree snapshot that lived here (dated 2026-05-17) was retired: it described a tree that no longer exists. The real tree, re-fetched live on 2026-07-29, is maintained in A.3 · Notion pages. This section now keeps only the list of the CURRENT content databases. Rule: one base per platform, backup rows live inside the same base, no separate backup bases.
| Base | Role & grid |
|---|---|
| Shorts EO Posting Planning | Unified shorts base (former planner + backup merged). Columns: Status / Posting Date / Short # / Associated LF / tbprompt / PostFast keys. |
| Quote Content Planner | Quotes on the Tuesday + Friday grid. TT/IG/FB only since 2026-08-04. Since 2026-08-08 the base carries Caption TT / Caption IG / Caption FB columns (Platform Voice Matrix, one distinct caption per platform; legacy Caption column kept as fallback for old rows). |
| Carousels Content Planner | Carousels, Wednesday slot. The Posting Date is written on the MAIN row. |
| Pinterest Content Planner | 7 boards, daily Sunday to Saturday, 8-11 PM, Vietnam time since 22/09/2026 (the Eastern grid is retired). |
| Lifestyle Content Planner | Lifestyle, Mondays 12:00 UTC (19:00 Vietnam). 13 posts scheduled ahead as of 2026-08-08 (verified: every Monday through 2026-11-02). Carries Caption TT / Caption IG / Caption FB columns since 2026-08-08 (Platform Voice Matrix; legacy Caption column as fallback). |
| LinkedIn Repurposed Content Planner · X Repurposed Content Planner · Threads Repurposed Content Planner | One base per platform. Backup content lives INSIDE each base as Status=Backup rows; the separate Backup Bases are deleted as of 2026-08-08. X output is long posts only (X threads dropped, decision 2026-08-08). |
| YouTube Long Form Content Planner | Long-form source planner: numbering, folders, statuses. Feeds every derived type. |
C · Status per content type: 8 types · rewritten 2026-08-08
Statuses re-audited 2026-08-08. Measured on the VPS via the n8n REST API: 5 content workflows + the error notifier, all active. Databases: one base per platform, see B. Full circuits and readiness detail per type: A.2.
Platform Voice Matrix (AL decision 2026-08-08): a caption NEVER duplicates between two platforms…
Platform Voice Matrix (AL decision 2026-08-08): a caption NEVER duplicates between two platforms. Same idea, distinct TT / IG / FB entries; X, Threads and LinkedIn were already differentiated by the Multi-Platform Grammar. Canonical contract: Platform Voice Matrix (Notion). Deployed downstream (measured live 2026-08-08): shorts workflow v4 parses YT:/TT:/IG:/FB: blocks, quotes v6 and lifestyle v2 read the Caption TT/IG/FB columns, all three with fallback to the legacy single caption so old rows keep publishing. The carousels workflow is still v3 (2026-07-28, SM:/FB: blocks): the three distinct captions exist at prompt level, the per-platform split is not deployed in that robot yet.
C.1. Carousels LIVE v1.1
- Two pipelines per long-form, both generated from the LF script: Carousel Long Form (publishes, takes the weekly Wednesday slot) + Carousel Substack (goes to backup, no date). Composition by ARC (Section J of the carousel doctrine, 4 tests).
- Captions: the carousel prompts produce three DISTINCT IG / TT / FB captions since 2026-08-08 (Platform Voice Matrix; the old shape had IG = TT). The deployed workflow is still v3 (2026-07-28) and parses
SM:(IG+TT) /FB:blocks: the per-platform split is not in the robot yet. - Planner: Carousels Content Planner (Posting Date on the MAIN row) · workflow
EO Carousels Auto-Publisher(lmr1cbW3emlCucZw, active).
C.2. Long-Form video SOURCE
- The single heavy source: 3 videos/week (Sunday, Tuesday, Thursday). Every other type derives from the LF script (map in A.1, launchable prompts in A.0).
- Planner: YouTube Long Form Content Planner · no n8n workflow, YouTube upload manual by AL.
C.3. Shorts LIVE AUTO
- Driven by the orchestrator Prompt Shorts Titles & Captions v1.0 (2 AL gates), which chains 5-Batch Thumbnails then Prompt Shorts Auto-Publisher, the canonical page: the deployed workflow JSON wins over every text. YouTube Shorts included, published automatically via PostFast (
youtubeTitle+youtubeThumbnailKey) since workflow v3. Workflow v4 (deployed 2026-08-08, Platform Voice Matrix): the Description carriesYT:/TT:/IG:/FB:blocks, one distinct caption per platform; LinkedIn and X receive no shorts any more; legacySM:rows fall back to the old single-caption behavior. TikTok stays a draft finished by hand in the app. - Planner: Shorts EO Posting Planning (unified base) · workflow
EO Shorts Auto-Publisher(NgJNAYfiTgxqehu2, active).
C.4. Newsletter LIVE
- Kit broadcasts are created by the
eo-backup-workercron (newsletter-dispatch, daily 06:30 UTC) from validated Notion rows; AL's Gmail signature (copied verbatim in the worker) appended automatically since 2026-08-04. Send slot: Saturday 2:00 PM Vietnam, the permanent slot (AL decision 2026-08-09). W32 went out Sunday 09/08 14:00 Paris time, before the switch, as a one-off exception (measured in the Notion base); W31 went out Saturday 01/08. - Base: Weekly Newsletter Per Long-Form Stack · no n8n workflow (CF Worker direct to Kit).
C.5. Cross-platform LinkedIn / X / Threads LIVE
- Prompt Multi-Platform Generation v2.4 (3 parallel sub-agents) writes into the single base per platform. X output is long posts only: X threads dropped, decision 2026-08-08.
- Planners: LinkedIn / X / Threads Repurposed Content Planners (backup content = Status=Backup rows, separate Backup Bases deleted 2026-08-08, links in B) · no dedicated n8n workflow.
C.6. Quote LIVE
- Tuesday + Friday grid, TT/IG/FB only since 2026-08-04. X and Threads are out of the quotes workflow; X/Threads quote satellites go through Prompt Quote into the Repurposed planners.
- Workflow code v6 (deployed 2026-08-08): per-platform captions from the
Caption TT/IG/FBcolumns (legacyCaptionfallback),approvalStatus=APPROVEDdirect (no PostFast approval step any more), every future-dated armed row processed, past date = visible error. Fired automatically every Monday 04:30 UTC by thequotes-triggercron ofeo-backup-worker(webhook closed by auth header). - Planner: Quote Content Planner · workflow
EO Quotes Weekly(yuWyWuPpjiI77ppd, active).
C.7. Pinterest LIVE
- 7 boards, visuals rendered as HTML headless (never ChatGPT image-gen), daily Sunday to Saturday 8-11 PM, Vietnam time since 22/09/2026 (the Eastern grid is retired). AUTHORED content, never recycled.
- Planner: Pinterest Content Planner · workflow
EO Pinterest Auto-Publisher(KLWzgswqM59G3hIE, active).
C.8. Lifestyle LIVE
- Feed-first grade, Mondays 12:00 UTC (19:00 Vietnam). 13 posts scheduled ahead as of 2026-08-08 (verified: every Monday through 2026-11-02).
- Workflow code v2 (deployed 2026-08-08): per-platform captions from the
Caption TT/IG/FBcolumns (legacyCaptionfallback), IG + TT + FB, one photo per post, no music,approvalStatus=APPROVEDdirect. No caption available = signaled skip, never a caption-less post. - Planner: Lifestyle Content Planner · workflow
EO Lifestyle Auto-Publisher(QRVpsd9Z3r9vBbpU, active).
D · Prompt coverage: guards, hashtag source, coverage map · rewritten 2026-08-08
2026-08-08: the May 2026 "mention check per prompt" that lived here is obsolete: it graded prompts that have since been rewritten. Prompt inventory and freshness now live in the Notion coverage map: Grammars + Prompts status (coverage map).
Since 2026-08-04 every date-writing prompt carries a SCHEDULING GUARD (fetch content-system#plannings live at …
Since 2026-08-04 every date-writing prompt carries a SCHEDULING GUARD (fetch content-system#plannings live at write time + query the destination planner for already-scheduled rows, then append to the NEXT FREE slot; collision = stop and report, never overwrite) and the HASHTAG SOURCE rule (hashtags come from the Appendix, never invented). The 8 guard-bearing prompts:
- Prompt Shorts Auto-Publisher
- Prompt Shorts Titles & Captions v1.0 (orchestrator)
- Prompt Quote
- Prompt Weekly Newsletter
- Prompt Pinterest Generation
- Prompt Carousel Long Form
- Prompt Carousel Substack
- Prompt Lifestyle Caption
Any new prompt that can write a Posting Date must receive the same guard block.
Voice Matrix self-check (2026-08-08): every caption-producing prompt (Shorts Titles & Captions, Lifestyle Caption, Quote, Carousel Long Form, Carousel Substack) fetches the Platform Voice Matrix and checks that the TT, IG and FB entries are pairwise different. Two identical entries = regenerate.
First line rule (2026-08-08, second pass): the difference between the TT, IG and FB captions must live in the …
First line rule (2026-08-08, second pass): the difference between the TT, IG and FB captions must live in the FIRST LINE, because feeds and the PostFast calendar truncate the preview around 55 to 80 characters. Hard test carried by the five caption prompts plus Quote Grammar E.1 and G.1: longest common prefix over the first 60 characters, pairwise, must stay under 25 characters. On a quote the punchline lives on the image and is never re-cited in a caption opening; on shorts the fix always lands on the TikTok caption, never on the YouTube SEO description.
INSIGHT LEDGER GUARD (2026-08-08, created after this section's refresh): one insight = one format outside the …
INSIGHT LEDGER GUARD (2026-08-08, created after this section's refresh): one insight = one format outside the long form. One ledger per video, a child page of the video's row in the YouTube Long Form Content Planner; exclusive allocation written BEFORE generation; final self-check in every consumer prompt. The 9 guard-bearing prompts: Multi-Platform Generation v2.4 (canonical ledger creator), Six-Platform Long-Form Captions, Shorts Titles & Captions, Quote Extraction, Quote, Carousel from Long-Form, Carousel from Substack, Weekly Newsletter, Substack Essay from Long-Form. Deliberately not patched: Shorts Auto-Publisher, Description Generation YouTube, Cross-platform from Carousel, Pinterest, and the production prompts. Doctrine: Insight Ledger EO (Notion).
E · Useful pointers · last updated 2026-09-22
E.1. EO Tools (AL frontend)
tools.eliteoutsiders.com/architecture— this page.tools.eliteoutsiders.com/backdata/content-system— visual + planning + 2-GO flow doctrine.tools.eliteoutsiders.com/backdata/lf-cross-platform-content— editable Gantt LF Cross Platform Content (Long + Cross unified).- How to fill it in (data schema, right-click URL/Prompt, owners + apps, textColor): SOP — Filling in the lf-cross-platform-content page (Notion)
tools.eliteoutsiders.com/backdata/quotes— live tool quote pipeline simulation + planner.
E.2. n8n workflows (VPS 72.62.187.71:5678) · checked live 2026-08-08
EO Shorts Auto-Publisher· idNgJNAYfiTgxqehu2(active).EO Quotes Weekly· idyuWyWuPpjiI77ppd(active, TT/IG/FB only).EO Carousels Auto-Publisher· idlmr1cbW3emlCucZw(active).EO Pinterest Auto-Publisher· idKLWzgswqM59G3hIE(active).EO Lifestyle Auto-Publisher· idQRVpsd9Z3r9vBbpU(active).EO Error Notifier· idQB2gHEg5a7Y9qffi(active), wired as theerrorWorkflowof the 5 workflows above (checked 2026-08-08, see F).- All 5 content workflows are triggered by webhook, and every webhook call carries an auth header. Two triggers are automated by
eo-backup-workercrons (verified inwrangler.toml2026-08-08):quotes-triggerMonday 04:30 UTC andnewsletter-dispatchdaily 06:30 UTC (the newsletter one talks to Kit directly, no n8n). Full cron inventory: /crons. - Known trap: a recreated Notion database must be re-shared with the
N8N-VPSintegration, otherwise the workflow reads an empty base and finishes green.
E.3. Notion HQ
- Main hub:
Elite-Outsiders(ide0428224657183f3997101639d1e75f7). - Claude Code HQ universal patterns (id
368282246571819882a2fdb4fec0ab3d) + EO specifics (id352282246571814faf77fc60714cbbd7). - Grammars + Prompts status (coverage map): the prompt inventory, see D.
- Platform Voice Matrix (canonical voice contract per platform, 2026-08-08) · parent hub: EO content production doctrine.
- Insight Ledger EO (one insight = one format outside the long form, one ledger per video, guard in 9 prompts, 2026-08-08) · same parent hub · see D.
- Board-filling SOP for lf-cross-platform-content: SOP: Filling in (id
36828224657181518130fec68875c65f).
F · Error notification: n8n implementation state · last updated 2026-09-22
Doctrine (specifications + implementation pattern) on the Notion doctrine. Here, only the live status per workflow.
F.3. Implementation state as of 2026-08-08
EO Error Notifier(QB2gHEg5a7Y9qffi, active) is wired as theerrorWorkflowof all 5 content workflows (Shorts, Quotes, Carousels, Pinterest, Lifestyle). Measured live on the VPS via the n8n REST API on 2026-08-08.- 2026-08-08 · structural blind spot (documented 2026-08-03): the errorTrigger is structurally blind to zero-item runs. A workflow that matches nothing (empty query, base not shared with the
N8N-VPSintegration, no Ready row) finishes green and never fires the error path. The SCHEDULING GUARD blocks inside the prompts (D) compensate on the write side: the agent that writes the rows verifies the planner state itself.
G · Carousel production flow (visual) · banner added 2026-08-08
What changed since this diagram · 2026-08-08 (diagram of 2026-05-21 kept as historical reference)
- Two carousel pipelines now run per long-form, both generated from the LF script: Carousel Long Form (publishes, weekly Wednesday slot) and Carousel Substack (goes to backup, no date).
- Slide composition is ARC-based (Section J of the carousel doctrine, 4 tests), not the fixed dark-zone layout drawn below.
- The Posting Date is written on the MAIN row of the Carousels Content Planner, under the SCHEDULING GUARD (next free slot, see D).
- The PostFast accounts are pinned in the workflow, and the webhook call carries an auth header.
Diagram of the carousel pipeline post-prompt (text generation is already done by Prompt Carousel Generation from Substack v1.0 or from Long-Form v1.0). Covers image-gen, composition, PostFast upload, n8n trigger, drafts. Stops before actual publication (publication = AL approves drafts in PostFast UI + publishes Substack / X Article manually).
The two diamonds GO 1 and GO 2 are AL's explicit approval checkpoints. Nothing fires automatically between them. Drafts vs scheduled doctrine: Notion, Carousel Production Pipeline page.
_sources/ until publication.carousel-10.html with dynamic layout per slide (number pinned top-left, text placed according to the visual's dark zone). Chrome headless → PDF → pdftoppm. 10 composites 1080×1350./file/get-signed-upload-urls in batches of 8 max. 11 images (10 slides + 1 cover) uploaded via direct PUT to S3. Keys returned.http://72.62.187.71:5678/webhook/carousels-trigger. Workflow EO Carousels Auto-Publisher creates 6 PostFast entries: IG/TT/FB carousel DRAFT (10 images), X/LI/Threads SCHEDULED Wed 12-14h with cover. Row Status → Done.Substack URL + X Article URL in the Notion row.Posted At. Otherwise → ping AL with a checklist of what's missing.Referenced pages: Carousel Grammar Common Rules · Carousel Production Pipeline · Carousels Content Planner DB.
H · Shorts production flow (visual) · banner added 2026-08-08
What changed since this diagram · 2026-08-08 (diagram of 2026-05-21 kept as historical reference)
- The pipeline is driven by the orchestrator Prompt Shorts Titles & Captions v1.0 with 2 AL gates (titles/captions table, then covers); it chains 5-Batch Thumbnails, then the Auto-Publisher.
- YouTube Shorts publish AUTOMATICALLY via PostFast (
youtubeTitle+youtubeThumbnailKey) since workflow v3: no more manual YouTube Studio scheduling. - Workflow v4 deployed 2026-08-08 (Platform Voice Matrix): the Description carries
YT:/TT:/IG:/FB:blocks with one DISTINCT caption per platform. LinkedIn and X receive no shorts any more. LegacySM:rows fall back to the old single-caption dispatch (IG + FB + TikTok draft), nothing breaks. - Canonical page: Prompt Shorts Auto-Publisher. The deployed workflow JSON wins over every text, including this diagram.
- TikTok remains a PostFast draft, finished by hand in the app.
- Planner: the unified Shorts EO Posting Planning base (Status / Posting Date / Short # / Associated LF / tbprompt / PostFast keys).
Diagram of the shorts pipeline post-prompt (generation of the 5 ChatGPT thumbnail prompts is carried by Claude…
Diagram of the shorts pipeline post-prompt (generation of the 5 ChatGPT thumbnail prompts is carried by Claude Code via the orchestrator Prompt Shorts 5-Batch Thumbnails for Claude Code). Covers Gling extraction, image-gen × 5, post-prod composition, PostFast upload, n8n webhook trigger, drafts. Stops before actual publication (publication = AL approves drafts in PostFast UI).
The two diamonds GO 1 and GO 2 are AL's explicit approval checkpoints. Nothing fires automatically between them. Drafts vs scheduled doctrine: Notion, Carousel Production Pipeline page.
Shorts Content Planner (DB 31a28224-6571-8243-b5b2-014dcbf4daef), one per short, with the script in the body. Status: Not started.Vn_Thumbnail_Prompt toggle in the corresponding Notion page. Grammar reference: Thumbnail Shorts Grammar.VNSfs/ until publication.#0a0a0c (top 20% + bottom 20% padding reserved for platform UI). 5 final thumbnails ready to upload./file/get-signed-upload-urls. For each short: 1 video clip + 1 composite thumbnail uploaded via direct PUT to S3. Keys returned in the format video/<uuid>.mp4 + image/<uuid>.png.PostFast Media Key (video) + PostFast Thumbnail Key (IG Reels cover) + Description with YT:/TT:/IG:/FB: blocks (one distinct caption per platform since 2026-08-08; legacy rows carry SM:) + Date de Publication + Status → Ready.http://72.62.187.71:5678/webhook/shorts-trigger. Workflow EO Shorts Auto-Publisher (id NgJNAYfiTgxqehu2) queries Notion Status=Ready and explodes per platform via the Description blocks (v4, deployed 2026-08-08): YT→YouTube Short, TT→TikTok draft, IG→Instagram REEL + grid, FB→Facebook Reel, each with its own caption; legacy SM: rows fall back to one caption for IG + FB + TikTok draft. LinkedIn and X are out. Schedules via PostFast at the planned date. Row Status → Posted.Posted At. Otherwise → ping AL with a checklist of what's missing.Referenced pages: Thumbnail Shorts Grammar · Thumbnail Long-Form Grammar · n8n workflow NgJNAYfiTgxqehu2 (webhook /webhook/shorts-trigger, active since 2026-05-21) · Shorts Content Planner DB 31a28224-6571-8243-b5b2-014dcbf4daef.
I · Quote production flow (visual) · banner added 2026-08-08
What changed since this diagram · 2026-08-08 (diagram of 2026-05-23 kept as historical reference)
- Quotes now run on the Tuesday + Friday grid (Vietnam time), no longer one Saturday slot.
- Platforms are TT/IG/FB only since 2026-08-04: X and Threads were removed from the quotes workflow.
- X/Threads quote satellites go through Prompt Quote into the X/Threads Repurposed planners, outside this workflow.
- Workflow
EO Quotes Weekly(yuWyWuPpjiI77ppd, active) stays webhook-triggered, with an auth header on the call, and is now fired AUTOMATICALLY every Monday 04:30 UTC by thequotes-triggercron ofeo-backup-worker: AL arms rows in Notion, the following Monday they get scheduled without any manual trigger. - Workflow code v6 (2026-08-08, Platform Voice Matrix): captions come from the
Caption TT/IG/FBcolumns of the planner, one distinct caption per platform (legacyCaptioncolumn as fallback). The visual stays identical across platforms. - Posts go out
approvalStatus=APPROVEDdirect: the PENDING_APPROVAL + Chrome-MCP-approval loop drawn in Phases 5-7 below is retired (quotes carry no music, AL decision). Past date = visible error, all future-dated armed rows processed (no more single-pick, no more 10-day window).
Diagram of the quote pipeline in 8 phases (Extraction → Clean-up → Production → AL+check → n8n → TikTok music …
Diagram of the quote pipeline in 8 phases (Extraction → Clean-up → Production → AL+check → n8n → TikTok music → Approve → Skip IG/FB music). 1 quote/week via PostFast to respect the 10-day TikTok safe window. PostFast pattern: status: SCHEDULED + approvalStatus: PENDING_APPROVAL + scheduledAt: <Posting Date>. LinkedIn excluded from the quote pipeline (no LK publication = no planner to fill). Qxx = sticky identity: a row keeps its Qxx for life, only its Posting Date moves on a reshuffle.
Phases 2, 4, 6, 8 are AL touchpoints (manual). Phases 1, 3, 5, 7 are agent touchpoints. Everything stays blocked on the PostFast side until AL has approved in Phase 7 (automatic safety net).
/backdata/content-system, (3) Distribution algo + Multi-pages Option C derivation + HTML simulation, (4) Renumber Posting Dates after validation (Qxx sticky, not re-assigned), (5) Canva end-to-end (clone EAHIywfFr_k → ops checklist per page type → fetch safe-zone at the moment of each clone → P2 loop bound-check → export PNG → save iCloud → P3 pixel check), (6) PostFast signed-URL upload → keys into Notion, (7) Creates 2 satellites X+Threads (LK excluded), (8) Verify + Status: In progress.http://72.62.187.71:5678/webhook/quotes-trigger. Workflow yuWyWuPpjiI77ppd picks 1 quote (next Posting Date ≤ 10-day TikTok window), pushes 5 platforms via PostFast API: IG/TT/FB (visual + caption + hashtags + CTA 1/4), X (plain text 280 chars max), Threads (plain text 500 chars max). LinkedIn excluded. All SCHEDULED + PENDING_APPROVAL + scheduledAt=Posting Date. TikTok = tiktokIsDraft: true. Timing note: the TikTok draft lands in the native inbox at exact scheduledAt (not before). Precise timing of the PostFast → natives push to be measured empirically (see Cross-platform music RETEX).Posted At in Notion. Otherwise → ping AL with a checklist of what's missing. To be built out as a separate Claude Code project (TBD).Referenced pages: Quote Grammar · Prompt Quote · Prompt Extractions (placeholder) · n8n EO Quotes Weekly runbook · Live tool /backdata/quotes · Quote Content Planner DB · Satellites: X Repurposed · Threads Repurposed · Cross-platform music RETEX · n8n workflow yuWyWuPpjiI77ppd (webhook /webhook/quotes-trigger).
J · Maintenance · rewritten 2026-08-08
- This refresh: sections B to J realigned to the live state on 2026-08-08 (their previous content dated from May 2026 and no longer matched reality). Part A: rebuilt 2026-07-28, refreshed 04-05/08/2026, then realigned 2026-08-08 evening (A.1 map labels, A.2 cards: quotes v6 TT/IG/FB, shorts v4, lifestyle Mondays, carousels v3, newsletter slot (permanent Saturday per the 09/08 correction; Sunday 09/08 was a one-off), satellites re-routed; A.3 kept as the dated 29/07 snapshot with a banner note).
- Workflow rule: any n8n workflow change = its canonical Notion page updated in the SAME session. For shorts the canonical page is Prompt Shorts Auto-Publisher: the deployed workflow JSON wins over every text.
- Part A = mirror of the prompts: any prompt or grammar change in Notion lands in Section A (A.0 list, A.3b master table) the same session.
- Platform Voice Matrix (2026-08-08): a caption never duplicates between two platforms. Any register change on the Voice Matrix page must be propagated to the consuming prompts (Shorts Titles & Captions, Lifestyle Caption, Quote, Carousel Long Form, Carousel Substack) the same session.
- Hours: every posting grid is Vietnam time, Pinterest included since 22/09/2026. Never hardcode times anywhere else: content-system is the single source of truth for scheduling, fetched live at write time (SCHEDULING GUARD, D).
- Update rule: on every major change to a content type, update this page in mirror (status sections B to J), and stamp the section date.
- Still in force (2026-07-25): pipeline applications are called apps, never "tools" ("tools" is the intranet itself) ·
/backdata/lf-cross-platform-contentis one-way (AL edits it, nothing writes INTO it) and its wording is AL's personal working language, never normalized · task text colors: green = production-ready, red = major attention point, yellow = caution · editable titles persisted in D1 (keyarchitecture_titles) · the content transformation map lives BOTH atop content-system §5 Plannings and in A.1 here: update both on any derivation change.