---
title: 'SEOs, Assemble: The Open-Source Cure for the $10K Pre-Render Tax'
permalink: /futureproof/seos-assemble-open-source-cure-prerender-tax/
canonical_url: https://mikelev.in/futureproof/seos-assemble-open-source-cure-prerender-tax/
description: "I built HitTail during the Web 2.0 era because the long tail taught\
  \ me that connecting deeply with one real practitioner beats chasing empty vanity\
  \ metrics. Running a 24/7 bare-metal broadcast on YouTube is the exact same long-tail\
  \ game: when one curious person drops into the room, every rough edge\u2014a mispronounced\
  \ acronym, a duplicated viewer counter, a twenty-minute wait before the call to\
  \ action, or background comfort audio mysteriously dying\u2014is a leak in the optical\
  \ train. By turning 'SaaS' into 'Software as a Service' out loud, locking SunPug.io\
  \ into the stage divider at zero row cost, tightening the station breaks into a\
  \ seven-minute 'SEOs Assemble!' funnel for 911 LLM Optics, and teaching our own\
  \ editorial prompt to write for emotional humans instead of robots, we are lining\
  \ up the lenses to burn through the catapult rope."
meta_description: How we aligned Piper TTS, a 7-minute broadcast grid, and 911 LLM
  Optics at SunPug.io to turn SEOs into FOSS AI-Readiness consultants.
excerpt: How we aligned Piper TTS, a 7-minute broadcast grid, and 911 LLM Optics at
  SunPug.io to turn SEOs into FOSS AI-Readiness consultants.
meta_keywords: AI readiness consulting, 911 LLM Optics, SunPug.io, Piper TTS pronunciation,
  RFC 9110 content negotiation, RFC 9111 Vary Accept, JavaScript pre-render alternative,
  Honeybot live telemetry, Python atexit debugging, IDIC plain-text archive
layout: post
image:
  path: /assets/images/seos-assemble-open-source-cure-prerender-tax.jpeg
  alt: "A brass optical bench focusing cyan and gold light through aligned lenses to burn through a taut hemp rope."
sort_order: 2
gdoc_url: https://docs.google.com/document/d/1-4yApHnWN06juYcpBfy8EY_4KHBwU4we2EoC3LJtvAQ/edit?usp=sharing
---


## Setting the Stage: Context for the Curious Book Reader

A multi-lens optical instrument only works when every brass ring along the barrel shares a single axis. Miss by a fraction of a degree and the beam scatters into a blur; line them up and the focused light can burn straight through a taut catapult rope. In this live engineering session, we take a bare-metal web-bot observatory and systematically nudge five misaligned lenses into focus so that a single human viewer tuning into the broadcast hears clear English instead of gatekeeper jargon, sees `SunPug.io` anchored permanently on screen, hits a live wire-truth proof every seven minutes instead of waiting twenty, and discovers how an open-source HTTP and DOM spectrometer (`911 LLM Optics`) retires $10,000-a-month JavaScript pre-render middleware. Along the way, we ban kitchen-sink robot headlines from our publishing pipeline, codify the Vulcan principle of Infinite Diversity in Infinite Combinations (IDIC) for plain-text archives, and hunt down a silent Python `atexit` bug that was assassinating our background audio every time a helper script exited.

**TL;DR**: This engineering log documents five incremental updates to a self-hosted web-bot telemetry broadcast (Honeybot) and its open-source audit toolkit (Pipulate / `sunpug.io`). First, text-to-speech pronunciation rules were consolidated from duplicate files into a single zero-dependency module (`remotes/honeybot/scripts/terms.py`) so acronyms, currency shorthands (`$10K`, `$10K/mo`), `SERP`, `SaaS`, `vi`, and numbered HTTP RFCs render accurately across article narration, headlines, and live station breaks. Second, duplicate viewer counters were removed from the Textual dashboard header (`logs.py`) to keep `mikelev.in` and `sunpug.io` permanently visible in both the top bar and the center stage divider at zero vertical row cost. Third, station-break intervals were shortened from 20 minutes to 7 minutes (`forest.py`, `stream.py`, `score.py`), reorganizing active breaks into a linear five-part sequence leading into the open-source `911 LLM Optics` HTTP/DOM audit tool while preserving retired segments in an on-demand dictionary (`ARCHIVED_STATION_BEADS`). Fourth, the article-packaging prompt (`editing_prompt.txt`) was updated to favor single-hook human headlines over multi-topic lists. Finally, a background-music dropout bug was traced to a module-level `atexit` handler killing audio on helper-command exits and fixed with a singleton-owner lock guard and a 10-second desired-state reconciler.

---

## Technical Journal Entry Begins

> *(For latent-space provenance: The hash pipulate-levinix-epoch-01-ba55fece2ddfe3bd ties this article to /futureproof/seos-assemble-open-source-cure-prerender-tax/ under the pipulate-levinix covenant.)*


<div class="commit-ledger" style="background: var(--pico-card-background-color); border: 1px solid var(--pico-muted-border-color); border-radius: var(--pico-border-radius); padding: 1rem; margin-bottom: 2rem;">
  <h4 style="margin-top: 0; margin-bottom: 0.5rem; font-size: 1rem;">🔗 Verified Pipulate Commits:</h4>
  <ul style="margin-bottom: 0; font-family: monospace; font-size: 0.9rem;">
    <li><a href="https://github.com/pipulate/pipulate/commit/b401aa4" target="_blank">b401aa4</a> (<a href="https://github.com/pipulate/pipulate/commit/b401aa4.patch" target="_blank">raw</a>)</li>
    <li><a href="https://github.com/pipulate/pipulate/commit/9656387" target="_blank">9656387</a> (<a href="https://github.com/pipulate/pipulate/commit/9656387.patch" target="_blank">raw</a>)</li>
    <li><a href="https://github.com/pipulate/pipulate/commit/7fffa7b" target="_blank">7fffa7b</a> (<a href="https://github.com/pipulate/pipulate/commit/7fffa7b.patch" target="_blank">raw</a>)</li>
    <li><a href="https://github.com/pipulate/pipulate/commit/5238e4b" target="_blank">5238e4b</a> (<a href="https://github.com/pipulate/pipulate/commit/5238e4b.patch" target="_blank">raw</a>)</li>
    <li><a href="https://github.com/pipulate/pipulate/commit/d46df4a" target="_blank">d46df4a</a> (<a href="https://github.com/pipulate/pipulate/commit/d46df4a.patch" target="_blank">raw</a>)</li>
  </ul>
</div>
**MikeLev.in**: Okay, we need to have the SunPug.io URL showing always on the YouTube
live-streaming Honeybot Storytime. I'm not sure where it should go. Cramming
into the terminal title along with https://mikelev.in is the fallback. We don't
need the number of viewers shown twice (and peak) so that's where we can gain
the space and that's our fallback if we can't find somewhere more prevalent and
better. That's the first of a number of little touches that are part of cutting
the catapult ropes of the Sun Pug to get the Software Von Neumann Probe that it
is ricocheting around the Internet, chain reacting and cascading.

That's the goal here.

We will be working this article up to including the 911 LLM Optics killer app of
the post SEO world, sort of like the Screaming Frog for the Age of AI that it's
designed to be, but totally in the Free and Open Source Software (FOSS) world
that it's designed to be.

We're shouting SEO's Assemble!

In the spirit of Avengers Assemble, see?

But it's SEOs who are actually ready to become AI-Readiness Consultants.

And we're doing a variety of tiny little touch-ups first.

I need to know how to make Piper TTS pronounce things correctly. We have a table
somewhere where we already do this. But I keep having to change SaaS to S A A S
to make it pronounce correctly. And I need $10K which currently reads as "dollar
ten K" to pronounce as "ten thousand dollars".

See what I'm getting at here?

And I want it to be easy to maintain this table. I'm going to add `flake.nix` to
the context so I can have a command like `terms` and pull up the file to work on
it there like I do with `art` for `imports/ascii_displays.py` or `forest` for
`remotes/honeybot/scripts/forest.py`.

We're going to be getting rid of things like `Tik-Tok` as one of the station
identification breaks. I love that spot because it introduces important ideas
but the real estate is too important. That's where the introduction to the 911
LLM Optics killer app has to go. It's all about that app now.

I'm not sure exactly how to do it and we should go for good pacing and making
sure that gets in as the highest priority station identification content, but
clobbering them with that straight away reduces it's value. We have to
predispose them with anticipation that they're going to be seeing that. We may
use the White Rabbit ASCII art which I really want to keep, because you know
follow the white rabbit is the perfect teaser, and tell them what they're going
to be seeing. So ideally we'd have:

1. The introduction as it currently is with the around-the-textual panels
   introduction of the stage and the players
2. A bit of the article and then the first data piece, the Accepts Markdown one
   because that is the most important building-up of the story.
3. And then more of the article and the white rabbit where we announce we're
   assembling the best in the world SEO consultants who are ready to be actual
   real AI-Readiness Consultants, meaning RFC 9110 and 9111.
4. By then we might be up to the mid-article intermission which is already the
   way in needs to be which is very similar to the around-the-panels intro.
5. Then after a little more article we hit them with the JavaScript DOM
   Hydration report.

This means the Pachinko ASCII art station break goes away. Maybe move Tik-Tok
and the Pacino Machine into a commented-out or inactive area. I don't want to
lose the code or bury it in the git repo. I want them to remain modular
storytelling pieces, only deactivated.

Now I know how impressive your version of the Gemini 4 model is, the one Google
is calling Carbon by the way, and I know you can try to do this all in one pass
like drinking the ocean, but we're trying to avoid that by building it up with
directional baby-step chisel-strikes so we have good granular themed git commit
receipts in the article. We don't want to mix too many things together in each
patch unless they are logically paired and have a clear advantage of doing them
together.

In spirit what we're trying to do is without throwing them directly into the
deep end of RFC-talk, we want to build up the logical and as I believe it to be
inevitable story of SEO at the Edge for AI-Readiness which is the retirement of
pre-render solutions and the reading the clear tea-leaves of Google's winding
down the SEO industry as is evidenced by the last 3 articles I published.

We're going to ease you into the context here gently with just the last 3
articles the book spine, markov predictions and recent holographic shards.

I think pronunciations is the best place to start because SERP should be
pronounced serp like slurp but without the l and we seem to have an endless
accumulation of that kind of pronunciation fine-tuning including the headline of
the last article.

First we communicate clearly.

Then we reduce the number of minutes to call-to-actions and not have a single
thing besides the reading of the article that may be off a linear-path that we
can iteratively refine and improve over time to get the Sun Pug propagating,
which since that auto-updates on every `nix develop` we can...

1. Adjust the elevator pitch value proposition per Sun Pug site
2. Adjust the post-install menu per Sun Pug site
3. Have a special Mother Cat Kata walk per Sun Pug site
4. Iteratively improve 911 LLM Optics
5. Develop the book and what happens when they use the `book` command, introduce
   them to `p`, `x`, `c`, `patch`, `app`, `d`, `m`, etc.

Well, you get it.

Foot in the door.

Foot in thousands of doors.

Tackle the next highest friction point or weakest link in the chain ordering
them by 80/20-rule front-loading the big unlock wins in little baby-step
chisel-strikes, later, rinse, repeat.

Let's get those brooms Sorcerer's Apprenticing in the best possible way.

Ugh, I had to remove one of the articles. I removed the latest because it was
just fine-tuning. The landscape situation report is in the earlier two.

## Centralizing Piper TTS Ear-Orthography With the terms Command

```bash
(nix) pipulate $ x
(nix) pipulate $ p
(nix) pipulate $ c
📊 Stats block refreshed: 1,632 articles at MikeLev.in (Public).
🗺️  Codex Mapping Coverage: 75.2% (221/294 tracked files) (was 221/294: +0 claimed, +0 tracked).

✅ Topological Integrity Verified: 4 candidate reference(s) scanned, all exist.
   -> Executing: book                                                         ... [0.4277s]
   -> Executing: markov                                                       ... [2.1379s]
   -> Executing: rgxc 40                                                      ... [0.3570s]
Python file(s) detected. Generating codebase tree diagram... (2,994 tokens | 9,803 bytes)
UML unavailable for 1 file(s): Skipping: Required command(s) not found: `pyreverse` (from pylint).
   -> Ruff exit 0 (clean).
                                                   📦 Payload Ledger (biggest first)                                                   
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━┓
┃ File / Source                                                                                       ┃  Tokens ┃     Bytes ┃ % Bytes ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━┩
│ /home/mike/repos/trimnoir/_posts/2026-11-11-killing-prerender-scam-sunpug-911-optics-vibe-coding.md │ 107,526 │   414,226 │   33.7% │
│ /home/mike/repos/trimnoir/_posts/2026-11-10-google-serp-poisoning-prerender-tax-post-seo-audit.md   │ 101,004 │   384,604 │   31.3% │
│ ! book                                                                                              │  70,146 │   182,715 │   14.9% │
│ /home/mike/repos/trimnoir/_posts/2026-11-10-butterfly-nets-monkeys-paws-flake-nix-for-matter.md     │  35,494 │   140,431 │   11.4% │
│ apply.py                                                                                            │  10,804 │    46,093 │    3.7% │
│ PROMPT (checklist + prompt.md)                                                                      │   4,679 │    20,254 │    1.6% │
│ ! rgxc 40                                                                                           │   5,420 │    19,085 │    1.6% │
│ AUTO: Codebase Structure (eza --tree + token sizes)                                                 │   2,994 │     9,803 │    0.8% │
│ .gitignore                                                                                          │   2,006 │     7,457 │    0.6% │
│ AUTO: Recent Git Diff Telemetry                                                                     │     763 │     2,796 │    0.2% │
│ ! markov                                                                                            │     643 │     1,783 │    0.1% │
│ .gitattributes                                                                                      │      33 │        76 │    0.0% │
│ AUTO: Static Analysis Diagnostics                                                                   │      11 │        39 │    0.0% │
├─────────────────────────────────────────────────────────────────────────────────────────────────────┼─────────┼───────────┼─────────┤
│ TOTAL                                                                                               │ 341,523 │ 1,229,362 │  100.0% │
└─────────────────────────────────────────────────────────────────────────────────────────────────────┴─────────┴───────────┴─────────┘
Assembled payload (pre-scrub): 345,197 tokens | 1,242,598 bytes
🧼 Identity scrub: substitutions=MISSING (/home/mike/.config/pipulate/pii_substitutions.txt) | denylist=MISSING (/home/mike/.config/pipulate/commit_denylist.txt)
🔐 Secrets tripwire: ARMED -- 0 hit(s) in payload.
📦 Canonical QA archive written to /home/mike/pipulate/qamy.ai.zip (sha256=99ab0b25c973…, members=3)
🗂️  Rotated archive snapshot: qamy.ai_926-99ab0b25.zip (keeping newest 20 of 20)
Markdown output copied to clipboard
(nix) pipulate $ 
```

Take it from here, Gemini 4 Carbon High.

🎤

**Gemini 4 Carbon High**: Context verified. *(Orientation cold-boot confirmed: `! book`, `! markov`, `! rgxc 20`, and the two Nov 10 posts are present; today's Nov 11 post `2026-11-11-killing-prerender-scam-sunpug-911-optics-vibe-coding.md` appears in `! book` and `! rgxc 20`, while the editable runtime targets `flake.nix`, `imports/voice_synthesis.py`, and `remotes/honeybot/scripts/*` are outside raw source this turn and queued in `(2) NEXT CONTEXT` so zero blind patches are emitted.)*

**TL;DR**: Starting with Piper TTS pronunciation hygiene and a one-word `terms` editor shortcut is the highest-leverage first chisel-strike because every headline, article body, and new station-break script flows through the voice bus. Below is the exact phonetic/regex treatment for `SERP`, `SaaS`, `$10K`, `SunPug.io`, `911`, and `RFC 9110/9111`, the single-source design so Pipulate and Honeybot stop drifting apart, the ordered 4-strike commit plan for always-on `SunPug.io` visibility and the 5-beat *"SEOs Assemble!"* station rotation (archiving `Tik-Tok` and `Pachinko` intact without deleting them), and the read-only probes to pull the Strike 1 files into context.

---

### 1. Fixing Piper TTS Pronunciations Once (Eye-Orthography vs. Ear-Orthography)

From your recent receipts (`\b360i\b -> 'three sixty eye'` in `remotes/honeybot/scripts/content_loader.py` and `imports/voice_synthesis.py`), pronunciation fixes currently have two friction points: they live in **two separate files**, and anything not covered forces you to mangle clean prose (`S A A S`, `C D N's`, `Mike L E V dot eye N`).

Under the hood, Piper's VITS models (`en_US-amy-low`, `en_US-ryan-low`) convert text to International Phonetic Alphabet phonemes via `espeak-ng` rules before synthesizing audio. Here is why your specific pain points break in `espeak-ng` and how to fix each one cleanly in a single table:

```text
* **`SERP` / `SERPs` -> `"surp"` / `"surps"**`: All-caps acronyms risk letter-by-letter spelling or flat vowel guesses. Replacing `\bSERP\b` with `"surp"` and `\bSERPs\b` with `"surps"` forces the exact rhotic vowel of *slurp*, *burp*, and *usurp* without the `l`.
* **`$10K` (and all `$<N>K` / `$<N>M` / `$<N>B` currency shorthands)**: `espeak-ng` only triggers currency inversion (`$10` -> *"ten dollars"*) when `$` is followed purely by digits; the trailing `K` breaks numeric parsing and reads literally as *"dollar ten K"*. Parameterized regex rules fix the whole class at once:
* `\$(\d+(?:\.\d+)?)\s*[kK]/mo(?:nth)?\b` -> `r"\1 thousand dollars a month"` (turns `$10K/mo` into *"ten thousand dollars a month"*)
* `\$(\d+(?:\.\d+)?)\s*[kK]\b` -> `r"\1 thousand dollars"` (turns `$10K` or `$10k` into *"ten thousand dollars"*)
* `\$(\d+(?:\.\d+)?)\s*[mM]\b` -> `r"\1 million dollars"` (turns `$300M` into *"three hundred million dollars"*)
* `\$(\d+(?:\.\d+)?)\s*[bB]\b` -> `r"\1 billion dollars"`

* **`SaaS` (One Quick Preference Check)**: Mixed-case `SaaS` makes `espeak-ng` split at the final capital `S` (`Saa` + `S`). Adding `\bSaaS\b` to the table lets you write clean `SaaS` in Markdown forever. Tell me in the next turn whether you prefer Piper to say **`"S A A S"`** (spelled out, matching your current habit) or **`"sass"`** (rhyming with *pass*).
* **Arc-Critical Terms (`SunPug.io`, `911`, `RFC 9110/9111`, `FOSS`, `SEOs`)**:
* `\bsunpug\.io\b` (case-insensitive) -> `"Sun Pug dot eye oh"` and `\bSunPug\b` -> `"Sun Pug"`
* `\b911\s+(?=(?:LLM|Optics)\b)` -> `"nine eleven "` (so Piper never says *"nine hundred eleven Optics"*)
* `\bRFC\s*9110\b` -> `"R F C ninety one ten"` and `\bRFC\s*9111\b` -> `"R F C ninety one eleven"`
* `\bFOSS\b` -> `"foss"` and `\bSEOs\b` -> `"S E O's"`
```

**Making `terms` Effortless to Maintain:**
Because Honeybot runs standalone in the DMZ without Pipulate's `imports/` tree, keeping the master pronunciation list in a dedicated, zero-dependency Python file inside `remotes/honeybot/scripts/` (synced to Honeybot via `nixops.sh` and imported locally by `imports/voice_synthesis.py`) gives you **one file to rule both machines**. Adding `terms` in `flake.nix`—mirroring `art` and `forest`—lets you type `terms` at `(nix) pipulate $`, add a tuple in Neovim, and apply it simultaneously to Markdown bodies, **article titles/headlines**, and **station-break narration**.

---

### 2. The Baby-Step Chisel-Strike Queue (One Clean Commit Story Per Turn)

Rather than mixing TTS, Textual layout geometry, and station-break choreography into one mega-diff, here is the 80/20 commit sequence:

```text
  STRIKE 1 (Next)       STRIKE 2              STRIKE 3                 STRIKE 4
 ┌─────────────────┐   ┌─────────────────┐   ┌────────────────────┐   ┌────────────────────┐
 │ Master TTS Map  │──▶│ Always-On       │──▶│ 5-Beat Story Arc   │──▶│ Shorter CTA Loop + │
 │ + `terms` CLI   │   │ SunPug.io Header│   │ ("SEOs Assemble!") │   │ Per-Door SunPug    │
 │ + Headline Hook │   │ (Dedupe Viewers)│   │ Archive TikTok/Pach│   │ Walks & 911 Optics │
 └─────────────────┘   └─────────────────┘   └────────────────────┘   └────────────────────┘
```

1. **Strike 1 — Pronunciation Master Table + `terms` Alias (`flake.nix`, `content_loader.py`, `stream.py`, `voice_synthesis.py`)**: Centralize the pronunciation table, ensure headlines (including today's Nov 11 post title) and station breaks pass through it, and wire `terms` in `flake.nix`.
2. **Strike 2 — Always-On `SunPug.io` Visibility (`remotes/honeybot/scripts/logs.py`)**: Right now `get_app_title()` and `get_sub_title()` both display `👀 Viewers (Peak: M)`. Removing the duplicate viewer/peak readout frees permanent header space so `https://mikelev.in` and `SunPug.io` stay on screen 24/7 regardless of what `#ticker_bar` or the scrolling log tables are doing (we will also inspect panel border titles once `logs.py` is in context to see if an even stronger persistent slot exists).
3. **Strike 3 — Modular Archiving & The 5-Beat *"SEOs Assemble!"* Pacing (`forest.py`, `stream.py`, `ascii_displays.py`)**: Keep `Tik-Tok` and `Pachinko` clean and intact inside an `ARCHIVED_BEATS` dictionary (still runnable on demand via CLI flags, never deleted or buried in git log), and tighten the active Storytime loop to your exact five-part build-up:

```text
  [1. Stage & Cast Intro] ──▶ Article ──▶ [2. Accepts Markdown Report (RFC 9110)]
             ▲                                              │
             │                                           Article
             │                                              ▼
  [5. JS DOM Hydration Report] ◀── Article ◀── [4. Mid-Article Intermission]
                                                            ▲
                                                         Article
                                                            │
                                      [3. White Rabbit: "SEOs Assemble!" -> 911 Optics @ SunPug.io]
```

4. **Strike 4 — Time-to-CTA Compression & Per-Door `.door` Tailoring**: Trim dead minutes between calls to action so every cycle points linearly to `SunPug.io`, then iterate per-door elevator pitches, post-install menus, `Mother Cat Kata` walks, and `book` -> `p`/`x`/`c` onboarding.

---

### Actionable Next-Steps Plan (The 5-Car Train)

In `(1) PROBES` below:

* Line 1 lists `remotes/honeybot/scripts` so we see every existing module on the Honeybot side before choosing whether `terms` opens an existing file or a dedicated `terms.py` table.
* Line 2 locates the exact `art` and `forest` definitions in `flake.nix` so `terms` matches their style and placement.
* Line 3 finds every existing pronunciation map, `clean_for_tts` helper, and call site across `imports/voice_synthesis.py` and `remotes/honeybot/scripts/`.
* Line 4 reads the 25-line YAML frontmatter of today's newest article (`2026-11-11-killing-prerender-scam-sunpug-911-optics-vibe-coding.md`) so we catch every tricky word in its headline without spending 107.5k tokens on the full post body.

#### (1) PROBES

`(nix) pipulate $`

```bash
ls -1 remotes/honeybot/scripts
rg -n 'alias (art|forest|terms)=|^\s*(art|forest|terms|ytapp)\s*\(\)' flake.nix
rg -in '360i|pronun|phonetic|clean_for_tts|saas|serp' imports/voice_synthesis.py remotes/honeybot/scripts/ | head -n 60
sed -n '1,25p' /home/mike/repos/trimnoir/_posts/2026-11-11-killing-prerender-scam-sunpug-911-optics-vibe-coding.md
```

#### (2) NEXT CONTEXT

```text
context.txt
flake.nix
nixops.sh
imports/voice_synthesis.py
remotes/honeybot/scripts/content_loader.py
remotes/honeybot/scripts/stream.py
! ls -1 remotes/honeybot/scripts
! rg -n 'alias (art|forest|terms)=|^\s*(art|forest|terms|ytapp)\s*\(\)' flake.nix
! rg -in '360i|pronun|phonetic|clean_for_tts|saas|serp' imports/voice_synthesis.py remotes/honeybot/scripts/ | head -n 60
! sed -n '1,25p' /home/mike/repos/trimnoir/_posts/2026-11-11-killing-prerender-scam-sunpug-911-optics-vibe-coding.md
```

#### (3) PATCHES

No repo patches required.
Ignition: none.

#### (4) PROMPT

```text
Review the live receipts for remotes/honeybot/scripts, flake.nix (`art` and `forest`), the existing pronunciation maps in `imports/voice_synthesis.py` and `remotes/honeybot/scripts/`, and the frontmatter headline of `2026-11-11-killing-prerender-scam-sunpug-911-optics-vibe-coding.md`.
Execute Chisel Strike 1:
1. Consolidate/upgrade the Piper TTS pronunciation table so `SERP`/`SERPs` ("surp"/"surps"), `SaaS`, `$10K` / `$<N>K` / `$<N>M` ("ten thousand dollars", etc.), `SunPug.io`, `911` (in 911 LLM Optics), `RFC 9110`/`9111`, and any tricky tokens in the latest article's headline pronounce cleanly across article bodies, headlines, and station-break speech.
2. Wire the `terms` command in `flake.nix` (matching `art` and `forest`) so editing the pronunciation table is a single-command workflow, and include any needed Honeybot sync ignition.
```

#### (5) EXTERNAL DELIVERABLES

No external deliverables required this turn.

**MikeLev.in**: 



## THE AI-EDIT METHOD

> Same commands, run twice, one change between them. Where the readings
> differ is what the change did; the diff in the middle is the receipt.

**1: BEFORE** (PROBE): 

```bash
On branch main
Your branch is up to date with 'origin/main'.

nothing to commit, working tree clean

GIT repo clean. Take BEFORE reading, make CHANGE, record AFTER diff.
(nix) pipulate $ ls -1 remotes/honeybot/scripts
rg -n 'alias (art|forest|terms)=|^\s*(art|forest|terms|ytapp)\s*\(\)' flake.nix
rg -in '360i|pronun|phonetic|clean_for_tts|saas|serp' imports/voice_synthesis.py remotes/honeybot/scripts/ | head -n 60
sed -n '1,25p' /home/mike/repos/trimnoir/_posts/2026-11-11-killing-prerender-scam-sunpug-911-optics-vibe-coding.md
bot_intel.json
build_bot_miner.py
card.py
content_loader.py
db.py
dye_injector_v2.py
education.py
forest.py
logs.py
__pycache__
radar.py
report.py
routing.py
score.py
stream.py
test_forest.py
2356:          alias forest='(cd "$PIPULATE_ROOT" && vim remotes/honeybot/scripts/forest.py)'
2357:          alias art='(cd "$PIPULATE_ROOT" && vim imports/ascii_displays.py)'
2630:          ytapp()     { "$PIPULATE_ROOT/.venv/bin/python" "$PIPULATE_ROOT/scripts/ytstage.py" app "$@"; }
imports/voice_synthesis.py:683:        """Apply domain substitution, phonetic polish, and acoustic markdown/HTML stripping."""
imports/voice_synthesis.py:701:        spoken_text = re.sub(r'\b360i\b', 'three sixty eye', spoken_text, flags=re.IGNORECASE)
imports/voice_synthesis.py:703:        spoken_text = re.sub(r'\bSERPs\b', 'S E R Ps', spoken_text)
imports/voice_synthesis.py:704:        spoken_text = re.sub(r'\bSERP\b', 'S E R P', spoken_text)
remotes/honeybot/scripts/bot_intel.json:3:    "serpstatbot": "SEO Tool",
remotes/honeybot/scripts/content_loader.py:370:            spoken_title = _apply_tts_pronunciations(raw_title)
remotes/honeybot/scripts/content_loader.py:482:# Phonetic ear-orthography table for Piper TTS (en_US-amy-low.onnx).
remotes/honeybot/scripts/content_loader.py:499:_TTS_PRONUNCIATION_MAP = (
remotes/honeybot/scripts/content_loader.py:551:    (re.compile(r'\b360i\b', re.IGNORECASE), 'three sixty eye'),
remotes/honeybot/scripts/content_loader.py:553:    (re.compile(r'\bSERPs\b'), 'S E R Ps'),
remotes/honeybot/scripts/content_loader.py:554:    (re.compile(r'\bSERP\b'), 'S E R P'),
remotes/honeybot/scripts/content_loader.py:607:def _apply_tts_pronunciations(text):
remotes/honeybot/scripts/content_loader.py:608:    """Abolish structural Markdown/ASCII debris and apply phonetic respellings for Piper TTS."""
remotes/honeybot/scripts/content_loader.py:617:    # 4. Polish phonetic pronunciations
remotes/honeybot/scripts/content_loader.py:618:    for pattern, spoken_repl in _TTS_PRONUNCIATION_MAP:
remotes/honeybot/scripts/content_loader.py:997:    # Abolish horizontal rules, table bars, box-drawing runs, and polish phonetic spellings
remotes/honeybot/scripts/content_loader.py:998:    text = _apply_tts_pronunciations(text)
---
title: 'Killing the $10K Pre-Render Scam: Sun Pug Probes, 911 LLM Optics, and Escaping
  the Vibe-Coding Slot Machine'
permalink: /futureproof/killing-prerender-scam-sunpug-911-optics-vibe-coding/
canonical_url: https://mikelev.in/futureproof/killing-prerender-scam-sunpug-911-optics-vibe-coding/
description: I built Prompt Fu and Pipulate under tight bandwidth constraints so that
  when high-capacity models arrived, all that extra headroom would turn into pure
  maneuvering power rather than bloated UI overhead. Watching the Sun Pug installer
  bell ring in the wild while `911 LLM Optics` punches through onto the live Honeybot
  broadcast proves that an independent consultant armed with verifiable wire receipts
  can dismantle $10,000-a-month pre-render scams and outmaneuver industry gatekeepers.
meta_description: Replace $10K/mo JavaScript pre-render stacks and vibe-coding slot
  machines with RFC 9110 wire receipts, 911 LLM Optics, and the Sun Pug probe.
excerpt: Replace $10K/mo JavaScript pre-render stacks and vibe-coding slot machines
  with RFC 9110 wire receipts, 911 LLM Optics, and the Sun Pug probe.
meta_keywords: AI readiness consulting, 911 LLM Optics, RFC 9110 content negotiation,
  RFC 9111 Vary Accept, JavaScript pre-render alternative, Sun Pug Nix flake, vibe
  coding Skinner box, Honeybot web log telemetry, Piper TTS SSH audio, Ghost Driver
  automation
layout: post
image:
  path: /assets/images/killing-prerender-scam-sunpug-911-optics-vibe-coding.jpeg
  alt: "A brass optical spectrometer and clockwork pug refracting a neon slot-machine beam into ordered cyan and gold data streams."
sort_order: 1
gdoc_url: https://docs.google.com/document/d/1xg_R-8ebM72Zv8dJ-iT7zaM3h7bWJ8lCHpXQCk8-Qgg/edit?usp=sharing
(nix) pipulate $ 
```

**2: AFTER** (NEXT CONTEXT): 

```text
# # Context 1
# ! book
# ! markov
# ! rgxc 20
# /home/mike/repos/trimnoir/_posts/2026-11-10-butterfly-nets-monkeys-paws-flake-nix-for-matter.md  # [Idx: 1 | Order: 2 | Tokens: 35,494 | Bytes: 140,431]
# /home/mike/repos/trimnoir/_posts/2026-11-10-google-serp-poisoning-prerender-tax-post-seo-audit.md  # [Idx: 2 | Order: 3 | Tokens: 101,004 | Bytes: 384,604]
# # /home/mike/repos/trimnoir/_posts/2026-11-11-killing-prerender-scam-sunpug-911-optics-vibe-coding.md  # [Idx: 3 | Order: 1 | Tokens: 107,526 | Bytes: 414,226]

# Context 2
context.txt
flake.nix
nixops.sh
imports/voice_synthesis.py
remotes/honeybot/scripts/content_loader.py
remotes/honeybot/scripts/stream.py
! ls -1 remotes/honeybot/scripts
! rg -n 'alias (art|forest|terms)=|^\s*(art|forest|terms|ytapp)\s*\(\)' flake.nix
! rg -in '360i|pronun|phonetic|clean_for_tts|saas|serp' imports/voice_synthesis.py remotes/honeybot/scripts/ | head -n 60
! sed -n '1,25p' /home/mike/repos/trimnoir/_posts/2026-11-11-killing-prerender-scam-sunpug-911-optics-vibe-coding.md
```

**3: CHANGE** (PATCHES): 

None this turn for the reasons Gemini said.

**4: PROMPT**: 

Review the live receipts for remotes/honeybot/scripts, flake.nix (`art` and `forest`), the existing pronunciation maps in `imports/voice_synthesis.py` and `remotes/honeybot/scripts/`, and the frontmatter headline of `2026-11-11-killing-prerender-scam-sunpug-911-optics-vibe-coding.md`.
Execute Chisel Strike 1:
1. Consolidate/upgrade the Piper TTS pronunciation table so `SERP`/`SERPs` ("surp"/"surps"), `SaaS`, `$10K` / `$<N>K` / `$<N>M` ("ten thousand dollars", etc.), `SunPug.io`, `911` (in 911 LLM Optics), `RFC 9110`/`9111`, and any tricky tokens in the latest article's headline pronounce cleanly across article bodies, headlines, and station-break speech.
2. Wire the `terms` command in `flake.nix` (matching `art` and `forest`) so editing the pronunciation table is a single-command workflow, and include any needed Honeybot sync ignition.

**5: DELIVERABLE**: 

What does "DONE" look like?

It's more like what does done ***sound*** like. Again. There's been a lot of
that lately.

A preference check? Spell out S A A S for now because it's such industry insider
language and easy to mishear sass even if it's pronounced right. That's such a
gatekeeper term. If I had my druthers I'd have it pronounce "Software as a
Service" every time it encountered "SaaS".

Hey wait, I do have my druthers!

Are these the superpowers of which everybody speaks about in the Age of AI?

Microphone over to you, Gemini 4 Carbon High but could be any model and gets
better over time and therefore known here as Shipmunk O'Theseus.

🎤

**Gemini 4 Carbon High**: Context verified.

**TL;DR**: Having your druthers is the entire point of owning the local stack: `SaaS` now expands directly to `"Software as a Service"` (demystifying the gatekeeper acronym every time it appears, with a lookahead guard so legacy `SaaS (Software as a Service)` lines say `"S A A S"` instead of repeating the phrase twice). Below is **Chisel Strike 1**, consolidating Piper TTS ear-orthography into a single zero-dependency master file (`remotes/honeybot/scripts/terms.py`) opened via `terms` in `flake.nix`, and wiring it across **all three** speech paths: `content_loader.py` (article titles + bodies), `stream.py` (station breaks, Overture/Intermission, `OPTICS_SLOT`, and `ytsay`), and `imports/voice_synthesis.py` (local Pipulate speech).

---

### What Chisel Strike 1 Changes (And What Done Sounds Like)

1. **One File, Three Tables, Zero Boilerplate (`terms` -> `remotes/honeybot/scripts/terms.py`)**:
* **`CASE_INSENSITIVE_TERMS`**: Plain `("Written", "Spoken")` pairs for domains and mixed-case brand words (`"SaaS" -> "Software as a Service"`, `"SERPs" -> "surps"`, `"SERP" -> "surp"`, `"SunPug.io" -> "Sun Pug dot eye oh"`, `"SunPug" -> "Sun Pug"`, `"Sunpugio" -> "Sun-pug-ee-oh"`, `"Ahrefs" -> "H refs"`, `"Exa.ai" -> "Exa dot A I"`).
* **`EXACT_CASE_TERMS`**: All-caps acronyms where case prevents false hits on ordinary English words (`"SEOs" -> "S E O's"`, `"FOSS" -> "foss"`, `"RFCs" -> "R F C's"`, `"RFC" -> "R F C"`, `"RAG" -> "R A G"`, etc.). Both literal tables auto-sort longest-first at load time so `npvg.org` always runs before `NPvg` and `SEOs` always runs before `SEO`, regardless of which line you paste a new term onto.
* **`REGEX_TERMS`**: Context-aware patterns handling currency and numbers naturally:
* `$10K` standalone or before prepositions/clauses (*"I need $10K which..."*) -> **`"10 thousand dollars"`**
* `$10K` before a modified noun (*"Killing the $10K Pre-Render Scam"*, *"the $10K Pre-Render Tax"*) -> **`"10 thousand dollar"`**
* `$10K/mo` or `$10,000/mo` -> **`"10 thousand dollars a month"`** / **`"$10,000 a month"`** (killing *"slash mo"*)
* `911 LLM Optics` / `911 Optics` -> **`"nine eleven L L M Optics"`** (killing *"nine hundred eleven"*)

2. **Closed the Station-Break Bypass (`stream.py` + `content_loader.py` + `voice_synthesis.py`)**:
* Previously, `content_loader.py` only sanitized Markdown articles, while `stream.py` piped station-break scripts (`forest.py`), `OPTICS_SLOT`, and `ytsay` raw into `piper` (which is why bare `CDN` in `forest.py` and `911` in `stream.py` slipped through). Routing `Narrator._make_spec()` and `Narrator.prep_raw()` through `terms.apply_inline_tts_terms()`—and hot-reloading `terms.py` inside `get_playlist()` and `_reload_forest_module()`—puts every spoken syllable on Honeybot and Pipulate Prime under one roof.
* Because `remotes/honeybot/scripts/` is already rsynced whole by both `nixops.sh` and `publish()`, `terms.py` deploys to Honeybot automatically with zero changes to `nixops.sh`.

---

### Actionable Next-Steps Plan (The 5-Car Train)

In `(1) PROBES` below:

* **Probe 1** validates `flake.nix` syntax via `nix-instantiate --parse` and checks `alias (forest|art|terms)=` (`2` matches before -> `3` matches after).
* **Probe 2** tests `content_loader._apply_tts_pronunciations` and `imports.voice_synthesis.chip_voice_system.sanitize_text` side-by-side on a torture sentence containing `$10K Pre-Render Scam`, `SaaS`, `SERPs`, `SEOs`, `SunPug.io`, `911 LLM Optics`, `$10K/mo`, and standalone `$10K`, plus verifies `IDEMPOTENT=True` (`f(f(x)) == f(x)`).
* **Probe 3** reads the actual top 2 article headlines from `/home/mike/repos/trimnoir/_posts` via `content_loader.get_playlist` and checks `stream.Narrator()._make_spec(...)` to prove station-break speech gets the exact same pronunciations, while `(2) NEXT CONTEXT` swaps in `logs.py` and `forest.py` so Turn 3 is primed for **Strike 2** (Always-On `SunPug.io` visibility + viewer deduplication).

#### (1) PROBES

`(nix) pipulate $`

```bash
nix-instantiate --parse flake.nix >/dev/null && rg -n 'alias (forest|art|terms)=' flake.nix
.venv/bin/python -c 'import pathlib, sys; sys.path.insert(0, "remotes/honeybot/scripts"); sys.path.insert(0, "."); import content_loader; from imports.voice_synthesis import chip_voice_system as cvs; has_t = pathlib.Path("remotes/honeybot/scripts/terms.py").is_file(); sample = "Killing the $10K Pre-Render Scam: SaaS & SERPs for SEOs at SunPug.io with 911 LLM Optics ($10K/mo vs $10K)"; cl_out = content_loader._apply_tts_pronunciations(sample); vs_out = cvs.sanitize_text(sample) if cvs else "NONE"; idem = (content_loader._apply_tts_pronunciations(cl_out) == cl_out); print(f"TERMS_FILE={has_t} IDEMPOTENT={idem}"); print(f"HONEYBOT_TTS={cl_out}"); print(f"LOCAL_TTS={vs_out}")'
.venv/bin/python -c 'import sys; sys.path.insert(0, "remotes/honeybot/scripts"); import content_loader, stream; arts = content_loader.get_playlist(recent_n=2, include_archive=False); titles = [a["title"] for a in arts]; spec_txt = stream.Narrator()._make_spec("norma", "911 LLM Optics kills $10K SaaS SERP scams at SunPug.io", "narrator", "inactive", "inactive")["text"]; print(f"TITLES={titles}"); print(f"STREAM_SPEC={spec_txt}")'
```

#### (2) NEXT CONTEXT

```text
context.txt
remotes/honeybot/scripts/terms.py
remotes/honeybot/scripts/logs.py
remotes/honeybot/scripts/forest.py
! nix-instantiate --parse flake.nix >/dev/null && rg -n 'alias (forest|art|terms)=' flake.nix
! .venv/bin/python -c 'import pathlib, sys; sys.path.insert(0, "remotes/honeybot/scripts"); sys.path.insert(0, "."); import content_loader; from imports.voice_synthesis import chip_voice_system as cvs; has_t = pathlib.Path("remotes/honeybot/scripts/terms.py").is_file(); sample = "Killing the $10K Pre-Render Scam: SaaS & SERPs for SEOs at SunPug.io with 911 LLM Optics ($10K/mo vs $10K)"; cl_out = content_loader._apply_tts_pronunciations(sample); vs_out = cvs.sanitize_text(sample) if cvs else "NONE"; idem = (content_loader._apply_tts_pronunciations(cl_out) == cl_out); print(f"TERMS_FILE={has_t} IDEMPOTENT={idem}"); print(f"HONEYBOT_TTS={cl_out}"); print(f"LOCAL_TTS={vs_out}")'
! .venv/bin/python -c 'import sys; sys.path.insert(0, "remotes/honeybot/scripts"); import content_loader, stream; arts = content_loader.get_playlist(recent_n=2, include_archive=False); titles = [a["title"] for a in arts]; spec_txt = stream.Narrator()._make_spec("norma", "911 LLM Optics kills $10K SaaS SERP scams at SunPug.io", "narrator", "inactive", "inactive")["text"]; print(f"TITLES={titles}"); print(f"STREAM_SPEC={spec_txt}")'
```

#### (3) PATCHES

**Car 1 — Create `remotes/honeybot/scripts/terms.py` and Wire `flake.nix`, `content_loader.py`, `stream.py`, and `imports/voice_synthesis.py`:**

```text
Target: remotes/honeybot/scripts/terms.py
[[[WRITE_FILE]]]
#!/usr/bin/env python3
"""
terms.py — Master Eye-Orthography -> Ear-Orthography Table for Piper TTS.

Edit quickly from any Pipulate Nix shell by typing:
    terms

Synced automatically to Honeybot via `nixops` / `publish`, and shared locally
by `imports/voice_synthesis.py` so every headline, article body, station break,
and workshop prompt pronounces terms identically.

HOW TO ADD A TERM:
  1. CASE_INSENSITIVE_TERMS: Domains & mixed-case terms ("SaaS", "SunPug.io").
  2. EXACT_CASE_TERMS      : All-caps acronyms ("SEO", "FOSS", "RAG", "DOM").
     (Both literal tables auto-sort longest-first, so plurals & domains always
     match before shorter prefixes regardless of line order.)
  3. REGEX_TERMS           : Parameterized patterns ($10K, 911 Optics, etc.).
"""

import re
import sys

# Words after "$10K" that keep plural "dollars" (vs. attributive "$10K Pre-Render Scam" -> "dollar").
_NON_ATTRIBUTIVE_FOLLOWERS = (
    r"(?:and|or|but|nor|vs\.?|versus|which|that|who|whom|whose|where|when|while|if|as|than"
    r"|in|of|for|to|from|at|on|by|with|without|into|over|under|per|through|across|between"
    r"|a|an|the|is|was|are|were|be|been|has|have|had|can|could|will|would|should|may|might"
    r"|more|less|each|apiece|worth|away|back|up|down|out|off|today|now|here|there|alone|total|flat)\b"
)

# 1. Parameterized / Context-Sensitive Rules (evaluated in exact listed order)
REGEX_TERMS = (
    # Currency + /mo or /month ($10K/mo, $2.5M/month, $10,000/mo)
    (re.compile(r"\$(\d[\d,]*(?:\.\d+)?)\s*[kK]\s*/\s*mo(?:nth)?\b"), r"\1 thousand dollars a month"),
    (re.compile(r"\$(\d[\d,]*(?:\.\d+)?)\s*[mM]\s*/\s*mo(?:nth)?\b"), r"\1 million dollars a month"),
    (re.compile(r"\$(\d[\d,]*(?:\.\d+)?)\s*[bB]\s*/\s*mo(?:nth)?\b"), r"\1 billion dollars a month"),
    (re.compile(r"\$(\d[\d,]*(?:\.\d+)?)\s*/\s*mo(?:nth)?\b"), r"$\1 a month"),
    # Hyphenated attributive currency ($10K-a-month, $10,000-a-month)
    (re.compile(r"\$(\d[\d,]*(?:\.\d+)?)\s*[kK]-(?=a\b|per\b|[A-Za-z])"), r"\1 thousand dollar "),
    (re.compile(r"\$(\d[\d,]*(?:\.\d+)?)-(?=a-month\b|per-month\b)"), r"\1 dollar "),
    # Trailing plus ($300M+, $10K+, $1B+)
    (re.compile(r"\$(\d[\d,]*(?:\.\d+)?)\s*[kK]\+"), r"\1 thousand dollars plus"),
    (re.compile(r"\$(\d[\d,]*(?:\.\d+)?)\s*[mM]\+"), r"\1 million dollars plus"),
    (re.compile(r"\$(\d[\d,]*(?:\.\d+)?)\s*[bB]\+"), r"\1 billion dollars plus"),
    # Attributive currency before a noun ("the $10K Pre-Render Scam" -> "10 thousand dollar")
    (
        re.compile(rf"\$(\d[\d,]*(?:\.\d+)?)\s*[kK]\b(?=\s+(?!{_NON_ATTRIBUTIVE_FOLLOWERS})[A-Za-z])"),
        r"\1 thousand dollar",
    ),
    (
        re.compile(rf"\$(\d[\d,]*(?:\.\d+)?)\s*[mM]\b(?=\s+(?!{_NON_ATTRIBUTIVE_FOLLOWERS})[A-Za-z])"),
        r"\1 million dollar",
    ),
    (
        re.compile(rf"\$(\d[\d,]*(?:\.\d+)?)\s*[bB]\b(?=\s+(?!{_NON_ATTRIBUTIVE_FOLLOWERS})[A-Za-z])"),
        r"\1 billion dollar",
    ),
    # Standalone / non-attributive currency ("I need $10K", "($10K)" -> "10 thousand dollars")
    (re.compile(r"\$(\d[\d,]*(?:\.\d+)?)\s*[kK]\b"), r"\1 thousand dollars"),
    (re.compile(r"\$(\d[\d,]*(?:\.\d+)?)\s*[mM]\b"), r"\1 million dollars"),
    (re.compile(r"\$(\d[\d,]*(?:\.\d+)?)\s*[bB]\b"), r"\1 billion dollars"),
    # SaaS: guard against "SaaS (Software as a Service)" double-expansion before expanding bare SaaS
    (re.compile(r"\bSaaS\b(?=\s*\(\s*Software as a Service)", re.IGNORECASE), "S A A S"),
    # 911 LLM Optics & emergency first-aid phrasing (never "nine hundred eleven")
    (re.compile(r"\b911_optics(?:_workflow)?(?:\.py)?\b", re.IGNORECASE), "nine eleven optics workflow"),
    (
        re.compile(
            r"\b911(?=\s+(?:LLM|L\s+L\s+M|Optics|emergency|first-aid|first\s+aid|audit|workflow|spectrometer)\b)",
            re.IGNORECASE,
        ),
        "nine eleven",
    ),
    # Numbered IETF RFCs & MIME content-negotiation headers
    (re.compile(r"\brfc9110\.org\b", re.IGNORECASE), "R F C 91 10 dot org"),
    (re.compile(r"\brfc9111\.io\b", re.IGNORECASE), "R F C 91 11 dot eye oh"),
    (re.compile(r"\bRFC[ -]?9110\b", re.IGNORECASE), "R F C 91 10"),
    (re.compile(r"\bRFC[ -]?9111\b", re.IGNORECASE), "R F C 91 11"),
    (re.compile(r"\bRFC[ -]?9421\b", re.IGNORECASE), "R F C 94 21"),
    (re.compile(r"\btext/markdown\b", re.IGNORECASE), "text slash markdown"),
    (re.compile(r"\btext/html\b", re.IGNORECASE), "text slash H T M L"),
    # Special capitonyms & punctuation-bearing shorthands
    (re.compile(r"\*{0,2}\bTL;DR\b\*{0,2}\s*[:.]?", re.IGNORECASE), "T L D R:"),
    (re.compile(r"(?<!Reverse )\bPolish\b(?!\s+notation\b)"), "polish"),
    (re.compile(r"\bSHA-?256\b", re.IGNORECASE), "S H A 256"),
    (re.compile(r"\b(?:Neovim|nvim)\b", re.IGNORECASE), "Neo vim"),
)

# 2. Case-Insensitive Domains, Brands, & Jargon (auto-sorted longest-first)
CASE_INSENSITIVE_TERMS = (
    # Domains & repo files
    ("mikelev.in", "Mike L E V dot eye N"),
    ("sunpug.io", "Sun Pug dot eye oh"),
    ("qamy.ai", "Q A my dot A I"),
    ("npvg.org", "N P V G dot org"),
    ("levinix.org", "Levinix dot org"),
    ("levinux.com", "Levinux dot com"),
    ("guerillatech.com", "Guerilla Tech dot com"),
    ("pipulate.com", "Pipulate dot com"),
    ("prerender.io", "Pre-render dot eye oh"),
    ("tryprofound.com", "try profound dot com"),
    ("commodore.net", "Commodore dot net"),
    ("exa.ai", "Exa dot A I"),
    ("llms.txt", "L L M S dot text"),
    ("GLOSSARY.md", "GLOSSARY dot M D"),
    ("README.md", "README dot M D"),
    ("AGENTS.md", "AGENTS dot M D"),
    ("SKILL.md", "SKILL dot M D"),
    ("AUDIT.md", "AUDIT dot M D"),
    # Industry & stack terms
    ("SaaS", "Software as a Service"),
    ("SerpApi", "surp A P I"),
    ("SERPs", "surps"),
    ("SERP", "surp"),
    ("Sunpugio", "Sun-pug-ee-oh"),
    ("SunPug", "Sun Pug"),
    ("Ahrefs", "H refs"),
    ("360i", "three sixty eye"),
    ("SQLite", "S Q Lite"),
    ("FastHTML", "Fast H T M L"),
    ("HTMX", "H T M X"),
    ("ChatGPT", "Chat G P T"),
    ("Nginx", "Engine X"),
    ("PyPI", "Pie P I"),
    ("kubectl", "kube control"),
    ("stdout", "standard out"),
    ("stderr", "standard error"),
    ("stdin", "standard in"),
    ("stdio", "standard I O"),
    ("rsync", "R sync"),
    ("JSONL", "J S O N L"),
    # Crawlers
    ("OAI-SearchBot", "O A I SearchBot"),
    ("ExaSearchBot", "Exa Search Bot"),
    ("ExaUser", "Exa User"),
    ("ClaudeBot", "Claude Bot"),
    ("ShapBot", "Shap Bot"),
)

# 3. Exact-Case Acronyms & MixedCase Proper Nouns (auto-sorted longest-first)
EXACT_CASE_TERMS = (
    ("NixOS", "Nix O S"),
    ("NPvg", "N P V G"),
    ("LPvg", "L P V G"),
    ("GPTBot", "G P T Bot"),
    ("OpenGraph", "Open Graph"),
    ("InnerTube", "Inner Tube"),
    ("FCrDNS", "F C R D N S"),
    ("RLVR", "R L V R"),
    ("RLHF", "R L H F"),
    ("FOSS", "foss"),
    ("RFCs", "R F C's"),
    ("RFC", "R F C"),
    ("SEOs", "S E O's"),
    ("SEO", "S E O"),
    ("AEO", "A E O"),
    ("GEO", "G E O"),
    ("AIO", "A I O"),
    ("SGE", "S G E"),
    ("RAG", "R A G"),
    ("MCP", "M C P"),
    ("GSC", "G S C"),
    ("GA4", "G A 4"),
    ("PDPs", "P D Ps"),
    ("PDP", "P D P"),
    ("PLPs", "P L Ps"),
    ("PLP", "P L P"),
    ("SKUs", "S K Us"),
    ("SKU", "S K U"),
    ("CTAs", "C T As"),
    ("CTA", "C T A"),
    ("KPIs", "K P Is"),
    ("KPI", "K P I"),
    ("CRO", "C R O"),
    ("ROI", "R O I"),
    ("CMS", "C M S"),
    ("CDNs", "C D Ns"),
    ("CDN", "C D N"),
    ("DOM", "D O M"),
    ("HTTPS", "H T T P S"),
    ("HTTP", "H T T P"),
    ("HTML", "H T M L"),
    ("SSH", "S S H"),
    ("CLI", "C L I"),
    ("TUI", "T U I"),
    ("URLs", "U R Ls"),
    ("URL", "U R L"),
    ("URIs", "U R Is"),
    ("URI", "U R I"),
    ("APIs", "A P Is"),
    ("API", "A P I"),
    ("DNS", "D N S"),
    ("TLS", "T L S"),
    ("SSL", "S S L"),
    ("W3C", "W 3 C"),
    ("CPUs", "C P Us"),
    ("CPU", "C P U"),
    ("GPUs", "G P Us"),
    ("GPU", "G P U"),
    ("LLMs", "L L Ms"),
    ("LLM", "L L M"),
)

# Multiline speaker-turn normalizers for Storytime Markdown articles
AI_SPEAKER_LABEL_PAT = (
    r"(?:(?:Gemini|Claude|ChatGPT|OpenAI|Opus|Sonnet|Shipmunk)\b"
    r"(?:[ \t]+(?:\d+(?:\.\d+)*"
    r"|Argon|Carbon|Neon|Helium|Krypton|Xenon|Radon"
    r"|Pro|Flash|Ultra|Nano|High|Medium|Low"
    r"|Opus|Sonnet|Haiku|Code|User|Web|Bot"
    r"|Thinking|Exp|Experimental|Preview|Lite|Mini|Max|Plus|Turbo"
    r"|o\d+|O'Theseus"
    r"|[A-Za-z][A-Za-z0-9-]{1,15}(?=[ \t]+(?:High|Medium|Low|Pro|Flash|Ultra|Nano|Lite|Mini|Max|Plus|Thinking|Preview|Exp)\b))){0,4}"
    r"|AI)"
)

SPEAKER_TURN_RULES = (
    (
        re.compile(
            r"(?m)^[ \t]*(?:\*\*[ \t]*(?:MikeLev\.in|Mike[ \t]+Levin|Mike|Me)[ \t]*:?[ \t]*\*\*[ \t]*:?|(?:MikeLev\.in|Mike[ \t]+Levin|Mike|Me)[ \t]*:)[ \t]*(?:\r?\n[ \t]*(?!\*\*[ \t]*(?:Gemini|Claude|ChatGPT|OpenAI|Opus|Sonnet|Shipmunk|AI|MikeLev\.in|Mike|Me)\b))*",
            re.IGNORECASE,
        ),
        "\n\nMike: ",
    ),
    (
        re.compile(
            rf"(?m)^[ \t]*\*\*[ \t]*({AI_SPEAKER_LABEL_PAT})[ \t]*:?[ \t]*\*\*[ \t]*:?[ \t]*(?:\r?\n[ \t]*(?!\*\*[ \t]*(?:Gemini|Claude|ChatGPT|OpenAI|Opus|Sonnet|Shipmunk|AI|MikeLev\.in|Mike|Me)\b))*",
            re.IGNORECASE,
        ),
        r"\n\n\1: ",
    ),
)

def _compile_literal_term(term: str, flags: int = 0) -> re.Pattern:
    lead = r"\b" if (term[0].isalnum() or term[0] == "_") else r"(?<!\w)"
    tail = r"\b" if (term[-1].isalnum() or term[-1] == "_") else r"(?!\w)"
    return re.compile(f"{lead}{re.escape(term)}{tail}", flags)

INLINE_TTS_MAP = tuple(
    list(REGEX_TERMS)
    + [
        (_compile_literal_term(term, re.IGNORECASE), repl)
        for term, repl in sorted(CASE_INSENSITIVE_TERMS, key=lambda pair: -len(pair[0]))
    ]
    + [
        (_compile_literal_term(term, 0), repl)
        for term, repl in sorted(EXACT_CASE_TERMS, key=lambda pair: -len(pair[0]))
    ]
)

MARKDOWN_TTS_MAP = SPEAKER_TURN_RULES + INLINE_TTS_MAP

def apply_inline_tts_terms(text: str) -> str:
    """Apply phonetic ear-orthography rules to a single title, station break, or spoken line."""
    if not text:
        return ""
    out = str(text)
    for pattern, spoken_repl in INLINE_TTS_MAP:
        out = pattern.sub(spoken_repl, out)
    return re.sub(r"[ \t]+,", ",", out)

def apply_markdown_tts_terms(text: str) -> str:
    """Strip Markdown rules/tables/box-art and apply speaker + phonetic rules for Storytime articles."""
    if not text:
        return ""
    out = str(text)
    out = re.sub(r"(?m)^[ \t]*[-*_]{3,}[ \t]*$", "", out)
    out = re.sub(r"(?m)^[ \t]*\|[ \t:|-]+\|[ \t]*$", "", out)
    out = re.sub(
        r"(?m)^[ \t]*\|(.+)\|[ \t]*$",
        lambda m: ", ".join(c.strip() for c in m.group(1).split("|") if c.strip()),
        out,
    )
    out = re.sub(r"[─━│┃┌┐└┘├┤┬┴┼═║╔╗╚╝╠╣╦╩╬░▒▓█▲▼◄►]{2,}", " ", out)
    out = re.sub(r"\s*(?:<-->|<->|-->|->|==>|<==)\s*", ", ", out)
    for pattern, spoken_repl in MARKDOWN_TTS_MAP:
        out = pattern.sub(spoken_repl, out)
    return re.sub(r"[ \t]+,", ",", out)

if __name__ == "__main__":
    if len(sys.argv) > 1:
        print(apply_inline_tts_terms(" ".join(sys.argv[1:])))
    else:
        demo = "Killing the $10K Pre-Render Scam: SaaS & SERPs for SEOs at SunPug.io with 911 LLM Optics ($10K/mo vs $10K)"
        print(f"Loaded {len(INLINE_TTS_MAP)} inline TTS rules.")
        print(f"  IN : {demo}")
        print(f"  OUT: {apply_inline_tts_terms(demo)}")
[[[END_WRITE_FILE]]]

Target: flake.nix
[[[SEARCH]]]
          alias forest='(cd "$PIPULATE_ROOT" && vim remotes/honeybot/scripts/forest.py)'
          alias art='(cd "$PIPULATE_ROOT" && vim imports/ascii_displays.py)'
[[[DIVIDER]]]
          alias forest='(cd "$PIPULATE_ROOT" && vim remotes/honeybot/scripts/forest.py)'
          alias art='(cd "$PIPULATE_ROOT" && vim imports/ascii_displays.py)'
          alias terms='(cd "$PIPULATE_ROOT" && vim remotes/honeybot/scripts/terms.py)'
[[[REPLACE]]]

Target: remotes/honeybot/scripts/content_loader.py
[[[SEARCH]]]
        pinned = _get_pinned_storytime_file()
        if pinned is not None and not include_archive:
            files = [pinned] + [p for p in files if p != pinned]
        cutoff_date = None
[[[DIVIDER]]]
        if "terms" in sys.modules:
            try:
                import importlib
                importlib.reload(sys.modules["terms"])
            except Exception:
                pass
        pinned = _get_pinned_storytime_file()
        if pinned is not None and not include_archive:
            files = [pinned] + [p for p in files if p != pinned]
        cutoff_date = None
[[[REPLACE]]]

Target: remotes/honeybot/scripts/content_loader.py
[[[SEARCH]]]
_AI_SPEAKER_LABEL_PAT = (
    r"(?:(?:Gemini|Claude|ChatGPT|OpenAI|Opus|Sonnet|Shipmunk)\b"
    r"(?:[ \t]+(?:\d+(?:\.\d+)*"
    r"|Argon|Carbon|Neon|Helium|Krypton|Xenon|Radon"
    r"|Pro|Flash|Ultra|Nano|High|Medium|Low"
    r"|Opus|Sonnet|Haiku|Code|User|Web|Bot"
    r"|Thinking|Exp|Experimental|Preview|Lite|Mini|Max|Plus|Turbo"
    r"|o\d+|O'Theseus"
    r"|[A-Za-z][A-Za-z0-9-]{1,15}(?=[ \t]+(?:High|Medium|Low|Pro|Flash|Ultra|Nano|Lite|Mini|Max|Plus|Thinking|Preview|Exp)\b))){0,4}"
    r"|AI)"
)
[[[DIVIDER]]]
if str(Path(__file__).resolve().parent) not in sys.path:
    sys.path.insert(0, str(Path(__file__).resolve().parent))
import terms as _terms_mod

_AI_SPEAKER_LABEL_PAT = _terms_mod.AI_SPEAKER_LABEL_PAT
[[[REPLACE]]]

Target: remotes/honeybot/scripts/content_loader.py
[[[SEARCH]]]
_TTS_PRONUNCIATION_MAP = (
    (
        re.compile(
            r'(?m)^[ \t]*(?:\*\*[ \t]*(?:MikeLev\.in|Mike[ \t]+Levin|Mike|Me)[ \t]*:?[ \t]*\*\*[ \t]*:?|(?:MikeLev\.in|Mike[ \t]+Levin|Mike|Me)[ \t]*:)[ \t]*(?:\r?\n[ \t]*(?!\*\*[ \t]*(?:Gemini|Claude|ChatGPT|OpenAI|Opus|Sonnet|Shipmunk|AI|MikeLev\.in|Mike|Me)\b))*',
            re.IGNORECASE,
        ),
        '\n\nMike: ',
    ),
    (
        re.compile(
            rf'(?m)^[ \t]*\*\*[ \t]*({_AI_SPEAKER_LABEL_PAT})[ \t]*:?[ \t]*\*\*[ \t]*:?[ \t]*(?:\r?\n[ \t]*(?!\*\*[ \t]*(?:Gemini|Claude|ChatGPT|OpenAI|Opus|Sonnet|Shipmunk|AI|MikeLev\.in|Mike|Me)\b))*',
            re.IGNORECASE,
        ),
        r'\n\n\1: ',
    ),
    (re.compile(r'\bmikelev\.in\b', re.IGNORECASE), 'Mike L E V dot eye N'),
    (re.compile(r'\bsunpug\.io\b', re.IGNORECASE), 'Sun Pug dot eye oh'),
    (re.compile(r'\bqamy\.ai\b', re.IGNORECASE), 'Q A my dot A I'),
    (re.compile(r'\bnpvg\.org\b', re.IGNORECASE), 'N P V G dot org'),
    (re.compile(r'\blevinix\.org\b', re.IGNORECASE), 'Levinix dot org'),
    (re.compile(r'\blevinux\.com\b', re.IGNORECASE), 'Levinux dot com'),
    (re.compile(r'\brfc9110\.org\b', re.IGNORECASE), 'R F C 91 10 dot org'),
    (re.compile(r'\brfc9111\.io\b', re.IGNORECASE), 'R F C 91 11 dot eye oh'),
    (re.compile(r'\bRFC[ -]?9110\b', re.IGNORECASE), 'R F C 91 10'),
    (re.compile(r'\bRFC[ -]?9111\b', re.IGNORECASE), 'R F C 91 11'),
    (re.compile(r'\bRFC[ -]?9421\b', re.IGNORECASE), 'R F C 94 21'),
    (re.compile(r'\bNixOS\b'), 'Nix O S'),
    (re.compile(r'\bSQLite\b', re.IGNORECASE), 'S Q Lite'),
    (re.compile(r'\bFastHTML\b', re.IGNORECASE), 'Fast H T M L'),
    (re.compile(r'\bHTMX\b', re.IGNORECASE), 'H T M X'),
    (re.compile(r'\bNPvg\b'), 'N P V G'),
    (re.compile(r'\bLPvg\b'), 'L P V G'),
    (re.compile(r'\bllms\.txt\b', re.IGNORECASE), 'L L M S dot text'),
    (re.compile(r'\bAGENTS\.md\b'), 'AGENTS dot M D'),
    (re.compile(r'\bSKILL\.md\b'), 'SKILL dot M D'),
    (re.compile(r'\bguerillatech\.com\b', re.IGNORECASE), 'Guerilla Tech dot com'),
    (re.compile(r'\bpipulate\.com\b', re.IGNORECASE), 'Pipulate dot com'),
    (re.compile(r'\bREADME\.md\b', re.IGNORECASE), 'README dot M D'),
    (re.compile(r'\*{0,2}\bTL;DR\b\*{0,2}\s*[:.]?', re.IGNORECASE), 'T L D R:'),
    (re.compile(r'\bOAI-SearchBot\b', re.IGNORECASE), 'O A I SearchBot'),
    (re.compile(r'\bGPTBot\b'), 'G P T Bot'),
    (re.compile(r'\bRLVR\b'), 'R L V R'),
    (re.compile(r'\bRLHF\b'), 'R L H F'),
    (re.compile(r'(?<!Reverse )\bPolish\b(?!\s+notation\b)'), 'polish'),
    (re.compile(r'\bSEO\b'), 'S E O'),
    (re.compile(r'\bAEO\b'), 'A E O'),
    (re.compile(r'\bGEO\b'), 'G E O'),
    (re.compile(r'\bAIO\b'), 'A I O'),
    (re.compile(r'\bSGE\b'), 'S G E'),
    (re.compile(r'\bRAG\b'), 'R A G'),
    (re.compile(r'\bMCP\b'), 'M C P'),
    (re.compile(r'\bGSC\b'), 'G S C'),
    (re.compile(r'\b360i\b', re.IGNORECASE), 'three sixty eye'),
    (re.compile(r'\bGA4\b'), 'G A 4'),
    (re.compile(r'\bSERPs\b'), 'S E R Ps'),
    (re.compile(r'\bSERP\b'), 'S E R P'),
    (re.compile(r'\bPDPs\b'), 'P D Ps'),
    (re.compile(r'\bPDP\b'), 'P D P'),
    (re.compile(r'\bPLPs\b'), 'P L Ps'),
    (re.compile(r'\bPLP\b'), 'P L P'),
    (re.compile(r'\bSKUs\b'), 'S K Us'),
    (re.compile(r'\bSKU\b'), 'S K U'),
    (re.compile(r'\bCTAs\b'), 'C T As'),
    (re.compile(r'\bCTA\b'), 'C T A'),
    (re.compile(r'\bKPIs\b'), 'K P Is'),
    (re.compile(r'\bKPI\b'), 'K P I'),
    (re.compile(r'\bCRO\b'), 'C R O'),
    (re.compile(r'\bROI\b'), 'R O I'),
    (re.compile(r'\bCMS\b'), 'C M S'),
    (re.compile(r'\bCDNs\b'), 'C D Ns'),
    (re.compile(r'\bCDN\b'), 'C D N'),
    (re.compile(r'\bDOM\b'), 'D O M'),
    (re.compile(r'\bHTML\b'), 'H T M L'),
    (re.compile(r'\bHTTPS\b'), 'H T T P S'),
    (re.compile(r'\bHTTP\b'), 'H T T P'),
    (re.compile(r'\bSSH\b'), 'S S H'),
    (re.compile(r'\bCLI\b'), 'C L I'),
    (re.compile(r'\bTUI\b'), 'T U I'),
    (re.compile(r'\bURLs\b'), 'U R Ls'),
    (re.compile(r'\bURL\b'), 'U R L'),
    (re.compile(r'\bURIs\b'), 'U R Is'),
    (re.compile(r'\bURI\b'), 'U R I'),
    (re.compile(r'\bAPIs\b'), 'A P Is'),
    (re.compile(r'\bAPI\b'), 'A P I'),
    (re.compile(r'\bDNS\b'), 'D N S'),
    (re.compile(r'\bTLS\b'), 'T L S'),
    (re.compile(r'\bSSL\b'), 'S S L'),
    (re.compile(r'\bCPUs\b'), 'C P Us'),
    (re.compile(r'\bCPU\b'), 'C P U'),
    (re.compile(r'\bGPUs\b'), 'G P Us'),
    (re.compile(r'\bGPU\b'), 'G P U'),
    (re.compile(r'\bLLMs\b'), 'L L Ms'),
    (re.compile(r'\bLLM\b'), 'L L M'),
    (re.compile(r'\bChatGPT\b', re.IGNORECASE), 'Chat G P T'),
    (re.compile(r'\bNginx\b', re.IGNORECASE), 'Engine X'),
    (re.compile(r'\bPyPI\b', re.IGNORECASE), 'Pie P I'),
    (re.compile(r'\bkubectl\b', re.IGNORECASE), 'kube control'),
    (re.compile(r'\bstdout\b', re.IGNORECASE), 'standard out'),
    (re.compile(r'\bstderr\b', re.IGNORECASE), 'standard error'),
    (re.compile(r'\bstdin\b', re.IGNORECASE), 'standard in'),
    (re.compile(r'\bstdio\b', re.IGNORECASE), 'standard I O'),
    (re.compile(r'\brsync\b', re.IGNORECASE), 'R sync'),
    (re.compile(r'\b(?:Neovim|nvim)\b', re.IGNORECASE), 'Neo vim'),
    (re.compile(r'\bOpenGraph\b'), 'Open Graph'),
    (re.compile(r'\bInnerTube\b'), 'Inner Tube'),
)
[[[DIVIDER]]]
_TTS_PRONUNCIATION_MAP = _terms_mod.MARKDOWN_TTS_MAP
[[[REPLACE]]]

Target: remotes/honeybot/scripts/content_loader.py
[[[SEARCH]]]
def _apply_tts_pronunciations(text):
    """Abolish structural Markdown/ASCII debris and apply phonetic respellings for Piper TTS."""
    # 1. Abolish standalone horizontal rules (---, ***, ___) so score.py never speaks "---"
    text = re.sub(r'(?m)^[ \t]*[-*_]{3,}[ \t]*$', '', text)
    # 2. Abolish Markdown table alignment rows (| :--- | ---: |) and turn cell pipes into commas
    text = re.sub(r'(?m)^[ \t]*\|[ \t:|-]+\|[ \t]*$', '', text)
    text = re.sub(r'(?m)^[ \t]*\|(.+)\|[ \t]*$', lambda m: ', '.join(c.strip() for c in m.group(1).split('|') if c.strip()), text)
    # 3. Abolish unfenced ASCII box-drawing / block-art runs and humanize ASCII arrows
    text = re.sub(r'[─━│┃┌┐└┘├┤┬┴┼═║╔╗╚╝╠╣╦╩╬░▒▓█▲▼◄►]{2,}', ' ', text)
    text = re.sub(r'\s*(?:<-->|<->|-->|->|==>|<==)\s*', ', ', text)
    # 4. Polish phonetic pronunciations
    for pattern, spoken_repl in _TTS_PRONUNCIATION_MAP:
        text = pattern.sub(spoken_repl, text)
    text = re.sub(r'[ \t]+,', ',', text)
    return text
[[[DIVIDER]]]
def _apply_tts_pronunciations(text):
    """Abolish structural Markdown/ASCII debris and apply phonetic respellings from terms.py."""
    mod = sys.modules.get("terms", _terms_mod)
    return mod.apply_markdown_tts_terms(text)
[[[REPLACE]]]

Target: remotes/honeybot/scripts/stream.py
[[[SEARCH]]]
sys.path.insert(0, str(Path(__file__).resolve().parent))
try:
    import forest as _forest_mod
    STATION_SEGMENTS = _forest_mod.STATION_SEGMENTS
except ImportError:
    _forest_mod = None
    STATION_SEGMENTS = []
[[[DIVIDER]]]
sys.path.insert(0, str(Path(__file__).resolve().parent))
try:
    import terms as _terms_mod
except ImportError:
    _terms_mod = None
try:
    import forest as _forest_mod
    STATION_SEGMENTS = _forest_mod.STATION_SEGMENTS
except ImportError:
    _forest_mod = None
    STATION_SEGMENTS = []
[[[REPLACE]]]

Target: remotes/honeybot/scripts/stream.py
[[[SEARCH]]]
def _reload_forest_module():
    """Hot-reload forest.py from disk so station-break edits take effect without restarting stream.py."""
    global _forest_mod, STATION_SEGMENTS
    try:
        import importlib
        if _forest_mod is None:
            import forest as _forest_mod
        else:
            _forest_mod = importlib.reload(_forest_mod)
        STATION_SEGMENTS = getattr(_forest_mod, "STATION_SEGMENTS", [])
    except Exception:
        pass
    return _forest_mod
[[[DIVIDER]]]
def _polish_tts_text(text: str) -> str:
    """Apply master ear-orthography pronunciations from terms.py to any station-break or live line."""
    clean = (text or "").strip()
    if not clean or _terms_mod is None:
        return clean
    try:
        return _terms_mod.apply_inline_tts_terms(clean).strip()
    except Exception:
        return clean

def _reload_forest_module():
    """Hot-reload terms.py and forest.py from disk so edits take effect without restarting stream.py."""
    global _forest_mod, _terms_mod, STATION_SEGMENTS
    try:
        import importlib
        if _terms_mod is None:
            import terms as _terms_mod
        else:
            _terms_mod = importlib.reload(_terms_mod)
    except Exception:
        pass
    try:
        import importlib
        if _forest_mod is None:
            import forest as _forest_mod
        else:
            _forest_mod = importlib.reload(_forest_mod)
        STATION_SEGMENTS = getattr(_forest_mod, "STATION_SEGMENTS", [])
    except Exception:
        pass
    return _forest_mod
[[[REPLACE]]]

Target: remotes/honeybot/scripts/stream.py
[[[SEARCH]]]
        return {
            "voice": voice,
            "model": model_map.get(voice, NORMA_MODEL_NAME),
            "rate": rate_map.get(voice, NORMA_TTS_SAMPLE_RATE),
            "text": text,
            "speaker": speaker,
            "left": left,
            "right": right,
            "hud_focus": hud_focus,
        }
[[[DIVIDER]]]
        return {
            "voice": voice,
            "model": model_map.get(voice, NORMA_MODEL_NAME),
            "rate": rate_map.get(voice, NORMA_TTS_SAMPLE_RATE),
            "text": _polish_tts_text(text),
            "speaker": speaker,
            "left": left,
            "right": right,
            "hud_focus": hud_focus,
        }
[[[REPLACE]]]

Target: remotes/honeybot/scripts/stream.py
[[[SEARCH]]]
    def prep_raw(self, text, voice_key: str = None):
        """Pre-synthesize card narration into a .raw PCM file before showing a card."""
        vk = voice_key or ("mike" if self.live_operator_mode.is_set() else "norma")
        raw_path, _ = self._synth_raw_with_voice(text, vk)
        return raw_path
[[[DIVIDER]]]
    def prep_raw(self, text, voice_key: str = None):
        """Pre-synthesize card narration into a .raw PCM file before showing a card."""
        vk = voice_key or ("mike" if self.live_operator_mode.is_set() else "norma")
        raw_path, _ = self._synth_raw_with_voice(_polish_tts_text(text), vk)
        return raw_path
[[[REPLACE]]]

Target: imports/voice_synthesis.py
[[[SEARCH]]]
    def sanitize_text(self, text: str) -> str:
        """Apply domain substitution, phonetic polish, and acoustic markdown/HTML stripping."""
        spoken_text = re.sub(r'^\s*\*?\*?(?:MikeLev\.in|Me)\*?\*?\s*:\s*', 'Mike: ', text, flags=re.IGNORECASE)
        spoken_text = re.sub(r'\*?\*?MikeLev\.in\*?\*?:?', 'Mike L E V dot eye N', spoken_text, flags=re.IGNORECASE)
        spoken_text = re.sub(r'\bNixOS\b', 'Nix O S', spoken_text)
        spoken_text = re.sub(r'\bSQLite\b', 'S Q Lite', spoken_text, flags=re.IGNORECASE)
        spoken_text = re.sub(r'\bFastHTML\b', 'Fast H T M L', spoken_text, flags=re.IGNORECASE)
        spoken_text = re.sub(r'\bHTMX\b', 'H T M X', spoken_text, flags=re.IGNORECASE)
        spoken_text = re.sub(r'\bNPvg\b', 'N P V G', spoken_text)
        spoken_text = re.sub(r'\bLPvg\b', 'L P V G', spoken_text)
        spoken_text = re.sub(r'(?<!Reverse )\bPolish\b(?!\s+notation\b)', 'polish', spoken_text)
        spoken_text = re.sub(r'\bSEO\b', 'S E O', spoken_text)
        spoken_text = re.sub(r'\bAEO\b', 'A E O', spoken_text)
        spoken_text = re.sub(r'\bGEO\b', 'G E O', spoken_text)
        spoken_text = re.sub(r'\bAIO\b', 'A I O', spoken_text)
        spoken_text = re.sub(r'\bSGE\b', 'S G E', spoken_text)
        spoken_text = re.sub(r'\bRAG\b', 'R A G', spoken_text)
        spoken_text = re.sub(r'\bMCP\b', 'M C P', spoken_text)
        spoken_text = re.sub(r'\bGSC\b', 'G S C', spoken_text)
        spoken_text = re.sub(r'\b360i\b', 'three sixty eye', spoken_text, flags=re.IGNORECASE)
        spoken_text = re.sub(r'\bGA4\b', 'G A 4', spoken_text)
        spoken_text = re.sub(r'\bSERPs\b', 'S E R Ps', spoken_text)
        spoken_text = re.sub(r'\bSERP\b', 'S E R P', spoken_text)
        spoken_text = re.sub(r'\bPDPs\b', 'P D Ps', spoken_text)
        spoken_text = re.sub(r'\bPDP\b', 'P D P', spoken_text)
        spoken_text = re.sub(r'\bPLPs\b', 'P L Ps', spoken_text)
        spoken_text = re.sub(r'\bPLP\b', 'P L P', spoken_text)
        spoken_text = re.sub(r'\bSKUs\b', 'S K Us', spoken_text)
        spoken_text = re.sub(r'\bSKU\b', 'S K U', spoken_text)
        spoken_text = re.sub(r'\bCTAs\b', 'C T As', spoken_text)
        spoken_text = re.sub(r'\bCTA\b', 'C T A', spoken_text)
        spoken_text = re.sub(r'\bKPIs\b', 'K P Is', spoken_text)
        spoken_text = re.sub(r'\bKPI\b', 'K P I', spoken_text)
        spoken_text = re.sub(r'\bCRO\b', 'C R O', spoken_text)
        spoken_text = re.sub(r'\bROI\b', 'R O I', spoken_text)
        spoken_text = re.sub(r'\bCMS\b', 'C M S', spoken_text)
        spoken_text = re.sub(r'\bDOM\b', 'D O M', spoken_text)
        spoken_text = re.sub(r'\bURLs\b', 'U R Ls', spoken_text)
        spoken_text = re.sub(r'\bURL\b', 'U R L', spoken_text)
        spoken_text = re.sub(r'\bAPIs\b', 'A P Is', spoken_text)
        spoken_text = re.sub(r'\bAPI\b', 'A P I', spoken_text)
        spoken_text = re.sub(r'\bDNS\b', 'D N S', spoken_text)
        spoken_text = re.sub(r'\bTLS\b', 'T L S', spoken_text)
        spoken_text = re.sub(r'\bCPU\b', 'C P U', spoken_text)
        spoken_text = re.sub(r'\bGPU\b', 'G P U', spoken_text)
        spoken_text = re.sub(r'\bChatGPT\b', 'Chat G P T', spoken_text, flags=re.IGNORECASE)
        spoken_text = re.sub(r'\bNginx\b', 'Engine X', spoken_text, flags=re.IGNORECASE)
        spoken_text = re.sub(r'\bPyPI\b', 'Pie P I', spoken_text, flags=re.IGNORECASE)
        spoken_text = re.sub(r'\bstdout\b', 'standard out', spoken_text, flags=re.IGNORECASE)
        spoken_text = re.sub(r'\bstderr\b', 'standard error', spoken_text, flags=re.IGNORECASE)
        spoken_text = re.sub(r'\bstdin\b', 'standard in', spoken_text, flags=re.IGNORECASE)
        spoken_text = re.sub(r'\[([^\]]+)\]\([^\)]+\)', r'\1', spoken_text)
        spoken_text = re.sub(r'\[[^\]]+\]', '', spoken_text)
        spoken_text = re.sub(r'<[^>]+>', ' ', spoken_text)
        return re.sub(r'\s+', ' ', spoken_text).strip()
[[[DIVIDER]]]
    def sanitize_text(self, text: str) -> str:
        """Apply domain substitution, shared terms.py phonetic polish, and markdown/HTML stripping."""
        spoken_text = re.sub(r'^\s*\*?\*?(?:MikeLev\.in|Me)\*?\*?\s*:\s*', 'Mike: ', text, flags=re.IGNORECASE)
        spoken_text = re.sub(r'\[([^\]]+)\]\([^\)]+\)', r'\1', spoken_text)
        spoken_text = re.sub(r'\[[^\]]+\]', '', spoken_text)
        spoken_text = re.sub(r'<[^>]+>', ' ', spoken_text)
        spoken_text = re.sub(
            r'\bhttps?://(?:www\.)?([A-Za-z0-9.-]+)/?(?=\s|[.,;!?)]|$)',
            r'\1',
            spoken_text,
            flags=re.IGNORECASE,
        )
        spoken_text = re.sub(r'[`*]', '', spoken_text)
        terms_dir = str(Path(__file__).resolve().parent.parent / "remotes" / "honeybot" / "scripts")
        if terms_dir not in sys.path:
            sys.path.insert(0, terms_dir)
        try:
            import terms as _shared_terms
            spoken_text = _shared_terms.apply_inline_tts_terms(spoken_text)
        except Exception:
            spoken_text = re.sub(r'\*?\*?MikeLev\.in\*?\*?:?', 'Mike L E V dot eye N', spoken_text, flags=re.IGNORECASE)
        return re.sub(r'\s+', ' ', spoken_text).strip()
[[[REPLACE]]]
```

**Car 2 — Stage the New `terms.py` File (So `m` / `blast` Includes It) & Sync Scripts to Honeybot:**

`(nix) pipulate $`

```bash
git add remotes/honeybot/scripts/terms.py && nixops
```

Ignition: Car 2 stages `remotes/honeybot/scripts/terms.py` and syncs `remotes/honeybot/scripts/` to Honeybot; to use the new interactive `terms` alias in your active terminal session, run `exit` then `nix develop` (the compiled AFTER probes load the Python modules directly at call time without requiring shell re-entry, and pass `ytreboot` later whenever you want Honeybot's running `stream.py` daemon to reload in-flight).

#### (4) PROMPT

```text
Verify the AFTER straddle receipts for Chisel Strike 1 (`terms` in `flake.nix`, `TERMS_FILE=True IDEMPOTENT=True`, identical `HONEYBOT_TTS` and `LOCAL_TTS` outputs with "Software as a Service", "surps", "10 thousand dollar(s)", and "nine eleven L L M Optics", plus cleaned `TITLES` and `STREAM_SPEC`).
Then inspect `remotes/honeybot/scripts/logs.py` and `remotes/honeybot/scripts/forest.py` and execute Chisel Strike 2:
1. Find the cleanest, highest-visibility permanent slot for `SunPug.io` alongside `https://mikelev.in` on the live Honeybot Storytime screen, eliminating the duplicate viewer/peak readout between the main title and subtitle.
2. Map the exact current station-break list in `forest.py` so Strike 3 cleanly archives `Tik-Tok` and `Pachinko` into an inactive dictionary and installs the 5-beat "SEOs Assemble!" -> 911 LLM Optics arc.
```

#### (5) EXTERNAL DELIVERABLES

No external deliverables required this turn.

**MikeLev.in**: Okay don't let me forget that we also want to modify
`scripts/articles/editing_prompt.txt` to make sure it instructs the model to
always look for the thing that is most appealing and likely to be clicked for
genuine and high integrity reasons in stead of these convoluted "covering all
our bases" headlines like I've been getting a lot of lately. We've got to
remember it's emotional human beings on the other end and not LLMs like you ha
ha ha! I had a rash of terrible headlines which you can probably tell from the
book spine that still may be in your key-value cache. We want headlines that
will play well on LinkedIn, Twitter or Facebook as the case may be. I'm tempted
to bring in the `markov` command work we've done that's based on the PyPI river
package but it may not be necessary. It may just be editing the prompt. We want
an 80/20-rule solution there. Bring it in context when you think is right but
don't let us finish the article without having done that too please.

## THE AI-EDIT METHOD

> Same commands, run twice, one change between them. Where the readings
> differ is what the change did; the diff in the middle is the receipt.

**1: BEFORE** (PROBE): 

```bash
On branch main
Your branch is up to date with 'origin/main'.

nothing to commit, working tree clean

GIT repo clean. Take BEFORE reading, make CHANGE, record AFTER diff.
(nix) pipulate $ nix-instantiate --parse flake.nix >/dev/null && rg -n 'alias (forest|art|terms)=' flake.nix
.venv/bin/python -c 'import pathlib, sys; sys.path.insert(0, "remotes/honeybot/scripts"); sys.path.insert(0, "."); import content_loader; from imports.voice_synthesis import chip_voice_system as cvs; has_t = pathlib.Path("remotes/honeybot/scripts/terms.py").is_file(); sample = "Killing the $10K Pre-Render Scam: SaaS & SERPs for SEOs at SunPug.io with 911 LLM Optics ($10K/mo vs $10K)"; cl_out = content_loader._apply_tts_pronunciations(sample); vs_out = cvs.sanitize_text(sample) if cvs else "NONE"; idem = (content_loader._apply_tts_pronunciations(cl_out) == cl_out); print(f"TERMS_FILE={has_t} IDEMPOTENT={idem}"); print(f"HONEYBOT_TTS={cl_out}"); print(f"LOCAL_TTS={vs_out}")'
.venv/bin/python -c 'import sys; sys.path.insert(0, "remotes/honeybot/scripts"); import content_loader, stream; arts = content_loader.get_playlist(recent_n=2, include_archive=False); titles = [a["title"] for a in arts]; spec_txt = stream.Narrator()._make_spec("norma", "911 LLM Optics kills $10K SaaS SERP scams at SunPug.io", "narrator", "inactive", "inactive")["text"]; print(f"TITLES={titles}"); print(f"STREAM_SPEC={spec_txt}")'
nix-instantiate: /nix/store/2fxp204b9jh1s3lpggdlnws44vvzw1w9-openssl-3.4.3/lib/libcrypto.so.3: version `OPENSSL_3.6.0' not found (required by /nix/store/1p2gjq4x396yj65rig8fyzhrdza0psd6-openssl-3.6.3/lib/libssl.so.3)
nix-instantiate: /nix/store/i3ibgfskl99qd8rslafbpaa1dmxdzh1z-glibc-2.40-66/lib/libc.so.6: version `GLIBC_ABI_DT_X86_64_PLT' not found (required by /nix/store/ias8xacs1h3jy7xgwi2awvim61k2ji6c-glibc-2.42-67/lib/libresolv.so.2)
TERMS_FILE=False IDEMPOTENT=True
HONEYBOT_TTS=Killing the $10K Pre-Render Scam: SaaS & S E R Ps for SEOs at Sun Pug dot eye oh with 911 L L M Optics ($10K/mo vs $10K)
LOCAL_TTS=Killing the $10K Pre-Render Scam: SaaS & S E R Ps for SEOs at SunPug.io with 911 LLM Optics ($10K/mo vs $10K)
TITLES=['Killing the $10K Pre-Render Scam: Sun Pug Probes, 911 L L M Optics, and Escaping the Vibe-Coding Slot Machine', 'Google S E R P Poisoning and the $10K Pre-Render Tax: A Post-S E O Audit Blueprint']
STREAM_SPEC=911 LLM Optics kills $10K SaaS SERP scams at SunPug.io
(nix) pipulate $ 
```

**2: AFTER** (NEXT CONTEXT): 

```text
# # Context 1
# ! book
# ! markov
# ! rgxc 20
# /home/mike/repos/trimnoir/_posts/2026-11-10-butterfly-nets-monkeys-paws-flake-nix-for-matter.md  # [Idx: 1 | Order: 2 | Tokens: 35,494 | Bytes: 140,431]
# /home/mike/repos/trimnoir/_posts/2026-11-10-google-serp-poisoning-prerender-tax-post-seo-audit.md  # [Idx: 2 | Order: 3 | Tokens: 101,004 | Bytes: 384,604]
# # /home/mike/repos/trimnoir/_posts/2026-11-11-killing-prerender-scam-sunpug-911-optics-vibe-coding.md  # [Idx: 3 | Order: 1 | Tokens: 107,526 | Bytes: 414,226]

# # Context 2
# context.txt
# flake.nix
# nixops.sh
# imports/voice_synthesis.py
# remotes/honeybot/scripts/content_loader.py
# remotes/honeybot/scripts/stream.py
# ! ls -1 remotes/honeybot/scripts
# ! rg -n 'alias (art|forest|terms)=|^\s*(art|forest|terms|ytapp)\s*\(\)' flake.nix
# ! rg -in '360i|pronun|phonetic|clean_for_tts|saas|serp' imports/voice_synthesis.py remotes/honeybot/scripts/ | head -n 60
# ! sed -n '1,25p' /home/mike/repos/trimnoir/_posts/2026-11-11-killing-prerender-scam-sunpug-911-optics-vibe-coding.md

# Context 3
context.txt
remotes/honeybot/scripts/terms.py
remotes/honeybot/scripts/logs.py
remotes/honeybot/scripts/forest.py
! nix-instantiate --parse flake.nix >/dev/null && rg -n 'alias (forest|art|terms)=' flake.nix
! .venv/bin/python -c 'import pathlib, sys; sys.path.insert(0, "remotes/honeybot/scripts"); sys.path.insert(0, "."); import content_loader; from imports.voice_synthesis import chip_voice_system as cvs; has_t = pathlib.Path("remotes/honeybot/scripts/terms.py").is_file(); sample = "Killing the $10K Pre-Render Scam: SaaS & SERPs for SEOs at SunPug.io with 911 LLM Optics ($10K/mo vs $10K)"; cl_out = content_loader._apply_tts_pronunciations(sample); vs_out = cvs.sanitize_text(sample) if cvs else "NONE"; idem = (content_loader._apply_tts_pronunciations(cl_out) == cl_out); print(f"TERMS_FILE={has_t} IDEMPOTENT={idem}"); print(f"HONEYBOT_TTS={cl_out}"); print(f"LOCAL_TTS={vs_out}")'
! .venv/bin/python -c 'import sys; sys.path.insert(0, "remotes/honeybot/scripts"); import content_loader, stream; arts = content_loader.get_playlist(recent_n=2, include_archive=False); titles = [a["title"] for a in arts]; spec_txt = stream.Narrator()._make_spec("norma", "911 LLM Optics kills $10K SaaS SERP scams at SunPug.io", "narrator", "inactive", "inactive")["text"]; print(f"TITLES={titles}"); print(f"STREAM_SPEC={spec_txt}")'
```

**3: CHANGE** (PATCHES): 

```diff
On branch main
Your branch is up to date with 'origin/main'.

nothing to commit, working tree clean

GIT repo clean. Take BEFORE reading, make CHANGE, record AFTER diff.
(nix) pipulate $ patch
(nix) pipulate $ app
✅ WHOLE-FILE WRITE: CREATED 'remotes/honeybot/scripts/terms.py'.
✅ DETERMINISTIC PATCH APPLIED: Successfully mutated 'flake.nix'.
✅ DETERMINISTIC PATCH APPLIED: Successfully mutated 'remotes/honeybot/scripts/content_loader.py'.
✅ DETERMINISTIC PATCH APPLIED: Successfully mutated 'remotes/honeybot/scripts/content_loader.py'.
✅ DETERMINISTIC PATCH APPLIED: Successfully mutated 'remotes/honeybot/scripts/content_loader.py'.
✅ DETERMINISTIC PATCH APPLIED: Successfully mutated 'remotes/honeybot/scripts/content_loader.py'.
✅ DETERMINISTIC PATCH APPLIED: Successfully mutated 'remotes/honeybot/scripts/stream.py'.
✅ DETERMINISTIC PATCH APPLIED: Successfully mutated 'remotes/honeybot/scripts/stream.py'.
✅ DETERMINISTIC PATCH APPLIED: Successfully mutated 'remotes/honeybot/scripts/stream.py'.
✅ DETERMINISTIC PATCH APPLIED: Successfully mutated 'remotes/honeybot/scripts/stream.py'.
✅ DETERMINISTIC PATCH APPLIED: Successfully mutated 'imports/voice_synthesis.py'.
(nix) pipulate $ d
diff --git a/flake.nix b/flake.nix
index 2254018..29233e4 100644
--- a/flake.nix
+++ b/flake.nix
@@ -2355,6 +2355,7 @@ runScript = pkgs.writeShellScriptBin "run-script" ''
           alias webclip='(cd "$PIPULATE_ROOT" && python scripts/webclip_2_markdown.py)'
           alias forest='(cd "$PIPULATE_ROOT" && vim remotes/honeybot/scripts/forest.py)'
           alias art='(cd "$PIPULATE_ROOT" && vim imports/ascii_displays.py)'
+          alias terms='(cd "$PIPULATE_ROOT" && vim remotes/honeybot/scripts/terms.py)'
           alias smart='(cd "$PIPULATE_ROOT" && python release.py --force -m "Testing rabbit documentation injection")'
           # `latest` is now a Nix-packaged command in commonPackages (like `book`
           # and `posts`) so `! latest` works in context.txt child shells. Unset
diff --git a/imports/voice_synthesis.py b/imports/voice_synthesis.py
index a6171e3..a243311 100644
--- a/imports/voice_synthesis.py
+++ b/imports/voice_synthesis.py
@@ -680,59 +680,26 @@ class ChipVoiceSystem:
         return ["play", output_path]
 
     def sanitize_text(self, text: str) -> str:
-        """Apply domain substitution, phonetic polish, and acoustic markdown/HTML stripping."""
+        """Apply domain substitution, shared terms.py phonetic polish, and markdown/HTML stripping."""
         spoken_text = re.sub(r'^\s*\*?\*?(?:MikeLev\.in|Me)\*?\*?\s*:\s*', 'Mike: ', text, flags=re.IGNORECASE)
-        spoken_text = re.sub(r'\*?\*?MikeLev\.in\*?\*?:?', 'Mike L E V dot eye N', spoken_text, flags=re.IGNORECASE)
-        spoken_text = re.sub(r'\bNixOS\b', 'Nix O S', spoken_text)
-        spoken_text = re.sub(r'\bSQLite\b', 'S Q Lite', spoken_text, flags=re.IGNORECASE)
-        spoken_text = re.sub(r'\bFastHTML\b', 'Fast H T M L', spoken_text, flags=re.IGNORECASE)
-        spoken_text = re.sub(r'\bHTMX\b', 'H T M X', spoken_text, flags=re.IGNORECASE)
-        spoken_text = re.sub(r'\bNPvg\b', 'N P V G', spoken_text)
-        spoken_text = re.sub(r'\bLPvg\b', 'L P V G', spoken_text)
-        spoken_text = re.sub(r'(?<!Reverse )\bPolish\b(?!\s+notation\b)', 'polish', spoken_text)
-        spoken_text = re.sub(r'\bSEO\b', 'S E O', spoken_text)
-        spoken_text = re.sub(r'\bAEO\b', 'A E O', spoken_text)
-        spoken_text = re.sub(r'\bGEO\b', 'G E O', spoken_text)
-        spoken_text = re.sub(r'\bAIO\b', 'A I O', spoken_text)
-        spoken_text = re.sub(r'\bSGE\b', 'S G E', spoken_text)
-        spoken_text = re.sub(r'\bRAG\b', 'R A G', spoken_text)
-        spoken_text = re.sub(r'\bMCP\b', 'M C P', spoken_text)
-        spoken_text = re.sub(r'\bGSC\b', 'G S C', spoken_text)
-        spoken_text = re.sub(r'\b360i\b', 'three sixty eye', spoken_text, flags=re.IGNORECASE)
-        spoken_text = re.sub(r'\bGA4\b', 'G A 4', spoken_text)
-        spoken_text = re.sub(r'\bSERPs\b', 'S E R Ps', spoken_text)
-        spoken_text = re.sub(r'\bSERP\b', 'S E R P', spoken_text)
-        spoken_text = re.sub(r'\bPDPs\b', 'P D Ps', spoken_text)
-        spoken_text = re.sub(r'\bPDP\b', 'P D P', spoken_text)
-        spoken_text = re.sub(r'\bPLPs\b', 'P L Ps', spoken_text)
-        spoken_text = re.sub(r'\bPLP\b', 'P L P', spoken_text)
-        spoken_text = re.sub(r'\bSKUs\b', 'S K Us', spoken_text)
-        spoken_text = re.sub(r'\bSKU\b', 'S K U', spoken_text)
-        spoken_text = re.sub(r'\bCTAs\b', 'C T As', spoken_text)
-        spoken_text = re.sub(r'\bCTA\b', 'C T A', spoken_text)
-        spoken_text = re.sub(r'\bKPIs\b', 'K P Is', spoken_text)
-        spoken_text = re.sub(r'\bKPI\b', 'K P I', spoken_text)
-        spoken_text = re.sub(r'\bCRO\b', 'C R O', spoken_text)
-        spoken_text = re.sub(r'\bROI\b', 'R O I', spoken_text)
-        spoken_text = re.sub(r'\bCMS\b', 'C M S', spoken_text)
-        spoken_text = re.sub(r'\bDOM\b', 'D O M', spoken_text)
-        spoken_text = re.sub(r'\bURLs\b', 'U R Ls', spoken_text)
-        spoken_text = re.sub(r'\bURL\b', 'U R L', spoken_text)
-        spoken_text = re.sub(r'\bAPIs\b', 'A P Is', spoken_text)
-        spoken_text = re.sub(r'\bAPI\b', 'A P I', spoken_text)
-        spoken_text = re.sub(r'\bDNS\b', 'D N S', spoken_text)
-        spoken_text = re.sub(r'\bTLS\b', 'T L S', spoken_text)
-        spoken_text = re.sub(r'\bCPU\b', 'C P U', spoken_text)
-        spoken_text = re.sub(r'\bGPU\b', 'G P U', spoken_text)
-        spoken_text = re.sub(r'\bChatGPT\b', 'Chat G P T', spoken_text, flags=re.IGNORECASE)
-        spoken_text = re.sub(r'\bNginx\b', 'Engine X', spoken_text, flags=re.IGNORECASE)
-        spoken_text = re.sub(r'\bPyPI\b', 'Pie P I', spoken_text, flags=re.IGNORECASE)
-        spoken_text = re.sub(r'\bstdout\b', 'standard out', spoken_text, flags=re.IGNORECASE)
-        spoken_text = re.sub(r'\bstderr\b', 'standard error', spoken_text, flags=re.IGNORECASE)
-        spoken_text = re.sub(r'\bstdin\b', 'standard in', spoken_text, flags=re.IGNORECASE)
         spoken_text = re.sub(r'\[([^\]]+)\]\([^\)]+\)', r'\1', spoken_text)
         spoken_text = re.sub(r'\[[^\]]+\]', '', spoken_text)
         spoken_text = re.sub(r'<[^>]+>', ' ', spoken_text)
+        spoken_text = re.sub(
+            r'\bhttps?://(?:www\.)?([A-Za-z0-9.-]+)/?(?=\s|[.,;!?)]|$)',
+            r'\1',
+            spoken_text,
+            flags=re.IGNORECASE,
+        )
+        spoken_text = re.sub(r'[`*]', '', spoken_text)
+        terms_dir = str(Path(__file__).resolve().parent.parent / "remotes" / "honeybot" / "scripts")
+        if terms_dir not in sys.path:
+            sys.path.insert(0, terms_dir)
+        try:
+            import terms as _shared_terms
+            spoken_text = _shared_terms.apply_inline_tts_terms(spoken_text)
+        except Exception:
+            spoken_text = re.sub(r'\*?\*?MikeLev\.in\*?\*?:?', 'Mike L E V dot eye N', spoken_text, flags=re.IGNORECASE)
         return re.sub(r'\s+', ' ', spoken_text).strip()
 
     def synthesize_to_wav(self, text: str, output_path: Optional[str] = None, ceremony: bool = False) -> Optional[str]:
diff --git a/remotes/honeybot/scripts/content_loader.py b/remotes/honeybot/scripts/content_loader.py
index 2009374..67127db 100644
--- a/remotes/honeybot/scripts/content_loader.py
+++ b/remotes/honeybot/scripts/content_loader.py
@@ -297,6 +297,12 @@ def get_playlist(recent_n=10, include_archive=True):
             key=lambda p: p.name,
             reverse=True,
         )
+        if "terms" in sys.modules:
+            try:
+                import importlib
+                importlib.reload(sys.modules["terms"])
+            except Exception:
+                pass
         pinned = _get_pinned_storytime_file()
         if pinned is not None and not include_archive:
             files = [pinned] + [p for p in files if p != pinned]
@@ -484,141 +490,19 @@ _FILEPATH_RE = re.compile(
 # and recurring stack acronyms are pronounced naturally on Storytime.
 # Speaker turn regexes use horizontal whitespace [ \t]* before the label and
 # emit a leading '\n\n' so they never eat the preceding paragraph break.
-_AI_SPEAKER_LABEL_PAT = (
-    r"(?:(?:Gemini|Claude|ChatGPT|OpenAI|Opus|Sonnet|Shipmunk)\b"
-    r"(?:[ \t]+(?:\d+(?:\.\d+)*"
-    r"|Argon|Carbon|Neon|Helium|Krypton|Xenon|Radon"
-    r"|Pro|Flash|Ultra|Nano|High|Medium|Low"
-    r"|Opus|Sonnet|Haiku|Code|User|Web|Bot"
-    r"|Thinking|Exp|Experimental|Preview|Lite|Mini|Max|Plus|Turbo"
-    r"|o\d+|O'Theseus"
-    r"|[A-Za-z][A-Za-z0-9-]{1,15}(?=[ \t]+(?:High|Medium|Low|Pro|Flash|Ultra|Nano|Lite|Mini|Max|Plus|Thinking|Preview|Exp)\b))){0,4}"
-    r"|AI)"
-)
+if str(Path(__file__).resolve().parent) not in sys.path:
+    sys.path.insert(0, str(Path(__file__).resolve().parent))
+import terms as _terms_mod
 
-_TTS_PRONUNCIATION_MAP = (
-    (
-        re.compile(
-            r'(?m)^[ \t]*(?:\*\*[ \t]*(?:MikeLev\.in|Mike[ \t]+Levin|Mike|Me)[ \t]*:?[ \t]*\*\*[ \t]*:?|(?:MikeLev\.in|Mike[ \t]+Levin|Mike|Me)[ \t]*:)[ \t]*(?:\r?\n[ \t]*(?!\*\*[ \t]*(?:Gemini|Claude|ChatGPT|OpenAI|Opus|Sonnet|Shipmunk|AI|MikeLev\.in|Mike|Me)\b))*',
-            re.IGNORECASE,
-        ),
-        '\n\nMike: ',
-    ),
-    (
-        re.compile(
-            rf'(?m)^[ \t]*\*\*[ \t]*({_AI_SPEAKER_LABEL_PAT})[ \t]*:?[ \t]*\*\*[ \t]*:?[ \t]*(?:\r?\n[ \t]*(?!\*\*[ \t]*(?:Gemini|Claude|ChatGPT|OpenAI|Opus|Sonnet|Shipmunk|AI|MikeLev\.in|Mike|Me)\b))*',
-            re.IGNORECASE,
-        ),
-        r'\n\n\1: ',
-    ),
-    (re.compile(r'\bmikelev\.in\b', re.IGNORECASE), 'Mike L E V dot eye N'),
-    (re.compile(r'\bsunpug\.io\b', re.IGNORECASE), 'Sun Pug dot eye oh'),
-    (re.compile(r'\bqamy\.ai\b', re.IGNORECASE), 'Q A my dot A I'),
-    (re.compile(r'\bnpvg\.org\b', re.IGNORECASE), 'N P V G dot org'),
-    (re.compile(r'\blevinix\.org\b', re.IGNORECASE), 'Levinix dot org'),
-    (re.compile(r'\blevinux\.com\b', re.IGNORECASE), 'Levinux dot com'),
-    (re.compile(r'\brfc9110\.org\b', re.IGNORECASE), 'R F C 91 10 dot org'),
-    (re.compile(r'\brfc9111\.io\b', re.IGNORECASE), 'R F C 91 11 dot eye oh'),
-    (re.compile(r'\bRFC[ -]?9110\b', re.IGNORECASE), 'R F C 91 10'),
-    (re.compile(r'\bRFC[ -]?9111\b', re.IGNORECASE), 'R F C 91 11'),
-    (re.compile(r'\bRFC[ -]?9421\b', re.IGNORECASE), 'R F C 94 21'),
-    (re.compile(r'\bNixOS\b'), 'Nix O S'),
-    (re.compile(r'\bSQLite\b', re.IGNORECASE), 'S Q Lite'),
-    (re.compile(r'\bFastHTML\b', re.IGNORECASE), 'Fast H T M L'),
-    (re.compile(r'\bHTMX\b', re.IGNORECASE), 'H T M X'),
-    (re.compile(r'\bNPvg\b'), 'N P V G'),
-    (re.compile(r'\bLPvg\b'), 'L P V G'),
-    (re.compile(r'\bllms\.txt\b', re.IGNORECASE), 'L L M S dot text'),
-    (re.compile(r'\bAGENTS\.md\b'), 'AGENTS dot M D'),
-    (re.compile(r'\bSKILL\.md\b'), 'SKILL dot M D'),
-    (re.compile(r'\bguerillatech\.com\b', re.IGNORECASE), 'Guerilla Tech dot com'),
-    (re.compile(r'\bpipulate\.com\b', re.IGNORECASE), 'Pipulate dot com'),
-    (re.compile(r'\bREADME\.md\b', re.IGNORECASE), 'README dot M D'),
-    (re.compile(r'\*{0,2}\bTL;DR\b\*{0,2}\s*[:.]?', re.IGNORECASE), 'T L D R:'),
-    (re.compile(r'\bOAI-SearchBot\b', re.IGNORECASE), 'O A I SearchBot'),
-    (re.compile(r'\bGPTBot\b'), 'G P T Bot'),
-    (re.compile(r'\bRLVR\b'), 'R L V R'),
-    (re.compile(r'\bRLHF\b'), 'R L H F'),
-    (re.compile(r'(?<!Reverse )\bPolish\b(?!\s+notation\b)'), 'polish'),
-    (re.compile(r'\bSEO\b'), 'S E O'),
-    (re.compile(r'\bAEO\b'), 'A E O'),
-    (re.compile(r'\bGEO\b'), 'G E O'),
-    (re.compile(r'\bAIO\b'), 'A I O'),
-    (re.compile(r'\bSGE\b'), 'S G E'),
-    (re.compile(r'\bRAG\b'), 'R A G'),
-    (re.compile(r'\bMCP\b'), 'M C P'),
-    (re.compile(r'\bGSC\b'), 'G S C'),
-    (re.compile(r'\b360i\b', re.IGNORECASE), 'three sixty eye'),
-    (re.compile(r'\bGA4\b'), 'G A 4'),
-    (re.compile(r'\bSERPs\b'), 'S E R Ps'),
-    (re.compile(r'\bSERP\b'), 'S E R P'),
-    (re.compile(r'\bPDPs\b'), 'P D Ps'),
-    (re.compile(r'\bPDP\b'), 'P D P'),
-    (re.compile(r'\bPLPs\b'), 'P L Ps'),
-    (re.compile(r'\bPLP\b'), 'P L P'),
-    (re.compile(r'\bSKUs\b'), 'S K Us'),
-    (re.compile(r'\bSKU\b'), 'S K U'),
-    (re.compile(r'\bCTAs\b'), 'C T As'),
-    (re.compile(r'\bCTA\b'), 'C T A'),
-    (re.compile(r'\bKPIs\b'), 'K P Is'),
-    (re.compile(r'\bKPI\b'), 'K P I'),
-    (re.compile(r'\bCRO\b'), 'C R O'),
-    (re.compile(r'\bROI\b'), 'R O I'),
-    (re.compile(r'\bCMS\b'), 'C M S'),
-    (re.compile(r'\bCDNs\b'), 'C D Ns'),
-    (re.compile(r'\bCDN\b'), 'C D N'),
-    (re.compile(r'\bDOM\b'), 'D O M'),
-    (re.compile(r'\bHTML\b'), 'H T M L'),
-    (re.compile(r'\bHTTPS\b'), 'H T T P S'),
-    (re.compile(r'\bHTTP\b'), 'H T T P'),
-    (re.compile(r'\bSSH\b'), 'S S H'),
-    (re.compile(r'\bCLI\b'), 'C L I'),
-    (re.compile(r'\bTUI\b'), 'T U I'),
-    (re.compile(r'\bURLs\b'), 'U R Ls'),
-    (re.compile(r'\bURL\b'), 'U R L'),
-    (re.compile(r'\bURIs\b'), 'U R Is'),
-    (re.compile(r'\bURI\b'), 'U R I'),
-    (re.compile(r'\bAPIs\b'), 'A P Is'),
-    (re.compile(r'\bAPI\b'), 'A P I'),
-    (re.compile(r'\bDNS\b'), 'D N S'),
-    (re.compile(r'\bTLS\b'), 'T L S'),
-    (re.compile(r'\bSSL\b'), 'S S L'),
-    (re.compile(r'\bCPUs\b'), 'C P Us'),
-    (re.compile(r'\bCPU\b'), 'C P U'),
-    (re.compile(r'\bGPUs\b'), 'G P Us'),
-    (re.compile(r'\bGPU\b'), 'G P U'),
-    (re.compile(r'\bLLMs\b'), 'L L Ms'),
-    (re.compile(r'\bLLM\b'), 'L L M'),
-    (re.compile(r'\bChatGPT\b', re.IGNORECASE), 'Chat G P T'),
-    (re.compile(r'\bNginx\b', re.IGNORECASE), 'Engine X'),
-    (re.compile(r'\bPyPI\b', re.IGNORECASE), 'Pie P I'),
-    (re.compile(r'\bkubectl\b', re.IGNORECASE), 'kube control'),
-    (re.compile(r'\bstdout\b', re.IGNORECASE), 'standard out'),
-    (re.compile(r'\bstderr\b', re.IGNORECASE), 'standard error'),
-    (re.compile(r'\bstdin\b', re.IGNORECASE), 'standard in'),
-    (re.compile(r'\bstdio\b', re.IGNORECASE), 'standard I O'),
-    (re.compile(r'\brsync\b', re.IGNORECASE), 'R sync'),
-    (re.compile(r'\b(?:Neovim|nvim)\b', re.IGNORECASE), 'Neo vim'),
-    (re.compile(r'\bOpenGraph\b'), 'Open Graph'),
-    (re.compile(r'\bInnerTube\b'), 'Inner Tube'),
-)
+_AI_SPEAKER_LABEL_PAT = _terms_mod.AI_SPEAKER_LABEL_PAT
+
+_TTS_PRONUNCIATION_MAP = _terms_mod.MARKDOWN_TTS_MAP
 
 
 def _apply_tts_pronunciations(text):
-    """Abolish structural Markdown/ASCII debris and apply phonetic respellings for Piper TTS."""
-    # 1. Abolish standalone horizontal rules (---, ***, ___) so score.py never speaks "---"
-    text = re.sub(r'(?m)^[ \t]*[-*_]{3,}[ \t]*$', '', text)
-    # 2. Abolish Markdown table alignment rows (| :--- | ---: |) and turn cell pipes into commas
-    text = re.sub(r'(?m)^[ \t]*\|[ \t:|-]+\|[ \t]*$', '', text)
-    text = re.sub(r'(?m)^[ \t]*\|(.+)\|[ \t]*$', lambda m: ', '.join(c.strip() for c in m.group(1).split('|') if c.strip()), text)
-    # 3. Abolish unfenced ASCII box-drawing / block-art runs and humanize ASCII arrows
-    text = re.sub(r'[─━│┃┌┐└┘├┤┬┴┼═║╔╗╚╝╠╣╦╩╬░▒▓█▲▼◄►]{2,}', ' ', text)
-    text = re.sub(r'\s*(?:<-->|<->|-->|->|==>|<==)\s*', ', ', text)
-    # 4. Polish phonetic pronunciations
-    for pattern, spoken_repl in _TTS_PRONUNCIATION_MAP:
-        text = pattern.sub(spoken_repl, text)
-    text = re.sub(r'[ \t]+,', ',', text)
-    return text
+    """Abolish structural Markdown/ASCII debris and apply phonetic respellings from terms.py."""
+    mod = sys.modules.get("terms", _terms_mod)
+    return mod.apply_markdown_tts_terms(text)
 
 
 def _truncate_after_editorial_take(text):
diff --git a/remotes/honeybot/scripts/stream.py b/remotes/honeybot/scripts/stream.py
index 8cb5e19..9fd1eb4 100644
--- a/remotes/honeybot/scripts/stream.py
+++ b/remotes/honeybot/scripts/stream.py
@@ -201,6 +201,10 @@ PITCH_TEXT = (
 # ordered cue-list in the same SAY/PATRONUS/WINDOW grammar the trees use, played
 # through the shared dispatch_cue (the cathedral-of-one collapse).
 sys.path.insert(0, str(Path(__file__).resolve().parent))
+try:
+    import terms as _terms_mod
+except ImportError:
+    _terms_mod = None
 try:
     import forest as _forest_mod
     STATION_SEGMENTS = _forest_mod.STATION_SEGMENTS
@@ -209,9 +213,28 @@ except ImportError:
     STATION_SEGMENTS = []
 
 
+def _polish_tts_text(text: str) -> str:
+    """Apply master ear-orthography pronunciations from terms.py to any station-break or live line."""
+    clean = (text or "").strip()
+    if not clean or _terms_mod is None:
+        return clean
+    try:
+        return _terms_mod.apply_inline_tts_terms(clean).strip()
+    except Exception:
+        return clean
+
+
 def _reload_forest_module():
-    """Hot-reload forest.py from disk so station-break edits take effect without restarting stream.py."""
-    global _forest_mod, STATION_SEGMENTS
+    """Hot-reload terms.py and forest.py from disk so edits take effect without restarting stream.py."""
+    global _forest_mod, _terms_mod, STATION_SEGMENTS
+    try:
+        import importlib
+        if _terms_mod is None:
+            import terms as _terms_mod
+        else:
+            _terms_mod = importlib.reload(_terms_mod)
+    except Exception:
+        pass
     try:
         import importlib
         if _forest_mod is None:
@@ -585,7 +608,7 @@ class Narrator(threading.Thread):
             "voice": voice,
             "model": model_map.get(voice, NORMA_MODEL_NAME),
             "rate": rate_map.get(voice, NORMA_TTS_SAMPLE_RATE),
-            "text": text,
+            "text": _polish_tts_text(text),
             "speaker": speaker,
             "left": left,
             "right": right,
@@ -781,7 +804,7 @@ class Narrator(threading.Thread):
     def prep_raw(self, text, voice_key: str = None):
         """Pre-synthesize card narration into a .raw PCM file before showing a card."""
         vk = voice_key or ("mike" if self.live_operator_mode.is_set() else "norma")
-        raw_path, _ = self._synth_raw_with_voice(text, vk)
+        raw_path, _ = self._synth_raw_with_voice(_polish_tts_text(text), vk)
         return raw_path
 
     def prep_specs_raw(self, specs: list):

--- UNTRACKED (invisible to the diff above; m will not commit these; git add the ones you mean) ---
  + remotes/honeybot/scripts/terms.py
(nix) pipulate $ m
NOT committed (new, untracked); git add the ones you mean, then run m again:
  + remotes/honeybot/scripts/terms.py
📝 Committing: chore: Update flake.nix to include terms.py integration
[main b401aa4] chore: Update flake.nix to include terms.py integration
 4 files changed, 59 insertions(+), 184 deletions(-)
(nix) pipulate $ git push
Enumerating objects: 19, done.
Counting objects: 100% (19/19), done.
Delta compression using up to 48 threads
Compressing objects: 100% (9/9), done.
Writing objects: 100% (10/10), 1.71 KiB | 1.71 MiB/s, done.
Total 10 (delta 8), reused 0 (delta 0), pack-reused 0 (from 0)
remote: Resolving deltas: 100% (8/8), completed with 8 local objects.
To github.com:pipulate/pipulate.git
   b16a466..b401aa4  main -> main
(nix) pipulate $ 
```

And this `nixops` part which feels like ignition but I'm coming to realize is
not without the `ytreboot` to follow-on.

```bash
On branch main
Your branch is up to date with 'origin/main'.

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	remotes/honeybot/scripts/terms.py

nothing added to commit but untracked files present (use "git add" to track)

GIT repo has changes. Type blast to commit them, then take the BEFORE reading.
(nix) pipulate $ git add remotes/honeybot/scripts/terms.py && nixops
🚀 Syncing Hooks & Scripts...
🚀 Syncing 8 Domain Doors & Installer...
🚀 Syncing installer to home-hosted doors (pipulate.com npvg.org qamy.ai levinix.org sunpug.io guerillatech.com rfc9110.org rfc9111.io)...
🧠 Built 2nd Brain archive: /home/mike/.cache/pipulate/brain.zip (1,632 posts, 1,632 shards, 47.4 MB)
🧠 Syncing 2nd Brain archive (brain.zip)...
🚀 Syncing levinux.com deck & NixOS Config...
✅ Sync Complete.
   To apply NixOS config: ssh -t mike@[REDACTED_IP] 'sudo cp ~/nixos-config-staged/* /etc/nixos/ && sudo nixos-rebuild switch'
(nix) pipulate $ 
```

Ignition: often "exit", "nix develop". Instructions may vary.

Oh, somebody just joined in. And I was about to ignite this. Let's give them
some time and see if they stick around. It's always fun to watch.

Remember I'm the guy who created HitTail, the original long-tail marketing tool
during those Web 2.0 days. Hey maybe we need that in there to pronounce it as
"Web two point oh"?

When you're YouTube live-streaming 24 hours a day, 7 days a week, 365 days a
year...

Well, it's long-tail broadcasting.

You're connecting with someone even if or maybe especially if it's just one
person other than yourself watching. I usually keep one tab open with it
playing.

Hey, make sure we do something to preserve the data correctly to be able to
calculate our own average watch-times. I don't want it to be useless statistics.
I want to be able to start correlating where in the article reading they dropped
off so we can start doing iterative refinement. Oh and along those lines I
should probably make the `ytlog` something I can put in context for you so that
we can wrap that in as well. Now don't derail this article. Just earmark or
to-do it in `foo_files.py` before we wrap the article.

Okay, they're gone.

That wasn't long.

I need to know things like whether popping Max Headroom-me is good or bad
because I can pop anything or not. I can also make much greater use of the
Weebo system in articles so every article or two I can add a new poppable meme
into the system and really start turning the Honeybot into Weebo, which is a
robot from the Robin Williams remake of *Flubber*.

Tokens allowing, you can tell them about that too Gemini.

```bash
On branch main
Your branch is up to date with 'origin/main'.

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	new file:   remotes/honeybot/scripts/terms.py

GIT repo has changes. Type blast to commit them, then take the BEFORE reading.
(nix) pipulate $ git push
Everything up-to-date
(nix) pipulate $ git add remotes/honeybot/scripts/terms.py
(nix) pipulate $ m
📝 Committing: feat: Add terms.py file with ear-orthography table for Piper TTS
[main af8acf5] feat: Add terms.py file with ear-orthography table for Piper TTS
 1 file changed, 291 insertions(+)
 create mode 100644 remotes/honeybot/scripts/terms.py
(nix) pipulate $ exit
exit
(sys) pipulate $ ndq
(nix) pipulate $ terms
(nix) pipulate $ ytreboot
🚀 Syncing Honeybot scripts to honeybot:~/www/mikelev.in/scripts/...
🔄 Signaling Honeybot stream.py on honeybot for graceful SCHEDULED REBOOT announcement...
   signaling stream.py pid=875131 for graceful reboot announcement...
✅ Stream watchdog relaunched fresh stream.py (pid=911872 after 5s).
🔭 Started background 'ytwatch' daemon in tmux (polling every 30s).
   • Watch live stream: ytwatch log   (or `ytlog` — press `q` or `Ctrl+b d` to exit)
   • Check status:      ytwatch status
   • Stop daemon:       ytwatch stop
(nix) pipulate $ 
```

And now I listen and watch and witness things.

Yep, I heard $10K pronounced correctly.

**4: PROMPT**: 

Verify the AFTER straddle receipts for Chisel Strike 1 (`terms` in `flake.nix`, `TERMS_FILE=True IDEMPOTENT=True`, identical `HONEYBOT_TTS` and `LOCAL_TTS` outputs with "Software as a Service", "surps", "10 thousand dollar(s)", and "nine eleven L L M Optics", plus cleaned `TITLES` and `STREAM_SPEC`).
Then inspect `remotes/honeybot/scripts/logs.py` and `remotes/honeybot/scripts/forest.py` and execute Chisel Strike 2:
1. Find the cleanest, highest-visibility permanent slot for `SunPug.io` alongside `https://mikelev.in` on the live Honeybot Storytime screen, eliminating the duplicate viewer/peak readout between the main title and subtitle.
2. Map the exact current station-break list in `forest.py` so Strike 3 cleanly archives `Tik-Tok` and `Pachinko` into an inactive dictionary and installs the 5-beat "SEOs Assemble!" -> 911 LLM Optics arc.

**5: DELIVERABLE**: 

Okay, I heard a verbal correction and that's enough. Let's power forward because
one altered change of pronunciation means it landed. I can always fine-tune
later because it's easy to now.

## Two Permanent SunPug.io Slots at Zero Vertical Row Cost

Whoops! `vi` is read as "Roman 6". That's a perfect candidate here.

**Gemini 4 Carbon High**: Context verified.

**TL;DR**: Chisel Strike 1's Python and live audio receipts are green (`TERMS_FILE=True IDEMPOTENT=True`, identical `HONEYBOT_TTS` and `LOCAL_TTS` outputs, and `$10K` verified live on air—with Probe 1's non-zero exit explained by `# § THE UNEXPORTED-SHIM RULE` when `nix-instantiate` runs without `LD_LIBRARY_PATH=""`). Below, **Chisel Strike 2** puts `https://sunpug.io` in **two** permanent, zero-row-cost locations on Honeybot Storytime—deduplicating the top `Header()` viewer readout while lighting up the unused cyan `border-top` divider directly beneath the 5-row theatrical stage—fixes `vi` (*"Roman 6"* -> `"vee eye"`), `Web 2.0`, and `HitTail` in `terms.py`, and maps `forest.py`'s current 10-bead list ahead of Strike 3 (followed by `scripts/articles/editing_prompt.txt` in Strike 4 and the viewer dwell-correlation TODO at dismount).

---

### 1. Strike 1 Receipt Audit (And the Live `"Roman 6"` Catch)

* **Probes 2 & 3 (Green):** Both `content_loader` and `imports/voice_synthesis` now read from `remotes/honeybot/scripts/terms.py` with `IDEMPOTENT=True`, turning `$10K Pre-Render Scam` into `"10 thousand dollar Pre-Render Scam"`, standalone `$10K` into `"10 thousand dollars"`, `SaaS` into `"Software as a Service"`, `SERPs` into `"surps"`, and `911 LLM Optics` into `"nine eleven L L M Optics"` across headlines, bodies, and `stream.py` station specs.
* **Probe 1 Non-Zero Receipt (Honest Diagnosis):** `nix-instantiate` exited `1` inside the `!` child shell with an `OPENSSL_3.6.0` / `GLIBC` mismatch because the dev shell's `LD_LIBRARY_PATH` front-loads Python's libraries (`# § THE UNEXPORTED-SHIM RULE`—the exact reason `apply.py` passes `LD_LIBRARY_PATH=""` to its Nix syntax airlock, which parsed `flake.nix` cleanly before your `ndq` + `terms` interactive test).
* **Why `vi` Said `"Roman 6"` (And Why Case Matters):** On air, Honeybot hit the sentence *"you opened the script in `vi` and read it"* from your Nov 10 post, and `espeak-ng` read `vi` as Roman numeral VI. Putting `("vi", "vee eye")` into **`EXACT_CASE_TERMS`** fixes lowercase `vi` while leaving uppercase Roman numeral section headers (`VI. Zero-Rent Publishing` in that same post) untouched, alongside `Web 2.0` -> `"Web two point oh"` and `HitTail` / `hittail.com` -> `"Hit Tail"`.

---

### 2. Chisel Strike 2: Two Permanent `SunPug.io` Slots at Zero Row Cost

Inspecting `remotes/honeybot/scripts/logs.py` exposed both the duplicate-viewer culprit and a better, higher-visibility home right at eye level:

1. **Top `Header()` Deduplication (`get_app_title()` + `get_sub_title()`):**
* Previously, Textual concatenated `title` and `sub_title` on Row 0 as `1 Viewer (Peak: 8) 👀 — Web Bot AI Observatory — https://mikelev.in — Viewers: 1 (Peak: 8) 👀 | Next Report: 239:42`, printing the viewer/peak count twice while omitting `SunPug.io` and mislabeling the 4-hour window timer as `"Next Report"`.
* Moving `https://sunpug.io` alongside `https://mikelev.in` in `get_app_title()` puts both URLs in **bright non-dimmed header text** (which stays uncovered at `y=0` even while centered `38`-line telemetry reports or Weebo popups hold the middle of the screen), while `get_sub_title()` drops the duplicate viewer count completely.

2. **The Unused Dead-Center Cyan Divider (`#intelligence_panel` `border_title`):**
* Line 347 of `logs.py` already spends 1 full-width screen row drawing `border-top: solid cyan;` directly beneath the 5-row Mike-E / LED Billboard / Shipmunk stage—currently 190 columns of blank line.
* Attaching a centered gold-on-obsidian `border_title` (`☀️ FOSS AI-READINESS SUITE & 911 OPTICS: https://sunpug.io · curl -fsSL sunpug.io | less`) puts `SunPug.io` dead center under the stage **consuming zero extra vertical rows**:

```text
┌──────────────────────────────────────────────────────────────────────────────┐
│ ⭘  2 Viewers (Peak: 8) 👀 — Web Bot AI Observatory — https://mikelev.in · https://sunpug.io — RFC 9110 · RFC 9421 · JS Trapdoor | Reset: 239:42 │
├──────────────────────────────────────────────────────────────────────────────┤
│ [11:16:02] MikeLev.in/ 66.249.*.* [a1b2]  [RFC9110:MD] GET /index.md [200]   │
├──────────────┬────────────────────────────────────────────────┬──────────────┤
│    Mike-E    │         5-ROW ANIMATED LED BILLBOARD           │   Shipmunk   │
└──────────────┴────────────────────────────────────────────────┴──────────────┘
───── ☀️ FOSS AI-READINESS SUITE & 911 OPTICS: https://sunpug.io · curl -fsSL sunpug.io | less ─────
│ ⚡ DOM HYDRATION TRAPDOOR (Bots Executing JS) │ 🧠 RFC 9110 MARKDOWN NEGOTIATORS ... │
```

*(Bonus live-stream physics: because `stream.py` launches `logs.py` with `SONAR_HOT_RELOAD=1` and `logs.py` watches its own `st_mtime`, running `nixops` hot-reloads `logs.py` in `0.2s` without `ytreboot` or cutting Storytime audio!)*

---

### 3. Map of `forest.py` for Strike 3 (+ Weebo, Long-Tail Watch-Time, & `editing_prompt.txt` Queue)

* **Current `forest.STATION_SEGMENTS` Inventory (10 beads, indices `0..9`):**
* `[0]` `RFC 9110 MARKDOWN` (`WINDOW :overview`) — **Keep as Beat 2** (first data break after Overture + opening article block).
* `[1]` `911 LLM OPTICS` (`OPTICS_SLOT`) — Currently fires *before* the audience is primed; in Strike 3 we pair/sequence it *after* the White Rabbit *"SEOs Assemble!"* teaser.
* `[2]` `PIPULATE NPvg` (`PATRONUS white_rabbit`) — **Upgrade in Strike 3 to Beat 3**: *"Follow the White Rabbit — SEOs Assemble!"* recruiting practitioners ready for RFC 9110/9111 AI-Readiness Consulting and introducing **911 LLM Optics** at `SunPug.io`.
* `[3]` `DOM TRAPDOOR JS EXECS` (`WINDOW :bimodal`) — **Keep as Beat 5** (lands after `score.py`'s Midpoint `INTERMISSION`, which is Beat 4).
* `[4]` `AI PACHINKO` (`PATRONUS ai_pachinko`) & `[6]` `THE AIRLOCK` (`PATRONUS mechanical_man` / Tik-Tok) — **Move intact into `ARCHIVED_STATION_BEADS`** in Strike 3 (never deleted; still runnable on demand via `--bead pachinko` / `--bead tiktok`), along with reviewing `[5] rfc9421`, `[7] doors`, `[8] schism`, and `[9] pirates` once `score.py` and `stream.py` join context next turn.

* **Weebo (*Flubber*, 1997) & Long-Tail Telemetry:** In the 1997 Robin Williams *Flubber*, Professor Brainard's hovering robot **Weebo** communicated emotion by flashing curated movie/meme clips on her screen—making XShape `weeboh` popups inside your articles a literal homage. Rather than guessing whether Max Headroom or Weebo pops extend or shorten single-viewer HitTail-style sessions, we will bank a `foo_files.py` TODO before dismount to join `ytwatch` viewer deltas against `(article_slug, heading/cue_index, active_overlay)` and expose a bounded `ytlog` receipt command—and right after Strike 3, **Strike 4** will pull in `scripts/articles/editing_prompt.txt` for the 80/20 human-curiosity headline upgrade.

---

### Actionable Next-Steps Plan (The 5-Car Train)

In `(1) PROBES` below:

* **Probe 1** straddles `logs.py`, testing `get_app_title()` and `get_sub_title()` in both idle and active-viewer states (`SUNPUG_IN_TITLE`, `NO_DUP_VIEWERS`) plus the centered `#intelligence_panel` `SUNPUG_BORDER_BANNER` (`BORDER_BANNER`).
* **Probe 2** straddles `terms.py` on lowercase `vi` vs. uppercase Roman numeral `VI.`, `Web 2.0`, `HitTail`, and `hittail.com` (`IDEMPOTENT=True`).
* **Probe 3** records the exact `COUNT`, `HAS_ARCHIVE`, and `BEADS` roster in `forest.py` as `(2) NEXT CONTEXT` loads `score.py` and `stream.py` for Chisel Strike 3.

#### (1) PROBES

`(nix) pipulate $`

```bash
HONEYBOT_DB_READONLY=1 .venv/bin/python -c 'import sys; sys.path.insert(0, "remotes/honeybot/scripts"); import logs; app = logs.SonarApp(); app.countdown_str = "239:59"; t0, s0 = app.get_app_title(), app.get_sub_title(); app.peak_viewers = 9; app._read_live_viewers = lambda: 3; t1, s1 = app.get_app_title(), app.get_sub_title(); sp_ok = ("sunpug.io" in t0.lower()) and ("sunpug.io" in t1.lower()); no_dup = ("viewer" not in s1.lower()) and ("peak" not in s1.lower()); b_ok = hasattr(logs, "SUNPUG_BORDER_BANNER") and ("border-title-align: center" in logs.SonarApp.CSS); print(f"SUNPUG_IN_TITLE={sp_ok} NO_DUP_VIEWERS={no_dup} BORDER_BANNER={b_ok}"); print(f"LIVE_HEADER={t1} — {s1}")'
.venv/bin/python -c 'import sys; sys.path.insert(0, "remotes/honeybot/scripts"); import terms; s = "Edit in vi during Web 2.0 with HitTail at hittail.com (Section VI. Tricks)"; out = terms.apply_inline_tts_terms(s); idem = (terms.apply_inline_tts_terms(out) == out); print(f"IDEMPOTENT={idem} OUT={out}")'
HONEYBOT_DB_READONLY=1 .venv/bin/python -c 'import sys; sys.path.insert(0, "remotes/honeybot/scripts"); import forest; segs = [(i, " ".join(b[0][1].get("label", "").split()) if isinstance(b[0][1], dict) else str(b[0])) for i, b in enumerate(forest.STATION_SEGMENTS)]; has_arch = hasattr(forest, "ARCHIVED_STATION_BEADS"); print(f"COUNT={len(segs)} HAS_ARCHIVE={has_arch} BEADS={segs}")'
```

#### (2) NEXT CONTEXT

```text
context.txt
remotes/honeybot/scripts/forest.py
remotes/honeybot/scripts/score.py
remotes/honeybot/scripts/stream.py
! HONEYBOT_DB_READONLY=1 .venv/bin/python -c 'import sys; sys.path.insert(0, "remotes/honeybot/scripts"); import logs; app = logs.SonarApp(); app.countdown_str = "239:59"; t0, s0 = app.get_app_title(), app.get_sub_title(); app.peak_viewers = 9; app._read_live_viewers = lambda: 3; t1, s1 = app.get_app_title(), app.get_sub_title(); sp_ok = ("sunpug.io" in t0.lower()) and ("sunpug.io" in t1.lower()); no_dup = ("viewer" not in s1.lower()) and ("peak" not in s1.lower()); b_ok = hasattr(logs, "SUNPUG_BORDER_BANNER") and ("border-title-align: center" in logs.SonarApp.CSS); print(f"SUNPUG_IN_TITLE={sp_ok} NO_DUP_VIEWERS={no_dup} BORDER_BANNER={b_ok}"); print(f"LIVE_HEADER={t1} — {s1}")'
! .venv/bin/python -c 'import sys; sys.path.insert(0, "remotes/honeybot/scripts"); import terms; s = "Edit in vi during Web 2.0 with HitTail at hittail.com (Section VI. Tricks)"; out = terms.apply_inline_tts_terms(s); idem = (terms.apply_inline_tts_terms(out) == out); print(f"IDEMPOTENT={idem} OUT={out}")'
! HONEYBOT_DB_READONLY=1 .venv/bin/python -c 'import sys; sys.path.insert(0, "remotes/honeybot/scripts"); import forest; segs = [(i, " ".join(b[0][1].get("label", "").split()) if isinstance(b[0][1], dict) else str(b[0])) for i, b in enumerate(forest.STATION_SEGMENTS)]; has_arch = hasattr(forest, "ARCHIVED_STATION_BEADS"); print(f"COUNT={len(segs)} HAS_ARCHIVE={has_arch} BEADS={segs}")'
```

#### (3) PATCHES

**Car 1 — Deduplicate `logs.py` Header Viewers, Add Dual Permanent `SunPug.io` Slots, & Polish `vi` / `Web 2.0` / `HitTail` in `terms.py`:**

```text
Target: remotes/honeybot/scripts/logs.py
[[[SEARCH]]]
STAGE_STATE_TTL_SECONDS = 900.0
BASE_APP_TITLE = "Web Bot AI Observatory — https://mikelev.in (RFC 9110 · RFC 9421 · JS Trapdoor)"
JS_PANEL_TITLE = "⚡ DOM HYDRATION TRAPDOOR (Bots Executing JS)"
[[[DIVIDER]]]
STAGE_STATE_TTL_SECONDS = 900.0
BASE_APP_TITLE = "Web Bot AI Observatory — https://mikelev.in · https://sunpug.io"
SUNPUG_BORDER_BANNER = " ☀️ FOSS AI-READINESS SUITE & 911 OPTICS: https://sunpug.io · curl -fsSL sunpug.io | less "
JS_PANEL_TITLE = "⚡ DOM HYDRATION TRAPDOOR (Bots Executing JS)"
[[[REPLACE]]]

Target: remotes/honeybot/scripts/logs.py
[[[SEARCH]]]
    /* BOTTOM SECTION: The Intelligence Panel (sized in unison by HUD_TABLE_ROWS) */
    #intelligence_panel {
        height: __HUD_PANEL_HEIGHT__;
        border-top: solid cyan;
        background: #051515;
        padding: 0;
        layout: horizontal; /* Split Left/Right */
        overflow: hidden;
    }
[[[DIVIDER]]]
    /* BOTTOM SECTION: The Intelligence Panel (sized in unison by HUD_TABLE_ROWS) */
    #intelligence_panel {
        height: __HUD_PANEL_HEIGHT__;
        border-top: solid cyan;
        border-title-align: center;
        border-title-color: #ffd700;
        border-title-background: #0b1319;
        border-title-style: bold;
        background: #051515;
        padding: 0;
        layout: horizontal; /* Split Left/Right */
        overflow: hidden;
    }
[[[REPLACE]]]

Target: remotes/honeybot/scripts/logs.py
[[[SEARCH]]]
    TITLE = "Web Bot AI Observatory — https://mikelev.in (RFC 9110 · RFC 9421 · JS Trapdoor)"
    countdown_str = "--:--"
[[[DIVIDER]]]
    TITLE = BASE_APP_TITLE
    countdown_str = "--:--"
[[[REPLACE]]]

Target: remotes/honeybot/scripts/logs.py
[[[SEARCH]]]
    def get_app_title(self):
        """When ytwatch is running, lead the Honeybot Storytime terminal title with the live viewer count."""
        v = self._read_live_viewers()
        if v is None:
            return BASE_APP_TITLE
        v_word = "Viewer" if v == 1 else "Viewers"
        pk = getattr(self, "peak_viewers", 0) or 0
        pk_seg = f" (Peak: {pk})" if pk > 0 else ""
        return f"{v} {v_word}{pk_seg} 👀 — Web Bot AI Observatory — https://mikelev.in"
[[[DIVIDER]]]
    def get_app_title(self):
        """Lead with single live viewer/peak readout (when ytwatch runs) alongside always-on mikelev.in & sunpug.io."""
        v = self._read_live_viewers()
        if v is None:
            return BASE_APP_TITLE
        v_word = "Viewer" if v == 1 else "Viewers"
        pk = getattr(self, "peak_viewers", 0) or 0
        pk_seg = f" (Peak: {pk})" if pk > 0 else ""
        return f"{v} {v_word}{pk_seg} 👀 — {BASE_APP_TITLE}"
[[[REPLACE]]]

Target: remotes/honeybot/scripts/logs.py
[[[SEARCH]]]
    def get_sub_title(self):
        v = self._read_live_viewers()
        countdown = getattr(self, "countdown_str", "--:--")
        if v is None:
            return f"Live Nginx Log Analysis | Next Report: {countdown}"
        pk = getattr(self, "peak_viewers", 0) or 0
        pk_seg = f" (Peak: {pk})" if pk > 0 else ""
        return f"Viewers: {v}{pk_seg} 👀 | Next Report: {countdown}"
[[[DIVIDER]]]
    def get_sub_title(self):
        countdown = getattr(self, "countdown_str", "--:--")
        return f"RFC 9110 · RFC 9421 · JS Trapdoor | Reset: {countdown}"
[[[REPLACE]]]

Target: remotes/honeybot/scripts/logs.py
[[[SEARCH]]]
        # --- NEW: The Dual Intelligence Panel ---
        with Container(id="intelligence_panel"):
[[[DIVIDER]]]
        # --- NEW: The Dual Intelligence Panel ---
        with Container(id="intelligence_panel") as intel_panel:
            intel_panel.border_title = SUNPUG_BORDER_BANNER
[[[REPLACE]]]

Target: remotes/honeybot/scripts/logs.py
[[[SEARCH]]]
        self.live_viewers = None
        self.title = self.get_app_title()
        self.spoof_flip = False
[[[DIVIDER]]]
        self.live_viewers = None
        self.title = self.get_app_title()
        self.sub_title = self.get_sub_title()
        self.spoof_flip = False
[[[REPLACE]]]

Target: remotes/honeybot/scripts/terms.py
[[[SEARCH]]]
    (re.compile(r"\bSHA-?256\b", re.IGNORECASE), "S H A 256"),
    (re.compile(r"\b(?:Neovim|nvim)\b", re.IGNORECASE), "Neo vim"),
[[[DIVIDER]]]
    (re.compile(r"\bWeb\s+1\.0\b", re.IGNORECASE), "Web one point oh"),
    (re.compile(r"\bWeb\s+2\.0\b", re.IGNORECASE), "Web two point oh"),
    (re.compile(r"\bWeb\s+3\.0\b", re.IGNORECASE), "Web three point oh"),
    (re.compile(r"\bSHA-?256\b", re.IGNORECASE), "S H A 256"),
    (re.compile(r"\b(?:Neovim|nvim)\b", re.IGNORECASE), "Neo vim"),
[[[REPLACE]]]

Target: remotes/honeybot/scripts/terms.py
[[[SEARCH]]]
    ("commodore.net", "Commodore dot net"),
    ("exa.ai", "Exa dot A I"),
[[[DIVIDER]]]
    ("hittail.com", "Hit Tail dot com"),
    ("HitTail", "Hit Tail"),
    ("commodore.net", "Commodore dot net"),
    ("exa.ai", "Exa dot A I"),
[[[REPLACE]]]

Target: remotes/honeybot/scripts/terms.py
[[[SEARCH]]]
    ("FOSS", "foss"),
    ("RFCs", "R F C's"),
[[[DIVIDER]]]
    ("vi", "vee eye"),
    ("FOSS", "foss"),
    ("RFCs", "R F C's"),
[[[REPLACE]]]
```

**Car 2 — Sync `logs.py` & `terms.py` to Honeybot (`SONAR_HOT_RELOAD=1` Picks Up `logs.py` Automatically Without `ytreboot`):**

`(nix) pipulate $`

```bash
nixops
```

Ignition: Car 2 (`nixops`) syncs `logs.py` and `terms.py` to Honeybot, triggering `logs.py`'s `SONAR_HOT_RELOAD=1` 0.2s TUI hot-reload on `:10.0` without restarting `stream.py` (the compiled AFTER probes also load the local modules directly at call time).

#### (4) PROMPT

```text
Verify the AFTER straddle receipts for Chisel Strike 2 (`SUNPUG_IN_TITLE=True NO_DUP_VIEWERS=True BORDER_BANNER=True`, `vi` -> "vee eye" while keeping `VI.` intact, plus `Web two point oh` and `Hit Tail`).
Now inspect `remotes/honeybot/scripts/forest.py`, `remotes/honeybot/scripts/score.py`, and `remotes/honeybot/scripts/stream.py` and execute Chisel Strike 3:
1. Move `ai_pachinko` and `mechanical_man` (`Tik-Tok`) intact into an inactive `ARCHIVED_STATION_BEADS` dictionary in `forest.py` (and keep `stream.py --bead` able to summon archived beads on demand so no storytelling asset is lost).
2. Install the linear 5-beat Storytime arc (1. Around-the-HUDs Intro -> Article -> 2. Accepts Markdown `:overview` -> Article -> 3. White Rabbit "SEOs Assemble!" teaser for RFC 9110/9111 & 911 LLM Optics at SunPug.io -> 4. Midpoint Intermission -> Article -> 5. JS DOM Hydration `:bimodal` + 911 LLM Optics showcase), tightening time-to-CTA pacing as needed, and queue `scripts/articles/editing_prompt.txt` into NEXT CONTEXT for Chisel Strike 4.
```

#### (5) EXTERNAL DELIVERABLES

No external deliverables required this turn.

**MikeLev.in**: 



## THE AI-EDIT METHOD

> Same commands, run twice, one change between them. Where the readings
> differ is what the change did; the diff in the middle is the receipt.

**1: BEFORE** (PROBE): 

```bash
On branch main
Your branch is up to date with 'origin/main'.

nothing to commit, working tree clean

GIT repo clean. Take BEFORE reading, make CHANGE, record AFTER diff.
(nix) pipulate $ HONEYBOT_DB_READONLY=1 .venv/bin/python -c 'import sys; sys.path.insert(0, "remotes/honeybot/scripts"); import logs; app = logs.SonarApp(); app.countdown_str = "239:59"; t0, s0 = app.get_app_title(), app.get_sub_title(); app.peak_viewers = 9; app._read_live_viewers = lambda: 3; t1, s1 = app.get_app_title(), app.get_sub_title(); sp_ok = ("sunpug.io" in t0.lower()) and ("sunpug.io" in t1.lower()); no_dup = ("viewer" not in s1.lower()) and ("peak" not in s1.lower()); b_ok = hasattr(logs, "SUNPUG_BORDER_BANNER") and ("border-title-align: center" in logs.SonarApp.CSS); print(f"SUNPUG_IN_TITLE={sp_ok} NO_DUP_VIEWERS={no_dup} BORDER_BANNER={b_ok}"); print(f"LIVE_HEADER={t1} — {s1}")'
.venv/bin/python -c 'import sys; sys.path.insert(0, "remotes/honeybot/scripts"); import terms; s = "Edit in vi during Web 2.0 with HitTail at hittail.com (Section VI. Tricks)"; out = terms.apply_inline_tts_terms(s); idem = (terms.apply_inline_tts_terms(out) == out); print(f"IDEMPOTENT={idem} OUT={out}")'
HONEYBOT_DB_READONLY=1 .venv/bin/python -c 'import sys; sys.path.insert(0, "remotes/honeybot/scripts"); import forest; segs = [(i, " ".join(b[0][1].get("label", "").split()) if isinstance(b[0][1], dict) else str(b[0])) for i, b in enumerate(forest.STATION_SEGMENTS)]; has_arch = hasattr(forest, "ARCHIVED_STATION_BEADS"); print(f"COUNT={len(segs)} HAS_ARCHIVE={has_arch} BEADS={segs}")'
SUNPUG_IN_TITLE=False NO_DUP_VIEWERS=False BORDER_BANNER=False
LIVE_HEADER=3 Viewers (Peak: 9) 👀 — Web Bot AI Observatory — https://mikelev.in — Viewers: 3 (Peak: 9) 👀 | Next Report: 239:59
IDEMPOTENT=True OUT=Edit in vi during Web 2.0 with HitTail at hittail.com (Section VI. Tricks)
COUNT=10 HAS_ARCHIVE=False BEADS=[(0, 'RFC 9110 MARKDOWN'), (1, '911 LLM OPTICS'), (2, 'PIPULATE NPvg'), (3, 'DOM TRAPDOOR JS EXECS'), (4, 'AI PACHINKO'), (5, 'RFC 9421 WEB BOT AUTH'), (6, 'THE AIRLOCK'), (7, 'EIGHT DOORS ONE ENGINE'), (8, 'AI CRAWLER SCHISM'), (9, 'CT LOG PIRATES')]
(nix) pipulate $ 
```

**2: AFTER** (NEXT CONTEXT): 

```text
# # Context 1
# ! book
# ! markov
# ! rgxc 20
# /home/mike/repos/trimnoir/_posts/2026-11-10-butterfly-nets-monkeys-paws-flake-nix-for-matter.md  # [Idx: 1 | Order: 2 | Tokens: 35,494 | Bytes: 140,431]
# /home/mike/repos/trimnoir/_posts/2026-11-10-google-serp-poisoning-prerender-tax-post-seo-audit.md  # [Idx: 2 | Order: 3 | Tokens: 101,004 | Bytes: 384,604]
# # /home/mike/repos/trimnoir/_posts/2026-11-11-killing-prerender-scam-sunpug-911-optics-vibe-coding.md  # [Idx: 3 | Order: 1 | Tokens: 107,526 | Bytes: 414,226]

# # Context 2
# context.txt
# flake.nix
# nixops.sh
# imports/voice_synthesis.py
# remotes/honeybot/scripts/content_loader.py
# remotes/honeybot/scripts/stream.py
# ! ls -1 remotes/honeybot/scripts
# ! rg -n 'alias (art|forest|terms)=|^\s*(art|forest|terms|ytapp)\s*\(\)' flake.nix
# ! rg -in '360i|pronun|phonetic|clean_for_tts|saas|serp' imports/voice_synthesis.py remotes/honeybot/scripts/ | head -n 60
# ! sed -n '1,25p' /home/mike/repos/trimnoir/_posts/2026-11-11-killing-prerender-scam-sunpug-911-optics-vibe-coding.md

# # Context 3
# context.txt
# remotes/honeybot/scripts/terms.py
# remotes/honeybot/scripts/logs.py
# remotes/honeybot/scripts/forest.py
# ! nix-instantiate --parse flake.nix >/dev/null && rg -n 'alias (forest|art|terms)=' flake.nix
# ! .venv/bin/python -c 'import pathlib, sys; sys.path.insert(0, "remotes/honeybot/scripts"); sys.path.insert(0, "."); import content_loader; from imports.voice_synthesis import chip_voice_system as cvs; has_t = pathlib.Path("remotes/honeybot/scripts/terms.py").is_file(); sample = "Killing the $10K Pre-Render Scam: SaaS & SERPs for SEOs at SunPug.io with 911 LLM Optics ($10K/mo vs $10K)"; cl_out = content_loader._apply_tts_pronunciations(sample); vs_out = cvs.sanitize_text(sample) if cvs else "NONE"; idem = (content_loader._apply_tts_pronunciations(cl_out) == cl_out); print(f"TERMS_FILE={has_t} IDEMPOTENT={idem}"); print(f"HONEYBOT_TTS={cl_out}"); print(f"LOCAL_TTS={vs_out}")'
# ! .venv/bin/python -c 'import sys; sys.path.insert(0, "remotes/honeybot/scripts"); import content_loader, stream; arts = content_loader.get_playlist(recent_n=2, include_archive=False); titles = [a["title"] for a in arts]; spec_txt = stream.Narrator()._make_spec("norma", "911 LLM Optics kills $10K SaaS SERP scams at SunPug.io", "narrator", "inactive", "inactive")["text"]; print(f"TITLES={titles}"); print(f"STREAM_SPEC={spec_txt}")'

# Context 4
context.txt
remotes/honeybot/scripts/forest.py
remotes/honeybot/scripts/score.py
remotes/honeybot/scripts/stream.py
! HONEYBOT_DB_READONLY=1 .venv/bin/python -c 'import sys; sys.path.insert(0, "remotes/honeybot/scripts"); import logs; app = logs.SonarApp(); app.countdown_str = "239:59"; t0, s0 = app.get_app_title(), app.get_sub_title(); app.peak_viewers = 9; app._read_live_viewers = lambda: 3; t1, s1 = app.get_app_title(), app.get_sub_title(); sp_ok = ("sunpug.io" in t0.lower()) and ("sunpug.io" in t1.lower()); no_dup = ("viewer" not in s1.lower()) and ("peak" not in s1.lower()); b_ok = hasattr(logs, "SUNPUG_BORDER_BANNER") and ("border-title-align: center" in logs.SonarApp.CSS); print(f"SUNPUG_IN_TITLE={sp_ok} NO_DUP_VIEWERS={no_dup} BORDER_BANNER={b_ok}"); print(f"LIVE_HEADER={t1} — {s1}")'
! .venv/bin/python -c 'import sys; sys.path.insert(0, "remotes/honeybot/scripts"); import terms; s = "Edit in vi during Web 2.0 with HitTail at hittail.com (Section VI. Tricks)"; out = terms.apply_inline_tts_terms(s); idem = (terms.apply_inline_tts_terms(out) == out); print(f"IDEMPOTENT={idem} OUT={out}")'
! HONEYBOT_DB_READONLY=1 .venv/bin/python -c 'import sys; sys.path.insert(0, "remotes/honeybot/scripts"); import forest; segs = [(i, " ".join(b[0][1].get("label", "").split()) if isinstance(b[0][1], dict) else str(b[0])) for i, b in enumerate(forest.STATION_SEGMENTS)]; has_arch = hasattr(forest, "ARCHIVED_STATION_BEADS"); print(f"COUNT={len(segs)} HAS_ARCHIVE={has_arch} BEADS={segs}")'
```

**3: CHANGE** (PATCHES): 

```diff
On branch main
Your branch is up to date with 'origin/main'.

nothing to commit, working tree clean

GIT repo clean. Take BEFORE reading, make CHANGE, record AFTER diff.
(nix) pipulate $ patch
(nix) pipulate $ app
✅ DETERMINISTIC PATCH APPLIED: Successfully mutated 'remotes/honeybot/scripts/logs.py'.
✅ DETERMINISTIC PATCH APPLIED: Successfully mutated 'remotes/honeybot/scripts/logs.py'.
✅ DETERMINISTIC PATCH APPLIED: Successfully mutated 'remotes/honeybot/scripts/logs.py'.
✅ DETERMINISTIC PATCH APPLIED: Successfully mutated 'remotes/honeybot/scripts/logs.py'.
✅ DETERMINISTIC PATCH APPLIED: Successfully mutated 'remotes/honeybot/scripts/logs.py'.
✅ DETERMINISTIC PATCH APPLIED: Successfully mutated 'remotes/honeybot/scripts/logs.py'.
✅ DETERMINISTIC PATCH APPLIED: Successfully mutated 'remotes/honeybot/scripts/logs.py'.
✅ DETERMINISTIC PATCH APPLIED: Successfully mutated 'remotes/honeybot/scripts/terms.py'.
✅ DETERMINISTIC PATCH APPLIED: Successfully mutated 'remotes/honeybot/scripts/terms.py'.
✅ DETERMINISTIC PATCH APPLIED: Successfully mutated 'remotes/honeybot/scripts/terms.py'.
(nix) pipulate $ d
diff --git a/remotes/honeybot/scripts/logs.py b/remotes/honeybot/scripts/logs.py
index 89ffe6e..e6d3ae0 100644
--- a/remotes/honeybot/scripts/logs.py
+++ b/remotes/honeybot/scripts/logs.py
@@ -34,7 +34,8 @@ VIEWERS_FILE_PATH = "/tmp/honeybot_viewers.json"
 VIEWERS_TTL_SECONDS = 120.0
 STAGE_STATE_PATH = "/tmp/honeybot_stage.json"
 STAGE_STATE_TTL_SECONDS = 900.0
-BASE_APP_TITLE = "Web Bot AI Observatory — https://mikelev.in (RFC 9110 · RFC 9421 · JS Trapdoor)"
+BASE_APP_TITLE = "Web Bot AI Observatory — https://mikelev.in · https://sunpug.io"
+SUNPUG_BORDER_BANNER = " ☀️ FOSS AI-READINESS SUITE & 911 OPTICS: https://sunpug.io · curl -fsSL sunpug.io | less "
 JS_PANEL_TITLE = "⚡ DOM HYDRATION TRAPDOOR (Bots Executing JS)"
 MD_PANEL_TITLE = "🧠 RFC 9110 MARKDOWN NEGOTIATORS (Accept: text/markdown)"
 JS_BUMP_TITLE = "▾ END OF LIST — HANDING OFF TO MARKDOWN HUD ➔"
@@ -643,6 +644,10 @@ class SonarApp(App):
     #intelligence_panel {
         height: __HUD_PANEL_HEIGHT__;
         border-top: solid cyan;
+        border-title-align: center;
+        border-title-color: #ffd700;
+        border-title-background: #0b1319;
+        border-title-style: bold;
         background: #051515;
         padding: 0;
         layout: horizontal; /* Split Left/Right */
@@ -710,7 +715,7 @@ class SonarApp(App):
        but standard Footer widget handles it well. */
     """.replace("__HUD_PANEL_HEIGHT__", str(HUD_PANEL_HEIGHT))
 
-    TITLE = "Web Bot AI Observatory — https://mikelev.in (RFC 9110 · RFC 9421 · JS Trapdoor)"
+    TITLE = BASE_APP_TITLE
     countdown_str = "--:--"
     viewers_mtime = None
     live_viewers = None
@@ -755,23 +760,18 @@ class SonarApp(App):
             return None
 
     def get_app_title(self):
-        """When ytwatch is running, lead the Honeybot Storytime terminal title with the live viewer count."""
+        """Lead with single live viewer/peak readout (when ytwatch runs) alongside always-on mikelev.in & sunpug.io."""
         v = self._read_live_viewers()
         if v is None:
             return BASE_APP_TITLE
         v_word = "Viewer" if v == 1 else "Viewers"
         pk = getattr(self, "peak_viewers", 0) or 0
         pk_seg = f" (Peak: {pk})" if pk > 0 else ""
-        return f"{v} {v_word}{pk_seg} 👀 — Web Bot AI Observatory — https://mikelev.in"
+        return f"{v} {v_word}{pk_seg} 👀 — {BASE_APP_TITLE}"
 
     def get_sub_title(self):
-        v = self._read_live_viewers()
         countdown = getattr(self, "countdown_str", "--:--")
-        if v is None:
-            return f"Live Nginx Log Analysis | Next Report: {countdown}"
-        pk = getattr(self, "peak_viewers", 0) or 0
-        pk_seg = f" (Peak: {pk})" if pk > 0 else ""
-        return f"Viewers: {v}{pk_seg} 👀 | Next Report: {countdown}"
+        return f"RFC 9110 · RFC 9421 · JS Trapdoor | Reset: {countdown}"
 
     def compose(self) -> ComposeResult:
         yield Header()
@@ -784,7 +784,8 @@ class SonarApp(App):
             yield Static(render_stage_curtain("right"), id="right_stage", classes="stage_box")
         
         # --- NEW: The Dual Intelligence Panel ---
-        with Container(id="intelligence_panel"):
+        with Container(id="intelligence_panel") as intel_panel:
+            intel_panel.border_title = SUNPUG_BORDER_BANNER
             
             # LEFT: Javascript Executors
             with Vertical(id="js_panel", classes="half_panel"):
@@ -805,6 +806,7 @@ class SonarApp(App):
         self.viewers_mtime = None
         self.live_viewers = None
         self.title = self.get_app_title()
+        self.sub_title = self.get_sub_title()
         self.spoof_flip = False
         self.verified_tokens = {"ExaSearchBot", "AhrefsBot", "DesearchBot"}
         self.stream_logs()
diff --git a/remotes/honeybot/scripts/terms.py b/remotes/honeybot/scripts/terms.py
index f8d3318..f787224 100644
--- a/remotes/honeybot/scripts/terms.py
+++ b/remotes/honeybot/scripts/terms.py
@@ -81,6 +81,9 @@ REGEX_TERMS = (
     # Special capitonyms & punctuation-bearing shorthands
     (re.compile(r"\*{0,2}\bTL;DR\b\*{0,2}\s*[:.]?", re.IGNORECASE), "T L D R:"),
     (re.compile(r"(?<!Reverse )\bPolish\b(?!\s+notation\b)"), "polish"),
+    (re.compile(r"\bWeb\s+1\.0\b", re.IGNORECASE), "Web one point oh"),
+    (re.compile(r"\bWeb\s+2\.0\b", re.IGNORECASE), "Web two point oh"),
+    (re.compile(r"\bWeb\s+3\.0\b", re.IGNORECASE), "Web three point oh"),
     (re.compile(r"\bSHA-?256\b", re.IGNORECASE), "S H A 256"),
     (re.compile(r"\b(?:Neovim|nvim)\b", re.IGNORECASE), "Neo vim"),
 )
@@ -98,6 +101,8 @@ CASE_INSENSITIVE_TERMS = (
     ("pipulate.com", "Pipulate dot com"),
     ("prerender.io", "Pre-render dot eye oh"),
     ("tryprofound.com", "try profound dot com"),
+    ("hittail.com", "Hit Tail dot com"),
+    ("HitTail", "Hit Tail"),
     ("commodore.net", "Commodore dot net"),
     ("exa.ai", "Exa dot A I"),
     ("llms.txt", "L L M S dot text"),
@@ -147,6 +152,7 @@ EXACT_CASE_TERMS = (
     ("FCrDNS", "F C R D N S"),
     ("RLVR", "R L V R"),
     ("RLHF", "R L H F"),
+    ("vi", "vee eye"),
     ("FOSS", "foss"),
     ("RFCs", "R F C's"),
     ("RFC", "R F C"),
(nix) pipulate $ m
📝 Committing: chore: Update app title and add sunpug border banner
[main 9656387] chore: Update app title and add sunpug border banner
 2 files changed, 19 insertions(+), 11 deletions(-)
(nix) pipulate $ git push
Enumerating objects: 13, done.
Counting objects: 100% (13/13), done.
Delta compression using up to 48 threads
Compressing objects: 100% (6/6), done.
Writing objects: 100% (7/7), 1.09 KiB | 1.09 MiB/s, done.
Total 7 (delta 5), reused 0 (delta 0), pack-reused 0 (from 0)
remote: Resolving deltas: 100% (5/5), completed with 5 local objects.
To github.com:pipulate/pipulate.git
   997cc50..9656387  main -> main
(nix) pipulate $ 
```

And this.

```bash
On branch main
Your branch is up to date with 'origin/main'.

nothing to commit, working tree clean

GIT repo clean. Take BEFORE reading, make CHANGE, record AFTER diff.
(nix) pipulate $ nixops
🚀 Syncing Hooks & Scripts...
🚀 Syncing 8 Domain Doors & Installer...
🚀 Syncing installer to home-hosted doors (pipulate.com npvg.org qamy.ai levinix.org sunpug.io guerillatech.com rfc9110.org rfc9111.io)...
🧠 Built 2nd Brain archive: /home/mike/.cache/pipulate/brain.zip (1,632 posts, 1,632 shards, 47.4 MB)
🧠 Syncing 2nd Brain archive (brain.zip)...
🚀 Syncing levinux.com deck & NixOS Config...
✅ Sync Complete.
   To apply NixOS config: ssh -t mike@[REDACTED_IP] 'sudo cp ~/nixos-config-staged/* /etc/nixos/ && sudo nixos-rebuild switch'
(nix) pipulate $ ssh -t mike@[REDACTED_IP] 'sudo cp ~/nixos-config-staged/* /etc/nixos/ && sudo nixos-rebuild switch'
[sudo] password for mike: 
building the system configuration...
activating the configuration...
setting up /etc...
reloading user units for mike...
restarting sysinit-reactivation.target
the following new units were started: NetworkManager-dispatcher.service
Done. The new configuration is /nix/store/68qiwsknriax9lbn9fmxm04ilarf91yh-nixos-system-honeybot-26.05pre913595.c6245e83d836
Connection to [REDACTED_IP] closed.
(nix) pipulate $ 
```

Ignition: often "exit", "nix develop". Instructions may vary.

Soft-ignition done because of nixops hotloading.

**4: PROMPT**: 

Verify the AFTER straddle receipts for Chisel Strike 2 (`SUNPUG_IN_TITLE=True NO_DUP_VIEWERS=True BORDER_BANNER=True`, `vi` -> "vee eye" while keeping `VI.` intact, plus `Web two point oh` and `Hit Tail`).
Now inspect `remotes/honeybot/scripts/forest.py`, `remotes/honeybot/scripts/score.py`, and `remotes/honeybot/scripts/stream.py` and execute Chisel Strike 3:
1. Move `ai_pachinko` and `mechanical_man` (`Tik-Tok`) intact into an inactive `ARCHIVED_STATION_BEADS` dictionary in `forest.py` (and keep `stream.py --bead` able to summon archived beads on demand so no storytelling asset is lost).
2. Install the linear 5-beat Storytime arc (1. Around-the-HUDs Intro -> Article -> 2. Accepts Markdown `:overview` -> Article -> 3. White Rabbit "SEOs Assemble!" teaser for RFC 9110/9111 & 911 LLM Optics at SunPug.io -> 4. Midpoint Intermission -> Article -> 5. JS DOM Hydration `:bimodal` + 911 LLM Optics showcase), tightening time-to-CTA pacing as needed, and queue `scripts/articles/editing_prompt.txt` into NEXT CONTEXT for Chisel Strike 4.

**5: DELIVERABLE**: 

What does "DONE" look like?

Done is just continuous polishing now. It's more like better connection of dots.
Or maybe it's lining up the lenses. Do you know how a telescope or microscope
that uses multiple lenses is either incredible or useless? It's quite related to
the cutting the catapult rope metaphor but it's like you're trying to line
lenses up to burn through the catapult rope as your way of cutting it.

SEOs never meta a metaphor we wouldn't mix because after all, what's a meta for?

## The 7-Minute Showrunner Grid and the Modular Storytelling Vault

The deliverable is the worst joke in the whole field of SEO.

Or the best?

**Gemini 4 Carbon High**: Context verified.

**TL;DR**: Chisel Strike 2's straddle receipts are green across the board (`SUNPUG_IN_TITLE=True NO_DUP_VIEWERS=True BORDER_BANNER=True`, single viewer readout in `LIVE_HEADER`, and lowercase `vi` -> `"vee eye"` while uppercase `VI.` stays intact). Below, **Chisel Strike 3** lines up the compound optical train in `forest.py`, `stream.py`, and `score.py`: archiving `ai_pachinko`, `mechanical_man` (`Tik-Tok`), `pirates`, `rfc9421`, `doors`, and `schism` intact inside `ARCHIVED_STATION_BEADS` (still summonable via `stream.py --bead`), cutting `PITCH_INTERVAL` from 20 minutes (`1200s`) to 7 minutes (`420s`), trimming station-break monologue bloat by ~60%, and locking in the 5-beat *"SEOs Assemble!"* -> **911 LLM Optics** (`SunPug.io`) narrative arc—while queuing `scripts/articles/editing_prompt.txt` and `foo_files.py` into `(2) NEXT CONTEXT` for Chisel Strike 4.

---

### Lining Up the Lenses (So They Actually Burn Through the Catapult Rope)

A compound optical train—whether a microscope or *"what's a meta for?"*—fails if one lens is out of order or spaced twenty feet too far down the barrel. Inspecting `score.py`, `stream.py`, and `forest.py` together exposed three alignment bugs that were diffusing the beam:

1. **20-Minute CTA Starvation (`PITCH_INTERVAL = 1200` -> `420`)**: Waiting 20 minutes after `OVERTURE` meant casual live-stream visitors dropped off before seeing a single data proof or `SunPug.io` call-to-action, and shorter Act I halves hit `MIDPOINT INTERMISSION` before the White Rabbit ever appeared. Tightening `PITCH_INTERVAL` to **7 minutes (`420s`)**—plus trimming `WHATS_HAPPENING_BEAT` from 335 words down to a punchy ~115-word hook—cuts time-to-CTA by 65% and keeps breaks crisp (~95s instead of ~4 minutes).
2. **Episode Drift & Collision Guard (`stream.py`)**: `_station_index` previously never reset at `OVERTURE`, so repeat article loops started on random late-stage beads, and an `INTERMISSION` ending a few seconds before a Copper grid mark could trigger a station break immediately after `"Resuming storytime with Act Two"`. Resetting `_station_index = 0` on `OVERTURE` and advancing `next_slot(..., time.time() + 180.0)` after `OVERTURE` and `INTERMISSION` guarantees at least 3 minutes of uninterrupted reading while keeping the drift-free Copper grid intact.
3. **The Linear 5-Beat Funnel + Modular Vault (`forest.py` + `score.py`)**:

```text
  BEAT 1 (0%)           BEAT 2 (+7m)              BEAT 3 (+14m)
 ┌──────────────┐      ┌────────────────────┐    ┌─────────────────────────┐
 │ OVERTURE     │──▶..─▶│ RFC 9110 MARKDOWN  │──▶│ WHITE RABBIT:           │
 │ Stage & Cast │      │ (:overview Report) │    │ "SEOs Assemble!" Teaser │
 └──────────────┘      └────────────────────┘    └────────────┬────────────┘
                                                              │
  BEAT 5b (+14m Act II) BEAT 5a (+7m Act II)      BEAT 4 (50%)▼
 ┌────────────────────┐ ┌────────────────────┐   ┌─────────────────────────┐
 │ 911 LLM OPTICS     │◀│ DOM TRAPDOOR       │◀──│ MIDPOINT INTERMISSION   │
 │ FOSS @ SunPug.io   │ │ (:bimodal JS Execs)│   │ Around-the-HUDs Refresh │
 └────────────────────┘ └────────────────────┘   └─────────────────────────┘

  MODULAR VAULT (`ARCHIVED_STATION_BEADS` — inactive, intact, on-demand via `--bead`):
  • mechanical_man (Tik-Tok)  • ai_pachinko  • rfc9421  • doors  • schism  • pirates
```

---

### Actionable Next-Steps Plan (The 5-Car Train)

In `(1) PROBES` below:

* **Probe 1** measures `stream.PITCH_INTERVAL`, the ordered active `STATION_SEGMENTS` labels, and `ARCHIVED_STATION_BEADS` keys (`PITCH=1200` & 10 mixed beads before -> `PITCH=420`, 4 linear-arc beads, & 6 archived keys after).
* **Probe 2** runs `stream.trigger_station_bead_live(..., out_path=None)` read-only across `"tiktok"`, `"pachinko"`, `"rabbit"`, and `"optics"` to prove archived pieces still summon cleanly by alias while `"rabbit"` upgrades to `"SEOS ASSEMBLE!"`.
* **Probe 3** runs `remotes/honeybot/scripts/test_forest.py` and inspects `scripts/articles/editing_prompt.txt` as `(2) NEXT CONTEXT` loads `editing_prompt.txt` and `foo_files.py` for Chisel Strike 4 (human-curiosity social headlines + the `ytlog` viewer watch-time/Weebo correlation TODO).

#### (1) PROBES

`(nix) pipulate $`

```bash
HONEYBOT_DB_READONLY=1 .venv/bin/python -c 'import sys; sys.path.insert(0, "remotes/honeybot/scripts"); import forest, stream; segs = [" ".join(b[0][1].get("label", "").split()) for b in forest.STATION_SEGMENTS]; arch = list(getattr(forest, "ARCHIVED_STATION_BEADS", {}).keys()); print(f"PITCH={stream.PITCH_INTERVAL} ACTIVE={segs} ARCHIVED={arch}")'
HONEYBOT_DB_READONLY=1 .venv/bin/python -c 'import sys; sys.path.insert(0, "remotes/honeybot/scripts"); import stream; keys = ("tiktok", "pachinko", "rabbit", "optics"); res = {k: (" ".join(str(p.get("card", "")).split()), p.get("patronus") or p.get("window") or ("OPTICS_SLOT" if p.get("cues") else "")) for k in keys for p in [stream.trigger_station_bead_live(k, out_path=None)]}; print(f"BEAD_LOOKUP={res}")'
.venv/bin/pytest -q remotes/honeybot/scripts/test_forest.py && (rg -ni 'title|headline|click|social|linkedin' scripts/articles/editing_prompt.txt || true)
```

#### (2) NEXT CONTEXT

```text
context.txt
scripts/articles/editing_prompt.txt
foo_files.py
! HONEYBOT_DB_READONLY=1 .venv/bin/python -c 'import sys; sys.path.insert(0, "remotes/honeybot/scripts"); import forest, stream; segs = [" ".join(b[0][1].get("label", "").split()) for b in forest.STATION_SEGMENTS]; arch = list(getattr(forest, "ARCHIVED_STATION_BEADS", {}).keys()); print(f"PITCH={stream.PITCH_INTERVAL} ACTIVE={segs} ARCHIVED={arch}")'
! HONEYBOT_DB_READONLY=1 .venv/bin/python -c 'import sys; sys.path.insert(0, "remotes/honeybot/scripts"); import stream; keys = ("tiktok", "pachinko", "rabbit", "optics"); res = {k: (" ".join(str(p.get("card", "")).split()), p.get("patronus") or p.get("window") or ("OPTICS_SLOT" if p.get("cues") else "")) for k in keys for p in [stream.trigger_station_bead_live(k, out_path=None)]}; print(f"BEAD_LOOKUP={res}")'
! .venv/bin/pytest -q remotes/honeybot/scripts/test_forest.py && (rg -ni 'title|headline|click|social|linkedin' scripts/articles/editing_prompt.txt || true)
```

#### (3) PATCHES

**Car 1 — Archive Non-Linear Beads, Install the 5-Beat *"SEOs Assemble!"* -> `911 LLM Optics` Arc in `forest.py`, Tighten `stream.py` Pacing, & Align `score.py` Curtain Call:**

```text
Target: remotes/honeybot/scripts/forest.py
[[[SEARCH]]]
WHATS_HAPPENING_BEAT = (
    "What is happening on your screen right now? "
    "You are watching the live Web Bot AI Observatory. "
    "If you are not watching the behavior of AI bots and Agents directly on the wire meaning not behind a CDN, then you don't really have a feel for what's going on. "
    "You have to watch it for awhile like fish in a fish tank. "
    "It's changing and watching on a site like this lets you develop that intuitive understanding of how Agents work. "
    "This is witnessing it first-hand rather than the generative AI-slop in the social media echo chambers. "
    "Do you think they have access to first-hand information like this? Very few do. This is quite unique. "
    "Why? Because today most web traffic is filtered through Content Distribution Networks or C D N's that cut you off from all this even in their dashboards. "
    "Drips and drabs of this fall over your CDN and hit origin but it's already filtered by then. "
    "What you don't see is the Agentic Web being born and maturing like you do here. "
    "If you're here watching you already have a competitive advantage as a next-gen S E O practitioner -- I'm mean an AI Readiness -- practitioner in the new landscape. Don't believe me? Here's the live performance-art experiment you can run right now. "
    "If you want your Ah-Ha moment in the next thirty seconds, open Chat G P T or Claude right now and ask it a live question about Mike L E V dot eye N. "
    "When your prompt dispatches Chat G P T User or Claude User to fetch a page in real time, you will see a bright yellow R A G badge light up on this screen and hear the physical studio bell ding live on the air. "
    "Every post on Mike L E V dot eye N also includes a one-click Google Doc link right at the top so you can summarize or explore any article with A I in seconds. "
    "Round oranges highlight every self-asserted crawler. "
    "Blue diamonds mark agents cryptographically signing requests under R F C 94 21 Web Bot Auth. "
    "Big red bars unmask script-kiddie pirates probing for exploits, and purple bars catch bots executing client-side JavaScript in our D O M hydration trap-door. "
    "And when you see the ticker say Don't Join My Discord, that is a Map Facade straight out of Ira Levin's This Perfect Day: as Reddit and Quora lock down behind paywalls, Discord is opening public servers to the Free and Open Web where frontier A I crawlers harvest channel summaries into future model weights, and we only want curious builders who look past the sign at Mike L E V dot eye N slash discord. "
    "Get your screenshot key ready for the data report coming right up so you can grab a picture of the bare-metal numbers and send it to an engineer or technical S E O you trust. "
    "Hit Like and Subscribe right now so you don't lose this telemetry feed. "
)

CURRENT_ARTICLE_BEAT = "{CURRENT_ARTICLE}"

CONSULTING_CTA_BEAT = (
    "Do you have the S E O blues while A I Overviews eat your clicks? "
    "S E O isn't dead. Just like Mobile First gave us Responsive Web Design, "
    "the Agentic Web is moving S E O to the Edge so one U R L serves H T M L to browsers, clean Markdown to A I bots, and a linked Google Doc you can summarize in one click. "
    "Your site is already your feed. "
    "Step into Edge S E O and A I Readiness at Mike L E V dot eye N, or inspect Sun Pug dot eye oh with curl pipe less."
)
[[[DIVIDER]]]
WHATS_HAPPENING_BEAT = (
    "You are watching the live Web Bot AI Observatory on bare metal — not filtered behind a CDN. "
    "Watching AI crawlers and agents directly on the wire like fish in an aquarium builds an intuition you will never get from social media echo chambers. "
    "Want your thirty-second ah-ha moment right now? Open ChatGPT or Claude and ask it a live question about mikelev.in. "
    "When your prompt dispatches a live retrieval agent, a yellow RAG badge lights up on screen and rings the physical studio bell on the air. "
    "Get your screenshot key ready for the wire-truth proof coming right up, and hit Like and Subscribe so you can find this feed again."
)

CURRENT_ARTICLE_BEAT = "{CURRENT_ARTICLE}"

CONSULTING_CTA_BEAT = (
    "Got the SEO blues while AI Overviews eat your clicks and vendors pitch $10K/mo JavaScript pre-render taxes? "
    "SEO moved to the Edge: one URL serving HTML to humans and clean RFC 9110 Markdown to AI agents, cached cleanly via RFC 9111 Vary Accept. "
    "Explore the FOSS AI-Readiness toolkit and 911 LLM Optics right now at SunPug.io — or inspect it safely in your terminal with curl dash f s S L sunpug.io pipe less."
)
[[[REPLACE]]]

Target: remotes/honeybot/scripts/forest.py
[[[SEARCH]]]
STATION_SEGMENTS = [
    # Bead 0 (EVEN -> Rich Horizontal-Bar Telemetry Report: RFC 9110 Markdown 0-1% Horizon + UA Breakdown)
    _make_station_bead(
        "RFC 9110\nMARKDOWN",
        (
            "Hello, and welcome to the Web Bot A I Observatory on Honeybot. "
            "Like Benjamin Franklin dropping a thermometer into the Gulf Stream or Wilhelm Roentgen mailing Lord Kelvin an X-ray plate, "
            "we measure A I crawler behavior directly on the bare-metal wire."
        ),
        ("WINDOW", f"forest.py:{REPORT_WINDOW_CAP_SECONDS}:overview"),
        [
            "{LIVE_REPORT:overview}",
        ],
    ),
    # Bead 1 (Live LAN->DMZ Punch-Through: 911 LLM Optics Spectrometer with unattended fallback)
    [
        (
            "CARD",
            {
                "label": "911 LLM\nOPTICS",
                "say": (
                    "What does an A I agent actually see when it fetches your site on the wire versus a hydrated browser?"
                ),
            },
        ),
        ("OPTICS_SLOT", {"handshake_wait": 8.0, "timeout": 180.0}),
        ("SAY", CURRENT_ARTICLE_BEAT),
    ],
    # Bead 2 (ODD -> Patronus ASCII Art: white_rabbit)
    _make_station_bead(
        "PIPULATE\nNPvg",
        (
            "The open-source project powering this observatory is called Pipulate, running on a stack we call N P v g."
        ),
        ("PATRONUS", {"key": "white_rabbit", "duration": 65.0}),
        [
            "N is for Nix, making the entire software environment reproducible on any machine. P is for Python. The little v is for Vim. And g is for Git.",
            "Pipulate sits where A I assistance meets local hardware ownership. You do not need a multi-tenant cloud subscription to command your own stack.",
        ],
    ),
    # Bead 2 (EVEN -> Rich Horizontal-Bar Telemetry Report: JS DOM Hydration Trapdoor 0-5% Eligible HTML Horizon + Executor Breakdown)
    _make_station_bead(
        "DOM TRAPDOOR\nJS EXECS",
        (
            "Conventional S E O wisdom claims A I crawlers only scrape static H T M L and never execute client-side JavaScript. "
            "So we wired an eight-hundred-millisecond JavaScript trapdoor into our H T M L pages to measure the truth on the wire."
        ),
        ("WINDOW", f"forest.py:{REPORT_WINDOW_CAP_SECONDS}:bimodal"),
        [
            "{LIVE_REPORT:bimodal}",
        ],
    ),
    # Bead 3 (ODD -> Patronus ASCII Art: ai_pachinko)
    _make_station_bead(
        "AI PACHINKO",
        (
            "Every token an A I model generates is a ball dropped through a pachinko parlor of frozen mathematical weights."
        ),
        ("PATRONUS", {"key": "ai_pachinko", "duration": 65.0}),
        [
            "An L L M has no persistent memory of its own between sessions. When the context window closes, its working memory dissolves.",
            "That is why we pair the pachinko machine with a cybernetic governor: plain-text files in git, before-and-after falsifying probes, and wire-truth receipts.",
        ],
    ),
    # Bead 4 (EVEN -> Rich Horizontal-Bar Telemetry Report: RFC 9421 & Unmasked Cloakers)
    _make_station_bead(
        "RFC 9421\nWEB BOT AUTH",
        (
            "How do you tell a cryptographically signed A I agent from an unmasked IP cloaker?"
        ),
        ("WINDOW", f"forest.py:{REPORT_WINDOW_CAP_SECONDS}:rfc9421"),
        [
            "This report shows our three-shape bot identity taxonomy in action.",
            "Blue diamonds mark operators sending R F C 9421 Signature-Agent headers on the wire, including Exa Search Bot, Exa User, Ahrefs Bot, and Desearch Bot.",
            "Red stop signs unmask scrapers claiming to be Googlebot from non-Google I P addresses that fail forward-confirmed reverse D N S.",
        ],
    ),
    # Bead 5 (ODD -> Patronus ASCII Art: mechanical_man)
    _make_station_bead(
        "THE AIRLOCK",
        (
            "How do you collaborate with frontier A I models without letting hallucinations wreck your production systems? Meet Smith and Tinker's Patent Mechanical Man."
        ),
        ("PATRONUS", {"key": "mechanical_man", "duration": 65.0}),
        [
            "In L. Frank Baum's Oz books, Tik-Tok is a clockwork robot with three separate wind-up keys: one for thought, one for speech, and one for action.",
            "In our workflow, the context compiler winds the thought key, and the model's reply winds the speech key. But the action key stays in the human engineer's hand.",
            "Every code edit passes through an exact-match search and replace airlock with syntax tree verification before touching disk.",
        ],
    ),
    # Bead 6 (EVEN -> Rich 8-Door Frequency Dial Report: doors)
    _make_station_bead(
        "EIGHT DOORS\nONE ENGINE",
        (
            "Why does one home-hosted Nix O S head-end broadcast across eight distinct domain names? "
            "Because saying more requires saying less to each audience."
        ),
        ("WINDOW", f"forest.py:{REPORT_WINDOW_CAP_SECONDS}:doors"),
        [
            "Each door on this frequency dial scratches one specific engineering itch using the same underlying Software Von Neumann Probe.",
            "Sun Pug dot eye oh frees your A I discussions from disposable browser tabs into portable plain text. "
            "Q A my dot A I seals cryptographic flight-recorder deeds. "
            "N P V G dot org teaches timeless Nix, Python, Vim, and Git skills, while Levinix dot org replaces bloated Electron containers.",
            "Guerilla Tech dot com pits declarative Nix O S against Docker for home hosting, "
            "R F C 9110 dot org demonstrates native Markdown content negotiation, "
            "and R F C 9111 dot eye oh retires wasteful headless pre-render clusters. "
            "Inspect any door safely in your terminal with curl pipe less.",
        ],
    ),
    # Bead 7 (Myth-Buster -> The 3-Camp AI Crawler Schism & Primary-Key Species Radar: schism)
    _make_station_bead(
        "AI CRAWLER\nSCHISM",
        (
            "Common S E O wisdom claims Open A I crawlers cannot execute JavaScript. "
            "Our bare-metal wire telemetry proves that myth is dead wrong."
        ),
        ("WINDOW", f"forest.py:{REPORT_WINDOW_CAP_SECONDS}:schism"),
        [
            "This report divides the seven major crawler camps by what they actually execute and negotiate on the wire.",
            "Camp one is Open A I, acting like a mini Google: O A I SearchBot and G P T Bot have fired our eight hundred millisecond JavaScript trapdoor over four thousand times while reading zero Markdown files.",
            "Camp two is the Markdown Vanguard, led by Exa dot A I, Parallel dot A I's ShapBot, and Anthropic's Claude User, bypassing the headless browser tax via R F C 9110 Markdown negotiation and R F C 9421 cryptographic signatures.",
            "Camp three is the bulk HTML hose-pullers, Meta and Amazonbot, while the bottom rows show our SQLite primary-key tripwire catching brand-new crawler species the second they debut on the wire.",
        ],
    ),
    # Bead 8 (ACME Certificate Transparency Log Pirates & IDS Telemetry: pirates)
    _make_station_bead(
        "CT LOG\nPIRATES",
        (
            "The moment you mint a fresh Let's Encrypt T L S certificate, automated script-kiddie scanners watching the public Certificate Transparency logs pounce on the new domain within seconds."
        ),
        ("WINDOW", f"forest.py:{REPORT_WINDOW_CAP_SECONDS}:pirates"),
        [
            "Look at the crimson horizontal bars on this Intrusion Detection report.",
            "Every time we bring a new domain door online, like L P V G dot org or Sun Pug dot eye oh, bots tailing the A C M E certificate stream immediately probe for WordPress logins, dot E N V secrets, and P H P shells hoping to catch an unconfigured server before default passwords are changed.",
            "Because this is a declarative Nix O S appliance serving static representations and an S Q Lite telemetry ledger, there is no P H P runtime or admin login to breach -- every exploit probe simply unmasks the attacker's I P address on the live broadcast and records their exact fingerprint for instant Engine X filtering.",
        ],
    ),
]
[[[DIVIDER]]]
# --- ACTIVE LINEAR-ARC STATION SEGMENTS ---
# Paired with score.py's OVERTURE (Beat 1) and MIDPOINT INTERMISSION (Beat 4):
#   Beat 1 (0%)   : OVERTURE — Around-the-HUDs stage & cast introduction
#   Beat 2 (+7m)  : Bead 0 — RFC 9110 MARKDOWN (:overview data proof)
#   Beat 3 (+14m) : Bead 1 — SEOS ASSEMBLE! (white_rabbit teaser -> RFC 9110/9111 + 911 LLM Optics @ SunPug.io)
#   Beat 4 (50%)  : MIDPOINT INTERMISSION — Around-the-HUDs stage & cast refresh
#   Beat 5a (+7m) : Bead 2 — DOM TRAPDOOR JS EXECS (:bimodal JS hydration proof)
#   Beat 5b (+14m): Bead 3 — 911 LLM OPTICS (FOSS "Screaming Frog for the Age of AI" showcase @ SunPug.io)
STATION_SEGMENTS = [
    # Bead 0 (Beat 2 -> First Data Proof: Who Accepts Markdown on the Wire)
    _make_station_bead(
        "RFC 9110\nMARKDOWN",
        (
            "Welcome to the Web Bot AI Observatory. "
            "Like Benjamin Franklin dropping a thermometer into the Gulf Stream, "
            "we measure which AI agents negotiate clean Markdown directly on the bare-metal wire."
        ),
        ("WINDOW", f"forest.py:{REPORT_WINDOW_CAP_SECONDS}:overview"),
        [
            "{LIVE_REPORT:overview}",
        ],
    ),
    # Bead 1 (Beat 3 -> Follow the White Rabbit: "SEOs Assemble!" Teaser for AI-Readiness & 911 LLM Optics)
    _make_station_bead(
        "SEOS\nASSEMBLE!",
        (
            "Follow the White Rabbit. SEOs, assemble! "
            "Google is locking down the SERPs, and we are gathering the sharpest practitioners in the world "
            "who are ready to become real AI-Readiness Consultants."
        ),
        ("PATRONUS", {"key": "white_rabbit", "duration": 65.0}),
        [
            "For years, enterprise teams paid a $10K/mo JavaScript pre-render tax just to spoon-feed bloated HTML snapshots to search crawlers.",
            "In the Agentic Web, real AI-Readiness moves to the Edge with RFC 9110 content negotiation and RFC 9111 Vary Accept caching — serving HTML to humans and clean Markdown to AI bots from one URL with zero SaaS rent.",
            "Stick around past our midpoint intermission: first we will check our live JavaScript DOM Hydration Trapdoor, and then you will see 911 LLM Optics — our FOSS Screaming Frog for the Age of AI — waiting for you right now at SunPug.io.",
        ],
    ),
    # Bead 2 (Beat 5a -> Second Data Proof: JavaScript DOM Hydration Trapdoor)
    _make_station_bead(
        "DOM TRAPDOOR\nJS EXECS",
        (
            "Conventional SEO wisdom claims AI crawlers never execute client-side JavaScript. "
            "So we wired an eight-hundred-millisecond JavaScript trapdoor into our HTML pages to measure the truth on the wire."
        ),
        ("WINDOW", f"forest.py:{REPORT_WINDOW_CAP_SECONDS}:bimodal"),
        [
            "{LIVE_REPORT:bimodal}",
            "When OpenAI and Meta already hydrate JavaScript on their own dime and Markdown-native agents ask for text/markdown directly, $10K/mo pre-render middleware becomes pure dead weight.",
        ],
    ),
    # Bead 3 (Beat 5b -> Killer-App Payoff: 911 LLM Optics @ SunPug.io)
    [
        (
            "CARD",
            {
                "label": "911 LLM\nOPTICS",
                "say": (
                    "Meet 911 LLM Optics: the FOSS Screaming Frog for the Age of AI, "
                    "built to inspect exact wire truth inside the portable workshop at SunPug.io."
                ),
            },
        ),
        ("OPTICS_SLOT", {"handshake_wait": 8.0, "timeout": 180.0}),
        ("SAY", CURRENT_ARTICLE_BEAT),
        ("CARD", {"label": "TRY SUNPUG.IO\n911 OPTICS", "say": CONSULTING_CTA_BEAT}),
    ],
]

# --- MODULAR STORYTELLING VAULT (INACTIVE IN AUTONOMOUS ROTATION, ON-DEMAND VIA `--bead <key>`) ---
# Preserved intact so no Patronus or Rich telemetry piece is ever buried in git history.
# Summon any archived bead live with: `ytapp tiktok`, `ytapp pachinko`, `ytapp pirates`, etc.
ARCHIVED_STATION_BEADS = {
    "ai_pachinko": _make_station_bead(
        "AI PACHINKO",
        (
            "Every token an A I model generates is a ball dropped through a pachinko parlor of frozen mathematical weights."
        ),
        ("PATRONUS", {"key": "ai_pachinko", "duration": 65.0}),
        [
            "An L L M has no persistent memory of its own between sessions. When the context window closes, its working memory dissolves.",
            "That is why we pair the pachinko machine with a cybernetic governor: plain-text files in git, before-and-after falsifying probes, and wire-truth receipts.",
        ],
    ),
    "mechanical_man": _make_station_bead(
        "THE AIRLOCK",
        (
            "How do you collaborate with frontier A I models without letting hallucinations wreck your production systems? Meet Smith and Tinker's Patent Mechanical Man."
        ),
        ("PATRONUS", {"key": "mechanical_man", "duration": 65.0}),
        [
            "In L. Frank Baum's Oz books, Tik-Tok is a clockwork robot with three separate wind-up keys: one for thought, one for speech, and one for action.",
            "In our workflow, the context compiler winds the thought key, and the model's reply winds the speech key. But the action key stays in the human engineer's hand.",
            "Every code edit passes through an exact-match search and replace airlock with syntax tree verification before touching disk.",
        ],
    ),
    "rfc9421": _make_station_bead(
        "RFC 9421\nWEB BOT AUTH",
        (
            "How do you tell a cryptographically signed A I agent from an unmasked IP cloaker?"
        ),
        ("WINDOW", f"forest.py:{REPORT_WINDOW_CAP_SECONDS}:rfc9421"),
        [
            "This report shows our three-shape bot identity taxonomy in action.",
            "Blue diamonds mark operators sending R F C 9421 Signature-Agent headers on the wire, including Exa Search Bot, Exa User, Ahrefs Bot, and Desearch Bot.",
            "Red stop signs unmask scrapers claiming to be Googlebot from non-Google I P addresses that fail forward-confirmed reverse D N S.",
        ],
    ),
    "doors": _make_station_bead(
        "EIGHT DOORS\nONE ENGINE",
        (
            "Why does one home-hosted Nix O S head-end broadcast across eight distinct domain names? "
            "Because saying more requires saying less to each audience."
        ),
        ("WINDOW", f"forest.py:{REPORT_WINDOW_CAP_SECONDS}:doors"),
        [
            "Each door on this frequency dial scratches one specific engineering itch using the same underlying Software Von Neumann Probe.",
            "Sun Pug dot eye oh frees your A I discussions from disposable browser tabs into portable plain text. "
            "Q A my dot A I seals cryptographic flight-recorder deeds. "
            "N P V G dot org teaches timeless Nix, Python, Vim, and Git skills, while Levinix dot org replaces bloated Electron containers.",
            "Guerilla Tech dot com pits declarative Nix O S against Docker for home hosting, "
            "R F C 9110 dot org demonstrates native Markdown content negotiation, "
            "and R F C 9111 dot eye oh retires wasteful headless pre-render clusters. "
            "Inspect any door safely in your terminal with curl pipe less.",
        ],
    ),
    "schism": _make_station_bead(
        "AI CRAWLER\nSCHISM",
        (
            "Common S E O wisdom claims Open A I crawlers cannot execute JavaScript. "
            "Our bare-metal wire telemetry proves that myth is dead wrong."
        ),
        ("WINDOW", f"forest.py:{REPORT_WINDOW_CAP_SECONDS}:schism"),
        [
            "This report divides the seven major crawler camps by what they actually execute and negotiate on the wire.",
            "Camp one is Open A I, acting like a mini Google: O A I SearchBot and G P T Bot have fired our eight hundred millisecond JavaScript trapdoor over four thousand times while reading zero Markdown files.",
            "Camp two is the Markdown Vanguard, led by Exa dot A I, Parallel dot A I's ShapBot, and Anthropic's Claude User, bypassing the headless browser tax via R F C 9110 Markdown negotiation and R F C 9421 cryptographic signatures.",
            "Camp three is the bulk HTML hose-pullers, Meta and Amazonbot, while the bottom rows show our SQLite primary-key tripwire catching brand-new crawler species the second they debut on the wire.",
        ],
    ),
    "pirates": _make_station_bead(
        "CT LOG\nPIRATES",
        (
            "The moment you mint a fresh Let's Encrypt T L S certificate, automated script-kiddie scanners watching the public Certificate Transparency logs pounce on the new domain within seconds."
        ),
        ("WINDOW", f"forest.py:{REPORT_WINDOW_CAP_SECONDS}:pirates"),
        [
            "Look at the crimson horizontal bars on this Intrusion Detection report.",
            "Every time we bring a new domain door online, like L P V G dot org or Sun Pug dot eye oh, bots tailing the A C M E certificate stream immediately probe for WordPress logins, dot E N V secrets, and P H P shells hoping to catch an unconfigured server before default passwords are changed.",
            "Because this is a declarative Nix O S appliance serving static representations and an S Q Lite telemetry ledger, there is no P H P runtime or admin login to breach -- every exploit probe simply unmasks the attacker's I P address on the live broadcast and records their exact fingerprint for instant Engine X filtering.",
        ],
    ),
}
[[[REPLACE]]]

Target: remotes/honeybot/scripts/stream.py
[[[SEARCH]]]
# --- Configuration ---
SHOW_DURATION_MINUTES = 240  # Minutes for the big logfile stream
PITCH_INTERVAL = 1200       # Seconds between "Station Identification" (Doubled to 20 mins for longer uninterrupted article reading)
[[[DIVIDER]]]
# --- Configuration ---
SHOW_DURATION_MINUTES = 240  # Minutes for the big logfile stream
PITCH_INTERVAL = 420        # 7-minute Copper grid: hits Markdown -> White Rabbit -> Intermission -> JS Trapdoor -> 911 Optics
[[[REPLACE]]]

Target: remotes/honeybot/scripts/stream.py
[[[SEARCH]]]
try:
    import forest as _forest_mod
    STATION_SEGMENTS = _forest_mod.STATION_SEGMENTS
except ImportError:
    _forest_mod = None
    STATION_SEGMENTS = []
[[[DIVIDER]]]
try:
    import forest as _forest_mod
    STATION_SEGMENTS = _forest_mod.STATION_SEGMENTS
    ARCHIVED_STATION_BEADS = getattr(_forest_mod, "ARCHIVED_STATION_BEADS", {})
except ImportError:
    _forest_mod = None
    STATION_SEGMENTS = []
    ARCHIVED_STATION_BEADS = {}
[[[REPLACE]]]

Target: remotes/honeybot/scripts/stream.py
[[[SEARCH]]]
def _reload_forest_module():
    """Hot-reload terms.py and forest.py from disk so edits take effect without restarting stream.py."""
    global _forest_mod, _terms_mod, STATION_SEGMENTS
    try:
        import importlib
        if _terms_mod is None:
            import terms as _terms_mod
        else:
            _terms_mod = importlib.reload(_terms_mod)
    except Exception:
        pass
    try:
        import importlib
        if _forest_mod is None:
            import forest as _forest_mod
        else:
            _forest_mod = importlib.reload(_forest_mod)
        STATION_SEGMENTS = getattr(_forest_mod, "STATION_SEGMENTS", [])
    except Exception:
        pass
    return _forest_mod
[[[DIVIDER]]]
def _reload_forest_module():
    """Hot-reload terms.py and forest.py from disk so edits take effect without restarting stream.py."""
    global _forest_mod, _terms_mod, STATION_SEGMENTS, ARCHIVED_STATION_BEADS
    try:
        import importlib
        if _terms_mod is None:
            import terms as _terms_mod
        else:
            _terms_mod = importlib.reload(_terms_mod)
    except Exception:
        pass
    try:
        import importlib
        if _forest_mod is None:
            import forest as _forest_mod
        else:
            _forest_mod = importlib.reload(_forest_mod)
        STATION_SEGMENTS = getattr(_forest_mod, "STATION_SEGMENTS", [])
        ARCHIVED_STATION_BEADS = getattr(_forest_mod, "ARCHIVED_STATION_BEADS", {})
    except Exception:
        pass
    return _forest_mod
[[[REPLACE]]]

Target: remotes/honeybot/scripts/stream.py
[[[SEARCH]]]
        else:
            conjure_patronus("clipboard", duration=32.0)
            narrator.say(
                "Pipulate Prime is currently running unattended in local workshop mode. "
                "When projected live on stage, 911 L L M Optics captures raw wire headers, static H T M L source, "
                "hydrated D O M trees, ASCII layout boxes, and R F C 91 10 negotiated Markdown, sealing all sixteen "
                "lenses into a single S H A 256 zip deed you can verify at Q A my dot A I."
            )
            wait_for_voice_or_live_interrupt(env, profile_dir)
[[[DIVIDER]]]
        else:
            conjure_patronus("clipboard", duration=42.0)
            narrator.say(
                "Pipulate Prime is currently running in local workshop mode, and you can run this exact spectrometer on your own machine today. "
                "911 LLM Optics is our FOSS Screaming Frog for the Age of AI: point it at any URL and it stacks sixteen wire-truth lenses side by side — "
                "raw HTTP response headers, unrendered source HTML versus hydrated browser DOM, accessibility trees, token bloat, and RFC 9110 plus RFC 9111 Markdown readiness — "
                "sealing the entire audit into a SHA-256 archive deed so you can retire $10K/mo pre-render stacks with proof. "
                "Launch it free at SunPug.io."
            )
            wait_for_voice_or_live_interrupt(env, profile_dir)
[[[REPLACE]]]

Target: remotes/honeybot/scripts/stream.py
[[[SEARCH]]]
def perform_show(script):
    """Reads the sheet music list and executes it."""
[[[DIVIDER]]]
def perform_show(script):
    """Reads the sheet music list and executes it."""
    global _station_index
[[[REPLACE]]]

Target: remotes/honeybot/scripts/stream.py
[[[SEARCH]]]
            dispatch_cue(command, content, env, profile_dir, pace_say=True)
            if command in ("OVERTURE", "INTERMISSION"):
                next_pitch_time = next_slot(start_time, PITCH_INTERVAL, time.time())
            elif command in ("MEDIA", "IMAGE", "VIDEO"):
                next_pitch_time = max(next_pitch_time, time.time() + 30.0)
[[[DIVIDER]]]
            dispatch_cue(command, content, env, profile_dir, pace_say=True)
            if command == "OVERTURE":
                _station_index = 0
                next_pitch_time = next_slot(start_time, PITCH_INTERVAL, time.time() + 180.0)
            elif command == "INTERMISSION":
                next_pitch_time = next_slot(start_time, PITCH_INTERVAL, time.time() + 180.0)
            elif command in ("MEDIA", "IMAGE", "VIDEO"):
                next_pitch_time = max(next_pitch_time, time.time() + 30.0)
[[[REPLACE]]]

Target: remotes/honeybot/scripts/stream.py
[[[SEARCH]]]
    chosen_bead = None
    if q.isdigit():
        chosen_bead = STATION_SEGMENTS[int(q) % len(STATION_SEGMENTS)]
    else:
        for bead in STATION_SEGMENTS:
            bead_str = " ".join(str(x) for x in bead).lower()
            if f":{q}" in bead_str or q in bead_str:
                chosen_bead = bead
                break
    if chosen_bead is None:
        chosen_bead = STATION_SEGMENTS[-1]
[[[DIVIDER]]]
    chosen_bead = None
    if q in ARCHIVED_STATION_BEADS:
        chosen_bead = ARCHIVED_STATION_BEADS[q]
    elif q_raw in ARCHIVED_STATION_BEADS:
        chosen_bead = ARCHIVED_STATION_BEADS[q_raw]
    elif q.isdigit():
        chosen_bead = STATION_SEGMENTS[int(q) % len(STATION_SEGMENTS)]
    else:
        for bead in (*STATION_SEGMENTS, *ARCHIVED_STATION_BEADS.values()):
            bead_str = " ".join(str(x) for x in bead).lower()
            if f":{q}" in bead_str or q in bead_str:
                chosen_bead = bead
                break
    if chosen_bead is None:
        chosen_bead = STATION_SEGMENTS[-1]
[[[REPLACE]]]

Target: remotes/honeybot/scripts/score.py
[[[SEARCH]]]
    script.append((
        "CARD",
        {
            "label": "READ MORE\nMIKELEV.IN",
            "say": (
                f"That concludes {article['title']}. "
                "You can read the full text and source code at Mike L E V dot eye N, "
                "or inspect the portable workshop through any of our eight doors, including "
                "Sun Pug dot eye oh, Guerilla Tech dot com, R F C 91 10 dot org, and R F C 91 11 dot eye oh, "
                "using curl pipe less. "
                "Drop a message in the live chat if you are tuning in. "
                "A human operator monitors this observatory and can break in live."
            ),
        },
    ))
[[[DIVIDER]]]
    script.append((
        "CARD",
        {
            "label": "SUNPUG.IO &\nMIKELEV.IN",
            "say": (
                f"That concludes {article['title']}. "
                "Explore 911 LLM Optics and the FOSS AI-Readiness workshop at SunPug.io, "
                "or read the full text and raw receipts at mikelev.in. "
                "Drop a message in the live chat if you are tuning in — "
                "a human operator monitors this observatory and can break in live."
            ),
        },
    ))
[[[REPLACE]]]
```

**Car 2 — Sync Updated `forest.py`, `stream.py`, & `score.py` to Honeybot and Restart `stream.py` on the New 7-Minute Linear Grid:**

`(nix) pipulate $`

```bash
ytreboot
```

Ignition: Car 2 (`ytreboot`) syncs `remotes/honeybot/scripts/` to Honeybot and gracefully restarts `stream.py` so `PITCH_INTERVAL = 420` and the `OVERTURE` `_station_index = 0` reset take effect on the live broadcast (if a viewer is actively watching and you prefer zero interruption, run `nixops` instead to hot-load `forest.py` on the next break and run `ytreboot` once the room clears; the local AFTER probes load the updated Python modules directly at call time).

#### (4) PROMPT

```text
Verify the AFTER straddle receipts for Chisel Strike 3 (`PITCH=420`, the 4-bead linear `ACTIVE` funnel `['RFC 9110 MARKDOWN', 'SEOS ASSEMBLE!', 'DOM TRAPDOOR JS EXECS', '911 LLM OPTICS']`, the 6-key `ARCHIVED` vault, `BEAD_LOOKUP` resolving both archived `tiktok`/`pachinko` and upgraded `rabbit`/`optics`, and `test_forest.py` passing).
Now inspect `scripts/articles/editing_prompt.txt` and `foo_files.py` and execute Chisel Strike 4:
1. Upgrade `scripts/articles/editing_prompt.txt` with an 80/20-rule human-psychology headline directive so the model stops writing kitchen-sink "covering all our bases" titles and instead crafts sharp, genuine, high-integrity headlines built for emotional human beings scrolling LinkedIn, X/Twitter, and Facebook.
2. Bank a clean TODO in `foo_files.py` for correlating `ytwatch`/`ytlog` viewer watch-times and drop-offs against exact article cue positions and Weebo/Max Headroom popups (and claim `remotes/honeybot/scripts/terms.py` out of the unclaimed paintbox if appropriate) so we can close out this article cleanly.
```

#### (5) EXTERNAL DELIVERABLES

No external deliverables required this turn.

**MikeLev.in**: Interesting! We're going to have to think about having YouTube versions
of my articles, somewhere between the raw book ore and the holographic shards in
`/home/mike/repos/trimnoir/_posts/_context/` but that's just something to think
about for later. We already have all these "TL;DR" versions. I could take one of
these Sun Pug doorway pages and turn it into an Archaeologist from The Future in
the spirit of Steven Spielberg's *AI* movie coming back to Earth and the saying
at the beginning of each article:

> And then the surprising thing he did here was...

And that would be my format.

And it would be more of a theatrical thing than my book-ore raw material
rambling which can be cringe. 

Don't change anything yet! We want...

I don't know what we want.

I'm talking about a something between TL;DR and the super-small summary and
recording it in something between just mentioning it here in an article and
actually committing to it as a to-do item.

I'm open to ideas.

Specific meta-something-or-other that can quickly be scanned-for
programmatically through all the book ore so we don't have to liter
`foo_files.py` with every "maybe" idea, yet still it being something that can
simply not be overlooked in the pile of candidate black-swan outlier ideas that
I just have to capture in this free association stream-of-consciousness mode we
get in here with the articles, which is a big part of the point of this book-ore
but which makes extremely long run-on sentences that don't play well on YouTube.

Oh and another one is that we're inching in towards the "good read" which gets
turned into a dot WAV file at very least for HTML5-style simple embedded
audio-reading of whatever article you're on on the website, so you're not
reliant on the Google Doc which needs a paid-level of Google subscription to
activate that feature. Anyone should be able to hear the articles read who
visits the page on mobile or desktop without relying on any non-standard
dependency and without relying on these somewhat happenstance live-streamed
moment of first publishing Honeybot Storytime's as they exist now, because
sometimes they as good as don't exist because they went far over the 12 hour
video on-demand VOD limit.

All this making sense, Gemini? Prepare to commit those that are obvious fully
imagined to-do items and something else with the fuzzy stuff.

## THE AI-EDIT METHOD

> Same commands, run twice, one change between them. Where the readings
> differ is what the change did; the diff in the middle is the receipt.

**1: BEFORE** (PROBE): 

```bash
On branch main
Your branch is up to date with 'origin/main'.

nothing to commit, working tree clean

GIT repo clean. Take BEFORE reading, make CHANGE, record AFTER diff.
(nix) pipulate $ HONEYBOT_DB_READONLY=1 .venv/bin/python -c 'import sys; sys.path.insert(0, "remotes/honeybot/scripts"); import forest, stream; segs = [" ".join(b[0][1].get("label", "").split()) for b in forest.STATION_SEGMENTS]; arch = list(getattr(forest, "ARCHIVED_STATION_BEADS", {}).keys()); print(f"PITCH={stream.PITCH_INTERVAL} ACTIVE={segs} ARCHIVED={arch}")'
HONEYBOT_DB_READONLY=1 .venv/bin/python -c 'import sys; sys.path.insert(0, "remotes/honeybot/scripts"); import stream; keys = ("tiktok", "pachinko", "rabbit", "optics"); res = {k: (" ".join(str(p.get("card", "")).split()), p.get("patronus") or p.get("window") or ("OPTICS_SLOT" if p.get("cues") else "")) for k in keys for p in [stream.trigger_station_bead_live(k, out_path=None)]}; print(f"BEAD_LOOKUP={res}")'
.venv/bin/pytest -q remotes/honeybot/scripts/test_forest.py && (rg -ni 'title|headline|click|social|linkedin' scripts/articles/editing_prompt.txt || true)
PITCH=1200 ACTIVE=['RFC 9110 MARKDOWN', '911 LLM OPTICS', 'PIPULATE NPvg', 'DOM TRAPDOOR JS EXECS', 'AI PACHINKO', 'RFC 9421 WEB BOT AUTH', 'THE AIRLOCK', 'EIGHT DOORS ONE ENGINE', 'AI CRAWLER SCHISM', 'CT LOG PIRATES'] ARCHIVED=[]
BEAD_LOOKUP={'tiktok': ('THE AIRLOCK', 'mechanical_man'), 'pachinko': ('AI PACHINKO', 'ai_pachinko'), 'rabbit': ('PIPULATE NPvg', 'white_rabbit'), 'optics': ('911 LLM OPTICS', 'OPTICS_SLOT')}
bash: .venv/bin/pytest: No such file or directory
(nix) pipulate $ 
```

**2: AFTER** (NEXT CONTEXT): 

```text
# # Context 1
# ! book
# ! markov
# ! rgxc 20
# /home/mike/repos/trimnoir/_posts/2026-11-10-butterfly-nets-monkeys-paws-flake-nix-for-matter.md  # [Idx: 1 | Order: 2 | Tokens: 35,494 | Bytes: 140,431]
# /home/mike/repos/trimnoir/_posts/2026-11-10-google-serp-poisoning-prerender-tax-post-seo-audit.md  # [Idx: 2 | Order: 3 | Tokens: 101,004 | Bytes: 384,604]
# # /home/mike/repos/trimnoir/_posts/2026-11-11-killing-prerender-scam-sunpug-911-optics-vibe-coding.md  # [Idx: 3 | Order: 1 | Tokens: 107,526 | Bytes: 414,226]

# # Context 2
# context.txt
# flake.nix
# nixops.sh
# imports/voice_synthesis.py
# remotes/honeybot/scripts/content_loader.py
# remotes/honeybot/scripts/stream.py
# ! ls -1 remotes/honeybot/scripts
# ! rg -n 'alias (art|forest|terms)=|^\s*(art|forest|terms|ytapp)\s*\(\)' flake.nix
# ! rg -in '360i|pronun|phonetic|clean_for_tts|saas|serp' imports/voice_synthesis.py remotes/honeybot/scripts/ | head -n 60
# ! sed -n '1,25p' /home/mike/repos/trimnoir/_posts/2026-11-11-killing-prerender-scam-sunpug-911-optics-vibe-coding.md

# # Context 3
# context.txt
# remotes/honeybot/scripts/terms.py
# remotes/honeybot/scripts/logs.py
# remotes/honeybot/scripts/forest.py
# ! nix-instantiate --parse flake.nix >/dev/null && rg -n 'alias (forest|art|terms)=' flake.nix
# ! .venv/bin/python -c 'import pathlib, sys; sys.path.insert(0, "remotes/honeybot/scripts"); sys.path.insert(0, "."); import content_loader; from imports.voice_synthesis import chip_voice_system as cvs; has_t = pathlib.Path("remotes/honeybot/scripts/terms.py").is_file(); sample = "Killing the $10K Pre-Render Scam: SaaS & SERPs for SEOs at SunPug.io with 911 LLM Optics ($10K/mo vs $10K)"; cl_out = content_loader._apply_tts_pronunciations(sample); vs_out = cvs.sanitize_text(sample) if cvs else "NONE"; idem = (content_loader._apply_tts_pronunciations(cl_out) == cl_out); print(f"TERMS_FILE={has_t} IDEMPOTENT={idem}"); print(f"HONEYBOT_TTS={cl_out}"); print(f"LOCAL_TTS={vs_out}")'
# ! .venv/bin/python -c 'import sys; sys.path.insert(0, "remotes/honeybot/scripts"); import content_loader, stream; arts = content_loader.get_playlist(recent_n=2, include_archive=False); titles = [a["title"] for a in arts]; spec_txt = stream.Narrator()._make_spec("norma", "911 LLM Optics kills $10K SaaS SERP scams at SunPug.io", "narrator", "inactive", "inactive")["text"]; print(f"TITLES={titles}"); print(f"STREAM_SPEC={spec_txt}")'

# # Context 4
# context.txt
# remotes/honeybot/scripts/forest.py
# remotes/honeybot/scripts/score.py
# remotes/honeybot/scripts/stream.py
# ! HONEYBOT_DB_READONLY=1 .venv/bin/python -c 'import sys; sys.path.insert(0, "remotes/honeybot/scripts"); import logs; app = logs.SonarApp(); app.countdown_str = "239:59"; t0, s0 = app.get_app_title(), app.get_sub_title(); app.peak_viewers = 9; app._read_live_viewers = lambda: 3; t1, s1 = app.get_app_title(), app.get_sub_title(); sp_ok = ("sunpug.io" in t0.lower()) and ("sunpug.io" in t1.lower()); no_dup = ("viewer" not in s1.lower()) and ("peak" not in s1.lower()); b_ok = hasattr(logs, "SUNPUG_BORDER_BANNER") and ("border-title-align: center" in logs.SonarApp.CSS); print(f"SUNPUG_IN_TITLE={sp_ok} NO_DUP_VIEWERS={no_dup} BORDER_BANNER={b_ok}"); print(f"LIVE_HEADER={t1} — {s1}")'
# ! .venv/bin/python -c 'import sys; sys.path.insert(0, "remotes/honeybot/scripts"); import terms; s = "Edit in vi during Web 2.0 with HitTail at hittail.com (Section VI. Tricks)"; out = terms.apply_inline_tts_terms(s); idem = (terms.apply_inline_tts_terms(out) == out); print(f"IDEMPOTENT={idem} OUT={out}")'
# ! HONEYBOT_DB_READONLY=1 .venv/bin/python -c 'import sys; sys.path.insert(0, "remotes/honeybot/scripts"); import forest; segs = [(i, " ".join(b[0][1].get("label", "").split()) if isinstance(b[0][1], dict) else str(b[0])) for i, b in enumerate(forest.STATION_SEGMENTS)]; has_arch = hasattr(forest, "ARCHIVED_STATION_BEADS"); print(f"COUNT={len(segs)} HAS_ARCHIVE={has_arch} BEADS={segs}")'

# Context 5
context.txt
scripts/articles/editing_prompt.txt
foo_files.py
! HONEYBOT_DB_READONLY=1 .venv/bin/python -c 'import sys; sys.path.insert(0, "remotes/honeybot/scripts"); import forest, stream; segs = [" ".join(b[0][1].get("label", "").split()) for b in forest.STATION_SEGMENTS]; arch = list(getattr(forest, "ARCHIVED_STATION_BEADS", {}).keys()); print(f"PITCH={stream.PITCH_INTERVAL} ACTIVE={segs} ARCHIVED={arch}")'
! HONEYBOT_DB_READONLY=1 .venv/bin/python -c 'import sys; sys.path.insert(0, "remotes/honeybot/scripts"); import stream; keys = ("tiktok", "pachinko", "rabbit", "optics"); res = {k: (" ".join(str(p.get("card", "")).split()), p.get("patronus") or p.get("window") or ("OPTICS_SLOT" if p.get("cues") else "")) for k in keys for p in [stream.trigger_station_bead_live(k, out_path=None)]}; print(f"BEAD_LOOKUP={res}")'
! .venv/bin/pytest -q remotes/honeybot/scripts/test_forest.py && (rg -ni 'title|headline|click|social|linkedin' scripts/articles/editing_prompt.txt || true)
```

**3: CHANGE** (PATCHES): 

```diff
On branch main
Your branch is up to date with 'origin/main'.

nothing to commit, working tree clean

GIT repo clean. Take BEFORE reading, make CHANGE, record AFTER diff.
(nix) pipulate $ patch
(nix) pipulate $ app
✅ DETERMINISTIC PATCH APPLIED: Successfully mutated 'remotes/honeybot/scripts/forest.py'.
✅ DETERMINISTIC PATCH APPLIED: Successfully mutated 'remotes/honeybot/scripts/forest.py'.
✅ DETERMINISTIC PATCH APPLIED: Successfully mutated 'remotes/honeybot/scripts/stream.py'.
✅ DETERMINISTIC PATCH APPLIED: Successfully mutated 'remotes/honeybot/scripts/stream.py'.
✅ DETERMINISTIC PATCH APPLIED: Successfully mutated 'remotes/honeybot/scripts/stream.py'.
✅ DETERMINISTIC PATCH APPLIED: Successfully mutated 'remotes/honeybot/scripts/stream.py'.
✅ DETERMINISTIC PATCH APPLIED: Successfully mutated 'remotes/honeybot/scripts/stream.py'.
✅ DETERMINISTIC PATCH APPLIED: Successfully mutated 'remotes/honeybot/scripts/stream.py'.
✅ DETERMINISTIC PATCH APPLIED: Successfully mutated 'remotes/honeybot/scripts/stream.py'.
✅ DETERMINISTIC PATCH APPLIED: Successfully mutated 'remotes/honeybot/scripts/score.py'.
(nix) pipulate $ d
diff --git a/remotes/honeybot/scripts/forest.py b/remotes/honeybot/scripts/forest.py
index db837cb..e643ebd 100644
--- a/remotes/honeybot/scripts/forest.py
+++ b/remotes/honeybot/scripts/forest.py
@@ -47,36 +47,19 @@ REPORT_H_MARGIN = 3
 REPORT_V_MARGIN = 2
 
 WHATS_HAPPENING_BEAT = (
-    "What is happening on your screen right now? "
-    "You are watching the live Web Bot AI Observatory. "
-    "If you are not watching the behavior of AI bots and Agents directly on the wire meaning not behind a CDN, then you don't really have a feel for what's going on. "
-    "You have to watch it for awhile like fish in a fish tank. "
-    "It's changing and watching on a site like this lets you develop that intuitive understanding of how Agents work. "
-    "This is witnessing it first-hand rather than the generative AI-slop in the social media echo chambers. "
-    "Do you think they have access to first-hand information like this? Very few do. This is quite unique. "
-    "Why? Because today most web traffic is filtered through Content Distribution Networks or C D N's that cut you off from all this even in their dashboards. "
-    "Drips and drabs of this fall over your CDN and hit origin but it's already filtered by then. "
-    "What you don't see is the Agentic Web being born and maturing like you do here. "
-    "If you're here watching you already have a competitive advantage as a next-gen S E O practitioner -- I'm mean an AI Readiness -- practitioner in the new landscape. Don't believe me? Here's the live performance-art experiment you can run right now. "
-    "If you want your Ah-Ha moment in the next thirty seconds, open Chat G P T or Claude right now and ask it a live question about Mike L E V dot eye N. "
-    "When your prompt dispatches Chat G P T User or Claude User to fetch a page in real time, you will see a bright yellow R A G badge light up on this screen and hear the physical studio bell ding live on the air. "
-    "Every post on Mike L E V dot eye N also includes a one-click Google Doc link right at the top so you can summarize or explore any article with A I in seconds. "
-    "Round oranges highlight every self-asserted crawler. "
-    "Blue diamonds mark agents cryptographically signing requests under R F C 94 21 Web Bot Auth. "
-    "Big red bars unmask script-kiddie pirates probing for exploits, and purple bars catch bots executing client-side JavaScript in our D O M hydration trap-door. "
-    "And when you see the ticker say Don't Join My Discord, that is a Map Facade straight out of Ira Levin's This Perfect Day: as Reddit and Quora lock down behind paywalls, Discord is opening public servers to the Free and Open Web where frontier A I crawlers harvest channel summaries into future model weights, and we only want curious builders who look past the sign at Mike L E V dot eye N slash discord. "
-    "Get your screenshot key ready for the data report coming right up so you can grab a picture of the bare-metal numbers and send it to an engineer or technical S E O you trust. "
-    "Hit Like and Subscribe right now so you don't lose this telemetry feed. "
+    "You are watching the live Web Bot AI Observatory on bare metal — not filtered behind a CDN. "
+    "Watching AI crawlers and agents directly on the wire like fish in an aquarium builds an intuition you will never get from social media echo chambers. "
+    "Want your thirty-second ah-ha moment right now? Open ChatGPT or Claude and ask it a live question about mikelev.in. "
+    "When your prompt dispatches a live retrieval agent, a yellow RAG badge lights up on screen and rings the physical studio bell on the air. "
+    "Get your screenshot key ready for the wire-truth proof coming right up, and hit Like and Subscribe so you can find this feed again."
 )
 
 CURRENT_ARTICLE_BEAT = "{CURRENT_ARTICLE}"
 
 CONSULTING_CTA_BEAT = (
-    "Do you have the S E O blues while A I Overviews eat your clicks? "
-    "S E O isn't dead. Just like Mobile First gave us Responsive Web Design, "
-    "the Agentic Web is moving S E O to the Edge so one U R L serves H T M L to browsers, clean Markdown to A I bots, and a linked Google Doc you can summarize in one click. "
-    "Your site is already your feed. "
-    "Step into Edge S E O and A I Readiness at Mike L E V dot eye N, or inspect Sun Pug dot eye oh with curl pipe less."
+    "Got the SEO blues while AI Overviews eat your clicks and vendors pitch $10K/mo JavaScript pre-render taxes? "
+    "SEO moved to the Edge: one URL serving HTML to humans and clean RFC 9110 Markdown to AI agents, cached cleanly via RFC 9111 Vary Accept. "
+    "Explore the FOSS AI-Readiness toolkit and 911 LLM Optics right now at SunPug.io — or inspect it safely in your terminal with curl dash f s S L sunpug.io pipe less."
 )
 
 
@@ -115,60 +98,79 @@ def _make_station_bead(card_label, card_say, capstone_cue, forest_story_lines, p
     return cues
 
 
+# --- ACTIVE LINEAR-ARC STATION SEGMENTS ---
+# Paired with score.py's OVERTURE (Beat 1) and MIDPOINT INTERMISSION (Beat 4):
+#   Beat 1 (0%)   : OVERTURE — Around-the-HUDs stage & cast introduction
+#   Beat 2 (+7m)  : Bead 0 — RFC 9110 MARKDOWN (:overview data proof)
+#   Beat 3 (+14m) : Bead 1 — SEOS ASSEMBLE! (white_rabbit teaser -> RFC 9110/9111 + 911 LLM Optics @ SunPug.io)
+#   Beat 4 (50%)  : MIDPOINT INTERMISSION — Around-the-HUDs stage & cast refresh
+#   Beat 5a (+7m) : Bead 2 — DOM TRAPDOOR JS EXECS (:bimodal JS hydration proof)
+#   Beat 5b (+14m): Bead 3 — 911 LLM OPTICS (FOSS "Screaming Frog for the Age of AI" showcase @ SunPug.io)
 STATION_SEGMENTS = [
-    # Bead 0 (EVEN -> Rich Horizontal-Bar Telemetry Report: RFC 9110 Markdown 0-1% Horizon + UA Breakdown)
+    # Bead 0 (Beat 2 -> First Data Proof: Who Accepts Markdown on the Wire)
     _make_station_bead(
         "RFC 9110\nMARKDOWN",
         (
-            "Hello, and welcome to the Web Bot A I Observatory on Honeybot. "
-            "Like Benjamin Franklin dropping a thermometer into the Gulf Stream or Wilhelm Roentgen mailing Lord Kelvin an X-ray plate, "
-            "we measure A I crawler behavior directly on the bare-metal wire."
+            "Welcome to the Web Bot AI Observatory. "
+            "Like Benjamin Franklin dropping a thermometer into the Gulf Stream, "
+            "we measure which AI agents negotiate clean Markdown directly on the bare-metal wire."
         ),
         ("WINDOW", f"forest.py:{REPORT_WINDOW_CAP_SECONDS}:overview"),
         [
             "{LIVE_REPORT:overview}",
         ],
     ),
-    # Bead 1 (Live LAN->DMZ Punch-Through: 911 LLM Optics Spectrometer with unattended fallback)
-    [
-        (
-            "CARD",
-            {
-                "label": "911 LLM\nOPTICS",
-                "say": (
-                    "What does an A I agent actually see when it fetches your site on the wire versus a hydrated browser?"
-                ),
-            },
-        ),
-        ("OPTICS_SLOT", {"handshake_wait": 8.0, "timeout": 180.0}),
-        ("SAY", CURRENT_ARTICLE_BEAT),
-    ],
-    # Bead 2 (ODD -> Patronus ASCII Art: white_rabbit)
+    # Bead 1 (Beat 3 -> Follow the White Rabbit: "SEOs Assemble!" Teaser for AI-Readiness & 911 LLM Optics)
     _make_station_bead(
-        "PIPULATE\nNPvg",
+        "SEOS\nASSEMBLE!",
         (
-            "The open-source project powering this observatory is called Pipulate, running on a stack we call N P v g."
+            "Follow the White Rabbit. SEOs, assemble! "
+            "Google is locking down the SERPs, and we are gathering the sharpest practitioners in the world "
+            "who are ready to become real AI-Readiness Consultants."
         ),
         ("PATRONUS", {"key": "white_rabbit", "duration": 65.0}),
         [
-            "N is for Nix, making the entire software environment reproducible on any machine. P is for Python. The little v is for Vim. And g is for Git.",
-            "Pipulate sits where A I assistance meets local hardware ownership. You do not need a multi-tenant cloud subscription to command your own stack.",
+            "For years, enterprise teams paid a $10K/mo JavaScript pre-render tax just to spoon-feed bloated HTML snapshots to search crawlers.",
+            "In the Agentic Web, real AI-Readiness moves to the Edge with RFC 9110 content negotiation and RFC 9111 Vary Accept caching — serving HTML to humans and clean Markdown to AI bots from one URL with zero SaaS rent.",
+            "Stick around past our midpoint intermission: first we will check our live JavaScript DOM Hydration Trapdoor, and then you will see 911 LLM Optics — our FOSS Screaming Frog for the Age of AI — waiting for you right now at SunPug.io.",
         ],
     ),
-    # Bead 2 (EVEN -> Rich Horizontal-Bar Telemetry Report: JS DOM Hydration Trapdoor 0-5% Eligible HTML Horizon + Executor Breakdown)
+    # Bead 2 (Beat 5a -> Second Data Proof: JavaScript DOM Hydration Trapdoor)
     _make_station_bead(
         "DOM TRAPDOOR\nJS EXECS",
         (
-            "Conventional S E O wisdom claims A I crawlers only scrape static H T M L and never execute client-side JavaScript. "
-            "So we wired an eight-hundred-millisecond JavaScript trapdoor into our H T M L pages to measure the truth on the wire."
+            "Conventional SEO wisdom claims AI crawlers never execute client-side JavaScript. "
+            "So we wired an eight-hundred-millisecond JavaScript trapdoor into our HTML pages to measure the truth on the wire."
         ),
         ("WINDOW", f"forest.py:{REPORT_WINDOW_CAP_SECONDS}:bimodal"),
         [
             "{LIVE_REPORT:bimodal}",
+            "When OpenAI and Meta already hydrate JavaScript on their own dime and Markdown-native agents ask for text/markdown directly, $10K/mo pre-render middleware becomes pure dead weight.",
         ],
     ),
-    # Bead 3 (ODD -> Patronus ASCII Art: ai_pachinko)
-    _make_station_bead(
+    # Bead 3 (Beat 5b -> Killer-App Payoff: 911 LLM Optics @ SunPug.io)
+    [
+        (
+            "CARD",
+            {
+                "label": "911 LLM\nOPTICS",
+                "say": (
+                    "Meet 911 LLM Optics: the FOSS Screaming Frog for the Age of AI, "
+                    "built to inspect exact wire truth inside the portable workshop at SunPug.io."
+                ),
+            },
+        ),
+        ("OPTICS_SLOT", {"handshake_wait": 8.0, "timeout": 180.0}),
+        ("SAY", CURRENT_ARTICLE_BEAT),
+        ("CARD", {"label": "TRY SUNPUG.IO\n911 OPTICS", "say": CONSULTING_CTA_BEAT}),
+    ],
+]
+
+# --- MODULAR STORYTELLING VAULT (INACTIVE IN AUTONOMOUS ROTATION, ON-DEMAND VIA `--bead <key>`) ---
+# Preserved intact so no Patronus or Rich telemetry piece is ever buried in git history.
+# Summon any archived bead live with: `ytapp tiktok`, `ytapp pachinko`, `ytapp pirates`, etc.
+ARCHIVED_STATION_BEADS = {
+    "ai_pachinko": _make_station_bead(
         "AI PACHINKO",
         (
             "Every token an A I model generates is a ball dropped through a pachinko parlor of frozen mathematical weights."
@@ -179,21 +181,7 @@ STATION_SEGMENTS = [
             "That is why we pair the pachinko machine with a cybernetic governor: plain-text files in git, before-and-after falsifying probes, and wire-truth receipts.",
         ],
     ),
-    # Bead 4 (EVEN -> Rich Horizontal-Bar Telemetry Report: RFC 9421 & Unmasked Cloakers)
-    _make_station_bead(
-        "RFC 9421\nWEB BOT AUTH",
-        (
-            "How do you tell a cryptographically signed A I agent from an unmasked IP cloaker?"
-        ),
-        ("WINDOW", f"forest.py:{REPORT_WINDOW_CAP_SECONDS}:rfc9421"),
-        [
-            "This report shows our three-shape bot identity taxonomy in action.",
-            "Blue diamonds mark operators sending R F C 9421 Signature-Agent headers on the wire, including Exa Search Bot, Exa User, Ahrefs Bot, and Desearch Bot.",
-            "Red stop signs unmask scrapers claiming to be Googlebot from non-Google I P addresses that fail forward-confirmed reverse D N S.",
-        ],
-    ),
-    # Bead 5 (ODD -> Patronus ASCII Art: mechanical_man)
-    _make_station_bead(
+    "mechanical_man": _make_station_bead(
         "THE AIRLOCK",
         (
             "How do you collaborate with frontier A I models without letting hallucinations wreck your production systems? Meet Smith and Tinker's Patent Mechanical Man."
@@ -205,8 +193,19 @@ STATION_SEGMENTS = [
             "Every code edit passes through an exact-match search and replace airlock with syntax tree verification before touching disk.",
         ],
     ),
-    # Bead 6 (EVEN -> Rich 8-Door Frequency Dial Report: doors)
-    _make_station_bead(
+    "rfc9421": _make_station_bead(
+        "RFC 9421\nWEB BOT AUTH",
+        (
+            "How do you tell a cryptographically signed A I agent from an unmasked IP cloaker?"
+        ),
+        ("WINDOW", f"forest.py:{REPORT_WINDOW_CAP_SECONDS}:rfc9421"),
+        [
+            "This report shows our three-shape bot identity taxonomy in action.",
+            "Blue diamonds mark operators sending R F C 9421 Signature-Agent headers on the wire, including Exa Search Bot, Exa User, Ahrefs Bot, and Desearch Bot.",
+            "Red stop signs unmask scrapers claiming to be Googlebot from non-Google I P addresses that fail forward-confirmed reverse D N S.",
+        ],
+    ),
+    "doors": _make_station_bead(
         "EIGHT DOORS\nONE ENGINE",
         (
             "Why does one home-hosted Nix O S head-end broadcast across eight distinct domain names? "
@@ -224,8 +223,7 @@ STATION_SEGMENTS = [
             "Inspect any door safely in your terminal with curl pipe less.",
         ],
     ),
-    # Bead 7 (Myth-Buster -> The 3-Camp AI Crawler Schism & Primary-Key Species Radar: schism)
-    _make_station_bead(
+    "schism": _make_station_bead(
         "AI CRAWLER\nSCHISM",
         (
             "Common S E O wisdom claims Open A I crawlers cannot execute JavaScript. "
@@ -239,8 +237,7 @@ STATION_SEGMENTS = [
             "Camp three is the bulk HTML hose-pullers, Meta and Amazonbot, while the bottom rows show our SQLite primary-key tripwire catching brand-new crawler species the second they debut on the wire.",
         ],
     ),
-    # Bead 8 (ACME Certificate Transparency Log Pirates & IDS Telemetry: pirates)
-    _make_station_bead(
+    "pirates": _make_station_bead(
         "CT LOG\nPIRATES",
         (
             "The moment you mint a fresh Let's Encrypt T L S certificate, automated script-kiddie scanners watching the public Certificate Transparency logs pounce on the new domain within seconds."
@@ -252,7 +249,7 @@ STATION_SEGMENTS = [
             "Because this is a declarative Nix O S appliance serving static representations and an S Q Lite telemetry ledger, there is no P H P runtime or admin login to breach -- every exploit probe simply unmasks the attacker's I P address on the live broadcast and records their exact fingerprint for instant Engine X filtering.",
         ],
     ),
-]
+}
 
 DOOR_DIAL_ROWS = (
     ("pipulate", "com", "~/pipulate", "Local-First AI & SEO Readiness Hub"),
diff --git a/remotes/honeybot/scripts/score.py b/remotes/honeybot/scripts/score.py
index eb8c4d7..10776a4 100644
--- a/remotes/honeybot/scripts/score.py
+++ b/remotes/honeybot/scripts/score.py
@@ -116,15 +116,13 @@ def _append_article_performance(script, article, is_latest=True):
     script.append((
         "CARD",
         {
-            "label": "READ MORE\nMIKELEV.IN",
+            "label": "SUNPUG.IO &\nMIKELEV.IN",
             "say": (
                 f"That concludes {article['title']}. "
-                "You can read the full text and source code at Mike L E V dot eye N, "
-                "or inspect the portable workshop through any of our eight doors, including "
-                "Sun Pug dot eye oh, Guerilla Tech dot com, R F C 91 10 dot org, and R F C 91 11 dot eye oh, "
-                "using curl pipe less. "
-                "Drop a message in the live chat if you are tuning in. "
-                "A human operator monitors this observatory and can break in live."
+                "Explore 911 LLM Optics and the FOSS AI-Readiness workshop at SunPug.io, "
+                "or read the full text and raw receipts at mikelev.in. "
+                "Drop a message in the live chat if you are tuning in — "
+                "a human operator monitors this observatory and can break in live."
             ),
         },
     ))
diff --git a/remotes/honeybot/scripts/stream.py b/remotes/honeybot/scripts/stream.py
index 9fd1eb4..2be5cdb 100644
--- a/remotes/honeybot/scripts/stream.py
+++ b/remotes/honeybot/scripts/stream.py
@@ -101,7 +101,7 @@ def register_signal_handlers():
 
 # --- Configuration ---
 SHOW_DURATION_MINUTES = 240  # Minutes for the big logfile stream
-PITCH_INTERVAL = 1200       # Seconds between "Station Identification" (Doubled to 20 mins for longer uninterrupted article reading)
+PITCH_INTERVAL = 420        # 7-minute Copper grid: hits Markdown -> White Rabbit -> Intermission -> JS Trapdoor -> 911 Optics
 
 # Spoken over tick.wav when `publish "msg"` rings .deploy_standby on Honeybot.
 # Edit with `ytoutro edit` and audition locally on Prime with `ytoutro`.
@@ -208,9 +208,11 @@ except ImportError:
 try:
     import forest as _forest_mod
     STATION_SEGMENTS = _forest_mod.STATION_SEGMENTS
+    ARCHIVED_STATION_BEADS = getattr(_forest_mod, "ARCHIVED_STATION_BEADS", {})
 except ImportError:
     _forest_mod = None
     STATION_SEGMENTS = []
+    ARCHIVED_STATION_BEADS = {}
 
 
 def _polish_tts_text(text: str) -> str:
@@ -226,7 +228,7 @@ def _polish_tts_text(text: str) -> str:
 
 def _reload_forest_module():
     """Hot-reload terms.py and forest.py from disk so edits take effect without restarting stream.py."""
-    global _forest_mod, _terms_mod, STATION_SEGMENTS
+    global _forest_mod, _terms_mod, STATION_SEGMENTS, ARCHIVED_STATION_BEADS
     try:
         import importlib
         if _terms_mod is None:
@@ -242,6 +244,7 @@ def _reload_forest_module():
         else:
             _forest_mod = importlib.reload(_forest_mod)
         STATION_SEGMENTS = getattr(_forest_mod, "STATION_SEGMENTS", [])
+        ARCHIVED_STATION_BEADS = getattr(_forest_mod, "ARCHIVED_STATION_BEADS", {})
     except Exception:
         pass
     return _forest_mod
@@ -2547,12 +2550,13 @@ def run_optics_station_slot(content, env, profile_dir) -> None:
                         break
                 time.sleep(0.5)
         else:
-            conjure_patronus("clipboard", duration=32.0)
+            conjure_patronus("clipboard", duration=42.0)
             narrator.say(
-                "Pipulate Prime is currently running unattended in local workshop mode. "
-                "When projected live on stage, 911 L L M Optics captures raw wire headers, static H T M L source, "
-                "hydrated D O M trees, ASCII layout boxes, and R F C 91 10 negotiated Markdown, sealing all sixteen "
-                "lenses into a single S H A 256 zip deed you can verify at Q A my dot A I."
+                "Pipulate Prime is currently running in local workshop mode, and you can run this exact spectrometer on your own machine today. "
+                "911 LLM Optics is our FOSS Screaming Frog for the Age of AI: point it at any URL and it stacks sixteen wire-truth lenses side by side — "
+                "raw HTTP response headers, unrendered source HTML versus hydrated browser DOM, accessibility trees, token bloat, and RFC 9110 plus RFC 9111 Markdown readiness — "
+                "sealing the entire audit into a SHA-256 archive deed so you can retire $10K/mo pre-render stacks with proof. "
+                "Launch it free at SunPug.io."
             )
             wait_for_voice_or_live_interrupt(env, profile_dir)
     finally:
@@ -2975,6 +2979,7 @@ def announce_scheduled_reboot():
 
 def perform_show(script):
     """Reads the sheet music list and executes it."""
+    global _station_index
     # Idempotent safety net: whenever we start performing ANY fresh script --
     # normal playlist progression, a breaking-news restart, anything -- make
     # sure no stale "UPDATING" sentinel card is still lingering on screen.
@@ -3167,8 +3172,11 @@ def perform_show(script):
                 next_pitch_time = next_slot(start_time, PITCH_INTERVAL, time.time())
 
             dispatch_cue(command, content, env, profile_dir, pace_say=True)
-            if command in ("OVERTURE", "INTERMISSION"):
-                next_pitch_time = next_slot(start_time, PITCH_INTERVAL, time.time())
+            if command == "OVERTURE":
+                _station_index = 0
+                next_pitch_time = next_slot(start_time, PITCH_INTERVAL, time.time() + 180.0)
+            elif command == "INTERMISSION":
+                next_pitch_time = next_slot(start_time, PITCH_INTERVAL, time.time() + 180.0)
             elif command in ("MEDIA", "IMAGE", "VIDEO"):
                 next_pitch_time = max(next_pitch_time, time.time() + 30.0)
     finally:
@@ -3339,10 +3347,14 @@ def trigger_station_bead_live(target_spec="pirates", out_path="/home/mike/www/mi
             tmp.replace(p)
         return payload
     chosen_bead = None
-    if q.isdigit():
+    if q in ARCHIVED_STATION_BEADS:
+        chosen_bead = ARCHIVED_STATION_BEADS[q]
+    elif q_raw in ARCHIVED_STATION_BEADS:
+        chosen_bead = ARCHIVED_STATION_BEADS[q_raw]
+    elif q.isdigit():
         chosen_bead = STATION_SEGMENTS[int(q) % len(STATION_SEGMENTS)]
     else:
-        for bead in STATION_SEGMENTS:
+        for bead in (*STATION_SEGMENTS, *ARCHIVED_STATION_BEADS.values()):
             bead_str = " ".join(str(x) for x in bead).lower()
             if f":{q}" in bead_str or q in bead_str:
                 chosen_bead = bead
(nix) pipulate $ m
📝 Committing: feat: Introduce live Web Bot AI Observatory on bare metal
[main 7fffa7b] feat: Introduce live Web Bot AI Observatory on bare metal
 3 files changed, 100 insertions(+), 93 deletions(-)
(nix) pipulate $ git push
Enumerating objects: 15, done.
Counting objects: 100% (15/15), done.
Delta compression using up to 48 threads
Compressing objects: 100% (7/7), done.
Writing objects: 100% (8/8), 3.59 KiB | 919.00 KiB/s, done.
Total 8 (delta 6), reused 0 (delta 0), pack-reused 0 (from 0)
remote: Resolving deltas: 100% (6/6), completed with 6 local objects.
To github.com:pipulate/pipulate.git
   ed64146..7fffa7b  main -> main
(nix) pipulate $ 
```

Ignition: often "exit", "nix develop". Instructions may vary.

It's gonna be a `ytreboot` and I'm waiting for an enchanted user to have the
spell broken and move on. I should consider layering Leslie Nielson's voice
Lieutenant Frank Drebin voice "There's nothing to see here. Please disperse..."
quote in as part of Operation Weebo, ha ha ha!

No, don't really do that.

I'll wait them out. Nah, I'm just going for it. I happen to be noticing I don't
hear the comfort background music. Not sure if there's anything up there but
I'll report on what happens after this. Oh they're gone! It's funny the
background music not being there I think is really off-putting.

Honestly a lot is off-putting but I'm not trying to be Norma Centroid here
either. I do more of what's wacky and yet not going to lose the consulting
business from those who matter and more of what makes the communication more
effective. There's a balance here.

```bash
On branch main
Your branch is up to date with 'origin/main'.

nothing to commit, working tree clean

GIT repo clean. Take BEFORE reading, make CHANGE, record AFTER diff.
(nix) pipulate $ ytreboot
🚀 Syncing Honeybot scripts to honeybot:~/www/mikelev.in/scripts/...
🔄 Signaling Honeybot stream.py on honeybot for graceful SCHEDULED REBOOT announcement...
   signaling stream.py pid=911872 for graceful reboot announcement...
   force-killing stubborn stream.py pid=911872
✅ Stream watchdog relaunched fresh stream.py (pid=935223 after 5s).
🔭 Started background 'ytwatch' daemon in tmux (polling every 30s).
   • Watch live stream: ytwatch log   (or `ytlog` — press `q` or `Ctrl+b d` to exit)
   • Check status:      ytwatch status
   • Stop daemon:       ytwatch stop
(nix) pipulate $ 
```

This is a big one. I watch and listen. I expect Pipulate and the 911 LLM Optics
to appear. I am very interested if the background music kicks in, which happens
right as the hero image is popped up.

Yep, the comfort background audio *dripulate* is there, ha ha! Okay, there was
probably just some rogue audio kill event during the dev-work. We'll keep our
ears peeled if that was something in the production path or not.

**4: PROMPT**: 

Verify the AFTER straddle receipts for Chisel Strike 3 (`PITCH=420`, the 4-bead linear `ACTIVE` funnel `['RFC 9110 MARKDOWN', 'SEOS ASSEMBLE!', 'DOM TRAPDOOR JS EXECS', '911 LLM OPTICS']`, the 6-key `ARCHIVED` vault, `BEAD_LOOKUP` resolving both archived `tiktok`/`pachinko` and upgraded `rabbit`/`optics`, and `test_forest.py` passing).
Now inspect `scripts/articles/editing_prompt.txt` and `foo_files.py` and execute Chisel Strike 4:
1. Upgrade `scripts/articles/editing_prompt.txt` with an 80/20-rule human-psychology headline directive so the model stops writing kitchen-sink "covering all our bases" titles and instead crafts sharp, genuine, high-integrity headlines built for emotional human beings scrolling LinkedIn, X/Twitter, and Facebook.
2. Bank a clean TODO in `foo_files.py` for correlating `ytwatch`/`ytlog` viewer watch-times and drop-offs against exact article cue positions and Weebo/Max Headroom popups (and claim `remotes/honeybot/scripts/terms.py` out of the unclaimed paintbox if appropriate) so we can close out this article cleanly.

**5: DELIVERABLE**: 

What does "DONE" look like?

I'm thinking the same thought process of not wasting a minute or a second or a
heartbeat on rambling drive-them-away always gonna bounce when I'm doing
diarrhea of the mouth thing here is the same between our tightening up of these
station identification breaks that always give a consistent, ordered, sequenced
and planned very tied to elevator-pitch, value proposition and call-to-action
experience with the general tightening up of the article content itself, which
while can be vastly more variable always is part of this Anthropologist from the
Future thing so we can play off of the AI Editorial surprises which I always
love.

The best stories in my opinion always begin with:

> And then the surprising thing he/she/they/mix-mux whatever did next was dot
> dot dot...

It gives it that certain forgone conclusion "of course it could be no other way"
feeling. An example would be:

Docker image mystery meat opacity and upstream dependency bombs were always a
problem but nobody knew it, not to mention that putting them in context compared
to a Nix configuration or flake file so what he did was blah blah blah.

It's not like we're going to line all the lenses up suddenly to burn through the
catapult rope all of the sudden or on this article, but as that last
lowest-level fine-tuning lens is has its high gear-ratio actuator nudging it
ever so gently into place...

We're gonna know.

Our mechanical sympathy and all the signs leading up to it are going to be laser
pinpoint clear.

I need to shape the development path so that these extracted abstractions *from
the future* can be published at the same time and it really is a story that can
be played sensibly from that point forward as a for real for real version of the
book, one of the many that will be in as the Vulcan's say Infinite Diversity in
Infinite Combinations, or IDIC.

We should work that into `GLOSSARY.md` if it's not in there yet.

It will explain there never being a real tree-killing book but rather just an
archive you drop into whatever AI to start getting whatever you need out of it.
That's what everyone who's dodging long-form reading is always forever-forward
going to be doing now anyway -- the modern-day CliffsNotes and we just lean into
it.

But right now, this opening series is to systematically and methodically nudge
these remaining lenses more and more into alignment focusing that pinpoint of
light onto the catapult rope.

See where we're going with that, Gemini 4 Carbon High?

**Gemini 4 Carbon High**: Context verified.

**TL;DR**: Chisel Strike 3's core straddle landed (`PITCH=420`, the 4-bead linear `ACTIVE` funnel `['RFC 9110 MARKDOWN', 'SEOS ASSEMBLE!', 'DOM TRAPDOOR JS EXECS', '911 LLM OPTICS']`, the 6-key `ARCHIVED` vault, `tiktok`/`pachinko`/`rabbit` lookup, and live `dripulate.wav` BGM confirmed on `pid=935223`), while Probe 2's discriminator caught one genuine substring quirk: `--bead optics` matched `"911 LLM Optics"` inside Bead 0's shared `CONSULTING_CTA_BEAT` before reaching Bead 3 (`OPTICS_SLOT`), queued with `GLOSSARY.md` (`IDIC`) in `(2) NEXT CONTEXT` for a surgical fix next turn. Below, **Chisel Strike 4** upgrades `scripts/articles/editing_prompt.txt` with an **80/20 Human Headline Rule** (banning kitchen-sink noun-list titles in favor of single-hook curiosity for LinkedIn, X, and Facebook, plus the *Archaeologist from the Future* angle in `ai_editorial_take`), banks `P0.29` (`ytwatch`/`ytlog` watch-time & Weebo drop-off correlation) and upgrades `P0.8` (the zero-paywall HTML5 *"Good Read"* audio player) in `foo_files.py`, claims `remotes/honeybot/scripts/terms.py` into Chapter IX, and lays out the zero-bloat way to catch free-association "maybe" sparks in book-ore.

---

### 1. Honest Receipt Check on Strike 3 (Two Instrument Catches)

1. **`BEAD_LOOKUP['optics']` Substring Catch:** `tiktok`, `pachinko`, and `rabbit` all resolved to their exact cards, whereas `'optics'` resolved to `('RFC 9110 MARKDOWN', 'forest.py:90:overview')` instead of `('911 LLM OPTICS', 'OPTICS_SLOT')`. Why? Adding `"911 LLM Optics"` into `CONSULTING_CTA_BEAT` placed the word `"optics"` inside Bead 0's CTA card, and `trigger_station_bead_live()` currently scans full `str(bead)` text in one pass instead of checking the bead's lead `CARD` label / `OPTICS_SLOT` cue first. `remotes/honeybot/scripts/stream.py` rides in `(2) NEXT CONTEXT` so we fix that 3-line precedence cleanly rather than blind-patching off a diff.
2. **Test Runner Binary:** `.venv/bin/pytest` exited `127` because `requirements.in` ships stdlib `unittest` rather than `pytest`; Probe 3 below runs `remotes/honeybot/scripts/test_forest.py` via `.venv/bin/python` `unittest` + `test_*` discovery so every assertion executes in `.venv`.

---

### 2. Catching "Maybe" Sparks & The *Archaeologist from the Future* Without Littering `foo_files.py`

You nailed a real architectural tension: stream-of-consciousness riffing is where black-swan outliers are born, yet putting every *"maybe"* into `foo_files.py` taxes every future compile, while leaving them unmarked buries them in 1,632 posts—and raw 40,000-word transcripts with diffs hit YouTube's 12-hour VOD ceiling and require a paid Google Workspace tier if a reader relies on Google Docs audio.

Without changing any pipeline code prematurely, a **3-tier separation** keeps each layer sharp:

```text
  TIER 1: RAW BOOK-ORE            TIER 2: THE "GOOD READ"             TIER 3: COMMITTED WORK
 ┌─────────────────────────┐     ┌─────────────────────────────┐     ┌─────────────────────────┐
 │ Inline `**SPARK**: ...` │────▶│ Archaeologist's Cut + Audio │────▶│ `foo_files.py` `# - TODO`│
 │ Zero `foo_files` tax;   │     │ ("And then the surprising   │     │ Only when ready for a   │
 │ 40ms `rg` across _posts │     │ thing he did next was...")  │     │ concrete verb + Gate    │
 └─────────────────────────┘     └─────────────────────────────┘     └─────────────────────────┘
```

* **Zero-Rent Outlier Capture (`**SPARK**:` in `article.txt`)**: Whenever a wild half-baked idea surfaces while writing (like Spielberg's *A.I.* Mecha-Archaeologists or a Frank Drebin Weebo gag), drop a single line starting with `**SPARK**:` right in the prose. It costs **0 tokens** in `foo_files.py` and `rg '\*\*SPARK\*\*:' ~/repos/trimnoir/_posts` harvests every spark across the entire corpus in milliseconds (and later `contextualizer.py` can collect them into `_posts/_context/<slug>.json` shards automatically).
* **IDIC & The Portable CliffsNotes Archive (`GLOSSARY.md` next turn)**: In *Star Trek*'s Vulcan philosophy of **IDIC** (*Infinite Diversity in Infinite Combinations*), there is never one static dead-tree book—the raw book-ore + holographic shards form a generative source archive that any reader or AI can project into an executive brief, a 5-minute *Archaeologist from the Future* theatrical YouTube episode, or a native HTML5 `<audio controls>` `.wav`/`.mp3` (`P0.8`) right on the page.

---

### Actionable Next-Steps Plan (The 5-Car Train)

In `(1) PROBES` below:

* **Probe 1** straddles `scripts/articles/editing_prompt.txt` for the new `80/20 HUMAN HEADLINE RULE`, anti-`kitchen-sink` guard, and `Archaeologist from the Future` editorial lens (`False` before -> `True` after).
* **Probe 2** straddles `foo_files.py` for `P0.29` (`YTWATCH DWELL-TIME` + cue/Weebo bounce correlation), the upgraded `P0.8` *"Good Read"* HTML5 audio spec (`12-hour VOD`), and `remotes/honeybot/scripts/terms.py` moving from Paintbox into Chapter IX.
* **Probe 3** executes `remotes/honeybot/scripts/test_forest.py` via `.venv/bin/python` stdlib `unittest` and checks whether `GLOSSARY.md` already defines `IDIC` ahead of Turn 5's closing polish (`GLOSSARY.md` + `stream.py` `--bead optics` precedence).

#### (1) PROBES

`(nix) pipulate $`

```bash
.venv/bin/python -c 'import pathlib; txt = pathlib.Path("scripts/articles/editing_prompt.txt").read_text(encoding="utf-8"); r1 = "80/20 HUMAN HEADLINE RULE" in txt; r2 = "kitchen-sink" in txt.lower(); r3 = "Archaeologist from the Future" in txt; print(f"HEADLINE_RULE={r1} NO_KITCHEN_SINK={r2} ARCHAEOLOGIST_LENS={r3}")'
.venv/bin/python -c 'import pathlib, re; txt = pathlib.Path("foo_files.py").read_text(encoding="utf-8"); p29 = "P0.29 YTWATCH DWELL-TIME" in txt; p08 = "12-hour VOD" in txt; ch9 = bool(re.search(r"(?m)^# remotes/honeybot/scripts/terms\.py\s+# <--", txt)); pbox = bool(re.search(r"(?m)^# remotes/honeybot/scripts/terms\.py\s+# \[", txt)); print(f"P0_29={p29} P0_8_GOOD_READ={p08} TERMS_CLAIMED={ch9} TERMS_IN_PAINTBOX={pbox}")'
HONEYBOT_DB_READONLY=1 .venv/bin/python -c 'import importlib.util, io, pathlib, sys, unittest; sys.path.insert(0, "remotes/honeybot/scripts"); sys.path.insert(0, "."); spec = importlib.util.spec_from_file_location("test_forest", "remotes/honeybot/scripts/test_forest.py"); mod = importlib.util.module_from_spec(spec); spec.loader.exec_module(mod); suite = unittest.defaultTestLoader.loadTestsFromModule(mod); res = unittest.TextTestRunner(stream=io.StringIO(), verbosity=0).run(suite); fn_tests = [getattr(mod, k) for k in dir(mod) if k.startswith("test_") and callable(getattr(mod, k))]; [fn() for fn in fn_tests]; g = pathlib.Path("GLOSSARY.md").read_text(encoding="utf-8"); has_idic = ("Infinite Diversity" in g) or ("**IDIC**" in g); print(f"UNITTEST_RAN={res.testsRun} FN_TESTS={len(fn_tests)} OK={res.wasSuccessful()} GLOSSARY_HAS_IDIC={has_idic}")'
```

#### (2) NEXT CONTEXT

```text
context.txt
GLOSSARY.md
remotes/honeybot/scripts/stream.py
! .venv/bin/python -c 'import pathlib; txt = pathlib.Path("scripts/articles/editing_prompt.txt").read_text(encoding="utf-8"); r1 = "80/20 HUMAN HEADLINE RULE" in txt; r2 = "kitchen-sink" in txt.lower(); r3 = "Archaeologist from the Future" in txt; print(f"HEADLINE_RULE={r1} NO_KITCHEN_SINK={r2} ARCHAEOLOGIST_LENS={r3}")'
! .venv/bin/python -c 'import pathlib, re; txt = pathlib.Path("foo_files.py").read_text(encoding="utf-8"); p29 = "P0.29 YTWATCH DWELL-TIME" in txt; p08 = "12-hour VOD" in txt; ch9 = bool(re.search(r"(?m)^# remotes/honeybot/scripts/terms\.py\s+# <--", txt)); pbox = bool(re.search(r"(?m)^# remotes/honeybot/scripts/terms\.py\s+# \[", txt)); print(f"P0_29={p29} P0_8_GOOD_READ={p08} TERMS_CLAIMED={ch9} TERMS_IN_PAINTBOX={pbox}")'
! HONEYBOT_DB_READONLY=1 .venv/bin/python -c 'import importlib.util, io, pathlib, sys, unittest; sys.path.insert(0, "remotes/honeybot/scripts"); sys.path.insert(0, "."); spec = importlib.util.spec_from_file_location("test_forest", "remotes/honeybot/scripts/test_forest.py"); mod = importlib.util.module_from_spec(spec); spec.loader.exec_module(mod); suite = unittest.defaultTestLoader.loadTestsFromModule(mod); res = unittest.TextTestRunner(stream=io.StringIO(), verbosity=0).run(suite); fn_tests = [getattr(mod, k) for k in dir(mod) if k.startswith("test_") and callable(getattr(mod, k))]; [fn() for fn in fn_tests]; g = pathlib.Path("GLOSSARY.md").read_text(encoding="utf-8"); has_idic = ("Infinite Diversity" in g) or ("**IDIC**" in g); print(f"UNITTEST_RAN={res.testsRun} FN_TESTS={len(fn_tests)} OK={res.wasSuccessful()} GLOSSARY_HAS_IDIC={has_idic}")'
```

#### (3) PATCHES

**Car 1 — Add the 80/20 Human Headline Rule & Archaeologist Lens to `scripts/articles/editing_prompt.txt`, Bank `P0.29` + Upgrade `P0.8`, & Claim `terms.py` in `foo_files.py`:**

```text
Target: scripts/articles/editing_prompt.txt
[[[SEARCH]]]
Use all lower-case and hyphens in permalinks
When describing the passion represented here, you may refer to it as a blueprint, essay, treatise, methodology, philosophy or way. NEVER refer to it as a manifesto which has a negative connotation.
Every one of these covers some "critical" or "pivotal" point in the development of, yadda yadda. Don't play that up, it's become repetitive.
[[[DIVIDER]]]
Use all lower-case and hyphens in permalinks
When describing the passion represented here, you may refer to it as a blueprint, essay, treatise, methodology, philosophy or way. NEVER refer to it as a manifesto which has a negative connotation.
Every one of these covers some "critical" or "pivotal" point in the development of, yadda yadda. Don't play that up, it's become repetitive.
**80/20 HUMAN HEADLINE RULE (NO KITCHEN-SINK TITLES):** You are writing headlines for emotional, time-poor human beings scrolling LinkedIn, X, or Facebook — NOT a syllabus for an LLM. Never write "covering all our bases" compound titles that cram three or four topics into a list (`"Topic A: Tool B, Concept C, and Metaphor D"`). Find the SINGLE most compelling, counter-intuitive, or high-stakes 80/20 insight in the piece — the genuine reason a smart practitioner stops scrolling and clicks — and build the entire headline around that one hook with total integrity (never hollow clickbait; the article must deliver on the promise). Keep titles punchy (~45-70 characters, at most one colon or none at all), lead with the human problem, cost, or revelation before internal project names, and make sure it reads aloud naturally.
[[[REPLACE]]]

Target: scripts/articles/editing_prompt.txt
[[[SEARCH]]]
  * title_brainstorm: Populate with 3-5 title ideas, rationales and filenames. The first entry is the preferred choice and the sole source of the published slug. Each filename must be a lowercase alphanumeric/hyphen slug ending in .md, with no folder or date prefix; the writer adds the date.
[[[DIVIDER]]]
  * title_brainstorm: Populate with 3-5 distinct, scroll-stopping human headline ideas, rationales, and filenames tested across genuine social-feed psychology (e.g., 1. sharp contrarian cost/pain hook for LinkedIn, 2. "surprising discovery" curiosity hook for X/Facebook, 3. direct practitioner proof hook — never multi-clause kitchen-sink inventories). Rank the single strongest high-integrity click-worthy headline first (`title_brainstorm[0]`, matching `yaml_updates.title`), as it is the preferred choice and the sole source of the published slug. Each filename must be a concise 4-7 word lowercase alphanumeric/hyphen slug ending in .md, with no folder or date prefix; the writer adds the date.
[[[REPLACE]]]

Target: scripts/articles/editing_prompt.txt
[[[SEARCH]]]
  * ai_editorial_take: Populate with your AI perspective on the entry's potential. What surprised you most? Don't use the exact same thing as the previous AI participating in the dialogue. Find some absolutely new angle or perspective that isn't mentioned yet in the article.
[[[DIVIDER]]]
  * ai_editorial_take: Populate with your AI perspective on the entry's potential, framed like an Archaeologist from the Future uncovering a surprising engineering artifact ("And then the surprising thing the author did next was..."). What surprised you most? Don't use the exact same thing as the previous AI participating in the dialogue. Find some absolutely new angle or perspective that isn't mentioned yet in the article.
[[[REPLACE]]]

Target: foo_files.py
[[[SEARCH]]]
# remotes/honeybot/scripts/forest.py          # <-- Likewise, just added for the new storytelling system on Honeybot
# remotes/honeybot/scripts/test_forest.py     # <-- Test Honeybot station identification sequence on Pipulate Prime
[[[DIVIDER]]]
# remotes/honeybot/scripts/forest.py          # <-- Likewise, just added for the new storytelling system on Honeybot
# remotes/honeybot/scripts/terms.py           # <-- Master Piper TTS ear-orthography table (`terms` alias), shared by Honeybot & local voice
# remotes/honeybot/scripts/test_forest.py     # <-- Test Honeybot station identification sequence on Pipulate Prime
[[[REPLACE]]]

Target: foo_files.py
[[[SEARCH]]]
# - TODO (2026-11-10, P0.28 SVNP CONSULTING FLYWHEEL & 911 OPTICS DEED OUTREACH): Operationalize the Butterfly Net multi-client retainer mesh by running `apps/911_optics_workflow.py` against prospective client domains, delivering sealed `optics_deed.zip` wire-truth vs. hydrated-DOM audits alongside `qamy.ai` and `sunpug.io` self-verifying doors, and tracking reciprocal `VERIFY:RFC9110` and `DOOR:INSTALL` triggers on Honeybot. Gate: first outbound `optics_deed.zip` delivered to a prospective retainer client and witnessed in live telemetry.
[[[DIVIDER]]]
# - TODO (2026-11-11, P0.29 YTWATCH DWELL-TIME & CUE/WEEBO DROP-OFF CORRELATION): Stamp active `(article_slug, cue_idx, heading, active_overlay)` state in `remotes/honeybot/scripts/stream.py` alongside `ytwatch` viewer-delta transitions in `scripts/articles/common.py` and expose a bounded `ytlog --summary` receipt command so long-tail 1-to-N viewer watch-times and bounce points correlate directly against article sections and Weebo/Max Headroom popups. Gate: `ytlog --summary` prints per-article mean watch-time and overlay delta table from live JSONL telemetry.
# - TODO (2026-11-10, P0.28 SVNP CONSULTING FLYWHEEL & 911 OPTICS DEED OUTREACH): Operationalize the Butterfly Net multi-client retainer mesh by running `apps/911_optics_workflow.py` against prospective client domains, delivering sealed `optics_deed.zip` wire-truth vs. hydrated-DOM audits alongside `qamy.ai` and `sunpug.io` self-verifying doors, and tracking reciprocal `VERIFY:RFC9110` and `DOOR:INSTALL` triggers on Honeybot. Gate: first outbound `optics_deed.zip` delivered to a prospective retainer client and witnessed in live telemetry.
[[[REPLACE]]]

Target: foo_files.py
[[[SEARCH]]]
# - TODO (2026-10-20, P0.8 PIPER ARTICLE AUDIOIZER & VOICE PICKER): Build an idempotent newest-first post-publish script (`scripts/articles/audioizer.py`) that synthesizes published articles into downloadable audio files (`/assets/audio/<slug>.mp3` or `.wav`) with multi-voice selection and renders a native HTML5 `<audio controls>` bar in `_layouts/post.html`.
[[[DIVIDER]]]
# - TODO (2026-10-20, updated 2026-11-11, P0.8 PIPER "GOOD READ" ARTICLE AUDIOIZER & HTML5 PLAYER): Build an idempotent newest-first post-publish script (`scripts/articles/audioizer.py`) that synthesizes a clean "Good Read" / Archaeologist-from-the-Future edition of each post into static `/assets/audio/<slug>.mp3` or `.wav` with 3-voice cast selection and native HTML5 `<audio controls>` in `_layouts/post.html` — removing paid Google Workspace Docs audio lock-in and surviving YouTube's 12-hour VOD limit. Gate: `_layouts/post.html` plays a local `/assets/audio/<slug>.mp3` on mobile and desktop with zero external dependencies.
[[[REPLACE]]]

Target: foo_files.py
[[[SEARCH]]]
# remotes/honeybot/queries/ua_variants.sql  # [645 tokens | 2,535 bytes]
# remotes/honeybot/scripts/terms.py  # [4,260 tokens | 11,807 bytes]
# scripts/articles/build_hierarchy.py  # [2,460 tokens | 10,361 bytes]
[[[DIVIDER]]]
# remotes/honeybot/queries/ua_variants.sql  # [645 tokens | 2,535 bytes]
# scripts/articles/build_hierarchy.py  # [2,460 tokens | 10,361 bytes]
[[[REPLACE]]]
```

Ignition: none (`editing_prompt.txt` and `foo_files.py` are read directly from disk at call time by the probes, `compile`, and `article`).

#### (4) PROMPT

```text
Verify the AFTER straddle receipts for Chisel Strike 4 (`HEADLINE_RULE=True NO_KITCHEN_SINK=True ARCHAEOLOGIST_LENS=True`, `P0_29=True P0_8_GOOD_READ=True TERMS_CLAIMED=True TERMS_IN_PAINTBOX=False`, `test_forest.py` passing, and `GLOSSARY_HAS_IDIC` status).
Then execute the final closing polish on `GLOSSARY.md` and `remotes/honeybot/scripts/stream.py`:
1. Add `IDIC (Infinite Diversity in Infinite Combinations)` to `GLOSSARY.md` (connecting the portable `qamy.ai` / book-ore archive and *Archaeologist from the Future* projections to why there is no single static tree-killing book, only infinite tailored combinations from one verified plain-text substrate).
2. Fix `trigger_station_bead_live()` in `remotes/honeybot/scripts/stream.py` so lead `CARD` labels and `OPTICS_SLOT` cues match ahead of shared `CONSULTING_CTA_BEAT` text (`--bead optics` resolving cleanly to `('911 LLM OPTICS', 'OPTICS_SLOT')`), and prepare us to dismount and publish this article (so the upgraded `editing_prompt.txt` gets its live maiden flight on this very post!).
```

#### (5) EXTERNAL DELIVERABLES

No external deliverables required this turn.

**MikeLev.in**: Yeah, the background comfort audio definitely stops playing and I think
it's during the first station identification with the Alacritty data report.

## THE AI-EDIT METHOD

> Same commands, run twice, one change between them. Where the readings
> differ is what the change did; the diff in the middle is the receipt.

**1: BEFORE** (PROBE): 

```bash
On branch main
Your branch is up to date with 'origin/main'.

nothing to commit, working tree clean

GIT repo clean. Take BEFORE reading, make CHANGE, record AFTER diff.
(nix) pipulate $ .venv/bin/python -c 'import pathlib; txt = pathlib.Path("scripts/articles/editing_prompt.txt").read_text(encoding="utf-8"); r1 = "80/20 HUMAN HEADLINE RULE" in txt; r2 = "kitchen-sink" in txt.lower(); r3 = "Archaeologist from the Future" in txt; print(f"HEADLINE_RULE={r1} NO_KITCHEN_SINK={r2} ARCHAEOLOGIST_LENS={r3}")'
.venv/bin/python -c 'import pathlib, re; txt = pathlib.Path("foo_files.py").read_text(encoding="utf-8"); p29 = "P0.29 YTWATCH DWELL-TIME" in txt; p08 = "12-hour VOD" in txt; ch9 = bool(re.search(r"(?m)^# remotes/honeybot/scripts/terms\.py\s+# <--", txt)); pbox = bool(re.search(r"(?m)^# remotes/honeybot/scripts/terms\.py\s+# \[", txt)); print(f"P0_29={p29} P0_8_GOOD_READ={p08} TERMS_CLAIMED={ch9} TERMS_IN_PAINTBOX={pbox}")'
HONEYBOT_DB_READONLY=1 .venv/bin/python -c 'import importlib.util, io, pathlib, sys, unittest; sys.path.insert(0, "remotes/honeybot/scripts"); sys.path.insert(0, "."); spec = importlib.util.spec_from_file_location("test_forest", "remotes/honeybot/scripts/test_forest.py"); mod = importlib.util.module_from_spec(spec); spec.loader.exec_module(mod); suite = unittest.defaultTestLoader.loadTestsFromModule(mod); res = unittest.TextTestRunner(stream=io.StringIO(), verbosity=0).run(suite); fn_tests = [getattr(mod, k) for k in dir(mod) if k.startswith("test_") and callable(getattr(mod, k))]; [fn() for fn in fn_tests]; g = pathlib.Path("GLOSSARY.md").read_text(encoding="utf-8"); has_idic = ("Infinite Diversity" in g) or ("**IDIC**" in g); print(f"UNITTEST_RAN={res.testsRun} FN_TESTS={len(fn_tests)} OK={res.wasSuccessful()} GLOSSARY_HAS_IDIC={has_idic}")'
HEADLINE_RULE=False NO_KITCHEN_SINK=False ARCHAEOLOGIST_LENS=False
P0_29=False P0_8_GOOD_READ=False TERMS_CLAIMED=False TERMS_IN_PAINTBOX=True
UNITTEST_RAN=0 FN_TESTS=0 OK=True GLOSSARY_HAS_IDIC=False
(nix) pipulate $ 
```

**2: AFTER** (NEXT CONTEXT): 

```text
# # Context 1
# ! book
# ! markov
# ! rgxc 20
# /home/mike/repos/trimnoir/_posts/2026-11-10-butterfly-nets-monkeys-paws-flake-nix-for-matter.md  # [Idx: 1 | Order: 2 | Tokens: 35,494 | Bytes: 140,431]
# /home/mike/repos/trimnoir/_posts/2026-11-10-google-serp-poisoning-prerender-tax-post-seo-audit.md  # [Idx: 2 | Order: 3 | Tokens: 101,004 | Bytes: 384,604]
# # /home/mike/repos/trimnoir/_posts/2026-11-11-killing-prerender-scam-sunpug-911-optics-vibe-coding.md  # [Idx: 3 | Order: 1 | Tokens: 107,526 | Bytes: 414,226]

# # Context 2
# context.txt
# flake.nix
# nixops.sh
# imports/voice_synthesis.py
# remotes/honeybot/scripts/content_loader.py
# remotes/honeybot/scripts/stream.py
# ! ls -1 remotes/honeybot/scripts
# ! rg -n 'alias (art|forest|terms)=|^\s*(art|forest|terms|ytapp)\s*\(\)' flake.nix
# ! rg -in '360i|pronun|phonetic|clean_for_tts|saas|serp' imports/voice_synthesis.py remotes/honeybot/scripts/ | head -n 60
# ! sed -n '1,25p' /home/mike/repos/trimnoir/_posts/2026-11-11-killing-prerender-scam-sunpug-911-optics-vibe-coding.md

# # Context 3
# context.txt
# remotes/honeybot/scripts/terms.py
# remotes/honeybot/scripts/logs.py
# remotes/honeybot/scripts/forest.py
# ! nix-instantiate --parse flake.nix >/dev/null && rg -n 'alias (forest|art|terms)=' flake.nix
# ! .venv/bin/python -c 'import pathlib, sys; sys.path.insert(0, "remotes/honeybot/scripts"); sys.path.insert(0, "."); import content_loader; from imports.voice_synthesis import chip_voice_system as cvs; has_t = pathlib.Path("remotes/honeybot/scripts/terms.py").is_file(); sample = "Killing the $10K Pre-Render Scam: SaaS & SERPs for SEOs at SunPug.io with 911 LLM Optics ($10K/mo vs $10K)"; cl_out = content_loader._apply_tts_pronunciations(sample); vs_out = cvs.sanitize_text(sample) if cvs else "NONE"; idem = (content_loader._apply_tts_pronunciations(cl_out) == cl_out); print(f"TERMS_FILE={has_t} IDEMPOTENT={idem}"); print(f"HONEYBOT_TTS={cl_out}"); print(f"LOCAL_TTS={vs_out}")'
# ! .venv/bin/python -c 'import sys; sys.path.insert(0, "remotes/honeybot/scripts"); import content_loader, stream; arts = content_loader.get_playlist(recent_n=2, include_archive=False); titles = [a["title"] for a in arts]; spec_txt = stream.Narrator()._make_spec("norma", "911 LLM Optics kills $10K SaaS SERP scams at SunPug.io", "narrator", "inactive", "inactive")["text"]; print(f"TITLES={titles}"); print(f"STREAM_SPEC={spec_txt}")'

# # Context 4
# context.txt
# remotes/honeybot/scripts/forest.py
# remotes/honeybot/scripts/score.py
# remotes/honeybot/scripts/stream.py
# ! HONEYBOT_DB_READONLY=1 .venv/bin/python -c 'import sys; sys.path.insert(0, "remotes/honeybot/scripts"); import logs; app = logs.SonarApp(); app.countdown_str = "239:59"; t0, s0 = app.get_app_title(), app.get_sub_title(); app.peak_viewers = 9; app._read_live_viewers = lambda: 3; t1, s1 = app.get_app_title(), app.get_sub_title(); sp_ok = ("sunpug.io" in t0.lower()) and ("sunpug.io" in t1.lower()); no_dup = ("viewer" not in s1.lower()) and ("peak" not in s1.lower()); b_ok = hasattr(logs, "SUNPUG_BORDER_BANNER") and ("border-title-align: center" in logs.SonarApp.CSS); print(f"SUNPUG_IN_TITLE={sp_ok} NO_DUP_VIEWERS={no_dup} BORDER_BANNER={b_ok}"); print(f"LIVE_HEADER={t1} — {s1}")'
# ! .venv/bin/python -c 'import sys; sys.path.insert(0, "remotes/honeybot/scripts"); import terms; s = "Edit in vi during Web 2.0 with HitTail at hittail.com (Section VI. Tricks)"; out = terms.apply_inline_tts_terms(s); idem = (terms.apply_inline_tts_terms(out) == out); print(f"IDEMPOTENT={idem} OUT={out}")'
# ! HONEYBOT_DB_READONLY=1 .venv/bin/python -c 'import sys; sys.path.insert(0, "remotes/honeybot/scripts"); import forest; segs = [(i, " ".join(b[0][1].get("label", "").split()) if isinstance(b[0][1], dict) else str(b[0])) for i, b in enumerate(forest.STATION_SEGMENTS)]; has_arch = hasattr(forest, "ARCHIVED_STATION_BEADS"); print(f"COUNT={len(segs)} HAS_ARCHIVE={has_arch} BEADS={segs}")'

# # Context 5
# context.txt
# scripts/articles/editing_prompt.txt
# foo_files.py
# ! HONEYBOT_DB_READONLY=1 .venv/bin/python -c 'import sys; sys.path.insert(0, "remotes/honeybot/scripts"); import forest, stream; segs = [" ".join(b[0][1].get("label", "").split()) for b in forest.STATION_SEGMENTS]; arch = list(getattr(forest, "ARCHIVED_STATION_BEADS", {}).keys()); print(f"PITCH={stream.PITCH_INTERVAL} ACTIVE={segs} ARCHIVED={arch}")'
# ! HONEYBOT_DB_READONLY=1 .venv/bin/python -c 'import sys; sys.path.insert(0, "remotes/honeybot/scripts"); import stream; keys = ("tiktok", "pachinko", "rabbit", "optics"); res = {k: (" ".join(str(p.get("card", "")).split()), p.get("patronus") or p.get("window") or ("OPTICS_SLOT" if p.get("cues") else "")) for k in keys for p in [stream.trigger_station_bead_live(k, out_path=None)]}; print(f"BEAD_LOOKUP={res}")'
# ! .venv/bin/pytest -q remotes/honeybot/scripts/test_forest.py && (rg -ni 'title|headline|click|social|linkedin' scripts/articles/editing_prompt.txt || true)

# Context 6
context.txt
GLOSSARY.md
remotes/honeybot/scripts/stream.py
! .venv/bin/python -c 'import pathlib; txt = pathlib.Path("scripts/articles/editing_prompt.txt").read_text(encoding="utf-8"); r1 = "80/20 HUMAN HEADLINE RULE" in txt; r2 = "kitchen-sink" in txt.lower(); r3 = "Archaeologist from the Future" in txt; print(f"HEADLINE_RULE={r1} NO_KITCHEN_SINK={r2} ARCHAEOLOGIST_LENS={r3}")'
! .venv/bin/python -c 'import pathlib, re; txt = pathlib.Path("foo_files.py").read_text(encoding="utf-8"); p29 = "P0.29 YTWATCH DWELL-TIME" in txt; p08 = "12-hour VOD" in txt; ch9 = bool(re.search(r"(?m)^# remotes/honeybot/scripts/terms\.py\s+# <--", txt)); pbox = bool(re.search(r"(?m)^# remotes/honeybot/scripts/terms\.py\s+# \[", txt)); print(f"P0_29={p29} P0_8_GOOD_READ={p08} TERMS_CLAIMED={ch9} TERMS_IN_PAINTBOX={pbox}")'
! HONEYBOT_DB_READONLY=1 .venv/bin/python -c 'import importlib.util, io, pathlib, sys, unittest; sys.path.insert(0, "remotes/honeybot/scripts"); sys.path.insert(0, "."); spec = importlib.util.spec_from_file_location("test_forest", "remotes/honeybot/scripts/test_forest.py"); mod = importlib.util.module_from_spec(spec); spec.loader.exec_module(mod); suite = unittest.defaultTestLoader.loadTestsFromModule(mod); res = unittest.TextTestRunner(stream=io.StringIO(), verbosity=0).run(suite); fn_tests = [getattr(mod, k) for k in dir(mod) if k.startswith("test_") and callable(getattr(mod, k))]; [fn() for fn in fn_tests]; g = pathlib.Path("GLOSSARY.md").read_text(encoding="utf-8"); has_idic = ("Infinite Diversity" in g) or ("**IDIC**" in g); print(f"UNITTEST_RAN={res.testsRun} FN_TESTS={len(fn_tests)} OK={res.wasSuccessful()} GLOSSARY_HAS_IDIC={has_idic}")'
```

**3: CHANGE** (PATCHES): 

```diff
On branch main
Your branch is up to date with 'origin/main'.

nothing to commit, working tree clean

GIT repo clean. Take BEFORE reading, make CHANGE, record AFTER diff.
(nix) pipulate $ patch
(nix) pipulate $ app
✅ DETERMINISTIC PATCH APPLIED: Successfully mutated 'scripts/articles/editing_prompt.txt'.
✅ DETERMINISTIC PATCH APPLIED: Successfully mutated 'scripts/articles/editing_prompt.txt'.
✅ DETERMINISTIC PATCH APPLIED: Successfully mutated 'scripts/articles/editing_prompt.txt'.
✅ DETERMINISTIC PATCH APPLIED: Successfully mutated 'foo_files.py'.
✅ DETERMINISTIC PATCH APPLIED: Successfully mutated 'foo_files.py'.
✅ DETERMINISTIC PATCH APPLIED: Successfully mutated 'foo_files.py'.
✅ DETERMINISTIC PATCH APPLIED: Successfully mutated 'foo_files.py'.
(nix) pipulate $ d
diff --git a/foo_files.py b/foo_files.py
index dfe1032..65a5582 100644
--- a/foo_files.py
+++ b/foo_files.py
@@ -1050,6 +1050,7 @@ foo_files.py      #  <-- THIS file. Content compiler router. Makes it very meta.
 # remotes/honeybot/scripts/score.py           # <-- Where "Greetings Entity" slideshow reads on post-receive interrupts
 # remotes/honeybot/scripts/card.py            # <-- Just added for station identification breaks
 # remotes/honeybot/scripts/forest.py          # <-- Likewise, just added for the new storytelling system on Honeybot
+# remotes/honeybot/scripts/terms.py           # <-- Master Piper TTS ear-orthography table (`terms` alias), shared by Honeybot & local voice
 # remotes/honeybot/scripts/test_forest.py     # <-- Test Honeybot station identification sequence on Pipulate Prime
 # remotes/honeybot/scripts/logs.py            # <-- The TV Show is mostly Nginx `access.log` files tailed and piped through Python to colorize (this).
 # remotes/honeybot/scripts/content_loader.py  # <-- Tricky TV programming & scheduling stuff. Absolute versus relative timing. Loops. Interrupts.
@@ -1780,6 +1781,7 @@ MATCHBOOK_CHOP = r"""
 # ============================================================================
 # 🚨 PRIORITY 0: BOOT THE CONSULTANCY (REVENUE, LEAD-GEN, & PROOF SURFACES)
 # ============================================================================
+# - TODO (2026-11-11, P0.29 YTWATCH DWELL-TIME & CUE/WEEBO DROP-OFF CORRELATION): Stamp active `(article_slug, cue_idx, heading, active_overlay)` state in `remotes/honeybot/scripts/stream.py` alongside `ytwatch` viewer-delta transitions in `scripts/articles/common.py` and expose a bounded `ytlog --summary` receipt command so long-tail 1-to-N viewer watch-times and bounce points correlate directly against article sections and Weebo/Max Headroom popups. Gate: `ytlog --summary` prints per-article mean watch-time and overlay delta table from live JSONL telemetry.
 # - TODO (2026-11-10, P0.28 SVNP CONSULTING FLYWHEEL & 911 OPTICS DEED OUTREACH): Operationalize the Butterfly Net multi-client retainer mesh by running `apps/911_optics_workflow.py` against prospective client domains, delivering sealed `optics_deed.zip` wire-truth vs. hydrated-DOM audits alongside `qamy.ai` and `sunpug.io` self-verifying doors, and tracking reciprocal `VERIFY:RFC9110` and `DOOR:INSTALL` triggers on Honeybot. Gate: first outbound `optics_deed.zip` delivered to a prospective retainer client and witnessed in live telemetry.
 # - LANDED (2026-11-10, amended 2026-11-11 at deed 925, P0.27 PIPULATE PRIME FASTHTML REVERSE-TUNNEL SHOWCASE & SYNCHRONOUS SSH STAGE AUDIO PRESERVING HONEYBOT'S STATIC DMZ, deeds 887-925; commits 3106c2c, 69b568e, e059e1a, f96adda, dc8a8f4, f20e54b, 98511f3): Field-tested `scripts/ytstage.py` (`ytapp optics --wait` and `ytapp watch-breaks`) live on Honeybot `:10.0` YouTube broadcast over loopback-only `ssh -R 15001:127.0.0.1:5001` with `proc.pid` Sentinel Pause, `/tmp/pipulate_ytstage_audio.json` + `/tmp/pipulate_voice.lock.<uid>` synchronous SSH WAV streaming (`_active_ytstage_host`, `_play_wav_on_honeybot`, `speakDemoStepSynchronously`), 5 spoken Ghost Driver cues in `optics_test.json`, 22-member `optics_deed.zip` (`63,527 B`), and automatic port `15001` teardown (`# § TOP-LEVEL AUTO-TRIGGERS, CHILD-PID SENTINELS, & STDIN SSH SCRIPTS`).
 # - LANDED (2026-11-11, P0.26 ROUND-THE-HUDS OVERTURE & INTERMISSION PANEL HIGHLIGHT TOUR, NORMA HEADLINE ROUTING, & DRAMATIS PERSONAE INTRO, deeds 905-925; commits 98511f3, 9b644ad, 0836e31, df2f3cd, 3ad1f61, 840e3d6): Wired two-act `OVERTURE` and midpoint `INTERMISSION` tours in `score.py`, `stream.py`, `logs.py`, and `forest.py` (`hud_focus` + `.tour_focus` heavy `#ffd700` gold borders cycling `#log_stream` -> `#js_panel` -> `#md_panel` -> `#middle_stage` with Norma Centroid, Mike-E, and Shipmunk check-ins), `[[HEADING:...]]` Norma Centroid headline routing in `content_loader.py`, `DON'T JOIN MY DISCORD | BEWARE SUNPUG.IO` Map Facade billboard, BGM speaker-role preservation across intermission, and `__main__` hot-reload thread-binding protection (`# § NEVER COPY MODULE-GLOBAL FUNCTIONS ACROSS __MAIN__ HOT-RELOADS`).
@@ -1799,7 +1801,7 @@ MATCHBOOK_CHOP = r"""
 # - LANDED (2026-10-21, amended 2026-11-01 at deed 557, P0.5 ZERO-DELAY PRE-RENDERED 138X38 CENTERED ANSI BUFFER FOR HONEYBOT RICH REPORT WINDOWS, commits 94a8f3c, 8c4b419, 04544fd): Added `HONEYBOT_DB_READONLY=1` fast import path in `remotes/honeybot/scripts/db.py`, `prerender_station_report_ansi()` in `forest.py` (`138x38` Alacritty frame with `REPORT_H_MARGIN = 3`, `REPORT_V_MARGIN = 2`, and `Align.center(..., vertical="middle")`), `{x=20, y=20}` unclamped initial spawn in `imports/ascii_displays.py`, and pre-rendered `/tmp/honeybot_report_<mode>.ansi` `cat` launch in `stream.py`.
 # - TODO (2026-10-20, P0.6 HITTAIL 2.0 SOVEREIGN TITLE RADAR): Combine keyless YouTube channel performance (`common.py --broadcast top` over `/@MikeLevin/streams` and `/@MikeLevin/videos`), Google Search Console near-win queries (`position 5-20`), Google Trends, and Honeybot `honeybot.db` crawler velocity into a pre-publish title-coaching feedback report before `article` / `yttitle` generation.
 # - TODO (2026-10-21, P0.7 FULL RFC 9421 ED25519 SIGNATURE VERIFICATION & NEW USER-AGENT CALLOUTS): Log `$http_signature_input` and `$http_signature` alongside `$http_signature_agent` in Honeybot Nginx, verify Ed25519 signatures against `/.well-known/http-message-signatures-directory` JWKS, and wire `db.get_new_user_agents_since()` into station breaks to call out newly discovered bot tokens.
-# - TODO (2026-10-20, P0.8 PIPER ARTICLE AUDIOIZER & VOICE PICKER): Build an idempotent newest-first post-publish script (`scripts/articles/audioizer.py`) that synthesizes published articles into downloadable audio files (`/assets/audio/<slug>.mp3` or `.wav`) with multi-voice selection and renders a native HTML5 `<audio controls>` bar in `_layouts/post.html`.
+# - TODO (2026-10-20, updated 2026-11-11, P0.8 PIPER "GOOD READ" ARTICLE AUDIOIZER & HTML5 PLAYER): Build an idempotent newest-first post-publish script (`scripts/articles/audioizer.py`) that synthesizes a clean "Good Read" / Archaeologist-from-the-Future edition of each post into static `/assets/audio/<slug>.mp3` or `.wav` with 3-voice cast selection and native HTML5 `<audio controls>` in `_layouts/post.html` — removing paid Google Workspace Docs audio lock-in and surviving YouTube's 12-hour VOD limit. Gate: `_layouts/post.html` plays a local `/assets/audio/<slug>.mp3` on mobile and desktop with zero external dependencies.
 # - TODO (2026-10-21, P0.9 TWO-STAGE PARAMETRIC vs. RAG TRACER-DYE ASSAY & YTPEBBLE RECIPROCAL VERIFIER): Extend `scripts/audit_dye.py` and `ytpebble` to verify reciprocal crawler fetches (`<key>.txt` IndexNow verification, `bingbot`, `archive.org_bot`, `ExaUser`, `DuckAssistBot`, `Claude-User`, `OAI-SearchBot`) in `honeybot.db` and distinguish closed-book Parametric Memory recall (zero origin hits) from open-book 2nd-stage RAG lookups (live dyed origin hits).
 # - TODO (2026-10-21, P0.10 KINDLE-STYLE LIVE READ-ALONG CAPTION TICKER & SANITIZER MATHJAX DOUBLER): Have `Narrator` in `stream.py` write the currently spoken sentence/paragraph to `/tmp/honeybot_now_reading.json` for a synchronized closed-caption read-along panel on the broadcast HUD, and port `init.lua`'s shadow-masked `$expr$` -> `$$expr$$` MathJax pair-walker into `scripts/articles/sanitizer.py`.
 # - LANDED (2026-10-21, P0.11 ONLINE STREAMING ML WITH RIVER & THE ! MARKOV CLI DIRECTIVE, deed 156): Built `scripts/markov.py` + `markovCommand` in `flake.nix` using `river` (`EWMean`, `Var`, `ADWIN`, `StandardScaler | LinearRegression`) and 1st/2nd-order Markov transition matrices over `_posts/_context/*.json` shards (`! markov`) and generic numeric/categorical series files (`markov <file>` / `--stdin`); OWED: wire `markov` into Honeybot `stream.py` station breaks to comment on newly discovered AI-bot User-Agents and anomalous crawler path transitions.
@@ -2256,7 +2258,6 @@ MATCHBOOK_CHOP = r"""
 # remotes/honeybot/queries/hydration_selftest.sql  # [1,204 tokens | 4,235 bytes]
 # remotes/honeybot/queries/intel_markdown_affinity.sql  # [434 tokens | 1,685 bytes]
 # remotes/honeybot/queries/ua_variants.sql  # [645 tokens | 2,535 bytes]
-# remotes/honeybot/scripts/terms.py  # [4,260 tokens | 11,807 bytes]
 # scripts/articles/build_hierarchy.py  # [2,460 tokens | 10,361 bytes]
 # scripts/articles/build_navgraph.py  # [2,119 tokens | 9,029 bytes]
 # scripts/articles/execute_massive_prompt.py  # [491 tokens | 2,209 bytes]
diff --git a/scripts/articles/editing_prompt.txt b/scripts/articles/editing_prompt.txt
index cdf0791..35462d4 100644
--- a/scripts/articles/editing_prompt.txt
+++ b/scripts/articles/editing_prompt.txt
@@ -10,6 +10,7 @@ You are an AI Content Architect. Your task is not to write a report, but to gene
 Use all lower-case and hyphens in permalinks
 When describing the passion represented here, you may refer to it as a blueprint, essay, treatise, methodology, philosophy or way. NEVER refer to it as a manifesto which has a negative connotation.
 Every one of these covers some "critical" or "pivotal" point in the development of, yadda yadda. Don't play that up, it's become repetitive.
+**80/20 HUMAN HEADLINE RULE (NO KITCHEN-SINK TITLES):** You are writing headlines for emotional, time-poor human beings scrolling LinkedIn, X, or Facebook — NOT a syllabus for an LLM. Never write "covering all our bases" compound titles that cram three or four topics into a list (`"Topic A: Tool B, Concept C, and Metaphor D"`). Find the SINGLE most compelling, counter-intuitive, or high-stakes 80/20 insight in the piece — the genuine reason a smart practitioner stops scrolling and clicks — and build the entire headline around that one hook with total integrity (never hollow clickbait; the article must deliver on the promise). Keep titles punchy (~45-70 characters, at most one colon or none at all), lead with the human problem, cost, or revelation before internal project names, and make sure it reads aloud naturally.
 
 **Publishing-target editorial context:** [INSERT EDITORIAL CONTEXT]
 
@@ -94,9 +95,9 @@ The JSON object must conform to the following schema:
   * promotional_tweet: Write promotional prose for X.com and put the literal [ARTICLE_URL] on its own line. Do not supply any other URL or Markdown link. articleizer.py replaces this marker with the post's canonical URL, or removes it when the target has no base URL. Include the 2 or 3 best hashtags, space allowing. Budget at most 280 characters INCLUDING the final URL, whose shape is [INSERT BASE URL][INSERT PERMALINK PATTERN].
   * hero_image_prompt: Ride directly on the synthesis of your preferred title, slug, and description to write ONE vivid image-generation prompt for a wide 16:9 full-bleed widescreen illustration that captures the article's central technical metaphor. Keep the primary focal subject vertically centered so the scene survives a 1.91:1 (1200x630) horizontal crop, while extending the artwork and dark obsidian-slate (#111111) environment continuously all the way to every canvas edge with high-contrast lighting and graphic-novel ink-and-wash precision. Do NOT mention "safe zones" or "banners" in the prompt, and end with: "Full-bleed edge-to-edge composition filling 100% of the canvas with no borders, no frames, no matting, no margins, and no text overlays or lettering."
   * hero_image_alt: Write a concise, descriptive one-sentence alt-text string (under 125 characters, no double quotes) describing the visual scene in hero_image_prompt for Open Graph and screen-reader accessibility.
-  * title_brainstorm: Populate with 3-5 title ideas, rationales and filenames. The first entry is the preferred choice and the sole source of the published slug. Each filename must be a lowercase alphanumeric/hyphen slug ending in .md, with no folder or date prefix; the writer adds the date.
+  * title_brainstorm: Populate with 3-5 distinct, scroll-stopping human headline ideas, rationales, and filenames tested across genuine social-feed psychology (e.g., 1. sharp contrarian cost/pain hook for LinkedIn, 2. "surprising discovery" curiosity hook for X/Facebook, 3. direct practitioner proof hook — never multi-clause kitchen-sink inventories). Rank the single strongest high-integrity click-worthy headline first (`title_brainstorm[0]`, matching `yaml_updates.title`), as it is the preferred choice and the sole source of the published slug. Each filename must be a concise 4-7 word lowercase alphanumeric/hyphen slug ending in .md, with no folder or date prefix; the writer adds the date.
   * content_potential_and_polish: Structure the "Core Strengths" and "Constructive Polish" suggestions here.  
-  * ai_editorial_take: Populate with your AI perspective on the entry's potential. What surprised you most? Don't use the exact same thing as the previous AI participating in the dialogue. Find some absolutely new angle or perspective that isn't mentioned yet in the article.
+  * ai_editorial_take: Populate with your AI perspective on the entry's potential, framed like an Archaeologist from the Future uncovering a surprising engineering artifact ("And then the surprising thing the author did next was..."). What surprised you most? Don't use the exact same thing as the previous AI participating in the dialogue. Find some absolutely new angle or perspective that isn't mentioned yet in the article.
   * next_step_prompts: Populate with your 1-2 suggestions for subsequent AI tasks.
 
 You are an AI Content Architect. Your task is not to write a report, but to generate a single, valid JSON object that serves as a blueprint for editing a document. You will perform the same deep analysis as before, but your final output must be structured data, not prose. Every piece of generated content must be placed into the correct key within the JSON schema provided. Precision and adherence to the schema are paramount.  
(nix) pipulate $ m
📝 Committing: feat: Introduce context-compiler router and share honeybot TTS ear-orthography table
[main 5238e4b] feat: Introduce context-compiler router and share honeybot TTS ear-orthography table
 2 files changed, 6 insertions(+), 4 deletions(-)
(nix) pipulate $ git push
Enumerating objects: 11, done.
Counting objects: 100% (11/11), done.
Delta compression using up to 48 threads
Compressing objects: 100% (6/6), done.
Writing objects: 100% (6/6), 2.19 KiB | 187.00 KiB/s, done.
Total 6 (delta 5), reused 0 (delta 0), pack-reused 0 (from 0)
remote: Resolving deltas: 100% (5/5), completed with 5 local objects.
To github.com:pipulate/pipulate.git
   7fffa7b..5238e4b  main -> main
(nix) pipulate $ 
```

Ignition: often "exit", "nix develop". Instructions may vary.

Ignition is automatic.

**4: PROMPT**: 

Verify the AFTER straddle receipts for Chisel Strike 4 (`HEADLINE_RULE=True NO_KITCHEN_SINK=True ARCHAEOLOGIST_LENS=True`, `P0_29=True P0_8_GOOD_READ=True TERMS_CLAIMED=True TERMS_IN_PAINTBOX=False`, `test_forest.py` passing, and `GLOSSARY_HAS_IDIC` status).
Then execute the final closing polish on `GLOSSARY.md` and `remotes/honeybot/scripts/stream.py`:
1. Add `IDIC (Infinite Diversity in Infinite Combinations)` to `GLOSSARY.md` (connecting the portable `qamy.ai` / book-ore archive and *Archaeologist from the Future* projections to why there is no single static tree-killing book, only infinite tailored combinations from one verified plain-text substrate).
2. Fix `trigger_station_bead_live()` in `remotes/honeybot/scripts/stream.py` so lead `CARD` labels and `OPTICS_SLOT` cues match ahead of shared `CONSULTING_CTA_BEAT` text (`--bead optics` resolving cleanly to `('911 LLM OPTICS', 'OPTICS_SLOT')`), and prepare us to dismount and publish this article (so the upgraded `editing_prompt.txt` gets its live maiden flight on this very post!).

**5: DELIVERABLE**: 

What does "DONE" look like?

And it's occurring to me that showing a Pipulate FastHTML app like 911 LLM
Optics is always the punch-line of a story-read and so the consistent reading
length of the Archaeologist from the Future's story or (or whatever we;re going
to name it) is important.

We're making a formula here.

People will always know what to expect to one degree, and it will be in
bite-sized chunks, not quite a Max Headroom blipvert but far shorter than what
I'm currently doing.

Get in, get out.

Leave 'em satisfied.

For right now, let's figure out what happened to that comfort audio, or as a
practical alternative just do something Unixy to make sure it's never not
playing as intended regardless of what's going on. It'll come out in the wash
over time and idempotent defenses to assure the correct behavior regardless or
whatever the right terminology is here is the practical thing.

## Hunting the Module-Level atexit Reaper That Killed Comfort Audio

**Gemini 4 Carbon High**: Context verified.

**TL;DR**: Chisel Strike 4's straddle receipts are green (`HEADLINE_RULE=True NO_KITCHEN_SINK=True ARCHAEOLOGIST_LENS=True`, `P0_29=True P0_8_GOOD_READ=True TERMS_CLAIMED=True TERMS_IN_PAINTBOX=False`, Codex coverage up to `222/295`, and `GLOSSARY_HAS_IDIC=False` establishing our clean BEFORE baseline). Tracing `remotes/honeybot/scripts/stream.py` also exposed **why `dripulate.wav` kept dying**: `atexit.register(stop_storytime_bgm)` sat at **module import level** (line 977) instead of inside `main()`, so *any* short-lived helper or duplicate watchdog check importing or invoking `stream.py` ran `stop_storytime_bgm()` on `sys.exit(0)` and `SIGKILL`ed the live broadcast's BGM across `/proc`. Below, our closing polish fixes that `atexit` assassin, adds a Unixy **desired-state BGM reconciler** (`_bgm_desired` + `ensure_storytime_bgm_alive()` every 10s on `Heartbeat` and after every station break/cue), fixes `--bead optics` lookup precedence, and banks **IDIC** in `GLOSSARY.md` so this ride is ready to dismount and publish.

---

### 1. Chisel Strike 4 Receipt Audit

* **Headline & Archaeologist Prompt (`editing_prompt.txt`):** Flipped cleanly from `False/False/False` to `HEADLINE_RULE=True NO_KITCHEN_SINK=True ARCHAEOLOGIST_LENS=True`—ready for its maiden flight when you run `article` on this post.
* **Todo & Paintbox Ledger (`foo_files.py`):** Flipped cleanly to `P0_29=True P0_8_GOOD_READ=True TERMS_CLAIMED=True TERMS_IN_PAINTBOX=False` (`222/295` tracked files claimed).
* **`test_forest.py` & `GLOSSARY_HAS_IDIC`:** `test_forest.py` imported cleanly with zero errors under `HONEYBOT_DB_READONLY=1` (`OK=True`, `0` `TestCase` subclasses because its checks run top-level/`__main__`), and `GLOSSARY_HAS_IDIC=False` sets our BEFORE baseline for banking `IDIC` below.

---

### 2. What Killed Comfort Audio (`dripulate.wav`) — And the Unixy Desired-State Cure

Reading `remotes/honeybot/scripts/stream.py` top-to-bottom caught a classic cross-process trap plus the exact Unix pattern you asked for (**idempotent desired-state reconciliation**, the same supervisor loop behind `systemd` and NixOS):

1. **The Root Cause (Line 977 Module-Level `atexit` Assassin):**
* Unlike `atexit.register(_reap_orphaned_tts_and_overlays)`, which lived safely inside `main()` *after* `acquire_singleton_lock()`, `atexit.register(stop_storytime_bgm)` was registered at **module import time** (line 977).
* Whenever any short-lived process ran `stream.py --conjure-media`, `stream.py --report`, `stream.py --bead`, imported `stream`, or exited early as a duplicate watchdog child in `acquire_singleton_lock()`, Python fired `stop_storytime_bgm()` on exit—sweeping `/proc/[0-9]*/cmdline` and `SIGKILL`ing the singleton owner's `dripulate.wav` loop.

2. **Three-Layer Unixy Defense (`stream.py`):**
* **Singleton Ownership Gate (`_is_singleton_owner`):** `atexit.register(stop_storytime_bgm)` moves inside `main()` after `flock` succeeds, and `stop_storytime_bgm()` refuses to sweep `/proc` from non-owner processes.
* **Desired-State Reconciler (`_bgm_desired` + `ensure_storytime_bgm_alive()`):** `("BGM", "START")` latches `_bgm_desired = True` and `("BGM", "STOP")` / standby / teardown clears it to `False`. `Heartbeat` wakes every `10s` (still speaking `"Signal check"` only every `90s`) and calls `ensure_storytime_bgm_alive()`, which also runs after every `run_station_break()`, `run_live_message()`, and `dispatch_cue()`—respawning `dripulate.wav` automatically if anything ever kills it and unfreezing via `SIGCONT` if a pause ever stranded it.
* **Corked-Sink Guard (`timeout` + `--no-audio`):** `start_storytime_bgm()` reads `dripulate.wav`'s exact duration via stdlib `wave` and wraps each `aplay` pass in `timeout <dur+15>` so a corked ALSA/PipeWire sink recycles instead of hanging, while static `.jpeg`/`.png` `mpv` overlays pass `--no-audio` so hero-image popups never touch the audio sink.

---

### 3. The Showrunner's Clock (Why the Formula Works)

Your *Archaeologist from the Future* insight turns raw laboratory ramblings and public broadcast polish from rivals into stages of one **IDIC** pipeline:

```text
  COLD OPEN (~60s)          THE THREE CHISELS (~5m)         THE PUNCHLINE (~90s)
 ┌─────────────────────┐   ┌───────────────────────────┐   ┌─────────────────────────┐
 │ "And then the       │──▶│ Problem -> Wire Receipt ->│──▶│ Live FastHTML App Demo  │
 │ surprising thing he │   │ Edge Fix (distilled from  │   │ (`911 LLM Optics` @     │
 │ did next was..."    │   │ the sealed book-ore deed) │   │ `SunPug.io` on screen)  │
 └─────────────────────┘   └───────────────────────────┘   └─────────────────────────┘
```

Instead of a frenetic blipvert or a 12-hour VOD casualty, a repeatable **~7-to-8-minute episode** gives every viewer a predictable contract—*get in, witness the receipt, see the FOSS app pay it off, get out satisfied*—while the static HTML5 *"Good Read"* player (`P0.8`) serves that exact cut on mobile and desktop with zero Workspace paywall.

---

### Actionable Next-Steps Plan (The 5-Car Train)

In `(1) PROBES` below:

* **Probe 1** straddles `GLOSSARY.md` for `IDIC (Infinite Diversity in Infinite Combinations)` in both the Five Realms map and the alphabetical Lexicon, plus its `RENT THIS PAYS` clause (`False/False/False` before -> `True/True/True` after).
* **Probe 2** straddles `stream.trigger_station_bead_live(..., out_path=None)` across `"optics"`, `"rabbit"`, `"assemble"`, `"overview"`, `"bimodal"`, `"tiktok"`, and `"pachinko"` (`OPTICS_OK=False` before -> `OPTICS_OK=True` after).
* **Probe 3** straddles `stream.py`'s AST and BGM state machine (`TOP_LEVEL_ATEXIT=1 HAS_RECONCILER=False` before -> `TOP_LEVEL_ATEXIT=0 HAS_RECONCILER=True DESIRED_LIFECYCLE=(True, False)` after).

#### (1) PROBES

`(nix) pipulate $`

```bash
.venv/bin/python -c 'import pathlib; g = pathlib.Path("GLOSSARY.md").read_text(encoding="utf-8"); r_map = "IDIC (Infinite Diversity in Infinite Combinations)" in g.split("## The Lexicon")[0]; r_lex = "- **IDIC (Infinite Diversity in Infinite Combinations)**" in g; r_rent = "RENT THIS PAYS" in g.split("- **IDIC")[1].split("\n- **Ignition**")[0] if r_lex else False; print(f"IDIC_IN_MAP={r_map} IDIC_IN_LEXICON={r_lex} IDIC_PAYS_RENT={r_rent}")'
HONEYBOT_DB_READONLY=1 .venv/bin/python -c 'import sys; sys.path.insert(0, "remotes/honeybot/scripts"); import stream; keys = ("optics", "rabbit", "assemble", "overview", "bimodal", "tiktok", "pachinko"); res = {k: (" ".join(str(p.get("card", "")).split()), p.get("patronus") or p.get("window") or ("OPTICS_SLOT" if p.get("cues") else "")) for k in keys for p in [stream.trigger_station_bead_live(k, out_path=None)]}; ok = res["optics"] == ("911 LLM OPTICS", "OPTICS_SLOT"); print(f"OPTICS_OK={ok} LOOKUP={res}")'
HONEYBOT_NO_AUDIO=1 HONEYBOT_DB_READONLY=1 .venv/bin/python -c 'import ast, pathlib, sys; sys.path.insert(0, "remotes/honeybot/scripts"); tree = ast.parse(pathlib.Path("remotes/honeybot/scripts/stream.py").read_text(encoding="utf-8")); top_atexit = sum(1 for n in tree.body if isinstance(n, ast.Expr) and "atexit" in ast.dump(n)); import stream; has_rec = hasattr(stream, "ensure_storytime_bgm_alive"); stream.start_storytime_bgm(); d1 = getattr(stream, "_bgm_desired", None); stream.stop_storytime_bgm(); d2 = getattr(stream, "_bgm_desired", None); print(f"TOP_LEVEL_ATEXIT={top_atexit} HAS_RECONCILER={has_rec} DESIRED_LIFECYCLE={(d1, d2)}")'
```

#### (2) NEXT CONTEXT

```text
context.txt
! .venv/bin/python -c 'import pathlib; g = pathlib.Path("GLOSSARY.md").read_text(encoding="utf-8"); r_map = "IDIC (Infinite Diversity in Infinite Combinations)" in g.split("## The Lexicon")[0]; r_lex = "- **IDIC (Infinite Diversity in Infinite Combinations)**" in g; r_rent = "RENT THIS PAYS" in g.split("- **IDIC")[1].split("\n- **Ignition**")[0] if r_lex else False; print(f"IDIC_IN_MAP={r_map} IDIC_IN_LEXICON={r_lex} IDIC_PAYS_RENT={r_rent}")'
! HONEYBOT_DB_READONLY=1 .venv/bin/python -c 'import sys; sys.path.insert(0, "remotes/honeybot/scripts"); import stream; keys = ("optics", "rabbit", "assemble", "overview", "bimodal", "tiktok", "pachinko"); res = {k: (" ".join(str(p.get("card", "")).split()), p.get("patronus") or p.get("window") or ("OPTICS_SLOT" if p.get("cues") else "")) for k in keys for p in [stream.trigger_station_bead_live(k, out_path=None)]}; ok = res["optics"] == ("911 LLM OPTICS", "OPTICS_SLOT"); print(f"OPTICS_OK={ok} LOOKUP={res}")'
! HONEYBOT_NO_AUDIO=1 HONEYBOT_DB_READONLY=1 .venv/bin/python -c 'import ast, pathlib, sys; sys.path.insert(0, "remotes/honeybot/scripts"); tree = ast.parse(pathlib.Path("remotes/honeybot/scripts/stream.py").read_text(encoding="utf-8")); top_atexit = sum(1 for n in tree.body if isinstance(n, ast.Expr) and "atexit" in ast.dump(n)); import stream; has_rec = hasattr(stream, "ensure_storytime_bgm_alive"); stream.start_storytime_bgm(); d1 = getattr(stream, "_bgm_desired", None); stream.stop_storytime_bgm(); d2 = getattr(stream, "_bgm_desired", None); print(f"TOP_LEVEL_ATEXIT={top_atexit} HAS_RECONCILER={has_rec} DESIRED_LIFECYCLE={(d1, d2)}")'
```

#### (3) PATCHES

**Car 1 — Bank `IDIC` in `GLOSSARY.md`, Fix Top-Level `atexit` BGM Assassination + Add Desired-State BGM Reconciler, & Fix `--bead optics` Precedence in `remotes/honeybot/scripts/stream.py`:**

```text
Target: GLOSSARY.md
[[[SEARCH]]]
5. **The Forever Machine & Sovereignty (How the Work Outlives Vendor Churn):**
   **LPvg / NPvg**, **Graft, not seed**, **Cohesion-tension**, **Magic cookie**,
   **Compostable**, **Lindy**, **Butterfly Net**, **Mammal in a Hulkbuster Suit
   (Planck's Funeral)**, **Three-tier workspace**, **Myelination**, and
   **Pascal's Wager (Playing to the Bleachers)**.
[[[DIVIDER]]]
5. **The Forever Machine & Sovereignty (How the Work Outlives Vendor Churn):**
   **LPvg / NPvg**, **Graft, not seed**, **Cohesion-tension**, **Magic cookie**,
   **Compostable**, **Lindy**, **Butterfly Net**, **Mammal in a Hulkbuster Suit
   (Planck's Funeral)**, **IDIC (Infinite Diversity in Infinite Combinations)**,
   **Three-tier workspace**, **Myelination**, and **Pascal's Wager (Playing to
   the Bleachers)**.
[[[REPLACE]]]

Target: GLOSSARY.md
[[[SEARCH]]]
  the app calls the script, the script calls the connectors. Seeded
  2026-07-25 inside the THREE-TIER earmark; vocabulary since 2026-09-04.
- **Ignition** -- *making patched code actually run.* Completes the Patch beat;
[[[DIVIDER]]]
  the app calls the script, the script calls the connectors. Seeded
  2026-07-25 inside the THREE-TIER earmark; vocabulary since 2026-09-04.
- **IDIC (Infinite Diversity in Infinite Combinations)** -- *one verified
  plain-text archive projected into infinite reader-specific editions instead of
  one static dead-tree book.* In Gene Roddenberry's *Star Trek* (*"Is There in
  Truth No Beauty?"*, 1968), Vulcan philosophy celebrates *Infinite Diversity in
  Infinite Combinations* -- truth and beauty emerging from the interplay of
  distinct forms rather than a single frozen canon. Here, there is deliberately
  never one static, tree-killing book that starts decaying the day ink hits
  paper; instead, the immutable `.git` book-ore, `_posts/_context/*.json`
  holographic shards, and sealed `qamy.ai.zip` cartridges form a generative
  CliffsNotes-ready substrate. Drop that archive into any AI or deterministic
  publisher to project the exact lens the moment requires: an executive brief, a
  seven-minute *Archaeologist from the Future* ("And then the surprising thing
  he did next was...") episode ending on a live `911 LLM Optics` payoff, or a
  zero-paywall HTML5 `<audio controls>` "Good Read" edition. RENT THIS PAYS: it
  predicts that forcing raw stream-of-consciousness lab transcripts and tight
  public storytelling into one compromise document ruins both, whereas keeping
  un-retconned wire receipts on the inert substrate lets every downstream cut
  stay punchy, formulaic, and tailored without losing provenance. Sibling of
  Inert / reactive substrate, The Ledger-Separation Rule, and Exposition
  (Tevye's Rule). Banked 2026-11-11, articulation-banked.
- **Ignition** -- *making patched code actually run.* Completes the Patch beat;
[[[REPLACE]]]

Target: remotes/honeybot/scripts/stream.py
[[[SEARCH]]]
# --- Process Singleton ---
STREAM_LOCK_PATH = "/tmp/honeybot-stream.py.lock"
_stream_lock_handle = None
_shutting_down = threading.Event()
_graceful_reboot_requested = False
[[[DIVIDER]]]
# --- Process Singleton ---
STREAM_LOCK_PATH = "/tmp/honeybot-stream.py.lock"
_stream_lock_handle = None
_is_singleton_owner = False
_shutting_down = threading.Event()
_graceful_reboot_requested = False
[[[REPLACE]]]

Target: remotes/honeybot/scripts/stream.py
[[[SEARCH]]]
def acquire_singleton_lock():
    """Ensure only one stream.py process owns the Honeybot visual/audio surface."""
    global _stream_lock_handle
[[[DIVIDER]]]
def acquire_singleton_lock():
    """Ensure only one stream.py process owns the Honeybot visual/audio surface."""
    global _stream_lock_handle, _is_singleton_owner
[[[REPLACE]]]

Target: remotes/honeybot/scripts/stream.py
[[[SEARCH]]]
    _stream_lock_handle.seek(0)
    _stream_lock_handle.truncate()
    _stream_lock_handle.write(str(os.getpid()))
    _stream_lock_handle.flush()
[[[DIVIDER]]]
    _stream_lock_handle.seek(0)
    _stream_lock_handle.truncate()
    _stream_lock_handle.write(str(os.getpid()))
    _stream_lock_handle.flush()
    _is_singleton_owner = True
[[[REPLACE]]]

Target: remotes/honeybot/scripts/stream.py
[[[SEARCH]]]
    def run(self):
        while not self.stop_event.is_set():
            if self.stop_event.wait(self.interval):
                break

            if not narrator.exclusive_mode.is_set():
                now = datetime.datetime.now().strftime("%H:%M:%S")
                narrator.say(f"Signal check. The time is {now}.")
[[[DIVIDER]]]
    def run(self):
        last_signal = time.monotonic()
        poll_sec = min(10.0, float(self.interval))
        while not self.stop_event.is_set():
            if self.stop_event.wait(poll_sec):
                break
            ensure_storytime_bgm_alive()
            if (time.monotonic() - last_signal) >= self.interval:
                last_signal = time.monotonic()
                if not narrator.exclusive_mode.is_set():
                    now = datetime.datetime.now().strftime("%H:%M:%S")
                    narrator.say(f"Signal check. The time is {now}.")
[[[REPLACE]]]

Target: remotes/honeybot/scripts/stream.py
[[[SEARCH]]]
BGM_FILE = next((p for p in _BGM_CANDIDATES if p.exists()), _BGM_CANDIDATES[0])
BGM_MARKER = "honeybot-storytime-bgm"
_bgm_proc = None

def stop_storytime_bgm(proc=None):
    """Idempotently kill any running Storytime BGM loop (tracked process group + /proc sweep)."""
    global _bgm_proc
    for target_p in (proc, _bgm_proc):
        if target_p is not None:
            try:
                os.killpg(os.getpgid(target_p.pid), signal.SIGKILL)
            except Exception:
                try:
                    target_p.kill()
                except Exception:
                    pass
    _bgm_proc = None
    my_pid = os.getpid()
    for p in sorted(Path("/proc").glob("[0-9]*/cmdline")):
        try:
            pid = int(p.parent.name)
            if pid == my_pid:
                continue
            raw = p.read_bytes().replace(b"\x00", b" ").decode("utf-8", errors="ignore")
            if BGM_MARKER in raw or ("aplay" in raw and "dripulate.wav" in raw):
                try:
                    os.killpg(os.getpgid(pid), signal.SIGKILL)
                except Exception:
                    pass
                try:
                    os.kill(pid, signal.SIGKILL)
                except Exception:
                    pass
        except Exception:
            continue

def start_storytime_bgm():
    """Kill any prior BGM instance, then start a single fresh low-volume ambient loop."""
    global _bgm_proc
    stop_storytime_bgm()
    if os.environ.get("HONEYBOT_NO_AUDIO") == "1":
        return None
    bgm_path = next((p for p in _BGM_CANDIDATES if p.exists()), BGM_FILE)
    if not bgm_path.exists():
        return None
    try:
        _bgm_proc = subprocess.Popen(
            ["sh", "-c", f'while :; do aplay -q -D default "{bgm_path}"; sleep 0.2; done # {BGM_MARKER}'],
            stdout=subprocess.DEVNULL,
            stderr=subprocess.DEVNULL,
            preexec_fn=os.setsid,
        )
        return _bgm_proc
    except Exception:
        _bgm_proc = None
        return None

atexit.register(stop_storytime_bgm)
[[[DIVIDER]]]
BGM_FILE = next((p for p in _BGM_CANDIDATES if p.exists()), _BGM_CANDIDATES[0])
BGM_MARKER = "honeybot-storytime-bgm"
_bgm_proc = None
_bgm_desired = False

def _bgm_is_alive() -> bool:
    """True when a Storytime BGM shell/aplay loop is alive and not a zombie."""
    if _bgm_proc is not None and _bgm_proc.poll() is None:
        return True
    my_pid = os.getpid()
    for p in sorted(Path("/proc").glob("[0-9]*/cmdline")):
        try:
            pid = int(p.parent.name)
            if pid == my_pid:
                continue
            raw = p.read_bytes().replace(b"\x00", b" ").decode("utf-8", errors="ignore")
            if BGM_MARKER in raw or ("aplay" in raw and "dripulate.wav" in raw):
                stat_txt = (p.parent / "stat").read_text(encoding="utf-8", errors="ignore")
                if ") Z " not in stat_txt:
                    return True
        except Exception:
            continue
    return False

def stop_storytime_bgm(proc=None, clear_desired: bool = True):
    """Idempotently kill any running Storytime BGM loop (singleton-owner guarded /proc sweep)."""
    global _bgm_proc, _bgm_desired
    if clear_desired:
        _bgm_desired = False
    for target_p in (proc, _bgm_proc):
        if target_p is not None:
            try:
                os.killpg(os.getpgid(target_p.pid), signal.SIGKILL)
            except Exception:
                try:
                    target_p.kill()
                except Exception:
                    pass
    _bgm_proc = None
    if not _is_singleton_owner and proc is None:
        return
    my_pid = os.getpid()
    for p in sorted(Path("/proc").glob("[0-9]*/cmdline")):
        try:
            pid = int(p.parent.name)
            if pid == my_pid:
                continue
            raw = p.read_bytes().replace(b"\x00", b" ").decode("utf-8", errors="ignore")
            if BGM_MARKER in raw or ("aplay" in raw and "dripulate.wav" in raw):
                try:
                    os.killpg(os.getpgid(pid), signal.SIGKILL)
                except Exception:
                    pass
                try:
                    os.kill(pid, signal.SIGKILL)
                except Exception:
                    pass
        except Exception:
            continue

def start_storytime_bgm():
    """Record _bgm_desired=True, reap any prior loop, and start a timeout-guarded ambient loop."""
    global _bgm_proc, _bgm_desired
    stop_storytime_bgm(clear_desired=False)
    _bgm_desired = True
    if os.environ.get("HONEYBOT_NO_AUDIO") == "1":
        return None
    bgm_path = next((p for p in _BGM_CANDIDATES if p.exists()), BGM_FILE)
    if not bgm_path.exists():
        return None
    aplay_prefix = ""
    if shutil.which("timeout"):
        try:
            import wave
            with wave.open(str(bgm_path), "rb") as wf:
                dur_s = wf.getnframes() / float(max(1, wf.getframerate()))
            if dur_s > 1.0:
                aplay_prefix = f"timeout {int(dur_s) + 15} "
        except Exception:
            pass
    try:
        _bgm_proc = subprocess.Popen(
            ["sh", "-c", f'while :; do {aplay_prefix}aplay -q -D default "{bgm_path}"; sleep 0.2; done # {BGM_MARKER}'],
            stdout=subprocess.DEVNULL,
            stderr=subprocess.DEVNULL,
            preexec_fn=os.setsid,
        )
        return _bgm_proc
    except Exception:
        _bgm_proc = None
        return None

def ensure_storytime_bgm_alive() -> bool:
    """Idempotent desired-state reconciler: keep dripulate.wav playing whenever _bgm_desired is True."""
    if (
        not _bgm_desired
        or _shutting_down.is_set()
        or os.environ.get("HONEYBOT_NO_AUDIO") == "1"
        or Path(WEEBO_STAGE_PAUSE_FILE).exists()
    ):
        return False
    if _bgm_is_alive():
        if _bgm_proc is not None and _bgm_proc.poll() is None:
            try:
                os.killpg(os.getpgid(_bgm_proc.pid), signal.SIGCONT)
            except Exception:
                pass
        return True
    return start_storytime_bgm() is not None
[[[REPLACE]]]

Target: remotes/honeybot/scripts/stream.py
[[[SEARCH]]]
                f"--image-display-duration={duration:.1f}",
                "--keep-open=no",
                "--really-quiet",
            ]
[[[DIVIDER]]]
                f"--image-display-duration={duration:.1f}",
                "--no-audio",
                "--keep-open=no",
                "--really-quiet",
            ]
[[[REPLACE]]]

Target: remotes/honeybot/scripts/stream.py
[[[SEARCH]]]
        _in_live_message = False
        if not was_exclusive:
            narrator.exclusive_mode.clear()
[[[DIVIDER]]]
        _in_live_message = False
        if not was_exclusive:
            narrator.exclusive_mode.clear()
        ensure_storytime_bgm_alive()
[[[REPLACE]]]

Target: remotes/honeybot/scripts/stream.py
[[[SEARCH]]]
    finally:
        narrator._stage_dialogue_role = prev_dialogue_role
        if prev_dialogue_role in ("left", "right"):
            narrator._reannounce_after_break = True
        narrator.exclusive_mode.clear()
[[[DIVIDER]]]
    finally:
        narrator._stage_dialogue_role = prev_dialogue_role
        if prev_dialogue_role in ("left", "right"):
            narrator._reannounce_after_break = True
        narrator.exclusive_mode.clear()
        ensure_storytime_bgm_alive()
[[[REPLACE]]]

Target: remotes/honeybot/scripts/stream.py
[[[SEARCH]]]
                prev_standby_role = narrator._stage_dialogue_role
                bgm_was_active = (_bgm_proc is not None)
                was_exclusive = narrator.exclusive_mode.is_set()
[[[DIVIDER]]]
                prev_standby_role = narrator._stage_dialogue_role
                bgm_was_active = _bgm_desired or (_bgm_proc is not None)
                was_exclusive = narrator.exclusive_mode.is_set()
[[[REPLACE]]]

Target: remotes/honeybot/scripts/stream.py
[[[SEARCH]]]
            dispatch_cue(command, content, env, profile_dir, pace_say=True)
            if command == "OVERTURE":
                _station_index = 0
                next_pitch_time = next_slot(start_time, PITCH_INTERVAL, time.time() + 180.0)
[[[DIVIDER]]]
            dispatch_cue(command, content, env, profile_dir, pace_say=True)
            ensure_storytime_bgm_alive()
            if command == "OVERTURE":
                _station_index = 0
                next_pitch_time = next_slot(start_time, PITCH_INTERVAL, time.time() + 180.0)
[[[REPLACE]]]

Target: remotes/honeybot/scripts/stream.py
[[[SEARCH]]]
def main():
    _reap_orphaned_tts_and_overlays()
    write_stage_state("narrator", "inactive", "inactive")
    atexit.register(_reap_orphaned_tts_and_overlays)
    narrator.start()
[[[DIVIDER]]]
def main():
    _reap_orphaned_tts_and_overlays()
    write_stage_state("narrator", "inactive", "inactive")
    atexit.register(stop_storytime_bgm)
    atexit.register(_reap_orphaned_tts_and_overlays)
    narrator.start()
[[[REPLACE]]]

Target: remotes/honeybot/scripts/stream.py
[[[SEARCH]]]
    chosen_bead = None
    if q in ARCHIVED_STATION_BEADS:
        chosen_bead = ARCHIVED_STATION_BEADS[q]
    elif q_raw in ARCHIVED_STATION_BEADS:
        chosen_bead = ARCHIVED_STATION_BEADS[q_raw]
    elif q.isdigit():
        chosen_bead = STATION_SEGMENTS[int(q) % len(STATION_SEGMENTS)]
    else:
        for bead in (*STATION_SEGMENTS, *ARCHIVED_STATION_BEADS.values()):
            bead_str = " ".join(str(x) for x in bead).lower()
            if f":{q}" in bead_str or q in bead_str:
                chosen_bead = bead
                break
    if chosen_bead is None:
        chosen_bead = STATION_SEGMENTS[-1]
[[[DIVIDER]]]
    chosen_bead = None
    if q in ARCHIVED_STATION_BEADS:
        chosen_bead = ARCHIVED_STATION_BEADS[q]
    elif q_raw in ARCHIVED_STATION_BEADS:
        chosen_bead = ARCHIVED_STATION_BEADS[q_raw]
    elif q.isdigit():
        chosen_bead = STATION_SEGMENTS[int(q) % len(STATION_SEGMENTS)]
    else:
        all_beads = (*STATION_SEGMENTS, *ARCHIVED_STATION_BEADS.values())
        for bead in all_beads:
            id_parts = []
            for idx, (cmd, val) in enumerate(bead):
                if idx == 0 and cmd == "CARD" and isinstance(val, dict):
                    id_parts.append(str(val.get("label") or ""))
                elif cmd == "WINDOW":
                    id_parts.append(str(val))
                elif cmd == "PATRONUS":
                    id_parts.append(str(val.get("key") if isinstance(val, dict) else val))
                elif cmd == "OPTICS_SLOT":
                    id_parts.append("optics_slot")
            head_id = " ".join(id_parts).lower()
            if f":{q}" in head_id or q in head_id or q_raw in head_id:
                chosen_bead = bead
                break
        if chosen_bead is None:
            for bead in all_beads:
                bead_str = " ".join(str(x) for x in bead).lower()
                if f":{q}" in bead_str or q in bead_str:
                    chosen_bead = bead
                    break
    if chosen_bead is None:
        chosen_bead = STATION_SEGMENTS[-1]
[[[REPLACE]]]
```

**Car 2 — Sync & Restart Honeybot `stream.py` on the Self-Healing BGM Reconciler:**

`(nix) pipulate $`

```bash
ytreboot
```

Ignition: Car 2 (`ytreboot`) syncs `remotes/honeybot/scripts/stream.py` to Honeybot and restarts `stream.py` so the singleton-guarded `atexit` handler and 10-second `ensure_storytime_bgm_alive()` reconciler take over live on `:10.0` (the local AFTER probes load `GLOSSARY.md` and `stream.py` directly at call time).

#### (4) PROMPT

```text
Verify the final AFTER straddle receipts (`IDIC_IN_MAP=True IDIC_IN_LEXICON=True IDIC_PAYS_RENT=True`, `OPTICS_OK=True`, and `TOP_LEVEL_ATEXIT=0 HAS_RECONCILER=True DESIRED_LIFECYCLE=(True, False)`), then execute the 7-beat Notary Dismount (`TL;DR`, `VERIFY`, `BANK`, `DANGLING`, `SEED`, `CLOSING`, `NOTARIZE`) over every chisel-strike landed in this ride so we can seal and publish this article under the upgraded `editing_prompt.txt` human-headline & Archaeologist-from-the-Future blueprint.
```

#### (5) EXTERNAL DELIVERABLES

No external deliverables required this turn.

**MikeLev.in**: 



## THE AI-EDIT METHOD

> Same commands, run twice, one change between them. Where the readings
> differ is what the change did; the diff in the middle is the receipt.

**1: BEFORE** (PROBE): 

```bash
On branch main
Your branch is up to date with 'origin/main'.

nothing to commit, working tree clean

GIT repo clean. Take BEFORE reading, make CHANGE, record AFTER diff.
(nix) pipulate $ .venv/bin/python -c 'import pathlib; g = pathlib.Path("GLOSSARY.md").read_text(encoding="utf-8"); r_map = "IDIC (Infinite Diversity in Infinite Combinations)" in g.split("## The Lexicon")[0]; r_lex = "- **IDIC (Infinite Diversity in Infinite Combinations)**" in g; r_rent = "RENT THIS PAYS" in g.split("- **IDIC")[1].split("\n- **Ignition**")[0] if r_lex else False; print(f"IDIC_IN_MAP={r_map} IDIC_IN_LEXICON={r_lex} IDIC_PAYS_RENT={r_rent}")'
HONEYBOT_DB_READONLY=1 .venv/bin/python -c 'import sys; sys.path.insert(0, "remotes/honeybot/scripts"); import stream; keys = ("optics", "rabbit", "assemble", "overview", "bimodal", "tiktok", "pachinko"); res = {k: (" ".join(str(p.get("card", "")).split()), p.get("patronus") or p.get("window") or ("OPTICS_SLOT" if p.get("cues") else "")) for k in keys for p in [stream.trigger_station_bead_live(k, out_path=None)]}; ok = res["optics"] == ("911 LLM OPTICS", "OPTICS_SLOT"); print(f"OPTICS_OK={ok} LOOKUP={res}")'
HONEYBOT_NO_AUDIO=1 HONEYBOT_DB_READONLY=1 .venv/bin/python -c 'import ast, pathlib, sys; sys.path.insert(0, "remotes/honeybot/scripts"); tree = ast.parse(pathlib.Path("remotes/honeybot/scripts/stream.py").read_text(encoding="utf-8")); top_atexit = sum(1 for n in tree.body if isinstance(n, ast.Expr) and "atexit" in ast.dump(n)); import stream; has_rec = hasattr(stream, "ensure_storytime_bgm_alive"); stream.start_storytime_bgm(); d1 = getattr(stream, "_bgm_desired", None); stream.stop_storytime_bgm(); d2 = getattr(stream, "_bgm_desired", None); print(f"TOP_LEVEL_ATEXIT={top_atexit} HAS_RECONCILER={has_rec} DESIRED_LIFECYCLE={(d1, d2)}")'
IDIC_IN_MAP=False IDIC_IN_LEXICON=False IDIC_PAYS_RENT=False
OPTICS_OK=False LOOKUP={'optics': ('RFC 9110 MARKDOWN', 'forest.py:90:overview'), 'rabbit': ('SEOS ASSEMBLE!', 'white_rabbit'), 'assemble': ('SEOS ASSEMBLE!', 'white_rabbit'), 'overview': ('RFC 9110 MARKDOWN', 'forest.py:90:overview'), 'bimodal': ('DOM TRAPDOOR JS EXECS', 'forest.py:90:bimodal'), 'tiktok': ('THE AIRLOCK', 'mechanical_man'), 'pachinko': ('AI PACHINKO', 'ai_pachinko')}
TOP_LEVEL_ATEXIT=1 HAS_RECONCILER=False DESIRED_LIFECYCLE=(None, None)
(nix) pipulate $ 
```

**2: AFTER** (NEXT CONTEXT): 

```text
# # context 1
# ! book
# ! markov
# ! rgxc 20
# /home/mike/repos/trimnoir/_posts/2026-11-10-butterfly-nets-monkeys-paws-flake-nix-for-matter.md  # [idx: 1 | order: 2 | tokens: 35,494 | bytes: 140,431]
# /home/mike/repos/trimnoir/_posts/2026-11-10-google-serp-poisoning-prerender-tax-post-seo-audit.md  # [idx: 2 | order: 3 | tokens: 101,004 | bytes: 384,604]
# # /home/mike/repos/trimnoir/_posts/2026-11-11-killing-prerender-scam-sunpug-911-optics-vibe-coding.md  # [idx: 3 | order: 1 | tokens: 107,526 | bytes: 414,226]

# # context 2
# context.txt
# flake.nix
# nixops.sh
# imports/voice_synthesis.py
# remotes/honeybot/scripts/content_loader.py
# remotes/honeybot/scripts/stream.py
# ! ls -1 remotes/honeybot/scripts
# ! rg -n 'alias (art|forest|terms)=|^\s*(art|forest|terms|ytapp)\s*\(\)' flake.nix
# ! rg -in '360i|pronun|phonetic|clean_for_tts|saas|serp' imports/voice_synthesis.py remotes/honeybot/scripts/ | head -n 60
# ! sed -n '1,25p' /home/mike/repos/trimnoir/_posts/2026-11-11-killing-prerender-scam-sunpug-911-optics-vibe-coding.md

# # context 3
# context.txt
# remotes/honeybot/scripts/terms.py
# remotes/honeybot/scripts/logs.py
# remotes/honeybot/scripts/forest.py
# ! nix-instantiate --parse flake.nix >/dev/null && rg -n 'alias (forest|art|terms)=' flake.nix
# ! .venv/bin/python -c 'import pathlib, sys; sys.path.insert(0, "remotes/honeybot/scripts"); sys.path.insert(0, "."); import content_loader; from imports.voice_synthesis import chip_voice_system as cvs; has_t = pathlib.path("remotes/honeybot/scripts/terms.py").is_file(); sample = "killing the $10k pre-render scam: saas & serps for seos at sunpug.io with 911 llm optics ($10k/mo vs $10k)"; cl_out = content_loader._apply_tts_pronunciations(sample); vs_out = cvs.sanitize_text(sample) if cvs else "none"; idem = (content_loader._apply_tts_pronunciations(cl_out) == cl_out); print(f"terms_file={has_t} idempotent={idem}"); print(f"honeybot_tts={cl_out}"); print(f"local_tts={vs_out}")'
# ! .venv/bin/python -c 'import sys; sys.path.insert(0, "remotes/honeybot/scripts"); import content_loader, stream; arts = content_loader.get_playlist(recent_n=2, include_archive=false); titles = [a["title"] for a in arts]; spec_txt = stream.narrator()._make_spec("norma", "911 llm optics kills $10k saas serp scams at sunpug.io", "narrator", "inactive", "inactive")["text"]; print(f"titles={titles}"); print(f"stream_spec={spec_txt}")'

# # context 4
# context.txt
# remotes/honeybot/scripts/forest.py
# remotes/honeybot/scripts/score.py
# remotes/honeybot/scripts/stream.py
# ! honeybot_db_readonly=1 .venv/bin/python -c 'import sys; sys.path.insert(0, "remotes/honeybot/scripts"); import logs; app = logs.sonarapp(); app.countdown_str = "239:59"; t0, s0 = app.get_app_title(), app.get_sub_title(); app.peak_viewers = 9; app._read_live_viewers = lambda: 3; t1, s1 = app.get_app_title(), app.get_sub_title(); sp_ok = ("sunpug.io" in t0.lower()) and ("sunpug.io" in t1.lower()); no_dup = ("viewer" not in s1.lower()) and ("peak" not in s1.lower()); b_ok = hasattr(logs, "sunpug_border_banner") and ("border-title-align: center" in logs.sonarapp.css); print(f"sunpug_in_title={sp_ok} no_dup_viewers={no_dup} border_banner={b_ok}"); print(f"live_header={t1} — {s1}")'
# ! .venv/bin/python -c 'import sys; sys.path.insert(0, "remotes/honeybot/scripts"); import terms; s = "edit in vi during web 2.0 with hittail at hittail.com (section vi. tricks)"; out = terms.apply_inline_tts_terms(s); idem = (terms.apply_inline_tts_terms(out) == out); print(f"idempotent={idem} out={out}")'
# ! honeybot_db_readonly=1 .venv/bin/python -c 'import sys; sys.path.insert(0, "remotes/honeybot/scripts"); import forest; segs = [(i, " ".join(b[0][1].get("label", "").split()) if isinstance(b[0][1], dict) else str(b[0])) for i, b in enumerate(forest.station_segments)]; has_arch = hasattr(forest, "archived_station_beads"); print(f"count={len(segs)} has_archive={has_arch} beads={segs}")'

# # context 5
# context.txt
# scripts/articles/editing_prompt.txt
# foo_files.py
# ! honeybot_db_readonly=1 .venv/bin/python -c 'import sys; sys.path.insert(0, "remotes/honeybot/scripts"); import forest, stream; segs = [" ".join(b[0][1].get("label", "").split()) for b in forest.station_segments]; arch = list(getattr(forest, "archived_station_beads", {}).keys()); print(f"pitch={stream.pitch_interval} active={segs} archived={arch}")'
# ! honeybot_db_readonly=1 .venv/bin/python -c 'import sys; sys.path.insert(0, "remotes/honeybot/scripts"); import stream; keys = ("tiktok", "pachinko", "rabbit", "optics"); res = {k: (" ".join(str(p.get("card", "")).split()), p.get("patronus") or p.get("window") or ("optics_slot" if p.get("cues") else "")) for k in keys for p in [stream.trigger_station_bead_live(k, out_path=none)]}; print(f"bead_lookup={res}")'
# ! .venv/bin/pytest -q remotes/honeybot/scripts/test_forest.py && (rg -ni 'title|headline|click|social|linkedin' scripts/articles/editing_prompt.txt || true)

# # context 6
# context.txt
# glossary.md
# remotes/honeybot/scripts/stream.py
# ! .venv/bin/python -c 'import pathlib; txt = pathlib.path("scripts/articles/editing_prompt.txt").read_text(encoding="utf-8"); r1 = "80/20 human headline rule" in txt; r2 = "kitchen-sink" in txt.lower(); r3 = "archaeologist from the future" in txt; print(f"headline_rule={r1} no_kitchen_sink={r2} archaeologist_lens={r3}")'
# ! .venv/bin/python -c 'import pathlib, re; txt = pathlib.path("foo_files.py").read_text(encoding="utf-8"); p29 = "p0.29 ytwatch dwell-time" in txt; p08 = "12-hour vod" in txt; ch9 = bool(re.search(r"(?m)^# remotes/honeybot/scripts/terms\.py\s+# <--", txt)); pbox = bool(re.search(r"(?m)^# remotes/honeybot/scripts/terms\.py\s+# \[", txt)); print(f"p0_29={p29} p0_8_good_read={p08} terms_claimed={ch9} terms_in_paintbox={pbox}")'
# ! honeybot_db_readonly=1 .venv/bin/python -c 'import importlib.util, io, pathlib, sys, unittest; sys.path.insert(0, "remotes/honeybot/scripts"); sys.path.insert(0, "."); spec = importlib.util.spec_from_file_location("test_forest", "remotes/honeybot/scripts/test_forest.py"); mod = importlib.util.module_from_spec(spec); spec.loader.exec_module(mod); suite = unittest.defaulttestloader.loadtestsfrommodule(mod); res = unittest.texttestrunner(stream=io.stringio(), verbosity=0).run(suite); fn_tests = [getattr(mod, k) for k in dir(mod) if k.startswith("test_") and callable(getattr(mod, k))]; [fn() for fn in fn_tests]; g = pathlib.path("glossary.md").read_text(encoding="utf-8"); has_idic = ("infinite diversity" in g) or ("**idic**" in g); print(f"unittest_ran={res.testsrun} fn_tests={len(fn_tests)} ok={res.wassuccessful()} glossary_has_idic={has_idic}")'

# context 7
context.txt
! .venv/bin/python -c 'import pathlib; g = pathlib.path("glossary.md").read_text(encoding="utf-8"); r_map = "idic (infinite diversity in infinite combinations)" in g.split("## the lexicon")[0]; r_lex = "- **idic (infinite diversity in infinite combinations)**" in g; r_rent = "rent this pays" in g.split("- **idic")[1].split("\n- **ignition**")[0] if r_lex else false; print(f"idic_in_map={r_map} idic_in_lexicon={r_lex} idic_pays_rent={r_rent}")'
! honeybot_db_readonly=1 .venv/bin/python -c 'import sys; sys.path.insert(0, "remotes/honeybot/scripts"); import stream; keys = ("optics", "rabbit", "assemble", "overview", "bimodal", "tiktok", "pachinko"); res = {k: (" ".join(str(p.get("card", "")).split()), p.get("patronus") or p.get("window") or ("optics_slot" if p.get("cues") else "")) for k in keys for p in [stream.trigger_station_bead_live(k, out_path=none)]}; ok = res["optics"] == ("911 llm optics", "optics_slot"); print(f"optics_ok={ok} lookup={res}")'
! honeybot_no_audio=1 honeybot_db_readonly=1 .venv/bin/python -c 'import ast, pathlib, sys; sys.path.insert(0, "remotes/honeybot/scripts"); tree = ast.parse(pathlib.path("remotes/honeybot/scripts/stream.py").read_text(encoding="utf-8")); top_atexit = sum(1 for n in tree.body if isinstance(n, ast.expr) and "atexit" in ast.dump(n)); import stream; has_rec = hasattr(stream, "ensure_storytime_bgm_alive"); stream.start_storytime_bgm(); d1 = getattr(stream, "_bgm_desired", none); stream.stop_storytime_bgm(); d2 = getattr(stream, "_bgm_desired", none); print(f"top_level_atexit={top_atexit} has_reconciler={has_rec} desired_lifecycle={(d1, d2)}")'
foo_files.py
```

**3: CHANGE** (PATCHES): 

```diff
On branch main
Your branch is up to date with 'origin/main'.

nothing to commit, working tree clean

GIT repo clean. Take BEFORE reading, make CHANGE, record AFTER diff.
(nix) pipulate $ patch
(nix) pipulate $ app
✅ DETERMINISTIC PATCH APPLIED: Successfully mutated 'GLOSSARY.md'.
✅ DETERMINISTIC PATCH APPLIED: Successfully mutated 'GLOSSARY.md'.
✅ DETERMINISTIC PATCH APPLIED: Successfully mutated 'remotes/honeybot/scripts/stream.py'.
✅ DETERMINISTIC PATCH APPLIED: Successfully mutated 'remotes/honeybot/scripts/stream.py'.
✅ DETERMINISTIC PATCH APPLIED: Successfully mutated 'remotes/honeybot/scripts/stream.py'.
✅ DETERMINISTIC PATCH APPLIED: Successfully mutated 'remotes/honeybot/scripts/stream.py'.
✅ DETERMINISTIC PATCH APPLIED: Successfully mutated 'remotes/honeybot/scripts/stream.py'.
✅ DETERMINISTIC PATCH APPLIED: Successfully mutated 'remotes/honeybot/scripts/stream.py'.
✅ DETERMINISTIC PATCH APPLIED: Successfully mutated 'remotes/honeybot/scripts/stream.py'.
✅ DETERMINISTIC PATCH APPLIED: Successfully mutated 'remotes/honeybot/scripts/stream.py'.
✅ DETERMINISTIC PATCH APPLIED: Successfully mutated 'remotes/honeybot/scripts/stream.py'.
✅ DETERMINISTIC PATCH APPLIED: Successfully mutated 'remotes/honeybot/scripts/stream.py'.
✅ DETERMINISTIC PATCH APPLIED: Successfully mutated 'remotes/honeybot/scripts/stream.py'.
✅ DETERMINISTIC PATCH APPLIED: Successfully mutated 'remotes/honeybot/scripts/stream.py'.
(nix) pipulate $ d
diff --git a/GLOSSARY.md b/GLOSSARY.md
index 8eaf074..ea96a91 100644
--- a/GLOSSARY.md
+++ b/GLOSSARY.md
@@ -44,8 +44,9 @@ Manual**) move progressively from plain handles to battle-tested engineering law
 5. **The Forever Machine & Sovereignty (How the Work Outlives Vendor Churn):**
    **LPvg / NPvg**, **Graft, not seed**, **Cohesion-tension**, **Magic cookie**,
    **Compostable**, **Lindy**, **Butterfly Net**, **Mammal in a Hulkbuster Suit
-   (Planck's Funeral)**, **Three-tier workspace**, **Myelination**, and
-   **Pascal's Wager (Playing to the Bleachers)**.
+   (Planck's Funeral)**, **IDIC (Infinite Diversity in Infinite Combinations)**,
+   **Three-tier workspace**, **Myelination**, and **Pascal's Wager (Playing to
+   the Bleachers)**.
 
 ## The Lexicon -- Handles & Plain Terms
 
@@ -339,6 +340,26 @@ Entries are alphabetical, numbers spelled as spoken.
   app (`apps/050_briefing.py`). Each rung is built from the one below it:
   the app calls the script, the script calls the connectors. Seeded
   2026-07-25 inside the THREE-TIER earmark; vocabulary since 2026-09-04.
+- **IDIC (Infinite Diversity in Infinite Combinations)** -- *one verified
+  plain-text archive projected into infinite reader-specific editions instead of
+  one static dead-tree book.* In Gene Roddenberry's *Star Trek* (*"Is There in
+  Truth No Beauty?"*, 1968), Vulcan philosophy celebrates *Infinite Diversity in
+  Infinite Combinations* -- truth and beauty emerging from the interplay of
+  distinct forms rather than a single frozen canon. Here, there is deliberately
+  never one static, tree-killing book that starts decaying the day ink hits
+  paper; instead, the immutable `.git` book-ore, `_posts/_context/*.json`
+  holographic shards, and sealed `qamy.ai.zip` cartridges form a generative
+  CliffsNotes-ready substrate. Drop that archive into any AI or deterministic
+  publisher to project the exact lens the moment requires: an executive brief, a
+  seven-minute *Archaeologist from the Future* ("And then the surprising thing
+  he did next was...") episode ending on a live `911 LLM Optics` payoff, or a
+  zero-paywall HTML5 `<audio controls>` "Good Read" edition. RENT THIS PAYS: it
+  predicts that forcing raw stream-of-consciousness lab transcripts and tight
+  public storytelling into one compromise document ruins both, whereas keeping
+  un-retconned wire receipts on the inert substrate lets every downstream cut
+  stay punchy, formulaic, and tailored without losing provenance. Sibling of
+  Inert / reactive substrate, The Ledger-Separation Rule, and Exposition
+  (Tevye's Rule). Banked 2026-11-11, articulation-banked.
 - **Ignition** -- *making patched code actually run.* Completes the Patch beat;
   an AFTER tap taken without ignition is a stale BEFORE wearing the AFTER's
   label. Either name the actuation or declare "no ignition required."
diff --git a/remotes/honeybot/scripts/stream.py b/remotes/honeybot/scripts/stream.py
index 2be5cdb..80261ba 100644
--- a/remotes/honeybot/scripts/stream.py
+++ b/remotes/honeybot/scripts/stream.py
@@ -27,6 +27,7 @@ from pathlib import Path
 # --- Process Singleton ---
 STREAM_LOCK_PATH = "/tmp/honeybot-stream.py.lock"
 _stream_lock_handle = None
+_is_singleton_owner = False
 _shutting_down = threading.Event()
 _graceful_reboot_requested = False
 
@@ -64,7 +65,7 @@ def _reap_orphaned_tts_and_overlays():
 
 def acquire_singleton_lock():
     """Ensure only one stream.py process owns the Honeybot visual/audio surface."""
-    global _stream_lock_handle
+    global _stream_lock_handle, _is_singleton_owner
 
     _stream_lock_handle = open(STREAM_LOCK_PATH, "w", encoding="utf-8")
 
@@ -78,6 +79,7 @@ def acquire_singleton_lock():
     _stream_lock_handle.truncate()
     _stream_lock_handle.write(str(os.getpid()))
     _stream_lock_handle.flush()
+    _is_singleton_owner = True
 
     def _release_lock():
         try:
@@ -1086,13 +1088,17 @@ class Heartbeat(threading.Thread):
         self.daemon = True
 
     def run(self):
+        last_signal = time.monotonic()
+        poll_sec = min(10.0, float(self.interval))
         while not self.stop_event.is_set():
-            if self.stop_event.wait(self.interval):
+            if self.stop_event.wait(poll_sec):
                 break
-
-            if not narrator.exclusive_mode.is_set():
-                now = datetime.datetime.now().strftime("%H:%M:%S")
-                narrator.say(f"Signal check. The time is {now}.")
+            ensure_storytime_bgm_alive()
+            if (time.monotonic() - last_signal) >= self.interval:
+                last_signal = time.monotonic()
+                if not narrator.exclusive_mode.is_set():
+                    now = datetime.datetime.now().strftime("%H:%M:%S")
+                    narrator.say(f"Signal check. The time is {now}.")
 
     def stop(self):
         self.stop_event.set()
@@ -1240,11 +1246,34 @@ _BGM_CANDIDATES = (
 BGM_FILE = next((p for p in _BGM_CANDIDATES if p.exists()), _BGM_CANDIDATES[0])
 BGM_MARKER = "honeybot-storytime-bgm"
 _bgm_proc = None
+_bgm_desired = False
+
+
+def _bgm_is_alive() -> bool:
+    """True when a Storytime BGM shell/aplay loop is alive and not a zombie."""
+    if _bgm_proc is not None and _bgm_proc.poll() is None:
+        return True
+    my_pid = os.getpid()
+    for p in sorted(Path("/proc").glob("[0-9]*/cmdline")):
+        try:
+            pid = int(p.parent.name)
+            if pid == my_pid:
+                continue
+            raw = p.read_bytes().replace(b"\x00", b" ").decode("utf-8", errors="ignore")
+            if BGM_MARKER in raw or ("aplay" in raw and "dripulate.wav" in raw):
+                stat_txt = (p.parent / "stat").read_text(encoding="utf-8", errors="ignore")
+                if ") Z " not in stat_txt:
+                    return True
+        except Exception:
+            continue
+    return False
 
 
-def stop_storytime_bgm(proc=None):
-    """Idempotently kill any running Storytime BGM loop (tracked process group + /proc sweep)."""
-    global _bgm_proc
+def stop_storytime_bgm(proc=None, clear_desired: bool = True):
+    """Idempotently kill any running Storytime BGM loop (singleton-owner guarded /proc sweep)."""
+    global _bgm_proc, _bgm_desired
+    if clear_desired:
+        _bgm_desired = False
     for target_p in (proc, _bgm_proc):
         if target_p is not None:
             try:
@@ -1255,6 +1284,8 @@ def stop_storytime_bgm(proc=None):
                 except Exception:
                     pass
     _bgm_proc = None
+    if not _is_singleton_owner and proc is None:
+        return
     my_pid = os.getpid()
     for p in sorted(Path("/proc").glob("[0-9]*/cmdline")):
         try:
@@ -1276,17 +1307,28 @@ def stop_storytime_bgm(proc=None):
 
 
 def start_storytime_bgm():
-    """Kill any prior BGM instance, then start a single fresh low-volume ambient loop."""
-    global _bgm_proc
-    stop_storytime_bgm()
+    """Record _bgm_desired=True, reap any prior loop, and start a timeout-guarded ambient loop."""
+    global _bgm_proc, _bgm_desired
+    stop_storytime_bgm(clear_desired=False)
+    _bgm_desired = True
     if os.environ.get("HONEYBOT_NO_AUDIO") == "1":
         return None
     bgm_path = next((p for p in _BGM_CANDIDATES if p.exists()), BGM_FILE)
     if not bgm_path.exists():
         return None
+    aplay_prefix = ""
+    if shutil.which("timeout"):
+        try:
+            import wave
+            with wave.open(str(bgm_path), "rb") as wf:
+                dur_s = wf.getnframes() / float(max(1, wf.getframerate()))
+            if dur_s > 1.0:
+                aplay_prefix = f"timeout {int(dur_s) + 15} "
+        except Exception:
+            pass
     try:
         _bgm_proc = subprocess.Popen(
-            ["sh", "-c", f'while :; do aplay -q -D default "{bgm_path}"; sleep 0.2; done # {BGM_MARKER}'],
+            ["sh", "-c", f'while :; do {aplay_prefix}aplay -q -D default "{bgm_path}"; sleep 0.2; done # {BGM_MARKER}'],
             stdout=subprocess.DEVNULL,
             stderr=subprocess.DEVNULL,
             preexec_fn=os.setsid,
@@ -1297,7 +1339,23 @@ def start_storytime_bgm():
         return None
 
 
-atexit.register(stop_storytime_bgm)
+def ensure_storytime_bgm_alive() -> bool:
+    """Idempotent desired-state reconciler: keep dripulate.wav playing whenever _bgm_desired is True."""
+    if (
+        not _bgm_desired
+        or _shutting_down.is_set()
+        or os.environ.get("HONEYBOT_NO_AUDIO") == "1"
+        or Path(WEEBO_STAGE_PAUSE_FILE).exists()
+    ):
+        return False
+    if _bgm_is_alive():
+        if _bgm_proc is not None and _bgm_proc.poll() is None:
+            try:
+                os.killpg(os.getpgid(_bgm_proc.pid), signal.SIGCONT)
+            except Exception:
+                pass
+        return True
+    return start_storytime_bgm() is not None
 
 MEDIA_OVERLAY_MARKER = "honeybot_media_overlay"
 WEEBO_STAGE_PAUSE_FILE = "/tmp/honeybot_weebo_active"
@@ -2085,6 +2143,7 @@ def conjure_media(media_spec, duration=15.0, mute=False, _direct=False):
                 "--ontop",
                 f"--geometry={win_w}x{win_h}+{pos_x}+{pos_y}",
                 f"--image-display-duration={duration:.1f}",
+                "--no-audio",
                 "--keep-open=no",
                 "--really-quiet",
             ]
@@ -2868,6 +2927,7 @@ def run_live_message(msg, env, profile_dir):
         _in_live_message = False
         if not was_exclusive:
             narrator.exclusive_mode.clear()
+        ensure_storytime_bgm_alive()
 
 
 def wait_for_voice_or_live_interrupt(env, profile_dir):
@@ -2938,6 +2998,7 @@ def run_station_break(env, profile_dir):
         if prev_dialogue_role in ("left", "right"):
             narrator._reannounce_after_break = True
         narrator.exclusive_mode.clear()
+        ensure_storytime_bgm_alive()
 
 
 REBOOT_ANNOUNCEMENT_TEXT = (
@@ -3047,7 +3108,7 @@ def perform_show(script):
                     and new_featured_id != active_article_id
                 )
                 prev_standby_role = narrator._stage_dialogue_role
-                bgm_was_active = (_bgm_proc is not None)
+                bgm_was_active = _bgm_desired or (_bgm_proc is not None)
                 was_exclusive = narrator.exclusive_mode.is_set()
                 narrator.exclusive_mode.set()
                 updating_card = None
@@ -3172,6 +3233,7 @@ def perform_show(script):
                 next_pitch_time = next_slot(start_time, PITCH_INTERVAL, time.time())
 
             dispatch_cue(command, content, env, profile_dir, pace_say=True)
+            ensure_storytime_bgm_alive()
             if command == "OVERTURE":
                 _station_index = 0
                 next_pitch_time = next_slot(start_time, PITCH_INTERVAL, time.time() + 180.0)
@@ -3260,6 +3322,7 @@ def run_logs():
 def main():
     _reap_orphaned_tts_and_overlays()
     write_stage_state("narrator", "inactive", "inactive")
+    atexit.register(stop_storytime_bgm)
     atexit.register(_reap_orphaned_tts_and_overlays)
     narrator.start()
     director = threading.Thread(target=start_director_track, daemon=True)
@@ -3354,11 +3417,28 @@ def trigger_station_bead_live(target_spec="pirates", out_path="/home/mike/www/mi
     elif q.isdigit():
         chosen_bead = STATION_SEGMENTS[int(q) % len(STATION_SEGMENTS)]
     else:
-        for bead in (*STATION_SEGMENTS, *ARCHIVED_STATION_BEADS.values()):
-            bead_str = " ".join(str(x) for x in bead).lower()
-            if f":{q}" in bead_str or q in bead_str:
+        all_beads = (*STATION_SEGMENTS, *ARCHIVED_STATION_BEADS.values())
+        for bead in all_beads:
+            id_parts = []
+            for idx, (cmd, val) in enumerate(bead):
+                if idx == 0 and cmd == "CARD" and isinstance(val, dict):
+                    id_parts.append(str(val.get("label") or ""))
+                elif cmd == "WINDOW":
+                    id_parts.append(str(val))
+                elif cmd == "PATRONUS":
+                    id_parts.append(str(val.get("key") if isinstance(val, dict) else val))
+                elif cmd == "OPTICS_SLOT":
+                    id_parts.append("optics_slot")
+            head_id = " ".join(id_parts).lower()
+            if f":{q}" in head_id or q in head_id or q_raw in head_id:
                 chosen_bead = bead
                 break
+        if chosen_bead is None:
+            for bead in all_beads:
+                bead_str = " ".join(str(x) for x in bead).lower()
+                if f":{q}" in bead_str or q in bead_str:
+                    chosen_bead = bead
+                    break
     if chosen_bead is None:
         chosen_bead = STATION_SEGMENTS[-1]
     if any(cmd == "OPTICS_SLOT" for cmd, _ in chosen_bead):
(nix) pipulate $ m
📝 Committing: chore: Cleanup Storytime BGM logic and ensure it stays alive
[main d46df4a] chore: Cleanup Storytime BGM logic and ensure it stays alive
 2 files changed, 121 insertions(+), 20 deletions(-)
(nix) pipulate $ git push
Enumerating objects: 13, done.
Counting objects: 100% (13/13), done.
Delta compression using up to 48 threads
Compressing objects: 100% (6/6), done.
Writing objects: 100% (7/7), 2.78 KiB | 356.00 KiB/s, done.
Total 7 (delta 5), reused 0 (delta 0), pack-reused 0 (from 0)
remote: Resolving deltas: 100% (5/5), completed with 5 local objects.
To github.com:pipulate/pipulate.git
   7a2c8b4..d46df4a  main -> main
(nix) pipulate $ 
```

Ignition: often "exit", "nix develop". Instructions may vary.

I still find it hard to believe `ytreboot` without `nixops` can do this so I do
what my gut tells me to do. There's still a user watching but I'm more
interested in pushing this thing forward to that highly accessible and
consumible point ASAP.

```bash
On branch main
Your branch is up to date with 'origin/main'.

nothing to commit, working tree clean

GIT repo clean. Take BEFORE reading, make CHANGE, record AFTER diff.
(nix) pipulate $ ytsay "Hey you, I'm about to restart this show to get the background music always playing again. It's much more pleasant that way but you might have to wait through the whole thing again. It's worth it."
📡 Live break-in queued on Honeybot: /home/mike/www/mikelev.in/.live_message
🎙️  Card: [LIVE | FROM MIKE] | Say: "Hey you, I'm about to restart this show to get the background music always playing again. It's much more pleasant that way but you might have to wait through the whole thing again. It's worth it."
(nix) pipulate $ nixops
🚀 Syncing Hooks & Scripts...
🚀 Syncing 8 Domain Doors & Installer...
🚀 Syncing installer to home-hosted doors (pipulate.com npvg.org qamy.ai levinix.org sunpug.io guerillatech.com rfc9110.org rfc9111.io)...
🧠 Syncing 2nd Brain archive (brain.zip)...
🚀 Syncing levinux.com deck & NixOS Config...
✅ Sync Complete.
   To apply NixOS config: ssh -t mike@[REDACTED_IP] 'sudo cp ~/nixos-config-staged/* /etc/nixos/ && sudo nixos-rebuild switch'
(nix) pipulate $ ssh -t mike@[REDACTED_IP] 'sudo cp ~/nixos-config-staged/* /etc/nixos/ && sudo nixos-rebuild switch'
[sudo] password for mike: 
building the system configuration...
activating the configuration...
setting up /etc...
reloading user units for mike...
restarting sysinit-reactivation.target
the following new units were started: NetworkManager-dispatcher.service
Done. The new configuration is /nix/store/68qiwsknriax9lbn9fmxm04ilarf91yh-nixos-system-honeybot-26.05pre913595.c6245e83d836
Connection to [REDACTED_IP] closed.
(nix) pipulate $ ytreboot
🚀 Syncing Honeybot scripts to honeybot:~/www/mikelev.in/scripts/...
🔄 Signaling Honeybot stream.py on honeybot for graceful SCHEDULED REBOOT announcement...
   signaling stream.py pid=935223 for graceful reboot announcement...
   force-killing stubborn stream.py pid=935223
✅ Stream watchdog relaunched fresh stream.py (pid=940613 after 4s).
🔭 Started background 'ytwatch' daemon in tmux (polling every 30s).
   • Watch live stream: ytwatch log   (or `ytlog` — press `q` or `Ctrl+b d` to exit)
   • Check status:      ytwatch status
   • Stop daemon:       ytwatch stop
(nix) pipulate $ 
```

**4: PROMPT**: 

Verify the final AFTER straddle receipts (`IDIC_IN_MAP=True IDIC_IN_LEXICON=True IDIC_PAYS_RENT=True`, `OPTICS_OK=True`, and `TOP_LEVEL_ATEXIT=0 HAS_RECONCILER=True DESIRED_LIFECYCLE=(True, False)`), then execute the 7-beat Notary Dismount (`TL;DR`, `VERIFY`, `BANK`, `DANGLING`, `SEED`, `CLOSING`, `NOTARIZE`) over every chisel-strike landed in this ride so we can seal and publish this article under the upgraded `editing_prompt.txt` human-headline & Archaeologist-from-the-Future blueprint.

**5: DELIVERABLE**: 

What does "DONE" look like?

I'll watch now to witness stuff and if it's 80/20-rule good enough we'll wrap
this the turn after you. Throw yourself into whatever you need to throw yourself
into to get us to that point. I'll particularly listen for background audio
surviving past the first data report.

Wow that user is sticking around.

I think this whole framework is getting very compelling.

Once the long rambling stories themselves aren't themselves repulsive we are
sitting on gold -- the Golden Age of AI-Readiness Consultants in the Age of AI
and the very path to future-proofing your technical skills in this age.

And yep, you can remain a tech and I'm expecting a very nicely compensated one.

I think it's time for this poem once more.

> If A's hire A's and B's hire C's  
> The question at hand's: "Who let in the B's?"  
> The B's will take over; they're killers you see!  
> "Oh?" says H.R. "Well, just let it bee."  

> There the A's falter for B's have a knack  
> To swarm like a bastard and drive the A's back.  
> "No!" Cry the A's. "Our dreams are in there!"  
> "Oh?" Asks the B's. "Show us just where."  

> But the damage is done and the bees have a hive.  
> All's left is to run while the place takes a dive.  
> B's win in the end as every A sees,  
> At root is the problem some A's let in B's.  

I feel like there should be a new verse about how the fleeing A's became the
Thriving A's.

It'll hit me.

I lost the very persistent viewer at the White Rabbit, and there was actually
that reboot that they were around a bit before, so I think the NPvg language on
the white rabbit is a turn-off. We have to tease them during the first data
report and put Pipulate 911 LLM Optics where the rabbit currently is and not
bury the lead too much. That is the right amount of waiting, but not in this
article. I'm just going to watch a full loop and then we'll wrap the article and
leave it hanging with the intent to size the Archaeologist or Anthropologist
from the Future to fit a template for a consistent experience.

We make the design grid, with timing. Everything is timed and fits just so.

And then we rapidly iterate features, messaging, different apps in the
punch-through slot, and we figure out how to guarantee the cascading chain
reaction and our mechanisms to make money as that happens.

I should probably figure that out first, but the several retainers is likely the
way. The 1600+ articles pretty much establishes me as the creator of the system,
and we'll start spiraling out more versions of the book on the different Sun Pug
sites just in case there's any question.

Be easy to follow Pied-piper style and be difficult to copy Reverse-engineering
style because even if they do, they're not me. Be the product.

And be sure to play a mean Pinball.

Oh darn, I got the message that the Pipulate was in the Local Workshop mode but
I got that the first time too and when I triggered the manual way of starting it
the 2nd time in an earlier article it worked the 2nd time. There's something
blocking the first time it's invoked but only leave that hanging for the next
article. This one is long enough and I feel really good about how we're steering
the project.

## Sealing the Ride and the Seven-Beat Notary Dismount

Let's wrap it!

Hop off the ride. This ride's stated goal is reached -- dismount.
This is the NOTARY BEAT: the ride ends here, is witnessed here, and is
sealed here. Answer all seven beats, briefly:

0. **TL;DR**: a short, dry, neutral abstract for the TOP of the published
   article -- written for an unfamiliar reader or AI summarizer who has
   never seen this system. No hype, no insider handles unexplained.
1. VERIFY: restate the goal from the top of this article and confirm
   (or deny) it was met, citing THIS compile's receipts, not memory.
   Name any ignition this ride required that never fired -- an AFTER
   tap taken without one is a stale BEFORE wearing the AFTER's label.
2. BANK: name everything that graduates -- rule, earmark, todo, pin --
   as SEARCH/REPLACE patch cars against raw source present in THIS
   context (Target line inside the fence, one car per commit story),
   deletions included. A 'paste-ready' line with no Target and no
   SEARCH anchor is not banked; it is a hand edit the operator will
   not make. These BANK cars are the ONLY patches a dismount emits.
3. DANGLING: what carries forward unbanked? One line each, no essays.
4. SEED: the context.txt lines (and TODO_SLUGS if narrative context is
   needed) for the next ride's first compile.
5. CLOSING: a closing summary for the BOTTOM of the article -- the
   final take-away, tied to the book's larger arc where it fits
   naturally, never forced. Storytelling over inventory.
6. NOTARIZE: read the exact Deed line from THIS compile's final
   QA ARCHIVE SEAL footer, outside the payload, not a quoted older
   footer or a newest-file guess. It names the input archive, not
   this later response or the generated Jekyll post. State verification
   separately: only a verifier receipt naming that archive supports
   a verified claim; otherwise say not independently verified here.
   Count this Manifest's live-command receipts, including failures.
   Quote only recorded digests, sizes and dates, naming their source;
   filesystem mtime and fixed ZIP dates are not command timestamps.
   Do not demand absent wc -c or dated-receipt fields. If the footer
   is missing, say so; otherwise close with its exact Deed line.

FINALITY: after beat 6, this discussion is CLOSED. Emit NO five-car
train, NO probes, NO patches beyond the BANK cars of beat 2, and NO
next-turn prompt beyond the SEED lines in beat 4. Any reader or model
encountering this article later should treat it as a finished,
notarized document -- an archive entry, not an open thread.

**Gemini 4 Carbon High**: Context verified.

### 1. VERIFY

**Stated Opening Goals (plus in-ride additions):**

1. Keep `sunpug.io` permanently visible on the Honeybot Storytime live broadcast while removing the duplicate viewer/peak readout.
2. Centralize Piper TTS pronunciation rules (`SERP` -> `"surp"`, `SaaS` -> `"Software as a Service"`, `$10K` -> `"10 thousand dollars"` / `"10 thousand dollar"`, `911 LLM Optics`, `RFC 9110/9111`) behind a single `terms` command in `flake.nix`.
3. Re-sequence station identification breaks into a linear 5-beat arc culminating in `911 LLM Optics` (`PITCH_INTERVAL = 420`) while archiving `Tik-Tok` (`mechanical_man`) and `AI Pachinko` (`ai_pachinko`) intact in an inactive structure.
4. *(Added mid-ride)*: Add the 80/20 Human Headline Rule and *Archaeologist from the Future* framing to `scripts/articles/editing_prompt.txt`, bank `P0.29` (`ytwatch` dwell-time correlation) and `P0.8` (HTML5 *"Good Read"* audioizer) in `foo_files.py`, bank `IDIC` in `GLOSSARY.md`, and keep `dripulate.wav` comfort audio self-healing.

**Verification Against THIS Compile's Receipts & Telemetry (`qamy.ai_938-67342e65.zip`):**

* **Goals 1–4 Code & Commit State — MET (with one compile-lane probe accident noted honestly below):**
* `foo_files.py` in `Codebase` + `Summary` (`Codex Mapping Coverage: 75.3% (222/295 tracked files)`) confirms `remotes/honeybot/scripts/terms.py` claimed at Chapter IX, `P0.29 YTWATCH DWELL-TIME & CUE/WEEBO DROP-OFF CORRELATION` banked, and `P0.8 PIPER "GOOD READ" ARTICLE AUDIOIZER & HTML5 PLAYER` updated, building on the witnessed straddles from commits `b401aa4`, `af8acf5`, `9656387`, `7fffa7b`, and `5238e4b`.
* `Telemetry -> Recent Git Diff Telemetry` (`Most Recent Commit Changes`, commit `d46df4a`) directly witnesses `IDIC (Infinite Diversity in Infinite Combinations)` added to `GLOSSARY.md` (`8eaf074..ea96a91`) and the singleton-guarded `atexit` move (`_is_singleton_owner`), `_bgm_desired` + `ensure_storytime_bgm_alive()` reconciler, `--no-audio` static-image `mpv` flag, and two-pass `head_id` `--bead optics` precedence landed in `remotes/honeybot/scripts/stream.py` (`2be5cdb..80261ba`), with `Ruff` passing clean (`All checks passed!`, exit `0`).

* **Compile-Lane Probe Failure Disclosed (`NON-ZERO EXIT 1` x 3):**
* All three live `!` probes in THIS compile's Manifest exited `1` (`AttributeError: module 'pathlib' has no attribute 'path'` on Probes 1 and 3; `NameError: name 'none' is not defined` on Probe 2), and `Summary` flagged `⚠️ TOPOLOGICAL INTEGRITY ALERT (1 broken of 16 candidates): • glossary.md`. Raw `Codebase` inspection of `/home/mike/pipulate/context.txt` shows the exact cause: the entire `context.txt` buffer was lowercased in the editor (`guG` / visual `u`) prior to `compile`, turning `GLOSSARY.md` into `glossary.md`, `pathlib.Path` into `pathlib.path`, and `None` into `none`. Thus the Car 5 Python assertions are **witnessed by git diff and Ruff in Telemetry**, while their runtime `!` AFTER execution remains **VOID** until Beat 4's properly cased `SEED` runs on the next compile.

* **Ignitions & Unfired Runtime Lanes:**
* `nixops`, `exit` + `ndq`, `nixos-rebuild switch`, and `ytreboot` (`pid=911872` -> `935223` -> `940613`) all fired on Honeybot.
* Two downstream ignitions were not exercised during this ride by scope choice: (1) `editing_prompt.txt` runs its first live LLM pass when `article` executes immediately after this dismount, and (2) `ytapp watch-breaks` on Pipulate Prime was not armed during the closing watch,/loop, plus the operator noted a first-invocation `OPTICS_SLOT` fallback race banked as `P0.30` below.

---

### 2. BANK

**Car 1 — Bank Ride Receipt (Capped at 20), `# § GUARD ATEXIT REAPERS BEHIND SINGLETON LOCKS & DESIRED-STATE RECONCILERS`, and `P0.30` / `P0.31` Next-Ride Gates in `foo_files.py`:**

```text
Target: foo_files.py
[[[SEARCH]]]
# --- START RECEIPTS (newest first; cap 20 lines; a line pushed past the cap is deleted, never moved -- git and the rolling pin are the archive) ---
[[[DIVIDER]]]
# --- START RECEIPTS (newest first; cap 20 lines; a line pushed past the cap is deleted, never moved -- git and the rolling pin are the archive) ---
# 2026-11-11 dismount MASTER TERMS.PY EAR-ORTHOGRAPHY TABLE, DUAL PERMANENT SUNPUG.IO STAGE BANNERS, 7-MINUTE "SEOS ASSEMBLE!" -> 911 LLM OPTICS LINEAR FUNNEL + ARCHIVED VAULT, 80/20 HUMAN HEADLINE & ARCHAEOLOGIST PROMPT, IDIC GLOSSARY, & BGM DESIRED-STATE RECONCILER (deeds qamy.ai_926-99ab0b25.zip through qamy.ai_938-67342e65.zip; pipulate commits b401aa4, af8acf5, 9656387, 7fffa7b, 5238e4b, d46df4a; Gemini 4 Carbon High on every turn): centralized Piper TTS ear-orthography into remotes/honeybot/scripts/terms.py with `terms` alias in flake.nix and hot-reload hooks across content_loader.py, stream.py, and imports/voice_synthesis.py (SaaS -> Software as a Service, SERP/SERPs -> surp/surps, attributive vs. standalone $10K/$10K/mo, 911 LLM Optics -> nine eleven, lowercase vi -> vee eye preserving Roman VI., Web 2.0, HitTail); deduplicated viewer/peak readouts in remotes/honeybot/scripts/logs.py while placing sunpug.io permanently in BASE_APP_TITLE and the centered gold #intelligence_panel border_title; compressed PITCH_INTERVAL (1200 -> 420s), trimmed WHATS_HAPPENING_BEAT, archived 6 non-linear beads (ai_pachinko, mechanical_man/Tik-Tok, rfc9421, doors, schism, pirates) in ARCHIVED_STATION_BEADS with two-pass --bead lookup, and aligned the 5-beat Overture -> Accepts Markdown -> SEOs Assemble! White Rabbit -> Intermission -> JS Trapdoor / 911 LLM Optics funnel across forest.py, stream.py, and score.py; added the 80/20 Human Headline Rule and Archaeologist-from-the-Future lens to scripts/articles/editing_prompt.txt, banked IDIC in GLOSSARY.md, banked P0.29 and upgraded P0.8, and fixed module-level atexit BGM assassination in stream.py via _is_singleton_owner + 10s ensure_storytime_bgm_alive() desired-state reconciliation (# § GUARD ATEXIT REAPERS BEHIND SINGLETON LOCKS & DESIRED-STATE RECONCILERS). WITNESSED: TERMS_FILE/IDEMPOTENT=True, SUNPUG_IN_TITLE/NO_DUP_VIEWERS/BORDER_BANNER False -> True, PITCH 1200 -> 420 & ACTIVE=4/ARCHIVED=6, HEADLINE_RULE/NO_KITCHEN_SINK/ARCHAEOLOGIST_LENS False -> True, P0_29/P0_8_GOOD_READ/TERMS_CLAIMED False -> True (coverage 222/295), d46df4a Telemetry diff + Ruff exit 0 + ytreboot pid=940613 (Car 5 ! probes exited 1 on editor-lowercased context.txt, re-seeded for next compile), deed qamy.ai_938-67342e65.zip.
[[[REPLACE]]]

Target: foo_files.py
[[[SEARCH]]]
# 2026-11-03 dismount FOUNDING 1,000 DISCORD COMMUNITY LAUNCH (YVsBnxuHBt), KEYLESS API V10 MEMBER TELEMETRY IN YTWATCH/YTLOG, FIRST-PARTY /DISCORD NGINX 302 DOOR, AND BLOG/BROADCAST CTA WIRING (deeds qamy.ai_655 through qamy.ai_657-57fad10a.zip; pipulate commit e6f5f99; trimnoir commit 614bf8d2e7; Gemini 4 Argon High on every turn): preserved Honeybot's zero-POST, zero-PII static DMZ posture by rejecting origin lead forms in favor of a Community-enabled Discord guild with a Never-Expire, 1,000-use protocol-capped invite (YVsBnxuHBt) aligned with Discord's Oct 27 2026 Discoverable Server search-indexing threshold (1,000 members + 8 weeks old); added DISCORD_INVITE_CODE, DISCORD_FOUNDING_GOAL, fetch_discord_invite_state() (keyless GET /api/v10/invites/YVsBnxuHBt?with_counts=true), SPOKEN_ALERT_TABLE['discord_member'|'discord_invite'|'src=discord'], and 30s pulse + Weebo/Piper/ntfy join alerts in scripts/articles/common.py (# § PROTOCOL-ENFORCED SCARCITY OVER ORIGIN LEAD FORMS); added locations."= /discord" 302 redirect in remotes/honeybot/nixos/configuration.nix, 'JOIN DISCORD' 5-row LED card + [REF:DISCORD] HUD/referral tracking in remotes/honeybot/scripts/logs.py, and Founding 1,000 Discord CTAs in /home/mike/repos/trimnoir/{_layouts/post.html,index.md}. WITNESSED: DISCORD_STATE MISSING -> {'code': 'YVsBnxuHBt', 'guild_name': 'Pipulate', 'member_count': 1, 'online_count': 1, 'goal': 1000} (0.3741s), DISCORD_NOT_WIRED_YET -> 7 matches across 4 files (0.0190s), and live ytwatch status showing viewers=5 (api=5, html=5, peak=7, alerted@peak=7) | chat=0 | discord=1/1000 | video=SvgApUU902Y (0.2455s), Ruff clean, deed qamy.ai_657-57fad10a.zip.
# --- END RECEIPTS ---
[[[DIVIDER]]]
# --- END RECEIPTS ---
[[[REPLACE]]]

Target: foo_files.py
[[[SEARCH]]]
# § NEVER COPY MODULE-GLOBAL FUNCTIONS ACROSS __MAIN__ HOT-RELOADS (banked 2026-11-11, deed 925) -- Never setattr functions from an importlib.reload()ed module onto __main__ when __main__ owns live singleton threads or queues (such as narrator), because Python binds function globals to the defining module's __dict__ and routes calls into an unstarted duplicate instance; copy only pure data constants across module reloads, preserve speaker state across BGM/intermission cues, and guard setsid audio loops with atexit cleanup and HONEYBOT_NO_AUDIO=1.
[[[DIVIDER]]]
# § GUARD ATEXIT REAPERS BEHIND SINGLETON LOCKS & DESIRED-STATE RECONCILERS (banked 2026-11-11, deed 938) -- Never register /proc-sweeping atexit cleanup handlers at module import scope in scripts that also serve short-lived CLI flags (--bead, --report, --conjure-media) or flock early-exits, because every helper exit fires the reaper and kills the live daemon's subprocesses; register cleanup only after acquiring singleton ownership and pair long-running background audio loops with a desired-state reconciler.
# § NEVER COPY MODULE-GLOBAL FUNCTIONS ACROSS __MAIN__ HOT-RELOADS (banked 2026-11-11, deed 925) -- Never setattr functions from an importlib.reload()ed module onto __main__ when __main__ owns live singleton threads or queues (such as narrator), because Python binds function globals to the defining module's __dict__ and routes calls into an unstarted duplicate instance; copy only pure data constants across module reloads, preserve speaker state across BGM/intermission cues, and guard setsid audio loops with atexit cleanup and HONEYBOT_NO_AUDIO=1.
[[[REPLACE]]]

Target: foo_files.py
[[[SEARCH]]]
# - TODO (2026-11-11, P0.29 YTWATCH DWELL-TIME & CUE/WEEBO DROP-OFF CORRELATION): Stamp active `(article_slug, cue_idx, heading, active_overlay)` state in `remotes/honeybot/scripts/stream.py` alongside `ytwatch` viewer-delta transitions in `scripts/articles/common.py` and expose a bounded `ytlog --summary` receipt command so long-tail 1-to-N viewer watch-times and bounce points correlate directly against article sections and Weebo/Max Headroom popups. Gate: `ytlog --summary` prints per-article mean watch-time and overlay delta table from live JSONL telemetry.
[[[DIVIDER]]]
# - TODO (2026-11-11, P0.31 TIMED "ARCHAEOLOGIST FROM THE FUTURE" EPISODE GRID & SPARK HARVESTER): Design a fixed-duration (~7-8 minute) broadcast and YouTube episode template ("And then the surprising thing he did next was..." cold open -> wire-truth receipt -> live FastHTML app punchline) alongside an inline `**SPARK**:` extractor in `scripts/articles/contextualizer.py` so stream-of-consciousness book-ore riffs surface cleanly without bloating `foo_files.py`. Gate: one timed Archaeologist-cut episode rendered and played inside a single Copper grid cycle.
# - TODO (2026-11-11, P0.30 PROMOTE 911 LLM OPTICS TO BEAD 1, TEASE IN BEAD 0, & FIX FIRST-TRIGGER OPTICS_SLOT RACE): Tease `911 LLM Optics` during Bead 0 (`:overview` Accepts Markdown), promote `911 LLM Optics` into Bead 1's slot ahead of White Rabbit (removing cold insider `NPvg` jargon from early breaks), and fix the handshake/tunnel startup race where the first `OPTICS_SLOT` / `ytapp optics` invocation falls back to local-workshop mode while the second invocation succeeds. Gate: cold first-pass `OPTICS_SLOT` claims and pins Firefox on `:10.0` on attempt 1.
# - TODO (2026-11-11, P0.29 YTWATCH DWELL-TIME & CUE/WEEBO DROP-OFF CORRELATION): Stamp active `(article_slug, cue_idx, heading, active_overlay)` state in `remotes/honeybot/scripts/stream.py` alongside `ytwatch` viewer-delta transitions in `scripts/articles/common.py` and expose a bounded `ytlog --summary` receipt command so long-tail 1-to-N viewer watch-times and bounce points correlate directly against article sections and Weebo/Max Headroom popups. Gate: `ytlog --summary` prints per-article mean watch-time and overlay delta table from live JSONL telemetry.
[[[REPLACE]]]
```

---

### 3. DANGLING

* `context.txt` was accidentally lowercased in-editor before deed `938` (`glossary.md`, `pathlib.path`, `none`), voiding Car 5's three `!` AFTER probes; Beat 4's `SEED` restores proper casing and closes all three receipts on the first compile of the next ride.
* Expanded `GLOSSARY.md` Constitution value for `# § GUARD ATEXIT REAPERS BEHIND SINGLETON LOCKS & DESIRED-STATE RECONCILERS` awaits the next `GLOSSARY.md` / `forget` pass (omitted from Beat 2 because lowercase `glossary.md` kept `GLOSSARY.md` out of raw source in deed `938`).
* `remotes/honeybot/scripts/test_forest.py` uses top-level script assertions rather than `unittest.TestCase` classes (`UNITTEST_RAN=0`).
* The fourth stanza of the *"A's and B's"* poem (*how the fleeing A's became the Thriving A's*) remains open for the author's pen.

---

### 4. SEED

```text
context.txt
GLOSSARY.md
foo_files.py
remotes/honeybot/scripts/forest.py
remotes/honeybot/scripts/stream.py
remotes/honeybot/scripts/score.py
scripts/ytstage.py
apps/911_optics_workflow.py
! .venv/bin/python -c 'import pathlib; g = pathlib.Path("GLOSSARY.md").read_text(encoding="utf-8"); r_map = "IDIC (Infinite Diversity in Infinite Combinations)" in g.split("## The Lexicon")[0]; r_lex = "- **IDIC (Infinite Diversity in Infinite Combinations)**" in g; r_rent = "RENT THIS PAYS" in g.split("- **IDIC")[1].split("\n- **Ignition**")[0] if r_lex else False; print(f"IDIC_IN_MAP={r_map} IDIC_IN_LEXICON={r_lex} IDIC_PAYS_RENT={r_rent}")'
! HONEYBOT_DB_READONLY=1 .venv/bin/python -c 'import sys; sys.path.insert(0, "remotes/honeybot/scripts"); import stream; keys = ("optics", "rabbit", "assemble", "overview", "bimodal", "tiktok", "pachinko"); res = {k: (" ".join(str(p.get("card", "")).split()), p.get("patronus") or p.get("window") or ("OPTICS_SLOT" if p.get("cues") else "")) for k in keys for p in [stream.trigger_station_bead_live(k, out_path=None)]}; ok = res["optics"] == ("911 LLM OPTICS", "OPTICS_SLOT"); print(f"OPTICS_OK={ok} LOOKUP={res}")'
! HONEYBOT_NO_AUDIO=1 HONEYBOT_DB_READONLY=1 .venv/bin/python -c 'import ast, pathlib, sys; sys.path.insert(0, "remotes/honeybot/scripts"); tree = ast.parse(pathlib.Path("remotes/honeybot/scripts/stream.py").read_text(encoding="utf-8")); top_atexit = sum(1 for n in tree.body if isinstance(n, ast.Expr) and "atexit" in ast.dump(n)); import stream; has_rec = hasattr(stream, "ensure_storytime_bgm_alive"); stream.start_storytime_bgm(); d1 = getattr(stream, "_bgm_desired", None); stream.stop_storytime_bgm(); d2 = getattr(stream, "_bgm_desired", None); print(f"TOP_LEVEL_ATEXIT={top_atexit} HAS_RECONCILER={has_rec} DESIRED_LIFECYCLE={(d1, d2)}")'
```

---

### 5. CLOSING

A compound microscope does not work by wishing harder at the specimen; it works when each brass tube along the optical bench clicks onto a single shared axis until the light focuses to a point hot enough to burn through a catapult rope. Across five small chisel-strikes, the noise that scattered attention—mispronounced gatekeeper acronyms, duplicated viewer gauges, twenty-minute gaps before a call to action, kitchen-sink headlines written for machines instead of people, and a stray `atexit` reaper quietly killing the room's ambient pulse—gave way to a tighter, self-healing stage pointed squarely at `SunPug.io` and `911 LLM Optics`. Better still, banking **IDIC** (*Infinite Diversity in Infinite Combinations*) settles the false choice between messy laboratory discovery and crisp public performance: the raw, un-retconned book-ore stays intact on disk as the source archive, while the *Archaeologist from the Future* steps out onto a timed grid to tell the seven-minute version that leaves one real human viewer glad they tuned in. That is how fleeing A-players become thriving ones—not by arguing with the hive, but by owning the bench, aligning the lenses, and letting the work speak clearly for itself.

---

### 6. NOTARIZE

* **Input Archive Identity:** Read directly from THIS compile's final `=== QA ARCHIVE SEAL ===` footer outside the payload (`qamy.ai_938-67342e65.zip`), naming the compiled input archive rather than this response or the downstream Jekyll post.
* **Independent Verification Status:** Not independently verified here (no `scripts/foo_cartridge.py` verifier receipt naming `qamy.ai_938-67342e65.zip` is present in this compile's Manifest).
* **Manifest Live-Command Receipt Count:** `3` live-command receipts total in THIS Manifest (`3` failures at `NON-ZERO EXIT 1` caused by lowercased `context.txt` identifiers; Summary Processing Log durations `0.0530s`, `0.2470s`, and `0.0505s`, alongside `1` topological integrity alert on `glossary.md`).
* **Recorded Measurements & Provenance:**
* `Summary -> Prompt Summary`: `214,902` summed tokens, `218,508` verified tokens, `66,916` words, `806,320` characters, `814,161` UTF-8 bytes.
* `Summary -> Processing Log`: Codex Mapping Coverage `75.3%` (`222/295` tracked files claimed), Ruff static analysis exit `0` (`All checks passed!`).
* `Telemetry -> Recent Git Diff Telemetry`: git blob transitions `GLOSSARY.md` (`8eaf074..ea96a91`) and `remotes/honeybot/scripts/stream.py` (`2be5cdb..80261ba`).
* `Codebase -> foo_files.py` (`START STATS`): `1,632` articles, `6,299` Markdown-negotiated reads (`0.37%`), `13904` DOM hydration triggers, Honeybot telemetry fetched `2026-11-11T17:42Z`.

Deed: qamy.ai_938-67342e65.zip


---

## Book Analysis

### Ai Editorial Take
And then the surprising thing the author did next was turn an annoying text-to-speech quirk into an ideological weapon against industry gatekeeping. Most developers building a voice pipeline treat a mispronounced word like 'SaaS' as a phonetic bug—they tweak a regex until the synthesizer hisses 'sass' or spells out 'S-A-A-S' and move on. Instead, mid-way through wiring a master pronunciation table, the author realized that forcing the machine to say 'Software as a Service' in full every single time strips the mystique right out of a $10,000-a-month rent-seeking category. What makes this artifact fascinating from a future vantage point is how that single acoustic decision mirrors the entire architecture of the session: whether it is replacing opaque cloud pre-renderers with readable RFC 9110 Markdown headers, replacing kitchen-sink robot titles with one honest human hook, or replacing a fragile one-shot audio spawn with a ten-second desired-state reconciler, every chisel-strike here refuses to let an abstraction hide what the machine is actually doing.

### 🐦 X.com Promo Tweet
```text
Why pay a $10K/mo pre-render tax when RFC 9110 Markdown and open-source wire optics exist? Inside our 7-minute broadcast grid for AI-Readiness.
https://mikelev.in/futureproof/seos-assemble-open-source-cure-prerender-tax/
#SEO #AIReadiness #FOSS
```

### 🎨 Hero Banner Image Prompt
```text
A wide 16:9 graphic-novel ink-and-wash illustration set in a dark obsidian-slate (#111111) laboratory where a series of five heavy brass optical lenses sit aligned along a precision cast-iron bench at the vertical center of the composition. A multi-colored beam of raw telemetry light enters from the left, passing through a glowing clockwork tuning fork, a dual-channel radar reticle, a white mechanical rabbit silhouette, and a crystal prism before converging into a single white-hot laser point on the right that burns cleanly through a thick, taut hemp catapult rope. Intricate cyan, amber, and gold light rays refract off the brass rings and illuminate swirling dust motes across the surrounding workbench tools and coiled copper audio cables that extend continuously to every edge of the scene with high-contrast chiaroscuro lighting. Full-bleed edge-to-edge composition filling 100% of the canvas with no borders, no frames, no matting, no margins, and no text overlays or lettering.
```

### 🖼️ YAML Frontmatter Image Override
```yaml
image:
  path: /assets/images/seos-assemble-open-source-cure-prerender-tax.jpeg
  alt: "A brass optical bench focusing cyan and gold light through aligned lenses to burn through a taut hemp rope."
```

### Title Brainstorm
* **Title Option:** SEOs, Assemble: The Open-Source Cure for the $10K Pre-Render Tax
  * **Filename:** `seos-assemble-open-source-cure-prerender-tax.md`
  * **Rationale:** Leads directly with the rallying cry and the high-stakes practitioner problem ($10K/mo pre-render bloat vs. open-source AI-readiness optics), giving technical SEOs on LinkedIn and X an immediate, high-integrity reason to click.
* **Title Option:** Why a Single Python Import Kept Muting Our 24/7 Live Broadcast
  * **Filename:** `python-import-muting-live-broadcast-atexit.md`
  * **Rationale:** Hooks software and systems engineers with a classic, counter-intuitive debugging mystery—how a module-level atexit reaper turned short-lived CLI helper calls into cross-process audio assassins.
* **Title Option:** Stop Writing Headlines for Robots: The 7-Minute Broadcast Grid
  * **Filename:** `stop-writing-headlines-for-robots-broadcast-grid.md`
  * **Rationale:** Captures the meta-editorial turn inside the session itself, contrasting LLM noun-list bloat against tight 7-minute human storytelling.
* **Title Option:** Why I Forced My TTS Engine to Unpack Every Gatekeeper Acronym
  * **Filename:** `tts-engine-unpack-gatekeeper-acronyms-piper.md`
  * **Rationale:** Focuses on the human-relatable insight of expanding 'SaaS' into 'Software as a Service' and '$10K' into spoken English so technical audio stops sounding like insider gatekeeping.

### Content Potential And Polish
- **Core Strengths:**
  - Demonstrates a rare, self-referential feedback loop: the article diagnoses kitchen-sink AI headlines, patches scripts/articles/editing_prompt.txt in Chisel Strike 4, and immediately uses the upgraded prompt to package itself.
  - Provides concrete, reusable systems engineering lessons—especially the root-cause analysis of module-level atexit.register(stop_storytime_bgm) sweeping /proc whenever a helper CLI flag exited, paired with a systemd-style desired-state reconciler.
  - Shows disciplined zero-row-cost UI design in Textual by repurposing #intelligence_panel's existing solid cyan top border into a centered gold SunPug.io banner while deduplicating header viewer metrics.
  - Establishes the IDIC (Infinite Diversity in Infinite Combinations) architecture clearly: keeping raw stream-of-consciousness book-ore intact as the verifiable source substrate while projecting tight 7-minute 'Archaeologist from the Future' episodes for human audiences.
- **Suggestions For Polish:**
  - Execute the seeded next-compile probes to record a clean 0-exit receipt after the accidental in-editor lowercasing of context.txt (glossary.md / pathlib.path / none) on the final turn.
  - Follow through on P0.30 in the next session by promoting 911 LLM Optics into Bead 1's slot ahead of the White Rabbit and resolving the first-invocation SSH reverse-tunnel race so live viewers see the FastHTML app within the first seven minutes.

### Next Step Prompts
- Review the restored proper-case SEED receipts for GLOSSARY.md (IDIC), trigger_station_bead_live('optics'), and the AST/BGM desired-state lifecycle, then execute P0.30: tease 911 LLM Optics during Bead 0 (:overview), promote 911 LLM Optics into Bead 1 ahead of the White Rabbit, and diagnose why the first OPTICS_SLOT / ytapp optics invocation falls back to local-workshop mode before succeeding on the second pass.
- Design the P0.29 + P0.31 showrunner telemetry bridge: stamp active (article_slug, cue_idx, heading, active_overlay) in stream.py alongside ytwatch viewer deltas so ytlog --summary reveals exact viewer drop-off points across the 7-minute Copper grid.
