← Registry
Registry / 012AutomationProductionLLM upstream

Narration check.

A deployed check that reads generated narration and refuses to let it reach voice synthesis when it carries a fault. Every rule it enforces was written after that exact fault shipped.

Deployed automation — this configuration is running in production. Client identities are withheld.

Classified as automation: it executes a predefined path, interpreting nothing and selecting between nothing. It is a deployed component of a working system, built this way because the problem required no decision.

A model produces the input, and everything downstream of it is deterministic. The check that judges the model's output contains no model.

Objective

Catch a bad spoken line at the moment it is still text and free to fix, rather than after it has been voiced, assembled and published.

Runtime

  1. 01

    Read

    Loads the generated narration for each lesson while it is still editable text.

  2. 02

    Test

    Applies each rule: an unqualified figure on the cover, raw digits, repeated slides, empty lines.

  3. 03

    Measure

    Estimates spoken runtime from a measured words-per-second rate.

  4. 04

    Report

    Names the lesson, the slide and the offending line for each failure.

  5. 05

    Gate

    Exits non-zero on any failure, so the expensive synthesis step does not run.

Anatomy

Context

  • Generated narration, before any audio exists
  • A measured speech rate for the chosen voice
  • The runtime a platform will still classify as a short

Capabilities

  • Detect a figure stated without its unit
  • Detect raw digits a speech engine would mispronounce
  • Detect one slide restating another
  • Estimate spoken runtime from word count
  • Fail the run so the next step cannot proceed

Activation

  • Operator runs it between script generation and voice synthesis

Authority

What can it change?

Autonomy
Autonomous
Horizon
Operator-invoked

Read

  • Generated narration files

Write

  • Nothing — it reports and sets an exit code

Conditional

  • Pass the run only when every rule is satisfied

Prohibited

  • Edit the narration it judges
  • Pass a lesson with an empty or digit-bearing line
  • Silently downgrade a failure to a warning

Escalate

  • Any failure stops the pipeline and names the line for a human to fix

Composition and verification

Made from explicit parts.

Composition

  • Locally generated narration
  • Deterministic rule checks
  • A measured speech-rate model
  • Exit code as the gate
  • Human edit before rerun

Verification

  • Every rule that rejects exists because that failure shipped, on one day: 2026-08-17
  • Runs before synthesis, where a fix is still free
  • Long runtime is flagged as advisory, never as failure
  • The check writes nothing it could corrupt

Evidence

Check it yourself.

The rules are not good ideas someone had. Each one rejects a line that actually reached synthesis.

A mechanism, shown in source

studio/shorts/check-narration.py:5
Every check here exists because the failure it catches actually happened on 2026-08-17,
not because it seemed like a good idea:

  COVER-NO-UNIT   Lesson 02's opening line came out "Two hundred fifty from eighteen beats
                  five hundred from thirty-six" — inside its word budget and meaningless
                  spoken aloud. The cover is the only line with no preceding context, so a
                  figure there without its currency or unit is unrecoverable.

The docstring keeps the broken line itself, not a description of it. Feeding that exact sentence back in still trips COVER-NO-UNIT; adding the missing unit — "Two hundred fifty euro from eighteen…" — passes. The rule discriminates, rather than rejecting anything that looks numeric. LONG is excluded from this claim: it is advisory and flags nothing as an error.

Rules that reject
4
grep -c 'out.append' check-narration.py
Lessons currently clean
25
uv run --python 3.11 studio/shorts/check-narration.py
Speech rate, measured not guessed
2.31 w/s

A financial-education studio. The checker is published; the lessons it gates are the client's and are not. The one date is the docstring's own — git shows the pipeline built 2026-08-17 and the checker committed the next day, which is consistent with it, not independent proof of it.

What this establishes: that the mechanism exists and behaves as described, in source you can read and by figures you can reproduce. It does not by itself show the mechanism operating in production, and it is not an outcome observed by anyone other than us.

Next step

What you can do with this.

This configuration runs in production, client identity withheld. To discuss the same for your operation, start with the problem rather than the system: a first call is thirty minutes and costs nothing.

Start with the operating problem

Tell us what is not working.

A first call is thirty minutes and costs nothing. We say honestly whether we are the right people. You would be talking to the people at We Think Beautiful in Brussels — the ones who do the work, not an account layer above them.