Files
lennartandClaude Opus 5 f1fadf7909 add a writer-facing content pipeline under writing/
Dialogue was already plain text, so the gap was never the .yarn files. It was
that the character material a writing session needs was either missing or stored
somewhere a writer could not comfortably work.

Three things were wrong. The writing handbook was not in the repo and was cited
by SC101.yarn as though it were. The best voice material — register, verbal tics,
success/failure/passive samples — was a \n-escaped string inside a JSON field.
The named NPCs had no sheets at all, existing only as their Yarn lines.

writing/ now holds the dialogue-facing layer, at the repo root so it gets no
.meta files and is not a Unity asset:

  STYLE.md          register, the five tone moves, the ban list, branching
                    shapes, the Wrong Truth rule, flag families, candidate rules
  YARN-PRIMER.md    the one page of syntax needed to write a scene
  GLOSSARY.md       in-world and project vocabulary
  voices/           the eleven skill voices, one readable sheet each
  characters/       Bartender, Chevalier Cassian Thal, Bradford Kane
  scenes/           SC-101's brief: intent, beats, checks, constraints
  lore/             the three identity readings and the rules that bind them

STYLE.md is a digest of the Mystery Writing Handbook in the Obsidian vault, with
pointers rather than copies. The vault stays the authoring home for design work,
and Ground Truth — the solution document — deliberately stays out of this repo.

The voice sheets are generated from skill_bible.json but are the source of truth
for the prose. tools/writing/sync_voices.py folds edits back; voicelib.py
guarantees notes -> dict -> notes is identity for all eleven, so --to-json on
unchanged sheets is byte-identical. VoiceSheetSyncTests fails the build on drift
in either direction, and was verified to fail on real drift rather than merely
to pass.

SC101.yarn's header is trimmed from prose rationale to the six rules that bind
while editing that file, with the reasoning moved to the scene brief.

EditMode 42/42. YarnCheck compiles 9 files / 35 nodes.

Co-Authored-By: Claude Opus 5 <[email protected]>
2026-08-25 20:23:42 +02:00

2.0 KiB

id, name, chr, yarn_file, status, scenes
id name chr yarn_file status scenes
<kebab-case-id> <exact string used as the Yarn speaker prefix> CHR-### Assets/Dialogue/Characters/<File>.yarn planned
SC101

This is the dialogue-facing sheet. The full character record — placement in the Lorebook, faction row, the two truths, sensitivity check, continuity hooks — lives in the vault at [[Character Sheet Handbook]], one file per character. Fill that one first for any figure who touches real history or a faction. This sheet exists so a writing session can pick the character up and write them without loading all of it.

Who they are

One paragraph. What they want tonight, in this room — not their life goal.

How they speak

Register in three adjectives. Sentence length. Do they contract? Do they use the player's name, and which form — {$player_name}, {$player_name_full}, or {$player_alias}? Anything a reader could imitate.

Verbal tics

At most two. More than two is a costume, not a voice.

What they never say or do

The negative constraints. Usually more useful than the positive ones.

What they know

One row per thing the player can learn from them. "Reveals when" names the actual condition; "records" names the flag that remembers it.

They know True? Reveals when Records

What they are wrong about

Where their confidence outruns their information. This is what makes them a source of Wrong Truths rather than an oracle.

Their read on the protagonist

Which candidate reading, if any, they push — and what happens if the player agrees or refuses. Remember they advocate; they never state an identity as settled fact.

One line that is 100% them

Written now, before a scene needs it.

"..."

Open threads

What is unwritten, unresolved, or deliberately left open. Link the vault note if there is one.