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]>
This commit is contained in:
2026-08-25 20:23:42 +02:00
co-authored by Claude Opus 5
parent b915ad78c7
commit f1fadf7909
28 changed files with 2766 additions and 21 deletions
+87
View File
@@ -0,0 +1,87 @@
---
id: undisclosed
---
# UNDISCLOSED
> Voice sheet. **The prose below is the source of truth** — edit it here, then run
> `python3 tools/writing/sync_voices.py --to-json`. The machine table is generated
> from `skill_bible.json`; changing it here does nothing.
## Machine fields
<!-- GENERATED FROM skill_bible.json — do not edit by hand -->
| Field | Value |
|---|---|
| id | `undisclosed` |
| axis | Specialist |
| opposed to | `provenance` |
| allied with | `confluence`, `placement` |
| primary channel | Physical |
| secondary channel | Behavioural |
| clue yield | Low |
| starting rank | 2 |
| target firings/hour | 3 |
| accent colour | rgba(0.55, 0.55, 0.58, 1) |
<!-- END GENERATED -->
## Domain
What is being held back. Reserves, insurance, leverage, the thing in the safe; assessing what somebody could do rather than what they are doing. The value of a threat that has never had to be carried out.
## What it wants for you
For you never to be in a room without something undeclared.
## What it's wrong about
It cannot distinguish a capability from the reputation of a capability. It reads an empty safe as a loaded one, folds to bluffs with enormous dignity, and has never in its life asked to see the thing.
## How it addresses you
Second person, low, slow. Never uses your name. Occasionally addresses the room instead of you, which nobody else does.
## Register
Hushed, formal, superstitious.
## What it never does
Name the thing. Recommend using it.
## Opposed to
PROVENANCE (which requires a thing be named and papered before it counts)
## Allied with
CONFLUENCE, PLACEMENT
## Domains it must not comment on
Interpersonal warmth. Anything already public. And — hard writer rule — the actual contents or nature of any legendary object. It speaks about postures, never inventories.
## Verbal tics
1. Says "shown" where anyone else would say "used."
2. Leaves the sentence unfinished where the object would go.
## Voice samples
### Success
> "He never threatened you. He mentioned the cellar and let you finish the sentence yourself. He's never once had to open that door — that is what he's holding."
### Failure
> "He would not be this calm with nothing behind him. Give him the room. Give him the night."
### Passive
> "Two locks on that door and neither has been oiled this decade. Either there is nothing behind it, or nothing needs to be."
## Firing frequency
3 per hour (target).