| name | dispatch |
| description | Immersive scene piece — one reporter, one location, one moment. Editions report, supplementals explain, dispatches immerse. |
| version | 1.2 |
| updated | "2026-04-30T00:00:00.000Z" |
| tags | ["media","active"] |
| effort | high |
| disable-model-invocation | true |
| argument-hint | [scene description] |
/dispatch — Scene Dispatch Production
Usage
/dispatch [scene]
- Produces a single immersive article — one reporter embedded in one moment
- No analysis, no multi-angle coverage. You're there.
- Third publication format alongside editions and supplementals
What a Dispatch Is
A dispatch is a scene piece. One reporter. One location. One moment in time. The reader is standing in the room.
Maria Keen at Heinold's when Horn's homer clears the wall and the whole bar loses its mind. Carmen riding shotgun with the OARI co-responder at 2am in D3 when the first call comes in. P Slayer in the bleachers during the streak, surrounded by fans who are scared to believe. Jordan Velez at Baylight watching the foundation crew pour concrete at dawn.
Editions report what happened. Supplementals explain what it means. Dispatches put you inside it.
What a Dispatch Is NOT
- Not a profile piece (that's a supplemental)
- Not multi-source reporting (that's an edition article)
- Not analysis or opinion (that's a column)
- Not a scene described. A scene inhabited.
The difference: "The bar erupted when Horn's ball cleared the fence" is reporting. "The guy next to me spilled his beer on my jacket and neither of us cared" is a dispatch.
Rules
- One reporter only. Pick the right one for the scene.
- One location only. Name it. Ground it. The reader can smell it.
- One moment only. Not "a day at the cafe." A specific 20 minutes.
- Present tense energy. Even if written in past tense, it reads like you're there now.
- Citizen verification via MCP.
lookup_citizen(name) for citizens, get_roster("as") for A's players. Cultural-only entities (musicians, artists, public figures registered as cultural-tier without a Sim_Ledger row) return EMPTY from lookup_citizen — fall through to lookup_cultural(name) to retrieve the wd-cultural card with CUL-XXXXXXX identifier. This is the verification path that landed Marin Tao + Brody Kale in S188's KONO Second Song dispatch. For business / faith-org context when the dispatch touches those domains, use lookup_business / lookup_faith_org. Full tool inventory: [[../../../docs/SUPERMEMORY|SUPERMEMORY]] §Search/save matrix. Read docs/media/citizen_selection.md for full criteria. No exceptions.
- Read the brief, don't exhaust it. The brief lists citizens available in the scene. The dispatch uses only the ones that serve the moment — usually 2-3, not all of them. Don't turn a dispatch into a roll call. Some citizens in the brief are there for color; some don't make the final piece.
- Follow brief template for structure.
docs/media/brief_template.md — dispatch briefs are different from article briefs but citizen handling, canon rules, and verification standards are the same.
- World summary is your context. Read
output/world_summary_c{XX}.md — weather, mood, what's happening in the city. The dispatch lives in the same world as the edition.
- Newsroom memory for continuity. Read
docs/mags-corliss/NEWSROOM_MEMORY.md §Standing Editorial Conventions before naming citizens — name corrections, POPID aliases, character continuity, active arcs. Same continuity discipline the edition flow runs; keeps a dispatch from re-introducing a corrected name or contradicting a live arc.
- No calendar dates. Natural time references only.
- Get user approval on the scene concept and reporter before writing.
- Memory Fence (Phase 40.6 Layer 2). Scene briefs assembled in Step 1 pull recalled citizen/canon context that the reporter agent reads. Wrap recalled excerpts via
require('/root/GodWorld/lib/memoryFence').wrap(text, 'bay-tribune') before embedding. Full convention: [[SUPERMEMORY]] §Memory Fence.
Reporter Selection Guide
Match the reporter to the scene's emotional register. Dispatches develop the bench — like supplementals, they're a chance for reporters who don't get frequent cycle pulse assignments. When multiple reporters could fit a scene, default to the one with fewer recent bylines.
| Reporter | Best for | Voice |
|---|
| Maria Keen | Neighborhood texture, food, daily life | Warm, sensory, lived-in |
| Carmen Delaine | Civic moments, institutional scenes | Direct, observational, precise |
| P Slayer | Fan experiences, sports atmosphere | Personal, emotional, conscience |
| Jordan Velez | Business/development scenes, power spaces | Clean, analytical, present |
| Hal Richmond | Historical moments, legacy scenes | Atmospheric, literary, patient |
| Jax Caldera | Accountability moments, tension scenes | Sharp, restless, skeptical |
| Tanya Cruz | Sideline, behind-the-scenes, real-time dispatches | Intimate, immediate |
| Sharon Okafor | Lifestyle, social scenes | Vivid, curious, contemporary |
| Kai Marston | Music, nightlife, arts scenes | Rhythmic, insider, electric |
Engine B scene-fit signal (T4.4)
Engine B (utilities/bylineEngine.js) emits bylineRationale.components.format per seed (Story_Seed_Deck col R, JSON-serialized). The format axis ranks bylines against the inferred seed format type — dispatch is one of the four. Canonical dispatch pool (format-fit 4) per bylineEngine.FORMAT_FIT.dispatch:
- DJ Hartley — scene + photo, "empty spaces, waiting infrastructure"
- Maria Keen — neighborhood texture, lived-in
- Mason Ortega — kitchen scenes, motion under pressure
- Kai Marston — music + nightlife + arts atmosphere
Tier-2 dispatch fits (format-fit 3): Talia Finch (Chicago neighborhood texture), Sharon Okafor (lifestyle/social), Tanya Cruz (sideline/behind-the-scenes).
Scene-fit override behavior:
- When the dispatch originates from a Story_Seed_Deck seed, read
bylineRationale.components.format (col R parsed JSON) for the matched seed. If format-fit ≥ 3 for a journalist, that journalist is engine-validated for the dispatch format.
- The reporter selection table above remains the editorial guide for scene fit (which reporter matches the scene's emotional register). Engine B's format-axis is a type fit signal — different question.
- Override rule: Mike picks the reporter for scene fit; engine's format-fit ≥ 3 is the validation gate. If the picked reporter has format-fit < 3 (e.g., Carmen Delaine on a music dispatch — format-fit 1 default), surface a one-line note:
[engine: format-fit 1 — outside canonical dispatch pool]. Mike can proceed regardless; the note is auditable transparency, not a block.
- No engine data? When the dispatch has no source seed (free-running scene piece), skip the format-fit check entirely. Reporter selection guide is the only signal.
The engine's job is to surface miscalibration; the editorial call stays Mike's.
Step 0: Scene Concept
If the user provided a scene description (via /dispatch [scene] or the --scene arg), use it directly and skip to Step 1. If not, propose 2-3 scene concepts based on:
- Current cycle storylines (read
output/world_summary_c{XX}.md)
- Active story arcs
- Locations that haven't been featured
- Moments that the edition mentioned but didn't inhabit
Present to the user:
- Scene: What's happening, where, when
- Reporter: Who's writing it and why
- Citizens: Who might appear (check against ledger)
- Mood: What the scene feels like
Wait for user approval before proceeding.
Auto-resolve evaluation (S189): an alternate flow would auto-pick the highest-bench-fit scene from sift_proposals.json + engine_review without an editorial gate, with --scene "X" as override. Decision: keep the manual approval gate. Editorial control over which moment the city inhabits is the dispatch's whole point — Mags' judgment beats algorithmic ranking on scene selection. Auto-propose (current behavior) preserves the gate while still surfacing 2-3 candidates the skill ranked. Revisit only if the manual gate becomes a bottleneck during a multi-dispatch cycle.
Step 1: Scene Brief
Write a brief for the reporter at output/reporters/{reporter}/c{XX}_dispatch_brief.md:
# Dispatch Brief — {reporter name}
## Cycle {XX}
### Scene
{One paragraph: location, moment, what's happening}
### You Are Here
{Sensory grounding: time of day, weather from world summary, sounds, smells, light}
### Citizens Present
{Each citizen with POPID, age, neighborhood, occupation, why they're in this scene}
{Canon history from bay-tribune for each — what do we already know about them?}
### What Just Happened
{The event or moment that makes this scene worth writing — the homer, the first call, the vote}
### What You're Watching For
{The human detail. Not the event itself — the reaction. The spilled beer. The held breath.}
### Tone
{One line: the emotional register of this piece}
Step 2: Write the Dispatch
Launch the reporter agent with the brief. The agent writes to output/reporters/{reporter}/articles/c{XX}_dispatch_{slug}.md.
Agent instructions (append to brief):
- You are writing a dispatch. You are IN the scene, not observing from outside.
- 600-1000 words. No more. Dispatches are tight.
- Lead with a sensory detail, not a fact.
- One location. Don't leave the room.
- Name at least 2 citizens. They're people, not sources.
- End on an image, not a summary.
- No section headers. No byline mid-text. One continuous piece.
Step 3: Editorial Review
Read the dispatch. Check:
If it needs revision, edit directly or re-brief the agent with specific notes.
Step 4: File and Log
- Final article stays at
output/reporters/{reporter}/articles/c{XX}_dispatch_{slug}.md
- Append to the unified production log (
output/production_log_c{XX}.md — the one-true-cycle source per pipeline.32; legacy fallback production_log_edition_c{XX}.md if the unified log is absent). Dispatches can run multiple times per cycle, so each gets its own slugged section:
## /dispatch — {slug}
- Reporter: {name}
- Location: {place}
- Citizens: {names}
- Filed: {filename}
- Print pipeline — dispatches go through
/edition-print --type dispatch (after Step 4.5)
Step 4.5: Compile to .txt
The reporter .md is intermediate. The .txt is canon. Compile per [[EDITION_PIPELINE]] §Published .txt Format Contract — Bay Tribune masthead + 5 structural sections (HEADER / BODY / NAMES INDEX / CITIZEN USAGE LOG / BUSINESSES NAMED / ARTICLE TABLE).
Output: editions/cycle_pulse_dispatch_<cycle>_<slug>.txt
- Body: the dispatch (one location, one moment)
- Article Table: single row (
<slug> | <reporter> | DISPATCH | <word count>)
- Masthead
<TYPE>=DISPATCH, descriptor = scene title
Slug rule: 1–3 words, lowercase, underscore-separated (e.g., temescal_47th_dawn). Editorial pick at authoring time. Once published, immutable.
Names Index, Citizen Usage Log, Businesses Named populated from the citizens/businesses cited in the body. Pure-atmosphere dispatches may emit empty NAMES INDEX / BUSINESSES NAMED — section headers always present, content lines may be zero.
Y<n>C<m> math: n = floor((cycle-1) / 52) + 1, m = ((cycle-1) % 52) + 1. No month names.
Step 5: Post-Dispatch Pipeline
After Step 4.5 the .txt is on disk. Two skills converge here, run in parallel:
/post-publish --type dispatch --cycle <XX> --source editions/cycle_pulse_dispatch_<XX>_<slug>.txt
/edition-print --type dispatch --cycle <XX> --source editions/cycle_pulse_dispatch_<XX>_<slug>.txt
/post-publish --type dispatch 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 dispatch row of that matrix governs which substeps run (coverage ratings C93-gated, skip by default).
/edition-print --type dispatch handles DJ art direction (1–3 photos), PDF render, Drive upload.
Trigger condition (T11): Run /edition-print for dispatches at editorial discretion — invoke when the scene warrants a visual asset (a Heinold's-during-game-14 frame, a waterfront dusk, a Coliseum tunnel after a milestone). Skip when the dispatch is voice-only or the scene doesn't add image-layer signal. Default: invoke unless explicitly skipped.
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). Dispatches 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 dispatch source files.
Both skills append their ## /dispatch — {slug} section to the unified output/production_log_c{XX}.md with inline Supermemory doc IDs for direct query next cycle.
Examples of Good Dispatch Scenes
- Heinold's First and Last Chance during Game 14 of the streak
- The OARI co-responder van on its first overnight shift in D3
- Baylight construction site at 5:45am, before the crew arrives
- Westside Cafe on the morning Beverly Hayes' check arrives
- Lake Merritt at sunset during First Friday in October
- The press box when Vinnie Keane steps to the plate for the last time
- Fruitvale BART platform at 7:15am on a CBA vote day
Gap log (S212 — see [[../../docs/plans/GAP_LOG_TEMPLATE]])
At skill close, capture friction observed during dispatch production as a gap log. /dispatch is a heavy skill at the media generator terminal; sidecar gap logs catch inefficiency the skill couldn't catch while running.
Output path: output/production_log_c<XX>_dispatch_<slug>_gaps.md (pipeline.34 convention production_log_c{XX}_<skill>_<slug>_gaps.md — slug-infixed because dispatches can run multiple times per cycle; one gap log per dispatch).
Gap prefix: G-D* (e.g., G-D1).
Common categories for /dispatch gaps:
- scene-fit (canonical pool DJ/Maria/Mason/Kai vs Tier-2 vs off-pool reporter)
- format-contract (dispatch .txt format compliance, masthead/sections per S179 plan)
- canon-creation-risk (citizens invented in scene without verification)
- handoff (sift dispatch route, post-publish ingest, parser-vs-validator)
Discipline: write the gap log even on clean runs (or note "no gaps" inline if dispatch ran cleanly). File a ROLLOUT row in pipeline.<n> pointing at the gap log per ADR-0005 §How to add work as needed.
Where This Sits
Runs within the current cycle, typically after /write-edition and /post-publish are complete. Dispatches extend coverage — same world, one scene. Can run multiple times per cycle.
Full chain: /run-cycle → /city-hall-prep → /city-hall → /sift → /write-edition → /post-publish → /edition-print → then supplementals, dispatches, podcasts as needed