The governance is right: stable M-IDs, gate tiers, flows as recipes, provenance in speaker notes, master first. What produces the slides is not. A hand-maintained Google Slides file on a pre-v3.5 type system, built by a script that lives in no repo, renders one text layout thirty-seven times. This page keeps the model whole and replaces the execution, and it does so as a working deck rather than a memo.
Record and plan: relay-board/docs/operations/deck-system-next.md. Law: GUIDE.presentations.md, GUIDE.motion-register.md. Every slide face here is OPEN-tier.
Left: M02 · The Problem as RelayCTX - Deck Slides exports it on 2026-09-10, reproduced from the file's own geometry and fonts. Right: the same canon copy through the proposed renderer. Same words. The difference is the system.
Today the master, slide 5 of 40
The model does the work, the session ends, the context disappears — as AI accelerates, that debt compounds across every team.
GUIDE.presentations.md §4 bans outright. It is on every content slide.RelayCTX; the copy gate says the product is Relay.Proposed archetype T02 · Statement with figure
kind: sessions) and rendered by the archetype, so M02 carries its picture in every cut.Cormorant Garamond and Outfit export correctly because Slides renders Google Fonts natively. JetBrains Mono is also a Google Font. The register's line that Slides exports a substitution stack is true for PPTX opened elsewhere and false for a native export: the defect is which fonts the builder sets, not the exporter.
| Outfit | 208 | body, footers |
| Cormorant Garamond | 54 | headlines, pull quotes |
| Syne | 34 | the eyebrow on every content slide |
| theme default | 27 | index, INDEX and gate slides, exported as Arial / Calibri |
| Comfortaa | 1 | the cover wordmark |
| JetBrains Mono | 0 | kickers, Codes and stamps have no mono face |
| Layouts | one DEFAULT layout; every shape is drawn by the script, so nothing inherits a master |
| Alpha copy | slide-for-slide identical to the master; no layout exploration happened there |
| Builder source | not in any repo, not visible to Drive search; reconstructable only from the playbook |
| M44 | already in the master's speaker notes on the “One System” slide, unregistered; the tranche slide is about to take the same number |
The direction of truth is unchanged: canon, then master, then cuts. What changes is that every arrow becomes a script with a source, and every output is checked before it leaves. Erik's two rules survive as things a build can enforce: the builder builds the master, and the model comes first.
One file per M-ID in git, Access-gated. Copy, gate, version, archetype, figure, notes. Relay Codes still carry the change packages; applying one is a pull request.
relay-board · deck/canon/M06.mdEach derived deck is a recipe: an ID list, a gate ceiling, per-recipient toggles and variables.
deck/flows/introduction-plus.ymlThe page you scroll, the screen you present, the PDF you send, the stamped copy a recipient gets. One file, three faces.
relay-creative · decks/_system/The Apps Script reads the same model and regenerates RelayCTX - Deck Slides, fonts set explicitly, notes stamped, INDEX generated.
Gate ceiling, copy gate, facts, faces, budget, font panel, stamp. Fails the build; wired into CI like the estate's other eleven.
scripts/build_deck.py --checkA sent copy is frozen and logged by the build, not by memory. “What did they actually see” has an answer.
relay-board · assets/decks/<recipient>-<date>.pdfIntroduction+ (OPEN, shared in confidence): M01 · M02 · M03 · M04 · M06 · M07 · M08 · M09 · M05. Copy verbatim from the Master Copy Deck with the adaptations already governed on the living Introduction; M08 at its canon-ready v3. The provenance line above each slide is what the speaker note carries; nothing reaches a face. Present this cut to see the same stages fullscreen with notes and the one beat each slide is allowed.
The guide's budget is bookends plus at most one interior moment, earned by the slide with the number or claim that deserves the room. The Elevate cut ships M09 with its figure off, so the round has not earned it. The first draft of this page gave the moment to M08 v3 instead, with 25,000+ in amber, and the review of the ElevateIP deck (carried by relay D7EHHS9559) ruled the same composition out on that deck: a big traction number immediately walked back by “majority founder-operated” reads as inflate-then-deflate. So the number sits inside the evidence and the cut runs bookends only. The rule the renderer follows: the moment follows the figure, and a figure that needs a caveat is not a hero. Flip the M09 toggle on and the round takes the moment, with amber on the figure, exactly as the living Introduction renders it.
A Google Slides file is one thing: a file. The rendered deck above is three: the page an investor scrolls on a gated surface, the screen Erik projects, and the PDF the festival profile carries. Present mode is the part a Slides file cannot be, and it is governed by the motion register rather than by taste.
| Slide | Beat | Provenance |
|---|---|---|
| M01 Cover | the mark's rays draw in, then the framing line rises | brand motion, pulse family |
| M02 Problem | each session lands, then the cross: the wall, in sequence | BRIEF.animations “Wall slam”, reinterpreted |
| M04 Why now | the callout arrives from the right after the body | BRIEF.animations “Window opens” |
| M06 How it moves | Send, Route, Receive in turn; then the Code | BRIEF.animations “Send → Route → Receive” |
| M07 Where it fits | the categories stack, then the resolution | BRIEF.animations “Layer settles” |
| M08 Real today | the evidence rows land in turn | the proof archetype |
| M03 · M05 · M09 | none | statements carry no beat |
| Register rule | How |
|---|---|
| 2 · play never gates content | beats fire only in present mode; the scrolled page is the finished frame |
| 3 · reduced motion is complete | prefers-reduced-motion removes every animation; nothing is parked at opacity 0 |
| 4 · one loud piece | one beat per slide, and statements carry none |
| 7 · transform and opacity only | every keyframe is a translate, scale or fade; no libraries |
| 9 · decorative layers are hidden | arrows, crosses and rays are aria-hidden; the text layer stands alone |
| Notes | the speaker note carries the M-ID stamp; the face never does |
Built the same day, in this repo: the archetypes are decks/_system/relay-deck.css, the inventory is decks/templates/, the master is decks/master/, the recipes are flows.json, and scripts/build_deck.py cuts a flow and runs the checks below. The master carries the model as data attributes on each slide today; the one-file-per-M-ID form shown here is the port the board proposal asks for.
id: M06
title: How It Moves
gate: OPEN # the checker reads this
version: 3
date: 2026-06-04
archetype: T04 # Flow
kicker: How it moves
headline: Context that travels.
figure:
kind: flow
steps:
- { name: Send, text: "Package the context of your work…" }
- { name: Route, text: "Relay carries it under your rules…" }
- { name: Receive, text: "It arrives where it's needed…" }
chip: { code: A4K9R2, note: "one Code carries it…" }
quote: "No integration project. No platform switch…"
notes: |
Three beats, then the Code. Never name the envelope,
the payload, or how routing decides.
rules:
- "Zero mechanism below the NDA gate."
flow: introduction-plus # Flow 9
gate: OPEN # the ceiling
slides: [M01, M02, M03, M04, M06, M07, M08, M09, M05]
toggles: { M09.figure: off }
vars:
framing: Investor introduction
date: September 2026
recipient: null # set → stamped export + sent-log row
Figures never carry typed numbers. The round figure lives once, in Canonical Facts on the board; M09, M23, M27, M40, M41, M44 and M45 read it. The raise-figure correction documented on 2026-08-27 becomes one line and a rebuild.
| T## | Archetype | M-ID families |
|---|---|---|
| T01 | Cover, drenched | M01 |
| T02 | Statement (optional figure) | M02 M03 M15 |
| T03 | Statement with callout | M04 |
| T04 | Flow: nodes and Code chip | M06 M11 |
| T05 | Category stack | M07 M14 |
| T06 | Proof list: evidence rows, the number never the hero | M08 |
| T07 | Stat, drenched when earned | M21 |
| T08 | Round / Ask, figure toggle | M09 M23 |
| T09 | Ladder | M20 M44 |
| T10 | Bars | M40 M41 |
| T11 | Timeline | M42 M43 M26 |
| T12 | Layers | M10 M28 |
| T13 | Landscape | M14 M13 |
| T14 | Roster | M34 M36 |
| T15 | Close, drenched | M05 |
| T16 | Gate divider, master only | G1 G2 |
| Rule | Fails when |
|---|---|
| Gate ceiling | a flow lists a slide above its gate |
| Copy gate | RelayCTX in copy · PIN · a banned word describing Relay · patent-pending |
| Facts | a figure on a face is not in Canonical Facts |
| Faces | an M-ID, tier or version reaches a face |
| Budget | two display headlines · drenched beyond bookends + one · amber on light |
| Fonts | an exported PDF embeds anything but the three families |
| Stamp | copy changed, version and date did not |
| Vocabulary | receive vs claim: reported, not failed, until the pass rules |
Erik's rules are kept whole. “Built with the builder against our master template” becomes the builder builds the master. “Master first” becomes model first: the master and every cut regenerate from it, so a derived deck can never carry a fact the model does not.
M## · T##; the INDEX slide is generated from the model, so it can no longer fall behind the canon..gs is committed and pushed with clasp. The base64-into-the-editor injection retires with the copy-paste problem it solved.decks/_system/slides-export.gs reads the model that build_deck.py --json writes and draws the cut natively in the master, idempotent by M-ID. Untested in the session that wrote it; the first run is confirmed in Drive. Erik's ruling on the workflow: design and cut here, then bring the generated slides into the masters.RelayCTX (today) or Relay (copy gate). The renderer needs a value.receive vs claim. Canon locks receive (June); the copy gate and the product say claim (July). This page keeps canon verbatim; the checker reports rather than fails. Not resolved here.