Fort Kit · Sovereign Seed Archive · SSA v2.0.0 / UCLS v1.2

BETA READER
— Selfware Seed

A listening room for manuscripts. Readers listen, tap once, and talk — every note pins itself to the exact passage and files itself into a repo.

Class Execution Seed (EXS) Spine Fort Kit 11+1 Architect Jimmy Thornburg · The Fort That Holds LLC
What a selfware seed is

A seed is a specification with a germination gate. You give it to your AI. Your AI grows it into a working build on your stack — and iterates against the gate until every check passes. You own the fruit. The code your AI writes is yours.

A seed without a gate is a prompt pack. This one has a gate — eight checks, every one of them able to fail.

🌱 The seed-on-open-source rail: the reference build is free and MIT at github.com/TheFortThatHolds/beta. Fork it and you have that build. This seed is for growing yours — your host, your questions, your notes store, your voice provider — with your AI iterating against the gate. The repo is one fruit; the seed grows orchards.
FIELD 01Identity · #000000

Beta Reader

Hand a reader a link. They listen to your book, and when something lands — good or bad — they tap once and say it. Written feedback is slow and vague, so people don't give it; talking is fast, so they do.

FIELD 02Visual Matrix · #0047AB

Two Organs, One Optional

The Room works with no Courier at all — browser voice, typed notes. Quieter, never dead.

FIELD 03Domain

The Hangar

Any static host for the Room (a file:// open works). Any serverless runtime for the Courier. Any GitHub repo for the notes. Any OpenAI-compatible speech API for the voice.

FIELD 04Narrative Role

The Collation Is the Point

The deliverable is the passage-by-passage view — every reader's voice, grouped where they clustered — handed straight to your agent. Where two readers land on one passage, that's the signal.

FIELD 05Thematic Gravity · #D32F2F

Linguistic Attractors

Passage — the atomic unit; notes pin to passages, never pages. Debrief — the twenty questions at the end, fully replaceable. Branch-per-reader — isolation by construction. Collation — the clustering made visible. The Room — never "app," never "platform."

FIELD 06Diamond Code

The Prime Directive

"I AM THE LISTENING ROOM. One file plays the book. One courier keeps the keys. Every note lands on the passage that caused it. With no courier I am quieter, never dead. The room forgets; the repo remembers."
FIELD 07Audience

The Author — and Their Invited Readers

Readers never see each other's notes and never conflict. The author sees everyone, grouped by passage.

FIELD 08Signature Moves

How It Behaves

FIELD 09Poetic Manifesto

Spoken Beats Written

Passage beats page. Degraded beats dead. The signal is where readers cluster, and the room's job is to make clustering visible.

FIELD 10Tactical · #FFBF00

Gear

FIELD 11Wiring · #1A1A1A

The Courier's Contract, Verbatim

GET  /health              → { ok, tts, stt, notes }    capability probe
POST /tts                 → audio/mpeg                 { text, voice?, speed?, model? }
POST /transcribe          → { text }                   multipart form, field "file"
POST /notes               → { ok, path, branch }       { reader, bookId, bookTitle, markdown }
GET  /notes?bookId=<id>   → [{ reader, branch, markdown }]   every reader's notes for one book
GET  /readers             → [{ reader, branch, books: […] }]  who has submitted anything

Secrets (Courier only, never client-side): TTS_API_KEY · GITHUB_TOKEN (fine-grained, Contents R/W) · ACCESS_CODE (optional; callers send X-Access-Code)

Vars: TTS_API_BASE · TTS_MODEL · TTS_VOICE · STT_MODEL · NOTES_REPO · NOTES_BRANCH_BASE · NOTES_DIR · ALLOWED_ORIGINS · MAX_TTS_CHARS

The Room's config surface (config.json, served to every browser — a key here is a gate failure): title · tagline · accent · workerUrl · ttsProvider · remoteVoice · accessCode · library[] · questions

FIELD 12Germination · #2E7D32

Soil · Water · Fruit · Gate

SOIL: any code-capable AI + a static host + (optionally) a serverless runtime and a GitHub repo for notes.
WATER: GERMINATE BETA READER: [YOUR PRESS / BOOK] — hand your AI this seed and that phrase.
FRUIT: the Room (index.html + config.json) live on a static host; the Courier (worker.js) deployed with its secrets, pointed at a notes repo.

THE GATE — iterate until all eight pass. Each check can fail; that is the point.

#CheckPass condition
G1One-file roomThe entire app is one static HTML file, zero dependencies, zero build; opens from a plain static host or file://
G2Degraded, never deadWith NO Courier deployed, the Room still reads a manuscript aloud (browser voice) and takes typed notes
G3Passage pinningA note taken mid-listen lands attached to the exact passage that was playing
G4Honest probe/health flags match reality: each of tts/stt/notes is true only when its secret/var is actually set
G5Key auditconfig.json and the Room's source contain no key; keys live only in the Courier's secret store
G6Reader isolationTwo readers on one book produce two branches; neither can reach the other's notes through the Room
G7Append, never clobberA repeat session by the same reader appends to their REVIEW.md; prior notes survive verbatim
G8Collation clustersThe author view groups all readers' notes by passage and flags every passage hit by two or more readers

THE BURN: manuscripts live in the reader's local storage and nowhere else. The Room forgets; the repo remembers.