一键导入
write-supplemental
Produce a supplemental edition — variety coverage that builds the world beyond the Cycle Pulse. Any topic, any reporter, any format.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Produce a supplemental edition — variety coverage that builds the world beyond the Cycle Pulse. Any topic, any reporter, any format.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Baylight Authority Director Keisha Ramos. Generates construction updates, milestone announcements, development progress reports, and civic documents (deliverable filings, TIF reports, workforce agreements) for the $2.1B Baylight District project.
Phase 39.1 capability reviewer wrapper. Runs the deterministic editorial assertions against a compiled edition, surfaces blocking failures that should halt publish, and writes a markdown summary alongside the JSON.
Prepare all inputs for city-hall voice agents. Reads tracker, approvals, world summary, engine review, coverage ratings, previous log, canon, Mara directive. Writes pending decisions per voice.
Senior Photographer for The Cycle Pulse. Generates image prompts and photo selection for editions. Reads compiled edition + canon rules + institutions, produces 5-8 storyline-tied prompts.
Letters to the Editor desk agent for The Cycle Pulse. Writes citizen voice letters responding to cycle events. Use when producing letters section of an edition.
Close the feedback loop. Canonize to Supermemory, update world-data, write ratings to sheets, grade reporters, update criteria files, update newsroom memory. Type-aware — edition, interview, supplemental, dispatch all converge here.
| name | write-supplemental |
| description | Produce a supplemental edition — variety coverage that builds the world beyond the Cycle Pulse. Any topic, any reporter, any format. |
| version | 1.2 |
| updated | "2026-05-24T00:00:00.000Z" |
| tags | ["media","active"] |
| effort | high |
| disable-model-invocation | true |
| argument-hint | [topic] |
Step 3.4 envelope-wrap discipline + format-contract inline + Step 2 brief pre-extraction. v1.1 deferred all format-shape detail to [[../../../docs/EDITION_PIPELINE]] §Published .txt Format Contract; the S231 C94 let_walks_reset supplemental run surfaced three structural failure modes when Mags-during-compile re-interpreted that pointer:
| POPID | Name | Role | with header + |---|---| separator) for NAMES INDEX and dash-list for BUSINESSES NAMED. Parser scripts/ingestEditionWiki.js:294 requires strict pipe-format with first field matching /^[A-Z]+-[A-Z0-9]+$/; markdown-table form parses to 0 entities silently. Source-of-mis-training: editions/SUPPLEMENTAL_TEMPLATE.md v2.0 used markdown-table syntax on ARTICLE TABLE which Mags then patterned across the parser-strict sections."this cycle" cross-reference into "Edition 94" (Hal's source agent had complied with the prior rule; compile broke compliance). Note: governance.15 S233 carved out edition-number cross-references in editorial chrome contexts (See also / byline / sidebar) — so the specific G-S4 trigger is partially mooted, but the deeper principle stays: Step 3.4 is envelope-wrap, not editorial-pass.What changed:
output/reporters/<reporter>/articles/<source-cycle>_<slug>.md and reference that path in the brief rather than directing the agent to grep inside the full edition .txt.POP-NNNNN | Full Name | Role/Title) + BUSINESSES NAMED (BIZ-NNNNN | Name | Sector | Neighborhood); explicit warning against markdown-table syntax (silent-zero pattern); §What Step 3.4 IS / IS NOT framing (envelope-wrap not editorial-pass); verification gate citing expected ingestEditionWiki.js entity count > 0.editions/SUPPLEMENTAL_TEMPLATE.md v2.0 → v2.1 (G-S5 root cause fix) — added §NAMES INDEX + §BUSINESSES NAMED sections in strict pipe-format mirroring docs/media/EDITION_FORMAT_TEMPLATE.txt canonical exemplar; reformatted §Article Table from markdown-table to flat strict pipe so all three intake sections share consistent shape; ADR-0006 Contract A pattern notes inline.Cross-link: engine.26 follow-up filed for parser defensive-emit (warning when standalone BUSINESSES NAMED section has non-empty content but parser extracts 0 — same defensive-emit shape engine.24 added to NAMES INDEX S229 — fail-loud rather than silent-zero).
Out of scope (deferred): mechanical assembly script for Step 3.4 (operator-driven discipline holds for now via FORMAT CONTRACT inline + template alignment; mechanical guard files if format-contract violations recur).
Source: output/production_log_supplemental_c94_let_walks_reset_gaps.md (entries G-S3 + G-S4 + G-S5).
/write-supplemental [topic]
Supplemental triggers:
!`cat output/supplemental-triggers/triggers_c*.json 2>/dev/null | python3 -c "import json,sys; d=json.load(sys.stdin); print(f'{len(d)} triggers available'); [print(f' - {t.get(\"topic\",\"?\")} ({t.get(\"type\",\"?\")})') for t in d[:5]]" 2>/dev/null || echo "No triggers file — pick a topic or run checkSupplementalTriggers.js"`
Recent supplementals:
!`ls -1t editions/*supplemental* 2>/dev/null | head -3 || echo "No supplementals yet"`
The Cycle Pulse is the engine's newspaper — it reports what the simulation produced. Supplementals are where the world gets built. A restaurant review canonizes a restaurant. A neighborhood walk canonizes what that neighborhood feels like. A sports deep dive gives the dynasty texture beyond box scores. Every supplemental adds something to the world that the Cycle Pulse can't.
Supplementals reflect the current state of the world. Read the world summary (output/world_summary_c{XX}.md) before writing anything. If there's a health crisis in West Oakland, a food piece set there feels it. If the A's are 7-1, a Jack London walk has fans in jerseys. If Rosh Hashanah is happening across three neighborhoods, a culture piece acknowledges it. The supplemental lives in the same city as the edition — same weather, same nightlife, same mood. Different angle, same world.
Any reporter can lead a supplemental. Not just Carmen and Jordan. There are 24 journalists on the roster and most of them have never gotten a supplemental assignment. Mason Ortega is a former sous chef — give him a food piece. Sharon Okafor covers lifestyle — let her cover lifestyle. Kai Marston was a music blogger — give him First Fridays. The voice files are built for this. Use them.
The tone is not locked to civic drama. Supplementals can be breaking news, but they can also be a farmers market, a restaurant opening, a neighborhood walk, a sports feature, a weather story, a school profile. The city should feel like a city, not a council chamber.
GodWorld is a prosperity city. Dynasty-era Oakland. People buying homes, opening businesses, enjoying life. Not every story is displacement, struggle, or crisis. Include wealth, aspiration, joy, normalcy.
lookup_citizen(name) for citizens. get_roster("as") for A's players (contracts, quirks, positions — reads truesource). search_canon(name) for what's been published. No exceptions.docs/media/story_evaluation.md for story quality, docs/media/brief_template.md for brief structure, docs/media/citizen_selection.md for citizen handling. Same standards as sift — supplementals are editions too.output/world_summary_c{XX}.md for cycle texture — food, nightlife, famous people, weather, events./edition-print. Not part of this skill.search_canon and world-data queries. Wrap those excerpts via require('/root/GodWorld/lib/memoryFence').wrap(text, 'bay-tribune') before embedding them in the brief. Full convention: [[SUPERMEMORY]] §Memory Fence.Read the existing unified production log: output/production_log_c{XX}.md (legacy fallback production_log_edition_c{XX}.md if absent). This is the one-true-cycle source write-edition + city-hall both use — all of the cycle's work (civic + edition + supplemental) lives in one document.
If the edition has already been produced, the log exists and has Steps 0-9 filled in. Append a new section:
## Supplemental: {topic}
**Started:** {timestamp}
**Topic:** {topic}
**Reporters:** {who's assigned}
**Status:** IN PROGRESS
### Coverage Plan
[filled in at Step 1]
### Agent Results
[filled in at Step 2]
### Compile + Publish
[filled in at Steps 3-5]
If no production log exists yet (supplemental running before edition), create the log using the write-edition template and start with the supplemental section.
Topics come from anywhere:
output/supplemental-triggers/triggers_c{XX}.json for auto-detected candidates (run node scripts/checkSupplementalTriggers.js {cycle} if it doesn't exist yet)Read whatever the user provides. If it's vague, that's fine — "what's the food scene like?" is a valid topic.
When the trigger list suggests civic content, use one of these formats:
| Type | What | Who Produces | Format |
|---|---|---|---|
| Civic Dispatch | Official city communications — press releases, public notices, community alerts | Carmen Delaine + voice agent statements | In-world government output, not journalism. 1-3 short pieces. |
| Neighborhood Report | What life looks like in one neighborhood this cycle. Businesses, events, people, weather. | Maria Keen + culture desk reporters | World-texture, not news coverage. Walk-through format. |
| Initiative Spotlight | Deep dive on one initiative's progress. What happened, what's next, who's affected. | Carmen Delaine or Jordan Velez + civic desk | Feature-length, single-subject, investigative. |
These follow the same Step 1-5 pipeline as any supplemental — they just have a civic angle and draw from voice agent statements as source material.
Note: Supplementals do not use buildDecisionQueue, buildInitiativePackets, buildInitiativeWorkspaces, or applyTrackerUpdates. Those pipelines are Cycle Pulse only. Civic supplementals can reference voice agent output from previous cycles as source material (e.g., mayor statements), but supplementals don't generate new voice decisions or advance initiative state.
Check the roster first. Who hasn't had a supplemental? Who's perfect for this topic? The full roster is in docs/media/voices/ — 24 journalists across every beat.
Reporters by specialty (not exhaustive — anyone can cover anything):
| Reporter | Specialty | Good For |
|---|---|---|
| Mason Ortega | Food & Hospitality | Restaurants, food culture, kitchen life, nightlife |
| Sharon Okafor | Lifestyle | Daily routines, behavior trends, how people live |
| Kai Marston | Arts & Entertainment | Galleries, music, First Fridays, cultural events |
| Angela Reyes | Education | Schools, youth, OUSD, after-school programs |
| Noah Tan | Weather & Environment | Climate, air quality, seasons, outdoor life |
| Dr. Lila Mezran | Health | Public health, clinics, medical stories |
| Sgt. Rachel Torres | Public Safety | Crime, safety, OPD, neighborhood security |
| Jax Caldera | Accountability | Street-level pressure, policy gaps |
| Maria Keen | Neighborhoods | Hyper-local culture, community pulse |
| Simon Leary | Long View | Essays, philosophy, contemplative pieces |
| Tanya Cruz | Sideline / Social | Behind-the-scenes, real-time dispatches |
| Selena Grant | Bulls Beat | Chicago basketball, roster analysis |
| Talia Finch | Chicago Ground | Chicago neighborhoods, street-level texture |
| MintConditionOakTown | Internet/Rumors | Speculative threads, chaotic truth-seeking |
| Carmen Delaine | Civic | Government, infrastructure, policy |
| Jordan Velez | Business/Labor | Economics, workforce, port, development |
| Luis Navarro | Investigations | Accountability, fact-checking, anomalies |
| Celeste Tran | Social Trends | Hashtags, streaming data, cultural temperature |
| Farrah Del Rio | Opinion | Policy critique, cultural commentary |
| Trevor Shimizu | Infrastructure | Transit, utilities, systems |
| P Slayer | Fan Voice | Sports opinion, emotional takes |
| Anthony | Sports Analytics | Data-driven sports, roster breakdowns |
| Hal Richmond | Sports History | Dynasty context, retrospectives |
| Reed Thompson | Wire | Neutral verification, quick reports |
Design the stories first, then match reporters. Don't pick reporters by habit — pick them by beat fit. For each story, ask: who on the 24-person roster is the natural match for this angle?
Supplementals develop the bench. Default to reporters with fewer than 5 edition appearances. The Cycle Pulse is the big stage for trusted voices. Supplementals build the next ones.
Check the reporter table above. If you're about to assign Carmen, Jordan, Maria, or P Slayer — stop and ask if someone else fits better.
When the supplemental originates from a Story_Seed_Deck seed (e.g., a storyline-followup carrying a BylineCandidate per Engine B), the candidate is valid even if the byline is not on the edition's 9-reporter front-page table. Engine B scores against the full 25-byline rosterLookup.js pool — Simon Leary, Hal Richmond, Sharon Okafor, Trevor Shimizu, Mason Ortega, Angela Reyes, Kai Marston, Talia Finch, Selena Grant, etc. — and formatFitScore_('<journalist>', 'supplemental') ranks long-view + deep-dive bylines highest on the supplemental format.
The edition's 9-reporter constraint is a CYCLE-PULSE concern, not a supplemental concern. For supplemental work:
bylineCandidate from the supplemental's source seed is the default suggestionLookup: if running supplemental against a specific seed, read Story_Seed_Deck.BylineCandidate (col P) for that seed; otherwise fall through to the existing "design first, match second" workflow.
Show the user something like:
SUPPLEMENTAL: [TOPIC]
COVERAGE PLAN:
1. Mason Ortega — [assignment, ~word count]
2. Maria Keen — [assignment, ~word count]
3. [Reporter] — [assignment, ~word count]
Team: [N] reporters, [N] articles
Keep it simple. The plan is a pitch, not a contract. Get user approval before proceeding.
Not everything needs 7 articles and 10,000 words.
| Size | Articles | Words | When |
|---|---|---|---|
| Light | 1-2 | 1,500-3,000 | Neighborhood walk, single-topic color |
| Standard | 3-5 | 3,000-6,000 | Multi-angle feature, event coverage |
| Heavy | 5-8 | 5,000-10,000 | Breaking news, deep dive, major event |
A farmers market piece might be one article from Mason Ortega and one from Maria Keen. That's fine. Not everything is a five-reporter production.
The brief tells the reporters what they need to know. Save to:
output/supplemental-briefs/{topic_slug}_c{XX}_brief.md
output/world_summary_c{XX}.md — cycle texture, events, food, nightlife, famous peoplesearch_canon("TOPIC") via MCP — published historylookup_citizen(name) via MCP for each candidatelookup_business / lookup_faith_org / lookup_cultural / get_neighborhood_state via MCP. Full inventory: [[../../../docs/SUPERMEMORY|SUPERMEMORY]] §Search/save matrix.All of these are optional. If none exist, the brief works exactly as today. Check each path — if the file exists, add the corresponding section to the brief.
| Source | Path | When | Brief Section |
|---|---|---|---|
| World summary | output/world_summary_c{XX}.md | Always | WORLD CONTEXT — cycle texture, events, food, nightlife, weather |
| Errata | output/errata.jsonl | Always (if exists) | GUARDIAN WARNINGS — filter to topic's domain, list errors to avoid |
| Mara guidance | output/mara-directives/mara_directive_c{XX}.txt | Always (if exists) | MARA GUIDANCE — forward editorial direction from last audit |
| Voice statements | output/civic-voice/{office}_c{XX}.json | Civic pieces only | CIVIC VOICE SOURCE MATERIAL — from city-hall production log |
| Civic production log | output/production_log_c{XX}.md §/city-hall section | Civic pieces only | LOCKED CIVIC CANON — what voices decided (legacy production_log_city_hall_c{XX}.md) |
| Grade history | output/grades/grade_history.json | Always (if exists) | Reporter grade context in assignments (1-line summary per reporter) |
Data availability table — include in the production log which of the 6 sources were found and loaded. Example:
Enhanced data loaded:
- Errata: YES (26 entries, 3 relevant to civic)
- Mara guidance: YES (c87 directive)
- Voice statements: YES (mayor, chief of staff)
- Grade history: YES (1 edition window)
- MCP lookups: 14 citizens verified
output/reporters/<reporter>/articles/<source-cycle>_<slug>.md BEFORE dispatching the agent — then reference that path in the brief. Don't direct the agent to grep inside the full edition .txt for one section; that puts the agent in a 40KB search loop when a single-file reference is cleaner.Launch 1-4 agents based on the coverage plan.
Each agent gets:
docs/media/voices/{reporter}.mdeditions/SUPPLEMENTAL_TEMPLATE.mdUse the model parameter when launching agents to match complexity to capability:
| Tier | Model | Use For |
|---|---|---|
| Sonnet | claude-sonnet-4-6 | Civic, investigative, sports — reasoning-heavy, source verification |
| Haiku | claude-haiku-4-5-20251001 | Neighborhood, food, culture, lifestyle — texture writing, atmosphere |
Default to Haiku unless the piece requires civic reasoning, investigative logic, or sports roster verification.
You are [REPORTER NAME], writing for the Bay Tribune supplemental edition on [TOPIC].
Read your voice file at docs/media/voices/{name}.md — this is your writing identity.
Read the supplemental template at editions/SUPPLEMENTAL_TEMPLATE.md — formatting conventions.
Read the topic brief at output/supplemental-briefs/{topic_slug}_c{XX}_brief.md — your assignment and canon data.
Use MCP to verify every name before writing:
- `lookup_citizen(name)` for citizens — profile, role, neighborhood, canon history
- `get_roster("as")` for A's players — contracts, quirks, positions, stats from truesource
Every name in the brief has already been verified — spot check if unsure.
[If exemplar exists for this desk:]
Read output/desks/{desk}/current/exemplar.md — this is an A-grade example from this desk. Study the voice, structure, and sourcing.
[If grade history exists and reporter has grades:]
YOUR RECENT GRADE: [letter] ([trend]). [1-line note from grade_history.json]
[If brief contains GUARDIAN WARNINGS:]
GUARDIAN WARNINGS (from errata — do NOT repeat these errors):
[filtered warnings from brief]
YOUR ASSIGNMENT:
- Write [N] article(s):
1. "[Headline idea]" — [description of angle, ~X words]
RULES:
- Stay in voice. Read the voice file carefully.
- Use ONLY canon names from the topic brief. Never invent citizens unless authorized.
- No engine metrics in article text.
- Verify all citizen names via MCP lookup_citizen before using them.
- Include a Names Index after each article.
- End with an Article Table entry for each article you wrote.
Write now. Start with your first article.
Add a thinking block to the agent prompt based on supplemental type. These go BEFORE "Write now."
Civic / Investigative:
THINK BEFORE WRITING:
Before drafting, reason through:
1. What is the current status of each initiative/policy mentioned?
2. Which citizens have appeared in recent editions on this topic? (check brief)
3. Are there any Mara flags or errata warnings relevant to this piece?
4. What is the strongest angle — and what angle should be AVOIDED?
5. Which voice agent statements can be quoted vs. paraphrased?
Neighborhood / Food / Culture:
THINK BEFORE WRITING:
Before drafting, reason through:
1. What canon already exists for this neighborhood/venue/event?
2. Which citizens are FRESH (not in last 3 editions)?
3. What new canon am I authorized to establish?
4. Is this a prosperity story or a struggle story? (default: prosperity)
Sports:
THINK BEFORE WRITING:
Before drafting, reason through:
1. Verify every player name and position against the roster in truesource.
2. What is the dynasty context — where does this fit in the timeline?
3. Is this opinion or reporting? If opinion, mark [OPINION].
Color / Variety: No thinking block — keep lightweight.
After agents return, Mags compiles:
[OPINION]lookup_citizen if unsure. Flag any name not in canon sources or not authorized as new in the Citizen Usage Log.Show the compiled supplemental to the user.
.txtThe editorial compile (Step 3) produced article body + tracking data. Now wrap it in the [[../../../docs/EDITION_PIPELINE]] §Published .txt Format Contract envelope — Bay Tribune masthead + 5 structural sections (HEADER / BODY / NAMES INDEX / CITIZEN USAGE LOG / BUSINESSES NAMED / ARTICLE TABLE).
Step 3.4 IS: envelope-wrap of the editorial product. Concat masthead + headers + body + intake sections + end marker. Preserve agent-written prose verbatim. Apply ADR-0006 Contract A pattern — template (editions/SUPPLEMENTAL_TEMPLATE.md) and canonical exemplar (docs/media/EDITION_FORMAT_TEMPLATE.txt) are the format-shape source; parser (scripts/ingestEditionWiki.js) is authoritative.
Step 3.4 IS NOT: editorial-pass. Don't free-form-rewrite content from the agent .md files. Quality checks happen in Step 3 (validation), not here. S231 G-S4 evidence: this step turned Hal's "this cycle" into "Edition 94" because the wrap path was treated as a rewrite path. Step 3.4 is concatenation, not interpretation.
Output: editions/cycle_pulse_supplemental_<cycle>_<slug>.txt
<slug> | <reporter> | <section> | <word count>)<TYPE>=SUPPLEMENTAL, descriptor = topic themeSlug rule: 1–3 words from the topic theme, lowercase, underscore-separated (e.g., health_center_unstuck). Editorial pick at authoring time. Once published, immutable. Replicated identically across filename, masthead descriptor, sift queries, MCP search, Mara, packets, production log, bay-tribune metadata.
Y<n>C<m> math: n = floor((cycle-1) / 52) + 1, m = ((cycle-1) % 52) + 1. No month names.
Names Index, Citizen Usage Log, Businesses Named populated from the citizens/businesses cited in the body — separate sections after the body, never inline (S172 metadata-leak rule). These three sections have STRICT format-contract requirements; the parser silently parses to 0 entities on wrong-shape input (S231 G-S5 silent-zero pattern).
NAMES INDEX — strict pipe-format, no leading pipe, no markdown header:
############################################################
NAMES INDEX
############################################################
POP-NNNNN | Full Name | Role/Title
POP-NNNNN | Full Name | Role/Title
CUL-NNNNNNN | Name | Role
FAITH-NEW | Org Name | Faith Org | Neighborhood
Name — Role
scripts/ingestEditionWiki.js:294 splits on |, requires first field to match /^[A-Z]+-[A-Z0-9]+$/.POP-NNNNN / CUL-NNNNNNN / BIZ-NNNNN / FAITH-NEW.- Name — Role (ingester promotes to POP-pending).| POPID | Name | Role | with leading pipe, |--|--|--| separator row, or | Header | Header | Header | first row. Leading pipe produces empty parts[0] which fails the ID regex → 0 entities parsed → silent failure (no warning, no exception).BUSINESSES NAMED — strict pipe-format, no leading pipe:
############################################################
BUSINESSES NAMED
############################################################
BIZ-NNNNN | Name | Sector | Neighborhood
NEW | Name | Sector | Neighborhood
scripts/ingestEditionWiki.js:203 (loosened S229 per engine.24 to accept optional - bullet prefix).BIZ-NNNNN for existing businesses, NEW prefix for new businesses (Sector/Neighborhood blank-permissible).ARTICLE TABLE — flat pipe-format (parser-tolerant):
Parser parseEdition.js (capability-reviewer/) treats ARTICLE TABLE as opaque footer text — isFooter: true, body retained verbatim, no row extraction. Markdown-table syntax doesn't break the parser here, but editions/SUPPLEMENTAL_TEMPLATE.md v2.1 normalizes Article Table to flat pipe-format so all three intake sections share consistent shape (S231 G-S5 root cause was the markdown-shape on ARTICLE TABLE training the compile to use markdown-shape on NAMES INDEX / BUSINESSES NAMED).
Canonical exemplar: docs/media/EDITION_FORMAT_TEMPLATE.txt §NAMES INDEX + §BUSINESSES NAMED + §ARTICLE TABLE. Read it before first-cycle supplemental compile if format-shape is unclear.
After Step 3.4 emits the .txt, expect Step 3.5 validation to confirm:
node scripts/ingestEditionWiki.js editions/cycle_pulse_supplemental_<cycle>_<slug>.txt --type supplemental --dry-run
Parser stdout should report entity count ≥ 1 per non-empty NAMES INDEX section AND biz count ≥ 1 per non-empty BUSINESSES NAMED section. If the section had content lines but parser reports 0 entities, that's the G-S5 silent-zero signature — fix the format-shape inline (markdown-table → strict pipe) before publish. Parser defensive-emit improvements (warning instead of silent-zero) tracked at engine.26 for engine-sheet.
Always (all supplemental types):
lookup_citizen) or be authorized as new in the Citizen Usage Log.If civic content:
node scripts/validateEdition.js editions/cycle_pulse_supplemental_<cycle>_<slug>.txt
If sports content:
For civic, investigative, or initiative supplementals only. Skip for color, food, culture, neighborhood, sports, and lifestyle pieces.
Decision guide: If the supplemental changes initiative status, council positions, or faction dynamics — send to Mara. If it establishes texture canon (restaurants, neighborhood feel, cultural events) — skip.
Upload the .txt (canon) to Drive for Mara: node scripts/saveToDrive.js editions/cycle_pulse_supplemental_<cycle>_<slug>.txt mara
Mara audits the .txt (same format she audits everywhere else). She has her own Supermemory access (mara + bay-tribune + world-data) and searches canon herself. No packet building needed. Mike takes it to her on claude.ai. Wait for her feedback before proceeding.
STOP. Nothing gets saved until the user says yes.
SUPPLEMENTAL [{topic}] — READY FOR REVIEW
Articles: {count}
Word count: ~{total}
New canon established: {key facts}
The supplemental is compiled. Nothing has been saved or published yet.
Ready to publish? (yes / hold for edits)
After user approval, the .txt at editions/cycle_pulse_supplemental_<cycle>_<slug>.txt is canon. The file was already written in Step 3.4; this step is the post-approval mark.
PDF rendering + Drive upload moves to /edition-print --type supplemental (Step 5, parallel with /post-publish).
After Step 4 the .txt is approved canon on disk. Two skills converge here, run in parallel:
/post-publish --type supplemental --cycle <XX> --source editions/cycle_pulse_supplemental_<XX>_<slug>.txt
/edition-print --type supplemental --cycle <XX> --source editions/cycle_pulse_supplemental_<XX>_<slug>.txt
/post-publish --type supplemental handles canon ingest (bay-tribune wiki + text), citizen card refresh, newsroom memory update, production log finalize, mags-bot restart. Per-substep verification gates per the [[../post-publish/SKILL|post-publish]] matrix; the supplemental row of that matrix governs which substeps run (coverage ratings C93-gated, skip by default; criteria-files + grading + exemplars are edition-only).
/edition-print --type supplemental handles DJ art direction (1–3 photos), PDF render, Drive upload.
Trigger condition (T11): Run /edition-print for supplementals always — supplementals are deep-dives, the visual layer is a load-bearing part of the deliverable. Default: always invoke.
S188 photo-pipeline status: /edition-print is currently edition-only for the photo step (DJ-direction pipeline rebuilt S188 — djDirect.js bundles edition+sift+world_summary; non-edition types await bundler extension). Supplementals will route through /edition-print for PDF + Drive but the photo step bails on missing dj_direction.json. Post-T11 follow-up will extend djDirect.js to handle supplemental source files.
Both skills append their ## /write-supplemental section to the unified output/production_log_c{XX}.md with inline Supermemory doc IDs for direct query next cycle.
| File | Purpose |
|---|---|
editions/SUPPLEMENTAL_TEMPLATE.md | Formatting conventions |
output/supplemental-briefs/ | Topic briefs per supplemental |
editions/supplemental_*.txt | Published supplementals |
Runs after /write-edition and /post-publish are complete. Supplementals extend coverage of the current cycle — same world, different angle. Can run multiple times per cycle.
The full 24-reporter roster is available (voice files at docs/media/voices/). Supplementals develop the bench — default to reporters with fewer edition appearances.
Full chain: /run-cycle → /city-hall-prep → /city-hall → /sift → /write-edition → /post-publish → /edition-print → then supplementals, dispatches, podcasts as needed