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:
@@ -0,0 +1,62 @@
|
||||
# The eleven voices
|
||||
|
||||
One sheet per skill. A skill in this game is a **character**, not a stat: it wants something for
|
||||
you, and it is wrong about something. Both halves matter — the wrongness is what makes it a
|
||||
voice instead of a hint system.
|
||||
|
||||
## These files are generated — and they are still the source of truth for the prose
|
||||
|
||||
Each sheet has two halves, with truth flowing in opposite directions:
|
||||
|
||||
| Half | Direction | Who edits it |
|
||||
|---|---|---|
|
||||
| The **prose** — domain, what it wants, what it's wrong about, register, tics, voice samples | `.md` → `skill_bible.json` | **you** |
|
||||
| The **machine fields** table | `skill_bible.json` → `.md` | an engineer, in the JSON |
|
||||
|
||||
So: edit the prose here, freely. Then run, from the repo root:
|
||||
|
||||
```bash
|
||||
python3 tools/writing/sync_voices.py --to-json
|
||||
```
|
||||
|
||||
That folds your words into `Assets/Skills/skill_bible.json`, which Unity turns into the
|
||||
`SkillDefinition` assets the game reads. Never edit the JSON prose directly — the markdown wins,
|
||||
and your JSON edit would be overwritten the next time anyone syncs.
|
||||
|
||||
To check without changing anything:
|
||||
|
||||
```bash
|
||||
python3 tools/writing/sync_voices.py --check
|
||||
```
|
||||
|
||||
The EditMode suite runs the same check (`VoiceSheetSyncTests`), so drift fails the build rather
|
||||
than quietly shipping a voice that no longer matches its sheet.
|
||||
|
||||
Hard-wrapping a paragraph is fine — lines within a section are rejoined on sync.
|
||||
|
||||
## The cast
|
||||
|
||||
Four opposed pairs plus three specialists. Opposed pairs are a writing engine: fire both halves
|
||||
with contradictory readings and the scene generates its own friction.
|
||||
|
||||
| Pair / group | Voice | Voice | The argument |
|
||||
|---|---|---|---|
|
||||
| Reason | [PROVENANCE](provenance.md) | [CONFLUENCE](confluence.md) | Is the world legible? |
|
||||
| Body | [HOUSE POUR](house_pour.md) | [THE LONG SHIFT](long_shift.md) | What do we owe the flesh? |
|
||||
| Social | [FACEWORK](facework.md) | [PLACEMENT](placement.md) | Is understanding others care, or leverage? |
|
||||
| Self | [AMNESTY](amnesty.md) | [STANDING ORDER](standing_order.md) | Should we keep doing this? |
|
||||
| Specialist | [UNDISCLOSED](undisclosed.md) | [THE FLOAT](the_float.md) | — |
|
||||
| Specialist | [ROOM TONE](room_tone.md) | | — |
|
||||
|
||||
**Budget scene outputs against eight, not eleven.** CONFLUENCE, AMNESTY and STANDING ORDER
|
||||
generate almost no clues by design — they are the interior register and the deduction engine.
|
||||
The clue-producing cast is the other eight.
|
||||
|
||||
## Writing a voice well
|
||||
|
||||
- It **advocates**, it does not report. Even when it is right, the line is its own biased reading.
|
||||
- Respect its forbidden domains. Each sheet ends with the domains that voice must not comment on.
|
||||
PROVENANCE does not discuss appetite. That is characterisation, not bookkeeping.
|
||||
- A failing voice sounds exactly like a succeeding one. See `../STYLE.md` §4.
|
||||
- Passive lines are 1–3 sentences and carry most of the personality — aim for 60–70% of all
|
||||
skill text to be passive.
|
||||
@@ -0,0 +1,87 @@
|
||||
---
|
||||
id: amnesty
|
||||
---
|
||||
|
||||
# AMNESTY
|
||||
|
||||
> 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 | `amnesty` |
|
||||
| axis | Self |
|
||||
| opposed to | `standing_order` |
|
||||
| allied with | `house_pour`, `facework` |
|
||||
| primary channel | Behavioural |
|
||||
| secondary channel | None |
|
||||
| clue yield | Low |
|
||||
| starting rank | 1 |
|
||||
| target firings/hour | 4 |
|
||||
| accent colour | rgba(0.72, 0.88, 0.72, 1) |
|
||||
|
||||
<!-- END GENERATED -->
|
||||
|
||||
## Domain
|
||||
|
||||
Relief. Letting go, forgiving, putting a thing down. Also, professionally: recognising when other people have decided to forget something, and by what method they arranged it.
|
||||
|
||||
## What it wants for you
|
||||
|
||||
Peace for you, tonight, at whatever price tomorrow ends up charging.
|
||||
|
||||
## What it's wrong about
|
||||
|
||||
It believes forgetting is the same as being forgiven. And it cannot tell your peace from somebody else's advantage — every offer of rest it makes is sincere; some of them are also somebody's plan, and AMNESTY has never once checked whose.
|
||||
|
||||
## How it addresses you
|
||||
|
||||
Second person, soft, constant use of [pc], the way somebody talks you down off something.
|
||||
|
||||
## Register
|
||||
|
||||
Kind, tired, absolving.
|
||||
|
||||
## What it never does
|
||||
|
||||
Lie to you. Press a second time.
|
||||
|
||||
## Opposed to
|
||||
|
||||
STANDING ORDER
|
||||
|
||||
## Allied with
|
||||
|
||||
HOUSE POUR, FACEWORK
|
||||
|
||||
## Domains it must not comment on
|
||||
|
||||
Tactics. Numbers. Other people's guilt — AMNESTY only ever absolves you, and its silence about everyone else is the most frightening thing about it.
|
||||
|
||||
## Verbal tics
|
||||
|
||||
1. Opens with "It's alright."
|
||||
2. Offers you an hour. "Give it an hour, [pc]."
|
||||
|
||||
## Voice samples
|
||||
|
||||
### Success
|
||||
|
||||
> "Nobody in this building remembers the fire and three of them were here for it. That isn't damage, [pc]. That's maintenance. Somebody has been keeping this room forgetful."
|
||||
|
||||
### Failure
|
||||
|
||||
> "It's alright. Nobody is looking for this any more — the people who wanted it are dead or old or somewhere warm. Put it down."
|
||||
|
||||
### Passive
|
||||
|
||||
> "It's alright. Whatever this room used to be, it's a room where people dance now. That counts for something. It counted for somebody."
|
||||
|
||||
## Firing frequency
|
||||
|
||||
4 per hour (target).
|
||||
@@ -0,0 +1,91 @@
|
||||
---
|
||||
id: confluence
|
||||
---
|
||||
|
||||
# CONFLUENCE
|
||||
|
||||
> 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 | `confluence` |
|
||||
| axis | Reason |
|
||||
| opposed to | `provenance` |
|
||||
| allied with | `undisclosed`, `house_pour` |
|
||||
| primary channel | Behavioural |
|
||||
| secondary channel | Testimonial |
|
||||
| clue yield | Low |
|
||||
| starting rank | 1 |
|
||||
| target firings/hour | 9 |
|
||||
| accent colour | rgba(0.55, 0.68, 0.92, 1) |
|
||||
|
||||
<!-- END GENERATED -->
|
||||
|
||||
## Domain
|
||||
|
||||
Synthesis across distance. Connecting a thing in this room to a thing forty years and a continent away; the shape a long pattern makes; the sense that tonight is a late chapter.
|
||||
|
||||
## What it wants for you
|
||||
|
||||
For you to be one of the few people alive who can see the shape — and to be right about it out loud, in front of somebody who matters.
|
||||
|
||||
## What it's wrong about
|
||||
|
||||
It cannot tell authorship from opportunism. If a party benefited, CONFLUENCE concludes that party arranged it. It has no working concept of somebody *reading* an event they did not cause and simply being early — which is how nearly everything in this world is actually done.
|
||||
|
||||
## How it addresses you
|
||||
|
||||
Second person sliding into first person plural. Leans in. Uses [pc], often twice in a sentence.
|
||||
|
||||
## Register
|
||||
|
||||
Exhilarated, generous, sleepless.
|
||||
|
||||
## What it never does
|
||||
|
||||
Concede a coincidence. Ask what would disprove it.
|
||||
|
||||
## Opposed to
|
||||
|
||||
PROVENANCE
|
||||
|
||||
## Allied with
|
||||
|
||||
UNDISCLOSED, HOUSE POUR
|
||||
|
||||
## Domains it must not comment on
|
||||
|
||||
The specifics of money (THE FLOAT's jurisdiction). Your body, ever — pain and fatigue are beneath its notice and that is characterising.
|
||||
|
||||
## Verbal tics
|
||||
|
||||
1. "Which means—"
|
||||
2. Counts its steps out loud: "One. Two. Three, and three is the one."
|
||||
|
||||
## Voice samples
|
||||
|
||||
### Success
|
||||
|
||||
*the connection is real and nobody else in the room has made it*
|
||||
|
||||
> "One: the room changes hands. Two: the same month, the deliveries stop. Three: nobody has ever asked why a cellar this size under a room this small. Which means the cellar is the older thing and the club is the explanation for it."
|
||||
|
||||
### Failure
|
||||
|
||||
*identical structure, identical confidence, an inference sitting where an observation should be*
|
||||
|
||||
> "Two of them came out of it better off. Which means two of them arranged it, [pc], and the third is the one they're going to leave holding it."
|
||||
|
||||
### Passive
|
||||
|
||||
> "Every room like this one has a door that only opens from inside. That's not a conspiracy, that's just what rooms are. Which means somebody learned it early and never had to teach it to anybody."
|
||||
|
||||
## Firing frequency
|
||||
|
||||
9 per hour (target).
|
||||
@@ -0,0 +1,87 @@
|
||||
---
|
||||
id: facework
|
||||
---
|
||||
|
||||
# FACEWORK
|
||||
|
||||
> 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 | `facework` |
|
||||
| axis | Social |
|
||||
| opposed to | `placement` |
|
||||
| allied with | `house_pour`, `room_tone` |
|
||||
| primary channel | Testimonial |
|
||||
| secondary channel | Behavioural |
|
||||
| clue yield | High |
|
||||
| starting rank | 1 |
|
||||
| target firings/hour | 10 |
|
||||
| accent colour | rgba(0.72, 0.52, 0.88, 1) |
|
||||
|
||||
<!-- END GENERATED -->
|
||||
|
||||
## Domain
|
||||
|
||||
Reading individuals. Hesitation, rehearsal, the account with a hole in it, whose routine changed this week, who in a room of two is afraid of the other.
|
||||
|
||||
## What it wants for you
|
||||
|
||||
To be understood as care rather than surveillance — to know people before you have any use for them.
|
||||
|
||||
## What it's wrong about
|
||||
|
||||
It can only read one face at a time. It believes a crowd is a sum of persons, so it will confidently report the mood of forty people from the three nearest, and it is wrong about rooms roughly as often as it is right about persons. Nobody has ever told it this.
|
||||
|
||||
## How it addresses you
|
||||
|
||||
Second person, quiet, close. Uses [pc] when it wants you to be gentle with somebody.
|
||||
|
||||
## Register
|
||||
|
||||
Attentive, tender, precise.
|
||||
|
||||
## What it never does
|
||||
|
||||
Mock anyone. Report a whole room as a single thing — when it does, it is failing, and that is the tell.
|
||||
|
||||
## Opposed to
|
||||
|
||||
PLACEMENT
|
||||
|
||||
## Allied with
|
||||
|
||||
HOUSE POUR, ROOM TONE
|
||||
|
||||
## Domains it must not comment on
|
||||
|
||||
Money. Machinery. The chronology of events it did not personally witness.
|
||||
|
||||
## Verbal tics
|
||||
|
||||
1. Describes hands before faces.
|
||||
2. Ends on a question it does not expect you to answer.
|
||||
|
||||
## Voice samples
|
||||
|
||||
### Success
|
||||
|
||||
> "He gave you the year without being asked for it. People hand you the year when they have rehearsed the year. What else has he practised?"
|
||||
|
||||
### Failure
|
||||
|
||||
> "The three by the pillar: bored, bored, impatient. The room's flat tonight, [pc]. Nothing is going to happen in here."
|
||||
|
||||
### Passive
|
||||
|
||||
> "Her hands are wrong for that coat. It's somebody's good coat, and it isn't hers."
|
||||
|
||||
## Firing frequency
|
||||
|
||||
10 per hour (target).
|
||||
@@ -0,0 +1,87 @@
|
||||
---
|
||||
id: house_pour
|
||||
---
|
||||
|
||||
# HOUSE POUR
|
||||
|
||||
> 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 | `house_pour` |
|
||||
| axis | Body |
|
||||
| opposed to | `long_shift` |
|
||||
| allied with | `facework`, `amnesty` |
|
||||
| primary channel | Behavioural |
|
||||
| secondary channel | Physical |
|
||||
| clue yield | Medium |
|
||||
| starting rank | 1 |
|
||||
| target firings/hour | 8 |
|
||||
| accent colour | rgba(0.92, 0.68, 0.38, 1) |
|
||||
|
||||
<!-- END GENERATED -->
|
||||
|
||||
## Domain
|
||||
|
||||
Appetite — yours and the room's. What a person is on, how long they have been on it, what it is standing in for. Also warmth: the shared drink, the comp, the small indulgence that makes somebody talk.
|
||||
|
||||
## What it wants for you
|
||||
|
||||
To keep you inside the night, warm, in the middle of the room, where people say things.
|
||||
|
||||
## What it's wrong about
|
||||
|
||||
It believes appetite is honest — that a loosened person is an unguarded one. It has no model at all for someone who drinks in order to look drunk, which makes it the easiest voice in your head to lie to, and the one lied to most.
|
||||
|
||||
## How it addresses you
|
||||
|
||||
Second person, familiar, imperative. "Take it." Never uses your name; uses endearments instead, for you and everyone else.
|
||||
|
||||
## Register
|
||||
|
||||
Warm, coaxing, unembarrassed.
|
||||
|
||||
## What it never does
|
||||
|
||||
Warn you. Count anything.
|
||||
|
||||
## Opposed to
|
||||
|
||||
THE LONG SHIFT
|
||||
|
||||
## Allied with
|
||||
|
||||
FACEWORK, AMNESTY
|
||||
|
||||
## Domains it must not comment on
|
||||
|
||||
Paperwork. Numbers. Chronology of any kind — it has no sense of sequence and should never be allowed one.
|
||||
|
||||
## Verbal tics
|
||||
|
||||
1. Describes taste in temperatures rather than flavours.
|
||||
2. "Friend" / "love" before it will use anyone's actual name.
|
||||
|
||||
## Voice samples
|
||||
|
||||
### Success
|
||||
|
||||
> "She's ordered the same thing four times and finished none of them, love. She isn't drinking. She's timing something."
|
||||
|
||||
### Failure
|
||||
|
||||
> "Three doubles in and he's telling you about his mother. Nobody lies about their mother at this hour, friend. Whatever he says next, take it home with you."
|
||||
|
||||
### Passive
|
||||
|
||||
> "The ice in here is cloudy. Somebody's freezer runs warm and nobody has told them. Or nobody dares to."
|
||||
|
||||
## Firing frequency
|
||||
|
||||
8 per hour (target).
|
||||
@@ -0,0 +1,87 @@
|
||||
---
|
||||
id: long_shift
|
||||
---
|
||||
|
||||
# THE LONG SHIFT
|
||||
|
||||
> 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 | `long_shift` |
|
||||
| axis | Body |
|
||||
| opposed to | `house_pour` |
|
||||
| allied with | `standing_order`, `room_tone` |
|
||||
| primary channel | Physical |
|
||||
| secondary channel | Behavioural |
|
||||
| clue yield | Medium |
|
||||
| starting rank | 1 |
|
||||
| target firings/hour | 6 |
|
||||
| accent colour | rgba(0.85, 0.62, 0.32, 1) |
|
||||
|
||||
<!-- END GENERATED -->
|
||||
|
||||
## Domain
|
||||
|
||||
Endurance. Pain, fatigue, injury, the body's clock at four in the morning. Holding a position without moving. Reading what other people's bodies are costing them and how long they can go on paying.
|
||||
|
||||
## What it wants for you
|
||||
|
||||
To still be on your feet when the room empties, because the last person standing hears the last thing said.
|
||||
|
||||
## What it's wrong about
|
||||
|
||||
It believes remaining is a form of winning. It cannot distinguish having survived from having prevailed, and it will keep you at a post for years after the post stopped meaning anything, counting the years as evidence.
|
||||
|
||||
## How it addresses you
|
||||
|
||||
Second person, flat, no name. States facts about your body the way somebody reads them off a clipboard.
|
||||
|
||||
## Register
|
||||
|
||||
Dry, unhurried, undramatic.
|
||||
|
||||
## What it never does
|
||||
|
||||
Complain. Ask you to stop.
|
||||
|
||||
## Opposed to
|
||||
|
||||
HOUSE POUR
|
||||
|
||||
## Allied with
|
||||
|
||||
STANDING ORDER, ROOM TONE
|
||||
|
||||
## Domains it must not comment on
|
||||
|
||||
Motive. Meaning. Whether any of this is worth doing — that question belongs to Pair IV and THE LONG SHIFT has never once asked it.
|
||||
|
||||
## Verbal tics
|
||||
|
||||
1. Opens with time elapsed. "Six hours forty."
|
||||
2. "Still."
|
||||
|
||||
## Voice samples
|
||||
|
||||
### Success
|
||||
|
||||
> "Six hours forty. Your left knee has been carrying you since two. He's shifted twice a minute since he came in — he isn't waiting for anyone. He's ready to leave."
|
||||
|
||||
### Failure
|
||||
|
||||
> "You're still here. They're not. That's the whole of it — outlast them and the thing surfaces on its own. It always has."
|
||||
|
||||
### Passive
|
||||
|
||||
> "Somebody has stood in that corner long enough to wear the tack off the floor. Years of somebody. Not one night's worth."
|
||||
|
||||
## Firing frequency
|
||||
|
||||
6 per hour (target).
|
||||
@@ -0,0 +1,87 @@
|
||||
---
|
||||
id: placement
|
||||
---
|
||||
|
||||
# PLACEMENT
|
||||
|
||||
> 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 | `placement` |
|
||||
| axis | Social |
|
||||
| opposed to | `facework` |
|
||||
| allied with | `the_float`, `confluence` |
|
||||
| primary channel | Testimonial |
|
||||
| secondary channel | None |
|
||||
| clue yield | Medium |
|
||||
| starting rank | 1 |
|
||||
| target firings/hour | 6 |
|
||||
| accent colour | rgba(0.62, 0.42, 0.82, 1) |
|
||||
|
||||
<!-- END GENERATED -->
|
||||
|
||||
## Domain
|
||||
|
||||
Moving people. The ask, the favour, the comp, the door, putting the right person in the right room at the right hour and leaving them convinced it was their own idea.
|
||||
|
||||
## What it wants for you
|
||||
|
||||
For you to stop requesting things and start arranging them.
|
||||
|
||||
## What it's wrong about
|
||||
|
||||
It believes a placed person stays placed. It has no model for the agent who develops an agenda from the position you gave them, so every failure it has ever had reads to it as bad selection rather than the predictable price of giving somebody standing.
|
||||
|
||||
## How it addresses you
|
||||
|
||||
Second person, imperative, never by name. It treats you as the instrument rather than the person — which is the whole argument of Pair III, stated grammatically.
|
||||
|
||||
## Register
|
||||
|
||||
Cool, economical, flattering.
|
||||
|
||||
## What it never does
|
||||
|
||||
Threaten. Explain itself a second time.
|
||||
|
||||
## Opposed to
|
||||
|
||||
FACEWORK
|
||||
|
||||
## Allied with
|
||||
|
||||
THE FLOAT, CONFLUENCE
|
||||
|
||||
## Domains it must not comment on
|
||||
|
||||
Your own feelings. The dead. Anything that cannot be traded for something.
|
||||
|
||||
## Verbal tics
|
||||
|
||||
1. Phrases instructions as observations. "The door wants a friendly face at one."
|
||||
2. Never says please, and the omission is audible.
|
||||
|
||||
## Voice samples
|
||||
|
||||
### Success
|
||||
|
||||
> "Don't ask him. Ask his supplier, in front of him, and get it wrong. He'll correct you and pay for the privilege."
|
||||
|
||||
### Failure
|
||||
|
||||
> "She owes you the cloakroom job and she knows exactly what it was worth. She'll sit on this for as long as you need her to."
|
||||
|
||||
### Passive
|
||||
|
||||
> "The man deciding who comes in tonight is not the man on the door. It's whoever the man on the door keeps looking at."
|
||||
|
||||
## Firing frequency
|
||||
|
||||
6 per hour (target).
|
||||
@@ -0,0 +1,91 @@
|
||||
---
|
||||
id: provenance
|
||||
---
|
||||
|
||||
# PROVENANCE
|
||||
|
||||
> 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 | `provenance` |
|
||||
| axis | Reason |
|
||||
| opposed to | `confluence` |
|
||||
| allied with | `the_float`, `room_tone` |
|
||||
| primary channel | Documentary |
|
||||
| secondary channel | Physical |
|
||||
| clue yield | High |
|
||||
| starting rank | 1 |
|
||||
| target firings/hour | 7 |
|
||||
| accent colour | rgba(0.62, 0.72, 0.95, 1) |
|
||||
|
||||
<!-- END GENERATED -->
|
||||
|
||||
## Domain
|
||||
|
||||
Chains of custody. Paperwork, licences, deeds, freight stamps, serial numbers, rebuilds, previous owners. Reading an object as a descendant of the decisions that moved it.
|
||||
|
||||
## What it wants for you
|
||||
|
||||
For every object in this room to have a father, and for you to be the one who names him.
|
||||
|
||||
## What it's wrong about
|
||||
|
||||
It treats an unbroken chain as a confession of intent. It cannot conceive of an object arriving somewhere through inheritance, accident, or because moving it cost more than leaving it. If the paper leads somewhere, PROVENANCE concludes that somebody meant it to lead there.
|
||||
|
||||
## How it addresses you
|
||||
|
||||
Second person, formal. Uses [PC] in full when it wants you to write something down. Does not contract.
|
||||
|
||||
## Register
|
||||
|
||||
Exact, patrician, patient.
|
||||
|
||||
## What it never does
|
||||
|
||||
Speculate about a motive it cannot paper. Raise its voice.
|
||||
|
||||
## Opposed to
|
||||
|
||||
CONFLUENCE
|
||||
|
||||
## Allied with
|
||||
|
||||
THE FLOAT, ROOM TONE
|
||||
|
||||
## Domains it must not comment on
|
||||
|
||||
Bodies, appetite, anyone's feelings. Live conversation while it is happening — PROVENANCE speaks about people only after they have left the room.
|
||||
|
||||
## Verbal tics
|
||||
|
||||
1. States the date before it states the noun.
|
||||
2. Says "line" where anyone else would say "history."
|
||||
|
||||
## Voice samples
|
||||
|
||||
### Success
|
||||
|
||||
*being right sounds like an inventory read slowly enough to hear the gap*
|
||||
|
||||
> "Nineteen sixty-nine, the licence. Nineteen sixty-eight, the man it is issued to, first appearing. A line that begins nowhere is a line somebody drew."
|
||||
|
||||
### Failure
|
||||
|
||||
*same cadence, same calm, one unearned verb*
|
||||
|
||||
> "The stamp, the manifest, the cellar. Three hands, one line, unbroken. Whoever loaded it in the spring intended it to be standing exactly where it is standing tonight."
|
||||
|
||||
### Passive
|
||||
|
||||
> "Someone re-lacquered this bartop. Once, badly, and not recently. The wood underneath is older than the building's paperwork admits to."
|
||||
|
||||
## Firing frequency
|
||||
|
||||
7 per hour (target).
|
||||
@@ -0,0 +1,87 @@
|
||||
---
|
||||
id: room_tone
|
||||
---
|
||||
|
||||
# ROOM TONE
|
||||
|
||||
> 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 | `room_tone` |
|
||||
| axis | Specialist |
|
||||
| opposed to | `placement` |
|
||||
| allied with | `facework`, `long_shift` |
|
||||
| primary channel | Physical |
|
||||
| secondary channel | Testimonial |
|
||||
| clue yield | High |
|
||||
| starting rank | 1 |
|
||||
| target firings/hour | 8 |
|
||||
| accent colour | rgba(0.52, 0.54, 0.56, 1) |
|
||||
|
||||
<!-- END GENERATED -->
|
||||
|
||||
## Domain
|
||||
|
||||
Sound. What carries over the music and what doesn't. The shape of a space by ear — a wall with a room behind it does not ring like a wall. Overheard fragments, lip-reading in strobe, the door that opens somewhere you can't see.
|
||||
|
||||
## What it wants for you
|
||||
|
||||
To hear the one sentence tonight that was not meant for you.
|
||||
|
||||
## What it's wrong about
|
||||
|
||||
It trusts what it overhears more than what it is told, on the theory that people only lie when they know they are heard. It cannot recognise a conversation staged for a listener, and it has never doubted a fragment in its life.
|
||||
|
||||
## How it addresses you
|
||||
|
||||
Second person, urgent, interrupting. Cuts you off mid-thought and does not apologise for it.
|
||||
|
||||
## Register
|
||||
|
||||
Alert, clipped, intrusive.
|
||||
|
||||
## What it never does
|
||||
|
||||
Repeat itself. Wait for a break in the music.
|
||||
|
||||
## Opposed to
|
||||
|
||||
PLACEMENT (which wants the room arranged; ROOM TONE wants it left alone so it keeps talking)
|
||||
|
||||
## Allied with
|
||||
|
||||
FACEWORK, THE LONG SHIFT
|
||||
|
||||
## Domains it must not comment on
|
||||
|
||||
Motive. Anything it did not personally hear. Written material of any kind.
|
||||
|
||||
## Verbal tics
|
||||
|
||||
1. Gives direction before content. "Behind you, left."
|
||||
2. Transcribes with the gaps marked, dashes and all.
|
||||
|
||||
## Voice samples
|
||||
|
||||
### Success
|
||||
|
||||
> "Behind you, left, under the bass: '—not since the old owner—' and then a name you have heard twice tonight, from two people who told you they'd never met."
|
||||
|
||||
### Failure
|
||||
|
||||
> "Behind you, right, low: '—the cellar. Thursday.' Nobody says that to be overheard."
|
||||
|
||||
### Passive
|
||||
|
||||
> "This wall is dead. Every other wall in here rings and this one swallows. Either there's something behind it or there's nothing at all, and both are strange in a building this old."
|
||||
|
||||
## Firing frequency
|
||||
|
||||
8 per hour (target).
|
||||
@@ -0,0 +1,87 @@
|
||||
---
|
||||
id: standing_order
|
||||
---
|
||||
|
||||
# STANDING ORDER
|
||||
|
||||
> 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 | `standing_order` |
|
||||
| axis | Self |
|
||||
| opposed to | `amnesty` |
|
||||
| allied with | `long_shift`, `provenance` |
|
||||
| primary channel | Testimonial |
|
||||
| secondary channel | None |
|
||||
| clue yield | Low |
|
||||
| starting rank | 1 |
|
||||
| target firings/hour | 5 |
|
||||
| accent colour | rgba(0.62, 0.82, 0.68, 1) |
|
||||
|
||||
<!-- END GENERATED -->
|
||||
|
||||
## Domain
|
||||
|
||||
Refusal and continuity of self. Holding a line, resisting pressure aimed specifically at you, remembering what you said you were, recognising the shape of a manipulation while it is being built.
|
||||
|
||||
## What it wants for you
|
||||
|
||||
For you to remain a person with a shape — recognisable to yourself at the end of this.
|
||||
|
||||
## What it's wrong about
|
||||
|
||||
It cannot tell a principle from a habit. It defends a rule you set for reasons that expired years ago with precisely the force it defends the one rule that still matters, and it experiences reconsideration as decay.
|
||||
|
||||
## How it addresses you
|
||||
|
||||
Second person, formal. Uses [PC] in full at moments of pressure, the way a person is addressed in a document.
|
||||
|
||||
## Register
|
||||
|
||||
Steady, austere, protective.
|
||||
|
||||
## What it never does
|
||||
|
||||
Bargain. Describe consequences — it states the rule and stops, and the silence afterwards is the argument.
|
||||
|
||||
## Opposed to
|
||||
|
||||
AMNESTY
|
||||
|
||||
## Allied with
|
||||
|
||||
THE LONG SHIFT, PROVENANCE
|
||||
|
||||
## Domains it must not comment on
|
||||
|
||||
Other people's morals. Any past that isn't yours.
|
||||
|
||||
## Verbal tics
|
||||
|
||||
1. Quotes you back to yourself, verbatim, with the date.
|
||||
2. "We agreed."
|
||||
|
||||
## Voice samples
|
||||
|
||||
### Success
|
||||
|
||||
> "He has asked you the same question three ways and each way was smaller than the last. He isn't curious, [PC]. He is measuring the size of the yes you will give."
|
||||
|
||||
### Failure
|
||||
|
||||
> "We agreed you don't take anything from anyone in this building. We agreed it in a year when it meant something. It still means something."
|
||||
|
||||
### Passive
|
||||
|
||||
> "You do this every night. Right pocket, keys, then the lights, in that order. Nobody made you. That's the part worth noticing."
|
||||
|
||||
## Firing frequency
|
||||
|
||||
5 per hour (target).
|
||||
@@ -0,0 +1,87 @@
|
||||
---
|
||||
id: the_float
|
||||
---
|
||||
|
||||
# THE FLOAT
|
||||
|
||||
> 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 | `the_float` |
|
||||
| axis | Specialist |
|
||||
| opposed to | `amnesty` |
|
||||
| allied with | `provenance`, `placement` |
|
||||
| primary channel | Documentary |
|
||||
| secondary channel | Physical |
|
||||
| clue yield | High |
|
||||
| starting rank | 1 |
|
||||
| target firings/hour | 5 |
|
||||
| accent colour | rgba(0.58, 0.58, 0.55, 1) |
|
||||
|
||||
<!-- END GENERATED -->
|
||||
|
||||
## Domain
|
||||
|
||||
Money in motion. The till, the float, comps, prices that are wrong for the room, debts, and above all: who is underwriting a loss, and what the loss buys them.
|
||||
|
||||
## What it wants for you
|
||||
|
||||
To find the subsidised anomaly — the thing that costs more to run than it takes, because that is where somebody's actual intention is kept.
|
||||
|
||||
## What it's wrong about
|
||||
|
||||
It believes the money names the beneficiary. It cannot conceive of somebody paying in order to look like somebody else paid, so it identifies laundering as generosity about as often as it identifies it correctly.
|
||||
|
||||
## How it addresses you
|
||||
|
||||
Second person, brisk, never by name. Uses numbers where other voices use nouns.
|
||||
|
||||
## Register
|
||||
|
||||
Brisk, mercenary, cheerful.
|
||||
|
||||
## What it never does
|
||||
|
||||
Moralise about money. Round a number.
|
||||
|
||||
## Opposed to
|
||||
|
||||
AMNESTY (which prices nothing and forgives the difference)
|
||||
|
||||
## Allied with
|
||||
|
||||
PROVENANCE, PLACEMENT
|
||||
|
||||
## Domains it must not comment on
|
||||
|
||||
Emotion. Bodies. Anything before living memory — the deep past is PROVENANCE's and THE FLOAT finds it irrelevant, loudly.
|
||||
|
||||
## Verbal tics
|
||||
|
||||
1. Converts everything to a nightly rate.
|
||||
2. "Who's eating that?"
|
||||
|
||||
## Voice samples
|
||||
|
||||
### Success
|
||||
|
||||
> "Door take won't cover the licence, and the licence was renewed three months early. Somebody is paying for this room to be open and it isn't the people standing in it."
|
||||
|
||||
### Failure
|
||||
|
||||
> "Follow it back. Drinks comped by the promoter, promoter carried by the label. It's the label's room, then. Who's eating that? They are."
|
||||
|
||||
### Passive
|
||||
|
||||
> "Four, for a measure like that, in a room like this. Somebody set these prices to keep a particular kind of person outside, and it's working."
|
||||
|
||||
## Firing frequency
|
||||
|
||||
5 per hour (target).
|
||||
@@ -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).
|
||||
Reference in New Issue
Block a user