updated Candidate System with Voice System
This commit is contained in:
@@ -40,11 +40,43 @@ title: Declarations
|
||||
// Candidate lean. Three permanently-live readings of who the PC is; they are
|
||||
// not mutually exclusive and never resolve. Writers <<set>> these; no code
|
||||
// reads them. There is deliberately NO derived "winning candidate" variable —
|
||||
// see docs/candidate-system-plan.md §5.
|
||||
// see docs/candidate-system-implementation-plan.md §6.
|
||||
<<declare $self_lean_made_asset = 0 as number>>
|
||||
<<declare $self_lean_journalist = 0 as number>>
|
||||
<<declare $self_lean_inheritor = 0 as number>>
|
||||
|
||||
// Scene witnessed. New convention: $seen_<scene_id>.
|
||||
// Scene witnessed. Convention: $seen_<scene_id>.
|
||||
<<declare $seen_sc_101 = false as bool>>
|
||||
|
||||
// Clue coverage flags. One per registry clue id ($found_<clue_id>). Writers
|
||||
// <<set>> these at the discovery beat alongside the lean write. Lean tracks
|
||||
// belief (and can move on a Wrong Truth failure); $found_* tracks coverage.
|
||||
// No code reads these.
|
||||
<<declare $found_made_asset_object = false as bool>>
|
||||
<<declare $found_made_asset_testimony = false as bool>>
|
||||
<<declare $found_made_asset_document = false as bool>>
|
||||
<<declare $found_made_asset_intuition = false as bool>>
|
||||
<<declare $found_journalist_object = false as bool>>
|
||||
<<declare $found_journalist_testimony = false as bool>>
|
||||
<<declare $found_journalist_document = false as bool>>
|
||||
<<declare $found_journalist_intuition = false as bool>>
|
||||
<<declare $found_inheritor_object = false as bool>>
|
||||
<<declare $found_inheritor_testimony = false as bool>>
|
||||
<<declare $found_inheritor_document = false as bool>>
|
||||
<<declare $found_inheritor_intuition = false as bool>>
|
||||
|
||||
// Exploration gating. Clue availability is exploration-gated, never skill-gated.
|
||||
// Convention: $visited_<location_id> on first arrival; $errand_<errand_id> when
|
||||
// an errand reaches the state that matters. Writers <<set>> these from scene
|
||||
// content. unlockFlag fields in candidates.json may only name these families.
|
||||
<<declare $visited_desk = false as bool>>
|
||||
<<declare $visited_back_office = false as bool>>
|
||||
<<declare $visited_archives = false as bool>>
|
||||
<<declare $visited_coat_check = false as bool>>
|
||||
<<declare $visited_press_room = false as bool>>
|
||||
<<declare $visited_private_box = false as bool>>
|
||||
<<declare $visited_membership_ledger = false as bool>>
|
||||
<<declare $errand_door_list = false as bool>>
|
||||
<<declare $errand_find_contact = false as bool>>
|
||||
<<declare $errand_ask_about_name = false as bool>>
|
||||
===
|
||||
|
||||
@@ -1,6 +1,12 @@
|
||||
// Scratch nodes for verifying mechanics in isolation. Not part of the story.
|
||||
// Point DialogueRunner.startNode at the node you want to run, then set it
|
||||
// back to "Start" when you're done.
|
||||
//
|
||||
// Candidate active-check pattern (docs/candidate-system-implementation-plan.md §5 Phase 3):
|
||||
// <<check skillId band>>
|
||||
// <<if $check_result>> success branch writes $found_* + $self_lean_*
|
||||
// <<else>> failure is a Wrong Truth — equally confident, unmarked in prose,
|
||||
// and still writes lean (belief, not truth). Banner is the only tell.
|
||||
|
||||
title: Debug_SkillCheck
|
||||
---
|
||||
@@ -33,3 +39,21 @@ Narrator: made_asset {$self_lean_made_asset} / journalist {$self_lean_journalist
|
||||
Narrator: threshold branch reached.
|
||||
<<endif>>
|
||||
===
|
||||
|
||||
// Candidate active-check pattern. Set SkillRuntime.rollSeed non-zero for a
|
||||
// SeededRollSource so both branches are reachable deterministically across runs.
|
||||
// Success feeds made_asset; failure feeds inheritor (Wrong Truth lean — §4.4).
|
||||
title: Debug_CandidateCheck
|
||||
---
|
||||
Narrator: Candidate check harness. Banner is the only pass/fail tell.
|
||||
<<check confluence hard>>
|
||||
<<if $check_result>>
|
||||
CONFLUENCE: One: the card's stock matches the Concordat watermark. Two: the date is a week before the invitation went out. Three — and three is the one — somebody left this for you to find. Which means you were expected.
|
||||
<<set $found_made_asset_document = true>>
|
||||
<<set $self_lean_made_asset += 1>>
|
||||
<<else>>
|
||||
CONFLUENCE: One: the card's stock matches a wedding invitation from the thirties. Two: the date is your mother's. Three — and three is the one — you already knew the seating. Which means this was never yours to choose.
|
||||
<<set $self_lean_inheritor += 1>>
|
||||
<<endif>>
|
||||
Narrator: lean made_asset {$self_lean_made_asset} / inheritor {$self_lean_inheritor}. Degree {$check_degree}.
|
||||
===
|
||||
|
||||
@@ -1,21 +1,34 @@
|
||||
// SC-101 — The Card at the Desk. Opening candidate hooks.
|
||||
//
|
||||
// Scene files stay thin: set the stage, <<detour>> into hook nodes, return.
|
||||
// Prose is TODO until the writing pass; structure and flag writes are locked.
|
||||
//
|
||||
// Evidence rule (design §1.3): each candidate gets exactly one of each evidence
|
||||
// type — object, testimony, document, intuition. Preserve that balance; do not
|
||||
// Evidence rule: each candidate gets exactly one of each evidence type —
|
||||
// object, testimony, document, intuition. Preserve that balance; do not
|
||||
// stack types so trust becomes an artifact of imbalance.
|
||||
// See Assets/Candidates/candidates.json.
|
||||
//
|
||||
// Discovery order (§1.5): hooks are independently reachable in any order via
|
||||
// Discovery order: hooks are independently reachable in any order via
|
||||
// <<detour>> from the desk. Never <<if>>-guard a hook on another hook having
|
||||
// fired, on any $self_lean_*, or on skill_rank(...). Never make a hook only
|
||||
// reachable as fall-through from another.
|
||||
//
|
||||
// Passive pattern (clue-bearing):
|
||||
// one voice per hook, from the candidate's attached pair;
|
||||
// the line is that character's argument, never a report;
|
||||
// exactly one $self_lean_* write; set $found_<clue_id> alongside it.
|
||||
//
|
||||
// Four-voice exception: this opening uses four voice introductions (one per
|
||||
// pair) against the writing handbook's "cap introductions at three voices"
|
||||
// rule. Deliberate and for SC-101 only — do not "correct" it down to three,
|
||||
// and do not copy it as a new precedent elsewhere.
|
||||
//
|
||||
// Body stays neutral on purpose: no lean, no candidate attachment.
|
||||
|
||||
title: SC101_Desk
|
||||
---
|
||||
<<set $seen_sc_101 = true>>
|
||||
Narrator: TODO — desk / card stage-setting.
|
||||
<<set $visited_desk = true>>
|
||||
Narrator: A desk under a single lamp. The card is face-down. Your hands already know where the corners are.
|
||||
-> Made Asset hook
|
||||
<<detour SC101_Hook_MadeAsset>>
|
||||
<<jump SC101_Desk>>
|
||||
@@ -29,28 +42,31 @@ Narrator: TODO — desk / card stage-setting.
|
||||
<<detour SC101_Hook_Neutral>>
|
||||
<<jump SC101_Desk>>
|
||||
-> Leave the desk
|
||||
Narrator: TODO — exit the desk beat.
|
||||
Narrator: You leave the card where it is. The lamp keeps the shape of your hands on the blotter.
|
||||
===
|
||||
|
||||
title: SC101_Hook_MadeAsset
|
||||
---
|
||||
CONFLUENCE: TODO — Made Asset intuition.
|
||||
CONFLUENCE: You don't turn it over. You don't have to. The stock, the margin, the way the emboss catches — one, two, three, and three is the one. Which means somebody trained you for a card like this.
|
||||
<<set $found_made_asset_intuition = true>>
|
||||
<<set $self_lean_made_asset += 1>>
|
||||
===
|
||||
|
||||
title: SC101_Hook_Journalist
|
||||
---
|
||||
FACEWORK: TODO — Journalist intuition.
|
||||
FACEWORK: Your throat tightens before you decide what the card is. Not curiosity. Recognition of a person you haven't named yet. That reaction is wrong for a story. It's right for a meeting.
|
||||
<<set $found_journalist_intuition = true>>
|
||||
<<set $self_lean_journalist += 1>>
|
||||
===
|
||||
|
||||
title: SC101_Hook_Inheritor
|
||||
---
|
||||
STANDING ORDER: TODO — Inheritor intuition.
|
||||
STANDING ORDER: You straighten the card so its top edge is parallel to the desk's. Nobody taught you that. You correct it anyway. The rule is older than you are, and it still applies.
|
||||
<<set $found_inheritor_intuition = true>>
|
||||
<<set $self_lean_inheritor += 1>>
|
||||
===
|
||||
|
||||
title: SC101_Hook_Neutral
|
||||
---
|
||||
HOUSE POUR: TODO — neutral Body texture; no lean.
|
||||
HOUSE POUR: The lamp is warm enough. Your mouth is dry. Neither of those is information about who you are — only about how long you've been standing here.
|
||||
===
|
||||
|
||||
Reference in New Issue
Block a user