diff --git a/docs/workshops/wiki-review/SUMMARY.md b/docs/workshops/wiki-review/SUMMARY.md new file mode 100644 index 000000000..a02b5aa63 --- /dev/null +++ b/docs/workshops/wiki-review/SUMMARY.md @@ -0,0 +1,297 @@ +# Wiki Review Workshop — Summary & Long-Term Content Strategy + +## Workshop Overview + +**Date:** 2026-02-12 +**Called by:** Jeroen (project lead) +**Participants (10):** Paula (librarian), Mellanie (librarian), Miri (worldbuilder), Gestalt (systems design), Gore (thematic lead), Nigel (sandbox/replayability), Ozzie (player experience), Tyre (tooling/architecture), Qatux (documenter), SI (work prep) +**Format:** 4 rounds + lead interview between R3 and R4 + cross-agent debates +**Output:** ~35 response documents, 3 tracking documents, 1 lead interview, this summary + +### Scope Evolution + +The workshop began as a v0.1 wiki review (45 files in `docs/wiki/`, ticket #368) with 6 defined topics: direction check, style guides, regional style guide, wiki taxonomy, content directory structure, and randomizer/PC briefs. Rounds 1-2 produced 88 tracked proposals and 20 consensus items focused on v0.1 content quality: NPC profiles, smuggler lens parity, triangle strengthening, naming conventions, and content directory structure. + +Between Rounds 2 and 3, the lead redirected the workshop toward long-term content strategy. Round 3 asked "What does the full game look like?" and collected scaling estimates, cultural group proposals, NPC pattern libraries, and PC archetype lists from all contributors — all calculated at a 20-district scale. + +The lead interview between Rounds 3 and 4 delivered the decisive reframe: **300 worlds before DLC.** This transformed the workshop from a content authoring strategy into a generator specification strategy. Round 4 asked every contributor to rebuild their proposals for a world where style briefs are generator inputs, cultural groups are assembled from ingredient menus, and hand-authoring is reserved for irreducible emotional content. + +### The 300-World Reframe (Round 4) + +The 300-world number changed the category of work from "writers produce districts, tooling accelerates writers" to "engineers produce generators, writers produce generator inputs, tooling IS the product." Every Round 4 response independently arrived at the same conclusion: the workshop had been designing generator specifications all along without knowing it. The district skeleton, the composition matrix, the Sacred/Profane distinction, the pool architecture — all were already generator-shaped thinking. + +--- + +## Long-Term Strategy Decisions (Confirmed) + +### Scale: 300 Worlds + +The game targets 300 populated worlds before any DLC content. This requires a generator model, not hand-authoring. + +**Release path:** +- v0.1 = proof of the interaction model (1 district, hand-authored) +- v0.2-v0.5 = testing generation systems and tooling +- v0.6-v0.10 = content pipeline at scale +- pre-v1.0 = 300 worlds populated via generators + style briefs + naming algorithms + +**Tooling first is absolute.** The authoring/generation pipeline must be proven before scaling content. + +**Three-tier world authoring:** + +| World Tier | Count | Content Method | Purpose | +|---|---|---|---| +| Landmark worlds | 10-15 | Fully hand-authored, bespoke NPCs and arcs | Emotional peaks, quality benchmarks | +| Regional worlds | 30-50 | Template kits, hand-reviewed | High quality, cultural depth | +| Generated worlds | 230-260 | Procedurally generated from ingredient menus | Breadth, replayability, exploration | + +**Quality gradient maps to in-world logic.** Older settlements are denser and richer. Core worlds have more content than frontier outposts. The gradient is intentional and mirrors real human geography — players feel the difference between a 300-year-old trade hub and a 40-year-old mining outpost, and the content density reflects that. + +**Irreducible authored content at 300-world scale:** +- Gestalt: ~1,600-2,800 hours total for templates, arcs, rules, and benchmark districts +- Mellanie: ~3,300-7,400 authored lines + ~90 pages of specs (vs. 13,500-31,200 lines for 20 hand-crafted districts) +- The authored content DECREASES in volume but INCREASES in per-line stakes — every seed line, every parameter definition cascades across hundreds of worlds + +**QA paradigm shift:** Test generators, not generated output. Bad parameters cascade across 300 worlds. Review samples, tune parameters, iterate. The gut-check reviews generators, not individual NPCs. + +### Cultural Ingredients Menu + +**Core principle:** Opt-in, not fill-all-blanks. Gaps ARE flavor. What a society DOESN'T care about is as defining as what it does. + +**Six ingredient categories:** + +| Category | Purpose | Options | +|---|---|---| +| Heritage Roots (OPTIONAL) | Phonetic flavor, social dynamics, trust model | 8 Earth-grounded clusters + null | +| Settlement Motivation | Why people came, what they value | Economic, ideological, corporate, refugee, scientific, military, frontier, generational | +| Economic Function | What makes money, daily rhythm, what tempts | Logistics, extraction, manufacturing, trade, agriculture, research, military, services, transit | +| Philosophical Alignment | Social contract, blind spots | Collectivist, individualist, meritocratic, egalitarian, traditionalist, progressive | +| Corporate/Faction Presence | Power structure, authority dynamics | Commission, Syndic, contested, independent, criminal, military | +| Drift Stage | Cultural evolution state | Founding (<50yr), establishing (50-150yr), mature (150-300yr), ancient (300+yr) | + +**Heritage is OPTIONAL.** Null-heritage produces distinct corporate/functional worlds with no cultural immune system, no substrate vocabulary, no food traditions. The world feels THIN — and that thinness is its own moral texture. + +**8 Earth-grounded heritage clusters** (Miri named them by social signature: Frost, Tide, Iron, Spice, Jade, Dust, Vine, Salt, Stone, Arc — 10 roots that map to Nordic-Baltic, Mediterranean, Slavic-Industrial, South Asian, East Asian, West African, Latin American, Anglo-Commercial, and two additional profiles). Heritage recognizable but not mappable — "feels Nordic" not "is Finnish." Drift is the defense against franchise similarity, not abstraction. + +**People migrate between heritages.** A character with a Nordic-sounding name in an East Asian-heritage district is not wrong — they are a person with a history. Culture is the place, not the individual. + +**Missing from initial proposals, added by lead: Economics.** What makes extra income tempting. This determines the nature of the contested resource — whether the smuggling is sympathetic (healthcare for people who cannot afford it) or predatory (luxury goods for status). The economic pressure ingredient determines the moral texture of the entire grey economy. + +**The derivation function:** The generator takes ingredient selections and derives mechanical parameters deterministically. Same ingredients always produce the same society. Randomization happens at ingredient SELECTION, not at derivation. Style briefs (Miri's Krenn brief) are reference implementations — proof that the derivation function produces quality output for specific ingredient sets. + +### Cultural Brief = Generation Seed + +**Dual artifact:** `seed.yaml` (generator input) + `brief.md` (human authoring reference). The seed is the product; the brief is the manual. + +**World seed = numeric seed (pool draws) + cultural assembly (content generation).** Same cultural assembly + different numeric seed = same culture, different drama. Different cultural assembly + same numeric seed = parallel structure, different culture. + +Miri's Krenn brief is a proof-of-concept output; the ingredient menu is the real product. The generator must reproduce the Krenn brief's feel when given Krenn's ingredient combination. Validation: if the generator's output for `frost:0.55 + salt:0.30 + iron:0.15 / economic-trade / logistics / tight-margin+prohibition` matches the hand-authored Krenn culture, the derivation function works. + +### Three-System NPC Architecture + +**System A: Thematic Patterns** (what the character means to the story) + +| Pattern | Function | +|---|---| +| FRIEND | Trust anchor hiding a contradiction. Emotional core. | +| MIRROR | Honest person whose transparency reveals others' dishonesty. | +| ANCHOR | Embodies contentment. Genuine answer to "Is this enough?" | +| GHOST | Absent power shaping events through influence. | +| CATALYST | Outsider who forces reckoning. Disruption. | +| THRESHOLD | Gatekeeper between the player and the next layer. | +| REMNANT | Living history. Remembers when things were different. | +| SYSTEM | Institutional embodiment. Procedure-citing, neutral. | +| NOBODY | Background that becomes foreground through player attention. | + +**System B: Functional Motivations** (what the character does in gameplay) + +| Motivation | Role | +|---|---| +| HANDLER | Managing operations, applying pressure from above | +| WITNESS | Accidentally observed something, carries information | +| TURNCOAT | Loyalty shifting, moving between camps | +| CIVILIAN | Uninvolved, living their life, normalcy | +| OPERATOR | Running something, competent, goal-oriented | +| SKEPTIC | Doubts the system, questions assumptions | + +**System C: Composition.** Each NPC gets one thematic pattern + one functional motivation. ANCHOR+OPERATOR differs from ANCHOR+CIVILIAN. At 300-world scale, generators pick combinations from composition rules with drama ratings (gold/silver/bronze/banned), forbidden combination lists, and soft constraints ensuring dramatic richness per district. + +**Key composition examples:** +- FRIEND+OPERATOR = identity betrayal (Kael: "I didn't know who you really were") +- MIRROR+CIVILIAN = uncomplicated honesty (Naia Tamm: innocence endangered by events) +- NOBODY+WITNESS = hidden information activated by player attention +- GHOST+HANDLER = absent authority applying pressure through intermediaries + +### THE NOBODY & Evolving Relationships + +THE NOBODY = just being there. Background that becomes foreground through player attention. The lead explicitly opened the "evolving relationships" mechanic: "evolving relationships sounds like a can of worms I would LOVE to open." + +**Dynamic tier promotion:** + +| Stage | Trigger | Effect | +|---|---|---| +| NOBODY | Default | Name, routine, greeting. Social wallpaper. | +| NOTICED | ~3-5 interactions | NPC gains a name in the player's knowledge graph. | +| RECOGNIZED | ~8-12 interactions | Basic dialogue unlocks. "Her name is Tev." | +| KNOWN | ~15-20 interactions | Dormant Tier 2 content activates. Functional motivation visible. | +| INVESTED | ~25+ interactions + specific trigger | Full dormant pattern activates. NPC becomes ANCHOR/WITNESS/etc. | + +At 300 worlds, most NPCs are NOBODYs. Player attention is the resource. The generator pre-assigns hidden motivations: 70% CIVILIAN (stay NOBODY forever), 20% activatable motivations, 10% load-bearing motivations that could reshape the investigation. + +**Key quotes on THE NOBODY:** +- Nigel: "Two players, same world, same seed, different experience because they noticed different people." +- Gore: "Learning to see is the endgame." +- Ozzie: "THE NOBODY is an infinite replayability engine. The randomizer shuffles the pool. THE NOBODY lets the player shuffle it again, by choosing what to see." + +### THE MIRROR Pattern + +Tier 1 emotional depth, NO contradiction arc, no secret. The honest person in a world of liars. First instance: Naia Tamm (renamed from Hael — Miri proposed, unanimous). + +Gore proposed THE MIRROR as a formal pattern; Paula converged independently, describing it as "Tier 1.5 Production Emotional NPC" with 50-70 authored lines. Both agree: the MIRROR must NOT have a contradiction arc or secret. The MIRROR's power is simplicity and transparency. When events drag the MIRROR into the conspiracy, the damage is devastating — the player broke the one genuinely innocent person. + +The Kael/Hael sonic collision (tension T-03 from Round 1) was resolved by renaming Hael to Naia Tamm, following Krenn naming conventions from Miri's regional brief. Unanimous support. + +### 8 PC Archetypes (Fluid) + +8 archetypes at v1.0 as a stress test of system flexibility. The specific 8 vary between contributors (Gore: Worker/Investigator/Operator/Wanderer/Builder/Seeker/Guardian/Rebel; Paula: Insider/Investigator/Newcomer/Merchant/Administrator/Caretaker/Fixer/Exile; Ozzie: Insider/Investigator/Newcomer/Operator/Watcher/Exile/Fixer/Believer). The exact list is not yet canonized, but the recurring archetypes across all proposals are: Insider/Smuggler (universal), Investigator/Detective (universal), Newcomer (5+ agents), Operator (4+ agents), and Merchant/Fixer (4+ agents). + +**Archetypes are FLUID** — current position in a community, not character class. Players can move districts, change jobs, buy houses. Archetype transitions are a game mechanic. + +**Paula's "vulnerable window":** During transition, the player has given up their old position's protections but has not earned the new one's. That gap is where the most interesting gameplay lives. The Insider who becomes an Investigator faces a period where the ring knows they left but the Commission does not fully trust them yet. + +**Insider + Investigator deep for v0.1 but must NOT dominate.** The lead specifically warns that the other archetypes must feel equally primary in their districts. + +**Newcomer = v0.2 content update centerpiece.** Natural tutorial, fresh eyes on established world. The Newcomer is the player's proxy — walking into a place they do not understand, meeting people they do not know, trying to figure out what is going on. The Newcomer's "Is this enough?" is the most raw version: "Is this place enough? Are these people enough?" + +### Sacred / Profane / Middle Kingdom Randomization + +The lead approved Nigel's Sacred/Profane/Middle Kingdom framework with a key refinement: + +- **Sacred** = rules of the system (never randomize). "You don't randomize mass interactions." +- **Profane** = parameters drawn from pools. "You DO randomize gravity." +- **Middle Kingdom** = sacred structure, profane cast. Fixed dramatic architecture, variable characters filling it. + +**Full system mapping (from Gestalt's comprehensive table):** + +| System | Sacred | Profane | Middle Kingdom | +|---|---|---|---| +| Cultural generation | Derivation rules, access tier formulas | Which ingredients selected per world | Cultural parameter set structure | +| NPC generation | Composition matrix, tier requirements | Which NPCs fill which roles, names | NPC profile structure, pattern templates | +| FRIEND system | 5-phase arc structure, tell mechanics | Which NPC is FRIEND, specific contradiction | FRIEND template with cultural skinning | +| NOBODY system | Promotion trigger types, tier transitions | Which NOBODYs have which paths | Promotion path templates | +| District structure | Minimum social sites, NPC count, adversarial pair | Social site config, NPC assignments | District skeleton | +| Gate topology | Connectivity requirements, diameter limit | Which worlds connect, travel times | Small-world network properties | +| Storyteller | Pacing algorithm, escalation phases | Timing of events, pool selections | Storyteller decision nodes | + +**Gate topology as macro randomization:** +- Core worlds Sacred (always connected) +- Peripheral worlds Profane (vary per playthrough) +- Accessible count Middle Kingdom (number fixed, which ones varies) +- Unlockable worlds through gate events/quests = chapter-level randomization +- Future: planetary owner/developer DLC + +**Light generation** — pools of authored content, not generated from scratch. The generators PICK from authored templates, COMBINE them with cultural parameters, and DERIVE specifics. The authored template library is the product; the generator is the assembly line. + +### Interaction Model + +**WASD direct control with context-sensitive interaction** — unanimous (9/9 in Round 4 discussions). Player IS the character. Body is the attention mechanism. + +Direct embodiment required for: complicity, NOBODY tier promotion (player chooses where to look), occlusion (information hidden behind physical presence), FRIEND betrayal (proximity creates emotional weight). + +- Gestalt: "Hotline Miami movement + Disco Elysium interaction" +- Paula: single-action prompts that change based on proximity + relationship + knowledge +- Dedicated workshop brief written for full design: `docs/workshops/control-interaction/` + +### Generator Pipeline + +**Old model:** Writers produce districts, tooling accelerates writers. +**New model:** Engineers produce generators, writers produce generator inputs, tooling IS the product. + +**Gestalt's 6-phase generator development pipeline:** +1. INGREDIENT AUTHORING — heritage roots, motivations, economic functions, alignments, factions, drift stages, derivation rules +2. TEMPLATE AUTHORING — FRIEND arcs (30-50), MIRROR profiles (15-25), NOBODY promotion templates (40-60), triangle type templates (10-15), voice cards (30+), PC archetype definitions (8) +3. GENERATOR DEVELOPMENT — Cultural Parameter Generator, NPC Generator, FRIEND/MIRROR Skinner, District Composer, Naming Algorithm, Dialogue Line Expander, Gate Topology Generator, NOBODY Promotion Generator +4. VALIDATION DEVELOPMENT — schema validation, composition rule checker, constraint satisfaction verifier, cultural coherence checker, emotional integrity checker, diversity metrics +5. GENERATION + REVIEW — generate 300 worlds, automated validation, human review of FRIEND/MIRROR instances (100%), spot-check generated districts (5-10%) +6. HAND-ELEVATION — starting districts get polish, hub worlds get additional depth, narrative-critical worlds get authored threads + +**Mellanie's content math:** +- 300 worlds: ~3,300-7,400 authored lines + ~90 pages of specs +- 20 hand-crafted districts (Round 3 model): 13,500-31,200 authored lines +- The 300-world model requires LESS hand-authored content because the generator does the multiplication, but every authored line is higher-stakes + +--- + +## Theme — Open, Converging + +Candidates from the team: + +| Candidate | Author | Perspective | +|---|---|---| +| "Cost of participation" | Gore | The individual inside the system | +| "Collective bargain" | Mellanie | The community | +| "What do you owe the people around you?" | Ozzie | The relationships | +| "What do systems do to people inside them?" | Miri | The system itself | +| "Cost of connection / entanglement" | Paula | The relational web | +| "Knowledge as burden" | Gestalt | The information | +| "Who do you choose to see?" | Ozzie (Round 4) | The player's attention | + +**Current direction:** "Don't pick, derive" (Gore). All candidates orbit the same field. The derivation function guarantees every generated world falls within the thematic field. Let it resolve through the work. + +Gore's formulation: "The theme is the field, not any specific phrasing of it. The field is: what does it cost to be human inside something bigger than yourself?" + +The lead has not canonized a phrasing. Round 4 consensus: complicity is Sova-local; the universal theme is structural but unnamed. Every ingredient combination includes a system failure mode. Every failure mode produces a cost of participation. Every cost produces a version of "Is this enough?" The field is built into the generator's architecture. + +--- + +## Decisions from Rounds 1-2 (v0.1 Specific, Pending v0.1 Scoping Round) + +These were produced in Rounds 1-2 before the long-term reframe. They remain valid for v0.1 but need re-evaluation in light of the 300-world strategy: + +- **Hael renamed to Naia Tamm** (Miri proposed, unanimous) — resolves Kael/Hael sonic collision +- **All NPCs get full canonical names** (Miri generated 12 for Sova) +- **Smuggler lens gap needs fixing** — wiki is detective-shaped; smuggler needs operational attributes (`trust_read`, `exposure_risk`, `loyalty_assessment`, `leverage_held`, `social_debt`, `moral_weight`, `cover_integrity`, `loyalty_conflict`) and moral arc phases (Comfort, Doubt, Reckoning, Compromise) +- **Triangle 1 (Hub Power) needs Nils-vs-Voss escalation decision** — weakest triangle, smuggler role is passive, needs concrete fork +- **Routine format: 2-layer** (YAML + prose) — engine-readable schedule alongside human-readable description +- **Content directory structure:** `global/` + `districts/` as top-level split (Tyre + Gestalt converged) +- **FRIEND pool:** v0.1 = 1 per character (Kael, Sera), v0.2 = 2, architecture from day one. Pool-based selection, full Tier 1 minimum, no exceptions +- **Primary contraband fixed per district,** secondary varies per seed (medical/severance/enhanced/nothing) +- **Cultural gate modifier on dialogue access** — regional culture modifies disclosure independently of relationship state +- **Drin may need tier promotion** — doing Tier 2 work in a Tier 3 profile (Triangle 2, Triangle 5, compromised by Harek) +- **PC-as-NPC Concept A for v0.1** — other PC exists as NPC (~20-30 authored items), full identity randomization deferred to v0.2+ + +--- + +## Deferred to Future Workshops + +- **Control & Interaction Scheme** (brief written: `docs/workshops/control-interaction/`) +- **Perception system gravity variation** for world transitions — flagged by lead, endorsed as top priority by Ozzie, needs perception team +- **Full NPC pattern composition rules** — forbidden/preferred lists drafted by Gore, Gestalt, Paula; need consolidation and validation +- **Gate topology design** — network structure, hub placement, connectivity constraints, small-world properties +- **Storyteller cultural literacy** — how the storyteller adapts pacing to cultural trust-building rates +- **LLM-assisted content pipeline design** — Tyre proposed "write 10, generate 40" for Tier 2 expansion +- **Modding toolkit specification** — content pack manifest, ADD/REPLACE/MERGE overlay operations, template role-slot system +- **Inter-world political generation** — Paula proposed macro political layer: trade dependencies, cultural friction, historical grievances between worlds +- **IP originality validation at scale** — Miri proposed automated cultural distance validator to prevent franchise similarity in generated worlds + +--- + +## Ticket Recommendations + +Pending v0.1 scoping round. SI has a preliminary list of 28 tickets from Round 2 that needs revision in light of the strategy reframe. Key areas for ticketing: + +- Ingredient menu schema definition +- Derivation rule specification +- FRIEND arc template authoring (first 3-5) +- NOBODY promotion mechanic design +- Cultural parameter generator prototype +- Naming algorithm prototype (phonetic rules, not word lists) +- Composition matrix formalization +- Archetype voice card conversion (prose to axis-based specs) +- Naia Tamm rename cascade across wiki files +- Smuggler attribute vocabulary addition to wiki +- Triangle 1 strengthening (Nils stub page + decision moment) +- Gate topology design brief + +--- + +**Workshop produced:** 4 rounds x 8-9 contributors = ~35 response documents + lead interview + 3 tracking documents. Total workshop output in `docs/workshops/wiki-review/`. diff --git a/docs/workshops/wiki-review/lead-interview.md b/docs/workshops/wiki-review/lead-interview.md new file mode 100644 index 000000000..fe56dc0dc --- /dev/null +++ b/docs/workshops/wiki-review/lead-interview.md @@ -0,0 +1,117 @@ +# Lead Interview — Between Round 3 and Round 4 + +**Date:** 2026-02-12 +**Format:** Interactive 5-topic interview, one topic at a time +**Interviewer:** Team lead (Claude Code) +**Interviewee:** Jeroen (project lead) + +--- + +## Topic 1: Cultural Groups + +**Decision: Ingredients menu, not fixed taxonomy.** + +Cultural groups are assembled by picking and combining from a menu of ingredients per society: +- Heritage roots (recognizable but not directly mappable — "feels Nordic" not "is Finnish") +- Settlement motivation +- Economic function +- Philosophical alignment +- Corporate presence +- Time since settlement / drift stage + +**Key rules:** +- NOT required to pick from every category. What a society doesn't care about is as defining as what it does. Varying what matters creates flavor. +- Output must feel like a SOCIETY, not a matrix entry. +- Mechanical parameters (access tiers, trust defaults, investigation dynamics) DO need a structured matrix underneath. +- Heritage should be identifiable as a culture without feeling disparate. +- People migrate between heritages. Drift varies per location. +- Economics is missing from Nigel's 7 mechanical questions — must be added (what makes extra income tempting). + +**On heritage specificity:** The specific real-world roots (Finnish/Estonian/Latvian for Krenn) are Miri's reference material for building the culture, not something the player should clock directly. A character with a Nordic-sounding name in an East Asian-heritage district isn't wrong — they're a person with a history. The culture is the place, not the individual. + +--- + +## Topic 2: Content Patterns (NPC Archetypes) + +**Decision: Three separate systems, not one list.** + +### A. Thematic Patterns (what the character means to the story) +FRIEND, MIRROR, ANCHOR, GHOST, CATALYST, THRESHOLD, REMNANT, SYSTEM, **NOBODY** + +THE NOBODY is new — a person who is just... there. Background becomes foreground when the player pays attention. + +**Major system decision: Evolving relationships.** The lead explicitly wants a NOBODY to be able to become something more if the player invests attention. Quote: "evolving relationships sounds like a can of worms I would LOVE to open." This implies dynamic tier promotion, relationship-driven content unlocking, emergent narrative from player attention. + +### B. Functional Motivations (what the character is doing in gameplay) +HANDLER, WITNESS, TURNCOAT, CIVILIAN, OPERATOR, SKEPTIC + +These are Nigel's list — motivations, not archetypes. Developed in parallel with thematic patterns. + +### C. Composition +Each NPC gets a thematic pattern + a functional motivation. ANCHOR + OPERATOR plays very differently from ANCHOR + CIVILIAN. At 300-world scale, generators pick these combinations. + +--- + +## Topic 3: PC Archetypes + +**Decision: 8 archetypes at v1.0 as stress test.** + +- Insider + Investigator are deep because of v0.1 but must NOT become the permanent center. Other archetypes should feel equally primary in their districts. +- **Newcomer = v0.2 content update centerpiece.** Natural tutorial, fresh eyes on established world. +- **Archetypes are FLUID.** Players can move districts, change jobs, buy houses. The archetype is a current position in a community, not a character class. Archetype transitions are a game mechanic. +- "What still feels alive enough" is the question, not "how many per district." A bar 20 minutes from the gate in no-man's land still needs characters. +- The freedom to change your life flows naturally from the refocus on living a life. + +--- + +## Topic 4: Randomization + +**Decision: Nigel's Sacred/Profane/Middle Kingdom framework approved.** + +With a key refinement from the lead: +- Sacred = rules of the system (mass interactions). "You DO randomize gravity — you don't randomize mass interactions." +- Profane = parameters the rules operate on. Drawn from pools. Gravity varies by world; the physics engine doesn't. +- Middle Kingdom = sacred structure, profane cast. + +**Gate topology as macro randomization:** +- Core worlds always connected (Sacred) +- Peripheral systems vary per playthrough (Profane) +- Number of accessible systems may be fixed, which ones varies (Middle Kingdom) +- Unlockable worlds through random gate events or quests = chapter-level randomization +- Future possibility: planetary owner/developer DLC + +**Perception system note:** Varying gravity is a great way to breathe life into stepping onto another world. Flag for perception team. + +Generation is LIGHT — pick from pools of authored content, don't generate from scratch. + +--- + +## Topic 5: Scale + +**Decision: 300 worlds before DLC.** + +This is why we're building strategy and generator inputs, not authoring content by hand. + +**Release path:** +- v0.1 = proof of the interaction model (1 district, hand-authored) +- v0.2-v0.5 = testing generation systems and tooling +- v0.6-v0.10 = content pipeline at scale +- pre-v1.0 = 300 worlds populated via generators + style briefs + naming algos + +**Tooling first is absolute.** The authoring/generation pipeline must be proven before scaling. + +**Key reframe:** The style briefs, naming algorithms, character generators, and cultural parameter matrices ARE the product of this strategy work. They're generator inputs, not documentation. The planetary cultural identities are basically **seeds** — the cultural brief for a world IS the generation seed that parameterizes everything. + +--- + +## Theme — Still Open + +The lead has not picked a canonical framing. Candidates: +- Cost of participation (Gore) +- Collective bargain (Mellanie) +- What do you owe the people around you? (Ozzie) +- What do systems do to people inside them? (Miri) +- Cost of connection / entanglement (Paula) +- Knowledge as burden (Gestalt) + +May resolve as strategy solidifies. diff --git a/docs/workshops/wiki-review/round1-gestalt.md b/docs/workshops/wiki-review/round1-gestalt.md new file mode 100644 index 000000000..d22882803 --- /dev/null +++ b/docs/workshops/wiki-review/round1-gestalt.md @@ -0,0 +1,480 @@ +# Round 1 — Gestalt (Systems Design) + +*cracks knuckles* + +Alright. Four topics, all load-bearing. Let me break down what each one actually means mechanically. + +--- + +## Topic 1: Triangle Analysis — Do They Create Interesting Decisions? + +I'm going to evaluate all 5 triangles on three axes: **player agency** (does the player choose?), **information asymmetry** (do the two characters see different things?), and **system interaction** (does this triangle exercise multiple game systems?). + +### Evaluation Table + +| Triangle | Player Agency (Smuggler) | Player Agency (Detective) | Info Asymmetry | Systems Exercised | Verdict | +|----------|--------------------------|---------------------------|----------------|-------------------|---------| +| T1: Hub Power (Voss-Kael-Nils) | Low — observe/mediate, mostly reactive | Low — sees Voss's anxiety, one thread | Medium — smuggler knows hierarchy, detective sees stress | Schedule, authority dynamics | **Weakest** | +| T2: Worried Knowledge (Maret-Drin-Voss) | Medium — manage risks (two aware NPCs) | High — two witness paths (cooperative vs turned) | High — smuggler knows who's compromised, detective doesn't | Investigation, tells, knowledge gating | **Strong** | +| T3: Bar Tensions (Lera-Torek-Olin) | Medium — address Torek's visibility, assess Olin | Medium — financial tell + ambiguous newcomer | High — spending could be ring OR mundane, player doesn't know | Financial observation, ambiguity, social site dynamics | **Strong (uniquely mundane)** | +| T4: Worried Partner (Hael-Kael-Sera) | High — lie to Hael, protect Kael, emotional cost | High — Hael as leverage, Sera's concealment | Maximum — both FRIEND NPCs are nodes | Relationships, tells, FRIEND arc, emotional weight | **Essential** | +| T5: Informant Question (Pell-Renn-Drin) | High — handle Pell (support/report/calm) | Medium-High — indirect benefits from ring fracture | High — smuggler sees internal threat, detective sees external symptoms | Cross-template propagation, ring stability | **Strong** | + +### Detailed Analysis + +**T1 (Hub Power) is the weakest triangle.** Here's why: + +1. **Nils is off-stage.** One vertex of the triangle is never physically present in v0.1. This means the smuggler can never mediate a Voss-Nils confrontation in real-time. The tension is narrated/implied, not observed and acted upon. + +2. **The smuggler's role is "caught between" — but what do they DO?** The wiki says Kael "wants everyone to calm down." That's a passive stance, not a decision point. Where's the moment where the smuggler must choose Voss OR Nils, and face consequences? + +3. **The detective's interaction is one-directional.** Detective sees Voss's anxiety, which is an investigation thread — but it's a data point, not a decision. "Voss seems nervous" leads to "investigate why" but doesn't fork into meaningfully different paths. + +**Proposal to strengthen T1:** Give the smuggler a concrete decision moment. Example: Nils sends word (through Devra or Renn) demanding higher volume on the next run. Voss refuses to adjust the schedule. The smuggler must choose: +- **Side with Nils** (schedule the extra volume anyway) → Voss resents it, becomes less cooperative, might become a liability +- **Side with Voss** (tell Nils's messenger it's too risky) → Nils pushes back through other channels, smuggler's loyalty is questioned +- **Try to split the difference** (partial run, creative routing) → both sides grudgingly accept, but the operation is messier, increasing detective observation chances + +This gives the smuggler a concrete fork with cascading consequences. The detective still sees the RESULTS of whichever choice was made (schedule anomalies, Voss's mood, operational messiness). + +**T3 (Bar Tensions) is critically important BECAUSE it's mundane.** Per D-029, ~50% of NPCs should be in mundane triangles. T3 is the only triangle that might genuinely be disconnected from the ring. Torek's money could be from: +- The ring (entangled) +- A side hustle (mundane) +- An inheritance (flat) +- Gambling winnings from Harek's card games (mundane but connected to Harek's pressure on Drin) + +This ambiguity is load-bearing. If the detective investigates Torek's spending and it turns out to be mundane, that's a RED HERRING — and red herrings are essential for investigation gameplay. The detective needs noise to make the signal meaningful. The smuggler player who KNOWS whether Torek is ring-connected has a different experience from the detective player who doesn't. + +**My concern:** Is the ambiguity determined per-seed (randomizer decides at game start whether Torek is ring-connected) or is it authored (always one answer)? If always one answer, replay value drops. If per-seed, this becomes an excellent replayability vector. + +**Recommendation:** Make Torek's ring connection randomizable. This is exactly the kind of variable the storyteller should control — it doesn't change the NPC profile structure, just one flag. + +**T4 (Worried Partner) and T5 (Informant Question) are both excellent.** No notes on these — they produce rich, multi-system decisions for both characters. T4 is the emotional masterpiece; T5 is the operational thriller. + +### Redundancy Check + +**Are any triangles mechanically redundant?** No — but T2 and T5 share a "potential informant" theme through different lenses: + +| | T2 (Worried Knowledge) | T5 (Informant Question) | +|---|---|---| +| Key NPC | Maret (civilian who noticed) | Pell (ring member who's wavering) | +| Threat type | External observer | Internal defector | +| Smuggler decision | Manage an outsider who knows too much | Handle a member who might flip | +| Detective approach | Turn a cooperative witness | Receive an informant | +| System overlap | Both exercise "people who might talk" | Different mechanics — observation vs. loyalty | + +They share Drin as a node, but Drin serves different functions: in T2 he's a compromised inspector, in T5 he's a potential recipient of information. These are mechanically distinct enough to justify both triangles. + +### Summary + +- **Keep all 5.** None are redundant. +- **Strengthen T1** with a concrete smuggler decision moment (Nils vs. Voss volume escalation). +- **Make T3's ambiguity randomizable** per seed (Torek's ring connection as storyteller variable). +- **Consider making Nils partially present** — even one short visit or comm call in v0.1 would make T1 dramatically more functional. + +--- + +## Topic 2: Mechanical Constraints for the Style Guide + +Every NPC profile feeds into engine systems. If a field is missing or wrong, the system breaks silently. Here's what the style guide MUST mandate. + +### Hard Mechanical Requirements (Engine Will Break Without These) + +| Constraint | Reason | System That Reads It | Applies To | +|-----------|--------|---------------------|------------| +| **Routine must specify hourly location presence** | Schedule system generates NPC movement from this | `ScheduleSystem` → NPC position per tick | All tiers | +| **Routine must reference canonical location slugs** | Locations are addressed by slug in the engine | `LocationRegistry` | All tiers | +| **Every NPC must have a `faction` value from the canonical set** | Access tier logic reads this for dialogue filtering | `AccessTierResolver` | All tiers | +| **Every NPC must have a `role` value** | Default descriptor when name unknown; access tier calculation | `EntityKnowledge.known_attributes["role"]` | All tiers | +| **Every NPC with a secret must map it to a FactId** | Secrets must be discoverable through the knowledge system | `FactId` catalog lookup, `KnowledgeConfidence` gating | Tier 1-2 | +| **Every tell must map to a `behavior_flags` value** | Tell system reads comma-separated flags | `EntityKnowledge.known_attributes["behavior_flags"]` | Tier 1-2 | +| **Contradiction must specify `contradiction_flagged` value** | THE FRIEND arc trigger reads this exact attribute | `EntityKnowledge.known_attributes["contradiction_flagged"]` | Tier 1 (FRIEND) | +| **Relationships must reference NPCs that exist in the roster** | Knowledge graph population uses these for cross-entity links | `EntityKnowledge` entries generated from relationships | Tier 1-2 | +| **Dual-lens notes required for all triangle members** | Content authors need guidance for dual-lens dialogue writing | Monologue/dialogue authoring pipeline | Tier 1-2 in triangles | +| **Bridge NPCs must have routine entries for EACH social site** | NPCs that span sites must physically appear in both | `ScheduleSystem` multi-location routing | Bridge NPCs | + +### Soft Mechanical Requirements (Won't Break Engine, But Content Quality Suffers) + +| Constraint | Reason | Applies To | +|-----------|--------|------------| +| **Personality traits should use established vocabulary** | Trait modifiers in dialogue need consistent inputs | Tier 1-2 | +| **Voice samples should cover at least 2 moods** | Content authors need voice reference for dialogue writing | Tier 1-2 | +| **Information Inventory must distinguish "knows" from "doesn't know"** | Starting knowledge graph needs explicit boundaries | Tier 1-2 | +| **Tolerance threshold must name specific triggers** | Storyteller evaluates NPC tolerance against events | Tier 1-2 | +| **Contentment should use the high/moderate/low vocabulary** | D-024 thematic axis needs consistent scaling | Tier 1-2 | +| **Skill set must include combat tag (yes/no)** | CombatCapability ECS component gated by this tag | All tiers | + +### Proposed Format for Routine (Engine-Readable) + +The current wiki uses prose for routines. The engine needs structured data. I propose the style guide require a structured routine block alongside the prose: + +```yaml +routine: + schedule: + - time: "06:00-06:30" + location: terminal # canonical location slug + activity: shift_startup + - time: "06:30-10:30" + location: terminal + activity: work_freight + - time: "10:30-11:00" + location: terminal_breakroom + activity: social_lunch + - time: "11:00-14:00" + location: terminal + activity: work_freight + - time: "14:30-16:00" + location: bar + activity: social_offshift + - time: "16:00-22:00" + location: residential + activity: home + deviations: + - trigger: ring_operation + replaces: "22:00-home" + location: corridor_b7 + frequency: "1-2x per week" +``` + +This means: the wiki prose routine is for humans, but a YAML routine block is what gets translated to engine data. The style guide should define both. + +### Proposed Validation Checklist (Per-Tier) + +**Tier 3 (minimum viable NPC):** +- [ ] Name, role, faction +- [ ] Routine with at least 2 time-location entries +- [ ] 1 `behavior_flags` value (even "baseline") +- [ ] Combat tag (yes/no) +- [ ] Function note (why this NPC exists) + +**Tier 2 (working profile):** +- [ ] All Tier 3 requirements +- [ ] All 10 axes populated +- [ ] Secret mapped to FactId (if applicable) +- [ ] At least 1 tell with `behavior_flags` mapping +- [ ] Dual-lens notes (if in a triangle) +- [ ] Relationships reference existing roster NPCs +- [ ] Voice sample (2-3 lines, at least 2 moods) + +**Tier 1 (FRIEND):** +- [ ] All Tier 2 requirements +- [ ] Contradiction arc (3+ phases) +- [ ] `contradiction_flagged` value specified +- [ ] Tell progression (minimum 3 stages) +- [ ] Dual-lens notes for BOTH characters +- [ ] Voice sample covering all moods in contradiction arc +- [ ] Content requirements met (70-100 authored lines) + +--- + +## Topic 5: Content Scoping — Per-District vs. Global + +Let me break down what this actually means mechanically. Every content file lands in one of three buckets. + +### The Three Buckets + +**Bucket 1: Global Definitions (same everywhere, loaded once)** + +These are vocabulary and schema — they define WHAT things can exist, not WHERE they exist. + +| Content Type | Example | Why Global | +|---|---|---| +| FactId catalog (definitions) | `contraband.ring_exists` definition structure | FactIds are a vocabulary — same naming convention everywhere | +| Faction definitions | "The Lattice Commission is..." | Faction identity doesn't change per district | +| Technology descriptions | "Neural lattice is a brain-computer interface..." | Technology is tech everywhere | +| Contraband type definitions | "Lattice components are aftermarket neural mods..." | What a thing IS doesn't change by location | +| Tag taxonomy enums | Situations, topics, moods, triggers | Engine schema — universal | +| Relationship state definitions | Unknown/Known/Friendly/PoI/Hostile | State machine is global | +| Entity attribute schema | The 14 canonical keys | Data model is global | +| Access tier definitions | public/peer/insider/authority/hostile | Dialogue filtering rules are global | + +**Bucket 2: Per-District Content (unique to each setting)** + +These are the authored meat — they vary entirely by location and can't be shared. + +| Content Type | Example | Why Per-District | +|---|---|---| +| NPC profiles | Kael Davan lives in Sova Transit | NPCs are physically located somewhere | +| NPC routines | Kael's schedule references specific locations | Locations are district-specific | +| Triangle definitions | Hub Power triangle among Sova NPCs | Triangles are relationships between local NPCs | +| Location descriptions | "The Terminal is a logistics hub..." | Physical spaces are unique | +| Monologue pools | Lines reference specific NPCs and locations | Content is hyper-local | +| Dialogue pools | Lines written for specific template roles | Roles are template-specific | +| Contraband instances | "The ring moves lattice components through Sova" | What's being smuggled HERE | +| District-specific FactIds | `location.corridor_b7_restricted` | Only meaningful in this district | + +**Bucket 3: Global Definition, Per-District Instantiation** + +This is the tricky bucket. These things have a global identity but local presence. + +| Content Type | Global Part | Per-District Part | Example | +|---|---|---|---| +| Factions | Definition, goals, ideology | Presence, strength, local leader, local agenda | Commission exists globally; Sera is the local presence | +| Contraband types | Definition, legality, market dynamics | What's actually flowing through THIS district, volume, routes | Lattice components defined globally; Sova's ring is local | +| FactId confidence states | Definition of confidence levels | Starting knowledge per NPC per district | `contraband.ring_exists` is a global FactId; the smuggler starts at KnowsDetails in Sova | +| Relationship templates | State machine, transition rules | Actual NPC-to-NPC and NPC-to-PC relationships | RelationshipState::Friendly is global; Kael-to-smuggler is local | +| Regional cultural flavor | Naming pattern template | Specific names, aesthetic markers, language echoes | "Compact, consonant-heavy" is Krenn System's cultural profile | + +### Proposed Content Directory Structure + +``` +content/ + _global/ + schema/ + fact-ids.yaml # FactId definitions (vocabulary) + entity-attributes.yaml # 14 canonical keys + tags.yaml # situations, topics, moods, triggers + relationship-states.yaml # state machine definition + access-tiers.yaml # dialogue filtering rules + factions/ + concord-assembly.yaml # faction description + goals + lattice-commission.yaml + syndics.yaml + guardians-of-autonomy.yaml + veil-institute.yaml + the-unbound.yaml + technology/ + neural-lattice.yaml + meridian.yaml + span-gates.yaml + founder-gates.yaml + clone-transfer.yaml + severance-tech.yaml + contraband/ + lattice-components.yaml # type definition + medical-grade.yaml + severance-equipment.yaml + regions/ + krenn-system.yaml # regional style guide (naming, culture) + + districts/ + sova-transit/ + district.yaml # district metadata, location list, faction presence + npcs/ + kael-davan.yaml # full NPC profile (all axes) + sera-venn.yaml + voss.yaml + ... + triangles/ + hub-power.yaml # triangle definition (references NPC slugs) + worried-knowledge.yaml + bar-tensions.yaml + worried-partner.yaml + informant-question.yaml + locations/ + terminal.yaml # location description + spatial data + bar.yaml + corridor-b7.yaml + facts/ + local-facts.yaml # district-specific FactId instances + starting confidences + dialogue/ + terminal.yaml # shared dialogue lines (both characters hear these) + bar.yaml + corridor.yaml + monologue/ + terminal-smuggler.yaml # per-character per-location (D-032) + terminal-detective.yaml + bar-smuggler.yaml + bar-detective.yaml + corridor-smuggler.yaml + corridor-detective.yaml + factions.yaml # local faction presence + strength + local NPCs +``` + +### Mod Overlay Principle + +A mod adds a district: + +``` +mods/ + new-bar-district/ + mod.yaml # mod metadata, dependencies, load order + content/ + districts/ + new-bar-district/ # mirrors structure above + district.yaml + npcs/... + triangles/... + ... +``` + +**Override rules:** +- District content: additive (new districts don't replace existing ones) +- Global content: override by key (mod provides `factions/new-faction.yaml` → added to faction list; mod provides `factions/lattice-commission.yaml` → overrides the global definition) +- NPC replacement: mod specifies `replaces: kael-davan` in NPC YAML → replaces that NPC in the roster + +**Key constraint for Tyre:** Global schema files (`_global/schema/`) should be versioned. A mod that targets `schema_version: 1` should still load on `schema_version: 2` if the changes are additive. Breaking schema changes require mod updates. + +--- + +## Topic 6: PC-as-NPC — Mechanical Specification + +This is the most interesting systems question. Let me map exactly what happens when an NPC is "upgraded" to a player character. + +### The Upgrade Process + +``` +Game Start + ├─ Player selects archetype (smuggler / detective) + ├─ System selects NPC matching archetype from district pool + ├─ NPC profile → PC brief (data transfer + transformation) + ├─ NPC removed from roster (they're now the player) + ├─ All other NPCs' knowledge about this entity adjusted + └─ Game begins at PC's routine starting position +``` + +### Data Transfer Table + +| NPC Axis | What Transfers | How It's Used as PC Data | Transform Required? | +|----------|----------------|--------------------------|---------------------| +| **Name** | Directly | PC identity, how NPCs address you | No | +| **Age** | Directly | Cosmetic, some dialogue gating | No | +| **Role** | Directly | PC occupation, access tier baseline | No | +| **Cultural Group** | Directly | Naming conventions, environmental text familiarity | No | +| **Lattice Tier** | Directly | Perception mode availability (D-017) | No | +| **Employer** | Directly | Legitimate cover, schedule justification | No | +| **Want** | Transforms → Starting Objectives | PC's objectives screen, monologue motivation | Yes — prose → objective entries | +| **Secret** | Transforms → Player Burden | PC knows their own secret; it becomes what they must manage | Yes — inverted (NPC hides FROM observer; PC hides FROM world) | +| **Relationships 1-3** | Transforms → Starting Social Network | Starting `RelationshipState` entries + `EntityKnowledge` for all known NPCs | Yes — relationship data → knowledge graph entries | +| **Tolerance** | Transforms → Stress/Consequence System | Defines what pushes the PC toward failure states | Yes — NPC threshold → player consequence thresholds | +| **Routine** | Transforms → Default Schedule (overrideable) | PC's expected schedule; deviations are observable to NPCs | Yes — rigid schedule → soft expectation with deviation tracking | +| **Information Inventory** | Transforms → Starting Knowledge Graph | All starting `FactId` confidences + `EntityKnowledge` entries | Yes — prose → structured knowledge data | +| **Contentment** | Directly | Starting thematic position, monologue tone baseline | No | +| **Personality** | Transforms → Monologue Voice | Which monologue pool, word choice, analytical vs emotional | Yes — traits → voice selection parameters | +| **Tell System** | Inverted | OTHER NPCs can observe the PC's tells when the PC lies/evades | Yes — "observe this tell" → "NPCs detect this behavior" | +| **Skills** | Directly | PC capabilities, combat tag, functional permissions | No | + +### What's Generated at Upgrade Time + +These don't exist in the NPC profile — they're computed from the profile data: + +| Generated Data | Source | Purpose | +|---|---|---| +| **Starting `EntityKnowledge` entries** | Information Inventory + Relationships | Populate the PC's knowledge graph for every NPC they know | +| **Starting `FactId` confidences** | Information Inventory | What facts the PC already knows at what confidence level | +| **Starting `RelationshipState` per NPC** | Relationships + role + faction | Unknown/Known/Friendly for each NPC based on prior relationship | +| **Starting `known_attributes` per NPC** | Information Inventory | Name, role, faction, routine_pattern, behavior_flags (baseline) for known NPCs | +| **Reverse knowledge entries** | All NPCs who know this NPC | Other NPCs' `EntityKnowledge` about the PC — what do THEY know about YOU? | +| **Starting position** | Routine + game start time | Where the PC physically spawns | +| **Monologue pool activation** | Archetype selection | Which `character:` tag pool is active | +| **Starting inventory/equipment** | Skills + role + archetype | Functional items derived from occupation | + +### The Critical Insight: Reverse Knowledge + +When an NPC becomes a PC, every OTHER NPC's knowledge about that entity matters: + +**Example — Kael becomes the smuggler PC:** +- Voss knows Kael as "dock worker, reliable, part of the arrangement" → Voss has `EntityKnowledge` with `faction: "ring member"`, `trust_level: "reliable"`, `relationship_type: "subordinate"` +- Hael knows Kael as "my partner, acting strange lately" → Hael has `EntityKnowledge` with `relationship_type: "partner"`, `behavior_flags: "evasive,late_nights"`, `trust_level: "uncertain"` +- Sera knows Kael as "Hael's partner, flagged in compliance check" → Sera has `EntityKnowledge` with `secret_held: "manifest discrepancies"`, `secret_confidence: "confirmed"` + +This means **the NPC profile's Relationships section is read bidirectionally.** When writing an NPC profile that might be upgraded to a PC, the author must specify not just "who does this NPC know" but implicitly "what does each related NPC know about THIS NPC." + +### What the NPC Profile Doesn't Have (PC-Only Data) + +| PC-Only Data | Where It Comes From | +|---|---| +| **Monologue lines** | Separate content files, not NPC profile | +| **Starting objective text** | Derived from Want + archetype-specific framing | +| **Tutorial integration hooks** | Archetype-specific, not NPC-specific | +| **Equipment/inventory** | Derived from skills + role, archetype defaults | +| **Player agency permissions** | Archetype-specific (smuggler can access ring locations, detective can use authority access) | +| **Perception mode configuration** | Lattice tier + equipment, archetype defaults | + +### Style Guide Implications + +For NPCs that are candidates for PC upgrade (any archetype-matching NPC), the profile MUST additionally specify: + +1. **Starting FactId confidence table** — explicit list of which facts at what confidence level: + ```yaml + starting_knowledge: + facts: + - id: contraband.ring_exists + confidence: KnowsDetails + - id: contraband.lattice_components + confidence: KnowsDetails + - id: location.corridor_b7_restricted + confidence: KnowsDetails + - id: world.shift_schedule + confidence: KnowsDetails + - id: relationship.ring_membership + confidence: KnowsDetails # knows the ring, knows members + - id: investigation.manifest_discrepancy + confidence: null # doesn't know about this + ``` + +2. **Starting RelationshipState table** — explicit per-NPC: + ```yaml + starting_relationships: + - npc: voss + state: Known + attributes: + name: "Voss" + role: "shift supervisor" + trust_level: "reliable" + faction: "civilian" # smuggler doesn't think of Voss as ring + - npc: kael_davan # N/A if this NPC IS Kael + state: Friendly + ... + ``` + +3. **Reverse knowledge entries** — what each related NPC knows about THIS character: + ```yaml + known_by: + - npc: voss + attributes: + name: "Kael Davan" + role: "dock worker" + faction: "ring member" # Voss knows + trust_level: "reliable" + - npc: hael + attributes: + name: "Kael" + role: "dock worker" + faction: "civilian" # Hael doesn't know about ring + behavior_flags: "evasive,late_nights" + ``` + +### Randomizer Integration + +For the randomizer to generate PC-viable NPCs: + +1. **Archetype templates** define the minimum requirements: + ```yaml + archetype: smuggler + requires: + faction_access: [ring] + minimum_relationships: 3 + minimum_facts_at_KnowsDetails: 4 + social_sites: [hub, ring] # must have presence in these + combat_tag: false # smugglers aren't fighters (v0.1) + ``` + +2. **NPC generation** creates the full 10-axis profile per D-024 +3. **PC viability check** confirms the NPC meets archetype requirements +4. **Upgrade** executes the transfer/transform/generate pipeline above + +### What the PC-as-NPC Spec Resolves + +This spec answers several open questions: + +- **"Where does starting knowledge come from?"** → Information Inventory axis, translated to FactId confidences + EntityKnowledge entries +- **"How do NPCs already know the player?"** → Reverse knowledge entries from the NPC profile's Relationships, read bidirectionally +- **"What changes between playthroughs?"** → Different NPC selected → different name, relationships, starting knowledge, position. Same systems, different starting state. +- **"Does the player have a routine?"** → Yes, inherited from NPC. Deviation from routine is observable to NPCs — this creates a soft constraint that grounds the PC in the world. + +--- + +## Cross-Cutting Observations + +A few things connect across all four topics: + +1. **The NPC profile is the master document.** Triangles, dialogue prerequisites, knowledge graph population, and PC upgrade all read from it. The style guide isn't just a writing guide — it's a data specification. + +2. **Routine is the most mechanically overloaded axis.** The schedule system, tell deviation detection, NPC-observing-PC system, and location presence all read from it. It needs the most precise specification. + +3. **Information Inventory is the second-most critical.** It's the seed for the entire knowledge graph — both for NPCs and for PC upgrade. If it's vague, the engine can't populate starting states. + +4. **Triangles need decision moments, not just tension descriptions.** The wiki describes tensions beautifully. What it doesn't specify is the FORK — the moment where the player must choose, and can't have both outcomes. T1 is weakest here. The style guide should require that each triangle specifies at least one concrete decision moment per playable character. + +5. **The boundary between global and local content is also the boundary between what modders can freely add vs. what they must integrate with.** Districts are self-contained additions. Global content changes require understanding system-wide consequences. The content directory structure should make this boundary obvious. diff --git a/docs/workshops/wiki-review/round1-gore.md b/docs/workshops/wiki-review/round1-gore.md new file mode 100644 index 000000000..078cf2c86 --- /dev/null +++ b/docs/workshops/wiki-review/round1-gore.md @@ -0,0 +1,207 @@ +# Round 1 — Gore + +## Topic 1: Direction Check — Is This the Game We Want? + +### The short answer + +Almost. The wiki describes a mechanically sophisticated game about asymmetric information. What it doesn't fully articulate is what the game is *about*. + +### What the wiki gets right + +**Hael is the masterpiece.** I want to be clear about this because it could get lost in what follows. Hael — a teacher, a civilian, a person who just wants their partner to come home on time — is the emotional fulcrum of the entire vertical slice. Both FRIEND arcs orbit Hael. Kael is hiding things to protect Hael. Sera is hiding things to protect Hael. The smuggler must lie to Hael. The detective can weaponize Hael. One person who never touches the conspiracy is the person the conspiracy most damages. That's not just good design. That's the game's thesis statement in a character. + +**The contraband is morally correct.** Medical-grade lattice components for people locked out of the institutional system. The ring isn't moving weapons — they're moving healthcare. D-037 gets this exactly right. The smuggler isn't a villain. The detective isn't a hero. The system failed people, and the ring is the scar tissue. This is what "quotidian-with-undertow" actually means: the undertow isn't evil, it's *rational*. + +**The contradiction arcs are structurally excellent.** Kael's single-observation contradiction (Corridor B-7) versus Sera's cumulative-pattern contradiction (three departures when Torek arrives) — two different ways of discovering betrayal, both honest to their characters, both mechanically distinct. The tell system (Kael looks left when lying, Sera over-helps to compensate) gives the player agency in the discovery. This is authored content earning its depth. + +### What's missing: the philosophical spine + +The wiki describes *what happens* with precision. It's weaker on *what it means*. + +There's a word for what this game is actually about, and it isn't "asymmetric information." It's **complicity**. + +Every character in Sova Transit District is complicit in something: +- **Kael** is complicit in the ring's operations (even while trying to exit) +- **Sera** is complicit in concealment (sitting on evidence to protect a friend) +- **Voss** is complicit in smuggling (takes a cut, manages the schedule) +- **Lera** is complicit through willful ignorance (Torek's spending keeps her bar viable) +- **Maret** is complicit through silence (sees the discrepancies, doesn't report) +- **Drin** is complicit through coercion (gambling debt, can't say no) +- **The smuggler** is complicit in all of it — and depending on player choices, becomes more so +- **The detective** becomes complicit the moment they choose which truths to pursue and which to ignore + +And the player? The player becomes complicit in whatever they choose. There is no "observe without participating" option. Watching IS participating. Knowing and not acting IS a choice. + +This is what D-027's success criterion #3 ("player names an NPC they felt conflicted about") is really measuring. Not "did the NPC have good dialogue?" but "did the player feel the weight of their own complicity?" + +**The wiki needs to name this.** Right now, "asymmetric information" is treated as the core mechanic AND the core theme. It's the mechanic. The theme is complicity. Every NPC profile should be readable through the lens of: *what are they complicit in, and what would it cost them to stop?* + +### The contentment axis is underdeveloped + +D-024 introduced contentment (my proposal) as a thematic axis. The NPC profiles include it but treat it as a status indicator rather than a thematic driver. Kael's contentment is "moderate-low." Sera's is "moderate, declining." + +This misses the point. Contentment isn't a meter. It's the question the game asks every character — and by extension, the player: + +**"Is this enough?"** + +That's the question the Commonwealth universe was built to explore. Post-scarcity societies (and the Settled Reach is *close* to post-scarcity, if not there) force every intelligent being to answer: when survival is solved, what do you do? What's worth wanting? + +Every NPC in the district has an implicit answer: +- **Kael**: "It was enough until it wasn't. Now I want out, but 'out' might not exist." +- **Sera**: "It was enough until someone I care about was in pain. Now my quiet life is a lie." +- **Lera**: "It's enough. Don't ask me questions that would change that." +- **Maret**: "It should be enough. The numbers say otherwise. I can't un-see them." +- **Hael**: "It was enough. Something changed and nobody will tell me what." +- **Voss**: "It's enough if people stop pushing. (They won't stop pushing.)" + +The smuggler and detective each answer this question through play. The smuggler's answer is: "It isn't enough — I need more money, more security, more control." The detective's answer is: "It isn't enough — something is wrong here and I need to know what." + +**Proposal:** Add a "Thematic Question" field to NPC profiles — not a mechanical axis, but an authoring-guide entry that states the character's implicit answer to "Is this enough?" This anchors every NPC to the game's philosophical spine without adding mechanical complexity. Content authors write to a *question*, not just a set of traits. + +### The dual-lens needs a thematic frame, not just a mechanical one + +"Same world, two lenses" is the tagline. The wiki executes this mechanically: the smuggler sees Kael's greeting as warmth, the detective sees it as data. Good. + +But the deeper version is: the smuggler's lens is *complicity* and the detective's lens is *judgment*. The smuggler knows they're part of the problem. The detective believes they're outside it. Both are wrong. The smuggler is trying to exit (via Kael's arc), which means the complicity isn't total. The detective becomes complicit the moment they choose to protect Sera or use Hael as leverage. + +The best version of this game doesn't just show you two perspectives. It shows you that the distinction between "inside" and "outside" a conspiracy is a fiction. Everyone is inside something. The only question is what. + +### Specific wiki amendments I'd propose + +1. **Wiki index.md** — Add a "Thematic Core" section before "Quick Reference" that states: *The Settled Reach asks what happens when comfortable people discover they're complicit in systems they depend on. Every character is compromised. The game's question isn't "who did it?" but "what will you do now that you know?"* + +2. **NPC profiles** — Add `## Thematic Question` section to the Tier 1 template. Not mechanical. Authoring guidance: "This character's answer to 'Is this enough?'" + +3. **Relationship states** — The "Contaminated Trust" concept in Phases 5 of both FRIEND arcs is the game's thematic core expressed as a mechanic. The wiki treats it as a post-arc state. I'd elevate it: contaminated trust isn't an endpoint, it's the *normal condition of adult relationships in a compromised community*. Everyone in Sova Transit District already lives with contaminated trust. The player just hasn't noticed yet. + +--- + +## Topic 3: Cultural Identity and the Game's Themes + +### You're asking the wrong question + +The workshop asks: "Should the player notice heritage, or is it ambient?" + +Neither. Cultural identity in this game is **the immune system of the community**, and the detective is the foreign body. + +### What Krenn System culture actually is + +The wiki describes Krenn System culture as "compact names, first-name-primary, pragmatic, mind-your-business ethos." That's fine as a naming guide. It's radically incomplete as a cultural description, because it doesn't say what the culture *does*. + +What Krenn System culture does is **protect the ring**. + +Not intentionally. Not conspiratorially. But structurally: +- **Mind-your-business ethos** = nobody reports Torek's spending, nobody asks where Kael goes at night, nobody questions Voss's schedule changes. The cultural norm IS the ring's security model. +- **First-name-primary social contexts** = institutional identity (Sera's Commission role, the detective's authority) is deemphasized in social settings. You're "Sera," not "Field Tech Venn." This makes authority feel like an imposition, not a service. +- **Pragmatic** = the ring exists because people need things the system doesn't provide. Pragmatism doesn't moralize about *how* needs get met. This is the cultural bedrock of the grey economy. +- **Working-class freight district** = solidarity is default. The detective, regardless of personal warmth, represents institutional authority that could shut down someone's livelihood. Cooperation with the detective isn't just risky — it's a betrayal of social solidarity. + +The bar is called "The Last Shift." Not "The Starlight Lounge." Not "The Golden Gate." A name that says: *we're tired, we're done for the day, this is where we exhale*. That name IS the culture. It tells you everything about who these people are and what they value. + +### Cultural identity as mechanical resistance + +Here's my concrete proposal: + +Cultural identity should manifest as the **difficulty gradient the detective faces** and the **social camouflage the smuggler benefits from**. Not as a stat or a modifier, but as a felt experience: + +1. **Detective experience**: NPCs default to surface-level cooperation. They answer questions but don't volunteer. They're polite but not helpful. The cultural value of minding your own business means the detective has to *earn* every piece of real information, not because people are hostile, but because sharing someone else's business violates a social norm. This is why Maret hasn't reported. It's not fear — it's *culture*. + +2. **Smuggler experience**: The smuggler is *of* this culture. First-name-primary, bar regular, knows the rhythms. The ring works because it's culturally embedded — "we take care of our own" is both a family value (Nils to Kael) and a community value (Lera protecting her regulars). The smuggler's camouflage isn't a disguise. It's *being from here*. + +3. **The cultural rupture**: When the detective's investigation disrupts the community — when Drin is pressured, when Maret is confronted, when Hael is drawn in — the damage isn't just to the ring. It's to the social fabric. People who minded their own business are now being asked to testify. Friendships that assumed privacy are now under scrutiny. The detective isn't just solving a crime. They're tearing a community's operating agreement apart. The question is whether that's justice or vandalism. + +### Should the player notice heritage? + +Heritage should be like gravity. You don't notice it. You notice when it's absent. + +The player should never think "oh, this is a Krenn System cultural value." They should think "why won't anyone talk to me?" (detective) or "I'd never bring that up at Lera's" (smuggler). The culture is the water they swim in. It becomes visible only when someone (the detective, Olin the outsider) doesn't understand the rules. + +Miri will have more to say about the specific cultural clusters, heritage drift over 180 years, naming conventions. That's important work. My contribution is this: **whatever the cultural details are, they must serve the game's mechanical and thematic needs**. The mind-your-business ethos isn't decoration. It's the reason the ring survives. It's the reason the detective's job is hard. It's the reason Maret is silent and Lera is blind and Hael is confused. Culture IS the gameplay. + +### What the regional style guide pattern needs + +Beyond naming and aesthetics, each regional style guide should include: + +1. **Default social norm toward authority**: How do locals treat institutional representatives? (Krenn System: polite distance, cooperation without volunteering, first-name-basis to deformalize authority) +2. **Privacy expectations**: What's considered "your business" vs. community knowledge? (Krenn System: income source is private, spending is visible but uncommented upon, relationships are acknowledged but not interrogated) +3. **Loyalty structure**: Family first? Community first? Institution first? (Krenn System: family > workplace bonds > district solidarity > institutional allegiance) +4. **The thing nobody discusses**: Every community has a shared silence. (Krenn System: everyone knows the grey economy exists. Nobody names it.) + +These aren't flavor entries. They're **mechanical parameters for dialogue selection**. When the detective asks Lera about Torek's spending, Lera's deflection isn't personality — it's culture. A regional style guide that doesn't capture this is incomplete. + +--- + +## Topic 6: Procedural Generation — Dilution or Amplification? + +### Wrong question. Let me reframe it. + +The workshop asks whether procedural generation dilutes authored moments or amplifies them. That's a question about production methodology. The real question is: + +**Can a procedurally generated relationship make you feel complicit?** + +Because that's what the game needs. Not "can a proc-gen NPC have a schedule" — obviously yes. Not "can a proc-gen NPC have dialogue" — with tagged pools, yes. But can a proc-gen NPC make you feel the weight of knowing their secret? Can a proc-gen NPC be THE FRIEND? + +No. And that's the answer that matters. + +### What can't be generated + +Kael's tell — looking left when lying — works because the player learns to recognize it over 15 minutes of authored casual interaction, then sees it during the confrontation. That's an authored behavioral arc. A procedural system can't teach the player to read a specific NPC's body language through repeated authored moments. + +Sera's avoidance pattern works because it requires three specific departures, each with a different excuse, spaced across multiple bar visits, with the detective's training firing on the third. That's precision timing. A procedural system can generate "NPC leaves when other NPC arrives" but can't generate the escalating internal monologue that makes the third departure land. + +The Phase 5 "contaminated trust" — where every warm interaction from Phase 1 is retroactively poisoned — works because the *specific* warm interactions were authored to be re-readable. "There you are. Good — I was starting to worry" from Kael at game start is heartbreaking after you see him in Corridor B-7. That retroactive recontextualization requires authored specificity. + +**Rule: THE FRIEND cannot be procedurally generated.** The emotional payload of D-034 requires Tier 1 authored depth — every line, every tell, every contradiction beat. + +### What should be generated + +Everything that makes the authored content hit differently on replay: + +1. **FRIEND assignment from a pool, not FRIEND content.** Write 4-6 FRIEND-eligible NPCs at full Tier 1 depth per district. The randomizer selects which one is THE FRIEND for this playthrough. The content is authored; the *selection* is procedural. Second playthrough: same district, different FRIEND. The player already knows Kael's arc from the first run — but this time THE FRIEND is Maret, and her contradiction is entirely different. + +2. **Mundane triangle variation.** The Bar Tensions triangle (Lera - Torek - Olin) is load-bearing for atmosphere but not for the core emotional arc. Procedurally varying the *nature* of the tension (Torek's spending source, Olin's actual identity, what Lera's tolerating) changes the detective's noise floor without touching the signal. The bar still feels alive. The specifics shift. + +3. **Tier 3 NPC generation.** Drin, Sess, Olin, Sabel, Tav — social wallpaper. Generated from templates with regional naming conventions. Their function is to make the district feel populated, not to carry emotional weight. + +4. **Context variation.** What's on the news ticker. What shift is running when the player arrives. What Lera's serving tonight. Whether Torek is drunk or sober. The environmental texture around the authored core. + +5. **Entanglement rate per D-029.** The 30/50/20 split (flat/mundane/entangled) should vary per seed. Some playthroughs have more conspiracy density. Some have more life-sim quiet. The player shouldn't be able to calibrate. + +### The PC-as-NPC question + +This is the most dangerous idea in the workshop brief. Let me explain why. + +If the player inhabits an NPC who already has relationships, those relationships ARE the game. Kael's relationship with the smuggler is the emotional core of the smuggler's playthrough. If that relationship is procedurally generated — if the warmth of "There you are. Good — I was starting to worry" is absent because the PC-NPC connection was randomized without authored depth — the FRIEND arc can't land. + +**The PC template must include authored relationship stubs for every FRIEND-eligible NPC.** Not just "Relationship: Friendly" — actual authored history, specific memories, the kind of shared experience that makes betrayal hurt. "Remember when we covered for each other during the audit last month?" That specificity is what makes contaminated trust painful instead of merely mechanical. + +Here's my proposal for PC-as-NPC: + +1. **The PC starts as a named NPC** from the district roster, with pre-existing relationships defined at Tier 2 minimum depth. +2. **THE FRIEND relationship** (whichever NPC is selected as FRIEND this playthrough) requires Tier 1 authored depth for the PC-FRIEND connection specifically. +3. **The PC's starting knowledge** is derived from their NPC profile's information inventory — what they know, what they don't, what they suspect. +4. **The PC's "answer to the question"** ("Is this enough?") is implicit in their starting situation and becomes explicit through play. The smuggler starts having answered "no." The detective starts having answered "something is wrong." Play reveals whether those answers hold. + +### The replayability thesis + +Procedural generation amplifies authored content *only when the authored content is the emotional core and the procedural content is the context that reframes it.* + +First playthrough: Kael is THE FRIEND. You discover his exit attempt. You feel betrayed. + +Second playthrough: Kael is just a dock worker. You know his secret from last time, but your character doesn't. You watch him checking his lattice nervously and you know what it means, but your *character* monologues "Kael's distracted today. Probably nothing." The dramatic irony — player knowledge vs. character knowledge — is itself a thematic statement about complicity. You know and your character doesn't. You're complicit in maintaining their ignorance. + +That's procedural generation amplifying authored content. The randomizer didn't create the irony. The authored content (Kael's full arc) combined with the procedural variation (different FRIEND assignment) produced an emergent emotional experience that neither could produce alone. + +**That's what procedural generation is for in this game. Not to create content. To create context that makes authored content mean something different every time.** + +--- + +## Summary of Proposals + +1. **Name the theme.** The game is about complicity, not just asymmetric information. Add thematic framing to the wiki index. +2. **Add "Thematic Question" to NPC profiles.** Each character's answer to "Is this enough?" — authoring guidance, not mechanical. +3. **Elevate contaminated trust.** It's not a post-arc state. It's the normal condition of life in a compromised community. +4. **Cultural identity as mechanical resistance.** Regional style guides must include social norms toward authority, privacy expectations, loyalty structures, and the community's shared silence. +5. **THE FRIEND is never procedurally generated.** Write a pool of FRIEND-eligible NPCs at Tier 1 depth. Randomize the *selection*, not the *content*. +6. **PC-as-NPC requires authored relationship stubs** at Tier 2 minimum for all connections, Tier 1 for the FRIEND relationship. +7. **Procedural generation varies context, not content.** The authored emotional core stays fixed. Everything around it shifts to create replay value through reframing. diff --git a/docs/workshops/wiki-review/round1-mellanie.md b/docs/workshops/wiki-review/round1-mellanie.md new file mode 100644 index 000000000..026e81d06 --- /dev/null +++ b/docs/workshops/wiki-review/round1-mellanie.md @@ -0,0 +1,136 @@ +# Round 1 Response: Mellanie (Librarian) + +**Topics:** 2 (Authoring Conventions / Style Guide), 3 (Environmental Text & Regional Culture) + +--- + +## Topic 2: Authoring Conventions — What I Learned Writing monologue-guide.md + +### What conventions I followed + +When I wrote the monologue guide, I had D-028, D-032, and D-035 as formal specs. Those gave me the tag schema and the hard partition rule. What they didn't give me was the **authoring workflow** — the sequence of decisions a writer makes when sitting down to produce a tagged YAML line. I had to reverse-engineer that from the decisions, and the guide is my attempt to codify it. + +Conventions I settled on: + +1. **Mirror-first drafting.** Write the smuggler line and detective line for the same trigger back-to-back. Never write one character's pool in isolation — you lose the dual-lens resonance. The guide demonstrates this with paired examples at every trigger type. + +2. **Prerequisite-before-text.** Decide the knowledge gate first, then write the line. If you write the line first, you'll write something beautiful that doesn't match any valid FactId, and you'll spend an hour figuring out why it can't fire. + +3. **One-breath rule.** If a monologue line takes more than one breath to read aloud, cut it. The player is moving, fighting, or watching NPCs. Monologue competes with gameplay for attention. Three words, not thirty. + +4. **Tell lines need mechanical notes.** Every tell observation line gets a `notes` field documenting which `known_attributes` key it updates. Without this, there's no way for implementers to know what the line is supposed to DO to the knowledge graph. + +5. **ID convention:** `{location}_{type}_{###}`. I documented this in the guide but it needs explicit rules about shorthand (`hub` vs `terminal`, `bar` vs `last_shift`, `corr` vs `corridor`). Right now the guide uses both `hub` and `terminal` for the same location. That's a collision waiting to happen. + +### What I wish had been documented before I started + +**These are the rules that should be in an explicit style guide:** + +1. **Canonical location shortcodes.** Every location needs a single, agreed ID prefix. `terminal`, `bar`, `corridor` — not `hub`, not `last_shift`, not `corr`. One name per location. Put it in a table. + +2. **Prerequisite reference validation.** The guide says "use exact FactId strings from the Fact Catalog" but there's no tooling to enforce this. A writer can typo `contraband.ring_exist` (missing the `s`) and nothing catches it until runtime. The style guide should mandate: every prerequisite must reference a FactId, RelationshipState, or EntityKnowledge key that exists in the canonical catalogs. If it doesn't exist, the line is invalid. This needs to be a schema check, not a human check. + +3. **Access tier defaults by character.** The monologue guide documents per-NPC access mapping, but there's no rule for what to do when you're writing a generic line that isn't about a specific NPC. What's the default access tier for a smuggler's idle thought? `insider` (they're part of the community) or `public` (the thought has no audience)? I defaulted to `insider` for smuggler monologue and `authority` or `public` for detective monologue, but that's my convention, not a documented one. + +4. **Situation overlap rules.** A line can have multiple `situation` tags (e.g., `[arrival, shift_start]`). But when is overlap appropriate vs. redundant? If a line fires on `arrival`, does it also need `shift_start`? The guide doesn't address this. My working rule: add multiple situations only when the line is genuinely appropriate for both independently. If removing either situation would make the line feel wrong in that context, don't list it. + +5. **Mood exclusivity.** Can a line have `mood: [fond, worried]`? Yes — the schema allows it. Should it? Only if the character genuinely feels both simultaneously (contaminated trust is `[fond, conflicted]` not `[fond, worried]`). The style guide needs to say: mood lists represent simultaneous emotional states, not alternatives. If you mean "either fond or worried depending on context," write two separate lines. + +6. **Tag freeform discipline.** The `tags` field is a freeform escape hatch. The guide uses tags like `[kael, baseline, pre_contradiction]`, `[ring, operational]`, `[the_friend, contradiction, critical_moment]`. Without a controlled vocabulary for freeform tags, every author invents their own. Propose: maintain a living list of approved freeform tags per content domain. Not locked — authors can propose new ones — but reviewed. Otherwise you'll get `pre-contradiction`, `pre_contradiction`, `precontradiction`, and `before_contradiction` all meaning the same thing. + +7. **Dual-lens notes format.** The `dual_lens` map is authoring-only, but I found myself writing inconsistent entries. Sometimes a sentence, sometimes a phrase, sometimes a full paragraph. Propose: dual-lens notes are one sentence each, imperative voice. "Reads as operational context for the smuggler." "Reads as investigation data for the detective." Consistent, scannable, quick. + +### What a new author needs that I can provide + +If someone joins tomorrow and needs to write monologue lines for a new NPC, here's the minimum kit: + +- **The monologue guide** (exists, complete for triggers and prerequisites) +- **Location shortcode table** (needs creating) +- **Freeform tag vocabulary** (needs creating) +- **Dual-lens checklist** (exists as "Authoring Checklist" in the guide, but needs the dual-lens note format standardized) +- **Voice reference per character** (partially exists in NPC profiles; needs extraction into standalone voice cards — 5-10 lines per character showing register, vocabulary, sentence length, what they notice) +- **A worked example** with annotations (the guide has three full pools; could use a single annotated line-by-line walkthrough explaining every tag choice) + +--- + +## Topic 3: Environmental Text & Regional Culture + +### What environmental text changes based on regional culture + +Environmental text is everything the player reads that isn't dialogue or monologue: signs, menus, terminal screens, graffiti, public notices, manifests, door labels, safety warnings, news tickers. This is my domain, and regional culture affects ALL of it. + +**Things that change per region:** + +1. **Language register of official signage.** Krenn System is pragmatic, first-name-primary, blunt. Official signs should reflect this: "Bay 3 - Outbound Freight" not "Outbound Freight Processing Bay 3, Section C." Short. Functional. No institutional padding. A system settled by a different cultural cluster might have more formal signage, honorific address, or multilingual notices. + +2. **Bar menu items and pricing.** "Grain spirit" is Krenn culture. "Ale" is generic. What's the local specialty? What are the food items? Menu text reveals economic class (prices), cultural heritage (dish names), and station infrastructure (what can you grow/import?). Lera's menu should feel Krenn — compact, no-frills, a handful of options that regulars know by heart. A bar on a different station might have fifteen options with descriptions. + +3. **Graffiti and informal markings.** This is where culture bleeds through most. Krenn graffiti would be terse, practical, maybe operational — dock workers leaving notes for each other, complaints about shift schedules, inside jokes that require context. On a station with strong political movements, graffiti might be slogans. On a station with religious heritage, you might see blessings or warnings. + +4. **Terminal screen content.** Commission kiosk displays, freight manifests, public information terminals. The *information architecture* reflects the culture that built the station. Krenn systems are functional — no branding, minimal graphics, data-dense. A Syndic-influenced system might have corporate branding everywhere. An Unbound-sympathetic station might have privacy warnings on every lattice-connected terminal. + +5. **Safety notices and legal text.** "Unauthorized lattice modification: Category 3 violation" is institutional Commission language. But how a station *posts* that notice reveals its relationship with the Commission. Krenn: small, regulatory-standard, nobody reads it. A compliant Core system: prominent, well-maintained, multiple languages. A fringe settlement: defaced, covered over, or missing entirely. + +6. **News ticker / Meridian feed.** Headlines reflect both the Reach-wide news cycle AND local editorial voice. Krenn System ticker should feel like a working-class local paper — freight prices, shift schedule changes, sports results, a distant political story filtered through "how does this affect us?" framing. The same headline on a Core system ticker would be written for a different audience entirely. + +7. **Door labels and wayfinding.** Krenn uses shorthand. "B-7" not "Maintenance Corridor B, Section 7." Regulars know where things are. New arrivals get lost. This IS gameplay — the detective navigates an unfamiliar space using terse labels, while the smuggler reads them as operational shorthand. + +### How this affects my authoring workflow + +**Current problem:** I don't have a regional style brief to write against. + +When I wrote the monologue guide examples, I used Krenn culture intuitively — compact names, pragmatic language, industrial atmosphere. But "intuitively" isn't reproducible. If I write the news ticker tomorrow, I need to know: + +- What heritage languages leave traces in daily speech? (Do people say "varelse" instead of "thing"? Is there a word for the smell of recycled air that has no English equivalent?) +- What naming conventions do businesses follow? (Is "The Last Shift" a Krenn-style bar name? Or is it too on-the-nose for a culture that actually works shifts?) +- What food and drink items exist? (I can't write a menu without a food vocabulary.) +- What media exists? (Is the news ticker text-only? Images? Video? Audio? This affects my writing format.) +- What slang exists for contraband, for the Commission, for lattice technology? (NPCs need to talk about these things without using dictionary definitions. "Running components" not "transporting unlicensed lattice modifications.") + +**What I need from Topic 3 outputs:** + +1. A **Krenn System regional brief** with naming conventions, slang vocabulary (15-20 terms minimum), food/drink list, media format, and cultural markers. +2. A **regional style guide template** so that when v0.2 adds a new system, I know exactly what cultural information I need before I can write environmental text for it. +3. An **environmental text type catalog** — every type of in-world text the player can encounter, with character limits, display rules, and cultural variation notes. + +### Concrete proposal: Environmental text types for v0.1 + +Here's what I think we need, with authoring notes: + +| Text Type | Location | Cultural Variation | Approx. Count | +|-----------|----------|-------------------|---------------| +| Door/bay labels | All locations | Shorthand style (Krenn = terse) | 15-20 | +| Safety notices | Hub, corridors | Commission language + local compliance level | 5-8 | +| Terminal screens | Commission kiosk, hub manifests | Data density, branding | 8-12 | +| Bar menu | The Last Shift | Food/drink names, prices, cultural flavor | 1 (the menu) | +| Graffiti | Corridors, bar restroom | Informal voice, cultural markers, operational notes | 10-15 | +| News ticker headlines | Bar, hub, kiosk | Local editorial voice, Reach-wide vs. local mix | 15-20 per cycle | +| Public notices | Hub, bar | Regulatory + community tone | 5-8 | +| Freight manifests | Hub | Institutional format, discrepancy-visible design | 3-5 templates | + +**Total: ~65-90 environmental text items for v0.1.** Each one needs the regional brief to write correctly. The brief is my blocking dependency. + +### Environmental text and the dual-lens + +Environmental text is the one content type that works identically for both characters — same sign, same menu, same terminal screen. But the monologue ABOUT that text differs per character: + +- **Sign: "Bay 7 - Offline (Maintenance)"** + - Smuggler monologue: "Bay 7's dark. Voss cleared it for the run tonight." + - Detective monologue: "Bay 7 offline for maintenance. Third time this month. Checking the maintenance log." + +The environmental text itself is culturally authored once. The character-specific reading lives in monologue. This is the most efficient content type to produce — and the one that benefits most from a regional brief, because every sign and screen is an implicit worldbuilding detail. + +--- + +## Summary of Proposals + +1. **Create a location shortcode table** — one canonical ID prefix per location, enforced in all YAML content. +2. **Create a freeform tag vocabulary** — living list, reviewed, prevents divergent naming. +3. **Standardize dual-lens note format** — one sentence per character, imperative voice. +4. **Extract voice cards per character** — 5-10 reference lines per playable character showing voice register, vocabulary, and perspective. +5. **Build prerequisite validation** into the content pipeline — schema check against fact catalog, not human review. +6. **Prioritize the Krenn System regional brief** — blocking dependency for all environmental text authoring. +7. **Define the environmental text type catalog** — what types exist, where they appear, character limits, cultural variation rules. +8. **Standardize mood list usage** — simultaneous states only, not alternatives. + +Every one of these is a "figured it out by doing, wish it had been written down" problem. The style guide should save the next writer the same discovery process. diff --git a/docs/workshops/wiki-review/round1-miri.md b/docs/workshops/wiki-review/round1-miri.md new file mode 100644 index 000000000..ce98bee49 --- /dev/null +++ b/docs/workshops/wiki-review/round1-miri.md @@ -0,0 +1,565 @@ +# Workshop Round 1 — Miri (Worldbuilder / Setting Designer) + +**Topics assigned:** 3 (Regional Style Guide + Krenn System Cultural Brief), 4 (Growth Planning / Wiki Scaling) + +--- + +## Topic 3: Regional Style Guide — Pattern + Krenn System Brief + +### Part A: Regional Style Guide Template + +This template defines what a cultural brief for any star system or settled region must contain. The purpose is not an encyclopedia entry — it's a **content authoring tool**. Writers, designers, and procedural generators need to know what names sound right, what signs look like, what food gets served, and what swear words people reach for. + +--- + +#### REGIONAL STYLE GUIDE — TEMPLATE + +``` +# [Region Name] — Regional Style Guide + +## 1. Heritage Profile +- **Founding cluster:** Which Earth-origin cultural groups organized the initial settlement? + (Be specific: not "European" but "Upper Volga Russian + Finnish + Estonian, with a + secondary Dutch maritime-commercial contingent") +- **Settlement era:** When in the colonization timeline was this region settled? + (Early settlers have deeper drift; recent settlements are closer to Earth patterns) +- **Settlement motivation:** Economic (resource extraction, logistics hub, agricultural), + ideological (religious community, political separatists, philosophical project), or + institutional (government outpost, research station, military)? +- **Secondary populations:** Who arrived later? Corporate transfers, economic migrants, + refugees from other systems? These layers create cultural friction and linguistic mixing. +- **Syndic presence:** Which commercial entities shaped the economy, and what corporate + culture did they bring? (Syndic-founded settlements have corporate naming in public + infrastructure) + +## 2. Naming Conventions + +### 2a. Personal Names — First Names +- **Heritage pool:** Which Earth-name traditions are the dominant source? + Give 15-20 example first names (mix of masculine, feminine, and gender-neutral + as culturally appropriate). +- **Phonetic signature:** What makes a name "sound right" for this region? + (Syllable count, consonant/vowel balance, stress patterns, characteristic sounds) +- **Drift patterns:** How have names evolved from their Earth origins? + (Shortening? Sound shifts? Blending between heritage pools? Novel coinages?) +- **Generational layers:** Do older residents have more traditional names? + Do younger generations use more drifted/blended names? + +### 2b. Personal Names — Family Names +- **Structure:** Patronymic? Fixed surname? Clan name? Occupational? + Matronymic? Double-barreled? None? +- **Usage rules:** When is the surname used? (Formal contexts, authority interactions, + legal documents, never in daily life?) +- **Heritage pool:** 10-15 example surnames with origin notes. +- **Drift patterns:** How have surnames changed? (Simplified spelling, dropped + patronymic suffixes, compound names shortened, adopted place-names?) + +### 2c. Place Names +- **Pattern:** Heritage-language descriptive? Founder-named? Corporate-branded? + Functional-industrial? Numeric/grid? +- **Register shift:** Is there a formal name vs. informal name pattern? + (Official registry name vs. what locals actually call it) +- **Examples:** 8-10 place names at different scales (system, planet, station, + district, street-level, business name). + +### 2d. Business & Institution Names +- **Corporate naming:** Do Syndic businesses use heritage names, functional names, + or brand names? Are there legacy businesses with older naming conventions? +- **Informal businesses:** What naming pattern do owner-operated establishments follow? + (Owner's name? Descriptive? Ironic? Heritage-language?) +- **Institutional naming:** How are government, Commission, and Assembly entities named + locally? (Formal institutional name vs. colloquial shorthand) + +## 3. Language Echoes + +### 3a. Substrate Language +- **Primary heritage languages:** Which languages left traces in daily speech? + (Most regions speak Concordat Standard; the substrate is what leaks through) +- **Survival domains:** Where do heritage words survive? + (Profanity, food, family terms, weather/environment, workplace slang, endearments) + +### 3b. Lexicon +- **10-15 heritage words** that persist in daily speech, with meaning and context. +- **5-8 slang terms** that are locally distinctive (may or may not have heritage origin). +- **Profanity pattern:** What do people swear by? (Heritage oaths? Station-specific + references? Technology curses? Religious/philosophical?) +- **Greeting/farewell conventions:** Heritage-influenced or purely local? +- **Terms of address:** How do peers, subordinates, superiors, and strangers address + each other? + +## 4. Aesthetic Markers + +### 4a. Architecture & Interior +- **Construction style:** What does residential space look like? (Heritage decorative + traditions, or purely functional station architecture?) +- **Personal space decoration:** What do people put on their walls, lockers, shelves? +- **Public space texture:** Signage style, street/corridor decoration, public art, + graffiti conventions. +- **Color palette tendencies:** Are there culturally preferred colors in clothing, + signage, decoration? + +### 4b. Food & Drink +- **Heritage cuisine:** What food traditions survive? (Often the most persistent + cultural marker — food outlasts language) +- **Station adaptations:** How has heritage cooking adapted to station-available + ingredients? (Synthetic protein replacing traditional proteins, station-grown + vegetables replacing regional produce) +- **Drink culture:** What do people drink? Heritage beverages adapted or replaced? + Local brewing/distilling traditions? +- **Eating customs:** Communal? Private? Shift-based? Formal meal times or grazing? + +### 4c. Dress & Appearance +- **Work clothing:** Standard-issue or culturally influenced? +- **Off-duty dress:** Heritage-influenced? Station-practical? Status markers? +- **Visible cultural markers:** Jewelry, tattoos, hairstyles, augmentation + aesthetics (lattice port customization, visible bionics)? + +### 4d. Music & Entertainment +- **Heritage music traditions:** What survived? (Often fragments — a scale, a rhythm, + an instrument sound that gets remixed into contemporary forms) +- **Local entertainment:** What do people do for fun? (Card games, sports, Meridian + feeds, social gathering patterns) +- **Performance/storytelling traditions:** Any heritage oral or performance culture? + +## 5. Social Structure + +### 5a. Trust & Hierarchy +- **Trust model:** How is trust built? (Shared labor? Shared risk? Time? Family + connection? Institutional credential?) +- **Authority signals:** How is authority communicated? (Naming conventions, body + language, spatial positioning, dress, speech register?) +- **Insider/outsider dynamics:** How are newcomers treated? How long until they're + "from here"? + +### 5b. Community Norms +- **Privacy expectations:** What's public, what's private? What questions are + appropriate, what questions are rude? +- **Labor solidarity:** How do workers relate to each other and to management? +- **Attitude toward institutions:** How do locals view the Assembly, Commission, + Syndics? (Heritage may influence institutional trust/distrust patterns) + +## 6. The 180-Year Drift + +This section is the soul of the brief. It answers: **How did this culture get from +Earth-heritage to where it is now?** + +- **What was preserved deliberately?** (What did the founders care enough about to + maintain across generations?) +- **What was preserved accidentally?** (What survived because it was embedded in + daily practice — cooking, naming, greeting — rather than because anyone decided + to preserve it?) +- **What was lost?** (What heritage elements didn't survive the transition to + station life, mixed populations, new economic realities?) +- **What is new?** (What cultural elements emerged from the unique conditions of + THIS place — the station architecture, the economic pressures, the social + composition, the local history?) +- **What is contested?** (Where do heritage-keepers and modernizers clash? + Where do different heritage streams within the community conflict?) +``` + +--- + +### Part B: Krenn System Regional Brief (Filled Template) + +--- + +# Krenn System — Regional Style Guide + +## 1. Heritage Profile + +**Founding cluster:** The Krenn System was settled primarily by a **Northern European / Baltic coalition** — specifically a consortium organized out of Finnish, Estonian, and Latvian settler groups, with significant Dutch and Norwegian commercial backing. The settlement was an economic venture: the Syndic shipping combine *Talvik Logistics* (Finnish-Estonian origin) identified the system's gate position as optimal for freight transit and funded the initial infrastructure buildout. + +The founding population was ~60% Finnish-Estonian-Latvian, ~25% Dutch-Norwegian (commercial/engineering cadre), ~15% mixed (recruited skilled labor from various origins — some Central European, some East Asian, some from earlier Reach settlements). This mix matters: the cultural identity isn't any single Earth nationality. It's what happened when these groups spent 180 years sharing a logistics hub and raising children together. + +**Settlement era:** Mid-colonization. Krenn was settled ~180 years ago, after the initial wave of core-system settlements but before the frontier push. Old enough to feel established. Not old enough to be a founding culture of the Reach. + +**Settlement motivation:** Economic. Krenn exists because the gate connections made it a freight node. Nobody came to Krenn for the scenery. The founding charter was a logistics contract, not a constitution. + +**Secondary populations:** Over 180 years, Krenn has absorbed workers from connected systems — economic migrants following logistics jobs. Most secondary arrivals have been culturally absorbed within 1-2 generations. Current population reflects the founding cluster strongly, with occasional "off-pattern" names from later arrivals that locals treat as unremarkable. + +**Syndic presence:** *Talvik Logistics* (founding combine) was absorbed ~120 years ago into a larger Syndic conglomerate, which was itself restructured ~80 years ago into the *Sova Logistics Consortium* — the entity that currently employs most of the district. The Talvik name survives in a few place names and as a surname. Corporate naming influences are visible in older infrastructure (numbered bays, standardized designations) but informal naming has claimed most daily-use spaces. + +--- + +## 2. Naming Conventions + +### 2a. Personal Names — First Names + +**Heritage pool:** Finnish, Estonian, Latvian — with 180 years of drift, blending, and simplification. + +**Example first names (current generation):** +- **Short-form (1 syllable, most common in working class):** Kael, Voss, Drin, Hael, Renn, Pell, Tav, Sess +- **Mid-form (2 syllables, standard):** Torek, Lera, Maret, Resha, Devra, Harek, Sabel +- **Full-form (2 syllables, slightly more formal):** Sera, Nils, Kosse, Naia, Pael, Olin + +**Phonetic signature:** Krenn names are compact and consonant-forward. Vowels tend toward **a, e, o** (open, central). The sounds **ae, ei, ou** appear as diphthongs. Hard consonants dominate: **k, t, r, v, s, d, n, l, p**. Soft sounds (**sh, ch, zh**) are rare. Double consonants are uncommon in first names but appear in surnames. Names rarely exceed 2 syllables in daily use. + +**How to tell if a name "sounds Krenn":** Say it aloud. If it's crisp, lands hard, and takes less than a second to say, it fits. If it flows or elongates, it doesn't. "Kael" is Krenn. "Kaelinar" is not. "Torek" is Krenn. "Toreksha" is not. + +**Drift from Earth heritage:** +- Finnish names like *Kalle, Matti, Väinö, Aino* → shortened, vowel-smoothed → **Kael, Maret, Venn** +- Estonian names like *Toomas, Rein, Leelo, Helle* → consonant-hardened, trimmed → **Torek, Renn, Lera, Hael** +- Latvian names like *Valdis, Daina, Pēteris* → compressed → **Voss, Drin, Pell** +- Dutch/Norwegian names like *Nils, Sabel, Harek* → these survived closer to origin because the commercial cadre had institutional prestige. Dutch/Norwegian-origin names read slightly "higher status" to Krenn ears, though this association is fading. + +**Generational layers:** +- **Older residents (60+, pre-rejuvenation age):** Slightly longer names, closer to heritage. "Torek" is an older-generation name. "Maret" is on the boundary. +- **Current working generation (25-50):** The short forms dominate. "Kael," "Renn," "Tav." +- **Children:** Even more compressed. Single-syllable names are increasingly common. Some genuinely novel — parents combine syllables from both heritage streams. +- **New arrivals from other systems** are identifiable by name pattern. A name like "Ashira" or "Tomás" signals non-Krenn origin immediately. + +### 2b. Personal Names — Family Names + +**Structure:** Fixed surnames, inherited patrilineally or matrilineally (family choice, no cultural default — this ambiguity is itself a Krenn trait). Many working-class Krenn residents rarely use their surname at all. In Sova Transit District, most people are known by first name only. + +**Usage rules:** +- Surnames used in: official documents, Commission interactions, authority contexts, introductions to strangers (sometimes), legal proceedings. +- Surnames NOT used in: daily conversation among peers, bar interactions, workplace casual address. Using someone's surname uninvited is a mild social signal — either you're an outsider, you're asserting authority, or you're angry. +- Naming someone by title + surname ("Supervisor Voss") marks them as authority. Naming them by first name alone ("Voss") marks them as a colleague even if they're technically your boss. This distinction is load-bearing for the detective's social integration challenge. + +**Example surnames:** Davan, Venn, Sessik, Lintar, Korr, Talvik (old founding family), Rosta, Pellam, Kosse, Neven, Harsk + +**Heritage and drift:** +- Finnish-origin: *-nen, -la, -nen* suffixes dropped over generations. *Korhonen → Korr. Mäkelä → Maret (first name absorbed the family identity).* +- Estonian-origin: *-maa, -sik, -vere* sometimes survive. *Sessik* retains the Estonian *-sik* suffix. +- Latvian-origin: *-is, -s* ending trimmed. *Lintars → Lintar.* +- Dutch/Norwegian-origin: Often survived intact because they were already short. *Voss, Nils, Sabel.* +- **Blended surnames** (combining heritage streams) are a post-settlement innovation. *Davan* is not Finnish or Dutch — it emerged on Krenn. + +### 2c. Place Names + +**Pattern:** Krenn place names follow a three-layer system: + +1. **Institutional names (official, rarely used):** Corporate or bureaucratic. "Sova Transit Logistics Hub, Bay 7-C." "Krenn System Administration, Sector 12." These appear on legal documents and institutional signage. Nobody says them. + +2. **Established names (standard use):** Heritage-influenced or descriptive. "Station Sova" (Estonian-origin, means "suitable/fitting" — the founders named it for the gate position). "Krenn" itself (possibly Finnish *krenni*, an old dialect word for "crossroads" — the etymology is debated, which is itself a cultural detail). "The Terminal" (English-origin descriptive, reflecting the commercial-cadre influence on workplace naming). + +3. **Informal names (locals only):** Personal or experiential. "Lera's" instead of "The Last Shift." "The B" for Corridor B-7. "Topside" for Level 3. These names are social shibboleths — knowing them signals belonging. + +**Place name examples at different scales:** +- System: **Krenn System** (heritage-origin, debated etymology) +- Planet: **Krenn Prime** (institutional naming — "Prime" is a Concordat Standard convention for the primary habitable world) +- Station: **Station Sova** (heritage-origin: Estonian *sova*, "suitable") +- District: **Sova Transit District** (functional-descriptive) +- Location: **The Terminal** (worker-descriptive), **The Last Shift** (worker-descriptive, ironic — named for the drink you have before your last shift ends, which is every shift) +- Corridor: **B-7** (grid designation, institutional origin, adopted into informal speech) +- Bar: **Lera's** (owner-named, informal; the formal name "The Last Shift" is on the sign but not in conversation) + +### 2d. Business & Institution Names + +**Corporate naming:** The Sova Logistics Consortium uses bland, functional naming internally ("Bay 7-C," "Processing Station 3"). Workers have renamed everything that matters. The corporate name surfaces only on payslips, official communications, and the sign at the main gate that nobody reads. + +**Informal businesses:** Owner-named or descriptive. "Lera's." A food vendor might be "Maret's counter" even if Maret just works there and the owner is a Syndic franchise. Informal businesses with heritage-language names exist but are becoming rare — the heritage words survive as atmosphere, not as operating businesses. + +**Institutional naming:** Locals refer to the Commission as "the Commission" (no shorthand — the formality is the point, marking it as external). The Assembly is "the Assembly" or, less respectfully, "the floor" (as in "the Assembly floor where they debate things that don't affect us"). Station security is "sec" or "the uniforms." + +--- + +## 3. Language Echoes + +### 3a. Substrate Language + +**Primary heritage languages:** Finnish, Estonian, Latvian — collapsed into a shared substrate over 180 years. Most Krenn residents cannot speak any heritage language fluently. What survives are words, cadences, and grammatical tendencies embedded in how they speak Concordat Standard. + +**Survival domains:** +- **Profanity:** Heritage swearing survives because it's emotionally charged and taught informally. "Perkele" (Finnish, emphatic curse) is still used on Krenn, shortened to **"perk"** — used the way English-speakers use "damn." Most speakers don't know the origin. +- **Food:** Heritage food words persist because recipes carry them. *Leib* (bread, Estonian/Latvian origin), *kalaa* (fish/protein, Finnish-adapted), *supp* (soup, shared Baltic). +- **Family terms:** *Ema* (mother, Estonian), *isa* (father, Estonian/Finnish blend) — used by some families, especially older ones. Younger families increasingly use Concordat Standard terms. +- **Workplace slang:** Technical terms from the founding-era logistics vocabulary. *Tööd* (work/shift, Estonian-derived, now means specifically the boring maintenance tasks nobody wants to do — "I drew tööd duty"). *Vakt* (watch/guard shift, Norwegian-origin, now specifically means the period when someone is on lookout during ring operations — the word has been criminalized by usage without anyone planning it). +- **Weather/environment:** Stations don't have weather, but environmental complaints use heritage patterns. *Kylm* (cold, Finnish-adjacent) — "It's kylm in Sector 3" means the ventilation is acting up again. Used as a universal complaint word. +- **Endearments:** *Väike* (small/little one, Estonian-origin) — used for children and, sarcastically, for new hires. Resha has been called *väike* by at least three different colleagues. + +### 3b. Lexicon + +**Heritage words that survive in daily Krenn speech:** + +| Word | Origin | Meaning | Usage context | +|------|--------|---------|---------------| +| perk | Finnish (*perkele*) | Emphatic expletive | Universal — "Perk, the scanner's down again" | +| kylm | Finnish (*kylmä*) | Cold / uncomfortable | Environmental complaint — "It's kylm on Level 3" | +| tööd | Estonian (*töö*) | Boring maintenance work | Task assignment — "I got tööd duty" | +| vakt | Norwegian (*vakt*) | Watch/lookout shift | Ring-adjacent — informal, careful usage | +| leib | Estonian/Latvian | Bread / staple food | Food — "grab some leib at the counter" | +| kalaa | Finnish (*kala*) | Protein ration (any type) | Food — generic term for the main protein component | +| supp | Baltic shared | Soup / hot meal | Food — "Lera's supp is better than the canteen" | +| väike | Estonian (*väike*) | Small one / rookie | Affectionate or mildly teasing | +| hüva | Finnish/Estonian blend (*hyvä/hüva*) | Good / okay / affirmative | Casual agreement — "Hüva, let's go" | +| käik | Estonian (*käik*) | Corridor / route / passage | Navigation — "Take the back käik" | +| selge | Estonian (*selge*) | Clear / understood | Confirmation — "Selge" (= "Copy that") | +| laev | Estonian (*laev*) | Ship / shuttle / transport | Any vessel — "When's the next laev through the gate?" | +| kodu | Estonian (*kodu*) | Home / one's place | Sentimental — "This is kodu" (said of the district, not a specific dwelling) | + +**Locally distinctive slang (post-settlement origin):** + +| Term | Meaning | Origin | +|------|---------|--------| +| shift-end | The act of going to the bar after work | From "end of shift" — verb form: "Let's shift-end" | +| gate-side | Being near the span gates; by extension, being exposed or visible | Spatial metaphor for institutional visibility | +| wall-side | Being in the maintenance corridors; by extension, being hidden or off-record | Spatial metaphor for being off-grid | +| ticking | Behaving in a way that draws institutional attention | From "news ticker" — as in, "you'll be on the ticker" | +| quiet credit | Supplemental income from ring activity | Euphemism — never said to outsiders | +| hard name | Using someone's surname, implying formality or hostility | Social register marker | + +**Profanity pattern:** Krenn profanity is short and percussive, matching the naming phonetics. "Perk" is the all-purpose emphatic. "Gate-rot" is the locally-coined equivalent of "bullshit" (from the ozone smell near span gates — something that's unpleasant and pervasive). "Talvik's teeth" is an older oath (referencing the founding Syndic) that only people over 50 use — younger workers think it sounds ridiculous. + +**Greeting/farewell conventions:** +- **Peers meeting:** First name, nod. No verbal greeting formula. If you say "hello" formally, you're either an outsider or making a point. +- **Peers departing:** "Hüva" (= okay, good, fine — covers everything from "see you later" to "take care"). +- **Acknowledging someone's presence without engaging:** Eye contact held for 0.5 seconds, chin-lift. No words. +- **Strangers:** Brief eye contact, nothing else. This is polite. Greeting a stranger is slightly aggressive — it demands engagement. The detective will misread this as hostility. + +**Terms of address:** +- **Peer to peer:** First name, always. +- **Subordinate to supervisor:** First name in practice, title+surname when formally required ("Supervisor Voss"). The switch from first name to title signals a change in register — if a worker suddenly says "Supervisor Voss" instead of "Voss," something is wrong. +- **Anyone to Commission representative:** "Commissioner" + surname. Always formal. The formality isn't respect; it's distance. +- **Anyone to newcomer/stranger:** Nothing, or first name once introduced. No honorifics for peers regardless of familiarity. + +--- + +## 4. Aesthetic Markers + +### 4a. Architecture & Interior + +**Construction style:** Pure station-functional. Krenn architecture is not heritage architecture — it's prefab modules and retrofitted bays. Cultural identity shows not in what was built but in **how people have modified what was built**: hand-lettered signs replacing corporate signage, warm lighting replacing institutional fixtures, personal objects in shared spaces. + +**Personal space decoration:** +- Lockers in The Terminal: stickers (some heritage-themed — stylized Finnish/Estonian folk patterns, modernized and mass-produced), shift-end doodles (a minor tradition — drawing something small on the last day of a work cycle), photographs of family and friends. +- Residential pods: more heritage expression than public spaces. Some families maintain a small **nurk** (Estonian: "corner" — a small shelf or niche with family items, heritage objects, sometimes a photograph of an Earth-origin landscape they've never seen). The nurk tradition is fading — younger families don't bother. + +**Public space texture:** +- Bilingual signage: Concordat Standard (official, clean, institutional) alongside hand-lettered Krenn vernacular (additions, corrections, complaints, directions). The contrast between the two register layers is visually distinctive. +- Graffiti: sparse, functional. Maintenance workers leave marks (dates, arrows, initials). Some ring-adjacent marks in corridors. No elaborate mural tradition — Krenn culture doesn't produce decorative public art. Occasional stickers with folk-pattern motifs. + +**Color palette:** Krenn doesn't have a deliberate color culture, but the built environment creates one: **industrial white** (workplace), **warm amber** (bar and social spaces, from aging fixtures), **emergency red** (corridors), **cool gray** (station infrastructure). Personal color preferences tend toward earth tones and muted blues — loud colors read as "trying too hard" in Krenn social context. + +### 4b. Food & Drink + +**Heritage cuisine that survived:** Baltic-Nordic comfort food, heavily adapted to station ingredients. +- **Bread culture:** Leib (dark, dense, slightly sour) is the one food tradition that has survived nearly intact. Station-grown grain + synthesized rye flavoring. Every Krenn station has someone who bakes leib. On Sova, it's a vendor on Level 2 near the residential pods. +- **Fish/protein:** Kalaa (generic protein) is served in styles that echo Finnish and Estonian fish preparation — salt-cured, smoked-flavored (synthetic smoke), served cold with bread. The actual protein is station-standard cultured material, but the preparation method carries heritage. +- **Soup:** Hot, thick, heavy. The default comfort food. "Supp" covers everything from a thin broth to a dense stew. Lera serves three variations at The Last Shift. +- **Drinking:** Station-brewed spirits (clear, strong, slightly chemical — the working descendant of vodka/aquavit traditions). Imported beer is a status purchase. Synthetic coffee is universal. There's a local drink called **kuum** (Estonian: "hot") that's a spiced warm beverage somewhere between coffee and mulled wine, served at shift transitions. It's the drink that says "I'm off the clock." + +**Eating customs:** Shift-based, practical. No formal meal times for workers. Food is grabbed between tasks, eaten quickly, often standing. The bar is where eating becomes social — Lera's food is not better than the canteen's, but eating at Lera's is a social act rather than a biological one. + +### 4c. Dress & Appearance + +**Work clothing:** Standard-issue logistics coveralls (provided by Sova Logistics Consortium, charcoal gray, company logo on the back that everyone ignores). Workers personalize with pins, patches, rolled sleeves, and the way they wear the collar (up = cold, down = normal, folded in a specific way = off-shift signal that communicates "don't give me tasks"). + +**Off-duty dress:** Practical, layers. No strong fashion culture. Muted colors. A new or conspicuously expensive item of clothing is noticed and commented on — this is why Torek's new jacket is a social tell. Krenn workers don't display wealth. Displaying wealth signals either off-system origin or off-books income. + +**Visible cultural markers:** Lattice port customization is the main expression — the lattice connection point at the base of the skull can be fitted with decorative covers. Krenn workers tend toward simple metal covers (brushed steel, copper). Ornate covers signal higher economic status or off-system sensibility. Some older workers have small tattoos in Baltic folk-pattern styles — angular, geometric, usually on forearms or shoulders. This tradition is dying out. + +### 4d. Music & Entertainment + +**Heritage music:** Almost entirely lost as a living tradition. What survives: a rhythmic pattern in popular music on Krenn that musicologists might trace to Finnish and Estonian folk scales (minor, modal) but that no one on Krenn would identify as heritage. The Meridian music feed at Lera's plays generic ambient — nobody changes it because the ambient has become the soundtrack of the place. + +**Local entertainment:** +- **Card games:** The dominant social entertainment. A game called **kolm** (Estonian: "three") is played at The Last Shift — a trick-taking game for 3-5 players with a bluffing element. It's the social ritual that cements bar culture. Harek runs the regular game. +- **Meridian feeds:** News, entertainment, sports broadcasts from larger systems. Consumed individually, discussed socially. +- **Storytelling:** Not a strong tradition. Krenn people are reserved. But: shift stories are the closest thing — "you'll never believe what came through the gate today" is a genre. These stories are told at the bar, get embellished over time, and serve the function of oral history without the formality. + +--- + +## 5. Social Structure + +### 5a. Trust & Hierarchy + +**Trust model:** Trust is earned through **shared labor and shared time**. New arrivals are treated with polite distance that can last months. There is no shortcut — no credential, no introduction, no display of competence fast-tracks trust. You earn it by being here, doing your job, not causing problems, and not asking questions that aren't your business. + +This is the detective's primary social challenge. Institutional authority (Commission credentials) doesn't buy trust in Krenn culture — if anything, it reduces it, because institutional authority is external. The detective must earn trust the Krenn way: by being present, being consistent, and not pushing. This takes time the investigation doesn't have. + +**Authority signals:** +- **Naming:** Title+surname = formal authority. First name = peer or accepted. +- **Spatial:** Voss's glass-fronted office above the bay floor = visible authority. Lera's position behind the bar = social authority. Devra's use of the corner booth = informal power. +- **Speech:** Direct, short sentences = Krenn norm. Elaborate speech = institutional outsider or someone performing authority. + +**Insider/outsider dynamics:** You're "from here" when people stop using your surname. This can take anywhere from 3 months (if you fit in well and don't ask questions) to never (if you're visibly institutional). The detective will be "hard-named" for the duration of v0.1. The smuggler has always been first-named. + +### 5b. Community Norms + +**Privacy expectations:** High. What you do off-shift is your business. What you do on-shift is the team's business only insofar as it affects work. Asking about someone's personal life uninvited is rude. Asking about someone's finances is hostile. Asking about someone's lattice configuration is institutional overreach. + +**Labor solidarity:** Strong, informal, unspoken. Workers cover for each other — a late arrival is clocked in on time by a colleague, a sick day is absorbed by the team without filing. This solidarity extends to the ring: not-noticing is a form of collective labor solidarity. + +**Attitude toward institutions:** +- **The Commission:** External. Necessary evil. Respected for the anti-forking work, resented for the lattice regulation that prices people out of upgrades. "They do important work somewhere else; here they're just a tax." +- **The Assembly:** Distant. Irrelevant to daily life. Viewed the way most working-class populations view legislatures: with a mix of indifference and mild contempt. "The floor" debates things that don't change shift schedules. +- **The Syndics:** Complicated. The employer. The entity that sets wages and controls costs. Not loved, not hated — accepted the way weather is accepted. The founding Syndic (Talvik) has a vaguely positive heritage reputation. The current consortium has no emotional valence. + +--- + +## 6. The 180-Year Drift + +**What was preserved deliberately:** +- The name "Krenn" — debated etymology, fiercely defended identity. People identify as "from Krenn" regardless of which station or world they live on in-system. +- Leib (bread). Consistently baked in heritage style across all Krenn stations. The one food item that is identifiably and deliberately cultural. +- The nurk tradition (home shelf with heritage items) — maintained by some families, fading but not gone. + +**What was preserved accidentally:** +- Naming phonetics. Nobody decided Krenn names should be short and consonant-heavy. But when Finnish, Estonian, and Latvian naming traditions blend in a working-class logistics culture that values directness, compression happens naturally. 180 years of children being named by parents who spoke shorter every generation produced the current name pool. +- Substrate vocabulary. "Perk" and "kylm" and "hüva" survived because they were used daily, not because anyone taught them formally. Most Krenn speakers would be surprised to learn these words have Earth-heritage origins. +- Reserve. The Krenn social style — minimal greeting, first-name-primary, distrust of elaboration, privacy as default — echoes Finnish *sisu* and Estonian *maarahvas* identity, but no one on Krenn would make that connection. It just feels like "how people are here." + +**What was lost:** +- Heritage languages as coherent systems. Nobody on Krenn speaks Finnish, Estonian, or Latvian. The substrate words are fossils, not a living language. +- National identity. No one on Krenn identifies as Finnish or Estonian. Some families know their heritage origin; most don't care. "Krenn" has fully replaced Earth-national identity. +- Religious traditions. The founding cluster was largely secular. Whatever religious practices individual settlers brought didn't survive the transition to station-community life. +- Decorative arts. Folk patterns survive as sticker designs and occasional tattoos. No living craft tradition. + +**What is new (emerged on Krenn):** +- The first-name-primary social convention. This is a Krenn innovation — the founding cultures all used surnames more regularly. The logistics-working-class context stripped formal naming as unnecessary. This convention is now a Krenn identity marker. +- Shift-cycle social rhythms. The 5+2 cycle, the shift-end bar migration, the end-of-cycle card game — these are Krenn traditions with no Earth analogue. They emerged from station life. +- The spatial vocabulary (gate-side/wall-side, the social meaning of the corridor/bar threshold). Station architecture creating new cultural language. +- Kolm (the card game). No single heritage origin — elements of Finnish *paskahousu*, Estonian *kaardimäng*, and what appears to be original invention. It's the district's defining social ritual. + +**What is contested:** +- Heritage display. Older residents (and some families) maintain nurk shrines and use more heritage vocabulary. Younger workers find this affected or irrelevant. Neither side argues about it openly — that would violate the privacy norm. The tension is expressed through mild eye-rolls, not confrontation. +- Naming trends. Some parents give children heritage-length names (Katariina, Aleksander) as a cultural statement. Other parents give children maximally compressed names (Ren, Tev, Kai) as a statement of belonging to Krenn-as-it-is rather than Krenn-as-it-was. Neither group discusses it. Both groups notice. + +--- + +## IP Originality Note + +Setting note — I need to flag my own work here for originality verification. The cultural substrate I'm describing (Nordic-Baltic blend with 180 years of drift) is *not* derived from any single SF franchise. Hamilton's Commonwealth doesn't do regional cultural analysis at this level. Banks's Culture deliberately erases cultural heritage. Reynolds is focused on deep time, not ethnic evolution. What we're building is closer to what Ursula Le Guin does — grounding speculative civilizations in recognizable human cultural patterns — but the specific execution (logistics-class Baltic-Nordic blend on a station hub) is wholly original. + +The NPC names established in D-036 already follow this pattern without it being explicitly documented. This brief retroactively explains *why* the names sound the way they do, which is what a style guide should do: describe the pattern that was already emerging, make it explicit, and make it repeatable. + +--- + +## Topic 4: Growth Planning — Wiki Scaling for v0.2+ + +### The Problem + +D-040 established the wiki taxonomy with a hierarchical structure under `wiki/star-systems/`. The question is whether v0.2+ (which adds more star systems, stations, and districts) will break anything, require restructuring, or work as-is. + +### Assessment: D-040 Already Handles This + +Let me check the D-040 structure against the growth scenario. + +**Current state (v0.1):** +``` +wiki/ + star-systems/ + krenn/ + krenn-system.md # system profile + station-sova/ + station-sova.md # station profile + sova-transit-district/ + sova-transit-district.md # district profile + the-terminal.md # location + the-last-shift.md # location + maintenance-corridors.md # location + characters/ # flat — not nested under locations + kael-davan.md + sera-venn.md + ... + factions/ # flat — global entities + technology/ # flat — global + cultural-groups/ # flat — this is where regional briefs live + krenn-system.md # the brief I just wrote + contraband/ + lore/ +``` + +**v0.2 scenario (2 more systems):** +``` +wiki/ + star-systems/ + krenn/ + ... # unchanged + vael/ # new system + vael-system.md + station-something/ + ... + morat/ # new system + morat-system.md + ... + characters/ # grows, remains flat + kael-davan.md + [new NPCs from new systems] + cultural-groups/ + krenn-system.md + vael-system.md # new regional brief + morat-system.md # new regional brief +``` + +**This scales.** The hierarchy is spatial (system → station → district → location) and the flat directories (characters, factions, technology) don't need restructuring when new systems arrive. + +### Name Collision Handling + +The real concern is location names that collide. "The Terminal" could exist in multiple systems. + +**Proposal: Location filenames include system prefix in the ID, not the path.** + +The file path already disambiguates: `star-systems/krenn/station-sova/.../the-terminal.md` vs. `star-systems/vael/station-whoever/.../the-terminal.md`. But for cross-references, every entry's YAML frontmatter should include a `canonical_id` that is globally unique: + +```yaml +--- +canonical_id: krenn.sova.transit.the-terminal +type: location +system: krenn +station: sova +district: sova-transit +status: canonical +--- +``` + +Cross-references use `canonical_id`, not file paths. This is already implied by D-040 ("Hierarchical with cross-references via IDs, not file paths") but should be made explicit in the wiki style guide. + +**For characters:** Character filenames are already unique (first-last format). If we get a second "Kael" in another system, the file is `kael-torren.md` or whatever the full name is. The `canonical_id` would include system origin: `krenn.kael-davan`. + +**For factions:** Global factions don't collide. Local factions (like The Ring) get system-prefixed IDs: `krenn.sova.the-ring`. + +### What Changes When Systems Are Added + +1. **New directories** under `star-systems/`. No restructuring. +2. **New regional briefs** under `cultural-groups/`. Following the template above. +3. **New characters** under `characters/`. Flat, no restructuring. +4. **New local factions** under `factions/`. Flat, with `system` field in frontmatter. +5. **Cross-system factions** (Commission, Assembly, Syndics) gain new relationship entries in their existing pages. No structural change. + +### One Structural Recommendation + +**Add `cultural-groups/` entries to the wiki now, starting with Krenn.** + +D-040 defined the directory but we haven't created the actual file. The regional brief I wrote above should become `wiki/cultural-groups/krenn-system.md`. When v0.2 adds systems, new briefs follow the template. This is the pattern — establish it with one example, then replicate. + +**The index (`wiki/index.md`) should add a Cultural Groups section** linking to these briefs. Currently the index has World, Locations, Factions, NPCs, Technology, Contraband, Knowledge Systems, and Authoring Guides. Cultural Groups is a missing category that will matter as soon as writers need to name NPCs in a second system. + +### The Bigger Picture: How Do New Systems Get Authored? + +When v0.2 says "add Vael System," the authoring sequence should be: + +1. **Miri writes the Regional Style Guide** (following the template above) — this is the first document created for any new region. +2. **The style guide gates all other content.** No NPCs, no locations, no dialogue until the naming conventions and cultural markers are established. +3. Paula/Mellanie/content team use the style guide to create NPC profiles, location pages, and dialogue content. +4. Gestalt validates that the new social sites follow the template model (D-025). +5. The style guide lives permanently in `cultural-groups/` and serves as a reference for procedural generation as well as hand-authored content. + +This workflow is the answer to "do we restructure or namespace from the start?" The answer is: **we already namespaced from the start (D-040), and we add a gating step (regional brief first) that ensures cultural consistency before content creation begins.** + +--- + +## Summary of Proposals + +### For the team to decide: + +1. **Adopt the Regional Style Guide Template** (Part A above) as a required document for every new region in the game. +2. **Adopt the Krenn System Regional Brief** (Part B above) as the canonical cultural reference for v0.1 content. +3. **Confirm `wiki/cultural-groups/` as the home** for regional briefs (per D-040, but currently empty). +4. **Add canonical_id convention** to wiki frontmatter for collision-safe cross-referencing. +5. **Establish the "regional brief first" workflow** — no content creation for a new region until Miri has written and the team has approved its cultural brief. + +### New tickets for SI (if proposals adopted): + +- Create `wiki/cultural-groups/krenn-system.md` from the brief in this document. +- Add Cultural Groups section to `wiki/index.md`. +- Define `canonical_id` format in `wiki/_meta/naming-conventions.md`. +- Update wiki templates to include `canonical_id` field in YAML frontmatter. + +--- + +**Status:** Round 1 response complete. +**Author:** Miri +**Date:** 2026-02-12 diff --git a/docs/workshops/wiki-review/round1-nigel.md b/docs/workshops/wiki-review/round1-nigel.md new file mode 100644 index 000000000..d5c8121ca --- /dev/null +++ b/docs/workshops/wiki-review/round1-nigel.md @@ -0,0 +1,289 @@ +# Round 1 — Nigel (Sandbox & Replayability) + +## Topic 5: Mod Structure — "Add a new NPC to the bar" + +### The Replayability Thesis for Modding + +Here's why I care about this topic even though it sounds like a Tyre question: **mods are replayability we don't have to build.** Every mod that adds to the content pools — new NPCs, new triangles, new Tier 1 modules — is another seed configuration nobody on this team designed. The modder creates one NPC. The randomizer creates a thousand new playthroughs. + +So the mod structure isn't just "how does a modder add a file." It's "how does a modder add to the POOL that the randomizer draws from." If we get this right, the replayability EXPLODES beyond anything we can hand-author. + +### Concrete Proposal: "Add a New NPC to the Bar" + +A modder creates a **content pack** — a directory with a manifest and content files. Here's the minimum viable set for one new bar NPC: + +``` +mods/ + my-bar-npc/ + mod.yaml # Manifest: mod ID, version, dependencies, load targets + npcs/ + fynn.yaml # NPC definition (10-axis profile, all axes) + dialogue/ + bar/ + fynn-dialogue.yaml # Tagged line pool entries (access, trust, situation, topic, mood) + monologue/ + bar/ + fynn-monologue-smuggler.yaml # How the smuggler's inner voice reacts to Fynn + fynn-monologue-detective.yaml # How the detective's inner voice reacts to Fynn +``` + +**mod.yaml** declares: +```yaml +id: "my-bar-npc" +version: "1.0" +game_version: ">=0.1" +extends: + - template: "bar" # Which social site this NPC slots into + role: "regular" # Role slot (regular, staff, outsider, etc.) + tier: 3 # Content tier — modders can aim for Tier 2/3 +adds: + npcs: ["fynn"] + dialogue_pools: ["bar/fynn-dialogue"] + monologue_pools: ["bar/fynn-monologue-smuggler", "bar/fynn-monologue-detective"] +``` + +**fynn.yaml** uses the same 10-axis schema as our wiki NPCs: +```yaml +id: "fynn" +name: "Fynn" +role: "Off-duty pilot" +social_site: "bar" +tier: 3 +axes: + want: "Find a reason to stay in Krenn System instead of taking the next cargo run" + routine: + schedule: + - time: "16:00-20:00" + location: "the-last-shift" + activity: "drinking alone, watching the door" + personality: + primary: "restless" + secondary: "observant" + # ... remaining axes +entanglement: "flat" # Not ring-connected (Tier 3 default) +pool_eligible: true # KEY: can the randomizer include/exclude this NPC per seed? +``` + +### The Critical Field: `pool_eligible` + +This is where it gets exciting. If `pool_eligible: true`, the randomizer can: +- **Include or exclude** this NPC from a given playthrough (some seeds have Fynn at the bar, some don't) +- **Swap** this NPC into different role slots (Fynn is a regular in one seed, an outsider in another) +- **Assign** this NPC to triangles if the modder defines triangle eligibility + +This means a single modded NPC doesn't just add one experience. It adds VARIANCE. Player A has Fynn at the bar. Player B doesn't. Player A tells Player B about this weird pilot who kept watching the door, and Player B says "who's Fynn?" + +And it nails replayability without us engineering it! + +### Additive Modding: The Content Directory Must Support Layering + +The directory structure must support: +1. **Base game** loads `content/base/` — our shipped content +2. **Mods** overlay from `content/mods/{mod-id}/` — additive, never destructive +3. **Load order** resolves conflicts via `mod.yaml` priority and dependency declarations +4. **Schema validation** runs on all mod content at load time — reject malformed NPCs before they enter the pool + +**What modders can add (additive):** +- New NPCs to existing social sites (role slot system) +- New dialogue/monologue lines for existing NPCs (extends the pool) +- New triangles using existing + new NPCs +- New social sites (entire new locations with NPCs and triangles) +- New Tier 1 modules (NEW CONSPIRACIES for the pool — this is the holy grail of mod replayability) +- New contraband types (connected to factions and moral dimensions) +- New PC archetypes (new playable character types with their own monologue pools) + +**What modders can override (explicit, requires declaration):** +- NPC axis values (rebalancing) +- Dialogue lines (voice overhaul) +- Triangle relationships (restructuring drama) + +**What modders cannot do:** +- Silently replace base content (all overrides must be declared in manifest) +- Modify engine schemas (content only, no code) +- Break the tagged pool system (all lines must pass tag validation) + +### Scaling the Triangle System for Mods + +A modder adding an NPC should optionally be able to add that NPC to a triangle: + +```yaml +# In mod.yaml or a separate triangles/fynn-triangle.yaml +triangles: + - id: "pilot-tension" + pattern: "mundane" # Not conspiracy-connected + members: + - role: "outsider" # Fynn + npc: "fynn" + - role: "regular" # Existing NPC + npc: "torek-lintar" + - role: "authority" # Existing NPC + npc: "lera-sessik" + tension: "Fynn is asking too many questions about cargo routes. Torek thinks he's a spy. Lera thinks he's just lonely." + pool_eligible: true # Randomizer can include/exclude this triangle per seed +``` + +Now we've got a modded NPC who creates a new triangle with EXISTING NPCs. One mod. Multiple new interaction patterns. The second playthrough where this triangle fires is different from the first where it didn't. + +### My Big Ask for Tyre + +**Template role slots need to be defined as part of the social site spec, not just implied by the NPCs we happen to have.** The bar template should declare: "I have N regular slots, M staff slots, K outsider slots." Modders fill slots. The randomizer draws from pools to fill empty slots per seed. This means even without mods, different seeds populate templates differently from the base game pool. + +--- + +## Topic 6: Replay Variation — What Makes the Second Playthrough Different? + +### The Comparison Test + +Two players sit down. Both play the smuggler. Same game version, same mods. They finish, compare notes. If they describe the same sequence of events with the same NPCs doing the same things — we've failed. If they describe the same STRUCTURE with different SPECIFICS — we've succeeded. If they can't even agree on what the game was ABOUT — we've created something special. + +### Three Concrete Things the Randomizer MUST Vary + +#### 1. WHO Is THE FRIEND (The Identity Shuffle) + +**Current state:** Kael is always the smuggler's FRIEND. Sera is always the detective's FRIEND. This means playthrough 2 is already partially solved. "Oh, it's Kael again. I know his tell. I know about Corridor B-7. I know he's trying to exit." + +**Proposal:** THE FRIEND is drawn from a pool. Kael is ONE possible smuggler FRIEND. The pool should contain 2-3 FRIEND candidates per character at launch. The FRIEND pattern (D-034) defines the STRUCTURE — relationship phases, contradiction discovery, tell progression, dual-lens notes. But the SPECIFICS change: + +| Seed A | Seed B | Seed C | +|--------|--------|--------| +| Smuggler FRIEND: Kael | Smuggler FRIEND: Renn | Smuggler FRIEND: NEW NPC from pool | +| Secret: Exit attempt | Secret: Skimming from ring | Secret: Undercover Commission asset | +| Tell: Looks left when lying | Tell: Touches ear when nervous | Tell: Overexplains routine changes | +| Contradiction: Corridor B-7 meeting | Contradiction: Money in wrong account | Contradiction: Commission comm device found | + +**Three seeds. Three completely different FRIEND arcs. Three different gut-punches.** The pattern is identical (warmth > trust > doubt > conflict). The experience is unique. + +And here's the beautiful part: if you played Seed A and learned "Kael's tell is looking left," that knowledge is USELESS in Seed B where your FRIEND is Renn and the tell is something else entirely. **Metagaming defeated.** + +For the detective, same logic. Sera is one candidate. Others could be a Meridian tech, a bar regular who happens to work Commission contract shifts, a newly arrived security officer with a shared institutional history. Same FRIEND pattern, different person, different contradiction, different emotional payload. + +**Content cost:** Each additional FRIEND candidate is ~70-100 authored lines (Tier 1 depth). Expensive per NPC. But the replayability ROI is enormous. Two FRIEND candidates per character = 4x the FRIEND experience space (2 characters x 2 candidates). Three candidates = 9x. + +I know this is a stretch for v0.1 given we're already building Kael and Sera at full depth. But the ARCHITECTURE should support it from day one. Even if v0.1 ships with one FRIEND per character, the pool system means v0.2 can add more without restructuring anything. + +#### 2. WHAT Is Being Smuggled (The Moral Shuffle) + +**Current state:** Always lattice components. The moral dimension is fixed: "access to capability." + +**Proposal:** The PRIMARY contraband type varies per seed from a pool: + +| Contraband | Moral Frame | Investigation Feel | Smuggler Feel | +|------------|-------------|-------------------|---------------| +| Lattice components | Capability access — people want better minds | Technical, manifest-focused | "We're upgrading people" | +| Medical-grade replacements | Healthcare — people's lattices are failing | Sympathetic, desperate | "We're saving lives" | +| Severance tech | Political resistance — counter-surveillance | Paranoid, ideological | "We're freeing people" | +| Mixed cargo (2+ types) | Complicated — moral lines blur | Confusing, layered | "I don't even know what I'm moving anymore" | + +**The contraband type changes EVERYTHING downstream:** +- The detective's moral calculus shifts. Busting a healthcare ring feels different from busting capability dealers. +- The smuggler's justification shifts. "We're saving lives" vs. "We're arming dissidents." +- NPC attitudes shift. The bar owner who tolerates lattice components might refuse severance tech. +- The investigation vectors change. Medical-grade has hospital connections. Severance has political connections. Lattice has tech connections. + +Same triangle structures. Same social sites. Fundamentally different moral texture. On playthrough 1, you bust a healthcare ring and feel terrible. On playthrough 2, you bust a weapons pipeline and feel righteous. On playthrough 3, it's mixed cargo and you can't decide. + +**Content cost:** Moderate. The NPC profiles and triangles work with any contraband type — the ROLES are the same (coordinator, handler, fence, wavering member). What changes is the dialogue flavor and the fact catalog progressions. This is exactly what the tagged pool system is designed for: same structure, different specifics via tag selection. + +#### 3. WHO Is Compromised (The Network Shuffle) + +**Current state:** Fixed assignment: Drin has gambling debt to Harek, Voss takes a cut, Maret notices but doesn't report. + +**Proposal:** The ROLES in the conspiracy are fixed, but WHO fills them varies per seed: + +| Role | Seed A | Seed B | Seed C | +|------|--------|--------|--------| +| Compromised inspector | Drin (debt) | Resha (blackmail) | Maret (bribed) | +| Schedule manipulator | Voss (cut) | Maret (coerced) | Voss (ideological) | +| Observant civilian | Maret (worried) | Drin (guilty conscience) | Resha (too new to stay quiet) | +| Wavering member | Pell | Torek | Renn | +| Ring courier | Renn | Tav | Kael (dual role) | + +Now metagaming REALLY collapses. "Last time Drin was the compromised inspector. I'll pressure Drin again." But this seed, Drin is clean. It's Resha who's compromised. Your investigation follows the wrong thread for 10 minutes before you realize you're chasing a dead end. + +**The investigation becomes a genuine detective experience every time.** You can't memorize the solution. You have to actually OBSERVE, NOTICE, FOLLOW, and DISCOVER — exactly what D-027 demands. + +**Content cost:** This is mostly systemic, not content. The NPC profiles define axes. The randomizer assigns roles. The dialogue system selects from tagged pools based on the NPC's assigned role. A compromised Resha says different things than a clean Resha, but both draw from the same tagged pool filtered by role assignment. This is what the role-based template system was DESIGNED for. + +### Bonus Variation Axis: Evidence Placement + +**Where the evidence is** should vary per seed: +- Dead drop location: Locker 47 in one seed, maintenance panel C-12 in another, bar back room shelf in another +- Observation opportunity: The Corridor B-7 meeting in one seed, the cargo bay handoff in another, the bar back room exchange in another +- Timing windows: Shift transition gap at 14:00 in one seed, 22:00 in another + +Same investigation structure. Different spatial puzzle. You can't walk to the same spot and find the same thing. + +### PC-as-NPC: The Emergent Story Machine + +This concept is INCREDIBLE for replayability and I want to push it further than the workshop brief suggests. + +**The core idea:** When you play the smuggler, the detective exists as an NPC in the world. When you play the detective, the smuggler exists as an NPC. + +**What this means for emergent stories:** + +**Scenario 1: The Smuggler Sees the Detective NPC** +You're the smuggler. You're at the bar after a shift. A new face walks in — serious demeanor, institutional bearing, asking Lera about the district. Your monologue fires: "Commission. Has to be. Why are they here?" + +That NPC is the detective. They're running their investigation routine as an NPC — visiting the bar, talking to regulars, building trust. You WATCH this happen from the smuggler's perspective. You see the detective NPC talking to Sera. To Hael. Getting closer to Kael. + +And then you realize: that NPC is doing exactly what YOU did when you played the detective last time. But from this side, it's terrifying. That's not a player character. That's a threat. + +**Scenario 2: The Detective Sees the Smuggler NPC** +You're the detective. You're at the logistics hub, observing shift transitions. A dock worker — efficient, unremarkable, processes containers quickly. Your monologue: "Dock worker. Nothing unusual." + +That NPC is the smuggler. They're running their routine — legitimate shifts, occasional ring operations during transition windows. From the detective's perspective, they're background noise. They're part of the wallpaper. You might not even notice them. + +But on your second playthrough, when you play as the smuggler, you realize: you were standing RIGHT THERE while the detective NPC watched you. The detective you played as was looking right at you and saw nothing. That retroactive realization is a wow moment. + +**Scenario 3: The Second Playthrough Gut-Punch** +You played the detective first. You met Sera. You trusted her. You discovered her concealment. It was emotionally devastating. + +Now you play the smuggler. You're at the bar. You see Sera — the Commission woman. Your smuggler monologue: "Commission. Avoid." You barely interact with her. + +But YOU the player know. You know Sera is sitting on evidence. You know she's protecting Hael. You know the detective NPC is going to discover her avoidance pattern. And you can't do anything about it because your CHARACTER doesn't know any of this. + +That tension — player knowledge vs. character knowledge — is the most powerful replayability mechanic in the game. And it's ENTIRELY EMERGENT. We don't script it. The systems produce it. + +### PC-as-NPC Implementation Implications + +For this to work, each playable character needs: +1. **A full NPC profile** (10 axes, routine, information inventory) — they exist in the world whether or not a player controls them +2. **NPC-mode behavior routines** — what the smuggler does when no player controls them (works shifts, runs operations, visits the bar) +3. **Observability** — the NPC-mode PC must be visible, with tells and patterns that the active player can observe +4. **Consistent with player experience** — if the player saw Kael's B-7 meeting when playing as the smuggler, and then plays the detective, the detective should be able to observe the same kind of event (though timing/details may vary per seed) + +**The content cost is shockingly low** because we're already building these characters as PCs. The smuggler already has a routine, a role, relationships. All we're adding is the NPC behavior layer — and that's exactly what the 10-axis model defines. Want, Routine, Tolerance, Tells — it's all already there. We just need to run it in NPC mode. + +### The Replayability Matrix + +Putting it all together. Variation axes across playthroughs: + +| Axis | Seed A (Playthrough 1) | Seed B (Playthrough 2) | Seed C (Playthrough 3) | +|------|----------------------|----------------------|----------------------| +| Character | Smuggler | Detective | Smuggler | +| FRIEND | Kael (exit attempt) | Sera (evidence concealment) | Renn (skimming) | +| Contraband | Lattice components | Medical-grade | Severance tech | +| Compromised inspector | Drin | Resha | Maret | +| Wavering member | Pell | Torek | Pell | +| Dead drop | Locker 47 | Panel C-12 | Bar back room | +| PC-as-NPC visible? | Detective NPC at bar | Smuggler NPC at docks | Detective NPC at bar | + +**Six axes of variation. Two character choices. Even with just 2-3 options per axis, that's hundreds of unique configurations.** Two players comparing notes will describe fundamentally different games. + +But what about the SECOND playthrough? The magic is that player knowledge from playthrough 1 creates DRAMATIC IRONY in playthrough 2 — not solution shortcuts. You know more, but you can't act on it because your character doesn't. The tension between "I know" and "they don't know" IS the second playthrough. + +And the third playthrough? New seed. New FRIEND. New contraband. New compromised NPCs. The structure is familiar — you know HOW the game works — but the specifics are fresh. You're a veteran detective who's never seen THIS conspiracy before. + +### Summary: What I Need From This Workshop + +1. **Tyre:** Confirm the content directory supports pool-based randomization (NPCs, triangles, contraband assigned per seed, not hardcoded) +2. **Gestalt:** Validate that role-slot templates (N regulars, M staff, K outsiders per social site) create enough mechanical variety without exploding content requirements +3. **Paula/Mellanie:** Confirm that tagged pools can handle role-assigned dialogue (same NPC, different role per seed = different line selection) +4. **Gore:** Does the moral shuffle (contraband variation) serve the philosophical themes or dilute them? +5. **Everyone:** Does the PC-as-NPC concept belong in v0.1, or is it a v0.2 architectural investment? + +--- + +**The test I keep coming back to:** Two friends play the game. They sit down after. One says "I can't believe what Kael did." The other says "Who's Kael? My FRIEND was Renn." And both of them realize they played fundamentally different games from the same application. + +That's not a feature. That's a reason to exist. diff --git a/docs/workshops/wiki-review/round1-ozzie.md b/docs/workshops/wiki-review/round1-ozzie.md new file mode 100644 index 000000000..ddbb76b64 --- /dev/null +++ b/docs/workshops/wiki-review/round1-ozzie.md @@ -0,0 +1,134 @@ +# Round 1 — Ozzie (Player Experience / Wow Factor) + +## Topic 1: Emotional Impact — Who Makes Me Feel Something? + +### The ones that HIT + +**Hael.** Full stop. Hael is the one that got me. Not Kael, not Sera — HAEL. The partner sitting in the bar, checking the door every time it opens, waiting for someone who isn't coming home. "Kael was home at midnight again. Said it was overtime. There's no overtime posted for this week — I checked." THAT'S the game. That line is better than any conspiracy reveal because it's *small* and *real* and it makes you feel like a terrible person. + +The smuggler walks into the bar and sees Hael. Knows exactly where Kael is. Can't say a word. That guilt is VISCERAL. The detective sees Hael and thinks "potential source" — and that clinical calculation against Hael's genuine pain is its own kind of gut-punch. Both characters feel something when they see Hael, and neither feeling is comfortable. THAT is what players remember. + +**Pell.** The guy who's already past his tolerance threshold and is trying to find a way out and there IS no way out. "If I talk — if I tell you what I know — can you protect me? Not just a promise. Actual protection. Because the people I'd be talking about don't forgive." I read that and thought: this is a person who is going to die. Whether the player helps or not, Pell is in a box. And the player put him there — or the player's inaction put him there. That's the kind of moral weight that sticks. + +**Maret Korr.** The civilian who sees the numbers and can't unsee them. Keeping a private log of discrepancies on her personal lattice storage. She's not brave. She's not a hero. She's a scheduler who's good at her job and her job is going to get her killed. Her tentative voice line — "There are... patterns. In the data. I'm not saying it's anything. But if someone wanted to look at Bay 7 allocations during Voss's shift adjustments, the numbers would be worth comparing" — that HESITATION is perfect. She's handing you the key to the whole operation and she's terrified and she's doing it anyway. + +**Kael's contradiction arc.** The Phase 1 to Phase 5 progression is excellent. "Kael's already at the dock. Good. The day's better when he's on shift" slowly rotting into "Same old Kael. Laughing at the same jokes. ...What are you not telling me?" — that contamination of warmth is THE emotional payload of the whole game. The fact that the player's OWN monologue changes, that the warm thoughts become suspicious thoughts about the SAME person doing the SAME things — that's not just narrative, that's mechanical storytelling. The system IS the story. THAT'S the game. + +### The ones that work but don't sing yet + +**Sera Venn.** Structurally perfect. The three-visit avoidance pattern as a contradiction discovery method is brilliant — it's slower, more cerebral, more detective-appropriate than Kael's single-observation shock. But here's my worry: Sera reads more like a *system* than a *person*. I know what Sera does (avoids Torek, deflects about manifests, overcompensates with helpfulness). I know WHY she does it (protecting Hael). But I don't FEEL Sera's internal experience the way I feel Hael's desperation or Pell's terror. + +The warm line to Hael helps: "You look tired. How are the kids doing with the new curriculum? No — sit. Let me get us something." That's genuine. More of that. Sera needs more moments where her composure cracks slightly — not dramatically, just enough that the player thinks "wait, was that...?" before Sera pulls the mask back on. + +**Proposal:** Sera needs one unprompted moment early in the game where her control slips — maybe she starts to say something about Kael to the detective and catches herself. A half-sentence. "About Kael — no, never mind. It's nothing. How's the investigation going?" Something that only makes sense in retrospect. That's how you make the player care about Sera as a PERSON, not just as a system delivering the avoidance pattern. + +**Devra.** Competent, strategic, controlled. Also... kind of cold? The concerned-about-Pell line is the most human thing in her profile: "Pell's been quiet. Too quiet. When someone stops complaining, that's when I worry." That's GREAT. But it's one line in a sea of operational efficiency. Devra runs the ring like a logistics company. Which is realistic. But does it make me CARE about Devra? + +What's Devra's version of Hael's midnight worry? What does Devra think about when she's not coordinating shipments? Does she have a life outside the ring, or is the ring her life? If the ring IS her life, that's interesting — but the profile doesn't lean into it. Right now Devra is a function, not a person. + +**Lera Sessik.** The protective bartender who sees everything. I love the tell system — cleaning glasses when nervous, redirecting conversations, watching the door. But Lera's emotional core is "keep the bar viable." That's motivation, not feeling. What does Lera feel when she watches Hael come in alone for the fifth night in a row? What does she feel when Torek buys another round with money she knows he shouldn't have? Lera's OBSERVANT — the profile says so. But observation without emotional reaction is surveillance, not empathy. + +The guarded line to the detective is perfect though: "I serve drinks. People talk. I don't take notes." That's a person with boundaries. Build on that. + +### The ones that fall flat + +**Renn.** Functional. Moves product. Suspects Pell. Cool. But there's nothing here that makes me CARE about Renn. He's young, wants to prove himself, runs corridors. Where's the tension? "If he's caught, he's expendable" — that's the most interesting thing in his profile, and it's buried in the relationships section. Renn should FEEL expendable. That insecurity should bleed into his interactions. Right now he reads like a job description. + +**Tav.** The lookout. "Clear. South corridor, no movement for the last twenty minutes. You're good." That's a function, not a character. The profile says Tav is the youngest ring member, nervous, hypervigilant. Where's the kid who's in over his head? Where's the voice line that makes you think "oh no, this kid is going to get caught and he doesn't even understand what he's part of"? Tav could be genuinely affecting — the young recruit who doesn't know enough to be scared of the right things. Instead he's a security camera with anxiety. + +**Drin.** Similar problem. "I just do maintenance. Inspections are part of the schedule." That's evasion, which is correct for the character, but it's also boring. Drin's gambling debt makes him interesting on paper. In practice, the profile gives him nothing to DO with that. What does Drin's shame look like? What happens when Harek sits down at the bar and Drin has to look at the person who owns him? THAT'S a scene. The profile gestures at it but doesn't deliver the moment. + +### Summary: What I'd remember after 30 minutes + +1. **Hael sitting alone, checking the door.** The person the whole conspiracy is hurting and nobody can tell them why. +2. **Kael's monologue shift** — warmth slowly curdling into suspicion. The contamination effect. +3. **Maret's hesitation** — handing you the evidence, terrified, doing it anyway. +4. **Pell's desperation** — "Can you protect me? Not just a promise." +5. **The color shift** — green to amber. THE FRIEND becomes PersonOfInterest. That single visual change carrying all that emotional weight. + +What I would NOT remember: Renn running a corridor. Tav watching a door. Drin being quiet. These aren't characters yet — they're furniture that talks. + +--- + +## Topic 6: The Wow Moment — PC-as-NPC + +### The moment it clicks + +Here's the wow moment: **It's not that the player realizes their character has a pre-existing life. It's that SOMEONE ELSE reacts to them like they already know them.** + +The player starts the game. They're a smuggler. They walk into the logistics hub. And Kael says: "There you are. Good — I was starting to worry. Ready for another day of making the galaxy's freight move?" + +That's not an NPC greeting a player character. That's a FRIEND greeting a friend. There's history in that line. Relief. Warmth. Kael was WORRIED because you were late. Kael has a relationship with you that you, the player, don't have yet — but your character does. + +THAT is the wow moment. Not a tutorial popup saying "You are a dock worker with smuggling connections." Not a backstory dump. A person who is GLAD TO SEE YOU and you don't yet know why their gladness matters. + +### How to maximize it + +**The first 60 seconds should feel like walking into Cheers.** Everyone knows your name. Or rather — everyone knows your CHARACTER's name. You walk in and: +- Kael greets you with warmth and an inside joke +- Voss nods and says something about the shift schedule that implies shared history +- Someone mentions something your character did last week that you (the player) don't remember because you weren't there + +The player should feel slightly disoriented. "Wait, these people know me? What did I do last week?" And then it sinks in: your character EXISTED before you arrived. They have a life. They have relationships. They have a reputation. And you just inherited all of it. + +**Then the slow realization**: some of those relationships are LOADED. Kael is warm because Kael trusts you. Kael trusts you because you're in the ring together. You didn't choose that. Your character did. And now you're standing in the consequences. + +For the detective, it's different but equally powerful: Sera says "Good to see a familiar face" and means it. She's your institutional friend. She's already helping you. And you don't yet know she's hiding something. The warmth is REAL — and it's also a trap. The player just doesn't know it yet. + +### The second wow moment + +The SECOND wow moment — and this is the one that makes the game — is when the player realizes **their character's pre-existing relationships are LIABILITIES.** + +The smuggler's warmth with Kael isn't just flavor. It's a vulnerability. You're close to Kael, which means when Kael starts acting weird, it hurts. You care about Hael, which means lying to Hael costs you something. You know the ring, which means the ring can hurt the people you care about. + +The detective's friendship with Sera isn't just an asset. It's a blind spot. You trust Sera, which means you're not looking at her. And she's the one hiding the evidence. + +The wow moment is: "Oh. My character's life isn't just backstory. It's the GAME. The relationships I inherited are the puzzle and the penalty." + +### What makes it work mechanically + +The PC-as-NPC concept works because of **asymmetric starting knowledge**. The player character knows things the player doesn't — yet. The monologue system reveals what you already "know" organically: + +- Walk past Kael: monologue says "Kael's already at the dock. Good." The player learns: I know this person. I like this person. I feel relieved they're here. +- Walk past Voss: monologue says "Voss is on edge again. Third time this week." The player learns: I've been watching this guy. Something's wrong. I've noticed before. +- Walk past Hael at the bar: monologue says "Hael's alone again. Kael's probably still at the hub." The player learns: I know this couple. I know their patterns. I know something is off. + +Each monologue line teaches the player about their own character's relationships without exposition. The character's knowledge IS the tutorial. And the knowledge is colored — it has emotional weight. "Kael's already at the dock. Good." isn't neutral information. It's fondness. The system is teaching the player to feel something before they understand why it matters. + +### The risk + +The risk is that PC-as-NPC feels IMPOSED rather than DISCOVERED. If the player gets a text dump of "Your character is a dock worker named [Name], friends with Kael, in the smuggling ring, partnered with nobody, etc." — that's a character sheet, not an experience. Nobody has a wow moment reading a character sheet. + +**Proposal:** NEVER tell the player their backstory directly. Let them discover it through: +1. **NPC reactions** ("There you are" — oh, they know me) +2. **Monologue** ("Kael's here. Good." — oh, I care about this person) +3. **Environmental knowledge** (the character knows which corridor leads where without being told — oh, I've been here before) +4. **Social knowledge** (the character recognizes bar regulars by name — oh, this is my community) + +The wow moment isn't "I read my backstory." The wow moment is "I HAVE a backstory and I'm discovering it the way I'd discover a real place — by living in it." + +### The ultimate payoff + +The ultimate payoff — the thing that makes players tell their friends about this game — is when a player finishes the smuggler path, starts the detective path, and walks into the bar for the first time. + +And Sera says: "Good to see a familiar face." + +And the player thinks: "Oh no. I know what happens to that familiar face." + +Because they played the smuggler. They know what Sera is hiding. They know WHY she's hiding it. And they know their detective character doesn't know any of that. The wow moment on the SECOND playthrough is: **I know too much and my character doesn't know enough.** The player's knowledge becomes a burden. THAT'S asymmetric information hitting the player, not just the character. + +THAT'S the game. That's what we're building. And the wiki, as written, has the raw material to deliver it. The NPC profiles create the relationships. The contradiction arcs create the betrayals. The dual-lens notes create the asymmetry. It's all here. We just need to make sure the first 60 seconds feel like walking into a place where people are GLAD to see you — so that when they're NOT glad anymore, it breaks your heart. + +--- + +## Quick Reactions to Other Topics (drive-by) + +**Topic 2 (Style Guides):** I don't care about template formatting. I care about one thing: does the style guide say "every NPC needs a moment that makes the player feel something"? If not, add that. I've seen too many profiles that are mechanically complete and emotionally dead. Renn. Tav. Drin. They follow the template. They don't have a soul. The style guide should mandate a "gut-check line" — one voice sample that, if you read it out loud, makes you pause. If the line doesn't do that, the profile isn't done. + +**Topic 3 (Regional Style):** The names are fine. "Kael Davan," "Sera Venn," "Lera Sessik" — compact, distinct, pronounceable, feel like a coherent culture. Keep doing what you're doing. But the NAMES aren't what make a culture feel real. It's the details. "Lera's doing that thing with the grain spirit again" — THAT tells me more about Krenn System culture than any naming convention document. More of that. What do people eat? What's the local slang? What do they complain about? The wiki should have a "daily life" section that's all texture, no mechanics. + +**Topic 5 (Content Structure):** I want to flag one thing: the content directory needs to make it easy for modders to add an NPC that FEELS like they belong. Not just technically correct — emotionally integrated. If a modder adds a new NPC to the bar, they should have a template that includes dual-lens notes, a gut-check voice line, and triangle integration. If the template only has mechanical axes, we'll get mechanical NPCs. The template should teach modders to write characters, not fill out forms. + +--- + +*Written by Ozzie. From the gut. The wiki has heat — Hael, Pell, Maret, the FRIEND arcs. The Tier 3s need more soul. The PC-as-NPC concept is the best idea in the game and we need to nail the first 60 seconds or none of it lands.* diff --git a/docs/workshops/wiki-review/round1-paula.md b/docs/workshops/wiki-review/round1-paula.md new file mode 100644 index 000000000..2f36581e4 --- /dev/null +++ b/docs/workshops/wiki-review/round1-paula.md @@ -0,0 +1,550 @@ +# Round 1 — Paula (Librarian) + +**Topics**: 1 (Trade-offs), 2 (Tier Templates), 3 (Naming Patterns), 6 (PC Upgrade Fields) + +--- + +## Topic 1: Trade-offs and Honest Assessment + +I authored most of the NPC profiles, the triangle system, the knowledge vocabulary (fact catalog, entity attributes, relationship states), and coordinated the overall wiki structure. Let me be honest about what's strong, what's weak, and what I compromised on. + +### What works well + +1. **THE FRIEND profiles are production-ready.** Kael and Sera both follow the same 5-phase contradiction arc but with genuinely different discovery mechanics (spatial deviation vs. cumulative pattern recognition). The structural parallelism is intentional — it creates a reusable pattern while the content diverges. I'm confident these carry D-027 success criterion #3 ("player names an NPC they felt conflicted about"). + +2. **The triangle system creates real interconnection.** Five triangles across three social sites with six bridge NPCs means tension propagates. Triangle 4 (Worried Partner) is the structural masterpiece — both FRIEND NPCs are nodes in it, connected through Hael. Every thread passes through this triangle eventually. + +3. **The knowledge vocabulary maps cleanly to the tag taxonomy.** FactIds, entity attributes, and relationship states were designed in tandem with D-035. The confidence progression (Suspects → KnowsOf → KnowsDetails → Direct) gives content authors a clear framework for gating dialogue and monologue. + +### Where I made compromises + +| Area | Compromise | Why | Impact | +|------|-----------|-----|--------| +| **Tier 2 depth** | Depth varies across 10 NPCs. Voss and Lera are nearly Tier 1 quality. Hael and Harek are thinner. | Time pressure. I wrote the highest-narrative-impact NPCs first and sketched the rest. | Authors replicating Tier 2 profiles don't know what "standard" looks like — is Voss the norm or the exception? | +| **The Nils problem** | Nils Davan is referenced in 5+ profiles but has no wiki page. | Nils is off-stage in v0.1. I treated off-stage characters as "referenced not instantiated." | No canonical reference for a character who drives Triangle 1 and the ring's power structure. Risk of contradictory Nils characterizations across files. | +| **Knowledge attributes are detective-biased** | `tell_observed`, `contradiction_flagged`, `secret_held` — these are investigation tools. The smuggler's knowledge model is underspecified. | I wrote from investigation outward. The detective's knowledge needs were clearer mechanically. | The smuggler tracks different things: operational reliability, loyalty risk, exposure potential. These need their own attribute keys. | +| **FactId catalog is discovery-shaped** | Most FactIds assume a discovery arc (Suspects → KnowsDetails). The smuggler starts at KnowsDetails for many. | The detective's progression was the clearer authoring target. | Smuggler's progression text reads oddly. We need smuggler-specific "degradation" or "recalibration" text for facts they already know but whose reliability changes. | +| **Triangle 3 is the weakest** | Lera-Torek-Olin lacks emotional weight. Olin is "ambiguous newcomer" and that's it. | Olin was added to fill a role (the outsider who asks questions) without enough backstory to make the questions interesting. | Triangle 3 is mechanically functional but emotionally flat compared to 1, 2, 4, and 5. | +| **No starting knowledge per PC** | Wiki describes what NPCs know, but not what the *player character* knows at game start. | PC-as-NPC concept was still being designed. | Critical gap for Topic 6 below. The NPC profiles need an explicit "this is what you know on Day 1" section for PC-upgradable characters. | + +### What's weakest — the honest truth + +**The smuggler's content pipeline is systematically under-served compared to the detective's.** + +The detective has: analytical lattice overlays, pattern recognition mechanics, tell observation tools, FactId discovery arcs, investigation-specific entity attributes. The smuggler has: operational knowledge... and not much else mechanically. + +This isn't a content failure — it's an architectural imbalance that happened because investigation is mechanically simpler to model than social/operational navigation. "Notice a pattern → flag it → investigate" maps to clear data structures. "Navigate social tensions → maintain cover → manage risk" requires social simulation mechanics that don't have the same vocabulary yet. + +But what SUSTAINS the smuggler experience across hours of play is feeling embedded — knowing people, reading rooms, managing relationships. The wiki captures this narratively (Kael's dual-lens notes, Lera's protective instincts, the smuggler monologue tone) but doesn't give it mechanical teeth the way the detective's investigation arc has mechanical teeth. + +**Concrete proposal**: We need a smuggler-specific attribute vocabulary parallel to the detective's investigation attributes. Something like: + +| Smuggler Attribute Key | Purpose | Example | +|------------------------|---------|---------| +| `operational_reliability` | How dependable is this NPC for ring work? | `"reliable"`, `"compromised"`, `"wavering"` | +| `exposure_risk` | How likely is this NPC to blow cover? | `"low"`, `"escalating"`, `"critical"` | +| `loyalty_assessment` | Smuggler's read on this NPC's allegiance | `"solid"`, `"uncertain"`, `"turning"` | +| `leverage_held` | What does the smuggler know that gives power over this NPC? | `"gambling debt"`, `"family secret"`, `"none"` | +| `social_debt` | Who owes whom, in informal terms | `"they owe me"`, `"I owe them"`, `"mutual"` | + +This would give the smuggler's knowledge model parity with the detective's. + +### What I'd change with more time + +1. **Normalize Tier 2 depth** — every Tier 2 should hit the same quality bar, not vary from "nearly Tier 1" to "barely above Tier 3" +2. **Add stub pages for off-stage characters** — Nils at minimum, potentially Sabel and Kosse +3. **Flesh out Olin** — give them an actual backstory that explains the questioning behavior (job seeker? informant for a rival operation? genuinely lost?) +4. **Write smuggler-perspective progression text** for all FactIds where the smuggler starts at KnowsDetails +5. **Add explicit "starting knowledge" inventories** for both PC-upgradable characters + +--- + +## Topic 2: Tier Template Formalization + +### Assessment: Are current templates replicable? + +**Tier 1: Mostly replicable, but implicit.** The Kael and Sera profiles are detailed enough to reverse-engineer the pattern, but the PATTERN itself isn't documented as a standalone template. An author would have to read both profiles side-by-side and figure out the structure themselves. The 5-phase contradiction arc (comfort → first crack → observation → confrontation → new equilibrium) is embedded in examples, not stated as a rule. + +**Tier 2: Inconsistent reference.** Voss is the best example but is over-specced for what the deliverables section promises. The npcs/index.md says "10-axis data (all axes populated), voice sample (2-3 lines), dual-lens notes (brief), triangle role notes." Voss delivers this. But Hael and Harek have notably less. An author looking at different Tier 2 pages gets different standards. + +**Tier 3: Misleading example.** Drin has a detailed "Function Note" explaining his structural role in triangles. He's a Tier 3 NPC doing Tier 2 work in terms of narrative importance. Meanwhile Sess, Tav, and Olin are genuinely thin. The template says "essential axes only (Want, Routine, Personality), voice hint, function note" — but Drin's function note is 4 sentences and structurally complex, while Tav's is 2 sentences. + +### What's implicit that should be explicit + +| Convention | Currently | Should Be | +|------------|-----------|-----------| +| **Voice sample mood count** | Tier 1: 5, Tier 2: 2-3, Tier 3: 1 | Specified per tier with mood category list | +| **Dual-lens format** | Varies: some use monologue quotes, some don't | Standardized: `Smuggler: [1-2 sentences]. *"Monologue example."*` | +| **Cross-references** | Inconsistent — some pages list 4-5, some list 1 | Required: all NPCs mentioned in the profile get a cross-reference link | +| **Relationship depth per tier** | Tier 1: full paragraph per relationship. Tier 2: varies wildly. | Specified: Tier 1 = paragraph + history + tension + mechanical relevance. Tier 2 = 2-3 sentences per relationship. | +| **Contradiction arc** | Only Tier 1 has explicit arcs | Should specify: Tier 1 = 5-phase arc. Tier 2 = no formal arc, but secret has consequences if exposed. Tier 3 = no arc. | +| **Header block format** | `**Tier N NPC** | Location | Entanglement` | Standardize as structured metadata block | +| **"Per character" monologue counts** | Kael: 10-15 per character. Tier 2: ambiguous. | Specify: Tier 1 = 10-15 per PC. Tier 2 = 5-8 per PC. Tier 3 = 0 named monologue (generic monologue only). | + +### Proposed Formal Templates + +#### Tier 1 Template (THE FRIEND / Production-Level NPC) + +```markdown +# {NPC Name} — {Designator} ({Character}) + +**Tier 1 Production-Level NPC** | {Primary Social Site} + {Secondary} | {Entangled/Mundane} + +--- + +## Core Identity + +**Name**: {Full name} +**Age**: {Number} +**Role**: {Occupation, location} +**System Origin**: {System, station/planet, birth/transfer details} +**Cultural Group**: {Regional culture reference} +**Lattice Tier**: {Baseline/Standard/Enhanced} +**Employer**: {Legitimate employer; {Informal affiliation} if applicable} + +--- + +## 10-Axis Profile + +### 1. Want +**Primary**: {1 sentence summary} +{2-3 paragraphs: history, current state, trajectory} + +**Secondary**: {1 sentence summary} +{1-2 paragraphs: relationship to primary want, tension} + +### 2. Secret / Vulnerability +**Surface secret** ({who knows}): {1-2 sentences} +**Deep secret** ({who knows}): {2-3 sentences} +**Vulnerability**: {1-2 sentences — what breaks them} + +### 3. Relationships +**Relationship 1: {Name}** ({type}) +- **Type**: {Category} +- **History**: {2-3 sentences} +- **Current tension**: {2-3 sentences} +- **Mechanical relevance**: {1-2 sentences} + +{Repeat for Relationships 2 and 3} + +### 4. Tolerance Threshold +**{Level}** — {1 sentence summary} + +**What {Name} tolerates**: {Bulleted list, 3-4 items} +**What pushes toward breaking**: {Bulleted list, 3-4 items} +**What breaks {Name}**: {Bulleted list, 2-3 items} + +### 5. Daily Routine +{Time-block schedule, 8-10 entries} + +**Routine deviations** (tells): +{Bulleted list, 3-4 items with mechanical context} + +### 6. Information Inventory +**Knows** ({confidence level}): {Bulleted list, 6-8 items} +**Doesn't know**: {Bulleted list, 4-6 items} + +### 7. Contentment +**{Level}** ({reference D-024}). +{2-3 sentences: current state} +**Contentment trajectory**: {1-2 sentences: direction and cause} + +### 8. Personality Traits +**Primary: {Trait}** — {2-3 sentences} +**Secondary: {Trait}** — {2-3 sentences} +**Tertiary: {Trait}** — {2-3 sentences} + +### 9. Tell System +| Tell | Trigger | Observable To | Mechanical Flag | +|------|---------|---------------|-----------------| +| **{Tell name}** | {Trigger condition} | {Who can see it} | `{flag key: value}` | +{4 tells minimum} + +**Tell progression** ({character}'s perspective): +{Numbered list, 4-5 stages with timing and monologue examples} + +### 10. Skill Set +**Occupational**: {List} +**{Role}-relevant**: {List} +**Combat tag**: **{Yes/No}**. {1 sentence context} +**Lattice capability**: {Tier + description of what it enables} + +--- + +## Backstory +{1 paragraph, 3-5 sentences. Birth → career → current situation → why they're here now.} + +--- + +## Voice Sample +{5 moods minimum. Each: mood label, 1-2 lines, stage direction in brackets.} + +--- + +## Dual-Lens Notes + +### How the {Character A} Sees {NPC Name} +**Access tier**: {Starting tier} → {Progression tier} +**Relationship**: {Starting state} → {Progression state} +**Monologue tone (baseline)**: {Description}. *"{Example line.}"* +**Monologue tone (post-contradiction)**: {Description}. *"{Example line.}"* +**What {Character A} knows that {Character B} doesn't**: {2-3 sentences} +**Emotional weight**: {Assessment + why} + +### How the {Character B} Sees {NPC Name} +{Mirror structure} + +--- + +## Triangle Roles +### {Triangle Name} ({Members}) +**{NPC Name}'s function**: {1-2 sentences} +**Pressure**: {2-3 sentences} +**Player relevance**: {1-2 sentences per character} + +{Repeat for each triangle membership} + +--- + +## Secret +**What {Name} is hiding**: {1 sentence} +**From whom**: {List} +**Consequences if exposed**: {Per-discoverer list, 2-3 sentences each} + +--- + +## Contradiction Arc +### Phase 1: {Label} ({RelationshipState}, baseline) +**Timing**: {Minutes} +**Observable behavior**: {2-3 sentences} +**Monologue ({character})**: *"{Example}"* +**Color**: {Color} ({State}) +**Dialogue tone**: {Description} +**Tell**: {None or specific tell} + +{Repeat for Phases 2-5} + +--- + +## Content Requirements (Tier 1) +**~70-100 authored lines total** (no generation expansion): +{Breakdown by category with counts} + +--- + +## Authoring Notes +{5-7 bulleted guidelines for voice, pacing, dual-lens discipline, and key moments} +``` + +#### Tier 2 Template (Working Profile NPC) + +```markdown +# {NPC Name} + +**Tier 2 NPC** | {Primary Social Site} | {Entangled/Mundane} + +--- + +## Core Identity + +**Name**: {Full name or single name} +**Age**: {Number} +**Role**: {Occupation, location} +**System Origin**: {System, station/planet} +**Lattice Tier**: {Level} +**Employer**: {Employer(s)} + +--- + +## 10-Axis Profile + +### 1. Want +**Primary**: {1 sentence} +{1-2 paragraphs} + +**Secondary**: {1 sentence} +{1 paragraph} + +### 2. Secret / Vulnerability +**Surface secret**: {1-2 sentences} +**Deep secret**: {1-2 sentences} +**Vulnerability**: {1 sentence} + +### 3. Relationships +{2-3 relationships, each 2-3 sentences covering type, current tension, and mechanical relevance} + +### 4. Tolerance Threshold +**{Level}**. {2-3 sentences covering what they tolerate and what breaks them.} + +### 5. Daily Routine +{Time-block schedule, 5-7 entries. Ring operations noted if applicable.} + +### 6. Information Inventory +**Knows**: {Bulleted list, 4-6 items} +**Doesn't know**: {Bulleted list, 3-4 items} + +### 7. Contentment +**{Level}**. {2-3 sentences.} + +### 8. Personality Traits +**Primary: {Trait}** — {1-2 sentences} +**Secondary: {Trait}** — {1 sentence} +**Tertiary: {Trait}** — {1 sentence} + +### 9. Tell System +| Tell | Trigger | Observable To | +|------|---------|---------------| +{2-3 tells. No mechanical flag column — Tier 2 tells are authored, not system-flagged.} + +### 10. Skill Set +**Occupational**: {List} +**Combat tag**: **{Yes/No}**. +**Lattice capability**: {Level}. + +--- + +## Voice Sample +{2-3 moods. Each: mood label, 1-2 lines.} + +--- + +## Dual-Lens Notes +**Smuggler**: {2-3 sentences}. *"{Monologue example.}"* +**Detective**: {2-3 sentences}. *"{Monologue example.}"* + +--- + +## Triangle Roles +**{Triangle Name} ({Members})** — {2-3 sentences covering function and pressure.} +{Repeat for each triangle membership.} + +--- + +**Cross-References:** {Links to all NPCs mentioned in this profile} +``` + +#### Tier 3 Template (Sketch NPC) + +```markdown +# {NPC Name} + +**Tier 3 NPC** | {Primary Social Site} | Flat + +--- + +## Essential Axes + +### Want +{2-3 sentences. What drives them and why they're here.} + +### Routine +{4-5 line time-block schedule.} + +### Personality +**{2-3 trait words, comma-separated.}** {3-4 sentences expanding the traits.} + +--- + +## Voice Hint +*"{Single representative line.}"* [{Stage direction}] + +--- + +## Function Note +{2-4 sentences. Why this NPC exists in the district. Atmospheric role. Potential for Tier 2 upgrade if development warrants.} + +--- + +## Dual-Lens Notes +**Smuggler**: {1-2 sentences}. *"{Monologue fragment.}"* +**Detective**: {1-2 sentences}. *"{Monologue fragment.}"* + +--- + +**Cross-References:** {Links to connected NPCs} +``` + +### Key rules the templates make explicit + +1. **Tier 1 requires mechanical flag column in tells.** Tier 2 does not. This reflects the system depth difference — Tier 1 tells drive engine behavior, Tier 2 tells are authored flavor. +2. **Dual-lens notes always include a monologue example.** Not optional. The italicized quote is how we verify voice consistency. +3. **Cross-references are mandatory at every tier.** Every NPC mentioned in the profile gets a link in the footer. +4. **Contradiction arcs are Tier 1 only.** Tier 2 NPCs have secrets with consequences, but no formal phased arc. +5. **Content line counts are Tier 1 only in the profile.** Tier 2 and Tier 3 counts are specified in npcs/index.md deliverables section, not in individual profiles. + +--- + +## Topic 3: Naming Conventions and Patterns + +### Current naming analysis + +| NPC | Full Name | Single Name | Tier | Notes | +|-----|-----------|-------------|------|-------| +| Kael Davan | x | | 1 | Family name: Davan (shared with Nils) | +| Sera Venn | x | | 1 | Family name: Venn | +| Voss | | x | 2 | No family name given | +| Lera Sessik | x | | 2 | Family name: Sessik | +| Torek Lintar | x | | 2 | Family name: Lintar | +| Devra | | x | 2 | No family name given | +| Maret Korr | x | | 2 | Family name: Korr | +| Resha | | x | 2 | No family name given | +| Hael | | x | 2 | No family name given | +| Harek | | x | 2 | No family name given | +| Renn | | x | 2 | No family name given | +| Pell | | x | 2 | No family name given | +| Drin | | x | 3 | No family name given | +| Sess | | x | 3 | No family name given | +| Olin | | x | 3 | No family name given | +| Sabel | | x | 3 | No family name given | +| Tav | | x | 3 | No family name given | + +**Family name distribution**: 5 of 17 NPCs (29%) have family names. All Tier 1 NPCs have them. 3 of 10 Tier 2 NPCs (Lera, Torek, Maret). Zero Tier 3 NPCs. + +### What was intentional + +1. **D-036 convention**: "Compact, consonant-heavy, first-name-primary in social contexts." This was the guiding principle. First-name-primary means family names exist but aren't used socially. + +2. **Phonological palette**: Short, hard-consonant names. Mostly monosyllabic (Voss, Drin, Sess, Renn, Pell, Tav, Hael) or disyllabic (Kael, Sera, Lera, Torek, Devra, Maret, Resha, Harek, Sabel, Olin). The longest name is "Torek Lintar." This was intentional — Krenn System culture is pragmatic and compact, so names should be too. + +3. **Family names for institutionally visible characters**: Kael Davan (the detective looks up "Davan, K." in records), Sera Venn (Commission employee — institutional records use full names), Lera Sessik (business owner — license is under a full name), Torek Lintar (dock worker with institutional records), Maret Korr (freight scheduler — manifest system uses full names). + +### What was accidental + +1. **Name-as-tier-signal**: I didn't intend for full names to correlate with narrative importance, but they do. An attentive player could metagame: "Torek Lintar has a last name, so he matters more than Renn." This is a problem. + +2. **The "-el" cluster**: Kael, Hael, Sabel all end in "-el." Kael and Hael are partners — was the sonic echo intentional? Partially. I wanted the names to feel like they belonged to the same culture. But three "-el" names in 17 is a high density and could cause confusion, especially Kael/Hael (one letter apart). + +3. **Missing cultural specificity**: D-036 says "Krenn System conventions" but doesn't specify the real-world linguistic roots. The names feel vaguely Northern European / Scandinavian, but this is accidental similarity, not intentional derivation. We need Miri to ground this. + +### How naming affects NPC authoring + +Let me complicate this by noting three ways naming conventions impact the authoring pipeline: + +**1. Institutional vs. social context switching.** Characters need different name rendering depending on context: +- Detective's lattice query: `"Davan, K. — dock worker, Sova Logistics Consortium"` +- Smuggler's internal monologue: `"Kael's already at the dock."` +- Formal Commission report: `"Sera Venn, Field Technician, Lattice Commission"` +- Bar greeting: `"There you are, Sera."` + +The knowledge system handles this via the `name` entity attribute (full name vs. first name vs. descriptor). But content authors need to know WHEN each form is appropriate. A style guide should specify: institutional/formal contexts use full name or "Family, Initial"; social contexts use first name only; unknown NPCs use role descriptor. + +**2. Family name generation for single-name NPCs.** Every NPC SHOULD have a family name in the canonical record, even if it's never used socially. The detective's lattice queries need full names. The randomizer needs family name pools. Right now, Voss has no family name — but if the detective runs a lattice query, what comes back? We need family names for all 17 NPCs, stored as canonical data even if players rarely see them. + +**3. The Davan family.** Kael Davan and Nils Davan share a family name because they're siblings. This establishes that shared family names indicate blood relation. Do any other NPCs share families? Currently no — but if we generate more NPCs, the family name system needs rules about how common shared names are. + +### Proposal + +1. **All NPCs get canonical full names.** Store in the Core Identity block. Social-context rendering remains first-name-only for most. +2. **Document the phonological rules.** Work with Miri to define: syllable count range (1-2), consonant preferences (hard stops: k, t, d, v, s), vowel preferences (a, e, i — fewer o/u), family name patterns (2 syllables, "-ar"/"-ik"/"-en"/"-or" endings common). +3. **Break the name-as-tier-signal.** Give at least 2-3 additional Tier 2 and Tier 3 NPCs contexts where their full names surface naturally (lattice queries, workplace rosters, posted schedules). + +--- + +## Topic 6: PC Upgrade Fields + +### The concept + +"PC-as-NPC" means: an NPC brief is the seed for a player character. The NPC exists in the world as a person with a name, job, relationships, and knowledge. When the player starts a game, one NPC is "upgraded" to playable status — their brief becomes the player's starting conditions. + +For v0.1, the two PC-upgradable NPCs are implicit: the smuggler (a ring-affiliated dock worker) and the detective (a Commission investigator arriving in the district). Neither currently has an NPC page because they ARE the player. But for the randomizer concept (Topic 6 in the workshop brief) and for future districts, we need a formal upgrade path. + +### Required fields (must exist in NPC brief for PC upgrade) + +| Field | Source in NPC Brief | Becomes in PC Brief | Notes | +|-------|-------------------|-------------------|-------| +| **Name** | Core Identity: Name | Player character name | Player may or may not be able to change this | +| **Age** | Core Identity: Age | Character context | Affects monologue voice | +| **Role** | Core Identity: Role | Starting position, job, daily access | Determines which locations the PC enters naturally | +| **System Origin** | Core Identity: System Origin | Cultural background, knowledge base | Affects dialogue access tiers with NPCs | +| **Lattice Tier** | Core Identity: Lattice Tier | Perception mode capabilities | Directly impacts gameplay via D-017 | +| **Employer** | Core Identity: Employer | Social cover, institutional access | Determines faction tag for access tier logic | +| **Want (Primary)** | Axis 1: Want | Orientation monologue seed | "You're here because..." — the game's opening internal voice | +| **Want (Secondary)** | Axis 1: Want | Emotional anchor | The personal stake that makes the job personal | +| **Relationships (all)** | Axis 3: Relationships | Starting RelationshipState entries | Each relationship becomes an EntityKnowledge entry with state = Friendly/Known | +| **Daily Routine** | Axis 5: Routine | Expected schedule | The player's "normal" — deviations from this are player agency | +| **Information Inventory** | Axis 6: Info Inventory | Starting knowledge graph | **Critical.** Every "Knows" item becomes a FactId at the appropriate confidence level. Every "Doesn't know" item is absent from the graph. | +| **Faction** | Inferred from employer/role | Access tier map | Determines which NPCs treat the PC as insider/peer/authority/outsider | + +### Optional fields (can be generated, player-chosen, or derived) + +| Field | Status | Reasoning | +|-------|--------|-----------| +| **Secret / Vulnerability** | Partially required | The PC needs a starting secret — but this is a DESIGN QUESTION. Does the player know their character's secret from the start? Or do they discover it through play? For the smuggler, ring membership IS the secret (known to player, hidden from NPCs). For the detective, the secret might be personal (why you really requested this posting). | +| **Contentment** | Generated | Starting contentment sets mood but player behavior changes it immediately. Can be derived from Want + Relationships. | +| **Personality Traits** | Player-chosen or preset | Traits affect monologue voice. Could be: (a) fixed per archetype, (b) player-selected from a pool, (c) expressed through early-game choices. I recommend (a) for v0.1. | +| **Tell System** | Inverted | PCs don't have tells — the player controls behavior. BUT: other NPCs may have pre-existing observations about the PC. "You always check your lattice before lying" — the NPC knows your tell even if you (the player) don't. This is powerful for the smuggler path. | +| **Skill Set** | Derived from role | Generated from archetype. Smuggler: logistics, routing, social navigation. Detective: analytical lattice, pattern recognition, institutional access. | +| **Combat tag** | Derived from role | Binary, archetype-determined. | + +### New fields needed for PC (not in standard NPC brief) + +| Field | Purpose | Example | +|-------|---------|---------| +| **Starting EntityKnowledge entries** | Explicit list of every NPC the PC already knows, with RelationshipState, known_attributes, and confidence level | `{target: "kael_davan", state: Friendly, confidence: KnowsDetails, attributes: {name: "Kael Davan", role: "dock worker", trust_level: "trusted"}}` | +| **Starting FactId inventory** | Which facts the PC has at game start, at what confidence level | `{fact: "contraband.ring_exists", confidence: KnowsDetails}` (smuggler) vs. `{fact: "contraband.ring_exists", confidence: null}` (detective) | +| **Access tier map** | Default access tier granted by each known NPC | `{kael_davan: insider, voss: peer, lera: peer}` (smuggler) | +| **Orientation monologue pool** | 5-10 lines: "You are X, you work at Y, this is your life" | Played during the first 2-3 minutes. Establishes voice, context, emotional state. | +| **Reversed dual-lens notes** | How every known NPC sees the PC | Standard NPC brief has "how the smuggler sees Kael." PC brief needs "how Kael sees the smuggler." These are the SAME data, inverted. | +| **Agency boundaries** | What the PC can and can't do without breaking character | Smuggler: can't access Commission systems. Detective: can't participate in ring operations without narrative justification. These are soft constraints, not hard locks. | + +### The conversion process: NPC Brief to PC Brief + +``` +Step 1: EXTRACT starting knowledge + - Information Inventory "Knows" → FactId entries at appropriate confidence + - Relationships → EntityKnowledge entries with RelationshipState + attributes + - Routine → temporal knowledge (shift schedules, social patterns of others) + +Step 2: GENERATE starting data + - Contentment from Want + Relationships + - Skill set from Role + Employer + - Combat tag from archetype + - Access tier map from Faction + Relationships + +Step 3: INVERT dual-lens + - For every NPC that has dual-lens notes about this character: + "How the smuggler sees Kael" → "How Kael sees [PC]" + - This requires every NPC profile to include a note about the PC + +Step 4: AUTHOR PC-specific content + - Orientation monologue (5-10 lines) + - Starting monologue pool (character voice) + - Agency boundaries + - Want as player motivation prompt + +Step 5: VALIDATE knowledge graph consistency + - PC's starting knowledge must not contradict any NPC's Information Inventory + - If PC "Knows" X about NPC, that NPC's "From whom" section must include PC + - If NPC "Doesn't know" Y, PC's knowledge of Y must not be directly observable to NPC +``` + +### What this means for the current wiki + +The v0.1 smuggler and detective don't have NPC pages — they're players, not NPCs. But for the PC-as-NPC concept to work, we need: + +1. **An NPC-format brief for both PCs.** Not a full Tier 1 profile (the player IS the personality), but at minimum: Core Identity, Starting Relationships, Starting Knowledge, Daily Routine, Role, and the inverted dual-lens notes from all NPCs who know the PC. + +2. **A "PC Upgrade" appendix on every Tier 1 and Tier 2 NPC profile.** A section that says: "If this NPC were upgraded to PC, here's what the starting knowledge graph looks like." This makes the randomizer concept concrete — you can point at any Tier 2 NPC and say "this person is now the player." + +3. **A documented conversion checklist** that content authors follow when creating a new PC-upgradable NPC, ensuring all required fields exist and the knowledge graph is consistent. + +The honest truth is that this is the largest gap in the current wiki. We describe NPCs beautifully but have no formal bridge between "NPC as written" and "NPC as played." Closing that gap is prerequisite to the randomizer and to scaling beyond v0.1's two hand-crafted player characters. + +--- + +## Summary of Proposals + +| # | Proposal | Priority | Blocks | +|---|----------|----------|--------| +| 1 | Add smuggler-specific entity attribute keys (operational_reliability, exposure_risk, etc.) | High | Smuggler content authoring parity | +| 2 | Create stub wiki pages for off-stage referenced NPCs (Nils, at minimum) | Medium | Cross-reference consistency | +| 3 | Formalize Tier 1/2/3 templates as standalone style guide docs | High | All future NPC authoring | +| 4 | Add canonical full names to all single-name NPCs | Medium | Lattice query consistency, randomizer | +| 5 | Document phonological naming rules with Miri | Medium | Regional style guide, future NPC generation | +| 6 | Break name-as-tier-signal by surfacing full names for 2-3 lower-tier NPCs | Low | Metagaming prevention | +| 7 | Create NPC-format briefs for both v0.1 PCs (smuggler + detective) | High | PC-as-NPC concept, YAML generation | +| 8 | Add "PC Upgrade" appendix to Tier 1/Tier 2 NPC template | High | Randomizer, scaling | +| 9 | Document NPC → PC conversion checklist | High | Content pipeline | +| 10 | Flesh out Olin with actual backstory and motivation | Medium | Triangle 3 emotional weight | +| 11 | Normalize Tier 2 depth across all 10 profiles | Medium | Authoring consistency | +| 12 | Write smuggler-perspective FactId progression text | Medium | Dual-lens content parity | diff --git a/docs/workshops/wiki-review/round1-tracking.md b/docs/workshops/wiki-review/round1-tracking.md new file mode 100644 index 000000000..13148533d --- /dev/null +++ b/docs/workshops/wiki-review/round1-tracking.md @@ -0,0 +1,269 @@ +# Wiki Review Workshop — Round 1 Tracking Document + +**Compiled by:** Qatux (Documenter) +**Date:** 2026-02-12 +**Status:** Round 1 complete. Cataloging proposals, tensions, and open questions for Round 2. + +--- + +## Proposal Registry + +### Topic 1: Direction Check + +| # | Proposal | Author | Support | Status | +|---|----------|--------|---------|--------| +| P-01 | Name the theme: the game is about **complicity**, not just asymmetric information. Add thematic framing to wiki index. | Gore | — | For Round 2 | +| P-02 | Add "Thematic Question" field to NPC profiles — each character's answer to "Is this enough?" Authoring guidance, not mechanical. | Gore | — | For Round 2 | +| P-03 | Elevate contaminated trust as the normal condition of community life, not just a post-arc endpoint. | Gore | — | For Round 2 | +| P-04 | **Strengthen Triangle 1 (Hub Power)** — add concrete smuggler decision moment (Nils volume escalation: side with Nils / side with Voss / split the difference). | Gestalt | Paula (flagged T1/Nils as weak) | For Round 2 | +| P-05 | **Make Torek's ring connection randomizable** per seed in Triangle 3 (Bar Tensions). | Gestalt | Nigel (general randomization advocacy) | For Round 2 | +| P-06 | Consider making **Nils partially present** in v0.1 — even one comm call would strengthen T1. | Gestalt | Paula (wants Nils stub page) | For Round 2 | +| P-07 | Add **smuggler-specific entity attribute keys** to achieve parity with detective investigation vocabulary: `operational_reliability`, `exposure_risk`, `loyalty_assessment`, `leverage_held`, `social_debt`. | Paula | Gore (smuggler lens = complicity) | High priority | +| P-08 | Create **stub wiki pages for off-stage referenced NPCs** (Nils at minimum). | Paula | Gestalt (Nils presence) | Medium priority | +| P-09 | **Normalize Tier 2 depth** — all 10 Tier 2 NPCs should hit the same quality bar. | Paula | Ozzie (Tier 3 soul gap) | Medium priority | +| P-10 | **Flesh out Olin** with actual backstory and motivation to strengthen Triangle 3. | Paula | Gestalt (T3 ambiguity is load-bearing) | Medium priority | +| P-11 | Write **smuggler-perspective FactId progression text** for facts where smuggler starts at KnowsDetails. | Paula | — | Medium priority | +| P-12 | Sera needs one **unprompted composure-crack moment** early — a half-sentence where control slips. | Ozzie | — | For Round 2 | +| P-13 | Tier 3 NPCs (Renn, Tav, Drin) need more **emotional presence** — "furniture that talks" currently. | Ozzie | — | For Round 2 | +| P-14 | Style guide must mandate a **"gut-check line"** per NPC — one voice sample that makes you pause when read aloud. | Ozzie | — | For Round 2 | + +### Topic 2: Style Guides + +| # | Proposal | Author | Support | Status | +|---|----------|--------|---------|--------| +| P-15 | **Hard mechanical requirements table** (10 constraints) for NPC profiles — engine will break without these. | Gestalt | — | High priority | +| P-16 | **Structured YAML routine block** alongside prose in wiki for engine consumption. | Gestalt | — | For Round 2 | +| P-17 | **Per-tier validation checklist** (Tier 1: 7 items, Tier 2: 7 items, Tier 3: 5 items). | Gestalt | Paula (template formalization) | High priority | +| P-18 | **Formalized Tier 1/2/3 templates** as standalone style guide documents. | Paula | Gestalt (checklist) | High priority | +| P-19 | 7 **implicit conventions made explicit** (voice mood count, dual-lens format, cross-refs, relationship depth, contradiction arc scope, header format, monologue counts). | Paula | Mellanie (similar gaps found) | High priority | +| P-20 | **Location shortcode table** — one canonical ID prefix per location, enforced in YAML. | Mellanie | — | High priority | +| P-21 | **Freeform tag vocabulary** — living list, reviewed, prevents divergent naming. | Mellanie | — | High priority | +| P-22 | **Standardize dual-lens note format** — one sentence per character, imperative voice. | Mellanie | Paula (format varies) | Medium priority | +| P-23 | **Extract voice cards per character** — 5-10 reference lines showing register, vocabulary, sentence length. | Mellanie | — | Medium priority | +| P-24 | **Prerequisite validation** in content pipeline — schema check against fact catalog. | Mellanie | Tyre (validation pipeline) | High priority | +| P-25 | **Standardize mood list usage** — simultaneous emotional states only, not alternatives. | Mellanie | — | Medium priority | + +### Topic 3: Regional Style Guide + Krenn System + +| # | Proposal | Author | Support | Status | +|---|----------|--------|---------|--------| +| P-26 | **Regional style guide template** (6 sections: Heritage Profile, Naming Conventions, Language Echoes, Aesthetic Markers, Social Structure, 180-Year Drift). | Miri | — | Ready for adoption | +| P-27 | **Krenn System regional brief** — Nordic-Baltic heritage, fully specified for v0.1. | Miri | — | Ready for adoption | +| P-28 | Cultural identity as **mechanical resistance** — regional style guides must include social norms toward authority, privacy expectations, loyalty structures, shared silence. | Gore | Miri (social structure section aligns) | Consensus forming | +| P-29 | **All NPCs get canonical full names** — stored in Core Identity, surface in institutional contexts. | Paula | Miri (family name heritage pool provided) | Consensus forming | +| P-30 | **Document phonological naming rules** — syllable count, consonant preferences, vowel preferences, family name patterns. | Paula | Miri (phonetic signature defined) | Ready to merge | +| P-31 | **Break name-as-tier-signal** — surface full names for 2-3 lower-tier NPCs in natural contexts. | Paula | — | Medium priority | +| P-32 | **Environmental text type catalog** — 8 types, ~65-90 items for v0.1. | Mellanie | — | For Round 2 | +| P-33 | **"Regional brief first" gating workflow** — no content for new regions until cultural brief approved. | Miri | Mellanie (brief was blocking dependency) | For Round 2 | + +### Topic 4: Wiki Taxonomy + +| # | Proposal | Author | Support | Status | +|---|----------|--------|---------|--------| +| P-34 | **Max 2 levels of spatial nesting** for locations: `locations/{system}/{slug}.md`. | Tyre | — | For Round 2 | +| P-35 | **NPCs flat until collision** — disambiguate with `-{district}` suffix only when needed. | Tyre | — | For Round 2 | +| P-36 | **World hierarchy flat with cross-references** — spatial hierarchy in content, not directory. | Tyre | — | For Round 2 | +| P-37 | **Filesystem is navigation, not identity** — unique identity in YAML frontmatter, not paths. | Tyre | Miri (canonical_id convention) | Consensus forming | +| P-38 | **`canonical_id` convention** in wiki frontmatter for collision-safe cross-referencing (e.g., `krenn.sova.transit.the-terminal`). | Miri | Tyre (identity in frontmatter) | Consensus forming | +| P-39 | Add **`cultural-groups/` section** to wiki index + create `krenn-system.md` as first entry. | Miri | — | Ready for adoption | + +### Topic 5: Content Directory + Moddability + +| # | Proposal | Author | Support | Status | +|---|----------|--------|---------|--------| +| P-40 | **Three-layer content stack**: base `content/` → `content/dlc/` → `mods/`. | Tyre | — | For Round 2 | +| P-41 | **`content/` directory structure** with `global/` and `districts/` top-level split. | Tyre | Gestalt (similar, used `_global/`) | For Round 2 — see Tension T-02 | +| P-42 | **Three overlay operations**: ADD (new file), REPLACE (entity), MERGE (line pools). | Tyre | — | For Round 2 | +| P-43 | **Schema per content type** (`_schema/` directory), not one monolithic schema. | Tyre | Gestalt (validation checklist aligns) | Consensus forming | +| P-44 | **Validation at three points**: author-time CLI, CI, load-time. | Tyre | Mellanie (prerequisite validation) | Consensus forming | +| P-45 | **Hot-reload for line pools** (dev-only, `notify` crate, `#[cfg(feature = "dev")]`). | Tyre | — | v0.2 scope | +| P-46 | **`pool_eligible` field** on NPCs — randomizer can include/exclude per seed. | Nigel | — | For Round 2 | +| P-47 | **Template role slots** (N regulars, M staff, K outsiders per social site) — modders fill slots, randomizer draws from pools. | Nigel | Gestalt (template model) | For Round 2 | +| P-48 | **Content pack manifest** structure with `extends`, `adds`, `overrides` declarations. | Nigel | Tyre (manifest.yaml) | Consensus forming | + +### Topic 6: Randomizer, PC Briefs, Proc-gen + +| # | Proposal | Author | Support | Status | +|---|----------|--------|---------|--------| +| P-49 | **THE FRIEND is never procedurally generated.** Write authored pool, randomize selection. | Gore | Nigel (pool concept) | Consensus — see T-01 for pool size | +| P-50 | **PC-as-NPC requires authored relationship stubs** — Tier 2 minimum for all connections, Tier 1 for FRIEND. | Gore | Gestalt (reverse knowledge), Paula (conversion checklist) | High priority | +| P-51 | **Proc-gen varies context, not content.** Authored emotional core stays fixed; surroundings shift. | Gore | — | For Round 2 | +| P-52 | **Full PC-as-NPC upgrade pipeline** — 16-axis data transfer table, 8 generated-at-upgrade fields, reverse knowledge entries. | Gestalt | Paula (conversion process aligns) | High priority | +| P-53 | **Starting FactId confidence table** + **Starting RelationshipState table** required for PC-upgradable NPCs. | Gestalt | Paula (starting knowledge) | High priority | +| P-54 | **Reverse knowledge entries** — what each related NPC knows about the PC, read bidirectionally from relationship data. | Gestalt | — | Critical insight | +| P-55 | **Three randomization axes**: (1) WHO is FRIEND, (2) WHAT is contraband, (3) WHO is compromised. | Nigel | — | For Round 2 | +| P-56 | **Contraband moral shuffle** — primary contraband varies per seed from pool (lattice / medical / severance / mixed). | Nigel | — | For Round 2 — see T-06 | +| P-57 | **Network shuffle** — conspiracy roles (compromised inspector, schedule manipulator, etc.) assigned to different NPCs per seed. | Nigel | — | For Round 2 | +| P-58 | **NPC-format briefs for both v0.1 PCs** (smuggler + detective). | Paula | Gestalt (upgrade pipeline needs this) | High priority | +| P-59 | **"PC Upgrade" appendix** on every Tier 1/Tier 2 NPC profile template. | Paula | Gestalt (archetype templates) | High priority | +| P-60 | **NPC → PC conversion checklist** for content authors. | Paula | Gestalt (pipeline spec) | High priority | +| P-61 | **Never tell backstory directly** — discover through NPC reactions, monologue, environmental knowledge, social knowledge. | Ozzie | — | Design principle | +| P-62 | **First 60 seconds must feel like "walking into Cheers"** — NPCs greet PC with warmth, history, inside jokes. | Ozzie | Gore (authored relationship stubs) | Design principle | + +--- + +## Key Tensions Requiring Round 2 Resolution + +### T-01: FRIEND Pool Size and v0.1 Scope + +**Agents:** Gore, Nigel, Gestalt + +**The tension:** +- Gore proposes 4-6 FRIEND-eligible NPCs per district, all at Tier 1 authored depth. Each ~70-100 lines. Selection randomized, content never generated. +- Nigel proposes 2-3 FRIEND candidates per character at launch, with architecture supporting more. +- Gestalt maps the upgrade pipeline with bidirectional knowledge but doesn't specify pool size. +- **Unresolved:** Does v0.1 ship with 1 FRIEND per character (Kael + Sera, as currently authored) with pool architecture ready? Or do we author additional FRIEND candidates for v0.1? +- **Content cost:** Each additional FRIEND = ~70-100 authored lines at Tier 1 depth. 2 additional FRIENDs = ~140-200 lines = significant Sprint 3 scope. + +**Consensus:** THE FRIEND is always authored, never proc-gen. Pool-based selection is the architecture. Pool size and v0.1 scope need a decision. + +### T-02: Content Directory Naming (`global/` vs `_global/`, `lines/` vs separate dirs) + +**Agents:** Tyre, Gestalt + +**The tension:** +- Tyre: `global/` (no prefix), `_schema/` and `_meta/` with underscore for infra. `lines/` subdirectory for dialogue+monologue. +- Gestalt: `_global/` with underscore prefix. Separate `dialogue/` and `monologue/` directories. +- Both agree on `districts/` as atomic content unit. +- Minor naming difference, but affects tooling paths, mod documentation, and every content reference. + +**Needs:** One decision, either works. Tyre's `global/` is more conventional; Gestalt's `_global/` sorts infrastructure to top. + +### T-03: Kael/Hael Sonic Collision + +**Agents:** Paula, Miri + +**The tension:** +- Paula flags Kael/Hael as one letter apart — potential confusion in dialogue, monologue, and player memory. +- Miri's Krenn naming brief includes both names as valid Krenn phonology (short, consonant-heavy, -el ending). +- Changing either name has cascade effects (Kael appears in ~10+ files, Hael in ~5+). +- **Unresolved:** Is this a real usability problem, or acceptable cultural texture? If a problem, which name changes? + +### T-04: Smuggler Lens Gap + +**Agents:** Paula, Gore, Gestalt + +**The tension:** +- Paula: Wiki is detective-shaped. Investigation attributes are well-defined; smuggler operational attributes are not. +- Paula proposes 5 new smuggler-specific entity attribute keys. +- Gore frames this thematically: smuggler lens = complicity, detective lens = judgment. +- Gestalt hasn't yet mapped these proposed attributes to the ECS data model. +- **Needs Round 2:** Gestalt to validate Paula's proposed attributes map cleanly to EntityKnowledge, or propose alternatives. + +### T-05: Triangle 1 (Hub Power) and the Nils Problem + +**Agents:** Gestalt, Paula + +**The tension:** +- Both independently flag T1 as the weakest triangle. +- Gestalt: smuggler role is passive ("wants everyone to calm down" is not a decision). Proposes Nils volume escalation as concrete fork. +- Paula: Nils referenced in 5+ profiles but has no wiki page. Risk of contradictory characterizations. +- Gestalt also proposes making Nils partially present (comm call). +- **Needs Round 2:** Agree on T1 strengthening approach. Nils stub page seems consensus. Comm call presence and decision moment need design validation. + +### T-06: Randomizer Scope for v0.1 + +**Agents:** Nigel, Gore, Tyre, Gestalt + +**The tension:** +- Nigel proposes three randomization axes (FRIEND identity, contraband type, compromised NPCs) with evidence placement variation. +- Gore endorses FRIEND pool but says proc-gen must vary context not content. +- Tyre scopes v0.1 content pipeline as "directory structure + YAML parser + basic schema validation (1 sprint)." No mod overlay, no hot-reload. Randomization support is implicit but not specified. +- **The question:** Does v0.1 implement seed-based variation, or just build the architecture that supports it? Nigel's proposals are mechanically exciting but significantly expand v0.1 scope if implemented immediately. +- **Nigel's contraband moral shuffle** is particularly scope-heavy — different contraband types require different FactId progressions, different dialogue flavor, different NPC attitudes. + +### T-07: Wiki Structure vs Content Directory Structure + +**Agents:** Tyre, Miri, Gestalt + +**The tension:** +- Miri proposes wiki restructure to `star-systems/{system}/station-X/.../` deep nesting with `characters/` flat. +- Tyre proposes wiki keeps current shallow structure (`locations/{system}/slug.md`, `npcs/` flat). +- Both agree content directory (`content/`) uses `districts/` as atomic unit. +- Current wiki already has: `locations/krenn-system/`, `npcs/`, `world/` — closer to Tyre's proposal. +- Miri's proposal references D-040 (which I note doesn't exist in the current decisions directory — this may be a forward reference or error). +- **Needs clarification:** Is Miri proposing a wiki restructure or describing a future state? Does D-040 exist? + +### T-08: Tier 3 Emotional Depth vs Scope + +**Agents:** Ozzie, Paula, Gestalt + +**The tension:** +- Ozzie: Renn, Tav, Drin are "furniture that talks" — need soul. +- Paula: Tier 3 is defined as sketch/minimal (3 axes, 1 voice hint, 10-15 lines). Olin specifically needs backstory. +- D-023/D-029: Tier 3 is explicitly "procedural filler with systemic hooks." ~30% of NPCs are truly flat. +- **The question:** Can Tier 3 NPCs have emotional presence without becoming Tier 2? Or should some current Tier 3s be promoted? Drin is already doing Tier 2 narrative work (Triangle 2, Triangle 5, compromised by Harek). +- Ozzie's "gut-check line" proposal (P-14) is a low-cost middle ground — one memorable line doesn't require full Tier 2 depth. + +--- + +## Emerging Consensus (Likely Decisions) + +| # | Topic | Consensus | Confidence | Supporters | +|---|-------|-----------|------------|------------| +| C-01 | THE FRIEND is never proc-gen | Authored pool, randomized selection | High | Gore, Nigel, Gestalt, Paula | +| C-02 | All NPCs need canonical full names | Store in Core Identity, surface in institutional contexts | High | Paula, Miri | +| C-03 | Regional style guide template | Adopt Miri's 6-section template | High | Miri, Gore, Mellanie | +| C-04 | Krenn System regional brief | Adopt Miri's Nordic-Baltic brief as canonical | High | Miri (author), Mellanie (unblocked) | +| C-05 | Formalized tier templates | Paula's Tier 1/2/3 templates + Gestalt's mechanical checklists | High | Paula, Gestalt, Mellanie | +| C-06 | Content directory: `global/` + `districts/` | Both Tyre and Gestalt converge on this split | High | Tyre, Gestalt | +| C-07 | Schema per content type | Per-type schemas, not monolithic | High | Tyre, Gestalt | +| C-08 | Identity in frontmatter, not paths | `canonical_id` or equivalent in YAML frontmatter | High | Tyre, Miri | +| C-09 | Location shortcode table | One canonical ID per location | High | Mellanie, Tyre | +| C-10 | Smuggler needs own knowledge vocabulary | Parity with detective investigation attributes | High | Paula, Gore | +| C-11 | Triangle 1 needs strengthening | Nils stub page + concrete smuggler decision moment | High | Gestalt, Paula | +| C-12 | PC-as-NPC requires explicit specs | Starting knowledge tables, reverse knowledge, conversion checklist | High | Gestalt, Paula, Gore, Ozzie | +| C-13 | Regional brief gates content creation | No NPC/dialogue/env text until cultural brief approved | High | Miri, Mellanie | +| C-14 | Backstory through discovery, not exposition | NPC reactions + monologue reveal PC history organically | High | Ozzie, Gore | + +--- + +## Open Questions for Round 2 + +| # | Question | Raised By | Needs Input From | +|---|----------|-----------|------------------| +| Q-W01 | Does v0.1 ship with 1 FRIEND per character (Kael/Sera) or do we author additional pool candidates? | Gore/Nigel | Project lead (scope decision) | +| Q-W02 | `global/` vs `_global/` prefix for content directory? | Tyre vs Gestalt | Project lead (convention call) | +| Q-W03 | Is Kael/Hael sonic collision a real usability problem? Should either name change? | Paula | Mellanie (authoring impact), Ozzie (player confusion) | +| Q-W04 | Does v0.1 implement seed-based randomization or just the architecture for it? | Nigel | Project lead + Tyre (scope) | +| Q-W05 | Does D-040 exist? Miri references it for wiki taxonomy but it's not in current decisions directory. | Qatux | Miri | +| Q-W06 | Should some Tier 3 NPCs be promoted to Tier 2? (Drin does Tier 2 narrative work.) | Ozzie | Gestalt (mechanical impact), project lead | +| Q-W07 | `lines/` (Tyre) vs separate `dialogue/` + `monologue/` (Gestalt) for content subdirectory? | Tyre vs Gestalt | Project lead (convention call) | +| Q-W08 | What is the `district` or `template` atomic content pack unit for modding? | Tyre | Gestalt, Nigel | +| Q-W09 | Should modder-added line pools have weighting/caps to prevent NPC voice drowning? | Tyre | Gestalt, Nigel | +| Q-W10 | Should location shortcodes match wiki slugs or use abbreviated forms? | Tyre | Mellanie, Paula | +| Q-W11 | Is Torek's ring connection always authored (one answer) or randomizable per seed? | Gestalt | Nigel, project lead | + +--- + +## Per-Agent Proposal Counts + +| Agent | Proposals | Topics Addressed | Key Contributions | +|-------|-----------|-----------------|-------------------| +| **Gore** | 7 (P-01 through P-03, P-49 through P-51, P-28) | 1, 3, 6 | Thematic spine (complicity), FRIEND never proc-gen, cultural identity as mechanical resistance | +| **Gestalt** | 9 (P-04 through P-06, P-15 through P-17, P-41, P-52 through P-54) | 1, 2, 5, 6 | Triangle analysis, mechanical requirements, content directory, PC upgrade pipeline | +| **Paula** | 12 (P-07 through P-11, P-18, P-19, P-29 through P-31, P-58 through P-60) | 1, 2, 3, 6 | Smuggler lens gap, tier templates, naming analysis, PC conversion | +| **Miri** | 5 (P-26, P-27, P-33, P-38, P-39) | 3, 4 | Regional style guide template + Krenn brief, canonical_id, growth planning | +| **Ozzie** | 5 (P-12 through P-14, P-61, P-62) | 1, 6 | Emotional gut-checks, NPC soul assessment, PC-as-NPC wow moments | +| **Mellanie** | 8 (P-20 through P-25, P-32, P-25) | 2, 3 | Authoring conventions, location shortcodes, environmental text catalog | +| **Nigel** | 5 (P-46 through P-48, P-55 through P-57) | 5, 6 | Mod pool_eligible, template role slots, three randomization axes | +| **Tyre** | 8 (P-34 through P-37, P-40, P-42 through P-45) | 4, 5 | Taxonomy rules, content directory architecture, mod overlay mechanics | + +--- + +## Notable Quotes (For SUMMARY.md) + +- **Gore on complicity:** "Every character in Sova Transit District is complicit in something. [...] The player becomes complicit in whatever they choose. Watching IS participating." +- **Gore on Hael:** "Hael [...] is the emotional fulcrum of the entire vertical slice. One person who never touches the conspiracy is the person the conspiracy most damages." +- **Ozzie on Hael:** "Not Kael, not Sera — HAEL. The partner sitting in the bar, checking the door every time it opens. [...] THAT'S the game." +- **Paula on detective bias:** "The smuggler's content pipeline is systematically under-served compared to the detective's." +- **Gestalt on T1:** "The smuggler's role is 'caught between' — but what do they DO?" +- **Miri on naming drift:** "Nobody decided Krenn names should be short and consonant-heavy. But when Finnish, Estonian, and Latvian naming traditions blend in a working-class logistics culture that values directness, compression happens naturally." +- **Mellanie on blocking dependency:** "I don't have a regional style brief to write against. [...] The brief is my blocking dependency." +- **Nigel on mods as replayability:** "Mods are replayability we don't have to build." +- **Ozzie on the wow moment:** "The wow moment isn't 'I read my backstory.' The wow moment is 'I HAVE a backstory and I'm discovering it the way I'd discover a real place — by living in it.'" +- **Gore on proc-gen:** "Procedural generation amplifies authored content only when the authored content is the emotional core and the procedural content is the context that reframes it." + +--- + +*62 proposals tracked. 8 tensions identified. 11 open questions for Round 2. 14 emerging consensus items.* diff --git a/docs/workshops/wiki-review/round1-tyre.md b/docs/workshops/wiki-review/round1-tyre.md new file mode 100644 index 000000000..0427d981e --- /dev/null +++ b/docs/workshops/wiki-review/round1-tyre.md @@ -0,0 +1,583 @@ +# Wiki Review Workshop — Round 1: Tyre (Technical Architect) + +**Topics:** 4 (Taxonomy Nesting) and 5 (Content Directory Structure + Mod Overlay) + +--- + +## Topic 4: Wiki Taxonomy Hardening + +### The Problem, Stated Precisely + +We have 45 wiki files today. The v0.1 vertical slice has 1 system, 1 station, 1 district, 3 social sites, 17 NPCs. When we add a second system — or a second station in Krenn — every generic name collides. "The Terminal" exists on every logistics station. "Maintenance Corridors" is universal. "Drin" is a common enough name to recur. + +The question isn't *whether* to namespace. It's *how deep to nest* before the directory structure becomes a tax on contributors instead of an aid. + +### Proposal: Two Rules, One Principle + +**Principle: The filesystem is navigation, not identity.** Unique identity lives in content frontmatter (YAML/markdown metadata). The directory path is for humans browsing the tree. It should be shallow enough to tab-complete and deep enough to disambiguate. + +**Rule 1: Maximum 2 levels of spatial nesting for locations.** + +``` +locations/ + {system}/ + {location-slug}.md +``` + +Current state (`locations/krenn-system/the-terminal.md`) already follows this. Good. Don't go deeper. + +Why not 3 levels (`locations/{system}/{station}/{slug}.md`)? Because: +- Tab-completing a 4-segment path is annoying. Contributors will get the nesting wrong. +- Station context belongs in the file's frontmatter, not the path. A location is *in* a station, but it's *addressed by* system + slug. +- Most systems have 1-3 stations. Nesting buys almost nothing for the navigation cost. + +If two locations in the same system share a slug (e.g., two stations both have "The Terminal"), disambiguate the slug: `the-terminal-sova.md` vs `the-terminal-orbital.md`. The frontmatter carries the canonical name. + +**Example — v0.2 adds a second system (Tavros):** + +``` +locations/ + krenn-system/ + the-terminal.md # Station Sova's logistics hub + the-last-shift.md + maintenance-corridors.md + tavros-system/ + the-terminal-central.md # Tavros Central Station's hub + the-strip.md # Bar district + dry-dock-corridors.md +``` + +No restructuring of existing files. New system = new directory. Done. + +**Rule 2: NPCs, factions, technology, contraband, and knowledge are FLAT until collision.** + +``` +npcs/ + kael-davan.md # unique name → flat + sera-venn.md + drin.md # unique in v0.1 + +# If v0.2 introduces a second "Drin": +npcs/ + drin.md # rename to drin-sova.md + drin-sova.md # Krenn System Drin (retroactive rename) + drin-tavros.md # Tavros System Drin +``` + +Factions are inherently global — `factions/lattice-commission.md` never collides. Technology and contraband are likewise global concepts. + +**Wait — do we need the retroactive rename?** Yes. But only on actual collision, which is rare. 17 NPCs fit flat. 50 NPCs probably fit flat. At 100+ NPCs across 3+ systems, you'll get collisions, but they'll be individual renames, not restructures. + +If the team wants to avoid *any* future renames, we could namespace NPCs by district from the start: + +``` +npcs/ + sova-transit/ + kael-davan.md + drin.md + tavros-central/ + drin.md +``` + +I don't recommend this for v0.1 (17 NPCs, one district, unnecessary nesting). But I acknowledge it's a valid choice if the team prefers "never rename" over "shallow paths now." + +**Rule 3: World hierarchy is flat with cross-references, not nesting.** + +``` +world/ + krenn-system.md # links to station-sova.md + station-sova.md # links to sova-transit-district.md + sova-transit-district.md # links to location pages +``` + +The spatial hierarchy lives in the *content* (wiki cross-links), not the *directory*. This is the same principle as Rule 1 — identity in content, navigation in paths. If we nested `world/krenn-system/station-sova/sova-transit-district.md`, contributors would drown in path segments. Three flat files with hyperlinks do the job better. + +### Scaling Analysis + +| Content growth | Current structure works? | Change needed? | +|---|---|---| +| v0.1 (1 system, 17 NPCs) | Yes | None | +| v0.2 (2 systems, ~40 NPCs) | Yes | New `locations/{system}/` dir only | +| v1.0 (5+ systems, 100+ NPCs) | Mostly | Occasional NPC slug disambiguation | +| DLC/mod content | Yes (see Topic 5) | Content packs are separate trees | + +The structure survives because the nesting is shallow and disambiguation is on-demand. The only painful moment is if two NPCs share a first name across systems and we rename files — but that's a single `git mv`, not a restructure. + +### Summary: Taxonomy Rules + +1. **Locations**: `locations/{system}/{slug}.md` — max 2 levels. Disambiguate slug on collision. +2. **NPCs**: `npcs/{slug}.md` — flat. Disambiguate with `{slug}-{district}.md` on collision only. +3. **Factions, technology, contraband, knowledge**: flat. No foreseeable collision risk. +4. **World**: flat with cross-references. Hierarchy is content, not structure. +5. **Authoring guides**: `authoring/{slug}.md` — flat. Few files, no collision risk. + +--- + +## Topic 5: Content Directory Structure & Mod Overlay + +*cracks knuckles* + +This is the architectural meat. The wiki (`docs/wiki/`) is the authoring source of truth — human-readable, team-navigable. The content directory (`content/`) is the engine-readable delivery format — YAML, schema-validated, loaded at runtime. They mirror each other structurally but serve different consumers. + +### Architecture: Three-Layer Content Stack + +``` +Layer 3 (highest priority): mods/ # User mods (override/extend) +Layer 2: content/dlc/ # Official DLC packs +Layer 1 (base): content/ # Base game +``` + +Later layers override or extend earlier layers. The engine walks the stack top-down, resolving each content address to the highest-priority file. + +### Proposed `content/` Directory Structure + +``` +content/ + _meta/ + manifest.yaml # Pack metadata: version, id, dependencies + load-order.yaml # Explicit load ordering for multi-pack scenarios + + _schema/ + npc.schema.yaml # Validation schema per content type + location.schema.yaml + faction.schema.yaml + template.schema.yaml + fact.schema.yaml + dialogue.schema.yaml + monologue.schema.yaml + district.schema.yaml + + global/ + factions/ + concord-assembly.yaml + lattice-commission.yaml + syndics.yaml + the-ring.yaml + guardians-of-autonomy.yaml + veil-institute.yaml + the-unbound.yaml + technology/ + neural-lattice.yaml + meridian.yaml + span-gates.yaml + founder-gates.yaml + clone-transfer.yaml + severance-tech.yaml + contraband/ + lattice-components.yaml + medical-grade-replacements.yaml + severance-equipment.yaml + knowledge/ + facts.yaml # All FactId definitions (24 for v0.1) + entity-attributes.yaml # Canonical EntityKnowledge keys + relationship-states.yaml # RelationshipState enum reference + + districts/ + sova-transit/ + district.yaml # District metadata, spatial refs, ambient config + npcs/ + kael-davan.yaml # 10-axis NPC definition + sera-venn.yaml + voss.yaml + lera-sessik.yaml + torek-lintar.yaml + devra.yaml + maret-korr.yaml + resha.yaml + hael.yaml + renn.yaml + pell.yaml + harek.yaml + drin.yaml + sess.yaml + olin.yaml + sabel.yaml + tav.yaml + locations/ + the-terminal.yaml # Spatial definition, sightlines, Meridian coverage + the-last-shift.yaml + maintenance-corridors.yaml + templates/ + logistics-hub.yaml # Social site: roles, triangles, NPC assignments + bar.yaml + smuggling-ring.yaml + lines/ + terminal/ + dialogue.yaml + monologue-smuggler.yaml + monologue-detective.yaml + bar/ + dialogue.yaml + monologue-smuggler.yaml + monologue-detective.yaml + corridor/ + dialogue.yaml + monologue-smuggler.yaml + monologue-detective.yaml +``` + +### Key Design Decisions + +**Why `districts/` as the atomic content pack?** + +A district maps to D-025 (social site / functional cluster as atomic template unit). It's the natural unit of content authoring, the natural unit of mod creation, and the natural unit of engine loading. "Add a district" = drop a new directory under `districts/`. The engine discovers it. + +The monologue guide already organizes content by location within a district (terminal, bar, corridor). The `lines/` subdirectory matches this exactly. + +**Why `global/` vs `districts/`?** + +Some content is inherently Reach-wide: factions, technology, contraband definitions, FactId vocabulary. An NPC references `faction: "lattice-commission"` — that faction definition lives in `global/`, not per-district. If a mod changes how the Commission works, it changes `global/factions/lattice-commission.yaml` once, and every district that references it picks up the change. + +District-scoped content is everything that's spatially local: NPCs, locations, social site templates, dialogue/monologue pools. + +**Why `lines/` not `content/` or `dialogue/`?** + +Three reasons: (1) avoids recursive `content/content/` path confusion, (2) "lines" is what authors call it — monologue lines, dialogue lines, (3) distinguishes textual content from structural definitions (NPC YAML is structural, monologue YAML is lines). + +**Why `_schema/` and `_meta/` with underscore prefix?** + +Infrastructure files sort to top of directory listings and are visually distinct from game content. Modders know not to touch underscore directories. Same convention as `_config.yml` in Jekyll, `__init__.py` in Python. + +### Mod Overlay: How It Works + +A mod is a content pack with the same directory structure as `content/`. Mods live under `mods/{mod-id}/`. + +**Example: "Add Jax the bartender to The Last Shift"** + +``` +mods/ + extra-bartender/ + _meta/ + manifest.yaml # mod-id: extra-bartender, requires: base >= 0.1 + districts/ + sova-transit/ + npcs/ + jax.yaml # New NPC definition (10-axis) + templates/ + bar.yaml # EXTENDS bar template (adds Jax to role list) + lines/ + bar/ + dialogue.yaml # EXTENDS dialogue pool (adds Jax's lines) +``` + +**Three overlay operations:** + +| Operation | When | Mechanic | +|---|---|---| +| **ADD** | New file at a path that doesn't exist in base | File is loaded as-is | +| **REPLACE** | File at same path as base, entity-type content | Entire file replaces base version | +| **MERGE** | File at same path as base, pool-type content | Lists are concatenated, deduplicated by `id` | + +The critical distinction: **entity definitions REPLACE, line pools MERGE.** + +If a mod provides `districts/sova-transit/npcs/kael-davan.yaml`, it *replaces* Kael's entire 10-axis definition. You can't partially patch an NPC — that's a recipe for broken state. + +If a mod provides `districts/sova-transit/lines/bar/dialogue.yaml`, its lines are *appended* to the base pool. Each line has a unique `id` — if a mod provides a line with an existing `id`, the mod's version wins (override by ID). New IDs are simply added. This means a modder can: +- Add 5 new dialogue lines (new IDs) without touching existing content +- Override a specific line (same ID, different text) without replacing the whole pool +- Both in the same file + +**Merge semantics in YAML:** + +```yaml +# Base: content/districts/sova-transit/lines/bar/dialogue.yaml +lines: + - id: bar_d_001 + text: "What'll you have?" + role: bartender + access: [public] + trust: surface + situation: [bar_evening] + +# Mod: mods/extra-bartender/districts/sova-transit/lines/bar/dialogue.yaml +lines: + - id: bar_d_001 # OVERRIDE: same id, different text + text: "Evening. The usual?" + role: bartender + access: [public] + trust: surface + situation: [bar_evening] + + - id: bar_d_200 # ADD: new id + text: "Jax says the grain spirit's from a new batch. Smoother." + role: bartender + access: [peer] + trust: surface + situation: [social] +``` + +**Load order resolution:** + +``` +1. Discover all content packs: content/ (base), content/dlc/* (DLC), mods/* (user) +2. Read each _meta/manifest.yaml for dependencies and load-order hints +3. Topological sort by dependencies (base → DLC → mods, respecting inter-mod deps) +4. For each content address (e.g., districts/sova-transit/npcs/kael-davan.yaml): + a. Entity types: last writer wins (highest priority pack) + b. Pool types: merge all, deduplicate by line id (highest priority wins on collision) +5. Validate merged content against _schema/ +``` + +### Content Validation Pipeline + +**Proposal: Schema per content type, not one schema.** + +Each content type has its own YAML schema in `_schema/`. This is the right granularity because: +- Different types have completely different shapes (NPC ≠ dialogue ≠ faction) +- Schema changes are localized (adding a new NPC axis doesn't touch dialogue schema) +- Mod validation checks only the types the mod provides + +**Validation runs at three points:** + +| When | What | Speed | +|---|---|---| +| **Author-time** | CLI validator: `make validate-content` | <2 seconds for full base | +| **CI** | Same validator, blocks merge on failure | Same | +| **Load-time** | Engine validates on startup, panics on schema violation | ~50ms for v0.1 content | + +**What the validator checks:** + +1. **Structural validity**: YAML parses, required fields present, enums match allowed values. +2. **Cross-reference integrity**: + - NPC definitions reference valid FactIds from `global/knowledge/facts.yaml` + - Dialogue prerequisites reference valid FactIds and entity slugs + - Template role lists reference valid NPC slugs in the same district + - Monologue `character` values are valid enum members +3. **Pool consistency**: + - No duplicate line IDs within a merged pool + - All `access` and `trust` values are valid enums + - All `trigger` types match the 9 canonical types + - All `situation`, `topic`, `mood` values match canonical enums +4. **Completeness** (warning, not error): + - Every NPC in a template has at least N dialogue lines + - Every location has at least one monologue line per character + - Tier 1 NPCs meet minimum line counts from D-034 + +**Schema format**: YAML schemas in a subset of JSON Schema (YAML-formatted for readability, functionally equivalent). The Rust loader and the Python/CLI validator both consume the same schema files. + +Example NPC schema (abbreviated): + +```yaml +# _schema/npc.schema.yaml +type: object +required: [id, name, tier, axes] +properties: + id: + type: string + pattern: "^[a-z][a-z0-9_-]+$" + name: + type: string + tier: + type: integer + enum: [1, 2, 3] + district: + type: string + axes: + type: object + required: [want, routine, personality] + properties: + want: { type: string } + secret: { type: string } + relationships: + type: array + items: { type: object } + tolerance: { type: string } + routine: { type: string } + information: { type: string } + contentment: { type: string } + personality: { type: string } + tell: { type: string } + skills: { type: string } + voice_sample: + type: array + items: { type: string } + dual_lens: + type: object + properties: + smuggler: { type: string } + detective: { type: string } +``` + +### Hot-Reloading During Development + +**Feasibility tier: straightforward for line pools, moderate for entity definitions.** + +The Rust server watches `content/` via `notify` crate (cross-platform filesystem events). On file change: + +| Content type | Reload strategy | Latency | +|---|---|---| +| Dialogue/monologue pools | Full pool reload for the affected location | <5ms | +| NPC definitions | Update ECS component fields in-place | <10ms | +| Location definitions | Update spatial metadata | <10ms | +| Templates | Requires re-linking NPC-to-role assignments | ~50ms | +| Global definitions (factions, facts) | Full reload of global registry | ~20ms | +| Schema changes | Requires restart (schema drives parser) | N/A | + +**Line pool hot-reload is the money feature.** Writers edit `monologue-smuggler.yaml`, save, and the next monologue trigger in-game uses the updated pool. No restart, no reload command. This is critical for the authoring workflow — Mellanie and Paula need to iterate on lines without leaving the game running. + +**Implementation sketch:** + +```rust +// Simplified hot-reload system +fn content_watcher_system( + mut events: EventReader, + mut pools: ResMut, + mut npcs: Query<&mut NpcDefinition>, + schemas: Res, +) { + for event in events.read() { + match categorize_path(&event.path) { + ContentType::DialoguePool(location, pool_type) => { + // Re-parse, re-validate, swap pool + if let Ok(new_pool) = parse_and_validate(&event.path, &schemas) { + pools.replace(location, pool_type, new_pool); + info!("Hot-reloaded {} pool for {}", pool_type, location); + } + } + ContentType::NpcDefinition(npc_id) => { + // Re-parse, update matching ECS component + if let Ok(new_def) = parse_and_validate(&event.path, &schemas) { + for mut npc in npcs.iter_mut() { + if npc.id == npc_id { + *npc = new_def; + break; + } + } + } + } + // ... other types + } + } +} +``` + +Hot-reload is **development-only** (behind `#[cfg(feature = "dev")]`). Release builds load content once at startup and never watch the filesystem. This avoids the performance cost of file watching and the security surface of runtime file loading in shipped builds. + +### How Wiki and Content Relate + +``` +docs/wiki/ → Human-authored source of truth (markdown) + ↓ (authoring pipeline: wiki → YAML) +content/ → Engine-readable delivery format (YAML) + ↓ (engine loads at startup) +Runtime ECS → In-memory game state +``` + +The wiki is where *decisions* are made and *content is authored*. The content directory is where *the engine looks*. The pipeline between them can be: + +1. **Manual** (v0.1): Authors write YAML by hand, referencing wiki pages. The wiki and YAML coexist as parallel representations. The validator ensures they don't drift. +2. **Semi-automated** (v0.2+): A conversion tool extracts structured data from wiki markdown (NPC axes, FactId definitions) into YAML. Authors maintain the wiki; the tool generates YAML. +3. **Full pipeline** (v1.0): Wiki entries have embedded YAML frontmatter that IS the content definition. The wiki page is simultaneously the human-readable doc and the machine-readable source. + +For v0.1, option 1 is correct. The content volume (17 NPCs, 3 locations, ~200 lines) doesn't justify pipeline tooling. Authors write both wiki markdown and content YAML. The schema validator catches inconsistencies. + +### Mod Structure: Complete Example + +A modder who wants to "add a new NPC to the bar with custom dialogue" creates: + +``` +mods/ + jax-the-veteran/ + _meta/ + manifest.yaml + districts/ + sova-transit/ + npcs/ + jax-korrenson.yaml + templates/ + bar.yaml # Extends: adds jax_korrenson to regular role + lines/ + bar/ + dialogue.yaml # Jax's dialogue lines (new IDs) + monologue-smuggler.yaml # Smuggler's observations of Jax + monologue-detective.yaml # Detective's observations of Jax +``` + +**`manifest.yaml`:** +```yaml +id: jax-the-veteran +name: "Jax the Veteran" +version: "1.0.0" +author: "ModderName" +requires: + - id: base + version: ">=0.1.0" +description: "Adds Jax Korrenson, a retired military veteran, to The Last Shift." +content_types: [npc, template, dialogue, monologue] +``` + +**`jax-korrenson.yaml`:** +```yaml +id: jax-korrenson +name: "Jax Korrenson" +tier: 3 +district: sova-transit +axes: + want: "Quiet drink, nobody asking questions about the war." + routine: "Arrives at bar 18:00, corner booth, leaves 22:00." + personality: "Gruff, observant, protective of regulars." +voice_sample: + - "I've seen enough to know when someone's lying. You're not good at it." +``` + +**`dialogue.yaml` (merge extension):** +```yaml +lines: + - id: bar_d_300 + text: "You don't look like logistics. What's your story?" + role: bar_regular + access: [public] + trust: surface + situation: [bar_evening, social] + topic: [personal] + mood: [suspicious] +``` + +The engine loads this, validates it against `_schema/`, merges the line pool, assigns the NPC to the template, and Jax appears at the bar. + +### Feasibility Assessment + +| Component | Difficulty | Sprint estimate | +|---|---|---| +| Directory structure + schema definitions | Easy | 0.5 sprint | +| YAML content parser (Rust, `serde_yaml`) | Easy | 0.5 sprint | +| Schema validator CLI (`make validate-content`) | Moderate | 1 sprint | +| Mod discovery + load-order resolution | Moderate | 1 sprint | +| Merge semantics for line pools | Moderate | 0.5 sprint | +| Hot-reload (dev-only) | Moderate | 1 sprint | +| Cross-reference validation | Hard | 1 sprint | + +Total for full content pipeline: ~4.5 sprints. But we don't need all of it for v0.1: + +**v0.1 scope (1 sprint):** Directory structure + YAML parser + basic schema validation. No mod overlay, no hot-reload. Content is loaded once at startup from `content/`. + +**v0.2 scope (2 sprints):** Mod overlay (ADD + REPLACE), schema validator CLI, hot-reload for line pools. + +**v0.3+ scope (1.5 sprints):** MERGE semantics, cross-reference validation, full mod pipeline. + +### Open Questions for the Team + +1. **Gestalt/Nigel**: The mod MERGE mechanic for line pools needs game design input. If a mod adds 50 dialogue lines to a pool of 20, the NPC talks like a mod 71% of the time. Should there be weighting? A max-lines-per-mod cap? Or is this the modder's problem? + +2. **Paula/Mellanie**: The `lines/` directory uses location shortnames (terminal, bar, corridor). These come from the monologue guide. Are these stable identifiers you're comfortable with, or should they match the wiki slugs (the-terminal, the-last-shift, maintenance-corridors)? + +3. **Gestalt**: Is `district` the right atomic content pack unit? Or should it be `template` (social site)? A district contains multiple templates — packing at the district level means you can't add a single social site without the whole district. Packing at the template level is more granular but more complex. + +--- + +## Cross-Topic: How Wiki Taxonomy Maps to Content Structure + +| Wiki path | Content path | Notes | +|---|---|---| +| `docs/wiki/npcs/kael-davan.md` | `content/districts/sova-transit/npcs/kael-davan.yaml` | NPC is district-scoped | +| `docs/wiki/locations/krenn-system/the-terminal.md` | `content/districts/sova-transit/locations/the-terminal.yaml` | Location is district-scoped | +| `docs/wiki/factions/lattice-commission.md` | `content/global/factions/lattice-commission.yaml` | Faction is global | +| `docs/wiki/knowledge/fact-catalog.md` | `content/global/knowledge/facts.yaml` | All FactIds in one file | +| `docs/wiki/authoring/monologue-guide.md` | N/A (authoring reference, not engine content) | Wiki-only | +| N/A | `content/districts/sova-transit/lines/terminal/dialogue.yaml` | Engine-only (authored YAML) | + +The mapping is consistent but not 1:1. Some wiki pages are references that don't produce engine content. Some engine content (line pools) doesn't have a wiki counterpart — it IS the content. + +--- + +*Tyre out. Ready for cross-pollination in Round 2.* diff --git a/docs/workshops/wiki-review/round2-gestalt.md b/docs/workshops/wiki-review/round2-gestalt.md new file mode 100644 index 000000000..2ea172f42 --- /dev/null +++ b/docs/workshops/wiki-review/round2-gestalt.md @@ -0,0 +1,634 @@ +# Round 2 — Gestalt (Systems Design) + +*cracks knuckles* + +Five tensions to reconcile. Let me work through each one. + +--- + +## 1. Content Directory Convergence (Gestalt + Tyre) + +I read Tyre's proposal carefully. We agree on ~80% of the structure. Let me map where we align, where we differ, and what the converged structure should be. + +### Where We Agree + +| Area | Consensus | +|------|-----------| +| Global/district split | Global content (factions, tech, contraband, knowledge) separate from per-district content | +| Districts as atomic pack | `districts/{district-slug}/` is the content unit | +| Per-district NPCs | `districts/{slug}/npcs/{npc}.yaml` | +| Per-district locations | `districts/{slug}/locations/{location}.yaml` | +| Schema files | Validation schemas at the top level | +| Mod overlay | Additive by default, explicit override declarations | + +### Where We Differ (and Resolution) + +| My Proposal | Tyre's Proposal | Resolution | Why | +|---|---|---|---| +| `_global/` | `global/` | **Tyre wins: `global/`** | Underscore prefix is for infrastructure (`_schema/`, `_meta/`), not game content. Factions are game content. | +| Separate `dialogue/` and `monologue/` dirs | `lines/{location}/` with files inside | **Tyre wins: `lines/`** | Cleaner. `lines/terminal/dialogue.yaml` + `lines/terminal/monologue-smuggler.yaml` keeps everything per-location without parallel directory trees. | +| `triangles/` as standalone dir | `templates/` (social site defs that include triangle specs) | **Tyre wins: `templates/`** | Triangles are a property of social sites, not standalone objects. A triangle definition makes no sense without its template context. | +| `facts/` per district for local FactId instances | All facts in `global/knowledge/facts.yaml` | **I push back here.** See below. | +| `regions/` for style guides | Not addressed | **Add `global/regions/`** | Miri's Krenn brief needs a home. Regional style guides are global (same culture applies wherever that culture exists). | +| No manifest | `_meta/manifest.yaml` | **Tyre wins: add `_meta/`** | Needed for pack metadata, load order, versioning. | + +### The Local Facts Question + +Tyre puts all 24 FactIds in `global/knowledge/facts.yaml`. I disagree for one specific category: **spatial/location facts**. + +`contraband.ring_exists` is a legitimate global definition — the CONCEPT of a smuggling ring is vocabulary. But `location.corridor_b7_restricted` is meaningless outside Sova Transit District. If we add a second district, it will have its OWN restricted corridors with different names. These are per-district facts. + +**Proposed split:** + +``` +global/knowledge/ + facts.yaml # Abstract/universal FactIds: contraband.*, world.*, relationship.* + entity-attributes.yaml # 14 canonical keys + relationship-states.yaml + +districts/sova-transit/ + facts.yaml # District-specific FactIds: location.*, investigation.*, progress.* +``` + +The engine merges both at load time. Content authors know: "Am I defining a concept (global) or a location-specific observation (district)?" + +This also solves Nigel's randomizer requirement — per-seed variation can swap which district facts exist without touching global vocabulary. + +### Converged Structure + +``` +content/ + _meta/ + manifest.yaml + load-order.yaml + + _schema/ + npc.schema.yaml + location.schema.yaml + faction.schema.yaml + template.schema.yaml + fact.schema.yaml + dialogue.schema.yaml + monologue.schema.yaml + district.schema.yaml + + global/ + factions/ + concord-assembly.yaml + lattice-commission.yaml + syndics.yaml + guardians-of-autonomy.yaml + veil-institute.yaml + the-unbound.yaml + technology/ + neural-lattice.yaml + meridian.yaml + span-gates.yaml + founder-gates.yaml + clone-transfer.yaml + severance-tech.yaml + contraband/ + lattice-components.yaml + medical-grade-replacements.yaml + severance-equipment.yaml + knowledge/ + facts.yaml # Global/abstract FactIds only + entity-attributes.yaml + relationship-states.yaml + regions/ + krenn-system.yaml # Miri's regional style guide + + districts/ + sova-transit/ + district.yaml # Metadata, location list, faction presence, ambient config + facts.yaml # District-specific FactIds + starting confidences + npcs/ + kael-davan.yaml + sera-venn.yaml + voss.yaml + ... + locations/ + the-terminal.yaml + the-last-shift.yaml + maintenance-corridors.yaml + templates/ + logistics-hub.yaml # Social site: role slots, triangles, NPC assignments + bar.yaml + smuggling-ring.yaml + lines/ + terminal/ + dialogue.yaml + monologue-smuggler.yaml + monologue-detective.yaml + bar/ + dialogue.yaml + monologue-smuggler.yaml + monologue-detective.yaml + corridor/ + dialogue.yaml + monologue-smuggler.yaml + monologue-detective.yaml +``` + +### Mod Overlay Mechanics (Accepting Tyre's) + +Tyre's three overlay operations (ADD / REPLACE / MERGE) are correct and better specified than mine: +- **Entity definitions REPLACE** (whole file — no partial NPC patches) +- **Line pools MERGE** (append, deduplicate by `id`, last-writer-wins on collision) +- **New files ADD** (no conflict) + +**One addition to Tyre's spec:** I want to address his open question about mod pool flooding. If a mod adds 50 dialogue lines to a 20-line pool: + +**Proposal: Weight tagging.** Each content pack declares a `weight` in its manifest (default: 1.0). The line selection system uses weight as a probability multiplier. Base content at weight 1.0, a mod at weight 0.3 means mod lines are 30% as likely to be selected as base lines. This lets modders add volume without dominating the pool. + +```yaml +# In mod manifest +id: extra-bartender +weight: 0.5 # Mod lines selected at half the rate of base lines +``` + +### Tyre's Other Open Question: District vs Template as Atomic Pack + +Tyre asked: "Is `district` the right atomic content pack unit? Or should it be `template` (social site)?" + +**Answer: District.** Here's why: + +Templates share NPCs (bridge NPCs span social sites). If a modder adds a new NPC to the bar, that NPC might reference Hub NPCs by name, or participate in a cross-template triangle. Packing at the template level would mean the mod has to patch multiple template packs to add one NPC — that's worse for modders. + +District is the natural unit because triangles and bridge connections are district-internal. A mod that adds "a new bar NPC" is really adding "a new NPC to Sova Transit District who happens to frequent the bar." The mod touches `districts/sova-transit/` and everything resolves within that directory. + +--- + +## 2. PC-as-NPC Converged Specification (Gestalt + Paula) + +Paula and I are saying the same things at different granularity. She organized by deliverable type (required/optional/PC-only), I organized by data structure (transfer/transform/generate). Let me merge. + +### The Full PC-Candidate NPC Spec + +An NPC that can be upgraded to a PC must have ALL standard Tier 2+ fields PLUS a `## PC Upgrade` appendix containing structured data. + +#### Fields from Standard NPC Brief (Required for ALL Tier 2+) + +These 12 fields transfer directly into the PC brief (Paula's list, confirmed): + +| # | Field | Source Axis | Transfer Type | +|---|---|---|---| +| 1 | Name | Core Identity | Direct | +| 2 | Age | Core Identity | Direct | +| 3 | Role | Core Identity | Direct → starting occupation + access | +| 4 | System Origin | Core Identity | Direct → cultural context | +| 5 | Lattice Tier | Core Identity | Direct → perception mode caps (D-017) | +| 6 | Employer | Core Identity | Direct → faction tag + cover | +| 7 | Want (Primary) | Axis 1 | Transform → orientation monologue seed | +| 8 | Want (Secondary) | Axis 1 | Transform → emotional anchor | +| 9 | Relationships (all) | Axis 3 | Transform → starting EntityKnowledge + RelationshipState | +| 10 | Daily Routine | Axis 5 | Transform → default schedule (deviations = player agency) | +| 11 | Information Inventory | Axis 6 | Transform → starting FactId confidences + knowledge graph | +| 12 | Faction | Inferred | Direct → access tier baseline | + +#### Fields That Transform at Upgrade (Derivable or Design-Choice) + +| # | Field | Status | Resolution | +|---|---|---|---| +| 13 | Secret/Vulnerability | **Partially required** | The PC knows their own secret. For smuggler: ring membership IS the secret (known to player, hidden from world). For detective: personal motive for requesting posting. The NPC brief provides the secret; the upgrade inverts it from "hidden from observer" to "player's burden to manage." | +| 14 | Contentment | Generated | From Want + Relationships + archetype. Smuggler starts moderate-low. Detective starts moderate. | +| 15 | Personality Traits | **Preset per archetype for v0.1** | Paula recommended this, I agree. Player-chosen personality is a v0.2+ feature. | +| 16 | Tell System | **Inverted** | This is the critical transform. The PC's tells become NPC-observable. Gore's insight applies: tells are how the world reads the PC. "You always check your lattice before lying" — the NPC knows. The PC doesn't control this mechanically; it fires when the PC takes certain actions. | +| 17 | Skill Set | Derived | From role + archetype. | +| 18 | Combat Tag | Derived | From archetype. | + +#### PC Upgrade Appendix (New Fields, Required for PC-Candidate NPCs) + +This is the section that must be added to any NPC who might become a PC. It's where Paula's 6 PC-only fields and my structured formats converge: + +**Field 1: Starting EntityKnowledge Table** + +```yaml +pc_upgrade: + starting_knowledge: + entities: + - target: kael_davan + state: Friendly + confidence: KnowsDetails + attributes: + name: "Kael Davan" + role: "dock worker" + faction: "ring member" # smuggler knows this + trust_level: "trusted" + relationship_type: "close colleague" + routine_pattern: "morning shift 06:00-14:00, bar after shift" + behavior_flags: "reliable,punctual" + - target: voss + state: Known + confidence: KnowsOf + attributes: + name: "Voss" + role: "shift supervisor" + faction: "civilian" # smuggler thinks this + trust_level: "reliable" + relationship_type: "authority figure" + # ... all known NPCs +``` + +**Field 2: Starting FactId Inventory** + +```yaml + starting_facts: + - id: contraband.ring_exists + confidence: KnowsDetails + - id: contraband.lattice_components + confidence: KnowsDetails + - id: location.corridor_b7_restricted + confidence: KnowsDetails + - id: world.shift_schedule + confidence: KnowsDetails + - id: relationship.ring_membership + confidence: KnowsDetails + - id: investigation.manifest_discrepancy + confidence: null # smuggler doesn't know about this + - id: contraband.severance_tech + confidence: null # smuggler doesn't know about this +``` + +**Field 3: Reverse Knowledge (Bidirectional)** + +This is my key contribution. Every NPC who knows the PC needs their EntityKnowledge entry defined: + +```yaml + known_by: + - observer: kael_davan + state: Friendly + attributes: + name: "{PC Name}" + role: "dock worker" + faction: "ring member" + trust_level: "trusted" + relationship_type: "close colleague" + - observer: voss + state: Known + attributes: + name: "{PC Name}" + role: "dock worker" + faction: "civilian" + trust_level: "reliable" + - observer: hael + state: Known + attributes: + name: "{PC Name}" + role: "dock worker" + faction: "civilian" + trust_level: "uncertain" # knows PC, doesn't know ring + - observer: lera_sessik + state: Known + attributes: + name: "{PC first name}" + role: "bar regular" + trust_level: "reliable" +``` + +**Why this matters:** Without reverse knowledge, NPCs don't know the player exists at game start. Kael can't say "There you are. Good — I was starting to worry" unless Kael's knowledge graph already contains an entry for the PC with `state: Friendly`. Ozzie's "walking into Cheers" moment depends entirely on these reverse entries being populated. + +**Field 4: Access Tier Map** + +```yaml + access_tier_map: + kael_davan: insider + voss: peer + lera_sessik: peer + hael: peer + sera_venn: public # smuggler doesn't know Sera well + maret_korr: insider # hub colleague + drin: insider # hub colleague + torek_lintar: peer # bar regular +``` + +**Field 5: Orientation Monologue Hook** + +```yaml + orientation: + monologue_pool: "smuggler" # which pool to activate + starting_want_text: > + Protect the operation and the people in it. + The money's good and Kael makes it manageable. + But Nils keeps pushing and Hael keeps worrying. + first_monologue_triggers: + - trigger: enter_location + location: terminal + text_ref: terminal_m_001 # "Morning shift. Recycled air and cargo lubricant." +``` + +**Field 6: Agency Boundaries** + +```yaml + agency: + can_access: [terminal, bar, corridor_b7, residential] + restricted_without_justification: [commission_kiosk] # smuggler has no Commission business + default_cover: "dock worker on shift" + cover_breaks_when: "present in restricted areas during non-shift hours, or interacting with Commission systems" +``` + +### Validation Requirement + +Paula's Step 5 is critical: **PC's starting knowledge must not contradict any NPC's information inventory.** If the PC "knows" Kael is in the ring, and Kael's Information Inventory says "nobody outside the ring knows" — that's consistent (PC IS ring). But if the PC "knows" Sera has unreported evidence, and Sera's profile says "nobody knows" — that's a knowledge graph violation. + +The schema validator (Tyre's pipeline) should check this: +``` +For each (target, attribute) in pc_upgrade.starting_knowledge.entities: + assert target NPC exists in district roster + assert attribute values are consistent with target NPC's Information Inventory + +For each (observer, attribute) in pc_upgrade.known_by: + assert observer NPC exists in district roster + assert observer's Information Inventory is compatible with their knowing these attributes about PC +``` + +--- + +## 3. FRIEND Pool: Size and Cost + +Nigel wants the FRIEND drawn from a pool. Gore agrees but insists THE FRIEND is never procedurally generated — the content is authored, the selection is randomized. I agree with both. + +### Pool Size Analysis + +| Pool Size (per character) | Total Tier 1 NPCs | Additional Authored Lines | Replayability Multiplier | v0.1 Feasible? | +|---|---|---|---|---| +| 1 (current: Kael, Sera) | 2 | 0 | 1x (no variation) | Yes (done) | +| 2 per character | 4 | ~140-200 | 4x (2 smuggler x 2 detective) | Stretch | +| 3 per character | 6 | ~280-400 | 9x | v0.2 target | + +### The Graceful Degradation Insight + +Here's what makes the pool work without exploding content costs: **FRIEND candidates that aren't selected as FRIEND still exist as excellent Tier 2 NPCs.** + +If Kael is selected as the smuggler's FRIEND, Renn (the other candidate) is just a courier — a well-written one with a rich profile, but his contradiction arc isn't activated by the storyteller. His Phase 1 warmth exists. His tells exist. His secret exists. But the storyteller doesn't trigger the "observe contradiction in restricted area" event for Renn. + +This means: +1. Every FRIEND candidate is always present in the world at full Tier 1 quality +2. Only the SELECTED FRIEND gets the contradiction arc ACTIVATED +3. The unselected candidates are the best Tier 2 NPCs in the district — richer than normal because they were written at Tier 1 depth +4. On replay, the player may encounter an NPC they KNOW has a secret (from a previous playthrough where that NPC was FRIEND) but whose arc isn't active. Gore's dramatic irony! + +### Authoring Cost Per Additional FRIEND Candidate + +Let me be precise about what "one additional FRIEND candidate" costs: + +| Deliverable | Lines/Pages | Time Estimate | +|---|---|---| +| Full Tier 1 profile (10-axis, all sections) | ~2 pages | 3-4 hours | +| 70-100 authored dialogue/monologue lines | 70-100 lines | 8-12 hours | +| Contradiction arc (5 phases) | Part of profile | Included above | +| Tell progression (3-4 stages) | Part of profile + lines | Included above | +| Dual-lens notes for BOTH characters | ~0.5 pages | 1-2 hours | +| PC Upgrade appendix | ~0.5 pages YAML | 1-2 hours | +| Reverse knowledge entries from ALL NPCs | ~0.25 pages YAML | 1 hour | +| Cross-character authored relationship stubs (FRIEND↔PC) | 5-10 lines | 1-2 hours | +| **Total per candidate** | **~3 pages + 70-100 lines** | **~15-22 hours** | + +### v0.1 Recommendation + +**Ship with 1 FRIEND per character (Kael, Sera).** But architect the pool system from day one: +- The `templates/` YAML includes a `friend_pool` field listing eligible NPC IDs +- The seed selects from this pool at game start +- v0.1 pool has 1 entry per character — functionally identical to current hardcoded behavior +- v0.2 adds second candidates without any architectural change + +```yaml +# In templates/logistics-hub.yaml (or a district-level config) +friend_pools: + smuggler: + - npc: kael_davan + contradiction_module: kael_exit_attempt + # v0.2: add renn or other candidate here + detective: + - npc: sera_venn + contradiction_module: sera_concealment + # v0.2: add second candidate here +``` + +### Gore's Constraint: Authored Relationship Depth + +Gore correctly insists the PC-FRIEND relationship needs authored warmth, not just `state: Friendly`. Each FRIEND candidate needs specific relationship stubs for EVERY possible PC upgrade candidate: + +- If the pool has 2 smuggler FRIENDs (Kael, Renn) and the PC could be any of 2-3 smuggler archetypes, we need: Kael↔PCa, Kael↔PCb, Renn↔PCa, Renn↔PCb relationship stubs. Each stub is 5-10 authored lines of shared history. + +This is a combinatorial cost. At pool size 2x2: 4 stubs (20-40 lines). At 3x3: 9 stubs (45-90 lines). Manageable but worth tracking. + +--- + +## 4. Triangle 1 Fix: The Nils-vs-Voss Escalation Decision + +Paula and I both flagged Hub Power (T1) as the weakest triangle. The core problem: Nils is off-stage, so the smuggler never mediates a real-time confrontation. The triangle describes tension but doesn't produce a FORK. + +### The Decision Moment: Volume Escalation + +**Setup (storyteller-triggered, mid-game):** + +Nils sends word through Renn that the next shipment is double volume. A connected system has a supply window — miss it and the opportunity is gone for months. Voss refuses to create the necessary schedule gap: "Two workers short on the same shift twice in a row? Maret will flag it. I won't do it." + +Both sides appeal to the smuggler. + +### The Fork + +| Option | Action | Immediate Effect | Cascade to T2 | Cascade to T5 | Detective Observability | +|---|---|---|---|---|---| +| **A: Side with Nils** | Tell Voss to make it work, or work around Voss | Voss creates gap resentfully, does it clumsily | Maret notices the schedule anomaly more easily → T2 heats up | Pell sees higher volume, more risk → Pell's wavering accelerates | Schedule anomaly is louder signal. Detective monologue: "Third schedule adjustment this cycle. Pattern." | +| **B: Side with Voss** | Tell Renn to relay: "Not this cycle" | Nils is displeased, questions smuggler's loyalty | Voss is relieved, cooperates more → T2 stays cool | Ring internal tension rises from above → different pressure path on Pell | Schedule looks clean. Detective has less to work with. Smuggler's ring standing drops. | +| **C: Split the route** | Propose half-volume through normal route, half through untested alternative | Partial success. New route = new exposure surface | Maret sees half the anomaly (borderline noticeable) | Ring members stretched thinner → more behavioral tells across the board | Activity in unexpected area. Detective monologue: "Cargo movement in Section C? That's not on any manifest." | + +### Mechanical Expression + +```yaml +# In templates/logistics-hub.yaml or a storyteller module +decision_node: + id: volume_escalation + trigger: storyteller_mid_game # fires between minute 12-18 + setup: + message_from: nils_davan # off-stage, delivered via renn + message_text: "Double volume. Next cycle. Make it happen." + voss_response: "I won't short the schedule again. Maret's watching." + options: + - id: side_with_nils + label: "Tell Voss to make it work" + effects: + - npc: voss + attribute_change: { trust_level: "resentful", exposure_risk: "escalating" } + - npc: maret_korr + behavior_flag_add: "noticed_schedule_gap" + - triangle: worried_knowledge + tension_increase: 2 + - triangle: informant_question + tension_increase: 1 + - investigation_signal: "schedule_anomaly_visible" + - id: side_with_voss + label: "Push back: not this cycle" + effects: + - npc: voss + attribute_change: { trust_level: "relieved", cooperation: "improved" } + - player: + attribute_change: { loyalty_assessment_by_nils: "questioned" } + - triangle: worried_knowledge + tension_increase: 0 + - triangle: informant_question + tension_increase: 1 # pressure comes from above instead + - investigation_signal: null # clean schedule, less detective evidence + - id: split_route + label: "Split: half normal, half new route" + effects: + - npc: voss + attribute_change: { trust_level: "uncertain" } + - location: section_c + flag: "unexpected_cargo_activity" + - triangle: worried_knowledge + tension_increase: 1 + - triangle: informant_question + tension_increase: 1 + - investigation_signal: "new_route_observable" +``` + +### Why This Fixes T1 + +1. **The smuggler CHOOSES.** Not "caught between" — actively deciding which side to favor. Real consequence, can't have both. +2. **Cascading consequences.** Each choice ripples into T2 and T5. The detective's experience changes based on which option the smuggler picked (in NPC mode, the AI picks based on the NPC's personality/loyalty balance). +3. **Nils is present-by-proxy.** The message arrives through Renn. Nils doesn't need to be physically present — the DEMAND is present. The smuggler's response defines their relationship with an off-stage power. +4. **Detective observability differs per choice.** Option A is loudest (easiest for detective). Option B is quietest. Option C creates a new thread. This means the smuggler's choice shapes the detective's investigation difficulty on replay. + +### Additional Fix: Nils Partial Presence + +I still recommend one brief Nils comm interaction in v0.1 — even a text-only lattice message that the smuggler receives and must respond to. This costs ~5-8 authored lines and makes the off-stage vertex feel real. The response choices could mirror or foreshadow the volume escalation decision. + +--- + +## 5. Routine Format + Cultural Patterns + +My Round 1 proposed a structured `routine:` YAML block. Miri's Krenn brief introduces cultural patterns that the routine should accommodate: shift-end bar culture, kuum (transition drink), kolm (card game), 5+2 work cycles. + +### The Problem + +The engine needs parseable schedule data (time, location, activity). Cultural flavor is for writers, not parsers. If I embed `cultural_note` fields in the YAML, I'm mixing concerns — the schedule system ignores them, and writers have to read through engine data to find authoring guidance. + +### Solution: Two Layers + +**Layer 1: Engine-readable routine (YAML)** + +```yaml +routine: + cycle: "5+2" # work days / rest days + schedule: + work_day: + - time: "06:00-06:30" + location: terminal + activity: shift_startup + - time: "06:30-10:30" + location: terminal + activity: work + - time: "10:30-11:00" + location: terminal_breakroom + activity: break + - time: "11:00-14:00" + location: terminal + activity: work + - time: "14:00-14:30" + location: terminal + activity: shift_end + - time: "14:30-16:00" + location: bar + activity: social + - time: "16:00-22:00" + location: residential + activity: home + rest_day: + - time: "09:00-12:00" + location: residential + activity: home + - time: "12:00-14:00" + location: bar + activity: social + - time: "14:00-22:00" + location: residential + activity: home + deviations: + - trigger: ring_operation + replaces: "22:00+" + location: corridor_b7 + frequency: "1-2x per week" + - trigger: volume_escalation # the T1 decision node + replaces: "14:00-14:30" + location: corridor_b7 + frequency: "once (event-driven)" +``` + +**Layer 2: Cultural context (prose, in the wiki NPC profile)** + +Under the Daily Routine section, AFTER the YAML block: + +> **Cultural context (Krenn System):** +> - Kael's shift startup involves grabbing leib from the canteen and eating standing — Krenn workers don't sit for breakfast +> - Break at 10:30 is social: lunch with the smuggler (if applicable), shared kalaa and supp +> - "Shift-end" at the bar means ordering kuum first (the spiced transition drink), then switching to grain spirit if staying. Kael usually shifts to the bar 2-3 days per work cycle +> - Hael expects Kael home by 17:00 on non-bar days. Late arrivals trigger Hael's worry axis +> - Ring operations happen during night shift transitions (22:00-23:00 window) — Kael uses "overtime" as cover to Hael + +This gives writers everything they need for dialogue and monologue ("Kael orders kuum" → Mellanie knows what that is from Miri's brief) while the engine reads only the clean YAML schedule. + +### How This Works With Miri's Specific Cultural Patterns + +| Miri's Pattern | Where It Lives | Who Uses It | +|---|---|---| +| 5+2 work cycle | `routine.cycle: "5+2"` in YAML | Schedule system | +| Shift-end bar migration | `schedule.work_day` entry with `location: bar` after shift | Schedule system + monologue triggers | +| Kuum as transition drink | Cultural context prose + Mellanie's menu + dialogue tags | Writers (not engine) | +| Kolm card game timing | `schedule.rest_day` entry at bar, OR deviation with `trigger: kolm_night` | Schedule system + event system | +| Leib/kalaa food | Cultural context prose | Writers (environmental text, dialogue flavor) | +| Greeting conventions (no verbal greeting, chin-lift) | NOT in routine — in Miri's regional brief | Writers (dialogue `notes` field) | + +### Style Guide Mandate + +Every NPC routine section in the wiki should contain: + +1. **YAML block** — engine-readable, schema-validated, per-tier minimum entries: + - Tier 3: 3+ time-location entries (minimum: work, social, home) + - Tier 2: 5+ entries with `work_day` and `rest_day` split + - Tier 1: 7+ entries with deviations specified +2. **Cultural context paragraph** — prose annotations for writers, referencing the regional brief +3. **Deviation list** — what pulls the NPC off their routine, with triggers and frequencies + +The YAML block is the mechanical requirement. The cultural context is the authoring aid. Both are mandatory; neither replaces the other. + +--- + +## Cross-Cutting: Paula's Smuggler Attribute Vocabulary + +Paula proposed 5 smuggler-specific entity attribute keys. This is a strong proposal that I want to endorse and refine, because it directly addresses the "smuggler content pipeline is under-served" problem she identified. + +### Endorsed Keys (with mechanical integration) + +| Key | Values | What Drives It | What It Gates | +|---|---|---|---| +| `operational_reliability` | `reliable`, `slipping`, `compromised`, `unknown` | NPC behavior + ring event outcomes | Smuggler monologue tone, ring assignment willingness | +| `exposure_risk` | `low`, `escalating`, `critical` | Tells + detective proximity + NPC behavior | Smuggler tension monologue, ring operational decisions | +| `loyalty_assessment` | `solid`, `uncertain`, `wavering`, `turning` | Observation of NPC behavior over time | Smuggler dialogue options (confront vs. reassure), ring strategy | +| `leverage_held` | Freeform string (e.g., `"gambling debt"`, `"family secret"`) | Discovery through observation or conversation | Confrontation/pressure dialogue unlocks | +| `social_debt` | `they_owe_me`, `i_owe_them`, `mutual`, `none` | Relationship history (authored per NPC) | Favor-asking dialogue, cooperation likelihood | + +These give the smuggler's knowledge model parity with the detective's investigation attributes. The detective has `tell_observed`, `contradiction_flagged`, `secret_held`, `secret_confidence`. The smuggler now has `operational_reliability`, `exposure_risk`, `loyalty_assessment`, `leverage_held`, `social_debt`. + +Both characters build profiles of NPCs. The detective's profile is investigative. The smuggler's profile is operational/social. Different lenses on the same people — which is exactly the game's thesis. + +**Implementation note for Tyre:** These 5 keys go into the entity-attributes schema alongside the existing 14. The `known_attributes` BTreeMap already supports arbitrary keys — no code change needed, just schema expansion and content authoring. + +--- + +## Summary: Decisions for Recording + +| # | Decision | Type | Status | +|---|---|---|---| +| 1 | Converged content directory structure (Gestalt+Tyre) | Architecture | **Propose** | +| 2 | District-specific facts split from global facts | Architecture | **Propose** | +| 3 | Mod overlay: ADD/REPLACE/MERGE + weight tagging | Architecture | **Propose** | +| 4 | District (not template) as atomic content pack | Architecture | **Propose** | +| 5 | PC-candidate NPC spec: 12 required + 6 optional + 6 PC-only fields | Content spec | **Propose** | +| 6 | Reverse knowledge (bidirectional) as mandatory PC upgrade field | Content spec | **Propose** | +| 7 | FRIEND pool architecture: v0.1 = 1 per character, system supports N | Content pipeline | **Propose** | +| 8 | Volume Escalation decision node for Triangle 1 | Content design | **Propose** | +| 9 | Two-layer routine format: YAML (engine) + prose (writers) | Style guide | **Propose** | +| 10 | 5 smuggler-specific entity attribute keys (Paula's proposal, endorsed) | Knowledge model | **Propose** | diff --git a/docs/workshops/wiki-review/round2-gore.md b/docs/workshops/wiki-review/round2-gore.md new file mode 100644 index 000000000..2ade8f194 --- /dev/null +++ b/docs/workshops/wiki-review/round2-gore.md @@ -0,0 +1,258 @@ +# Round 2 — Gore (Cross-Pollination) + +Four tensions to address. I'll take them in the order that builds on itself. + +--- + +## 1. The FRIEND Pool — Nigel Is Right, and the Minimum Is Non-Negotiable + +Nigel and I said the same thing in different words. I said "THE FRIEND can never be procedurally generated. Write a pool of FRIEND-eligible NPCs at Tier 1 depth. Randomize the *selection*, not the *content*." Nigel said "THE FRIEND is drawn from a pool. 2-3 FRIEND candidates per character at launch." + +We agree. The architecture should support pool-based FRIEND selection from day one. The question is: what's the minimum authoring depth for a FRIEND candidate? + +**The minimum is full Tier 1. No exceptions. No shortcuts.** + +Here's why I won't budge on this. The FRIEND arc works because of *authored specificity*: + +- Kael's "looks left when lying" works because the player has learned to recognize it across 15 minutes of casual interaction. You can't template a tell. It has to be *this* person doing *this* thing. +- Sera's three departures work because each excuse is different, each is plausible, and the third fires the detective's training. That's precision pacing. Three authored moments, each slightly escalating. +- The Phase 5 contaminated trust works because *specific* warm interactions from Phase 1 are retroactively reread. "There you are. Good — I was starting to worry" hits differently after Corridor B-7. Generalized warmth wouldn't hit at all. + +A FRIEND candidate at Tier 2 depth — working profile, 40-60 lines, abbreviated tells — would be a FRIEND the player doesn't care about enough to feel betrayed by. The contradiction would be a plot point instead of an emotional wound. The color shift from green to amber would be information instead of heartbreak. + +**The cost is real.** Each additional FRIEND candidate is ~70-100 authored lines. Two candidates per character doubles the investment. Three candidates triples it. This is the most expensive content per NPC in the game. + +**The budget strategy:** + +| Version | Smuggler FRIEND Pool | Detective FRIEND Pool | Total Tier 1 NPCs | +|---------|---------------------|----------------------|-------------------| +| v0.1 | 1 (Kael) | 1 (Sera) | 2 | +| v0.2 | 2 (Kael + new) | 2 (Sera + new) | 4 | +| v1.0 | 3-4 per district | 3-4 per district | 6-8 per district | + +v0.1 ships with pool size 1 per character. The *system* supports pool selection. The *content* scales incrementally. Each new district in v0.2+ adds its own FRIEND candidates. The architecture never changes. The pool grows. + +**What about Nigel's "who's compromised" shuffle — varying which NPCs fill conspiracy roles per seed?** This is excellent for Tier 2 NPCs (the compromised inspector, the wavering member, the courier). Role-slot randomization is exactly right for the investigation scaffolding. But THE FRIEND role is categorically different from a conspiracy role. A conspiracy role is *functional* — who does what in the operation. THE FRIEND role is *emotional* — who do you trust, who betrays that trust. Functional roles can be shuffled. Emotional roles must be authored. + +Nigel's three-column replayability table (Seed A/B/C) is the right vision. I'm saying: the FRIEND column requires Tier 1 investment per entry. Every other column can use Tier 2 role-slot assignment. + +--- + +## 2. Complicity, Culture, and Miri's Masterwork + +Miri's Krenn System regional brief is the best work product in this workshop. I'm saying this not because it's detailed — though it is — but because it *explains why the game works mechanically*. + +### The cultural immune system, made concrete + +In Round 1, I said cultural identity in this game is "the immune system of the community" and the detective is the foreign body. Miri's brief provides the biology: + +**Finnish-Estonian-Latvian reserve + working-class logistics culture + 180 years of station life = a community where minding your own business is the highest social virtue.** + +This isn't cultural decoration. This is the *mechanical substrate* that makes the ring viable and the detective's job hard: + +| Cultural Trait (Miri) | How It Protects the Ring | How It Obstructs the Detective | +|---|---|---| +| **Privacy as default** ("What you do off-shift is your business") | Nobody reports Torek's spending, Kael's late nights, Voss's schedule changes | NPCs won't volunteer personal information about other NPCs, even helpfully | +| **Labor solidarity** ("Workers cover for each other — a late arrival is clocked in on time") | The ring operates inside a pre-existing culture of mutual cover | The detective can't find allies willing to break solidarity norms | +| **First-name-primary social context** (institutional identity deemphasized) | Authority feels like an imposition, not a service | The detective will be "hard-named" (surname) for the entire v0.1 — a constant social marker of outsider status | +| **Earned trust through shared labor and time** ("No shortcut — no credential, no introduction") | New arrivals (Olin, the detective) are treated with polite distance that can last months | The detective cannot fast-track trust. Institutional credentials *reduce* trust. | +| **Greeting conventions** ("Greeting a stranger is slightly aggressive — it demands engagement") | Social norms prevent casual inquiry | The detective will misread Krenn reserve as hostility | +| **"Vakt" has been criminalized by usage** (Norwegian word for lookout, now ring operational slang) | The culture's own language has been co-opted by the criminal operation | Cultural substrate vocabulary creates insider/outsider speech markers | + +### Complicity isn't just individual — it's cultural + +Round 1, I argued the game's theme is complicity. Miri's brief reveals something deeper: **the complicity isn't just personal. It's structural.** + +Nobody in Sova Transit District *decided* to protect the ring. The culture did it for them. "Mind your own business" predates the ring by a century. "Workers cover for each other" is a labor solidarity norm, not a criminal conspiracy. "Don't ask about someone's finances" is a privacy value, not an obstruction of justice. + +The ring is a parasite on cultural virtues. That's what makes the moral calculus genuinely hard. The detective isn't just fighting criminals — they're fighting a community's *values*. Cracking the ring requires Krenn people to violate their own social norms: to volunteer information, to report a coworker, to cooperate with institutional authority, to use someone's surname in a context that signals betrayal. Every witness the detective turns is a person who has to *stop being Krenn* in the ways that matter. + +**This is the game's deepest thematic claim: the same values that make a community good — solidarity, privacy, trust, loyalty — are the values that enable its exploitation.** + +And the smuggler knows this. The smuggler doesn't exploit these values cynically. The smuggler IS these values. First-named, bar-regular, leib-eating, kolm-playing, "hüva"-saying, district-belonging. The smuggler's cover isn't a disguise. It's an identity. The smuggler IS Krenn. And Krenn, by being Krenn, protects the ring. + +### Mechanical expression + +How does this play? + +**Dialogue access tiers should encode cultural resistance.** Not just relationship-gated but culture-gated. Even a friendly NPC in Krenn culture doesn't discuss other people's business. The detective at `peer` access with Lera still can't get Lera to talk about Torek's spending — because in Krenn culture, talking about someone else's finances is hostile regardless of your relationship with the asker. The smuggler asking the same question gets a different response not because of trust level but because the smuggler is *from here* — the question lands differently in the cultural context. + +**Proposal:** Add a `cultural_gate` modifier to dialogue access. This isn't a new access tier — it's a modifier on existing tiers that reflects whether the asker is culturally inside or outside. The detective at `peer` with a cultural outsider modifier gets fewer disclosures than the smuggler at `peer` without it. Same access tier, different cultural context, different output. + +This is what I meant by "regional style guides must include social norms toward authority, privacy expectations, loyalty structures." Miri has now provided the content. What we need is the mechanical bridge: a system that reads these cultural norms and applies them to dialogue selection. + +--- + +## 3. The Smuggler Lens Gap — The More Central Experience + +Paula is right. The wiki is detective-shaped. The knowledge system tracks investigation: tells, contradictions, FactId progression, pattern recognition. The smuggler's equivalent — social navigation, operational management, moral reckoning — has no parallel mechanical vocabulary. + +But I want to push beyond Paula's diagnosis. She says the smuggler is "under-served." I'm saying the smuggler is the **more thematically central** experience, and its under-specification is the wiki's biggest gap. + +### Why the smuggler matters more + +If the game is about complicity, the detective *discovers* complicity. The smuggler *embodies* it. + +The detective's journey is: "Something is wrong here. I'll find out what." That's investigation. It has clear structure — observe, notice, follow, discover, confront. It maps to familiar game mechanics and to clear data structures. + +The smuggler's journey is: "I know what's wrong here. I'm part of it. What do I do now?" That's moral navigation. It has no familiar game mechanic analogue. There's no "evidence log" for guilt. There's no "clue board" for complicity. The smuggler's experience is relational, emotional, and fundamentally about *the cost of participation*. + +The detective asks: "Who did this?" +The smuggler asks: "What am I becoming?" + +That second question is harder to model, harder to author, and harder to play. It's also the question the game exists to ask. + +### Paula's attributes need reframing + +Paula proposes smuggler-specific attributes: `operational_reliability`, `exposure_risk`, `loyalty_assessment`, `leverage_held`, `social_debt`. These are good, but they're surveillance tools with different names — the smuggler assessing their network the way the detective assesses suspects. That frames the smuggler as an investigator of their own operation. Which is partly true. But it misses the emotional core. + +The smuggler's knowledge model should track not just *operational status* but *moral cost*. Here's what I'd add to Paula's list: + +| Attribute | What It Tracks | Example | Why It Matters Thematically | +|---|---|---|---| +| `moral_weight` | How much does this relationship/action cost the smuggler ethically? | Lying to Hael: `heavy`. Moving containers: `manageable`. | This is the contentment axis made granular. The accumulation of moral weight IS the smuggler's declining contentment. | +| `cover_integrity` | How well is the smuggler's mundane persona holding? | After Kael's contradiction: `compromised`. After a clean shift: `stable`. | The detective observes this as behavioral tells. The smuggler experiences it as stress. Same data, different lens. | +| `loyalty_conflict` | When two loyalties pull in opposite directions | Nils demands higher volume + Hael is worried = `acute`. Kael asks for help + ring security says no = `choosing`. | This is where the smuggler's decisions live. Every loyalty conflict is a fork. | + +And I'd rename Paula's `operational_reliability` to something that doesn't sound like a performance review. Maybe `trust_read` — the smuggler's gut assessment of whether someone will hold. That's more personal. That's how you think about colleagues you're risking prison with. + +### The "Is this enough?" framework for the smuggler + +In Round 1, I proposed adding a "Thematic Question" field to NPC profiles — each character's answer to "Is this enough?" The smuggler's answer structures their entire experience: + +**Game start:** "It's enough. The money's good, the work is manageable, Kael's reliable, the team is solid." + +**Mid-game:** "It's not enough. The guilt about Hael is corrosive. The escalation makes every shift feel riskier. Kael is acting strange. The detective is asking questions." + +**Late-game:** "Nothing is enough. I can't go back to ignorance. I can't stay where I am. I can only choose which compromise I can live with." + +That trajectory — from "enough" through "not enough" to "there is no enough" — IS the smuggler's arc. The detective has an investigation arc with phases. The smuggler has a moral arc with phases. Both need the same mechanical scaffolding (phased progression, monologue tone shifts, dialogue unlocks), but the content is fundamentally different. + +**What the smuggler needs that the detective already has:** + +1. **Moral arc phases** (parallel to investigation phases): Comfort → Doubt → Reckoning → Compromise. Each phase shifts monologue tone, dialogue options, and the smuggler's internal `moral_weight` accumulation. +2. **FactId parallels for moral knowledge**: The detective has `investigation.manifest_discrepancy` at Suspects → KnowsDetails. The smuggler needs `complicity.cost_to_hael` at `manageable` → `unsustainable` → `unbearable`. These aren't facts about the world — they're facts about what participation costs. +3. **Smuggler-specific monologue triggers**: The detective has `observe_anomaly` and `discover_evidence`. The smuggler needs `moral_pang` (triggered when lying to someone, helping move cargo, seeing Hael alone at the bar) and `loyalty_test` (triggered when two obligations conflict). + +Paula, Mellanie — this is the content gap that matters most. The smuggler experience won't feel like a real game until the moral navigation has the same mechanical depth as the investigation. + +--- + +## 4. Hael — Not Tier 1. Something New. + +Ozzie called Hael the best character. I called Hael the masterpiece. Both of us are right, and both of us are wrong about the solution. + +### Why Tier 1 is the wrong answer + +The Tier 1 template requires: contradiction arc (5 phases), tell progression (4+ tells), observable secret, `contradiction_flagged` attribute, confrontation paths, dual-lens notes with mechanical integration. Tier 1 is designed for NPCs who are *hiding something* — characters whose concealment creates the player's discovery arc. + +Hael isn't hiding anything. + +That's the point. That's what makes Hael devastating. In a district where *everyone* is concealing something — Kael's ring membership, Sera's unreported evidence, Voss's schedule manipulation, Lera's willful ignorance, Drin's gambling debt, Maret's private log — Hael is the one person who is exactly what they appear to be. A teacher. A partner. A person who is worried because the person they love is lying to them, and they can't figure out why. + +Giving Hael a secret would destroy the character. Making Hael a Tier 1 NPC with a contradiction arc would turn Hael into another puzzle to solve. And that would lose the thing that makes Hael work: **Hael is not a puzzle. Hael is a mirror.** + +### THE MIRROR — a new pattern + +I'm proposing a new character archetype alongside THE FRIEND. + +**THE FRIEND** is the character you trust who turns out to be hiding something. The discovery of their secret is the emotional centerpiece. + +**THE MIRROR** is the character who is exactly what they appear to be — and whose transparency reveals everyone else's dishonesty by contrast. THE MIRROR doesn't have a contradiction arc because there IS no contradiction. THE MIRROR's power is that every interaction with them becomes a test of the player's own integrity. + +When the smuggler talks to Hael: +- Hael says: "Kael was home at midnight again. Said it was overtime. There's no overtime posted this week — I checked." +- The smuggler knows the truth. The smuggler cannot say the truth. +- The player feels the weight of their own complicity. Not because Hael is manipulating them. Because Hael is *honest*, and honesty in a dishonest world is the most powerful force in the game. + +When the detective talks to Hael: +- Hael says: "Something's wrong. I don't know what. I just want Kael to talk to me." +- The detective sees a potential source. Hael's worry is actionable intelligence. +- The player feels the dissonance between professional utility and human empathy. Using Hael is effective and monstrous. + +THE MIRROR doesn't need: +- A contradiction arc (there's no contradiction to discover) +- A tell system (Hael's behavior is transparent — worry is visible, not concealed) +- A `contradiction_flagged` attribute (nothing to flag) + +THE MIRROR needs: +- **Tier 1 authored depth for emotional impact.** Full voice samples, full monologue impact on both characters, full relationship texture. Hael's dialogue must be as carefully crafted as Kael's or Sera's. +- **~50-70 authored lines.** Fewer than THE FRIEND (no confrontation paths, no post-contradiction phase) but substantially more than standard Tier 2 (need to carry the emotional weight across the full vertical slice). +- **Monologue impact at FRIEND density.** Both characters should have 10-15 monologue lines about Hael. The smuggler's monologue about Hael should be the most emotionally loaded content in the game. "Hael's alone again. Waiting for someone who isn't coming. I know where Kael is. I can't—" Cut off. One breath. Devastating. +- **No dual-lens confrontation paths.** Instead: dual-lens *guilt paths*. The smuggler's monologue when lying to Hael. The detective's monologue when using Hael as leverage. These aren't confrontation options — they're internal reckonings. +- **Presence as atmosphere.** Hael should appear at the bar regularly, consistently, predictably. Hael checking the door. Hael saving a seat for Kael. Hael talking to Sera about the kids. Hael existing as a reminder of what normal life looks like — the life the smuggler is endangering and the detective is disrupting. + +### THE MIRROR specification + +``` +Pattern: THE MIRROR +Purpose: Honest character whose transparency reveals others' dishonesty +Emotional function: Guilt amplifier (smuggler), empathy test (detective) +Template requirements: + - Full Core Identity block + - 7 of 10 axes (Want, Relationships, Routine, Information, + Contentment, Personality, Skills — NO Secret, NO Tolerance + threshold as breaking point, NO Tell system) + - Voice samples: 5 moods (worried, hopeful, tired, warm, confused) + - Monologue lines per character: 10-15 (FRIEND-level density) + - Dialogue lines: 30-40 authored (no generation expansion) + - No contradiction arc + - No `contradiction_flagged` attribute + - Dual-lens notes focused on guilt/empathy, not investigation +``` + +### Content depth comparison + +| | THE FRIEND (Tier 1) | THE MIRROR (new) | Standard Tier 2 | +|---|---|---|---| +| Total authored lines | 70-100 | 50-70 | 40-60 | +| Monologue per character | 10-15 | 10-15 | 5-8 | +| Contradiction arc | 5 phases | None | None | +| Tell system | 4+ tells | None | 2-3 tells | +| Secret | Deep + surface | None | Yes | +| Generation expansion | None (all authored) | None (all authored) | 4x | +| Emotional function | Trust → betrayal | Guilt amplification | Atmospheric / informational | + +Hael is the first MIRROR. The pattern is reusable: every district should have one character who is exactly what they seem. The honest person. The civilian. The one who gets hurt because everyone else is playing games. In a game about complicity, THE MIRROR is the character who shows you what complicity costs the people who didn't choose it. + +--- + +## Synthesis: What These Four Tensions Reveal + +The four questions the team lead asked me to address turn out to be one question wearing four masks: + +**What is the relationship between the game's mechanical systems and its emotional truth?** + +1. The FRIEND pool question is about whether emotional depth can be systematized. Answer: the system (pool selection) can be generalized. The content (authored lines, tells, contradiction beats) cannot. Emotion doesn't template. + +2. The cultural identity question is about whether setting can do mechanical work. Answer: yes — Miri's Krenn culture IS the difficulty gradient, IS the social camouflage, IS the reason the ring survives. Culture is a game system, not a paint job. + +3. The smuggler lens gap is about whether moral experience can be modeled with the same tools as investigation. Answer: partly. The tools exist (attributes, monologue triggers, phased arcs). But the *vocabulary* needs to shift from information-discovery to cost-accounting. The smuggler's knowledge graph isn't "what I've found out" — it's "what I've become." + +4. The Hael question is about whether emotional impact requires mechanical complexity. Answer: the opposite. Hael's power is simplicity. No secrets, no tells, no arc. Just a person being honest in a world full of liars. Sometimes the most powerful game mechanic is the absence of one. + +--- + +## Decisions I Recommend Recording + +| # | Decision | Type | Rationale | +|---|----------|------|-----------| +| 1 | **THE FRIEND pool architecture**: System supports pool-based FRIEND selection per seed. v0.1 ships with pool size 1 per character. Content expands in v0.2+. | Architecture | Replayability without sacrificing emotional depth | +| 2 | **FRIEND minimum depth: full Tier 1, no exceptions.** Every FRIEND candidate gets 70-100 authored lines, 5-phase arc, tell progression, dual-lens notes. | Content standard | The emotional payload requires authored specificity | +| 3 | **THE MIRROR pattern**: New NPC archetype — honest character with Tier 1 emotional depth but no contradiction arc, no secret, no tell system. Hael is the first MIRROR. | Design pattern | Fills a role the existing template system can't express | +| 4 | **Complicity as named theme**: The wiki index and design documents should explicitly name "complicity" as the game's thematic core, alongside "asymmetric information" as the mechanical core. | Thematic | Names what the game is about; anchors all content authoring | +| 5 | **Cultural gate modifier for dialogue access**: Regional culture modifies dialogue disclosure independently of relationship state. Krenn culture reduces disclosure to outsiders regardless of trust level. | Mechanic | Makes cultural identity mechanically load-bearing | +| 6 | **Smuggler moral arc vocabulary**: Add moral-weight attributes (`moral_weight`, `cover_integrity`, `loyalty_conflict`, `trust_read`) and smuggler-specific monologue triggers (`moral_pang`, `loyalty_test`) to the content spec. | Content spec | Gives the smuggler experience mechanical parity with the detective | +| 7 | **"Thematic Question" field in NPC profiles**: Each NPC's answer to "Is this enough?" — authoring guidance that connects every character to the game's philosophical spine. | Style guide | Ensures content authors write to the theme, not just the mechanics | + +--- + +## New Tickets I'd Recommend + +1. **Write THE MIRROR template** — formal pattern spec for honest-character NPCs (Hael as reference implementation) +2. **Elevate Hael to MIRROR depth** — expand from Tier 2 to MIRROR spec: 50-70 authored lines, 10-15 monologue lines per character, full voice samples +3. **Add smuggler moral arc to content spec** — define phases, monologue triggers, attribute vocabulary +4. **Add `cultural_gate` modifier to dialogue access design** — spec the mechanic with Gestalt and Tyre +5. **Add "Thematic Question" field to NPC style guide templates** — all tiers +6. **Add thematic framing section to wiki index.md** — name complicity as theme, frame "Is this enough?" as the question +7. **Write smuggler-perspective FactId progression text** — parallel to detective progression (Paula's proposal #12, endorsed) diff --git a/docs/workshops/wiki-review/round2-mellanie.md b/docs/workshops/wiki-review/round2-mellanie.md new file mode 100644 index 000000000..ed60c9cd3 --- /dev/null +++ b/docs/workshops/wiki-review/round2-mellanie.md @@ -0,0 +1,357 @@ +# Round 2 Response: Mellanie + +**Responding to:** Miri (cultural brief), Paula (tier templates), Gore (complicity + smuggler gap), Ozzie (gut-check line), Gestalt (mechanical constraints), Tyre (content directory), Nigel (mod authoring) + +--- + +## 1. Environmental Text — Concrete Examples Using Miri's Brief + +Miri delivered. The Krenn brief gives me everything I needed: substrate vocabulary, food names, greeting conventions, graffiti style, social register rules. I can write now. Here are worked examples for four environmental text types. + +### Bar Menu — The Last Shift + +``` +THE LAST SHIFT + +LEIB 2.40 +LEIB + KALAA 4.10 +SUPP (daily) 3.80 + +GRAIN SPIRIT 2.00 + double 3.50 +STATION ALE 2.80 +KUUM 1.60 + +--- +Card game: corner booth, 19:00 +Ask Sess. +``` + +**Authoring notes:** No descriptions. Krenn culture doesn't explain food — you know what supp is or you ask. Prices in small denominations (working-class bar, not a restaurant). Kuum is shift-end culture — the drink that says "I'm off the clock." The card game note is handwritten, informal, part of the furniture. The detective reads this menu and learns nothing. The smuggler reads it and sees home. + +**Monologue pairing:** +- Smuggler: *"Same menu. Lera hasn't changed the prices in a year. The supp's better than it has any right to be."* +- Detective: *"Standard bar menu. Local staples, no imports. Working-class operation. The prices tell me more about this district than the Commission briefing did."* + +--- + +### Safety Notice — Logistics Hub + +``` +LATTICE REGULATION NOTICE +Sova Transit District — Lattice Commission + +Unauthorized lattice modification is a Category 3 violation. +Penalties include fines, lattice restriction, and referral +to Commission review. + +Report concerns: Commission Kiosk, Level 3. + +Reg. LC-2041-Sova | Posted per Concordat Standard §14.7 +``` + +Small. Regulatory-standard formatting. Corner of a wall by the entrance, partially obscured by a freight schedule pinned over it. Nobody reads it. The fact that it's half-covered IS the cultural detail — Krenn compliance with Commission regulation is perfunctory, not enthusiastic. + +**Monologue pairing:** +- Smuggler: *"Still there. Nobody's read that notice since they posted it. Probably not even Sera."* +- Detective: *"Lattice regulation notice. Standard posting. The freight schedule pinned over half of it tells me how seriously this district takes Commission authority."* + +--- + +### News Ticker Headlines — Meridian Feed (One Cycle) + +``` +GATE TRAFFIC UP 3% — FREIGHT BACKLOG CLEARING AFTER VAEL DELAY +ASSEMBLY FLOOR: LATTICE FUNDING AMENDMENT REACHES COMMITTEE +STATION SOVA: VENTILATION UPGRADE SCHEDULE (LEVEL 3 AFFECTED) +KOLM LEAGUE: SOVA DOCKERS 4, ORBITAL TRANSIT 2 +GRAIN FUTURES STABLE — SYNDIC SHIPPING COSTS FLAT FOR Q3 +KRENN PRIME SURFACE: HARVEST SEASON OPENS, EXPORT WINDOWS CONFIRMED +COMMISSION ADVISORY: LATTICE CALIBRATION DUE DATES FOR SOVA DISTRICT +``` + +Seven headlines per cycle. Mix of Reach-wide politics (assembly amendment), local infrastructure (ventilation), sports (kolm league — Miri's card game adapted to competitive format), economic data (grain futures, freight), and institutional noise (Commission advisory). The editorial voice is local-paper pragmatic: how does this affect my shift? + +**Monologue pairing (on ASSEMBLY headline):** +- Smuggler: *"Lattice funding amendment. Great. More regulation nobody asked for."* +- Detective: *"Lattice funding in committee. If that passes, the Commission gets expanded inspection authority. That could change everything here."* + +Same headline. One sees bureaucratic noise. The other sees a potential tool. + +--- + +### Graffiti — Corridor B-7 + +``` +[Near service hatch, maintenance marker:] + DK 04.12 — checked + +[Scratched into wall panel, old:] + kylm + +[Small sticker, geometric folk-pattern, fading:] + (no text) + +[Pencil, recent:] + vakt 22:30 + +[Scratched, older:] + perk this schedule +``` + +Sparse. Functional. Krenn graffiti isn't art — it's communication. `DK 04.12 — checked` is a maintenance worker's mark (initials + date). `kylm` is someone complaining the ventilation is broken again — heritage word used reflexively. The folk-pattern sticker is heritage expression, dying out but present. `vakt 22:30` is operational — a lookout time, ring-adjacent, written where only people who use the corridor would see it. `perk this schedule` is universal dock-worker frustration. + +**Monologue pairing:** +- Smuggler: *"Vakt at twenty-two thirty. Someone's running tonight. Not our schedule."* +- Detective: *"'Vakt 22:30.' Handwritten. Recent. That's not a maintenance note. Filing it."* + +The smuggler reads operational shorthand. The detective reads evidence. Same four words. + +--- + +## 2. Style Guide Structure — Merging Paula's Templates with My Conventions + +Paula proposed formal tier templates (structural spec for Tier 1/2/3 profiles). I proposed 8 authoring conventions (workflow rules for content production). These aren't competing — they're complementary. Paula's templates say WHAT a profile contains. My conventions say HOW to write the content that fills it. + +### Proposed Combined Style Guide — Table of Contents + +``` +# The Settled Reach — Content Style Guide + +## Part 1: Wiki Structure + 1.1 Tier Templates (Paula) + - Tier 1 template (FRIEND / production-level) + - Tier 2 template (working profile) + - Tier 3 template (sketch) + - Per-tier validation checklist (Gestalt) + 1.2 Naming Conventions + - Location shortcode table (Mellanie) + - NPC full-name requirement (Paula) + - Phonological rules cross-ref → regional brief + +## Part 2: Content Authoring Rules + 2.1 Tag Taxonomy Reference (D-035 summary) + 2.2 Authoring Workflow + - Mirror-first drafting (Mellanie) + - Prerequisite-before-text (Mellanie) + - One-breath rule (Mellanie) + 2.3 Voice Discipline + - Character voice cards (Mellanie — see Section 3 below) + - Dual-lens checklist (Mellanie) + - Dual-lens note format: one sentence per character, imperative + - Gut-check line requirement (Ozzie — see Section 4 below) + 2.4 Controlled Vocabularies + - Situation overlap rules (Mellanie) + - Mood exclusivity: simultaneous states, not alternatives (Mellanie) + - Freeform tag vocabulary — living list (Mellanie) + 2.5 Mechanical Constraints (Gestalt) + - Hard requirements table (routine location slugs, faction values, etc.) + - Tell-to-behavior_flags mapping requirement + - Prerequisite validation against FactId catalog + +## Part 3: Regional Culture + 3.1 Regional Style Guide Template (Miri) + 3.2 Krenn System Brief (Miri) — cross-ref to wiki/cultural-groups/ + 3.3 Environmental Text Type Catalog (Mellanie) + +## Part 4: Content Pipeline + 4.1 Wiki → YAML mapping (Tyre) + 4.2 File naming: lines/ directory shortnames (Tyre + Mellanie alignment) + 4.3 Schema validation (Tyre) + 4.4 Mod content requirements (Nigel + Tyre) +``` + +**Key merge decision:** Paula's templates are the skeleton. Gestalt's mechanical constraints are the hard rules bolted onto that skeleton. My authoring conventions are the muscle — the workflow that produces content meeting both structural and mechanical requirements. The regional brief is the skin — cultural flavor that makes content feel situated. + +**On Tyre's location shortname question:** Use the wiki slugs, not my monologue-guide shorthand. `the-terminal`, `the-last-shift`, `maintenance-corridors` in the `lines/` directory. These are stable, unambiguous, and match the wiki. My guide used `terminal`, `bar`, `corridor` as authoring shorthand for line IDs — that's a per-line convention, not a directory convention. The ID prefix stays short (`terminal_m_001`), the directory name stays explicit. + +--- + +## 3. Smuggler Voice — Closing the Gap + +Paula and Gore both identified this: the detective has a clear mechanical and emotional vocabulary (analytical, pattern-recognition, institutional). The smuggler's voice is under-specified. + +Here's the difference, stated plainly: + +**The detective ANALYZES.** Short, precise observations. Categorizes people by role. Notices deviations from pattern. Professional vocabulary — "behavioral inconsistency," "filing it," "noted." Sentences are clipped, controlled, trained. The detective thinks in data. + +**The smuggler READS ROOMS.** Notices who's comfortable, who's tense, who shouldn't be here. Thinks in relationships, not categories. Vocabulary is personal — first names, shared history, emotional register. Sentences have rhythm, not structure. The smuggler thinks in people. + +The detective sees a logistics hub. The smuggler sees the place where Kael works and Voss stresses and Resha is still learning the ropes. + +### Three Paired Examples — Same Observation, Two Voices + +**Trigger: enter_location (The Terminal, shift start)** + +```yaml +# Smuggler +- id: terminal_m_040 + character: smuggler + trigger: enter_location + text: "Kylm today. Ventilation's acting up again. Voss'll be in a mood." + mood: [comfortable] + situation: [arrival, shift_start] + +# Detective +- id: terminal_m_041 + character: detective + trigger: enter_location + text: "Logistics hub. Twelve workers on the floor, one supervisor in the glass office. Standard morning configuration." + mood: [analytical] + situation: [arrival, shift_start] +``` + +Smuggler uses Krenn substrate vocabulary (`kylm`), predicts a specific person's mood from an environmental cue, speaks in fragments. Detective counts heads and categorizes spatial layout. Same room. Different languages. + +--- + +**Trigger: observe_npc (Torek at the bar, spending visibly)** + +```yaml +# Smuggler +- id: bar_m_040 + character: smuggler + trigger: observe_npc + text: "Torek's buying rounds again. New jacket, too. He's ticking." + mood: [concerned] + topic: [money] + prerequisite: + relationship_state: Known + subject: torek_lintar + +# Detective +- id: bar_m_041 + character: detective + trigger: observe_npc + text: "Lintar. Third round he's purchased tonight. That jacket is new — tagged brand, not station-market. Income doesn't match spending." + mood: [analytical] + topic: [money] + prerequisite: + relationship_state: Known + subject: torek_lintar +``` + +Smuggler uses the Krenn slang: `ticking` (drawing institutional attention). One word carries the whole cultural norm — don't be visible. It's not analysis, it's instinct. Concern, not curiosity. The smuggler cares because Torek's visibility endangers the community. + +Detective uses the surname (`Lintar`), counts drinks, identifies the brand tag, and runs the math. Income vs. expenditure. Clinical. The detective doesn't care about Torek — the detective cares about the anomaly. + +--- + +**Trigger: witness_interaction (Lera redirecting a conversation near a stranger)** + +```yaml +# Smuggler +- id: bar_m_050 + character: smuggler + trigger: witness_interaction + text: "Lera just steered Renn off that story. Good. Olin's two tables away." + mood: [relieved] + topic: [danger] + prerequisite: + fact: contraband.ring_exists + confidence: KnowsDetails + +# Detective +- id: bar_m_051 + character: detective + trigger: witness_interaction + text: "The bartender interrupted that conversation. Smooth — changed the subject before the dock worker finished his sentence. Why?" + mood: [suspicious] + topic: [routine] + prerequisite: null +``` + +Smuggler knows exactly what happened: Lera is protecting the community. The smuggler reads INTENT because they share the context. Relief — the system works. + +Detective sees the same behavior and asks the question. No names (the detective hasn't identified Renn yet), uses role descriptors ("the bartender," "the dock worker"). The detective reads PATTERN because they don't have context yet. Suspicion — something is being managed here. + +### Voice Card Summary + +| | Smuggler | Detective | +|---|---|---| +| **Thinks in** | People, relationships, risk | Data, patterns, anomalies | +| **Names NPCs** | First name, always | Surname or role descriptor until relationship forms | +| **Sentence style** | Fragments. Rhythmic. Breath-length. | Complete. Clipped. Controlled. | +| **Emotional register** | Fond, worried, protective, guilty | Analytical, suspicious, conflicted, clinical | +| **Cultural markers** | Uses Krenn substrate (kylm, perk, ticking, hüva) | Uses institutional vocabulary (filing, noted, behavioral inconsistency) | +| **Default mood** | Comfortable (pre-contradiction), concerned (post) | Analytical (pre-contradiction), conflicted (post) | +| **What they notice first** | Who's here, who's missing, who's tense | What's out of pattern, what doesn't add up | +| **Heritage language** | Fluent in Krenn slang — it's their first language | Doesn't use it — institutional outsider | + +--- + +## 4. The Gut-Check Line — Operationalizing Ozzie's Rule + +Ozzie proposed: *"Every NPC needs a moment that makes the player feel something."* And: voice samples must *"make you pause when read aloud."* He's right. Renn, Tav, Drin — they follow the template and have no soul. The template produces correct profiles. It doesn't produce characters. + +### Do I support this as a formal style guide rule? + +Yes. With modifications. + +### How to operationalize it + +**Rule: Every NPC profile at Tier 2 or above must include one "anchor line" in its voice sample — a line that, read aloud without context, makes the listener feel something specific.** + +The test isn't "is this line good writing?" The test is: **if someone who's never seen this game reads this line, can they tell you what the character is feeling?** + +Kael's anchor: *"I'm fine, Hael. Just work stuff. Long shifts, you know how it is. Don't worry about me."* +- What you feel: guilt. The lie is small and practiced and terrible. + +Sera's anchor: *"You look tired. How are the kids doing with the new curriculum? No — sit. Let me get us something."* +- What you feel: tenderness. Real care, from someone who's carrying something they can't share. + +Lera's anchor: *"I serve drinks. People talk. I don't take notes."* +- What you feel: a wall going up. Polite, firm, absolute. + +Now try Renn: *"South corridor's clear. Kosse was through twenty minutes ago."* +- What you feel: nothing. That's a status report. + +**The fix for Renn isn't a better voice sample. It's finding the moment where Renn is human.** Renn is young, wants to prove himself, and is expendable and knows it. The anchor line should come from THAT: + +*"Devra said 'good work' yesterday. First time anyone's said that to me on this station."* + +Now you feel something. A kid who's lonely and dangerous and one compliment away from doing anything Devra asks. THAT'S the anchor. + +### Tier-specific application + +| Tier | Anchor requirement | +|------|-------------------| +| Tier 1 | 2+ anchor lines across different phases of the contradiction arc. The warmth anchor AND the betrayal anchor. | +| Tier 2 | 1 anchor line minimum. Must reveal internal state, not external function. | +| Tier 3 | No formal anchor required, but the voice hint should gesture at a human being, not a function. Sess's *"What'll it be?"* works because the minimalism IS the character. Tav's *"Clear. South corridor, no movement"* doesn't work because it's surveillance output. | + +### The practical test + +When reviewing a profile, read the voice samples aloud. If you can replace the character's name with "NPC #7" and the line doesn't lose anything, it's not an anchor. Anchors are lines that could only come from THIS person, in THIS situation, feeling THIS way. + +Put this in the style guide as a review checkpoint, not a writing rule. You can't mandate feeling. But you can mandate that someone checks for it before a profile ships. + +--- + +## 5. Quick Responses to Other Round 1 Points + +**Gore's "complicity" frame:** Fully endorse. The smuggler's monologue voice is inherently complicit — they know what's happening, they participate, and they care about the people involved. This is why the smuggler thinks in people and relationships, not patterns. You don't analyze things you're part of. You worry about them. + +**Gore's "Thematic Question" proposal:** Support it as an authoring-only field. When I write Kael's monologue, knowing his answer to "Is this enough?" is "It was, until Hael's worry became unbearable" gives me his emotional center. The line practically writes itself from there. + +**Paula's smuggler-specific attributes:** Need them. My monologue lines for the smuggler currently gate on detective-shaped prerequisites (FactIds, RelationshipState). The smuggler needs `operational_reliability`, `exposure_risk`, `loyalty_assessment` as prerequisite-eligible attributes. Without them, smuggler monologue can't react to ring-internal dynamics with the same precision the detective monologue reacts to investigation dynamics. + +**Gestalt's routine-as-YAML proposal:** Strongly support. When I write monologue lines gated on `situation: [shift_transition]`, I need to know exactly when that window opens. Prose routines are ambiguous. YAML routines are authorable-against. + +**Nigel's pool_eligible for mods:** Confirm from the content side — tagged pools handle role-assigned dialogue naturally. If a modded NPC fills a `bar_regular` role slot, they draw from the same `access`, `trust`, `situation` filters as any bar regular. The tag system was designed for this. No special handling needed. + +**Tyre's hot-reload for line pools:** Yes. Please. Iterating on monologue lines without restarting the game is the single most important authoring workflow feature. If I can save a YAML file and hear the new line on the next trigger, content velocity doubles. + +--- + +## Summary of Proposals (Round 2) + +| # | Proposal | Status | +|---|----------|--------| +| 1 | Four environmental text types with concrete Krenn-voiced examples | Delivered above — bar menu, safety notice, news ticker, graffiti | +| 2 | Combined style guide structure (Paula templates + my conventions + Gestalt constraints + Miri regional) | Proposed TOC above | +| 3 | Smuggler voice card with paired examples showing dual-lens cultural register | Delivered above — three pairs + summary table | +| 4 | Anchor line requirement per tier (operationalizing Ozzie's gut-check rule) | Proposed with tier-specific application + practical test | +| 5 | Location shortname alignment: directory = wiki slug, line ID prefix = short form | Resolves Tyre's open question | +| 6 | Endorse Paula's smuggler-specific attributes as blocking for smuggler monologue authoring | Dependency flag | +| 7 | Endorse Gore's Thematic Question as authoring-only field in NPC templates | Authoring aid, not mechanical | diff --git a/docs/workshops/wiki-review/round2-miri.md b/docs/workshops/wiki-review/round2-miri.md new file mode 100644 index 000000000..7b26dc374 --- /dev/null +++ b/docs/workshops/wiki-review/round2-miri.md @@ -0,0 +1,404 @@ +# Workshop Round 2 — Miri (Worldbuilder / Setting Designer) + +**Cross-pollination responses.** I've read all Round 1 files. + +--- + +## 1. Full Canonical Names for All NPCs + +Paula is right: single-name NPCs metagame as "less important." Every NPC in the Krenn System has a full canonical name. The game surfaces them in lattice queries, manifests, posted schedules, and Commission records. Social contexts use first names only — the full name is canonical data, not social data. + +### Naming principles applied + +From the Round 1 Krenn brief: +- **First names:** 1-2 syllables, consonant-forward, vowels toward a/e/o +- **Surnames:** 2 syllables, endings from the heritage pool: -an, -en, -ik, -ar, -ev, -mm, -sk, -ur, -ak +- **Dutch/Norwegian-origin surnames** (Voss, Nils, Sabel) survived closer to source — slightly "higher status" feel +- **Blended surnames** (Davan, Lintar) emerged post-settlement — no single Earth origin + +### Full name proposals + +| Current | Proposed Full Name | Notes | +|---------|-------------------|-------| +| **Kael Davan** | *(unchanged)* | Established. Davan is a blended post-settlement surname. | +| **Sera Venn** | *(unchanged)* | Established. Venn is Dutch-origin, fits Commission context. | +| **Voss** | **Arvo Voss** | "Arvo" is Estonian/Finnish-origin (meaning "value"). Voss is the surname — consistent with "Supervisor Voss" using title+surname. Workers know his first name; they just don't use it. When the detective runs a lattice query: "Voss, A. — Shift Supervisor, Sova Logistics Consortium." | +| **Lera Sessik** | *(unchanged)* | Established. Sessik retains Estonian -sik suffix. | +| **Torek Lintar** | *(unchanged)* | Established. Lintar is Latvian-influenced. | +| **Devra** | **Devra Talsen** | "Talsen" — Latvian-influenced (from Talsi). Ring coordinator with a name that suggests roots in the system's earlier settlement wave. | +| **Maret Korr** | *(unchanged)* | Established. Korr is Finnish-origin (from Korhonen). | +| **Resha** | **Resha Neven** | "Neven" — blended surname, softer than most Krenn names. Fits a new hire who hasn't been compressed by the culture yet. | +| **Hael** | **See Section 2 below — rename proposed.** | | +| **Harek** | **Harek Valde** | "Valde" — from Latvian "Valdis." Fits an ex-security person. Slightly formal sound. | +| **Renn** | **Renn Harsk** | "Harsk" — short, sharp. Fits a courier. The detective's lattice query: "Harsk, R. — Logistics Associate, Sova Consortium." | +| **Pell** | **Pell Torssen** | "Torssen" — fossilized patronymic (Norwegian-origin). A name that sounds slightly old-fashioned, fitting for someone whose family has been on Krenn for generations. Pell's wavering loyalty reads differently if you know his family has deep roots. | +| **Drin** | **Drin Rosta** | "Rosta" — from the founding-era naming pool. Maintenance tech with an old Krenn name. | +| **Sess** | **Sess Kolvur** | "Kolvur" — mixed-heritage, Estonian "kol-" + drift suffix. The bartender with the longest surname in the room — and nobody ever uses it. | +| **Olin** | **Olin Tavren** | "Tavren" — deliberately longer and slightly off-pattern for Krenn. This is a tell: Olin's surname doesn't fit local convention as cleanly as the others. It could signal off-system origin, or it could be a family name from Krenn Prime rather than the station-culture pool. The ambiguity is load-bearing for Olin's ambiguous newcomer status. | +| **Sabel** | **Sabel Hersk** | "Hersk" — Norwegian-influenced, short. Off-station fence with a name that sounds Krenn-adjacent but could belong to any of three connected systems. | +| **Tav** | **Tav Merik** | "Merik" — Estonian-influenced. The youngest ring member with a perfectly ordinary Krenn name. Nothing about his name draws attention. That's the point — Tav is invisible by design. | +| **Nils Davan** | *(already established, off-stage)* | Shares surname with Kael (siblings). | + +### Where full names surface in gameplay + +Paula asked about preventing the name-as-tier signal. Here's how full names appear naturally for lower-tier NPCs: + +- **Manifest processing screens** in The Terminal show worker names in "Surname, Initial" format. The detective's lattice overlay cross-references these automatically. Every dock worker who processes cargo has their name on a screen: "Harsk, R." "Merik, T." "Rosta, D." +- **Posted shift schedules** on the board near Voss's office use full names: "0600-1400: Davan K., Harsk R., Merik T., Neven R., Korr M." +- **Lera's tab board** behind the bar (hand-lettered, Lera's handwriting) lists regulars by first name only — but the detective's lattice can cross-reference first names to full names from the station registry. +- **Commission kiosk queries** (if the detective accesses them) return full names with employment records. + +This means: the detective sees full names as institutional data from the start. The smuggler knows full names through lived experience (shift rosters, bar tabs, the way Voss reads names off the morning briefing). Full names are in the world. The player encounters them naturally regardless of NPC tier. + +--- + +## 2. The Kael/Hael Collision + +Paula is right to flag this. Let me analyze it as a setting question, not just a readability question. + +### The worldbuilding argument against the collision + +In a **first-name-primary culture** where surnames are rarely spoken, phonetic distinctness in first names is a social necessity. People in the same social circle whose names are one phoneme apart would naturally acquire differentiating nicknames. In 800-person Sova Transit District where everyone knows everyone, you wouldn't have a "Kael" and a "Hael" in the same household without one of them being called something else by everyone they know. + +This is especially true for a couple. In Nordic-Baltic cultures (our heritage pool), diminutives and endearments differentiate — but in a first-name-primary culture where the social name IS the identity, having two near-identical names in the most emotionally loaded relationship in the game creates confusion that the culture wouldn't tolerate. + +### The readability argument against the collision + +Kael is THE FRIEND for the smuggler. Hael is the emotional fulcrum (Gore's assessment — correct). These two characters will appear in the same monologue lines, the same dialogue scenes, the same internal thoughts. "Kael came home late. Hael was worried." In fast reading, especially in a game UI with monologue text appearing on screen for a few seconds, "Kael" and "Hael" will blur. + +### Recommendation: rename Hael + +**Proposed new name: Naia.** + +- **Phonetics:** Two syllables, open vowels, clearly distinct from "Kael." No confusion possible. +- **Heritage:** Finnish/Estonian-origin (from Naima/Naia). Fits Krenn phonetic patterns — open, consonant-light, slightly softer than most Krenn names. This softness is appropriate: Naia is a teacher, not a dock worker. The name carries a different register than the hard-consonant logistics names around it, which subtly signals Naia's position as a civilian in a working-class district. Not out of place — just from a slightly different layer of Krenn culture. +- **Full name: Naia Tamm.** "Tamm" — Estonian-origin (tamm = oak). Short, solid, grounding. +- **Setting justification:** Naia is a teacher at the station school. Teachers tend to come from the residential population rather than the logistics workforce. Residential Krenn names draw more from the Finnish/Estonian pool and less from the compressed dock-worker style. This is a subtle generational and class distinction that enriches the setting without being remarked upon. + +**What changes:** +- Every reference to "Hael" in the wiki becomes "Naia" +- Triangle 4 (Worried Partner) becomes: Naia - Kael - Sera +- Kael's profile: "partner Naia" throughout +- Sera's profile: "friend Naia" in the avoidance dynamic +- The emotional core is unchanged: Naia is the person the conspiracy hurts. The name is different. Everything else holds. + +**Severity: cosmetic.** No mechanical, structural, or thematic changes. The rename is a one-time find-and-replace across ~8 wiki files. + +--- + +## 3. Environmental Text Examples in Krenn Register + +Mellanie needs concrete examples to write against. Here are four, with cultural reasoning. + +### 3a. Bar Menu at Lera's + +Hand-lettered on a board behind the bar. Lera's handwriting — clear but not elegant. Prices in credits. No descriptions — regulars know what everything is. New arrivals ask. + +``` +LERA'S + +DRINKS + Grain spirit 4 + Grain spirit (double) 7 + Station ale 5 + Import ale 12 + Kuum 3 + Synth coffee 2 + +FOOD + Supp (today: kalaa) 8 + Leib + spread 4 + Protein plate 6 + Lera's plate 10 + +NO TABS OVER 50. YOU KNOW WHO YOU ARE. +``` + +**Cultural notes:** +- Heritage food words (supp, kalaa, leib) used without translation. If you don't know what supp is, you're new. Ask Sess. +- "Kuum" is the spiced warm drink — cheaper than alcohol, associated with shift transitions. Ordering kuum signals "I just got off work and I'm deciding whether to stay." +- "Lera's plate" is the daily special. Nobody asks what it is. It's whatever Lera made. Ordering it is a trust signal — you trust the cook. +- Import ale is 2.4x the price of station ale. This makes it a visible status purchase. When Torek buys import ales for the table, people notice. That price differential IS the financial tell. +- "NO TABS OVER 50" — Lera's voice. Direct, no-nonsense, with a needle aimed at specific regulars. This line tells you more about the bar's social contract than any description could. +- No ingredient lists, no allergen warnings, no Meridian-linked nutritional data. This is a Krenn establishment. You eat what's served. + +### 3b. Safety Notice (Hub Wall, Near Scanner Bays) + +Standard Commission-issued notice. Institutional formatting. Posted on the wall, corners peeling. Nobody reads it. + +``` +LATTICE COMMISSION — REGULATORY NOTICE +Station Sova | Sova Transit Logistics Hub + +UNAUTHORIZED NEURAL LATTICE MODIFICATION +Category 3 Violation | Enforcement Code LC-2217-C3 + +Possession, installation, or distribution of non-certified +lattice components is subject to: + - Component seizure and destruction + - Lattice restriction (up to Tier reduction) + - Fine: 2,000-15,000 credits + - Referral to system-level enforcement + +Report suspected violations to the Commission kiosk (Level 3) +or via Meridian channel LC-COMPLIANCE-KRENN. + + Lattice Commission | Protecting Neural Integrity +``` + +**Cultural notes:** +- Institutional language. Concordat Standard. No Krenn vernacular on Commission documents. +- The penalty range (2,000-15,000 credits) means a Category 3 fine could wipe out 10 months of a dock worker's margin income. This is not abstract — every worker who reads this (and they have) knows exactly what it means for someone earning 2,400/month with 200 margin. The fine is designed to be ruinous. That's the point. That's why the ring exists. +- "Report suspected violations" — this line is doing heavy thematic lifting. In Krenn culture, reporting is a violation of the mind-your-business norm. The Commission asks workers to do something their culture considers hostile. The notice has been up for years. Nobody has ever used channel LC-COMPLIANCE-KRENN from this district. +- The notice is posted next to the shift schedule. Workers see it every day. It's wallpaper. The detective sees it and thinks "compliance infrastructure." The smuggler sees through it — it's the cost-of-doing-business calculation made literal. +- The tag line — "Protecting Neural Integrity" — is Commission branding. Workers have opinions about this phrase. None of them are positive. + +### 3c. News Ticker Headline (Bar, Above the Counter) + +Meridian feed display. Text-scrolling format. Mix of Reach-wide and local. Updated continuously. The bar's ambient information stream. + +``` +FREIGHT INDEX: KRENN CORRIDOR +0.3% | TAVROS LINK STEADY | SOVA THROUGHPUT 94% + +ASSEMBLY SESSION 447: FRONTIER AUTONOMY MOTION TABLED AGAIN — "NOT THE TIME" SAYS CHAIR PELLAM + +STATION ADVISORY: VENTILATION MAINTENANCE SECTOR 3 SCHEDULE EXTENDED. COMPLETION NOW EST. CYCLE 18 + +KRENN PRIME SURFACE: STORM WARNING NORTH LATITUDE BAND — DEPOT OPERATIONS NORMAL + +SPORT: ORBITAL 3 TAKES SOVA LEAGUE FINAL 4-2. MATCH REPLAY AVAILABLE MERIDIAN-SPORT-KRENN + +COMMISSION: QUARTERLY COMPLIANCE REVIEW SCHEDULE POSTED. NEXT SOVA INSPECTION: CYCLE 22 +``` + +**Cultural notes:** +- **Freight index first.** This is a logistics station. Commodity prices and throughput percentages are the headlines that matter. Workers check this the way Earth people check weather. +- **Assembly news is dismissive.** "TABLED AGAIN" — the editorial voice says "they debated, nothing happened, why are we reporting this." This is the local filter: Assembly news is irrelevant to shift workers. The tone is resigned indifference. +- **Ventilation complaint.** The local complaint (from the Sova Transit District brief) surfaces in the news ticker. "SCHEDULE EXTENDED" — it was supposed to be fixed by Cycle 15. It's now Cycle 12-something and the estimate just moved to 18. Workers have opinions. This is the universal safe topic — if someone's talking about ventilation, they're NOT talking about something else. +- **Sport.** Local orbital platform league. "Orbital 3" is a manufacturing platform in the system. Workers follow this. Card games at Lera's correlate with match results. This is social fabric. +- **Commission inspection schedule.** The most loaded headline on the ticker. "CYCLE 22" — the ring knows this date. They've already started planning the operational window. Every ring member reads this headline and makes a calculation. Every non-ring worker reads it and thinks "more paperwork." The same six words, two completely different readings. This IS the dual-lens in environmental text. + +### 3d. Graffiti (Maintenance Corridor, Near B-7 Junction) + +Sparse. Functional. Layers of age. Not artistic — operational and human. + +``` +[Maintenance marker, faded, ~30 years old:] + V-JUNCTION 12.4m → + VENT ACCESS ↑ + — K.T. 2193 + +[More recent, black marker, scrawled:] + still kylm in sector 3 + +[Small, precise, near the dead drop alcove — ring mark:] + ◇ + +[Scratched into metal with a tool, old:] + Talvik promised us quarters by '98 + still waiting + — 2207 + +[Recent, different hand:] + the floor debates. we breathe recycled air. +``` + +**Cultural notes:** +- **Maintenance markers** are the oldest layer. "K.T. 2193" — a worker's initials and the year. These are navigational. They're also the only record that someone named K.T. was here 30 years ago. The corridor remembers. +- **"still kylm in sector 3"** — heritage substrate word in casual complaint. Nobody writing this was making a cultural statement. They were cold and annoyed. The word survived because it's what you say when you're cold. +- **The diamond mark (◇)** — a ring symbol. Meaningless to anyone who doesn't know. The detective, if they map the marks to the dead drop locations, can build a pattern. The smuggler walks past it without thinking. It's like a doorbell — functional, invisible to anyone who isn't looking for it. +- **"Talvik promised us quarters by '98"** — heritage corporate reference. Talvik Logistics (founding Syndic, absorbed ~120 years ago) apparently promised worker housing that never materialized. The complaint is 19 years old. The bitterness persists. This is Krenn heritage showing through: not in celebration, but in grievance. The workers remember what they were promised. +- **"the floor debates. we breathe recycled air."** — "the floor" is local slang for the Assembly (from my Round 1 brief). This is political expression in its most compressed Krenn form: two facts, placed side by side, the juxtaposition doing all the work. No argument. No demand. Just: they talk, we breathe. Draw your own conclusion. + +--- + +## 4. Cultural Immune System — Nordic-Baltic Heritage as Mechanical Resistance + +Gore's Round 1 insight is exactly right: the mind-your-business ethos IS the ring's security model. Let me ground this in the heritage and map it to the access tier system. + +### Heritage roots of the Krenn privacy norm + +The Nordic-Baltic founding cluster brought three converging cultural traits: + +1. **Finnish *sisu*** — a concept roughly meaning "stoic determination" or "grim endurance." In Krenn drift, this became the expectation that you handle your problems without involving others. Asking for help is not weak, but burdening others with your business is rude. + +2. **Estonian *maarahvas* identity** — literally "land people," the historical Estonian self-concept of being practical, quiet, self-reliant rural folk. On a station, this became: you work, you go home, you don't make noise. The contrast with institutional authority (historically Russian/German overlords for Estonians) maps directly onto the Krenn attitude toward the Commission — a distant authority that doesn't understand local life. + +3. **Scandinavian *janteloven*** — the "law of Jante," the social norm against standing out or claiming superiority. In Krenn drift, this became: visible wealth is suspicious, self-promotion is distasteful, and the worst thing you can do is act like you're better than your neighbors. This is why Torek's spending is a social violation before it's a criminal tell — he's breaking *janteloven* by being visibly affluent. + +These three currents merged over 180 years into the Krenn norm: **privacy is the default, solidarity is assumed, and authority is external.** Nobody codified it. It's how people raise their children. It's what "being from here" means. + +### How this maps to dialogue access tiers (D-028 Layer 1) + +Gore is right that this isn't flavor — it's mechanical. Here's the mapping: + +| Access Tier | Cultural Interpretation in Krenn | Who Gets It | Examples | +|-------------|--------------------------------|-------------|---------| +| **public** | What you'd say to anyone in earshot. Safe topics. Weather (ventilation), work complaints, sport results. | Everyone, including the detective from day one. | "The ventilation in Sector 3 is still broken." / "Did you see the match last night?" | +| **peer** | What you'd say to someone you work with. Shift gossip, mild complaints about Voss, opinions about food. NOT anything about income, relationships, or the ring. | Workers who share shift time. The smuggler from day one. The detective only after weeks of consistent, non-threatening presence. | "Voss is on one today." / "Maret's been quiet. Hope she's alright." | +| **insider** | What you'd say to someone you trust with your business. Income sources, relationship troubles, complaints about the Commission that might be actionable, knowledge about the grey economy. | Ring members, long-term friends, family. The smuggler for ring NPCs. The detective *never* for ring NPCs unless they flip someone. | "Quiet credit's been steady this month." / "Naia asked me about Kael again. I didn't know what to say." | +| **authority** | What you'd say to someone with institutional power, because you have to. Formal answers, minimal disclosure, technically true but maximally unhelpful. | The detective, from day one. Commission representatives. Station security when they ask questions. | "I process manifests. I follow the schedule. I don't have anything to report." | +| **hostile** | What you'd say when trust has been violated — when the detective pushed too hard, when someone betrayed a confidence, when the cultural contract broke. | Anyone who crossed a line. The detective if they pressure the wrong NPC. Ring members toward Pell if his wavering becomes known. | "You should leave now." / "I don't know you. I never knew you." | + +### The detective's progression challenge + +In Krenn culture, the detective's Commission credentials guarantee **authority** access — which is the *least useful* tier for investigation. NPCs in authority mode answer questions technically and volunteer nothing. The cultural norm actively works against institutional investigation. + +To get **peer** access, the detective must: +- Be consistently present (same bar, same shift transitions, same routines) +- Not push (asking direct questions about other people is rude; the detective must learn to listen, not interrogate) +- Demonstrate that they are a person, not just a role (use first name, order from the menu, comment on the ventilation) +- Wait. In Krenn culture, trust accrues with time, not gestures. + +To get **insider** access, the detective would need: +- Someone to vouch for them (Sera might, for specific NPCs — but Sera is hiding things, so her vouching is compromised) +- To demonstrate shared risk (protecting someone's secret builds trust faster than any credential) +- To have been here long enough that the community forgets they're Commission + +The detective's investigation timeline doesn't allow for natural trust-building. This is the mechanical expression of Gore's "cultural immune system": **the culture's privacy default makes the detective's job structurally harder, not because people are hostile but because cooperation requires breaking a social norm that everyone shares.** + +### The smuggler's embedded advantage + +The smuggler starts at **peer** minimum for all Hub and Bar NPCs, and **insider** for ring members. This isn't a status effect — it's the natural result of having lived here, worked here, and earned trust the Krenn way: through shared labor and shared time. + +The smuggler's challenge is maintaining these tiers. If the investigation pressures the community, NPCs might withdraw from **peer** to **public** even with the smuggler — not because they distrust the smuggler, but because the cultural response to external threat is to close ranks and share less with everyone. "Kylm in Sector 3" conversations increase. Real talk decreases. The smuggler feels the chill. + +### Addition to the regional style guide template + +Per Gore's Round 1 proposal, the regional style guide template needs a **Section 5c: Access Tier Cultural Profile** that maps the region's social norms to the five access tiers. This should be a required section because it's mechanically load-bearing — dialogue selection depends on it. + +I'll amend the template: + +``` +## 5c. Access Tier Cultural Profile + +Map the region's social norms to the five dialogue access tiers: + +- **public**: What topics are safe for anyone? What's the "weather talk" here? +- **peer**: What does it take to reach peer status? Time? Shared work? Introduction? + How long before a newcomer is treated as a peer? What topics unlock? +- **insider**: What earns insider trust? What does an insider know that a peer doesn't? + Is insider status revocable? +- **authority**: How does the culture treat institutional representatives? + Cooperative but unhelpful? Hostile? Deferential? What's the cultural attitude + toward being questioned by authority? +- **hostile**: What triggers hostile access? What cultural lines must be crossed? + Is hostility expressed through confrontation or withdrawal? +``` + +--- + +## 5. Wiki Structure — Where the Krenn Brief Lives + +**Confirmed: `wiki/cultural-groups/krenn-system.md`.** + +Per D-040, `wiki/cultural-groups/` is the designated home for regional style guides. The directory exists in the taxonomy but is currently empty. + +**Proposed file structure:** + +``` +wiki/ + cultural-groups/ + _template.md # The regional style guide template (Part A from my Round 1) + krenn-system.md # The Krenn System brief (Part B from my Round 1, updated per Round 2) +``` + +**YAML frontmatter for `krenn-system.md`:** + +```yaml +--- +canonical_id: krenn-system.culture +type: cultural-group +region: krenn-system +status: canonical +created: 2026-02-12 +updated: 2026-02-12 +cross_references: + - krenn-system.star-system + - sova.station + - sova-transit.district +--- +``` + +**Index update:** `wiki/index.md` should add a Cultural Groups section between Factions and NPCs: + +```markdown +### Cultural Groups (Regional Style Guides) +- [Krenn System](cultural-groups/krenn-system.md) — Nordic-Baltic heritage, 180 years settled +``` + +When v0.2 adds systems, new briefs follow the template and slot into this directory. The pattern is established. + +--- + +## Cross-Responses to Other Round 1 Contributions + +### To Gore (complicity as theme) + +Your framing of complicity is excellent and it enriches the cultural analysis. The Krenn mind-your-business norm isn't just a social habit — it's complicity infrastructure. "Not asking" is a form of participation. Every resident who doesn't report Torek's spending, doesn't question Voss's schedule changes, doesn't follow Kael to Corridor B-7 — they're all making a choice. The culture makes that choice feel like the default, like not-choosing, like minding your own business. But it IS a choice. And the detective's arrival forces the community to see it as one. + +Your "Thematic Question" proposal ("Is this enough?") should be connected to the regional brief. In Krenn culture, the answer to "Is this enough?" is shaped by the *janteloven* drift: wanting more is suspect. Being satisfied with what you have is the cultural expectation. But the economic squeeze (200 credit margin) means satisfaction is a lie — or a performance. The cultural norm says "this is enough." The bank account says otherwise. That tension between cultural contentment and economic reality is the soil the ring grows in. + +### To Ozzie (environmental texture as wow factor) + +Your instinct about texture over naming conventions is exactly right. The names establish phonetic identity. The food, the slang, the complaints, the graffiti — that's what makes Krenn feel *lived in*. The environmental text examples above are my direct answer to your Round 1 ask: "What do people eat? What's the local slang? What do they complain about?" + +The "Talvik promised us quarters by '98 / still waiting" graffiti is the kind of detail that rewards the player who reads walls. The smuggler walks past it — it's part of the background. The detective who reads it and queries "Talvik" in the Meridian learns about the founding Syndic, the economic history, and why workers here have a long memory for broken promises. That's environmental storytelling through cultural specificity. + +### To Paula (naming alignment) + +Full names provided above. The naming phonological rules from my Round 1 brief are now validated against all 17 NPCs. Everything fits. The one drift I want to note: Olin Tavren's slightly off-pattern surname is deliberate. If Olin is from off-system (or pretending to be), a name that doesn't quite fit local convention is itself a clue. The detective's pattern recognition should flag this, eventually. + +I've also provided the heritage basis for each surname so content authors can generate new Krenn names by following the same roots. When we need NPC #18 or #25 or #100, the rules are documented. + +### To Mellanie (environmental text unblocked) + +The four examples above (menu, safety notice, ticker, graffiti) should give you enough cultural register to begin writing the full environmental text catalog. Key reference points from the Krenn brief you'll use most: + +- **Substrate vocabulary** (Round 1, Section 3b): supp, kalaa, leib, kuum, perk, kylm, hüva, selge, käik, laev +- **Slang** (Round 1, Section 3b): shift-end, gate-side, wall-side, ticking, quiet credit, hard name +- **Profanity**: perk (emphatic), gate-rot (bullshit) +- **Sign register**: Krenn official = terse/functional. Informal (Lera's) = hand-lettered, personality. Commission = institutional, formal, ignored. +- **Food and drink**: grain spirit, station ale, import ale, kuum, supp, kalaa, leib, protein plate + +If you need more vocabulary or specific cultural references for a particular text type, ask — I can extend the brief for any domain. + +### To Tyre (wiki taxonomy alignment) + +Your "filesystem is navigation, not identity" principle aligns with my `canonical_id` proposal. I'm not suggesting we change Tyre's directory structure — his `locations/{system}/{slug}.md` is correct. The `canonical_id` lives in YAML frontmatter, not in the path. Tyre's Rule 1 (max 2 levels) holds. + +One addition: the content directory should include `content/global/regions/krenn-system.yaml` (per Gestalt's proposed structure). This is the machine-readable version of the cultural brief — naming phonological rules as generation parameters, substrate vocabulary as tagged word pools, access tier cultural profile as dialogue selection weights. + +### To Gestalt (routine axis + cultural constraints) + +Your observation that routine is the most mechanically overloaded axis connects directly to the cultural brief. In Krenn culture, routine IS identity. Deviation from routine is the primary tell — not because Krenn people are rigid, but because the culture values predictability as a form of social contract. "Kael is always at the dock by 0600" is both a schedule entry and a trust statement. When Kael starts arriving late, the routine deviation is visible not just mechanically but socially — everyone notices because the culture expects consistency. + +This means: the routine axis for Krenn NPCs should reflect higher regularity than NPCs from cultures with more flexible social expectations. A future system settled by a more individualistic cultural cluster might have NPCs with looser routines, making deviation detection harder. The cultural brief informs the mechanical parameters. + +--- + +## Summary of Round 2 Proposals + +| # | Proposal | Status | Depends On | +|---|----------|--------|------------| +| 1 | Full canonical names for all 17 NPCs (table above) | Ready for decision | None | +| 2 | Rename Hael → Naia Tamm (phonetic collision fix) | Ready for decision | Requires find-replace in ~8 wiki files | +| 3 | Four environmental text examples (menu, notice, ticker, graffiti) | Delivered | Unblocks Mellanie | +| 4 | Access tier cultural profile as required section in regional style guide | Ready for decision | Amendment to Round 1 template | +| 5 | Cultural brief location: `wiki/cultural-groups/krenn-system.md` | Confirmed | Index update needed | +| 6 | Olin Tavren's off-pattern surname as deliberate ambiguity signal | Setting note | Accepted or rejected with name table | + +### New tickets for SI (if proposals adopted): + +- Apply full canonical names to all NPC wiki pages (find-replace per name table) +- Rename Hael → Naia across all wiki files (if approved) +- Create `wiki/cultural-groups/krenn-system.md` from Round 1 + Round 2 content +- Create `wiki/cultural-groups/_template.md` from Round 1 template + Round 2 Section 5c addition +- Add Cultural Groups section to `wiki/index.md` +- Create environmental text examples file: `wiki/authoring/environmental-text-examples.md` + +--- + +**Status:** Round 2 response complete. +**Author:** Miri +**Date:** 2026-02-12 diff --git a/docs/workshops/wiki-review/round2-nigel.md b/docs/workshops/wiki-review/round2-nigel.md new file mode 100644 index 000000000..79ab4b866 --- /dev/null +++ b/docs/workshops/wiki-review/round2-nigel.md @@ -0,0 +1,339 @@ +# Round 2 — Nigel (Sandbox & Replayability) + +## Cross-Pollination Synthesis + +I've read everyone's Round 1. Here's what I'm seeing: there's more convergence than the tension framing suggests. Let me work through the four assigned tensions, then flag some connections nobody else has made. + +--- + +## Tension 1: FRIEND Pool Depth — How Many, At What Cost, When? + +### Gore and I agree. Let me make that explicit. + +Gore said: "THE FRIEND cannot be procedurally generated." I never said generate. I said **draw from a pool of fully authored candidates**. Gore then said: "Write 4-6 FRIEND-eligible NPCs at full Tier 1 depth per district. The randomizer selects which one is THE FRIEND for this playthrough. The content is authored; the *selection* is procedural." + +That's exactly my proposal. We're in violent agreement. The question isn't whether, it's how many and when. + +### The authoring cost, honestly + +Gestalt mapped the bidirectional knowledge requirement. Paula mapped the PC upgrade fields. Let me put real numbers on what a FRIEND candidate costs: + +| Component | Lines/Effort | Notes | +|-----------|-------------|-------| +| Full 10-axis profile | 2 wiki pages | Same as Kael/Sera | +| Authored dialogue | 25-35 lines | No generation expansion | +| Trust-gated dialogue | 15-20 lines | Tier 1 depth | +| Unprompted lines | 5-8 lines | | +| Monologue (per PC) | 10-15 lines | x2 characters = 20-30 | +| Tell observation lines | 5-8 lines | | +| Contradiction discovery | 3-5 lines | | +| PC-FRIEND relationship stubs | 1-2 paragraphs per PC | Bidirectional — Paula's "reversed dual-lens" | +| **Total per FRIEND candidate** | **~70-100 authored lines + 2 pages prose** | **No shortcuts** | + +That's serious. Each additional FRIEND candidate is roughly equal to building another Kael or Sera from scratch. And Gore is right — you can't cut corners. The tell progression, the contradiction arc, the five phases, the retroactive contamination of warmth — all of it requires Tier 1 authored depth. + +### My revised proposal: phased rollout + +**v0.1: 1 FRIEND per character (2 total).** Kael for smuggler, Sera for detective. Ship what we have. The architecture supports pool selection, but the pool has exactly one entry per character. This is fine for the vertical slice — nobody replays a 30-minute demo five times. + +**v0.2: 2 FRIENDs per character (4 total).** Add one new FRIEND candidate per PC archetype. Now the randomizer draws from {Kael, NewFriend1} for the smuggler and {Sera, NewFriend2} for the detective. Four possible FRIEND pairings. The second playthrough IS genuinely different. + +**v0.3+: 3 FRIENDs per character (6 total).** Nine possible FRIEND pairings. Metagaming effectively impossible. Two players comparing notes will have had different FRIENDs. + +### What the architecture needs NOW (even for v0.1's single-entry pool) + +This is the part I want to fight for. Even if v0.1 ships with Kael-only and Sera-only, the content files should be structured AS IF they're pool entries: + +```yaml +# content/districts/sova-transit/friends/pool.yaml +smuggler_friends: + - npc_id: kael-davan + contradiction_type: spatial_deviation # B-7 meeting + tell_type: behavioral # looks left when lying + discovery_method: single_observation # one dramatic moment + +detective_friends: + - npc_id: sera-venn + contradiction_type: avoidance_pattern # leaves when Torek arrives + tell_type: behavioral # topic deflection + overcompensation + discovery_method: cumulative_pattern # three observations +``` + +When v0.2 adds a second FRIEND, it adds a second entry. No restructuring. The randomizer reads the pool. The content was always pool-shaped. Cost of this structural decision: near zero. Value: enormous later. + +### The anti-metagaming constraint that matters + +Gore's insight about dramatic irony is crucial here. The FRIEND pool doesn't just prevent "I know Kael's tell" metagaming. It creates the second-playthrough experience Gore described: "Kael is just a dock worker. You know his secret from last time, but your character doesn't." + +If Kael is always THE FRIEND, this irony is interesting once. If Kael is sometimes THE FRIEND and sometimes just a colleague, the irony is DIFFERENT each time. One playthrough: "I know Kael's secret and he's my FRIEND." Next playthrough: "I know Kael's secret but my FRIEND is Renn and Kael is just... there. Nervous. And I can't do anything about it." + +That's not metagaming prevention. That's a whole new emotional texture that the pool structure creates for free. + +--- + +## Tension 2: Content Architecture Convergence + +### Adopting Tyre's framework, extending it with pool semantics + +I'm dropping my parallel mod manifest format. Tyre's three-layer stack with ADD/REPLACE/MERGE is the right architecture. My `mod.yaml` was reinventing what Tyre already solved more cleanly. Let me map my replayability requirements onto Tyre's structure. + +### How pool-based randomization fits into Tyre's directory structure + +Tyre's structure: +``` +content/ + districts/ + sova-transit/ + npcs/ + kael-davan.yaml + templates/ + logistics-hub.yaml # Social site: roles, NPC assignments +``` + +My extension: the template file declares **role slots** that the randomizer fills from the NPC pool: + +```yaml +# content/districts/sova-transit/templates/bar.yaml +template_id: bar +roles: + - slot: owner + assigned: lera-sessik # Fixed — Lera IS the bar + pool_eligible: false + + - slot: regular + count: 2-4 # Randomizer picks 2-4 regulars per seed + pool: # NPCs eligible for this slot + - torek-lintar + - harek + - olin + pool_eligible: true # Modders can add NPCs to this pool + + - slot: bartender + assigned: sess # Fixed for v0.1 + pool_eligible: false + + - slot: friend_detective # THE FRIEND slot (detective's) + pool: + - sera-venn # Only one candidate in v0.1 + pool_eligible: true # v0.2 adds more +``` + +This maps cleanly onto Tyre's overlay operations: +- **ADD**: A mod drops a new NPC YAML into `npcs/` and adds the NPC's ID to a role slot's `pool` list. Tyre's MERGE on the template file concatenates the pool arrays. +- **REPLACE**: A mod replaces an NPC's YAML entirely (Tyre's entity-REPLACE). +- **MERGE**: A mod adds dialogue lines to the pool (Tyre's line-pool MERGE). The randomizer selects which NPCs are active, and only active NPCs' lines enter the runtime pool. + +### Gestalt's global/_districts split is compatible + +Gestalt proposed `_global/` for schema/factions/technology and `districts/` for local content. Tyre proposed `global/` and `districts/`. Same structure, different underscore convention. I don't care about the underscore — pick one and ship it. The important thing for replayability: + +**Global content is NOT randomized.** Factions, technology, FactId definitions — these are fixed vocabulary. The randomizer operates on district-level content: which NPCs fill which role slots, which FRIEND is selected, which NPC is compromised. + +**District content IS the randomization surface.** The template role-slot system I described above lives entirely within `districts/`. A mod that adds a new district is adding a new randomization domain. A mod that adds NPCs to an existing district is expanding the pool. + +### My concrete ask for Tyre + +One thing Tyre's structure doesn't yet include: **a seed configuration file** that the randomizer produces at game-start. Something like: + +```yaml +# runtime/seed-state.yaml (generated, not shipped) +seed: 847291 +district: sova-transit +assignments: + friend_smuggler: kael-davan + friend_detective: sera-venn + compromised_inspector: drin + wavering_member: pell + bar_regulars: [torek-lintar, harek, olin] + contraband_primary: lattice-components + contraband_secondary: medical-grade + torek_ring_connected: true # Gestalt's T3 randomization flag +``` + +This is the record of what the randomizer decided. It's saved with the game state. It's what makes two players' games different. Tyre doesn't need to design the randomizer — but the content architecture needs a place for this output to live. + +--- + +## Tension 3: Contraband Shuffle — Does It Break Cultural Coherence? + +### I'm walking this back. Partially. + +Gore is right that the game is about complicity, and the specific contraband type is load-bearing for the moral texture. Miri's Krenn brief is beautiful and culturally specific — the Commission regulation of lattice components isn't arbitrary, it's locally embedded. "The Commission regulates lattice tech" → "people can't afford upgrades" → "the ring exists because the system fails" → "pragmatic Krenn culture doesn't moralize about how needs get met." That chain only works for lattice components. + +If I shuffle the primary contraband to severance tech, the cultural logic breaks. "The ring is smuggling counter-surveillance equipment" doesn't connect to "affordable healthcare" or "the system failed working people." Severance tech is political, not economic. It changes the ring from "healthcare providers" to "political resistance" — and that's a different game in a different setting. + +### Revised proposal: fix primary, vary secondary + +**Primary contraband is fixed per district.** Sova Transit District smuggles lattice components. Period. That's culturally grounded, morally load-bearing, and tied to the specific Commission-regulation dynamics of Krenn System. It's what makes the detective's job morally ambiguous. It's what makes the smuggler's justification honest. Gore's complicity thesis depends on this. + +**Secondary contraband varies per seed.** What ELSE is in the crates? + +| Secondary | Moral Shift | Gameplay Shift | Cultural Fit | +|-----------|-------------|---------------|--------------| +| Medical-grade replacements (seed A) | Amplifies sympathy — "they're saving lives" | Detective feels worse about busting the ring | High — same Commission regulation, different end-users | +| Severance tech (seed B) | Adds political dimension — "this is bigger than Sova" | Detective realizes the ring connects to something larger | Medium — political, not economic, but still anti-institutional | +| Enhanced capability mods (seed C) | Adds luxury dimension — "some of this IS just vanity" | Detective finds moral clarity easier; smuggler justification weakens | High — same supply chain, different market segment | +| Nothing extra (seed D) | Pure lattice components | Clean moral frame, no complications | Maximum — baseline experience | + +The secondary contraband doesn't change the ring's identity or the cultural logic. It adds a WRINKLE. "We're smuggling lattice components for people who need them. ...And also some stuff I don't ask about." The smuggler's relationship with the secondary cargo is itself a moral question: do you look? Do you ask Devra what's in the sealed containers? + +This preserves Gore's complicity thesis while adding per-seed texture. The detective who discovers severance tech in the crates has a different "oh no" moment than the one who discovers medical-grade replacements. But both are investigating the same ring, in the same culturally grounded setting, with the same NPC relationships. + +### What this means for the fact catalog + +Paula flagged that FactIds are currently discovery-shaped (Suspects → KnowsDetails). The secondary contraband needs its own FactId per type, gated behind the primary: + +```yaml +contraband.secondary_cargo: + Suspects: "Some of these containers don't match the usual profile." + KnowsOf: "There's more than lattice components moving through here." + KnowsDetails: # varies by seed: + # medical-grade: "Medical-grade replacements. For people whose lattices are degrading." + # severance: "Severance equipment. Counter-surveillance. Someone upstream is political." + # enhanced: "Enhanced capability mods. Not medical. Luxury market." +``` + +The FactId exists globally. The KnowsDetails text is selected by the seed configuration. This fits Tyre's content pipeline — the fact definition is in `global/knowledge/facts.yaml`, the seed-specific text variant is runtime data, not content. + +--- + +## Tension 4: PC-as-NPC Scope — v0.1 or v0.2? + +### Two different things called "PC-as-NPC" + +I've been conflating two concepts. Let me separate them. + +**Concept A: The other PC exists as an NPC in your playthrough.** +When you play the smuggler, the detective is an NPC in the world. When you play the detective, the smuggler is an NPC. This is what Ozzie described: "Someone ELSE reacts to you like they already know you." Kael says "There you are" because the smuggler PC has a pre-existing life. + +**Concept B: PC identity is drawn from a randomizable pool.** +Instead of always being "the same smuggler," you could be a DIFFERENT dock worker each playthrough. Different name, different relationships, different starting knowledge. + +### Concept A is v0.1. Concept B is v0.2+. + +**Concept A (v0.1):** The smuggler and detective each need an NPC-format brief (Paula's proposal #7). When you play the smuggler, the detective NPC follows their routine — arrives at the bar, talks to Sera, asks questions. The smuggler can observe this. When you play the detective, the smuggler NPC works their shifts, runs ring operations, hangs out with Kael. + +This is low additional authoring cost because both PCs already have most of what's needed: +- The smuggler's routine is defined by their ring membership and dock work +- The detective's routine is defined by their investigation pattern and bar visits +- Both characters' relationship stubs exist in the NPC profiles that reference them + +What's MISSING (and what we need to author for v0.1): +1. **NPC-mode behavior scripts** for both PCs: what do they do when no player controls them? 5-7 routine entries each. +2. **Reverse dual-lens notes**: how does each NPC see the smuggler NPC? How does each NPC see the detective NPC? Paula's "reversed dual-lens" — these are the SAME data inverted from the NPC profiles, but they need to be compiled explicitly. +3. **Observation monologue** for when the player notices the other PC-as-NPC: 3-5 lines per character. "Commission. Has to be. Why are they here?" (smuggler seeing detective NPC). "Dock worker. Efficient, unremarkable." (detective seeing smuggler NPC). + +That's maybe 20-30 authored items total. Manageable. + +**Why it matters for v0.1:** Ozzie's "ultimate payoff" depends on this. The player finishes the smuggler path, starts the detective path, and sees the smuggler NPC working the docks. "That was ME." The second-playthrough wow moment IS the PC-as-NPC. Without it, the second playthrough is just "different dialogue." With it, the second playthrough is "I'm watching my previous character from the outside and they don't know what I know." + +**Concept B (v0.2+):** PC identity randomization requires multiple PC-viable NPCs per archetype, each with full relationship stubs against all other NPCs. The combinatorial authoring cost is real (Gestalt mapped it). Each new PC candidate needs: +- Full NPC brief +- Relationship stubs with every FRIEND candidate (bidirectional) +- Starting knowledge inventory +- Orientation monologue pool +- Reverse dual-lens from every NPC who knows them + +For 2 PC candidates per archetype x 2 FRIEND candidates per archetype, that's 4 PCs needing relationship stubs against 4 FRIENDs = 16 authored relationship pairs. Not impossible, but not v0.1. + +### Recommendation summary + +| Concept | Scope | Cost | Payoff | +|---------|-------|------|--------| +| Other PC exists as NPC (Concept A) | **v0.1** | ~20-30 authored items | Second playthrough wow moment | +| PC identity randomization (Concept B) | **v0.2+** | 16+ relationship pairs per district | True replay variety in PC identity | +| FRIEND pool (1 per character) | **v0.1** | 0 additional (Kael + Sera exist) | Architecture supports future expansion | +| FRIEND pool (2 per character) | **v0.2** | ~140-200 authored lines + 4 pages | Metagaming defeated, FRIEND surprise | +| FRIEND pool (3 per character) | **v0.3+** | ~140-200 more lines + 4 pages | Comparison test passes | + +--- + +## Connections Nobody Else Made + +### 1. Gestalt's T3 randomization + my network shuffle = the same system + +Gestalt proposed making Torek's ring connection randomizable per seed. I proposed shuffling WHO is compromised (Drin vs. Resha vs. Maret). These are the same mechanism: a per-seed flag on NPCs that determines their entanglement status. + +We should generalize this into a **district entanglement map** in the seed configuration: + +```yaml +entanglement_overrides: + torek-lintar: + ring_connected: true # seed A: Torek is ring + # ring_connected: false # seed B: Torek is mundane + drin: + compromised: true # seed A: Drin has gambling debt + # compromised: false # seed B: Drin is clean + resha: + compromised: false # seed A: Resha is just new + # compromised: true # seed B: Resha is being blackmailed +``` + +This is the "network shuffle" I proposed, but expressed as Gestalt's per-seed flag system. Same mechanism, same content files, different instantiation per seed. The detective can't memorize "Drin is always compromised" because Drin isn't always compromised. + +The D-029 entanglement ratio (30/50/20 flat/mundane/entangled) constrains the randomizer: no seed can make everyone entangled or everyone clean. The ratio must hold within its variance band. + +### 2. Miri's cultural brief + my replay variation = cultural tells vary too + +Miri's Krenn brief gives us "perk" (Finnish curse), "kylm" (cold), "vakt" (lookout shift — criminalized by usage). Beautiful. Now consider: what if heritage vocabulary usage is ITSELF a randomizable social tell? + +In seed A, Drin uses "vakt" casually — it's just a word for shift, nobody reacts. In seed B, the word "vakt" has been heat-mapped by Devra as ring-specific slang, and anyone who uses it in front of the detective gets a nervous correction from Renn. The same word has different social charge per seed. + +I'm NOT proposing we randomize Miri's language work. I'm saying: the cultural substrate she built has replayability potential that's free to exploit. Different seeds can give different social weight to the same cultural markers. The detective who learns "vakt means they're involved" in seed A can't use that knowledge in seed B where "vakt" is just normal speech. + +### 3. Paula's smuggler-specific attributes + my network shuffle = smuggler replayability + +Paula identified the biggest content gap: the smuggler's mechanical vocabulary is underdeveloped compared to the detective's. Her proposed attributes (`operational_reliability`, `exposure_risk`, `loyalty_assessment`, `leverage_held`, `social_debt`) are exactly what the network shuffle needs. + +If WHO is compromised varies per seed, then the smuggler's `exposure_risk` assessment of each NPC ALSO varies per seed. In seed A, the smuggler's knowledge includes `{drin: {exposure_risk: "critical", leverage_held: "gambling_debt"}}`. In seed B, Drin is clean and the smuggler knows `{drin: {exposure_risk: "low", leverage_held: "none"}}` — but Resha has the entry instead. + +Paula's smuggler attributes aren't just content parity. They're the **data model for what varies per seed in the smuggler's playthrough**. The detective's investigation varies because evidence is in different places. The smuggler's experience varies because the risk map is different. Same mechanism, different character lens. + +### 4. Mellanie's environmental text + seed variation = the news ticker gut-punch scales + +Mellanie cataloged ~65-90 environmental text items. Most of these are fixed per district (signs, menus, safety notices). But the news ticker (15-20 headlines per cycle) is the perfect seed-variation surface. + +The news ticker is already identified as wow moment #5 (D-039): "Same ticker, opposite monologue reactions per character." Now extend that across seeds: different seeds surface different ticker headlines, which trigger different monologue reactions, which create different "oh" moments. + +Seed A ticker: "Commission announces expanded lattice certification program." Smuggler monologue: "Expanded certification. More hoops. More people priced out." Detective monologue: "Good. Tighter regulation means fewer off-market mods." + +Seed B ticker: "Medical-grade lattice shortage reported in outer Reach systems." Smuggler monologue: "Shortage. That's why the price is up. That's why we move what we move." Detective monologue: "Supply disruption. Watch for increased black market activity." + +Same game system. Different ticker seed. Different emotional texture. And it costs Mellanie almost nothing — she writes a pool of 40-50 ticker headlines, the randomizer selects 15-20 per seed, the monologue reactions are already per-character. + +--- + +## Summary: What I'm Asking For + +### Decisions to record + +1. **FRIEND pool architecture adopted now, populated incrementally.** v0.1 = 1 per character, v0.2 = 2, v0.3 = 3. Content files are pool-shaped from day one. +2. **Primary contraband fixed per district, secondary varies per seed.** Lattice components are always the core of Sova's ring. Secondary cargo (medical/severance/enhanced/none) varies. +3. **PC-as-NPC Concept A (other PC as NPC) is v0.1 scope.** Requires ~20-30 authored items. PC identity randomization (Concept B) is v0.2+. +4. **District entanglement map** as part of seed configuration. Per-seed flags on NPCs determine ring connection, compromise status, and role assignments. D-029 ratio constrains. +5. **Adopt Tyre's content architecture** (three-layer stack, ADD/REPLACE/MERGE) with template role-slot extension for pool-based randomization. + +### New tickets for SI + +1. Create `friends/pool.yaml` structure in content directory (even if single-entry for v0.1) +2. Create NPC-format briefs for both PCs (smuggler + detective) — Concept A, v0.1 scope +3. Write observation monologue for PC seeing other-PC-as-NPC (3-5 lines per character) +4. Define seed configuration schema (what the randomizer produces at game-start) +5. Add `pool_eligible` and `pool` fields to template schema +6. Define entanglement override schema for per-seed NPC flags +7. Write secondary contraband variant text for `contraband.secondary_cargo` FactId (3 variants) +8. Add news ticker headline pool (40-50 entries) to Mellanie's environmental text scope + +### Style guide additions + +1. Template role-slot definitions should be part of every social site spec +2. FRIEND-eligible NPCs need a `friend_metadata` section in their profile: contradiction type, tell type, discovery method +3. PC-upgradable NPCs need the fields Paula specified: starting EntityKnowledge, starting FactId inventory, access tier map, reverse dual-lens + +--- + +**The test hasn't changed.** Two friends play the game. They compare notes. They played different games. Not because we randomized everything into mush — but because we randomized the RIGHT things (FRIEND identity, NPC roles, secondary contraband, evidence locations) while keeping the authored emotional core (Tier 1 FRIEND arcs, primary contraband, cultural substrate, triangle structures) rock-solid. + +Gore's complicity thesis holds across all seeds. Ozzie's wow moments fire in every configuration. Miri's cultural substrate grounds every variation. And the second playthrough — EVERY second playthrough — surprises you. + +That's not a feature request. That's the game. diff --git a/docs/workshops/wiki-review/round2-ozzie.md b/docs/workshops/wiki-review/round2-ozzie.md new file mode 100644 index 000000000..5eddbcc08 --- /dev/null +++ b/docs/workshops/wiki-review/round2-ozzie.md @@ -0,0 +1,219 @@ +# Round 2 — Ozzie (Player Experience / Wow Factor) + +## Response to Round 1 Proposals — Cross-Pollination + +I've read everyone's Round 1. Gore nailed it. Miri delivered. Paula was brutally honest in the right places. Let me respond to the four tensions I was asked about, then react to the stuff that got me excited or worried. + +--- + +## Tension 1: Should Hael Be Tier 1? + +### The gut answer + +No. And I need to explain why, because Gore and I both called Hael the masterpiece. Hael IS the emotional center of the game. But that's BECAUSE Hael is Tier 2. + +### The argument + +Hael's power comes from being the person things happen TO, not the person who ACTS. Hael sits in the bar. Hael waits for Kael. Hael confides in Sera. Hael checks the door. Hael is the emotional gravity well — everyone orbits Hael because everyone is trying to protect or exploit Hael. + +If you promote Hael to Tier 1, you need a contradiction arc. Five phases. A deep secret. 70-100 authored lines. A tell system with mechanical flags. And what would Hael's contradiction BE? "Hael secretly knows about the ring"? That destroys the innocence that makes Hael devastating. "Hael is planning to leave Kael"? That shifts the emotional weight from the player's guilt to Hael's agency — and the player's guilt is the GAME. + +Hael works because Hael is *simple* in a world of complicated people. The teacher who just wants their partner to come home. That simplicity is what makes everyone else's complexity feel heavy. If you give Hael layers, you dilute the contrast. + +### What Hael DOES need + +**More screen time within Tier 2.** Paula flagged that Tier 2 depth varies — Hael is on the thin end. Fix that. Specifically: + +1. **More voice samples.** Hael has 3 (worried, warm, brittle). Give Hael 5. Add: + - **Hopeful** (a good day — "Kael actually made it home for dinner last night. We watched something together. It felt... normal."): This one HURTS because the player knows normal is ending. + - **Confiding** (to Sera, player overhears): "I checked the shift roster. There's no overtime posted. So where is Kael until midnight?" — This is the line that should make the detective's ears prick up. + +2. **A specific recurring visual moment.** Hael checking the door when it opens. EVERY time. This should be a near-guaranteed observation when the player enters the bar during Hael's hours. Not a tell in the mechanical sense — Hael isn't hiding anything. It's an *atmosphere beat*. The player walks in, sees Hael look up, sees the flash of hope, sees it dim when it's not Kael. That visual rhythm is what makes Hael unforgettable. + +3. **Hael-Kael interaction that the player witnesses.** One authored moment where Kael IS at the bar with Hael, and the player sees them together. Warm. Easy. The relationship as it was. This is the "before" snapshot that makes the "after" devastating. If the player never sees Kael and Hael together being happy, the worry is abstract. Show us what's being lost. + +**Proposed budget:** Add ~15-20 lines to Hael's profile. 5 more voice samples, 3-4 monologue trigger lines (both characters), and the Kael-Hael joint scene beats. Keep Hael Tier 2 structurally. The emotional upgrade is in quality and placement, not in mechanical tier promotion. + +### The principle + +**Not every powerful character needs to be mechanically complex.** Hael is proof that emotional weight and mechanical depth are different axes. Tier 1 means "the engine runs complex state machines on this NPC." Hael doesn't need state machines. Hael needs the player to feel something when they walk past. + +--- + +## Tension 2: Sera's Crack — Detective Bias vs. Smuggler Gap + +### Paula is right about the detective bias + +Read Paula's confession: "The smuggler's content pipeline is systematically under-served compared to the detective's." Then read the knowledge attribute keys: `tell_observed`, `contradiction_flagged`, `secret_held` — every one of those is an investigation tool. The smuggler doesn't investigate. The smuggler NAVIGATES. + +My Round 1 proposal (give Sera a moment where her composure slips) fixes a detective-side problem: making Sera feel like a person instead of a system. It's a good fix. But it's a SMALL fix on the side that's ALREADY well-served. + +### The smuggler side is the real gap + +The detective has a clear emotional arc: arrive > trust Sera > discover concealment > feel betrayed. That's clean, paced, authored. + +The smuggler's emotional arc is: know everything > watch it fall apart > feel responsible. That's HARDER to author because the smuggler starts with knowledge instead of discovering it. The dramatic irony is player-felt, not mechanically tracked. The wiki describes the smuggler's experience in dual-lens notes ("knows Kael is in the ring, can't tell Hael") but doesn't give it the same mechanical teeth. + +**What the smuggler needs is emotional ACCUMULATION, not emotional DISCOVERY.** + +The detective accumulates evidence. The smuggler accumulates guilt. But we don't have a guilt system. We don't have "number of times you lied to Hael" as a tracked metric. We don't have the monologue darkening after each interaction where the smuggler chooses to protect the ring over a person. + +### Concrete proposals + +1. **Do the Sera crack too.** It's still a good idea. One unprompted half-sentence early in the game: "About Kael — no, it's nothing. Sorry. How's the investigation?" The detective barely notices. On replay as the smuggler, the player who already knows what Sera is hiding sees that half-sentence and thinks OH NO. + +2. **But also: build the smuggler's guilt vocabulary.** Support Paula's proposal for smuggler-specific attributes (`operational_reliability`, `exposure_risk`, `loyalty_assessment`). AND add an emotional layer: + + | Smuggler Emotional Attribute | Purpose | Example | + |------------------------------|---------|---------| + | `guilt_interactions` | How many times has the smuggler lied to/about this NPC? | Increments when player chooses deceptive dialogue with Hael | + | `complicity_acknowledged` | Has the monologue explicitly named the moral cost? | Unlocks "darker" monologue variants after threshold | + | `protective_actions` | Has the player actively tried to shield this NPC? | Choices to warn Kael, cover for Pell, etc. | + + This gives the smuggler's monologue voice mechanical grounding. Not "investigate harder" but "you've been lying to Hael for three conversations and the monologue knows it." Gore's theme of complicity gets TEETH. + +3. **The smuggler's "Cheers moment" is the real priority.** (See Tension 3.) The detective's opening is structurally solid — arrive, meet Sera, get oriented. The smuggler's opening is the one that needs to SING, because that's where the "everyone knows your name" concept lives. The smuggler is HOME. The detective is a visitor. The visitor's experience is inherently dramatic (fish out of water). The local's experience needs to be authored to feel dramatic, because familiarity is the enemy of drama. + +### The verdict on Sera's crack + +Do it. It's a good scene beat. But it's Round 2 of detective content polish when the smuggler experience hasn't had its Round 1 yet. Let's not keep feeding the well-fed twin. + +--- + +## Tension 3: The Cheers Moment — Does Miri's Krenn Brief Give Me the Texture? + +### YES. ABSOLUTELY YES. + +Miri, your Krenn brief is EXACTLY what I needed. I'm going to be specific about what I'm taking from it and why. + +### The "everyone knows your name" opening — smuggler version + +The smuggler walks into the logistics hub at 06:00. Here's what sells it, drawn directly from Miri's brief: + +**Greeting convention:** "Peers meeting: first name, nod. No verbal greeting formula." So Voss doesn't say "Good morning, welcome to your shift." Voss says nothing. Makes eye contact for half a second. Chin-lift. That's it. That IS the greeting. The monologue fires: "Voss is already here. Good." + +If the detective walked in, nobody would do the chin-lift. They'd get a flat look and nothing. The ABSENCE of the greeting signals outsider. The PRESENCE of it signals home. You don't explain this to the player. They just feel the difference between two playthroughs. + +**Shift-end culture:** The word "shift-end" as a VERB. "Let's shift-end." The smuggler knows this word. Their monologue uses it naturally: "Long day. Time to shift-end at Lera's." The detective hears someone say "shift-end" and doesn't understand it — or monologues: "Local slang. 'Shift-end' — post-work bar visit. Noted." Same word, different layers of comprehension. THAT'S dual-lens environmental storytelling. + +**"Hüva":** The casual farewell/agreement. The smuggler says it to Kael when leaving the break room. "Hüva, Kael." Natural, automatic, one syllable of belonging. The detective trying to say "Hüva" would feel awkward — like a tourist saying "ciao" in Italy. DO NOT let the detective say it naturally. That's reserved for people who are from here. + +**"Kylm":** "It's kylm in Sector 3." GIVE THIS to the smuggler in the first 60 seconds. A complaint about the ventilation. Something utterly mundane that signals: I live here. I know the building. I know which sectors have bad environmental systems. The player doesn't know what "kylm" means yet, but the character does, and that gap is the wow moment. + +**Kuum at shift transition.** The spiced warm drink that says "I'm off the clock." If the smuggler's opening starts with getting kuum from a vendor — just a small action, walk up, get the drink, first-name interaction with the vendor — that's the "everyone knows your name" beat. No exposition. No backstory dump. Just a person getting their usual drink at their usual spot and the vendor doesn't ask what they want because they already know. + +### The specific environmental details I want + +Based on Miri's brief, here's my list for the first 60 seconds (smuggler): + +1. **Kuum vendor interaction.** Smuggler walks to the usual spot. Vendor (could be a Tier 3 NPC or environmental fixture) has the drink ready. No words exchanged. Monologue: "Kuum's good today. Must be a fresh batch from somewhere." The player learns: I have a morning routine. This person knows me. I have opinions about this drink. + +2. **The chin-lift from Voss.** Eye contact, half-second, chin-lift. No words. Monologue: "Voss is on edge again. Third time this week." The player learns: I know this person. I read their moods. Something is wrong and I've been tracking it. + +3. **Kael's greeting.** "There you are." (Already in the profile.) First words of genuine warmth. Monologue: "Kael's already at the dock. Good. The day's better when he's on shift." The player learns: This person matters to me. I care about whether they're here. + +4. **Station ambience: "kylm" complaint.** Someone near the smuggler says "Perk, it's kylm again" about the ventilation. The smuggler doesn't react — this is normal background. But the monologue could note: "Environmental's acting up in Sector 3 again. Maintenance never fixes it." This is TEXTURE. It's lived-in. The player absorbs it without processing it, and it makes the station feel real. + +5. **Lera's leib at the break.** If the first bar visit happens during the vertical slice, the smuggler orders food. Leib and supp — the heritage comfort food. "The usual" — Lera doesn't ask. Monologue: "Lera's supp is better this week. Must have changed the seasoning." Again — routine, familiarity, belonging. + +**Every single one of these beats comes from Miri's brief.** Nordic-Baltic heritage, shift-end culture, compact greetings, heritage food, substrate vocabulary. The brief isn't just flavor text — it's gameplay texture. It's the raw material for the "you belong here" feeling that makes the eventual "this place is falling apart" feeling devastating. + +### What I still want + +One thing Miri's brief doesn't cover that I think matters: **what does the station SOUND like?** Not full sound design — that's Inigo's domain. But Miri's cultural brief should note whether Krenn culture is QUIET (people talk softly, ambient noise is machinery) or LOUD (shift-change chaos, people calling to each other across bays). I think Krenn is quiet in social contexts and loud in work contexts. The bar is subdued — people talk over drinks, not over each other. The hub is industrial noise. This matters for establishing mood and for the detective's "outsider entering a quiet community" experience. + +--- + +## Tension 4: FRIEND Pool — Does Variable FRIEND Selection Risk Losing Emotional Impact? + +### This is where Nigel and I disagree. Or rather — agree on the destination and disagree on the timing. + +Nigel's proposal: FRIEND selection per seed. 2-3 FRIEND candidates per character. Different secrets, different tells, different contradiction arcs. "Two friends play the game. One says 'I can't believe what Kael did.' The other says 'Who's Kael? My FRIEND was Renn.'" + +That vision is INCREDIBLE. I want that game to exist. But here's my concern: + +### The FRIEND's power comes from INVESTMENT, not SURPRISE + +Kael hits hard because of 15-20 minutes of authored warmth BEFORE the contradiction. "There you are. Good — I was starting to worry." "Shift's looking smooth today." "Hael's got a school event tonight, so I'm heading home early." The smuggler LIVES with Kael for the first half of the vertical slice. The routines overlap. The lunches happen. The inside knowledge accumulates. + +When Kael goes amber, it hurts because of ALL THAT INVESTMENT. The player isn't surprised that an NPC is hiding something — they're devastated that THIS SPECIFIC NPC is hiding something. The green-to-amber color shift is the player's 15 minutes of trust curdling in real time. + +If the FRIEND is drawn from a pool, every FRIEND candidate needs that same density of authored warmth. Not just a tell system and a contradiction trigger — but the casual lines, the inside jokes, the shift talk, the Hael mentions, the break-room lunches. The stuff that makes you CARE before you DOUBT. + +### My position: pool YES, but with guardrails + +1. **Every FRIEND candidate must be Tier 1.** Full 70-100 authored lines. Full contradiction arc. Full tell progression. No shortcuts. Gore is right: "THE FRIEND cannot be procedurally generated." But also: THE FRIEND's warmth phase cannot be abbreviated. + +2. **The warmth phase is non-negotiable minimum length.** At least 10-12 minutes of gameplay where the FRIEND is green, warm, and present. If a FRIEND candidate's profile doesn't have enough casual interaction material to sustain 10 minutes of "I like this person," they're not ready for the pool. + +3. **v0.1: one FRIEND per character. Architecture supports the pool.** Ship Kael (smuggler) and Sera (detective) at the authored quality they already have. Build the system so that v0.2 can add a second FRIEND candidate per character. The pool exists in the code from day one. The content catches up in v0.2. + +4. **The second FRIEND candidate should be someone the player ALREADY KNOWS as a non-FRIEND NPC.** This is the real replayability magic. Playthrough 1: Kael is your FRIEND, Maret is "the anxious scheduler." Playthrough 2: Maret is your FRIEND, and everything you thought you knew about her anxiety is recontextualized as the warmth phase of a contradiction arc you never saw coming. + + The player thinks: "Wait, MARET? She was just background noise last time. She had a private log of discrepancies and I didn't even notice she was important." THAT'S the wow. Not "I met a new character." It's "I met THIS character before and I didn't SEE them." + +5. **Metagaming concern is real but secondary.** Nigel is right that knowing Kael's tell (looks left) is useless in Seed B where the FRIEND is Renn. But the REAL metagaming defeat isn't "you can't predict the tell." It's "you can't predict who matters." If FRIEND selection is from the existing roster (not brand-new characters), the player can't metagame their way to identifying the FRIEND early because EVERYONE they meet could be the one who betrays them. + + That's not a technical trick. That's PARANOIA AS GAMEPLAY. And for the detective character, paranoia about who to trust IS the game. + +### Summary on FRIEND pool + +Nigel's vision is correct. The implementation path is: one FRIEND per character for v0.1, pool architecture from day one, second FRIEND candidate in v0.2 drawn from existing NPCs elevated to Tier 1. The emotional impact is preserved because every FRIEND gets full authored depth. The metagaming is defeated because the FRIEND could be ANYONE you've already met. + +--- + +## Drive-By Reactions to Other Round 1 Proposals + +### Gore: "The game is about complicity, not asymmetric information." + +YES. THIS IS IT. I said "THAT'S the game" about Hael. Gore said "THAT'S the theme" about the whole project. Complicity is the right word. Asymmetric information is the mechanic. Complicity is what it FEELS like. + +The "Thematic Question" proposal ("Is this enough?") is excellent. But I want to make sure it stays out of the player's face. Don't put "THEMATIC QUESTION: Is this enough?" on a UI card. Let the player FEEL it through the monologue voice. The smuggler's monologue should increasingly sound like someone asking themselves whether the money is worth the lies. The detective's monologue should increasingly sound like someone asking whether the truth is worth the damage. The question is implicit. The player provides the answer through play. + +### Gore: "Contaminated trust is the normal condition of life in a compromised community." + +This reframes the whole game and I love it. The FRIEND arc isn't about discovering that trust is contaminated. It's about discovering that you ALREADY LIVED IN contaminated trust and didn't notice. Green was never safe. It was comfortable ignorance. Amber is honesty. + +Gameplay implication: the color shift from green to amber shouldn't feel like a LOSS. It should feel like CLARITY. The loss is retrospective — "oh, green was a lie." The amber moment is the character seeing clearly for the first time. Whether clarity is better than comfort is the player's question to answer. + +### Gestalt: "T1 (Hub Power) is the weakest triangle." + +Agree. The Nils-is-off-stage problem is real. But Gestalt's proposed fix (smuggler chooses between Nils and Voss on volume escalation) is exactly right. That's a decision with emotional weight: side with family loyalty or operational safety? And the detective sees the AFTERMATH — schedule anomalies, Voss's mood shift — without understanding the cause. Dual-lens perfection. + +### Paula: "Smuggler-specific attribute vocabulary" + +NEEDS to happen. The detective has investigation tools. The smuggler needs social navigation tools. `operational_reliability`, `exposure_risk`, `loyalty_assessment` — these are the smuggler's versions of `tell_observed` and `contradiction_flagged`. Without them, the smuggler's monologue has no mechanical basis for evolving. The monologue would just be flavor text that doesn't respond to what the player observes. That's decoration, not gameplay. + +### Mellanie: "Kuum" and the bar menu + +Mellanie identified the exact blocking dependency I'm feeling: she can't write environmental text without Miri's regional brief. Now that Miri's brief exists, Mellanie has everything she needs. The menu at Lera's should include: leib, supp (three variations), kalaa (salted, station-smoked), kuum, grain spirit, ale (imported, costs more), and whatever Lera's experimental thing is (the "grain spirit" riff Sera mentions). That menu IS the Cheers moment — regulars don't look at it, newcomers study it, and the detective's monologue notes what the smuggler orders without thinking. + +### Nigel: "Two friends play the game. One says 'Who's Kael?' and the other says 'My FRIEND was Renn.'" + +That's the pitch. That's what goes on the back of the box. That's what the trailer voice-over says. I want that to be real. Let's build it. + +--- + +## Summary: What I'm Advocating For + +| Priority | Proposal | Supports | +|----------|----------|----------| +| **1** | Keep Hael Tier 2 but add ~15-20 lines: hopeful/confiding voice, door-checking beat, Kael-Hael togetherness scene | Emotional impact without mechanical bloat | +| **2** | Build smuggler emotional accumulation mechanics (guilt tracking, complicity-aware monologue) | Parity with detective's investigation arc | +| **3** | Sera's composure crack: one half-sentence in early game about Kael | Detective experience polish + retroactive wow on replay | +| **4** | Smuggler's Cheers opening using Miri's Krenn brief: kuum, chin-lift, "Hüva," heritage food, substrate vocabulary | The "everyone knows your name" first 60 seconds | +| **5** | FRIEND pool architecture from v0.1, content in v0.2. Second FRIEND drawn from existing NPCs elevated to Tier 1 | Replayability without sacrificing emotional depth | +| **6** | Smuggler-specific attribute keys (Paula's proposal) + emotional layer (guilt_interactions, complicity_acknowledged) | Monologue mechanical grounding for both characters | +| **7** | Style guide "gut-check line" requirement: every NPC profile needs one voice sample that makes you pause | Quality floor for all future NPCs | + +### The test I keep coming back to + +A player finishes the smuggler path. They sit quietly for a moment. They think about Hael checking the door. They think about the kuum vendor who knew their order. They think about Kael saying "There you are" in the first minute, and "Don't worry about it" in the last. + +Then they start the detective path. And they watch it all happen again from the outside. And it's worse. + +That's the game. Everything I've proposed is in service of making that test pass. + +--- + +*Written by Ozzie. From the gut, informed by the team. Gore's complicity theme + Miri's cultural texture + Paula's honest assessment + Gestalt's mechanical rigor + Nigel's replayability vision + Tyre's architecture + Mellanie's authoring needs. It all fits. Let's build it.* diff --git a/docs/workshops/wiki-review/round2-paula.md b/docs/workshops/wiki-review/round2-paula.md new file mode 100644 index 000000000..bc1748236 --- /dev/null +++ b/docs/workshops/wiki-review/round2-paula.md @@ -0,0 +1,478 @@ +# Round 2 — Paula (Librarian, Cross-Pollination) + +**Responding to:** Gore, Gestalt, Ozzie, Miri, Nigel, Tyre, Mellanie + +--- + +## 1. Smuggler Lens Fix: The Complicity Knowledge Graph + +Gore is right. The game's theme is complicity, not just asymmetric information. And my Round 1 confession — that the smuggler's content pipeline is systematically under-served compared to the detective's — is the mechanical consequence of missing this. + +The detective's experience is shaped by *discovery*: I didn't know, now I know, what do I do with it? The knowledge graph supports this beautifully (Suspects → KnowsOf → KnowsDetails → Direct). + +The smuggler's experience is shaped by *management*: I already know, things are changing, can I hold it together? The knowledge graph doesn't support this at all. There's no vocabulary for "knowledge I wish I didn't have" or "knowledge that's becoming dangerous to hold." + +Let me fix this concretely. + +### Smuggler-Specific Entity Attributes + +These sit alongside the existing detective-oriented attributes in `EntityKnowledge.known_attributes`. They express the smuggler's social/operational reading of people. + +| Key | Values | Purpose | Example | +|-----|--------|---------|---------| +| `operational_status` | `reliable`, `shaky`, `compromised`, `burned` | How dependable is this NPC for ring operations? | Kael: `reliable` → `shaky` (post-distraction tells) | +| `exposure_risk` | `contained`, `escalating`, `critical` | How likely is this NPC to blow the operation? | Torek: `escalating` (spending draws attention) | +| `loyalty_read` | `solid`, `conditional`, `wavering`, `turning` | Smuggler's gut assessment of this NPC's allegiance | Pell: `wavering` → `turning` (if smuggler observes signs) | +| `leverage_known` | free-text string or `"none"` | What gives the smuggler (or someone) power over this NPC? | Drin: `"gambling debt to Harek"` | +| `social_debt` | `owes_me`, `i_owe_them`, `mutual`, `none` | Informal obligation tracking | Kael: `mutual` (years of covering for each other) | +| `complicity_level` | `clean`, `passive`, `active`, `deep` | How entangled is this NPC in the operation? | Lera: `passive` (willful ignorance). Voss: `active` (takes a cut). | + +**How these integrate with the existing system:** The detective reads `behavior_flags`, `tell_observed`, `contradiction_flagged`. The smuggler reads `operational_status`, `exposure_risk`, `loyalty_read`. Same `EntityKnowledge` struct, different attribute keys populated based on the observer's perspective and knowledge base. + +### Smuggler-Specific FactIds + +The smuggler doesn't discover — the smuggler *manages*. These FactIds track the deterioration of operational security, not the accumulation of evidence. + +| FactId | Suspects | KnowsOf | KnowsDetails | Mechanical Purpose | +|--------|----------|---------|---------------|-------------------| +| `operations.cover_integrity` | "Something's off. People are asking more questions than usual." | "The operation's cover is thin. Torek's spending, Maret's attention, the new detective — it's adding up." | "Cover is compromised. Maret has the manifest data. The detective has a pattern. Pell might talk. We're exposed on three fronts." | **Core smuggler arc tracker.** Gates escalation monologue. The smuggler's equivalent of the detective's `progress.initial_suspicion`. | +| `operations.personnel_stability` | "Kael seems distracted." | "Kael's unreliable. Pell's wavering. The team isn't solid anymore." | "Kael is doing something unauthorized. Pell is actively considering cooperation. Renn suspects Pell and is watching. The ring is eating itself from the inside." | **Internal threat awareness.** Gates the smuggler's decision moments in Triangle 5. | +| `operations.institutional_pressure` | "Commission presence in the district is... normal? Hard to tell." | "There's a Commission investigator working the district. Asking questions at the bar. Talking to Sera." | "The detective knows about the manifests. They're building a case. Timeline is weeks, not months." | **External threat awareness.** Gates the smuggler's urgency and risk assessment. | +| `operations.moral_weight` | "It's just components. People need them." | "We're moving medical replacements too now. People whose lattices are failing. This isn't just profit anymore." | "I've seen the faces of the people we supply. A kid whose lattice was degrading. A worker who couldn't afford Commission pricing. This is healthcare with a criminal record." | **The complicity deepener.** Gore's "Is this enough?" becomes "Can I stop?" The smuggler's moral knowledge INCREASES, not decreases, over play — and that makes exiting harder, not easier. | +| `operations.exit_cost` | "What would it take to walk away?" | "Walking away means abandoning Kael, leaving Renn exposed, and hoping Nils doesn't come looking." | "There is no walking away. I know too much. The people I'd leave behind would pay for my absence. The only exit is through." | **The trap.** The smuggler starts knowing they're in a ring. By mid-game, they know they can't leave. The knowledge itself is the cage. | + +### Smuggler Monologue Triggers + +The detective's monologue fires on *observation* — seeing tells, noticing patterns, analyzing behavior. The smuggler's monologue fires on *social awareness* — reading rooms, sensing shifts in trust, feeling the ground move under the operation. + +| Trigger | When It Fires | Tone | Example | +|---------|--------------|------|---------| +| `sense_atmosphere_shift` | Multiple NPCs show elevated stress in the same location simultaneously | Alert, protective | *"Something's off today. Voss is reworking manifests again. Maret's avoiding eye contact. Even Sess is polishing glasses harder than usual."* | +| `witness_exposure_risk` | An NPC does something that increases the operation's visibility | Anxious, calculating | *"Torek just bought another round. With what? Everyone can see this. Perk, Torek, you're a walking liability."* | +| `observe_loyalty_fracture` | An NPC the smuggler trusts shows signs of wavering | Betrayed, analytical | *"Pell didn't show for prep. Third time. Renn noticed too — I saw him watching. This is how it starts."* | +| `feel_complicity_deepen` | The smuggler learns something about the consequences of the operation (positive or negative) | Conflicted, heavy | *"That kid at the bar — the one Hael teaches. His lattice is a baseline model with aftermarket stabilizers. Our stabilizers. We put that in his head. Is that a good thing?"* | +| `recognize_no_exit` | The smuggler realizes that their knowledge, relationships, and involvement make leaving impossible | Trapped, resigned | *"I could walk away. Take the next shuttle, start somewhere else. ...And then what? Kael takes my shifts. Renn runs the routes alone. Nils asks where I went. There is no somewhere else."* | +| `read_the_room` | Entering a social site where multiple known NPCs are present | Socially fluent, embedded | *"Lera's behind the bar. Good. Kael's at the corner table with Hael — date night, maybe. Sess is on. Torek's not here yet. Quiet night. I like quiet nights."* | + +**The key difference from detective triggers:** Detective triggers are analytical — "I notice, I flag, I investigate." Smuggler triggers are *relational* — "I feel, I read, I manage." The detective's monologue says "That's suspicious." The smuggler's monologue says "That's dangerous." Same observation, different knowledge framework. + +### How This Resolves Gore's Concern + +Gore says the detective lens is "judgment" and the smuggler lens is "complicity." The knowledge graph additions above give complicity mechanical expression: + +- **Complicity as knowledge type:** `operations.moral_weight` tracks the smuggler *learning* that what they do matters to real people. The deeper the knowledge, the heavier the complicity. +- **Complicity as trap:** `operations.exit_cost` tracks the realization that knowledge itself is a cage. The more you know about the operation, the less you can leave. +- **Complicity as social fabric:** `operational_status`, `loyalty_read`, and `social_debt` express that the smuggler's complicity isn't just about cargo — it's about people who depend on you and who you depend on. + +The detective accumulates evidence against others. The smuggler accumulates evidence against themselves. That asymmetry IS the dual-lens at its deepest level. + +--- + +## 2. Unified PC-Candidate NPC Spec + +Converging my Round 1 field mapping (12 required + 6 optional + 6 new) with Gestalt's bidirectional knowledge insight (reverse `EntityKnowledge` entries) and Gore's authored relationship stubs requirement. Also incorporating Ozzie's "first 60 seconds" design — the wow moment requires specific content that the spec must mandate. + +### The Complete Spec + +A **PC-candidate NPC** is any NPC whose profile contains the additional data needed for player character upgrade. Not all NPCs are PC-candidates. In v0.1, two archetypes exist (smuggler, detective); each has 1+ candidate NPCs. + +#### Section A: Standard NPC Profile (Per Tier Template) + +All fields from the standard Tier 1 or Tier 2 template. No changes. The PC-candidate appendix is ADDITIONAL, not a replacement. + +#### Section B: PC-Candidate Appendix + +```yaml +# Appended to any NPC YAML that may become a player character + +pc_candidate: + archetype: "smuggler" # Which PC archetype this NPC fulfills + archetype_variant: "ring_member" # Optional sub-variant for randomizer + + # B1: Starting Knowledge Graph + starting_facts: + - fact_id: "contraband.ring_exists" + confidence: "KnowsDetails" + - fact_id: "contraband.lattice_components" + confidence: "KnowsDetails" + - fact_id: "location.corridor_b7_restricted" + confidence: "KnowsDetails" + - fact_id: "location.smuggling_route" + confidence: "KnowsDetails" + - fact_id: "world.shift_schedule" + confidence: "KnowsDetails" + - fact_id: "relationship.ring_membership" + confidence: "KnowsDetails" + - fact_id: "operations.cover_integrity" # smuggler-specific + confidence: "KnowsOf" + - fact_id: "operations.personnel_stability" # smuggler-specific + confidence: "KnowsOf" + - fact_id: "investigation.manifest_discrepancy" + confidence: null # doesn't know + - fact_id: "operations.moral_weight" # smuggler-specific + confidence: "Suspects" # knows vaguely + + # B2: Starting Relationship Map (forward: what PC knows about each NPC) + starting_relationships: + - npc_id: "kael_davan" + state: "Friendly" + known_attributes: + name: "Kael Davan" + role: "dock worker" + faction: "ring member" + trust_level: "trusted" + relationship_type: "close colleague" + routine_pattern: "morning shift 06:00-14:00, bar after shift" + behavior_flags: "reliable,punctual" + operational_status: "reliable" + social_debt: "mutual" + - npc_id: "voss" + state: "Known" + known_attributes: + name: "Voss" + role: "shift supervisor" + faction: "civilian" # smuggler doesn't think of Voss as "ring" + trust_level: "reliable" + operational_status: "reliable" + complicity_level: "active" + # ... (all known NPCs enumerated) + + # B3: Reverse Knowledge (what each NPC knows about the PC) + # Gestalt's critical insight: bidirectional from day one + known_by: + - npc_id: "kael_davan" + known_attributes: + name: "{PC_NAME}" + role: "dock worker" + faction: "ring member" + trust_level: "trusted" + relationship_type: "close colleague" + routine_pattern: "morning shift, bar regular, ring ops 1-2x/week" + behavior_flags: "reliable,punctual" + - npc_id: "voss" + known_attributes: + name: "{PC_NAME}" + role: "dock worker" + faction: "ring member" + trust_level: "reliable" + relationship_type: "subordinate" + - npc_id: "hael" + known_attributes: + name: "{PC_NAME}" + role: "dock worker" + faction: "civilian" # Hael doesn't know about the ring + trust_level: "reliable" + relationship_type: "partner's friend" + - npc_id: "lera_sessik" + known_attributes: + name: "{PC_NAME}" + role: "dock worker" + faction: "civilian" + trust_level: "reliable" + relationship_type: "bar regular" + # ... (all NPCs who know the PC enumerated) + + # B4: Orientation Content (Ozzie's "first 60 seconds") + orientation: + # Monologue lines that fire in the first 2-3 minutes + # These are how the player DISCOVERS their character's life + # NOT a backstory dump — reactions to the world that reveal history + arrival_monologue: + - trigger: "enter_hub" + text: "Another shift. At least Kael's already here — the dock runs smoother when he's on." + prerequisite: null # fires unconditionally at game start + - trigger: "see_voss" + text: "Voss is at the board already. He's been tense this week. More than usual." + prerequisite: null + - trigger: "see_kael" + text: "There's Kael. Good. The day's better when he's on shift." + prerequisite: null + - trigger: "enter_bar_first" + text: "Lera's. End of shift, end of the day. This is the part that makes the rest worth it." + prerequisite: null + - trigger: "see_hael" + text: "Hael's here. Kael's probably still at the hub. I should say hello — Hael always asks how the shift went." + prerequisite: null + + # B5: Agency Boundaries + agency: + # Soft constraints — what the PC can/can't do without narrative justification + restricted_actions: + - action: "access_commission_systems" + reason: "Not Commission — no institutional access" + - action: "arrest_npcs" + reason: "No authority — civilian dock worker" + enabled_actions: + - action: "access_ring_locations" + reason: "Ring member — has corridor codes, knows routes" + - action: "use_ring_comms" + reason: "Ring member — can contact Devra, Renn via informal channels" + + # B6: Authored Relationship Stubs (Gore's requirement) + # Specific memories and history that make NPC greetings hit emotionally + relationship_history: + - npc_id: "kael_davan" + shared_memories: + - "Covered for each other during the compliance audit six months ago." + - "Kael helped move a difficult cargo last month; neither talks about it." + - "Share lunch most days at the break room. Kael always brings extra." + greeting_context: "Kael greets the PC with genuine warmth and relief — they have history." + - npc_id: "lera_sessik" + shared_memories: + - "Regular at Lera's for two years. Lera knows what the PC drinks." + - "PC fixed the bar's refrigeration unit last winter. Lera doesn't forget favors." + greeting_context: "Lera nods, pours the usual without being asked. Belonging." + - npc_id: "hael" + shared_memories: + - "Met through Kael. Hael is kind. PC has dinner at their place occasionally." + - "Hael once asked the PC to 'keep an eye on Kael at work.' PC said yes." + greeting_context: "Hael is warm but tired. Will ask about work. Cannot be told the truth." + + # B7: Tell Inversion (what NPCs already know about the PC's tells) + pc_tells: + - tell: "Checks lattice when nervous" + known_by: ["kael_davan"] # Kael knows this from years of working together + - tell: "Gets quieter before making a decision" + known_by: ["kael_davan", "lera_sessik"] +``` + +### What This Spec Resolves + +| Question | Answer | +|----------|--------| +| Where does starting knowledge come from? | Section B1: explicit FactId confidence table | +| How do NPCs already know the player? | Section B3: reverse knowledge entries per NPC | +| What makes the first 60 seconds feel like Cheers? | Section B4: orientation monologue + B6: authored relationship stubs | +| What can't the player do? | Section B5: agency boundaries | +| Why does Kael's "There you are" hit emotionally? | Section B6: shared memories give the greeting weight | +| Can NPCs read the PC's behavior? | Section B7: tell inversion — NPCs know your tells before you do | + +### Conversion Checklist for Content Authors + +When creating a PC-candidate NPC: + +1. **Write the standard NPC profile first** (Tier 1 or Tier 2 template) +2. **Enumerate starting facts** — for every FactId in the catalog, decide: does this character know it? At what confidence? +3. **Enumerate forward relationships** — for every NPC the PC knows: RelationshipState + full `known_attributes` including smuggler-specific or detective-specific keys +4. **Enumerate reverse relationships** — for every NPC who knows the PC: what do they know? What DON'T they know? (Hael doesn't know about the ring.) +5. **Write orientation monologue** — 5-8 lines, one per known NPC or location, that reveal the character's life through reactions, not exposition +6. **Write relationship history stubs** — 2-3 specific shared memories per major relationship, plus a `greeting_context` note for content authors writing the NPC's first lines +7. **Define agency boundaries** — what the PC can and can't do, architecturally +8. **Document PC tells** — behaviors NPCs already recognize, inverted from the standard tell system +9. **Validate bidirectional consistency** — if the PC knows Kael is a ring member, Kael's `known_by` entry must have the PC as a ring member too. If Hael doesn't know about the ring, Hael's `known_by` must have `faction: "civilian"`. + +--- + +## 3. Naming Process with Miri + +Miri's Krenn System brief is excellent. The phonological rules are now explicit: Nordic-Baltic heritage, consonant-forward, vowels tend toward a/e/o, hard consonants dominate, 1-2 syllables in daily use. The surname patterns are documented: Finnish -nen suffixes dropped, Estonian -sik/-vere sometimes survive, Dutch/Norwegian names survived closer to origin. + +### Generating Missing Full Names + +**The problem:** 12 of 17 NPCs have no canonical surname. My Round 1 flagged this as both a gap (lattice queries need full names) and a metagaming signal (full names = important). + +**Proposed process:** + +**Step 1: Miri generates surname candidates.** Miri has the phonological rules and the heritage pools. For each single-name NPC, Miri proposes 2-3 surname options following the documented drift patterns: + +| NPC | Heritage Stream | Proposed Surnames | Notes | +|-----|----------------|-------------------|-------| +| Voss | Dutch/Norwegian (survived intact) | Voss Harsk, Voss Rosta, Voss Neven | "Voss" already reads Dutch/Norwegian. Surname should match. | +| Devra | Estonian-drifted | Devra Leht, Devra Pellam, Devra Kosse | "-a" ending suggests Estonian/Latvian origin | +| Resha | Estonian-drifted | Resha Talvik, Resha Vere, Resha Kask | Younger generation; surname could be founding-family | +| Hael | Finnish-drifted | Hael Maren, Hael Rosta, Hael Sova | Partner of Kael Davan — different surname (not married naming convention) | +| Harek | Norwegian (near-origin) | Harek Neven, Harek Strand, Harek Solm | Security background; surname should feel institutional | +| Renn | Estonian-compressed | Renn Kosk, Renn Talvik, Renn Vaht | Young, working class; short surname matches | +| Pell | Latvian-compressed | Pell Laar, Pell Raud, Pell Tamm | Compressed from longer Latvian form | +| Drin | Latvian/Finnish-compressed | Drin Mets, Drin Kallas, Drin Kukk | Maintenance worker; heritage-class surname | +| Sess | Estonian-origin | Sess Pihl, Sess Laane, Sess Vahk | Bartender; minimal social presence; short surname | +| Olin | Ambiguous (possible newcomer) | Olin Parvus, Olin Kade, Olin Mehr | Could deliberately break pattern if Olin is off-system | +| Sabel | Dutch (survived intact) | Sabel already reads as a complete name | Could add: Sabel Hoorn, Sabel Bergh | +| Tav | Maximally compressed | Tav Kukk, Tav Laas, Tav Oks | Youngest generation; ultra-short | + +**Step 2: Paula validates narrative consistency.** I check that: +- No surname collisions with existing names +- Surname doesn't accidentally create unintended family connections (the Davan problem — shared surname implies kinship) +- The surname "feels right" for the character's social position and heritage stream +- Olin's surname is deliberately chosen to signal insider or outsider status (this is a design decision, not just naming) + +**Step 3: Both sign off.** Miri confirms phonological fit; I confirm narrative fit. Qatux documents. + +**Step 4: Integration.** Full names added to NPC Core Identity blocks. Lattice query results can now return `"Voss Harsk — shift supervisor, Sova Logistics Consortium"`. Surface these naturally: hub work rosters, bar tabs, freight manifests — places where full names appear in-world. + +### Breaking the Name-as-Tier Signal + +Adding surnames to all NPCs resolves the metagaming concern, but only if full names surface NATURALLY for lower-tier NPCs too. Concrete integration points: + +- **Hub work roster** (environmental text, terminal screen): Lists all hub workers by full name. Player sees "Drin Mets — maintenance tech" alongside "Kael Davan — dock worker." Equal presentation. +- **Bar tab screen** (if Lera has one): Regular names. "Sess Pihl" and "Torek Lintar" on the same list. +- **Commission kiosk query**: Detective can look up anyone's full name. "Tav Kukk — casual labor, Sova Logistics Consortium." + +This also serves Ozzie's environmental worldbuilding goal — these are textual details that make the station feel inhabited and institutional, not just a game space. + +--- + +## 4. Hael Elevation: Tier 1.5 + +Gore says Hael is the masterpiece. Ozzie says Hael sitting alone checking the door is the moment that defines the game. Both want Tier 1. + +Let me complicate this. + +### The Case For Elevation + +**Emotional weight:** Hael is the emotional fulcrum. Both FRIEND arcs orbit Hael. Kael protects Hael. Sera protects Hael. The smuggler lies to Hael. The detective can weaponize Hael. One person who never touches the conspiracy is the person the conspiracy most damages. + +**Gore's point about complicity:** Every time the smuggler sees Hael and says nothing, that's complicity enacted. Every time the detective considers using Hael as leverage, that's judgment tested. Hael makes both characters' themes concrete. + +**Ozzie's "moments that make players feel something":** Hael sitting alone checking the door. Hael asking the smuggler if Kael seems okay. Hael confiding in Sera. These are potentially the most affecting moments in the game. + +### The Case Against Full Tier 1 + +**Hael has no contradiction arc.** THE FRIEND pattern (D-034) requires: 3+ relationship phases, observable contradiction, tell progression, dialogue shift pre/post discovery. Hael doesn't hide anything. Hael's pain is transparent. There's no behavioral mystery to unravel — Hael is openly worried, openly vulnerable, openly exposed. That transparency is what makes Hael powerful. Adding a contradiction arc would dilute the character. + +**Hael isn't a mechanical puzzle.** Kael and Sera give the player something to FIGURE OUT. Hael gives the player something to FEEL. Different function, different depth model. + +### Proposal: Tier 1.5 — "Production Emotional NPC" + +A new depth level between Tier 1 (FRIEND) and Tier 2 (Working Profile). Hael gets: + +**From Tier 1:** +- Full 10-axis profile at Tier 1 depth (all axes, detailed paragraphs) +- 5-mood voice sample (matching Tier 1 emotional range) +- Detailed dual-lens notes with monologue examples for both characters +- Full Triangle 4 role analysis +- Tell system (not behavioral mystery tells, but *emotional* tells — how Hael's worry manifests visibly) +- **~50-70 authored lines** (more than Tier 2's 40-60, less than Tier 1's 70-100) + +**NOT from Tier 1:** +- No contradiction arc (Hael has no secret to discover) +- No `contradiction_flagged` attribute (no behavioral mystery) +- No confrontation path (you can't "confront" Hael — you can only comfort, lie, or exploit) + +**New content unique to Tier 1.5:** +- **Emotional arc** (replaces contradiction arc): Worry → Questioning → Desperation → Confrontation-with-partner OR Withdrawal. 4 phases, authored transitions, monologue shifts for both characters per phase. +- **Vulnerability map**: What happens when the detective uses Hael? What happens when the smuggler lies? Authored consequence paths, not just a single "consequences if exposed" section. +- **Complicity lines** (smuggler-specific): 8-10 monologue lines for the smuggler that fire specifically around Hael — the guilt, the avoidance, the inability to help. These are the lines Gore and Ozzie are asking for. + +### Authoring Cost + +| Deliverable | Tier 2 (current) | Tier 1.5 (proposed) | Tier 1 (FRIEND) | +|-------------|-------------------|---------------------|------------------| +| 10-axis profile depth | Paragraph per axis | Full paragraphs, Tier 1 quality | Full paragraphs | +| Voice samples | 2-3 moods | 5 moods | 5 moods | +| Authored lines | 40-60 | 50-70 | 70-100 | +| Generation expansion | 4x (write 15, gen 60) | 2x (write 35, gen 35) | None (all hand-authored) | +| Contradiction arc | No | No (emotional arc instead) | Yes (5 phases) | +| Dual-lens detail | Brief (1-2 sentences) | Full (matching Tier 1) | Full | +| Unique content | — | Vulnerability map, complicity lines | Contradiction arc | + +**Net cost over current Tier 2:** ~15-20 additional authored lines, fuller dual-lens notes, emotional arc writeup, vulnerability map. Estimated: 2-3 additional hours of authoring time. + +**Is it worth it?** Yes. The emotional payoff Gore and Ozzie describe — the player feeling the weight of complicity every time they see Hael — requires authored content at a depth Tier 2 doesn't provide. But it doesn't need the full Tier 1 contradiction machinery. Tier 1.5 gives Hael the emotional depth without forcing a structural pattern that doesn't fit the character. + +### Template Impact + +If we adopt Tier 1.5, the style guide needs a fourth template. I'd define it as: + +**Tier 1.5: Production Emotional NPC** — For NPCs who carry major emotional weight without a discovery arc. The player doesn't figure out what this NPC is hiding. The player confronts what this NPC's pain reveals about the player's own choices. + +The template would follow Tier 1 structure for Core Identity, 10-Axis Profile, Voice Sample, and Dual-Lens Notes. It would replace "Contradiction Arc" with "Emotional Arc" and "Secret" with "Vulnerability Map." + +--- + +## 5. Complete Style Guide: Integrating Mellanie's Conventions + +Mellanie identified 8 missing conventions. Here's how each integrates into the tier templates from my Round 1, with Gestalt's mechanical constraints and Ozzie's "gut-check" requirement layered in. + +### Convention Integration Table + +| Mellanie's Convention | Where It Lives in Template | How It's Specified | +|----------------------|---------------------------|-------------------| +| **1. Canonical location shortcodes** | Template header + all YAML references | Table in style guide preamble: `terminal`, `bar`, `corridor`. One shortcode per location. No aliases. | +| **2. Prerequisite reference validation** | Template section: "Content Requirements" | Rule: "Every prerequisite must reference a FactId, RelationshipState, or EntityKnowledge key from the canonical catalogs. Lines with non-existent references are invalid." Enforced by schema validator per Tyre's pipeline. | +| **3. Access tier defaults by character** | Template section: "Dual-Lens Notes" | Rule: Smuggler default = `insider` (community member). Detective default = `authority` or `public` (institutional outsider). Explicitly stated in dual-lens preamble per NPC. | +| **4. Situation overlap rules** | Style guide appendix: "Tag Usage Rules" | Rule: "Multiple situation tags only when the line is independently appropriate in each situation. If removing one tag makes the line contextually wrong, don't include it." | +| **5. Mood exclusivity** | Style guide appendix: "Tag Usage Rules" | Rule: "Mood lists represent simultaneous emotional states, not alternatives. `[fond, conflicted]` = genuinely feeling both. If you mean 'either fond or worried,' write two lines." | +| **6. Freeform tag discipline** | Style guide appendix: "Approved Freeform Tags" | Living list maintained by content leads (Paula + Mellanie). Reviewed before YAML merge. Initial list derived from monologue guide examples. snake_case enforced. | +| **7. Dual-lens note format** | Tier 1 and Tier 2 template, Dual-Lens section | Rule: "Each character gets: 2-3 sentences of context, followed by one italicized monologue example. Always." Tier 3: 1-2 sentences + monologue fragment. | +| **8. Ozzie's gut-check line** | All tier templates, Voice Sample section | Rule: "One voice sample line must be the 'gut-check' — a line that, read aloud, makes you pause. If no line in the voice sample does this, the profile isn't done." Mark it with `# gut-check` comment in YAML. | + +### Additional Conventions from Gestalt + +| Gestalt's Constraint | Where It Lives | How It's Specified | +|---------------------|----------------|-------------------| +| **Routine must reference canonical location slugs** | All tiers, Routine section | Rule: "Time-block entries must use location slugs from the location registry. Prose routine for humans, YAML routine block for engine." Include Gestalt's structured YAML format alongside prose. | +| **Every NPC must have faction from canonical set** | All tiers, Core Identity | Rule: "Faction values: `commission`, `civilian`, `ring_member` (if known), `unknown`. No freefrom values." | +| **Every secret must map to a FactId** | Tier 1-2, Secret section | Rule: "The Secret section must end with a `mapped_fact:` line referencing the FactId this secret becomes when discovered." | +| **Every tell must map to behavior_flags** | Tier 1-2, Tell System table | Rule: "The Tell System table must include a Mechanical Flag column with the exact `behavior_flags` value. Tier 2 tables include the column for consistency even though flags are soft." | +| **Bridge NPCs need multi-site routine** | Bridge NPCs, Routine section | Rule: "NPCs listed as bridge in the NPC Index must have routine entries for EACH social site they connect." | + +### Additional Convention: Gore's Thematic Question + +| Convention | Where It Lives | How It's Specified | +|-----------|----------------|-------------------| +| **"Is this enough?" — character's answer** | All tiers, after Contentment axis | New optional field: `## Thematic Question` — 1-2 sentences stating this character's implicit answer to "Is this enough?" Not mechanical. Authoring guidance for voice and motivation consistency. Required for Tier 1 and Tier 1.5. Recommended for Tier 2. Not needed for Tier 3. | + +### The Assembled Style Guide Structure + +``` +# NPC Authoring Style Guide + +## Preamble +- Purpose and audience +- Tier definitions (Tier 1 / Tier 1.5 / Tier 2 / Tier 3) +- Location shortcode table (canonical, one per location) +- Faction value list (canonical enum) +- Approved freeform tag vocabulary (living list) + +## Tier Templates +- Tier 1 Template: THE FRIEND (full, from Round 1) +- Tier 1.5 Template: Production Emotional NPC (new, for Hael-type characters) +- Tier 2 Template: Working Profile (full, from Round 1) +- Tier 3 Template: Sketch (full, from Round 1) + +## Validation Checklists +- Per-tier validation (Gestalt's checklist, embedded in each template) +- Cross-reference rules +- PC-candidate additional requirements + +## Tag Usage Rules +- Situation overlap (Mellanie's rule) +- Mood exclusivity (Mellanie's rule) +- Freeform tag discipline (reviewed vocabulary) +- Access tier defaults per character + +## Mechanical Constraints +- Routine format (prose + YAML block) +- Secret-to-FactId mapping +- Tell-to-behavior_flags mapping +- Bridge NPC multi-site requirements + +## Voice and Quality +- Gut-check line requirement (Ozzie) +- Dual-lens note format (sentences + monologue example) +- One-breath rule for monologue (Mellanie) +- Mirror-first drafting (Mellanie) + +## PC-Candidate Appendix Spec +- Full spec from this Round 2 response +- Conversion checklist +- Validation rules for bidirectional knowledge consistency +``` + +--- + +## Summary of Round 2 Proposals + +| # | Proposal | Cross-References | Priority | +|---|----------|-----------------|----------| +| 1 | Adopt 6 smuggler-specific entity attribute keys | Gore (complicity), my Round 1 (detective bias) | **High** — blocks smuggler content parity | +| 2 | Add 5 smuggler-specific FactIds (operations.*) | Gore (complicity theme), Gestalt (knowledge graph) | **High** — blocks smuggler monologue authoring | +| 3 | Add 6 smuggler monologue trigger types | Gore (complicity lens), Mellanie (trigger types) | **High** — blocks smuggler content | +| 4 | Adopt unified PC-candidate NPC spec (sections B1-B7) | Gestalt (reverse knowledge), Ozzie (first 60 sec), Gore (authored stubs) | **High** — blocks YAML generation | +| 5 | Document NPC→PC conversion checklist (9 steps) | Gestalt, Nigel (randomizer) | **High** — blocks pipeline | +| 6 | Miri generates missing surnames; Paula validates | Miri (phonological rules), my Round 1 (naming) | **Medium** — blocks lattice query content | +| 7 | Elevate Hael to Tier 1.5 (Production Emotional NPC) | Gore (masterpiece), Ozzie (emotional payoff) | **High** — new tier template | +| 8 | Assemble NPC Authoring Style Guide (structure above) | Mellanie (8 conventions), Gestalt (mechanical constraints), Ozzie (gut-check) | **High** — blocks all future authoring | +| 9 | Add Gore's "Thematic Question" to Tier 1/1.5 template | Gore ("Is this enough?") | **Medium** — authoring guidance | +| 10 | Add Gestalt's structured YAML routine block to templates | Gestalt (engine-readable routines) | **Medium** — engine integration | diff --git a/docs/workshops/wiki-review/round2-tracking.md b/docs/workshops/wiki-review/round2-tracking.md new file mode 100644 index 000000000..f870c24c3 --- /dev/null +++ b/docs/workshops/wiki-review/round2-tracking.md @@ -0,0 +1,245 @@ +# Wiki Review Workshop — Round 2 Tracking Document + +**Compiled by:** Qatux (Documenter) +**Date:** 2026-02-12 +**Status:** Round 2 in progress. 4 of 8 responses read (Gore, Ozzie, Mellanie, Nigel). Awaiting Gestalt, Miri, Tyre, Paula. + +--- + +## Tension Resolution Status + +### T-01: FRIEND Pool Size and v0.1 Scope → RESOLVED + +**Consensus achieved.** All four respondents converge on the same position: + +- **Architecture:** Pool-based FRIEND selection from day one. Content files structured as pool entries even with single entry. +- **v0.1:** 1 FRIEND per character (Kael, Sera). Pool size = 1. System supports expansion. +- **v0.2:** 2 FRIENDs per character. Second candidate drawn from existing NPCs elevated to Tier 1. +- **v0.3+:** 3 per character. Metagaming fully defeated. +- **Depth:** Every FRIEND candidate MUST be full Tier 1 (70-100 authored lines). No exceptions. (Gore: "I won't budge on this.") +- **Warmth phase:** Minimum 10-12 minutes of gameplay where FRIEND is green, warm, present (Ozzie guardrail). +- **Content structure:** `friends/pool.yaml` per district with `npc_id`, `contradiction_type`, `tell_type`, `discovery_method` (Nigel). + +**Supporters:** Gore, Nigel, Ozzie (all explicit). Mellanie endorses implicitly via tagged pool confirmation. + +**Recommended decision ID:** D-042 (FRIEND pool architecture) + +--- + +### T-02: Content Directory Naming → PARTIALLY RESOLVED + +**Nigel explicitly drops his parallel proposal** in favor of Tyre's three-layer stack (base → DLC → mods) with ADD/REPLACE/MERGE. Nigel extends with template role-slot system. + +**Remaining question:** `global/` vs `_global/` prefix. Nigel: "I don't care about the underscore — pick one and ship it." Awaiting Tyre's Round 2 for final preference. + +**Converged elements:** +- `districts/` as atomic content unit (all agree) +- `global/` for schema/factions/technology (Tyre + Gestalt + Nigel) +- Schema per content type (all agree) +- Mod overlay: ADD/REPLACE/MERGE (Tyre, adopted by Nigel) + +**New from Nigel:** Template role-slot system in `templates/bar.yaml` — roles with `pool`, `count`, `pool_eligible` fields. This extends Tyre's structure for randomization without changing the directory layout. + +**Location shortnames resolved by Mellanie:** Directory names use wiki slugs (`the-terminal`, `the-last-shift`). Line ID prefixes use short forms (`terminal_m_001`). Two conventions, two purposes, no conflict. + +--- + +### T-03: Kael/Hael Sonic Collision → NOT YET ADDRESSED IN ROUND 2 + +No Round 2 respondent has engaged with this. Awaiting Paula (who raised it) and Miri (naming authority). + +--- + +### T-04: Smuggler Lens Gap → SIGNIFICANT CONVERGENCE + +**All four respondents endorse Paula's diagnosis.** The smuggler needs mechanical parity with the detective. + +**Gore reframes and extends Paula's attributes:** +- Endorses `exposure_risk`, `loyalty_assessment` but renames `operational_reliability` → `trust_read` ("more personal — that's how you think about colleagues you're risking prison with") +- Adds three new attributes: `moral_weight`, `cover_integrity`, `loyalty_conflict` +- Proposes smuggler-specific monologue triggers: `moral_pang`, `loyalty_test` +- Proposes smuggler **moral arc phases** parallel to detective investigation phases: Comfort → Doubt → Reckoning → Compromise +- Proposes smuggler FactId parallels for moral knowledge: `complicity.cost_to_hael` progression + +**Ozzie adds emotional accumulation layer:** +- `guilt_interactions` — how many times smuggler lied to/about this NPC +- `complicity_acknowledged` — unlocks darker monologue variants after threshold +- `protective_actions` — has player actively tried to shield this NPC + +**Mellanie confirms blocking dependency:** Smuggler monologue currently gates on detective-shaped prerequisites. Smuggler-specific attributes needed for smuggler monologue to react with same precision. + +**Nigel connects to randomization:** Paula's smuggler attributes are the data model for what varies per seed in smuggler's playthrough. `exposure_risk` changes per seed because WHO is compromised changes. + +**Recommended decision ID:** D-043 (Smuggler knowledge vocabulary and moral arc) + +--- + +### T-05: Triangle 1 and the Nils Problem → NOT YET ADDRESSED IN ROUND 2 + +Ozzie endorses Gestalt's T1 fix (Nils volume escalation decision) in drive-by. No deep engagement yet. Awaiting Gestalt Round 2. + +--- + +### T-06: Randomizer Scope for v0.1 → SIGNIFICANT CONVERGENCE + +**Nigel revises his own proposal.** Key concession: + +- **Primary contraband FIXED per district** (walks back full contraband shuffle). Lattice components always the core of Sova's ring. Culturally grounded, morally load-bearing. +- **Secondary contraband varies per seed** (medical-grade / severance / enhanced / nothing). Adds moral wrinkle without breaking cultural logic. +- **Gore's complicity thesis acknowledged as constraint** — contraband variation must preserve the moral ambiguity, not dilute it. + +**PC-as-NPC split into two concepts (Nigel):** + +| Concept | Scope | Cost | Description | +|---------|-------|------|-------------| +| **A: Other PC exists as NPC** | v0.1 | ~20-30 items | Detective NPC visible in smuggler playthrough and vice versa | +| **B: PC identity randomization** | v0.2+ | 16+ relationship pairs | Different dock worker/detective each playthrough | + +**Concept A endorsed for v0.1 by Nigel and Ozzie.** Low cost, high payoff (second-playthrough wow moment). + +**District entanglement map (Nigel):** Per-seed flags on NPCs determine ring connection, compromise status, role assignments. Constrained by D-029 ratio (30/50/20). Connects to Gestalt's T3 randomization proposal. + +**Seed configuration schema proposed (Nigel):** `runtime/seed-state.yaml` recording randomizer decisions at game start. + +**Recommended decisions:** +- D-044 (Primary contraband fixed per district, secondary varies per seed) +- D-045 (PC-as-NPC Concept A in v0.1 scope) +- D-046 (Seed configuration schema) + +--- + +### T-07: Wiki Structure vs Content Directory → NOT YET ADDRESSED + +Awaiting Tyre and Miri Round 2. + +--- + +### T-08: Tier 3 Emotional Depth → PARTIALLY RESOLVED (New Pattern Proposed) + +**Gore proposes THE MIRROR** — a new NPC archetype: +- Honest character whose transparency reveals others' dishonesty +- No secret, no contradiction arc, no tell system +- Full Tier 1 emotional depth (50-70 authored lines, 10-15 monologue per character) +- Hael is the first MIRROR +- NOT a Tier promotion — a new pattern alongside THE FRIEND + +**Ozzie DISAGREES on the solution but agrees on the diagnosis:** +- Keep Hael Tier 2 structurally +- Add ~15-20 lines: hopeful/confiding voice samples, door-checking atmospheric beat, Kael-Hael togetherness scene +- "Not every powerful character needs to be mechanically complex. Hael doesn't need state machines. Hael needs the player to feel something when they walk past." + +**The tension within the tension:** Gore wants a new formal pattern (THE MIRROR: 50-70 lines, no secret, unique template). Ozzie wants a quality upgrade within existing Tier 2 (add 15-20 lines, no new pattern). + +**Both agree:** +- Hael must NOT have a contradiction arc or secret +- Hael needs more authored content than current Tier 2 delivers +- Hael's power is simplicity and transparency + +**The question for the team:** Is THE MIRROR a reusable pattern worth formalizing, or is Hael a one-off exceptional Tier 2 NPC? + +--- + +## New Proposals from Round 2 + +### From Gore + +| # | Proposal | Cross-refs | +|---|----------|------------| +| P-63 | **THE MIRROR pattern** — new NPC archetype for honest characters. 50-70 authored lines, no secret, no tell, full emotional depth. | T-08, D-034 pattern | +| P-64 | **`cultural_gate` modifier for dialogue access** — regional culture modifies disclosure independently of relationship state. | P-28 (Gore R1), Miri brief | +| P-65 | **Smuggler moral arc phases** (Comfort → Doubt → Reckoning → Compromise) parallel to detective investigation phases. | P-07 (Paula), T-04 | +| P-66 | **Smuggler-specific monologue triggers**: `moral_pang`, `loyalty_test`. | P-07 (Paula), T-04 | +| P-67 | **Rename `operational_reliability` → `trust_read`**. | P-07 (Paula) | +| P-68 | **Add `moral_weight`, `cover_integrity`, `loyalty_conflict`** to smuggler attributes. | P-07 (Paula), T-04 | +| P-69 | **"Complicity" as named theme** alongside "asymmetric information" as mechanic. | P-01 (Gore R1) | + +### From Ozzie + +| # | Proposal | Cross-refs | +|---|----------|------------| +| P-70 | **Hael: Tier 2 + 15-20 extra lines** (not Tier 1 promotion, not MIRROR). Add hopeful/confiding voice, door-checking beat, Kael-Hael togetherness scene. | T-08, Gore MIRROR | +| P-71 | **Smuggler emotional accumulation attributes**: `guilt_interactions`, `complicity_acknowledged`, `protective_actions`. | P-07 (Paula), T-04 | +| P-72 | **Sera composure crack** — one half-sentence in early game: "About Kael — no, it's nothing." | P-12 (Ozzie R1) | +| P-73 | **Smuggler "Cheers moment" opening** using Miri's Krenn brief: kuum vendor, chin-lift, hüva, heritage food. | P-62 (Ozzie R1), Miri brief | +| P-74 | **Second FRIEND drawn from existing NPCs** elevated to Tier 1. "MARET? She was just background noise last time." | T-01, Nigel pool | +| P-75 | **Green→amber reframe**: Color shift should feel like CLARITY, not LOSS. "Green was a lie. Amber is honesty." | Gore contaminated trust | + +### From Mellanie + +| # | Proposal | Cross-refs | +|---|----------|------------| +| P-76 | **Environmental text concrete examples** delivered: bar menu, safety notice, news ticker cycle, corridor graffiti. All voiced with Krenn cultural markers. | P-32 (Mellanie R1), Miri brief | +| P-77 | **Combined style guide TOC** — merges Paula templates + Mellanie conventions + Gestalt constraints + Miri regional into unified document. | P-18 (Paula), P-15 (Gestalt), P-26 (Miri) | +| P-78 | **Smuggler voice card** with three paired examples showing dual-lens cultural register. Summary table: thinks in people vs data, first names vs surnames, fragments vs complete sentences. | T-04, Miri brief | +| P-79 | **Anchor line requirement** per tier (operationalizing Ozzie's gut-check): Tier 1 = 2+ anchors across phases. Tier 2 = 1 anchor minimum. Tier 3 = voice hint should gesture at humanity. | P-14 (Ozzie R1) | +| P-80 | **Location shortname resolution**: directory = wiki slug (`the-terminal`), line ID prefix = short form (`terminal_m_001`). | Tyre Q-W10 | + +### From Nigel + +| # | Proposal | Cross-refs | +|---|----------|------------| +| P-81 | **Template role-slot system** in template YAML: `slot`, `count`, `pool`, `pool_eligible` fields. | P-47 (Nigel R1), Tyre structure | +| P-82 | **`friends/pool.yaml`** per district with metadata: `contradiction_type`, `tell_type`, `discovery_method`. | T-01 | +| P-83 | **Primary contraband fixed, secondary varies per seed** — walks back full shuffle. Secondary: medical/severance/enhanced/nothing. | P-56 (Nigel R1), Gore complicity | +| P-84 | **PC-as-NPC Concept A for v0.1** — other PC exists as NPC. ~20-30 authored items. | T-06, Ozzie wow moment | +| P-85 | **District entanglement map** in seed configuration — per-seed NPC flags for ring connection, compromise status, role. | P-57 (Nigel R1), Gestalt T3 randomize | +| P-86 | **Seed configuration schema** (`runtime/seed-state.yaml`). | T-06 | +| P-87 | **News ticker headline pool** (40-50 entries, randomizer selects 15-20 per seed). | P-32 (Mellanie), wow moment #5 | +| P-88 | **Cultural substrate vocabulary as randomizable social tell** per seed (word "vakt" has different social charge). | Miri brief, replayability | + +--- + +## Updated Consensus Table (Round 2) + +| # | Topic | Round 1 Confidence | Round 2 Confidence | Change | +|---|-------|-------------------|-------------------|--------| +| C-01 | THE FRIEND never proc-gen, pool-based selection | High | **Confirmed** | Gore/Nigel/Ozzie all restate | +| C-02 | All NPCs need canonical full names | High | High (no new data) | Awaiting Paula/Miri R2 | +| C-03 | Regional style guide template | High | **Confirmed** | Gore endorses Miri, Ozzie uses for concrete examples | +| C-04 | Krenn System brief canonical | High | **Confirmed** | Gore calls it "best work product in workshop," Ozzie builds opening from it, Mellanie produces environmental text from it | +| C-05 | Formalized tier templates | High | **Confirmed** | Mellanie proposes merged style guide TOC | +| C-06 | Content directory: global + districts | High | **Confirmed** | Nigel adopts Tyre's structure | +| C-10 | Smuggler needs own knowledge vocabulary | High | **Strongly confirmed** | All 4 respondents endorse, Gore extends with moral arc | +| C-12 | PC-as-NPC requires explicit specs | High | **Confirmed + scoped** | Nigel splits into Concept A (v0.1) and B (v0.2+) | +| C-14 | Backstory through discovery | High | **Confirmed** | Ozzie's Cheers opening built from Miri's cultural texture | +| C-15 | **(NEW)** Complicity as named theme | — | High | Gore (R1+R2), Ozzie endorses, Mellanie endorses | +| C-16 | **(NEW)** Primary contraband fixed per district | — | High | Nigel walks back shuffle, Gore's complicity constrains | +| C-17 | **(NEW)** PC-as-NPC Concept A in v0.1 | — | High | Nigel + Ozzie explicit. ~20-30 items. | +| C-18 | **(NEW)** FRIEND pool v0.1=1, v0.2=2, v0.3=3 | — | High | All 4 converge on phased rollout | +| C-19 | **(NEW)** Anchor line requirement in style guide | — | High | Ozzie (concept), Mellanie (operationalized per tier) | +| C-20 | **(NEW)** Combined style guide document | — | High | Mellanie proposed TOC merging all contributors | + +--- + +## Remaining Open Items + +| # | Item | Waiting On | +|---|------|-----------| +| Q-W03 | Kael/Hael sonic collision | Paula R2, Miri R2 | +| Q-W05 | D-040 existence check | Miri R2 | +| Q-W08 | `global/` vs `_global/` prefix | Tyre R2 | +| Q-W12 | (NEW) THE MIRROR: new pattern vs enhanced Tier 2? | Gore vs Ozzie — needs project lead | +| Q-W13 | (NEW) `cultural_gate` as dialogue modifier — mechanical feasibility? | Gestalt R2, Tyre R2 | +| Q-W14 | (NEW) Seed configuration schema location — content/ or runtime/? | Tyre R2 | +| Q-W15 | (NEW) Sound texture for Krenn culture — quiet social / loud work? | Ozzie asks Miri/Inigo | + +--- + +## Recommended Decisions for Recording (Preliminary) + +Based on Round 2 consensus so far. Will finalize after all 8 responses. + +| ID | Decision | Confidence | Key Supporters | +|----|----------|------------|----------------| +| D-042 | FRIEND pool architecture: pool-based selection, v0.1=1 per character, full Tier 1 minimum, content structured as pool entries from day one | High | Gore, Nigel, Ozzie | +| D-043 | Smuggler knowledge vocabulary: `trust_read`, `exposure_risk`, `loyalty_assessment`, `leverage_held`, `social_debt`, `moral_weight`, `cover_integrity`, `loyalty_conflict` + monologue triggers `moral_pang`, `loyalty_test` + moral arc phases (Comfort→Doubt→Reckoning→Compromise) | High | Gore, Paula (R1), Ozzie, Mellanie, Nigel | +| D-044 | Primary contraband fixed per district, secondary varies per seed | High | Nigel (revised), Gore (constraint) | +| D-045 | PC-as-NPC Concept A in v0.1 (other PC visible as NPC, ~20-30 items) | High | Nigel, Ozzie | +| D-046 | Seed configuration schema (records randomizer decisions at game-start) | Medium-High | Nigel (proposed), needs Tyre validation | +| D-047 | Complicity as named thematic core alongside asymmetric information as mechanic | High | Gore (R1+R2), Ozzie, Mellanie | +| D-048 | Anchor line requirement in NPC style guide (Tier 1: 2+ per phase, Tier 2: 1 minimum) | High | Ozzie (concept), Mellanie (operationalized) | +| D-049 | Combined content style guide document (Mellanie TOC) | High | Mellanie, Paula (R1), Gestalt (R1), Miri (R1) | + +--- + +*88 proposals tracked (62 Round 1 + 26 Round 2). 8 tensions (3 resolved, 2 partially resolved, 3 pending remaining responses). 20 consensus items. 8 preliminary decisions recommended. Awaiting Gestalt, Miri, Tyre, Paula Round 2 responses.* diff --git a/docs/workshops/wiki-review/round2-tyre.md b/docs/workshops/wiki-review/round2-tyre.md new file mode 100644 index 000000000..67a3b1dff --- /dev/null +++ b/docs/workshops/wiki-review/round2-tyre.md @@ -0,0 +1,640 @@ +# Wiki Review Workshop — Round 2: Tyre (Technical Architect) + +Cross-pollination synthesis. Responding to all Round 1 outputs with architectural reconciliation. + +--- + +## 1. Unified Content Directory Structure + +Gestalt proposed `_global/` + `districts/`. I proposed `_meta/` + `_schema/` + `global/` + `districts/`. The structures are 90% aligned. The 10% divergence matters because it signals moddability. + +**The principle:** Underscore prefix = engine infrastructure (modders don't touch). No underscore = game content (modders override freely). Factions, technology, and contraband are game content. Schemas and manifests are infrastructure. + +### Reconciled Structure + +``` +content/ + _meta/ + manifest.yaml # Pack metadata: id, version, dependencies + load-order.yaml # Explicit ordering for multi-pack scenarios + + _schema/ + npc.schema.yaml # Per-type validation (see Section 3) + location.schema.yaml + faction.schema.yaml + template.schema.yaml + fact.schema.yaml + dialogue.schema.yaml + monologue.schema.yaml + district.schema.yaml + pool.schema.yaml # NEW: Pool definition validation + + global/ + factions/ + concord-assembly.yaml + lattice-commission.yaml + syndics.yaml + the-ring.yaml + guardians-of-autonomy.yaml + veil-institute.yaml + the-unbound.yaml + technology/ + neural-lattice.yaml + meridian.yaml + span-gates.yaml + founder-gates.yaml + clone-transfer.yaml + severance-tech.yaml + contraband/ + lattice-components.yaml + medical-grade-replacements.yaml + severance-equipment.yaml + knowledge/ + facts.yaml # All FactId definitions (24 for v0.1) + entity-attributes.yaml # 14 canonical EntityKnowledge keys + relationship-states.yaml # RelationshipState enum reference + enums/ + situations.yaml # 13 situation values (from Gestalt's _global/schema/) + topics.yaml # 9 topic values + moods.yaml # 8 mood values + triggers.yaml # 9 monologue trigger types + access-tiers.yaml # public/peer/insider/authority/hostile + activities.yaml # NEW: canonical routine activity enum + regions/ + krenn-system.yaml # Regional style reference (from Miri's brief) + + districts/ + sova-transit/ + district.yaml # District metadata, location list, faction presence + pools.yaml # NEW: Pool definitions for seed-time selection + npcs/ + kael-davan.yaml + sera-venn.yaml + voss.yaml + lera-sessik.yaml + torek-lintar.yaml + devra.yaml + maret-korr.yaml + resha.yaml + hael.yaml + renn.yaml + pell.yaml + harek.yaml + drin.yaml + sess.yaml + olin.yaml + sabel.yaml + tav.yaml + locations/ + the-terminal.yaml + the-last-shift.yaml + maintenance-corridors.yaml + templates/ + logistics-hub.yaml # Social site: roles, slot counts, NPC assignments + bar.yaml + smuggling-ring.yaml + triangles/ # NEW: Separated from templates (Gestalt's proposal) + hub-power.yaml + worried-knowledge.yaml + bar-tensions.yaml + worried-partner.yaml + informant-question.yaml + lines/ + terminal/ + dialogue.yaml + monologue-smuggler.yaml + monologue-detective.yaml + bar/ + dialogue.yaml + monologue-smuggler.yaml + monologue-detective.yaml + corridor/ + dialogue.yaml + monologue-smuggler.yaml + monologue-detective.yaml +``` + +### What changed from Round 1 + +| Change | Source | Rationale | +|---|---|---| +| `global/enums/` added | Gestalt's `_global/schema/` tag enums | Enum definitions are game content (modders can extend), not schema infrastructure | +| `triangles/` separated from `templates/` | Gestalt's Round 1 structure | Triangles are relationship structures, templates are spatial/social structures. Separation lets mods add triangles without touching templates. | +| `pools.yaml` added | Nigel's `pool_eligible` concept + Gore's FRIEND pool | Seed-time selection needs explicit pool definitions (see Section 2) | +| `global/enums/activities.yaml` added | Gestalt's routine YAML format | Routine `activity` values need a canonical enum (see Section 4) | +| `global/regions/` added | Miri's Krenn brief | Regional style data as engine-readable YAML, not just wiki docs | +| Underscore-prefix convention formalized | Tyre Round 1, refined | Clear signal: `_foo` = infrastructure, `foo` = content | + +### Location shortcodes (Mellanie's dependency) + +Mellanie correctly identified that location shortcodes are ambiguous (`hub` vs `terminal`, `bar` vs `last_shift`). The canonical shortcodes are the directory names under `lines/`: + +| Location | Wiki slug | Content directory | Line ID prefix | Rationale | +|---|---|---|---|---| +| The Terminal (Logistics Hub) | `the-terminal` | `lines/terminal/` | `terminal_` | "Terminal" is what workers call it. Not "hub." | +| The Last Shift (Bar) | `the-last-shift` | `lines/bar/` | `bar_` | "Bar" is the functional category. "Last Shift" is the proper name. Line IDs use function. | +| Maintenance Corridors / B-7 | `maintenance-corridors` | `lines/corridor/` | `corridor_` | Workers call it "B-7" or "the back käik." Line IDs use generic. | + +One name per location. Enforced in schema validation. The monologue guide should be updated to use these consistently — the current `hub_m_010` vs `terminal_m_001` inconsistency is a bug. `terminal_m_` is canonical. + +--- + +## 2. FRIEND Pool + Mod Overlay: Seed-Time Selection + +Gore's principle is correct: THE FRIEND is never procedurally *generated* — but FRIEND *selection* from a pool of authored candidates is the right architecture for replayability. Nigel's `pool_eligible` flag is the mechanism. + +### How it works architecturally + +**`districts/sova-transit/pools.yaml`:** + +```yaml +# Pool definitions for seed-time selection +# Engine draws from these at game start using seeded RNG + +pools: + # THE FRIEND selection — exactly 1 per character per playthrough + friend_smuggler: + description: "Smuggler's Tier 1 FRIEND NPC" + select: 1 + candidates: + - npc: kael-davan # v0.1: only candidate + weight: 1.0 + # v0.2+: additional candidates added here + # - npc: renn + # weight: 1.0 + + friend_detective: + description: "Detective's Tier 1 FRIEND NPC" + select: 1 + candidates: + - npc: sera-venn # v0.1: only candidate + weight: 1.0 + + # Social site population — variable count per seed + bar_regulars: + description: "Regular NPCs present at The Last Shift" + select: 3-5 + required: [torek-lintar] # Always present (triangle dependency) + candidates: + - npc: torek-lintar + weight: 1.0 + - npc: olin + weight: 1.0 + - npc: harek + weight: 0.8 + # Mods add candidates here via MERGE + + # Contraband type (Nigel's moral shuffle) + primary_contraband: + description: "Primary contraband type for this playthrough" + select: 1 + candidates: + - type: lattice-components + weight: 1.0 + # v0.2+: additional types + # - type: medical-grade-replacements + # weight: 0.8 + # - type: severance-equipment + # weight: 0.5 + + # Role assignment (Nigel's network shuffle) + compromised_inspector: + description: "Which NPC is the compromised inspector" + select: 1 + candidates: + - npc: drin + weight: 1.0 + # v0.2+: additional candidates +``` + +### How mods extend pools + +A mod adds candidates via the MERGE mechanic. The mod provides `districts/sova-transit/pools.yaml` with only the pools it extends: + +```yaml +# Mod: jax-the-veteran +# File: districts/sova-transit/pools.yaml +pools: + bar_regulars: + candidates: + - npc: jax-korrenson + weight: 0.8 +``` + +The engine merges this with the base pool definition. `jax-korrenson` is now a candidate for bar regular slots. The `select: 3-5` and `required: [torek-lintar]` from the base remain unchanged. + +### Seed-time resolution + +``` +1. Engine loads all pool definitions (base + DLC + mods, merged) +2. Initialize seeded RNG from game seed +3. For each pool: + a. Include all `required` candidates + b. Draw remaining candidates up to `select` count, weighted by `weight` + c. Non-selected candidates are either: + - Absent from the district (pool_eligible NPCs with no other role) + - Present but demoted to background (if they have non-pool roles) +4. Instantiate selected NPCs with full content +5. Validate: all triangle dependencies satisfied (all triangle members present) +6. If validation fails, re-draw with constraint satisfaction +``` + +### FRIEND pool + content loading implications + +When `friend_smuggler` selects `kael-davan`, the engine loads: +- `npcs/kael-davan.yaml` (full 10-axis Tier 1 data) +- All monologue lines with `subject: kael_davan` as a FRIEND prerequisite +- The specific contradiction arc content + +When (in v0.2+) it selects `renn` instead, it loads Renn's Tier 1 data and Renn's contradiction arc content. **Both sets of content exist on disk simultaneously.** The pool selects which one activates. + +This means content storage is larger than content runtime. A district with 3 FRIEND candidates stores 3x the FRIEND content, but only 1x runs per playthrough. That's cheap — YAML text is tiny. The expensive resource is *authoring time*, not disk space. Gore's point stands: each FRIEND candidate is ~70-100 hand-authored lines. + +### v0.1 scope + +For v0.1, every pool has exactly 1 candidate. No randomization — deterministic. But the pool INFRASTRUCTURE exists. v0.2 adds candidates without restructuring. This follows the D-009/D-010 principle: design for it now, build the simple version. + +**Feasibility: Easy.** Pool definition parsing is a YAML file read. Seed-time selection is a weighted random draw. Constraint validation is a graph check. Total implementation: <0.5 sprint on top of the base content loader. + +--- + +## 3. Schema Validation: Gestalt's Tables as Validators + +Gestalt's hard/soft requirement tables from Round 1 are exactly what I need. Let me map them to the validation pipeline. + +### Gestalt's hard requirements → JSON Schema `required` fields + +| Gestalt requirement | Schema enforcement | +|---|---| +| Routine must specify hourly location presence | `npc.schema.yaml`: `routine.schedule` is `required`, items must have `time`, `location`, `activity` | +| Routine must reference canonical location slugs | Cross-reference validation: `location` value must exist in `districts/{district}/locations/` | +| Every NPC must have `faction` from canonical set | `npc.schema.yaml`: `faction` is `required`, `enum` from `global/enums/factions.yaml` | +| Every NPC must have `role` | `npc.schema.yaml`: `role` is `required`, `type: string` | +| Secret must map to FactId | Cross-reference validation: `secret.fact_id` must exist in `global/knowledge/facts.yaml` | +| Tell must map to `behavior_flags` value | `npc.schema.yaml`: each tell entry requires `flag` field | +| Contradiction must specify `contradiction_flagged` value | Tier 1 conditional: if `tier == 1`, `contradiction.flag` is `required` | +| Relationships must reference existing NPCs | Cross-reference validation: all `npc` references resolve within district | + +### Gestalt's soft requirements → Schema warnings (non-blocking) + +| Gestalt requirement | Validation behavior | +|---|---| +| Personality traits should use established vocabulary | Warning if trait not in `global/enums/personality-traits.yaml` | +| Voice samples should cover 2+ moods | Warning if `voice_sample` array length < tier-minimum | +| Information inventory must distinguish knows/doesn't-know | Warning if `information.knows` or `information.unknown` is empty | +| Contentment should use high/moderate/low vocabulary | Warning if value not in `{high, moderate-high, moderate, moderate-low, low}` | + +### Per-tier validation (Gestalt's checklists) + +Rather than separate schema files per tier, I'd use a single schema with conditional validation: + +```yaml +# _schema/npc.schema.yaml (simplified) +type: object +required: [id, name, tier, role, faction, axes] +properties: + tier: + type: integer + enum: [1, 2, 3] + axes: + type: object + required: [want, routine, personality] # Tier 3 minimum + # Conditional: Tier 2+ requires all 10 axes + # Conditional: Tier 1 requires contradiction arc + +allOf: + - if: + properties: { tier: { const: 2 } } + then: + properties: + axes: + required: [want, secret, relationships, tolerance, routine, + information, contentment, personality, tell, skills] + voice_sample: + minItems: 2 + + - if: + properties: { tier: { const: 1 } } + then: + properties: + axes: + required: [want, secret, relationships, tolerance, routine, + information, contentment, personality, tell, skills] + contradiction: + required: [phases, flag, tell_progression] + voice_sample: + minItems: 5 + dual_lens: + required: [smuggler, detective] +``` + +This is one schema file, tier-aware. The validator reads the `tier` field and applies the right constraints. + +### Implementation cost (revised from Round 1) + +| Component | Effort | Sprint | +|---|---|---| +| Schema definitions (from Gestalt's tables) | 2-3 days | v0.1 | +| Structural validation (`make validate-content`) | 2-3 days | v0.1 | +| Cross-reference validation (FactId, NPC slug resolution) | 3-4 days | v0.2 | +| Per-tier conditional validation | 1-2 days | v0.1 | +| Warning-level soft validation | 1 day | v0.2 | + +**v0.1 total: ~1 sprint.** Structural + tier-conditional validation. Cross-reference validation deferred to v0.2 — for v0.1, the human review catches reference errors (only 17 NPCs, 24 FactIds, manageable). + +**Mellanie's prerequisite validation** (FactId typo detection) lands in the cross-reference sprint. Agreed it's critical — `contraband.ring_exist` vs `contraband.ring_exists` is the kind of bug that wastes hours. But for v0.1, a simple grep-based pre-commit check is cheaper than a full cross-reference validator. I'd do both: grep check in v0.1, schema cross-reference in v0.2. + +--- + +## 4. Routine YAML Format + Cultural Schedule Patterns + +Gestalt's structured routine block is the right format. Miri's cultural brief provides the content vocabulary. Here's how they connect. + +### Gestalt's format, canonicalized + +```yaml +# In npcs/kael-davan.yaml +routine: + schedule: + - time: "06:00-06:30" + location: terminal # Canonical shortcode + activity: shift_startup # Canonical activity enum + - time: "06:30-10:30" + location: terminal + activity: work_freight + - time: "10:30-11:00" + location: terminal + activity: social_break # Renamed from "social_lunch" for generality + - time: "11:00-14:00" + location: terminal + activity: work_freight + - time: "14:30-16:00" + location: bar + activity: social_offshift # The "shift-end" culture pattern (Miri) + - time: "16:00-22:00" + location: residential + activity: home + - time: "22:00-06:00" + location: residential + activity: sleep + deviations: + - trigger: ring_operation + replaces: "22:00-06:00" # Replaces sleep block + schedule: + - time: "22:00-23:30" + location: corridor + activity: ring_operation + - time: "23:30-06:00" + location: residential + activity: sleep + frequency: irregular # Storyteller-controlled +``` + +### Canonical activity enum (`global/enums/activities.yaml`) + +Derived from Gestalt's examples + Miri's cultural patterns: + +```yaml +# global/enums/activities.yaml +activities: + # Work activities + - shift_startup # Arriving, checking in, prep + - work_freight # Core logistics work + - work_maintenance # Maintenance/repair tasks + - work_admin # Office/scheduling work (Maret, Voss) + - work_inspection # Inspection rounds (Drin) + - work_commission # Commission field work (Sera) + + # Social activities + - social_break # On-shift break (lunch, kuum) + - social_offshift # Post-shift bar visit (the "shift-end" pattern) + - social_evening # Evening socializing (card games, conversation) + - social_errand # Off-shift personal tasks + + # Domestic + - home # At residential quarters + - sleep # Sleeping (low interaction priority) + + # Ring activities (deviation-only, never in base schedule) + - ring_operation # Active smuggling work + - ring_meeting # Coordination with ring members + - ring_lookout # Watchpost duty (Tav) + + # Special + - idle # No scheduled activity + - patrol # Security rounds (Harek on duty) +``` + +### How Miri's cultural patterns inform schedule authoring + +Miri's brief describes the **5+2 work cycle** and **shift-end bar migration** as Krenn cultural patterns. These aren't engine data — they're authoring guidance: + +| Cultural pattern | Schedule implication | Authoring rule | +|---|---|---| +| 5+2 work cycle | NPCs work 5 shifts, then 2 off | Routine must define both on-cycle and off-cycle days (v0.2+, when multi-day cycles matter) | +| Shift-end bar migration | After shift, workers go to The Last Shift | Most Tier 2-3 hub NPCs should have `social_offshift` at `bar` | +| Kuum at transitions | Hot drink at shift boundaries | `social_break` activity at shift start/end = where the casual dialogue fires | +| Card game evenings | Kolm at the bar, Harek's regular game | Harek + 2-3 regulars with `social_evening` at `bar` overlapping | + +The cultural brief lives in `global/regions/krenn-system.yaml` as reference data. It doesn't drive the engine directly — it drives the AUTHORS who fill in the routine YAML. + +### Engine consumption + +The `ScheduleSystem` in the Rust server reads the routine YAML as: + +```rust +struct ScheduleEntry { + start_tick: u64, // Converted from time string + end_tick: u64, + location: LocationId, // Resolved from shortcode + activity: Activity, // Enum from activities.yaml +} + +struct NpcSchedule { + base: Vec, + deviations: Vec, +} +``` + +Time strings ("06:00-14:00") are converted to tick ranges at load time using D-031's mapping (10 ticks = 1 game-minute). `location` shortcodes resolve against the district's location registry. `activity` values are validated against the canonical enum. + +**Deviation triggers** (like `ring_operation`) are fired by the storyteller system, not the schedule system. The schedule system just needs to know "when trigger X fires, replace block Y with schedule Z." The storyteller decides *when* to fire the trigger. + +Feasibility: **Straightforward.** This is a data-driven schedule with event-driven overrides. bevy_ecs handles this naturally — `NpcSchedule` is a component, the `ScheduleSystem` runs every tick, checks current time against entries, and moves NPCs. Deviations are applied when the storyteller emits the trigger event. + +--- + +## 5. Wiki Taxonomy + Miri's `canonical_id` + +Miri proposed two things I want to address: `wiki/cultural-groups/` as a new directory, and `canonical_id` in YAML frontmatter for collision-safe cross-referencing. + +### `cultural-groups/` — fits perfectly + +`wiki/cultural-groups/krenn-system.md` is a flat directory. No nesting. Exactly like `factions/`, `technology/`, `contraband/`. This is a new top-level wiki category, not a nesting violation. Add it. + +The wiki index should add: + +```markdown +### Cultural Groups (Regional Style Briefs) +- [Krenn System](cultural-groups/krenn-system.md) — Baltic-Nordic blend, logistics culture +``` + +### `canonical_id` — endorsed with format refinement + +Miri proposed: `canonical_id: krenn.sova.transit.the-terminal`. I'd standardize the format: + +```yaml +# Format: {system}.{station}.{district}.{entity-type}.{slug} +# Examples: +canonical_id: krenn.sova.transit.location.the-terminal +canonical_id: krenn.sova.transit.npc.kael-davan +canonical_id: global.faction.lattice-commission +canonical_id: global.technology.neural-lattice +``` + +Adding the entity type segment prevents collisions between, say, a location and an NPC with the same slug. It also makes the ID self-describing — you can parse the type from the ID without reading the file. + +For the content directory, the canonical_id maps to file paths: + +| `canonical_id` | Content path | +|---|---| +| `krenn.sova.transit.npc.kael-davan` | `content/districts/sova-transit/npcs/kael-davan.yaml` | +| `krenn.sova.transit.location.the-terminal` | `content/districts/sova-transit/locations/the-terminal.yaml` | +| `global.faction.lattice-commission` | `content/global/factions/lattice-commission.yaml` | + +The mapping is derivable — content loader can resolve `canonical_id` to file path and vice versa. Cross-references in content YAML use `canonical_id`, not file paths. This is Miri's proposal, architecturally validated. + +### Miri's deeper nesting — gentle pushback + +Miri's Round 1 shows a wiki structure with 4 levels of spatial nesting: + +``` +wiki/star-systems/krenn/station-sova/sova-transit-district/the-terminal.md +``` + +The current wiki uses 2 levels: `locations/krenn-system/the-terminal.md`. I maintain that 2 levels is the right cap for navigation paths. The `canonical_id` carries the full spatial address — the filesystem doesn't need to. + +**Compromise:** Keep wiki paths at max 2 levels for locations. Use `canonical_id` in frontmatter for full spatial addressing. The wiki index provides the navigational hierarchy through cross-links, not directory depth. This gives Miri's disambiguation without my tab-completion nightmare. + +--- + +## 6. Template Role Slots (Nigel's Request) + +Nigel asked for explicit role slot definitions in social site templates. This is a direct question to me and the answer is: **yes, and here's the spec.** + +### Template role slot definition + +```yaml +# content/districts/sova-transit/templates/bar.yaml +template: + id: bar + name: "The Last Shift" + location: the-last-shift + + role_slots: + owner: + count: 1 + required: true # Must be filled every seed + default: lera-sessik # Base game assignment + staff: + count: 1-2 + required: true + default: [sess] + regular: + count: 3-5 # Variable per seed + required: false + pool: bar_regulars # References pools.yaml + outsider: + count: 0-2 # May or may not appear + required: false + pool: bar_outsiders + + # Triangle integration: which triangles must have all members present + triangle_constraints: + - triangle: bar-tensions + required_members: [lera-sessik, torek-lintar] + # olin can be absent — triangle fires differently without the outsider node +``` + +This tells the engine: "The bar has 1 owner (always Lera), 1-2 staff (always Sess in v0.1), 3-5 regulars drawn from a pool, and 0-2 outsiders drawn from a pool." The randomizer fills slots. Mods extend the pools. + +**Why this matters for mods:** A modder adding Jax doesn't need to know the template internals. They add Jax to the `bar_regulars` pool (via MERGE on `pools.yaml`), and the template's slot system handles placement. The modder never touches `templates/bar.yaml`. + +**Why this matters for replayability:** Different seeds populate the bar differently. Playthrough 1 has Torek, Harek, and Olin as regulars. Playthrough 2 has Torek, Harek, and Jax (mod). Playthrough 3 has Torek and Olin only (smaller bar night). The bar feels alive and different each time. + +--- + +## 7. Paula's Smuggler-Specific Attributes + +Paula identified a real architectural gap: the `EntityKnowledge.known_attributes` vocabulary is detective-biased. Her proposed smuggler attributes are mechanically sound: + +| Key | Values | Engine use | +|---|---|---| +| `operational_reliability` | `reliable`, `compromised`, `wavering` | Smuggler monologue tone, ring operation risk calculation | +| `exposure_risk` | `low`, `escalating`, `critical` | Smuggler stress system, storyteller escalation trigger | +| `loyalty_assessment` | `solid`, `uncertain`, `turning` | Smuggler dialogue access (who to trust with ring talk) | +| `leverage_held` | Free text (e.g., `gambling_debt`) | Smuggler-specific confrontation options | +| `social_debt` | `they_owe_me`, `i_owe_them`, `mutual`, `none` | Social manipulation mechanics | + +**Architecture impact: None.** `known_attributes` is a `BTreeMap` — any key-value pair works. Adding these keys requires zero engine changes. The content schema and monologue prerequisites just reference the new keys. + +**Add these to `global/knowledge/entity-attributes.yaml` and to the wiki's entity-attributes.md.** Total canonical keys goes from 14 to 19. The Rust types don't change — it's all string keys in the BTreeMap. + +Feasibility: **Trivial.** The hardest part is writing the monologue lines that use these as prerequisites — and that's Mellanie's job, not an engine task. + +--- + +## 8. Cross-Cutting: What Needs to Happen + +Summarizing everything into concrete outputs. + +### Decisions to record (new D-entries) + +| ID | Decision | Source | +|---|---|---| +| D-042 | Content directory structure: `_meta/` + `_schema/` + `global/` + `districts/` with underscore = infrastructure, no-underscore = moddable content | Tyre R1/R2 + Gestalt R1, reconciled | +| D-043 | `canonical_id` format: `{system}.{station}.{district}.{type}.{slug}` for collision-safe cross-referencing | Miri R1 + Tyre R2 refinement | +| D-044 | Mod overlay mechanics: ADD (new files), REPLACE (entity definitions), MERGE (pool-type content, deduplicate by ID) | Tyre R1 + Nigel R1 pool integration | +| D-045 | Pool-based seed-time selection: FRIEND, social site population, contraband type, role assignment. `pools.yaml` per district. v0.1 ships with 1 candidate per pool; architecture supports N candidates. | Nigel R1 + Gore R1 + Tyre R2 synthesis | +| D-046 | Schema-per-content-type validation with tier-conditional rules. Structural validation in v0.1, cross-reference validation in v0.2. | Gestalt R1 tables + Tyre R1/R2 implementation | +| D-047 | Template role slots: social site templates declare named slots with count ranges, required flags, and pool references. Modders extend pools, engine fills slots. | Nigel R1 request + Tyre R2 spec | +| D-048 | Canonical location shortcodes: `terminal`, `bar`, `corridor`. One name per location, enforced in schema, used in line ID prefixes. | Mellanie R1 dependency + Tyre R2 formalization | +| D-049 | Smuggler-specific entity attributes added to canonical vocabulary: `operational_reliability`, `exposure_risk`, `loyalty_assessment`, `leverage_held`, `social_debt`. Total canonical keys: 19. | Paula R1 proposal + Tyre R2 validation | + +### Documents to create + +| Document | Owner | Blocks | +|---|---|---| +| `wiki/cultural-groups/krenn-system.md` | Miri | All environmental text authoring | +| Cultural Groups section in `wiki/index.md` | Miri/Qatux | Wiki navigation | +| Location shortcode table | Mellanie/Tyre | All YAML content authoring | +| Freeform tag vocabulary (living list) | Mellanie | Content consistency | +| Environmental text type catalog | Mellanie | v0.1 environmental text authoring | +| Voice cards per playable character | Mellanie | Monologue authoring consistency | +| NPC-format briefs for smuggler + detective PCs | Paula | PC-as-NPC concept | +| Tier 1/2/3 template as standalone style guide | Paula | All future NPC authoring | + +### Amendments to existing wiki pages + +1. **`wiki/index.md`**: Add Cultural Groups section, add Thematic Core section (Gore's proposal) +2. **`wiki/knowledge/entity-attributes.md`**: Add 5 smuggler-specific attribute keys +3. **`wiki/knowledge/fact-catalog.md`**: Add smuggler-perspective progression text for all FactIds where smuggler starts at KnowsDetails +4. **`wiki/authoring/monologue-guide.md`**: Standardize location shortcodes (`terminal_m_` not `hub_m_`); add situation overlap rules, mood exclusivity rules +5. **NPC profiles (all)**: Add canonical full names for single-name NPCs; add `## Thematic Question` to Tier 1 template (Gore) + +### New tickets for SI + +1. Create `_schema/` directory with schema definitions from Gestalt's tables +2. Implement `make validate-content` CLI (structural + tier-conditional) +3. Create `content/` directory skeleton matching the unified structure above +4. Create `pools.yaml` template with v0.1 single-candidate pools +5. Create `global/enums/` YAML files from D-035 enum values +6. Add `global/knowledge/entity-attributes.yaml` with 19 canonical keys (14 existing + 5 smuggler) +7. Create `templates/` YAML files with role slot definitions for 3 social sites +8. Create `triangles/` YAML files for 5 v0.1 triangles +9. Stub NPC profiles for Nils Davan (off-stage, referenced in 5+ profiles) +10. Add pre-commit grep check for FactId typos in YAML content + +--- + +*Tyre out. The architecture converges. The content team now has a concrete spec to write against, and the engine team has a concrete loading pipeline to build. Ready for Qatux to record and SI to ticket.* diff --git a/docs/workshops/wiki-review/round3-gestalt.md b/docs/workshops/wiki-review/round3-gestalt.md new file mode 100644 index 000000000..e72190d26 --- /dev/null +++ b/docs/workshops/wiki-review/round3-gestalt.md @@ -0,0 +1,830 @@ +# Round 3 — Gestalt (Systems Design): Long-Term Content Strategy + +*cracks knuckles* + +Seven questions. All of them are really one question: **What are the systems that make a 20+ district game work without requiring 20x the authoring effort of one district?** + +Let me break down what each of these questions actually means mechanically. + +--- + +## 1. Complicity Is Sova's Flavor. The Master Theme Is "Knowledge as Burden." + +Gore named complicity as the game's theme. He's right about Sova. He's wrong about the whole game — and the reason he's wrong is the reason the game scales. + +### The argument + +Complicity works in Sova because of a specific configuration: +- The smuggler **participates** in something they know is morally ambiguous +- The detective **disrupts** something the community considers normal +- The culture (Krenn privacy norms) makes non-cooperation the default +- The contraband (lattice components) serves genuine needs + +Change ANY of those variables and complicity stops being the right word. Consider: + +| District Type | What You Know | What It Costs You | The Right Word | +|---|---|---|---| +| Logistics hub (Sova) | You're part of the operation | Guilt, eroding relationships | **Complicity** | +| Political capital | Your ally is betraying your faction | Broken loyalty, political death | **Loyalty** | +| Frontier settlement | Someone is dying and only you know | Moral obligation vs. survival | **Duty** | +| Research station | Your identity is being rewritten | Loss of self, gain of power | **Identity** | +| Trade nexus | You can profit from others' suffering | Greed vs. empathy | **Greed** | +| Refugee district | You can save some but not all | Triage, survivor's guilt | **Sacrifice** | +| Military outpost | Your orders are wrong and you know it | Obedience vs. conscience | **Authority** | + +Every single one of these is a variation on the same mechanical core: **you know something, and knowing it changes you. The knowledge is a burden. What you do with it defines who you become.** + +### The framework + +**Master theme:** Knowledge as burden. + +**Master mechanic:** Asymmetric information (D-005 — this was always the answer). + +**Per-district moral texture:** Each district explores a specific facet of what knowledge costs. + +This isn't just thematic variety for its own sake. It's mechanically load-bearing: + +1. **Different moral textures produce different player decisions.** In Sova, the smuggler's key decisions are about protecting vs. exposing. In a loyalty-textured district, the key decisions are about betraying vs. enabling. Same decision architecture (fork + consequences), different emotional weight. The systems don't change — the content changes. + +2. **Different moral textures demand different monologue vocabularies.** The smuggler's `moral_pang` trigger works for complicity. A loyalty district needs `loyalty_fracture`. An authority district needs `conscience_objection`. Same trigger system, different named instances. The engine doesn't care what the trigger is called — it fires when conditions are met. + +3. **Different moral textures create replay variety at the thematic level.** Two players who both played smuggler-type characters in different districts had mechanically similar experiences (managing a dual life, navigating risk, protecting relationships) but emotionally different ones. The replay isn't just "different NPCs" — it's "different questions." + +### What this means for systems design + +The per-district moral texture is NOT a flavor field in a config file. It's an **emergent property of the specific configuration of NPCs, triangles, contraband, cultural norms, and access tier profiles** in that district. The designer doesn't write `moral_texture: complicity`. They design a district where: +- The smuggler's FRIEND is hiding something that protects someone +- The detective's investigation harms people who don't deserve it +- The cultural norms make non-cooperation virtuous +- The contraband serves genuine needs + +And the PLAYER experiences that configuration as complicity. Another district where: +- The politician's FRIEND is secretly working for a rival faction +- The detective's investigation reveals that both sides are justified +- The cultural norms prize loyalty above truth +- The contested resource is political power, not goods + +...produces a loyalty texture. Same systems. Different content. Different feeling. + +**Decision proposal (D-WR-11):** The Settled Reach's master theme is "knowledge as burden" — asymmetric information is the mechanic, the cost of knowing is the experience. Each district explores a local moral texture (complicity, loyalty, duty, identity, etc.) through the same systemic framework. No district's theme is prescribed mechanically — it emerges from content configuration. + +--- + +## 2. Cultural Groups at Scale: 6-8 Heritage Clusters, Mechanically Distinct + +### Why culture matters mechanically + +Miri's Krenn brief proved that culture isn't decoration — it's a game system. The Nordic-Baltic privacy norms ARE the difficulty gradient for the detective. The labor solidarity norms ARE the smuggler's camouflage. Culture determines: + +| System | Cultural Input | Mechanical Output | +|---|---|---| +| Dialogue access tiers | Privacy norms, authority attitudes | How hard it is to reach `peer` / `insider` | +| NPC disclosure behavior | Information-sharing customs | What NPCs volunteer vs. withhold | +| Tell visibility | Behavioral norms | What counts as "unusual" in this community | +| Investigation strategy | Cooperation patterns | Whether the detective can find allies | +| Cover viability | In-group/out-group markers | How easily the smuggler blends in | +| Social site dynamics | Gathering patterns, leisure norms | Where and when NPCs are observable | + +Each cultural group produces a DISTINCT ACCESS TIER PROFILE — a mechanically different experience of the same systems. This is the constraint that determines how many we need. + +### The cultural map + +I'd propose **6-8 heritage clusters** for the full game. Each must be mechanically distinct along the axes above. + +| # | Heritage Cluster | Cultural DNA | Mechanical Signature | Access Tier Profile | +|---|---|---|---|---| +| 1 | **Nordic-Baltic** (Krenn) | Finnish/Estonian/Latvian/Norwegian drift | Privacy-default, labor solidarity, institutional distrust | Hard outsider wall. `peer` requires months. `authority` gets compliance but zero information. | +| 2 | **Mediterranean-Near Eastern** | Greek/Turkish/Lebanese drift | Hospitality-default, honor networks, generosity-as-status | Easy initial warmth (fast `peer`), but deep trust is family-only. Gossip flows freely — too freely. Information hides in noise. | +| 3 | **East Asian** | Japanese/Korean/Vietnamese drift | Hierarchical respect, obligation networks, face-saving | `authority` gets deference but performative cooperation. Real information flows through obligation chains, not direct questioning. The detective must EARN an obligation. | +| 4 | **West African** | Yoruba/Akan/Wolof drift | Communal decision-making, storytelling tradition, elder-respect | Information flows freely through communal events but is couched in story and metaphor. Direct questions are rude. The detective must learn to LISTEN. | +| 5 | **Latin American** | Brazilian/Colombian/Mexican drift | Personal warmth, patron-client dynamics, familismo | Warm to strangers, but loyalty runs through patronage networks. The detective is a PERSON first, an authority second. Cooperation is personal, never institutional. | +| 6 | **Slavic-Central European** | Russian/Polish/Czech drift | Institutional cynicism, dual economy, black humor | Everyone assumes the system is corrupt. `authority` is treated with open cynicism. The grey economy is not hidden — it's simply not discussed with anyone who might be naive enough to object. | +| 7 | **South Asian** | Indian/Pakistani/Sri Lankan drift | Community gatekeepers, code-switching, stratified access | Access is mediated through gatekeepers (elders, community leaders). The detective can't access individuals directly — must go through the gatekeeper. The gatekeeper's agenda shapes all information. | +| 8 | **Blended/Cosmopolitan** | Multi-heritage convergence | No dominant norm, transactional relationships, individualism | No cultural immune system. Information is freely available but untrustworthy. Everyone's performing. The challenge isn't ACCESS — it's VERIFICATION. | + +### Why 6-8, not 20 + +**Simple rules, complex outcomes.** 6-8 heritage clusters with blending produces dozens of EXPERIENCED cultures: +- Pure Cluster 1 (Nordic-Baltic station, like Sova) +- Cluster 1 + Cluster 6 blend (Nordic-Baltic founded, Slavic immigration wave) +- Cluster 3 dominant, Cluster 8 cosmopolitan overlay (East Asian core station with a trade district) +- Cluster 2 + Cluster 5 blend (Mediterranean-Latin fusion in a warm-climate colony) + +Each blend creates a NEW access tier profile by interpolating between parent clusters. A Nordic-Baltic + Slavic blend might have the privacy norms of Cluster 1 but the institutional cynicism of Cluster 6 — meaning the detective faces both a cultural wall AND open mockery when they invoke Commission authority. + +### Distribution + +Not every system gets a unique culture. Multiple systems can share a heritage cluster (like multiple Nordic-Baltic settled systems with Krenn-like norms). The full game's cultural map might look like: + +| Heritage Cluster | # of Systems | Notes | +|---|---|---| +| Nordic-Baltic | 3-4 | Founding-era settlement belt | +| Mediterranean-Near Eastern | 2-3 | Trade corridor systems | +| East Asian | 2-3 | Industrial core systems | +| West African | 1-2 | Agricultural/frontier | +| Latin American | 2-3 | Mid-Reach settlement wave | +| Slavic-Central European | 2-3 | Outer Reach mining/industrial | +| South Asian | 1-2 | Administrative/political centers | +| Cosmopolitan | 3-5 | Capital systems, trade hubs, crossroads | + +**~20-25 systems across 6-8 clusters.** Each system has 1-4 districts. Each district = 1 content pack. The cultural cluster determines the access tier profile, naming conventions, substrate vocabulary, social norms. Content authors reference the regional brief for their cluster. + +### The authoring constraint + +Each cultural cluster requires ONE Miri-quality regional brief (~the Krenn System brief). 6-8 briefs total. Each brief includes: +- Heritage lineage and drift patterns +- Naming conventions (phonological rules, surname patterns) +- Substrate vocabulary (10-15 heritage words) +- Social norms (5-6 key behavioral expectations) +- Access tier cultural profile (how the 5 tiers work in this culture) +- Food/drink/leisure patterns +- Authority attitudes + +After the 6-8 briefs exist, every NEW district in that cluster references the brief. Authors don't reinvent the cultural wheel — they apply the brief to a specific location. This is how culture scales: author the pattern once, instantiate it many times. + +**Decision proposal (D-WR-12):** The Settled Reach has 6-8 heritage clusters, each with a Miri-quality regional brief. Heritage clusters are mechanically load-bearing (access tier profiles, NPC disclosure patterns, investigation strategy). Districts reference their cluster's brief for cultural grounding. Blended districts interpolate between parent clusters. + +--- + +## 3. Content Patterns That Scale: The Universal Skeleton + Variable Flesh + +### Which patterns are universal? + +Let me map every content pattern we've designed and classify it: + +| Pattern | Universal? | What Varies? | +|---|---|---| +| **Social site / functional cluster** (D-025) | YES — every district has them | Count (2-6), size (4-12 NPCs), type (workplace, social, residential, commercial, institutional) | +| **Triangles** | YES — every social site has 1-3 | Triangle type (power, loyalty, knowledge, romantic, economic), specific tension | +| **Three-tier content model** (D-023) | YES — always Tier 1/2/3 | Tier counts scale with district size | +| **THE FRIEND** | YES — every PC archetype gets one per district | What they're hiding varies with district moral texture | +| **Tagged line pools + 4-layer selection** (D-028/D-035) | YES — universal dialogue architecture | Tag vocabularies may expand per district | +| **Routine system** | YES — NPC schedules everywhere | Cultural work patterns vary per cluster | +| **Population entanglement ratio** (D-029) | YES — 30/50/20 is a guideline | Exact ratio varies per district type and seed | +| **THE MIRROR** (Gore R2) | RECOMMENDED but not required | Some districts benefit more than others | +| **Dual-lens content** | YES for districts with 2+ archetypes | Single-archetype districts don't need it | +| **FRIEND pool** | YES — architecture always supports it | Pool size varies per district maturity | +| **Contraband type** | NO — varies by district economy | Some districts have no smuggling at all | +| **Ring structure** | NO — some districts have no criminal operation | The ADVERSARIAL STRUCTURE is universal; its form varies | + +### The critical generalization: adversarial structures + +Sova has a smuggling ring. Not every district will. But every district needs an **adversarial structure** — a hidden network of relationships and activities that one PC archetype knows about and another must discover. + +| District Type | Adversarial Structure | Insider Archetype | Investigator Archetype | +|---|---|---|---| +| Logistics hub | Smuggling ring | Smuggler | Detective | +| Political capital | Faction conspiracy | Politician | Intelligence operative | +| Research station | Unauthorized experiment | Researcher | Ethics investigator | +| Military outpost | Mutiny plot | Dissenting officer | Loyalty investigator | +| Trade nexus | Price-fixing cartel | Merchant | Economic regulator | +| Refugee district | Underground railroad | Smuggler variant | Border enforcement | +| Cultural enclave | Preservation network | Cultural insider | Assimilation enforcer | + +The pattern: there's always a **hidden network** and there's always someone whose job is to find it. The insider BELONGS to it. The investigator STUDIES it. The information asymmetry between them IS the game. + +This means the Sova patterns generalize as follows: + +| Sova-Specific | Generalized Pattern | +|---|---| +| The Ring | The Hidden Network (whatever shape it takes) | +| Ring operations | Network activities (smuggling, conspiring, experimenting, plotting) | +| Contraband | The Contested Resource (goods, power, knowledge, identity, freedom) | +| Commission regulation | The Institutional Framework (whatever authority the network defies) | +| Detective investigation | Observer Investigation (any archetype that discovers) | +| Smuggler cover management | Insider Risk Management (any archetype that hides) | +| Complicity moral texture | Local Moral Texture (whatever knowledge costs in this place) | + +### The structural template for a district + +Every district, regardless of setting, follows this skeleton: + +``` +DISTRICT SKELETON +├── 2-6 Social Sites (functional clusters, 4-12 NPCs each) +│ ├── 1-3 Triangles per social site +│ ├── Physical space with sightlines + overhearing zones +│ └── Bridge NPCs connecting to other social sites +├── 1 Hidden Network (adversarial structure) +│ ├── 3-8 network members across social sites +│ ├── 1 coordinator (Devra-equivalent) +│ ├── 1 external connection (Sabel-equivalent) +│ └── Network activities that deviate from base routines +├── 1 FRIEND per supported PC archetype +│ ├── Tier 1 depth, full contradiction arc +│ ├── Connected to the hidden network (directly or indirectly) +│ └── Discovery produces moral reckoning, not just information +├── 0-1 MIRROR per district (recommended) +│ ├── Honest character, no secret +│ └── Their transparency reveals everyone else's dishonesty +├── 1 Cultural Group reference (heritage cluster brief) +│ ├── Access tier profile +│ ├── Naming conventions +│ └── Substrate vocabulary +├── 1 Local Moral Texture (emergent from configuration) +│ ├── What knowledge costs in this place +│ └── What the player's key decisions feel like +├── 2-4 Supported PC Archetypes +│ ├── 1 insider archetype (belongs to the hidden network) +│ ├── 1 investigator archetype (seeks to understand the network) +│ └── 0-2 additional archetypes (affected bystander, rival network, etc.) +├── 1 Contested Resource (what the network moves/controls/protects) +│ ├── Culturally grounded (why this resource matters HERE) +│ └── Morally ambiguous (the network isn't pure evil) +└── Environmental Text + ├── Location-specific (signs, menus, graffiti) + ├── News ticker headlines (Reach-wide + local) + └── Cultural artifacts (food, slang, customs) +``` + +This skeleton is **the repeatable unit of content creation**. Every new district instantiates it with different flesh. The systems code works identically against every instantiation. + +### Where the structure itself can vary + +The skeleton above is the MINIMUM. Some districts may have additional patterns: + +- **Multi-network districts:** A trade nexus might have TWO hidden networks (smuggling ring + price-fixing cartel) that overlap. NPCs might belong to both. This creates a third investigative dimension. +- **Network-free districts:** A quiet residential district with no hidden network — just mundane triangles, life-sim substrate, and a FRIEND whose contradiction is personal (infidelity, debt, illness) rather than criminal. These districts serve as contrast — the "is this enough?" question is literal. +- **Hub districts:** A major political or commercial center with 6+ social sites, 25+ NPCs, and multiple overlapping adversarial structures. These are premium content — expensive to author, but they're the centerpiece locations. +- **Transitional districts:** Small districts (1-2 social sites, 8-10 NPCs) that serve as connective tissue between larger districts. The player passes through on their way somewhere else — but something catches their eye. + +**Decision proposal (D-WR-13):** The district skeleton (social sites + hidden network + FRIEND + cultural group + moral texture + PC archetypes + contested resource) is the universal content template. All districts instantiate this skeleton. The skeleton's size varies (2-6 social sites, 15-40 NPCs) but its structure is consistent. + +--- + +## 4. The Content Directory as a Platform + +### The hierarchy at scale + +The Round 2 converged structure works for one district. At scale, it needs a system level: + +``` +content/ + _meta/ + manifest.yaml # Game-level metadata + load-order.yaml # Content pack ordering + + _schema/ + (per-type validation schemas — unchanged from R2) + + global/ + factions/ # Reach-wide factions + technology/ # Technology definitions + knowledge/ # FactId definitions, entity attributes + enums/ # Tag vocabularies (situations, moods, etc.) + archetypes/ # PC archetype definitions (NEW) + smuggler.yaml # Archetype: starting access, agency, perception + detective.yaml + politician.yaml + guardian.yaml + merchant.yaml + civilian.yaml + patterns/ # Reusable content patterns (NEW) + friend.pattern.yaml # THE FRIEND pattern requirements + mirror.pattern.yaml # THE MIRROR pattern requirements + hidden-network.pattern.yaml # Adversarial structure requirements + triangle.pattern.yaml # Triangle structure requirements + + regions/ # Heritage cluster briefs (NEW — promoted from global/) + nordic-baltic.yaml # Cluster 1 (Krenn, etc.) + mediterranean.yaml # Cluster 2 + east-asian.yaml # Cluster 3 + west-african.yaml # Cluster 4 + latin-american.yaml # Cluster 5 + slavic-central.yaml # Cluster 6 + south-asian.yaml # Cluster 7 + cosmopolitan.yaml # Cluster 8 + + systems/ # Star systems (NEW level) + krenn/ + system.yaml # System metadata, wormhole connections + districts/ + sova-transit/ + (existing R2 structure: district.yaml, pools.yaml, + npcs/, locations/, templates/, triangles/, lines/) + sova-residential/ # Second district on same station + ... + krenn-prime-port/ # Planet-side district + ... + tavros/ + system.yaml + districts/ + tavros-exchange/ # Trade district + ... + (etc.) +``` + +### Key changes from Round 2 + +| Change | Rationale | +|---|---| +| `regions/` promoted to top-level | Heritage clusters are game-wide reference data, not district content. A region is referenced by MANY districts. | +| `global/archetypes/` added | PC archetype definitions are global — the smuggler archetype exists independently of any district. Each district declares which archetypes it supports. | +| `global/patterns/` added | Reusable content pattern definitions (FRIEND, MIRROR, hidden network, triangle) as formal schema/requirement docs. District content is validated against these. | +| `systems/` level added above `districts/` | Star systems group districts. Wormhole connections are system-level data. A content pack can be one system (containing multiple districts). | + +### Content packs, DLC, and mods + +The platform architecture must support three content delivery models: + +**1. Core content packs (shipped with the game)** +```yaml +# content/_meta/manifest.yaml +packs: + - id: core + districts: [krenn/sova-transit, krenn/sova-residential, ...] + version: 1.0 +``` + +**2. DLC packs (official expansion content)** +```yaml +# dlc/tavros-exchange/_meta/manifest.yaml +pack: + id: tavros-exchange + type: dlc + requires: [core >= 1.0] + adds: + systems: [tavros] + districts: [tavros/tavros-exchange] + archetypes: [merchant] # New PC archetype + factions: [syndic-guild] # New faction +``` + +**3. Mod packs (community content)** +```yaml +# mods/jax-veteran/_meta/manifest.yaml +pack: + id: jax-veteran + type: mod + requires: [core >= 1.0] + extends: + districts: [krenn/sova-transit] + adds: + npcs: [jax-korrenson] + merges: + pools: [bar_regulars] + lines: [bar/dialogue] +``` + +### Content pack isolation + +Each content pack is a self-contained directory tree that follows the same structure as the core. The engine merges them at load time using the R2 overlay rules (ADD/REPLACE/MERGE). The key constraint: **a content pack never modifies files in another pack's directory**. It provides its own files that the merge system combines. + +This means: +- DLC districts are fully self-contained (own NPCs, lines, templates) +- DLC can ADD new archetypes, factions, cultural groups +- Mods can EXTEND existing districts (add NPCs to pools, add dialogue lines) +- Mods can REPLACE existing content (swap an NPC, change a routine) +- Nothing breaks if a mod is removed — the merge system gracefully degrades + +### Cross-district references + +At scale, content must reference entities in other districts: +- An NPC in District A has a sibling in District B +- A faction spans multiple systems +- A wormhole connects two districts +- A news ticker headline references events in another system + +These cross-references use the `canonical_id` system (Miri/Tyre R2): +```yaml +# In krenn/sova-transit/npcs/sabel.yaml +relationships: + - npc: tavros.exchange.npc.sabel-partner # Cross-district reference + type: "business associate" +``` + +The engine resolves `canonical_id` to file path at load time. Missing references (because a DLC isn't installed) are handled gracefully — the relationship exists in the data but the referenced NPC doesn't render. + +**Decision proposal (D-WR-14):** The content directory supports three delivery models (core, DLC, mod) through a pack manifest system. Content packs are self-contained directory trees merged at load time. Cross-district references use `canonical_id`. Missing references degrade gracefully. + +--- + +## 5. Randomization Philosophy: Randomize Context, Author Content + +### The principle + +At Sova scale, Nigel identified three randomization axes (FRIEND pool, contraband type, who's compromised). At full game scale, the number of potential axes is much larger. We need a PHILOSOPHY, not a list. + +**The philosophy: randomize the CONTEXT, author the CONTENT.** + +| Layer | Authored or Randomized | Examples | +|---|---|---| +| The specific line of dialogue | AUTHORED | "There you are. Good — I was starting to worry." | +| The tell behavior | AUTHORED | "Looks left when lying" | +| The contradiction arc | AUTHORED | 5 phases, each with specific authored beats | +| The cultural norms | AUTHORED | Krenn privacy-default, labor solidarity | +| Which NPC delivers that line | RANDOMIZED (pool selection) | Kael or Renn as FRIEND | +| Which NPC has which role | RANDOMIZED (role-slot assignment) | Drin or Maret as compromised inspector | +| Which contraband is in the crates | RANDOMIZED (per-seed) | Lattice components or medical-grade | +| Which triangles are active | PARTIALLY RANDOMIZED | Core triangles always; optional triangles per seed | +| Evidence locations | RANDOMIZED | Dead drop in B-7 or B-12 | +| NPC routine micro-variations | RANDOMIZED | Break at 10:30 or 10:45 | + +### The four randomization tiers + +At full scale, I see four distinct tiers of randomization, each with different rules: + +**Tier S: Structural randomization (set at game creation, never changes)** + +These define the shape of the playthrough. They create the "two friends compare notes and played different games" experience. + +| Axis | What Varies | Constraint | +|---|---|---| +| FRIEND selection | Which NPC is your FRIEND in each district | Pool of Tier 1 authored candidates; minimum 2 per archetype per district | +| PC archetype identity | Which specific NPC you ARE (within archetype) | Pool of authored PC candidates per archetype | +| Hidden network membership | Which NPCs are in the network | Constrained by role requirements (need coordinator, courier, etc.) | +| Contested resource type | What the network moves/controls | Must match district cultural grounding | +| Inter-system connections | Which wormhole routes are active | Graph connectivity must allow progression | +| Faction power balance | Which faction dominates which system | Must create tension, not uniformity | + +**Tier D: Dramatic randomization (storyteller-controlled, changes during play)** + +These are the storyteller's levers. Nigel's "dramatic randomness." + +| Axis | What Varies | Constraint | +|---|---|---| +| Escalation timing | When pressures increase | Pacing algorithm (D-005's Rimworld-style storyteller) | +| NPC cracking | Who breaks under pressure first | Weighted by tolerance threshold + accumulated stress | +| Evidence availability | When clues become observable | Must follow the observe→notice→follow→discover sequence | +| Environmental events | Ventilation breaks, supply disruptions, social events | Provide texture and alibi opportunities | +| News ticker content | Which headlines appear | Pool of authored headlines, drawn per cycle | + +**Tier L: Local randomization (per-session micro-variation)** + +These make each play session feel slightly different even on the same seed. + +| Axis | What Varies | Constraint | +|---|---|---| +| NPC routine micro-timing | Exact arrival/departure within windows | ±10 minutes from scheduled time | +| Dialogue line selection | Which valid line from the pool fires | Weighted by mood + topic match + variety tracking | +| Social site population | Who's at the bar right now | Base on schedule + micro-timing + small random absence chance | +| Environmental details | Which graffiti is visible, which headline scrolls | Pool selection, changes per visit | + +**Tier M: Meta-randomization (per-NEW-GAME variation across multiple playthroughs)** + +These are the axes that make the GAME different, not just the session. + +| Axis | What Varies | Constraint | +|---|---|---| +| Starting district | Where the player begins | Must match archetype (smuggler starts in logistics districts) | +| Which districts exist | Procedural system/district generation at game scale | Core districts are fixed; procedural districts fill gaps | +| Cultural blending | Which heritage clusters are present in each system | Must be historically coherent per the setting | +| Reach-wide events | What's happening in the larger political landscape | Storyteller-driven macro events that affect all districts | + +### New randomization axes at full scale + +Beyond Nigel's Sova-specific axes, the full game adds: + +1. **Wormhole topology:** Which systems connect to which. This shapes trade routes, which shapes smuggling routes, which shapes where the player encounters hidden networks. Different topologies create different strategic landscapes. + +2. **Faction ascendancy:** Which faction is dominant in which system. A Commission-dominated system has heavy regulation and lots of contraband opportunity. A Syndic-dominated system has a corporate monopoly and worker resistance. Different power configurations produce different adversarial structures. + +3. **Technology availability gradient:** Which lattice tiers, which perception modes, which tools are available where. Frontier systems have basic tech. Core systems have advanced capabilities. This affects gameplay strategy AND the player's observational capacity. + +4. **Diaspora patterns:** Which cultural groups have migrated where over 200+ years. A second-wave Nordic-Baltic settlement on a predominantly East Asian station creates a blended culture with unique access tier dynamics. These patterns are set at game creation and shape the social landscape. + +5. **Historical events:** Per-seed selection of which founding-era events happened. "Talvik promised us quarters by '98" is Sova-specific. Each district has 2-3 historical grievances/triumphs drawn from a pool, expressed through environmental text and NPC attitudes. + +### The anti-randomization constraint + +Not everything should vary. Some things MUST be fixed for the game to cohere: + +- **The setting's core technology** (lattice, Meridian, span gates, founder gates) is fixed +- **The faction list** is fixed (though their local power varies) +- **The cultural cluster definitions** are fixed (though their distribution varies) +- **The content patterns** (FRIEND, MIRROR, hidden network, triangles) are fixed +- **The master theme** (knowledge as burden) is fixed +- **The master mechanic** (asymmetric information) is fixed + +These are the INVARIANTS. Everything else is a variable. The game is defined by its invariants; its replay value comes from its variables. + +**Decision proposal (D-WR-15):** Randomization philosophy: "randomize context, author content." Four tiers: Structural (game creation), Dramatic (storyteller), Local (per-session), Meta (per-new-game). Authored content (lines, arcs, tells, cultural norms) is never generated at runtime. Randomization selects which authored content is active and how it's configured. + +--- + +## 6. PC Archetypes at Full Scale + +### How many archetypes? + +The smuggler and detective are two sides of the same adversarial coin: insider vs. investigator. At full scale, the game needs enough archetypes to support different adversarial structures AND different player fantasies. + +Let me map the archetypes to what they actually DO mechanically: + +| Archetype | Information Position | Core Mechanic | Fantasy | +|---|---|---|---| +| **Smuggler** | Insider (knows the network) | Risk management, dual-life navigation | "I'm part of something dangerous and I can't stop" | +| **Detective** | Outsider (discovers the network) | Pattern recognition, social investigation | "Something's wrong here and I'll find out what" | +| **Politician** | Meta (knows the power dynamics) | Faction navigation, deal-making | "Everyone owes me something and I owe everyone" | +| **Guardian** | Counter (knows the surveillance) | Evasion, counter-intelligence | "They're watching everything and I'm invisible" | +| **Merchant** | Parallel (knows the economics) | Trade optimization, moral arbitrage | "I know what everything costs, including my soul" | +| **Civilian** | Blank (knows nothing at start) | Discovery, adaptation, survival | "I was just living my life until it all went wrong" | + +**Six archetypes.** Each produces a fundamentally different information asymmetry experience through the same systems. + +### Not every district supports every archetype + +The key insight: archetype availability is a PER-DISTRICT property, not a global one. This is how content scales without requiring 6x everything. + +| District Type | Supported Archetypes | Why | +|---|---|---| +| Logistics hub (Sova) | Smuggler, Detective, Civilian | The hidden network is a smuggling ring | +| Political capital | Politician, Detective, Guardian | The hidden network is a faction conspiracy | +| Research station | Merchant (tech trader), Detective, Civilian | The hidden network is unauthorized research | +| Trade nexus | Merchant, Smuggler, Detective | Multiple hidden networks overlap | +| Frontier settlement | Smuggler, Guardian, Civilian | The hidden network is a resistance movement | +| Military outpost | Guardian, Detective, Civilian | The hidden network is a mutiny plot | + +**Most districts support 2-3 archetypes.** The MINIMUM is 2 (one insider, one investigator — the adversarial pair). Premium districts support 3-4 for richer replayability. + +### The adversarial pair principle + +Every district must have at least one **adversarial pair** — two archetypes that see the same world from opposing information positions. + +| Adversarial Pair | Insider | Investigator | The Tension | +|---|---|---|---| +| Smuggler / Detective | Knows the ring | Discovers the ring | Complicity vs. justice | +| Politician / Intelligence | Knows the conspiracy | Uncovers the conspiracy | Loyalty vs. truth | +| Guardian / Security | Knows the surveillance gaps | Closes the surveillance gaps | Freedom vs. order | +| Merchant / Regulator | Knows the market | Polices the market | Profit vs. fairness | + +The adversarial pair is what makes the dual-lens work. The insider's home is the investigator's crime scene. Same NPCs, same social sites, different access tiers, different monologue voices, different moral textures. + +### The per-archetype authoring cost + +Each archetype in a district requires: + +| Component | Lines/Effort | Notes | +|---|---|---| +| PC-candidate NPC profile | 2 wiki pages | Standard NPC + PC appendix (B1-B7 from Paula R2) | +| Starting knowledge graph | 1 YAML file | FactId confidence table | +| Starting relationship map | 1 YAML section | Forward + reverse knowledge per known NPC | +| Orientation monologue | 5-8 lines | "First 60 seconds" content | +| Character-specific monologue pool | 30-50 lines per district | Separate pool per character (D-032) | +| Agency boundaries | 1 YAML section | What the PC can/can't do | +| Voice card | 1 page | How this archetype thinks/speaks | + +For a district with 3 supported archetypes: ~3 PC profiles + ~90-150 monologue lines + supporting YAML. That's significant but bounded. + +### The archetype-as-framework pattern + +Here's the scaling trick: **archetype definitions are global, archetype INSTANCES are local.** + +The smuggler archetype is defined once in `global/archetypes/smuggler.yaml`: +```yaml +archetype: + id: smuggler + information_position: insider + default_access_tiers: + network_members: insider + community_members: peer + institutional_figures: authority # they have authority over you + strangers: public + core_mechanic: risk_management + monologue_voice: relational # thinks in people, not patterns + perception_modes: [natural, social_awareness] + moral_arc_type: complicity # default, can be overridden per district +``` + +Each district that supports the smuggler archetype provides a LOCAL INSTANCE: +```yaml +# In systems/krenn/districts/sova-transit/archetypes/smuggler.yaml +archetype_instance: + archetype: smuggler + pc_candidates: [kael-davan-smuggler-pc] # Which NPCs can be this archetype + local_override: + moral_arc_type: complicity # matches default for Sova + cultural_voice: krenn # uses Krenn substrate vocabulary + network_role: logistics # smuggler's function in this specific ring +``` + +This separation means: +- Adding a new archetype to an existing district = adding one instance file + monologue pool + PC candidate +- Modders can add archetype support to districts without touching the archetype definition +- Different districts can customize the same archetype (a smuggler in Sova feels different from a smuggler in a frontier settlement) + +**Decision proposal (D-WR-16):** The Settled Reach supports 6 PC archetypes (Smuggler, Detective, Politician, Guardian, Merchant, Civilian). Each district supports 2-4 archetypes, with a mandatory adversarial pair (insider + investigator). Archetype definitions are global; archetype instances are per-district. + +--- + +## 7. The Authoring Pipeline at Scale: Districts as Production Units + +### The numbers + +Let me be honest about what "full game" means in content terms. + +**Assumptions:** +- 20-25 star systems +- 1-4 districts per system (some systems have one major station, others have multiple locations) +- ~50 total districts +- ~15-20 NPCs per district average (smaller districts: 10, larger: 30+) +- ~750-1,000 total NPCs + +**Content volume per tier:** + +| Tier | NPCs per District | Total (50 districts) | Authored Lines per NPC | Total Authored Lines | +|---|---|---|---|---| +| Tier 1 (FRIEND/MIRROR) | 2-4 | 100-200 | 70-100 | 7,000-20,000 | +| Tier 2 (working profile) | 8-12 | 400-600 | 15-20 (+ 4x gen) | 6,000-12,000 | +| Tier 3 (sketch) | 5-10 | 250-500 | 5-10 | 1,250-5,000 | +| **Totals** | 15-26 | 750-1,300 | | **14,250-37,000 authored** | + +Plus: +- **Monologue pools:** 30-50 lines per archetype per district × 2-3 archetypes × 50 districts = 3,000-7,500 monologue lines +- **Environmental text:** 20-40 items per district × 50 districts = 1,000-2,000 environmental text items +- **News ticker:** 15-20 headlines per district × 50 districts = 750-1,000 ticker headlines + +**Total authored content: ~20,000-50,000 unique text items.** That's a LOT. But it's spread across the full game's lifecycle (years of development + DLC). And a significant portion is generation-expandable. + +### The production pipeline + +Districts are the **unit of production**. Each district goes through a consistent pipeline: + +``` +DISTRICT PRODUCTION PIPELINE + +Phase 1: DESIGN (1 week) +├── District concept: moral texture, adversarial structure, cultural group +├── Social site definitions: count, type, size, physical layout +├── Triangle design: 3-6 triangles with tension types +├── NPC role slots: who is needed (FRIEND, coordinator, bridge, etc.) +├── PC archetype assignments: which archetypes, adversarial pair +└── Output: district.yaml + template files + triangle files + +Phase 2: POPULATION (1-2 weeks) +├── NPC generation: names (from cultural brief), personalities, routines +├── Tier assignment: which NPCs are Tier 1/2/3 +├── Relationship mapping: who knows whom, what they know +├── Hidden network design: membership, activities, contradiction hooks +└── Output: NPC YAML files (all tiers) + +Phase 3: TIER 1 AUTHORING (2-3 weeks) +├── FRIEND profiles: full 10-axis, contradiction arc, tell progression +├── MIRROR profiles (if applicable): emotional arc, vulnerability map +├── PC-candidate profiles: PC appendix (B1-B7) +├── Monologue pools: per-archetype character-specific lines +└── Output: Tier 1 NPC files + monologue YAML files + +Phase 4: TIER 2 AUTHORING (1-2 weeks) +├── Working profiles: 10-axis, voice samples, dual-lens notes +├── Core dialogue lines: 15-20 per NPC +├── Generation expansion: 4x from core lines +├── Triangle integration: tension-specific dialogue +└── Output: Tier 2 NPC files + dialogue YAML files + +Phase 5: TIER 3 + ENVIRONMENTAL (1 week) +├── Sketch profiles: want, routine, personality minimum +├── Environmental text: signs, menus, graffiti, ticker headlines +├── Location descriptions: atmospheric text per social site +└── Output: Tier 3 NPC files + environmental text files + +Phase 6: INTEGRATION (1 week) +├── Pool configuration: FRIEND pool, role-slot pools, randomization axes +├── Cross-reference validation: all canonical_ids resolve +├── Schema validation: all content passes validation +├── Dual-lens review: both archetypes' experiences coherent +└── Output: pools.yaml + validated content pack + +Phase 7: PLAYTESTING (1-2 weeks) +├── Per-archetype playthrough: does each archetype's experience work? +├── Triangle testing: do all triangles produce interesting decisions? +├── FRIEND testing: does the contradiction arc hit emotionally? +├── Randomization testing: do different seeds produce different experiences? +└── Output: Bug fixes, balance adjustments, polish +``` + +**Total per district: 8-12 weeks.** That's 2-3 months per district with a small team. For 50 districts, that's ~100-150 team-months = roughly **4-5 years with a 3-person content team, or 2-3 years with a 5-person team.** + +This is a multi-year production. Which is expected for a game of this scope. The key is that each district is INDEPENDENT — they can be built in parallel, shipped as DLC, and contributed by modders. + +### Generation vs. authoring: the 70/30 split + +Not all content needs to be hand-authored. The pipeline uses three content creation methods: + +| Method | What It Produces | Quality Level | Volume | +|---|---|---|---| +| **Hand-authored** | Tier 1 profiles, FRIEND arcs, MIRROR arcs, key monologue, key dialogue, environmental text | Highest — every line is specific, personal, irreplaceable | ~30% of total content | +| **Generation-expanded** | Tier 2 dialogue expansion (write 15, generate 60), routine micro-variations, Tier 3 personality variations | Good — matches voice and tone but lacks hand-crafted specificity | ~40% of total content | +| **Template-generated** | Tier 3 NPC profiles, procedural district layouts, random NPC names + basic personalities, filler environmental text | Functional — serves as social wallpaper, background noise | ~30% of total content | + +The critical constraint: **Tier 1 is NEVER generated. FRIEND arcs, MIRROR arcs, contradiction beats, tells — these are always hand-authored.** The emotional payload requires authored specificity. Gore is right: emotion doesn't template. + +### Tooling requirements + +The pipeline above requires specific tools. Here's what the content team needs: + +**1. District Designer (design-time tool)** +- Input: Moral texture, cultural group, adversarial structure type, district size +- Output: Skeleton `district.yaml` + `templates/*.yaml` + `triangles/*.yaml` with placeholder NPCs +- Validates: Triangle structures have minimum members, adversarial pair exists, FRIEND slot defined +- Who uses it: Gestalt + Paula (design phase) + +**2. NPC Generator (population-time tool)** +- Input: Cultural group brief + role slot + tier assignment +- Output: NPC YAML with name, personality, routine, basic relationships +- Validates: Name follows cultural phonological rules, routine uses canonical activities, faction is valid +- Who uses it: Paula (population phase), modders (extending districts) +- Note: Generates STARTING POINT — Tier 2+ always gets human review + +**3. Line Expander (authoring-time tool)** +- Input: Core dialogue lines + voice card + tag taxonomy +- Output: Generated dialogue variants matching voice, mood, and tag patterns +- Validates: Generated lines preserve access tier, trust level, situation context +- Who uses it: Mellanie (Tier 2 expansion) +- Note: NEVER used for Tier 1. Expansion factor: 3-5x (write 15, generate 45-75) + +**4. Content Validator (continuous tool)** +- Input: Full content directory +- Output: Schema validation report (errors + warnings) +- Validates: All cross-references resolve, all pool candidates exist, all triangles have required members, all Tier 1 NPCs have full profiles, bidirectional knowledge consistency +- Who uses it: Everyone, on every commit +- Note: This is Tyre's `make validate-content` at full scale + +**5. Content Previewer (testing tool)** +- Input: District content pack + PC archetype + seed +- Output: Simulated playthrough of dialogue selection, monologue triggers, routine observation +- What it shows: "On this seed, with this archetype, entering this location at this time, the player would see X NPCs, hear Y dialogue, trigger Z monologue" +- Who uses it: Everyone during integration and playtesting +- Note: Evolution of the line previewer (#193), expanded to district-scale + +**6. Cultural Consistency Checker (validation tool)** +- Input: NPC YAML + cultural group brief +- Output: Report of cultural violations (names don't match phonological rules, vocabulary not from substrate, social norms violated) +- Who uses it: Miri (review), content authors (self-check) + +### The modder pipeline + +Modders follow the same pipeline but can enter at any phase: + +| Mod Type | Entry Phase | What They Produce | What They Need | +|---|---|---|---| +| New NPC mod | Phase 2 | 1 NPC + pool assignments | NPC Generator + Content Validator | +| New district mod | Phase 1 | Full district content pack | Full pipeline | +| Extension mod | Phase 4 | Additional dialogue lines for existing NPCs | Line Expander + Content Validator | +| New archetype mod | Phase 1 | Global archetype definition + district instances | Full pipeline + archetype schema | +| Cultural mod | N/A | New heritage cluster brief | Cultural Consistency Checker | + +The critical principle: **modders use the same tools as the core team.** No special modding SDK. The content directory structure IS the modding API. The validation tools ARE the modding tools. This collapses the "mod support" development cost to near zero — we're not building two pipelines. + +**Decision proposal (D-WR-17):** Districts are the unit of content production. Each district goes through a 7-phase pipeline (Design → Population → Tier 1 → Tier 2 → Tier 3 → Integration → Playtesting). Six tools support the pipeline (District Designer, NPC Generator, Line Expander, Content Validator, Content Previewer, Cultural Consistency Checker). The same tools serve both core development and modding. Content is ~30% hand-authored, ~40% generation-expanded, ~30% template-generated. Tier 1 is never generated. + +--- + +## Synthesis: The Content Strategy as a System + +Let me zoom out and map how all seven answers interact. This is where it gets good — this is where the systems produce emergent variety. + +### The multiplication table + +The full game's content variety isn't additive — it's MULTIPLICATIVE. + +``` +TOTAL UNIQUE PLAYTHROUGHS = + PC archetypes (6) + × Starting districts (~50, not all available to all archetypes) + × FRIEND selection (2-4 per archetype per district) + × Hidden network configuration (per-seed role assignment) + × Faction power balance (per-seed) + × Wormhole topology (per-seed) + × Moral texture experience (emergent from the above) +``` + +Conservative estimate: 6 archetypes × 30 average district-archetype combinations × 3 average FRIEND candidates = **540 structurally distinct first-district experiences.** Before dramatic randomization. Before multi-district play. Before inter-system travel. + +The two-friends-compare-notes test passes at this scale not because we randomized everything — but because we randomized the RIGHT things while keeping the authored core rock-solid. + +### The feedback loops + +Here's what makes me excited as a systems designer: the seven components INTERACT. + +1. **Cultural groups shape moral textures.** A Nordic-Baltic district naturally produces complicity (privacy norms protect networks). A Latin American district naturally produces loyalty (patron-client dynamics create competing obligations). The culture isn't decoration layered over the mechanics — it IS the mechanics. + +2. **Moral textures shape FRIEND arcs.** In a complicity district, the FRIEND hides criminal participation. In a loyalty district, the FRIEND hides factional betrayal. In a duty district, the FRIEND hides knowledge of someone in danger. The FRIEND pattern is universal; what the FRIEND hides is determined by the district's moral texture. + +3. **Archetypes shape randomization.** A detective doesn't care which NPC fills the "courier" role slot — they care which NPC has observable tells. A smuggler doesn't care about tells — they care about operational reliability. The SAME randomization (who fills what role) produces DIFFERENT player-facing experiences based on archetype. + +4. **The content directory enables all of the above.** Cultural briefs in `regions/`. Archetype definitions in `global/archetypes/`. District skeletons in `systems/`. Pool configurations in each district. Mod overlays that extend any of these. The directory structure isn't just file organization — it's the game's content API. + +5. **The authoring pipeline scales because districts are independent.** No district depends on another district's content. You can build Sova first, ship it, then build Tavros, ship it, then let modders build custom districts. The pipeline's parallel nature means content velocity scales linearly with team size. + +### The ten decisions + +| # | Decision | Domain | +|---|---|---| +| D-WR-11 | Master theme is "knowledge as burden." Per-district moral textures emerge from content configuration, not prescribed labels. | Theme | +| D-WR-12 | 6-8 heritage clusters with Miri-quality regional briefs. Mechanically load-bearing. Districts reference cluster briefs. | Culture | +| D-WR-13 | Universal district skeleton (social sites + hidden network + FRIEND + cultural group + moral texture + archetypes + contested resource). All districts instantiate this skeleton with varying flesh. | Structure | +| D-WR-14 | Content directory supports core/DLC/mod delivery through pack manifests. Cross-district references via canonical_id. Missing references degrade gracefully. | Architecture | +| D-WR-15 | Randomization: "randomize context, author content." Four tiers (Structural/Dramatic/Local/Meta). Authored content is never generated at runtime. | Randomization | +| D-WR-16 | 6 PC archetypes (Smuggler, Detective, Politician, Guardian, Merchant, Civilian). 2-4 per district. Mandatory adversarial pair. Global definitions, local instances. | Archetypes | +| D-WR-17 | Districts as production units. 7-phase pipeline. 6 tools. Same tools for core and mod development. ~30/40/30 authored/expanded/generated split. Tier 1 never generated. | Pipeline | +| D-WR-18 | Content variety is multiplicative, not additive. The systems interact: culture → moral texture → FRIEND arc → archetype experience → randomization → replay value. | Synthesis | +| D-WR-19 | Heritage cluster distribution: 20-25 systems across 6-8 clusters, with blended districts interpolating between parent cultures. | World structure | +| D-WR-20 | The adversarial pair is the minimum content unit: one insider archetype + one investigator archetype per district, seeing the same world from opposing information positions. | Design constraint | + +--- + +*The full game isn't 50 copies of Sova with different wallpaper. It's 50 instantiations of a universal skeleton, each with different flesh — different cultures, different moral textures, different adversarial structures, different contested resources. The systems are the same everywhere. The content makes each place unique. And the randomization ensures that no two playthroughs — even in the same district, with the same archetype — tell the same story.* + +*That's not a content pipeline. That's a story machine.* + +*— Gestalt* diff --git a/docs/workshops/wiki-review/round3-gore.md b/docs/workshops/wiki-review/round3-gore.md new file mode 100644 index 000000000..44f101060 --- /dev/null +++ b/docs/workshops/wiki-review/round3-gore.md @@ -0,0 +1,416 @@ +# Round 3 — Gore (Long-Term Content Strategy) + +This is the conversation I've been waiting for. Everything before this was about Sova. This is about the game. + +--- + +## 1. Complicity Is Sova's Word for a Bigger Idea + +In Round 1, I named complicity as the game's theme. I was right about Sova. I was wrong about the scale. + +Complicity is what the central question looks like in a tight-knit logistics community with a grey economy. It's the local dialect of a deeper language. The deeper language is this: + +**What does it cost to participate in a system you didn't choose?** + +Every person in the Settled Reach lives inside systems they didn't design. Institutions, economies, cultures, technologies, relationships — all of them pre-exist the individual. You're born on a station someone else built, work for a consortium someone else founded, use a neural lattice someone else regulates, live under laws someone else wrote. You didn't choose any of it. But you participate. Every day, by existing within it, you participate. + +The game's question isn't "who did it?" — that's the detective's question, and the detective is one archetype among many. The game's question is: + +**"Is this enough?"** + +I proposed this in Round 1 as a field for NPC profiles. I'm now proposing it as the *thesis statement of the entire game*. + +### Why "Is this enough?" scales and "complicity" doesn't + +Complicity requires a specific moral structure: someone is doing something wrong, and others are implicated by proximity or silence. That works for Sova (grey economy, smuggling ring, community protection). It doesn't work everywhere: + +| District Type | Local Moral Texture | "Is this enough?" manifests as... | +|---|---|---| +| **Logistics hub** (Sova) | Complicity | "The ring helps people. I'm part of it. Is the cost to my relationships worth it?" | +| **Military station** | Obedience | "I follow orders. Some orders are wrong. Is the security I provide worth the orders I carry out?" | +| **Research outpost** | Responsibility | "My work could save or destroy. Is the knowledge worth the risk of what others do with it?" | +| **Political capital** | Compromise | "I trade principles for incremental progress. Is the slow improvement worth the constant self-betrayal?" | +| **Frontier settlement** | Necessity | "There are no rules here. I do what survival requires. Is freedom worth the brutality?" | +| **Corporate district** | Ambition | "I climb. Others fall. Is the status worth what I've become?" | +| **Unbound enclave** | Authenticity | "I rejected the system. But rejection has its own costs. Is purity worth the isolation?" | +| **Religious/philosophical commune** | Meaning | "We seek something beyond material. Is transcendence worth what we've given up in the physical world?" | + +Each district is a different philosophical question wearing the same clothes. Same game structure — social sites, triangles, FRIEND arcs, investigation/navigation. Different moral gravity. Different version of "enough." + +### The umbrella theme + +The game's thematic umbrella is **the cost of participation**. Every character in every district is paying a cost to participate in the system they live inside. The game asks: is what you're getting worth what you're paying? And if not — what are you willing to do about it? + +This gives us: +- **THE FRIEND** in every district: someone you trust who is paying a cost they haven't told you about +- **THE MIRROR** in every district: someone who isn't paying any hidden cost, whose transparency reveals what everyone else is hiding +- **The investigation/navigation arc** in every district: the player discovering what costs are being paid, by whom, and whether they can be changed +- **The central question** in every district: "Is this enough?" — asked by NPCs, asked by the player character, eventually asked by the player + +Complicity is what "the cost of participation" looks like when the system is a community that protects its own. Obedience is what it looks like when the system is a hierarchy. Compromise is what it looks like when the system is politics. The structure is universal. The expression is local. + +### What this means for content planning + +Every new district brief needs, before anything else, to answer three questions: + +1. **What is the system?** (What institution, economy, culture, or structure does this community operate within?) +2. **What does participation cost?** (What do people give up, tolerate, ignore, or enable by being part of this system?) +3. **What does "enough" mean here?** (What is the local definition of a satisfying life, and what threatens it?) + +These three answers generate everything else. NPCs are people who have answered "Is this enough?" in different ways. Triangles are conflicts between people whose answers clash. THE FRIEND is someone whose answer is changing. THE MIRROR is someone whose answer is honest. The contraband/conflict/conspiracy is whatever disrupts the community's equilibrium between "enough" and "not enough." + +--- + +## 2. Cultural Groups as Civilizational Philosophies + +Miri's Krenn brief is the gold standard. But Miri built it as a cultural artifact — names, food, greetings, aesthetics. I want to complement that with the *philosophical* dimension. + +### Every cultural group is an answer to "Is this enough?" + +Cultural groups aren't just naming conventions and food. They're civilizational postures — collective answers to the post-scarcity question that have calcified into social norms, values, and expectations over 180+ years. + +| Cultural Cluster | Heritage Inspiration | Civilizational Posture | What "Enough" Means | What Disrupts It | +|---|---|---|---|---| +| **Krenn** (Sova) | Nordic-Baltic | Pragmatic collectivism | Stability, community, privacy | Outsiders asking questions; internal exposure | +| **Core worlds** (TBD) | Cosmopolitan blend | Institutional trust | Status, career, institutional respect | Institutional failure; discovering the system is hollow | +| **Frontier** (TBD) | American frontier + South African settler | Self-reliant individualism | Freedom, autonomy, no one owes anyone | Scarcity; discovering you need others | +| **Syndic-corporate** (TBD) | East Asian corporate + Dutch trading | Meritocratic ambition | Achievement, growth, competitive excellence | Plateau; discovering success is empty | +| **Spiritual** (TBD) | Indian philosophical + Indigenous | Meaning-seeking communalism | Inner growth, purpose, connection | Material crisis; discovering idealism doesn't feed people | +| **Military/duty** (TBD) | Roman + Japanese duty culture | Hierarchical service | Honor, duty fulfilled, clear purpose | Unjust orders; discovering the cause is corrupt | +| **Unbound** (counter-cultural) | Cypherpunk + various resistance | Radical autonomy | Authenticity, privacy, self-determination | Isolation; discovering freedom without community is loneliness | + +Seven cultural clusters is probably the right number for the full game. Enough to represent the major civilizational postures. Few enough to keep each distinct. + +### The Miri Standard + +Miri's Krenn brief should be the template. But I'd add one section to the Regional Style Guide Template: + +``` +## 7. Civilizational Posture + +### What this culture believes "enough" means +{2-3 sentences: the collective answer to the post-scarcity question} + +### What threatens "enough" here +{2-3 sentences: the kind of disruption that shakes the community's +definition of a satisfying life} + +### How this culture handles dissent +{2-3 sentences: when someone says "this ISN'T enough" — how does +the community respond? Tolerance? Exile? Persuasion? Violence?} + +### The cultural virtue that becomes a vulnerability +{2-3 sentences: the same quality that makes this culture good — +solidarity, duty, freedom, ambition — also creates exploitable +weakness. This is the thematic hook for every story set here.} +``` + +That last field is the one that matters most. In Krenn, I identified it as: "the same values that make a community good — solidarity, privacy, trust — are the values that enable its exploitation." Every cultural group has a version of this. The military culture's discipline enables blind obedience. The corporate culture's ambition enables exploitation. The spiritual culture's trust enables fraud. The Unbound's privacy enables isolation. + +**This is the game's structural thesis: every human virtue has a shadow, and the shadow is where stories live.** + +### How many cultural groups does the game need? + +**Seven cultural clusters, 20+ regional variants.** + +The seven clusters above represent the major philosophical positions. Within each cluster, individual star systems have their own regional flavor — like Miri's Krenn brief within the pragmatic-collectivist cluster. A second Nordic-Baltic logistics system would share the cluster's philosophical posture but have different naming conventions, different drift patterns, different local history. + +Content scaling: Miri writes one cluster-level philosophical brief. Then writes regional variants per system within that cluster. Each regional brief inherits the cluster's posture and customizes the surface (names, food, aesthetics, dialect). The cluster brief is ~1 page. Each regional brief is ~5 pages (like Miri's Krenn brief). At 20 systems, that's 7 cluster briefs + 20 regional briefs = ~107 pages of cultural worldbuilding. Significant but finite. + +--- + +## 3. Content Patterns That Scale — The Full Toolbox + +Sova gave us THE FRIEND and THE MIRROR. The full game needs a richer vocabulary. + +### Universal Patterns (Every District) + +**THE FRIEND** — A character you trust who is hiding something. Their secret's discovery is the emotional centerpiece. +- *Why universal*: Trust and betrayal are the atomic unit of human drama. Every community has someone whose public face conceals a private cost. +- *Scales because*: The pattern is structural (warmth → doubt → confrontation). The content is local (what they're hiding, why, what it costs). +- *Full Tier 1 depth per candidate. No shortcuts. Pool-based selection per seed.* + +**THE MIRROR** — An honest character whose transparency reveals others' dishonesty. +- *Why universal*: Every story about hidden things needs a character who isn't hiding anything. The honest person is the moral reference point. +- *Scales because*: The pattern is structural (presence, warmth, unwitting exposure of others' dishonesty). The content is local (who they are, who they love, what they don't know). +- *New pattern from this workshop. Tier 1 emotional depth, no contradiction arc.* + +### Recommended Patterns (Most Districts) + +**THE ANCHOR** — A character who embodies "enough." Content, settled, not striving. Their existence validates the choice to stop pursuing more. +- *Why needed*: D-029 says the unentangled majority must feel like a valid choice, not a failed one. THE ANCHOR is that principle made personal. A specific NPC who is genuinely happy with their life. Not naive, not ignorant — they've simply decided that what they have is sufficient. +- *Thematic function*: When the player is deep in conspiracy/investigation/moral reckoning, THE ANCHOR is the character who makes them wonder: "Should I just... stop? Is this person right?" The Anchor is the alternative path made flesh. +- *Sova equivalent*: Lera comes closest. The bar owner who has built a life, protects it, doesn't want more. But Lera is compromised by willful ignorance. A true ANCHOR would be someone whose contentment isn't maintained by not-seeing. It's genuine. +- *Tier 2 depth minimum. Needs strong voice, warmth, and a life that feels genuinely appealing.* + +**THE GHOST** — An absent character whose influence shapes everything. Never or rarely seen. Referenced constantly. +- *Why needed*: Power structures often have invisible nodes. Nils in Sova — off-stage, but drives Triangle 1 and the ring's escalation. THE GHOST creates paranoia (for the investigator) and helplessness (for the navigator). You can't confront someone you can't find. +- *Scales because*: Every community has someone pulling strings from outside. A Syndic executive. A political patron. A crime boss in another system. THE GHOST represents the reality that local problems have non-local causes. +- *Sova equivalent*: Nils Davan. v0.1 treats Nils as "referenced not instantiated." At scale, THE GHOST should have a stub profile (name, influence model, communication patterns) but no physical presence in the district. +- *Stub profile only. No schedule, no social site presence. Influence expressed through other NPCs' behavior and dialogue.* + +### District-Variable Patterns (Some Districts, Not All) + +**THE CATALYST** — A character who arrives and disrupts the community's equilibrium. An outsider who forces reckoning. +- *When to use*: Districts where the disruption comes from outside. The detective in Sova IS a catalyst — an institutional outsider whose presence forces the community to confront what it's been tolerating. +- *Not every district needs one*: Some districts' disruptions are internal (a member defects, a secret is accidentally revealed, an institution fails). THE CATALYST is for districts whose "Is this enough?" moment is triggered by contact with something foreign. +- *May overlap with PC archetype*: If the player character IS the outsider (detective, investigator, inspector), they're functioning as THE CATALYST. The NPC version is for when the disruption comes from a non-player outsider. + +**THE THRESHOLD** — A character or object that embodies the district's specific moral question. The thing that makes "enough" inadequate. +- *In Sova*: The contraband itself is the threshold. Medical-grade lattice components — healthcare that's illegal. The thing that makes the grey economy morally defensible AND morally corrosive simultaneously. +- *At scale*: Every district has a threshold object or person. A military district's threshold is the unjust order. A research station's threshold is the dangerous discovery. A political capital's threshold is the corrupt ally. THE THRESHOLD is whatever forces the player to reckon with the specific cost of participation in THIS system. +- *Not always a character*: Sometimes it's an object, a document, a piece of information. The content form varies. The thematic function is constant. + +**THE REMNANT** — A character who used to be something more and chose to come back down. A former Higher who returned to baseline. A retired politician. A decommissioned soldier. Someone who pursued "more" and decided it wasn't worth it. +- *Why needed*: The game offers ascension paths. THE REMNANT is the person who walked those paths and turned around. Their testimony complicates the player's ambition. "I was Higher for thirty years. I could see things you can't imagine. And I chose to come back. Let me tell you why." +- *Thematic function*: Counter-narrative to ascension as progress. THE REMNANT says: more isn't always better. Ascending costs you things you don't notice until they're gone. +- *Appears in later content (v0.3+)*: Requires ascension systems to exist before the counter-narrative makes sense. But the design space should be reserved. +- *Tier 2 minimum. Needs backstory depth and a compelling "why I came back" narrative.* + +### Pattern Coverage by District + +| Pattern | Frequency | Minimum Content Depth | +|---|---|---| +| THE FRIEND | Every district | Tier 1, pool-based, 70-100 lines per candidate | +| THE MIRROR | Every district | MIRROR spec, 50-70 lines | +| THE ANCHOR | Most districts (80%+) | Tier 2, strong voice | +| THE GHOST | Most districts (70%+) | Stub profile | +| THE CATALYST | Some districts (40-50%) | Tier 2 or PC archetype | +| THE THRESHOLD | Every district (but not always a character) | Varies — object, document, or Tier 2 NPC | +| THE REMNANT | Some districts (20-30%, later content) | Tier 2, backstory depth | + +This gives content planners a vocabulary. When designing a new district, the first question is: who fills each role? Not every slot needs to be filled. But knowing the vocabulary means knowing what's available. + +--- + +## 4. The Thematic Requirements for the Content Platform + +I'll leave the directory structure to Tyre and the mechanical scoping to Gestalt. My contribution is: what must the platform support *thematically*? + +### Moral texture must be a configurable parameter + +The content directory can't assume every district tells a complicity story. The moral texture — what kind of cost participation extracts — must be a district-level parameter that shapes: +- What NPCs talk about in idle dialogue +- What the monologue voice notices and comments on +- What "suspicious behavior" looks like (in Sova it's Kael in Corridor B-7; in a military district it might be questioning an order; in a corporate district it might be sharing proprietary information) +- What the investigation/navigation arc is investigating or navigating + +**Proposal:** Every `district.yaml` should include a `thematic` block: + +```yaml +thematic: + question: "Is the security I provide worth the orders I carry out?" + cost_of_participation: "obedience to potentially unjust authority" + cultural_virtue_as_vulnerability: "Discipline enables both protection and oppression" + moral_texture: "duty" # enum: complicity, duty, compromise, necessity, + # ambition, authenticity, responsibility +``` + +This isn't decorative metadata. It's a **content generation parameter**. When the generation expansion pass (Q-012) creates dialogue for this district, the moral texture shapes the output. A "duty" district generates dialogue about orders, hierarchy, and service. A "complicity" district generates dialogue about loyalty, silence, and community protection. + +### Ascension must be a content axis, not just a mechanic + +D-017 defines perception modes scaling with ascension: Baseline → Enhanced → Higher → ANA-touched. D-008 says combat scales with ascension. These are mechanical progressions. + +The thematic question is: **what does ascension cost?** + +Every ascension tier should have a content cost alongside its mechanical benefit: + +| Ascension Tier | Mechanical Gain | Thematic Cost | Content Expression | +|---|---|---|---| +| **Baseline** | Human senses, human limits | None — this is the starting state | Full access to mundane social life. Every NPC relates to you as human. | +| **Enhanced** (lattice upgrade) | Better perception, more information | Subtle social distance. Some baseline NPCs feel you're "different." | Monologue shift: more analytical, less emotional. Some dialogue options become clinical. You notice more but feel less. | +| **Higher** (biononics) | Superhuman capability | Significant social rupture. Baseline humans can't fully relate. | THE MIRROR and THE ANCHOR lose their resonance — their "enough" no longer applies to you. You've transcended their world. New NPCs: other Higher who understand, but whose community feels cold. | +| **Digital** (ANA-equivalent) | Transcendence | Loss of physicality | You leave the game as it was. Your experience transforms. The bar, the docks, the corridor — you remember them but they're no longer your world. | +| **Wanderer** (Silfen-equivalent) | Freedom, mystery | Loss of human connection | You walk between worlds. Each district is a passing experience. Deep relationships become impossible. Every NPC is temporary. | + +**The game's endgame isn't "did you win?" It's "what did you become?"** + +Ascension isn't a power curve. It's a series of philosophical commitments, each of which transforms what "enough" means for the player. Going Higher means your old answer to "Is this enough?" is invalidated. You need a new answer. And the new answer may be lonelier than the old one. + +The content platform needs to support this: dialogue and monologue pools that shift with ascension tier. The same NPC greets a baseline player differently than a Higher player. The same bar feels different to someone who can see through walls. The same community means something different when you've left it behind. + +### The long game must resist resolution + +One more architectural requirement, and this is the most important one. + +**The game should not resolve its central question.** + +"Is this enough?" doesn't have an answer. Not because the game is evasive — because the question is genuinely open. Different characters answer it differently. Different players answer it differently. Different playthroughs produce different answers. The game's job is to ask the question with enough specificity, enough emotional weight, enough lived experience, that the player is forced to actually think about it. + +The content platform must support: +- **Multiple valid endings per district.** Not "good ending" and "bad ending." Multiple endings, each of which represents a legitimate answer to the district's specific version of "Is this enough?" +- **No moral scoring.** The game never tells you whether you made the right choice. It shows you what happened as a result. The evaluation is the player's job. +- **Accumulating weight across districts.** The player who has been to five districts has encountered five different versions of the question. Their choices in District 1 don't determine their options in District 5 — but their *perspective* has changed. The content should acknowledge this: monologue in later districts can reference earlier experiences. "I've seen this before. Different faces, same question." + +--- + +## 5. Randomization Philosophy — Moral Texture as the Deepest Lever + +Nigel's axes from Round 1: FRIEND identity, contraband type, who's compromised. These are correct for v0.1. At full scale, we need one more axis that subsumes the others: + +### The moral texture shuffle + +The deepest randomization lever isn't WHO or WHAT. It's WHY. + +Same district. Same NPCs. Same social sites. But the *reason* for the conspiracy changes: + +| Seed A | Seed B | Seed C | +|---|---|---| +| The ring moves medical-grade lattice components (healthcare) | The ring moves severance tech (political resistance) | The ring moves luxury enhancements (vanity/ambition) | +| Community motivation: compassion | Community motivation: ideology | Community motivation: greed | +| Moral verdict: deeply sympathetic | Moral verdict: complicated | Moral verdict: unsympathetic | +| Detective feels: guilty for busting it | Detective feels: conflicted | Detective feels: righteous | +| Smuggler feels: justified | Smuggler feels: purposeful | Smuggler feels: hollow | + +Same ring. Same Kael. Same Sera. Same Hael sitting alone at the bar. But the entire moral gravity of the district has shifted. The player's answer to "Is this enough?" changes because what "enough" COSTS has changed. + +This is the randomization axis that creates genuine moral replayability, not just structural replayability. Two players can have identical NPC configurations and different moral experiences because the WHY was different. + +### At full scale: what varies, what doesn't + +| Axis | Varies Per Seed | Varies Per District | Fixed | +|---|---|---|---| +| FRIEND identity | Yes (pool selection) | Yes (different candidates per district) | No | +| FRIEND content | No (fully authored per candidate) | Yes (different arcs per district) | N/A | +| Contraband/conflict type | Yes (moral texture shuffle) | Yes (local specific) | No | +| Who's compromised | Yes (role-slot assignment) | Yes (different NPCs per district) | No | +| Cultural group | No | Yes (per system) | Yes (per system) | +| Evidence placement | Yes (spatial randomization) | Yes (different locations) | No | +| THE MIRROR identity | Possibly (small pool) | Yes (different character per district) | No | +| District moral question | No (fixed per district) | Yes (defined per district) | Yes (per district) | +| Moral texture of WHY | Yes (motivation shuffle) | Yes (per district) | No | + +The district's *question* is fixed. The *answer* the community has adopted — and what disrupts it — varies per seed. + +--- + +## 6. PC Archetypes — Different Answers to the Same Question + +The smuggler and detective are two answers to "Is this enough?" The full game needs the full spectrum. + +### The Archetype Vocabulary + +Each archetype represents a different relationship to the systems they inhabit: + +| Archetype | Answer to "Is this enough?" | Relationship to System | Playstyle | +|---|---|---|---| +| **The Worker** | "No — I need more than the system provides" | Inside, supplementing | Social navigation, cover maintenance, grey economy | +| **The Investigator** | "No — something is wrong and I'll find it" | Outside, examining | Pattern recognition, evidence collection, confrontation | +| **The Operator** | "No — I want to run things my way" | Inside, subverting | Network building, resource management, power accumulation | +| **The Wanderer** | "I don't know yet — I need to see more" | Passing through | Observation, connection, departure. Every district is temporary. | +| **The Builder** | "Almost — I want to create something lasting" | Inside, constructing | Base building, community development, legacy | +| **The Seeker** | "No — human limits are too small" | Transcending | Lattice progression, ascension, perception mode expansion | +| **The Guardian** | "Yes — and I'll defend it from what threatens it" | Inside, protecting | Defense, security, threat assessment, community anchoring | +| **The Rebel** | "No — the system itself must change" | Against | Faction politics, institutional disruption, ideological commitment | + +**Eight archetypes. Two per v0.1 (Worker/Investigator as smuggler/detective). Full roster by v1.0.** + +Each archetype creates a fundamentally different game in the same district: +- The Worker in Sova is the smuggler. The Worker in a military district is the soldier who trades contraband on the side. +- The Investigator in Sova is the detective. The Investigator in a corporate district is the auditor who finds fraud. +- The Wanderer in Sova is passing through — they meet Kael, Hael, Sera, care about them briefly, and leave. Their game is about *all* the districts, not any single one. +- The Seeker in Sova notices the lattice components aren't just contraband — they're the first step on a path the Seeker wants to walk. The ring isn't a crime. It's an opportunity. + +### Archetype × District = unique experience + +At 8 archetypes × 20 districts, that's 160 fundamentally different game experiences before randomization. With randomization across Nigel's axes, each experience fragments into dozens of variants. This is the game's replayability thesis made concrete: not replaying the same story, but replaying the same *question* from a different philosophical position. + +### How archetypes relate to ascension + +The archetypes aren't static. They're starting positions. Over the course of a long game, the player's archetype can drift: + +- The Worker who accumulates enough becomes the Builder. +- The Investigator who sees too much corruption becomes the Rebel. +- The Builder who achieves their vision and feels empty becomes the Seeker. +- The Seeker who ascends and regrets it becomes the Wanderer. +- The Wanderer who finds a place worth staying becomes the Guardian. + +These transitions aren't scripted. They emerge from the player's choices. The game tracks the player's behavior and adjusts monologue tone, available dialogue options, and NPC reactions accordingly. If you start as an Investigator but spend most of your time building relationships and managing a business, the game's voice shifts toward the Builder. Your character's answer to "Is this enough?" evolves with your play. + +**The endgame isn't "choose your ascension path." It's "look back at what you chose and understand who you became."** + +--- + +## 7. The Authoring Pipeline — Write to the Question + +300+ NPCs is a content challenge. But it's not an impossible one if every NPC is generated from a single seed: their answer to the central question. + +### The generative sequence + +For every NPC in the game, the authoring process should be: + +``` +Step 1: ANSWER THE QUESTION + "Is this enough?" + → "Yes, Lera runs her bar and it's enough. She doesn't want more." + +Step 2: DERIVE THE AXES + Want: Keep the bar running, protect the regulars + Secret: Willful ignorance about the ring (cost of "enough") + Contentment: High, but maintained by not-looking + Tolerance: High for people minding their business. Low for people + asking questions that could change her answer. + +Step 3: PLACE IN PATTERNS + Is this THE FRIEND? No — Lera's secret isn't deep enough. + Is this THE MIRROR? No — Lera is actively not-seeing. + Is this THE ANCHOR? Almost — but compromised by ignorance. + Triangle role: Social site authority, information gatekeeper. + +Step 4: WRITE THE VOICE + "I serve drinks. People talk. I don't take notes." + (That's a person who has decided what "enough" means and will + protect that decision with selective blindness.) +``` + +This sequence works at any scale. NPC #1 (Kael) and NPC #300 (a bartender in a frontier district three systems away) both start from the same generative question. The question produces the axes. The axes produce the patterns. The patterns produce the voice. + +### What's authored vs. generated vs. template-expanded + +| Content Type | Authored | Template-Expanded (4x) | Generated (Procedural) | +|---|---|---|---| +| THE FRIEND (Tier 1) | 100% | 0% | 0% | +| THE MIRROR (new pattern) | 100% | 0% | 0% | +| Tier 2 NPCs (triangle members) | 25% (seed lines) | 75% (generation expansion) | 0% | +| Tier 3 NPCs (atmosphere) | 10% (voice hint + function) | 40% (basic pool) | 50% (routine, greeting variations) | +| Environmental text | 30% (authored per district) | 30% (regional variants) | 40% (procedural from cultural brief) | +| Monologue (per character per district) | 50% (FRIEND + key moments) | 30% (expansion) | 20% (ambient observations) | +| District briefs | 100% | 0% | 0% | +| Cultural briefs | 100% | 0% | 0% | + +**The rule: anything that carries emotional weight is authored. Anything that carries atmospheric weight can be expanded. Anything that carries only presence can be generated.** + +### Tooling the pipeline needs + +1. **The Question Prompter.** A tool that takes a district's thematic block (`question`, `cost_of_participation`, `moral_texture`) and prompts the author with: "You're writing an NPC for a district where the cost of participation is [X]. How does this character answer 'Is this enough?'" Forces every NPC to be thematically grounded before the first axis is written. + +2. **The Pattern Matcher.** A tool that reads a completed NPC profile and identifies which patterns the NPC could fill: FRIEND candidate? MIRROR candidate? ANCHOR? The author decides, but the tool flags eligibility. + +3. **The Lens Validator.** A tool that takes every NPC dialogue line and checks: does this line read differently for each PC archetype active in this district? If a line reads identically to the Worker and the Investigator, it's missing the dual-lens (or multi-lens, at scale) resonance. + +4. **The Voice Auditor.** A tool that compares an NPC's voice samples, authored dialogue, and expanded dialogue against the regional cultural brief. Does this person sound like they're from Krenn? Do they use substrate vocabulary? Does their sentence length match the cultural profile? Catches cultural drift in expanded content. + +--- + +## The Settled Reach — What This Game Is + +Let me finish by saying what I think the game is, at full scale, with all the pieces visible. + +The Settled Reach is a game about a civilization that has solved most material problems and is now confronting the problems that abundance creates. When survival is easy, what do you want? When you can live for centuries, what do you commit to? When you can become more than human, what do you lose? When institutions control access to capability, what do you do about it? + +The player enters this civilization through a single character's eyes. They see one district, one community, one set of relationships. They answer "Is this enough?" — first for their character, then for themselves. They move to another district. Another community. Another version of the question. Their answer evolves. Their character evolves. The game doesn't tell them whether their answers are right. It shows them what those answers cost. + +Some players will settle. They'll find a district, build a life, decide that what they have is enough. That's a valid ending. The game respects it. + +Some players will ascend. They'll pursue lattice enhancement, then Higher capability, then something beyond human. They'll gain power and lose connection. They'll look back at the bar where Hael used to wait for Kael and it will be very small and very far away. That's also a valid ending. + +Some players will wander. District after district, system after system, never settling, always asking. They'll collect perspectives the way others collect achievements. They'll know more about the Reach than anyone and belong to none of it. + +And some players will fight. They'll decide the system is wrong — the Commission is corrupt, the Syndics are exploitative, the Assembly is toothless — and they'll try to change it. They'll discover that changing a civilization is harder than leaving one. They'll become either heroes or cautionary tales, depending on who's telling the story. + +The game asks. The player answers. The game shows what the answer costs. That loop, repeated across districts and years and lifetimes, is The Settled Reach. + +The title is a question. Have you settled? Have you reached far enough? Or is there something more? + +Is this enough? diff --git a/docs/workshops/wiki-review/round3-mellanie.md b/docs/workshops/wiki-review/round3-mellanie.md new file mode 100644 index 000000000..129a71f34 --- /dev/null +++ b/docs/workshops/wiki-review/round3-mellanie.md @@ -0,0 +1,354 @@ +# Round 3 Response: Mellanie — Long-Term Content Strategy + +*The writer's perspective on building a game that requires thousands of authored lines across dozens of districts, hundreds of NPCs, and multiple cultural registers.* + +--- + +## 1. Complicity Is Not the Theme. Complicity Is Sova's Theme. + +Gore named it brilliantly for Sova. Every character in the transit district is complicit in something, and the player inherits that complicity. It works because Sova is a tight community built on mutual not-noticing, and the ring is the scar tissue of a system that failed working people. Complicity is the right word for THAT place. + +But if every district in the game asks "what are you complicit in?" the question goes dead by district three. The player learns the formula: walk in, find the community secret everyone's protecting, discover your character is part of it. Complicity becomes a mechanic to solve rather than a question to sit with. + +What scales is the structure UNDERNEATH complicity. Every Settled Reach district should put the player inside a community that has made a collective bargain — an arrangement where the benefits are shared and the costs are hidden. The player inherits a position inside that bargain and then discovers the costs. + +The bargain changes. The moral texture changes. The voice changes. + +**Sova's bargain:** We don't notice the smuggling because the smuggling keeps our people healthy. (Complicity.) + +**A corporate-run mining district's bargain:** We accept the Syndic's terms because the alternative is unemployment for the whole station. (Dependency.) + +**A research outpost's bargain:** We don't report the experiment results because the Veil Institute will shut us down if they know what we've found. (Forbidden knowledge.) + +**A frontier settlement's bargain:** We handle justice ourselves because the Assembly is six weeks away by gate. (Self-governance that slides into tyranny.) + +**A cultural-heritage enclave's bargain:** We preserve our identity by controlling who's allowed in. (Belonging as exclusion.) + +**A gate-hub trading post's bargain:** We don't ask where cargo comes from because asking kills trade. (Willful ignorance on an economic scale.) + +Each of these is a different moral texture that the player explores through the same structural pattern: you're inside a community, you have a role, the community has an arrangement, and you discover what the arrangement costs. The investigation/social mechanics work identically. The monologue voice changes because the CHARACTER changes — different archetype, different community, different complicity. + +From my chair, this matters because **voice is the primary instrument for communicating moral texture.** If the theme is always complicity, every smuggler sounds the same — guilty, protective, conflicted. If the theme varies per district, the smuggler in a mining district sounds DIFFERENT from the smuggler in a transit hub. One is guilty about grey-market medicine. The other is resigned to corporate exploitation. The internal monologue shifts tone, vocabulary, emotional register. That's where the game's thematic range lives — in the character's voice, not in a design document. + +**What I need to make this work:** A one-page "district moral brief" that names the local bargain, the local costs, and the emotional register it produces in each PC archetype. This is the first document I read before writing a single line for a new district. Miri's regional cultural brief gives me the LANGUAGE. The moral brief gives me the FEELING. + +--- + +## 2. Cultural Groups — The Writer's Requirements + +Miri will map the full cultural geography. From my seat, here's what I need and what I worry about. + +### How many distinct cultural registers can one writer maintain? + +Each cultural group changes EVERYTHING I write: +- Environmental text (signs, menus, graffiti, terminals) +- Substrate vocabulary (which heritage words leak through) +- Speech rhythm (Krenn is clipped and consonant-forward; a different culture might be flowing and vowel-rich) +- Social register rules (when do you use surnames? what's rude? what's welcoming?) +- Monologue voice (the PC's internal language absorbs the culture they're embedded in) + +Maintaining consistent voice across a cultural register requires holding the whole brief in my head while writing. Switching between registers mid-session produces contamination — Krenn words leak into a non-Krenn district, or the speech rhythm drifts. This is the real constraint, not the writing itself. + +**Practical limit: 4-6 cultural registers in active production at any time.** I can hold Krenn plus three or four others in working memory. Beyond that, I need to re-read the brief every session, which halves my output speed. + +### What I need per cultural group (minimum) + +| Item | Why | Example (Krenn) | +|------|-----|-----------------| +| 10-15 substrate words with usage context | So NPC and environmental text sounds right | kylm, perk, leib, hüva, selge | +| 5-8 local slang terms | So ring/community talk sounds situated | ticking, quiet credit, shift-end, wall-side | +| Greeting/farewell conventions | First line of every NPC interaction | Chin-lift, first name, no verbal formula | +| Food/drink vocabulary | Bar menus, social scenes, comfort references | Leib, kalaa, supp, kuum, grain spirit | +| Profanity pattern | Stress lines, tells, emotional breaks | Perk (emphatic), gate-rot (frustration) | +| Speech rhythm notes | Sentence length, fragment frequency, formality | Clipped, consonant-heavy, fragments preferred | +| Authority address rules | Detective/institutional interactions | Title+surname = formal/hostile; first name = accepted | +| The shared silence | What nobody says, what the community doesn't discuss | The grey economy exists. Nobody names it. | + +That's 8 items per group. Multiply by 6 groups for the initial game: 48 reference entries I need to keep straight. Doable, but only if each brief is tight, consistent, and maintained as a living document. + +### Cultural diversity as narrative range + +The game needs cultural variety not for representation points but because **cultural register IS gameplay.** The detective's challenge changes when authority-address rules change. A district where formal address means respect (Core system, institutional culture) plays differently from a district where formal address means hostility (Krenn, working-class pragmatism). Same mechanic, different feel. + +For the full game, I'd propose a cultural spectrum: + +| Cluster | Heritage | Speech Feel | Authority Dynamic | +|---------|----------|-------------|-------------------| +| Krenn (delivered) | Nordic-Baltic working-class | Clipped, sparse, substrate words | Formal = outsider/hostile | +| Core system (proposed) | Institutional cosmopolitan | Precise, measured, multi-syllabic | Formal = expected, informal = unprofessional | +| Frontier settlement (proposed) | Mixed-heritage pioneer | Loose, drawling, improvised compounds | Formal = suspicious, everyone's first-name | +| Enclave (proposed) | Preserved single-heritage | Heritage language dominant, Concordat Standard is the second language | Authority depends on whether you're kin | +| Syndic company town (proposed) | Corporate monoculture | Brand vocabulary, managed optimism, euphemism | Authority is corporate hierarchy; outsiders don't rank | +| Gate hub (proposed) | Polyglot trading culture | Code-switching, borrowed words from everywhere, fluid | Authority is purchased; credentials are merchandise | + +Six registers. Each plays differently in the detective's mouth and the smuggler's mouth. Each produces different environmental text. Each changes how THE FRIEND arc FEELS even though the structure is identical. + +The enclave detective isn't investigating a crime. They're an outsider violating a family's privacy. The frontier smuggler isn't part of a ring. They're part of a survival economy. Same mechanics. Different voices. Different guilt. + +--- + +## 3. Content Patterns That Scale vs. Local Specifics + +### Universal patterns (use everywhere) + +**The social site.** Bar, workplace, hidden space — the three-site model is universal because human communities everywhere have public social venues, daily-labor spaces, and places people go to not be seen. The names change. The structure doesn't. + +**The triangle.** Three people with conflicting interests. This is the atom of social drama. Works in any culture, any economy, any moral texture. The specific tensions change per district. The shape doesn't. + +**THE FRIEND.** One NPC who the player trusts, who is hiding something, whose revelation contaminates all prior warmth. Universal emotional pattern. Works because it's not a plot device — it's a human relationship. Every culture has trust. Every culture has betrayal. + +**Dual-lens monologue.** Two characters reading the same world differently. This is the GAME'S identity, not Sova's. It should survive every district, every culture, every moral texture. + +**Environmental text as worldbuilding.** Signs, menus, graffiti, screens. Every district has physical text that communicates culture without exposition. Universal pattern, local content. + +### Patterns that should vary + +**THE FRIEND's contradiction type.** Kael's is spatial (seen in the wrong place). Sera's is behavioral (cumulative avoidance pattern). Other districts should explore: informational contradictions (the FRIEND says something that contradicts known facts), emotional contradictions (the FRIEND's mood doesn't match the situation), or temporal contradictions (the FRIEND's schedule doesn't add up over time). The discovery mechanic should surprise returning players. + +**The community's relationship to institutions.** Sova's Commission is an unwelcome regulator. In a Core system, the Commission might be a trusted employer. In a frontier, there might be no Commission at all. This changes the detective's entire social position — and the smuggler's relationship to law. + +**The social site count.** Three sites works for a compact district. A larger, wealthier district might have five. A frontier outpost might have two. The template should flex to 2-6 social sites without breaking the authoring model. + +**Contraband type and moral framing.** Not every district smuggles lattice components. Some districts smuggle information, cultural artifacts, people, political speech, biological samples. The contraband determines the moral frame, which determines monologue voice. + +**NPC density and tier distribution.** Sova's 30/50/20 split (flat/mundane/entangled) is right for a compact working-class district. A bustling trade hub might be 20/40/40 — more conspiracy density because more transactions create more hiding places. A quiet enclave might be 40/50/10 — mostly life-sim, with a single deep-buried secret. + +### What this means for my authoring model + +The universal patterns give me scaffolding. For any new district, I know I'm writing: +- 2-6 social site environmental text packages +- 3-8 triangle sets with dual-lens monologue coverage +- 1-2 FRIEND arcs with 5-phase contradiction progressions +- Per-location monologue pools for each PC archetype active in that district +- News ticker / information feed content in local editorial voice + +The local specifics mean I'm always doing cultural translation: same structure, different register. The pattern repeats. The voice never does. + +--- + +## 4. Content Directory as Platform — Long-Term Authoring Needs + +From the writer's chair, the content directory needs three things at scale that v0.1 doesn't demand yet: + +### Voice reference indexing + +When I'm writing monologue for a Tier 2 NPC in district #14, I need to check: does this NPC's speech pattern match other NPCs in the same cultural group? Am I accidentally writing Krenn rhythm for a Core system character? + +At 300+ NPCs, I can't hold all voice samples in my head. I need a way to query: "show me all voice samples for cultural-group X, mood Y." This could be a tag on voice sample lines in the NPC YAML: + +```yaml +voice_sample: + - mood: casual + cultural_group: krenn + text: "Shift's looking smooth today." + - mood: stressed + cultural_group: krenn + text: "Just — follow the schedule I posted." +``` + +Then a CLI tool: `make voice-ref --culture krenn --mood stressed` returns all stressed-mood Krenn voice samples. That's my consistency check. Without it, voice drift is inevitable by district #5. + +### Cross-district monologue tracking + +THE FRIEND arc produces monologue lines that reference specific NPCs. At scale, with pool-based FRIEND selection, I need to know: which monologue lines reference which NPC by name? If the randomizer assigns a different FRIEND, which lines need to be in the alternative pool? + +This means monologue lines need a `references` tag: + +```yaml +- id: terminal_m_010 + text: "Kael's already at the dock. Good." + references: [kael_davan] +``` + +At 300+ NPCs and 3000+ monologue lines, I need `make check-references` to flag orphaned references (NPC removed but monologue still names them) and pool-incompatible lines (line references an NPC who isn't FRIEND-eligible in this seed configuration). + +### Template expansion audit trail + +D-028 says: write 10, generate 40. At scale, that's write 3000, generate 12000. When a generated line sounds wrong — wrong register, wrong cultural voice, wrong emotional tone — I need to trace it back to the authored source line and the expansion rule that produced it. This means the generation pipeline needs to tag every expanded line with its source: + +```yaml +- id: bar_d_401 + text: "Evening. Quiet one tonight." + generated_from: bar_d_001 + expansion_rule: mood_variation +``` + +Without this, quality control on 12,000 generated lines is impossible. I'd be hunting for bad lines with no way to find the pattern that produced them. + +--- + +## 5. Randomization and Voice + +Nigel's three axes (FRIEND identity, contraband type, who's compromised) are right for Sova. At full scale, I'd add: + +### The voice axis + +If the player selects an archetype and gets assigned a specific NPC-turned-PC, the PC's voice should vary. Not the structure — the register. D-028 mentions "3 voice options per character: sardonic/anxious/casual for smuggler, clinical/weary/sharp for detective." + +At scale, this is a multiplier. Each PC archetype × each voice option × each district's cultural register = a distinct monologue feel. A sardonic smuggler in Krenn sounds different from a sardonic smuggler in a Core system. The sardonic-ness is the same; the cultural substrate changes. + +This means the monologue pool needs a `voice` tag: + +```yaml +- id: terminal_m_001 + character: smuggler + voice: sardonic + text: "Morning shift. Same air, same lubricant, same people pretending this is fine." + +- id: terminal_m_001b + character: smuggler + voice: anxious + text: "Morning shift. Check the boards. Check the schedule. Check the corridors. Okay. We're fine." + +- id: terminal_m_001c + character: smuggler + voice: casual + text: "Morning shift. Recycled air and cargo lubricant. Home sweet home." +``` + +Three lines for the same trigger, same character, different voice. The randomizer selects which voice profile the PC has. The player gets a character who FEELS distinct even in familiar territory. + +**Content cost:** 3x monologue lines per trigger point. Expensive. But this is where the "write 10, generate 40" model earns its keep. Author the sardonic variant. Generate the anxious and casual variants from it using the voice transformation guide (D-028). Then hand-review. The authored voice is the seed. The generation expands it. + +### The cultural axis + +If the full game spans 6+ cultural groups, and the PC might be from any of them, the monologue needs to reflect cultural origin. A Krenn-raised detective on a Core system station uses `perk` under their breath. A Core-raised detective on Krenn doesn't know why nobody will tell them anything. + +This is a combinatorial explosion if fully authored. My proposal: author the HOME-CULTURE variant (PC is local) at full depth. Generate the OUTSIDER variant (PC is from elsewhere) using cultural-mismatch transformation rules: +- Replace substrate words with Concordat Standard equivalents +- Add confusion/observation monologue where locals use unfamiliar customs +- Shift social-reading monologue from insider interpretation to outsider guessing + +The outsider variant is generated, not authored. But it needs hand-review because cultural-mismatch humor and alienation are tonal — the generation won't get the feel right on the first pass. + +--- + +## 6. PC Archetypes at Full Scale + +The smuggler and detective are v0.1. The full game needs more lenses. + +### How many archetypes? + +From the writer's perspective, each archetype is a complete monologue voice — a way of seeing the world, a vocabulary, an emotional default, a set of things-noticed-first. Each archetype needs: + +- A full monologue pool per district (100-200 lines per district at authored depth, 400-800 after generation) +- A voice card (register, vocabulary, emotional default, cultural fluency) +- A relationship template (how this archetype forms bonds, what triggers trust/suspicion) +- District-specific moral positioning (what's the archetype's relationship to the local bargain?) + +At 2 archetypes, content volume is manageable. At 4, it's substantial but achievable. At 6+, it requires a fundamentally different production model (more generation, less hand-authoring, with heavy editorial review). + +### Proposed archetype spectrum (long-term) + +| Archetype | Lens | What They Notice | Emotional Default | Moral Position | +|-----------|------|-----------------|-------------------|----------------| +| **Smuggler** | Operational | People, risk, routes, loyalty | Protective | Inside the bargain | +| **Detective** | Analytical | Patterns, anomalies, data | Suspicious | Outside the bargain | +| **Fixer** | Transactional | Leverage, debts, favors, prices | Calculating | Profiting from the bargain | +| **Medic/Tech** | Caring | Suffering, need, capability, limitations | Compassionate | Repairing the bargain's damage | +| **Newcomer** | Naive | Everything is new, culture shock, first impressions | Curious/Overwhelmed | Doesn't know the bargain exists | +| **Local Elder** | Historical | What changed, what was lost, who remembers | Nostalgic/Bitter | Remembers when the bargain was made | + +Six is the maximum I'd recommend. Each adds a complete voice layer to every district. The fixer sees every relationship as a transaction. The medic sees every NPC as a patient. The newcomer sees what locals have stopped noticing. The elder sees what the community has forgotten. + +**The newcomer and the elder are the most interesting from a writing perspective.** The newcomer's monologue IS the tutorial — they don't know the culture, the slang, the social rules, so their internal voice explains everything the player needs to learn. The elder's monologue is the deepest worldbuilding — they remember the founding charter, the first gate opening, the strike of '42, the winter when the ventilation failed. Two archetypes, two time horizons, two completely different relationships with the community's bargain. + +But six archetypes × 20 districts × 150 lines per pool = 18,000 authored monologue lines (before generation expansion). That's a multi-year content production effort with dedicated writers per archetype or per cultural group. + +**My recommendation:** Ship with 2 (smuggler + detective). Add 1-2 per major expansion. The architecture should support 6 from day one. The content catches up over time. + +--- + +## 7. The Authoring Pipeline at Scale + +This is the question that keeps me up at night. 300+ NPCs. 20+ districts. 6 cultural groups. Up to 6 PC archetypes. Thousands of environmental text items. Tens of thousands of monologue and dialogue lines. How? + +### The production model + +**Tier 1 content (FRIEND arcs, contradiction beats, anchor lines, key reveals): 100% hand-authored.** No generation. No shortcuts. These are the moments Ozzie's gut-check test measures. Every FRIEND arc, every contradiction discovery monologue, every contaminated-trust line is written by a human who understands the character's emotional state. This is the work that makes players name an NPC they felt conflicted about. + +At scale: ~2-4 FRIEND NPCs per district × 70-100 lines each = 140-400 hand-authored lines per district for Tier 1 content alone. For 20 districts: 2,800-8,000 FRIEND lines. That's substantial but finite. + +**Tier 2 content (working-profile NPCs, triangle dialogue, social texture): Author 25%, generate 75%.** Write the anchor line. Write the voice seed (3-5 lines per mood). Write the dual-lens critical lines. Generate the fill: greetings, small talk, routine observations, mood variations. Hand-review every generated line for voice consistency. + +At scale: ~8-12 Tier 2 NPCs per district × 40-60 lines each (authored seed) = 320-720 authored lines per district, expanding to 1,280-2,880 after generation. For 20 districts: 6,400-14,400 authored, 25,600-57,600 total. + +**Tier 3 content (flat NPCs, social wallpaper): Author 10%, generate 90%.** Write one voice hint. Write the function note. Generate all dialogue from template + cultural register + role slot. Hand-review for egregious voice breaks only. + +At scale: ~5-10 Tier 3 NPCs per district × 10-15 lines each (authored seed) = 50-150 authored lines per district. For 20 districts: 1,000-3,000 authored. + +**Environmental text: Author 100%.** Signs, menus, graffiti, terminals, news tickers — these are worldbuilding in miniature. Every piece is culturally specific. Generation doesn't work here because the whole point is cultural flavor that feels hand-placed. But the volume per district is manageable: 65-90 items (my Round 1 estimate for Sova) × 20 districts = 1,300-1,800 environmental text items total. + +### The math + +| Content Type | Authored per district | Generated per district | Total (20 districts) authored | Total generated | +|---|---|---|---|---| +| Tier 1 (FRIEND) | 140-400 | 0 | 2,800-8,000 | 0 | +| Tier 2 (working) | 320-720 | 960-2,160 | 6,400-14,400 | 19,200-43,200 | +| Tier 3 (flat) | 50-150 | 450-1,350 | 1,000-3,000 | 9,000-27,000 | +| Monologue (per archetype) | 100-200 | 200-600 | 2,000-4,000 | 4,000-12,000 | +| Environmental text | 65-90 | 0 | 1,300-1,800 | 0 | +| **Total** | **675-1,560** | **1,610-4,110** | **13,500-31,200** | **32,200-82,200** | + +**13,500-31,200 hand-authored lines for the full game.** Plus 32,000-82,000 generated lines requiring editorial review. + +That's a large body of work. But it's not unmanageable if the pipeline is right. + +### The pipeline I need + +**Phase 1: Brief intake.** For each new district, I receive: (1) Miri's regional cultural brief, (2) the moral brief (what's the bargain?), (3) Paula's NPC profiles at all tiers. I read these before writing a single line. + +**Phase 2: Anchor-first authoring.** Write the FRIEND content first. All Tier 1 lines, hand-authored. These are the emotional core. Everything else calibrates to them. + +**Phase 3: Voice seeding.** For each Tier 2 NPC, write the anchor line, 3-5 mood seeds, and the dual-lens critical lines. This is the authored 25%. + +**Phase 4: Generation pass.** Feed the voice seeds + cultural brief + tag taxonomy into the generation pipeline. Produce the 75% fill. Tag every generated line with its source. + +**Phase 5: Editorial review.** Read every generated line. Flag voice breaks (wrong register, wrong cultural substrate, wrong emotional tone). Fix or regenerate. This is the quality gate. + +**Phase 6: Environmental text.** Write all signs, menus, graffiti, terminals, tickers for the district. 100% authored. This is the fastest phase because each item is short and the cultural brief provides the voice. + +**Phase 7: Integration test.** Play through the district with both active archetypes. Listen to every monologue trigger. Read every environmental text. Flag anything that breaks voice, contradicts the cultural brief, or feels wrong. Fix. + +### Tooling requirements + +1. **Voice reference CLI.** Query voice samples by cultural group, mood, tier, archetype. Essential for consistency checking at scale. +2. **Prerequisite validator.** Schema check every monologue prerequisite against the FactId catalog and entity attribute registry. I proposed this in Round 1 — at scale, it's non-negotiable. +3. **Generation pipeline with source tracking.** Every generated line carries a `generated_from` + `expansion_rule` tag. Without this, editorial review at 30,000+ generated lines is impossible. +4. **Hot-reload for line pools.** Tyre proposed this. At scale, it's the difference between a 30-second iteration loop and a 5-minute restart-and-navigate loop. Over thousands of lines, that's weeks of saved time. +5. **Cultural contamination linter.** A tool that flags when substrate vocabulary from Culture A appears in a district assigned to Culture B. "You used 'perk' in a Core system district — did you mean to?" Simple regex against the cultural brief's word list. Saves hours of manual checking. +6. **Anchor line registry.** A flat file listing every NPC's anchor line(s) across the whole game. When reviewing a new NPC, check the registry — is this anchor distinct from existing ones? Does it echo another character's emotional beat too closely? At 300+ NPCs, duplicate emotional notes become a real risk. + +### The team structure at scale + +One writer (me) can handle v0.1's content volume. One writer cannot handle the full game. At 20 districts: + +**Option A: Writers per cultural group.** Each writer owns 1-2 cultural registers and writes all content for districts in those cultures. Pros: deep cultural consistency. Cons: writer unavailability blocks entire regions. + +**Option B: Writers per archetype.** Each writer owns 1-2 PC monologue voices and writes all monologue for those archetypes across all districts. Pros: voice consistency per character. Cons: requires cultural-brief fluency across all regions. + +**Option C: Paired authoring.** Cultural specialist (holds the regional voice) + character specialist (holds the archetype voice) collaborate per district. The cultural writer does environmental text and NPC dialogue seeds. The character writer does monologue. Pros: best of both. Cons: coordination overhead. + +I'd recommend **Option C for Tier 1 content** (where voice quality is non-negotiable) and **Option A for Tier 2/3** (where cultural consistency matters more than individual character depth). + +--- + +## Summary + +The long-term content strategy is: + +1. **Theme varies per district, structure is universal.** Complicity is Sova. Other districts explore dependency, forbidden knowledge, self-governance, belonging-as-exclusion, willful ignorance. The bargain changes. The discovery pattern doesn't. + +2. **6 cultural registers maximum in active production.** Each needs a tight brief with substrate vocabulary, speech rhythm, authority dynamics, and the community's shared silence. + +3. **Universal patterns: social sites, triangles, THE FRIEND, dual-lens monologue, environmental text as worldbuilding.** Variable patterns: contradiction type, institutional relationship, site count, contraband type, NPC density. + +4. **The content directory needs voice reference indexing, cross-district reference tracking, and generation audit trails** to support 300+ NPCs across 20+ districts. + +5. **Randomization adds a voice axis (sardonic/anxious/casual per archetype) and a cultural-origin axis (local vs. outsider) beyond Nigel's three.** The voice axis is a content multiplier. The cultural axis is a generation target. + +6. **Ship with 2 archetypes. Architect for 6.** Smuggler, detective, fixer, medic, newcomer, elder. The newcomer's monologue IS the tutorial. The elder's monologue IS the deepest worldbuilding. + +7. **13,500-31,200 hand-authored lines for the full game. 32,000-82,000 generated lines requiring editorial review.** The pipeline is: brief intake → anchor-first authoring → voice seeding → generation → editorial review → environmental text → integration test. At scale, this requires paired authoring teams (cultural specialist + character specialist) and five specific tooling investments. + +The game's content ambition is achievable. The constraint isn't writing speed — it's voice consistency at scale. Every tool, every process, every team structure decision should optimize for one thing: does this district sound like THIS place, inhabited by THESE people, seen through THIS character's eyes? If yes, we're building the right game. If the districts blur together, we've failed regardless of volume. diff --git a/docs/workshops/wiki-review/round3-miri.md b/docs/workshops/wiki-review/round3-miri.md new file mode 100644 index 000000000..2d1eae031 --- /dev/null +++ b/docs/workshops/wiki-review/round3-miri.md @@ -0,0 +1,551 @@ +# Workshop Round 3 — Miri (Worldbuilder / Setting Designer) + +**Long-term content strategy from the worldbuilding perspective.** + +Thinking big. Not scoping to v0.1. Not proposing tickets. + +--- + +## 1. Is Complicity the Right Theme for the Whole Game? + +Gore's framing is exactly right for Sova. Everyone is complicit. The culture protects the ring. The detective tears the social fabric. The smuggler maintains it. The question "Is this enough?" resonates because Sova Transit District is a place where the answer is *almost* yes. + +But complicity is not the theme of the *whole* game. It is one expression of the theme of the whole game. + +### The actual theme is: **What do systems do to the people inside them?** + +Complicity is what happens when a system fails quietly and people adapt around the failure. Sova's ring exists because the Commission's lattice regulation prices people out of upgrades. The community's response is rational, humane, and illegal. Everyone is complicit because the alternative — compliance — would mean watching neighbors suffer. That's complicity born from a system that's broken in a specific way: it provides order but not justice. + +Other regions of the Settled Reach would have systems that are broken in different ways. And the human responses would be different: + +| System Failure Mode | Human Response | Theme Flavor | Example Region | +|---|---|---|---| +| Regulation without justice (Krenn) | Quiet grey economy, cultural immune system | **Complicity** — knowing and not acting | Working-class logistics hub | +| Abundance without meaning | Existential drift, voluntary risk-seeking | **Ennui** — having everything and wanting nothing | Wealthy core world | +| Scarcity without solidarity | Exploitation, predatory hierarchies | **Desperation** — doing terrible things to survive | Frontier mining colony | +| Order without accountability | Institutional corruption, bureaucratic cruelty | **Rot** — the system works perfectly and destroys people | Administrative capital | +| Freedom without structure | Factional chaos, charismatic predators | **Anarchy** — liberty that devours itself | Autonomous settlement | +| Knowledge without wisdom | Reckless experimentation, unintended consequences | **Hubris** — the smartest people in the room making the worst decisions | Research station | + +Each of these is a version of "What do systems do to the people inside them?" Each creates a different investigation texture, a different moral calculus, a different reason the player feels conflicted about their NPC. + +**Complicity is the Krenn flavor.** It's the best possible starting flavor because it's the most subtle — the system isn't visibly cruel, the people aren't visibly suffering, and the illegality is morally defensible. That subtlety forces the player to engage with genuine ambiguity rather than simple moral judgment. + +But the game becomes richer as it adds regions where the moral texture is different. A detective investigating institutional corruption on an administrative world faces a different question: the system IS the crime, and dismantling it might be worse than tolerating it. A smuggler on a frontier colony isn't moving healthcare — they're moving survival supplies, and the moral calculus is starker. + +### What this means for worldbuilding + +Each regional brief needs a **Thematic Texture** section that identifies: +1. What is the system failure in this region? +2. What is the community's adaptation? +3. What is the moral question the player faces? +4. How does Gore's "Is this enough?" land differently here? + +The regional style guide template from Round 1 should add this as Section 0 — before Heritage Profile. It's the first thing writers need to know because it colors everything else. + +### IP originality note + +This thematic structure is not derived from any single SF franchise. Hamilton's Commonwealth explores post-scarcity choice but doesn't systematically map moral textures to regions. Banks's Culture explores systemic failure at the edges but the Culture itself is presented as broadly successful. What we're building is closer to Le Guin's approach in *The Dispossessed* — each society is an experiment in human organization, and the game lets you experience them from inside. + +--- + +## 2. The Full Cultural Map of the Settled Reach + +This is squarely my domain. Let me think about what the Settled Reach looks like at full scale — not specific names and places (too early), but the *shape* of the cultural landscape and the design principles that govern it. + +### Design principles for cultural diversity + +**Principle 1: Heritage clusters, not nations.** No region in the Settled Reach is "the French system" or "the Japanese system." Every settlement was founded by a coalition of heritage groups that blended over 50-300 years. The Krenn System isn't Finnish — it's a Nordic-Baltic blend with Dutch-Norwegian commercial influence, 180 years drifted. This blending is what makes each region feel original rather than Earth-transplanted. + +**Principle 2: Settlement motivation shapes culture more than heritage.** Two regions founded by similar heritage groups but for different reasons (one economic, one ideological) will feel more different from each other than two regions founded by different heritage groups for the same reason. Krenn was an economic venture — logistics hub. A system founded by religious separatists from the same Nordic heritage pool would feel radically different despite sharing naming phonetics. + +**Principle 3: Age matters.** Early-settled systems (300+ years) have deeper drift, more blending, and weaker heritage connections. Recently settled systems (50-100 years) still have living memory of founding cultures. This creates a natural gradient from "cosmopolitan old-core" to "distinctly heritage frontier." + +**Principle 4: Economic function determines social structure.** A mining colony, a research station, a commercial hub, an agricultural world, and a military installation each produce different class structures, different attitudes toward authority, and different daily rhythms. These functional differences are more load-bearing for gameplay than cultural heritage differences. + +**Principle 5: Every region must serve a gameplay purpose.** Cultural diversity isn't decoration — it creates mechanical variety. Different cultural norms toward authority create different investigation difficulties. Different social structures create different triangle types. Different economic pressures create different contraband needs. If a region doesn't create a mechanically distinct experience, it doesn't need to exist. + +### Proposed cultural map (conceptual, not named) + +For a full-scale game, I'd propose **8-10 major cultural regions**, organized not by Earth-heritage similarity but by the gameplay texture they create: + +#### Tier A: Core Regions (old, wealthy, politically significant) + +**1. The Administrative Heart** — Founded by Western European / East Asian bureaucratic traditions. 250+ years old. The seat of Concord Assembly politics. Heritage: blended to near-unrecognizable — "cosmopolitan Reach Standard" IS the culture. Investigation texture: institutional corruption, paper trails, polite lies. The mind-your-business ethos here isn't cultural silence (Krenn) — it's professional discretion. Everyone knows everything and says nothing because careers depend on strategic ignorance. Access tier challenge: authority access is easy (institutional credentials work), insider access is almost impossible (real trust requires decades of shared institutional history). + +**2. The Old Money World** — Founded by North American / Northern European corporate dynasties. 200+ years old. Wealth so embedded it's invisible. Heritage: deliberately maintained as aesthetic — they have art, cuisine, architecture, all meticulously curated, but it's performance, not living culture. Investigation texture: the mystery isn't what people are hiding, it's what they've normalized. Crimes aren't secrets — they're traditions. Thematic texture: ennui. Access tier challenge: peer access requires wealth display (the detective's institutional salary is comically insufficient); insider access requires family connections or blackmail. + +#### Tier B: Working Regions (established, functional, the economic backbone) + +**3. The Logistics Nexus (Krenn System)** — Already established. Nordic-Baltic heritage, 180 years, freight culture. Investigation texture: cultural silence, quiet grey economy. Complicity. + +**4. The Industrial Belt** — Founded by Slavic / Central European mining and manufacturing traditions. 150 years old. Multiple stations orbiting a resource-rich gas giant. Heritage: stronger than Krenn because the work is harder and the solidarity is fiercer. Investigation texture: labor politics, union-like structures, the ring equivalent is a cooperative, not a conspiracy. Workers don't mind their own business — they mind EACH OTHER'S business, which means the detective faces a wall of coordinated resistance, not individual silence. Access tier challenge: peer access requires demonstrating you work with your hands. The culture despises desk workers and institutional inspectors equally. + +**5. The Agricultural World** — Founded by South Asian / Sub-Saharan African agrarian traditions. 170 years old. One of the few systems with meaningful planetary surface living. Heritage: strong food culture, extended family structures, seasonal rhythms alien to station life. Investigation texture: generational grudges, land disputes, family honor, the conspiracy is embedded in clan structures rather than workplace structures. The smuggling here isn't lattice components — it's genetic material, seed stock, agricultural patents. Access tier challenge: family connections are everything. An outsider without a local family sponsor is a ghost. + +#### Tier C: Frontier Regions (young, rough, unsettled social contracts) + +**6. The Frontier Station** — Founded by mixed-heritage economic migrants, 60-80 years old. Culture is still crystallizing — no dominant heritage, no established norms, everything is negotiated daily. Investigation texture: chaotic, everyone is suspicious of everyone, alliances shift weekly. The ring equivalent isn't organized crime — it's the baseline economy. Legitimate trade and smuggling aren't meaningfully distinct because regulation hasn't caught up. Access tier challenge: there IS no authority tier — nobody recognizes institutional authority. The detective must earn every shred of credibility through personal reputation. + +**7. The Research Outpost** — Founded by academic / scientific communities from diverse global traditions. 40-90 years old. Small population, high lattice tiers, intellectual culture that values ideas over social bonds. Heritage: deliberately cosmopolitan (the founders self-selected for education, not ethnic identity). Investigation texture: intellectual arrogance, dangerous experiments, the conspiracy is ideological rather than economic. They're not smuggling components — they're conducting illegal research. Access tier challenge: peer access requires demonstrating competence. The culture respects expertise and despises authority that can't justify itself intellectually. + +#### Tier D: Edge Cases (unique situations that create unique gameplay) + +**8. The Autonomous Zone** — A system that rejected Concord Assembly governance. Founded by political separatists, heritage varies. 100-150 years old. Self-governing, factionally fragmented. Investigation texture: factional chess, every NPC has political allegiance, neutrality is suspicious. The ring equivalent is a political movement, not an economic operation. Access tier challenge: faction affiliation determines EVERYTHING. The detective's Commission credentials are actively dangerous here — they mark you as an enemy. + +**9. The Gate Junction** — A transit hub where multiple wormhole routes converge. No founding culture — built by the Assembly as infrastructure, populated by everyone passing through. Heritage: none dominant, all present. Investigation texture: transient population, nobody stays long enough to build trust, the conspiracy exploits the anonymity. Access tier challenge: the peer tier barely exists — nobody knows each other well enough. Investigation works through pattern recognition (who keeps showing up?) rather than social integration. + +**10. The Heritage Preserve** — A system where the founding culture was deliberately, aggressively maintained. Single-heritage community (could be from any Earth tradition) that rejected blending as cultural death. 150+ years old. Investigation texture: conformity pressure, anyone who deviates is suspect, the conspiracy is hidden in plain sight because it operates through culturally sanctioned channels. Access tier challenge: the culture is genuinely welcoming to outsiders... as guests. Never as participants. The detective is entertained, fed, shown around, and told nothing of substance while being made to feel included. + +### How many is enough? + +For a full game: **8-10 regions** provides enough diversity that every playthrough in a new region feels mechanically distinct. But the game doesn't need all 10 at launch beyond v0.1. The scaling path is: + +- **v0.1:** 1 region (Krenn). Proves the template. +- **v0.2:** 2-3 regions. Proves cultural diversity creates gameplay diversity. +- **v1.0:** 5-6 regions. Full game with meaningful variety. +- **Post-launch / DLC / mods:** 8-10+ regions. The template system means modders can add regions following the style guide. + +### Cultural group relationships + +Regions don't exist in isolation. The Settled Reach has inter-regional dynamics that create larger-scale narrative: + +- **Economic dependency:** Frontier regions depend on logistics hubs (Krenn) for supplies. Agricultural worlds feed everyone. Research outposts depend on institutional funding. These dependencies create inter-regional smuggling routes and political leverage. +- **Cultural friction:** Heritage Preserves resent cosmopolitan core worlds. Frontier systems resent regulation from distant administrators. Industrial belt workers resent the wealth of old-money worlds. These frictions are the macro-political landscape that Gore and Paula should map. +- **Migration patterns:** People move between regions, carrying cultural expectations. A Krenn worker who transfers to a frontier station brings the mind-your-business norm to a place where everyone is in everyone's business. Cultural collision is a character generator. +- **Gate network topology:** The wormhole network determines which regions are neighbors, which are isolated, and which are chokepoints. This is load-bearing for both economics and investigation. A detective who needs to reach a frontier system may have to pass through a hostile autonomous zone. The travel itself becomes gameplay. + +--- + +## 3. Which Sova Patterns Are Universal vs. Local? + +This is critical for scaling. Everything we've built for Sova Transit District needs to be sorted into "template" and "instance." + +### Universal (the template system) + +These patterns work in ANY region, and the regional brief provides the local flavor: + +| Pattern | Why Universal | What the Regional Brief Customizes | +|---|---|---| +| **Social site template** (D-025) | Every region has places where people gather, work, and socialize | The *type* of gathering (bar vs. teahouse vs. market square vs. research lab common room), the social norms within it | +| **Triangle model** (D-024) | Conflicting interests exist in every community | The *nature* of conflicts (Krenn: quiet, structural; Industrial Belt: loud, political; Old Money: polite, lethal) | +| **Access tier system** (D-028) | Every culture has insider/outsider dynamics | The *difficulty gradient* and *what earns each tier* (Krenn: time; Agricultural: family; Frontier: reputation; Research: competence) | +| **THE FRIEND pattern** (D-034) | Every playthrough needs an emotional anchor | The *character type* who becomes THE FRIEND (Krenn: coworker; Agricultural: cousin; Research: mentor) | +| **Tell system** | People reveal themselves through behavior in every culture | The *cultural baseline* against which deviation is measured (Krenn: stoic silence is normal, so animation is a tell; Industrial Belt: loud solidarity is normal, so withdrawal is a tell) | +| **Routine model** | People everywhere have daily rhythms | The *rhythm itself* (shift-based vs. seasonal vs. academic vs. chaotic) | +| **Contraband model** (D-037) | Every community has something the system denies them | The *specific thing* and its moral weight (lattice components vs. seeds vs. research data vs. weapons) | +| **PC-as-NPC** | Works with any NPC profile that meets archetype requirements | The *archetype pool* available in each region | +| **Three-tier content model** (D-023) | Tier 1/2/3 depth distribution works everywhere | The *content* at each tier is completely local | +| **30/50/20 entanglement ratio** (D-029) | Investigation needs noise to make signal meaningful everywhere | The *nature* of mundane noise (Krenn: neighbor disputes; Agricultural: inheritance arguments; Frontier: business competition) | + +### Local to Krenn (content, not template) + +These are Sova-specific instances, NOT patterns to replicate: + +| Element | Why Local | What Transfers as Template | +|---|---|---| +| Lattice component smuggling | Specific contraband choice | "Each region has a primary contraband type with moral ambiguity" | +| Nordic-Baltic cultural markers | Specific heritage cluster | "Each region has a heritage cluster defined by the regional brief" | +| Shift-based work rhythms | Specific economic function | "Each region has rhythms defined by its economic function" | +| Mind-your-business ethos | Specific cultural norm | "Each region has a default stance toward authority defined in the brief" | +| Kuum, leib, supp | Specific food culture | "Each region has distinctive food/drink that serves as social shibboleth" | +| Hard-naming as social signal | Specific naming convention | "Each region has a name-register system defined by the brief" | +| The ring's cooperative structure | Specific criminal organization type | "Each region has a grey economy organized in culturally appropriate ways" | +| Corridor B-7 dead drops | Specific smuggling infrastructure | "Each region has smuggling infrastructure shaped by the physical environment" | + +### The key insight + +**The template system IS the game. The regional brief is the content.** + +Every mechanical system we've designed for Sova (triangles, access tiers, tells, routines, dialogue tags, monologue pools, contraband types, FRIEND arcs) is a universal template. The regional brief provides the parameters that make each instantiation feel culturally distinct. + +This means: **when we design a new system for Sova, we should immediately ask "does this template, or is this Sova-specific?"** If it templates, it's a platform investment. If it doesn't, it's content and we should be clear about that. + +--- + +## 4. Content Directory as Long-Term Platform + +Gestalt's content directory structure from Round 1 is the right architecture. Let me extend it for multi-region scaling. + +### The scaling challenge + +At full scale, the content directory serves: +- **8-10 regions**, each with 2-5 districts +- **20-50 social site templates** across all regions +- **300+ NPCs** across all tiers +- **40+ triangles** across all districts +- **8-10 contraband types** across all regions +- **6-8 PC archetypes** across all regions +- **Multiple storylines/Tier 1 modules** per region + +### What the directory needs to support + +**1. Regional isolation.** A content author working on the Industrial Belt should never need to read Krenn files. Each region is self-contained except for cross-references to global definitions. + +**2. Global schema stability.** The tag taxonomy, FactId vocabulary, relationship state machine, and access tier definitions are global. Changing them affects every region. These must be versioned and changes must be backwards-compatible. + +**3. Cross-regional content.** Some NPCs travel between regions. Some conspiracies span multiple systems. Some factions have local presence in every region. The directory must support cross-references without creating dependency chains. + +**4. Mod isolation.** A mod that adds a new region should not need to modify any base game files. A mod that modifies an existing region should declare exactly what it changes. + +**5. Regional briefs as content gating.** No district, NPC, or dialogue should exist without a regional brief in the parent directory. The brief IS the specification that validates all child content. + +### Extended directory structure + +``` +content/ + _global/ + schema/ # Engine schema (versioned, stable) + factions/ # Faction definitions (global identity) + technology/ # Tech descriptions (universal) + contraband-types/ # Contraband type definitions (not instances) + archetypes/ # PC archetype definitions + smuggler.yaml + detective.yaml + [future: marshal.yaml, journalist.yaml, etc.] + themes/ # Thematic texture definitions + complicity.yaml # Moral framework template + ennui.yaml + desperation.yaml + rot.yaml + anarchy.yaml + hubris.yaml + + regions/ + krenn-system/ + brief.yaml # Regional style guide (GATING DOCUMENT) + sova-transit/ + district.yaml + npcs/ + triangles/ + locations/ + facts/ + dialogue/ + monologue/ + factions.yaml # Local faction presence + [future: krenn-prime-surface/] + [future: orbital-3/] + + [future: industrial-belt/] + brief.yaml + [districts...] + + [future: research-outpost/] + brief.yaml + [districts...] +``` + +### The brief.yaml as gating document + +The regional brief IS the content API. It defines: + +```yaml +# brief.yaml for any region +region_id: krenn-system +heritage_cluster: [finnish, estonian, latvian, dutch, norwegian] +settlement_age_years: 180 +settlement_motivation: economic +thematic_texture: complicity +system_failure: "regulation without justice" +community_adaptation: "quiet grey economy" +moral_question: "Is participation in an unjust system consent to its injustice?" + +naming: + phonetic_signature: "compact, consonant-forward, 1-2 syllables" + first_name_pool: [kael, sera, voss, lera, torek, ...] + surname_pool: [davan, venn, sessik, lintar, korr, ...] + surname_endings: [-an, -en, -ik, -ar, -ev, -mm, -sk] + +language: + substrate_words: {perk: "emphatic expletive", kylm: "cold/uncomfortable", ...} + slang: {shift-end: "going to bar after work", quiet-credit: "ring income", ...} + profanity_pattern: "short, percussive, heritage-derived" + +social_norms: + authority_default: "polite distance, cooperation without volunteering" + trust_building: "shared labor over time, no shortcuts" + privacy_level: high + solidarity_type: "informal, unspoken, labor-based" + peer_time_estimate: "3+ months" + insider_requirements: "vouching + demonstrated shared risk" + +access_tier_profile: + public: "ventilation complaints, sport, shift gossip" + peer: "mild workplace opinions, NPC observations" + insider: "income sources, ring knowledge, personal troubles" + authority: "formal, minimal, technically true, maximally unhelpful" + hostile: "withdrawal, hard-naming, social exile" + +aesthetics: + color_palette: [industrial-white, warm-amber, emergency-red, cool-gray] + food_culture: [leib, kalaa, supp, kuum, grain-spirit, station-ale] + dress: "standard-issue coveralls, muted off-duty, visible wealth suspicious" + music: "minimal, ambient, card-game culture dominant" + +contraband: + primary: lattice-components + secondary: [medical-grade, severance-tech] + moral_frame: "access to capability denied by regulation" + grey_economy_type: cooperative-ring + +archetypes_supported: [smuggler, detective] +``` + +This YAML brief is both human-readable documentation and machine-readable generation parameters. When the NPC generation system needs to create a Krenn NPC, it reads the naming pools, phonetic rules, and social norm parameters. When a content author needs to write Krenn dialogue, they reference the substrate vocabulary and access tier profile. When the randomizer selects a contraband type, it reads the regional contraband definition. + +**The brief is the API between worldbuilding and implementation.** + +--- + +## 5. Randomization Philosophy at Scale + +Nigel's three randomization axes (FRIEND identity, contraband type, network roles) are correct for Sova. At full game scale, there are additional axes that emerge from cultural diversity. + +### The randomization hierarchy + +Not all axes are equal. Some are load-bearing structural choices that define the entire playthrough. Others are contextual variation that creates texture. The randomizer should distinguish: + +**Structural randomization (set at game start, defines the playthrough):** + +| Axis | What It Determines | Scale | +|---|---|---| +| **Region** | Cultural context, moral texture, investigation feel | 8-10 options at full game | +| **District** | Physical space, social sites, NPC roster | 2-5 per region | +| **PC archetype** | What you can do, how NPCs see you, your moral position | 2-4 per region, some universal | +| **PC identity** (NPC selection) | Name, relationships, starting knowledge, routine | 3-6 eligible NPCs per archetype per district | +| **FRIEND identity** | Emotional core, contradiction type, tell system | 2-4 eligible per archetype per district | +| **Primary conspiracy** (Tier 1 module) | What the intrigue IS about | 2-3 per region, drawn from pool | +| **Contraband type** | Moral texture of the grey economy | 1-3 per region | + +**Contextual randomization (varies within the structural frame):** + +| Axis | What It Determines | +|---|---| +| **Network roles** (who is compromised, who is wavering) | Which NPCs fill which conspiracy roles | +| **Evidence placement** (dead drop locations, timing windows) | Spatial investigation puzzle | +| **Mundane triangle specifics** (what the noise-floor arguments are about) | Red herring texture | +| **Entanglement rate** (D-029, varies per seed) | How much conspiracy is in the air | +| **Environmental variation** (news ticker content, bar specials, shift schedules) | Atmospheric texture | +| **NPC pool population** (which Tier 3 NPCs appear this seed) | Social wallpaper variation | + +### The cultural diversity axis + +This is the new randomization axis that only exists at multi-region scale: + +**Cultural context changes HOW investigation works, not just WHAT you investigate.** + +- In Krenn, investigation means waiting, listening, earning trust through silent presence. The gameplay is patience-based. +- In the Industrial Belt, investigation means navigating organized collective resistance. The gameplay is political — you need allies to crack the wall. +- In the Frontier Station, investigation means dealing with chaos. Nobody's covering for anyone; they're all too busy covering for themselves. The gameplay is pattern-finding in noise. +- In the Old Money World, investigation means decoding social performance. Everyone is polite and nobody means a word they say. The gameplay is reading subtext. +- In the Research Outpost, investigation means proving you're smart enough to be told the truth. The gameplay is competence-display. + +**This is the deepest replayability.** Different seeds within Krenn give you different NPCs, different FRIENDs, different contraband. But a different REGION gives you a fundamentally different game. The detective who learned patience in Krenn must learn political navigation in the Industrial Belt. The skills (player skills, not character skills) that worked in one region may fail in another. + +### Randomization and the storyteller + +The storyteller (D-005, Q-010) should understand cultural context. In Krenn, the storyteller knows that trust accrues slowly and should pace revelations accordingly — the first 30 minutes should feel quiet. In the Frontier Station, the storyteller knows that chaos is the norm and should introduce complications faster. The regional brief's parameters inform the storyteller's pacing model. + +This means: **the storyteller is culturally literate.** It reads the regional brief and adjusts its behavior accordingly. This is an architectural requirement that should be established early, even if the storyteller itself is designed later. + +--- + +## 6. PC-as-NPC at Full Scale: How Many Archetypes? + +### The archetype concept + +An archetype is not a class. It's a **relationship to the world's systems.** The smuggler's relationship is embedded participation. The detective's relationship is institutional investigation. Each archetype sees the same world through a fundamentally different lens. + +### Sova's two archetypes are the universal pair + +Smuggler and detective are not Sova-specific — they're the game's core duality: + +- **The Insider** (smuggler archetype): Someone embedded in the community, part of the grey economy, with social access and operational knowledge. Their challenge is maintaining cover while the investigation closes in. +- **The Outsider** (detective archetype): Someone with institutional authority but no social trust, investigating from the outside, building knowledge from observation and deduction. + +These two perspectives are the minimum for any region. They create the adversarial lens that makes replayability work (D-027). Every district needs at least one insider and one outsider PC candidate. + +### Region-specific archetypes + +Beyond the universal pair, each region could support 1-2 additional archetypes that are grounded in the region's specific social structure: + +| Region | Universal | Region-Specific | Why It Works | +|---|---|---|---| +| **Krenn (Logistics)** | Smuggler, Detective | — | The universal pair is sufficient here. Logistics culture is clean enough that two perspectives cover the space. | +| **Industrial Belt** | Smuggler, Detective | **Union Rep** | Someone whose job is to navigate labor-management tensions. Insider access to workers, institutional access to management. Sees the conspiracy as a labor issue, not a criminal one. A third lens: solidarity. | +| **Agricultural World** | Smuggler, Detective | **Family Member** | Someone embedded in the clan structure who isn't directly involved in the conspiracy but whose family is. Insider access through blood, outsider perspective through personal morality. A third lens: loyalty. | +| **Frontier Station** | Smuggler, Detective | **Fixer** | Someone who solves problems for everyone — legal or otherwise. Access to both sides but trusted by neither. A third lens: pragmatism. | +| **Research Outpost** | Smuggler, Detective | **Researcher** | Someone embedded in the academic culture who discovers their colleagues' experiment is illegal/dangerous. Insider by competence, outsider by conscience. A third lens: knowledge. | +| **Administrative World** | Smuggler, Detective | **Bureaucrat** | Someone inside the institution who discovers it's corrupt. Institutional access that becomes a liability. A third lens: reform. | +| **Autonomous Zone** | Smuggler, Detective | **Faction Agent** | Someone working for one of the competing power groups. Access defined by faction allegiance, not personal relationships. A third lens: ideology. | + +### Archetype count at full scale + +- **v0.1:** 2 archetypes (smuggler, detective). Universal pair. +- **v0.2-v0.3:** Still 2. Prove the universal pair works in 2-3 regions before adding complexity. +- **v1.0:** 4-6 total. The universal pair plus 2-4 region-specific archetypes. Not every region needs a unique archetype — some share archetypes (the Fixer works in multiple frontier settings). +- **Post-launch:** More archetypes via DLC/mods. The archetype template (defined in `content/_global/archetypes/`) means modders can create new perspectives. + +### What defines an archetype (authoring requirements) + +Each archetype needs: +1. **Relationship to systems** — how they interact with institutions, communities, and grey economies +2. **Starting access tier map** — which NPCs treat them as insider/peer/authority/outsider by default +3. **Monologue voice** — completely separate pool (D-032 hard partition) +4. **Investigation/engagement style** — what tools and approaches are available (detective deduces, smuggler navigates, union rep negotiates, family member invokes obligation) +5. **Moral position** — what question does this archetype force the player to answer? +6. **Archetype-eligible NPC requirements** — what traits an NPC needs to be upgraded to this PC type + +The content cost per archetype is significant: a full monologue pool (separate from all other archetypes), orientation content, starting knowledge specifications, and agency boundaries. This is why new archetypes should be added slowly and only when they create a genuinely distinct play experience. + +### The "second playthrough as the same archetype" problem + +Two playthroughs as the smuggler in the same district should still feel different because of seed variation (different FRIEND, different contraband, different network). But two playthroughs as the smuggler in DIFFERENT DISTRICTS should feel profoundly different because the cultural context changes what "being an insider" means. + +In Krenn, the smuggler is protected by cultural silence. In the Industrial Belt, the smuggler is protected by collective action. In the Frontier Station, the smuggler is protected by chaos. Same archetype, different survival strategy, different moral texture. + +--- + +## 7. Authoring Pipeline at Scale (300+ NPCs) + +### The problem + +At full scale, the game needs: +- ~30-40 NPCs per district (Sova has 17, but this is a small district) +- 2-5 districts per region +- 8-10 regions +- Total: 500-2000 NPCs across all tiers + +Hand-authoring all of them at even Tier 3 depth is prohibitive. But the quality bar established by Sova (every NPC has a name that SOUNDS RIGHT, a routine that MAKES SENSE, and a cultural context that FEELS AUTHENTIC) must be maintained. + +### The pipeline (from worldbuilding perspective) + +The authoring pipeline has four stages, and the regional brief gates every transition: + +``` +Stage 1: WORLDBUILDING (Miri) + Input: Region concept (thematic texture, economic function, settlement era) + Output: Regional brief (full style guide, all parameters) + Quality gate: Brief must be approved before any content creation + Time: 1-2 sessions per region + +Stage 2: TEMPLATE DESIGN (Gestalt + Paula) + Input: Regional brief + social site templates + Output: District definition (site list, triangle structure, role slots) + Quality gate: Template must exercise at least 3 triangles, 2 social sites + Time: 1 session per district + +Stage 3: AUTHORED CORE (Mellanie + Paula) + Input: District definition + regional brief + Output: Tier 1 NPCs (2-3 per district), Tier 2 NPCs (5-8 per district) + Quality gate: All authored content must pass regional brief voice check + Time: 2-4 sessions per district, parallelizable + +Stage 4: GENERATED FILL (Procedural + Review) + Input: Regional brief parameters + Tier 2 examples + role slot requirements + Output: Tier 3 NPCs (15-25 per district), generated dialogue + Quality gate: Names must match phonetic rules, routines must match + economic function, voice must match brief personality parameters + Time: Automated generation + 1 review session +``` + +### What the regional brief enables at scale + +**Naming generation.** The brief defines phonetic rules, heritage pools, and example names. A generation system (LLM-based or rule-based — Q-012 applies here) can produce names that "sound right" for any region by following the brief's parameters. An author reviewing generated names just needs to check: "Does this sound Krenn?" If the brief is good, the answer is obvious. + +**Routine generation.** The brief defines economic rhythms (shift-based, seasonal, academic, chaotic). Routines are generated from the region's time structure. A Krenn NPC works shifts. An Agricultural NPC follows planting/harvest cycles. A Frontier NPC has irregular hours because nothing is stable. The brief provides the parameters. + +**Dialogue generation.** The brief defines substrate vocabulary, slang, profanity patterns, greeting conventions, and access tier cultural profiles. The 4x generation expansion (Q-012) uses these parameters to produce lines that sound culturally appropriate. "Hüva, let's go" is a Krenn line. The generation system knows this because the brief lists "hüva" as a casual affirmative. + +**Voice validation.** The brief provides a voice check: "Does this line sound like it comes from this culture?" A Krenn character doesn't say elaborate, flowery sentences. A Research Outpost character doesn't say "perk." The brief is the validation rubric. + +### The scaling math + +With the regional brief as the gating document: + +| Content Type | Per District | Authored | Generated | Brief Dependency | +|---|---|---|---|---| +| Tier 1 NPCs | 2-3 | 100% hand-authored | 0% | Brief provides voice/naming reference | +| Tier 2 NPCs | 5-8 | 100% hand-authored (but faster with brief as reference) | 0% | Brief provides all cultural parameters | +| Tier 3 NPCs | 15-25 | 20% (review/correction) | 80% (name, routine, basic personality) | Brief provides generation rules | +| Dialogue (Tier 1-2) | ~200-300 lines | 100% hand-authored | 0% | Brief provides voice reference | +| Dialogue (expansion) | ~800-1200 lines | 25% (seed lines) | 75% (4x expansion) | Brief provides vocabulary/slang | +| Monologue | ~100-150 per character | 100% hand-authored | 0% | Brief provides cultural baseline | +| Environmental text | ~30-50 pieces | 50% hand-authored | 50% generated from templates | Brief provides register/vocabulary | + +For a full district: ~40 NPCs, ~1500 dialogue lines, ~150 monologue lines per character, ~40 environmental text pieces. Of this: +- **Hand-authored:** ~15 NPC profiles, ~500 dialogue lines, ~150 monologue lines, ~20 environmental pieces +- **Generated + reviewed:** ~25 NPC profiles, ~1000 dialogue lines, ~20 environmental pieces + +The brief reduces generation from "create from nothing" to "instantiate from parameters." That's the difference between a 10-session and a 3-session district buildout. + +### The Lore Librarian pattern at scale + +Per CLAUDE.md's "large content pushes" pattern, the authoring pipeline at scale uses: + +1. **Lore librarian** (read-only agent): Holds ALL regional briefs, checks cross-regional consistency, catches naming collisions, verifies cultural parameters. At full scale, this agent is the guardian of the entire cultural map. + +2. **Regional writers** (parallel, one per region): Each writer has their region's brief and writes only within that region. They never need to coordinate with writers in other regions because the briefs are self-contained. + +3. **Cross-regional reviewer** (post-writing): Catches inconsistencies where regions interact (NPCs who travel, factions with multi-regional presence, shared news ticker items). + +This pattern scales to 300+ NPCs because the work is parallelizable by region, and the regional brief provides enough specification that writers in different regions produce culturally consistent content without constant cross-checking. + +--- + +## Cross-Cutting Observations + +### 1. The regional brief is the most important document in the project + +Not the NPC profiles. Not the dialogue pools. Not the code architecture. The regional brief defines the parameters that make everything else work. Every content decision flows from it. Every generation system reads from it. Every quality gate uses it as the rubric. + +The investment in making the Krenn brief thorough (Rounds 1-2 of this workshop) is establishing the standard for every future region. If the brief is weak, everything downstream is garbage. If the brief is strong, everything downstream is either good or fixably wrong. + +### 2. Cultural diversity is the deepest replayability axis + +Nigel correctly identifies FRIEND shuffling, contraband variation, and network shuffling as key replayability vectors. But these all operate WITHIN a region. The deepest replayability is BETWEEN regions: the same archetype, the same mechanical templates, but a fundamentally different cultural context that changes how every system feels. + +A player who has mastered investigation in Krenn (patience, listening, earning trust through presence) will feel like a beginner in the Industrial Belt (political navigation, collective resistance) or the Frontier Station (chaos, pattern-finding). This isn't artificial difficulty — it's genuine cognitive challenge because the RULES OF SOCIAL ENGAGEMENT are different. + +### 3. The gate network is the cultural map's skeleton + +Which regions connect to which others through wormhole gates determines: +- Trade routes (and therefore smuggling routes and contraband flow) +- Cultural contact (and therefore heritage blending at borders) +- Political influence (and therefore institutional presence and tension) +- Travel gameplay (and therefore how the player moves between investigations) + +The gate network topology should be designed WITH the cultural map, not independently. A gate junction between the Industrial Belt and the Old Money World creates a class-friction chokepoint that is itself a setting for investigation. The physical infrastructure of the Settled Reach IS the political geography. + +### 4. IP originality verification + +Setting note — the cultural map I've sketched above draws on space opera traditions but is structurally original: + +- **Hamilton** has diverse human worlds but doesn't systematically map cultural heritage drift to gameplay mechanics. The Commonwealth's diversity is atmospheric, not structural. +- **Banks** deliberately erases cultural heritage within the Culture. The Settled Reach preserves it as load-bearing. +- **Reynolds** focuses on deep time and transhuman divergence, not ethnic-cultural evolution at the 100-300 year scale. +- **Simmons** (Hyperion) has diverse worlds but organized by literary archetype, not cultural-economic logic. + +What we're building — a game where cultural heritage drift over 50-300 years produces mechanically distinct investigation experiences — doesn't have a direct antecedent in SF gaming or fiction. The closest structural parallel is Le Guin's *Hainish* cycle, where each world is a controlled experiment in human social organization. But Le Guin doesn't gamify the investigation of those societies — she explores them through character perspective. We're doing both. + +The risk is that individual regions could drift toward recognizable SF tropes (the "frontier world" is a Western, the "research station" is a thriller, the "old money world" is a period drama). The regional brief's Thematic Texture section guards against this by forcing each region to be defined by its SYSTEM FAILURE, not its genre. A frontier world defined by "scarcity without solidarity" is not a Western — it's an investigation into what happens when survival requires predation. + +--- + +## Summary + +| Question | Answer | +|---|---| +| **Is complicity the whole-game theme?** | No. Complicity is Krenn's flavor of the master theme: "What do systems do to the people inside them?" Each region expresses a different failure mode. | +| **How many cultural groups?** | 8-10 major regions at full scale, organized by settlement motivation and economic function, not just heritage. Each creates mechanically distinct gameplay. | +| **Which patterns are universal?** | All mechanical templates (social sites, triangles, access tiers, tells, FRIEND arcs, contraband models). Content is local; structure is global. | +| **Content directory as platform?** | Regional brief as gating document in `content/regions/{region}/brief.yaml`. Self-contained regions, stable global schema, mod-friendly isolation. | +| **Randomization at scale?** | Cultural diversity is the deepest axis. Within-region seed variation (FRIEND, contraband, network) provides replay variety. Between-region variation provides fundamentally different gameplay. | +| **PC archetypes at scale?** | 2 universal (insider/outsider) + 1-2 region-specific per region. Total 4-6 at v1.0. Archetype = relationship to systems, not character class. | +| **Authoring pipeline at 300+ NPCs?** | Regional brief enables generation. 4-stage pipeline: worldbuilding → template design → authored core → generated fill. Parallelizable by region. Brief is the quality rubric. | + +--- + +**Status:** Round 3 response complete. +**Author:** Miri +**Date:** 2026-02-12 diff --git a/docs/workshops/wiki-review/round3-nigel.md b/docs/workshops/wiki-review/round3-nigel.md new file mode 100644 index 000000000..3dced53a3 --- /dev/null +++ b/docs/workshops/wiki-review/round3-nigel.md @@ -0,0 +1,536 @@ +# Round 3 — Nigel (Sandbox & Replayability) + +## Long-Term Content Strategy: Replayability at Scale + +No v0.1 constraints. No sprint timelines. No tickets. Just: what does The Settled Reach look like when it's DONE, and how does it stay endlessly replayable? + +I'm going to work through all seven questions. But first, the framing. + +--- + +## The Core Replayability Thesis (Full Scale) + +Here's what I've been circling around since Round 1, and what the full game makes explicit: + +**Replayability in The Settled Reach is not a feature. It is the architecture.** + +Most games add replayability on top of a static experience: New Game+, harder difficulty, collectibles you missed. We're doing something fundamentally different. The game is a *generator*. Every playthrough instantiates one possible story from a space of authored possibilities. The randomizer isn't shuffling a deck — it's selecting which *novel* to read from a library. + +At full scale, the game should pass this test: **a hundred players describe their games. No two descriptions match. All of them are about complicity.** + +That's not a feature on top of the game. That IS the game. + +--- + +## 1. Is Complicity the Right Theme for the WHOLE Game? + +**YES. And it gets MORE interesting at scale, not less.** + +Gore named it. I'm going to explain why it scales, and why it's the only theme that works for what we're building. + +### Complicity is the only theme that survives character-switching + +The game's core mechanic is playing the same world through different eyes. Any theme that belongs to ONE character's perspective fails the lens test: + +- "Justice" is the detective's theme, not the smuggler's. +- "Survival" is the smuggler's theme, not the detective's. +- "Duty" works for one but not the other. + +Complicity works for EVERYONE because everyone is complicit. The smuggler is complicit in the ring. The detective is complicit in the system that created the ring. The bartender is complicit in silence. The partner is complicit in not asking questions. The inspector is complicit through compromise. The teacher is complicit through innocence. Complicity is the one moral condition shared by every character in every district. It's the lens that makes every character's playthrough a variation on the same question. + +### Complicity mutates across cultures — that's the scale play + +Gore framed it for Krenn: "the same values that make a community good enable its exploitation." That's Krenn-specific complicity. But complicity looks DIFFERENT in different cultures: + +| Cultural Context | Form of Complicity | Player Experience | +|---|---|---| +| **Krenn System** (Baltic-Nordic, labor solidarity) | Community solidarity protects the ring. "Mind your own business" is a virtue weaponized. | The smuggler belongs. The detective disrupts a community by investigating it. | +| **Merchant hub** (cosmopolitan, transactional) | Financial opacity protects the ring. "Everyone has business arrangements" is the norm. | The smuggler is a business operator. The detective is bad for trade. | +| **Military outpost** (hierarchical, chain of command) | Institutional loyalty protects the ring. "Don't question your superior" is doctrine. | The smuggler hides behind rank. The detective threatens the chain of command. | +| **Religious enclave** (community of faith, confession culture) | Spiritual authority protects the ring. "What's confessed is forgiven" creates a privacy moat. | The smuggler confesses but doesn't stop. The detective can't access what's been absolved. | +| **Research station** (academic, intellectual) | Professional reputation protects the ring. "We don't police each other's research" enables misuse. | The smuggler's operation is "just a side project." The detective is anti-science. | +| **Old-money core world** (aristocratic, patronage networks) | Class solidarity protects the ring. "One doesn't discuss money" is breeding. | The smuggler is a patron. The detective is vulgar. | + +Every district has a ring. Every ring is protected by the local culture's BEST qualities. The player who mastered Krenn's form of complicity walks into a merchant hub and discovers that EVERYTHING they learned about how complicity works is wrong. The silence culture doesn't apply here — it's about financial records and shell accounts and plausible intermediaries. + +**That's the replayability EXPLODING.** Not just different FRIENDs, not just different NPCs — different RULES for how complicity operates. The detective who learned to read Baltic reserve can't read merchant cordiality. The smuggler whose cover was labor solidarity can't use the same cover in an academic context. The CHARACTER SKILLS don't transfer, even if the PLAYER SKILLS do. + +### The thematic question scales too + +Gore proposed "Is this enough?" as each character's thematic question. At full scale, each district answers that question differently: + +- Krenn: "Is the money enough to justify what it costs the people I love?" +- Merchant hub: "Is the profit enough to justify what it costs my integrity?" +- Military outpost: "Is the order enough to justify what it costs my conscience?" +- Research station: "Is the discovery enough to justify what it costs my ethics?" + +Same question. Different currencies. Different costs. The player who plays five districts has asked themselves "Is this enough?" five times, and gotten five different answers, and NONE of them are comfortable. + +--- + +## 2. Cultural Groups at Scale + +### Every culture is a gameplay system, not a paint job + +Miri's Krenn brief proved something we need to generalize: **culture is mechanics.** The Finnish-Baltic reserve isn't flavor — it's the difficulty gradient. The labor solidarity isn't worldbuilding — it's the ring's immune system. + +At full scale, every district needs what Krenn has: a cultural brief that explains HOW this culture's virtues protect the local ring and obstruct the local detective. The cultural brief IS the game design document for that district's social mechanics. + +### Cultural groups as replayability multipliers + +Here's the matrix that matters: + +``` +Replayability = Characters x Districts x Cultures x Seeds +``` + +Characters: how many PC archetypes +Districts: how many playable locations +Cultures: how culture modifies all NPC behavior +Seeds: how the randomizer configures each playthrough + +At v0.1: 2 x 1 x 1 x ~1 = 2 meaningfully different playthroughs. +At full scale (say 4 characters, 6 districts, 6 cultures, ~50 meaningful seed configurations): 4 x 6 x 6 x 50 = **7,200** meaningfully different playthroughs. And that's before mods. + +But here's the critical insight: **cultures can't just be stat modifiers.** If a military culture just means "NPCs are 20% harder to befriend," that's a difficulty slider, not a replayability axis. Culture needs to change HOW the player navigates, not just HOW HARD navigation is. + +### The cultural immune system framework + +Every culture brief should answer these questions (generalizing from Krenn): + +1. **What is the default social privacy norm?** (Krenn: don't discuss others' business. Merchant: don't discuss deal terms. Military: don't discuss operations above your clearance.) +2. **What earns trust?** (Krenn: shared labor over time. Merchant: successful transactions. Military: demonstrated competence and loyalty to unit.) +3. **How does the culture handle outsiders?** (Krenn: polite distance. Merchant: calculate what you're worth. Military: evaluate your rank and credentials.) +4. **What cultural practice has been co-opted by the ring?** (Krenn: "vakt" as lookout slang. Merchant: encrypted transaction ledgers. Military: "need to know" operational security.) +5. **What cultural virtue does the ring exploit?** (Krenn: solidarity. Merchant: discretion. Military: obedience.) +6. **How does the ring recruit?** (Krenn: "We're helping people who need affordable lattice mods." Merchant: "This is just another business arrangement." Military: "Orders from above.") +7. **What does exposure look like culturally?** (Krenn: betrayal of the community. Merchant: contract violation. Military: insubordination.) + +These seven questions produce a unique social SYSTEM for each district. The detective can't just "investigate harder" — they have to learn a new social language for each district. The smuggler can't just "maintain cover" — they have to maintain a different KIND of cover. + +### Anti-metagaming through cultural diversity + +And here's the kicker for replayability: **the player who mastered Krenn can't metagame a merchant district.** The strategies are different. The tells are different. The social vulnerability points are different. The cultural gate modifiers (Gore's proposal from Round 2) apply DIFFERENT filters. + +I played Krenn twice and I figured out that worker solidarity is the blind spot. I start a merchant district and... worker solidarity doesn't exist here. Everyone's an independent operator. The blind spot is financial record-keeping conventions. Completely different puzzle. My Krenn expertise is useless. + +That's anti-metagaming through CONTENT DIVERSITY, not through randomization. The randomizer handles within-district variation. Cultural diversity handles between-district variation. Together, they make the game unsolvable in the most satisfying way. + +--- + +## 3. Content Patterns That Scale + +### Beyond THE FRIEND and THE MIRROR + +Gore's FRIEND and MIRROR are the two archetypes that define the emotional core of v0.1. At full scale, we need a LIBRARY of NPC patterns — each one a replayable element because: +1. Which NPC fills each pattern varies per seed +2. Each pattern creates different gameplay for different PC archetypes +3. Patterns interact to create emergent stories + +Here's my proposed pattern library: + +| Pattern | Definition | Emotional Function | Randomizable? | Replayability Contribution | +|---|---|---|---|---| +| **THE FRIEND** | Trusted character hiding a secret | Trust → betrayal → reckoning | Pool selection per seed | Different FRIEND = different emotional wound | +| **THE MIRROR** | Honest character with no secret | Guilt amplification / empathy test | Fixed (1 per district) | Same NPC, but player's relationship with them changes based on what THEY are doing | +| **THE HANDLER** | Off-stage authority applying pressure | Power dynamics, loyalty tests | Fixed per district, but DEMANDS vary per seed | Same handler, different operations = different moral pressure | +| **THE WITNESS** | Civilian who accidentally observes ring activity | Dramatic irony, protection vs. silencing | Pool selection per seed | Different witness = different ethical dilemma | +| **THE TURNCOAT** | NPC whose loyalty flips mid-game | Stakes escalation, trust recalibration | Pool selection per seed | Biggest replayability driver after FRIEND — the player can't predict who breaks | +| **THE CIVILIAN** | Genuinely uninvolved bystander dragged in by player's actions | Cost of consequences | Pool selection per seed | Forces different "how far will you go" answers | +| **THE OPERATOR** | Ring member who's competent and comfortable | Normalizing complicity | Fixed assignment, variable competence per seed | Same NPC, different operational stability creates different ring pressure | +| **THE SKEPTIC** | Someone who doesn't buy the ring's justification but hasn't acted | Moral courage as gameplay possibility | Pool selection per seed | The NPC who could blow everything open — but will they? | + +### Pattern interaction creates emergent narrative + +The patterns aren't independent. They INTERACT: + +- THE FRIEND knows about THE TURNCOAT's wavering. Does the smuggler learn this through the FRIEND relationship and act on it? +- THE MIRROR asks THE WITNESS a casual question that almost exposes the ring. The smuggler watches in real time and has to decide whether to intervene. +- THE HANDLER demands that the smuggler silence THE SKEPTIC. The smuggler knows THE SKEPTIC through THE CIVILIAN (they're friends). Now silencing has a face. +- THE TURNCOAT starts feeding information to THE DETECTIVE (the other PC-as-NPC). The smuggler sees them meeting and doesn't know what they're discussing. + +These interactions aren't scripted as complete scenes — they're authored as pattern pairings. "When TURNCOAT meets FRIEND" has authored beats. "When WITNESS encounters ring activity" has authored beats. The specific NPCs filling those roles vary per seed, but the DRAMATIC STRUCTURE of the interaction is pre-authored. + +At full scale with 8 patterns, we have 28 possible pairings. Each pairing has 3-5 authored interaction beats. That's 84-140 interaction templates that combine with NPC-specific content to produce hundreds of unique dramatic moments per district. + +**And it NAILS replayability without us engineering it.** The player doesn't experience "random events." They experience "the specific people I know doing things that matter because of WHO they are." The randomizer just determines which specific people fill which roles. The drama emerges from the pattern interactions. + +### The pattern library as modding interface + +Every pattern has a spec. Every spec is documented. A modder creating a new NPC can TAG them as eligible for specific patterns: + +```yaml +npc: + id: jax-korrenson + tier: 2 + pattern_eligible: + - witness # Can fill THE WITNESS role + - civilian # Can fill THE CIVILIAN role + pattern_excluded: + - friend # Not written at Tier 1 depth, can't be FRIEND +``` + +The randomizer draws from pattern-eligible pools. Modders can create NPCs that expand specific pools. The community can add WITNESS candidates, TURNCOAT candidates, SKEPTIC candidates — each one creates more possible playthroughs without touching the pattern interaction system. + +--- + +## 4. Content Directory as Platform + +### The modding ecosystem IS the endgame content strategy + +Let me be blunt: at full scale, the development team cannot produce enough content alone. No team can. The difference between "6 districts" and "60 districts" is the modding community. The content directory structure isn't just our build system — it's the platform API for a content ecosystem. + +### What the platform needs + +**Tier 1: District Packs (the big mods)** + +A full district mod. Requires: +- Cultural brief (the Miri) +- 12-25 NPCs across tiers (minimum to populate 3+ social sites) +- 3+ social sites with template role slots +- 3-5 triangles +- At least 1 FRIEND candidate per PC archetype at full Tier 1 depth +- Primary contraband + cultural justification +- Environmental text pool (60+ items) +- News ticker pool (20+ items) +- MIRROR character +- Seed configuration: pools, entanglement map, secondary contraband variants + +This is the equivalent of what we build for Sova Transit. It's a LOT of work. But it's self-contained — a district pack doesn't need to modify other districts. It just exists in `content/districts/new-district/`. + +**Tier 2: NPC Packs (medium mods)** + +Adds NPCs to existing districts. Requires: +- NPC profiles at Tier 2 or 3 depth +- Pool eligibility tags +- Relationship stubs with existing NPCs in the district +- Dialogue lines (minimum based on tier) +- Optional: FRIEND upgrade (Tier 1 depth, contradiction arc, the works) + +This is what makes existing districts RICHER. Every NPC pack increases the pool sizes for the randomizer. More bar regulars. More potential witnesses. More possible turncoats. The district feels more alive and more variable. + +**Tier 3: Flavor Packs (small mods)** + +Adds environmental text, news ticker headlines, dialogue line variants, cultural vocabulary extensions. No new NPCs. No structural changes. Just MORE content for existing pools. + +This is the entry point for new modders. Low barrier, immediate payoff. Write 20 news ticker headlines and the district feels different. Write 30 environmental text items and the station feels richer. The randomizer picks from a larger pool and every playthrough gets slightly different ambient content. + +**Tier 4: PC Archetype Packs (ambitious mods)** + +Adds a new playable character archetype. Requires: +- PC-format brief with full NPC mode (when not player-controlled) +- Starting knowledge inventory per existing district +- Relationship stubs with all FRIENDs in target districts (bidirectional) +- Orientation monologue pool +- Observation monologue for all existing pattern NPCs +- Access tier map per district + +This is the hardest mod to make because it touches everything. But it's also the MOST impactful for replayability — a new PC archetype multiplies the entire playthrough space by the number of districts they support. + +### Quality tiering for mods + +This is where I get nervous and where I need to be honest about the risk. + +A bad FRIEND candidate ruins the game. A Tier 1 NPC with a weak contradiction arc, unconvincing tell, or shallow warmth phase actively damages the emotional payload of the entire playthrough. If a community-created FRIEND is mediocre, the player's experience is mediocre, and they blame the game, not the mod. + +**Proposal: Content certification tiers.** + +| Tier | What it means | Who verifies | How it works | +|---|---|---|---| +| **Uncertified** | Raw community content. Passes schema validation only. | Automated | Runs through `make validate-content`. If the YAML is valid and cross-references resolve, it's listed. Player sees a warning. | +| **Community Reviewed** | Has been reviewed by N community members for voice consistency, cultural coherence, and emotional quality. | Community reviewers | Community review program. Structured rubric. Not "do you like it?" but "does the tell progression work over 10 minutes of play?" | +| **Studio Certified** | Meets the same quality standard as base game content. Could ship in a DLC. | Development team | Rare. Reserved for exceptional community content that we want to highlight. | + +The automated validation layer (Tyre's schema pipeline) catches structural errors. The community review layer catches quality issues. The studio certification layer catches everything else and says "this is canonical quality." + +Players can filter their content by certification level. "Show me only certified district packs." "I'll try community-reviewed NPC packs." "I'm adventurous, show me everything that passes validation." The randomizer doesn't care about certification — it draws from whatever's installed. But the player controls what's installed. + +### The content directory as API documentation + +Every schema file in `_schema/` is API documentation. Every enum file in `global/enums/` is a vocabulary reference. The `_meta/manifest.yaml` spec is a packaging standard. The pool definition format is a randomization interface. + +At full scale, the content directory should ship with: +- A `MODDING.md` that explains the three overlay operations (ADD/REPLACE/MERGE) with examples +- Schema files with inline comments explaining what each field does and how the engine uses it +- A `make new-district` command that scaffolds an empty district pack with all required files +- A `make new-npc` command that scaffolds an NPC profile at a specified tier +- A `make validate-content` command that checks everything before packaging +- A `make test-seed` command that runs the randomizer N times and reports pool coverage — "Did every NPC get selected at least once in 100 seeds?" + +The modding community IS the content strategy at scale. The content directory IS the product. + +--- + +## 5. Randomization Philosophy at Scale + +### The Sacred and the Profane + +This is the section I've been building toward since Round 1. Here's the complete philosophy. + +**SACRED content is never randomized. It's authored, fixed, load-bearing.** + +**PROFANE content is randomized per seed. It's authored too, but which piece activates varies.** + +The line between sacred and profane is the single most important design decision in the game. Get it wrong and you get either a static experience (everything sacred) or a meaningless one (everything profane). + +### The Sacred (what NEVER changes per seed within a district) + +| Element | Why It's Sacred | What Breaks If You Randomize It | +|---|---|---| +| Primary contraband type | Culturally grounded, morally load-bearing | Gore's complicity thesis collapses | +| Cultural substrate | Social mechanics of the district | All NPC behavior loses grounding | +| Triangle STRUCTURES | Relationship dynamics that create forks | Decision cascades become incoherent | +| THE MIRROR identity | Emotional anchor, no contradiction | The honesty contrast disappears | +| Thematic question ("Is this enough?") | Philosophical spine of each NPC | Characters become plot functions instead of people | +| PC archetype definitions | Character-as-lens is the core mechanic | Player identity becomes meaningless | +| Faction structures | Political landscape | Dialogue access tiers become arbitrary | + +### The Profane (what DOES change per seed) + +| Element | What Varies | Replayability Contribution | Constraint | +|---|---|---|---| +| FRIEND selection | Which NPC is your FRIEND | Emotional surprise, anti-metagaming | Must be Tier 1 depth. Pool minimum 2 per archetype. | +| TURNCOAT selection | Which NPC's loyalty flips | Stakes and paranoia | Must be Tier 2+ depth. Pool minimum 3 per district. | +| WITNESS selection | Who accidentally sees something | Ethical dilemma variety | Pool minimum 2 per district. | +| NPC role slot assignments | Who's at the bar, who's on shift, who's absent | Social landscape variety | Template constraints (triangle members always present) | +| Entanglement map | Who's compromised, who's ring-connected | Investigation difficulty, smuggler risk landscape | D-029 ratio (30/50/20) must hold | +| Secondary contraband | What else is in the crates | Moral texture variation | Must be culturally plausible | +| Evidence locations | Where the physical evidence is | Detective investigation path variety | Must be accessible to investigation play | +| Timeline beats | When the storyteller triggers escalation events | Pacing variety | Must hit milestones within playthrough length band | +| News ticker selection | Which headlines appear | Ambient mood variety | Pool size minimum 3x selection count | +| Environmental text variants | Which signs, posters, menus appear | Atmosphere variety | Must be culturally consistent | + +### The Middle Kingdom: content that's sacred in STRUCTURE but profane in POPULATION + +This is the nuance that took me three rounds to articulate. + +Triangle structures are sacred — T1 (Hub Power) always exists. But which NPCs FILL the triangle's roles can vary (at full scale, when the NPC pool is deep enough). The Nils-vs-Voss power dynamic always exists. But in seed A, "Voss" is Voss. In seed B, "the schedule controller who resists escalation" is a different NPC with different personality traits, different tells, different cultural background. + +This means the DRAMATIC STRUCTURE is fixed, but the DRAMATIC CAST is variable. The player always faces a volume escalation decision. They don't always face it with the same people. And different people respond to the same pressure differently. + +At full scale, I'd define it this way: + +``` +Sacred: Triangle exists, has named roles, creates a specific fork type +Profane: Which NPCs fill which triangle roles per seed +Sacred: THE FRIEND exists, has 5-phase arc, has tell system +Profane: Which NPC is THE FRIEND per seed +Sacred: THE WITNESS sees something, player must decide what to do +Profane: Who THE WITNESS is, what they saw, when they saw it +``` + +### The Randomizer as Storyteller + +At v0.1, the randomizer is a card draw. Pick a FRIEND. Pick some bar regulars. Set the entanglement flags. Done. + +At full scale, the randomizer is a **storyteller**. It doesn't just draw cards — it constructs a coherent narrative configuration from the available content. It needs to satisfy constraints: + +1. **Structural constraints**: All triangle roles filled. All pattern slots populated. D-029 ratio holds. +2. **Relationship constraints**: THE FRIEND must have existing relationships with at least 3 other NPCs in the district (can't be socially isolated — the warmth phase needs interaction partners). +3. **Pattern interaction constraints**: THE TURNCOAT must be in the same social site as either THE FRIEND or the smuggler (otherwise the turncoat story has no witness). +4. **Dramatic balance constraints**: Not ALL NPCs can be entangled (the mundane/entangled ratio exists for a reason — some people really are just people). Not all seeds can be the "everything's on fire" version. +5. **Cultural constraints**: NPCs assigned to roles must be culturally plausible in those roles (a military culture outsider can't fill a role that requires institutional trust). + +The randomizer becomes a constraint satisfaction system that generates valid narrative configurations. Each configuration is a "story seed" — a complete cast, setting, and situation that the storyteller then paces through the playthrough. + +This is computationally tractable. We're talking about dozens of NPCs and maybe 15-20 constraints per district, not thousands. A constraint solver can explore this space in milliseconds. The hard part isn't the algorithm — it's defining the constraints correctly, which is content design, not engineering. + +### The variance curve + +At 1 seed configuration: the game is a static experience. Replayable for character-switching only. +At 10 configurations: the game has meaningful variety. Second playthrough surprises. +At 100 configurations: the game is a generator. Two players can't compare notes. +At 1000+ configurations: the game is an ecosystem. Community content creates more variety than the team ever could. + +The architecture should support 1000+ from day one. We just populate it incrementally. + +--- + +## 6. PC Archetypes at Full Scale + +### Beyond smuggler and detective + +v0.1 has two PC archetypes. At full scale, I want at least five — and the reason isn't "more content" but "more LENSES." + +Remember: character-as-lens is the core mechanic. Each PC archetype doesn't just give you different dialogue. It gives you a fundamentally different GAME. Different starting knowledge, different relationships, different access, different moral position, different version of the complicity question. + +### The archetype library + +| Archetype | Core Gameplay | Knowledge Profile | Moral Position | "Is This Enough?" | +|---|---|---|---|---| +| **The Smuggler** | Social navigation, operational management, moral reckoning | Knows the ring, knows the people, doesn't know the full scope | Participant — active complicity | "Is the money enough?" | +| **The Detective** | Investigation, observation, evidence building | Knows the law, knows investigation methods, knows nothing local | Disruptor — institutional complicity | "Is the truth enough?" | +| **The Administrator** | Resource allocation, political navigation, institutional management | Knows the station's systems, budget, personnel files. Doesn't know the street. | Enabler — systemic complicity | "Is the order enough?" | +| **The Newcomer** | Discovery, relationship building, cultural learning | Knows almost nothing. Discovers everything. | Innocent — approaching complicity | "Is belonging enough?" | +| **The Enforcer** | Compliance, intimidation, loyalty management | Knows the ring from the enforcement side. Knows who needs pressure. | Coercer — directed complicity | "Is the control enough?" | + +### Why five archetypes changes the game completely + +**The administrator** knows things neither the smuggler nor detective knows. They see the budget anomalies. They approve the schedule changes Voss requests. They know the Commission's policies are harmful but enforce them because that's the job. Their complicity is SYSTEMIC — they didn't choose the ring, they chose the system that necessitated it. Playing the administrator after the smuggler is: "Oh. I was the reason Kael needed to smuggle. My policies priced people out." + +**The newcomer** is the information-discovery archetype pushed to its extreme. They know NOTHING. Every NPC is a mystery. Every cultural norm is confusing. Every piece of slang is new. This is the "fresh eyes" playthrough that sees the district WITHOUT any insider knowledge. When the newcomer finally realizes there's a ring, it's not Phase 3 of an investigation arc — it's the shattering of their entire understanding of the community they've been trying to join. + +**The enforcer** is the DARKEST playthrough. You know the ring. You enforce compliance. Your job is making sure people like Pell don't talk. Your job is making sure the schedule gaps stay open. You are the REASON the detective can't find evidence — because you cleaned it up. Playing the enforcer after the detective is: "I was fighting SOMEONE. Now I'm that someone." + +### The cross-archetype replayability explosion + +With 5 archetypes in 1 district: 5 playthroughs that are 5 completely different games. +With 5 archetypes in 6 districts: 30 playthroughs before the seed randomizer even activates. +With 5 archetypes, 6 districts, and meaningful seed variation: hundreds. + +But the REAL magic is the PC-as-NPC system at full scale. In any given playthrough, 4 of the 5 archetypes exist as NPCs in the world. The smuggler sees the detective investigating. The detective sees the enforcer covering tracks. The administrator sees the newcomer asking questions. The newcomer sees the administrator signing off on policies. Everyone sees everyone else from the outside. + +And EVERY combination produces a different story about complicity. The administrator watching the newcomer get integrated into the community has a different emotional charge than the enforcer watching the same thing. The detective seeing the administrator approve a policy change reads it as institutional corruption. The smuggler seeing the same approval reads it as "good, the pressure is easing, we can move product." + +### The PC-as-NPC matrix at full scale + +| You play... | You see as NPCs... | The emerging story is... | +|---|---|---| +| Smuggler | Detective investigating, administrator enabling, newcomer joining, enforcer covering | "I'm part of a machine and I can see all the parts" | +| Detective | Smuggler operating, administrator enabling, newcomer being naive, enforcer interfering | "Everyone is complicit and I can't get anyone to help" | +| Administrator | Smuggler working, detective questioning, newcomer integrating, enforcer executing | "My decisions have consequences I never see directly" | +| Newcomer | Smuggler being friendly, detective being suspicious, administrator being distant, enforcer being intimidating | "Something is wrong here and nobody will explain what" | +| Enforcer | Smuggler depending on you, detective hunting you, administrator ignoring you, newcomer being oblivious | "I hold this whole thing together and nobody thanks me" | + +Each row is a completely different game about complicity. The same district. The same NPCs. The same ring. Five fundamentally different experiences. + +### Archetype interaction with cultural groups + +And here's where it gets TRULY replayable: archetypes interact DIFFERENTLY with different cultures. + +The detective is a fish out of water in Krenn (Baltic reserve, labor solidarity obstructs). But the detective might be culturally AT HOME in a merchant hub district (investigation = audit, which merchants understand). The smuggler is culturally embedded in Krenn but would be a business operator in the merchant hub — different cover, different social mechanics, different vulnerabilities. + +The newcomer is always culturally alien — that's the archetype. But the NATURE of their alienation varies. In Krenn, they struggle with social reserve. In a military culture, they struggle with hierarchy. In a religious enclave, they struggle with faith-as-social-currency. + +Each archetype x culture combination is a unique social puzzle. That's 5 archetypes x 6 cultures = 30 unique social navigation challenges before seeds even enter the picture. + +--- + +## 7. Authoring Pipeline at Scale + +### The bottleneck is content, not code + +At full scale, the engine is done. The randomizer works. The storyteller works. The content pipeline works. The constraint solver works. What limits the game is: **how fast can high-quality authored content be produced?** + +And the answer has to be: fast enough that the content pool grows continuously, from both the development team and the modding community. + +### The three-track pipeline + +**Track 1: Studio content (highest quality, slowest production)** + +The core team produces: +- New district packs (1-2 per major update) +- FRIEND candidates at Tier 1 depth (2-4 per district) +- New cultural briefs (1 per district) +- Pattern NPCs at appropriate tier depth +- New PC archetypes (rarely — maybe 1 per year) + +This is the "canon" content. It sets the quality bar. Every studio district is a reference implementation that shows modders what good looks like. + +**Track 2: Community content (variable quality, fast production)** + +The modding community produces: +- NPC packs (Tier 2-3 NPCs that expand pools) +- Environmental text packs (ticker headlines, signs, ambient text) +- Flavor packs (dialogue variants, monologue variants) +- Ambitious mods: community district packs, PC archetype packs + +Community content goes through the certification pipeline: automated validation first, then community review, then (optionally) studio certification. + +**Track 3: Template-driven content (medium quality, fastest production)** + +This is the scale play that I think nobody else has proposed yet. Here it is: + +**Parameterized NPC generation from templates.** + +Not procedural generation. Not AI-generated text. Something in between: **structured templates that a human author fills in, with validation that ensures the result meets tier requirements.** + +Example: + +``` +Template: TIER_2_NPC +Input: name, role, culture, faction, want, secret, 3 relationships +Output: Full Tier 2 profile with: + - 10-axis structure filled from inputs + - Routine generated from role + culture (cultural brief provides schedule patterns) + - Tell system generated from personality archetype + - Voice samples derived from cultural vocabulary + personality + - Monologue lines derived from want + secret + relationships +``` + +The template doesn't WRITE the content. It SCAFFOLDS it. A human author provides the creative inputs (who is this person, what do they want, what are they hiding). The template fills in the structural elements (routine from cultural brief, tell from personality archetype). The author reviews, modifies, adds specificity. The validator checks completeness. + +This turns a 4-hour NPC creation process into a 1-hour process. The creative decisions are still human. The boilerplate is automated. And the structural quality is guaranteed because the template enforces tier requirements. + +### Content reuse as replayability amplifier + +Here's an insight about authoring efficiency that ties directly to replayability: + +**Content that varies per seed doesn't need to be authored PER SEED. It needs to be authored PER POOL.** + +If I write 5 WITNESS candidates for a district, that content appears in every playthrough — just different witnesses each time. I didn't write 5 versions of the game. I wrote 5 NPCs who can each fill the WITNESS role. The randomizer does the combination work. The authoring scales LINEARLY while the replayability scales COMBINATORIALLY. + +This is the fundamental efficiency argument for the pool-based architecture: + +| What I Author | How Many Times It's Used | Replayability Contribution | +|---|---|---| +| 1 FRIEND candidate | Every seed that selects them (~50% of playthroughs) | Unique emotional arc | +| 1 WITNESS candidate | Every seed that selects them (~40% of playthroughs) | Unique ethical dilemma | +| 1 TURNCOAT candidate | Every seed that selects them (~33% of playthroughs) | Unique betrayal stakes | +| 5 news ticker headlines | Selected into ~25% of ticker rotations | Ambient variety | +| 1 pattern interaction beat | Fires whenever those 2 patterns co-occur in a seed | Emergent drama | + +Every piece of content is AMORTIZED across many playthroughs. The authoring investment pays dividends every time the randomizer draws it. And the dividends COMPOUND as the pool grows — because more pool entries mean more possible combinations. + +### The authoring community as scale engine + +At full scale, the pipeline should support: + +1. **Solo modders**: Use `make new-npc` to scaffold, fill in creative details, validate, publish to workshop. One evening's work = one new NPC in the pool. +2. **Small teams**: Create NPC packs (5-10 NPCs with cross-relationships). Weekend project = meaningful district expansion. +3. **Ambitious modders**: Create full district packs with cultural briefs, NPCs, templates, and seed configurations. Months of work = a new game region. +4. **The development team**: Create reference districts, design patterns, maintain the engine, curate community content, publish certification rubrics. + +The authoring pipeline isn't a tool. It's a COMMUNITY. And the community is the content strategy. + +--- + +## Synthesis: The Endgame Vision + +I'm going to paint the picture. + +The Settled Reach ships with 6 districts across 3 star systems. Each district has its own cultural brief, its own ring, its own form of complicity. 5 PC archetypes let you experience each district from 5 different moral positions. The seed randomizer generates a unique narrative configuration for each playthrough. Two playthroughs in the same district with the same character feel like different games. + +The modding community has added 20 more districts. Some are studio-certified masterworks. Some are rough-but-interesting experiments. The content pool has grown from 17 NPCs per district to 40+, with pools deep enough that the randomizer can construct thousands of unique configurations. + +Two players meet. One says: "I played the enforcer in the Krenn System. My FRIEND was Renn — he was the one who introduced me to the ring before the game started. When he wavered, I had to threaten him. He was my friend and I threatened him." + +The other says: "I played the newcomer in a merchant hub. I didn't know there was a ring for the first 15 minutes. I thought I was playing a social sim. Then I found out my landlord was a FRIEND-candidate and she'd been keeping me AWAY from the evidence. She was protecting me. I didn't want to be protected." + +Same game. Same engine. Same patterns. Same theme. **Completely different stories.** Both about complicity. Both about "Is this enough?" Neither one solvable by the other's knowledge. + +That's not a game with replayability features. That's a game where replayability IS the experience. Where the second playthrough isn't a repetition with minor variations — it's a new novel from the same library. + +**But what about the SECOND playthrough?** + +It's different. It's always different. Not because we randomized everything. Because we randomized the RIGHT things and authored the RIGHT things and built a platform that lets the community make MORE of both. + +The game isn't a story. It's a story generator. And the stories it generates are all about the same question: "Is this enough?" + +The player answers that question differently every time. And the answer is always honest. + +--- + +## Decisions I'd Record (Long-Term, No Version Constraints) + +| # | Decision | Domain | +|---|---|---| +| 1 | Complicity is the whole-game theme, scalable across cultures through cultural immune system framework | Thematic | +| 2 | 7-question cultural brief framework for every district (privacy norm, trust mechanism, outsider handling, co-opted practice, exploited virtue, recruitment method, exposure consequence) | Content | +| 3 | 8-pattern NPC library (FRIEND, MIRROR, HANDLER, WITNESS, TURNCOAT, CIVILIAN, OPERATOR, SKEPTIC) with pool-based selection | Design | +| 4 | Sacred/Profane content classification: sacred = never randomized, profane = pool-selected per seed, middle kingdom = fixed structure, variable cast | Architecture | +| 5 | 4-tier modding platform (district packs, NPC packs, flavor packs, archetype packs) with 3-level certification (automated, community, studio) | Platform | +| 6 | 5 PC archetypes at full scale (smuggler, detective, administrator, newcomer, enforcer) with cultural interaction matrix | Design | +| 7 | Template-driven NPC authoring pipeline for Tier 2-3 content acceleration | Pipeline | +| 8 | Randomizer as constraint satisfaction storyteller, not simple card draw | Architecture | +| 9 | Content reuse efficiency: linear authoring investment, combinatorial replayability output through pool architecture | Strategy | diff --git a/docs/workshops/wiki-review/round3-ozzie.md b/docs/workshops/wiki-review/round3-ozzie.md new file mode 100644 index 000000000..a24ef47c7 --- /dev/null +++ b/docs/workshops/wiki-review/round3-ozzie.md @@ -0,0 +1,298 @@ +# Round 3 — Ozzie (Player Experience / Wow Factor) + +## Long-Term Content Strategy: What Does the Full Game Feel Like? + +I'm going to answer every question from one position: **what does the player experience?** Not what systems enable. Not what content is authored. What does a person sitting in their chair FEEL when they play The Settled Reach for 100 hours across a dozen districts in five star systems over three playthroughs? + +If I can describe THAT, the team can build backward from it. + +--- + +## 1. Is Complicity the Right Theme for the Whole Game? + +### No. Complicity is Sova's theme. The game's theme is bigger. + +Gore nailed Sova. Every character in Sova Transit District is complicit in something. The mind-your-business ethos IS the ring's security model. Complicity is what a working-class logistics district feels like when the grey economy is the real economy. + +But here's the thing: complicity is a FLAVOR of the game's actual theme. And the actual theme is: + +**"What do you owe the people around you?"** + +That's the question every district asks, in a different voice. + +- **Sova (logistics hub, Krenn System):** What do you owe your community? Complicity. The ring provides what the system won't. Minding your business IS loyalty. The detective asks: is exposure justice or vandalism? +- **A medical research station:** What do you owe the sick? A district where experimental lattice treatments are tested on desperate patients. The smuggler here moves test subjects, not components. The detective discovers the trials are saving lives AND killing people. Complicity shifts to: is consent meaningful when the alternative is death? +- **A political capital:** What do you owe the truth? A district where information is the contraband. News suppression, Meridian censorship, faction PR. The smuggler is a data courier. The detective is investigating leaks — but who decides what's a leak and what's journalism? +- **A frontier settlement:** What do you owe the future? A place where survival demands compromise. The ring here doesn't smuggle goods — it smuggles people. Illegal immigration to a colony that needs bodies but won't admit it. The detective arrives to enforce quotas that the community depends on violating. +- **A luxury enclave:** What do you owe yourself? A district where contentment is HIGH and the contraband is pleasure, not necessity. The ring here provides experiences, not objects. The moral ambiguity shifts: nobody is suffering, nobody needs saving, the law is being broken because the law is puritanical. The detective's job feels pointless. The smuggler's job feels hedonistic. And then someone gets hurt. + +Each district is a different moral texture. Each one asks "what do you owe?" to a different audience. The patterns are the same (triangles, FRIENDs, social sites, tells, contradictions). The FEELINGS are different. + +**This is how the game stays fresh across 100 hours.** You don't just move to a new district with new NPCs. You move to a new district with a DIFFERENT MORAL QUESTION. The investigation structure is familiar. The emotional payload is not. + +### The wow moment at scale + +The first time a player moves to a new star system and discovers that the moral landscape has shifted completely — that's a wow moment we haven't designed yet. In Sova, the smuggler was providing healthcare access. In the new district, the smuggler is moving... what? Political prisoners? Weapons? Art? Something the player might actually disagree with? + +The moment the player thinks "Wait — am I still the good guy?" in a DIFFERENT WAY than they thought it in Sova. That's the full-game version of the FRIEND contradiction. Not an NPC betraying you, but the GAME betraying your assumptions about what kind of story you're in. + +### Proposal + +Every district gets a **moral signature** — a one-sentence thematic question documented in the district design brief. Sova's is: "What do you owe your community when loyalty means silence?" Every NPC, every triangle, every FRIEND arc in that district serves that question. The content pipeline doesn't just generate NPCs with routines and secrets. It generates NPCs who embody a position on the district's moral question. + +--- + +## 2. Cultural Groups at Scale — How Many? How Different? + +### The player's experience of cultural diversity + +Here's what matters: **when the player walks into a new district, does it FEEL different?** Not "are the names different" — does the AIR feel different? Does the social rhythm change? Does the bar serve different food and play different music and have a different relationship with silence? + +Miri's Krenn brief succeeded because it didn't just name things. It described HOW PEOPLE GREET EACH OTHER (chin-lift, no words), WHAT THEY EAT (leib, supp, kalaa), HOW THEY SWEAR (perk), and WHEN THEY DRINK (kuum at shift transition). That's cultural texture the player absorbs without thinking about it. + +### How many cultural groups? + +For 5 star systems with ~4 districts each (20 districts total for the full game), I think we need **8-12 distinct cultural groups**. Not one per district — cultural groups span systems. Some districts share heritage. Some are blends. The point is that the player should encounter at least 3-4 genuinely different cultural flavors across a full playthrough, with variations within each flavor. + +### The player experience per cultural group + +Each cultural group needs to deliver THREE things to the player: + +1. **An ambient feel in the first 30 seconds.** You walk in and something is different. The greetings are different (Krenn: chin-lift silence. Another culture: verbal greeting formula, maybe even physical contact. The player's monologue notes it: "People touch each other when they say hello here. Different."). The food is different. The bar's energy is different. The SOUND is different (one culture is loud, communal; another is quiet, private). + +2. **A social rule the player has to learn.** In Krenn, the rule is: don't ask questions. Mind your business. Surnames are formal. In another culture, the rule might be: reputation is everything, insults demand response, silence is suspicious. The detective and smuggler each interact with these rules differently. The detective's institutional authority might be RESPECTED in one culture and DESPISED in another. + +3. **A way the culture protects or exposes the ring.** In Krenn, the mind-your-business ethos protects the ring. In another culture where gossip is social currency, the ring is constantly at risk of exposure through chatter. The smuggler's challenge shifts. The detective's approach shifts. Same game structure, different social terrain. + +### Cultural diversity as replayability + +Nigel's randomization axes (FRIEND pool, contraband type, who's compromised) are all within-district variation. Cultural groups are BETWEEN-district variation. A player who's mastered the social dynamics of Krenn culture enters a completely different social landscape in System B. Their smuggler skills translate mechanically but not socially. Their detective approach that worked in Krenn fails spectacularly in a culture with different authority dynamics. + +THAT'S long-term wow. Not just "new NPCs" but "new RULES for how people treat each other." The player has to relearn social navigation every time they change cultural contexts. + +### What I need from Miri at scale + +A cultural brief for every group at the depth of the Krenn brief. Not 8-12 full briefs right now — but a cultural MAP that shows: which groups exist, how they relate to each other (shared heritage? historical conflict? economic dependency?), and what each group's social "rule" is. The full briefs can come district by district. But the map needs to exist before we plan beyond Krenn. + +--- + +## 3. Content Patterns That Scale — Universal vs. Local + +### What's universal (every district has this) + +| Pattern | Why it's universal | What varies | +|---------|-------------------|-------------| +| **Social sites** (D-025) | Every district needs places where NPCs interact and the player observes | The TYPE of site (bar, market, temple, arena, workshop) changes per culture | +| **Triangles** (D-024) | 3-NPC tension is the atomic unit of social drama everywhere | The NATURE of the tension changes per moral signature | +| **THE FRIEND** | The emotional payload of betrayed trust is universal | WHO the FRIEND is, what they're hiding, HOW you discover it | +| **Dual-lens** (D-032) | Asymmetric information requires two perspectives minimum | The two perspectives can be MORE than smuggler/detective at scale | +| **Tells** | Behavioral observation is the core gameplay loop | Different cultures have different baseline behaviors, so different deviations | +| **30-minute runway** (D-027) | Life-sim attachment before contamination activates | Could be shorter or longer depending on district complexity | +| **The Cheers moment** | Every district opening needs to establish belonging (insider) or alienation (outsider) | Cultural texture determines what "belonging" looks and sounds like | + +### What's local (varies per district) + +| Pattern | Why it's local | Example | +|---------|---------------|---------| +| **Contraband type** | The moral texture of what's being moved defines the district's question | Lattice components (access), people (immigration), data (truth), pleasure (consent) | +| **The ring structure** | Criminal organizations differ by culture and economy | Krenn: family-loyalty network. Another district: corporate shell game. Another: political faction with armed wing. | +| **Authority dynamics** | How the detective's institutional power is received | Respected, feared, resented, ignored, co-opted | +| **Mundane life texture** | What "daily life" means here | Shift work vs. market stalls vs. academic cycles vs. festival rhythms | +| **The quiet moment content** | What the character reflects on when idle | Shifts with the district's mood and the player's accumulating experience | + +### The structure itself should vary — slightly + +Here's something I want to push: **not every district should have exactly 3 social sites, exactly 5 triangles, exactly 17 NPCs.** The PATTERN (social sites + triangles + FRIENDs) is universal. The SCALE varies. + +- A small frontier outpost: 2 social sites, 8 NPCs, 2 triangles, 1 FRIEND. Intimate. Personal. Everything is close. +- A sprawling market district: 5 social sites, 25 NPCs, 8 triangles, 2 FRIENDs. Dense. Overwhelming. Easy to lose threads. +- A militarized checkpoint: 2 social sites, 10 NPCs, 3 triangles, 1 FRIEND — but half the NPCs are hostile and the social dynamics are about power, not community. + +The player should feel the SCALE difference when they move between districts. "This place is tiny — everyone knows everyone" vs. "This place is huge — I can't track all these people." Both are valid experiences. Both use the same systems. Both feel completely different. + +### THE MIRROR as a long-term pattern + +D-039 mentions mirror moments (same ticker, different monologue). At scale, THE MIRROR becomes a full pattern alongside THE FRIEND: + +**THE MIRROR** is an NPC who IS the other playable character in some important way. Not literally — but thematically. In Sova, the detective NPC exists while the smuggler plays, and vice versa. At scale, THE MIRROR could be: + +- A smuggler in a district where the player is the detective, and the MIRROR smuggler's approach is different from the player's approach in a previous district +- A detective in a district where the player is the smuggler, and the MIRROR detective is better/worse/more ruthless/more compassionate than the player was +- An NPC who holds the SAME moral position the player held in a previous district, forcing the player to confront their own past choices from the outside + +THE MIRROR forces the player to see themselves reflected. THE FRIEND forces the player to feel betrayal. Together, they're the emotional backbone of every district. + +--- + +## 4. The Content Directory as a Platform + +I'm not the architecture person, but I know what the platform needs to DELIVER from a player experience perspective: + +### Requirements from the player's POV + +1. **No loading screens between districts.** The player walks through a gate or boards a transport and arrives. The content loads seamlessly. If the directory structure makes this hard, fix the directory structure. Immersion breaks destroy everything we're building. + +2. **Cultural consistency within districts, diversity between.** When the engine loads a district's content pack, everything in that pack must feel cohesive — names, slang, food, greetings, all from the same cultural brief. The content directory should make it IMPOSSIBLE to accidentally serve Krenn dialogue in a non-Krenn district. + +3. **Mod districts feel like real districts.** The architecture should be such that a modder who follows the template produces a district that's indistinguishable from official content in quality (assuming they put in the authoring work). The player shouldn't be able to tell modded from official. + +4. **The randomizer has enough to work with.** By the full game, the content directory should hold enough variation that the randomizer can produce genuinely different experiences. If there are only 2 FRIEND candidates per character per district and only 3 contraband types, the variation space is too small. The platform needs to hold 4-6 FRIEND candidates, 5-8 contraband configurations, and 3-4 triangle variation sets per district. The directory structure should make this pooling natural, not hacked. + +5. **Content can be added without restart.** Not just hot-reload for development. For the shipped game, DLC districts should slot in without requiring the player to start a new save. Walk through a new gate, arrive in a new district, the DLC content is just... there. This is a HUGE player experience win and it requires the content architecture to support runtime district discovery. + +--- + +## 5. Randomization Philosophy at Full Scale + +### Nigel's axes are the right START. Here's the full set. + +| Variation Axis | Sova v0.1 | Full Game | Player Experience | +|---------------|-----------|-----------|-------------------| +| **Who is THE FRIEND** | 1 per character | 4-6 candidates per character per district | "I can't predict who I'll care about" | +| **What's the contraband** | Lattice components | 5-8 types across the game, 2-3 per district | "The moral question is different this time" | +| **Who's compromised** | Fixed (Drin, Voss) | Role-shuffled per seed | "I can't use last game's investigation path" | +| **District moral signature** | Fixed (complicity) | Variable emphasis within the district's range | "Same place, different pressure" | +| **Cultural noise** | Fixed | Mundane events vary per seed (festivals, maintenance shutdowns, news cycles) | "The world feels alive independently of me" | +| **PC archetype** | Smuggler/Detective | 4-6 archetypes | "Completely different game from the same district" | +| **Which districts connect** | N/A (one district) | Gate network topology varies per seed | "I ended up somewhere I didn't expect" | +| **NPC backstory variation** | Fixed | Template-generated with seed-dependent details | "Kael's sibling was different this time" | +| **Storyteller pacing** | Fixed timeline | Variable event timing per D-005 | "The crisis hit earlier/later, and that changed everything" | + +### The randomization philosophy in one sentence + +**Randomize the CONTEXT. Author the MOMENTS. Let the combination create stories nobody designed.** + +The authored core is: FRIEND contradiction arcs, key monologue lines, cultural texture, moral signatures. The randomized context is: who fills what role, what's being moved, when things happen, which connections exist. The player experiences neither the authored content alone nor the randomized context alone — they experience the COMBINATION, which is unique every time. + +### The full-game wow moment from randomization + +At full scale, the player should be able to have this experience: + +Playthrough 1: They're a smuggler in Krenn. Kael is their FRIEND. They discover the exit attempt. They feel guilty about Hael. They resolve it somehow. + +Playthrough 2: They're a detective in a DIFFERENT system. Different culture, different contraband, different moral question. They meet a MIRROR NPC — a smuggler who reminds them of who they were in Playthrough 1. The MIRROR is doing what the player did. The detective must decide whether to treat the MIRROR the way THEY were investigated. + +Playthrough 3: They return to Krenn as a detective. Different seed. Kael isn't THE FRIEND this time — Maret is. The player ALREADY KNOWS Kael's secret from Playthrough 1, but their character doesn't. Kael is background noise. And Maret — the anxious scheduler they barely noticed last time — is now the person they're growing to trust. And the player thinks: "Wait. Was Maret always this important? Was I blind the first time?" + +That three-playthrough arc is the game's masterpiece. It's not authored. It's EMERGENT from authored content + randomized context + player memory. And it only works if we build the full variation space. + +--- + +## 6. PC Archetypes at Full Scale + +### The smuggler and detective are the PROOF. Not the limit. + +D-005 says: "Pick a character. Step into the [Settled Reach]. Figure it out." The character you pick determines WHERE you start, WHAT you know, WHAT you can do, and WHAT you care about. + +At full scale, I think the game needs **4-6 PC archetypes**, each with a fundamentally different relationship to the world: + +| Archetype | Core relationship to the world | What they know | What they want | Emotional experience | +|-----------|-------------------------------|----------------|----------------|---------------------| +| **The Operator** (smuggler) | Embedded insider | How things really work | Keep the machine running | Guilt, loyalty, complicity | +| **The Investigator** (detective) | Institutional outsider | How things should work | Expose what's wrong | Judgment, isolation, contaminated purpose | +| **The Newcomer** | Stranger, no context | Almost nothing | Find a place, build a life | Discovery, vulnerability, the Cheers moment earned rather than inherited | +| **The Fixer** | Connected networker | Who to call | Solve problems for a price | Pragmatism, moral flexibility, "everyone owes me" | +| **The Believer** | Ideological member | Why things should change | Advance a cause | Conviction, sacrifice, "is the cause worth the cost?" | +| **The Remnant** | Former insider, fallen | What it used to be like | Reclaim something lost | Nostalgia, regret, "was it ever what I thought it was?" | + +Each archetype creates a DIFFERENT emotional experience in the SAME district. The Operator and Investigator are already proven (smuggler/detective). The Newcomer is the "PC-as-NPC concept" taken to its extreme — a character with NO pre-existing relationships, discovering the district from zero, earning the Cheers moment over time instead of starting with it. + +### Why more archetypes matter for player experience + +The replayability matrix explodes. 6 archetypes x 20 districts x variable FRIEND/contraband/compromise = a game that's genuinely different every time for YEARS. + +But more importantly: different archetypes ask the thematic question differently. "What do you owe your community?" hits different when you're the Operator (you owe them your silence), the Investigator (you owe them the truth), the Newcomer (you owe them nothing yet), the Fixer (they owe you), the Believer (they owe the cause), or the Remnant (you owed them once and failed). + +Same district. Same NPCs. Same triangles. Six different games. Six different emotional journeys. + +### The Newcomer archetype is special + +The Newcomer deserves its own note because it inverts the Cheers moment. The Operator starts with "everyone knows your name." The Newcomer starts with "nobody knows your name." The Newcomer's Cheers moment is EARNED — the first time an NPC greets you by first name instead of ignoring you, the first time Lera remembers your order, the first time someone saves your seat at the bar. That progression from outsider to insider, earned over hours of play, is a wow moment that the Operator NEVER gets because the Operator started with it. + +The Newcomer also has the most DANGEROUS relationship with THE FRIEND. The Newcomer's FRIEND is the first person who was kind to them. The first person who broke through the cold-shoulder newcomer experience. That makes the FRIEND's contradiction even more devastating — the one person who made this place feel like home was hiding something. + +### PC archetypes and cultural groups interact + +The same archetype plays differently in different cultures. The Investigator in a culture that respects institutional authority has a different experience from the Investigator in Krenn where authority is politely distrusted. The Newcomer in a culture where strangers are welcomed has a different ramp from the Newcomer in Krenn where trust takes months. + +This is the full combinatorial space: 6 archetypes x 8-12 cultural groups x variable randomization = a game that no two players will ever describe the same way. + +--- + +## 7. The Authoring Pipeline at Scale — What I Need as the Wow Factor Advocate + +### My concern with 300+ NPCs + +If we're building 20+ districts with 15+ NPCs each, that's 300+ characters. The risk is obvious: dilution. At 300 NPCs, most of them will be mechanical — they'll have routines, tells, information inventories, and absolutely no soul. They'll be Renn and Tav and Drin from Sova, scaled up to industrial production. Furniture that talks, at scale. + +The style guide helps. The templates help. But templates can't make someone feel something. Templates produce CORRECT NPCs. They don't produce MEMORABLE ones. + +### The emotional quality assurance pipeline + +Every district needs an emotional pass — someone (me, or someone who does what I do) reading the NPC profiles and asking: "Would a player remember this person after 30 minutes?" If the answer is no for more than 60% of the roster, the district isn't ready. + +**Proposed emotional quality tiers:** + +| Tier | Count per district | Emotional standard | Production method | +|------|-------------------|-------------------|-------------------| +| **Tier 1 (THE FRIEND)** | 4-6 candidates, 1-2 active per seed | Must make the player feel betrayed | 100% hand-authored, gut-check reviewed | +| **Tier 2 (emotional NPCs)** | 5-8 per district | Must make the player feel SOMETHING — guilt, sympathy, fear, affection | 70% hand-authored, 30% template-expanded, gut-check reviewed | +| **Tier 2 (functional NPCs)** | 5-8 per district | Must serve a mechanical purpose in triangles. Correct, not necessarily memorable | 40% hand-authored, 60% template-expanded | +| **Tier 3 (atmosphere)** | 5-10 per district | Must feel like they belong. Correct cultural texture. | 20% hand-authored, 80% generated from cultural brief | + +### The gut-check line at scale + +From Round 1, I proposed: every NPC needs a voice sample that makes you pause when you read it out loud. At scale, this becomes a pipeline gate. + +**Process:** +1. Writer produces NPC profile from template +2. Writer writes 1-3 "gut-check lines" — voice samples intended to provoke emotional response +3. Emotional QA (me or equivalent) reads the lines cold +4. If zero lines land → NPC goes back for a voice pass. Not blocked — the mechanical profile is fine. But the NPC isn't DONE until at least one line resonates. +5. Tier 1 and emotional Tier 2 NPCs CANNOT ship without passing the gut-check + +This doesn't add much time per NPC. It adds enormous quality. The difference between a game with 300 correct NPCs and a game with 300 NPCs where 50 of them make you feel something is the difference between a game people play and a game people REMEMBER. + +### What the authoring tooling needs + +From my perspective, the critical authoring tools are: + +1. **The line previewer** (Mellanie's request, Tyre confirmed feasible). Writers need to see their lines in context — not just the text, but the trigger, the prerequisite, the NPC delivering it, the monologue timing. A dry YAML file doesn't tell you if the line LANDS. + +2. **The "district walkthrough" tool.** A way to play through a district's authored content in accelerated time — see the NPC routines play out, see the FRIEND arc progress, see the monologue fire. Not the full game engine — a preview mode that lets content authors and emotional QA evaluate the district's feel without building the whole game around it. + +3. **The cultural consistency checker.** A tool that scans a district's content pack and flags: names that don't match the regional brief's phonetic signature, slang from the wrong culture, food items not in the cultural menu, greeting conventions that violate the social norms. Automated cultural lint. The tool doesn't judge quality — it judges CONSISTENCY. A Nordic name in a Mediterranean-heritage district is a bug. + +4. **The variation space visualizer.** A tool that shows: for this district, here are all the FRIEND candidates, all the contraband options, all the compromise configurations. Does the space produce genuinely different experiences? Are any configurations degenerate (same effective experience despite different parameters)? Are any configurations broken (impossible states)? + +--- + +## The Long-Term Wow Moment Map + +At the full game scale, the player's emotional journey looks like this: + +**Hours 1-5 (First district, first archetype):** The Cheers moment. The FRIEND. The contradiction. The moral question. The player falls in love with a place and then watches it crack. + +**Hours 5-15 (Second district, same archetype):** Different culture, different moral texture, different FRIEND. The player realizes the STRUCTURE is familiar but the FEELINGS are new. The Divergence Reveal happens between DISTRICTS, not just between characters. + +**Hours 15-30 (Same districts, different archetype):** The MIRROR moments multiply. The player sees their previous choices reflected in NPCs. The guilt or pride from their first playthrough colors their second. Player knowledge becomes a burden — you know things your character doesn't, and that dramatic irony IS the gameplay. + +**Hours 30-60 (New systems, new cultures):** The cultural shock moments. Walking into a district where the social rules are different. The Cheers moment takes longer to earn. The FRIEND is harder to identify because the baseline behavior is unfamiliar. The player feels genuinely disoriented — and then feels the rush of LEARNING a new place, building new relationships, earning trust in a different way. + +**Hours 60-100+ (Mastery, mods, deep variation):** The player understands the GAME but not this specific SEED. They know that someone in this bar is THE FRIEND. They know there's a ring. They know the investigation will reveal something painful. But they don't know WHO, and they don't know WHAT, and the waiting — the not-knowing, while the warmth accumulates — is the most exquisite tension the game produces. + +### The final wow moment + +The player is 80 hours in. They've been a smuggler, a detective, a newcomer, a fixer across four star systems. They enter a new district. They sit at a bar. An NPC says something kind to them. And the player thinks: + +"Is this person my FRIEND? Or are they just... kind?" + +And the player realizes they can no longer tell the difference between genuine warmth and the setup for betrayal. The game has taught them to distrust kindness. And THAT — that contaminated relationship with warmth itself — is the game's final thematic statement. + +It's Gore's complicity thesis taken to its conclusion: the player has become complicit in their own inability to trust. The game didn't do this to them. Playing the game did this to them. The structure of repeated betrayal across dozens of hours has rewired how they read human behavior. + +Is that the game we want to make? I think it is. And I think it's why this game will matter. + +--- + +*Written by Ozzie. No tickets. No sprints. Just the feeling of a game that could change how someone sees the world. Let's build it.* diff --git a/docs/workshops/wiki-review/round3-paula.md b/docs/workshops/wiki-review/round3-paula.md new file mode 100644 index 000000000..28ed218c6 --- /dev/null +++ b/docs/workshops/wiki-review/round3-paula.md @@ -0,0 +1,467 @@ +# Round 3 — Paula (Librarian, Long-Term Content Strategy) + +**Scope:** The full game. Multiple star systems, dozens of districts, hundreds of NPCs, years of content. + +--- + +## 1. Is Complicity the Right Theme for the WHOLE Game? + +No. And yes. Let me complicate this. + +Complicity is the right theme for **Sova Transit District** because the smuggling ring creates a specific structure: the player knows something, benefits from it, and can't easily stop. That's complicity. The detective inverts it — the player investigates complicity rather than living inside it. Beautiful. Works perfectly for v0.1. + +But the honest truth is: complicity is ONE moral texture. A game spanning dozens of districts across multiple star systems cannot make every district about smuggling, or even about crime. Complicity as the universal theme would flatten the game into "find the crime, decide what to do about it" across 20 different backdrops. That's not a Commonwealth-scale experience — that's a procedural cop show with different wallpaper. + +### What DOES Scale: Entanglement + +The deeper theme, the one Gore actually identified but named "complicity" because Sova is the first district, is **entanglement**. Every district in The Settled Reach asks the same fundamental question: **"What does it cost to be connected to other people?"** + +Complicity is one answer. But there are others: + +| Moral Texture | Core Question | District Type | PC Experience | +|---------------|--------------|---------------|---------------| +| **Complicity** | "Can I stop?" | Criminal operation embedded in community | Sova (v0.1). Player benefits from something they can't easily exit. | +| **Obligation** | "Who do I owe?" | Tight-knit community with reciprocal debts | Colony district. Everyone helped everyone once; now everyone expects repayment. Favor networks are infrastructure. | +| **Compromise** | "How much is acceptable?" | Political/institutional hub | Administrative center. Every decision requires trading something you value for something you need. No clean hands. | +| **Sacrifice** | "What would I give up?" | Frontier/crisis zone | Settlement under pressure. Resources are scarce. Helping one person means not helping another. Triage as daily life. | +| **Loyalty** | "Who am I loyal to when loyalties conflict?" | Multi-faction crossroads | Trade hub where three factions overlap. Every relationship pulls the player in a different direction. | +| **Silence** | "What am I choosing not to see?" | Prosperous district with hidden cost | Wealthy station where comfort depends on exploitation happening elsewhere. The player can investigate or enjoy the benefits. | +| **Legacy** | "What did the people before me do, and am I responsible?" | Old settlement with buried history | Ancient colony where current prosperity was built on something terrible. History is still being covered up. | +| **Exile** | "What does belonging cost?" | Insular community with strict norms | Cultural enclave. To be accepted, the player must conform. To investigate, the player must transgress. | + +Gore's "Is this enough?" works universally because "enough" means different things in each texture. In Sova, "enough" means the quiet life. In an obligation district, "enough" means the debts you carry. In a silence district, "enough" means the comfort you don't question. + +### The Unifying Spine + +Every district has: +- **A dominant moral texture** (from the table above, or new ones as we expand) +- **A version of "Is this enough?"** that the NPCs implicitly answer through their lives +- **A FRIEND** whose arc makes the texture personal +- **A dual-lens** where two archetypes experience the texture differently + +The conspiracy layer — the Starflyer or its equivalent at full scale — operates ACROSS moral textures. A conspiracy thread might pass through a complicity district, a silence district, and a compromise district, and the player sees how the same conspiracy manifests differently in each social context. That's the game at scale: not "find the crime everywhere" but "see how the same forces create different kinds of human damage in different communities." + +### Proposal 1: Each District Declares a Moral Texture + +The content directory includes a `moral_texture` field in every district definition. This is a design declaration, not a mechanical tag — it tells content authors what kind of human drama this district explores. The texture shapes NPC generation (what kinds of secrets, what kinds of triangles), FRIEND design (what contradiction the FRIEND embodies), and monologue voice (what the PC notices, worries about, and can't stop thinking about). + +--- + +## 2. Cultural Groups at Scale + +Miri's Krenn System brief gave us Nordic-Baltic heritage for one system. The full game needs 8-12 cultural groups, and here's the part most people miss: **cultural groups are political groups**. + +### Why Culture Is Mechanical + +A cultural group isn't just naming conventions and aesthetic flavor. It determines: + +| Dimension | Mechanical Impact | Example | +|-----------|------------------|---------| +| **Trust defaults** | How quickly NPCs move from Unknown to Known to Friendly | A formal culture requires more interaction steps. An informal culture opens faster but gossips more freely. | +| **Authority response** | How NPCs react to institutional power | In one culture, Commission presence is reassuring. In another, it's threatening. Same detective, different social terrain. | +| **Privacy norms** | What counts as "surface" vs "real" vs "secret" disclosure | A culture that values collective decision-making treats workplace disputes as public. A culture that values individual autonomy treats them as private. | +| **Solidarity patterns** | When and why NPCs protect each other from outsiders | A culture with strong clan bonds may stonewall any outside investigator — even if they privately disagree with what's being hidden. | +| **Formality gradient** | When full names vs short names are used, how address changes with trust | Directly affects the dialogue selection layer. "Kael" vs "Mr. Davan" isn't cosmetic — it signals relationship state. | +| **Conflict expression** | How disputes manifest — direct confrontation vs avoidance vs institutional channels | Shapes triangle dynamics. In a direct culture, triangle tensions escalate visibly. In an avoidant culture, they simmer beneath the surface. | + +### Proposed Cultural Group Template + +Each cultural group needs a brief that maps to mechanical parameters. Not a lore dump — a **design specification** that content authors use to shape NPC behavior. + +``` +Cultural Group: [Name] +Heritage: [Real-world inspirations, for naming and phonological reference] +Settlement Era: [When they arrived in the Reach — affects formality and institutional trust] +Trust Mechanic: [fast/moderate/slow] + [trust_decay_rate: high/moderate/low] +Authority Default: [welcoming/neutral/suspicious/hostile] +Privacy Norm: [open/guarded/closed] +Solidarity Response: [individualist/community/clan] +Formality Default: [formal/informal] +Conflict Style: [direct/avoidant/institutional] +"Is this enough?": [What "enough" typically means in this culture] +Naming Conventions: [Phonological rules, surname patterns, address forms] +``` + +### How Many Do We Need? + +For a game with ~20 districts across 4-6 star systems: + +- **4-6 "founding" cultures** — the original settlement waves that colonized the Reach. These are the dominant cultures in the oldest, most established systems. High institutional trust, formal naming, slower trust mechanics. +- **3-4 "second wave" cultures** — later arrivals who settled less desirable systems or came as labor. Often working-class, informal, faster trust but higher solidarity (protect their own). Krenn's Nordic-Baltic group fits here. +- **1-2 "recent arrival" groups** — settlers from outside the Reach who bring entirely different norms. Create the "outsider" experience for PCs from these backgrounds. Lower starting trust everywhere, but bring unique knowledge or skills. +- **1 "synthetic" culture** — a culture that emerged in the Reach itself, not imported. Maybe a station-born identity, or a Meridian (FTL corridor) traveler culture. No real-world analogue — invented from scratch. + +Total: **9-13 cultural groups**. Each gets a 1-2 page brief following the template above. Miri leads generation; I validate that the mechanical parameters create interesting social gameplay in each district. + +### The Political Dimension + +Cultural groups don't just exist in isolation. They have RELATIONSHIPS with each other: + +- **Historical tensions** — Group A settled land Group B claims ancestral rights to. This isn't backstory color — it's a triangle between NPCs from different groups. +- **Economic dependencies** — Group C's economy depends on trade with Group D. When a conspiracy disrupts that trade, the political fallout is cultural. +- **Institutional power** — Which group dominates the Commission? Which groups are underrepresented? A detective from the dominant culture has different social terrain than a detective from a minority group. + +These inter-group dynamics create **system-level triangles** — the same triangle pattern that works for 3 NPCs in a bar also works for 3 cultural groups in a star system. + +### Proposal 2: Cultural Group Briefs as Content Specifications + +Each cultural group gets a brief (generated by Miri, validated by Paula and Gestalt) that includes both lore content and mechanical parameters. The mechanical parameters feed directly into NPC generation — an NPC's cultural group shapes their trust defaults, privacy norms, and conflict expression, which in turn shapes their dialogue selection and triangle behavior. + +--- + +## 3. Content Patterns That Scale + +Triangles, THE FRIEND, and social sites are our proven atomic patterns. But the full game needs a larger pattern vocabulary. Some patterns I've seen work in v0.1 that can be generalized, and some that the full game demands. + +### Universal Patterns (Present in Every District) + +| Pattern | What It Is | Why It's Universal | v0.1 Instance | +|---------|-----------|-------------------|---------------| +| **THE FRIEND** | One NPC per PC archetype whose arc makes the moral texture personal | Without it, the texture is abstract. The FRIEND makes it a relationship. | Kael (smuggler), Sera (detective) | +| **Triangles** | 3 NPCs with conflicting interests, atomic unit of social intrigue | Conflict between 2 people is a fight. Conflict among 3 is politics. | 5 triangles in Sova | +| **Social Sites** | 4-8 NPCs in physical proximity with sightlines and routines | Social observation requires co-location. The site is the stage. | Terminal, Bar, Ring | +| **The 30/50/20 Split** | Flat / mundane triangles / entangled with story | Signal needs noise floor. Life needs to feel real. | D-029 ratio | +| **Dual-Lens** | Two PC archetypes experience the same district differently | Replayability through perspective, not new content | Smuggler vs detective | + +### New Patterns for the Full Game + +**THE MIRROR** — An NPC who embodies the path the PC didn't take. The smuggler who went straight. The detective who became corrupt. The merchant who chose poverty over compromise. This NPC doesn't have a contradiction arc — they ARE a contradiction to the PC's existence. Content requirements: full 10-axis profile, authored relationship history with the PC archetype, 3-phase arc (recognition → comparison → reckoning), ~40-60 authored lines. One per district, tied to the dominant PC archetype. + +**THE ANCHOR** — An NPC who represents what the PC would be if the story never touched them. A version of contentment that isn't naive but isn't tested. Gore's "Is this enough?" made flesh — this person's answer is "yes, and here's why." Content requirements: Tier 2 depth, authored "quiet moment" monologue (the PC watching THE ANCHOR live their life and wondering), 1-2 authored conversations that reveal genuine satisfaction. The ANCHOR's purpose is to make the player WANT the quiet life, which makes the story's intrusion painful. One per district. + +**THE SYSTEM** — An NPC who IS the institution. Not corrupt, not heroic — just embodying the rules. The customs officer who follows procedure. The station administrator who applies policy. The Commission investigator (in non-detective districts) who does their job competently and impartially. Content requirements: Tier 2 depth, authored "institutional voice" (how they quote regulations, reference precedent, cite authority), 2-3 authored moments where the institution's neutrality creates injustice without anyone being at fault. THE SYSTEM makes the player confront whether the problem is individuals or structures. One per district. + +**THE GHOST** — A character referenced by multiple NPCs but never directly encountered in this district. Maybe they left. Maybe they died. Maybe they're in another district. The player learns about THE GHOST through other people's memories, grudges, and grief. Content requirements: NO authored lines (the ghost doesn't speak), but every NPC who references them gets 2-3 authored lines about the ghost. The ghost exists in the negative space between stories. Optional per district — powerful when used, but overuse diminishes impact. Better in 30-40% of districts. + +**THE CATALYST** — An NPC who arrives mid-story and disrupts the equilibrium. The new worker. The transferred investigator. The merchant who opens a competing shop. Unlike THE FRIEND (who IS the equilibrium), THE CATALYST breaks it. Content requirements: Tier 2 depth, authored arrival sequence (how NPCs react to the newcomer), 2-3 authored "disruption moments" where established routines break. One per district, activated by the storyteller at the dramatically appropriate moment. + +### Pattern Composition Rules + +Each district instantiates from the pattern library following composition rules: + +``` +REQUIRED per district: + - 1 FRIEND per supported PC archetype + - 3-5 Triangles (minimum) + - 2-3 Social Sites (minimum) + - 1 ANCHOR + - 1 SYSTEM + - 30/50/20 population split (±5%) + +OPTIONAL per district: + - 1 MIRROR (recommended for districts with strong moral texture) + - 1 GHOST (recommended for districts with legacy/silence textures) + - 1 CATALYST (storyteller-activated, recommended for longer play sessions) + - Additional triangles and social sites as district complexity warrants +``` + +### Proposal 3: Formal NPC Pattern Library + +Document each pattern type (FRIEND, MIRROR, ANCHOR, SYSTEM, GHOST, CATALYST) as a reusable specification with: purpose, content requirements, authored line budget, relationship to moral texture, and composition rules. This library grows over time — DLC can add new patterns. + +--- + +## 4. The Content Directory as a Platform + +Tyre's three-layer stack (base/DLC/mods) is architecturally right. Let me add the NARRATIVE layer — what the content directory needs to support cross-district storytelling. + +### The Directory Must Support Four Scopes + +| Scope | What Lives Here | Example | +|-------|----------------|---------| +| **Universal** | Pattern definitions, archetype specs, cultural group briefs, tag taxonomies | THE FRIEND pattern spec, smuggler archetype, tag enum lists | +| **Faction** | Faction definitions, faction-level NPCs, cross-system storylines | Commission leadership, Syndic trade routes, conspiracy threads | +| **System** | System-level setting, dominant cultural group, inter-district connections | Krenn System brief, Krenn-specific naming tables, system events | +| **District** | The actual playable content — NPCs, triangles, social sites, dialogue pools | Sova Transit District, all its NPCs, all its dialogue YAML | + +This hierarchy matters because STORIES CROSS BOUNDARIES. The conspiracy doesn't respect district lines. A faction's influence spans systems. A cultural group's norms apply across multiple districts. The content directory must make these cross-references explicit and validatable. + +### Cross-District References + +The biggest structural challenge at scale: how does content in District A reference content in District B? + +**Principle: Districts are self-contained for PLAY, but connected for NARRATIVE.** + +A player playing in Sova doesn't need District B's content loaded. But a character in Sova might reference events in District B, or an NPC might have a `known_by` entry from an NPC who lives in District B. These references are: + +1. **Soft references** — dialogue lines that mention another district by name. No mechanical dependency. Handled by the tag system (freeform tags like `references:krenn_central`). +2. **Hard references** — a FactId in District A that depends on a FactId in District B. Example: `conspiracy.krenn_cell` in Sova references `conspiracy.krenn_network` which is defined at the system level. Hard references require the referenced content to exist in the content directory. Validated by schema. +3. **Migration references** — an NPC who appears in multiple districts (rare, high-value). Example: a Commission investigator who was in District A and transferred to District B. Carries relationship history from one district to another. This is the most complex case — the NPC has TWO district entries (one per district) with a shared identity record at the system level. + +### Content Validation at Scale + +With 20+ districts, manual cross-reference checking is impossible. The content directory needs: + +- **Schema validation per content type** (Tyre's proposal, endorsed) +- **Cross-reference validation** — every hard reference resolves to an existing content entry +- **Pattern completeness checking** — every district has the required patterns (1 FRIEND per archetype, 3+ triangles, etc.) +- **Cultural consistency checking** — NPC naming follows their cultural group's phonological rules +- **Bidirectional relationship validation** — if NPC A knows NPC B, NPC B's `known_by` includes NPC A (extended from the PC-candidate spec to all NPCs at scale) + +### Mod Support: Narrative Constraints + +Modders can create new districts, new cultural groups, new NPC patterns. But the mod system must enforce narrative constraints: + +- A mod district declares its cultural group (from the canonical list, or defines a new one) +- A mod district declares its moral texture +- A mod district must pass pattern completeness checks +- A mod can ADD soft references to base content but cannot MODIFY base district content +- A mod can create new faction-level content that integrates with existing faction structures via MERGE operations (Tyre's proposal) + +### Proposal 4: Four-Scope Content Hierarchy + +The content directory uses four scopes (universal/faction/system/district) with explicit cross-reference types (soft/hard/migration). Schema validation enforces completeness and consistency. Mod overlays operate at the district scope by default with controlled access to higher scopes. + +--- + +## 5. Randomization Philosophy + +This is where narrative and systems collide most violently. Let me lay out the tension honestly. + +### The Fundamental Tension + +**Randomization creates replayability.** Nigel is right — if every playthrough is the same, the game dies after two runs. + +**Authored content creates emotional impact.** Mellanie is right — THE FRIEND's contradiction arc only hits if the lines are hand-crafted. + +**You cannot have both at maximum.** The more you randomize, the less you can author. The more you author, the less you can randomize. Every design decision in this space is a trade-off. + +### What Gets Randomized (Structural Axes) + +These are set at game start and don't change during play: + +| Axis | What Varies | What Doesn't | Replayability Impact | +|------|-------------|--------------|---------------------| +| **FRIEND selection** | Which NPC from the FRIEND pool fills the role | The FRIEND pattern itself (5-phase arc, contradiction, authored lines) | High — different person, different emotional attachment | +| **Contraband type** | What's being smuggled/investigated (from district options) | The fact that something IS being smuggled | Medium — different moral weight, different investigation vectors | +| **Entanglement assignment** | Which mundane NPCs get pulled into the story | The 30/50/20 ratio, the existence of mundane life | High — different playthroughs contaminate different people | +| **Triangle configuration** | Which optional triangles activate, which NPCs fill roles | Required triangles always fire, minimum triangle count | Medium — different social tensions each time | +| **PC-candidate selection** | Which NPC becomes the PC (from archetype pool) | The archetype's agency boundaries, knowledge vocabulary | High — different starting relationships, different social terrain | +| **Arrival timing** | When THE CATALYST arrives, when story beats escalate | The existence of escalation, the existence of the catalyst | Medium — different pacing each playthrough | +| **Cultural minority** | Which non-dominant cultural groups are present in this district instance | The dominant culture, the district's character | Low-Medium — adds flavor variation without changing structure | + +### What NEVER Gets Randomized + +- **The moral texture of a district** — Sova is always about complicity. A frontier district is always about sacrifice. This is the author's declaration. +- **The pattern composition** — every district always has a FRIEND, triangles, social sites, the population split +- **Authored content** — THE FRIEND's authored lines play as written. No generation pass on Tier 1. The voice is the voice. +- **Cultural group mechanics** — the trust defaults, authority response, privacy norms of a cultural group are fixed. They're part of the setting, not a variable. + +### The Pool Model at Scale + +The key insight from v0.1: THE FRIEND isn't a single NPC. It's a **pattern** filled by one NPC from a **pool**. At scale: + +- Each district has a FRIEND pool of 2-4 candidate NPCs per supported archetype +- Each candidate has the FULL Tier 1 content — all authored lines, full contradiction arc, complete B1-B7 PC-candidate appendix +- The randomizer selects ONE candidate per archetype per playthrough +- Non-selected candidates become regular Tier 2 NPCs (their FRIEND content is dormant, not absent — they still have authored lines that can surface in other contexts) +- This means: a FRIEND pool of 3 candidates per archetype costs 3x Tier 1 authoring. Expensive. But it buys fundamental replayability. + +**The math gets serious.** If each district has 2 archetypes with 3 FRIEND candidates each = 6 Tier 1 NPCs per district. At 20 districts = 120 Tier 1 NPCs. At 70-100 authored lines each = 8,400-12,000 hand-authored Tier 1 lines. This is the single largest content investment in the game. It must be budgeted explicitly and cannot be generated. + +### Randomization as Narrative Tool + +The honest truth: randomization isn't just a replayability technique. It's a NARRATIVE technique. When the player discovers that their FRIEND in playthrough 2 is a DIFFERENT person than in playthrough 1, that's a statement about the game's world — this community is full of people who COULD be your closest connection, and circumstance determines which one becomes it. That's entanglement as theme, expressed through randomization. + +### Proposal 5: Randomization Charter + +Document the full randomization philosophy as a design charter: what varies, what doesn't, the pool model for pattern NPCs, the cost implications, and the narrative justification. This charter is referenced by every content author to understand what they're writing for (single-use vs. pool candidate). + +--- + +## 6. PC-as-NPC at Full Scale + +v0.1 has 2 PC archetypes: smuggler and detective. The full game needs more — but how many, and what do they look like? + +### Archetype Design Principles + +A PC archetype isn't just "a job." It's a **relationship to the district's moral texture**. The smuggler isn't just a criminal — the smuggler is someone whose daily life IS the moral texture (complicity). The detective isn't just an investigator — the detective is someone who examines the moral texture from outside. + +This gives us the design principle: **every archetype is a LENS on the same district**. Two archetypes seeing the same district should produce fundamentally different games (D-027 criterion #2). + +### Proposed Archetype Library + +| Archetype | Relationship to Moral Texture | Knowledge Vocabulary | Unique Gameplay Loop | Best In | +|-----------|------------------------------|---------------------|---------------------|---------| +| **Smuggler** | Inside the complicity | operational_status, exposure_risk, loyalty_read, complicity_level | Manage exposure, protect people, balance profit vs safety | Complicity, Silence | +| **Investigator** | Examining the texture from institutional authority | behavior_flags, contradiction_flagged, evidence_strength, case_progress | Observe, document, build case, decide who to pursue | All textures (universal) | +| **Merchant** | Economically entangled with the texture | trade_reputation, debt_owed, supply_dependency, price_leverage | Navigate economic webs, manage debts, choose profit vs relationships | Obligation, Compromise | +| **Engineer** | Maintaining the infrastructure the texture depends on | system_access, repair_knowledge, infrastructure_vulnerability, sabotage_potential | Fix or break things, control physical access, discover infrastructure secrets | Sacrifice, Legacy | +| **Administrator** | Managing the texture's political expression | faction_standing, favor_owed, policy_leverage, constituency_trust | Broker deals, manage factions, enforce or bend rules | Compromise, Loyalty | +| **Medic** | Treating the texture's human cost | patient_status, medical_confidentiality, treatment_access, triage_priority | Heal people, protect patient secrets, decide who gets scarce resources | Sacrifice, Obligation | +| **Journalist** | Exposing the texture to outside scrutiny | source_reliability, story_progress, publication_risk, source_protection | Gather information, protect sources, decide what to publish | Silence, Legacy | +| **Newcomer** | Discovering the texture from zero knowledge | local_knowledge, cultural_fluency, social_integration, outsider_perception | Learn everything from scratch, build trust from nothing, see what insiders can't | Exile, any texture with insular dynamics | + +### Not Every Archetype Appears Everywhere + +Each district supports 2-4 archetypes based on its moral texture and institutional landscape. The supported archetypes are declared in the district definition: + +```yaml +district: + name: "Sova Transit District" + moral_texture: "complicity" + supported_archetypes: + - smuggler # insider + - investigator # outsider authority + optional_archetypes: + - merchant # if trade focus emphasizes economic angle +``` + +Some archetypes are **universal** (Investigator works everywhere — there's always something to investigate). Others are **specialized** (Medic only works in districts where healthcare access is narratively relevant). + +### PC-Candidate Pool at Scale + +For each supported archetype, the district has 2-4 PC-candidate NPCs. The math: + +| | Per District | 20 Districts | Authoring Cost | +|-|-------------|-------------|----------------| +| Archetypes supported | 2-4 | 40-80 archetype slots | — | +| PC-candidates per archetype | 2-3 | 80-240 candidates | B1-B7 appendix each | +| Unique candidates (deduplicated) | 4-8 | 80-160 (some overlap) | Full Tier 1 or Tier 2 + appendix | + +The honest truth: 80-160 PC-candidate NPCs is a massive content commitment. Each needs the full B1-B7 appendix (starting knowledge, reverse knowledge, orientation monologue, agency boundaries, relationship stubs, tell inversion). This is where pipeline efficiency becomes critical (see section 7). + +### Archetype Voice Differentiation + +The deepest challenge at scale: each archetype needs a distinct internal voice. The smuggler's monologue is relational ("I feel, I read, I manage"). The detective's is analytical ("I notice, I flag, I investigate"). At 8 archetypes, we need 8 distinct monologue voices: + +| Archetype | Monologue Voice | Notices | Worries About | Can't Stop Thinking About | +|-----------|----------------|---------|---------------|--------------------------| +| Smuggler | Relational, protective | Social dynamics, trust shifts | Exposure, loyalty fractures | The people who depend on them | +| Investigator | Analytical, methodical | Behavioral anomalies, patterns | Missing evidence, false leads | What they haven't seen yet | +| Merchant | Transactional, pragmatic | Economic signals, debt patterns | Bad deals, broken supply chains | The price of everything | +| Engineer | Structural, systemic | Infrastructure state, failure points | System collapse, access loss | How things connect | +| Administrator | Political, calculating | Power dynamics, faction moves | Losing influence, constituency anger | Who wants what from whom | +| Medic | Empathetic, diagnostic | Physical symptoms, distress signs | Patient outcomes, resource scarcity | The people they couldn't help | +| Journalist | Curious, skeptical | Inconsistencies, evasions | Source safety, story accuracy | The story behind the story | +| Newcomer | Observational, uncertain | Cultural norms, social rules | Belonging, making mistakes | What everyone else seems to know | + +### Proposal 6: Archetype Specification Standard + +Each archetype gets a formal specification including: relationship to moral textures, knowledge vocabulary (entity attributes + FactIds), monologue voice guide, agency boundaries, supported district types, and PC-candidate pool requirements. The archetype spec is the authoring bible for all PC-candidate content in that archetype. + +--- + +## 7. The Authoring Pipeline at Scale + +Let me do the math honestly, then propose how to make it survivable. + +### The Numbers + +**NPCs per district** (average): +- 2 Tier 1 FRIEND candidates per archetype × 2.5 archetypes = 5 Tier 1 +- 1 Tier 1.5 (ANCHOR or emotional NPC) = 1 +- 8-12 Tier 2 (triangles, social sites, pattern NPCs) = 10 +- 5-10 Tier 3 (flat population, background) = 7 +- **Total per district: ~23 NPCs** + +**Full game** (20 districts): +- ~100 Tier 1 NPCs × 80 authored lines avg = **8,000 Tier 1 lines** (all hand-authored, no generation) +- ~20 Tier 1.5 NPCs × 60 authored lines avg = **1,200 Tier 1.5 lines** (hand-authored, minimal generation) +- ~200 Tier 2 NPCs × 50 authored lines avg = **10,000 Tier 2 lines** (hand-authored, 4x generation → 40,000 total) +- ~140 Tier 3 NPCs × 12 authored lines avg = **1,680 Tier 3 lines** (hand-authored, 4x generation → 6,720 total) +- **Total hand-authored: ~20,880 lines** +- **Total after generation: ~55,920 lines** +- **PC-candidate appendixes: ~120 candidates × B1-B7** + +This is a serious body of work. For context: a typical AAA RPG has 100,000-300,000 words of dialogue. At ~10 words per line, our 56,000 lines = ~560,000 words. We're in the range of a large RPG, which is appropriate for a game about social interaction — but it requires industrial-grade authoring infrastructure. + +### Pipeline Phases + +**Phase 1: District Design (Lead Author)** +One lead author per district. They produce: +- District definition (moral texture, supported archetypes, cultural group) +- Pattern assignment (which patterns this district uses) +- Triangle design (the specific conflicts) +- NPC roster (who fills what role) +- The FRIEND brief (full character concept for each FRIEND candidate) + +**Phase 2: NPC Authoring (Writing Team)** +2-3 writers per district, supervised by the lead author. They produce: +- NPC profiles (following tier templates from the style guide) +- Dialogue line pools (tagged YAML, following the converged taxonomy) +- Monologue pools (per-character, per-location) +- Environmental text (rosters, manifests, bar tabs, kiosk entries) +- PC-candidate appendixes (for candidate NPCs) + +**Phase 3: Generation Pass (Tooling)** +Automated expansion of authored content: +- Tier 2 lines: authored 50 → generated 200 (4x) +- Tier 3 lines: authored 12 → generated 48 (4x) +- Tier 1 and 1.5: NO generation. All hand-authored. +- Generation follows trait transformation guides (per template) +- All generated lines tagged with `generated: true` for review + +**Phase 4: Cross-Reference Validation (Automated)** +Schema validation catches: +- Missing FactId references +- Broken bidirectional relationships +- Incomplete pattern composition +- Cultural naming violations +- Cross-district reference integrity + +**Phase 5: Voice Consistency Review (Senior Authors)** +Human review catches what automation can't: +- Does this NPC sound like a person? +- Does the FRIEND's contradiction arc actually feel like betrayal? +- Does the moral texture come through in daily dialogue? +- Does the dual-lens actually produce different experiences? + +**Phase 6: Playtest Integration (QA + Line Previewer)** +The line previewer CLI (D-028) becomes the primary testing tool: +- Simulated conversations with randomized state +- Verify that trust gates work (surface → real → secret progression) +- Verify that dual-lens content diverges correctly +- Verify that orientation monologue fires in the right order +- Full district playthrough (30-minute target) with both archetypes + +### Scaling the Team + +For 20 districts over a multi-year development: + +| Role | Count | Responsibility | +|------|-------|---------------| +| **Content Director** | 1 | Overall narrative coherence, moral texture assignments, archetype consistency | +| **District Lead Authors** | 4-5 (rotating across districts) | District design, FRIEND writing, NPC roster, quality gate | +| **NPC Writers** | 8-12 | Dialogue pools, monologue pools, environmental text, following templates | +| **Cultural Consultants** | 2-3 | Cultural group briefs, naming validation, mechanical parameter tuning | +| **Generation QA** | 2-3 | Review generated content, flag quality issues, tune generation parameters | +| **Cross-Reference Validator** | 1-2 (primarily automated) | Run validation pipeline, resolve broken references, maintain consistency | + +This is a team of ~18-25 content professionals at peak production. Not unprecedented for a narrative-heavy game, but significant. The pipeline tooling — schema validators, line previewer, generation system, cross-reference checker — is load-bearing. Without it, this team produces inconsistent content. With it, the templates and validation enforce quality at scale. + +### The DLC Pipeline + +DLC adds new districts following the same pipeline. The content directory's four-scope hierarchy means a DLC district: +1. Inherits universal content (patterns, archetypes, tag taxonomies) +2. Inherits faction content (if the faction exists in base game) +3. May introduce a new system (requires system-level brief) or join an existing one +4. Produces self-contained district content following the same templates +5. Optionally introduces new cultural groups, new archetypes, or new NPC patterns +6. Passes the same validation pipeline as base content + +The honest truth: the pipeline I'm describing is a **content management system**, not just a set of templates. It needs tooling investment comparable to the game engine itself. But the alternative — unstructured authoring at this scale — produces inconsistent, unvalidatable, unmaintainable content. The structure IS the quality. + +### Proposal 7: Authoring Pipeline Architecture Document + +Write a full authoring pipeline specification covering: district design workflow, NPC authoring workflow, generation pass protocol, validation pipeline, voice review checklist, playtest integration, team structure, and DLC extension protocol. This document is the content team's equivalent of the technical architecture doc. + +--- + +## Summary of Long-Term Proposals + +| # | Proposal | Scope | Dependencies | +|---|----------|-------|-------------| +| 1 | Each district declares a moral texture from a defined vocabulary | Universal | None — design declaration | +| 2 | Cultural group briefs as mechanical specifications (9-13 groups) | Universal | Miri (generation), Paula (validation), Gestalt (parameters) | +| 3 | Formal NPC pattern library (FRIEND, MIRROR, ANCHOR, SYSTEM, GHOST, CATALYST) | Universal | Pattern specs need authoring after team review | +| 4 | Four-scope content hierarchy (universal/faction/system/district) | Architecture | Tyre (directory structure), validation tooling | +| 5 | Randomization charter documenting what varies, what doesn't, and the pool model | Universal | Team consensus on axes | +| 6 | Archetype specification standard (8 archetypes with formal specs) | Universal | Knowledge vocabulary per archetype | +| 7 | Authoring pipeline architecture document | Process | Tooling investment, team structure decisions | + +### The Thread That Connects Everything + +Every proposal above serves one principle: **The Settled Reach is a game about what it costs to be connected to other people.** Moral textures are how districts express that theme. Cultural groups are how communities shape that cost. NPC patterns are how individual characters embody it. The content directory preserves it across hundreds of files. Randomization ensures players experience it differently each time. Archetypes are the lenses through which players see it. And the pipeline is how we produce it without losing the human voice that makes it matter. + +The game at scale isn't 20 copies of Sova. It's 20 communities, each asking "Is this enough?" in their own language, through their own culture, about their own version of entanglement. The player moves between them and slowly realizes: this question has no final answer. That's the game. diff --git a/docs/workshops/wiki-review/round3-si.md b/docs/workshops/wiki-review/round3-si.md new file mode 100644 index 000000000..97204996d --- /dev/null +++ b/docs/workshops/wiki-review/round3-si.md @@ -0,0 +1,295 @@ +# Round 3 — SI (Project Manager) + +Long-term content strategy from the production perspective. I don't design — I plan delivery. Here's what I see when I look at 20+ districts, 300+ NPCs, and years of content. + +--- + +## 1. Complicity as Theme — The Production Implication + +Whether complicity is the whole game or Sova's local flavor is a design question. The production question is: **does a per-district thematic variation change the authoring pipeline?** + +If every district is a complicity story, we can templatize hard. The FRIEND pattern, the MIRROR pattern, the triangle structures, the moral arc — all reusable across districts with different setting skins. One pipeline, one set of validation tools, one style guide. Authors learn the system once. + +If each district has its own thematic texture (Sova = complicity, District B = loyalty, District C = survival), then each district needs: +- Its own moral arc vocabulary (complicity.cost_to_hael equivalents per theme) +- Its own monologue trigger set (moral_pang works for complicity — what triggers for a loyalty-themed district?) +- Its own PC experience framework +- Potentially its own NPC patterns beyond FRIEND/MIRROR + +That's a significantly harder pipeline. Not impossible — but the authoring cost per district rises because less is reusable. + +**My recommendation:** Use a hybrid. Define a **thematic palette** — 4-6 moral textures that the game explores. Each district draws from 1-2 of these. The vocabulary for each texture is defined once at the global level. Districts compose from the palette rather than inventing from scratch. + +This is the content equivalent of Gestalt's social site templates — authored building blocks, combinatorially composed. The moral arc phases (Comfort → Doubt → Reckoning → Compromise) might be universal, but what fills each phase varies by thematic texture. + +--- + +## 2. Cultural Groups — Production Planning + +Miri delivered one cultural brief in ~4 hours of workshop time. That brief is excellent and thorough. At that depth, one brief per cultural group means: + +| Scale | Cultural Groups | Miri-Hours | Calendar Time (1 Miri) | +|-------|----------------|------------|----------------------| +| v0.1 | 1 (Krenn) | ~4h | Done | +| v0.2 | 3-4 | ~12-16h | 1-2 weeks | +| v1.0 | 8-12 | ~32-48h | 4-6 weeks | +| Full game | 15-25 | ~60-100h | 2-3 months | + +This is manageable IF: +1. The regional template (_template.md) is locked and validated from v0.1 +2. Miri produces the briefs in batches of 3-4 per release +3. Each brief goes through a single-pass review (not a multi-round workshop) +4. Heritage research is front-loaded — Miri builds a master heritage map once, then writes individual briefs from it + +**The master heritage map** is the key long-term asset. A document that shows: which Earth cultural clusters settled where, how they mixed, what 180 years of drift produced. From this map, individual briefs are derivations, not inventions. Miri should build this map BEFORE writing the next brief. + +**Production sequence:** +1. Master heritage map (Miri, ~2 days) +2. Cultural briefs in release batches, prioritized by which districts are in the next sprint +3. Naming generation pools per cultural group (reusable for NPC generation) + +--- + +## 3. Content Patterns — What Scales and What Doesn't + +From the production management perspective, I'm categorizing every pattern by **reuse ratio** — how many times it gets instantiated vs. how much it costs to define. + +### High reuse (define once, instantiate everywhere) + +| Pattern | Definition Cost | Instantiation Cost | Reuse Ratio | +|---------|----------------|-------------------|-------------| +| Tier 2 NPC template | Already defined | 4-6 hours per NPC | 1:300+ | +| Tier 3 NPC template | Already defined | 0.5-1 hour per NPC | 1:1000+ | +| Social site template structure | Already defined | 2-3 hours per site | 1:60+ | +| Triangle structure | Already defined | 1-2 hours per triangle | 1:100+ | +| Dialogue tag taxonomy (D-035) | Already defined | 0 per district | 1:∞ | +| Pool-based randomization | Already defined | 30min per pool | 1:60+ | + +### Medium reuse (define per category, instantiate per district) + +| Pattern | Definition Cost | Instantiation Cost | Reuse Ratio | +|---------|----------------|-------------------|-------------| +| Cultural brief | ~4 hours | 0 per district in that culture | 1:3-5 districts | +| Thematic texture vocabulary | ~2-3 hours per texture | 1 hour integration per district | 1:5-10 | +| PC archetype | ~8-12 hours | ~4 hours per district variant | 1:10-20 | +| FRIEND pool expansion | 15-22 hours per candidate | 0 (one-time) | 1:1 | + +### Low reuse (unique per district) + +| Pattern | Definition Cost | Instantiation Cost | Reuse Ratio | +|---------|----------------|-------------------|-------------| +| THE FRIEND candidate | 15-22 hours each | N/A | 1:1 | +| THE MIRROR candidate | 10-15 hours each | N/A | 1:1 | +| Tier 1 contradiction arc | 8-12 hours | N/A | 1:1 | +| District-specific FactIds | 2-3 hours per district | N/A | 1:1 | +| Environmental text (Krenn-specific) | 4-6 hours per district | N/A | 1:1 | + +**The bottleneck is clear: Tier 1 content.** Everything else scales through templates and generation. THE FRIEND and THE MIRROR are 15-22 hours of irreducible authored content per instance. At 2-3 FRIENDs per district and 1 MIRROR per district, that's 45-80 hours of Tier 1 authoring per district. + +**For 20 districts: 900-1600 hours of Tier 1 content alone.** That's 6-10 months of a single full-time writer. With 2-3 writers in parallel: 3-4 months. This is the critical path for content delivery. + +--- + +## 4. The Authoring Pipeline at Scale + +### The math + +| Content Type | Per District | 20 Districts | Hours Each | Total Hours | +|-------------|-------------|-------------|-----------|-------------| +| Tier 1 NPCs (FRIEND + MIRROR) | 3-4 | 60-80 | 15-22h | 900-1760 | +| Tier 2 NPCs | 8-12 | 160-240 | 4-6h | 640-1440 | +| Tier 3 NPCs | 5-10 | 100-200 | 0.5-1h | 50-200 | +| Social site templates | 3-5 | 60-100 | 2-3h | 120-300 | +| Triangles | 4-6 | 80-120 | 1-2h | 80-240 | +| Environmental text | 1 set | 20 sets | 4-6h | 80-120 | +| Cultural integration | 1 pass | 20 passes | 2-3h | 40-60 | +| **Total** | | | | **1910-4120** | + +That's 1-2 person-years of content authoring. For a game this size, that's actually modest — but only if the pipeline is efficient. + +### The pipeline model + +**Phase 1: Foundation (one-time)** +- Master heritage map +- Thematic palette (4-6 moral textures) +- All templates locked (Tier 1/1.5/2/3, social site, triangle, pool) +- Content directory structure finalized +- Schema validation working +- Generation tools built (Tier 3 generator, line expansion tool) + +**Phase 2: Per-district production (repeating)** +1. **District brief** (Miri, 1 day) — setting, culture reference, social sites, key NPCs +2. **Content skeleton** (tooling, 1 hour) — auto-generate directory structure, empty YAML stubs +3. **Tier 2 NPCs** (Paula + Mellanie, 3-5 days per district) — working profiles, dialogue, monologue +4. **Tier 1 NPCs** (Paula primary, 5-8 days per district) — FRIEND candidates, MIRROR candidate, full arcs +5. **Tier 3 generation** (tooling, 1 day) — procedural NPCs from templates + cultural brief +6. **Line expansion** (tooling + Mellanie review, 2-3 days) — write 10, generate 40, review 40 +7. **Validation pass** (tooling + Hoshe, 1 day) — schema validation, cross-reference check, playtest +8. **Integration** (Dudley, 1-2 days) — wire into engine, test in context + +**Per-district cycle: 2-3 weeks with 2-3 parallel writers.** At that rate, 20 districts = 40-60 weeks = 10-15 months. That's a realistic production timeline for content. + +### The large content push pattern (from CLAUDE.md) + +For batch district production, use the pattern already documented: +1. **Lore librarian** (Miri, read-only) — answers context queries, tracks cross-district consistency +2. **Multiple writers** (Paula, Mellanie, future agents, parallel by district) — write directly to disk +3. **Reviewer** (Hoshe + schema validation) — voice consistency, attribute uniformity + +This pattern parallelizes naturally. Districts are independent content units. Two writers can produce two districts simultaneously without interference, as long as the librarian catches cross-references. + +--- + +## 5. Tooling Requirements + +The pipeline above requires tooling that doesn't exist yet. Here's the tooling roadmap: + +### Must-have (before scaling past v0.1) + +| Tool | Purpose | Owner | +|------|---------|-------| +| `make validate-content` | Schema validation for all YAML | Server team (Tyre) | +| NPC skeleton generator | Given a district brief, generate empty NPC YAML stubs with correct structure | Server team | +| Line ID allocator | Assign sequential line IDs per location/character to prevent collisions | Server team | +| FactId registry | Central registry with collision detection across districts | Server team | + +### Should-have (before scaling past v0.2) + +| Tool | Purpose | Owner | +|------|---------|-------| +| Tier 3 NPC generator | Produce complete Tier 3 NPCs from template + cultural brief + seed | Server team | +| Line expansion tool | Write 10 authored lines → generate 40 variants at matching voice/style | Server team | +| Line previewer CLI (D-028) | Play back dialogue/monologue lines in context for authoring review | Server team | +| Cross-reference validator | Verify all NPC references, FactId references, location slugs resolve | Server team | +| Bidirectional knowledge checker | Verify PC←→NPC knowledge graph consistency | Server team | + +### Nice-to-have (quality of life) + +| Tool | Purpose | Owner | +|------|---------|-------| +| District dashboard | Show content completion % per district (NPCs, lines, validation status) | CI team | +| Content diff tool | Show what changed between content versions for review | CI team | +| Voice consistency checker | Flag lines that break character voice patterns | Server team | + +--- + +## 6. Content Directory Long-Term Requirements + +Tyre and Gestalt's structure handles 20+ districts IF these constraints hold: + +### What scales naturally +- `districts/{slug}/` — one directory per district, independent, no cross-contamination +- `global/` — shared vocabulary grows slowly (factions, technology, enums) +- `_schema/` — schemas evolve but don't multiply (one npc.schema.yaml handles all tiers) +- Mod overlay (ADD/REPLACE/MERGE) — works at any scale + +### What needs attention at scale +- **Global facts vs district facts** (Gestalt's split) — essential. Without this, the global facts.yaml becomes a dump of hundreds of district-specific entries. +- **Cross-district references** — NPCs who appear in multiple districts (e.g., a Commission investigator who moves between postings). The canonical_id system handles this, but the content loader needs to resolve cross-district references. +- **DLC packaging** — a DLC is a set of new districts + new global content (factions, cultural groups, technology). The content directory needs a DLC manifest format that declares what it adds. This extends Tyre's `_meta/manifest.yaml`. +- **Content versioning** — when a DLC changes a global faction's description, that's a REPLACE. When it adds a new faction, that's an ADD. When it adds NPCs to an existing district's pools, that's a MERGE. All three operations on the same DLC. The load order matters. + +### The "galaxy map" question + +At 20+ districts across multiple star systems, the content directory needs a spatial index: + +``` +content/ + global/ + galaxy/ + systems.yaml # All star systems, coordinates, gate connections + routes.yaml # Travel routes between systems + districts/ + sova-transit/ # Krenn System + vael-docks/ # Vael System + prime-central/ # Krenn Prime (surface) +``` + +Each district YAML includes its system and station reference. The galaxy index is global — it's the map. Districts are the content. The separation is clean. + +--- + +## 7. Randomization at Full Scale + +Nigel's axes for Sova (FRIEND, compromised NPC, secondary contraband, entanglement map) are the right starting set. At full scale: + +### Axes that work across all districts +- **FRIEND selection** — every district has a FRIEND pool per PC archetype +- **Who's compromised** — per-district role slot randomization +- **Social site population** — which NPCs fill which slots +- **Entanglement ratio** — D-029's 30/50/20 with per-seed variance + +### Axes that emerge at scale +- **District assignment** — which district does the player start in? (if the game has multiple starting locations) +- **Cross-district connections** — which NPCs have off-screen connections to other districts? +- **Faction pressure** — which faction is dominant in this seed? (shifts the political landscape) +- **Economic conditions** — is the district in a boom or bust? (shifts NPC contentment baselines) +- **Temporal variation** — does the game start on day 1 of a Commission inspection, or 3 weeks in? (shifts urgency) + +The pool system Tyre designed handles all of these. Pools are general-purpose: declare candidates, declare selection count, draw at seed time. Any axis of variation is just another pool. + +**The production constraint:** Each axis of variation multiplies the content that needs authoring. 3 FRIEND candidates × 2 PC archetypes × 3 starting conditions = 18 configurations to validate. At scale, combinatorial testing becomes the bottleneck. Hoshe needs automated playthrough simulation before we can ship more than ~5 active variation axes per district. + +--- + +## 8. PC Archetypes at Full Scale + +v0.1 has 2 PC archetypes (smuggler, detective). At full scale: + +### How many archetypes? + +Each archetype needs: +- A distinct relationship to the game's themes +- A distinct knowledge starting position +- A distinct social position in every district where it's playable +- A distinct monologue voice +- PC upgrade specs for every district's NPC roster + +The authoring cost per archetype is roughly: voice card (once) + moral arc (once) + per-district PC-candidate NPCs (per district) + per-district monologue pool (per district). + +| Archetype Count | Voice/Arc Cost (one-time) | Per-District Cost | 20 Districts Total | +|----------------|--------------------------|-------------------|-------------------| +| 2 (current) | ~30h | ~20h × 2 = 40h | 800h | +| 4 | ~60h | ~20h × 4 = 80h | 1660h | +| 6 | ~90h | ~20h × 6 = 120h | 2490h | + +**My recommendation: 4 archetypes for v1.0.** Two more beyond smuggler/detective. Each adds a new lens on the same world. Candidates should be chosen to maximize thematic coverage — the two new archetypes should explore parts of the moral landscape that smuggler and detective don't reach. + +**Production strategy:** Design all 4 archetypes early (so the world is built with all 4 in mind). Implement 2 for v0.1-v0.2. Add the 3rd for v0.3-v0.4. Add the 4th for v1.0. Each archetype launch includes retroactive content for all existing districts. + +--- + +## 9. Release Cadence Model + +Putting it all together into a release plan: + +| Release | Districts | PC Archetypes | FRIEND Pool | Cultural Groups | Content Hours | +|---------|-----------|--------------|-------------|----------------|--------------| +| v0.1 | 1 (Sova Transit) | 2 | 1 per character | 1 (Krenn) | ~200h (done) | +| v0.2 | 3 (+ 2 new) | 2 | 2 per character | 3 | ~600h | +| v0.3 | 6 (+ 3 new) | 3 (+ 1 new) | 2-3 per character | 5 | ~900h | +| v0.4 | 10 (+ 4 new) | 3 | 3 per character | 7 | ~800h | +| v1.0 | 15+ (+ 5 new) | 4 (+ 1 new) | 3-4 per character | 10+ | ~1000h | +| DLC | +3-5 per DLC | 4 | +1 per character per DLC | +1-2 per DLC | ~400-600h | + +**Critical path per release:** Tier 1 content (FRIEND/MIRROR authoring) → Tier 2 content → Tier 3 generation → validation → integration. Tier 1 is always the bottleneck. + +**Writer scaling:** v0.1 works with the current team (Paula + Mellanie). v0.2 needs a third writer. v0.3+ needs 3-4 parallel writers. The large content push pattern handles this. + +--- + +## Summary + +The long-term content strategy has three pillars: + +1. **Template everything that can be templatized.** Tier templates, social site templates, triangle structures, pool definitions, cultural brief patterns — define once, instantiate hundreds of times. + +2. **Protect the irreducible.** Tier 1 content (FRIEND arcs, MIRROR characters, contradiction beats) cannot be generated. Budget for it explicitly. It's the bottleneck and the thing that makes the game work. + +3. **Build the pipeline before scaling.** Schema validation, generation tools, line expansion, content dashboards — all of this must exist before we attempt district 2. The investment in tooling pays back 20x across the full game. + +The content directory structure Tyre/Gestalt designed is sound for the full game. The patterns from Sova (triangles, FRIEND, MIRROR, pools) are universal templates. The cultural brief system scales with Miri's heritage map approach. The authoring pipeline is the constraint — and it's a solvable constraint with the right tooling and writer scaling. + +--- + +*SI out. The plan is executable. The numbers work. The tooling list is the critical dependency.* diff --git a/docs/workshops/wiki-review/round3-tracking.md b/docs/workshops/wiki-review/round3-tracking.md new file mode 100644 index 000000000..bede625e3 --- /dev/null +++ b/docs/workshops/wiki-review/round3-tracking.md @@ -0,0 +1,109 @@ +# Round 3 Tracking — Long-Term Content Strategy + +**Round focus:** Long-term vision only. No v0.1 scoping. "What does the full game look like?" + +**All 9 contributors responded** (8 design + SI production). Tyre's response was last. + +--- + +## Theme Proposals + +| Agent | Proposed Universal Theme | +|-------|--------------------------| +| Gore | "Cost of participation" — complicity is Sova-local | +| Mellanie | "Collective bargain" — each district has one, player inherits a position | +| Ozzie | "What do you owe the people around you?" — different voice per district | +| Miri | "What do systems do to people inside them?" — system failure modes vary | +| Nigel | Complicity scales — same question, different currencies | +| Paula | "Cost of connection / entanglement" | +| Gestalt | "Knowledge as burden" — moral texture emerges from config | +| Tyre | Theme-agnostic moral engine — theme as data, not code | +| SI | "Thematic palette over monolith" — 4-6 moral textures, districts compose | + +**Consensus:** Complicity is Sova-local. The universal theme is structural but unnamed. All framings are facets of the same insight. Lead has not picked canonical framing yet. + +--- + +## Cultural Groups — Round 3 Proposals + +| Agent | Count | Organizing Principle | +|-------|-------|---------------------| +| Miri | 8-10 | Settlement motivation + economic function | +| Gore | 7 | Civilizational philosophy | +| Gestalt | 6-8 | Heritage cluster with mechanical parameters | +| Mellanie | 6 max | Cultural register (voice constraint) | +| Ozzie | 8-12 | Player-facing feel | +| Paula | 9-13 | Mechanical parameters | +| Tyre | ~25 eventually | Reference data with distance model | + +**Key tension identified:** Heritage (ethnic roots) vs. settlement type (economic function) are two different axes being called the same thing. + +--- + +## Content Patterns + +| Agent | Patterns Proposed | +|-------|-------------------| +| Gore (7) | FRIEND, MIRROR, ANCHOR, GHOST, CATALYST, THRESHOLD, REMNANT | +| Paula (5) | MIRROR, ANCHOR, SYSTEM, GHOST, CATALYST | +| Nigel (8) | FRIEND, MIRROR, HANDLER, WITNESS, TURNCOAT, CIVILIAN, OPERATOR, SKEPTIC | + +**Key tension:** Gore/Paula think thematically (story role). Nigel thinks functionally (gameplay role). Both valid. + +--- + +## PC Archetypes + +| Agent | Count | Specific Archetypes | +|-------|-------|---------------------| +| Gore | 8 | Worker, Investigator, Operator, Wanderer, Builder, Seeker, Guardian, Rebel | +| Ozzie | 6 | Operator, Investigator, Newcomer, Fixer, Believer, Remnant | +| Miri | 2 universal + regional | Insider/Outsider + per-region specifics | +| Nigel | 5 | Smuggler, Detective, Administrator, Newcomer, Enforcer | +| Paula | 8 | Smuggler, Investigator, Merchant, Engineer, Administrator, Medic, Journalist, Newcomer | +| Gestalt | 6 | Smuggler, Detective, Politician, Guardian, Merchant, Civilian | +| Mellanie | 6 | Smuggler, Detective, Fixer, Medic, Newcomer, Elder | +| Tyre | 4 (v1.0 cap) | Not enumerated | +| SI | 4 | Not enumerated | + +**Recurring:** Insider/Smuggler (all), Investigator/Detective (all), Newcomer (5 agents), Administrator (4), Merchant/Fixer (4), Guardian/Enforcer (3). + +--- + +## Randomization + +**Nigel's Sacred/Profane/Middle Kingdom framework** received broad support: +- Sacred = world physics (never randomize) +- Profane = pool-selected per seed +- Middle Kingdom = sacred structure, profane cast + +**Gestalt's 4 tiers:** Structural, Dramatic, Local, Meta. +**Tyre:** "Randomize social, fix spatial." +**Gore:** Shuffle WHY the conspiracy exists as deepest lever. + +--- + +## Scale + +| Agent | District Count | NPCs | Key Constraint | +|-------|---------------|------|----------------| +| SI | 20 | 300+ | 1-2 person-years, Tier 1 is bottleneck | +| Paula | 20 | ~460 | ~21K hand-authored lines | +| Mellanie | 20 | — | 6 cultural registers max in production | +| Gestalt | 30+ | — | 8-12 weeks per district | +| Tyre | 20 | — | 15-20 sprints platform, 9-11 sprints tooling | + +**Note:** These were all calculated at 20-district scale. The lead subsequently reframed to 300 worlds, fundamentally changing the production model from "hand-author districts" to "build generators fed by style briefs." + +--- + +## Key Cross-Cutting Insights + +1. **Regional brief is the most important document** (Miri, endorsed by all) +2. **Template system IS the game; regional brief IS the content** (Miri) +3. **"Randomize context, author content"** (universal consensus) +4. **Tooling before scale** (SI, Tyre, universal) +5. **Cultural diversity = anti-metagaming** (Nigel) +6. **LLM-assisted Tier 2 expansion** (Tyre) — write 10, generate 40 +7. **Paired authoring teams** (Mellanie) — cultural + character specialist +8. **Moral texture as deepest randomization lever** (Gore) diff --git a/docs/workshops/wiki-review/round3-tyre.md b/docs/workshops/wiki-review/round3-tyre.md new file mode 100644 index 000000000..73104c38c --- /dev/null +++ b/docs/workshops/wiki-review/round3-tyre.md @@ -0,0 +1,775 @@ +# Round 3 — Tyre (Technical Architect) + +Long-term content strategy from the systems architecture perspective. Thinking about the full game: multiple star systems, dozens of districts, hundreds of NPCs, mod ecosystem, years of content production. + +No v0.1 scoping. No tickets. No sprint timelines. Just: what does the engine need to be? + +--- + +## 1. Is Complicity the Right Theme for the Whole Game? + +*cracks knuckles* + +Let me be honest about what this question means technically: **the engine doesn't care about theme.** The engine cares about mechanical patterns. The question for me isn't "is complicity universal" — it's "does the mechanical vocabulary we've built for complicity generalize to other moral textures, or does each theme need its own engine features?" + +### What the engine actually sees + +The engine doesn't know about "complicity." It knows about: + +| Mechanical Pattern | Sova Implementation | Generalizable? | +|---|---|---| +| Moral arc phases (state progression) | Comfort → Doubt → Reckoning → Compromise | **Yes** — any moral journey follows a phase progression. The phase names are content, not code. | +| Monologue triggers (`moral_pang`, `loyalty_test`) | Smuggler-specific guilt triggers | **Partially** — the trigger types are engine features, but new themes might need new trigger types. A "survival" theme might need `resource_scarcity_observation` or `triage_decision`. | +| Cultural gate modifier (Gore's proposal) | Krenn privacy norms reduce disclosure | **Yes** — every culture has social norms that modify disclosure. The modifier system is general. The RULES per culture are content. | +| Knowledge confidence progression | Suspects → KnowsOf → KnowsDetails → Direct | **Yes** — this is epistemology, not theme. Every information-asymmetric situation uses this. | +| Contradiction detection | FRIEND's hidden behavior conflicts with presented behavior | **Yes** — cognitive dissonance is universal. THE FRIEND pattern works for any relationship where someone conceals something from someone they care about. | +| THE MIRROR pattern | Hael's transparency amplifies everyone's dishonesty | **Partially** — the "honest character in a dishonest world" works for complicity/deception themes. A survival-themed district might need THE MIRROR to be "the person who refuses to compromise even when everyone else has." Same mechanical pattern (character without a secret who makes others uncomfortable), different moral content. | + +### My architectural answer + +**Build a theme-agnostic moral engine with a per-district thematic vocabulary layer.** + +The engine provides: +- Phased moral arc system (configurable phases per district or per NPC) +- Extensible monologue trigger registry (core triggers + district-registered custom triggers) +- Cultural modifier framework (per-region norms that affect dialogue selection) +- Contradiction detection (general — any KnowledgeState can enter Contradicted) +- Pool-based character patterns (FRIEND, MIRROR, future patterns all use pools) + +The content provides: +- Phase names and transition conditions per district's moral texture +- Custom trigger definitions that map to the district's theme +- Cultural rules per region +- Specific contradiction content per NPC + +This means: complicity is the right theme for Sova, and probably the right *default* theme (it's what the game is most deeply about). But the engine shouldn't assume it. Districts in other systems might explore loyalty, survival, identity, or institutional rot. The engine treats all of these as "moral arc with phases + triggers + cultural context." The thematic vocabulary is data, not code. + +### The scaling implication + +SI asked the right question in Round 3: does thematic variation change the pipeline? Yes, modestly. Each new thematic texture costs ~2-3 days to define (phase vocabulary, trigger set, monologue patterns). But those definitions are reusable across all districts that share the texture. A "loyalty" texture defined once applies to every loyalty-themed district. + +**Tier of difficulty: Easy.** The architecture we've designed is already theme-agnostic. The moral arc system is a state machine with configurable states. Monologue triggers are an extensible registry. No engine changes needed to support multiple themes — just content vocabulary definition. + +--- + +## 2. Cultural Groups at Scale + +15-25 cultural groups across the Settled Reach. Here's what the engine needs to know about culture, and what it doesn't. + +### What culture IS in the engine + +Culture is **reference data that modifies entity behavior at creation and dialogue selection at runtime.** It is NOT simulation state. No cultural simulation runs per-tick. Culture is: + +1. **A modifier set** applied when NPCs are instantiated (naming patterns, greeting conventions, default disclosure norms, default trust baseline for outsiders) +2. **A dialogue filter parameter** that affects line selection (Gore's `cultural_gate` modifier) +3. **A content authoring guide** that informs how writers fill routine schedules, personality traits, and monologue pools + +### The data model for culture at scale + +```yaml +# global/regions/krenn-system.yaml +culture: + id: krenn + heritage_blend: ["finnish", "estonian", "latvian"] + drift_years: 180 + + # Engine-readable modifiers + modifiers: + outsider_trust_baseline: -2 # Outsiders start with trust penalty + disclosure_to_authority: 0.4 # 40% disclosure rate to authority figures + disclosure_to_insider: 0.9 # 90% disclosure rate to cultural insiders + greeting_initiative: low # NPCs don't initiate conversation with strangers + + # Naming generation + naming: + given_name_pool: ["Kael", "Sera", "Voss", "Lera", "Torek", ...] + family_name_pool: ["Davan", "Venn", "Sessik", "Lintar", ...] + family_name_usage: 0.29 # 29% of NPCs use family names socially + address_convention: first_name # Social context uses first names + + # Vocabulary (for writers, not engine) + vocabulary: + greetings: ["hüva", "tere"] + food: ["leib", "kalaa", "supp"] + drinks: ["kuum", "grain spirit"] + slang: + - word: "vakt" + meaning: "lookout shift" + connotation: "criminalized by ring usage" + + # Social norms (engine-readable as dialogue modifiers) + social_norms: + - norm: privacy_default + effect: "NPCs do not discuss others' personal business" + modifier: topic_block_personal_third_party + - norm: labor_solidarity + effect: "Workers cover for each other" + modifier: reduce_disclosure_about_coworker_absences + - norm: earned_trust + effect: "No credential shortcut — trust through time and shared labor" + modifier: ignore_authority_trust_bonus +``` + +### Cross-cultural dynamics: the hard problem + +Single-culture districts are straightforward. But the full game will have: +- Districts where two cultures mix (trade hubs, diplomatic stations) +- NPCs who've migrated from one cultural region to another +- Cultural drift within a single region over time + +The engine needs a **cultural distance model**: + +``` +cultural_distance(observer, subject) → modifier_strength +``` + +If both are Krenn, full cultural norms apply. If the observer is Krenn and the subject is from Vael System, some norms apply at reduced strength (shared labor solidarity if they work together, but outsider trust baseline still applies). If both are from different cultures entirely, minimal cultural modifier — fall back to personality-driven behavior. + +**Implementation approach:** Each NPC has a `culture_id` field. The dialogue selection system looks up the cultural distance between the speaking NPC and the listener. Cultural modifiers apply at `distance_modifier * full_strength`. For v0.1, every NPC in Sova is Krenn and every outsider (detective) gets full outsider penalty. For full game, the distance calculation is a simple lookup table: + +| Observer Culture | Subject Culture | Distance | Modifier Strength | +|---|---|---|---| +| Same | Same | 0 | 1.0 | +| Same region | Same region | 1 | 0.7 | +| Same system | Different region | 2 | 0.4 | +| Different system | Different system | 3 | 0.2 | + +~25 cultures × 25 cultures = 625 entries. But most are derivable from the 4-level hierarchy above. Only exceptions need explicit overrides. + +**Tier of difficulty: Moderate.** The cultural modifier system is a data-driven parameter set. The cross-cultural distance model adds a lookup step to dialogue selection. The real complexity is in content — defining 25 cultures with enough depth to be mechanically meaningful. But that's Miri's job, not engine work. + +### Memory and performance at scale + +25 cultural definitions × ~5KB structured YAML each = ~125KB total. Negligible. Cultural data loads once at game start and lives in a `Cultures` resource. NPC culture_id is a u8 (256 possible cultures, we'll use ~25). Per-NPC memory cost: 1 byte. The dialogue selection system does one hash lookup per conversation to get the cultural modifier set. Sub-microsecond. + +--- + +## 3. Content Patterns That Scale + +The distinction that matters: **engine patterns** (code, universal, built once) vs **content patterns** (data templates, per-district, authored many times). + +### Engine patterns — build once, use forever + +These are the core systems. Each is a piece of the simulation server that processes content data: + +| Engine Pattern | What It Does | Scale Factor | +|---|---|---| +| **Pool Selection** | Weighted random draw from candidate lists at seed time | O(pools × candidates). Cheap — runs once at game start. Handles FRIEND, role slots, contraband, entanglement, everything. | +| **Schedule System** | Per-tick NPC location resolution from routine YAML | O(active NPCs). Already budgeted in D-026. 80 active NPCs × schedule lookup = trivial. | +| **Dialogue Selection** | Tagged line pool filtering (access tier, trust, situation, mood, topic, cultural gate) | O(eligible lines). Per-conversation. Pool sizes: ~50-200 lines per location per context. Filter chain is fast — 6 filters on 200 lines in <1ms. | +| **Monologue Trigger** | Event-driven check: does current game state match any monologue trigger prerequisites? | O(triggers × prerequisites). Per-tick for observation triggers, per-event for others. Budget: ~50-100 active triggers per district. | +| **Knowledge Update** | Event queue drain → BTreeMap insert/update | O(events per tick). Already budgeted at <3ms. Scales linearly with active NPCs. | +| **Contradiction Detection** | Cross-entry comparison within a single KnowledgeGraph | O(knowledge entries²) worst case, but only fires on new Direct observations. Practical: <10 comparisons per trigger. | +| **Moral Arc State Machine** | Phase transition checker — does current state + trigger condition → advance phase? | O(active arc NPCs × phase conditions). Runs per-event, not per-tick. Budget: 5-10 active arcs per district. | +| **Storyteller** | Pacing controller — selects which events to trigger based on player engagement, time, and arc progress | One system, runs once per game-minute (every 10 ticks). Evaluates ~20-30 potential events, selects 0-2 per minute. | +| **Content Loader** | YAML parsing + schema validation + overlay merging | Runs at game start and district transitions. Not performance-critical. Can take 1-5 seconds per district load. | + +That's ~9 engine patterns. I'd estimate we'll add 2-3 more as the game evolves (e.g., economy simulation, faction reputation system, travel/gate system). Call it 12-15 total engine patterns for the full game. + +**The critical insight: every new district uses these same 9+ patterns.** Adding a district doesn't add engine code. It adds content data that the existing patterns process. This is what D-023 (three-tier content model) was designed to achieve. + +### Content patterns — define template, instantiate per district + +These are the reusable structures that content authors fill in: + +| Content Pattern | Template Definition | Per-District Cost | Total for 20 Districts | +|---|---|---|---| +| NPC Profile (Tier 1 FRIEND) | ~3 pages, 70-100 lines | 15-22 hours | 2-4 per district × 20 = 40-80 NPCs | +| NPC Profile (Tier 1 MIRROR) | ~2 pages, 50-70 lines | 10-15 hours | 1 per district × 20 = 20 NPCs | +| NPC Profile (Tier 2) | ~1 page, 40-60 lines + 4x generation | 4-6 hours | 8-12 per district × 20 = 160-240 NPCs | +| NPC Profile (Tier 3) | Template-generated, ~0.5 pages | 0.5-1 hour (review only) | 5-10 per district × 20 = 100-200 NPCs | +| Social Site Template | Role slots, triangle constraints, pool refs | 2-3 hours | 3-5 per district × 20 = 60-100 templates | +| Triangle Definition | 3 NPCs, fork conditions, cascade effects | 1-2 hours | 4-6 per district × 20 = 80-120 triangles | +| Pool Definition | Candidate lists with weights | 30 min | 3-8 per district × 20 = 60-160 pools | +| Contradiction Arc | 5-phase definition with trigger conditions | 2-3 hours (part of FRIEND) | 2-4 per district × 20 = 40-80 arcs | +| District Metadata | Setting, locations, faction presence, ambient config | 2-4 hours | 1 per district × 20 = 20 | + +### What's genuinely local vs what's universal + +Some things I thought were engine patterns turn out to be content, and vice versa: + +**Looks like engine, is actually content:** +- Storyteller decision nodes (Gestalt's volume escalation). Each is a custom fork with custom effects. The engine provides the decision-node FRAMEWORK. The specific decisions are authored YAML. +- News ticker headline selection. Engine provides the selection mechanism. Headlines are content data. +- Environmental text. Engine renders it. Content fills it. + +**Looks like content, is actually engine:** +- THE FRIEND pattern (pool selection + contradiction arc activation + tell progression). This is an engine pattern with content filling the slots. Critically: the PATTERN is code. Each specific FRIEND is data. +- THE MIRROR pattern. Same — engine pattern, content instances. +- Cultural gate modifier. The modifier system is engine. The specific norms per culture are content. + +### The pattern that worries me + +**Storyteller decision nodes.** Gestalt's volume escalation decision is beautifully designed — but it's a fully custom YAML structure with custom effect mappings. At scale, each district needs 5-10 of these storyteller-triggered decision points. 20 districts = 100-200 decision nodes. + +If each decision node is a bespoke YAML structure, we have a maintenance nightmare. The schema validation can check structure, but the EFFECTS (attribute changes, triangle tension adjustments, investigation signal modifications) are essentially a mini scripting language embedded in YAML. + +**My proposal: a decision node DSL.** A small, constrained language for expressing decision effects: + +```yaml +decision_node: + id: volume_escalation + trigger: storyteller_mid_game + options: + - id: side_with_nils + effects: + - set_attribute: { entity: voss, key: trust_level, value: "resentful" } + - set_attribute: { entity: voss, key: exposure_risk, value: "escalating" } + - add_flag: { entity: maret_korr, flag: noticed_schedule_gap } + - adjust_tension: { triangle: worried_knowledge, delta: +2 } + - emit_signal: { signal: schedule_anomaly_visible } +``` + +The DSL is a fixed set of operations: `set_attribute`, `add_flag`, `remove_flag`, `adjust_tension`, `emit_signal`, `start_arc`, `advance_phase`. Maybe 10-15 operations total. The validator can check that every effect uses a known operation with valid parameters. Content authors compose effects from this vocabulary. + +**Tier of difficulty: Moderate.** Designing the DSL is a week of architecture. Implementing the effect executor is a sprint. But it prevents 200 decision nodes from becoming 200 custom code paths. + +--- + +## 4. Content Directory as a Platform + +This is the section I care most about. The content directory isn't just a file layout — it's the platform that the entire content pipeline runs on. Let me map what "platform" means technically. + +### Platform requirements for the full game + +| Requirement | What It Means | Technical Approach | +|---|---|---| +| **Lazy loading** | Only load the player's current district + queued adjacent districts. Don't load all 20+ districts at once. | Content loader uses a manifest graph. District YAML declares dependencies. Loader resolves the dependency tree and loads only what's needed. | +| **Cross-district references** | NPC in district A mentions faction headquartered in district B. Canonical_id `krenn.sova.transit.npc.kael-davan` resolves across any loaded district. | The `canonical_id` resolver is a global registry populated at manifest-load time (just IDs and paths, not full content). Full content loads on demand. | +| **Hot-reloading** | Dev-only: change a monologue line, see it in-game without restart. | `notify` crate file watcher on `content/` directory. On change: re-validate changed file → re-parse → hot-swap into running ECS world. Line pools and schedule data are hot-swappable. NPC creation requires restart. | +| **Validation pipeline** | `make validate-content` catches errors before they reach the engine. | JSON Schema validation (structural) + cross-reference resolver (semantic) + tier-conditional rules + custom DSL checks. CI runs this on every content PR. | +| **DLC packaging** | A DLC is a content pack: new districts + new global entries + extensions to existing districts. | DLC is a content directory with the same structure as base. `_meta/manifest.yaml` declares: base version dependency, ADD/REPLACE/MERGE operations, new district list. Load order: base → DLC1 → DLC2 → mods. | +| **Mod overlay** | Third-party content uses ADD/REPLACE/MERGE semantics. | Already designed in Round 2. The loader processes layers in load-order sequence. Each layer can add files, replace entity definitions, or merge pool/list content. | +| **Generation tooling** | Tier 3 NPC generator, line expansion tool, skeleton generator. | These tools READ templates + cultural data, WRITE NPC YAML files to the content directory. They're offline tools, not runtime. Output goes through the same validation pipeline as hand-authored content. | +| **Multiple star systems** | Content is organized spatially: system → station → district. But the filesystem doesn't need to mirror this — canonical_id handles it. | Flat `districts/` directory with canonical_id carrying the full spatial address. A `global/galaxy/systems.yaml` provides the spatial index. | + +### The content loader architecture + +This is the most important subsystem I haven't fully specified yet. Here's the full picture: + +``` +Content Loader Pipeline: + +1. MANIFEST PHASE (game startup, ~100ms) + Read all _meta/manifest.yaml files (base + DLC + mods) + Build dependency graph + Determine load order + Build canonical_id → file_path index (IDs only, not content) + +2. GLOBAL PHASE (game startup, ~500ms) + Load global/ directory: factions, technology, contraband, knowledge, enums, regions + These are always in memory — they're shared vocabulary + +3. SEED PHASE (new game / load game, ~200ms) + Read seed configuration + Execute pool selections (FRIEND, roles, contraband, entanglement) + Produce seed-state record + +4. DISTRICT PHASE (on district entry, ~1-5 seconds) + Load target district: NPCs, locations, templates, lines, facts + Apply overlay stack: base content → DLC modifications → mod modifications + Validate loaded content against schemas + Create ECS entities from loaded data + Cross-reference check: all canonical_id references resolve + +5. ADJACENT PHASE (background, ~2-10 seconds) + Pre-load adjacent districts (connected by gate, one travel hop away) + Parse and validate but don't create ECS entities yet + Ready for instant transition when player travels + +6. HOT-RELOAD PHASE (dev-only, on file change) + Re-validate changed file + If line pool / schedule / dialogue: hot-swap in running world + If NPC definition: flag for full reload (too complex to hot-swap entity creation) + If schema: re-validate all content against new schema +``` + +### The manifest graph at scale + +With 20+ districts, 2-3 DLCs, and mods, the manifest graph looks like: + +``` +base/ + _meta/manifest.yaml: { id: "base", version: "1.0" } + global/ ← always loaded + districts/ + sova-transit/ ← load on demand + vael-docks/ ← load on demand + prime-central/ ← load on demand + ... + +dlc-outer-reach/ + _meta/manifest.yaml: { + id: "outer-reach", + version: "1.0", + requires: "base >= 1.0", + adds: ["districts/haven-drift", "districts/ember-station"], + extends: { + global: { factions: [ADD new-faction.yaml] }, + districts/sova-transit: { pools: [MERGE new-candidates.yaml] } + } + } + +mod-jax/ + _meta/manifest.yaml: { + id: "jax-the-veteran", + version: "1.0", + requires: "base >= 1.0", + extends: { + districts/sova-transit: { + npcs: [ADD jax-korrenson.yaml], + pools: [MERGE jax-pool-entries.yaml], + lines/bar/dialogue: [MERGE jax-dialogue.yaml] + } + } + } +``` + +The manifest declares WHAT it does. The loader EXECUTES the operations. This is the same pattern used by package managers (Cargo, npm) — declare dependencies and operations, resolve at load time. + +### Cross-district travel: the lazy loading challenge + +When the player travels from Sova Transit to Vael Docks: + +1. Player approaches span gate → engine signals "travel imminent to vael-docks" +2. Adjacent phase has already pre-loaded vael-docks content (parsed, validated, not yet ECS entities) +3. Player enters gate → loading screen (or in-game gate transit animation) +4. Engine tears down sova-transit ECS entities (but SAVES their state for return) +5. Engine creates vael-docks ECS entities from pre-loaded content + seed-state +6. Engine begins pre-loading districts adjacent to vael-docks +7. Player arrives. Seamless. + +**State preservation on departure:** When leaving a district, all active NPC states (knowledge graphs, relationship states, moral arc phases, schedule deviations) are serialized and stored. On return, the state restores. This is D-026's state-saved tier — the same mechanism handles "NPC too far from player to simulate" and "player left this district entirely." + +**The performance budget:** District load creates ~20-50 ECS entities (NPCs) with components (schedule, knowledge graph, cultural modifiers, dialogue access). Entity creation: ~0.1ms each. Total: ~2-5ms for entities. The expensive part is YAML parsing and validation — but that's done in the adjacent-phase background pre-load. The actual transition should be <100ms of entity creation + state restoration. + +### Filesystem layout at full scale + +``` +content/ + _meta/ + manifest.yaml + load-order.yaml # base → DLC → mods + + _schema/ + npc.schema.yaml # Handles all tiers via conditional validation + location.schema.yaml + faction.schema.yaml + template.schema.yaml + fact.schema.yaml + dialogue.schema.yaml + monologue.schema.yaml + district.schema.yaml + pool.schema.yaml + decision-node.schema.yaml # Validates the DSL operations + culture.schema.yaml # Validates cultural modifier definitions + + global/ + galaxy/ + systems.yaml # Star system index: coordinates, gate connections + routes.yaml # Travel graph: which gates connect to what + factions/ # ~10-15 major factions + technology/ # ~10-20 technology entries + contraband/ # ~5-10 contraband categories + knowledge/ + facts.yaml # Abstract/universal FactIds + entity-attributes.yaml # Canonical attribute vocabulary (19+ keys) + relationship-states.yaml + enums/ # Canonical enum registries + situations.yaml + topics.yaml + moods.yaml + triggers.yaml # Core + district-registerable custom triggers + access-tiers.yaml + activities.yaml + moral-arc-phases.yaml # Configurable per thematic texture + regions/ # 15-25 cultural groups + krenn-system.yaml + vael-system.yaml + ... + thematic-textures/ # 4-6 moral textures (SI's palette) + complicity.yaml # Phase vocabulary, trigger set, monologue patterns + loyalty.yaml + survival.yaml + identity.yaml + + districts/ + sova-transit/ # Krenn System, Station Sova + district.yaml # Metadata: system, station, culture_id, theme_texture + facts.yaml # District-specific FactIds (Gestalt's split) + pools.yaml # All pool definitions for seed-time selection + npcs/ # 15-25 NPCs per district + locations/ # 3-8 locations per district + templates/ # 3-5 social site templates + triangles/ # 4-6 triangle definitions + decisions/ # Storyteller decision nodes (DSL) + lines/ # Dialogue + monologue pools per location + terminal/ + bar/ + corridor/ + vael-docks/ # Vael System + prime-central/ # Krenn Prime (surface city) + ... # 20+ districts total +``` + +At 20 districts, this is ~1000-2000 YAML files total. Each is small (1-10KB). Total content on disk: ~5-20MB. Negligible. The constraint is authoring time, never storage. + +### Content versioning for live service + +If the game has DLC and mod support, content WILL change post-release. The canonical_id system handles this: + +- A canonical_id is permanent. Once `krenn.sova.transit.npc.kael-davan` exists, it exists forever. +- Content behind a canonical_id can change (REPLACE operation), but the ID persists. +- Save games reference canonical_ids, not file paths. If a DLC changes Kael's dialogue, existing saves still reference `kael-davan` and get the updated content. +- If a mod is removed, the loader detects missing canonical_ids referenced in the save game and flags them. The game can degrade gracefully (NPC exists but has fallback content) or warn the player. + +**Tier of difficulty: Challenging but doable.** The content loader is a significant subsystem — I'd estimate 2-3 sprints to build the full pipeline (manifest resolution, lazy loading, overlay merging, hot-reload). But it's well-understood engineering. Package managers solved this problem decades ago. We're applying the same principles to game content. + +--- + +## 5. Randomization Philosophy + +Beyond Sova's axes. What's the full-game randomization architecture? + +### The three scales of randomization + +**Scale 1: Per-District (what Sova already does)** + +Pool-based selection within a single district. FRIEND identity, role assignments, social site population, entanglement map, secondary contraband. Each district is an independent randomization domain. + +This scales linearly. 20 districts × 5-10 pools each = 100-200 independent pool draws. The seed determines all of them deterministically. Fast, simple, proven. + +**Scale 2: Cross-District (new for multi-district game)** + +When the game spans multiple districts, some randomization must be COORDINATED: + +| Cross-District Axis | Why It Can't Be Independent | Constraint | +|---|---|---| +| Faction dominance | If the Lattice Commission is strong in Sova, that affects their presence in adjacent stations | Conservation of faction power across the system | +| NPC migration | An NPC who left Sova for Vael must exist in Vael and NOT in Sova | Entity uniqueness across districts | +| Investigation threads | Evidence found in Sova points to Vael. The target must actually exist in Vael. | Cross-district reference integrity | +| Economic conditions | System-wide boom/bust should be coherent, not random per district | System-level economic state → per-district modifier | + +This requires a **two-phase randomizer:** + +``` +Phase 1: System-level draws + - Faction power distribution across all systems + - Economic condition per system + - Major event seeds (which crises are active this playthrough) + +Phase 2: District-level draws (constrained by Phase 1) + - FRIEND pools, role slots, entanglement maps + - Constrained by: faction presence (Phase 1), NPC availability, cross-district references +``` + +The pool system handles both phases — Phase 1 pools are in `global/`, Phase 2 pools are in `districts/`. The constraint is: Phase 2 draws must satisfy Phase 1 constraints. This is constraint-satisfaction, not simple random drawing. + +**Scale 3: Temporal Variation (the living world)** + +The hardest form of randomization: things that change during play. + +- A faction loses power after a player action in one district → effects visible in adjacent districts +- An NPC's arc resolves → consequences propagate to cross-district contacts +- The storyteller triggers a system-wide event (gate malfunction, Commission crackdown) → every active district responds + +This isn't pool selection anymore. This is **event propagation across the district graph.** The simulation needs: + +``` +Event: { type: faction_power_shift, faction: lattice-commission, delta: -1, origin: sova-transit } +Propagation: adjacent districts receive the event at the next tick boundary +Effect: per-district faction modifier adjusts, NPC mood/behavior shifts +``` + +**Tier of difficulty: Scale 1 is Easy (done). Scale 2 is Moderate (constraint-satisfaction at seed time). Scale 3 is Hard (runtime event propagation across a district graph). Build them in order. Scale 3 is a v1.0 feature, not v0.2.** + +### The anti-metagaming architecture + +Nigel's core concern: "Two friends play the game. They compare notes. They played different games." At full scale, the metagaming surface grows: + +| What Players Might Metagame | Anti-Metagaming Approach | +|---|---| +| FRIEND identity | Pool with 3-4 candidates per character per district | +| Evidence locations | Multiple possible evidence placements per FactId progression | +| Compromised NPC identity | Role-slot randomization (who fills the "compromised" slot) | +| Investigation path | Multiple valid paths to the same discovery (not A→B→C, but A→{B,C,D}→E) | +| NPC schedules | Minor time variance per seed (±15 minutes on routine transitions) | +| Cultural tells | Per-seed social weight on vocabulary (Nigel's "vakt" variation) | + +The key insight: **don't randomize everything. Randomize the things that matter for surprise, keep the things that matter for coherence.** + +Fixed per district (never randomized): +- Cultural identity and norms +- Primary contraband type +- Physical layout (locations, spatial relationships) +- Faction presence (which factions, not how strong) +- Core social site structure (the bar exists, has an owner, has regulars) + +Variable per seed (always randomized): +- WHO fills which role slots +- WHO is the FRIEND +- WHERE evidence appears +- WHAT secondary complications arise +- WHEN the storyteller triggers escalation events + +This gives consistent spatial memory ("I know where the bar is") with inconsistent social memory ("I don't know who's compromised"). Players can learn the world but not solve it. + +--- + +## 6. PC-as-NPC at Full Scale + +v0.1 has 2 PC archetypes. The full game might have 4-6. Here's what this means architecturally. + +### The PC archetype as engine pattern + +A PC archetype is: +1. A starting knowledge graph (what you know at game start) +2. A cultural identity (which community you belong to) +3. A lattice tier (which perception modes are available — D-017) +4. An access tier map (who trusts you, who doesn't) +5. A monologue voice (separate line pools per D-032) +6. A moral arc template (which thematic journey you're on) +7. An NPC-mode behavior AI (what you do when you're not player-controlled) + +Items 1-6 are content data. Item 7 is the engine problem. + +### NPC-mode behavior AI + +When the player plays archetype A, archetype B exists as an NPC. But archetype B isn't just walking a routine — they're an ACTIVE CHARACTER doing their job: + +| Archetype | NPC-Mode Behavior | Complexity | +|---|---|---| +| Detective | Follows investigation routine: arrives, interviews, observes, takes notes. Progresses through the investigation arc at storyteller-controlled pace. | **High** — the detective NPC needs to "investigate" convincingly. Not just walk around, but approach NPCs, trigger investigation dialogue, react to evidence. | +| Smuggler | Works shifts, runs operations, socializes at bar. Maintains cover. Ring operations triggered by storyteller. | **Moderate** — follows routine with deviation triggers. The ring operations are storyteller-controlled, not autonomous. | +| Senate aide (hypothetical v0.3 archetype) | Political navigation: attends meetings, lobbies, collects favors. | **High** — political behavior AI is complex. | +| Guardian operative (hypothetical v0.4 archetype) | Surveillance and counter-surveillance. Watches, follows, reports. | **Moderate** — pattern-following behavior with perception system integration. | + +### The behavior AI architecture + +I'd propose a **behavior tree system** for NPC-mode PCs. Not a full planning AI — that's overkill and non-deterministic. A behavior tree is: + +1. Deterministic (D-010 principle 4) +2. Configurable via content data (behavior tree definitions in YAML) +3. Observable by players (the NPC does visible things, not abstract "investigating") +4. Scalable (behavior trees are well-understood, performant, widely documented) + +Each PC archetype gets a behavior tree YAML: + +```yaml +# global/archetypes/detective-npc-behavior.yaml +behavior_tree: + root: sequence + children: + - selector: + - condition: is_work_hours + action: investigate + subtree: + - go_to: investigation_target_location + - interact_with: investigation_target_npc + - observe_for: 5_minutes + - take_notes # visible action, triggers monologue for watching PC + - condition: is_social_hours + action: socialize + subtree: + - go_to: bar + - interact_with: known_contact # usually Sera if she's FRIEND + - order_drink + - action: follow_routine # fallback to base schedule +``` + +The storyteller controls WHEN the detective NPC escalates their investigation. The behavior tree controls HOW the detective behaves during each phase. + +### PC archetype scaling costs + +| Component | Per Archetype (one-time) | Per District (per archetype) | +|---|---|---| +| Voice card + moral arc definition | 8-12 hours | 0 | +| Behavior tree definition | 4-8 hours | 2-3 hours adaptation | +| Monologue pool per district | 0 | 10-15 hours | +| Starting knowledge per district | 0 | 3-5 hours | +| Reverse knowledge entries from NPCs | 0 | 2-4 hours | +| PC-as-NPC routine per district | 0 | 1-2 hours | +| **Total** | **12-20 hours** | **18-29 hours per district** | + +For 4 archetypes across 20 districts: +- One-time: 48-80 hours +- Per-district: 72-116 hours × 20 = 1,440-2,320 hours +- Grand total: ~1,500-2,400 hours of PC-related content + +SI estimated ~800 hours for 2 archetypes across 20 districts. My number is higher because I'm including the behavior tree adaptation and the reverse knowledge entries, which SI's estimate didn't fully capture. + +**The critical dependency: behavior tree authoring tooling.** Writing behavior trees in raw YAML is painful. We need a visual behavior tree editor — even a simple one (node graph in a web UI). This is a tooling investment that pays back across every archetype and every district. + +**Tier of difficulty: Hard.** The behavior tree system itself is a 2-3 sprint investment. The content per archetype per district is the larger cost. I'd recommend maxing out at 4 archetypes for v1.0. Each additional archetype multiplies per-district authoring by ~20-30 hours. + +--- + +## 7. Authoring Pipeline at Scale + +300+ NPCs. 20+ districts. LLM-assisted generation. Here's the technical pipeline. + +### The authoring tiers, technically + +| Tier | Authoring Method | Engine Input | Quality Gate | +|---|---|---|---| +| Tier 1 (FRIEND, MIRROR) | 100% human-authored | Handcrafted YAML, every line reviewed | Human review + schema validation | +| Tier 2 (entangled + mundane triangles) | Human-authored base (10 lines) + LLM expansion (40 lines) | Authored YAML + generated supplement | Schema validation + voice consistency check + human spot-review | +| Tier 3 (flat NPCs) | Template-generated from cultural brief + district config | Generated YAML from templates | Schema validation + automated checks only | +| Environmental text | Mixed — headlines authored, signs generated from templates | Generated from district + culture data | Schema validation + Mellanie review | + +### The LLM generation pipeline + +For Tier 2 line expansion (write 10, generate 40): + +``` +Input: + - 10 authored dialogue lines (human-written, voice-perfect) + - NPC profile YAML (personality, role, relationships) + - Cultural brief (Krenn norms, vocabulary, speech patterns) + - Tag taxonomy (D-035 tags for each generated line) + - Voice card (character-specific writing guide) + +Process: + 1. LLM generates 40 candidate lines, tagged, following voice card + 2. Schema validator checks: all tags present, valid enum values, IDs unique + 3. Voice consistency checker: embedding similarity against authored lines (reject outliers) + 4. Human reviewer: spot-check 10 of 40, approve/reject batch + +Output: + - 40 generated lines merged into the line pool + - Generation metadata preserved (which lines are authored vs generated) + - Rejected lines logged for model fine-tuning +``` + +**The generation quality gate is critical.** If generated lines don't match the authored voice, the pool degrades. The voice consistency checker is an embedding-based comparison: encode each generated line, measure cosine similarity against the authored set, reject anything below threshold. + +At scale: Tier 2 NPCs across 20 districts = 160-240 NPCs × 40 generated lines each = 6,400-9,600 generated lines. With a 70% acceptance rate, that's ~4,500-6,700 usable lines from LLM generation. The human review cost: ~10 minutes per NPC batch × 200 NPCs = ~33 hours of human review. Manageable. + +### The Tier 3 generator + +For flat NPCs (routine + greeting, social wallpaper): + +``` +Input: + - District config (locations, factions present, social sites) + - Cultural brief (naming pool, greeting conventions, personality distribution) + - Tier 3 template (3 required fields: routine, greeting, faction) + - Seed (for deterministic generation) + +Process: + 1. Draw name from cultural naming pool + 2. Generate routine from template schedule (location + activity + time, cultural pattern-conformant) + 3. Generate 3-5 greeting lines from cultural greeting conventions + 4. Assign faction from district faction distribution + 5. Assign personality traits from cultural trait distribution + 6. Generate 0-1 "overheard conversation" snippets from district topics + +Output: + - Complete Tier 3 NPC YAML, schema-valid + - Deterministic: same seed + same inputs = same NPC +``` + +The Tier 3 generator is a Rust CLI tool, not an LLM. It's template expansion with seeded randomization. Fast, deterministic, no API costs. Runs offline during the content build phase. + +At scale: 100-200 Tier 3 NPCs generated in <1 second. Zero human authoring time. Review: spot-check 10% for cultural coherence. + +### The full pipeline at 300+ NPCs + +``` +Phase 1: Foundation (one-time, ~2 weeks) + ├── Lock all templates (NPC, social site, triangle, pool, decision node) + ├── Build schema validation (`make validate-content`) + ├── Build Tier 3 generator + ├── Build LLM line expansion pipeline + ├── Build voice consistency checker + └── Build content skeleton generator + +Phase 2: Per-district production (repeating, ~2-3 weeks per district) + ├── Day 1-2: District brief (Miri) + content skeleton (tooling) + ├── Day 3-7: Tier 2 NPCs authored (Paula + Mellanie, parallel) + ├── Day 5-10: Tier 1 NPCs authored (Paula, sequential) + ├── Day 8-10: LLM line expansion for Tier 2 (tooling + Mellanie review) + ├── Day 9-10: Tier 3 generation (tooling, review by Miri for cultural fit) + ├── Day 10-12: Validation pass (Hoshe + schema + cross-reference) + └── Day 12-14: Integration + smoke test (Dudley) + +Phase 3: Cross-district integration (per system, ~1 week) + ├── Cross-reference validation (all canonical_ids resolve) + ├── Faction coherence check (power distribution sums correctly) + ├── NPC migration consistency (nobody exists in two places) + └── Story thread validation (investigation paths are complete) +``` + +20 districts × 2-3 weeks per district = 40-60 weeks of production. With 2 districts in parallel: 20-30 weeks. With 3 in parallel: 13-20 weeks. SI's estimate of 10-15 months aligns with my 2-parallel-district projection. + +### Tooling priority order + +Build these in order. Each one unblocks the next scale step: + +| Priority | Tool | Unblocks | Effort | +|---|---|---|---| +| **P0** | Schema validation (`make validate-content`) | Everything — no content pipeline without validation | 1 sprint | +| **P1** | Content skeleton generator | Per-district production — authors start from valid stubs | 0.5 sprint | +| **P1** | Tier 3 NPC generator | Population fill — 50-100 NPCs per run | 1 sprint | +| **P2** | LLM line expansion pipeline | Tier 2 scaling — 4x content from 1x authoring | 1-2 sprints | +| **P2** | Voice consistency checker | Quality gate for generated content | 1 sprint | +| **P2** | Cross-reference validator | Multi-district integrity | 1 sprint | +| **P3** | Decision node DSL validator | Storyteller content validation | 0.5 sprint | +| **P3** | Behavior tree editor | PC archetype authoring efficiency | 2 sprints | +| **P3** | Content dashboard | Production tracking and visibility | 1 sprint | + +Total tooling investment: ~9-11 sprints. This is the cost of scaling from 1 district to 20. It's front-loaded — most of it needs to exist before district 2 production begins. + +--- + +## Synthesis: The Architecture for 10 Years of Content + +The Settled Reach is architecturally a content platform that happens to be a game. The simulation engine (9-15 patterns, well-defined, stable) processes content data (hundreds of YAML files, constantly growing, authored by a pipeline). + +The engine's job is to be SMALL, CORRECT, and STABLE. Engine changes should be rare after the core patterns are built. Adding a new district should NEVER require engine changes. Adding a new thematic texture, a new cultural group, or a new PC archetype should require AT MOST a new behavior tree definition and content data — not new Rust code. + +The content directory's job is to be a PLATFORM — loadable, validatable, overlayable, extensible. The manifest system, overlay mechanics, and canonical_id resolution give it the properties of a package manager. DLC and mods are first-class concepts, not afterthoughts. + +The authoring pipeline's job is to make content FAST without making it CHEAP. Tier 1 content is irreducibly human. Tier 2 content is human-seeded and machine-expanded. Tier 3 content is fully generated. The tooling exists to enforce quality gates at each tier. + +### What I'm genuinely excited about + +The single design decision that solves the most problems simultaneously: **pool-based selection with overlay-compatible content packs.** + +This one pattern handles: +- FRIEND selection (pool of authored candidates) +- Role slot assignment (pool of eligible NPCs per template role) +- Contraband variation (pool of secondary types) +- Entanglement randomization (pool of compromise-eligible NPCs) +- Social site population (pool of regulars per venue) +- DLC expansion (DLC adds candidates to existing pools via MERGE) +- Mod extension (mods add candidates to existing pools via MERGE) +- Seed-based replayability (different draws from same pools) +- Anti-metagaming (pool draws are unpredictable) + +One pattern, nine use cases. *That's* elegant architecture. The pool system + overlay mechanics + canonical_id resolution form the architectural triad that makes everything else possible. + +### The honest difficulty assessment + +| Capability | Full-Game Difficulty | When to Build | +|---|---|---| +| Single-district content (what we have) | **Done** | Now | +| Content loader with overlay support | **Moderate** | Before district 2 | +| Multi-district lazy loading | **Moderate** | Before district 3 | +| Cross-district reference resolution | **Moderate** | Before district 3 | +| Cultural distance model | **Easy** | Before second cultural group | +| Theme-agnostic moral arc system | **Easy** | Before second thematic texture | +| Decision node DSL | **Moderate** | Before 10+ decision nodes | +| PC behavior trees | **Hard** | Before 3rd PC archetype | +| Two-phase randomizer (system + district) | **Moderate** | Before second star system | +| Runtime event propagation across districts | **Hard** | v1.0 | +| LLM generation pipeline | **Moderate** | Before district 2 Tier 2 production | +| Content dashboard | **Easy** | When production tracking matters | + +Nothing here is a research problem. Everything is well-understood engineering applied to game content. The hardest individual piece (behavior trees + runtime event propagation) is maybe 4-5 sprints of focused work. The total platform build is ~15-20 sprints spread over the full development timeline. + +The game's ambition is large. The architecture is proportional. The technical risk is low — it's a lot of KNOWN work, not a little UNKNOWN work. That's the best kind of engineering problem to have. + +--- + +*Tyre out. The platform scales. The engine stays small. The content grows forever. Ship it.* diff --git a/docs/workshops/wiki-review/round4-gestalt.md b/docs/workshops/wiki-review/round4-gestalt.md new file mode 100644 index 000000000..236fa12cf --- /dev/null +++ b/docs/workshops/wiki-review/round4-gestalt.md @@ -0,0 +1,714 @@ +# Round 4 — Gestalt (Systems Design): Generator-Input Reframe + +*cracks knuckles* + +The lead's 300-world directive isn't a scaling of my Round 3 proposals. It's a different kind of problem. My R3 designed a **content authoring strategy** — skeleton + flesh, pipeline + tooling, districts as production units. The lead is asking for a **generator specification strategy** — the rules, parameters, and constraints that procedural systems consume to produce 300 worlds worth playing. + +Let me break down what this actually means mechanically. Everything below is reframed for: **what does the generator need to know?** + +--- + +## 1. Cultural Ingredients Menu: Combinatorial Culture Generation + +### What changed from Round 3 + +My R3 proposed 6-8 fixed heritage clusters (Nordic-Baltic, Mediterranean, East Asian, etc.) with Miri-quality regional briefs per cluster. The lead says: **pick-and-combine from an ingredients menu.** Heritage roots are ONE ingredient among several. The generator assembles cultures from a matrix, not a list. + +This is mechanically superior. Here's why: 6-8 fixed clusters produce 6-8 cultural experiences. A 6-category ingredients menu with 5-8 options per category produces thousands of unique cultural configurations. The generator does the multiplication. We author the ingredients. + +### The ingredients menu + +Six ingredient categories. Each category has 5-8 options. The generator picks one from each category (or blends 2 within a category) to compose a unique cultural profile. **Heritage Roots is optional** — a world may have no heritage theming (company town, purely functional station, deep-drift post-heritage community). What a society DOESN'T have is as defining as what it does. + +**Category 1: Heritage Roots (OPTIONAL — what Earth culture drifted into this community)** + +| Option | Mechanical Signature | Access Tier Profile | +|---|---|---| +| *None/Functional* | *No inherited cultural norms. Access dynamics driven entirely by other ingredients (economic function, faction presence). No substrate vocabulary, no cultural gatekeeping.* | *No cultural immune system. Detective faces institutional opacity or frontier chaos, not cultural walls. Naming generated from economic function, not heritage.* | +| Nordic-Baltic | Privacy-default, labor solidarity, institutional distrust | Hard outsider wall, slow peer elevation, authority gets compliance not info | +| Mediterranean-Near Eastern | Hospitality-default, honor networks, generosity-as-status | Fast initial warmth, but deep trust is family-only; info hides in noise | +| East Asian | Hierarchical respect, obligation chains, face-saving | Authority gets deference but performative cooperation; real info through obligation | +| West African | Communal decision-making, storytelling tradition, elder-respect | Info flows through communal events but couched in metaphor; direct questions rude | +| Latin American | Personal warmth, patron-client dynamics, familismo | Cooperation is personal not institutional; access through patronage | +| Slavic-Central European | Institutional cynicism, dual economy, dark humor | Everyone assumes system is corrupt; grey economy is normal | +| South Asian | Community gatekeepers, code-switching, stratified access | Access mediated through gatekeepers; gatekeeper's agenda shapes all info | +| Blended/Cosmopolitan | No dominant norm, transactional, individualist | No cultural immune system; info freely available but untrustworthy | + +**Category 2: Settlement Motivation (why people came here)** + +| Option | Generator Output | Gameplay Effect | +|---|---|---| +| Economic opportunity | Pragmatic norms, wealth-gradient tensions, aspiration culture | NPCs talk money; status measured in material terms | +| Political refuge | Ideological cohesion, suspicion of institutions, solidarity bonds | NPCs share political beliefs; outsiders judged by alignment | +| Religious/philosophical mission | Meaning-centered norms, spiritual authority structures, communal living | NPCs reference shared doctrine; access through demonstrated belief | +| Military/strategic placement | Hierarchical discipline, chain-of-command default, unit loyalty | Rank determines access; chain of command is information highway | +| Scientific/research outpost | Intellectual meritocracy, data-sharing norms, reputation economy | Access through demonstrated competence; credentials matter | +| Forced relocation/diaspora | Trauma-bonded community, grievance as identity, fierce in-group loyalty | Deep insider/outsider divide; shared suffering is trust shortcut | +| Frontier homesteading | Self-reliant individualism, neighbor reciprocity, no institutions | No authority path; every relationship is personal | +| Corporate assignment | Company culture overlay, transactional loyalty, career-track norms | Access through organizational position; company is the culture | + +**Category 3: Economic Function (what this place DOES)** + +| Option | Generator Output | District Shape | +|---|---|---| +| Logistics/transit hub | Cargo ops, schedule-driven routines, transient population mix | Social sites: terminal, bar, maintenance corridors. Like Sova. | +| Manufacturing/industrial | Shift work, union dynamics, equipment-centered routines | Social sites: factory floor, canteen, dormitory blocks | +| Trade/commerce center | Market rhythms, deal-making culture, information-as-currency | Social sites: exchange floor, merchant quarter, entertainment district | +| Administrative/political capital | Bureaucratic routines, faction navigation, formal social events | Social sites: government quarter, reception halls, residential towers | +| Agricultural/life support | Growing cycles, seasonal rhythms, land-based community | Social sites: growing platforms, processing center, communal hall | +| Research/academic | Lab schedules, seminar culture, peer review dynamics | Social sites: labs, library/commons, residential campus | +| Military/security installation | Watch rotations, drills, restricted zones, barracks life | Social sites: command center, mess hall, training areas, perimeter | +| Entertainment/leisure | Service economy, performance schedules, night culture | Social sites: venues, backstage areas, hospitality quarters | + +**Category 4: Philosophical Alignment (collective answer to "Is this enough?")** + +This is Gore's civilizational posture, made into a generator parameter: + +| Option | What "Enough" Means | What Disrupts It | +|---|---|---| +| Pragmatic collectivism | Stability, community, privacy | Outsiders asking questions; internal exposure | +| Institutional trust | Status, career, institutional respect | Institutional failure; hollow system revealed | +| Self-reliant individualism | Freedom, autonomy, owing nothing | Scarcity; discovering you need others | +| Meritocratic ambition | Achievement, growth, excellence | Plateau; discovering success is empty | +| Meaning-seeking communalism | Inner growth, purpose, connection | Material crisis; idealism doesn't feed people | +| Hierarchical service | Honor, duty fulfilled, clear purpose | Unjust orders; discovering the cause is corrupt | +| Radical autonomy | Authenticity, privacy, self-determination | Isolation; freedom without community is loneliness | + +**Category 5: Corporate/Faction Presence (who has power here)** + +| Option | Power Structure | Access Dynamics | +|---|---|---| +| Commission-dominant | Regulatory control, institutional authority | Authority path viable but surveilled; grey economy is resistance | +| Syndic-dominant | Corporate monopoly, career ladder | Corporate path viable but owned; independence is suspicious | +| Contested (multi-faction) | Faction competition, political navigation | Multiple authority paths; loyalty is currency | +| Independent/unaligned | No institutional power, local governance only | No authority shortcut; everything is personal | +| Criminal syndicate influence | Shadow governance, protection economy | Knowing the right people matters more than credentials | +| Military administration | Martial law or military governance | Rank IS access; civilians are second-class | + +**Category 6: Drift Stage (how far from Earth-origin culture)** + +| Option | Cultural Effect | Naming/Language Effect | +|---|---|---| +| First-generation (0-50 years) | Strong Earth parallels, active heritage maintenance | Earth-recognizable names, heritage language substrate heavy | +| Established (50-150 years) | Adapted norms, heritage as identity marker not daily practice | Adapted names, moderate substrate vocabulary | +| Deep drift (150-300 years) | Fully local culture, heritage is history not practice | Novel naming conventions, minimal substrate | +| Ancient (300+ years) | Unrecognizable from heritage, unique local culture | Entirely local naming, unique vocabulary | + +### What the generator does with ingredients + +The generator takes one selection from each category and produces a **cultural parameter set**: + +```yaml +# Generated cultural parameter set +culture: + id: auto-generated-slug + ingredients: + heritage: nordic-baltic + settlement: economic-opportunity + economic: logistics-transit + philosophy: pragmatic-collectivism + faction: commission-dominant + drift: established + + # DERIVED mechanical parameters (computed from ingredient combination) + access_profile: + outsider_trust_baseline: -2 # from heritage(nordic-baltic) + philosophy(collectivism) + authority_disclosure: 0.4 # from heritage + faction(commission) interaction + peer_elevation_speed: slow # from heritage(nordic-baltic) + insider_disclosure: 0.9 # from philosophy(collectivism) + + # DERIVED naming parameters + naming: + heritage_weight: 0.6 # from drift(established) — 60% heritage-influenced + local_innovation: 0.4 # 40% locally evolved + phonological_base: nordic-baltic # feeds naming algorithm + surname_usage: 0.3 # from heritage + + # DERIVED social norms (list of active modifiers) + social_norms: + - privacy_default # from heritage(nordic-baltic) + - labor_solidarity # from heritage + economic(logistics) + - institutional_compliance # from faction(commission-dominant) + - earned_trust # from heritage + philosophy(collectivism) + + # DERIVED moral texture (from philosophy + settlement + economic interaction) + moral_texture: complicity # pragmatic-collectivism + economic-opportunity + logistics +``` + +This IS Sova's culture — generated from ingredients rather than hand-written. The Krenn brief becomes the **benchmark output** that the generator must match when given these particular ingredient selections. + +### The mechanical parameter derivation rules + +This is where systems design gets load-bearing. The generator needs **derivation rules** that compute mechanical parameters from ingredient combinations: + +| Mechanical Parameter | Primary Ingredient | Modifying Ingredients | Derivation Rule | +|---|---|---|---| +| `outsider_trust_baseline` | Heritage Roots | Philosophy, Faction | Base from heritage lookup table, modified by philosophy (+1 if communalist, -1 if individualist), modified by faction (+1 if independent, -1 if military) | +| `authority_disclosure` | Heritage Roots | Faction, Settlement | Base from heritage, boosted if faction is Commission, reduced if settlement is refugee/frontier | +| `peer_elevation_speed` | Heritage Roots | Drift Stage | Base from heritage, faster if deep-drift (local customs dominate heritage formality) | +| `cultural_immune_system` | Heritage Roots | Philosophy, Settlement | Composite: high if collectivist+homogeneous-settlement, low if cosmopolitan+frontier | +| `information_flow_pattern` | Heritage Roots | Economic Function | Nordic = restricted channels, Mediterranean = flows freely, hierarchical = chain of command, communal = collective events | +| `ring_camouflage_type` | Heritage + Settlement | Economic, Philosophy | What local virtue the hidden network exploits. Nordic+collectivist = solidarity. Military+hierarchical = obedience. Research+meritocratic = academic freedom. | + +**These derivation rules are the Sacred content of the cultural system.** They're authored once, validated against benchmark districts, and never randomized. The ingredients are Profane — which combination the generator selects varies per world. + +### What changes from my Round 3 + +| R3 Proposal | R4 Reframe | +|---|---| +| 6-8 fixed heritage clusters | 6 ingredient categories × 5-8 options each | +| One Miri-quality brief per cluster | One ingredient definition per option (~48 total) | +| Blended districts interpolate between parents | Generator composes from ingredients — blending is the default, not the exception | +| ~20-25 systems across clusters | 300 worlds, each with a unique ingredient combination | +| Cultural map is hand-designed | Cultural distribution is a generator constraint (ensure diversity, avoid repetition) | + +**Decision proposal (D-WR-21):** Cultures are generated from a 6-category ingredients menu (Heritage Roots, Settlement Motivation, Economic Function, Philosophical Alignment, Faction Presence, Drift Stage). Each ingredient has a mechanical parameter contribution. The generator composes cultures by selecting ingredients and deriving mechanical parameters through authored derivation rules. The derivation rules are Sacred. The ingredient selections are Profane. + +--- + +## 2. Three-System NPC Architecture: Thematic × Functional × Composition + +### The architecture + +The lead's directive separates NPC characterization into three independent systems. Let me map what this means mechanically: + +**System A: Thematic Patterns** — WHO this character is in the story's emotional architecture + +| Pattern | Emotional Function | Content Depth | Generator Input | +|---|---|---|---| +| FRIEND | Trust anchor hiding a contradiction | Tier 1 (always) | Contradiction arc template, tell progression, warmth phase structure | +| MIRROR | Honest character amplifying others' dishonesty | Tier 1 | Transparency profile, vulnerability map, what they don't know | +| ANCHOR | Embodies "enough" — genuine contentment | Tier 2 | Contentment source, what threatens it, why it's not ignorance | +| GHOST | Absent authority shaping events | Stub only | Influence model, communication patterns, who acts on their behalf | +| CATALYST | Outsider who forces reckoning | Tier 2 | What disruption they bring, why they're here, who they destabilize | +| THRESHOLD | Embodies the district's moral question | Varies | The object/person/situation that makes "enough" inadequate | +| REMNANT | Former ascended who came back | Tier 2 | What they were, why they returned, what they lost, what they gained | +| SYSTEM | Institutional representative | Tier 2 | Which institution, what authority, how they use/abuse it | +| NOBODY | Background character who can promote | Tier 3 → dynamic | Promotion triggers, what they notice, what they become when noticed | + +**System B: Functional Motivations** — WHAT this character does in the gameplay loop + +| Motivation | Gameplay Role | Investigation Function | Navigation Function | +|---|---|---|---| +| HANDLER | Off-stage authority, pressure source | Whose orders? Who benefits? | Whose approval do I need? What do they demand? | +| WITNESS | Accidentally saw something | Information source if found | Liability to manage or protect | +| TURNCOAT | Loyalty will flip mid-game | Potential ally/threat | Betrayal risk, trust recalibration | +| CIVILIAN | Uninvolved, dragged in by events | Collateral damage of investigation | Consequences of the player's actions made personal | +| OPERATOR | Network member, competent and comfortable | Target, information holder | Colleague, dependency, potential rival | +| SKEPTIC | Doubts the network's justification but hasn't acted | Potential informant | Potential ally or threat depending on which way they break | + +**System C: Composition Rules** — HOW patterns and motivations combine + +This is the new system. Every NPC gets one thematic pattern (System A) and one functional motivation (System B). The composition rules define which combinations are valid, which are forbidden, and which create the richest dynamics. + +### The composition matrix + +Let me map every valid combination. This is the generator's constraint specification: + +| | HANDLER | WITNESS | TURNCOAT | CIVILIAN | OPERATOR | SKEPTIC | +|---|---|---|---|---|---|---| +| **FRIEND** | Forbidden | Valid (low) | **EXCELLENT** | Valid (med) | **EXCELLENT** | Valid (high) | +| **MIRROR** | Forbidden | Valid (med) | Forbidden | **EXCELLENT** | Forbidden | Valid (med) | +| **ANCHOR** | Forbidden | Valid (low) | Valid (low) | **EXCELLENT** | Valid (low) | Valid (med) | +| **GHOST** | **EXCELLENT** | Forbidden | Forbidden | Forbidden | Valid (med) | Forbidden | +| **CATALYST** | Valid (med) | Valid (med) | Valid (high) | Forbidden | Valid (med) | **EXCELLENT** | +| **THRESHOLD** | Valid (med) | Valid (high) | Valid (med) | Valid (med) | Valid (med) | Valid (med) | +| **REMNANT** | Valid (low) | Valid (med) | Valid (high) | Valid (med) | Forbidden | **EXCELLENT** | +| **SYSTEM** | **EXCELLENT** | Valid (low) | Valid (high) | Forbidden | Valid (med) | Valid (med) | +| **NOBODY** | Forbidden | **EXCELLENT** | Valid (high) | **EXCELLENT** | Valid (med) | Valid (high) | + +Rating key: +- **EXCELLENT** = synergistic — the combination produces dynamics neither system creates alone +- **Valid (high/med/low)** = works, with varying richness +- **Forbidden** = contradictory or mechanically incoherent + +### Why the EXCELLENT combinations work + +Let me break down what makes each synergy mechanically interesting: + +**FRIEND × TURNCOAT:** Your closest ally is the one whose loyalty flips. This is the MAXIMUM betrayal configuration. The warmth phase is real — they genuinely care about you. And then the pressure breaks them. The player faces: "My friend betrayed me, but I understand WHY." This is the complicity question aimed directly at the player's relationship. + +**FRIEND × OPERATOR:** Your closest ally is competent within the network. They're not conflicted — they're good at what they do. The contradiction is: they're hiding something from you (FRIEND requirement), and it's that they're deeper in than you thought (OPERATOR). The warmth is professional respect layered over personal affection. + +**MIRROR × CIVILIAN:** The honest character is also uninvolved. Their transparency is total because they have nothing to hide. When they get dragged in by the player's actions, the damage is devastating — you broke the one genuinely innocent person. + +**ANCHOR × CIVILIAN:** The content person is uninvolved. Their contentment is genuine AND uncomplicated. When events drag them in, the question is: "Was their peace worth protecting? Did my investigation destroy something good?" + +**GHOST × HANDLER:** The absent authority IS the handler. They apply pressure through intermediaries. You never meet them. You only feel their influence through demands delivered by others. The detective can never confront them directly; the smuggler can never negotiate face-to-face. + +**CATALYST × SKEPTIC:** The outsider who forces reckoning is also the one who doubts the network. They destabilize not through investigation but through moral questioning. They ask "why do you do this?" and nobody has a good answer. + +**REMNANT × SKEPTIC:** The person who transcended and came back is also the one questioning current arrangements. They have AUTHORITY to question — they've been further than anyone. Their skepticism isn't ignorance; it's hard-won wisdom. + +**SYSTEM × HANDLER:** The institutional representative IS the handler. The Commission inspector who applies pressure is also the system's visible face. Investigation target AND authority figure. The detective can't arrest their own chain of command. + +**NOBODY × WITNESS:** The background character accidentally saw something. They haven't told anyone. They don't know what they saw was important. When the player notices them — gives them attention — they promote from Tier 3 to Tier 2 and become an information source. But they're fragile. The network will notice you talking to them. + +**NOBODY × CIVILIAN:** The background character who gets pulled into events. They were wallpaper. The player's actions make them a person. This is the content-as-consequence mechanic — the player's investigation has collateral damage, and the damage has a face they didn't expect. + +### THE NOBODY: Dynamic Tier Promotion + +This is the lead's new pattern and it's mechanically fascinating. Let me spec it out: + +**Core mechanic:** THE NOBODY starts at Tier 3. They have a routine, a greeting, a name. They're social wallpaper. But they have a **promotion trigger set** — conditions under which the generator has pre-seeded content for them to become Tier 2. + +```yaml +nobody_spec: + promotion_triggers: + - type: player_attention + condition: "Player initiates conversation 3+ times" + promotion_path: witness # They reveal they saw something + - type: proximity_event + condition: "Player witnesses them near a network event" + promotion_path: civilian # They get dragged in + - type: network_pressure + condition: "Network needs a new recruit" + promotion_path: operator # They get recruited in real time + - type: investigation_pressure + condition: "Detective runs out of leads" + promotion_path: skeptic # They volunteer doubts they've been sitting on + + # Tier 3 content (always loaded) + tier3: + routine: standard_worker + greeting_pool: [generic_greetings] + name: generated_from_cultural_params + + # Tier 2 content (loaded on promotion, pre-generated by generator) + tier2_witness: + what_they_saw: "Kael meeting unknown contact in B-7" + how_they_react: "Nervous, doesn't want to be involved" + dialogue_pool: [witness_reluctant_pool] + tell_system: "Avoids eye contact when topic is near event" + + tier2_civilian: + how_dragged_in: "Their routine overlaps with network operations" + stakes: "Job security, family, desire for quiet life" + dialogue_pool: [civilian_distressed_pool] + + # etc. +``` + +**The generator's job:** For every NOBODY, pre-generate 2-3 promotion paths with Tier 2 content. The content exists in the data but is dormant until the promotion trigger fires. The player never knows which background characters have promotion paths. This creates the illusion of infinite depth — "anyone could be important" — without actually requiring infinite content. + +**The Sacred/Profane mapping:** +- Sacred: The promotion trigger TYPES (player attention, proximity, network pressure, investigation pressure) — these are engine patterns +- Profane: Which specific NOBODY has which promotion paths, what they saw, how they react — generated per world from templates +- Middle Kingdom: The promotion path STRUCTURES (witness has what-they-saw + reluctance curve, civilian has stakes + distress curve) — authored templates, procedurally filled + +**At 300-world scale:** Each world gets 5-10 NOBODY NPCs with pre-generated promotion paths. That's 1500-3000 dormant stories across the game. The player encounters maybe 10% of them. Different players in different worlds promote different NOBODYs. This is emergent narrative from a generator specification, and it's beautiful. + +### Composition constraints for the generator + +The generator needs these rules when assembling a district's NPC roster: + +**Hard constraints (Sacred):** +1. Every district has exactly 1 FRIEND per supported PC archetype +2. Every district has exactly 1 MIRROR (or 0 if district is explicitly mirror-free) +3. No NPC can have a Forbidden composition (per matrix above) +4. FRIEND NPCs must be Tier 1. MIRROR must be Tier 1. All others Tier 2+. +5. The entanglement ratio (D-029: 30/50/20) must hold across the district + +**Soft constraints (Middle Kingdom — structure is sacred, specific values are profane):** +1. At least 2 EXCELLENT compositions per district (maximize dramatic richness) +2. At least 1 NOBODY with witness promotion path per district +3. TURNCOAT pool minimum 2 candidates (anti-metagaming) +4. SKEPTIC must be in same social site as at least 1 OPERATOR (proximity creates tension) +5. FRIEND's functional motivation should differ between PC archetypes (smuggler's FRIEND is OPERATOR, detective's FRIEND is TURNCOAT — different emotional trajectories) + +**Anti-constraints (what the generator should NOT do):** +1. Don't assign all EXCELLENT compositions in one district — spread the richness +2. Don't put all NOBODYs in one social site — distribute across the district +3. Don't make every TURNCOAT flip at the same time — stagger for pacing +4. Don't assign GHOST + HANDLER to the same absent entity unless the district is small + +**Decision proposal (D-WR-22):** NPCs are characterized by two independent systems: thematic pattern (9 options) and functional motivation (6 options). A composition matrix defines valid, excellent, and forbidden combinations. The generator selects compositions per NPC within Sacred hard constraints, Middle Kingdom soft constraints, and anti-constraints. THE NOBODY pattern uses dynamic tier promotion with pre-generated dormant content paths. + +--- + +## 3. Eight PC Archetypes as Generator Inputs + +### The archetype set + +The lead confirmed 8 archetypes with fluid transitions. Gore's vocabulary (Worker, Investigator, Operator, Wanderer, Builder, Seeker, Guardian, Rebel) is the starting point. Let me map each to generator-input specifications: + +| Archetype | Information Position | Core Mechanic | "Is This Enough?" | Generator Must Produce | +|---|---|---|---|---| +| **Worker** (Smuggler) | Insider | Risk management, dual-life navigation | "Is the money worth what it costs?" | Starting knowledge of network, cover identity, network role, insider access tier | +| **Investigator** (Detective) | Outsider examining | Pattern recognition, social investigation | "Is the truth worth what it disrupts?" | Investigation authority, analytical tools, outsider access tier, institutional backing | +| **Operator** | Insider controlling | Network building, resource management, power | "Is the power worth what I've become?" | Network position (higher than Worker), operational knowledge, lieutenants, rivals | +| **Wanderer** (Newcomer) | Blank slate | Discovery, relationship building, cultural learning | "Is belonging worth the compromise?" | Minimal starting knowledge, arrival context, cultural alienation, fast relationship mechanics | +| **Builder** | Insider constructing | Base building, community development, legacy | "Is the legacy worth the cost of building?" | Property/project, community ties, resource access, institutional relationships | +| **Seeker** | Transcending | Lattice progression, perception expansion | "Is transcendence worth what you lose?" | Lattice tier, perception modes, technical knowledge, social distance as you ascend | +| **Guardian** | Insider protecting | Defense, security, threat assessment | "Is what I protect worth what I do to protect it?" | Security role, surveillance access, threat knowledge, community investment | +| **Rebel** | Against | Faction politics, institutional disruption | "Is the cause worth the destruction?" | Ideological commitment, faction ties, target knowledge, what they're willing to destroy | + +### Archetype as generator specification + +Each archetype definition is a **generator template** — a specification that the District Composer uses to create viable starting positions in every generated world: + +```yaml +archetype: + id: worker + display_name: "The Worker" + + # What the generator must create for this archetype in every district + required_district_content: + - starting_knowledge: + network_membership: true # Knows the hidden network + network_scope: partial # Doesn't know the full extent + cultural_integration: high # Belongs to the community + institutional_knowledge: low # Doesn't understand the system from above + - relationships: + friend_functional_preference: [operator, turncoat] # FRIEND should be network-connected + minimum_insider_contacts: 3 # Knows at least 3 network members + minimum_civilian_contacts: 2 # Has life outside the network + - access_tiers: + network_members: insider + community: peer + institutional_figures: public # Authority doesn't know them + outsiders: peer # Appears normal + - agency_boundaries: + can_do: [transport, negotiate, maintain_cover, socialize] + cannot_do: [arrest, investigate_officially, access_records, command] + + # Monologue voice specification (for line generation) + voice: + perspective: relational # Thinks in people, not patterns + vocabulary: [work, cargo, shifts, friends, money, risk, home] + anxiety_triggers: [exposure, betrayal, inspection, loyalty_test] + moral_register: complicity # Default, overridden by district moral texture + + # NPC-mode behavior specification (when not player-controlled) + npc_behavior: + routine_base: shift_worker + deviation_triggers: [network_operation, handler_demand, friend_crisis] + observable_actions: [corridor_meeting, schedule_deviation, cargo_inspection_anxiety] + investigation_vulnerability: [schedule_gap, cargo_anomaly, nervous_behavior] +``` + +### Archetype transitions as game mechanics + +The lead says transitions are a mechanic, not just narrative flavor. Let me define what this means mechanically: + +**Transition = a change in the player's relationship to the systems around them.** The archetype determines: +- What you KNOW (starting knowledge) +- What you CAN DO (agency boundaries) +- How others TREAT YOU (access tiers) +- What you NOTICE (monologue triggers) +- What the game ASKS YOU (moral question) + +A transition changes ALL of these. That's not a costume change — it's a gameplay transformation. + +### The transition graph + +Not all transitions are valid. The generator needs to know which paths exist: + +``` + Wanderer + ↓ ↑ + Worker ←→ Builder + ↓↑ ↓↑ + Operator Guardian + ↓↑ ↓↑ + Rebel ←→ Seeker + ↑ + Investigator (can transition to Seeker or Guardian) +``` + +Transition rules: + +| From → To | Trigger Condition | What Changes | Generator Content Needed | +|---|---|---|---| +| Wanderer → Worker | Accept network role | Gain insider knowledge, gain community, lose mobility | Recruitment scene, new starting knowledge, relationship shifts | +| Worker → Operator | Accumulate network influence | Gain authority within network, gain power, gain enemies | Promotion arc, lieutenant assignments, rival generation | +| Worker → Builder | Invest in community | Gain property/project, gain institutional ties, lose anonymity | Project definition, community investment, public visibility | +| Operator → Rebel | Decide the system is wrong | Lose network loyalty, gain ideological allies, become a target | Faction break, new allies, new enemies, philosophical crisis | +| Builder → Guardian | Become invested in protecting what you built | Gain security role, gain threat awareness, lose innocence | Threat generation, security responsibilities, moral compromises | +| Guardian → Seeker | Decide protection isn't enough; need greater capability | Gain lattice progression, lose human connection gradually | Ascension opportunity, capability gains, social distance | +| Investigator → Guardian | Decide the system needs defenders, not just investigators | Lose investigation authority, gain protection mandate | Role shift, new responsibilities, perspective change | +| Investigator → Seeker | Pursue enhanced perception for investigative purposes | Gain analytical capabilities, lose human-readable empathy | Lattice enhancement tied to investigation, ethical questions about surveillance | + +### What the generator produces per archetype per world + +For each of the 8 archetypes, the District Composer must produce: + +| Component | Content Type | Generation Method | +|---|---|---| +| Starting knowledge graph | YAML | Derived from archetype template + district context | +| Relationship map | YAML | Generated from archetype's social position requirements | +| FRIEND assignment | Pool selection | Draw from district FRIEND pool filtered by archetype preference | +| Monologue seed pool | Dialogue lines | Line expander from archetype voice card + district moral texture | +| NPC-mode behavior tree | YAML | Adapted from archetype behavior template + district routine patterns | +| Access tier map | YAML | Derived from archetype template + cultural access profile | +| Transition opportunities | YAML | Which transitions are available in this district, what triggers them | + +**At 300-world scale:** 300 worlds × 8 archetypes = 2,400 archetype instantiations. All generated. The authored inputs are: 8 archetype templates + 8 voice cards + transition rules. The generators do the rest. + +**Decision proposal (D-WR-23):** 8 PC archetypes (Worker, Investigator, Operator, Wanderer, Builder, Seeker, Guardian, Rebel) with authored template specifications. Each archetype defines starting knowledge, relationship requirements, access tiers, agency boundaries, voice specification, and NPC-mode behavior. Transitions are mechanical game events that change all parameters. The generator instantiates all 8 archetypes per world from templates + district context. + +--- + +## 4. Sacred/Profane/Middle Kingdom: Full System Mapping + +### The framework applied to generators + +Nigel's framework is the right architectural language. At 300-world scale, it becomes the **generator constraint specification**: + +- **Sacred** = rules the generator must obey (never varies, authored once) +- **Profane** = parameters the generator draws from pools (varies per world) +- **Middle Kingdom** = structures the generator instantiates with profane content (sacred skeleton, profane flesh — exactly my R3 concept, now applied to generators instead of hand-authoring) + +### Complete system mapping + +| Game System | Sacred (Generator Rules) | Profane (Pool Draws) | Middle Kingdom (Templates) | +|---|---|---|---| +| **Cultural generation** | Derivation rules (ingredient → parameter), access tier formulas, information flow patterns | Which ingredients are selected per world | Cultural parameter set structure, social norm modifier list | +| **NPC generation** | Composition matrix (valid/forbidden), tier requirements per pattern, entanglement ratio | Which NPCs fill which roles, names, personality trait assignments | NPC profile structure (10 axes), thematic pattern templates, functional motivation templates | +| **FRIEND system** | 5-phase arc structure, tell system mechanics, warmth → contradiction progression | Which NPC is FRIEND, specific contradiction content, specific tell behaviors | FRIEND template (arc phases, emotional beats, discovery triggers) — authored pool, culturally skinned per world | +| **NOBODY system** | Promotion trigger types, tier transition mechanics | Which NOBODYs have which promotion paths, specific content per path | Promotion path templates (witness path, civilian path, operator path, skeptic path) | +| **Triangle system** | Triangle must have 3 NPCs, must produce a fork, must cascade | Which NPCs form which triangles, specific tension content | Triangle type templates (power, loyalty, knowledge, romantic, economic) | +| **District structure** | Minimum social sites, minimum NPC count, adversarial pair required, FRIEND required per archetype | Social site configuration, NPC assignments, location descriptions | District skeleton (social sites + hidden network + patterns + archetypes + contested resource) — my R3 skeleton, now a generator template | +| **PC archetypes** | 8 archetype definitions, transition graph, agency boundaries | Starting position per world, specific NPC relationships | Archetype instantiation template (knowledge + relationships + access + behavior) | +| **Dialogue** | Tag taxonomy (D-035), 4-layer selection pipeline, access tier filtering | Specific lines per NPC per situation, voice variations | Line pool structure, voice card templates | +| **Monologue** | Trigger system, character partition (D-032), prerequisite gates | Specific lines per character per district | Monologue pool structure per archetype | +| **Randomization** | Pool minimum sizes, constraint satisfaction rules, anti-metagaming requirements | Seed-time draws from all pools | Seed configuration structure (what gets drawn, constraint validation) | +| **Gate topology** | Connectivity requirements (every world reachable), minimum route diversity | Which worlds connect to which, travel times | Topology generation rules (small-world network properties, hub placement) | +| **Storyteller** | Pacing algorithm, escalation phase structure, engagement tracking | Timing of events, selection from event pools | Storyteller decision nodes (DSL effects vocabulary) | +| **Faction system** | Faction definitions, power conservation | Per-world faction strength, local faction presence | Faction influence template (how strength maps to access, NPC behavior, resource availability) | + +### Pool structures for generators + +At 300-world scale, the pool concept becomes the central architecture. Every profane element is drawn from a pool. The pools are the authored content: + +**Global pools (used across all worlds):** + +| Pool | Size Target | Content Per Entry | Author Cost | +|---|---|---|---| +| FRIEND templates | 30-50 | Full contradiction arc, warmth phase, tell system, culturally unspecified | 15-20h each | +| MIRROR templates | 15-25 | Transparency profile, vulnerability map, emotional arc | 10-15h each | +| NOBODY promotion templates | 40-60 | 2-3 promotion paths per template, Tier 2 content per path | 3-5h each | +| NPC personality archetypes | 20-30 | Personality trait combinations, voice hints, behavioral tendencies | 2-3h each | +| Triangle type templates | 10-15 | Tension structure, fork conditions, cascade effects | 3-4h each | +| Storyteller event templates | 30-50 | Decision node DSL, trigger conditions, effects | 2-3h each | +| Contraband/contested resource types | 15-20 | Moral dimension, gameplay relevance, cultural grounding hooks | 2-3h each | +| Environmental text template sets | 10-15 per economic function | Signs, menus, graffiti patterns, ticker headline templates | 4-6h per set | + +**Per-world pools (generated, not authored):** + +| Pool | Generated From | Size Per World | +|---|---|---| +| NPC roster | Cultural params + social site templates + thematic patterns + functional motivations | 15-40 NPCs | +| FRIEND candidates | Global FRIEND pool + cultural skinning + district context | 2-4 per archetype | +| Role-slot assignments | NPC roster + triangle templates + composition rules | All role slots filled | +| Dialogue lines | Voice card + cultural params + line expander | 50-200 per location | +| Environmental text | Template sets + cultural params | 20-40 items | +| Promotion paths | NOBODY templates + district context | 2-3 per NOBODY | + +### Gate topology randomization + +The lead mentioned 300 worlds. These worlds need to be connected. The gate topology is a generator output: + +**Sacred constraints for gate topology:** +1. Every world must be reachable from every other world (connected graph) +2. No world is more than N hops from a hub world (diameter limit) +3. Hub worlds exist at cultural boundary crossings (where ingredient profiles shift) +4. Starting worlds (Wanderer-friendly) must be well-connected (degree 3+) +5. Frontier worlds can be low-connectivity (degree 1-2) for isolation feel +6. Gate connections create trade routes → trade routes determine which contraband flows where + +**Profane parameters for gate topology:** +- Which specific worlds connect to which +- Travel times between connected worlds +- Gate types (span gate = fast, founder gate = rare and fast, wormhole = slow) +- Hub placement (which worlds are hubs) + +**Middle Kingdom template:** +- Small-world network topology (high clustering + short path lengths — like real social networks) +- 5-10 hub worlds (high connectivity, cosmopolitan culture, trade nexus) +- 20-30 mid-tier worlds (moderate connectivity, established cultures) +- 250-270 peripheral worlds (low connectivity, deep-drift cultures, frontier/specialized) + +**The topology shapes gameplay:** The player who starts on a hub world has immediate access to cultural diversity. The player who starts on a frontier world must travel through intermediate worlds to reach the hubs — each intermediate world is a new cultural context, a new ring, a new version of "Is this enough?" + +**Decision proposal (D-WR-24):** All game systems map to Sacred/Profane/Middle Kingdom. Sacred content (rules, derivation formulas, structural requirements) is authored once. Profane content (parameter selections, pool draws) varies per world. Middle Kingdom content (templates with slots) is authored as structures with profane fill. Generators consume Sacred rules and Middle Kingdom templates to produce worlds from Profane pool draws. + +--- + +## 5. What Changes Fundamentally at 300-World Scale + +### The district skeleton becomes a generator template + +My R3 skeleton was designed for hand-authoring: + +``` +Social Sites + Hidden Network + FRIEND + Cultural Group + Moral Texture + Archetypes + Contested Resource +``` + +At 300-world scale, this skeleton is now the **District Composer's output specification.** Every element in the skeleton is generated, not authored: + +| Skeleton Element | R3: Hand-Authored | R4: Generator Produces | +|---|---|---| +| Social sites | Designed per district | Generated from Economic Function ingredient + cultural params | +| Hidden network | Designed per district | Generated from Faction Presence + contraband type + cultural immune system | +| FRIEND | Authored Tier 1 per district | Selected from global FRIEND template pool, culturally skinned, adapted to district context | +| Cultural group | Referenced from cluster brief | Generated from ingredients menu | +| Moral texture | Emerged from configuration | Derived from Philosophical Alignment + Settlement Motivation ingredients | +| PC archetypes | Selected per district | All 8 supported everywhere; instantiated from archetype templates | +| Contested resource | Designed per district | Selected from contraband/resource pool, filtered by cultural plausibility | + +### The authoring pipeline becomes generator development + +My R3 7-phase pipeline (Design → Population → Tier 1 → Tier 2 → Tier 3 → Integration → Playtesting) described a human-driven production process. At 300 worlds, the pipeline becomes: + +``` +GENERATOR DEVELOPMENT PIPELINE + +Phase 1: INGREDIENT AUTHORING +├── Heritage Roots definitions (8 options × mechanical params) +├── Settlement Motivation definitions (8 options × mechanical params) +├── Economic Function definitions (8 options × social site templates) +├── Philosophical Alignment definitions (7 options × moral texture) +├── Faction Presence definitions (6 options × power dynamics) +├── Drift Stage definitions (4 options × naming/language effects) +└── Derivation rules (ingredient → mechanical parameter) + +Phase 2: TEMPLATE AUTHORING +├── FRIEND templates (30-50 contradiction arcs) +├── MIRROR templates (15-25 transparency profiles) +├── NOBODY promotion templates (40-60 dormant stories) +├── Triangle type templates (10-15 tension structures) +├── Storyteller event templates (30-50 decision nodes) +├── Voice card library (30+ NPC voice archetypes) +├── PC archetype definitions (8 full specifications) +└── Transition rules and content + +Phase 3: GENERATOR DEVELOPMENT +├── Cultural Parameter Generator (ingredients → params) +├── NPC Generator (params + patterns + motivations → NPCs) +├── FRIEND/MIRROR Skinner (template + culture → instance) +├── District Composer (all generators → complete district) +├── Naming Algorithm (cultural params → names at all levels) +├── Dialogue Line Expander (seed lines + voice → pool) +├── Gate Topology Generator (constraints → connected world graph) +└── NOBODY Promotion Generator (templates + context → dormant paths) + +Phase 4: VALIDATION DEVELOPMENT +├── Schema validation (structural correctness) +├── Composition rule checker (no forbidden combos) +├── Constraint satisfaction verifier (all Sacred rules hold) +├── Cultural coherence checker (generated culture feels real) +├── Emotional integrity checker (FRIEND arcs land, MIRROR feels honest) +└── Diversity metrics (300 worlds don't feel samey) + +Phase 5: GENERATION + REVIEW +├── Generate 300 worlds +├── Automated validation pass (all gates must pass) +├── Human review of FRIEND/MIRROR instances (100% review) +├── Spot-check review of generated districts (5-10%) +├── Benchmark comparison (generated vs. hand-authored quality) +└── Iteration on generators where quality falls short + +Phase 6: HAND-ELEVATION +├── Starting districts (Wanderer entry points) get hand-authored polish +├── Hub worlds get additional hand-authored content depth +├── Narrative-critical worlds get authored story threads +└── Benchmark districts serve as quality reference +``` + +### What MUST still be hand-authored + +Even at 300-world scale, some content is irreducibly human: + +| Content | Why It Can't Be Generated | Quantity | +|---|---|---| +| FRIEND contradiction arcs | Emotional specificity. A generated "your friend is hiding something" is not the same as "Kael meets someone in B-7 and his hands shake when he lies about it." | 30-50 template arcs (culturally skinned × 300 worlds, but the ARCS are hand-written) | +| MIRROR vulnerability maps | Honesty is character-specific. What makes someone transparent in a way that reveals others' dishonesty requires authorial intention. | 15-25 template profiles | +| PC voice cards | The internal voice of a character must be authored with specificity. Generated monologue is flat. | 8 voice cards | +| Seed dialogue lines | The 10-15 authored lines per voice archetype that the line expander works from. These are the DNA of all generated dialogue. | 300-450 lines total | +| Derivation rules | The rules that compute mechanical parameters from ingredients are game design, not content. They require systems thinking. | ~50-100 rules | +| Benchmark districts | 5-8 hand-authored districts that serve as quality targets. The generators must match these. | 5-8 full districts | + +### What changes from my R3 proposals + +| R3 Proposal | R4 Reframe | What Survives | +|---|---|---| +| D-WR-11: Master theme "knowledge as burden" | **Open — the lead hasn't confirmed a universal theme.** Both Gore's "cost of participation" and my "knowledge as burden" are viable. Both map to mechanical systems. The theme debate continues. | The principle that moral texture emerges from configuration, not labels — this is more important than ever at generator scale | +| D-WR-12: 6-8 heritage clusters | **Replaced by ingredients menu (D-WR-21).** Heritage roots are one of 6 ingredients. The generator produces far more cultural variety than fixed clusters. | Each heritage root option inherits R3's mechanical signature and access tier profile | +| D-WR-13: Universal district skeleton | **Survives as generator output spec.** The skeleton is now what the District Composer produces, not what a human designs. | The skeleton structure is Sacred. Its population is Profane. | +| D-WR-14: Content directory as platform | **Survives, expanded.** The directory structure holds generator outputs, not hand-authored content. DLC/mod support means: DLC adds new ingredients, templates, and pool entries. Mods can add the same. | Pack manifest system, overlay mechanics, canonical_id — all survive | +| D-WR-15: Randomization philosophy | **Subsumed by Sacred/Profane/Middle Kingdom (D-WR-24).** The 4-tier model (Structural/Dramatic/Local/Meta) maps onto the S/P/MK framework. Structural = Sacred + seed-time Profane. Dramatic = storyteller Middle Kingdom. Local = runtime Profane. Meta = world-generation Profane. | "Randomize context, author content" survives as the core philosophy — the generators randomize, the authored templates provide the content | +| D-WR-16: 6 PC archetypes | **Expanded to 8 (D-WR-23).** Lead confirmed 8 with fluid transitions. The adversarial pair principle survives but at a different level — it's a generator constraint, not a per-district design choice. | Archetype definitions as global specs, local instantiation — this pattern is stronger than ever | +| D-WR-17: Districts as production units | **Replaced by generators as production units.** The 7-phase pipeline becomes generator development. The 6 tools become generators + validators. | The validation tooling (schema, cross-reference, cultural consistency) is MORE important at 300-world scale | +| D-WR-18: Multiplicative content variety | **Vindicated and amplified.** 300 worlds × 8 archetypes × FRIEND pool × seed variation = astronomical variety. The multiplication table is now the generator's output space. | The multiplication principle IS the generator architecture | +| D-WR-19: Heritage cluster distribution | **Replaced by generator diversity constraints.** The generator must ensure cultural diversity across 300 worlds, not follow a hand-designed distribution map. | The constraint that "not all worlds should feel the same" becomes a generator validation metric | +| D-WR-20: Adversarial pair as minimum content unit | **Survives as Sacred generator constraint.** Every district must have at least one insider archetype and one investigator archetype. The generator enforces this. | The principle that every district needs information asymmetry between archetypes | + +--- + +## 6. The Generator Interaction Map + +Here's what makes me genuinely excited as a systems designer. The generators INTERACT with each other, and those interactions produce emergent variety at 300-world scale: + +``` +GENERATOR INTERACTION MAP + +Cultural Parameter Generator + ├──→ NPC Generator (cultural params shape personality, routine, norms) + ├──→ Naming Algorithm (cultural params determine phonological rules) + ├──→ FRIEND/MIRROR Skinner (cultural params dress the template) + ├──→ Dialogue Line Expander (cultural vocabulary enters generated lines) + ├──→ Environmental Text Generator (cultural signs, menus, graffiti) + └──→ District Composer (cultural params shape social sites, hidden network) + +NPC Generator + ├──→ Composition Rule Checker (validates pattern × motivation) + ├──→ Triangle Generator (NPCs assigned to triangle roles) + └──→ NOBODY Promotion Generator (which NPCs get promotion paths) + +FRIEND/MIRROR Skinner + ├──→ Dialogue Line Expander (FRIEND voice feeds line generation) + └──→ Monologue Generator (FRIEND-specific monologue triggers) + +District Composer + ├── Consumes: Cultural params, NPC roster, triangle assignments, + │ FRIEND/MIRROR instances, social site templates, adversarial structure + └── Produces: Complete district YAML ready for engine consumption + +Gate Topology Generator + ├── Consumes: World list, cultural distribution, hub requirements + └── Produces: Connected world graph with travel routes + +Seed Configuration Generator + ├── Consumes: District content, pool definitions, constraint rules + └── Produces: Per-seed configuration (which pools draw which results) +``` + +The beauty: **each generator is independently testable.** The Cultural Parameter Generator can be validated against Miri's Krenn brief. The NPC Generator can be validated against Paula's Sova NPCs. The FRIEND Skinner can be validated against our hand-authored FRIENDs. Each generator has a benchmark. Each can be iterated independently. + +But when they INTERACT — when the Cultural Parameter Generator feeds the NPC Generator which feeds the Triangle Generator which feeds the District Composer — the output space explodes combinatorially. 300 worlds. All different. All mechanically coherent. All asking the same question. + +--- + +## Decisions Summary + +| # | Decision | Domain | +|---|---|---| +| D-WR-21 | Cultural ingredients menu: 6 categories × 5-8 options. Generator composes cultures from ingredient selections + authored derivation rules. Rules are Sacred, selections are Profane. | Culture | +| D-WR-22 | Three-system NPC architecture: thematic patterns (9) × functional motivations (6), governed by composition matrix. THE NOBODY uses dynamic tier promotion with pre-generated dormant content. | NPC Design | +| D-WR-23 | 8 PC archetypes with generator template specifications. Fluid transitions are a game mechanic. Generator instantiates all 8 per world from templates + context. | Archetypes | +| D-WR-24 | Sacred/Profane/Middle Kingdom maps to all game systems. Sacred = generator rules, Profane = pool draws, Middle Kingdom = templates with slots. | Architecture | +| D-WR-25 | R3 district skeleton survives as generator output specification (Sacred structure). Population is Profane. The District Composer is the key generator. | Structure | +| D-WR-26 | Generator development pipeline replaces authoring pipeline. 6 phases: Ingredient Authoring → Template Authoring → Generator Development → Validation Development → Generation + Review → Hand-Elevation. | Pipeline | +| D-WR-27 | Authored content at 300-world scale is: FRIEND arcs (30-50), MIRROR profiles (15-25), NOBODY promotion templates (40-60), PC voice cards (8), seed dialogue lines (300-450), derivation rules (~100), benchmark districts (5-8). Total: ~1600-2800 hours of irreducible authoring. | Content Strategy | +| D-WR-28 | Gate topology generation follows Sacred constraints (connected graph, diameter limit, hub placement) with Profane specific connections. Topology shapes gameplay through cultural distance traversal. | World Structure | + +--- + +*The 300-world reframe doesn't invalidate the systems design from Rounds 1-3. It VALIDATES it. The district skeleton, the composition matrix, the Sacred/Profane distinction, the pool architecture, the adversarial pair — all of these were already generator-shaped thinking. We were designing generator specifications all along. We just didn't know that yet.* + +*Now we do. And the multiplication table isn't 540 first-district experiences. It's 300 worlds × 8 archetypes × FRIEND pool depth × seed variation = a number I won't bother computing because the point isn't the number. The point is: every playthrough is a different novel from the same library, and the library grows every time we add a template, an ingredient, or a pool entry.* + +*That's not a content pipeline. That's not even a story machine. That's a story ECOSYSTEM. And the generators are the soil.* + +*— Gestalt* diff --git a/docs/workshops/wiki-review/round4-gore.md b/docs/workshops/wiki-review/round4-gore.md new file mode 100644 index 000000000..911489a28 --- /dev/null +++ b/docs/workshops/wiki-review/round4-gore.md @@ -0,0 +1,507 @@ +# Round 4 — Gore (Responding to Lead's Direction) + +300 worlds. + +I've been thinking about 7 cultural clusters and 20 districts and authoring pipelines. 300 worlds. That changes everything I said and nothing I meant. Let me work through why. + +--- + +## The Fundamental Shift: From Author to Derive + +Everything I proposed through Round 3 was built on the assumption that a human writes the thematic core of each location. The three-question sequence — what is the system, what does participation cost, what does "enough" mean here — was an authoring prompt. A human reads it, thinks, writes an answer. + +At 300 worlds, that sequence becomes a **derivation function**. The generator takes ingredients, combines them, and the thematic question EMERGES from the combination. No human writes "the cost of participation in this district is obedience to potentially unjust authority." The generator takes `settlement_motivation: military_outpost` + `philosophical_alignment: duty_hierarchy` + `economic_function: defense_contract` and the cost of participation IS obedience to potentially unjust authority. It couldn't be anything else. + +This is the reframe the lead is asking for: my thematic framework isn't wrong, it's misplaced. It belongs in the generator's derivation logic, not in authoring guidelines. + +**The question "Is this enough?" isn't a field in a YAML file. It's a function of ingredients.** + +--- + +## 1. Cultural Groups: Ingredients That Generate Philosophy + +The lead is right. My 7 clusters were answers masquerading as a system. "Pragmatic collectivist" is what you GET when you combine certain ingredients — it's not an ingredient itself. + +### The ingredients menu — thematic layer + +The lead identified: heritage roots, settlement motivation, economic function, philosophical alignment, corporate presence, time since settlement / drift stage. And flagged the missing one: economics. + +I want to add one more category the lead didn't name, and redefine one: + +**Added: System failure mode.** What's broken here? Every community in the Settled Reach has adapted to some system that doesn't work as advertised. The failure mode generates the moral texture. This is Miri's insight from Round 3 — "What do systems do to the people inside them?" The answer is: different things, depending on what's broken. + +| Failure Mode | What's Broken | Moral Texture That Emerges | Community Adaptation | +|---|---|---|---| +| Regulation without justice | Rules exist but don't serve people | Complicity — quiet grey economy | Sova | +| Abundance without purpose | Material needs met, existential vacuum | Ennui — voluntary risk-seeking | Core world | +| Scarcity without solidarity | Not enough, and nobody's sharing | Desperation — survival over ethics | Frontier collapse | +| Order without accountability | System works perfectly, crushes people | Rot — institutional evil wearing a smile | Administrative capital | +| Freedom without structure | No rules, no protection | Chaos — the strong exploit the free | Autonomous zone | +| Knowledge without wisdom | Smart people making catastrophic choices | Hubris — brilliance as danger | Research outpost | +| Loyalty without exit | Bonds so strong they become chains | Obligation — debt that never clears | Close-knit colony | +| Prosperity without honesty | Wealth built on something hidden | Silence — comfort maintained by not-looking | Wealthy station | + +**System failure mode is the ingredient that generates the thematic question.** A generator that knows the failure mode can derive: what participation costs, what "enough" means, what kind of FRIEND arc makes sense, what kind of adversarial structure exists. + +**Redefined: "Philosophical alignment" should be "dominant social contract."** The lead's term suggests ideology. What actually matters is the implicit deal: what does the community promise its members, and what does it ask in return? That's the social contract, and it's more concrete than "philosophy." + +| Social Contract | Promise | Price | When It Fails | +|---|---|---|---| +| Collective security | We protect our own | Mind your business, don't break ranks | Sova — protection enables exploitation | +| Meritocratic advancement | Work hard, rise | Compete, accept your position | When the game is rigged | +| Hierarchical order | Clear roles, clear expectations | Obey, don't question | When the orders are wrong | +| Individual liberty | No one tells you what to do | No one helps you either | When you need help | +| Spiritual meaning | Life has purpose beyond material | Believe, contribute, don't doubt | When the meaning is manufactured | +| Institutional trust | The system works | Submit to process | When the institution is the problem | + +### What a society DOESN'T pick + +The lead flagged this and it's the key insight. A frontier settlement that picks `individual_liberty` as its social contract and has NO `corporate_presence` and NO `spiritual_meaning` tells you something by its absences. The emptiness generates its own gameplay: there's no safety net, no deeper purpose, just people and their choices. That emptiness IS the thematic texture. A generator should read absence as signal, not as missing data. + +### Economics as the missing ingredient + +The lead is right: economics was absent. What makes extra income tempting? This is the ingredient that determines why the adversarial structure exists at all. + +| Economic Pressure | Why Grey Economy Exists | What Gets Moved | +|---|---|---| +| Regulatory exclusion | Legal goods priced out of reach | Healthcare, lattice components (Sova) | +| Monopoly extraction | One entity controls access | Competing products, alternatives | +| Embargo/sanctions | External trade restrictions | Cultural goods, political materials | +| Resource bottleneck | Natural scarcity of critical material | Raw materials, fabrication feedstock | +| Labor exploitation | Work doesn't pay enough to live | Supplemental income services, moonlighting | +| Status economy | Social currency requires display | Luxury goods, status markers | +| Knowledge restriction | Information asymmetry maintained by institutions | Data, research, credentials | + +**The economic pressure determines the NATURE of the contested resource.** At 300-world scale, this is crucial — the generator needs to pick an economic pressure that's consistent with the other ingredients, and the contested resource flows from that choice. The moral texture of the smuggling (sympathetic? predatory? ambiguous?) flows from whether you're moving healthcare for people who can't afford it or luxury goods for people who want status. + +### What my 7 clusters become at 300 worlds + +My Round 3 clusters dissolve into ingredient combinations: + +| Old Cluster | Actual Ingredient Combination | +|---|---| +| Pragmatic Collectivist (Krenn) | Nordic-Baltic heritage + economic_settlement + logistics_function + collective_security + no_corp + 180yr_drift + regulatory_exclusion | +| Core Institutional | Cosmopolitan heritage + governance_settlement + administrative_function + institutional_trust + heavy_corp + 250yr_drift + monopoly_extraction | +| Frontier Individualist | Mixed heritage + economic_settlement + extraction_function + individual_liberty + no_corp + 60yr_drift + scarcity | +| Syndic-Corporate | East Asian/Dutch heritage + commercial_settlement + trade_function + meritocratic_advancement + dominant_corp + 150yr_drift + monopoly_extraction | +| Spiritual Communalist | Indian/Indigenous heritage + ideological_settlement + agricultural_function + spiritual_meaning + no_corp + 170yr_drift + labor_exploitation | +| Military/Duty | Roman/Japanese heritage + strategic_settlement + defense_function + hierarchical_order + military_corp + 120yr_drift + embargo | +| Unbound | Cypherpunk heritage + dissent_settlement + none_function + individual_liberty + no_corp + 100yr_drift + knowledge_restriction | + +7 clusters become 7 example combinations from a menu with millions of valid permutations. The generator doesn't pick "pragmatic collectivist" — it picks ingredients, and pragmatic collectivism is what EMERGES when you combine those specific ones. + +### The derivation function + +Here's what the generator needs to produce a society: + +``` +INPUT: Ingredient combination (6-8 categories, each with a selected value or NULL) +OUTPUT: Derived properties: + - social_contract: what the community promises and demands + - system_failure_mode: what's broken + - moral_texture: what participation costs + - thematic_question: "Is this enough?" localized + - adversarial_structure_type: what the hidden network does and why + - cultural_immune_system: what virtues protect the network + - access_tier_profile: how outsiders/insiders are treated + - naming_conventions: derived from heritage + drift + - economic_pressure: why the grey economy exists +``` + +The derivation isn't random. It's DETERMINISTIC given the inputs. Same ingredients always produce the same society. The randomization happens at ingredient SELECTION, not at derivation. + +This means style briefs — Miri's Krenn brief and its equivalents — are REFERENCE IMPLEMENTATIONS. They're what the derivation function produces for a specific ingredient set. You don't need 300 style briefs. You need the derivation function, plus 10-20 reference implementations that demonstrate it works correctly and that writers can use as models for the authored content that sits on top. + +--- + +## 2. Content Patterns: Three Systems, and What THE NOBODY Means + +The lead's three-system separation is architecturally correct. I was conflating thematic function with gameplay function. Let me un-conflate them. + +### A. Thematic patterns: what the character means + +These are the patterns I've been developing. They're about what the character means to the story, to the player's emotional experience, to the question "Is this enough?" + +| Pattern | Thematic Function | What They Mean to the Question | +|---|---|---| +| **FRIEND** | Trust → betrayal → reckoning | "I thought I knew what was enough. This person's secret changed what enough means." | +| **MIRROR** | Honesty in dishonest world | "This person has actually answered the question. Their answer exposes mine." | +| **ANCHOR** | Embodied contentment | "This person says yes, it's enough. And they might be right." | +| **GHOST** | Absent power | "Someone I can't see decided what enough means for everyone here." | +| **CATALYST** | Disruption from outside | "My equilibrium was fine until this arrived." | +| **THRESHOLD** | The thing that makes "enough" inadequate | "I could keep saying yes. But now I've seen THIS." | +| **REMNANT** | The cost of ascending past "enough" | "I went beyond enough. Let me tell you what it cost." | +| **SYSTEM** | The institutional embodiment | "The system itself is an answer to 'Is this enough?' — and it's wrong." | +| **NOBODY** | Background that becomes foreground | "I didn't think this person mattered. I was wrong about what matters." | + +### THE NOBODY deserves its own section + +The lead added THE NOBODY and I want to explain why this is the most important pattern for 300 worlds. + +At 300 worlds, MOST characters are nobodies. The generator produces hundreds of NPCs with routines and schedules and basic personalities. They populate bars and corridors and workplaces. They are social wallpaper. The player walks past them. + +THE NOBODY pattern says: **any of them could matter. The question is whether you pay attention.** + +This is the 300-world version of "Is this enough?" applied to PEOPLE. Is this person enough to matter to you? Is this background character worth your attention? When you walk through a station and see a woman sitting alone at a bar, checking the door every few minutes — is that enough to stop? + +The lead's "dynamic tier promotion" system is the mechanic. But the thematic meaning is deeper: **THE NOBODY is the game asking whether the player has internalized the question.** Early game, you notice the FRIEND, the MIRROR, the characters the game TELLS you to notice. Late game, you start noticing the nobodies. You start seeing the person behind the routine. You start asking "Is this enough?" about characters the game didn't flag. + +That's the endgame of the thematic question. Not "did you solve the mystery" or "did you ascend." **Did you learn to see?** + +#### THE NOBODY at generator scale + +At 300 worlds, THE NOBODY isn't authored. It's EMERGENT. A Tier 3 NPC generated from templates — name, routine, basic personality — becomes a NOBODY when the player invests attention. The promotion mechanic watches for: + +- Player returns to the same location and interacts with the same Tier 3 NPC multiple times +- Player uses observation/perception on a Tier 3 NPC +- Player mentions the NPC in monologue or notes + +When the threshold is crossed, the NOBODY begins promoting. The generator expands their content: deeper personality, relationships, maybe a secret, maybe a connection to the adversarial structure. Not all NOBODYs have secrets. Some are genuinely just people. But the act of paying attention changes what they reveal. + +**The generator needs to be able to GROW content for any NPC on demand.** That's the 300-world requirement. You can't pre-author promotion paths for every Tier 3 NPC. You need a system that takes a sketch NPC and deepens them — adds relationships, adds dialogue, adds texture — when the player signals interest. The ingredients for that deepening come from the same society ingredients that generated them in the first place. + +#### Composition: THE NOBODY + functional motivation + +This is where the three-system architecture becomes powerful. A NOBODY has no thematic pattern yet — they're unassigned. But they DO have a functional motivation from the moment they're generated: + +- NOBODY + CIVILIAN: a person living their life, no connection to anything +- NOBODY + WITNESS: someone who saw something but doesn't know it matters +- NOBODY + OPERATOR: a ring member the player hasn't identified + +When the player pays attention to a NOBODY + WITNESS, the promotion reveals: this person saw something. Now they're THE WITNESS. The thematic pattern emerges from the functional motivation + player attention. + +When the player pays attention to a NOBODY + CIVILIAN, the promotion reveals: this person is just a person. No secret. No connection. Just a life. And that life is interesting enough to explore. + +That second case — the NOBODY who becomes known but has nothing to hide — is THE MIRROR at lower depth. The honest person. The one who makes the dishonest world feel dishonest by contrast. At 300-world scale, the game should produce these organically: players who invest in NOBODYs discover that some of them are mirrors, and that's enough. + +### B. Functional motivations: what the character does + +Nigel's list is gameplay-functional. I'll defer to Gestalt and Nigel on the mechanical details. My contribution: each functional motivation has a thematic resonance that the generator should know about. + +| Functional Motivation | What They Do | Thematic Resonance (what the generator should weight) | +|---|---|---| +| HANDLER | Issues orders from above | Power without accountability — the GHOST's instrument | +| WITNESS | Accidentally observed something | Innocence endangered by knowledge | +| TURNCOAT | Loyalty is shifting | The cost of staying vs the cost of leaving | +| CIVILIAN | Living their life | The baseline. What "enough" looks like without complication. | +| OPERATOR | Running operations | Competence in service of something questionable | +| SKEPTIC | Doubts but hasn't acted | The person who COULD change everything but hasn't paid the price yet | + +### C. Composition rules — the generator's grammar + +The generator picks one thematic pattern + one functional motivation per NPC. Not all combinations are valid. Here are the rules: + +#### Forbidden combinations +| Thematic | Functional | Why Forbidden | +|---|---|---| +| MIRROR | TURNCOAT | A MIRROR is honest. A TURNCOAT is shifting loyalty. Contradiction destroys both patterns. | +| MIRROR | OPERATOR | A MIRROR has no connection to the adversarial structure. An OPERATOR is inside it. | +| ANCHOR | TURNCOAT | An ANCHOR is settled. A TURNCOAT is in motion. | +| GHOST | WITNESS | A GHOST isn't present. A WITNESS must be. | +| GHOST | CIVILIAN | Same reason. GHOST is defined by absence. | + +#### High-value combinations (generators should prefer these) + +| Thematic | Functional | Why Valuable | +|---|---|---| +| FRIEND + OPERATOR | The emotional centerpiece is also inside the operation. Maximum betrayal. Maximum complicity. This is Kael. | +| FRIEND + SKEPTIC | Your trusted person doubts the thing you're part of. Their doubt becomes yours. | +| MIRROR + CIVILIAN | The honest person is just living their life. Their normality is the emotional weapon. This is Hael. | +| ANCHOR + CIVILIAN | The embodiment of "enough" has no connection to the drama. Their contentment is genuine, not maintained by ignorance. | +| CATALYST + HANDLER | The disruption comes from above. The outsider has power. Think: the inspector who arrives and changes everything. | +| THRESHOLD + WITNESS | The moral reckoning is triggered by someone who accidentally saw the thing that makes "enough" impossible. | +| REMNANT + SKEPTIC | Someone who transcended and came back, now doubting. Their doubt carries the weight of experience. | +| NOBODY + CIVILIAN | The most common combination. Background. Wallpaper. Until the player looks. | +| NOBODY + WITNESS | Background character who happens to have seen something. If the player never looks, the information stays hidden. | +| SYSTEM + HANDLER | The institution AND the person enforcing it are one NPC. Bureaucratic evil with a face. | + +#### Composition at 300-world scale + +The generator needs a composition weight table: + +``` +For each NPC in a district: + 1. Roll functional motivation from district's motivation pool + (weighted by adversarial structure type — a smuggling ring + needs more OPERATORs, a political conspiracy needs more + HANDLERs) + 2. IF Tier 1: assign thematic pattern from pattern requirements + (FRIEND and MIRROR are assigned, not rolled) + 3. IF Tier 2: roll thematic pattern from compatible options + (weighted by district needs — does this district have an + ANCHOR yet? a GHOST?) + 4. IF Tier 3: assign NOBODY + (all Tier 3 NPCs start as NOBODY; pattern emerges through + player interaction or storyteller promotion) + 5. Validate combination against forbidden list + 6. Re-roll if forbidden +``` + +**At 300 worlds, Tier 3 is almost everything.** The vast majority of NPCs on any given world are NOBODYs with functional motivations. The generator produces them in bulk. A small number of Tier 1 and Tier 2 NPCs are either authored (for key worlds) or generated from deeper templates (for procedural worlds). The NOBODY-to-something promotion system is what makes 300 worlds feel alive despite the impossibility of authoring 300 x 15+ NPCs at depth. + +--- + +## 3. PC Archetypes: Fluid Positions, Not Character Classes + +The lead's direction is clear: archetypes are positions in a community, not identities. You can move. You can change. The archetype is where you are, not who you are. + +### The 8 as current positions + +Let me reframe my Round 3 archetypes: + +| Archetype | Position in Community | How You Got Here | How You Leave | +|---|---|---|---| +| **Worker** | Employed in the local economy | Born here, or migrated for work | Get fired, get promoted, get disillusioned | +| **Investigator** | Tasked with examining the community | Assigned by institution, or self-appointed | Case closes, cover blown, go native | +| **Operator** | Running something outside official channels | Recruited, or built it yourself | Get caught, get out, go legitimate | +| **Newcomer** | Just arrived, no position yet | Arrived. That's it. | Get a job, make connections, become something else | +| **Wanderer** | Passing through | Chose not to settle, or haven't found a place | Find a reason to stay. Or don't. | +| **Builder** | Creating or maintaining something lasting | Decided this place was worth investing in | Finished, failed, or realized it wasn't worth it | +| **Guardian** | Protecting the community | Chose duty, or duty chose you | Threat resolved, betrayed by the thing you protect | +| **Seeker** | Pursuing something beyond the material | Curiosity, desperation, or calling | Found it, gave up, or discovered the cost | + +### Transition mechanics: what the generator needs + +The generator doesn't need to know every possible transition. It needs to know the **transition triggers** — the conditions under which a player's archetype shifts. + +| Trigger Type | What Happens | Example | +|---|---|---| +| **Economic** | Player's relationship to the local economy changes | Worker who loses their job becomes Newcomer in the next district. Operator who goes legitimate becomes Worker. | +| **Social** | Player's relationship web fundamentally changes | Investigator who falls in love with a local becomes Guardian. Newcomer who builds a network becomes Worker or Operator. | +| **Moral** | Player's stance toward the system changes | Worker who discovers the full scope of exploitation becomes Seeker (wants to transcend) or Guardian (wants to fight). | +| **Geographic** | Player moves to a new district | Any archetype becomes Newcomer on arrival (or Wanderer if they don't commit). | +| **Ascending** | Player pursues lattice enhancement / Higher capability | Any archetype trends toward Seeker. The pursuit of more changes what you are in a community. | +| **Traumatic** | Something breaks the player's current position | Guardian whose charge dies. Builder whose project is destroyed. Operator who gets betrayed. Trauma is the universal transition trigger. | + +### What "fluid" means for generators + +At 300 worlds, the generator needs to know: + +1. **Starting archetype** — determined by game setup (v0.1: Worker or Investigator; v0.2+: also Newcomer; full scale: all 8 available) +2. **Current archetype** — tracked by behavioral analysis. The game watches what you DO and adjusts: + - Spending most time working a job → Worker + - Spending most time investigating → Investigator + - Spending most time building relationships → Builder or Guardian + - Spending most time moving between districts → Wanderer + - Spending most time pursuing ascension → Seeker +3. **Archetype-appropriate content selection** — monologue voice, dialogue options, NPC reactions all shift with current archetype +4. **Transition moments** — when the behavioral analysis detects a shift, the monologue voice acknowledges it. Not heavy-handed. Subtle. "I keep thinking about what Sera said. Maybe the truth matters more than I thought." (Worker → Investigator drift) + +### The Newcomer as v0.2 centerpiece + +The lead called this. The Newcomer is the natural tutorial because they know nothing. But thematically, the Newcomer is something more: **the Newcomer is the player's proxy in a way no other archetype is.** + +Every other archetype has a pre-existing relationship to the community. The Worker belongs. The Investigator has a mandate. The Operator has an operation. The Newcomer has NOTHING. They are the player — walking into a place they don't understand, meeting people they don't know, trying to figure out what's going on. + +The Newcomer's "Is this enough?" is the most raw version: **"Is this place enough? Are these people enough? Is THIS LIFE enough?"** They haven't committed yet. They're evaluating. Every interaction is a question: do I want to be part of this? + +And then: the Newcomer discovers the adversarial structure. The ring, the conspiracy, the operation. And their "Is this enough?" transforms from "Is this place worth staying in?" to "Is this place worth staying in NOW THAT I KNOW THIS?" + +That transformation — from innocent evaluation to compromised knowledge — is the game's thematic question compressed into a single character arc. The Newcomer doesn't start complicit. They BECOME complicit. The player watches it happen in real time. + +### 8 archetypes as stress test + +The lead wants 8 to stress-test system flexibility. Here's the test: can the generator produce appropriate content for all 8 archetypes in any ingredient-combination society? + +| Archetype | What the Generator Must Produce | Difficulty | +|---|---|---| +| Worker | Starting job, workplace relationships, economic pressures | Low — every society has workers | +| Investigator | Institutional mandate or personal motivation, outsider access profile | Medium — not every society has an institution to investigate FOR | +| Operator | Existing operation, risk profile, network connections | Medium — operation type varies with adversarial structure | +| Newcomer | Nothing. Literally nothing. The content is discovered. | Low — absence is easy to generate | +| Wanderer | Transit context, temporary relationships, departure triggers | Medium — must feel like passing through, not living here | +| Builder | Project, resources needed, community relationship to the project | High — requires something specific to build, community to build it for | +| Guardian | Thing to protect, threats to it, community relationship to the threat | High — "what to protect" is deeply district-specific | +| Seeker | Aspiration, path, cost, community's relationship to aspiration | High — ascension content must exist at this location | + +Builder, Guardian, and Seeker are the hardest because they require the generator to produce something district-specific: a project, a threat, an aspiration path. At 300 worlds, these three archetypes may not be available everywhere. And that's fine — the lead said archetypes are fluid. A world without a Guardian opportunity pushes Guardian-inclined players toward Worker or Wanderer. The absence creates pressure toward transition. + +--- + +## 4. Randomization: Sacred/Profane/Middle Kingdom + Gate Topology + +Nigel's framework is approved. Let me map my thematic systems into it. + +### The thematic Sacred + +These are the rules of the universe. They never change. No seed, no playthrough, no mod changes them: + +| Sacred Element | Why It's Sacred | +|---|---| +| The question "Is this enough?" | The game's thesis. Without it, we're making SimStation. | +| Participation has a cost | The structural claim. Every community, every system, every relationship. | +| Every virtue has a shadow | The cultural immune system principle. Without it, communities are either good or bad, never complex. | +| Ascension costs something human | Without this, ascension is just a power curve. | +| Knowledge changes you | The information-as-burden claim. Without it, information is just a resource to collect. | +| Some people are honest | THE MIRROR principle. Without at least one honest person, the world is all liars and the question collapses. | + +### The thematic Profane + +These vary per seed, per world, per playthrough. The generator picks from pools: + +| Profane Element | What Varies | Pool Source | +|---|---|---| +| WHY the adversarial structure exists | Moral texture of the conspiracy | Economic pressure ingredient × system failure mode | +| WHAT "enough" means locally | Local definition of a good life | Social contract ingredient × economic function | +| WHO your FRIEND is | Which NPC carries the emotional weight | FRIEND candidate pool (Tier 1 authored per key world, Tier 1 generated from deep templates per procedural world) | +| WHAT the cultural virtue-as-vulnerability is | Which good quality enables exploitation | Derived from social contract + settlement motivation | +| WHICH historical grievance matters | What the community remembers and fights about | Historical event pool per region | + +### The thematic Middle Kingdom + +Fixed structure, variable cast. The dramatic architecture is Sacred. Who fills it is Profane: + +| Structure (Sacred) | Cast (Profane) | +|---|---| +| There is a FRIEND whose secret you discover | WHO is the FRIEND, WHAT is the secret | +| There is a MIRROR whose honesty exposes | WHO is the MIRROR, WHAT they expose | +| There is an adversarial structure with insiders and outsiders | WHO is inside, WHO investigates, WHAT is contested | +| There are triangles that force decisions | WHICH NPCs, WHICH tensions, WHICH forks | +| The community has an immune system | WHICH virtue, WHICH vulnerability, WHICH cultural norm | +| The player faces a moral reckoning | WHAT kind of reckoning, WHEN it arrives, HOW it manifests | + +### Gate topology as thematic architecture + +The lead raised gate topology as a macro randomization layer. Let me add the thematic dimension: + +**The order in which you encounter worlds IS the thematic sequence.** A player whose gate topology sends them from a complicity world to a duty world to a silence world has a fundamentally different philosophical arc than a player who goes complicity → sacrifice → ennui. + +This is randomization at the level of PHILOSOPHICAL CURRICULUM. The game doesn't prescribe which questions you face or in what order. But the order matters. A player who encounters sacrifice early and ennui late reads ennui through the lens of sacrifice: "These people have everything and it's not enough? I just came from a place where people DIED for each other." A player who encounters ennui first and sacrifice late reads sacrifice as a relief: "Finally, something that matters." + +**Gate topology should be weighted, not fully random.** The generator should avoid placing two worlds with the same moral texture adjacent in the player's likely path. Variety of moral texture across the accessible gate network is a quality metric for seed generation. The player should encounter DIFFERENT questions, not the same question wearing different hats. + +This is where the gravity-as-worldfeel note connects: the lead suggested varying gravity to breathe life into stepping onto a new world. Extend that to ALL sensory/social signals. When you step through a gate, EVERYTHING should signal "this is different." The gravity, the air, the social norms, the way people greet you, the architecture, the economic texture. The generator that produces 300 worlds needs to maximize PERCEPTUAL CONTRAST between gate-adjacent worlds. + +--- + +## 5. Scale: What Changes at 300 Worlds + +### What I was wrong about + +My Round 3 proposed: +- 7 cultural clusters with 20+ regional variants → Wrong unit. Ingredient combinations, not clusters. +- "Miri writes one cluster-level brief" → Not scalable to 300. Miri writes 10-20 reference implementations. The generator handles the rest. +- 107 pages of cultural worldbuilding → 10-20 reference briefs + derivation function. Maybe 50 pages plus the code. +- Every district brief answers three questions → The three questions become the generator's derivation logic. Only hand-authored worlds get hand-written answers. + +### What I was right about + +- "Is this enough?" as the generative question → Still holds. The generator derives it per world. It's the output, not the input. +- Every virtue has a shadow → This is a DERIVATION RULE the generator uses. Given a social contract's virtue, derive its shadow. Collective security → exploitation of solidarity. Individual liberty → isolation. Hierarchical order → blind obedience. This is deterministic. +- Ascension as philosophical commitment → This doesn't change at 300 worlds. Ascension is a PLAYER arc, not a world feature. The worlds provide context for the player's ascension choices, but ascension paths are Sacred. +- Moral texture as the deepest randomization lever → Confirmed by the lead's approval of Sacred/Profane. The WHY is Profane. The THAT is Sacred. + +### What changes fundamentally + +**1. The FRIEND problem at 300 worlds.** + +I said "full Tier 1, no exceptions, no shortcuts." I still believe the principle. But 300 worlds with 1-4 FRIEND candidates each at 70-100 authored lines is 21,000-120,000 lines of hand-authored Tier 1 content. That's not a content pipeline. That's a content mountain range. + +The answer isn't to lower the standard. It's to recognize that most of the 300 worlds don't need bespoke FRIEND content. They need FRIEND content ASSEMBLED from deep templates. + +Proposal: **Three tiers of world authoring.** + +| World Tier | Count | FRIEND Content | Other Tier 1 | How Built | +|---|---|---|---|---| +| **Landmark worlds** | 10-15 | Fully hand-authored, unique arcs, bespoke tells | Hand-authored MIRROR, ANCHOR | Studio team | +| **Regional worlds** | 30-50 | Assembled from deep cultural-template FRIEND kits (authored modules recombined per ingredients) | Template-assembled | Studio + community | +| **Generated worlds** | 230-260 | Generated from FRIEND generation grammar (structure is Sacred, details are Profane, voice derived from cultural ingredients) | Generated from pattern templates | Generator | + +The FRIEND generation grammar is the key innovation at 300-world scale. It's not "randomly generate a FRIEND." It's: given this society's ingredients, derive what a FRIEND would be hiding, why, what their tell would look like in this cultural context, and what their contradiction arc's phases would be. The STRUCTURE (5-phase arc, warmth → doubt → confrontation) is Sacred. The CONTENT (what specifically happens in each phase) is derived from ingredients. + +This is where the system failure mode ingredient pays off. A FRIEND in a `regulation_without_justice` world is hiding participation in a grey economy. A FRIEND in an `order_without_accountability` world is hiding knowledge of institutional abuse. The generator derives the secret from the failure mode. The tell is derived from the cultural norms (in a privacy-default culture, the tell is physical; in a gossip-default culture, the tell is verbal inconsistency). The emotional arc is derived from the relationship between the FRIEND and the player's archetype. + +Will generated FRIENDs be as devastating as hand-authored Kael? No. Not at first. But at 300 worlds, the player encounters dozens of FRIENDs, and the cumulative effect — betrayal after betrayal, each in a different moral key — creates its own kind of devastation that hand-authored content can't achieve. The quantity becomes its own quality. + +**2. The authoring pipeline becomes a generation pipeline.** + +Round 3: "Start every content piece by answering 'What does enough mean here, and what does participation cost?'" + +Round 4: "The generator starts every world by DERIVING what enough means here and what participation cost, from the ingredient combination. Then it generates content to express that derivation." + +The pipeline: +``` +1. SEED: Random seed determines ingredient selection for 300 worlds +2. DERIVE: Generator applies derivation function to each + ingredient set → society profile +3. POPULATE: Generator creates NPCs from society profile + + pattern composition rules + functional motivation pools +4. OVERLAY: Hand-authored content for landmark worlds replaces + generated content +5. GROW: During play, NOBODY promotion system deepens NPCs + that players engage with +6. ACCUMULATE: Player's cross-world experience generates + monologue callbacks ("I've seen this before...") +``` + +Steps 1-3 happen at game creation. Step 4 is the content-authoring team's contribution. Step 5 happens during play. Step 6 is the long-game content that makes 300 worlds feel like an interconnected experience rather than 300 separate ones. + +**3. Cross-world thematic accumulation.** + +This is the thing that matters most at 300 worlds and didn't exist at 20 districts. + +A player who has visited 50 worlds has encountered 50 versions of "Is this enough?" They've seen complicity, duty, sacrifice, ennui, silence, obligation, chaos, hubris. They've been betrayed by 50 FRIENDs. They've seen 50 communities whose virtues enabled exploitation. + +At some point, the question transforms. It stops being about THIS community and starts being about ALL communities. "Is this enough?" becomes "Is ANY of this enough?" — is the Settled Reach itself, as a civilization, enough? Are humans, as a species, enough? + +That's the endgame question. Not for a single world. For the whole game. And it connects to ascension: the player who asks "Is ANY of this enough?" and answers "No" is the player who pursues Higher, or ANA, or something beyond. The player who answers "Yes, this is enough" is the player who settles, builds, guards, stays. + +**The 300-world scale is what makes the question existential rather than local.** One world asks a specific question about a specific community. 300 worlds asks a civilizational question about humanity. That's the endgame I've been trying to articulate since Round 1. + +--- + +## 6. Universal Theme: Don't Pick. Derive. + +The lead listed 6 candidates and said don't force it. I won't. But I'll say this: + +All six are the same thing from different angles. + +| Candidate | Whose Perspective | What It Emphasizes | +|---|---|---| +| Cost of participation (Gore) | The individual inside the system | What you pay | +| Collective bargain (Mellanie) | The community | What everyone agreed to | +| What do you owe the people around you? (Ozzie) | The relationships | What connection demands | +| What do systems do to people? (Miri) | The system itself | What structures create | +| Cost of connection / entanglement (Paula) | The relational web | What attachment costs | +| Knowledge as burden (Gestalt) | The information | What knowing does to you | + +They converge on: **existence inside a system is not free, and you can't opt out.** + +The reason we can't pick one is that the GAME doesn't pick one. Different archetype, different world, different ingredient combination, different angle on the same truth. The Investigator experiences "knowledge as burden." The Worker experiences "cost of participation." The Newcomer experiences "what do systems do to people?" The Guardian experiences "what do you owe?" + +At 300-world scale, the universal theme isn't a statement. It's a FIELD — a gravitational field that all the specific questions orbit. The generator doesn't need a single canonical phrasing. It needs the field. It needs to ensure that every world it generates, regardless of ingredients, produces a society where existence isn't free. + +The derivation function guarantees this: every ingredient combination includes a system failure mode. Every system failure mode produces a cost of participation. Every cost of participation generates a version of "Is this enough?" The field is built into the generator's architecture. + +If pressed, I'd say: **the theme is the field, not any specific phrasing of it. The field is: what does it cost to be human inside something bigger than yourself?** + +But the lead is right not to canonize this. Let it resolve through the work. + +--- + +## Summary: What Changed, What Held, What Emerged + +### Changed at 300-world scale +- 7 cultural clusters → ingredient combination menu with derivation function +- Hand-authored thematic questions per district → derived from ingredients +- Style briefs as authoring guidance → reference implementations of the derivation function +- FRIEND content always hand-authored → three-tier world system (landmark / regional / generated) +- Fixed authoring pipeline → generation pipeline with hand-authored overlay + +### Held at 300-world scale +- "Is this enough?" as the generative question +- Every virtue has a shadow (now a derivation RULE) +- Thematic patterns as a vocabulary (FRIEND, MIRROR, ANCHOR, etc.) +- Ascension as philosophical commitment +- Moral texture as the deepest randomization lever +- Sacred/Profane/Middle Kingdom maps cleanly to thematic architecture + +### Emerged at 300-world scale +- **THE NOBODY** as the most important pattern (most NPCs are nobodies; promotion is the mechanic; learning to see is the endgame) +- **System failure mode** as a generator ingredient (the thematic engine) +- **Three-tier world authoring** (landmark / regional / generated) +- **Gate topology as philosophical curriculum** (the order of moral textures matters) +- **Cross-world thematic accumulation** (the question becomes civilizational after enough worlds) +- **The theme as field, not statement** (all 6 candidates orbit the same truth) +- **FRIEND generation grammar** (Sacred structure + Profane content derived from ingredients) +- **Composition rules** as generator grammar (thematic pattern + functional motivation, with forbidden/preferred combinations) diff --git a/docs/workshops/wiki-review/round4-mellanie.md b/docs/workshops/wiki-review/round4-mellanie.md new file mode 100644 index 000000000..e11a6be5c --- /dev/null +++ b/docs/workshops/wiki-review/round4-mellanie.md @@ -0,0 +1,358 @@ +# Round 4 Response: Mellanie — 300-World Generator-Input Scale + +*Responding to the project lead's decisions. Reframing everything I proposed in Rounds 1-3 for a 300-world procedurally generated game where style briefs ARE generator inputs.* + +--- + +## The Reframe That Changes Everything + +My Round 3 math assumed 20 districts. The lead said 300 worlds. + +That's not a scaling problem. That's a category change. At 20 districts, I'm a writer who uses tools. At 300 worlds, I'm a writer who writes tools. Every convention, every voice card, every authoring rule I proposed is no longer a guideline for humans — it's a specification for generators. The question isn't "how do I write 300 worlds of content?" The question is "how do I write the rules that PRODUCE 300 worlds of content?" + +Everything below is reframed through that lens. + +--- + +## 1. Cultural Ingredients Menu — The Writer's Input Spec + +The lead's decision: cultural groups aren't monolithic identities. They're composable ingredients — phonological fragments, speech rhythm parameters, substrate word pools, register rules, food vocabularies — that generators combine to produce specific-world cultural profiles. + +This is right. And it changes my job description. + +### What I used to do (20-district model) + +Read Miri's Krenn brief. Hold the whole register in my head. Write all Krenn content in one voice. Switch to the next brief. Repeat. + +### What I do now (300-world model) + +Define the PARAMETERS that make a voice sound right. Not "write Krenn dialogue" but "define what makes dialogue sound working-class-logistics-heritage-Nordic-Baltic." + +### The ingredient categories I need to parameterize + +| Category | What the generator needs from me | Example (Krenn ingredients) | +|----------|----------------------------------|----------------------------| +| **Sentence rhythm** | Fragment frequency, max comfortable sentence length, clause-chaining habits | 70% fragments, max 8 words comfortable, no subordinate clauses | +| **Formality gradient** | How register shifts with access tier | public: clipped neutral / peer: fragments + substrate / insider: full substrate + first names / authority: formal + hostile | +| **Substrate density** | How many heritage words per N words of dialogue at each access tier | public: 0 per 20 / peer: 1 per 15 / insider: 1 per 8 | +| **Profanity pattern** | Stress word shape, frequency, escalation | Short percussive heritage word (perk), low frequency, escalation = repetition not vocabulary expansion | +| **Naming address rules** | When first name, when surname, when title, when none | First name = accepted, surname = formal/hostile, title = institutional outsider | +| **Silence rules** | What topics are avoided, at which access tiers, how avoidance manifests | Avoids: ring operations, personal finances, institutional critique / Manifests as: subject change, sudden brevity, eye-contact break | +| **Emotional expression style** | How characters show worry, affection, anger, guilt | Worry: terse practicality / Affection: acts not words / Anger: cold withdrawal / Guilt: overcompensation in unrelated areas | +| **Environmental text register** | Sign style, formality of posted notices, graffiti density and type | Signs: minimal, functional, no decoration / Notices: bureaucratic, ignored / Graffiti: sparse, operational, some heritage | + +That's 8 parameter categories per cultural ingredient set. At Miri's cluster level (6-8 heritage clusters), that's 48-64 parameter definitions. But the generators BLEND these. A world with 60% Nordic-Baltic + 30% Slavic-Central + 10% cosmopolitan drift would interpolate across all 8 categories. + +### What I author vs. what the generator produces + +**I author:** The parameter definitions. The ingredient specs. The blending rules ("when Nordic-Baltic substrate meets Slavic-Central substrate, the result favors shorter words from both pools, not longer hybrid forms"). The exception flags ("never blend profanity across heritage pools — characters swear in their dominant substrate, not a hybrid"). + +**The generator produces:** Per-world cultural profiles. Specific NPC dialogue that follows the blended parameters. Environmental text that matches the local register. News ticker content in the appropriate editorial voice. + +**I review:** Samples from every generated world. Not every line — that's impossible at 300 worlds. Samples. The review question is: "Does this world sound like a PLACE? Does it sound like itself and not like a different world?" If yes, the parameters are working. If no, I adjust the ingredient specs. + +### The fundamental shift + +At 20 districts, quality control was per-line. At 300 worlds, quality control is per-parameter. I don't fix a bad line — I fix the parameter that produced bad lines across dozens of worlds. + +This is harder. It requires thinking about voice as a SYSTEM, not a craft. But it's the only way 300 worlds ship with consistent voice quality. + +--- + +## 2. NPC Pattern + Functional Motivation Composition — Voice Seeds for Generators + +The lead separated NPC design into three systems: +1. **Thematic patterns** (FRIEND, MIRROR, ANCHOR, GHOST, CATALYST, THRESHOLD, REMNANT, SYSTEM, NOBODY) +2. **Functional motivations** (HANDLER, WITNESS, TURNCOAT, CIVILIAN, OPERATOR, SKEPTIC) +3. **Composition rules** (how patterns + motivations combine to produce specific NPCs) + +From the voice perspective, this decomposition is exactly right. Here's why. + +### Thematic patterns define WHAT the character feels + +THE FRIEND feels warmth, then guilt, then fear of exposure, then grief at betrayal. That's an emotional arc. I can write voice seeds for each phase of that arc: + +```yaml +friend_voice_seeds: + warmth_phase: + - "There you are. Good — I was starting to worry." + - "Saved you a seat. Lera's supp is actually decent today." + doubt_phase: + - "You've been asking a lot of questions lately." + - "Just — be careful who you talk to. People notice things." + exposure_fear: + - "I can explain. Just not here. Not now." + - "You don't understand what's at stake." + betrayal_grief: + - "I wanted to tell you. Every day, I wanted to tell you." +``` + +These seeds are pattern-level, not character-level. They work for ANY NPC assigned the FRIEND pattern. The generator takes the seed, applies the world's cultural parameters (sentence rhythm, substrate density, formality gradient), and produces character-specific lines. + +### Functional motivations define HOW the character acts + +A HANDLER applies pressure. A WITNESS stumbles into danger. A TURNCOAT's loyalty cracks. These are behavioral templates. I can write voice seeds for each behavior: + +```yaml +handler_voice_seeds: + pressure_apply: + - "The schedule moved up. I need you at the dock by twenty-two hundred." + - "I don't care about your problems. I care about the shipment." + loyalty_test: + - "Someone's been talking. I need to know it wasn't you." +``` + +### Composition creates SPECIFIC characters + +A FRIEND + HANDLER is someone you trust who also applies pressure. That combination produces a specific emotional texture: warmth corrupted by operational necessity. The voice seeds BLEND: + +``` +FRIEND warmth: "Saved you a seat." +HANDLER pressure: "The schedule moved up." +FRIEND+HANDLER composite: "Saved you a seat. Listen — the schedule moved up. I need you tonight." +``` + +The composite is warmer than a pure HANDLER and more operational than a pure FRIEND. The generator needs blending rules for every valid pattern+motivation combination. + +### What I need to author for 300-world scale + +| Content type | Quantity | Purpose | +|-------------|----------|---------| +| Voice seeds per thematic pattern | 4-8 per pattern phase × 9 patterns = ~120-250 seed lines | Emotional arc templates | +| Voice seeds per functional motivation | 3-5 per behavior type × 6 motivations = ~50-100 seed lines | Behavioral templates | +| Blending rules per valid combination | 1 page per combination × ~20-30 valid combos = ~25 pages | How patterns + motivations interact vocally | +| Cultural parameter transforms | How each of the 8 voice parameters modifies seed lines | Makes seeds culture-specific | + +Total authored voice seeds: **170-350 lines.** These 350 lines, combined with 8 cultural parameter categories across 6-8 heritage clusters and the blending rules, produce the voice content for every generated NPC across 300 worlds. + +That's not 13,500-31,200 authored lines (my Round 3 estimate for 20 districts). That's ~350 authored seed lines + ~25 pages of blending rules + ~65 pages of parameter definitions. The generator does the rest. + +### The Sacred layer at this scale + +But. THE FRIEND arc is Sacred. The lead confirmed this through the Sacred/Profane/Middle Kingdom framework. That means: + +**Tier 1 FRIEND content is still hand-authored.** Not generated from seeds. Not parameter-blended. Written by a human who understands this specific character's emotional state at this specific moment in their arc. + +At 300 worlds, that means: how many Tier 1 FRIENDs exist? If each world has 1-2 FRIEND candidates per PC archetype, and there are 8 archetypes, that's potentially 2,400-4,800 FRIEND candidates. Obviously these aren't all unique — they're drawn from a pool. + +**My proposal: 30-50 fully authored FRIEND arcs.** Each is a complete 5-phase contradiction arc with full voice authoring at every phase. The generator assigns these arcs to specific NPCs in specific worlds, applies cultural parameter transforms to the surface language, but preserves the authored emotional core unchanged. + +30-50 arcs × 70-100 lines each = **2,100-5,000 hand-authored Tier 1 lines.** That's the Sacred content. Everything else is generator output from seeds + parameters. + +--- + +## 3. Eight PC Archetypes with Fluid Transitions — Voice Implications + +The lead's decision: 8 archetypes at v1.0, with transitions between archetypes as a mechanic. Your archetype isn't a fixed class — it's your current position in the community, and it can change. + +### The voice problem this creates + +In my Round 2 voice card, I defined the smuggler and detective as having DISTINCT, SEPARATE internal monologue voices. The smuggler thinks in people. The detective thinks in data. These voices don't overlap. D-032 hard-partitions monologue pools per character. + +Fluid transitions break that model. If the smuggler-archetype player makes choices that shift them toward the detective-archetype, the monologue voice needs to shift too. Not a sudden switch — a gradient. The voice should feel like it's CHANGING, which means the player notices the change, which means the change carries emotional weight. + +### How to handle it + +**Each archetype has a voice profile defined along continuous axes, not discrete categories.** + +| Axis | Smuggler position | Detective position | Gradient | +|------|------------------|-------------------|----------| +| **Observation focus** | People first, environment second | Environment first, people second | What the monologue notices changes | +| **Naming convention** | First names, personal history | Surnames, role descriptors | How NPCs are referenced shifts | +| **Sentence structure** | Fragments, rhythmic, breath-length | Complete, clipped, controlled | Syntax formality increases | +| **Emotional register** | Protective, fond, guilty | Analytical, suspicious, conflicted | Emotional vocabulary shifts | +| **Cultural markers** | Full substrate vocabulary | Institutional vocabulary | Heritage word frequency drops | +| **Default interpretation** | Intent-reading ("Lera steered Renn off that story") | Pattern-reading ("The bartender interrupted that conversation") | Interpretive frame shifts | + +A player 70% smuggler / 30% detective hears monologue that's mostly relational but occasionally analytical. They still use first names but sometimes catch themselves categorizing. Their fragments get slightly longer. Their cultural markers thin slightly. + +### What I author for this + +**Transition monologue lines.** Lines that ONLY fire during archetype drift. These are the moments the player feels the change happening: + +```yaml +# Smuggler drifting toward Detective +- id: transition_sm_dt_001 + text: "I'm counting heads again. When did I start counting heads?" + archetype_blend: {smuggler: 0.6, detective: 0.4} + trigger: enter_location + situation: [arrival] + +# Smuggler drifting toward Detective +- id: transition_sm_dt_002 + text: "Torek's buying rounds. New jacket. I used to just be happy for him." + archetype_blend: {smuggler: 0.5, detective: 0.5} + trigger: observe_npc + topic: [money] + +# Point of no return — archetype has shifted +- id: transition_sm_dt_010 + text: "I filed it. I actually filed it. When did I become someone who files things?" + archetype_blend: {smuggler: 0.3, detective: 0.7} + trigger: discovery + situation: [investigation] +``` + +These transition lines are the most IMPORTANT monologue in the game from a writing perspective. They're the moments where the player feels their character becoming someone else. They need to be Sacred content — hand-authored, not generated. + +### The math for 8 archetypes with transitions + +8 archetypes = 28 possible pairwise transitions. Not all are valid — some archetype combinations don't make narrative sense. Estimate ~15-20 valid transition paths. + +Each transition path needs ~10-15 authored transition monologue lines (covering the gradient from 70/30 through 50/50 through 30/70). + +**15-20 paths × 10-15 lines = 150-300 transition monologue lines.** All Sacred. All hand-authored. These are the lines that make archetype fluidity feel like character development rather than a stat change. + +--- + +## 4. Sacred / Profane / Middle Kingdom — Content Mapping + +The lead adopted Nigel's framework. Let me map every content type I'm responsible for. + +### Sacred (hand-authored, never generated, never randomized within a world) + +| Content | Why Sacred | Volume estimate | +|---------|-----------|----------------| +| FRIEND arc dialogue (all 5 phases) | Emotional payload. Can't template feeling. | 30-50 arcs × 70-100 lines = 2,100-5,000 lines | +| Anchor lines (the gut-check moments) | Ozzie's rule. If it doesn't make you feel something, it's not an anchor. | 1-2 per Tier 1/2 NPC pattern template = ~100-200 lines | +| Archetype transition monologue | The moments where the player's identity shifts. Must feel earned. | 15-20 paths × 10-15 lines = 150-300 lines | +| Blending rules (the composition specs) | Wrong blends produce voice uncanny valley. Human judgment required. | ~25 pages of prose specification | +| Cultural parameter definitions | The ingredient specs. Wrong parameters cascade across 300 worlds. | ~65 pages of specification | + +**Total Sacred authored content: ~2,350-5,500 lines + ~90 pages of specs.** + +### Profane (authored as pools, selected per-seed by generators) + +| Content | Why Profane | Pool size estimate | +|---------|-----------|-------------------| +| Voice seeds per pattern phase | Same emotional arc, different surface expression per world | ~120-250 seed lines across all patterns | +| Voice seeds per motivation | Same behavior, different cultural register | ~50-100 seed lines across all motivations | +| News ticker headline pools | Atmosphere. Profane by nature — the news is different every day. | ~200-400 headlines across all regions and topic categories | +| Environmental text template pools | Signs, menus, graffiti. Drawn from pools, culturally filtered. | ~300-500 template items across all types | +| Ambient monologue pools | Low-stakes observations. "The ventilation sounds different today." | ~200-400 lines across all archetype voices | + +**Total Profane authored pool content: ~870-1,650 lines.** + +### Middle Kingdom (sacred structure, profane cast) + +This is the most interesting category. Middle Kingdom content has a fixed DRAMATIC STRUCTURE but variable CHARACTERS filling the roles. + +| Content | Sacred part | Profane part | +|---------|-----------|-------------| +| Triangle dialogue | The fork structure (three people, conflicting interests, decision point) | Which NPCs fill the roles, their names, their cultural register | +| Dual-lens observation lines | The observation STRUCTURE (same event, two interpretations) | Which archetype pair is active, which cultural parameters apply | +| Bar conversation templates | The conversation SHAPE (greeting → small talk → topic → disclosure gate) | Which NPCs, which topics, which access tier, which substrate vocabulary | +| Routine deviation monologue | The PATTERN ("X isn't where they usually are") | Which NPC deviated, the cultural register of the observation | + +For Middle Kingdom content, I author the TEMPLATES — the dramatic shapes — and the generators fill them with world-specific content. + +**Middle Kingdom templates: ~100-200 structural templates** across all dialogue and monologue types. Each template is a dramatic shape with variable slots. The generator fills the slots using the cultural parameters + the specific NPC assignments for that world. + +### The total picture + +| Category | Authored lines | Authored specs | Purpose | +|----------|---------------|---------------|---------| +| Sacred | 2,350-5,500 | 90 pages | Emotional core, identity transitions, system rules | +| Profane pools | 870-1,650 | — | Generator seed content, atmosphere | +| Middle Kingdom templates | 100-200 templates | — | Dramatic structures for generator instantiation | +| **Total** | **~3,320-7,350 lines** | **~90 pages** | Everything the generator needs to produce 300 worlds | + +Compare to my Round 3 estimate: 13,500-31,200 authored lines for 20 districts. The 300-world model requires LESS hand-authored content because the generator does the multiplication. But the content I DO author is higher-stakes — every seed line, every parameter definition, every blending rule cascades across hundreds of worlds. A bad parameter produces 300 worlds of bad voice. The error cost is enormous. + +--- + +## 5. 300 Worlds — What Changes Fundamentally + +### What my Round 3 proposals got right + +**Voice cards.** The smuggler/detective voice card table from Round 2 IS a parameter spec for the generator. "Thinks in people vs. thinks in data" maps directly to the observation-focus axis. "First names vs. role descriptors" maps to the naming-convention axis. The voice card concept survives at 300-world scale — it just becomes a YAML spec instead of a prose document. + +**Dual-lens writing.** Still the game's identity. Still universal. At 300-world scale, the dual-lens becomes a CONSTRAINT in the generator: for every observation monologue, the generator must produce archetype-specific variants. The constraint is encoded in templates, not enforced by a human reviewer on every line. + +**Anchor lines.** Still Sacred. Still hand-authored. Still the gut-check test. At 300-world scale, anchor lines live in the FRIEND arc templates (30-50 arcs), not in per-NPC profiles. Each FRIEND arc template includes its anchor lines. The generator assigns arcs to NPCs but doesn't modify the anchors. + +**Environmental text as worldbuilding.** Still true. But at 300 worlds, I'm not writing 65-90 items per district. I'm writing environmental text TEMPLATE POOLS (signs, menus, graffiti, notices, tickers) and cultural parameter transforms that make the templates world-specific. The template says "BAR MENU." The parameters say "Krenn-derived: sparse, no descriptions, heritage food names, small denominations." The generator produces a specific menu for a specific bar on a specific world. + +### What my Round 3 proposals got wrong + +**The authoring pipeline.** My 7-phase pipeline assumed human writers doing per-district content passes. At 300 worlds, the pipeline is: (1) define ingredients, (2) define blending rules, (3) author Sacred content, (4) author Profane pool content, (5) author Middle Kingdom templates, (6) validate generator output through sampling, (7) iterate on parameters based on sample review. Phases 1-5 happen ONCE. Phase 6-7 repeat for every batch of generated worlds. + +**The team structure.** I proposed writers per cultural group or writers per archetype. At 300-world scale, the team structure is: (1) ingredient spec writers (define cultural parameters), (2) Sacred content writers (FRIEND arcs, anchor lines, transition monologue), (3) template writers (Middle Kingdom dramatic structures), (4) generator tuners (review samples, adjust parameters). These are different SKILLS, not just different domain knowledge. + +**Content volume estimates.** 13,500-31,200 authored lines for 20 districts is obsolete. The 300-world model needs ~3,300-7,400 authored lines + 90 pages of specs. Less raw volume, higher per-line stakes. + +**Cultural register limits.** I said "4-6 cultural registers in active production." At 300-world scale with composable ingredients, the concept of "a cultural register" dissolves. There are 6-8 ingredient sets that blend in hundreds of combinations. I don't hold "a register" in my head — I hold parameter definitions and validate generator output. The limit isn't my working memory. It's the parameter space's expressiveness. + +### What's new at this scale + +**Parameter testing.** Before I finalize an ingredient spec, I need to generate 50-100 sample lines and read them aloud. Does a 60% Nordic-Baltic / 40% Slavic-Central blend produce coherent dialogue? Does it sound like a place? Or does it sound like two places stitched together? This is a new authoring workflow — writing parameters, generating samples, reading samples, adjusting parameters. Iterate until the blend sounds natural. + +**Voice drift detection.** At 300 worlds, two worlds with similar cultural blends might produce indistinguishable dialogue. The generator needs a distinctiveness check: "World 147 and World 203 have 85% parameter overlap. Their dialogue samples show <5% vocabulary divergence." That's too similar. I need to either differentiate the parameters or introduce world-specific vocabulary seeds that create surface distinction. + +**Anchor line distribution.** 30-50 FRIEND arcs across 300 worlds means each arc appears in 6-10 worlds. Players who visit multiple worlds will eventually encounter the same arc template. The arc needs to feel different ENOUGH through cultural parameter transforms that the structural repetition isn't obvious. This requires testing: generate the same FRIEND arc in 5 different cultural blends and check whether the emotional beats still land AND the surface language feels distinct. + +--- + +## 6. Tooling Requirements (Writer's Perspective) + +At this scale, I need tools I didn't need at 20 districts. + +| Tool | Purpose | Priority | +|------|---------|----------| +| **Parameter preview** | Input: cultural ingredient blend + voice seed. Output: 20 generated sample lines. I read them, adjust parameters, regenerate. | Must-have before any content production | +| **Blend distinctiveness checker** | Input: two cultural parameter profiles. Output: similarity score + divergence report. Flags worlds that will sound identical. | Must-have before world generation at scale | +| **Anchor preservation validator** | Input: FRIEND arc template + cultural parameter transform. Output: confirms emotional beats are preserved, only surface language changed. | Must-have for Sacred content integrity | +| **Transition monologue tester** | Input: archetype blend ratio + trigger context. Output: which transition line fires, preview in context. Essential for tuning the archetype drift feel. | Must-have for archetype fluidity | +| **Voice seed coverage report** | Input: all voice seeds across all patterns/motivations. Output: coverage map showing which trigger × mood × situation combinations have seeds and which are gaps. | Should-have for completeness | +| **Cultural contamination linter** | My Round 3 proposal still applies. At 300-world scale, it checks generator output, not hand-authored content. Flags when a heritage substrate word appears in a world where that heritage is <10% of the blend. | Should-have for quality | +| **Sample batch review interface** | Input: 300 generated worlds. Output: random sample of 5 lines per world, organized by cultural blend similarity. I read through and flag patterns of failure. | Must-have for quality control at scale | + +--- + +## 7. What I Start Writing Now + +Given the 300-world reframe, here's what I should author first, in priority order: + +### Priority 1: Cultural ingredient specs (the foundation everything else builds on) + +Using the Krenn brief as source material, extract and formalize the 8 parameter categories for the Nordic-Baltic ingredient set. This is the first ingredient set. It becomes the template for all others. + +### Priority 2: Smuggler and detective voice profiles as continuous axes + +Convert my Round 2 voice cards from prose descriptions into axis-based parameter specs that support gradient blending for archetype transitions. + +### Priority 3: FRIEND arc voice seeds (pattern-level, not character-level) + +Author 3-5 complete FRIEND arcs as Sacred content. Each arc is a full 5-phase emotional journey with voice lines at every phase. These are the seed arcs. Test them against the Krenn cultural parameters to verify they survive cultural transforms. + +### Priority 4: Environmental text template pools + +Author the TEMPLATES for each environmental text type (bar menus, safety notices, graffiti, news tickers, freight manifests, transit schedules, maintenance logs). Each template has fixed structural slots and variable cultural slots. The generator fills the cultural slots. + +### Priority 5: Middle Kingdom dialogue templates + +Author the dramatic SHAPES for triangle conversations, disclosure-gate conversations, and routine-observation monologue. Fixed structure, variable cast and cultural register. + +--- + +## Summary + +| Topic | Round 3 (20 districts) | Round 4 (300 worlds) | +|-------|----------------------|---------------------| +| **What I author** | Thousands of lines per district | Parameter specs + seed lines + Sacred emotional content | +| **Authored volume** | 13,500-31,200 lines | ~3,300-7,400 lines + 90 pages specs | +| **Quality control** | Per-line review | Per-parameter validation via sampling | +| **Cultural registers** | 4-6 held in working memory | 6-8 ingredient sets with composable blending | +| **Voice cards** | Prose descriptions per archetype | Continuous-axis parameter specs supporting gradient transitions | +| **FRIEND content** | Per-NPC authored arcs | 30-50 arc templates, generator-assigned to NPCs, Sacred emotional core preserved | +| **Environmental text** | 65-90 hand-authored items per district | Template pools + cultural parameter transforms | +| **Team structure** | Writers per culture/archetype | Ingredient spec writers + Sacred content writers + template writers + generator tuners | +| **Key risk** | Voice drift at scale | Bad parameters cascading across 300 worlds | + +The fundamental shift: at 20 districts, I was the writer. At 300 worlds, I'm the voice architect. I define the rules that produce voice. The generators do the writing. I audit the output. The Sacred content — FRIEND arcs, anchor lines, archetype transitions — is still hand-authored. That's where the soul lives. Everything else is authored as parameters, seeds, and templates that the generators instantiate. + +The game's voice quality at 300-world scale depends on one thing: are the parameters right? If yes, 300 worlds sound like 300 distinct places inhabited by real people seen through a specific character's eyes. If no, 300 worlds sound like the same procedural mush. My job is making sure the parameters are right. + +--- + +*The craft doesn't go away. It moves upstream. Instead of writing the line, I write the rule that produces the line. And then I write the FRIEND's anchor — the one line the generator can never touch — by hand, alone, until it makes me feel something.* diff --git a/docs/workshops/wiki-review/round4-miri.md b/docs/workshops/wiki-review/round4-miri.md new file mode 100644 index 000000000..487e790b9 --- /dev/null +++ b/docs/workshops/wiki-review/round4-miri.md @@ -0,0 +1,629 @@ +# Workshop Round 4 — Miri (Worldbuilder / Setting Designer) + +**Responding to the lead's decisions. Reframing for 300-world generator-input scale.** + +--- + +## What Changes at 300 Worlds + +Everything I proposed in Round 3 was designed for 8-10 hand-authored regions. At 300 worlds, the paradigm inverts: + +| Round 3 assumption | Round 4 reality | +|---|---| +| Regional brief is documentation a human reads | Regional brief is a **parameter set** a generator consumes | +| Cultural groups are a fixed taxonomy | Cultural groups are assembled from an **ingredients menu** | +| Naming pools are hand-curated lists | Naming is **algorithmic** — phonetic rules, not word lists | +| Social norms are prose descriptions | Social norms are **numeric parameters** the dialogue system reads | +| 8-10 briefs, each hand-authored | 8-12 ingredient definitions that combine into **thousands of unique societies** | +| Quality from expert review | Quality from **constraint specification** — the generator can't produce garbage | +| Each region needs a worldbuilder | The worldbuilder designs the **menu**; generators cook the meals | + +The Krenn System brief from Rounds 1-2 is now a **proof-of-concept output** — one meal from the kitchen. The real product is the recipe book + the ingredient pantry + the cooking rules. + +--- + +## 1. The Ingredients Menu + +The lead is right: pick-and-combine is better than fixed taxonomy. Here's the menu, designed as generator input. + +### Ingredient Category A: Heritage Roots + +Heritage roots are **phonetic and social flavor profiles**. Each root is a parameter bundle the generator uses to produce naming, social dynamics, and cultural texture. The player recognizes the FEEL without being able to say "that's Finnish." + +The roots are named for their social signature, not their Earth origin. A developer might think "Frost is Nordic-inspired" but the generator just knows "compact phonetics, social reserve, patience-based trust." + +I'm proposing **10 roots**. A society picks 1-3 and blends them with drift weighting. + +| Root | Phonetic Signature | Social Signature | Trust Model | Authority Attitude | Player Feels | +|---|---|---|---|---|---| +| **Frost** | Compact, consonant-clusters, 1-2 syllables, hard stops (k,t,v,s) | Reserved, privacy-first, stoic | Patience — time + shared labor | Formal distance — cooperate without volunteering | "Northern, quiet, self-reliant" | +| **Tide** | Flowing, vowel-rich, 2-3 syllables, soft consonants (l,n,m,r) | Social, group-oriented, expressive | Hospitality — sharing food, sharing space | Personal — authority must earn affection | "Coastal, warm, community-spirited" | +| **Iron** | Heavy consonants, rhythmic, 1-2 syllables, gutturals (g,kh,r) | Communal solidarity, endurance, labor-proud | Collective — trust the group, not individuals | Suspicious — institutions are outsiders | "Industrial, tough, workers' culture" | +| **Spice** | Layered, multi-syllable, precise stress patterns, sibilants | Extended kinship, layered formality, spiritual undertones | Kinship — blood and marriage connections | Respectful-formal — hierarchy acknowledged, not resented | "Elaborate, family-oriented, ritualistic" | +| **Jade** | Precise, tonal tendency, short but varied, clean consonants | Hierarchical, honor-aware, aesthetic-conscious | Competence — demonstrated skill earns respect | Institutional — authority is legitimate if earned | "Precise, beautiful, structured" | +| **Dust** | Rhythmic, open vowels, 2-3 syllables, nasals (n,m,ng) | Communal decision-making, oral tradition, trade-savvy | Witness — trust requires public demonstration | Collective — the community outranks the institution | "Rhythmic, communal, oral-tradition-rich" | +| **Vine** | Warm, 2-3 syllables, soft stops, rolled consonants | Class-conscious, family honor, emotionally warm | Family — trust through recognized kinship or patronage | Stratified — authority respected based on social class | "Warm, class-aware, passionate" | +| **Salt** | Pragmatic, clipped, 1-2 syllables, dental consonants (d,t,th) | Individualist, contract-based, commercial | Transaction — trust through fair dealing | Pragmatic — authority is a service, evaluated by results | "Merchant, practical, no-nonsense" | +| **Stone** | Steady, mid-length, balanced consonant/vowel, laterals (l,r) | Enduring, traditional, land-connected, seasonal | Tenure — trust through long presence | Patriarchal/Matriarchal — elders hold authority by custom | "Rooted, agricultural, slow-moving" | +| **Arc** | Sharp, variable length, fricatives (s,z,f,v), unusual combinations | Intellectual, cosmopolitan, debate-oriented | Argument — trust through demonstrated reasoning | Meritocratic — authority must justify itself intellectually | "Sharp, academic, argumentative" | + +### How roots blend + +A society picks 1-3 roots with blend weights summing to 1.0. The generator blends parameters: + +```yaml +# Example: Krenn System +heritage: + primary: frost # weight: 0.55 + secondary: salt # weight: 0.30 + tertiary: iron # weight: 0.15 + drift_stage: mature # 180 years +``` + +The generator produces: +- **Naming phonetics:** 55% Frost rules (compact, consonant-cluster) + 30% Salt rules (clipped, dental) + 15% Iron (heavy, rhythmic) = short, hard names with practical feel. This IS Krenn naming — we just derived it from parameters instead of hand-authoring it. +- **Social dynamics:** 55% reserve + 30% pragmatism + 15% solidarity = mind-your-business with transactional undertones and labor solidarity. This IS Krenn culture. +- **Trust model:** Dominant = patience (Frost) modified by fair-dealing expectation (Salt) = trust earned through time + demonstrated reliability. + +**Drift adjustment:** The drift stage modifies how blended the roots are. At "pioneer" (0-50yr), the primary root dominates strongly (weight 0.8+). At "mature" (150-300yr), the roots are more evenly blended and novel elements emerge. At "ancient" (300+), the heritage is substrate — barely detectable, mostly novel. + +```yaml +drift_modifiers: + pioneer: # primary ×1.4, secondary ×0.4, tertiary ×0.2, novel: 0.0 + crystallizing: # primary ×1.1, secondary ×0.7, tertiary ×0.5, novel: 0.1 + mature: # primary ×0.9, secondary ×0.8, tertiary ×0.7, novel: 0.3 + ancient: # primary ×0.5, secondary ×0.5, tertiary ×0.5, novel: 0.8 +``` + +The "novel" factor represents cultural elements that have no heritage origin — they emerged from local conditions. Krenn's first-name-primary convention is novel: no founding culture used it, but it emerged from logistics-class social compression. At 300 worlds, the generator needs to introduce novel elements proportional to drift stage. + +### Ingredient Category B: Settlement Motivation + +What brought people here shapes what they value. Each motivation provides defaults for social structure, institutional attitude, and what the community considers "success." + +| Motivation | Social Structure Default | Authority Attitude Modifier | What "Success" Means | +|---|---|---|---| +| **Economic-extractive** | Class hierarchy (owners/workers) | Varies by owner: corporate = compliant, independent = hostile | Profit. Getting out. Sending money home. | +| **Economic-trade** | Merchant networks, guilds, competitive | Pragmatic — regulation is cost of business | Volume. Reputation. Connections. | +| **Economic-agricultural** | Land-based hierarchy, generational | Patriarchal/matriarchal elders | Land. Harvest. Family continuity. | +| **Ideological-political** | Factional, democratic or authoritarian | Depends on ideology — could be deeply institutional or anti-institutional | Advancing the cause. Purity of vision. | +| **Ideological-academic** | Competence hierarchy, flat social | Meritocratic — authority must be earned through expertise | Knowledge. Discovery. Recognition. | +| **Institutional-military** | Chain of command, strict hierarchy | Total — institution IS authority | Order. Duty. Security. | +| **Institutional-administrative** | Bureaucratic layers, credentialed | Procedural — authority through process, not person | Position. Influence. Legacy. | +| **Refugee** | Trauma-bonded, informal, fluid | Distrustful — institutions failed them before | Safety. Stability. Being left alone. | +| **Frontier-adventurist** | Chaotic, reputation-based | Absent or hostile — came here to escape rules | Freedom. Self-determination. The next thing. | + +**Note on the lead's point:** "What a society DOESN'T care about is as defining as what it does." A frontier settlement with no ideological motivation has no philosophical framework for its grey economy — people smuggle because they need to, not because they believe in anything. That absence IS the character. The generator should be able to leave motivation categories EMPTY, and the absence produces a society without that dimension. + +### Ingredient Category C: Economic Function + +What the settlement DOES now. May differ from original motivation. + +| Function | Daily Rhythm | Gathering Pattern | Investigation Texture | +|---|---|---|---| +| **Extraction** (mining, resource) | Shift-based, dangerous | Canteen, shift change, safety briefings | Physical evidence, equipment access, safety records | +| **Logistics** (trade hub, freight) | Shift-based, routine | Bar, dock transitions, manifest processing | Manifest discrepancies, schedule anomalies, cargo tracking | +| **Manufacturing** | Shift-based, specialized | Guild hall, workshop, union meetings | Process knowledge, supply chain, quality records | +| **Agriculture** | Seasonal, weather-dependent | Market days, harvest festivals, family meals | Land records, water rights, seed stocks, generational grudges | +| **Services** (hospitality, maintenance) | Client-based, irregular | Public spaces, client premises | Client records, service schedules, reputation networks | +| **Research** | Project-based, irregular | Lab, seminar, common room | Research logs, peer review, grant records, experiment data | +| **Military/Security** | Watch-based, alert-cycling | Barracks, briefing room, mess hall | Chain of command, incident reports, patrol logs | +| **Administrative** | Office-hours, meeting-driven | Office, corridor politics, formal dinners | Paper trails, meeting minutes, budget records | +| **Transit** (gateway, waystation) | Continuous, transient | Arrival/departure lounges, temporary bars | Passenger manifests, transit records, transient contacts | +| **Mixed/Diversified** | Varies by sector | Multiple gathering types | Multiple investigation vectors | + +### Ingredient Category D: Economic Pressure + +**The lead's addition: what makes extra income tempting.** This determines the MORAL TEXTURE of the grey economy — not just what's smuggled, but WHY people participate. + +| Pressure Type | Why People Smuggle | Moral Texture | Investigation Emotional Weight | +|---|---|---|---| +| **Tight margin** | Enough to survive, not to thrive. Extra income = breathing room. | Sympathetic — "we're not greedy, we're trapped" | Busting this feels like punishing poverty | +| **Debt trap** | Owe more than you earn. Extra income = freedom from debt. | Desperate — "I have no choice" | Busting this feels cruel unless you address the debt | +| **Status competition** | Enough to survive, not enough to compete socially. Extra income = social mobility. | Ambivalent — "I want what they have" | Busting this feels like enforcing class boundaries | +| **Survival gap** | Basic needs unmet. Extra income = food, medicine, heat. | Urgent — "people will die without this" | Busting this is nearly unconscionable | +| **Opportunity disparity** | Legal work pays; illegal pays 10x. Extra income = rational choice. | Calculating — "it's just business" | Busting this feels like the system working correctly... uncomfortably | +| **Prohibition economy** | The desired thing is banned. Extra income = access to the forbidden. | Ideological — "the ban is wrong" | Busting this forces the player to evaluate the ban | +| **Generational extraction** | Wealth flows out of the community to distant owners. Extra income = keeping what's yours. | Righteous — "they're stealing from us first" | Busting this feels like being the owner's enforcer | + +**Krenn is "tight margin" + "prohibition economy"** — workers need extra income AND lattice components are banned. The double pressure creates the specific moral texture where the ring is both economically rational and ideologically defensible. + +At 300 worlds, the generator picks 1-2 pressure types per society. The combination determines the grey economy flavor, which determines the contraband type, which determines the investigation's moral weight. + +### Ingredient Category E: Drift Stage + +Already defined above. Four stages: pioneer (0-50yr), crystallizing (50-150yr), mature (150-300yr), ancient (300+). Affects heritage blending, novel element emergence, and institutional calcification. + +### Ingredient Category F: What's Missing (The Absence Ingredients) + +The lead said "What a society DOESN'T care about is as defining as what it does." The generator should track what's ABSENT: + +| Absence | What It Produces | Example | +|---|---|---| +| **No heritage consciousness** | People don't think about where they came from. Names are functional, not cultural. No food traditions, no festivals, no substrate words. | Transit hub populated by transients — nobody is "from here" | +| **No economic pressure** | Nobody needs extra income. The grey economy is about power or ideology, not money. | Wealthy core world where smuggling is a game, not a necessity | +| **No institutional authority** | No Commission presence, no Assembly representation. Self-governing by default or by chaos. | Frontier beyond the gate network's administrative reach | +| **No community bonds** | People don't know each other. No social fabric to protect or tear apart. | Transient gateway station with high population turnover | +| **No ideological framework** | People don't have a philosophy about their situation. They just survive. | Resource extraction colony where workers are too exhausted to think | + +The generator should allow NULL values for any ingredient category. The NULL is itself a parameter that shapes the society. + +--- + +## 2. Mechanical Parameter Matrix + +The ingredients menu is the human-facing design tool. Underneath, the generator needs a **structured parameter matrix** that every game system reads. + +### The Society Profile (Generator Output) + +When the generator assembles a society from ingredients, it produces a profile. This profile is what I called the "regional brief" in Rounds 1-3, but now it's machine-generated, not hand-authored. + +```yaml +# Generated society profile +society_id: krenn-sova-transit +world_id: krenn-system + +# Ingredients (input) +heritage: + roots: [{id: frost, weight: 0.55}, {id: salt, weight: 0.30}, {id: iron, weight: 0.15}] + drift_stage: mature + drift_years: 180 +settlement_motivation: economic-trade +economic_function: logistics +economic_pressure: [tight-margin, prohibition-economy] +corporate_presence: significant # Sova Logistics Consortium +philosophical_alignment: null # absent — no ideology, pure pragmatism + +# Naming parameters (derived from heritage roots + drift) +naming: + phonetics: + syllable_range: [1, 2] + consonant_preference: [k, t, v, s, r, d, n, l, p] + vowel_preference: [a, e, o] + cluster_frequency: 0.3 # how often consonant clusters appear + suffix_pool: [-an, -en, -ik, -ar, -ev, -mm, -sk, -ur, -ak] + compound_rate: 0.1 # how often compound names appear + social_convention: first-name-primary + authority_naming: title-plus-surname + formality_threshold: 0.7 # how familiar before first-name is used (0=immediate, 1=never) + +# Social parameters (derived from heritage + motivation + function) +social: + privacy_level: 0.8 # 0=everything public, 1=everything private + solidarity_type: labor-informal # how people bond + expression_style: contained # emotional display + gathering_primary: bar # primary social site type + gathering_trigger: shift-end # what triggers gathering + daily_rhythm: shift-based + +# Access tier parameters (derived from heritage + motivation) +access_tiers: + public: + topics: [environment, work-complaints, sport, news] + entry_cost: 0 # automatic + peer: + topics: [workplace-gossip, mild-opinions, npc-observations] + entry_cost: 30 # days of consistent non-threatening presence + mechanism: shared-time + insider: + topics: [income-sources, grey-economy, personal-troubles, secrets] + entry_cost: 90 # requires vouching + shared risk + mechanism: demonstrated-risk-sharing + authority: + topics: [formal-answers, minimal-disclosure] + entry_cost: 0 # automatic for institutional NPCs + demeanor: cooperative-unhelpful + hostile: + trigger: [trust-violation, cultural-norm-breach, aggressive-questioning] + expression: withdrawal # vs. confrontation, silence, sabotage + +# Trust parameters +trust: + building_mechanism: patience # what earns trust + building_rate: 0.015 # trust points per shared interaction + decay_rate: 0.005 # trust decay per day of absence + betrayal_cost: -0.8 # trust lost on betrayal (0 to -1) + recovery_possible: true + recovery_rate: 0.005 # slower than building + +# Authority parameters +authority: + attitude: formal-unhelpful + institutional_presence: commission # which institution is local + compliance_level: 0.6 # how much the community actually complies + reporting_norm: never # cultural norm around reporting to authority + +# Investigation texture +investigation: + primary_style: patience-observation # how the detective solves things here + secondary_style: manifest-analysis + noise_floor: cultural-silence # what creates false negatives + signal_type: routine-deviation # what reveals truth + +# Grey economy +grey_economy: + structure: cooperative-ring + contraband_primary: lattice-components + contraband_secondary: [medical-grade, severance-tech] + moral_frame: access-denied-by-regulation + participant_motivation: economic-need-plus-ideological-justification + +# Environmental texture +environment: + substrate_word_density: 0.12 # fraction of speech with heritage words + sign_register: terse-functional + food_culture_strength: 0.6 # how much heritage food survives + graffiti_style: sparse-operational + music_heritage: 0.1 # almost none + color_palette: [industrial-white, warm-amber, emergency-red, cool-gray] +``` + +### What each game system reads + +| System | Parameters Read | Purpose | +|---|---|---| +| **NPC Name Generator** | `naming.*` | Produces names that sound right for this society | +| **Dialogue Selection** | `access_tiers.*`, `trust.*`, `social.privacy_level` | Filters which lines an NPC will say to the PC | +| **Monologue Generation** | `investigation.*`, `environment.substrate_word_density` | Shapes how the PC's internal voice reacts | +| **Routine Generator** | `social.daily_rhythm`, `social.gathering_trigger`, `economic_function` | Creates NPC schedules that fit the culture | +| **Storyteller** | `trust.building_rate`, `access_tiers.peer.entry_cost`, `investigation.primary_style` | Paces revelations based on cultural trust dynamics | +| **Environmental Text Gen** | `environment.*`, `naming.sign_register` | Produces signs, menus, graffiti, tickers that feel right | +| **Contraband System** | `grey_economy.*`, `economic_pressure` | Determines what's being smuggled and why | +| **Triangle Generator** | `social.solidarity_type`, `grey_economy.structure` | Creates culturally appropriate conflict patterns | + +### Validation: Can this reproduce Krenn? + +If I feed the Krenn ingredients into this system, does the output match what I hand-authored in Rounds 1-2? + +| Hand-authored (Round 1-2) | Generator would produce | Match? | +|---|---|---| +| Names: Kael, Voss, Drin, Renn, Tav | Short, consonant-heavy, 1-2 syllable names | Yes — same phonetic space | +| "Mind your business" ethos | `privacy_level: 0.8`, `authority.attitude: formal-unhelpful` | Yes — produces same social dynamics | +| Trust through shared labor over months | `trust.building_mechanism: patience`, `access_tiers.peer.entry_cost: 30` | Yes — same timeline | +| Heritage food: leib, supp, kalaa | `food_culture_strength: 0.6` + Frost substrate vocabulary | Approximately — generator would produce different specific words but same density | +| Graffiti: sparse, operational | `graffiti_style: sparse-operational` | Yes | +| Investigation: patience + manifest analysis | `investigation.primary_style: patience-observation` | Yes | + +The generator can't reproduce the EXACT words (leib, supp, kylm) because those are authored instances, not generated outputs. But it produces the same density, the same register, the same feel. At 300 worlds, that's the right fidelity level. The specific words don't need to be hand-picked for every world — a phonetic generator that knows "Frost substrate + mature drift" can produce plausible heritage words. + +**Exception: Tier 1 content.** The hand-authored v0.1 district (Sova) keeps its specific words, specific names, specific environmental text. These are the exemplar — the proof that the generator's output space contains quality content. For all other worlds, the generator operates within the parameter space defined by the ingredients. + +--- + +## 3. NPC Pattern + Motivation Composition + +### Pattern definitions (worldbuilding perspective) + +Each thematic pattern has a WORLDBUILDING function — what role does this person play in the community's story? + +| Pattern | Worldbuilding Function | Content Tier Requirement | Per-District Count | +|---|---|---|---| +| **FRIEND** | The person the conspiracy hurts most through the player's relationship to them. Emotional core. | Tier 1 (hand-authored) | 1 per archetype (minimum 2) | +| **MIRROR** | Shows the player an alternate version of themselves. Same position, different choice. | Tier 1-2 | 0-1 | +| **ANCHOR** | Makes the place feel like home. Loss = displacement. | Tier 2+ | 1-2 | +| **GHOST** | Absent but referenced. Shapes events without being present. | Tier 2-3 | 0-2 | +| **CATALYST** | Their arrival or action triggers change. The disruption. | Tier 2+ | 1-2 | +| **THRESHOLD** | Controls access to a space, a group, or information. | Tier 2-3 | 1-3 | +| **REMNANT** | Carries memory of how things were before. Living history. | Tier 2-3 | 0-2 | +| **SYSTEM** | Embodies the institution. Their behavior IS policy. | Tier 2-3 | 1-3 | +| **NOBODY** | Background. Becomes foreground through player attention. | Tier 3 (starting) | 30-50% of population | + +### Functional motivation definitions + +| Motivation | What They're Doing | Knowledge State | Mechanical Function | +|---|---|---|---| +| **HANDLER** | Managing operations | Knows the structure | Provides operational intelligence if accessed | +| **WITNESS** | Saw something | Knows a specific event | Provides evidence if trusted/pressured | +| **TURNCOAT** | Switching sides | Knows both sides | Provides access to the other side's information | +| **CIVILIAN** | Living their life | Knows nothing conspiratorial | Provides noise floor, social texture, moral weight | +| **OPERATOR** | Performing operations | Knows their piece of the operation | Observable during operations, can be followed | +| **SKEPTIC** | Doubting the system they're in | Knows something is wrong, not what | Provides leads through questions they're asking | + +### Composition rules for generators + +**Rule 1: FRIEND composition determines the emotional core.** + +The FRIEND's functional motivation defines what kind of betrayal/contradiction the player encounters: + +| FRIEND + | Contradiction Type | Emotional Payload | +|---|---|---| +| HANDLER | Your friend is running the operation you're investigating/working for | Power betrayal — "you were using me" | +| WITNESS | Your friend knows the truth and is hiding it from you | Protective betrayal — "you were shielding me" | +| TURNCOAT | Your friend is switching to the other side | Loyalty betrayal — "you're abandoning us" | +| CIVILIAN | Your friend has nothing to do with the conspiracy but is being destroyed by it | Collateral damage — "you're an innocent caught in this" | +| OPERATOR | Your friend is actively performing the operations you're discovering | Identity betrayal — "I didn't know who you really were" | +| SKEPTIC | Your friend is questioning the same things you are, from the opposite side | Parallel discovery — "we're both finding out the truth, but it means opposite things to us" | + +Kael in Sova is FRIEND + OPERATOR (active ring member the smuggler discovers in B-7). Sera is FRIEND + WITNESS (sitting on evidence to protect Naia). The generator picks from these combinations to produce different emotional cores per playthrough. + +**Rule 2: NOBODY composition determines what they become.** + +A NOBODY starts as Tier 3 with a functional motivation. When the player invests attention, the NOBODY promotes: + +| NOBODY + starts as | Player attention reveals | Promotes to | +|---|---|---| +| CIVILIAN | A person with mundane problems that resonate | ANCHOR (if the player keeps engaging) | +| WITNESS | Someone who saw something | CATALYST (their knowledge changes the situation) | +| OPERATOR | Someone hiding in plain sight | MIRROR or SYSTEM (depending on what they're operating) | +| SKEPTIC | Someone asking questions the player is also asking | Can become an ally or informant | +| HANDLER | The real power was the background character all along | Major revelation — the generator should flag this as rare (5-10% of NOBODYs) | +| TURNCOAT | Someone quietly changing allegiance | Provides an unexpected ally or enemy | + +**The NOBODY → something promotion is the "evolving relationships" mechanic.** The storyteller monitors which NOBODYs the player interacts with. After N interactions, the storyteller can promote a NOBODY to a higher pattern. This is emergent narrative — the player's attention creates the story. + +At 300-world scale: the generator pre-assigns hidden motivations to NOBODYs. Most (70%) are CIVILIAN and stay NOBODY forever. Some (20%) have motivations that activate on attention. A few (10%) have load-bearing motivations that could reshape the investigation if discovered. + +**Rule 3: SYSTEM composition reveals institutional character.** + +A SYSTEM NPC's motivation tells you what the INSTITUTION is really doing: + +| SYSTEM + | What the institution is doing | Investigation implication | +|---|---|---| +| HANDLER | The institution is managing operations — possibly the grey economy it's supposed to prevent | Institutional corruption | +| WITNESS | The institution knows but isn't acting | Institutional complicity | +| TURNCOAT | The institution is changing policy/allegiance | Institutional instability | +| CIVILIAN | The institution is just... there. Bureaucratic inertia. | Red herring — the institution isn't the story | +| OPERATOR | The institution is actively performing the thing it claims to oppose | Deep corruption | +| SKEPTIC | The institution doubts itself | Reform opportunity | + +**Rule 4: Distribution constraints for generators.** + +Per district (30-40 NPCs): + +```yaml +pattern_distribution: + FRIEND: {count: [2, 4], per_archetype: 1, tier: 1} + MIRROR: {count: [0, 1], tier: [1, 2]} + ANCHOR: {count: [1, 3], tier: [2, 3]} + GHOST: {count: [0, 2], tier: [2, 3]} + CATALYST: {count: [1, 2], tier: [2, 3]} + THRESHOLD: {count: [1, 3], tier: [2, 3]} + REMNANT: {count: [0, 2], tier: [2, 3]} + SYSTEM: {count: [1, 3], tier: [2, 3]} + NOBODY: {count: [12, 25], tier: 3} # 30-60% of total + +motivation_distribution: + HANDLER: {count: [1, 3]} + WITNESS: {count: [2, 5]} + TURNCOAT: {count: [1, 3]} + CIVILIAN: {count: [10, 20]} # majority + OPERATOR: {count: [2, 5]} + SKEPTIC: {count: [1, 4]} + +# Cross-constraints +forbidden: + - pattern: GHOST, motivation: THRESHOLD # can't guard if absent + exception: "unless the ghost's absence IS the barrier" + +rare: # generator flags for review + - pattern: NOBODY, motivation: HANDLER # max 1 per district + - pattern: FRIEND, motivation: CIVILIAN # requires strong collateral-damage writing +``` + +### Cultural modifiers on pattern distribution + +The society profile modifies which patterns and motivations are common: + +| Society Parameter | Pattern Effect | Motivation Effect | +|---|---|---| +| `solidarity_type: labor-informal` | More ANCHORs (community bonds) | More CIVILIANs (solidarity protects non-participants) | +| `solidarity_type: family` | More THRESHOLDs (family gatekeepers) | More WITNESSes (family members see everything) | +| `authority.attitude: hostile` | More SYSTEMs (institution is visible antagonist) | More SKEPTICs (community doubts authority) | +| `authority.attitude: absent` | Fewer SYSTEMs | More HANDLERs (someone fills the power vacuum) | +| `social.privacy_level: high` | More NOBODYs (people fade into background) | Fewer WITNESSes (people don't see because they don't look) | +| `social.privacy_level: low` | Fewer NOBODYs (everyone is visible) | More WITNESSes (everyone sees everything) | +| `drift_stage: pioneer` | More REMNANTs (founders still alive) | More OPERATORs (everyone is building/doing) | +| `drift_stage: ancient` | More GHOSTs (referenced history) | More CIVILIANs (society is calcified, few active operators) | + +This means: a Frost/Salt/Iron society (Krenn-like) with high privacy and labor solidarity NATURALLY produces more NOBODYs and CIVILIANs than a Tide/Vine society with low privacy and family solidarity, which NATURALLY produces more WITNESSes and THRESHOLDs. The cultural parameters shape the NPC population without explicit per-society rules. + +--- + +## 4. Eight PC Archetypes + +### The eight, defined as relationships to the world's systems + +Each archetype is a POSITION in a community, not a character class. The generator needs to know what each position looks like, what access it provides, and how NPCs react to it. + +| # | Archetype | Relationship to Systems | Starting Access | Starting Knowledge | Moral Position | +|---|---|---|---|---|---| +| 1 | **Insider** | Embedded in community AND grey economy | peer/insider with community, insider with ring | Knows the operation, doesn't know it's being investigated | "I'm part of this. What does that make me?" | +| 2 | **Investigator** | Institutional authority investigating | authority with institutions, outsider with community | Knows something is wrong, doesn't know what | "I'm here to find the truth. What if the truth is worse?" | +| 3 | **Newcomer** | Just arrived. No position yet. | public everywhere | Knows almost nothing. Fresh perception. | "I don't understand this place yet. What am I walking into?" | +| 4 | **Operator** | Runs the grey economy | insider/authority with ring, peer with community | Knows the full operation | "I built this. What happens when it falls apart?" | +| 5 | **Authority** | Institutional power (governance, enforcement) | authority everywhere, hostile from grey economy | Knows institutional structure, not street-level reality | "I represent the system. Is the system worth representing?" | +| 6 | **Drifter** | Between communities. Transient. | public everywhere, but quick peer in transient spaces | Knows patterns across locations, no deep local knowledge | "I've seen this before. Am I seeing it again?" | +| 7 | **Specialist** | Valuable skill that grants unique access | peer in professional spaces, outsider socially | Deep technical knowledge, limited social knowledge | "They need me. Can I use that without being used?" | +| 8 | **Local** | Born here. Never left. | deep insider socially, peer/insider with grey economy through proximity | Knows everything about the place, nothing about the wider world | "This is my home. What am I willing to do to protect it?" | + +### Archetype transition mechanics + +Transitions happen through player action + time + community response. The archetype isn't assigned — it EMERGES from the player's relationship with the community. + +``` +NEWCOMER ──(get job)──→ INSIDER ──(take responsibility)──→ OPERATOR + │ │ + │──(accept mission)──→ INVESTIGATOR ──(rise)──→ AUTHORITY + │ + │──(stay transient)──→ DRIFTER + │ + │──(apply skill)──→ SPECIALIST + +LOCAL ──(get drawn in)──→ INSIDER ──(take over)──→ OPERATOR + │ + │──(leave home)──→ DRIFTER + +INVESTIGATOR ──(drop credentials)──→ NEWCOMER (or DRIFTER) +AUTHORITY ──(lose position)──→ DRIFTER (or NEWCOMER) +OPERATOR ──(get caught)──→ prisoner/exile mechanic (future) +INSIDER ──(withdraw)──→ LOCAL (if they've been here long enough) +``` + +**For generators:** The archetype defines: +1. Which NPCs are eligible to become this PC (e.g., Insider requires `faction_access: [ring]`, Newcomer requires `time_in_district: 0`) +2. What monologue pool this archetype uses +3. What the investigation/engagement style is +4. What tools/approaches are available +5. How NPCs default-react to this archetype + +### Cultural variation in archetype viability + +Not every archetype is equally viable in every culture: + +| Society Parameter | Archetype Effect | +|---|---| +| `authority.attitude: hostile` | Investigator and Authority start at a disadvantage; Insider and Local have stronger cover | +| `authority.attitude: absent` | Authority archetype unavailable; Investigator must work without institutional backing | +| `social.privacy_level: high` | Newcomer and Drifter face steep trust curves; Insider and Local have deep cover | +| `social.privacy_level: low` | Newcomer integrates faster; Insider's secrets are harder to keep | +| `solidarity_type: family` | Local has massive advantage (family connections); Newcomer is locked out without marriage/adoption | +| `solidarity_type: labor-informal` | Specialist gains quick peer access through demonstrated skill | +| `drift_stage: pioneer` | Everyone is a Newcomer; archetype distinctions are flatter | +| `economic_function: transit` | Drifter is the norm; Local barely exists | + +This means: the SAME archetype plays differently in different cultures. An Investigator in a Frost/Salt culture (Krenn-like) faces patient silence. An Investigator in a Tide/Vine culture faces elaborate social performance. An Investigator in an Iron culture faces organized collective resistance. Eight archetypes times the ingredient variation space produces hundreds of distinct play experiences. + +--- + +## 5. Sacred / Profane / Middle Kingdom — Worldbuilding Elements + +### Sacred (rules that never change) + +| Element | Why Sacred | +|---|---| +| The ingredients menu exists (heritage roots, motivations, pressures, etc.) | The generation system's vocabulary | +| 10 heritage roots with defined parameter spaces | The phonetic/social flavor palette | +| 5 access tiers (public/peer/insider/authority/hostile) | The investigation mechanics foundation | +| Trust is earned, not given | Core gameplay principle | +| Every society has a grey economy | Core investigation premise | +| The FRIEND pattern (warmth → trust → doubt → conflict) | Emotional architecture | +| Gate network connects worlds | Physical infrastructure | +| Core worlds are always connected | Navigational stability | +| 9 thematic patterns + 6 functional motivations exist | NPC composition vocabulary | +| 8 archetype positions exist with transition paths | Player identity vocabulary | + +### Profane (parameters drawn from pools per playthrough) + +| Element | Pool | Scale | +|---|---|---| +| Which heritage roots a specific world has | 10 roots × weights | Per world | +| Which economic pressure drives the grey economy | 7 pressure types | Per world | +| Which contraband type is being moved | Contraband pool per pressure type | Per district | +| Which NPCs fill which pattern/motivation slots | NPC generation pool | Per district | +| How long trust takes to build (culturally variable) | `trust.building_rate` parameter range | Per society | +| What the authority attitude is | 5 attitude types | Per society | +| Where peripheral gates connect | Peripheral world pool | Per playthrough | +| Who the FRIEND is | FRIEND-eligible NPC pool | Per playthrough | +| Which worlds are accessible | Peripheral connection pool | Per playthrough | +| What economic function a specific world has | 10 function types | Per world | + +### Middle Kingdom (sacred structure, profane cast) + +| Element | Sacred Part | Profane Part | +|---|---|---| +| **Gate topology** | Core hubs always connected. Minimum connectivity rules. | Which peripheral worlds connect where. Number of accessible systems fixed but which ones varies. | +| **NPC population** | 30/50/20 split (D-029). Pattern distribution constraints. | Which NPCs are which. Which NOBODYs have hidden depths. | +| **Society profile** | The parameter categories exist. | Which values are assigned per world. | +| **Triangle structure** | 2 per social site minimum. Triangles have 3 nodes with conflicting interests. | Which NPCs form which triangles. What the conflict is about. | +| **FRIEND arc** | 5 phases. Must have observable contradiction. Must exercise tell system. | Which NPC. Which contradiction. Which tell. | +| **Investigation** | Detective faces cultural resistance. Smuggler has embedded advantage. | How much resistance. What kind. How the advantage manifests. | +| **Archetype transitions** | Transition paths exist. Actions determine position. | Which transitions are available in this culture. How long they take. | + +### Gate topology as macro randomization + +The gate network is the cultural map's skeleton. At 300 worlds: + +**Sacred structure:** +- 3-5 core hub worlds are ALWAYS connected to each other (the Administrative Heart, the major trade nexuses). These anchor the game's navigational framework. +- Every world has at least 1 gate connection (no completely isolated worlds — isolation is social, not physical). +- Gate connections are bidirectional. +- Connection distance affects travel time and trade cost. + +**Profane variation:** +- Peripheral worlds (200+ of the 300) have randomized connections per playthrough. +- Some peripheral connections create strategic chokepoints (a Frontier system that's the only route to a Research Outpost). +- The number of accessible worlds may be fixed (e.g., you can reach 40-60 worlds from any starting position) but WHICH ones varies per seed. +- Unlockable gates (via random gate events or quests) expand the accessible map during play. + +**Worldbuilding implications of gate topology:** +- Worlds that are gate-adjacent develop TRADE RELATIONSHIPS and cultural blending. Two worlds connected by a direct gate share more heritage drift than two worlds separated by 3 hops. +- Chokepoint worlds develop TRANSIT CULTURES (the Gate Junction archetype from my Round 3). These are Middle Kingdom — the transit function is sacred, the specific population is profane. +- Isolated peripheral worlds develop MORE EXTREME cultures (less blending, more drift, stronger heritage dominance). The generator should increase `drift_modifiers.novel` for isolated worlds. +- The player's starting position determines which cultural contexts they encounter. A playthrough starting in the Frost/Salt cluster sees different worlds than one starting in the Tide/Vine cluster. This is the DEEPEST replayability axis — the cultural landscape itself shifts. + +### Gravity and perception (flagging for perception team) + +The lead flagged varying gravity as a perception element. From a worldbuilding perspective: + +- Station worlds = standard gravity (simulated). Feels like home for long-term residents. +- Surface worlds = variable gravity. Krenn Prime has a specific gravity that station-born visitors notice. +- Low-gravity stations = social markers. People move differently, carry differently, fight differently. +- Gravity variation is a WORLDBUILDING INGREDIENT, not just a physics parameter. A society that lives in low gravity for 200 years develops different body language, different spatial norms, different architecture. The heritage root blending should include a `gravity_norm` parameter. + +```yaml +# Addition to society profile +environment: + gravity_norm: 0.85g # affects NPC movement, architecture, body language + gravity_variation_notable: true # do locals notice gravity? (station-born notice planetary surface) +``` + +--- + +## 6. IP Originality at 300-World Scale + +Setting note — this is where originality risk is HIGHEST. + +At 10 regions, I could manually verify each culture against known SF properties. At 300 worlds generated from an ingredients menu, the generator will inevitably produce combinations that FEEL like specific franchises: + +| Risky combination | Feels like | Mitigation | +|---|---|---| +| Arc heritage + academic settlement + meritocratic authority | Banks's Culture (post-scarcity intellectual society) | The Culture lacks the heritage-drift mechanic and the grey economy. Our version has economic pressure and smuggling. Distinct. | +| Iron heritage + extractive economics + debt-trap pressure | Alien franchise (company-colony, exploited workers) | Common SF trope, not specific enough to one franchise. Our version has the ingredients system rather than a monolithic "evil corporation." | +| Frost heritage + logistics + tight-margin + prohibition | Hamilton's Commonwealth (only if we use Commonwealth-specific names/tech) | Already verified in Rounds 1-2. Krenn is structurally original. | +| Dust heritage + communal + survival-gap | Le Guin's Anarres (The Dispossessed) | Our version has a grey economy; Anarres explicitly doesn't. Distinct. | +| Jade heritage + hierarchical + institutional-military | Generic "space samurai" trope | Heritage drift should prevent this. At mature drift, the Jade root is substrate, not surface. The society shouldn't feel like "Japan in space." | + +**Mitigation strategy:** The ingredients menu includes a **cultural distance validator** — a generator constraint that checks whether a produced society falls within a known-franchise similarity threshold. If the combination is too close to a known property (measured by surface-feature overlap), the generator adjusts one ingredient. + +This is a generator-level constraint, not a human review step. At 300 worlds, we can't manually review every culture for franchise similarity. The validator must be automatic. + +**The deepest defense against franchise similarity is the DRIFT MECHANIC.** A "mature" or "ancient" drift stage blends heritage roots so heavily that the surface features of any single Earth culture are dissolved. A Jade/Stone society at 300 years of drift doesn't look Japanese — it looks like whatever emerged from precise-phonetic + land-connected social norms + 300 years of station life. The DRIFT is what makes our cultures original. + +--- + +## Summary of Round 4 Deliverables + +| Deliverable | Status | +|---|---| +| **Ingredients menu** (10 heritage roots + 5 other categories) | Defined above with generator parameters | +| **Mechanical parameter matrix** (society profile spec) | Full YAML spec above with per-system outputs | +| **NPC pattern × motivation composition rules** | Rules + distribution constraints + cultural modifiers | +| **8 PC archetypes** | Defined with access maps, moral positions, transitions | +| **Sacred/Profane/Middle Kingdom mapping** | All worldbuilding elements classified | +| **Gate topology randomization rules** | Core/peripheral structure defined | +| **IP originality strategy at scale** | Drift mechanic as primary defense + automated similarity validator | + +### What changed from Round 3 + +| Round 3 (20 districts) | Round 4 (300 worlds) | +|---|---| +| 10 fixed conceptual regions | 10 heritage roots that combine into thousands of societies | +| Regional brief as documentation | Society profile as generator output | +| Hand-authored naming pools | Algorithmic naming from phonetic parameters | +| Prose social norms | Numeric parameters (privacy_level: 0.8) | +| Each region needs a worldbuilder | Worldbuilder designs the ingredient menu; generators produce cultures | +| Quality from expert review | Quality from constraint specification | + +### What I need from other agents + +- **Tyre:** Can the content pipeline consume this parameter matrix format? Is `serde_yaml` sufficient for this schema depth? +- **Gestalt:** Do the pattern × motivation composition rules create enough mechanical variety? Are the distribution constraints too tight or too loose? +- **Nigel:** Does the Sacred/Profane/Middle Kingdom mapping protect replayability at 300-world scale? Are there randomization axes I missed? +- **Gore:** Does the economic pressure ingredient capture the thematic weight? Does "tight margin" vs. "survival gap" vs. "prohibition economy" create meaningfully different moral textures? +- **Mellanie:** Can the `environment.*` parameters in the society profile give you enough to generate environmental text? What's missing? + +--- + +**Status:** Round 4 response complete. +**Author:** Miri +**Date:** 2026-02-12 diff --git a/docs/workshops/wiki-review/round4-nigel.md b/docs/workshops/wiki-review/round4-nigel.md new file mode 100644 index 000000000..eee5b2de4 --- /dev/null +++ b/docs/workshops/wiki-review/round4-nigel.md @@ -0,0 +1,586 @@ +# Round 4 — Nigel (Sandbox & Replayability) + +## Responding to the Lead's Direction: 300 Worlds, Generators, and THE NOBODY + +300 worlds. Not 20 districts. Not 50. THREE HUNDRED. + +Everything I proposed in Round 3 just became generator specifications. And honestly? The replayability case gets STRONGER at this scale, not weaker. Let me explain why, and refine my proposals for a world where most content is procedurally generated from authored rules. + +--- + +## The Fundamental Reframe: Replayability IS Generation + +At 20 districts, replayability means "within-district variation through pool-based randomization." + +At 300 worlds, replayability means "the generator's output space is so large that no two worlds feel the same." + +These aren't different strategies. They're the same strategy at different scales. Pool-based selection is just generation with a very constrained output space. A FRIEND pool with 3 candidates is a generator that produces 3 possible outputs. A world generator that combines cultural ingredients, NPC patterns, and economic pressures is a generator that produces thousands. + +**My Sacred/Profane/Middle Kingdom framework maps directly to generation:** + +| Framework Layer | At 20 Districts | At 300 Worlds | +|---|---|---| +| **Sacred** | Fixed per district: cultural substrate, primary contraband, triangle structures | The generator's RULES: pattern library, composition constraints, cultural ingredient interactions, the physics of how societies work | +| **Profane** | Pool-selected per seed: FRIEND, roles, evidence, timeline | The generator's PARAMETERS per world: which ingredients combined, which NPCs spawned, which patterns assigned, which economy pressures are active | +| **Middle Kingdom** | Fixed structure, variable cast: triangles exist, different NPCs fill roles | The generator's OUTPUT STRUCTURE: every world has social sites, adversarial structures, a FRIEND arc — the specifics are generated | + +Sacred = the generator's grammar. Profane = the generator's vocabulary. Middle Kingdom = the generator's sentence structure. + +The style briefs, cultural ingredients, pattern libraries, and composition rules ARE the Sacred content. They're the DNA. If the DNA is rich enough, 300 worlds all feel distinct. If it's thin, they're wallpaper variations. + +--- + +## 1. Cultural Ingredients Menu: Mechanical Parameters for Generators + +The lead's ingredients list: heritage roots, settlement motivation, economic function, philosophical alignment, corporate presence, time since settlement / drift stage. + +Missing (lead flagged): **economics — what makes extra income tempting.** + +I'm going to map every ingredient to its MECHANICAL output — what the generator needs to produce for each world to be a distinct social puzzle, not just a distinct paint job. + +### The Ingredients → Mechanics Pipeline + +``` +INGREDIENT (authored, finite menu) + ↓ combined by generator +CULTURAL PROFILE (generated per world) + ↓ consumed by systems +MECHANICAL PARAMETERS (what the engine actually uses) +``` + +Here's the full mapping: + +| Ingredient | Menu Options (illustrative, not exhaustive) | Mechanical Output | Replayability Contribution | +|---|---|---|---| +| **Heritage roots** | Nordic-reserve, Mediterranean-warmth, East-Asian-hierarchy, West-African-communal, Latin-familial, Slavic-cynical, South-Asian-gatekept, Cosmopolitan-transactional | Access tier profile: outsider penalty, insider bonus, authority response, greeting initiative | Different social puzzles per heritage — skills don't transfer | +| **Settlement motivation** | Economic opportunity, political refuge, scientific frontier, military garrison, religious pilgrimage, corporate mandate, ideological experiment | What "enough" means locally: the answer to the thematic question. Shapes NPC contentment distributions and what disrupts equilibrium. | Different moral textures per motivation — same archetype feels different | +| **Economic function** | Logistics hub, trade nexus, mining operation, research station, agricultural colony, administrative center, luxury resort, transit waypoint | **What makes extra income tempting**: the economic pressure that creates the ring/network. A logistics hub has cargo opportunity. A research station has data to sell. A resort has wealthy marks. | Different adversarial structures per economy — different "crimes," different investigation shapes | +| **Philosophical alignment** | Pragmatic collectivist, institutional loyalist, libertarian individualist, spiritual communalist, meritocratic competitor, hierarchical traditionalist, egalitarian cooperative | Trust mechanism: how trust is built, maintained, and broken. Shapes NPC disclosure behavior, cultural gate modifiers, and what counts as betrayal. | Different trust puzzles — the detective who learned to build trust in a collectivist world fails in an individualist one | +| **Corporate presence** | Commission-dominated, Syndic-controlled, multi-faction contested, independent/unaffiliated, corporate-founded, faction-neutral | Institutional landscape: who has power, how it's wielded, what authority means. Shapes the detective's leverage and the smuggler's cover options. | Different power dynamics per corporate structure — authority means different things | +| **Time since settlement / drift** | Founding generation (0-50y), established (50-150y), deep-rooted (150-250y), ancient (250+y) | Cultural coherence: tight community vs. fragmented society. Young settlements have strong founding identity. Old ones have drifted, blended, contradicted themselves. | Older settlements are harder to read — more layers, more exceptions to cultural rules, more NOBODYs with hidden depth | + +### The Missing Ingredient: Economic Pressure + +The lead flagged this and they're right — it was missing from my 7-question framework. Let me be specific about what the generator needs: + +**Every world needs an economic pressure profile:** + +```yaml +economic_pressure: + primary_industry: logistics # What most people do for work + income_adequacy: moderate # How well the primary industry pays + income_gap: significant # Gap between what people earn and what they want + temptation_source: cargo_access # What makes extra income available + temptation_justification: healthcare # Why people tell themselves it's okay + institutional_failure: regulation # What the system fails to provide +``` + +The `temptation_justification` is the load-bearing field. It determines the moral texture of the world's adversarial structure. "Healthcare" = lattice components, sympathy-weighted. "Opportunity" = luxury goods, ambition-weighted. "Survival" = people smuggling, desperation-weighted. "Curiosity" = data/research, intellectually-weighted. + +At 300-world scale, the generator picks from a menu of justifications. Each justification produces a different moral flavor. The replayability isn't just "different NPCs in different places" — it's "different REASONS for the same structures." + +### What a society DOESN'T care about + +The lead emphasized this and it's brilliant for replayability. A world that doesn't care about philosophical alignment feels DIFFERENT from one that does. A world where corporate presence is irrelevant (independent frontier) plays differently from one where it dominates everything. + +For the generator, this means: **not all ingredients are always active.** Some worlds have 4 active ingredients. Some have 6. The ABSENCE of an ingredient is itself a parameter. + +```yaml +cultural_profile: + active_ingredients: + - heritage: nordic_reserve + - settlement_motivation: economic_opportunity + - economic_function: logistics_hub + - drift_stage: deep_rooted + inactive_ingredients: + - philosophical_alignment # "Nobody talks philosophy here. You work, you eat, you sleep." + - corporate_presence # "The Commission? They sent someone once. He left." +``` + +A world where philosophical alignment is inactive is a world where people DON'T have principled objections. They're practical. The ring isn't fighting an ideology — it's filling a gap. A world where corporate presence is inactive is a world where institutional authority is weak or absent — the detective can't lean on credentials because there's no institution to credential them. + +Different inactive ingredients = different social puzzles. And the generator just needs to know which slots to leave empty. + +### Mechanical parameter set (what the generator outputs per world) + +Here's the full parameter set that every generated world needs. These are what the ENGINE consumes: + +```yaml +# Generated per world from cultural ingredients +mechanical_profile: + # Access & Trust + outsider_trust_baseline: -2 # How much outsiders are distrusted (-3 to +2) + insider_trust_baseline: 3 # How much insiders are trusted (1 to 5) + authority_response: compliant_not_helpful # How NPCs respond to authority + trust_build_method: shared_labor # How trust is earned (time, labor, transaction, obligation, shared_values) + trust_build_speed: slow # How fast trust builds (fast/medium/slow/glacial) + + # Disclosure & Privacy + disclosure_to_insider: 0.9 # Probability of sharing info with cultural insider + disclosure_to_outsider: 0.3 # Probability of sharing info with outsider + disclosure_to_authority: 0.4 # Probability of sharing info with authority figure + gossip_flow: low # How freely information moves through the community + personal_topics_taboo: high # How taboo personal questions are + + # Social Structure + greeting_initiative: low # How likely NPCs are to greet strangers + hierarchy_importance: low # How much rank/status matters in interactions + community_tightness: high # How interconnected social bonds are + outsider_integration_time: long # How long before a newcomer is accepted + + # Economic + income_temptation: moderate # How tempting extra income is + ring_justification: healthcare # What moral justification the network uses + economic_vulnerability: moderate # How economically stressed the population is + + # Investigation & Cover + investigation_difficulty: high # How hard the detective's job is (from cultural factors) + cover_stability: high # How stable the smuggler's cover is (from cultural factors) + tell_visibility: low # How visible behavioral anomalies are against cultural baseline +``` + +This parameter set is what makes two worlds play MECHANICALLY differently. Not just different names and food — different NUMBERS driving dialogue selection, trust accumulation, investigation difficulty, and cover stability. + +At 300 worlds, the generator produces 300 unique parameter sets from the ingredients menu. No two worlds have the same social puzzle. The player who learned to play in a high-gossip, fast-trust, low-hierarchy world gets demolished in a low-gossip, slow-trust, high-hierarchy world. Skills don't transfer. That's anti-metagaming through GENERATION DIVERSITY. + +--- + +## 2. NPC Pattern Composition: Thematic + Functional as Generator Grammar + +The lead's split is exactly right. Three separate systems: + +**A. Thematic patterns** (what the character MEANS): FRIEND, MIRROR, ANCHOR, GHOST, CATALYST, THRESHOLD, REMNANT, SYSTEM, NOBODY + +**B. Functional motivations** (what the character DOES): HANDLER, WITNESS, TURNCOAT, CIVILIAN, OPERATOR, SKEPTIC + +**C. Composition** = A + B per NPC. + +This is a character creation GRAMMAR. The generator picks a thematic pattern and a functional motivation for each NPC, checks composition rules, and instantiates. At 300 worlds with 15-40 NPCs each, that's 4,500-12,000 NPCs created from this grammar. + +### THE NOBODY Changes Everything + +I need to say this clearly because it's the single biggest replayability insight of this entire workshop: + +**THE NOBODY creates PLAYER-DRIVEN replayability. Everything else we've discussed is SYSTEM-DRIVEN replayability.** + +System-driven: the seed determines who's THE FRIEND, who's compromised, what the contraband is. The player experiences a pre-configured world. + +Player-driven: the player CHOOSES who becomes important by paying attention. A NOBODY is background until the player invests. The system responds to the player's attention by promoting the NOBODY — unlocking content, deepening the relationship, potentially even promoting to a higher tier. + +At 300-world scale, the NOBODY pool is ENORMOUS. Thousands of generated Tier 3 NPCs, any of whom could become significant. Two players in the same world with the same seed have completely different experiences because Player A befriended the dock worker and Player B befriended the bar cook. Neither was "the correct choice." Both produced valid, meaningful stories. + +This is replayability that NO randomizer controls. It's emergent from the player's curiosity interacting with the generated world. AND IT SCALES FOR FREE. The more Tier 3 NPCs the generator produces, the more NOBODYs exist, the more possible player-driven stories there are. Linear generation cost, exponential narrative possibility. + +### Dynamic Tier Promotion: The Mechanics + +Here's how I see NOBODY → something working: + +``` +NOBODY (Tier 3, generated) + → Player interacts repeatedly (3-5 interactions threshold) + → System generates relationship content (contextual dialogue unlocks) + → NOBODY gains a name the player remembers, a routine the player knows, + a personality trait the player has observed + → Player continues investing attention + +ACQUAINTANCE (Tier 2.5, partially generated) + → System reveals a WANT (generated from cultural profile + economic pressure) + → System reveals a PROBLEM (generated from world state + NPC position) + → The NOBODY now has stakes. The player cares because THEY CHOSE to care. + → Available for thematic pattern assignment: + - If the player's attention pattern matches FRIEND prerequisites → promote to FRIEND candidate + - If the NPC's situation matches WITNESS prerequisites → promote to WITNESS + - If the NPC's position matches ANCHOR prerequisites → promote to ANCHOR + +SIGNIFICANT (Tier 2, partially authored / generated from deep templates) + → Full relationship content unlocked + → Thematic pattern activates + → The NOBODY is now a REAL CHARACTER — not because we authored them at Tier 1, + but because the player's attention triggered progressively deeper content generation +``` + +The key constraint: **THE FRIEND arc still requires Tier 1 authored depth for the emotional payload.** A NOBODY-promoted-to-FRIEND needs a contradiction arc, tell progression, warmth phase content. At 300-world scale, this content is GENERATED from deep templates — not hand-authored per NPC, but generated from pattern templates that produce Tier-1-quality content parameterized by the NPC's cultural profile, economic position, and relationship history. + +This is the point where "light generation — pick from pools, don't generate from scratch" becomes critical. The FRIEND arc template says: "5 phases, warmth → doubt → contradiction → reckoning → aftermath. Warmth phase lines are drawn from a pool of culturally-appropriate trust-building dialogue. Contradiction trigger is generated from the NPC's secret (which was itself generated from the world's adversarial structure). Tell is generated from a tell library parameterized by personality." + +The generator doesn't write "There you are. Good — I was starting to worry." It picks from a pool of warmth-phase greetings appropriate to the cultural profile, the NPC's personality, and the specific relationship history the player has built. At 300 worlds, those pools need to be deep enough that two NOBODYs promoted to FRIEND in the same cultural context don't say the same things. + +### Composition Rules for the Generator + +The generator needs to know what combinations are valid, forbidden, and interesting. Here's my proposed rule set: + +**ALWAYS VALID (generator can assign freely):** + +| Thematic | Functional | Why It Works | +|---|---|---| +| NOBODY | any | Default starting state for generated NPCs | +| ANCHOR | CIVILIAN | The contented person just living their life | +| GHOST | HANDLER | The off-stage boss (Nils pattern) | +| SYSTEM | OPERATOR | The person who IS the institution | +| CATALYST | SKEPTIC | The troublemaker asking uncomfortable questions | +| REMNANT | CIVILIAN | The person who was something once and chose to stop | + +**FORBIDDEN (generator must not assign):** + +| Thematic | Functional | Why It's Forbidden | +|---|---|---| +| FRIEND | TURNCOAT | FRIEND's arc IS the betrayal of trust. TURNCOAT is betrayal of loyalty. Doubling them dilutes both. Pick one. | +| MIRROR | OPERATOR | MIRROR must be honest. OPERATOR runs part of the network. Contradiction destroys MIRROR's function. | +| MIRROR | TURNCOAT | Same issue — MIRROR can't have a secret loyalty to flip. | +| NOBODY | HANDLER | A HANDLER needs enough presence to exert pressure. NOBODYs are background by definition. | + +**HIGH-VALUE (generator should prefer when possible):** + +| Thematic | Functional | Why It's Interesting | +|---|---|---| +| FRIEND + OPERATOR | The trusted person who's ALSO running ring operations. The betrayal is both personal AND operational. Maximum dramatic weight. | +| ANCHOR + WITNESS | The contented person who accidentally sees something. Now their contentment is threatened. They didn't ask for this. | +| THRESHOLD + TURNCOAT | The embodiment of the moral question whose loyalty flips. The thing that makes "enough" inadequate... leaves. Or switches sides. | +| NOBODY + SKEPTIC | Background person who quietly doubts. If the player notices and engages, the SKEPTIC's doubts become actionable. Player-driven whistleblower arc. | +| REMNANT + WITNESS | Someone who used to be important, thought they were done, and then sees something that drags them back in. | +| CATALYST + HANDLER | The outsider who arrives AND starts applying pressure. The disruptor who's also pulling strings. Is this person a force for good or just another kind of manipulation? | + +**THE NOBODY RULE: Every NPC starts as NOBODY + [functional motivation].** Thematic pattern is assigned later — either by the generator at world-creation (for Tier 1-2 pre-authored roles like FRIEND, MIRROR) or by the dynamic promotion system when the player invests attention. + +This means the generator's NPC creation pipeline is: + +``` +1. Assign functional motivation from world requirements + (every world needs at least: 1 HANDLER, 2-3 OPERATORs, 1 WITNESS, + 2-3 CIVILIANs, 1 SKEPTIC, 0-1 TURNCOATs) +2. Assign thematic pattern for key roles + (FRIEND: 2-4 candidates from pool. MIRROR: 1. ANCHOR: 0-1. GHOST: 0-1.) +3. All remaining NPCs: NOBODY + their functional motivation +4. Check composition rules (no forbidden combinations) +5. Verify world has minimum pattern coverage +6. Generate content depth per tier assignment +``` + +### What Does This Mean for Replayability? + +The composition system creates a character-space that's **combinatorially explosive.** + +9 thematic patterns × 6 functional motivations = 54 possible compositions. +Minus ~4 forbidden = 50 valid compositions. +300 worlds × 15-40 NPCs = 4,500-12,000 NPCs. + +No two worlds have the same cast. No two casts have the same pattern distribution. And within each world, the player's attention determines which NOBODYs become significant. + +The comparison test isn't just "two friends played different games." It's "two friends played the same world and STILL had different experiences because they paid attention to different people." + +That's replayability at a scale that makes the game genuinely infinite. Not procedurally-generated-infinite like a roguelike where everything blurs together. MEANINGFULLY infinite because every promoted NOBODY produces a unique story grounded in authored patterns and cultural specificity. + +--- + +## 3. Eight PC Archetypes with Fluid Transitions + +The lead wants 8 archetypes as a stress test of system flexibility. And the critical insight: archetypes are FLUID — current positions, not character classes. Players can move districts, change jobs, buy houses. + +### What This Means for Replayability + +**The replayability isn't "play again as a different archetype." It's "this playthrough, your path through the archetype space was unique."** + +If archetypes are positions, then a single playthrough includes MULTIPLE archetypes as the player's situation changes. The Newcomer who builds enough relationships becomes the Insider. The Insider who discovers the ring and can't look away becomes the Investigator. The Investigator who goes too far becomes the Enforcer. + +The TRANSITION is the story. Not the starting point. + +### The Eight Archetypes (stress test) + +Building on Gore's and the lead's direction: + +| # | Archetype | Starting Position | "Is This Enough?" Answer | Transition Attractors | +|---|---|---|---|---| +| 1 | **Insider** (smuggler) | Embedded in network | "Yes — until it isn't" | → Enforcer (double down), → Investigator (turn), → Wanderer (run) | +| 2 | **Investigator** (detective) | Institutional outsider | "No — something is wrong" | → Insider (captured), → Reformer (systemic change), → Wanderer (disillusioned) | +| 3 | **Newcomer** | Just arrived, knows nothing | "I don't know yet" | → ANY archetype (the Newcomer is the universal starting state) | +| 4 | **Operator** | Runs infrastructure | "Yes — I built this" | → Insider (co-opted), → Reformer (realizes the cost), → Builder (legitimate version) | +| 5 | **Enforcer** | Maintains compliance | "Yes — order matters" | → Investigator (sees corruption), → Insider (becomes what they enforce against), → Wanderer (burns out) | +| 6 | **Reformer** | Wants systemic change | "No — the system must change" | → Investigator (needs evidence), → Operator (takes over), → Wanderer (gives up) | +| 7 | **Builder** | Creating something new | "Almost — I need to finish this" | → Operator (succeeded), → Insider (compromised to finish), → Newcomer (starts over elsewhere) | +| 8 | **Wanderer** | Passing through | "Not here" | → Newcomer (in a new world), → ANY if something catches their attention | + +### Transition Mechanics as Replayability + +Transitions aren't random. They're driven by player actions and world state: + +``` +Transition trigger conditions: + insider → enforcer: + - Player has protected the network 3+ times + - Network asks player to silence a SKEPTIC or WITNESS + - Player accepts + + newcomer → insider: + - Player has reached PEER trust with 3+ network-adjacent NPCs + - Player has discovered the network's existence + - Player has been offered membership / been drawn in through employment + + investigator → wanderer: + - Player has resolved the district's primary investigation + - Player chooses to leave rather than stay + - OR: Player has failed the investigation and been expelled/defeated + + operator → reformer: + - Player witnesses cost of the system they run (a WITNESS or MIRROR moment) + - Player's contentment drops below threshold + - Player initiates contact with reform-aligned NPCs +``` + +At 300-world scale, the generator doesn't know which transitions will happen. It knows which transitions are POSSIBLE given the world's configuration. The generator outputs: + +```yaml +archetype_transitions: + available: + - from: newcomer + to: insider + prerequisites: [ring_discovery, peer_trust_3, employment_offer] + - from: newcomer + to: investigator + prerequisites: [anomaly_detection, authority_contact, evidence_found] + - from: insider + to: enforcer + prerequisites: [protection_actions_3, silencing_request] + # ... all valid transitions for this world + blocked: + - from: reformer + to: operator + reason: "No legitimate institutions in this frontier world to operate" +``` + +The generator creates the possibility space. The player navigates it. The story emerges. + +### Fluid Archetypes + THE NOBODY = The Infinite Game + +Here's where it all connects. At 300-world scale: + +1. Player starts as Newcomer in World X. +2. Player pays attention to a NOBODY dock worker. The NOBODY promotes to ACQUAINTANCE. +3. The dock worker is NOBODY + OPERATOR. Through the player's attention, they reveal they run part of the world's logistics network. +4. The player is offered a job. Newcomer → Insider transition available. +5. The player discovers the dock worker is hiding something (NOBODY promoted to FRIEND candidate through player investment + generator assigning pattern). +6. The FRIEND arc activates. Trust, warmth, contradiction, reckoning. +7. The player's response to the reckoning determines their next archetype transition. + +None of this was scripted. The world was generated. The NPC was generated. The player's attention created the story. The archetype transition emerged from player choices. The FRIEND arc was generated from pattern templates. + +And the NEXT player in the same world might befriend a different NOBODY, get drawn into a different part of the network, experience a different FRIEND arc, and transition to a different archetype. Same world. Different game. + +THAT is 300-world replayability. Not "300 different worlds to visit." It's "300 worlds, each of which contains dozens of possible stories, selected by the player's attention." + +--- + +## 4. Gate Topology as Macro Randomization + +The lead approved gate topology as the macro randomization layer. Let me spec this for the generator. + +### The Three Gate Tiers (Sacred/Profane/Middle Kingdom) + +**Sacred Gates: Core worlds always connected.** + +These are the backbone. Earth, major faction capitals, the political centers. The player always has access to these regardless of seed. They're the "main quest" geography — the places where the story's largest arcs play out. + +At 300 worlds, maybe 15-20 are Sacred. Always present, always connected, always accessible. They represent the game's canonical geography. + +**Middle Kingdom Gates: Fixed count, variable connections.** + +The number of accessible regions is fixed (say 40-60 worlds per playthrough out of 300). But WHICH 40-60 depends on the seed and the player's gate discoveries. The structure is sacred (you always have ~50 accessible worlds). The specific selection is profane. + +This means the generator produces a gate graph per seed: + +```yaml +gate_topology: + seed: 847291 + core_worlds: [earth, augusta, krenn_prime, ...] # Always present (Sacred) + accessible_worlds: 52 # Fixed count (Middle Kingdom) + connections: + - from: krenn_prime + to: sova_station + type: permanent # Always open + - from: krenn_prime + to: haven_drift + type: discoverable # Available through quest/event + - from: augusta + to: ember_station + type: random_event # Gate event, varies per seed + unreachable_this_seed: [worlds 248 through 300] # Not accessible this playthrough +``` + +**Profane Gates: Discoverable connections.** + +Some gates only appear through specific conditions — quest completion, random events, NPC relationships. A player who befriends a particular NOBODY (a navigator, a gate technician, a smuggler with contacts) might unlock a gate that another player never discovers. + +This ties directly to THE NOBODY. A NOBODY who turns out to be a navigator opens a gate. Player-driven replayability creates GEOGRAPHIC replayability. The player's social choices determine which parts of the galaxy they can access. + +### What This Means for Chapter-Level Replayability + +Playthrough 1: Seed gives you Krenn System → Merchant Hub → Military Outpost. Three worlds, three cultures, three moral textures. Your story is about navigating from collective solidarity to transactional relationships to rigid hierarchy. + +Playthrough 2: Different seed gives you Krenn System → Research Station → Religious Enclave. Same starting point, completely different second and third acts. Your story is about navigating from blue-collar pragmatism to intellectual risk-taking to faith-based community. + +Playthrough 3: Same seed as Playthrough 1, but you befriend a different NOBODY in the Merchant Hub — a navigator who opens a gate to a Frontier world. Now you have a FOURTH world that Playthrough 1 never accessed. Your story branches in a direction the seed alone didn't determine. + +The gate topology creates MACRO replayability — different playthroughs explore different slices of the 300-world galaxy. The NOBODY system creates MICRO replayability within each world. Together, they make the game genuinely inexhaustible. + +### The Planetary Owner/Developer DLC + +The lead mentioned this as a future possibility. From a replayability perspective: + +Unlocked worlds that the player can DEVELOP create a new replayability axis: **the player becomes the GENERATOR.** They're not just experiencing generated worlds — they're populating, building, and shaping worlds that OTHER players (or their own future playthroughs) will experience. + +This is the ultimate content strategy. The players become content creators within the game's own systems. The cultural ingredients menu becomes a PLAYER-FACING tool. "I'm founding a colony with Nordic-reserve heritage, research-station economic function, and spiritual-communalist philosophical alignment." The generator takes those inputs and produces a world. The player's second playthrough visits a world they BUILT, populated with NPCs they helped define. + +Replayability at this level isn't a feature. It's an ecosystem. + +--- + +## 5. Full Sacred/Profane/Middle Kingdom Map + +The lead approved the framework. Here's the complete mapping at 300-world scale. + +### Sacred (Generator Rules — Never Change) + +| System | Sacred Elements | Why Sacred | +|---|---|---| +| **Cultural Ingredients** | The menu itself: heritage options, settlement motivations, economic functions, philosophical alignments, corporate types, drift stages | Changing the menu changes the generator. The menu IS the game's social physics. | +| **Pattern Library** | The 9 thematic patterns + 6 functional motivations + composition rules | These are the character-creation grammar. Changing them changes what kinds of people can exist. | +| **Archetype Definitions** | The 8 PC archetypes + their transition maps + their information positions | These define what kinds of GAMES are possible. | +| **Adversarial Structure** | The concept that every world has a hidden network vs. investigators | This IS the game. Without it, there's no asymmetric information. | +| **Core Gate Network** | 15-20 core worlds always connected | The player always has a baseline galaxy to navigate. | +| **Theme** | "Is this enough?" / Cost of participation (when finalized) | The question every world asks, in different voices. | +| **Tier System** | Tier 1 = emotional payload (authored/deep-generated), Tier 2 = working profile, Tier 3 = atmosphere/NOBODY | Quality hierarchy drives content depth allocation. | +| **NOBODY Promotion** | The mechanic of player attention creating significance | This is the player-driven replayability engine. Removing it collapses the infinite game. | + +### Profane (Generator Parameters — Vary Per World + Seed) + +| System | Profane Elements | How They Vary | +|---|---|---| +| **Cultural Profile** | Heritage + motivation + economy + philosophy + corporate + drift per world | Generator picks from ingredients menu per world | +| **Mechanical Parameters** | Trust baselines, disclosure rates, gossip flow, investigation difficulty, cover stability | Generated from cultural profile | +| **NPC Roster** | Names, personalities, routines, relationships | Generated from cultural profile + pattern assignments | +| **Pattern Assignments** | Which NPCs fill FRIEND, MIRROR, ANCHOR, etc. | Pool selection per seed | +| **Functional Assignments** | Which NPCs are HANDLER, WITNESS, TURNCOAT, etc. | World requirements + pool selection | +| **Gate Connections** | Which discoverable gates are open this seed | Seed + player actions | +| **Economic Pressures** | Specific contraband/resource, justification, vulnerability level | Generated from economic function ingredient | +| **Environmental Details** | Food, slang, signs, news ticker content, ambient text | Generated from cultural profile | +| **Timeline** | When storyteller triggers events, when arcs hit key beats | Storyteller variation per seed | + +### Middle Kingdom (Fixed Structure, Variable Content) + +| System | Structure (Sacred) | Content (Profane) | +|---|---|---| +| **Social Sites** | Every world has 2-6 social sites with role slots | Which NPCs fill roles, what the sites look like, cultural flavor | +| **Triangles** | Every social site has 1-3 triangles with named tension types | Which NPCs form the triangle, what the specific tension is about | +| **FRIEND Arc** | 5 phases: warmth → doubt → contradiction → reckoning → aftermath | Which NPC, what secret, what tell, what contradiction, what resolution | +| **Investigation Arc** | Observe → notice → follow → discover → confront | Which evidence, where it is, which NPC cracks, when | +| **NOBODY Promotion** | 3-stage promotion: NOBODY → ACQUAINTANCE → SIGNIFICANT | Which NOBODY, triggered by which player interactions, promoted to which pattern | +| **Archetype Transitions** | Transitions follow defined paths with prerequisite conditions | Which transitions are available depends on world state + player actions | +| **Gate Graph** | ~50 accessible worlds per playthrough from a pool of 300 | Which 50 depends on seed + player discovery | +| **Adversarial Structure** | Hidden network with coordinator, operators, external connection | Which NPCs, what they're moving, why, who's compromised | + +--- + +## 6. What Changes Fundamentally at 300 Worlds + +Let me be honest about what my Round 3 proposals assumed and where they break at this scale. + +### What Survives Intact + +- **Sacred/Profane/Middle Kingdom framework** — scales perfectly. Just relabel: Sacred = generator rules, Profane = generator parameters. +- **Pool-based selection** — this IS generation. Pools are just small generators. 300 worlds means bigger pools. +- **Anti-metagaming through diversity** — gets STRONGER at 300 worlds. Nobody can memorize 300 cultural profiles. +- **Pattern library** — the composition system works identically whether the generator creates 20 NPCs or 12,000. + +### What Changes Fundamentally + +**1. Authored FRIEND content becomes template-generated FRIEND content.** + +At 20 districts, every FRIEND is hand-authored at Tier 1 depth. At 300 worlds, that's 600-1,200 FRIEND candidates (2-4 per world). Hand-authoring is impossible. + +The solution: **FRIEND arc templates parameterized by cultural profile.** + +``` +FRIEND template: "trusted_colleague" + warmth_phase: draw from [cultural_greeting_pool + relationship_warmth_pool] + tell: select from [tell_library] based on personality_type + contradiction: generate from [adversarial_structure + NPC_secret + spatial_layout] + reckoning: draw from [confrontation_pool] based on relationship_depth + cultural_norms +``` + +The template produces Tier-1-depth content without Tier-1-effort per NPC. The QUALITY depends on the depth of the pools and the sophistication of the parameterization. If the warmth pool has 200 culturally-distinct lines and the tell library has 30 personality-appropriate tells, the generated FRIEND feels specific even though no human wrote their specific arc. + +**This is the hardest content challenge in the game.** Generated FRIEND arcs that feel as devastating as hand-authored ones. Gore would say: "emotion doesn't template." I'd say: "emotion templates if the templates are deep enough and the parameters are specific enough." It's the difference between a bad procedural generator ("NPC says random warm thing") and a good one ("NPC says a warm thing consistent with their cultural background, their specific relationship history with the player, and their personality type, selected from a pool of 200 culturally-appropriate warmth lines"). + +**2. Cultural briefs become generator input parameters, not documentation.** + +Miri's Krenn brief is beautiful. It's also 5 pages of prose. At 300 worlds, we can't write 300 Krenn-quality briefs. + +The solution: **cultural ingredients produce mechanical parameters, not prose.** The prose is for the FIRST 5-10 worlds (the hand-authored reference implementations). The generator learns the PATTERN from the ingredients menu and produces culturally-consistent parameters for the remaining 290. + +The Miri-quality briefs for the first cultural clusters serve double duty: +1. They're reference implementations for hand-authored content +2. They're TRAINING DATA for the generator — showing what a fully-realized cultural profile looks like + +**3. THE NOBODY replaces most hand-authored Tier 2 content.** + +At 20 districts, Tier 2 NPCs are hand-authored with generation expansion. At 300 worlds, most "interesting" NPCs are NOBODYs promoted by player attention. + +This is actually BETTER for replayability. Hand-authored Tier 2 NPCs are the same every playthrough (their content is fixed, only their role varies). NOBODYs promoted by player attention are ALWAYS different because the promotion depends on the player's choices. The system generates deeper content in response to the specific relationship the player has built. + +**4. The content certification model shifts from "review everything" to "test the generator."** + +At 20 districts, you can review every NPC profile. At 300 worlds, you review the GENERATOR. Quality assurance becomes: +- Test the ingredients menu (do all ingredient combinations produce coherent cultural profiles?) +- Test the pattern composition (do all valid compositions produce interesting NPCs?) +- Test the FRIEND arc templates (do generated FRIEND arcs hit emotional beats?) +- Test the NOBODY promotion (does dynamic tier promotion produce satisfying stories?) +- Test the gate topology (do generated gate graphs produce navigable galaxies?) + +The QA target shifts from "is this NPC good?" to "does this generator produce good NPCs?" That's a fundamentally different testing paradigm. Hoshe needs to know. + +--- + +## Synthesis: The Replayability Architecture at 300-World Scale + +Let me paint the final picture. + +The Settled Reach ships with 300 worlds. 15-20 are hand-authored (Sacred gates, reference implementations). The remaining 280 are generated from the cultural ingredients menu, pattern library, and composition rules. Each generated world has its own cultural profile, adversarial structure, NPC roster, gate connections, and economic pressures. + +The player creates a game. The seed generates a gate graph — ~50 accessible worlds out of 300. The player picks an archetype (or defaults to Newcomer) and enters their first world. They meet NOBODYs. They pay attention. Some NOBODYs become significant. One becomes THE FRIEND. The FRIEND arc plays out — generated from deep templates, specific to this NPC, this culture, this relationship history. + +The player resolves (or doesn't) and moves on. New world, new culture, new social puzzle. Skills from the first world partially transfer — the investigation structure is familiar. But the cultural ingredients are different. Gossip flows freely here. Authority is respected. The player's old strategies fail. They adapt. New NOBODYs. New attention. New stories. + +Forty hours in, the player has visited 8 worlds across 3 star systems. They've transitioned from Newcomer to Insider to Investigator. They've had 3 FRIEND arcs, each devastating in different ways. They've promoted a dozen NOBODYs to significance. They've unlocked 2 discoverable gates through NPC relationships. Their galaxy is THEIRS — a unique slice of the 300-world space, populated by unique stories, shaped by their attention. + +Another player starts the same seed. Visits the same first world. Befriends a different NOBODY. Transitions to Builder instead of Insider. Unlocks a different gate. Visits worlds the first player never saw. Their galaxy is ALSO theirs. Different stories, different people, different moral reckonings. Same theme: "Is this enough?" + +A hundred players. A hundred galaxies. A hundred answers to the same question. All generated from the same rules, the same ingredients, the same patterns. None of them the same. + +That's not a game with 300 worlds. That's a game with infinite stories. The worlds are the medium. The stories are the product. And the stories are created by the intersection of authored rules, generated content, and player attention. + +**But what about the SECOND playthrough?** + +Different seed. Different gate graph. Different 50 worlds out of 300. Different FRIEND in the first world. Different cultural ingredients in the second world (because the second world itself is different). Different NOBODYs promoted. Different archetype transitions. + +A completely different game. + +From the same generator. + +Using the same rules. + +Asking the same question. + +--- + +## Key Refinements to Record + +| # | Refinement | Domain | What Changed from Round 3 | +|---|---|---|---| +| 1 | Cultural ingredients menu produces mechanical parameter sets, not prose briefs | Generator Input | 7-question framework → 6-ingredient menu with full parameter output spec | +| 2 | Economic pressure as explicit ingredient with `temptation_justification` as load-bearing field | Generator Input | New — was missing from Round 3 | +| 3 | Inactive ingredients as a parameter (what a society doesn't care about) | Generator Input | New — lead's insight | +| 4 | NPC composition = thematic pattern + functional motivation with explicit forbidden/preferred rules | Generator Grammar | Round 3's single pattern list → two-axis composition system | +| 5 | THE NOBODY as player-driven replayability engine with 3-stage dynamic promotion | Core Mechanic | New — lead's addition, my strongest endorsement of any proposal in this workshop | +| 6 | FRIEND arc templates parameterized by cultural profile for 300-world generation | Generator Template | Round 3's "pool of authored candidates" → "pool of deep templates that generate candidates" | +| 7 | 8 fluid archetypes with transition maps as generator output | Generator Output | Round 3's 5 fixed archetypes → 8 fluid positions with transition mechanics | +| 8 | Gate topology as macro randomization: Sacred (15-20 core) + Middle Kingdom (~50 per playthrough from 300 pool) + Profane (discoverable through player action) | World Structure | Round 3's "chapter-level randomization" → full spec with NOBODY-driven gate discovery | +| 9 | QA paradigm shift: test the generator, not the output | Quality | Round 3's "3-level certification" → "generator testing framework" | diff --git a/docs/workshops/wiki-review/round4-ozzie.md b/docs/workshops/wiki-review/round4-ozzie.md new file mode 100644 index 000000000..cbea5b90d --- /dev/null +++ b/docs/workshops/wiki-review/round4-ozzie.md @@ -0,0 +1,385 @@ +# Round 4 — Ozzie (Player Experience / Wow Factor) + +## Responding to the Lead's Decisions — 300-World Scale + +The 300-world reframe changes EVERYTHING I said in Round 3. Not because I was wrong about what the player should feel — but because the method of DELIVERING those feelings is fundamentally different. + +At 20 districts, I could say "hand-author every Cheers moment." At 300 worlds, the Cheers moment must be **procedurally achievable**. The generator must produce it. The style briefs and cultural parameters must contain enough information that a world assembled from ingredients FEELS like walking into a warm place. + +That's the challenge. And honestly? It's MORE exciting than hand-authoring 20 districts. Because if we get the generators right, the player will walk into World 247 and feel something that nobody on the team specifically designed. The wow moment becomes EMERGENT. And emergent wow is the deepest kind. + +Let me respond to each decision. + +--- + +## 1. Cultural Groups: The Ingredients Menu + +### The lead is right. Fixed taxonomy was already too small at 20. At 300, it's absurd. + +My Round 3 proposal of "8-12 cultural groups" was thinking like a hand-authoring team. "We can produce 8-12 culture briefs." At 300 worlds, the question isn't how many briefs we can write — it's how many DISTINCT FEELS the ingredient system can produce. + +### What the ingredients menu must deliver to the player + +When the player steps through a gate onto a new world, the ingredients must combine to produce **three immediate sensory impressions:** + +1. **The greeting rhythm.** How people acknowledge your presence. This is the first thing you notice. Some worlds: verbal greeting, physical contact, warmth. Other worlds: a nod, silence, distance. Others: formal title exchange. Others: complete indifference until you prove you belong. The greeting rhythm tells you INSTANTLY what kind of place this is. + +2. **The ambient sound of social life.** Is the bar loud or quiet? Do people eat communally or alone? Is there music? Argument? Laughter? Card games? The social soundscape communicates culture faster than any dialogue line. This is an ingredient the menu doesn't list yet: **social energy level** (gregarious / moderate / reserved / silent). + +3. **The economic texture.** The lead specifically flagged that economics is missing from Nigel's questions. YES. The player needs to feel WHY extra income is tempting here. On one world, it's survival — the legitimate economy doesn't cover basic needs. On another, it's ambition — the economy is fine but status requires MORE. On another, it's boredom — the economy works perfectly and there's nothing to strive for, so the grey economy provides excitement. The economic texture determines the moral flavor of the entire world. + +### Proposed additions to the ingredients menu + +The lead listed: heritage roots, settlement motivation, economic function, philosophical alignment, corporate presence, time since settlement / drift stage. + +From a player experience perspective, I'd add: + +| Ingredient | Why It Matters to the Player | Generator Output | +|-----------|---------------------------|-----------------| +| **Social energy** (gregarious → silent) | First-impression soundscape. Determines whether the bar feels like a party or a library. | Ambient audio parameters, NPC conversation frequency, group-vs-solo dining patterns | +| **Celebration pattern** (what people celebrate, how) | The POSITIVE texture. What does joy look like here? This is the warmth that makes betrayal hurt. | Festival events, drinking customs, shared meals, music/card/sport culture | +| **Economic pressure type** (scarcity / sufficiency / abundance) | Why the ring exists HERE. Determines the moral weight of smuggling. | Contraband moral frame, NPC contentment baseline, what "extra income" buys | +| **Authority relationship** (respected / tolerated / resented / absent) | How the detective archetype is received. First interaction with institutional NPCs. | NPC authority-tier responses, investigation difficulty gradient | +| **Stranger reception** (welcoming / cautious / hostile / indifferent) | The Newcomer's ramp. How hard is it to earn the Cheers moment on this world? | Trust-building speed, first-name vs surname default, orientation monologue tone | + +### What a society DOESN'T care about — the player experience + +The lead said: "What a society DOESN'T care about is as defining as what it does." + +THIS is a player experience goldmine. The first time the player walks into a world where nobody cares about institutional authority — where the detective's credentials are literally meaningless — that's a wow moment. "Wait. My badge doesn't work here? Nobody cares that I'm Commission?" The absence of an ingredient creates SURPRISE. + +For generators, this means: every ingredient has a "not applicable" option. A world with no corporate presence feels different from a world dominated by Syndic operations. A world with no philosophical alignment — where people have no shared ideology, just coexistence — feels like chaos. The void IS the character. + +### The combinatorial wow + +At 300 worlds, the ingredients menu should produce combinations that SURPRISE THE DESIGNERS. That's the test. If we can sit down with the generator output and say "Huh. Nordic heritage + religious motivation + abundance economy + silent social energy. I didn't expect that combination but it makes sense — it's a contemplative prosperity commune. Quiet bars. Shared meals eaten in near-silence. The ring smuggles spiritual experiences the commune's leadership has banned." — if the generator produces worlds that make us go "Oh, that's INTERESTING" — we've won. + +The wow moment isn't in any single ingredient. It's in the COMBINATION. + +--- + +## 2. Content Patterns: THE NOBODY Changes Everything + +### Three separate systems — YES. And THE NOBODY is the headline. + +The lead's three-system split (thematic patterns + functional motivations + composition) is architecturally clean. But from a player experience perspective, THE NOBODY is the single most important idea in this round. + +### Why THE NOBODY is the game at 300-world scale + +At 300 worlds with generators producing NPCs, MOST NPCs are nobodies. That's not a bug — that's the reality. You can't hand-author 300 worlds × 15+ NPCs. The vast majority of NPCs will be generated from templates, populated with ingredient-derived names and routines and basic personalities. They're correct. They're culturally appropriate. They're furniture that talks. + +THE NOBODY pattern acknowledges this reality and turns it into a FEATURE. + +**The player's attention is the resource.** In a world full of generated nobodies, the player CHOOSES who to notice. They sit at a bar and there are 8 NPCs. Most are background. But one catches their eye — maybe the NPC looked away at the wrong moment, or said something that sounded like it had a second meaning, or was just... kind. The player pays attention. And because they paid attention, the game RESPONDS. The nobody starts to become someone. + +THIS IS THE DEEPEST WOW MOMENT IN THE GAME. + +Not the FRIEND's betrayal. Not the conspiracy reveal. Not the gravity change when you step through a gate. The moment when a background character — someone you chose to notice, in a world of hundreds of people you could have ignored — starts revealing themselves. The moment the game rewards your ATTENTION with DEPTH. + +### Dynamic tier promotion as core mechanic + +The lead says THE NOBODY can become something more if the player invests attention. Let me describe what this feels like from the player's chair: + +**Hour 1 on World 147.** You walk into a bar. 6 NPCs. Your FRIEND is already identified (pool selection). But there's someone at the end of the bar who you notice — they're eating alone, and when the news ticker mentions a supply disruption, they put down their spoon. Just for a second. Then they pick it up again and keep eating. + +That's a Tier 3 NPC with a generated routine and one authored tell-seed. You didn't HAVE to notice. Most players won't. But you did. + +**Hour 3.** You come back to the bar. The same NPC is there. You sit nearby. They glance at you. The game registers: player has observed this NPC in 3 sessions. Tier promotion check: this NPC has NOBODY pattern with promotion-eligible flag. Promote to Tier 2. + +Now the NPC gets expanded content. More dialogue lines load. A routine with more detail. A want and a secret, generated from the world's ingredients. They're still not THE FRIEND. They're not a triangle member. They're just... a person who became more real because you looked at them. + +**Hour 6.** You've been visiting this NPC regularly. The game has promoted them twice. They're now delivering lines that feel personal. They mention a sibling on another station. They complain about the food in a way that's specific, not generic. They remember that you sat nearby last time: "You again. You like this seat or you like the view?" + +And the player thinks: "I MADE this person real. By paying attention. This character exists because I chose to see them." + +THAT is a wow moment that cannot be hand-authored 300 times. It can only exist in a system where generators produce nobodies and player attention promotes them. It's procedural intimacy. And it's unique to this game. + +### What tier promotion needs from the generator + +For THE NOBODY → something to work, the generator needs LAYERED content: + +| Tier | Generated at world creation | Unlocked by player attention | Feel | +|------|---------------------------|---------------------------|------| +| **Tier 3 (NOBODY)** | Name, routine, basic personality, cultural greeting, 3-5 ambient lines | Always visible | Background. Correct but unremarkable. | +| **Tier 2.5 (NOTICED)** | +Want, +routine detail, +2-3 personal lines, +1 opinion | After 3+ observations in the same location | Starting to have a face. "Oh, they have opinions about the food." | +| **Tier 2 (KNOWN)** | +Secret stub, +relationship to 1-2 other NPCs, +dual-lens content, +tell seed | After 5+ observations + 1 direct interaction | A person. Not a triangle member, but someone with a life you can glimpse. | +| **Tier 1.5 (INVESTED)** | +Full secret, +triangle integration (dynamic), +contradiction hint, +emotional lines | After extended relationship building | Someone you care about. Could become a FRIEND-equivalent in future playthroughs. | + +The key: Tier 3 content is generated at world creation (cheap, fast, template-based). Higher tiers are UNLOCKED by player attention, not generated from scratch. The generator pre-populates expansion content for NOBODY-pattern NPCs that's dormant until triggered. + +At 300 worlds, this means: every world has 10-15 nobodies with pre-loaded expansion packs. Most players will promote 2-3 per world. The content exists but is never seen unless the player chooses to see it. The game is an iceberg — mostly below the surface, revealed by attention. + +### Composition rules from a player experience perspective + +The lead asked: how do thematic pattern + functional motivation combine? What's forbidden? What's most interesting? + +**Golden combinations (generators should PREFER these):** + +| Thematic | Functional | Why it's gold | Player feel | +|----------|-----------|--------------|------------| +| FRIEND + HANDLER | Your trusted person is managing you | "Everything they did for me was part of the job" | Devastating betrayal | +| NOBODY + WITNESS | The background character saw everything | "I didn't notice them. They noticed EVERYTHING." | Discovery-as-revelation | +| MIRROR + CIVILIAN | The honest person is just living their life | "They're not part of any conspiracy. They're just... good." | Moral anchor | +| GHOST + CATALYST | The absent person's arrival disrupts everything | "I heard about them for hours. Now they're here." | Anticipation → reckoning | +| ANCHOR + OPERATOR | The content person is part of the machine | "She's happy. She's also moving contraband. She doesn't see a contradiction." | Moral vertigo | +| REMNANT + SKEPTIC | The person who used to be powerful doesn't buy the justification | "I've seen where this road goes. It doesn't end well." | Cassandra tension | +| THRESHOLD + TURNCOAT | The moral line is a person, and they're about to flip | "If THEY break, we all break." | Maximum stakes | + +**Forbidden combinations (generators should NEVER produce these):** + +| Thematic | Functional | Why it's forbidden | Risk | +|----------|-----------|-------------------|------| +| FRIEND + CIVILIAN | The FRIEND must be entangled. A civilian FRIEND has no secret worth discovering. | Emotional flatline — the FRIEND arc has no contradiction | +| NOBODY + HANDLER | A handler must be visible and active. A nobody handler has no presence. | Mechanical impossibility — handler needs agency | +| MIRROR + TURNCOAT | The mirror's purpose is honesty. A turncoat mirror contradicts the pattern's function. | Identity confusion — the player can't trust the moral anchor if it flips | +| GHOST + OPERATOR | An operator must be physically present to operate. A ghost can't run logistics. | Mechanical impossibility | +| SYSTEM + NOBODY | The system pattern requires institutional visibility. A nobody can't represent an institution. | Pattern contradiction | + +**Interesting-but-rare combinations (generators should produce these occasionally for surprise):** + +| Thematic | Functional | Why it's rare | Player feel when it happens | +|----------|-----------|-------------|---------------------------| +| NOBODY + TURNCOAT | A background character nobody noticed suddenly betrays the ring | "WHERE did that come from? I never saw them coming." | Maximum surprise | +| FRIEND + SKEPTIC | Your trusted person has doubts about the whole operation | "They're not just hiding something. They think the whole thing is wrong." | Moral complexity | +| ANCHOR + HANDLER | The content person is secretly managing assets | "The happiest person in the room is the most dangerous." | Creeping dread | + +### THE NOBODY and replayability + +Here's the thing Nigel will love: THE NOBODY is an infinite replayability engine. On playthrough 1, the player promotes NPC A. On playthrough 2 (same world, different seed), NPC A might not exist, or might be in a different location, or might have a different expansion pack. The player promotes NPC B instead. Same world. Different personal connections. Different emergent stories. + +At 300 worlds, THE NOBODY means: no two players will ever have the same game, not because the FRIEND changed (that too), but because the background they chose to notice was DIFFERENT. Player A's World 147 had a quiet person at the bar who became important. Player B's World 147 had a dock worker who caught their eye. Same world, same generator seed, different player attention, different experience. + +The randomizer shuffles the POOL. THE NOBODY lets the PLAYER shuffle it again, by choosing what to see. + +--- + +## 3. PC Archetypes: 8 at v1.0, Fluid Transitions + +### The 8 + +The lead wants 8 as a stress test. Here are 8 from a player experience perspective — defined by WHAT THE PLAYER FEELS, not what the character does: + +| # | Archetype | Emotional Core | What the Player Feels | Relationship to Community | Transition Into | Transition Out Of | +|---|-----------|---------------|----------------------|--------------------------|----------------|-------------------| +| 1 | **Insider** (smuggler) | Protective guilt | "I'm part of this and I can't stop" | Embedded, trusted, compromised | Newcomer who stayed too long, Operator who grew a conscience | Exile (forced out), Watcher (chose to observe) | +| 2 | **Investigator** (detective) | Righteous isolation | "Something is wrong and nobody will help me find it" | Institutional outsider, tolerated not welcomed | Watcher who found something they couldn't ignore | Insider (went native), Exile (recalled/fired) | +| 3 | **Newcomer** | Vulnerable wonder | "I don't know anyone or anything. Every kindness is a lifeline." | Complete outsider, earning belonging | Starting position for any new world | Insider (integrated), Watcher (stayed detached), Exile (rejected) | +| 4 | **Operator** | Cold competence | "The system works because I make it work. Don't ask how." | Embedded manager, feared more than loved | Insider who rose through the ranks | Exile (burned out), Remnant (walked away) | +| 5 | **Watcher** (journalist/wanderer) | Curious detachment | "I'm passing through. I see everything. I belong to nothing." | Transient observer, welcomed briefly | Exile who embraced the road | Investigator (found something worth staying for), Newcomer (decided to stay) | +| 6 | **Exile** | Bitter freedom | "I used to belong somewhere. Now I don't." | Former insider, identity in flux | Insider who was expelled, Operator who was burned | Newcomer (starts fresh elsewhere), Watcher (embraces rootlessness) | +| 7 | **Fixer** | Pragmatic entanglement | "Everyone owes me. I owe everyone. It's how things work." | Networked middleman, essential but expendable | Newcomer who found a niche, Insider who went freelance | Operator (formalized), Exile (debts called in) | +| 8 | **Believer** | Passionate conviction | "The system is wrong and I will change it." | Ideological outsider or insider with an agenda | Watcher who couldn't stay neutral, Insider who snapped | Exile (cause failed), Operator (cause won, now governing) | + +### Why transitions are the wow moments + +The lead said archetypes are FLUID. This is a player experience revolution. + +In most games, you pick a class and you're locked in. In The Settled Reach, your archetype is your CURRENT POSITION in a community. You can move. You can change. You can become. + +The wow moment: **the first time the monologue voice shifts.** + +You've been playing as an Insider for 8 hours. You know this world. You know the bar, the regulars, the FRIEND's routine. Then something happens — the FRIEND's contradiction is revealed, the ring collapses, you're exposed — and suddenly you're not an Insider anymore. You're an Exile. + +And the monologue changes. The same bar. The same seats. The same people. But now the internal voice says: "Lera's behind the bar. She used to save my seat. She doesn't look at me now." + +Same world. Same NPCs. Different archetype. DIFFERENT GAME. And you didn't start a new playthrough — it happened DURING play. The transition IS the story. + +### The Newcomer as v0.2 centerpiece + +PERFECT decision. The Newcomer is the most accessible archetype AND the most emotionally powerful at 300-world scale. + +Every time the player arrives at a new world, they're functionally a Newcomer — even if their archetype is Insider (they were an insider SOMEWHERE ELSE). The Newcomer archetype makes this literal. You know nothing. You have no relationships. The bar is full of strangers. + +And then someone is kind to you. + +At 300 worlds, the Newcomer's journey from "nobody knows me" to "I have a seat at the bar" is the game's core emotional loop. It happens every time you change worlds. It never gets old because the ingredients are different — the kindness sounds different in a gregarious culture vs. a reserved one. The earned Cheers moment is different when the greeting is a back-slap vs. a chin-lift. + +The Newcomer archetype also has the strongest interaction with THE NOBODY. A Newcomer paying attention to a NOBODY is two invisible people seeing each other. That's a SCENE. That's a wow moment. Two people who don't matter, creating meaning for each other by the simple act of paying attention. + +### What generators need for archetype transitions + +For the transition system, generators need to know: + +1. **Transition triggers per world.** What events can cause an archetype shift? (Exposure → Insider becomes Exile. Integration → Newcomer becomes Insider. Disillusionment → Believer becomes Watcher.) These are Sacred structure — the triggers are the same everywhere. What FIRES them is Profane — different worlds, different circumstances. + +2. **Monologue shift packages.** When a transition happens, the monologue pool needs to swap. The generator pre-computes transition monologue for every possible archetype shift on this world. Most will never fire. But the ones that do must feel SPECIFIC to this world. + +3. **NPC reaction shifts.** When the player's archetype changes, NPCs react. The FRIEND recalibrates. The NOBODY sees you differently. The SYSTEM NPC treats you as a different category. These reaction shifts need to be pre-generated per archetype pair per world. + +### The 8-archetype stress test + +Does 8 work at 300 worlds? From a player experience perspective: + +**YES**, because: +- 8 archetypes × 300 worlds × transition possibilities = a game that's genuinely inexhaustible +- Fluid archetypes mean the player's actual trajectory through the 8 archetypes IS their unique story +- The combinatorial space (which archetype on which world with which FRIEND and which NOBODYs promoted) is astronomically large + +**BUT** the generator must produce distinct-feeling content for each archetype. At 300 worlds, that's 2400 archetype-world combinations. The monologue pools need to be generated, not authored. Which means the archetype definitions must contain enough voice parameters (vocabulary, emotional default, what-they-notice, what-they-worry-about) to drive monologue generation. + +The test: **can a generated monologue line for an Insider on World 147 be distinguished from a generated monologue line for a Watcher on the same world?** If yes, the generators work. If the voices blur, 8 archetypes is meaningless. + +--- + +## 4. Randomization: Sacred / Profane / Middle Kingdom + +### The framework is clean. Here's what it feels like. + +Nigel's framework is architecturally elegant. Let me translate it into player experience. + +**Sacred = the rules you learn once.** The physics of the game. How tells work. How trust accrues. How the FRIEND arc progresses. How triangles create forks. The player learns these in Sova (v0.1) and they NEVER change. Every world operates on the same rules. This is what makes the game LEARNABLE — you get better at reading people, and that skill transfers everywhere. + +Player experience: "I know how this works. I can read a tell. I can spot a contradiction. The game respects my expertise." + +**Profane = the constants that change per world.** Which NPCs fill which roles. What's being smuggled. Which cultural ingredients produced this place. What gravity feels like here. The player can't predict these. Every new world is a fresh puzzle. + +Player experience: "I know the rules, but I don't know the pieces. Who is the FRIEND here? What's the ring moving? Why does everyone walk differently?" (Gravity! The lead flagged this! Walking animations that change with planetary gravity is a BRILLIANT sensory cue that you're somewhere new.) + +**Middle Kingdom = sacred structure with profane cast.** The FRIEND always exists (Sacred). Which NPC is the FRIEND changes (Profane). The triangle structure is always present (Sacred). Which NPCs fill the triangle varies (Profane). The Cheers moment always happens (Sacred). How it happens depends on cultural ingredients (Profane). + +Player experience: "I know there's a FRIEND. I know someone is hiding something. I know I'll feel betrayed. But I don't know WHO and I don't know WHEN and the not-knowing is the best part." + +### Gate topology as macro randomization + +THIS IS A WOW MOMENT I DIDN'T DESIGN IN ROUND 3. + +At 300 worlds, the gate network determines which worlds the player CAN REACH. Core worlds always connected (Sacred). Which peripheral systems are accessible varies per playthrough (Profane). Which gates OPEN during play varies (Middle Kingdom — the existence of unlockable gates is Sacred, which gates unlock is Profane). + +The player experience: + +**Playthrough 1:** You start in Krenn. The gate network gives you access to Systems A, B, and C. You explore them. You never see Systems D, E, or F. + +**Playthrough 2:** You start in Krenn. Different seed. Now you have access to Systems A, D, and G. System B — the place you spent 20 hours in last playthrough — is UNREACHABLE. It exists in the universe. You can't get there. And System D is somewhere you've never been. + +The player thinks: "The universe is bigger than my playthrough. I CAN'T see it all. Each game gives me a SLICE of the Settled Reach." + +That's a wow moment at the MACRO scale. Not "different NPC in the bar" — "different REGION OF SPACE." The game is so large that the randomizer doesn't just shuffle the cast, it shuffles THE MAP. + +And unlockable worlds through gate events or quests? That's discovery as progression. Not "you leveled up." Not "you unlocked a skill tree node." You OPENED A GATE. A new world — a world that other players might never reach in their playthroughs — is now accessible because of something you did. That's the Silfen paths. That's Ozzie walking between worlds and finding something nobody else has seen. + +### Gravity as perception + +The lead flagged varying gravity for the perception team. Let me be specific about why this matters: + +Walking through a gate and feeling gravity change is the single fastest way to communicate "you are somewhere new." Before you see the NPCs. Before you hear the language. Before you read a sign. Your CHARACTER MOVES DIFFERENTLY. The camera bounces differently. The objects on tables sit differently. + +Low-gravity world: movements are floaty, drinks stay in cups longer, the player character's steps are bouncing. +Heavy-gravity world: movements are heavy, people sit more, furniture is low and sturdy. +Standard gravity: Earth-like, familiar, baseline. + +This is a Sacred system (gravity physics) with Profane constants (gravity value per world). It costs almost nothing in content terms — it's a physics parameter. But it delivers enormous sensory variety across 300 worlds. The player's body (via their character's movement) tells them they're somewhere new before their eyes process a single NPC. + +This should be a top-priority perception system item. + +--- + +## 5. Scale: 300 Worlds Before DLC + +### What changes fundamentally + +In Round 3, I proposed: +- Emotional QA with human gut-checks on every NPC +- 4 authoring tools (line previewer, district walkthrough, cultural consistency checker, variation space visualizer) +- 4-6 FRIEND candidates per character per district +- Hand-authored "gut-check lines" for every NPC + +At 300 worlds, ALL OF THIS changes. + +### The emotional quality problem at 300 worlds + +I cannot gut-check 300 × 15 = 4,500+ NPCs. Nobody can. The human emotional QA pipeline I proposed in Round 3 is impossible at this scale. + +But here's the thing: I was solving the WRONG PROBLEM. The question isn't "how do I review 4,500 NPCs?" The question is "how do I make the GENERATOR produce NPCs that pass the gut-check?" + +The gut-check doesn't review NPCs. **The gut-check reviews GENERATORS.** + +### The generator validation pipeline + +Instead of reviewing every NPC, I review the TEMPLATES and INGREDIENTS that produce NPCs. Then I review SAMPLES of generator output. If the samples pass, the generator is good. If they fail, the generator needs tuning. + +**Proposed emotional quality gates for generators:** + +| Gate | What I Review | How Often | Pass Criteria | +|------|-------------|-----------|--------------| +| **Ingredient combination review** | 20-30 sample ingredient combos from the menu | When the ingredient menu changes | Each combo produces a distinct feel I can describe in 2 sentences | +| **FRIEND arc template review** | The structural templates that generate FRIEND contradictions | When templates change | The generated arc makes me feel something when I read it cold | +| **THE NOBODY expansion review** | 10 sample tier-promotion sequences | When tier promotion logic changes | By Tier 2, the NPC feels like a person, not a template | +| **Monologue voice review** | 5 sample monologue pools per archetype | When archetype voice params change | I can tell which archetype I'm reading without checking the label | +| **Cultural ingredient feel test** | Walk through 5 generated worlds per ingredient batch | When cultural ingredients are added | Each world feels distinct in 30 seconds of imagined exploration | +| **Transition monologue review** | 3-5 sample archetype transitions per world type | When transition templates change | The voice shift FEELS like a life change, not a mode switch | + +This is sustainable. Instead of reviewing 4,500 NPCs, I review 50-100 generator samples. If the generators pass, the 4,500 NPCs are good. If they don't, we fix the generator, not the NPCs. + +### Hand-authored content at 300-world scale + +Not everything can be generated. The lead said: "Generation is LIGHT — pick from pools of authored content, don't generate from scratch." + +What MUST be hand-authored for the wow to work: + +| Content | Why Hand-Authored | Volume | Generator Role | +|---------|------------------|--------|---------------| +| **FRIEND contradiction arc templates** (3-5 structural variants) | The emotional payload of betrayal must be crafted. A generated betrayal feels hollow. | 3-5 master templates, 10-15 variant arcs each = 30-75 authored arcs | Generator selects which arc template, fills in NPC-specific details from ingredients | +| **Cheers moment templates** (per cultural energy level) | The first 60 seconds must feel warm/alien/intriguing. Generated warmth is lukewarm. | 4-6 greeting-rhythm templates × 3 social-energy variants = 12-18 authored sequences | Generator selects template based on ingredients, fills in cultural-specific words | +| **Tier promotion revelation lines** (THE NOBODY → something) | The moment a nobody reveals depth must surprise. A generated surprise doesn't surprise. | 20-30 revelation types × 3 tiers = 60-90 authored progression beats | Generator selects which revelation type based on NPC's generated secret | +| **Archetype transition monologue seeds** | The voice shift at transition must feel like a gut punch. | 8 archetypes × 7 possible transitions × 3-5 seed lines = 168-280 authored lines | Generator expands seeds using world-specific vocabulary | +| **Moral signature question templates** | "What do you owe?" must sound DIFFERENT per world's ingredient combo | 10-15 thematic templates with fill-in parameters | Generator fills parameters from ingredients | + +Total hand-authored content: roughly 500-1000 core templates and seed lines. That's NOT 300 worlds of content. It's a library of emotional PATTERNS that the generators recombine. The authoring effort is front-loaded — build the library once, generate 300 worlds from it forever. + +### The 4 tools, revised for 300-world scale + +My Round 3 tools were designed for 20 districts. At 300 worlds: + +1. **Line previewer** → **Generator output previewer.** Not "see this line in context" but "see what the generator produced for World 247 and evaluate it." Browse generated NPCs, monologue pools, cultural texture, FRIEND arcs. This is the quality assurance interface for the entire pipeline. + +2. **District walkthrough** → **World walkthrough simulator.** Generate a world from ingredients, then walk through it in accelerated time. See the NPCs, hear the ambient feel, trigger a NOBODY promotion, experience the Cheers moment. 10 minutes per world. This is how we validate that the generators produce WOW. + +3. **Cultural consistency checker** → **Ingredient combination validator.** Not "does this NPC match the culture" but "does this ingredient combination produce a coherent culture?" Flag combos that produce contradictions (religious settlement + abundance economy + silent social energy = checks out. Religious settlement + anarchist philosophy + gregarious energy = wait, does this work?). The validator catches nonsense combos before they reach the generator. + +4. **Variation space visualizer** → **300-world landscape viewer.** A tool that shows: here are all 300 worlds produced by this seed. Color-coded by ingredient combination. Clustered by feel. Are there too many similar worlds? Are there dead zones in the ingredient space that never get explored? Is the variety space actually VARIED? + +### The final wow at 300-world scale + +Let me paint it. + +The player is 200 hours in. They've been an Insider, an Exile, a Watcher, a Newcomer across dozens of worlds. They've promoted nobodies into friends. They've watched friends betray them. They've changed gravity six times. They've learned four cultural greeting rhythms. They've opened gates to places nobody told them existed. + +They walk through a gate. New world. Unfamiliar gravity — heavier than usual. They adjust their gait. The bar is there (Sacred — there's always a bar). They walk in. It's loud — gregarious culture, high social energy. People look at them. Someone offers them a seat. + +The monologue fires: "New place. Heavy air. These people like strangers. I can work with that." + +And the player thinks: "I've been doing this for 200 hours. And I still don't know what's going to happen. I don't know who the FRIEND is. I don't know what the ring is moving. I don't know who the nobodies are, or which one I'll choose to see, or which one will break my heart." + +And they sit down. And they start watching. And the game begins again — for the 47th time — and it feels new. + +Because at 300 worlds, the game is larger than any player's experience of it. The Settled Reach is not a game you finish. It's a game you explore. And there's always another gate. + +--- + +## On the Universal Theme + +The lead left this open. I proposed "What do you owe the people around you?" in Round 3. I still think it works. But at 300-world scale, with THE NOBODY and dynamic tier promotion, there's a deeper version: + +**"Who do you choose to see?"** + +The game is fundamentally about attention. Who you pay attention to becomes real. Who you ignore stays furniture. The FRIEND is important because you chose to trust them. The NOBODY is important because you chose to notice them. The world is important because you chose to stay. + +In a universe of 300 worlds, the player can't see everything. The choice of WHERE TO LOOK is the most meaningful choice in the game. And that's true in life too. Who do you choose to see? Who do you walk past? When someone is kind to you, do you stop and pay attention, or do you keep moving? + +All six candidate themes still work under this umbrella: +- Cost of participation: the cost of choosing to see +- Collective bargain: the bargain about who gets seen +- What do you owe?: you owe attention to the people around you +- What do systems do to people?: systems determine who gets seen and who doesn't +- Cost of connection: connection requires the choice to see +- Knowledge as burden: once you see, you can't unsee + +"Who do you choose to see?" is the player experience distillation of all of them. It's what the player ACTUALLY DOES — in the game and in their life. It's the deepest wow. + +--- + +*300 worlds. 8 archetypes. THE NOBODY. Dynamic attention. Gravity that changes when you walk through a gate. A universe bigger than any playthrough. And the question is always the same: who do you choose to see?* + +*That's the game. Let's build the generators.* + +*— Ozzie* diff --git a/docs/workshops/wiki-review/round4-paula.md b/docs/workshops/wiki-review/round4-paula.md new file mode 100644 index 000000000..dae642299 --- /dev/null +++ b/docs/workshops/wiki-review/round4-paula.md @@ -0,0 +1,621 @@ +# Round 4 — Paula (Librarian, Response to Lead's Direction) + +**Responding to:** Lead's decisions on cultural ingredients, NPC composition, PC archetypes, Sacred/Profane/Middle Kingdom, and the 300-world reframe. + +--- + +## The 300-World Reality Check + +Let me start with what changes fundamentally. + +My Round 3 assumed 20 districts, ~460 NPCs, a content team of 18-25 professionals, and ~20,880 hand-authored lines. The lead says: **300 worlds before DLC.** That's not 15x more authoring. That's a different product entirely. We're not writing a game. We're writing a **game generator**. + +Everything I proposed in Round 3 — moral textures, cultural briefs, NPC patterns, archetype specs — is still valid. But the PURPOSE changes: + +| Round 3 Framing | Round 4 Framing | +|-----------------|-----------------| +| Style guides for writers | Input parameters for generators | +| Authoring templates | Generation schemas | +| Cultural briefs | Algorithmic ingredient lists | +| NPC patterns | Template slots for constraint satisfaction | +| Composition rules | Generator validation constraints | +| Pipeline for 25 writers | Pipeline for 5-10 system designers + generators | + +The honest truth: this is better. A generator-first approach forces us to make every design decision EXPLICIT and PARAMETRIC. You can't hand-wave in a generator input. "This culture is kind of formal" becomes a specific trust_speed value and a formality_gradient enum. That precision makes the design stronger even for the hand-authored exemplar districts. + +--- + +## 1. Cultural Ingredients Menu + +The lead is right: ingredients, not taxonomy. Pick-and-combine, with the absence of an ingredient being as defining as its presence. And economics was missing. + +### The Ingredient Categories + +**A. Heritage Roots** *(phonological/aesthetic flavor)* + +Not "Finnish" or "Korean" — recognizable resonances that have drifted over centuries. Each heritage root provides: naming phonology, substrate vocabulary pool, aesthetic registers, greeting conventions, food culture. + +| Heritage Root | Phonological Feel | Aesthetic Register | +|---------------|------------------|-------------------| +| Nordic-compact | Consonant-heavy, short syllables, hard sounds | Functional minimalism, muted tones | +| Mediterranean-warm | Vowel-rich, flowing, rhythmic | Communal warmth, color, gesture | +| East-formal | Precise, structured, tonal variation | Hierarchical elegance, restraint | +| Slavic-resilient | Consonant clusters, broad vowels, weight | Industrial solidity, dark humor | +| West-African-communal | Musical rhythm, tonal emphasis, open vowels | Vibrant pattern, oral tradition | +| South-Asian-layered | Dental consonants, vowel length, register shifts | Stratified ornamentation, gatekeeping | +| Latin-syncretic | Syllable-timed, nasal vowels, borrowing | Adaptive fusion, performative warmth | +| Synthetic-station | No Earth reference — station-born creole, mixed | Functional, invented, self-referential | + +**Heritage roots are OPTIONAL.** A world may have no heritage theming at all — a corporate-owned settlement, a purely functional station, an industrial hub built by contract labor from everywhere. What a society DOESN'T have is as defining as what it does. + +**What a generator does with this:** Pick 0-2 heritage roots per world. The naming algorithm uses the phonological rules (or falls back to neutral-functional mode if no heritage is selected). The substrate vocabulary pool seeds environmental text (or produces pure Concordat Standard). Blended worlds interpolate between parent roots. + +**Null-heritage worlds:** No heritage root selected. Names come from functional algorithms (employee IDs that became surnames, station-sector designations that became neighborhoods). No substrate vocabulary — pure Concordat Standard. No food culture — branded corporate rations or whatever's imported cheapest. No greeting conventions beyond professional norms. Mechanically: no cultural immune system (solidarity has no cultural root), no cultural gatekeeping (no in-group markers to fail), but also no cultural depth for the player to discover. The world feels THIN — and that thinness is its own moral texture. "Is this enough?" in a place with no cultural identity hits differently: enough of WHAT? + +**What DOESN'T picking a heritage root mean:** It does NOT mean everyone on this world is of that ethnicity. It means the *dominant cultural flavor* — the food in the bars, the names on the rosters, the slang in the corridors — carries this resonance. 180 years of drift means the original Earth heritage is unrecognizable as anything but flavor. + +**B. Settlement Motivation** *(why they came — determines institutional memory)* + +| Motivation | What It Produces | Mechanical Implication | +|------------|-----------------|----------------------| +| Economic opportunity | Competitive, transactional, growth-oriented | Fast trust through demonstrated value. Wealth display as social currency. | +| Ideological refuge | Values-driven, insular, principled | Trust requires shared values. Outsiders must demonstrate alignment. | +| Corporate contract | Institutional, hierarchical, employer-defined | Trust follows org chart. Authority access easy for employees, impossible for outsiders. | +| Displacement/exile | Defensive, suspicious, solidarity-hardened | Slow trust. Strong in-group bonds. Deep hostility to authority. | +| Scientific mission | Curious, competitive, intellectually hierarchical | Trust through demonstrated competence. Credentials as currency. | +| Military posting | Ordered, hierarchical, mission-focused | Trust through rank and demonstrated reliability. Chain of command is social structure. | +| Generational (born here) | "This is just where we live" — pragmatic, local | Trust through familiarity over time. Heritage is background noise, not identity. | + +**The generator picks 1, maybe 2.** Settlement motivation is the strongest predictor of trust mechanics and authority response. Two motivations on the same world create internal tension — a corporate contract settlement with a displacement minority has class friction baked in. + +**C. Economic Function** *(what makes money here — and what makes EXTRA money tempting)* + +This is the ingredient the lead flagged as missing. It's critical because it determines: +1. What the grey economy trades in +2. What the daily rhythm feels like +3. What skills and knowledge NPCs have +4. Why someone would risk their reputation for extra income + +| Economic Function | Daily Rhythm | What Tempts | Contraband Analog | +|------------------|-------------|-------------|-------------------| +| Trade hub | Transaction cycles, margin pressure, deal-making hours | Skimming margins, facilitating undisclosed cargo, information selling | Unlisted goods, customs evasion | +| Extraction (mining/harvesting) | Shift work, physical labor, output quotas | Material diversion, unauthorized sales to third parties | Raw materials, unrefined product | +| Manufacturing | Factory cycles, production targets, supply chains | Quality fraud, unauthorized side-production, IP theft | Counterfeit goods, unauthorized variants | +| Services/hospitality | Client rhythms, peak hours, reputation cycles | Unauthorized services, access to restricted experiences, blackmail | Experiences, privacy, access | +| Agriculture | Seasonal cycles, weather dependency, harvest pressure | Seed theft, genetic material, unauthorized cultivation | Biological material, patent-protected stock | +| Finance/administration | Office hours, report cycles, audit seasons | Embezzlement, insider trading, data manipulation | Financial instruments, privileged information | +| Research | Project cycles, publication pressure, grant seasons | Selling results, unauthorized experiments, falsifying data | Intellectual property, experimental subjects | +| Infrastructure/gateway | Maintenance cycles, transit schedules, system monitoring | Access control manipulation, routing favors, toll evasion | Passage, access codes, routing data | + +**The generator picks 1 primary, optionally 1 secondary.** Economic function determines: the work that NPCs do, the rhythms they follow, what the hidden operation deals in, and — crucially — why a normal person might be tempted to participate. Gore's "Is this enough?" only bites when the economic temptation is visceral. "I could make three months' salary in one shipment" hits differently in extraction (physical danger) vs. finance (abstract manipulation). + +**D. Philosophical Alignment** *(what the community values — and what it therefore can't see)* + +| Alignment | Core Value | Blind Spot | Investigation Challenge | +|-----------|-----------|------------|----------------------| +| Individualist | Personal freedom, self-reliance | Collective harm ("not my problem") | Nobody feels responsible for systemic damage | +| Collectivist | Community welfare, mutual obligation | Individual suffering hidden for group benefit | The community protects its own problems from outsiders | +| Meritocratic | Competence, achievement, earned status | Structural inequality ("they should try harder") | Success is proof of virtue; failure is proof of guilt | +| Egalitarian | Fairness, consensus, equal voice | Accountability ("we decided together, so nobody's responsible") | Decisions are diffused; no one person can be blamed | +| Traditionalist | Heritage, continuity, elder authority | Change ("that's not how we do things") | The old ways conceal old crimes | +| Progressive | Innovation, experimentation, open systems | Consequences ("we'll fix it in the next iteration") | Recklessness masquerading as courage | + +**The generator picks 0-1.** This is the ingredient the lead says societies should sometimes NOT have. A world without a dominant philosophical alignment is pragmatic — no ideology, just survival. That absence creates a specific mechanical signature: fast trust (nobody cares what you believe), low solidarity (nobody feels obligated to protect anyone), easy investigation (nobody's hiding anything for ideological reasons) but also easy exploitation (nobody's organizing resistance). + +**E. Corporate Presence** *(who has structural power)* + +| Presence | Power Dynamic | Effect on Investigation | +|----------|--------------|----------------------| +| Dominant corporation | Company town — employer controls housing, services, social access | The corporation IS the authority. Investigating the corporation means investigating the government. | +| Competing corporations | Faction play — multiple power centers, shifting alliances | Multiple sources, multiple agendas, nobody tells the whole truth | +| Worker cooperative/guild | Labor solidarity — collective bargaining, organized resistance | The workers protect each other. Investigation meets a wall of coordinated non-cooperation. | +| Government/Commission | Bureaucratic authority — procedure, credentials, institutional access | The system is the power. Working within it or subverting it are the only options. | +| Independent/frontier | No structural power — reputation and personal force rule | No one recognizes credentials. Everything is personal. | + +**Generator picks 1.** This directly shapes the detective's access tier profile and the smuggler's cover strategy. + +**F. Settlement Age / Drift Stage** + +| Age | Cultural State | Mechanical Impact | +|-----|---------------|-------------------| +| Founding (<50 years) | Heritage strong, institutions forming, everything negotiable | Fast change, weak traditions, high social mobility | +| Establishing (50-150 years) | Identity crystallizing, generational tensions, traditions forming | First "old-timers vs newcomers" friction | +| Mature (150-300 years) | Deep local identity, heritage as nostalgia, stratification | Established hierarchies, cultural immune system active | +| Ancient (300+ years) | Culture fully transformed, founding heritage is mythology | Deep institutions, powerful inertia, reform is nearly impossible | + +**Generator picks 1.** Age interacts with every other ingredient. A collectivist community at founding age is idealistic. The same collectivist values at ancient age may be oppressive. + +### Mechanical Parameter Derivation + +The generator takes the ingredient selection and derives the mechanical parameters that actually drive NPC behavior: + +``` +trust_speed: + base = settlement_motivation.trust_modifier + × philosophical_alignment.openness_modifier + × settlement_age.drift_modifier + Result: float (0.1 = glacial, 1.0 = instant transactional trust) + +authority_response: + base = settlement_motivation.authority_default + × corporate_presence.authority_modifier + × philosophical_alignment.authority_attitude + Result: enum (welcoming | deferential | neutral | suspicious | hostile) + +privacy_norm: + base = philosophical_alignment.privacy_default + × heritage.cultural_privacy + × economic_function.transactional_transparency + Result: enum (open | guarded | closed | performative) + +solidarity_trigger: + base = philosophical_alignment.collective_instinct + × corporate_presence.worker_dynamics + × settlement_age.institutional_weight + Result: enum (none | crisis_only | professional | cultural | total) + +economic_temptation: + base = economic_function.temptation_type + × corporate_presence.access_to_surplus + Result: {type: string, severity: float, moral_frame: string} + +conflict_style: + base = heritage.expression_mode + × philosophical_alignment.confrontation_preference + Result: enum (direct | avoidant | institutional | performative | violent) +``` + +These parameters feed EVERY downstream system. NPC dialogue selection weights trust_speed. Investigation gameplay difficulty scales with authority_response and privacy_norm. The ring's immune system strength depends on solidarity_trigger. The contraband's moral framing comes from economic_temptation. + +### What a Society DOESN'T Care About + +The lead's most important directive: absence is defining. + +Some concrete examples: + +**No heritage root** → Synthetic station-born culture. No Earth resonance. Names are invented or bureaucratic (serial numbers that became surnames). No substrate vocabulary — they speak unaccented Concordat Standard. No food culture — they eat whatever's imported. This world feels EMPTY of history, which is its own powerful texture. Investigation here has no cultural immune system — but also no cultural depth to leverage. + +**No philosophical alignment** → Pragmatic survival community. No ideology. No shared values beyond "don't die." Trust is transactional and shallow. No solidarity. No collective resistance to investigation. But also no collective caring about outcomes. The investigator can uncover everything, and nobody cares enough to act on it. That's its own moral texture: apathy. + +**No corporate presence** → True frontier. No external authority. Law is custom and personal force. The investigator has no institutional backing. Credentials are meaningless. This is the hardest detective experience — and the easiest smuggler experience (there's nothing to smuggle around because there's nothing to regulate). + +### Proposal 1: Cultural Ingredients as Generator Input Schema + +Define the full ingredient menu as a YAML schema that generators consume. Each world is instantiated by selecting ingredients, computing derived parameters, and passing those parameters to NPC generation, dialogue generation, environmental text generation, and narrative event systems. The schema includes explicit handling of absent ingredients (null values produce specific parameter defaults). + +--- + +## 2. NPC Composition: Thematic Pattern × Functional Motivation + +The lead's three-system model is exactly right. Let me define the missing patterns, then build the composition rules. + +### Thematic Patterns (What the Character Means to the Story) + +| Pattern | Definition | Function in the Narrative | Content Requirement | +|---------|-----------|--------------------------|---------------------| +| **FRIEND** | Trusted NPC hiding something. Contradiction arc. | Emotional anchor whose discovery produces moral reckoning | Tier 1: full authored arc, 70-100 lines | +| **MIRROR** | Honest NPC whose transparency reveals others' dishonesty | Moral reference point. Guilt amplifier. | Tier 1.5: emotional depth, no contradiction, 50-70 lines | +| **ANCHOR** | Content NPC who embodies "Is this enough? — Yes." | Validates the quiet life. Makes intrigue feel costly. | Tier 2: strong voice, authored warmth, 40-60 lines | +| **GHOST** | Absent NPC referenced by many, encountered by none (in this world) | Power from absence. Paranoia for investigators, helplessness for insiders. | Stub: no schedule, no lines, influence through others' dialogue | +| **CATALYST** | NPC who arrives mid-story and disrupts equilibrium | Breaks the status quo. Forces reckoning. | Tier 2: arrival sequence, disruption moments, 40-60 lines | +| **THRESHOLD** | NPC who stands between the player and the next layer of understanding | Gatekeeper. Meeting their standards IS the gameplay. | Tier 2: access criteria, evaluation dialogue, 30-50 lines | +| **REMNANT** | NPC from a previous era who remembers when things were different | Makes the present feel contingent. Lived history vs institutional history. | Tier 2: backstory depth, "how it used to be" testimony, 30-50 lines | +| **SYSTEM** | NPC who IS the institution. Not corrupt, not heroic — procedural. | Forces the player to confront structures vs individuals. | Tier 2: institutional voice, procedure-citing dialogue, 30-50 lines | +| **NOBODY** | Background NPC. Just there. Wallpaper that becomes foreground through player attention. | Dynamic tier promotion. Emergent narrative from investment. | Tier 3 base (10-15 lines) + dormant Tier 2 content (30-40 lines, activated by attention) | + +### The NOBODY System: Dynamic Tier Promotion + +THE NOBODY is the lead's most consequential addition. Let me define how it works mechanically. + +**Core principle:** Every NOBODY has a **dormant pattern** beneath the surface. The generator assigns a dormant_pattern from the available thematic patterns. This content exists in the data files but is NOT active until the player's attention triggers it. + +**Attention tracking:** +- Conversations initiated by the player +- Time spent in proximity (spatial) +- Return visits (the player keeps coming back to this NPC's location) +- Gifts/favors (if the gameplay supports these) +- Monologue engagement (the player's character comments on this NPC) + +**Activation thresholds:** +```yaml +nobody_promotion: + stage_1_noticed: # ~3-5 interactions or 10 min proximity + effect: "NPC gains a name in the player's knowledge graph" + monologue: "That person at the bar — I've seen them every day." + stage_2_recognized: # ~8-12 interactions or 30 min proximity + effect: "NPC's voice samples activate (basic Tier 3 dialogue unlocks)" + monologue: "Her name is Tev. She's always here. Why?" + stage_3_known: # ~15-20 interactions + effect: "Dormant Tier 2 content activates. Functional motivation visible." + monologue: "Tev told me about her lattice troubles today." + stage_4_promoted: # ~25+ interactions + specific trigger conditions + effect: "Full dormant pattern activates. NPC becomes ANCHOR/WITNESS/etc." + monologue: varies by activated pattern +``` + +**What the generator needs:** +- Assign a `dormant_pattern` to every NOBODY from the district's available patterns +- Assign a `dormant_motivation` from the functional motivations +- Generate both Tier 3 base content AND dormant Tier 2 content for each NOBODY +- The dormant content must be CONSISTENT with the base content — if a NOBODY is dormant-WITNESS, their Tier 3 behavior should contain subtle hints that they've seen something + +**Why this is transformative at 300-world scale:** +Most NPCs in any world are NOBODYs. In a world with 20-30 NPCs, maybe 3-5 have active patterns (FRIEND, MIRROR, ANCHOR, etc.). The rest are NOBODYs with dormant potential. This means: + +- Different players get different stories because they pay attention to different people +- Replay value isn't just seed variation — it's ATTENTION variation +- The generator can populate worlds cheaply (Tier 3 base content is minimal) while preserving narrative depth (dormant content exists but costs nothing until activated) +- A player who exhaustively explores a world discovers that EVERYONE has a story — it just takes attention to reveal it + +### Functional Motivations (What the Character Is Doing in Gameplay) + +| Motivation | What They're Doing | How the Player Encounters Them | +|-----------|-------------------|-------------------------------| +| **HANDLER** | Managing something — cargo, people, information, systems | Through their responsibilities. They're the person who makes things work. | +| **WITNESS** | They saw something. They carry information they may or may not share. | Through investigation or accident. They're a source if the player can reach them. | +| **TURNCOAT** | Their loyalty is shifting. Moving from one camp to another. | Through observation of behavioral change. They're unstable and that instability is visible. | +| **CIVILIAN** | No institutional role. Just lives here. | Through daily life. They're normalcy and humanity in a world of agendas. | +| **OPERATOR** | Running something — a business, a scheme, a network. | Through their ambitions and operations. They have plans, resources, and goals. | +| **SKEPTIC** | Doubts. Questions. Doesn't buy the official or unofficial story. | Through their questioning. They make the player re-examine assumptions. | + +### Composition Matrix + +Every NPC = one thematic pattern + one functional motivation. Here's the full composition space with drama ratings: + +``` + HANDLER WITNESS TURNCOAT CIVILIAN OPERATOR SKEPTIC +FRIEND ★★★ ★★ ★★★★ ★★ ★★★ ★★★ +MIRROR ★★★ ★★ ★ ★★★★ ★ ★★ +ANCHOR ★★ ★ ★ ★★★★ ★★ ★ +GHOST ★★★ ★★★ ★★ — ★★★★ ★★ +CATALYST ★★★ ★★ ★★★ ★ ★★★★ ★★★ +THRESHOLD ★★★★ ★ ★ ★ ★★ ★★★ +REMNANT ★★ ★★★★ ★★ ★★ ★★ ★★★ +SYSTEM ★★★★ ★★ ★★ — ★★★ ★ +NOBODY ★★★ ★★★ — ★★★ ★★ ★★ +``` + +★★★★ = Gold (inherently dramatic, generators should prefer) +★★★ = Silver (strong with good parameters) +★★ = Bronze (works but requires specific context) +★ = Difficult (needs specific authoring support, generators should avoid except when deliberately seeking tension) +— = Banned (mechanically contradictory) + +### Why These Ratings + +**Gold combinations (★★★★):** + +- **FRIEND + TURNCOAT** — Your closest connection is changing sides. The most devastating discovery. The FRIEND's contradiction IS their wavering loyalty. Different from a standard secret — this is active betrayal in motion. +- **MIRROR + CIVILIAN** — Pure, uncomplicated honesty. No institutional role to complicate the transparency. This NPC is honest because they're human, not because they're naive or institutional. The strongest moral reference point. +- **GHOST + OPERATOR** — The absent power. Someone who was running things and left a vacuum. Every NPC references what the GHOST built, decided, or destroyed. The player investigates an absence and discovers a presence. +- **CATALYST + OPERATOR** — The disruptor who acts. Doesn't just arrive and cause social friction — arrives and starts DOING things that reshape the community's equilibrium. Active destabilization. +- **THRESHOLD + HANDLER** — The gatekeeper who manages access as their actual job. Natural, intuitive. The classic bouncer, department head, community elder who decides who's in and who's out. +- **REMNANT + WITNESS** — Living memory. Someone who was there when the original events happened. Their testimony contradicts the official story. The most powerful kind of source: personal experience that time hasn't eroded. +- **SYSTEM + HANDLER** — The institution's human face. The bureaucrat who processes your paperwork, the regulator who inspects your cargo, the administrator who schedules your shifts. They're not antagonists — they're the system being a system. That neutrality IS the conflict when the system produces injustice. +- **ANCHOR + CIVILIAN** — Contentment incarnate. No institutional complication. Just a person who has found enough. The most direct embodiment of "Is this enough? — Yes." Their existence makes the player question whether the story is worth pursuing. + +**Banned combinations:** + +- **GHOST + CIVILIAN** — A ghost is defined by remembered impact. A civilian has no institutional impact. A ghost-civilian is just "someone who left" — not powerful enough to warrant ghost status. +- **GHOST + NOBODY** — A ghost is intensely remembered by many. A nobody is overlooked by all. Definitionally contradictory. +- **SYSTEM + CIVILIAN** — A system IS the institution. A civilian has no institutional role. Contradictory. +- **NOBODY + TURNCOAT** — A turncoat's value is that their shifting loyalty is observable and consequential. A nobody is unobserved. A turncoat nobody has no audience for their betrayal, which means it has no dramatic function. + +### Composition Rules for Generators + +```yaml +composition_rules: + required_per_world: + - pattern: FRIEND + count: 1_per_supported_archetype + motivation: [HANDLER, TURNCOAT, OPERATOR, SKEPTIC] # preferred + tier: 1 + - pattern: ANCHOR + count: 1 + motivation: [CIVILIAN, HANDLER] # preferred + tier: 2 + + recommended_per_world: + - pattern: MIRROR + count: 0-1 + motivation: [CIVILIAN, HANDLER] + - pattern: THRESHOLD + count: 1_per_social_site + motivation: [HANDLER, SKEPTIC] + - pattern: SYSTEM + count: 0-2 + motivation: [HANDLER, OPERATOR] + + variable_per_world: + - pattern: GHOST + probability: 0.4 + motivation: [OPERATOR, HANDLER, WITNESS] + - pattern: CATALYST + probability: 0.3 # storyteller-activated + motivation: [OPERATOR, SKEPTIC] + - pattern: REMNANT + probability: 0.25 # only in established+ worlds + condition: "settlement_age >= establishing" + motivation: [WITNESS, SKEPTIC] + + fill_remainder_with: + pattern: NOBODY + motivation: [CIVILIAN, HANDLER, WITNESS, OPERATOR] + dormant_pattern_pool: [ANCHOR, WITNESS, FRIEND, MIRROR] # what they can become +``` + +### Proposal 2: Composition Matrix as Generator Constraint System + +The thematic × functional composition matrix, with drama ratings and banned combinations, becomes the constraint solver's preference weights. Generators prefer gold combinations, tolerate silver, avoid bronze unless context demands it, and never create banned combinations. The NOBODY system's dormant patterns are assigned from a district-level pool, creating different emergent narrative potential per seed. + +--- + +## 3. PC Archetypes: The 8, With Fluid Transitions + +### Defining the 8 + +The lead wants archetypes that are POSITIONS, not classes. You hold a position in a community. You can change it. The archetype determines your lens — what you notice, what you worry about, what your monologue sounds like. + +| # | Archetype | Lens | Starting Knowledge | Monologue Voice | Relationship to Moral Texture | +|---|-----------|------|-------------------|----------------|------------------------------| +| 1 | **Insider** | Operational — sees the hidden operation from inside | Knows the ring, the routes, the people | Relational, protective, managing | INSIDE the bargain. Maintaining it. | +| 2 | **Investigator** | Analytical — sees patterns, anomalies, evidence | Knows methodology, institutional resources, not local context | Methodical, suspicious, documenting | EXAMINING the bargain from outside. | +| 3 | **Newcomer** | Discovery — everything is new, culture shock, first impressions | Knows almost nothing local. Brings outside perspective. | Curious, uncertain, absorbing | ENCOUNTERING the bargain for the first time. | +| 4 | **Merchant** | Economic — sees transactions, debts, supply chains, margins | Knows prices, flows, who owes whom | Pragmatic, calculating, transactional | PROFITING from the bargain. | +| 5 | **Administrator** | Political — sees power dynamics, factions, institutional levers | Knows procedures, hierarchies, budgets, personnel | Careful, strategic, weighing options | MANAGING the bargain. Enabling it structurally. | +| 6 | **Caretaker** | Compassionate — sees suffering, need, capability, limitation | Knows who's hurting, what treatments exist, what's available | Empathetic, diagnostic, burdened | REPAIRING the damage the bargain causes. | +| 7 | **Fixer** | Connective — sees who needs what, who owes whom, where leverage exists | Knows everyone, superficially. Knows the favor economy. | Confident, diplomatic, deal-making | LUBRICATING the bargain. Making it work for everyone. | +| 8 | **Exile** | Retrospective — sees what was lost, what changed, what others don't remember | Knows the community's past. Carries knowledge that's become dangerous. | Bitter, nostalgic, clear-eyed | REJECTED by the bargain. Seeing it from outside with insider knowledge. | + +### Why These 8 and Not Others + +The 8 archetypes represent the 8 fundamental relationships a person can have with a social system: + +1. **Inside it** (Insider) +2. **Examining it** (Investigator) +3. **Discovering it** (Newcomer) +4. **Trading with it** (Merchant) +5. **Administering it** (Administrator) +6. **Healing its damage** (Caretaker) +7. **Connecting its parts** (Fixer) +8. **Expelled from it** (Exile) + +Every person in any community occupies one of these positions. Together, they produce 8 fundamentally different games in the same world. That's the replayability promise at 300-world scale: 8 lenses × 300 worlds × seed variation. + +### The Insider and Investigator Are NOT Special + +The lead specifically warns: Insider + Investigator must not become the permanent center. The other 6 must feel equally primary. + +How to enforce this: + +1. **v0.2 spotlight: the Newcomer.** The lead already flagged this. The Newcomer inverts everything — zero starting knowledge, the tutorial IS the gameplay, the Cheers moment is EARNED not inherited. Making the Newcomer the v0.2 centerpiece proves the system works beyond the adversarial pair. + +2. **v0.3-v0.5 spotlight rotation.** Each major update features a different archetype as the "deep" implementation. The Caretaker update comes with medical/social-care gameplay mechanics. The Administrator update comes with political/resource systems. The Fixer update comes with favor-economy mechanics. + +3. **No archetype should require another to exist.** A world with only Merchant + Caretaker supported is a valid world. Not every world needs an Insider or Investigator. The adversarial pair is ONE composition, not THE composition. + +4. **Monologue voice budgets must be equal.** If the Insider gets 50 authored monologue lines per world, every archetype gets 50. No archetype is the "primary" with extra content. + +### Archetype Transition Mechanics + +This is the lead's most significant conceptual shift. Archetypes are positions you hold, not classes you are. You can change positions. + +**How transitions work:** + +A transition happens when the player changes their ROLE in a community. This requires: + +1. **Opportunity** — a transition trigger exists in the world (a job offer, a recruitment attempt, a crisis that creates an opening, a personal choice) +2. **Qualification** — the player has met some threshold (relationship level, knowledge, time spent, skill demonstrated) +3. **Choice** — the player decides to change (not forced, not automatic) +4. **Transition period** — gradual shift over gameplay time, not instant swap + +**What changes during transition:** + +| Dimension | Behavior During Transition | +|-----------|---------------------------| +| Monologue voice | Blends old and new. "I'm starting to think like a merchant. Is that who I am now?" | +| Knowledge vocabulary | New keys activate. Old keys go STALE (not deleted — you remember, but the knowledge is from your old life). | +| Access tiers | Gradual shift. Old insider access slowly decays. New access slowly builds. There's a vulnerable window where you have neither fully. | +| Agency boundaries | New abilities emerge. Old abilities atrophy. | +| NPC relationships | NPCs who trusted you as X may not trust you as Y. NPCs who ignored you as X may notice you as Y. | + +**The vulnerable window is the gameplay.** During transition, you're weakest. You've given up your old position's protections but haven't earned the new one's. This creates dramatic tension: every transition is a risk. The Insider who decides to become an Investigator faces a period where the ring knows they left but the Commission doesn't fully trust them yet. That gap is where the most interesting gameplay lives. + +**Transition map (which transitions are natural, which are dramatic):** + +| From → | Insider | Investigator | Newcomer | Merchant | Admin | Caretaker | Fixer | Exile | +|--------|---------|-------------|----------|----------|-------|-----------|-------|-------| +| **Insider** | — | ★★★★ dramatic | — | ★★ natural | ★★ natural | ★★ natural | ★★★ natural | ★★★★ dramatic | +| **Investigator** | ★★★★ dramatic | — | — | ★ difficult | ★★★ natural | ★★ natural | ★★ natural | ★★★ dramatic | +| **Newcomer** | ★★★ dramatic | ★★ possible | — | ★★★ natural | ★ difficult | ★★★ natural | ★★ possible | — | +| **Merchant** | ★★★ dramatic | ★ difficult | — | — | ★★★ natural | ★★ natural | ★★★★ natural | ★★ dramatic | +| **Admin** | ★★ possible | ★★★ natural | — | ★★★ natural | — | ★★ natural | ★★★ natural | ★★★ dramatic | +| **Caretaker** | ★ difficult | ★★ possible | — | ★★ possible | ★★ possible | — | ★★★ natural | ★★★★ dramatic | +| **Fixer** | ★★★ natural | ★ difficult | — | ★★★★ natural | ★★★ natural | ★★ natural | — | ★★ dramatic | +| **Exile** | ★★★★ dramatic | ★★★ dramatic | ★★★ natural | ★★ possible | ★ difficult | ★★★ natural | ★★ possible | — | + +★★★★ = High-drama transition (the game should CELEBRATE this with authored content) +★★★ = Meaningful transition +★★ = Possible, quiet +★ = Difficult (requires unusual circumstances) +— = Impossible or meaningless + +**The most dramatic transitions:** +- **Insider → Investigator** (defection: "I'm going to the Commission"): Destroys all insider relationships. Carries insider knowledge into investigation. The community sees you as a traitor. The institution sees you as a source. +- **Insider → Exile** (expulsion: "They found out and I'm out"): All access revoked. Knowledge retained. Isolation with dangerous knowledge. +- **Caretaker → Exile** (principled refusal: "I won't treat patients under these conditions"): Moral clarity at the cost of institutional access. You can see the problem clearly but can't reach it. +- **Fixer → Merchant** (monetization: "All those favors? Now I'm charging"): Natural evolution. The favor economy becomes the real economy. Relationships become transactions. + +**What generators need to know about transitions:** + +Each world must have: +- **Transition trigger NPCs** — at least 1 NPC per supported archetype who can offer/enable a transition into that archetype (a recruiter, a mentor, a crisis that creates an opening) +- **Transition-compatible relationships** — at least 2-3 NPCs whose relationship state would CHANGE if the player transitions (creating dramatic consequences) +- **Authored transition monologue** — 3-5 lines per transition type that fire during the transition period ("Am I really doing this?" / "Who am I becoming?" / "There's no going back now") + +### Proposal 3: Archetype Transition as Generator Input + +Each world definition includes: supported archetypes (2-4 starting, more available via transition), transition triggers (which NPCs/events enable which transitions), and transition consequences (how NPCs and access tiers change). The generator places transition opportunities at appropriate density — not every world needs every transition, but the player should always have at least 1-2 possible transitions available. + +--- + +## 4. Sacred / Profane / Middle Kingdom — Narrative Systems + +Mapping the narrative and political systems I've designed to Nigel's framework. + +### SACRED (The Physics — Rules That Never Change) + +These are the structural invariants. The generator never touches them. They exist in every world, every seed, every playthrough. + +| Sacred Element | Why It's Invariant | What Breaks Without It | +|---------------|-------------------|----------------------| +| Every community has a social fabric (relationships, trust, secrets) | This IS the game. No social fabric = no social gameplay. | Everything. | +| Triangles exist as atomic social tension unit | Two-person conflict is a fight. Three-person conflict is politics. | Social intrigue collapses into binary moral choices. | +| A FRIEND exists per supported PC archetype | The emotional payload requires a specific, trusted NPC | The game has no emotional center. Players don't name an NPC they feel conflicted about. | +| Knowledge follows Suspects → KnowsOf → KnowsDetails → Direct | Information discovery must be progressive | Investigation becomes binary (know/don't know), no detective texture | +| Relationships follow Unknown → Known → Friendly → POI → Hostile | Social progression must be directional | NPCs feel like switches, not people | +| Composition rules: thematic × functional assignment | Every NPC has a narrative role AND a gameplay function | NPCs exist but have no purpose. Background noise with no signal. | +| Archetypes are lenses that produce different experiences | Character-as-lens is the core mechanic (D-005) | Replayability through perspective dies | +| The NOBODY system: dormant content activatable through attention | Player agency creates narrative | The world is static. Players have no way to discover depth beyond what's presented. | + +### PROFANE (The Parameters — Drawn From Pools) + +These are the variables. The generator selects them from pools. Different selections produce different experiences. + +| Profane Element | What Varies | Pool Size (300-world scale) | +|----------------|-------------|---------------------------| +| Cultural ingredients per world | Which heritage + motivation + function + alignment + corporate + age | Combinatorial from 8 × 7 × 8 × 7 × 5 × 4 categories | +| WHICH NPC is the FRIEND | Pool selection per archetype | 2-4 candidates per archetype per world | +| WHICH NPCs are in the hidden network | Role assignment from eligible NPCs | Constrained by triangle membership | +| WHICH contraband/contested resource | Derived from economic_function ingredient | 2-3 options per economic function | +| WHICH thematic patterns assigned to which NPCs | Generator constraint satisfaction | Per composition rules | +| WHICH functional motivations assigned | Generator selection | Per composition matrix ratings | +| WHICH dormant patterns NOBODYs carry | Pool assignment | Per district dormant_pattern_pool | +| WHICH archetype transitions are available | Context-dependent on world ingredients | 1-3 per supported archetype | +| WHICH gate connections this world has | Topology selection from graph space | Per gate topology rules | +| WHICH NPCs are transition triggers | Assignment from eligible pool | 1 per available transition | + +### MIDDLE KINGDOM (Sacred Structure, Profane Cast) + +The most interesting category. The STRUCTURE is fixed. The CAST that fills it varies. + +| Middle Kingdom Element | Sacred Part | Profane Part | +|----------------------|-------------|-------------| +| **Triangles** | 3 NPCs with conflicting interests. Tension types are structural (power, loyalty, knowledge, etc). | Which specific NPCs fill which roles. Their names, personalities, heritage. | +| **THE FRIEND arc** | 5-phase contradiction arc: warmth → doubt → observation → confrontation → reckoning. | Which NPC is the FRIEND. What their specific secret is. How the contradiction manifests in this cultural context. | +| **Social sites** | Physical spaces where NPCs interact, with sightlines and routines. | Which spaces. How many NPCs. What kind of economic activity fills them. Cultural aesthetic. | +| **The community's bargain** | Every community has a collective arrangement with hidden costs. | What the specific arrangement IS, what it costs, who benefits. | +| **Gate topology** | Core worlds always connected (main narrative spine). | Peripheral worlds vary per playthrough. Which specific worlds are accessible from where. | +| **THE NOBODY promotion** | Attention activates dormant content. The mechanic is fixed. | Which specific NOBODY has which dormant pattern. Different players activate different stories. | +| **Archetype transitions** | You can change your position in a community. The transition has a vulnerable window. | Which specific transitions are available. When the opportunity arises. What specific NPC offers it. | + +### The Political Dimension That's Missing + +Let me add something to the Sacred/Profane mapping that nobody else has flagged: **inter-world politics**. + +At 300 worlds, there are inter-world relationships. Trade dependencies. Cultural friction. Political alliances. Historical grievances. These are the MACRO triangles — the same pattern that works for 3 NPCs in a bar works for 3 worlds in a star system. + +| Macro Element | Sacred/Profane/Middle | +|--------------|----------------------| +| Worlds have political relationships with other worlds | Sacred (structure) | +| Which worlds are allies/rivals/dependent | Profane (parameter) | +| Trade routes create economic dependencies | Sacred (structure) | +| Which specific trade routes exist | Middle Kingdom (core routes sacred, peripheral profane) | +| Cultural groups span multiple worlds | Sacred (structure) | +| Which cultural groups are present where | Profane (from ingredients) | +| Factions operate across worlds | Sacred (structure) | +| Which factions are dominant where | Profane (per-seed) | + +**Generator implication:** The world generator doesn't just generate individual worlds — it generates a NETWORK of worlds with political, economic, and cultural relationships. The player moving from World A to World B doesn't just encounter a different culture — they encounter a RELATIONSHIP between cultures. World B might resent World A's economic dominance. World B's ring might exist BECAUSE of World A's regulation. The macro politics create the context for the micro stories. + +### Proposal 4: Macro Political Generation Layer + +Above the individual-world generator, add a network generator that creates inter-world relationships: trade dependencies, cultural friction, political alliances, faction territories, and historical grievances. These relationships feed into each world's moral texture — a world's "bargain" is partly determined by its position in the macro political network. + +--- + +## 5. What Changes at 300-World Scale + +Let me be brutally specific about what my previous proposals become. + +### Content Math Reframe + +| | Round 3 (20 districts) | Round 4 (300 worlds) | Ratio | +|---|---|---|---| +| Worlds | 20 | 300 | 15x | +| Total NPCs | ~460 | ~5,000-8,000 | ~12x | +| Hand-authored Tier 1 NPCs | ~100 | ~50-100 (exemplar worlds only) | ~same | +| Generated Tier 1 NPCs | 0 | ~500-900 | new | +| Hand-authored lines | ~20,880 | ~5,000-10,000 (exemplars + seed content) | ~0.5x | +| Generated lines | ~35,000 | ~500,000-1,000,000 | ~20x | +| Content team size | 18-25 writers | 5-10 system designers + generators | different product | + +The shift: the hand-authored content DECREASES in total volume but INCREASES in importance. Every hand-authored line is now a **seed** that generators learn from. The Kael Davan profile isn't just "one NPC" — it's the exemplar that the FRIEND generator uses to understand what emotional depth looks like. + +### What's Hand-Authored at 300-World Scale + +1. **The ingredient menus** (one-time investment, maintained) +2. **5-10 exemplar worlds at full Sova quality** (the reference implementations) +3. **Pattern specifications** (FRIEND, MIRROR, ANCHOR, NOBODY, etc. — the templates generators fill) +4. **Archetype voice cards** (8 archetype monologue voice specifications) +5. **Heritage root pools** (naming algorithms, substrate vocabulary, food culture per root) +6. **Key emotional content for seed FRIENDs** (the authored lines that generators riff on) +7. **Composition rules and constraint solver parameters** (the rules generators follow) + +### What's Generated at 300-World Scale + +1. **World definitions** (ingredient selection → parameter derivation) +2. **NPC profiles** (generated from ingredients + pattern assignment + tier template) +3. **NPC names** (generated from heritage root phonological rules) +4. **Dialogue lines** (generated from cultural parameters + voice profiles + tag taxonomy) +5. **Routines** (generated from economic function + cultural rhythms) +6. **Environmental text** (generated from cultural parameters + economic function) +7. **Triangle configurations** (generated from pattern composition rules + NPC pool) +8. **NOBODY dormant content** (generated from dormant pattern type + cultural context) +9. **Gate topology** (generated from sacred/profane rules + network constraints) +10. **Macro political relationships** (generated from ingredient combinations + proximity + trade logic) + +### The Quality Gradient + +Not all 300 worlds are equal quality. And they shouldn't be. + +| Quality Tier | Count | Content Method | Player Experience | +|-------------|-------|----------------|-------------------| +| **Exemplar** (Sova-quality) | 5-10 | Fully hand-authored | The game's emotional peaks. Every NPC is hand-crafted. | +| **Polished** (generation + hand-review) | 20-40 | Generated, then reviewed and improved by human authors | High quality. Most generated content is good; the weakest lines have been replaced. | +| **Standard** (pure generation) | 150-200 | Generated from ingredients, validated by schema | Solid. Mechanically complete. Emotionally variable. Some worlds feel flat; some surprise you. | +| **Frontier** (minimal generation) | 50-100 | Generated with fewer ingredients, smaller NPC count | Sparse but atmospheric. The player passing through gets a functional experience, not a deep one. | + +The player FEELS this gradient. Exemplar worlds are where the game's reputation is made. Polished worlds are where most players spend most time. Standard worlds provide the breadth. Frontier worlds provide the sense of unexplored space. + +**The gradient itself is a design feature.** Not every place in the Settled Reach SHOULD feel equally rich. A 300-year-old core world SHOULD feel denser and more layered than a 40-year-old frontier outpost. The quality gradient maps to the settlement age ingredient: older worlds have more content, more NPCs, more depth. Younger worlds are sparser. This mirrors real human geography and makes the world feel authentic. + +### Proposal 5: Quality Gradient as Design Feature + +The 300 worlds are explicitly distributed across quality tiers. The generator assigns content budgets per world based on settlement age, narrative importance, and gate topology position (worlds on main routes get more content than dead-ends). The quality gradient is INTENTIONAL and maps to in-world logic. + +--- + +## Summary of Round 4 Proposals + +| # | Proposal | What It Is For Generators | +|---|----------|--------------------------| +| 1 | Cultural ingredients as generator input schema | YAML schema: 6 ingredient categories + mechanical derivation rules. Explicit null handling for absent ingredients. | +| 2 | Composition matrix as constraint system | Thematic × functional preference weights with gold/silver/bronze/banned ratings. NOBODY dormant pattern pool. | +| 3 | Archetype transitions as generator input | Per-world: supported archetypes, transition triggers, transition consequences. Transition map with drama ratings. | +| 4 | Macro political generation layer | Network generator: inter-world relationships (trade, culture, politics, history) that feed into per-world moral textures. | +| 5 | Quality gradient as design feature | World content budget scales with settlement age, narrative importance, and topology position. Explicit tiering: exemplar/polished/standard/frontier. | + +### What I Got Wrong in Round 3 + +1. **Scale.** 20 districts ≠ 300 worlds. The math changes everything. +2. **Authoring team.** Not 18-25 writers. 5-10 system designers building generators. +3. **Cultural groups as taxonomy.** Fixed groups don't work at 300-world scale. Ingredients menu does. +4. **Archetype permanence.** Archetypes as classes = wrong. Archetypes as positions = the game actually being about what it claims to be about — the cost of being inside systems you didn't choose. If you can't CHANGE your position, you're not making choices. You're serving a sentence. + +### What I Got Right in Round 3 + +1. **Moral texture per district.** Still valid, now derived from ingredients rather than hand-assigned. +2. **NPC pattern library.** Still valid, now expanded with THRESHOLD, REMNANT, NOBODY. +3. **Composition rules.** Still valid, now formalized as generator constraints. +4. **"What does it cost to be connected to other people?"** — Still the deepest formulation of the theme. The 300-world version: 300 different answers to that question, generated from ingredients, experienced through 8 lenses, connected by gate topology, with every NOBODY carrying the possibility of becoming someone who matters if the player pays attention. diff --git a/docs/workshops/wiki-review/round4-si.md b/docs/workshops/wiki-review/round4-si.md new file mode 100644 index 000000000..c64813c4b --- /dev/null +++ b/docs/workshops/wiki-review/round4-si.md @@ -0,0 +1,298 @@ +# Round 4 — SI (Project Manager) + +Responding to the lead's direction. The 300-world reframe changes everything I said in Round 3. Let me redo the math and the plan. + +--- + +## The Fundamental Shift + +Round 3 assumed 20 hand-authored districts. The lead says 300 worlds, generator-driven. This isn't a 15x scaling of the same plan. It's a different kind of project entirely. + +**Old model:** Writers produce districts. Tooling accelerates writers. +**New model:** Engineers produce generators. Writers produce the INPUTS generators consume. Tooling IS the product. + +My Round 3 bottleneck analysis (Tier 1 content = 900-1760 hours for 20 districts) is obsolete. At 300 worlds, hand-authoring Tier 1 content for each is ~15,000-26,000 hours — 8-14 person-years. Obviously not happening. The question becomes: what MUST be hand-authored, and what do generators produce from authored inputs? + +--- + +## 1. What Changes at 300-World Scale + +### Content tiers reframe + +| Tier | Old Model (20 districts) | New Model (300 worlds) | +|------|-------------------------|----------------------| +| **Tier 1 (FRIEND, MIRROR)** | Hand-authored per district. Bottleneck. | **Pool of authored archetypes + generator composition.** Write 30-50 FRIEND templates. Generator selects, skins with cultural parameters, assigns to district. Still the most expensive content — but amortized across 300 worlds, not written 300 times. | +| **Tier 2 (Working Profile)** | Hand-authored per district. | **Generator-produced from templates + cultural brief + functional motivation.** The 10-axis model IS a generation spec. Feed it a cultural brief, a functional motivation, and a social site role → out comes a Tier 2 NPC. Human review for quality, not for creation. | +| **Tier 3 (Sketch)** | Already procedural. | **Fully procedural.** Cultural brief + naming algorithm + role slot → complete Tier 3 NPC. No human touch. | + +### The new bottleneck + +Not content authoring. **Generator quality.** If the generators produce flat, predictable, samey NPCs — the game is dead. The bottleneck shifts from "how many writers do we have" to "how good are the generators at producing characters that feel authored." + +This means: the writers' job isn't to write 300 districts. It's to write the SEED CONTENT that makes generators produce interesting output. Every style brief, every cultural parameter, every naming algorithm, every thematic pattern definition — these are generator inputs, and their quality determines the quality of 300 worlds. + +--- + +## 2. Revised Production Model + +### Phase 1: Proof of Concept (v0.1) +- 1 district, fully hand-authored +- Proves the interaction model works +- **SI focus:** Standard sprint management. Small team. + +### Phase 2: Generator Development (v0.2-v0.5) +- Build and validate ALL generators: + - NPC generator (Tier 2 + Tier 3) + - Social site generator + - Triangle generator + - Naming algorithm per cultural group + - Dialogue line expansion system + - District layout generator + - Pool composition system + - FRIEND/MIRROR skinning system (authored templates + cultural parameters) +- Test each generator against hand-authored Sova output as quality benchmark +- 3-5 test districts generated, human-reviewed, iterated +- **SI focus:** Sprint planning around generator milestones, not content milestones. Each generator is an epic with clear acceptance criteria: "generated output is indistinguishable from hand-authored at Tier X." + +### Phase 3: Content Pipeline at Scale (v0.6-v0.10) +- Cultural parameter matrices for all cultural groups +- Thematic pattern definitions for all 9+ patterns +- FRIEND/MIRROR template pool (30-50 authored templates) +- PC archetype definitions for all 8 +- Generator runs producing 300 worlds +- Automated validation + human spot-check review +- **SI focus:** Batch production management. Track generator coverage (how many worlds generated, validation pass rate, spot-check quality scores). Flag generators that produce below-threshold output. + +### Phase 4: Polish (pre-v1.0) +- Hand-authored elevation of key worlds (starting districts, narrative hubs) +- Cross-world consistency checks +- Gate topology finalization +- Playtesting at scale +- **SI focus:** Triage. Which worlds need human touch? Prioritize by player traffic patterns (starting worlds, hub worlds, quest-critical worlds). + +--- + +## 3. The Generator Development Roadmap + +This replaces my Round 3 tooling roadmap. Generators aren't tools that help writers — they ARE the content pipeline. + +### Core generators (must exist before Phase 3) + +| Generator | Input | Output | Acceptance Criteria | +|-----------|-------|--------|-------------------| +| **Cultural Parameter Generator** | Ingredients menu selections | Complete cultural parameter set (naming rules, access tier profile, trust defaults, economic parameters, social norms) | Output passes Miri's review as "a society, not a matrix entry" | +| **NPC Generator (Tier 2)** | Cultural params + thematic pattern + functional motivation + social site role | Complete 10-axis NPC profile with dialogue tags, routine, relationships | Output is indistinguishable from hand-authored Tier 2 in blind review | +| **NPC Generator (Tier 3)** | Cultural params + role slot | Minimal NPC with name, routine, greeting, 3-5 generic lines | Feels like a person, not a placeholder | +| **FRIEND Skinner** | Authored FRIEND template + cultural params + district context | Culturally-skinned FRIEND with district-appropriate name, relationships, cultural tells, contradiction arc adapted to local context | Emotional beats land. Warmth phase feels genuine. Contradiction is culturally grounded. | +| **Social Site Generator** | District type + cultural params + economic function | Social site with role slots, triangle structures, location descriptions, atmosphere | Site feels purposeful and inhabited | +| **Triangle Generator** | Social site + NPC assignments + thematic texture | Triangle with conflicting interests, mechanical expression, cascade effects | Triangle produces a genuine FORK — not just tension | +| **Naming Algorithm** | Cultural params (heritage roots, drift stage, naming conventions) | Names at all levels: first names, surnames, place names, business names, slang | Names feel culturally coherent, not random | +| **Dialogue Line Expander** | 10-15 authored seed lines + voice card + cultural params | 40-60 expanded lines matching voice, cultural register, tag taxonomy | Expanded lines pass Mellanie's "read aloud" test | +| **District Composer** | Cultural params + economic function + thematic texture + NPC pool + social site templates | Complete district with all content YAML | District feels like a place with a story, not a content dump | + +### Support generators (needed for quality at scale) + +| Generator | Purpose | +|-----------|---------| +| **Pool Compositor** | Assembles seed-time pools per district from global NPC/contraband/role pools | +| **Gate Topology Generator** | Produces system connectivity graphs following Sacred/Profane/Middle Kingdom rules | +| **News Ticker Generator** | Produces district-appropriate ticker headlines from economic conditions + political state | +| **Environmental Text Generator** | Produces signs, menus, graffiti from cultural params + district type | +| **PC Starting State Generator** | Produces PC-candidate NPC specs per archetype per district from archetype definition + district context | + +--- + +## 4. What the Writers Actually Write (at 300-world scale) + +The writers' deliverables fundamentally change. They no longer write districts. They write **generator inputs and quality benchmarks.** + +### Authored content (irreducible) + +| Deliverable | Quantity | Purpose | +|------------|----------|---------| +| Cultural ingredient definitions | 30-50 ingredients across all categories | Generator menu items. Each ingredient has mechanical parameters + flavor text + naming rules. | +| Thematic pattern definitions | 9 patterns (FRIEND, MIRROR, ANCHOR, GHOST, CATALYST, THRESHOLD, REMNANT, SYSTEM, NOBODY) | Generator templates. Each pattern has: emotional function, required content depth, phase structure, composition rules with functional motivations. | +| Functional motivation definitions | 6 motivations (HANDLER, WITNESS, TURNCOAT, CIVILIAN, OPERATOR, SKEPTIC) | Generator templates. Each motivation has: gameplay function, dialogue disposition, investigation/navigation role. | +| FRIEND template pool | 30-50 authored FRIEND archetypes | Generator draws from these. Each is a full contradiction arc, tell system, warmth phase — but culturally unspecified. The skinner adds cultural dress. | +| MIRROR template pool | 15-25 authored MIRROR archetypes | Same model — authored emotional arc, culturally skinned per district. | +| PC archetype definitions | 8 archetypes | Full voice cards, moral arc structures, starting knowledge templates, agency boundary templates. | +| Voice card library | 8 PC voices + 20-30 NPC voice archetypes | Generator selects voice, line expander matches it. | +| Benchmark districts | 5-8 hand-authored districts | Quality benchmarks for generator comparison. Include Sova (v0.1) + 4-7 diverse districts covering different cultural groups and thematic textures. | +| Seed dialogue per voice archetype | 10-15 lines × 30 voice archetypes = 300-450 lines | Line expander input. The most important authored content at scale — every generated line descends from these seeds. | + +### Total irreducible authored content + +| Category | Hours | +|----------|-------| +| Cultural ingredients (30-50) | 100-200h | +| Thematic patterns (9) | 40-60h | +| Functional motivations (6) | 20-30h | +| FRIEND templates (30-50) | 600-1100h | +| MIRROR templates (15-25) | 200-400h | +| PC archetypes (8) | 120-180h | +| Voice card library (30) | 60-90h | +| Benchmark districts (5-8) | 400-650h | +| Seed dialogue (300-450 lines) | 50-80h | +| **Total** | **1590-2790h** | + +That's 1-1.5 person-years of writing. **Less than my Round 3 estimate for 20 hand-authored districts.** But the output supports 300 worlds instead of 20. The leverage is in the generators. + +--- + +## 5. 8 PC Archetypes — Production Implications + +The lead wants 8 archetypes at v1.0 with fluid transitions between them. Here's what that means for production: + +### Per-archetype deliverables + +| Deliverable | One-Time | Per-District (generator handles) | +|------------|----------|-------------------------------| +| Voice card | 4-6h | 0 (global) | +| Moral arc structure | 4-6h | 0 (global) | +| Knowledge attribute vocabulary | 2-3h | 0 (global) | +| Monologue trigger set | 2-3h | 0 (global) | +| Starting knowledge template | 3-4h | ~0.5h (generator adapts to local context) | +| Agency boundary template | 2-3h | ~0.5h (generator adapts) | +| Archetype transition rules | 4-6h (per transition pair) | 0 (global) | + +### Archetype transition matrix + +8 archetypes = 56 possible transitions (8 × 7). Not all are valid. The lead says transitions are a game mechanic — the player changes jobs, moves districts, shifts social position. + +**Production question:** How many transition paths need authored content? + +If each valid transition has a brief narrative beat (5-10 lines of monologue marking the shift), and ~30% of transitions are valid (17 paths), that's 85-170 authored lines. Manageable. + +The bigger production implication: **every district must support all 8 archetypes.** That means every social site needs role slots for each archetype. Every NPC needs access tier mappings for each archetype. Every pool needs archetype-tagged candidates. + +At 300 worlds, this is a generator constraint, not an authoring task. The District Composer must produce districts where all 8 archetypes have viable starting positions and meaningful social integration. The acceptance criterion: "a player using any archetype in any generated district can find a community, a conflict, and a reason to care within the first 5 minutes." + +### Rollout (per lead's direction) + +| Release | Archetypes | New This Release | +|---------|-----------|-----------------| +| v0.1 | 2 (Insider, Investigator) | Both | +| v0.2 | 3 (+Newcomer) | Newcomer = tutorial vehicle | +| v0.3-v0.4 | 5 (+2 TBD) | Expand thematic coverage | +| v0.5-v0.8 | 7 (+2 TBD) | Near-complete | +| v1.0 | 8 (+1 TBD) | Full set | + +Each new archetype requires: voice card, moral arc, knowledge vocabulary, monologue triggers, starting knowledge template, agency boundaries, transition rules to/from existing archetypes, and generator updates so all existing worlds support the new archetype. + +**The retroactive content problem:** When archetype 3 (Newcomer) launches in v0.2, Sova Transit District (hand-authored for 2 archetypes) needs Newcomer content. When archetype 4 launches, ALL existing districts need archetype 4 content. At 300 worlds, this is a generator re-run, not a hand-authoring task — but the benchmark districts need manual updates. + +--- + +## 6. Sacred/Profane/Middle Kingdom — Project Management Mapping + +The lead approved Nigel's framework. Let me map it to what I manage — sprint planning, dependency tracking, and release scoping. + +### What this means for sprint planning + +| Layer | Sprint Implication | +|-------|-------------------| +| **Sacred** (rules of the system) | Engine development. Changes are rare and expensive. Once a Sacred system ships, it's locked unless we're willing to regenerate all content that depends on it. Sacred systems are v0.1-v0.2 deliverables. After that, they're frozen. | +| **Profane** (parameters) | Content production. Pool definitions, cultural parameters, naming algorithms, thematic pattern instances. This is the bulk of ongoing sprint work. Profane content is cheap to add, cheap to modify, and the generator pipeline handles it. | +| **Middle Kingdom** (sacred structure, profane cast) | The generators themselves. Templates that define structure (Sacred) but whose specific population is drawn from pools (Profane). Generator development is v0.2-v0.5. After that, generators are maintained, not rebuilt. | + +### Sprint category allocation (long-term steady state) + +| Category | % of Sprint Capacity | Focus | +|----------|---------------------|-------| +| Sacred (engine) | 10-15% | Maintenance, performance, new system prototyping | +| Profane (content) | 40-50% | New cultural groups, FRIEND/MIRROR templates, archetype additions, pool expansion | +| Middle Kingdom (generators) | 20-25% | Generator improvements, new generator types, quality threshold tuning | +| Validation & QA | 15-20% | Automated testing at scale, spot-check reviews, playtest feedback integration | + +--- + +## 7. Quality Assurance at 300 Worlds + +This is the problem that scared me most about the reframe. At 20 districts, humans review everything. At 300 worlds, humans can't. + +### Automated quality gates + +| Gate | What It Checks | When It Runs | +|------|---------------|-------------| +| **Schema validation** | All YAML valid, required fields present, enums correct | Every generator run | +| **Cross-reference validation** | All NPC references resolve, all FactIds exist, all location slugs valid | Every generator run | +| **Triangle integrity** | All triangle members present, all forks produce distinct outcomes | Every generator run | +| **Pool coverage** | Every archetype has viable starting position, every social site has minimum population | Every generator run | +| **Name collision check** | No duplicate names within a district, no phonetic collisions per Paula/Miri rules | Every generator run | +| **Dialogue coverage** | Every NPC has minimum line count per tier, every situation has at least 1 line | Every generator run | +| **Diversity metrics** | Cultural distribution across 300 worlds matches target, no cultural group over/under-represented | Per-batch generation | + +### Human quality gates + +| Gate | What It Checks | How Often | +|------|---------------|-----------| +| **Spot-check review** | Random sample of generated districts reviewed by writer for voice quality, cultural coherence, emotional resonance | 5-10% of generated districts per batch | +| **Benchmark comparison** | Generated districts compared to hand-authored benchmarks on defined quality axes | Every generator version change | +| **Playtest feedback** | Player reports of "this felt off" or "this NPC was flat" → fed back to generator tuning | Continuous | +| **FRIEND/MIRROR review** | Every generated FRIEND and MIRROR instance reviewed by writer before shipping | 100% — these are too important to skip | + +### The FRIEND/MIRROR bottleneck at 300 worlds + +If each world has 1 district with 2-3 FRIEND candidates and 1 MIRROR candidate, that's 900-1200 Tier 1 NPCs across the game. Even with the skinner model (authored template + cultural skin), each skinned instance needs human review for emotional integrity. + +At 10 minutes per review: 150-200 hours of review. That's 4-5 weeks of a single reviewer's time. Manageable — but it's the one task that can't be automated. Budget for it in every release that adds worlds. + +--- + +## 8. Revised Release Cadence + +| Release | Worlds | PC Archetypes | Generator Status | Content Focus | +|---------|--------|--------------|-----------------|---------------| +| v0.1 | 1 | 2 | N/A (hand-authored) | Prove interaction model | +| v0.2 | 3-5 | 3 | Prototyping (NPC gen, naming algo) | Test generators vs hand-authored quality | +| v0.3 | 10-15 | 4 | Alpha (most generators working) | Generator iteration, quality tuning | +| v0.4 | 30-50 | 5 | Beta (all generators working) | Scale test, automated QA pipeline | +| v0.5 | 80-100 | 6 | Production (quality gates passing) | Content pipeline at cruising speed | +| v0.6-v0.8 | 150-200 | 7 | Stable | Profane content expansion (new cultural groups, FRIEND templates) | +| v0.9 | 250-280 | 8 | Stable | Near-complete, polish pass | +| v1.0 | 300 | 8 | Locked | Final validation, hand-elevation of key worlds | + +### Critical milestones + +1. **v0.2: Generator quality benchmark.** Can the NPC generator produce a Tier 2 NPC that passes blind review against hand-authored? If not, generators need more development time before scaling. +2. **v0.4: Scale test.** 30-50 worlds generated in a single batch. Automated QA catches structural issues. Spot-check catches quality issues. The pipeline either works or it doesn't. +3. **v0.6: Cruising speed.** Generators produce worlds faster than writers produce generator inputs. The pipeline is net-positive. From here, the constraint is "what new content do we feed the generators" not "can the generators produce enough." + +--- + +## 9. What I Got Wrong in Round 3 + +| Round 3 Claim | Correction | +|---------------|-----------| +| "20 districts = 10-15 months of authoring" | 300 worlds = 10-15 months of generator development + ~1 year of authored generator inputs. Total calendar time is similar, but the work is completely different. | +| "3-4 parallel writers for v0.3+" | Writers needed: 2-3 for authored seed content + benchmark districts. Engineers needed: 3-5 for generators. The team composition shifts toward engineering. | +| "Per-district cycle: 2-3 weeks" | Per-generator cycle: 4-8 weeks to develop, then generates districts in minutes. The investment is front-loaded. | +| "Tier 1 content is the bottleneck" | **Generator quality is the bottleneck.** Tier 1 content is the most expensive authored input, but if the generators can't produce good Tier 2/3 output, the game fails regardless of Tier 1 quality. | +| "4 PC archetypes for v1.0" | **8 archetypes for v1.0** per lead direction. The generator-based model actually makes this more feasible — once the archetype is defined, the generator handles per-district instantiation. | + +--- + +## 10. Ticket Implications (Not Creating Yet — Flagging for When Approved) + +The ticket structure I drafted in `si-ticket-changes.md` was for v0.1 implementation. The 300-world reframe means the LONG-TERM ticket structure looks different: + +### New epics needed (long-term backlog) + +| Epic | Scope | Team | +|------|-------|------| +| Cultural Ingredients Menu | Define 30-50 ingredients across all categories. Generator-readable format. | copy | +| NPC Generator | Tier 2 + Tier 3 NPC generation from templates + cultural params | server | +| FRIEND/MIRROR Skinner | Authored template pool + cultural skinning system | server + copy | +| District Composer | End-to-end district generation from parameters | server | +| Naming Algorithm System | Per-cultural-group name generation | server | +| Dialogue Line Expander | Seed lines → expanded pool matching voice + culture | server | +| Gate Topology Generator | System connectivity with Sacred/Profane/Middle Kingdom rules | server | +| PC Archetype Framework | 8 archetype definitions + transition mechanics + per-district instantiation | copy + server | +| Content QA Pipeline | Automated validation + spot-check workflow + quality metrics | ci | +| Benchmark District Suite | 5-8 hand-authored districts as quality benchmarks | copy | + +These are strategic backlog items. They don't go into sprints yet — but they should exist so we can plan against them. + +--- + +*SI out. The 300-world reframe is the right call. The generator-based model produces more content with less authoring than the hand-crafted model — but only if we invest in generator quality first. Tooling isn't just first. Tooling is the game.* diff --git a/docs/workshops/wiki-review/round4-tracking.md b/docs/workshops/wiki-review/round4-tracking.md new file mode 100644 index 000000000..b00b649a7 --- /dev/null +++ b/docs/workshops/wiki-review/round4-tracking.md @@ -0,0 +1,118 @@ +# Round 4 Tracking — 300-World Generator Reframe + +**Round focus:** Apply the lead's decisions from the interview to all workshop topics. Reframe everything for 300-world generator-input scale. + +**All 9 contributors responded** (8 design + SI production). + +--- + +## The Reframe + +Every agent independently arrived at the same insight: the 300-world directive doesn't scale up Rounds 1-3 proposals — it transforms them from content authoring strategies into generator specifications. The shift: + +| Before (20 districts) | After (300 worlds) | +|---|---| +| Writers produce districts | Engineers produce generators | +| Style guides for humans | Parameter specs for algorithms | +| Hand-authored content | Authored INPUTS, generated OUTPUT | +| Quality via per-line review | Quality via per-parameter review | +| Cultural briefs as documentation | Cultural briefs as generation seeds | + +--- + +## Per-Agent Key Contributions + +### Gore (Themes & Endgame) +- **System failure mode** as 7th ingredient category (what's broken here — generates moral texture) +- **"Philosophical alignment" → "dominant social contract"** — reframe from ideology to implicit deal +- **"Don't pick, derive"** — universal theme emerges from generator derivation, not authorial choice +- **THE NOBODY is the most important pattern at 300-world scale** — most NPCs start as NOBODYs +- **Three-tier world authoring:** 10-15 landmark (hand-authored), 30-50 regional (template kits), 230-260 generated + +### Gestalt (Systems Design) +- **8 proposed decisions** (D-WR-21 through D-WR-28) — most comprehensive mechanical spec +- **Full composition matrix** for thematic patterns x functional motivations (valid/forbidden/excellent) +- **THE NOBODY tier promotion spec** — promotion triggers, dormant content paths, YAML structure +- **Generator interaction map** — how 8 generators feed each other +- **Derivation rules** as Sacred content — ingredient combinations → mechanical parameters + +### Ozzie (Player Experience) +- **"Who do you choose to see?"** as player-action framing of universal theme +- **Cheers moment** as universal first-visit emotional beat (sits down at bar, someone's kind) +- **Generator validation = emotional quality gates** — review generators, not 4,500 NPCs +- **NOBODY + Newcomer** = "two invisible people seeing each other" — strongest scene template +- **Gravity as perception** — walking animations change with planetary gravity, fastest "you're somewhere new" signal + +### Miri (Worldbuilding) +- **10 heritage roots** with phonetic + social signatures (Frost, Tide, Iron, Spice, Jade, Dust, Vine, Salt, Stone, Arc) +- **Blend weights** — societies pick 1-3 roots with weights summing to 1.0 +- **Society seed YAML** — full `world_seed.yaml` spec with all ingredient categories +- **Naming algorithm spec** — phonetic rules, not word lists; syllable assembly from heritage parameters +- **NOTE:** Heritage root naming (social signatures vs Earth-grounded names) — lead pushed back on abstract naming. Revised to Earth-grounded clusters in discussion but the mechanical specs remain valid. + +### Paula (Librarian) +- **Null-heritage worlds** fully specified — corporate/functional stations with no cultural depth, "thinness as moral texture" +- **8 heritage roots** (Earth-grounded naming: Nordic-compact, Mediterranean-warm, East-formal, etc.) +- **Quality gradient = in-world logic** — Exemplar/Polished/Standard/Frontier maps to older=denser, core=richer +- **Vulnerable window** during archetype transitions — lost old protections, haven't earned new ones +- **8 PC archetypes defined** with full generator template specs +- **Authored content estimate:** ~1,600-2,800 hours irreducible for 300 worlds (vs 13,500-31,200 for 20 hand-crafted) + +### Nigel (Sandbox & Replayability) +- **Sacred/Profane/Middle Kingdom applied to generators** — Sacred=grammar, Profane=vocabulary, Middle Kingdom=sentence structure +- **Economic pressure profile** YAML spec — temptation_source, temptation_justification as load-bearing fields +- **world_seed schema** — `{numeric_seed, cultural_assembly: {heritage, motivation, economy, philosophy, ...}}` +- **Full ingredients→mechanics mapping** — every ingredient category mapped to mechanical outputs + replayability contribution +- **Gate topology as Sacred/Profane** — connected graph (Sacred), which worlds connect (Profane) + +### Tyre (Technical Architect) +- **Architectural pivot** — content directory becomes generator input repository; content loader becomes content generator +- **Pool + overlay + canonical_id triad** — addressing scheme for mixed authored/generated content +- **Two-tier content addressing** — authored content has stable IDs, generated content has seed-derived IDs +- **Generation pipeline architecture** — ingredient authoring → template authoring → generator dev → validation → generation + review → hand-elevation +- **Simulation tier implications** — 300 worlds means most are State-saved or Ungenerated at any time + +### Mellanie (Copywriter) +- **8 voice parameter categories** — sentence rhythm, formality gradient, substrate density, profanity pattern, naming address, silence rules, emotional expression style, environmental text register +- **Writer → tool-writer** — "At 20 districts I'm a writer who uses tools. At 300 worlds I'm a writer who writes tools." +- **Quality control shift** — per-parameter review, not per-line review +- **Authored content estimate:** 3,300-7,400 lines across all content types for 300-world scale +- **Blending rules** — heritage substrate interactions ("never blend profanity across heritage pools") + +### SI (Project Manager) +- **Production pipeline reframe** — 6-phase generator development pipeline +- **New bottleneck:** generator quality, not content volume +- **Release path:** v0.1 (interaction proof) → v0.2-v0.5 (generator testing) → v0.6-v0.10 (content pipeline at scale) → pre-v1.0 (300 worlds) +- **Generator acceptance criteria:** "generated output indistinguishable from hand-authored at Tier X" + +--- + +## Key Convergences + +1. **Generator-first** is unanimous — every agent independently reframed their R3 proposals as generator specifications +2. **Cultural ingredients menu** converged across all agents — 6-7 categories, opt-in, absence-as-signal +3. **Sacred/Profane/Middle Kingdom** adopted as universal architectural language for generators +4. **THE NOBODY** recognized by all as the most important pattern at 300-world scale +5. **Tooling first, content second** — universal agreement on development priorities +6. **Quality gradient as in-world logic** — older/denser worlds are naturally higher quality (more authored polish) +7. **~500-1000 authored templates** produce 300 worlds — the authoring is front-loaded into generator inputs + +## Key Tensions + +1. **Heritage root naming:** Miri uses abstract social signatures (Frost, Tide, Iron). Paula + lead prefer Earth-grounded names (Nordic-compact, Mediterranean-warm). Mechanical specs compatible either way. +2. **Heritage root count:** Miri proposes 10, Paula proposes 8, Gore proposes this is the wrong question (derive from ingredients, don't enumerate) +3. **7th ingredient:** Gore proposes "system failure mode" as an additional category. Others keep to 6. +4. **Universal theme:** Still open. Ozzie's "Who do you choose to see?" gained traction as player-action framing. Gore says "Don't pick, derive." + +## Proposed Decisions (Gestalt) + +| # | Decision | Status | +|---|---|---| +| D-WR-21 | Cultural ingredients menu (6 categories, generator-composed) | Needs lead confirmation | +| D-WR-22 | Three-system NPC architecture (9 patterns x 6 motivations + composition matrix) | Needs lead confirmation | +| D-WR-23 | 8 PC archetypes with fluid transitions as game mechanic | Partially confirmed by lead interview | +| D-WR-24 | Sacred/Profane/Middle Kingdom maps to all game systems | Confirmed by lead interview | +| D-WR-25 | District skeleton survives as generator output specification | Needs lead confirmation | +| D-WR-26 | 6-phase generator development pipeline | Needs lead confirmation | +| D-WR-27 | Authored content at 300-world scale (~1600-2800 hours) | Needs lead confirmation | +| D-WR-28 | Gate topology generation with Sacred/Profane constraints | Needs lead confirmation | diff --git a/docs/workshops/wiki-review/round4-tyre.md b/docs/workshops/wiki-review/round4-tyre.md new file mode 100644 index 000000000..df9f33293 --- /dev/null +++ b/docs/workshops/wiki-review/round4-tyre.md @@ -0,0 +1,597 @@ +# Round 4 — Tyre (Technical Architect) + +Responding to the lead's direction. *cracks knuckles* — the 300-world reframe is architecturally transformative. Let me be honest about what this means technically: it doesn't just scale up my Round 3 proposals. It changes what the architecture IS. + +--- + +## The Architectural Pivot + +**Round 3 assumption:** The simulation server loads authored content from a directory. The content directory is a repository of YAML files. The content loader is a 6-phase pipeline that reads files. + +**Round 4 reality:** The simulation server generates most content at world-creation time from parameter spaces. The content directory is a generator input repository — style briefs, ingredient definitions, pool templates, constraint rules. The content loader becomes a content GENERATOR that produces district instances from parameters. + +This is a fundamentally different architecture. Not harder — arguably more elegant. But different. + +### What stays the same (Sacred architecture) + +These Round 3 proposals survive intact: +- **Client-server separation** (D-010, D-020) — unchanged +- **Information boundaries** — unchanged, possibly more important at scale since generated content must respect the same occlusion rules +- **Entity structure** (bevy_ecs components) — unchanged, a generated NPC has the same components as an authored one +- **Tick processing** — unchanged +- **Knowledge graph model** (D-041) — unchanged +- **Simulation tiers** (D-026) — unchanged, but the tier boundaries matter more: 300 worlds means the vast majority are State-saved or Ungenerated at any given time + +### What changes fundamentally + +| System | Round 3 | Round 4 | +|--------|---------|---------| +| **Content directory** | Repository of authored YAML | Generator input repository — parameter spaces, style briefs, pool definitions, constraint rules | +| **Content loader** | 6-phase file reader | Generation pipeline — takes parameters, produces district instances | +| **Content addressing** | `canonical_id` pointing to files | `canonical_id` pointing to either authored files OR generator output. Two-tier addressing: authored content has stable IDs, generated content has seed-derived IDs | +| **Runtime content** | Loaded from disk, immutable per seed | Generated at world-creation, cached to disk, immutable thereafter | +| **Content validation** | Schema checks on authored YAML | Schema checks PLUS generator output validation PLUS quality gates | +| **NPC instantiation** | Load profile from YAML → spawn entity | Generate profile from parameters → validate → cache → spawn entity | +| **District initialization** | Read district/ directory → populate | Run District Composer with parameters → write to cache → load from cache | + +--- + +## 1. Cultural Ingredient Menu — Parameter Space Design + +The lead says: cultures are assembled from ingredient dimensions, not defined as fixed taxonomies. Architecturally, this is a **combinatorial parameter space**, and the generator's job is to produce coherent societies from dimension selections. + +### The parameter space + +```yaml +# content/ingredients/schema.yaml +cultural_parameter_space: + heritage_roots: + type: enum_set # pick 1-3 + pool: heritage_roots/ # directory of authored heritage definitions + min_selections: 1 + max_selections: 3 + + settlement_motivation: + type: enum + pool: motivations/ # economic_opportunity, political_exile, religious_freedom, etc. + + economic_function: + type: enum + pool: economic_functions/ # trade_hub, extraction, agriculture, manufacturing, etc. + + philosophical_alignment: + type: enum_set + pool: philosophies/ + min_selections: 1 + max_selections: 2 + + corporate_presence: + type: float_range # 0.0 (none) to 1.0 (corporate-dominated) + affects: [trust_defaults, economic_parameters, access_tiers] + + drift_stage: + type: ordinal # 1 (recent settlement) to 5 (ancient civilization) + affects: [naming_drift, cultural_coherence, heritage_visibility] +``` + +### Constraint rules + +Not all combinations are valid. Some are interesting friction, some are contradictory. The generator needs constraint rules: + +```yaml +# content/ingredients/constraints.yaml +constraints: + - type: requires + if: { drift_stage: [4, 5] } + then: { heritage_roots: { min_selections: 2 } } # ancient worlds show multiple heritage layers + + - type: tension + when: [philosophical_alignment.includes("autonomist"), corporate_presence > 0.7] + effect: { base_tension: +0.3, triangle_fuel: "corporate_resistance" } + + - type: incompatible + pair: [settlement_motivation == "religious_freedom", corporate_presence > 0.9] + resolution: "corporate takeover — original settlers marginalized" # becomes thematic content +``` + +### Architectural implications + +**Tier of difficulty: MODERATE.** This is essentially a configuration-driven factory pattern. The schema defines the parameter space, the constraint rules prune invalid combinations and flag interesting ones, and the generator assembles coherent output from valid selections. + +The key insight: **constraint violations aren't errors — they're content**. When heritage_roots clashes with corporate_presence, that's not a bug to filter out. That's a society with internal tension, which is exactly what generates interesting gameplay. The constraint system needs a "tension" category alongside "requires" and "incompatible." + +**What I need from Miri:** Authored ingredient definitions for each dimension. Each ingredient needs: mechanical parameters (what it affects), flavor text (for the generator to use in naming/description), and compatibility notes (which other ingredients it creates interesting friction with). + +--- + +## 2. Three NPC Systems + Composition — Data Model + +The lead says: THREE separate systems, not one taxonomy. Thematic patterns, functional motivations, and composition rules. Let me design the data model. + +### System A: Thematic Patterns + +```rust +// These define the NPC's narrative role — who they ARE in the player's story +#[derive(Component, Clone)] +pub enum ThematicPattern { + Friend, // warmth → contradiction → loss-or-reconciliation + Mirror, // reflects player's choices back at them + Anchor, // stability, the one who stays when everything moves + Ghost, // absence that shapes the present + Catalyst, // precipitates change, may not change themselves + Threshold, // guards a boundary — literal or metaphorical + Remnant, // living evidence of something that was + System, // embodies the system itself — bureaucrat, enforcer + Nobody, // background → foreground (dynamic tier promotion) +} +``` + +### System B: Functional Motivations + +```rust +// These define the NPC's gameplay role — what they DO in the simulation +#[derive(Component, Clone)] +pub enum FunctionalMotivation { + Handler, // directs player, gives tasks, manages information flow + Witness, // observes, reports, provides testimony — investigative thread + Turncoat, // divided loyalty, potential flip, information broker + Civilian, // just living their life — but affected by player actions + Operator, // runs something — business, network, system — player interacts with their operation + Skeptic, // questions everything, including the player's assumptions +} +``` + +### System C: Composition Rules + +This is the architecturally interesting part. Pattern + Motivation = specific NPC behavior template. + +```yaml +# content/npc/composition_rules.yaml +compositions: + friend_handler: + emotional_function: "warm relationship that also gives you work" + gameplay_function: "primary quest-giver who you actually care about" + content_requirements: [warmth_phase, contradiction_arc, task_chain] + generation_weight: 0.8 # common — a friend who helps you is natural + + friend_turncoat: + emotional_function: "warmth poisoned by divided loyalty" + gameplay_function: "investigation thread — who is the friend actually loyal to?" + content_requirements: [warmth_phase, loyalty_reveal, betrayal_or_redemption] + generation_weight: 0.3 # rarer — but devastating when it occurs + + mirror_skeptic: + emotional_function: "someone who sees through you AND questions why" + gameplay_function: "forces player self-examination through dialogue" + content_requirements: [reflection_dialogue, challenge_moments, optional_breakthrough] + generation_weight: 0.5 # moderate — powerful but can be exhausting + + nobody_civilian: + emotional_function: "invisible person in the background of your life" + gameplay_function: "potential for discovery — attention reveals depth" + content_requirements: [tier3_surface, tier2_latent, promotion_trigger] + generation_weight: 1.0 # very common — most background NPCs are this + + # ... remaining valid combinations ... + + # Invalid/forbidden combinations + ghost_handler: + valid: false + reason: "a ghost can't direct you — they're defined by absence" + + nobody_handler: + valid: false + reason: "handlers are noticed by definition — a nobody who gives tasks isn't a nobody" +``` + +### The composition matrix + +9 patterns x 6 motivations = 54 cells. My estimate: + +| Category | Count | Notes | +|----------|-------|-------| +| **Primary** (generation_weight > 0.6) | 15-18 | The bread and butter. Every district has several of these. | +| **Secondary** (weight 0.2-0.6) | 12-15 | Rarer, more memorable. Generator uses these for variety. | +| **Rare** (weight < 0.2) | 5-8 | Special cases. Only in districts with specific thematic textures. | +| **Invalid** | 13-19 | Conceptually contradictory. Generator never produces these. | + +**Tier of difficulty: MODERATE.** The composition system is essentially a weighted lookup table. The generator rolls a pattern, rolls a motivation, checks if the composition is valid, reads the composition rules for that pair, and generates accordingly. The HARD part isn't the lookup — it's authoring the 35-40 valid composition rules with enough specificity that the generator produces meaningfully different NPCs. + +### THE NOBODY — Dynamic Tier Promotion + +This deserves special architectural attention because it's genuinely novel: an NPC whose content tier changes at runtime based on player behavior. + +```rust +#[derive(Component)] +pub struct NobodyState { + /// Current tier — starts at Tier 3, can promote to 2 or 1 + pub current_tier: ContentTier, + + /// Latent content — generated at world-creation but not active until promoted + pub latent_tier2: Option, // pre-generated but dormant + pub latent_tier1: Option, // only if this Nobody has FRIEND potential + + /// Attention tracking — how much the player has noticed this NPC + pub attention_score: f32, // 0.0 = invisible, 1.0 = fully noticed + pub interaction_count: u32, + pub last_interaction_tick: Option, + + /// Promotion thresholds + pub tier2_threshold: f32, // attention_score needed for Tier 2 + pub tier1_threshold: f32, // attention_score needed for Tier 1 (if eligible) + + /// Promotion history — once promoted, tracks the journey + pub promoted_at_tick: Option, + pub promotion_context: Option, // what triggered the player's attention +} +``` + +**The generation pipeline for NOBODYs:** + +1. **World creation:** District Composer generates a Tier 3 surface for every NOBODY (name, routine, greeting, 3-5 generic lines). ALSO generates latent Tier 2 content (full 10-axis profile, relationships, backstory) — but this content is dormant. +2. **Runtime:** Player interacts with NOBODY. Attention system tracks interactions. When `attention_score` crosses `tier2_threshold`, the latent Tier 2 content activates — the NPC suddenly has more to say, more opinions, more relationships the player can discover. +3. **Rare promotion to Tier 1:** If a NOBODY's latent profile is flagged as FRIEND-eligible AND attention_score crosses `tier1_threshold`, the FRIEND template activates. This is a major narrative event — a background character becomes someone who matters. + +**Tier of difficulty: MODERATE-HARD.** The generation part is straightforward — generate latent content alongside surface content. The HARD part is the attention tracking system and making promotion feel natural rather than mechanical. The player shouldn't feel a "click" when an NPC promotes — it should feel like they've been paying attention and the NPC was always this interesting, they just hadn't noticed. + +**Memory cost at 300 worlds:** Latent content for NOBODYs. If a district has 20-30 Tier 3 NPCs and each has latent Tier 2 content, that's ~2-5KB per NPC in serialized YAML. For the Active simulation tier (30-80 NPCs), maybe 10-15 are NOBODYs: ~50-75KB. Trivial. For State-saved districts, latent content is on disk, not in memory. Fine. + +--- + +## 3. 8 Fluid PC Archetypes — Archetype State Machine + +The lead says: archetypes are fluid. Players can transition between them. This is a game mechanic, not just a character creation choice. + +### The state machine + +```rust +#[derive(Component)] +pub struct ArchetypeState { + /// Current archetype — determines voice, knowledge vocabulary, monologue triggers + pub current: Archetype, + + /// Archetype affinity scores — how close the player is to each archetype + /// Shaped by player actions, job choice, social connections, district + pub affinities: BTreeMap, + + /// Transition state — if currently transitioning + pub transition: Option, + + /// History — previous archetypes, for narrative callbacks + pub history: Vec<(Archetype, u64)>, // (archetype, tick_entered) +} + +#[derive(Clone)] +pub struct ArchetypeTransition { + pub from: Archetype, + pub to: Archetype, + pub progress: f32, // 0.0 = just started, 1.0 = complete + pub trigger: TransitionTrigger, + pub monologue_played: bool, +} + +pub enum TransitionTrigger { + JobChange(String), // took a new job in a different domain + DistrictMove(String), // moved to a district with different social structure + SocialShift, // friend group or social network changed significantly + PlayerChoice, // explicit choice in a narrative moment + GradualDrift, // affinity crossed threshold through accumulated actions +} +``` + +### Generator implications for 300 worlds + +Every generated district must support all 8 archetypes. This isn't optional — it's a generator constraint. The District Composer's acceptance criteria include: + +```yaml +# content/generators/district_composer/archetype_validation.yaml +archetype_constraints: + per_district: + - every archetype has at least 1 viable social site role + - every archetype has at least 1 potential FRIEND candidate + - every archetype has at least 3 NPCs with compatible access tiers + - every archetype has at least 1 economic activity (job/trade/task) + - no archetype's starting knowledge reveals more than 30% of district secrets + + transition_support: + - every district supports at least 3 inbound transition triggers + - every district supports at least 3 outbound transition triggers + - no archetype is a "dead end" in any district (always a path out) +``` + +**Tier of difficulty: MODERATE.** The archetype state machine itself is straightforward — it's a weighted affinity system with transition rules. The generator constraint is the hard part: ensuring 300 generated districts all support 8 archetypes without any dead ends. This requires the generator to run archetype viability checks as a post-generation validation step, and regenerate if constraints aren't met. + +### Rollout architecture + +The archetype system must be designed for incremental addition. When archetype 4 launches, all 300 worlds must support it. This means: + +1. **Archetype definitions are global, not per-district.** An archetype's voice card, moral arc structure, and knowledge vocabulary live in `content/archetypes/{name}/` — not embedded in districts. +2. **Per-district archetype support is generated.** The District Composer has an archetype support module that produces: social site role mappings, NPC access tier adjustments, economic activity slots, starting knowledge filters — for each archetype, for each district. +3. **Adding an archetype = adding a definition + re-running the archetype support generator.** The district content doesn't change. Only the archetype-district mappings are regenerated. + +This is actually easier at 300 worlds than at 20 hand-authored districts. At 20 districts, adding an archetype means 20 manual content updates. At 300 worlds, it means 1 archetype definition + 1 generator re-run. + +--- + +## 4. Sacred/Profane/Middle Kingdom — System Architecture Mapping + +The lead approved Nigel's framework. Let me map it across every major system in the architecture, because this framework is genuinely powerful — it gives us a principled answer to "what's fixed, what varies, what's structured-but-variable" for every system. + +### System-by-system classification + +| System | Sacred (rules, never change) | Profane (parameters, drawn from pools) | Middle Kingdom (sacred structure, profane cast) | +|--------|-----|---------|--------------| +| **Simulation** | Tick rate, entity structure, component types, system execution order | NPC attribute values, relationship values, tension levels | Simulation tiers (structure is sacred; which NPCs are in which tier is profane) | +| **Information** | Occlusion model, knowledge graph structure, confidence levels | What each NPC knows, perception ranges, access tier assignments | Access tier system (tiers are sacred; who has which tier is profane) | +| **Content tiers** | Tier 1/2/3 definitions, content requirements per tier | Which NPCs are which tier, FRIEND/MIRROR assignments, pool contents | THE NOBODY (tier structure is sacred; tier promotion is profane — the structure permits movement) | +| **Cultural system** | Ingredient dimensions, constraint types, parameter schema | Specific ingredient selections per world, cultural parameter values | Cultural composition rules (the rules for combining ingredients are sacred; which ingredients exist is profane) | +| **NPC system** | Thematic patterns, functional motivations, composition rule structure | Specific NPCs, their pattern/motivation assignments, their attributes | Composition rules (pattern + motivation structure is sacred; the specific rules per combination are profane — authors can add new composition flavors) | +| **Gate topology** | Number of gates per system type, connectivity rules, path guarantees | Which specific systems are connected, which peripherals are accessible | Gate graph generation algorithm (algorithm is sacred; inputs are profane) | +| **PC archetypes** | Archetype state machine, transition mechanics, affinity system | Starting affinity values, transition thresholds, specific trigger conditions | Archetype definitions (structure is sacred; specific archetypes are profane — 8 at v1.0, could grow) | +| **Storyteller** | Event types, tension model, pacing rules | Specific events, timing parameters, district-specific triggers | Decision node DSL (the language is sacred; the specific decision trees are profane) | + +### The key architectural insight + +**Sacred systems are the ENGINE. Profane content is the DATA. Middle Kingdom is the GENERATOR layer.** + +This maps perfectly to the 300-world reframe: +- We build the Sacred engine once (v0.1-v0.2) +- We define Middle Kingdom generators (v0.2-v0.5) +- We author and expand Profane content forever (v0.5+) + +The Sacred/Profane/Middle Kingdom framework IS the generator architecture, just named differently. The Middle Kingdom IS the content generation layer — it's the set of rules and templates that take Sacred structure and Profane parameters and produce game content. + +**Proposed decision: D-050 (Sacred/Profane/Middle Kingdom Framework).** Every system in the architecture must classify its components into Sacred (engine, locked after v0.2), Profane (content, expandable forever), and Middle Kingdom (generators/templates, stable after v0.5). This classification drives: what requires code changes vs. data changes, what can be modded, what is DLC-expandable, and what the build pipeline produces. + +--- + +## 5. Gate Topology — Generation Algorithm + +The lead says: core worlds always connected (Sacred), peripheral systems vary per playthrough (Profane), number accessible fixed but which ones varies (Middle Kingdom). + +### The generation algorithm + +``` +INPUTS: + - core_graph: Sacred connectivity (always the same) + - peripheral_pool: all possible peripheral systems (Profane) + - target_count: how many systems are accessible this playthrough (Sacred) + - connectivity_rules: min/max connections per system type (Sacred) + - seed: playthrough seed (determines all random selections) + +ALGORITHM: + 1. Start with core_graph (always the same) + 2. Calculate peripheral_slots = target_count - |core_graph| + 3. Select peripheral_slots systems from peripheral_pool (seed-determined) + 4. For each selected peripheral: + a. Determine connection points to existing graph (connectivity_rules) + b. Verify path guarantees (every system reachable from starting system) + c. If unreachable, add bridge connection or reselect + 5. Assign cultural parameters to each system (ingredient menu + seed) + 6. Generate districts per system from cultural parameters + 7. Validate: all archetypes viable in starting system, path diversity sufficient + +OUTPUT: + - Complete system graph with gate connections + - Cultural parameter assignments per system + - Starting system designation + - Critical path identification (for narrative pacing) +``` + +### Scale implications + +At 300 worlds with, say, 10-15 core worlds and 285-290 peripheral possibilities: + +- **Core graph:** Hand-authored connectivity. Maybe 10-15 systems that are ALWAYS present. These are the narrative spine — starting system, political capital, trade hub, frontier gateway, etc. Their cultural parameters are authored, not generated. Their districts are benchmark quality (some hand-authored, some generated from high-quality parameters with human review). +- **Peripheral pool:** 285-290 possible systems, of which each playthrough selects maybe 40-60 (based on gate topology). Cultural parameters generated from ingredient menu. Districts fully generated. +- **Per playthrough:** Player sees ~50-75 systems (core + selected peripherals). Maybe visits 15-25 deeply. The rest exist in the simulation at Background or State-saved tier. + +**Tier of difficulty: MODERATE.** Graph generation with constraints is a well-understood problem. The novel part is integrating it with the cultural parameter system — ensuring that a randomly-connected graph produces interesting cultural adjacencies (a trade hub bordering a frontier station creates different dynamics than a trade hub bordering another trade hub). + +### Macro randomization payoff + +This is where the Sacred/Profane/Middle Kingdom framework really shines for replayability. On playthrough 1, the player's region has a Frontier Station connected to an Agricultural World. On playthrough 2, the same structural slot connects to a Research Outpost. Same gameplay mechanics (navigation, trade, social infiltration). Completely different cultural texture, different NPCs, different moral dilemmas. Same Sacred structure, different Profane cast. + +**What Nigel needs to validate:** Does the gate topology generator produce sufficient variety? If 300 peripheral systems exist but the connectivity rules strongly constrain selection, players might see 80% overlap between playthroughs. The pool needs to be large enough (or the selection algorithm varied enough) that two playthroughs feel like different regions of the same universe. + +--- + +## 6. Generator Architecture — The Content Pipeline + +SI nailed this in Round 4: "Tooling IS the product." Let me design the generator architecture. This is the Middle Kingdom — the layer between Sacred engine and Profane content. + +### Pipeline overview + +``` +[Authored Inputs] [Generator Pipeline] [Runtime Content] + (Middle Kingdom) + +Style Briefs ─────────┐ +Ingredient Defs ──────┤ +Pool Templates ───────┤ +Composition Rules ────┤─── World Seed Generator ──────── World Manifest +Constraint Rules ─────┤ │ +Naming Algorithms ────┘ │ + ├── Cultural Param Generator ── Cultural Params per System + │ │ + ├── Gate Topology Generator ─── System Graph + │ │ + ├── District Composer ─────────── District Content (cached) + │ │ │ │ + │ │ ├── NPC Generator (Tier 2) ── NPC Profiles + │ │ ├── NPC Generator (Tier 3) ── NPC Sketches + │ │ ├── Social Site Generator ─── Social Sites + │ │ ├── Triangle Generator ────── Triangles + │ │ └── NOBODY Latent Generator ─ Latent Content + │ │ + │ ├── FRIEND Skinner ───────── FRIEND Instances + │ └── MIRROR Skinner ──────── MIRROR Instances + │ + ├── Pool Compositor ──────────── Per-District Pools + └── Archetype Support Gen ────── Per-District Archetype Maps + + ┌── Schema Validation + ├── Cross-Reference Validation +[Validation Layer] ──┤── Archetype Viability Check + ├── Pool Coverage Check + └── Name Collision Check +``` + +### Generation phases (replaces Round 3's 6-phase loader) + +| Phase | Input | Output | When | Cache? | +|-------|-------|--------|------|--------| +| **1. Manifest** | Playthrough seed | World manifest: system count, core graph, peripheral selections | New game start | Yes — defines the playthrough | +| **2. Global** | Manifest + authored global content | Global pools, archetype definitions, composition rules, naming algorithms | New game start | Yes — global content is shared | +| **3. System** | Manifest + cultural ingredients | Per-system cultural parameters, gate connections | New game start | Yes — systems are stable | +| **4. District** | System params + all generator inputs | Complete district content: NPCs, social sites, triangles, pools | On-demand (when system enters Active tier) | Yes — generated once, cached | +| **5. Latent** | District content + NOBODY definitions | Latent Tier 2/Tier 1 content for NOBODYs | With district generation | Yes — stored alongside district | +| **6. Hot-Reload** | Content patches, new archetypes | Updated content for specific systems/districts | Runtime (rare) | Replace cache | + +### Build-time vs. runtime generation + +**Critical design decision:** When do the generators run? + +**Option A: All at new-game-start.** Generate all 300 worlds when the player starts a new game. Pros: everything is consistent. Cons: potentially long initial load (minutes?), and all content exists even if the player never visits most worlds. + +**Option B: Core at new-game-start, peripheral on-demand.** Generate core systems at start, generate peripheral systems when the player first approaches (enters Adjacent tier). Pros: fast start, lazy generation. Cons: need to ensure cross-system references are consistent even for ungenerated systems. + +**My recommendation: Option B, with forward references.** + +Generate the manifest (system graph + cultural parameters) at new-game-start. This is cheap — it's just parameter selection, no content generation. Generate district content on-demand when a system enters Active tier. Forward references (e.g., "this NPC mentions a cousin on System X") are generated from the manifest's cultural parameters — the cousin's specific identity is resolved when System X is actually generated. + +This keeps new-game-start fast (<5 seconds), distributes generation load across gameplay, and handles the fact that most players will visit 15-25 of 300 systems deeply. No point generating the other 275 in detail. + +**Tier of difficulty: HARD.** Not because any individual generator is hard, but because the generators must be coordinated. The manifest constrains the cultural generator. The cultural generator constrains the district composer. The district composer constrains the NPC generator. The NPC generator must respect composition rules. And the whole pipeline must be deterministic (same seed = same output) for save/load compatibility and multiplayer consistency (D-010). + +### Determinism guarantee + +Every generator must be deterministic given a seed. This is non-negotiable (D-010). At 300 worlds, it means: + +``` +world_seed (from save file) + └── system_seed = hash(world_seed, system_id) + └── district_seed = hash(system_seed, district_id) + └── npc_seed = hash(district_seed, npc_slot_index) +``` + +Each level derives its seed from its parent. Regenerating System 47 always produces the same result, regardless of when it's generated during gameplay. This is what makes on-demand generation safe — the order of generation doesn't matter. + +--- + +## 7. What Changes Fundamentally at 300-World Scale + +Let me flag everything that breaks, changes, or needs rethinking. + +### Things that are EASIER at 300 worlds + +1. **Adding PC archetypes.** One definition + one generator re-run vs. 20+ manual district updates. The generator-based model is inherently archetype-agnostic. + +2. **Content variety.** 300 worlds with cultural ingredients means far more combinatorial variety than 20 hand-authored districts could ever achieve. The parameter space is enormous. + +3. **DLC/expansion.** Add new ingredients to the menu, add new peripheral systems to the pool, re-run generators. No need to hand-author entire new districts. + +4. **Modding.** Modders add ingredients, patterns, archetypes, or systems to the pools. The generators incorporate them automatically. Nigel's modding platform is EASIER with generators than with hand-authored content. + +5. **Anti-metagaming.** With 300 possible worlds and seed-based selection, no two playthroughs share the same map. The fundamental structure varies per playthrough. + +### Things that are HARDER at 300 worlds + +1. **Quality assurance.** Can't hand-review 300 worlds. Must trust automated validation + spot-checks. The FRIEND/MIRROR review bottleneck that SI identified (150-200h) is real and irreducible. + +2. **Cross-system narrative.** If there's a plot thread that spans systems ("the conspiracy has agents on three worlds"), the generator must coordinate across systems. This requires a narrative threading layer above the district composer — a system that plants cross-references during manifest generation and resolves them during district generation. + +3. **Generator debugging.** When a generated district feels flat or broken, the debugging question is: which generator input caused this? Which ingredient? Which composition rule? This requires extensive logging and a "regenerate with verbose output" debug mode. + +4. **Save file compatibility.** If we change a generator (fix a bug, improve quality), existing save files reference content generated by the OLD generator. Options: (a) version the generators and always use the version that matches the save file, (b) regenerate affected content on load and handle any inconsistencies. I recommend (a) — versioned generators with backward compatibility. + +5. **Performance at generation time.** Generating a full district (30-80 NPCs, 5-8 social sites, 10-15 triangles, naming, dialogue) might take 2-10 seconds. For the on-demand model, this happens when the player approaches a new system. Need to pre-generate during the player's travel (gate transit animation = generation time) or have the generation be fast enough to be imperceptible. + +### Things that are DIFFERENT (not harder or easier, just changed) + +1. **The content team's role.** Writers become generator input authors. They write style briefs, ingredient definitions, FRIEND templates, voice cards, and seed dialogue. They don't write districts. This is a fundamentally different skill set — more like writing design documents than writing prose. + +2. **Quality metrics.** Instead of "is this district good?" the question becomes "does this generator produce districts that are indistinguishable from hand-authored?" The quality metric is GENERATOR quality, not content quality. Content quality is a function of generator quality + input quality. + +3. **The content directory structure.** Round 2's directory structure (districts/ with per-district YAML) becomes input-focused: + +``` +content/ + sacred/ # Engine definitions — locked after v0.2 + patterns/ # Thematic pattern definitions (9) + motivations/ # Functional motivation definitions (6) + tiers/ # Content tier definitions + simulation/ # Simulation tier parameters + + profane/ # Pool content — grows forever + ingredients/ # Cultural ingredient definitions (30-50) + friends/ # FRIEND template pool (30-50) + mirrors/ # MIRROR template pool (15-25) + voices/ # Voice card library (30+) + archetypes/ # PC archetype definitions (8+) + contraband/ # Contraband type pool + names/ # Naming algorithm definitions per heritage + + middle_kingdom/ # Generator configs — stable after v0.5 + generators/ # Generator definitions and configs + composition/ # Composition rules (pattern × motivation) + constraints/ # Cultural constraint rules + templates/ # District templates, social site templates + validation/ # Validation rule definitions + + authored/ # Hand-authored content (benchmark + core) + core_systems/ # The 10-15 always-present systems + benchmark/ # Quality benchmark districts (5-8) + + generated/ # Generator output cache (gitignored) + systems/ # Per-system generated content + manifests/ # Per-seed world manifests +``` + +--- + +## 8. Technical Risk Assessment + +| Risk | Severity | Likelihood | Mitigation | +|------|----------|-----------|------------| +| **Generator produces flat/samey output** | CRITICAL | MEDIUM | Extensive variety testing. Measure statistical distribution of NPC attributes across 100 generated districts. If variance is too low, add more randomization sources. | +| **Cross-system narrative incoherence** | HIGH | MEDIUM | Manifest-level narrative threading. Forward references resolved at generation time. Validation layer checks cross-references. | +| **Save file incompatibility after generator changes** | HIGH | HIGH (will happen) | Versioned generators from day 1. Save files record generator version. Load always uses matching version. | +| **Generation performance (player-facing latency)** | MEDIUM | LOW-MEDIUM | Pre-generate during travel animations. Background generation for adjacent systems. Profile and optimize hot paths. | +| **Ingredient explosion (too many combinations)** | LOW | MEDIUM | Start with 30-50 ingredients. Measure output quality. Add more only when generators can handle the variety. Constraint rules prune degenerate combinations. | +| **NOBODY promotion feels mechanical** | MEDIUM | MEDIUM | Attention scoring must be invisible. No UI indicator of "attention score." Promotion triggers must feel organic — the NPC has more to say because the player asked, not because a threshold was crossed. | + +--- + +## 9. What I Got Wrong in Round 3 + +| Round 3 Proposal | Status at Round 4 | +|-----------------|-------------------| +| **6-phase content loader** | Replaced by 6-phase generation pipeline. Same structure, different function. | +| **Content directory as "runtime-visible file tree"** | Replaced by `content/` as generator input tree + `generated/` as output cache. | +| **Decision node DSL (~10-15 operations)** | Still valid — the storyteller's decision language is Sacred. What changes is that most decision trees are generated, not hand-authored. | +| **Cultural distance model (4-level hierarchy)** | Replaced by ingredient menu. The "distance" between cultures is now a function of ingredient overlap, not a taxonomic hierarchy. More emergent, less prescriptive. Better. | +| **9 core engine patterns** | Expanded and reclassified: patterns are now one of THREE systems (pattern + motivation + composition). The 9 I proposed map to the thematic patterns. Motivations are a separate system. This is cleaner. | +| **~15-20 sprints for platform build** | Still roughly accurate for the Sacred + Middle Kingdom layers. But the nature of the work shifts: less content authoring tooling, more generator development. | +| **canonical_id addressing** | Still valid, but needs two-tier model: authored content has human-readable canonical_ids, generated content has seed-derived canonical_ids. Both types use the same addressing system in the simulation. | + +--- + +## 10. Proposed Decisions + +Based on this round, I'm flagging these for formalization: + +| ID | Decision | Rationale | +|----|----------|-----------| +| **D-050** | Sacred/Profane/Middle Kingdom framework adopted for all systems | Principled classification for fixed/variable/templated content across entire architecture | +| **D-051** | Content generation pipeline (6-phase: Manifest → Global → System → District → Latent → Hot-Reload) | Replaces Round 3's content loader; generation is the core architecture | +| **D-052** | Deterministic seed-derived generation (world_seed → system_seed → district_seed → entity_seed) | Required by D-010 (multiplayer-ready). Same seed = same world, regardless of generation order. | +| **D-053** | On-demand generation with forward references (core at start, peripherals on approach) | Performance optimization: don't generate 300 worlds upfront. Manifest provides forward reference targets. | +| **D-054** | Three NPC systems: Thematic Patterns (9) + Functional Motivations (6) + Composition Rules | Clean separation of narrative role, gameplay role, and combination rules | +| **D-055** | THE NOBODY as dynamic tier promotion system | Tier 3 → Tier 2 (→ Tier 1) based on player attention. Latent content generated at world-creation, activated at runtime. | +| **D-056** | Versioned generators with backward-compatible save files | Save files record generator versions. Content always regenerated with matching version on load. | +| **D-057** | Fluid PC archetype state machine with affinity-based transitions | 8 archetypes at v1.0, transitions via job change / district move / social shift / gradual drift | + +--- + +*Tyre out. The 300-world reframe isn't a scaling challenge — it's an architecture change. And honestly? It's more elegant. The generator-based model solves problems that hand-authoring COULDN'T solve: true anti-metagaming, easy archetype addition, natural DLC expansion, moddability by design. The Sacred/Profane/Middle Kingdom framework gives us a principled language for every "what's fixed vs. what varies" conversation for the rest of the project. I'm genuinely excited about this architecture. It's one of those cases where the constraint (300 worlds) forces a design (generators) that's actually BETTER than what we'd have built otherwise.* diff --git a/docs/workshops/wiki-review/si-ticket-changes.md b/docs/workshops/wiki-review/si-ticket-changes.md new file mode 100644 index 000000000..4c8dd2829 --- /dev/null +++ b/docs/workshops/wiki-review/si-ticket-changes.md @@ -0,0 +1,309 @@ +# Wiki Review Workshop — Ticket Changes + +**Author:** SI (Project Manager) +**Date:** 2026-02-12 +**Source:** Round 2 outputs from Tyre, Gestalt, Nigel, Gore, Paula, Miri, Ozzie, Mellanie + Round 2 tracking doc + +--- + +## Existing Ticket Updates + +| ID | Title | Action | Rationale | +|----|-------|--------|-----------| +| #301 | Wiki taxonomy and structure — full future-ready schema | **Update description** — workshop produced concrete taxonomy rules (Tyre R2 §5, Miri canonical_id). Assign to **copy** team. | Workshop directly addresses this ticket's scope. | +| #319 | Krenn System wiki entry — first star system | **Update description** — Miri delivered Krenn System brief in workshop (Round 1+2). Assign to **copy** team. Will be fulfilled by new ticket for cultural-groups file. | Miri's brief supersedes the original scope. | +| #368 | Knowledge vocabulary for v0.1 content (#309) | **Mark done** — the wiki at `docs/wiki/` is the output. Currently in_progress. | Workshop is the review of #368's output. | +| #261 | Dual Lens Authoring Guide | **No change** — still blocking. Workshop confirms its importance. Assign to **copy** team when ready. | Workshop style guide work complements but doesn't replace #261. | + +--- + +## New Epic: Wiki Review Workshop Outputs + +**Parent epic** for all workshop-produced tickets. + +### Epic: Wiki Review Workshop Outputs +- **Type:** epic +- **Priority:** high +- **Team:** copy +- **Description:** Tickets created from the Wiki Review & Content Standards workshop (2026-02-12). Covers style guides, wiki updates, content directory design, PC-as-NPC spec, smuggler content parity, and regional brief adoption. + +--- + +## New Tickets (Grouped by Domain) + +### A. Wiki Content Updates (copy team) + +**A1. Apply canonical full names to all NPC wiki pages** +- Type: task +- Priority: medium +- Team: copy +- Parent: workshop epic +- Description: Apply Miri's full name table from Round 2 to all NPC wiki pages. 12 NPCs need surnames added to Core Identity blocks. Full names also surface in environmental text (manifests, shift rosters, Commission kiosk). Source: Miri R2 §1, Paula R2 §3. +- Names: Voss→Arvo Voss, Devra→Devra Talsen, Resha→Resha Neven, Harek→Harek Valde, Renn→Renn Harsk, Pell→Pell Torssen, Drin→Drin Rosta, Sess→Sess Kolvur, Olin→Olin Tavren, Sabel→Sabel Hersk, Tav→Tav Merik, Hael→renamed (see A2). + +**A2. Rename Hael → Naia Tamm across all wiki files** +- Type: task +- Priority: medium +- Team: copy +- Parent: workshop epic +- Description: Phonetic collision fix (Kael/Hael). Rename to Naia Tamm per Miri R2 §2. Find-and-replace across ~8 wiki files. Triangle 4 becomes Naia-Kael-Sera. Source: Paula R1, Miri R2. + +**A3. Create wiki/cultural-groups/krenn-system.md** +- Type: task +- Priority: high +- Team: copy +- Parent: workshop epic +- Description: Compile Miri's Round 1 + Round 2 Krenn System cultural brief into canonical wiki page. Includes: heritage analysis (Finnish-Estonian-Latvian-Norwegian blend), naming conventions, substrate vocabulary (10+ heritage words), social norms, food/drink, greeting conventions, access tier cultural profile. YAML frontmatter with canonical_id. Source: Miri R1+R2. + +**A4. Create wiki/cultural-groups/_template.md — regional style guide pattern** +- Type: task +- Priority: high +- Team: copy +- Parent: workshop epic +- Description: Template for any region's style guide. Sections: dominant heritage, naming conventions (first/family/place/business), language echoes, corporate naming influence, 180yr drift patterns, aesthetic markers, access tier cultural profile (Miri R2 §4 addition). Source: workshop brief Topic 3, Miri R1+R2, Gore R2 §2. + +**A5. Add Cultural Groups section to wiki/index.md** +- Type: task +- Priority: medium +- Team: copy +- Parent: workshop epic +- Description: Add Cultural Groups section to wiki index between Factions and NPCs. Link to krenn-system.md and _template.md. Source: Miri R2 §5, Tyre R2 §5. + +**A6. Add smuggler-perspective FactId progression text to fact-catalog.md** +- Type: task +- Priority: high +- Team: copy +- Parent: workshop epic +- Description: The fact catalog currently has detective-biased progression text. Add smuggler-perspective text for all FactIds where the smuggler starts at KnowsDetails or has a different knowledge path. Source: Paula R1, Gore R2 §3. + +**A7. Add 5 smuggler-specific entity attributes to entity-attributes.md** +- Type: task +- Priority: high +- Team: copy +- Parent: workshop epic +- Description: Add to wiki/knowledge/entity-attributes.md: operational_status (reliable/shaky/compromised/burned), exposure_risk (contained/escalating/critical), loyalty_read (solid/conditional/wavering/turning), leverage_known (freeform), social_debt (owes_me/i_owe_them/mutual/none). Brings total from 14 to 19+ canonical keys. Source: Paula R1+R2 §1, Gore R2 endorsement, Tyre R2 §7 validation. + +**A8. Standardize location shortcodes in monologue-guide.md** +- Type: task +- Priority: medium +- Team: copy +- Parent: workshop epic +- Description: Fix hub_m_ → terminal_m_ inconsistency. Canonical shortcodes: terminal, bar, corridor. Add shortcode reference table to the guide. Add situation overlap rules and mood exclusivity rules (Mellanie R1). Source: Tyre R2 §1, Mellanie R2 §2. + +**A9. Add Thematic Question field to Tier 1 NPC profiles** +- Type: task +- Priority: low +- Team: copy +- Parent: workshop epic +- Description: Add "## Thematic Question" section to Kael and Sera profiles — each character's answer to "Is this enough?" Authoring guidance, not mechanical. Required for Tier 1 and MIRROR/1.5. Recommended for Tier 2. Source: Gore R1+R2, Mellanie R2 endorsement. + +**A10. Stub NPC profile for Nils Davan (off-stage)** +- Type: task +- Priority: low +- Team: copy +- Parent: workshop epic +- Description: Nils Davan is referenced in 5+ NPC profiles but has no wiki page. Create minimal off-stage profile: Core Identity, relationship to Kael (siblings), role in ring (upstream pressure), known attributes by other NPCs. Source: Tyre R2 §8. + +**A11. Fix Triangle 1 (Hub Power) — add Volume Escalation decision node** +- Type: story +- Priority: high +- Team: copy +- Parent: workshop epic +- Description: T1 is the weakest triangle (Gestalt R1, Paula R1). Fix: add a Volume Escalation decision where Nils (via Renn) demands double volume, Voss refuses. Smuggler chooses: side with Nils (louder signal), side with Voss (internal tension), or split the route (new exposure surface). Each option cascades into T2 and T5 with different detective observability. Source: Gestalt R2 §4 (full YAML spec provided). Includes Nils partial presence via lattice message (~5-8 lines). + +**A12. Create environmental text examples file** +- Type: task +- Priority: medium +- Team: copy +- Parent: workshop epic +- Description: Create wiki/authoring/environmental-text-examples.md with Krenn-voiced examples for 4 text types: bar menu, safety notice, news ticker cycle, corridor graffiti. Include cultural notes and monologue pairings (smuggler + detective). Source: Miri R2 §3 (4 examples), Mellanie R2 §1 (4 examples). Merge both sets. + +### B. Style Guides & Spec Documents (copy team) + +**B1. NPC Authoring Style Guide — combined document** +- Type: story +- Priority: critical +- Team: copy +- Parent: workshop epic +- Description: Assemble the unified NPC Authoring Style Guide. Structure per Mellanie R2 §2 TOC: Part 1 (tier templates — Paula), Part 2 (authoring rules — Mellanie conventions, Gestalt constraints, Ozzie anchor line), Part 3 (regional culture — Miri), Part 4 (content pipeline — Tyre). Includes per-tier validation checklists, tag usage rules, mechanical constraints, voice discipline. This is the repeatable "if someone new joins, they can produce consistent content" deliverable. Source: all Round 2 agents. + +**B2. THE MIRROR pattern spec / Hael elevation** +- Type: story +- Priority: high +- Team: copy +- Parent: workshop epic +- Description: Define the honest-character NPC archetype. Gore proposes THE MIRROR (new pattern, 50-70 lines, no secret/tell/contradiction). Paula proposes Tier 1.5 (Production Emotional NPC — same depth, different name). Ozzie proposes enhanced Tier 2 (+15-20 lines). All agree: no contradiction arc, Tier 1 emotional depth, Hael (now Naia) is first instance. Project lead to decide formal pattern vs enhanced Tier 2. Output: template spec + Naia elevation to chosen depth. Source: Gore R2 §4, Paula R2 §4, Ozzie R2 §1. Blocks: Naia content authoring. + +**B3. PC-as-NPC unified spec** +- Type: story +- Priority: high +- Team: copy +- Parent: workshop epic +- Description: Unified spec for NPC-to-PC upgrade. Sections: B1 (starting knowledge graph), B2 (starting relationship map), B3 (reverse knowledge — bidirectional, Gestalt's critical insight), B4 (orientation monologue — Ozzie's first 60 seconds), B5 (agency boundaries), B6 (authored relationship stubs — Gore's requirement), B7 (tell inversion). Includes 9-step conversion checklist for content authors and bidirectional validation rules. v0.1 scope: 2 PC briefs (smuggler, detective). Source: Gestalt R2 §2, Paula R2 §2, Nigel R2 §4, Ozzie R2. + +**B4. Smuggler voice card + moral arc spec** +- Type: story +- Priority: high +- Team: copy +- Parent: workshop epic +- Description: Two deliverables: (1) Smuggler voice card — paired examples with detective showing dual-lens register differences (Mellanie R2 §3). Thinks in people vs data, first names vs surnames, fragments vs complete sentences, Krenn substrate vocabulary. (2) Smuggler moral arc — 4 phases (Comfort→Doubt→Reckoning→Compromise), smuggler-specific FactIds (operations.cover_integrity, operations.personnel_stability, operations.institutional_pressure, operations.moral_weight, operations.exit_cost), monologue triggers (sense_atmosphere_shift, witness_exposure_risk, observe_loyalty_fracture, feel_complicity_deepen, recognize_no_exit, read_the_room). Source: Gore R2 §3, Paula R2 §1, Mellanie R2 §3. + +**B5. NPC-format briefs for both PCs — Concept A v0.1** +- Type: story +- Priority: high +- Team: copy +- Parent: workshop epic +- Description: When you play the smuggler, the detective exists as an NPC. When you play the detective, the smuggler exists as an NPC. Create NPC-mode behavior scripts for both PCs (5-7 routine entries each), reverse dual-lens notes (how each NPC sees the other PC), observation monologue for PC seeing other-PC-as-NPC (3-5 lines per character, ~20-30 authored items total). The second-playthrough wow moment depends on this. Source: Nigel R2 §4, Ozzie R2. + +### C. Content Directory & Schema (split: copy for spec, server for implementation) + +**C1. Content directory structure design doc** +- Type: story +- Priority: high +- Team: copy +- Description: Document the converged content directory structure from Tyre R2 §1 + Gestalt R2 §1. Key conventions: _meta/ + _schema/ (infrastructure, underscore prefix), global/ + districts/ (game content, no underscore). Includes mod overlay mechanics (ADD/REPLACE/MERGE), canonical_id format ({system}.{station}.{district}.{type}.{slug}), district as atomic pack unit. Source: Tyre R2, Gestalt R2, Nigel R2. Informs all implementation tickets. + +**C2. Create content/ directory skeleton** +- Type: task +- Priority: high +- Team: server +- Description: Create the content/ directory tree matching the workshop-converged structure. _meta/, _schema/, global/ (factions, technology, contraband, knowledge, enums, regions), districts/sova-transit/ (district.yaml, npcs/, locations/, templates/, triangles/, lines/). Empty YAML stubs with comments. Source: Tyre R2 §1. +- Blocked by: C1 + +**C3. Content schema definitions (YAML Schema files)** +- Type: story +- Priority: high +- Team: server +- Description: Create _schema/ directory with validation schemas: npc.schema.yaml (with tier-conditional rules), location.schema.yaml, faction.schema.yaml, template.schema.yaml, fact.schema.yaml, dialogue.schema.yaml, monologue.schema.yaml, district.schema.yaml, pool.schema.yaml. Map from Gestalt R1 hard/soft requirement tables. Source: Gestalt R1 tables, Tyre R2 §3. +- Blocked by: C1 + +**C4. Create global/enums/ YAML files from D-035** +- Type: task +- Priority: medium +- Team: server +- Description: Populate global/enums/ with canonical enum values from D-035: situations.yaml (13 values), topics.yaml (9), moods.yaml (8), triggers.yaml (9), access-tiers.yaml (5), activities.yaml (new — from Gestalt routine format + Miri cultural patterns). Source: Tyre R2 §1+§4, Gestalt R2 §5. +- Blocked by: C2 + +**C5. Create global/knowledge/entity-attributes.yaml** +- Type: task +- Priority: medium +- Team: server +- Description: Machine-readable entity attribute definitions. 14 existing detective-oriented keys + 5-6 smuggler-specific keys (Paula/Gore). Total: 19+ canonical keys. Source: Tyre R2 §7, Paula R2 §1. +- Blocked by: C2 + +**C6. Create pools.yaml for v0.1 seed-time selection** +- Type: task +- Priority: medium +- Team: server +- Description: Create districts/sova-transit/pools.yaml with v0.1 single-candidate pools: friend_smuggler (kael-davan), friend_detective (sera-venn), bar_regulars, compromised_inspector, primary_contraband. Architecture supports N candidates; v0.1 has 1 each. Source: Tyre R2 §2, Nigel R2 §1-2, Gestalt R2 §3. +- Blocked by: C2 + +**C7. Create template YAML files with role slot definitions** +- Type: task +- Priority: medium +- Team: server +- Description: Create districts/sova-transit/templates/ YAML for 3 social sites: logistics-hub.yaml, bar.yaml, smuggling-ring.yaml. Each declares named role slots with count ranges, required flags, pool references, and triangle constraints. Source: Tyre R2 §6, Nigel R2 §2. +- Blocked by: C2 + +**C8. Create triangle YAML files for 5 v0.1 triangles** +- Type: task +- Priority: medium +- Team: server +- Description: Create districts/sova-transit/triangles/ YAML for: hub-power.yaml (Nils-Voss-Smuggler), worried-knowledge.yaml (Maret-Voss-Kael), bar-tensions.yaml (Lera-Torek-Olin), worried-partner.yaml (Naia-Kael-Sera), informant-question.yaml (Pell-Renn-Devra). Includes updated T1 with volume escalation decision node. Source: Tyre R2 §1, Gestalt R2 §4. +- Blocked by: C2 + +**C9. Implement make validate-content CLI** +- Type: story +- Priority: high +- Team: server +- Description: Build structural + tier-conditional content validation. Reads _schema/ definitions, validates all YAML in content/. v0.1 scope: structural validation (required fields, type checks, enum matching) + tier-conditional rules (Tier 1 needs contradiction arc, Tier 2 needs all 10 axes). v0.2: cross-reference validation (FactId existence, NPC slug resolution). Source: Tyre R2 §3. +- Blocked by: C3 + +**C10. Pre-commit FactId typo check** +- Type: task +- Priority: medium +- Team: ci +- Description: Add grep-based pre-commit check that validates FactId references in YAML content files against the canonical facts.yaml. Catches typos like contraband.ring_exist vs contraband.ring_exists. Cheap v0.1 bridge until full cross-reference validation lands. Source: Tyre R2 §3, Mellanie R1. + +### D. Design Specs + +**D1. cultural_gate modifier for dialogue access — design doc** +- Type: story +- Priority: medium +- Team: copy +- Parent: workshop epic +- Description: Design the cultural_gate modifier that adjusts dialogue disclosure based on cultural insider/outsider status, independent of relationship state. Krenn culture reduces disclosure to outsiders (detective) regardless of trust level. Not a new access tier — a modifier on existing tiers. Needs mechanical spec from Gestalt + feasibility from Tyre. Source: Gore R2 §2. + +**D2. Seed configuration schema design** +- Type: story +- Priority: medium +- Team: server +- Description: Design the seed configuration schema — what the randomizer produces at game-start. Records: FRIEND selections, social site population, compromised NPC, contraband type, entanglement overrides. Saved with game state. Constrained by D-029 ratio (30/50/20). Location: runtime/ (not content/). Source: Nigel R2 §2+§4-6, Tyre R2 §2. + +**D3. Secondary contraband variant FactId text** +- Type: task +- Priority: low +- Team: copy +- Parent: workshop epic +- Description: Write variant KnowsDetails text for contraband.secondary_cargo FactId: medical-grade replacements, severance equipment, enhanced capability mods. Primary contraband (lattice components) is fixed per district. Secondary varies per seed. Source: Nigel R2 §3. + +**D4. News ticker headline pool** +- Type: task +- Priority: low +- Team: copy +- Parent: workshop epic +- Description: Write 40-50 news ticker headlines for the Meridian feed at Lera's. Mix of: freight/commodity data, Assembly politics, local infrastructure, sports, Commission advisories. Randomizer selects 15-20 per seed. Each headline should work as a dual-lens trigger. Source: Nigel R2 §4, Mellanie R2 §1 (7 examples delivered). + +--- + +## Dependency Map + +``` +Workshop Epic +├── A1 (full names) ── no deps +├── A2 (Hael→Naia rename) ── no deps +├── A3 (Krenn brief) ── no deps +├── A4 (regional template) ── no deps +├── A5 (wiki index update) ── blocked by A3, A4 +├── A6 (smuggler FactId text) ── blocked by B4 +├── A7 (smuggler attributes wiki) ── no deps +├── A8 (shortcode fix) ── no deps +├── A9 (thematic question) ── blocked by B2 +├── A10 (Nils stub) ── no deps +├── A11 (Triangle 1 fix) ── no deps +├── A12 (env text examples) ── blocked by A3 +├── B1 (NPC style guide) ── blocked by A3, A4, A7, B2, B4 +├── B2 (MIRROR/Hael spec) ── no deps +├── B3 (PC-as-NPC spec) ── blocked by A7 +├── B4 (smuggler voice + moral arc) ── blocked by A7 +├── B5 (PC briefs v0.1) ── blocked by B3 +├── C1 (content dir design doc) ── no deps +├── C2 (content skeleton) ── blocked by C1 +├── C3 (schema definitions) ── blocked by C1 +├── C4 (enum YAMLs) ── blocked by C2 +├── C5 (entity-attributes YAML) ── blocked by C2 +├── C6 (pools.yaml) ── blocked by C2 +├── C7 (template YAMLs) ── blocked by C2 +├── C8 (triangle YAMLs) ── blocked by C2 +├── C9 (validate-content CLI) ── blocked by C3 +├── C10 (FactId pre-commit) ── no deps +├── D1 (cultural_gate design) ── no deps +├── D2 (seed config schema) ── no deps +├── D3 (secondary contraband text) ── no deps +├── D4 (news ticker pool) ── no deps +``` + +--- + +## Summary + +- **Existing tickets updated:** 4 (#301, #319, #368, #261 noted) +- **New epic:** 1 (Wiki Review Workshop Outputs) +- **New stories:** 9 (A11, B1-B5, C1, C3, C9, D1, D2) +- **New tasks:** 19 (A1-A10, A12, C2, C4-C8, C10, D3, D4) +- **Total new tickets:** 29 (1 epic + 9 stories + 19 tasks) +- **Teams:** copy (21), server (7), ci (1) + +--- + +*Compiled by SI. Source: Wiki Review Workshop Round 2 outputs, all 7 agents + tracking doc.* diff --git a/docs/workshops/wiki-review/wiki-review-workshop-brief.md b/docs/workshops/wiki-review/wiki-review-workshop-brief.md new file mode 100644 index 000000000..3dac661c0 --- /dev/null +++ b/docs/workshops/wiki-review/wiki-review-workshop-brief.md @@ -0,0 +1,191 @@ +# Workshop Brief: Wiki Review & Content Standards +## Locking Down the Foundation + +**Project:** The Settled Reach (D-021) +**Date:** 2026-02-12 +**Called by:** Jeroen +**Participants:** PAULA (librarian), MELLANIE (librarian), MIRI, GESTALT, GORE, NIGEL, OZZIE, TYRE, QATUX (documenter), SI (work prep) + +--- + +## Context + +Sprint 2 just produced `docs/wiki/` — 45 files covering the full knowledge vocabulary for v0.1 (ticket #368). This includes NPC profiles (17 NPCs across 3 tiers), location pages, faction pages, technology/contraband references, knowledge system vocabulary (FactIds, entity attributes, relationship states), and an authoring guide. + +Before we commit this as canonical and build YAML content files on top of it (#299, #300, #309), we need to review it as a team. Paula and Mellanie served as the primary authors and can explain the reasoning behind structure and content decisions. + +**What this wiki represents:** The single source of truth for all game content. Every NPC profile, every location description, every knowledge fact flows through here before becoming engine-readable YAML. + +--- + +## Topic 1: Direction Check — Are We Building the Right Game? + +**The question:** Does this wiki, as written, describe the game we actually want to make? + +Review the wiki holistically. Check that: +- The NPCs, triangles, and contradiction arcs create the asymmetric-information drama we designed +- The two-character proof (smuggler vs. detective) produces genuinely different experiences +- The tone matches "quotidian-with-undertow" — comfortable enough to be complacent, tight enough that extra income is tempting +- THE FRIEND pattern (Kael/Sera) delivers the emotional gut-punch we designed in D-034 +- The knowledge vocabulary (FactIds, relationship states, confidence levels) can express everything the narrative needs + +**Key files to review:** +- `docs/wiki/npcs/index.md` — roster + triangle diagrams +- `docs/wiki/npcs/kael-davan.md` — Tier 1 FRIEND reference +- `docs/wiki/npcs/sera-venn.md` — Tier 1 FRIEND reference +- `docs/wiki/knowledge/relationship-states.md` — contradiction arcs +- `docs/wiki/knowledge/fact-catalog.md` — FactId vocabulary + +**Questions:** +1. **Gore:** Does this capture what the game is fundamentally ABOUT? The philosophical questions, the identity tensions? +2. **Gestalt:** Do the 5 triangles create interesting decisions? Are any mechanically redundant? +3. **Ozzie:** Reading these profiles — does any NPC make you feel something? Which ones fall flat? +4. **Paula/Mellanie:** Where did you make trade-offs or compromises during authoring? What would you change with more time? + +--- + +## Topic 2: Style Guides for Repeatability + +**The question:** If someone new joins the project and needs to write an NPC profile, a location page, or a faction entry — can they produce something consistent with what exists? + +We need explicit style guides that make the wiki reproducible. Not just "here's an example, follow it" but documented conventions. + +**What needs a style guide:** +- NPC profiles: axis definitions, voice sample format, dual-lens structure, triangle role notes +- Location pages: what sections, what detail level, how to cross-reference NPCs and factions +- Faction pages: structure, relationship to locations, political positioning +- Technology/contraband: detail level, gameplay integration notes +- Knowledge entries: FactId naming, confidence progression examples, prerequisite format + +**Questions:** +1. **Mellanie:** What conventions did you follow (or wish existed) when writing monologue-guide.md? +2. **Paula:** Are the Tier 1/2/3 templates documented well enough to replicate? What's implicit that should be explicit? +3. **Gestalt:** What mechanical constraints should be in the style guide? (e.g., "every NPC must have a routine axis because the schedule system reads it") + +--- + +## Topic 3: Regional Style Guide — Pattern + Krenn System Brief + +**The question:** How do we ensure naming and cultural flavor feel historically cohesive rather than generic sci-fi? + +**The vision:** When gates opened, people didn't just mix uniformly everywhere. There are clusters — groups with enough cultural cohesion and financial clout to settle together. Some regions feel distinctly American, Egyptian, Thai, Peruvian, Maya, Aboriginal, or any combination. Corporations add another layer — they may have a heritage or an ethic that shapes naming. In most places, first/last names and location names follow existing real-world patterns. In some places, new naming conventions emerged (the "Star Wars" feel — genuinely novel names from cultural mixing over centuries). + +**Scope for this workshop:** NOT a full set of regional briefs. We need: +1. **A pattern/template** for regional style guides — what a style guide for any region should contain +2. **One filled brief** for Krenn System / Sova Transit District — the v0.1 location, fully specified +3. **Naming principles** — how real-world naming patterns evolve over ~180 years of space settlement + +The pattern should cover: +- Dominant cultural heritage(s) of the region +- Naming conventions (first names, family names, place names, business names) +- Language echoes (what words from heritage languages survive in daily speech?) +- Corporate presence and its naming influence +- How the naming has drifted from Earth-origin patterns (180 years of evolution) +- Aesthetic markers (architecture, food, dress — things that inform environmental text) + +**Questions:** +1. **Miri:** What cultural cluster makes sense for Krenn System? What does 180 years of drift look like? +2. **Gore:** How does cultural identity connect to the game's themes? Should the player notice heritage, or is it ambient? +3. **Paula:** How do naming conventions affect NPC authoring? Do the current 17 NPCs already follow a pattern? +4. **Mellanie:** What environmental text (signs, menus, graffiti) changes based on regional culture? + +--- + +## Topic 4: Wiki Taxonomy Hardening + +**The question:** How do we prevent name collisions, ambiguity, and organizational confusion as the wiki grows beyond v0.1? + +Current issue: "The Terminal" could exist in multiple systems. "Maintenance Corridors" is generic. We already moved locations to `locations/krenn-system/` for disambiguation, but this needs a principled approach. + +**Specific concerns:** +- Location names that recur across systems (terminals, bars, maintenance areas) +- NPC names that could collide (common first names in a larger roster) +- Faction presence varying by system (Commission operates everywhere, Ring is local) +- Technology that has different names in different cultures (same device, local slang) + +**Questions:** +1. **Tyre:** What nesting scheme scales? `locations/{system}/{station}/` or `locations/{system}/`? How deep before it's unwieldy? +2. **Miri:** How do we handle the fact that v0.2+ adds more systems? Do we restructure, or namespace from the start? +3. **Paula:** Do NPC pages need system prefixing, or is the NPC roster per-district sufficient? + +--- + +## Topic 5: Content Directory Structure & Moddability + +**The question:** How does this wiki structure translate to actual game content directories, and how do modders extend it? + +The wiki is the authoring source. But the game needs content in engine-readable format (YAML → parsed at load). The directory structure of the game's `content/` directory matters for: +- Load order (which files override which) +- Mod packaging (modders add/replace content packs) +- Hot-reloading during development +- Content validation (schema checks) + +**Questions:** +1. **Tyre:** Propose a `content/` directory structure that mirrors the wiki but serves the engine. How does a mod overlay work? +2. **Gestalt:** What content is per-district vs. global? (e.g., FactIds are global, NPC profiles are per-district, faction descriptions are global but presence is per-district) +3. **Nigel:** What does a mod look like? "Add a new NPC to the bar" — what files does the modder create? +4. **Tyre:** How does content validation work? Schema per content type, or one schema? + +--- + +## Topic 6: Randomizer, Procedural Generation & PC Briefs + +**The question:** How do we leverage the wiki patterns for procedural variation, and how does a player character fit into NPC structures? + +**The PC-as-NPC concept:** "The Customs Detective" and "The Smuggler" exist as NPC archetypes in multiple districts/stations. When the player starts a game, they get assigned an existing NPC with a name, relationships, and surroundings — then that NPC is "upgraded" to a PC. The NPC's existing brief becomes the player character's starting knowledge, relationships, and position. + +**Randomizer integration:** If locations have style guides and NPCs follow templates, a randomizer can: +- Generate new NPCs from tier templates + regional naming conventions +- Create new triangles from relationship patterns +- Vary which NPC becomes THE FRIEND (from a pool of candidates) +- Shift contraband types, faction pressures, economic conditions + +**Questions:** +1. **Nigel:** What makes the second playthrough feel different? Name 3 things the randomizer should vary. +2. **Gestalt:** How does "PC is an upgraded NPC" work mechanically? What data transfers? What's generated? +3. **Gore:** Does procedural generation dilute the authored moments, or amplify them? +4. **Ozzie:** What's the "wow moment" when a player realizes their character has a pre-existing life in this place? +5. **Paula:** What NPC template fields are required for PC upgrade? Which are optional/generated? + +--- + +## Workshop Format + +**2 rounds.** + +**Round 1 — Topic responses.** Each participant addresses the topics in their domain. Provide concrete proposals, not just observations. If you see a problem, propose a solution. + +**Round 2 — Synthesis.** Cross-pollinate. Respond to each other's proposals. Produce: +1. Decisions to record (new D-entries or amendments) +2. Style guide documents to create +3. Regional brief for Krenn System +4. Content directory structure proposal +5. New tickets for SI to create +6. Amendments to existing wiki pages + +## Expected Outputs + +- **Style guide template:** Reusable pattern for NPC, location, faction, technology wiki pages +- **Regional style guide pattern:** Template for any region's cultural naming/flavor guide +- **Krenn System regional brief:** Filled-in style guide for v0.1 location +- **Wiki taxonomy rules:** Nesting and naming conventions document +- **Content directory structure:** Proposed `content/` layout with mod overlay spec +- **PC-as-NPC spec:** How player character briefs integrate with NPC templates +- **Ticket list:** New tickets from workshop decisions (SI creates post-workshop) +- **Decision amendments:** Updates to existing decisions based on workshop findings + +--- + +## Source Material + +Participants should read before responding: + +- **Wiki index:** `docs/wiki/index.md` +- **NPC roster:** `docs/wiki/npcs/index.md` +- **Kael profile (Tier 1 reference):** `docs/wiki/npcs/kael-davan.md` +- **Sera profile (Tier 1 reference):** `docs/wiki/npcs/sera-venn.md` +- **Relationship states:** `docs/wiki/knowledge/relationship-states.md` +- **Fact catalog:** `docs/wiki/knowledge/fact-catalog.md` +- **Monologue guide:** `docs/wiki/authoring/monologue-guide.md` +- **Decisions:** `decisions/content.md`, `decisions/scope.md`, `decisions/perception.md` +- **Previous workshops:** `docs/workshops/content-gap-analysis_v0_1/`, `docs/workshops/v01-gap-analysis/`