Collected, deduped, routed, scored, imaged, written, fact-checked and revised with nobody in the loop. Three segments: land, sea, sky.
01 / THE RUN
What one pass produced
195collected
57duplicates killed
83unmakeable
52eligible
3aired
195 in, 3 out. Nothing in that funnel was a judgment call except the last step — duplicates are a key, noise is a threshold, and “unmakeable” means no imagery and no sourceable text.
02 / THE EPISODE
The three that ran
NASA GIBS · MODIS Terra true colour · 2026-08-25 · 1 day lag · public domain
LANDscore 106.9
Kilauea Volcano raised to ADVISORY / aviation YELLOW
flagged: alert level raised · 4318 chars of source text
Two different sources of pictures, and every segment needs one. Where a story has coordinates, NASA GIBS gives real satellite imagery of that exact place on a one-day lag — the Kilauea frame is Hawaii yesterday. That is the answer to “when Etna erupts today, NASA doesn't publish an Etna photo today.” Verified against Peru, the Aleutians, Sicily and mid-ocean. Where a story has no coordinates — a penguin study, a telescope release — the article carries its own imagery, and that imagery IS the story.
03 / THE SCRIPT
Three lengths, same three stories
The open question was whether thin segments were a length problem or a source problem. It was a source problem, and the fix changed everything.
SHAPE
WORDS
MEASURED RUNTIME
FINDINGS
short
108
44 sec
2
standard
216
62 sec
3
long
292
117 sec
3
Correction: the runtimes in this table were previously the targets requested, not the output measured. These are measured — spoken words at 150 wpm, a news-desk pace. The “standard” episode is 62 seconds, not two and a half minutes.
Before the fix, every length produced the same mush. After it, the same stories yielded NGC 2392, NIRCam and MIRI, Smyley Island, Landsat records back to 1989, and the 2022 threatened listing. Nothing about the writing changed — only what the writer could see.
The episode as it stands
## SEGMENT 1 - LAND - Kilauea Volcano Alert Raised
The Hawaiian Volcano Observatory has raised the alert level for Kilauea Volcano to ADVISORY, with aviation set to YELLOW. There are about 160 potentially active volcanoes in the United States. The USGS works to enhance public safety and minimize disruptions from volcanic activity.
VISUAL: Satellite image of Kilauea Volcano
## SEGMENT 2 - SEA - Emperor Penguins at Risk
Emperor penguins have been classified as endangered by the International Union for Conservation of Nature. The U.S. Fish & Wildlife Service listed them as threatened in 2022. Satellite data from NASA-USGS Landsat shows their reliance on sea ice, which is declining. Some models project emperor penguins could disappear by 2100 due to habitat changes.
VISUAL: Image of emperor penguins on sea ice
## SEGMENT 3 - SKY - JWST Captures Lion’s Head Nebula
The James Webb Space Telescope has captured a detailed image of the Lion’s Head Nebula, or NGC 2392. This planetary nebula formed when a Sun-like star shed its outer layers. The nebula's structure, including a central white dwarf, provides insights into stellar evolution and gas interactions.
VISUAL: Image of the Lion’s Head Nebula
The Smyley Island emperor penguin colony dates back to at least 1989.
Segments 2 and 3 are clean. Segment 1 is not, and the reason matters. The Kilauea story links to volcanoes.usgs.gov — the program homepage, not the alert notice. It returned 4,300 characters of mission statement, so the writer kept reaching for “the USGS works to enhance public safety” because that genuinely WAS the source text. The fact checker rejected it three rounds running, and each rewrite grabbed different boilerplate. Generic text is worse than no text: it hands a writer plausible filler to build on. There is now a guard that rejects a landing page and lets the segment be short instead.
04 / THE FACT CHECKER
It caught four defects in its own first draft
Nobody told it what the problems were. It was handed the source events and the script, and told to assume something was wrong.
HIGH · segment 2
“Preparedness measures are advised for potentially affected areas.”
No official recommendation appears anywhere in the source.
MEDIUM · segment 2
“Details are limited, but monitoring is ongoing.”
Hedging used as filler to pad a thin story.
MEDIUM · segment 3
“This is part of ongoing space observation efforts.”
Not supported by the source material.
LOW · segment close
“Stay informed with Blue Marble News.”
A call to action, which the brief forbids.
All four are real. Two I had spotted; the third I had not. The revise loop deleted every one rather than softening the wording.
05 / WHAT THE BUILD TAUGHT ME
Seven bugs worth knowing about
ROOT CAUSE · why the segments were thin
a feed record is about 30 usable words
45 honest seconds cannot be written from 30 words, so the writer invented detail because there was none. Fixed by fetching the real article — but only for the three picks, not for 200 events an hour. Kilauea went from a headline to 4,318 characters.
THE ENRICHMENT WAS THROWN AWAY
brief() truncated the source to 260 characters
I fetched 4,300 characters for Kilauea and 6,100 for the penguins, then sliced it to 260 before handing it to the writer. Every script was still being written from a feed blurb, and the invention the fact checker kept catching was the writer filling a vacuum I had created. One line. It was the single biggest quality problem in the build.
THE GATE COULD NEVER OPEN
an adversarial reviewer told to assume something is wrong will always find something
With PASS gated on zero findings, no script could ever ship — which meant the graduation-to-unattended criterion was unreachable by construction. The verdict is now severity-based and enforced in code, not left to the reviewer’s mood: an invented fact fails, a wording quibble does not.
PILLAR ROUTING
“A Changing World for Emperor Penguins” was filed under SKY
The pillar came from the feed, not the subject. NASA's science feed carries earth, ocean and space freely. 13 stories re-routed once fixed.
MY OWN BUG
re.X strips literal spaces out of a pattern
Every multi-word rule I wrote was silently dead — “sea ice” compiled as “seaice”, “air mobility” as “airmobility”. The filters looked correct and matched nothing.
MISSING PICTURES · caught by Ray
two of three segments had no image at all
I only looked for satellite frames, which need coordinates. A study about penguins and a Webb telescope release have none — but both pages ship with imagery, and in the Webb case the picture is the entire story. The planner now falls back to the article's own lead image, and an article image now scores nearly as high as a satellite pass.
CROSS-AGENCY DUPLICATES
50 stories collapsed
Agencies syndicate each other, so the same story arrives with two ids and the unique key cannot see it. The penguin story was about to fill the sea slot twice.
06 / THE RUNNERS-UP
Kept, because a swap is the training signal
When you reach past the top pick and take the third, that comparison teaches more than any approval. So the full ranking is stored, not just the winner.
LAND
1
106.9
Kilauea Volcano raised to ADVISORY / aviation YELLOW
2
105.2
Great Sitkin Volcano raised to WATCH / aviation ORANGE
3
46.0
M4.8 earthquake - southwest of Africa
SEA
1
44.3
60 miles SE of Iliamna, Alaska
2
40.5
A Changing World for Emperor Penguins
3
3.8
MAIA Air Sensor at Work in Addis Ababa
SKY
1
40.5
APOD: 2026 August 26 – JWST Images The Lion’s Head Nebula
2
39.6
New Next-Gen Dish Adds Muscle to NASA’s Deep Space Network
3
39.5
Eclipse Participatory Science Film
07 / WHERE IT STANDS
Done, and not done
WORKING
Hourly collection · key-based dedup · subject routing · cross-agency dedup · whole-earth imagery · the edition fence · ranked candidates · scripting · adversarial review · revise loop · Iris registered as a Head with her own memory
OPEN
Script quality still fails review after two rounds · no review surface for you to approve or swap · not wired to the DSF renderer · no GitHub repo pair yet · video length undecided
Still need one thing from you: how long is an episode? Three segments does not fit sixty seconds. Script length, render and upload all wait on that number.