Merge remote-tracking branch 'origin/main' into server

# Conflicts:
#	CHANGELOG.md
This commit is contained in:
2026-02-25 12:14:02 +01:00
2 changed files with 382 additions and 0 deletions
+7
View File
@@ -14,6 +14,13 @@ Format based on [Keep a Changelog](https://keepachangelog.com/).
- Save/load ECS extraction — `save_to_file`/`load_from_file` via MessagePack, `SaveGame`/`LoadGame` IPC commands, `SaveLoadResultWire` on ObserverSnapshot (#553, D-085)
- Test infrastructure — Layer 3 integration test entry point, three-layer architecture per D-030 (#200)
- Information boundary negative tests — 4 tests proving no passive KG leakage, LOS fog holds, tier boundary holds, per-NPC save isolation (#272, D-010)
- Decision ID claim system — `db/connectors/decision` CLI with `next`, `claim`, `check-dupes` commands to prevent cross-worktree D/Q/R ID collisions, pre-commit duplicate check
- D-085: Per-game save directory structure — every new game creates `user://saves/<game-id>/`, F5 quicksave, F6 quickload
- Q-029: Save file format design — long-term considerations for versioning, compression, integrity, metadata headers
- D-086: Renumbered insert icon system (was D-084 on visual branch) to resolve cross-worktree ID collision
- Save/load wireframe updated for D-085 — LOAD tab shows games grouped by directory with expand/collapse, QUICKSAVE slot, F5/F6 hints
- Sprint 19: Persist planned — 16 tickets (server 7, client 5, CI 4) covering save/load, tier eviction/scope, test infrastructure
- Character creation & game setup workshop brief — covers creation model, seed boundary, gate activation, quest seeding, game toggles (resolves Q-011)
- Protocol v14 — `poi_list`, `examine_result`, `player_knowledge` ObserverSnapshot wire types with live KG serialization (#151, #174, #264)
- Minimap rendering — circular 160px diegetic insert overlay with POI dots (colored by category), border arrows for distant POIs, player-centered fixed-north (#151)
- Dialogue UI hardening — confrontation italic voice (D-063), examine result overlay with 5s auto-dismiss and confidence coloring (#174)
@@ -0,0 +1,375 @@
# Workshop: Character Creation & Game Setup
**Date:** 2026-02-25
**Facilitator:** Team Leader (Jeroen)
**Participants:** Nigel (replayability), Paula (narrative), Gestalt (systems), Miri (worldbuilding), Tyre (architecture), Qatux (documenter)
**Status:** Not started
---
## Purpose
Define what the character creation / new game screen actually does. This
is the most fundamental unresolved design question in the project: what
does the player choose, what does the seed control, and what does that
combination produce?
This workshop resolves **Q-011** (character selection and playable
characters) and establishes the boundary between player agency, character
archetype, and world seed. Everything downstream — quest generation, gate
activation, difficulty, replayability — flows from getting this table right.
## Context
### What's decided
- **D-005:** Single character per playthrough. Character choice determines
starting location, starting knowledge, available levers, personal goals.
"Same conspiracy, different character, completely different game."
- **D-027:** v0.1 vertical slice ships with 2 characters: smuggler and
detective. Inverted perspectives on the same world.
- **D-023:** Three-tier content model. Tier 1 (authored drama) drawn from
a pool at game start. Tier 2 (templated). Tier 3 (procedural filler).
- **D-029:** Population entanglement ratio 30/50/20, varies per seed.
- **D-010:** Deterministic simulation. Same seed + same content = identical
world state.
- **D-039:** Wow moment 4 is the Divergence Reveal — same room, different
character, different everything. This is THE replayability payoff.
- **D-041:** Knowledge graph is per-entity. Characters start with different
knowledge.
- **D-032:** Separate monologue pools per character.
- **Seed config schema** (ticket #394): Records seed value, character
selection, pool draws, template assignments, starting knowledge.
### What's open
- **Q-011:** Character selection and playable characters — not yet discussed.
Which characters? How different are starting positions? Canon or original?
- **Q-010:** Storyteller AI design — pacing rules, structural vs dramatic
randomness. Adjacent to this workshop but NOT in scope to fully resolve.
### What's NOT in scope
- Full character roster beyond v0.1 (two characters first, prove it works)
- Endgame quest design (no endgame exists yet — note toggles, defer design)
- Storyteller pacing algorithm (Q-010 is a separate workshop)
- Character naming edge cases (namespace collisions with NPCs — note, defer)
- Full quest system architecture (scope to: what quest SHAPES are seeded at
creation, not the full quest pipeline)
### Design guardrail
Character selection determines your starting **information position** and
**social graph**, not your capabilities. Characters have different verbs
available, not different success probabilities for the same verbs. The
smuggler doesn't get "+5% to cargo inspection" — the smuggler gets "Slip
Manifest" as a verb the detective never sees. This is D-005's intent and
D-028's access tier system in practice. Do not drift toward stat sheets.
## Key Questions
### Q1: What does character selection actually select?
Three possible models — the workshop must pick one (or a hybrid):
**A. Fixed archetype roster.** Player picks "smuggler" or "detective" from a
list. Each is a fully pre-authored starting position. Knowledge from
playthrough 1 fully transfers — you know exactly where the smuggler starts.
**B. Archetype + generated instance.** Player picks "smuggler" but YOUR
smuggler is procedurally placed in the social web. Different starting
coworkers, different shift schedule, different corridor assignment. Knowledge
partially transfers — you know smuggler life, but not this smuggler's life.
**B2. Archetype + curated instance.** Player picks "smuggler," sees 2-3
procedurally generated social configurations, and picks one. RimWorld's
colonist reroll mechanic — curation from a generated pool rather than full
specification. Middle path between A and B.
**C. Fully custom.** Player picks background axes (profession, social
tier, faction affinity). No pre-authored archetype. Maximum variation,
maximum authoring cost.
For each model: what are the replayability implications? What's the
authoring cost? What does this mean for the Divergence Reveal (D-039)?
Also consider: does the player configure starting knowledge weights, or
is starting knowledge fully determined by archetype? (DF's embark skill
point system lets players shape starting capability within constraints.)
### Q2: The seed boundary — what varies by what?
Produce a canonical three-column table:
| Determined by world seed | Determined by character choice | Player-configured |
|--------------------------|-------------------------------|-------------------|
| ? | ? | ? |
Examples to place: NPC relationships, which NPCs are compromised,
starting location, starting knowledge graph state, access tiers,
gate activation timing, conspiracy shape, population entanglement
ratio, THE FRIEND identity, starting inventory...
Include a fourth implicit column: **what information exists in the world
but is inaccessible to this character?** Not locked behind a mechanic —
just absent from their information space entirely. The gap between what
the world contains and what the character can see IS the replayability.
(See: Obra Dinn in Reference Games.)
This table IS the workshop's primary deliverable. Get it right and every
downstream system knows its inputs.
### Q3: How does gate activation relate to character choice?
The contamination/conspiracy discovery trigger — the moment the game shifts
from daily life to investigation. Two sub-questions:
**A.** Does character choice change WHEN you discover contamination, or only
HOW you experience it? (Detective flags cargo anomalies early via lattice
analysis. Smuggler witnesses something directly. Same world-state, different
discovery paths.)
Consider Pentiment's model: the murder happens near you, not TO you. You're
pulled in by proximity and relationship, not by being the assigned
investigator. Is gate activation something that happens to the world (and
the character stumbles into it), or something the character triggers through
their specific access?
**B.** Are discovery paths authored per character (detective always discovers
via X) or emergent (character knowledge graph + storyteller pacing = different
discovery window per playthrough)? What's the minimum authored content needed
per character to make gate activation feel character-specific?
Explicit RimWorld check: is contamination timing a player-configurable
"storyteller" choice, fixed per character, or emergent from play? Don't
collapse pacing control into archetype selection.
### Q4: Quest seeding — templates vs randomization
The user's directive: "the quest system should offer relevant randomized
quests based on creation instead of going fully scripted." Scope this to:
- What quest SHAPES (not specific quests) are determined at character
creation? (e.g., smuggler gets logistics-flavored side quests, detective
gets investigation-flavored ones)
- How do Tier 2 templates (D-023) interact with character choice? Does the
smuggler's template pool differ from the detective's?
- What is authored (main quest templates, scripted quality) vs generated
(side content, character-relevant variations)?
- How many quest templates are needed per character for v0.1 to feel varied?
- Does the character have visible long-term goals the game tracks? Does the
smuggler TELL you what they want (goals screen) or do wants emerge from
play? (The Sims' wants/aspirations system as reference.)
### Q5: Game conditions and toggles
The user wants players to be able to configure their experience. But some
toggles destroy the game's core tension. Define:
- **What CAN be toggled:** Challenge intensity, optional content modules,
timer pressure, specific life-sim subsystems
- **What CANNOT be toggled:** Core conspiracy simulation, investigator
faction presence, information asymmetry. These exist whether the player
sees them or not.
- **Starting location selection:** Is this a player choice or determined
by archetype? If player choice, what does it mean for authored content?
- **Enable/disable endgame quests:** Note for future design. What's the
minimum we need to decide NOW vs what can wait until endgame exists?
### Q6: The playthrough 2 test
Concrete synthesis test. Nigel presents the following scenario to the room:
> You've played the smuggler on seed X. You now know: Kael is trying to
> exit the ring. Sera Venn is protecting Naia. The detective flagged your
> manifest on Day 2. The contamination hit during the evening shift at
> The Last Shift. You pick the detective on the SAME seed. Minute 1: you
> arrive at the Commission office. Minute 5: your first assignment.
> Minute 10: you walk into The Terminal where you spent 30 hours as the
> smuggler.
Against the combined design from Rounds 1-4, each participant answers:
1. What does the detective see in The Terminal that the smuggler never saw?
2. What does the detective's monologue say about Kael — whom the smuggler
considered a friend?
3. Does the contamination trigger differently, or at the same moment via
a different path?
4. Name one thing the player LEARNED in playthrough 1 that changes how
they PLAY playthrough 2 — not metagaming, but genuine new understanding.
If participants can't answer these concretely, the design has a gap.
Find it and fix it before the workshop closes.
## Reference Games
### Dwarf Fortress — the fossil record
World generation creates centuries of invisible history. The player never
reads a history log — they excavate its consequences. A collapsed
civilization left ruins. A grudge between two species shapes who attacks
your fort. The history is SUBSTRATE, not content.
The lesson for us: the world seed should produce CONSTRAINTS and RESIDUES
that make the current situation feel inevitable. How long has this smuggling
ring been operating? What's its history of near-discovery? Which institutional
figures already have kompromat on them? The player never sees this directly
but feels its weight on every NPC relationship state they encounter.
Also relevant: the embark skill point system — players shape starting
capability within constraints rather than receiving a fixed loadout. Consider
for Q1: does the player configure starting knowledge within their archetype?
### RimWorld — the separation principle
Storyteller selection (Cassandra/Phoebe/Randy) controls pacing, not content.
Scenario defines starting resources and constraints. Colonist generation is
partially random, partially player-curated (reroll, choose skills).
**Key lesson 1:** The storyteller and starting conditions are SEPARATE
choices. Our gate activation / contamination pacing (Q3) maps to storyteller
selection. Our character archetype maps to scenario. Don't collapse them.
**Key lesson 2:** Player CURATION from a procedurally generated set is
different from player SPECIFICATION of a custom set. RimWorld's colonist
reroll is a point-buy system hidden behind a reroll interface. For us:
model B2 — see 2-3 generated social configurations for "your smuggler" and
pick one. This is a viable middle path that deserves to be on the table.
### The Sims — verbs, not stats
Traits in The Sims are PERMISSION SYSTEMS for social interactions, not stat
modifiers. The Outgoing Sim doesn't get +20% to social checks — they get
access to DIFFERENT VERBS. They can autonomously initiate conversations the
Introvert Sim cannot. This is exactly our access tier system (D-028 Layer 1).
**Key lesson 1:** Character creation changes which verbs you have, not how
well you perform shared verbs. The smuggler gets "Slip Manifest." The
detective gets "Pull Records." Neither is better — they're different
information-gathering tools for the same world.
**Key lesson 2:** Neighborhood placement as replayability driver. The lot
you choose positions you relative to neighbor NPCs, which determines which
relationships bootstrap organically through proximity. Early relationships
form through proximity, not player initiative. The smuggler starts embedded
in The Terminal — relationships with ring members bootstrap before the
player does anything. The detective starts at the Commission — different
organic relationships form. THIS is the structural driver that makes the
same seed play differently.
### Disco Elysium — observation filters, not capabilities
D-005 already cites Disco Elysium as a design reference. The Thought
Cabinet is a permission system for new dialogue options and monologue lines.
Building a character in DE doesn't give you stats — it gives you access to
different OBSERVATIONS of the same world. Intellect doesn't make you
smarter — it makes your character say different things to themselves when
they see the same evidence.
**Key lesson:** Character build determines what your character NOTICES, not
what they can DO. This is D-032 (separate monologue pools) and D-041
(per-entity knowledge graph) in one reference. If participants are thinking
about Q1 models without DE on the table, they'll drift toward stat-system
thinking. DE keeps them on the observation-filter track.
### Return of the Obra Dinn — information gap as presence
Obra Dinn demonstrates that information asymmetry can be the ENTIRE game.
You piece together events from fragments. The information gap feels like
presence, not absence — you FEEL the weight of what you can't see yet.
**Key lesson for Q2:** The seed boundary table needs to account for what
exists in the world but is invisible to this character. Not locked behind a
mechanic — just absent from their information space. Character A's world
contains things that are simply not in Character B's world. That gap is
the pull that drives playthrough 2.
### Pentiment — gate activation by proximity
Pentiment commits to a single-character perspective. The gate activation
question it answers: "what triggers the player from daily life into
investigation?" A murder happens near you, not TO you. You're pulled in
by proximity and relationship, not by institutional assignment. The player
character is NOT the assigned detective — they're a witness with skills.
**Key lesson for Q3:** Same discovery timing, but character-dependent tools
for responding to it. The contamination doesn't care who you are — it
happens. But your character's position determines whether you see it as
threat, opportunity, or puzzle.
### The common thread
In all six games, the setup screen generates ASYMMETRIC STARTING CONDITIONS.
The same world, entered from different positions, produces different
information access, different social proximity, and different verb
availability. The asymmetry IS the replayability. Our character creation
should produce a starting POSITION in an information landscape — not a
stat block, not a story, not a difficulty setting.
## Participants and Roles
| Agent | Role | Why they're here |
|-------|------|-----------------|
| Nigel | Replayability lead | Structural randomness, seed design, "what happens on playthrough 10?" |
| Paula | Narrative lead | Starting NPC relationships, character-specific story hooks, social web implications |
| Gestalt | Systems lead | How character choice propagates through mechanics (KG, dialogue tiers, movement, perception) |
| Miri | Worldbuilding | Which archetypes fit the Krenn System, canon constraints, lore accuracy |
| Tyre | Architecture | Implementation cost reality check. "That's 4 new ECS components — is it worth it?" |
| Qatux | Documenter | Track decisions, cross-references, dissent. Maintain running reference list. |
## Round Structure
### Round 1 — The Lens Question (Nigel leads)
Single question: what does character selection actually select? (Q1)
Nigel opens with a replayability scoring of each model (A/B/B2/C) — 3
bullet points per model on the replayability axis. This is a BASELINE, not
a verdict. Participants then argue from their domain against that baseline.
This converges faster than open advocacy.
Target: agree on the model by end of round.
### Round 2 — The Seed Boundary (Gestalt leads)
Given the model from Round 1: draw the exact line between world seed,
character choice, and player customization. Produce the three-column
table (Q2). Each participant fills in their domain's rows.
### Round 3a — Gate Activation (Paula leads)
How does contamination trigger work per character? (Q3)
This flows directly from Round 1's model decision. Paula leads because
gate activation is fundamentally a narrative question — when does the
story shift?
### Round 3b — Quest Seeding (Nigel leads, Tyre has implementation floor)
How do quest templates interact with character choice? (Q4)
Nigel leads because quest variation is the replayability engine. Tyre gets
explicit authority to reject quest template proposals that require new
architecture — every template decision has an implementation cost that
spirals without active checking.
### Round 4 — Conditions, Toggles & Synthesis (all)
Game conditions and what's toggleable (Q5). Then run the concrete
playthrough 2 test (Q6). Nigel presents the scenario. Each participant
must answer the four concrete questions. If they can't, the design has
a gap — find it and fix it before closing.
## Required Reading for Participants
- `decisions/scope.md` — D-005, D-013, D-027, D-029, D-053
- `decisions/content.md` — D-023, D-028, D-032, D-034
- `decisions/architecture.md` — D-041 (knowledge graph)
- `decisions/questions.md` — Q-010, Q-011
## Expected Outputs
- **D-record:** Character creation model (resolves Q-011)
- **D-record:** Seed boundary table (what varies by seed vs character vs player)
- **D-record:** Gate activation trigger design
- **D-record or Q:** Quest seeding model (may produce a Q if full design deferred)
- **D-record:** Game condition toggles (what's configurable, what isn't)
- Ticket updates for Sprint 19+ backlog as needed