From 0d18c76dfab167afcb3104726ca190f20c46f63b Mon Sep 17 00:00:00 2001 From: Jeroen Schweitzer Date: Tue, 17 Mar 2026 08:10:29 +0100 Subject: [PATCH 1/5] feat(docs): assign teams to v0.2 story tickets (#614-#626) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Resolve Q-WTF-039 (tile-scale heavy zoom, not portrait — D-146) and Q-WTF-040 (aesthetic taste trait as shared root — D-147). Split #617 into server generator + client rendering, split #620 into server culture resolution + client location picker. Sprint 28 candidate list with 7 unblocked tickets. Ticket: #676 Co-Authored-By: Claude Opus 4.6 (1M context) --- decisions/content.md | 15 ++- decisions/questions-content.md | 18 +++- decisions/scope.md | 15 ++- .../round-21-v02-ticket-assignments.md | 92 +++++++++++++++++++ .../sprints/sprint-28/sprint-28-candidates.md | 73 +++++++++++++++ 5 files changed, 210 insertions(+), 3 deletions(-) create mode 100644 docs/discussions/round-21-v02-ticket-assignments.md create mode 100644 docs/sprints/sprint-28/sprint-28-candidates.md diff --git a/decisions/content.md b/decisions/content.md index de4b1be2b..daedc2487 100644 --- a/decisions/content.md +++ b/decisions/content.md @@ -555,4 +555,17 @@ How narrative, NPCs, and world content are created: content tiers, NPC generatio --- -*43 decisions. Last updated: 2026-03-14 (D-144 Sirius as Reach capital)* +### D-147: Aesthetic taste as character personality trait — shared root for cosmetic and environmental expression +- **Date:** 2026-03-17 +- **Decision:** Characters have an `aesthetic_taste` personality trait (preferred palette, style leanings) that naturally expresses in both personal appearance and living space. This is NOT a cosmetic→apartment pipeline — hair color does not map to wall color. Instead, taste is a shared root: someone who gravitates toward teal will pick teal clothing AND own a teal vase. The apartment generator reads the character's taste trait (alongside economic position from #615 and cultural context from #620); the character customization screen lets the player express that same taste through appearance choices. Neither system depends on the other — both read the same underlying trait. +- **Rationale:** The naive approach (pipe cosmetic choices into apartment generator) creates a crude "team color" mapping that feels artificial. The elegant approach: taste is a personality attribute, like traits or skills. It manifests independently in multiple contexts. This keeps #619 (customization) and #617 (apartment) architecturally independent while producing coherent identity expression. The taste trait is also reusable: NPC aesthetic preferences, gift preferences, "does this room feel like home" comfort checks, cultural style variations. +- **Dependency implication:** #619 does NOT block #617. Both read the character's taste trait independently. The taste trait definition belongs to the character data model (server), not to either consuming system. +- **Source:** Sprint 27 planning pass — Q-WTF-040 resolution +- **Raised by:** Project lead (taste-as-shared-root framing), Gestalt (ColorHint concept evolved into trait), Paula (culture + economics as primary apartment drivers) +- **Dissent:** Ozzie argued for direct cosmetic→apartment pipeline. Tyre and Paula argued for no connection at all. The taste trait is the synthesis: connection through personality, not through data pipeline. +- **Cross-reference:** [D-125](#d-125-world-is-quietly-responsive--gradient-of-caring-by-social-proximity) (quiet responsiveness), [D-134](#d-134-full-character-customization) (full character customization), [D-136](architecture.md#d-136-first-settled-reach-moment-auto-generated-apartment--insert-activation) (first game moment), ticket #617 (auto-generated apartment), ticket #619 (full character customisation) +- **Resolves:** Q-WTF-040 + +--- + +*45 decisions. Last updated: 2026-03-17 (D-147 aesthetic taste trait)* diff --git a/decisions/questions-content.md b/decisions/questions-content.md index 3f27e354a..18d40cf61 100644 --- a/decisions/questions-content.md +++ b/decisions/questions-content.md @@ -205,4 +205,20 @@ Narrative, NPCs, dialogue, templates, setting, worldbuilding, and storyteller me --- -*21 questions (7 resolved, 2 partially resolved, 12 open). Last updated: 2026-03-13 (Q-015 closed as obsolete per D-122)* +### Q-WTF-039: Character creation — portrait render or tile-scale preview? +- **Status:** Resolved → [D-146](scope.md#d-146-character-creation-preview--tile-scale-sprite-with-heavy-zoom) +- **Question:** Does the character creation screen show a portrait render or a tile-scale in-world preview of the player character? Affects #618 (CK3-style character creation screen) team assignment: portrait render is a visual team deliverable; tile-scale preview is client. +- **Resolution:** Tile-scale sprite with heavy zoom. The creation screen shows the game sprite rendered at high resolution, zoomed in so cosmetic details are clearly visible. Same approach as Rimworld: one rendering pipeline, no separate portrait system. #618 stays as a single client ticket. Resolved by [D-146](scope.md#d-146-character-creation-preview--tile-scale-sprite-with-heavy-zoom). +- **Assigned to:** Tyre (architecture), confirmed by project lead +- **Source:** Sprint 27 planning pass (2026-03-17) + +### Q-WTF-040: Do creation choices trace into the generated apartment? +- **Status:** Resolved → [D-147](content.md#d-147-aesthetic-taste-as-character-personality-trait--shared-root-for-cosmetic-and-environmental-expression) +- **Question:** If the player picks hair colour and clothing in #619, does the generator use those choices when laying out the starting apartment (furniture style, colour palette)? Affects #617 scope and dependency. +- **Resolution:** Not directly. Cosmetic choices do not pipeline into the apartment generator. Instead, characters have an `aesthetic_taste` personality trait that independently informs both appearance choices and living space. Someone who likes teal picks teal clothing AND owns a teal vase — but through shared taste, not data coupling. #619 does NOT block #617. Resolved by [D-147](content.md#d-147-aesthetic-taste-as-character-personality-trait--shared-root-for-cosmetic-and-environmental-expression). +- **Assigned to:** Gestalt (systems), Paula (narrative), confirmed by project lead +- **Source:** Sprint 27 planning pass (2026-03-17) + +--- + +*23 questions (9 resolved, 2 partially resolved, 12 open). Last updated: 2026-03-17 (Q-WTF-039, Q-WTF-040 resolved)* diff --git a/decisions/scope.md b/decisions/scope.md index f80afe8f8..f0a2cf063 100644 --- a/decisions/scope.md +++ b/decisions/scope.md @@ -287,4 +287,17 @@ What we're building: game concept, design pillars, prototype definition, map spe --- -*25 decisions (16 active, 9 superseded). Last updated: 2026-03-15 (D-145 added)* +### D-146: Character creation preview — tile-scale sprite with heavy zoom +- **Date:** 2026-03-17 +- **Decision:** The character creation screen shows the player character's game sprite at heavy zoom — the same top-down tile-scale rendering used in gameplay, rendered at high resolution so it holds up when zoomed in. No separate portrait rendering system. Cosmetic choices (hair, clothing, colors) update the zoomed sprite in real time. Rimworld uses this exact approach: the character customization screen shows the same pawn sprite rendered larger, with clothing/equipment layers visible. +- **Rationale:** The tile-scale sprite IS the player's character for the entire game. Showing it zoomed in character creation: (1) sets accurate expectations for in-game appearance, (2) reuses the production sprite/animation pipeline — zero new rendering infrastructure, (3) validates that cosmetic customization (#619) reads correctly at game scale, (4) keeps #618 as a single client ticket with no visual-team split. A separate portrait system would be a one-off rendering context (different camera, lighting, asset pipeline) that serves no other game feature. "CK3-style" in the bookmark concept refers to the bookmark structure, not the portrait aesthetic. Portraits can be added later as an additive feature if needed. +- **Team implication:** Ticket #618 (CK3-style character creation screen) stays as a single `client` team ticket. No split required. +- **Source:** Sprint 27 planning pass — Q-WTF-039 resolution +- **Raised by:** Tyre (architecture), Paula (narrative), Gestalt (systems), confirmed by project lead +- **Dissent:** Ozzie argued for portrait render (emotional attachment). Overruled: tile-scale at heavy zoom provides sufficient character identity without a second rendering pipeline. +- **Cross-reference:** [D-115](#d-115-character-creation-scoped-to-skills--bookmark-for-v02) (creation scope), [D-134](content.md#d-134-full-character-customization) (full character customization), [D-136](architecture.md#d-136-first-settled-reach-moment-auto-generated-apartment--insert-activation) (first game moment), ticket #618 (CK3-style character creation screen) +- **Resolves:** Q-WTF-039 + +--- + +*26 decisions (17 active, 9 superseded). Last updated: 2026-03-17 (D-146 tile-scale heavy zoom)* diff --git a/docs/discussions/round-21-v02-ticket-assignments.md b/docs/discussions/round-21-v02-ticket-assignments.md new file mode 100644 index 000000000..095bbe975 --- /dev/null +++ b/docs/discussions/round-21-v02-ticket-assignments.md @@ -0,0 +1,92 @@ +--- +title: "Round 21: v0.2 Story Ticket Team Assignments — Sprint 27 Planning" +description: "Team assignment pass for v0.2 story tickets #614–#626; resolve Q-WTF-039 and Q-WTF-040; produce Sprint 28 candidate list" +type: discussion +status: active +round: 21 +created: 2026-03-17 +--- + +# Round 21: v0.2 Story Ticket Team Assignments + +**Sprint:** 27 (Scale) +**Date:** 2026-03-17 +**Ticket:** #676 — Assign team and sprint for v0.2 story tickets (#614–#626) +**Participants:** Gestalt (systems), Tyre (technical), Paula (narrative), Ozzie (player experience), Qatux (documenter), SI (project manager) +**Output target:** DB team assignments, split tickets, Q-WTF-039/Q-WTF-040 resolved, Sprint 28 candidate list + +--- + +## Internal Round Structure + +| Internal Round | Topic | Status | +|----------------|-------|--------| +| Round 1 | Team assignment pass — one team per ticket | Pending | +| Round 2 | Split review — identify server+client splits, create child tickets | Pending | +| Round 3 | Sprint readiness check — Sprint 28 candidate list | Pending | + +--- + +## Ticket Inventory + +| # | Title | Epic | Dependencies | Team (proposed) | +|---|-------|------|-------------|-----------------| +| #614 | Bookmark definition system | Tycoon Bookmark (#605) | blocks #618 | — | +| #615 | Tycoon small business owner starting state | Tycoon Bookmark | blocks #617 | — | +| #616 | Broad economic verb vocabulary design | Tycoon Bookmark | — | — | +| #617 | Auto-generated apartment | Tycoon Bookmark | blocked by #615 | — | +| #618 | CK3-style character creation screen | Character Creation (#606) | blocked by #614 | — | +| #619 | Full character customisation | Character Creation | open Q-WTF-040 | — | +| #620 | Culture-implicit-in-location system | Character Creation | blocks #621 | — | +| #621 | NPC personality surface area | NPC Legibility (#607) | blocked by #620, blocks #622 | — | +| #622 | Relationship formation system | NPC Legibility | blocked by #621 | — | +| #624 | Quietly responsive world | World Feel (#608) | — | — | +| #625 | Dual-scale consequence model | World Feel | — | — | +| #626 | Setting delivery — both layers | World Feel | — | — | + +--- + +## Open Questions to Resolve + +### Q-WTF-039: Character creation portrait vs tile-scale preview +- **Status:** Resolved → [D-146](../../decisions/scope.md#d-146-character-creation-preview--tile-scale-sprite-with-heavy-zoom) +- **Question:** Does the character creation screen show a portrait render or a tile-scale in-world preview of the player character? +- **Resolution:** Tile-scale sprite with heavy zoom. Same top-down game sprite rendered at high resolution with real-time cosmetic preview. No separate portrait rendering system. #618 stays as a single `client` ticket — no split required. +- **Decided by:** Tyre (architecture), Paula (narrative), Gestalt (systems), confirmed by project lead. Ozzie dissented (portrait render for emotional attachment); overruled. +- **Source:** Sprint 27 planning pass, 2026-03-17 + +### Q-WTF-040: Do creation choices trace into the generated apartment? +- **Status:** Resolved → [D-147](../../decisions/content.md#d-147-aesthetic-taste-as-character-personality-trait--shared-root-for-cosmetic-and-environmental-expression) +- **Question:** If the player picks hair colour and clothing in #619, does the generator use those choices when laying out the starting apartment (furniture style, colour palette)? +- **Resolution:** Not directly. Characters have an `aesthetic_taste` personality trait (preferred palette, style leanings) that independently informs both appearance choices and living space — shared root, not data pipeline. #619 does NOT block #617. Both systems read the same underlying trait independently. The taste trait definition belongs to the character data model (server). +- **Decided by:** Project lead (taste-as-shared-root framing), Gestalt (ColorHint concept evolved into trait), Paula (culture + economics as primary apartment drivers). Ozzie dissented (direct pipeline); Tyre and Paula argued no connection at all. Taste trait is the synthesis. +- **Source:** Sprint 27 planning pass, 2026-03-17 + +--- + +## §1 — ROUND 1: Team Assignment Pass + +*Pending agent contributions.* + +--- + +## §2 — ROUND 2: Split Review + +*Pending. Note: #618 split question is now resolved — tile-scale zoom means #618 stays as a single `client` ticket (D-146). Anticipated remaining split: #620 (culture-implicit-in-location).* + +--- + +## §3 — ROUND 3: Sprint 28 Readiness + +*Pending.* + +--- + +## Decision Registry + +| ID | Type | Title | Domain file | Status | +|----|------|-------|-------------|--------| +| D-146 | D | Character creation preview — tile-scale sprite with heavy zoom | decisions/scope.md | **Filed** | +| D-147 | D | Aesthetic taste as character personality trait — shared root for cosmetic and environmental expression | decisions/content.md | **Filed** | +| Q-WTF-039 | Q | Character creation: portrait vs tile-scale preview | decisions/questions-content.md | **Resolved → D-146** | +| Q-WTF-040 | Q | Creation choices → generated apartment? | decisions/questions-content.md | **Resolved → D-147** | diff --git a/docs/sprints/sprint-28/sprint-28-candidates.md b/docs/sprints/sprint-28/sprint-28-candidates.md new file mode 100644 index 000000000..2f402d5a6 --- /dev/null +++ b/docs/sprints/sprint-28/sprint-28-candidates.md @@ -0,0 +1,73 @@ +--- +title: "Sprint 28 — Candidate Ticket List" +description: "v0.2 story tickets cleared for Sprint 28 sprint planning. Output of Sprint 27 planning pass." +type: sprint-prep +sprint: 28 +prepared_by: Sprint 27 planning team +date: 2026-03-17 +--- + +# Sprint 28 Candidate Tickets + +**From:** Sprint 27 planning pass (ticket #676) +**For:** SI — sprint planning + +These tickets have: team assigned, no unresolved open questions, no upstream blocker currently in backlog. + +--- + +## Ready for Sprint 28 + +| # | Title | Team | Epic | Notes | +|---|-------|------|------|-------| +| **#614** | Bookmark definition system | server | Tycoon Bookmark | No blockers. Blocks #618 (creation screen). Start here. | +| **#615** | Tycoon small business owner starting state | planning | Tycoon Bookmark | No blockers. Design spec for Day 1 state. Blocks #681 (apartment generator). | +| **#616** | Broad economic verb vocabulary design | planning | Tycoon Bookmark | No blockers. Verb map design doc. Independent. | +| **#619** | Full character customisation | client | Character Creation | No blockers. Cosmetic UI. Independent of apartment (#617) — taste trait is shared root, not pipeline (D-147). | +| **#679** | Location-to-culture resolution system (server) | server | Character Creation | No blockers. Split from #620. Unblocks #621, #680, #681. Critical path for NPC generation. | +| **#624** | Quietly responsive world | server | World Feel | No blockers. Proximity-weighted NPC attention + reaction systems. | +| **#625** | Dual-scale consequence model | server | World Feel | No blockers. Sharp events + slow accumulation. Rimworld + DF model. | + +**Total:** 7 tickets across server (3), client (1), planning (2), + 1 server unblocking ticket + +--- + +## NOT Ready — Blocked or Needs Design First + +| # | Title | Team | Blocked by | When Ready | +|---|-------|------|-----------|------------| +| #618 | CK3-style character creation screen | client | #614 (bookmark definition) | Sprint 29 (after #614 ships) | +| #680 | Location picker in character creation UI | client | #679 (culture resolution) | Sprint 29 (after #679 ships) | +| #681 | Apartment generator logic | server | #615 (starting state) + #679 (culture resolution) | Sprint 29 (after both ship) | +| #682 | Apartment rendering + first-moment sequence | client | #681 (generator logic) | Sprint 29+ | +| #621 | NPC personality surface area | server | #679 (culture resolution) | Sprint 29 (after #679 ships). CRITICAL priority. | +| #622 | Relationship formation system | server | #621 (NPC personality surface) | Sprint 29+ | +| #626 | Setting delivery — both layers | planning | Q-WTF-041 unresolved (span gate feeling) | Design pass needed first | + +--- + +## Tickets Marked as Split (do not assign) + +| # | Title | Split into | +|---|-------|-----------| +| #617 | Auto-generated apartment | #681 (server: generator) + #682 (client: rendering + first moment) | +| #620 | Culture-implicit-in-location system | #679 (server) + #680 (client). Original deleted. | + +--- + +## Q-WTF-041 Note for #626 + +Ticket #626 (Setting delivery — both layers) references Q-WTF-041: "what should the player feel looking at the span gate from their apartment?" This question is unresolved. Before #626 can be split and implemented, the design spec for the visual + insert layers must be authored. Recommend a planning ticket for the design pass in Sprint 28, separate from implementation. + +--- + +## Critical Path + +**NPC legibility chain:** #679 → #621 → #622 +NPC personality surface area (#621) is CRITICAL priority. Get #679 (culture resolution) into Sprint 28 so #621 is unblocked for Sprint 29. + +**First Settled Reach moment:** #615 + #679 → #681 → #682 +The apartment moment (D-136) depends on both the tycoon starting state spec and culture resolution shipping first. Apartment rendering (#682) is the client-side emotional delivery — sprint-pair with #681. + +**Character creation chain:** #614 → #618 +Bookmark definition gates the creation screen UI. -- 2.54.0 From 8db83b158965dd9b56b9b7cbd78daca8d4ca036b Mon Sep 17 00:00:00 2001 From: Jeroen Schweitzer Date: Tue, 17 Mar 2026 08:15:35 +0100 Subject: [PATCH 2/5] fix(skills): add proposer/executor roles for planning team spawns MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sprint 27 planning session exposed that discussion agents (Ozzie) can unilaterally write decisions and modify the DB before consensus is reached. Add step 8d-planning to /sprint-start that classifies agents as proposers (analyze only) or executors (SI, Qatux — wait for consensus). Also add planning to valid team branches. Co-Authored-By: Claude Opus 4.6 (1M context) --- .claude/skills/sprint-start/SKILL.md | 65 +++++++++++++++++++++++++++- 1 file changed, 64 insertions(+), 1 deletion(-) diff --git a/.claude/skills/sprint-start/SKILL.md b/.claude/skills/sprint-start/SKILL.md index 48d86b9ca..e86bd1525 100644 --- a/.claude/skills/sprint-start/SKILL.md +++ b/.claude/skills/sprint-start/SKILL.md @@ -25,7 +25,8 @@ The current branch IS the team. Read it with: git branch --show-current ``` -Valid team branches: `server`, `client`, `copy`, `audio`, `visual`, `ci`. +Valid team branches: `server`, `client`, `copy`, `audio`, `visual`, `ci`, +`planning`. If on `main`, follow the **Main branch workflow** below instead of the team branch workflow (steps 2–8). @@ -399,6 +400,68 @@ Task( ) ``` +#### 8d-planning. Planning team variant — proposers vs executors + +When the team is `planning`, agents work in discussion mode, not +implementation mode. The briefing typically defines discussion rounds +(propose → review → execute). Most agents are **proposers** — they +analyze and recommend. Only designated agents **execute** (write to +files, modify DB). + +**Classify agents from the briefing:** +- **Executor agents:** SI (project manager), Qatux (documenter). + These agents wait for consensus before writing anything. +- **Proposer agents:** Everyone else (Gestalt, Tyre, Paula, Ozzie, + etc.). These agents analyze, propose, and discuss — they do NOT + write decision files, modify the DB, or create/delete tickets. + +**Add this block to proposer agent prompts** (replaces rules 3–5 +and the WORKFLOW section from the standard template): + +``` + PLANNING TEAM RULES (replace standard rules 3-7 and WORKFLOW): + + 3. PROPOSE ONLY: You are a discussion participant. Your job is + to ANALYZE tickets, PROPOSE team assignments, and RECOMMEND + splits. You do NOT: + - Write or modify decision files (decisions/*.md) + - Run DB update/insert/delete commands + - Create, delete, or modify tickets + - Mark tasks as completed + Those actions belong to executor agents (SI, Qatux) after + the team lead confirms consensus. + + 4. OUTPUT FORMAT: Send your analysis to the team lead via + SendMessage. Structure it as: + - Your position on open questions (with rationale) + - Proposed team assignments (table format) + - Split candidates (if any) + - Sprint readiness assessment + Do NOT claim or work tasks. The team lead coordinates. + + 5. WAIT FOR CONSENSUS: Do not treat your own proposal as + decided. Other agents may disagree. The team lead calls + consensus and directs executors to implement it. +``` + +**Add this block to executor agent prompts** (appended after the +standard rules): + +``` + PLANNING TEAM RULES (additional): + + 8. WAIT FOR CONSENSUS: Do NOT execute DB changes, write + decision files, or create tickets until the team lead + explicitly tells you to. Your first message should confirm + you are ready and describe your execution plan. Then wait. + + 9. EXECUTE EXACTLY WHAT IS DIRECTED: When the team lead sends + you a list of changes, execute them precisely. Do not add + extra changes, reinterpret the instructions, or fill gaps + with your own judgment. If something is ambiguous, ask + before executing. +``` + #### 8e. Report Output to the user: -- 2.54.0 From a69c75d4ae8af0721bdda4da733b98434cb0e960 Mon Sep 17 00:00:00 2001 From: Jeroen Schweitzer Date: Tue, 17 Mar 2026 08:26:58 +0100 Subject: [PATCH 3/5] fix(docs): address PR #92 review comments - Fix D-134 cross-references to point to architecture.md (not content.md) - Fix stale #620 reference in D-147 body (now #679) - Fix content.md footer count (44, not 45) - Add D-145, D-146, D-147 to decisions/README.md index - Add Q-WTF-041 entry to questions-content.md (was referenced but untracked) - Fix sprint-28-candidates.md totals line - Align spelling to British "customisation" throughout new decisions - Add information boundary classification to D-147 (public trait, per D-010) - Add "first message" instruction to proposer rules in sprint-start skill Co-Authored-By: Claude Opus 4.6 (1M context) --- .claude/skills/sprint-start/SKILL.md | 4 ++-- decisions/README.md | 4 ++-- decisions/content.md | 9 +++++---- decisions/questions-content.md | 9 ++++++++- decisions/scope.md | 6 +++--- docs/sprints/sprint-28/sprint-28-candidates.md | 2 +- 6 files changed, 21 insertions(+), 13 deletions(-) diff --git a/.claude/skills/sprint-start/SKILL.md b/.claude/skills/sprint-start/SKILL.md index e86bd1525..b7ba98eec 100644 --- a/.claude/skills/sprint-start/SKILL.md +++ b/.claude/skills/sprint-start/SKILL.md @@ -431,8 +431,8 @@ and the WORKFLOW section from the standard template): Those actions belong to executor agents (SI, Qatux) after the team lead confirms consensus. - 4. OUTPUT FORMAT: Send your analysis to the team lead via - SendMessage. Structure it as: + 4. OUTPUT FORMAT: Your first message to the team lead should + be your full analysis. Structure it as: - Your position on open questions (with rationale) - Proposed team assignments (table format) - Split candidates (if any) diff --git a/decisions/README.md b/decisions/README.md index 116587353..1f6e1d579 100644 --- a/decisions/README.md +++ b/decisions/README.md @@ -12,8 +12,8 @@ Cross-domain decisions live in one file with cross-reference notes in related fi |------|--------|-----------| | [architecture.md](architecture.md) | Technical foundation | D-008, D-009, D-010, D-012, D-020, D-026, D-030, D-031, D-041, D-042, D-054, D-055, D-066, D-068, D-073, D-085, D-088, D-094, D-096, D-097, D-099, D-100, D-101, D-102, D-103, D-106, D-108, D-109, D-113, D-133, D-134, D-135, D-136, D-137 | | [perception.md](perception.md) | Player observation | D-011, D-015, D-016, D-017, D-018, D-019, D-033, D-035, D-043, D-044, D-045, D-046, D-047, D-048, D-049, D-052, D-056, D-057, D-058, D-059, D-060, D-061, D-067, D-069, D-070, D-071, D-072, D-076, D-077, D-078, D-086 | -| [content.md](content.md) | NPC, dialogue, templates | D-023, D-024, D-025, D-028, D-029, D-032, D-034, D-035, D-036, D-037, D-050, D-062, D-063, D-064, D-074, D-075, D-084, D-090, D-092, D-093, D-095, D-098, D-104, D-105, D-107, D-121, D-122, D-123, D-124, D-125, D-126, D-127, D-128, D-129, D-130, D-131, D-132, D-138, D-139, D-140, D-142 | -| [scope.md](scope.md) | Game concept, prototype | D-001, D-003, D-005, D-006, D-007, D-013, D-014, D-027, D-038, D-039, D-051, D-053, D-065, D-087, D-089, D-091, D-114, D-115, D-116, D-117, D-118, D-119, D-120 | +| [content.md](content.md) | NPC, dialogue, templates | D-023, D-024, D-025, D-028, D-029, D-032, D-034, D-035, D-036, D-037, D-050, D-062, D-063, D-064, D-074, D-075, D-084, D-090, D-092, D-093, D-095, D-098, D-104, D-105, D-107, D-121, D-122, D-123, D-124, D-125, D-126, D-127, D-128, D-129, D-130, D-131, D-132, D-138, D-139, D-140, D-142, D-147 | +| [scope.md](scope.md) | Game concept, prototype | D-001, D-003, D-005, D-006, D-007, D-013, D-014, D-027, D-038, D-039, D-051, D-053, D-065, D-087, D-089, D-091, D-114, D-115, D-116, D-117, D-118, D-119, D-120, D-145, D-146 | | [process.md](process.md) | Team, workflow | D-004, D-021, D-022, D-040 | | [questions.md](questions.md) | Open questions (index) | Q-001 through Q-054 | | [questions-architecture.md](questions-architecture.md) | Technical questions | Q-001, Q-006, Q-009, Q-018–Q-023, Q-029, Q-030, Q-046 | diff --git a/decisions/content.md b/decisions/content.md index daedc2487..4f55809ee 100644 --- a/decisions/content.md +++ b/decisions/content.md @@ -557,15 +557,16 @@ How narrative, NPCs, and world content are created: content tiers, NPC generatio ### D-147: Aesthetic taste as character personality trait — shared root for cosmetic and environmental expression - **Date:** 2026-03-17 -- **Decision:** Characters have an `aesthetic_taste` personality trait (preferred palette, style leanings) that naturally expresses in both personal appearance and living space. This is NOT a cosmetic→apartment pipeline — hair color does not map to wall color. Instead, taste is a shared root: someone who gravitates toward teal will pick teal clothing AND own a teal vase. The apartment generator reads the character's taste trait (alongside economic position from #615 and cultural context from #620); the character customization screen lets the player express that same taste through appearance choices. Neither system depends on the other — both read the same underlying trait. -- **Rationale:** The naive approach (pipe cosmetic choices into apartment generator) creates a crude "team color" mapping that feels artificial. The elegant approach: taste is a personality attribute, like traits or skills. It manifests independently in multiple contexts. This keeps #619 (customization) and #617 (apartment) architecturally independent while producing coherent identity expression. The taste trait is also reusable: NPC aesthetic preferences, gift preferences, "does this room feel like home" comfort checks, cultural style variations. +- **Decision:** Characters have an `aesthetic_taste` personality trait (preferred palette, style leanings) that naturally expresses in both personal appearance and living space. This is NOT a cosmetic→apartment pipeline — hair color does not map to wall color. Instead, taste is a shared root: someone who gravitates toward teal will pick teal clothing AND own a teal vase. The apartment generator reads the character's taste trait (alongside economic position from #615 and cultural context from #679); the character customisation screen lets the player express that same taste through appearance choices. Neither system depends on the other — both read the same underlying trait. +- **Rationale:** The naive approach (pipe cosmetic choices into apartment generator) creates a crude "team color" mapping that feels artificial. The elegant approach: taste is a personality attribute, like traits or skills. It manifests independently in multiple contexts. This keeps #619 (customisation) and #617 (apartment) architecturally independent while producing coherent identity expression. The taste trait is also reusable: NPC aesthetic preferences, gift preferences, "does this room feel like home" comfort checks, cultural style variations. - **Dependency implication:** #619 does NOT block #617. Both read the character's taste trait independently. The taste trait definition belongs to the character data model (server), not to either consuming system. +- **Information boundary (D-010):** `aesthetic_taste` is a public trait — visible to other entities and the client. NPCs can observe the player's taste (e.g. gift relevance, comfort assessment). This is not private knowledge behind the information boundary. - **Source:** Sprint 27 planning pass — Q-WTF-040 resolution - **Raised by:** Project lead (taste-as-shared-root framing), Gestalt (ColorHint concept evolved into trait), Paula (culture + economics as primary apartment drivers) - **Dissent:** Ozzie argued for direct cosmetic→apartment pipeline. Tyre and Paula argued for no connection at all. The taste trait is the synthesis: connection through personality, not through data pipeline. -- **Cross-reference:** [D-125](#d-125-world-is-quietly-responsive--gradient-of-caring-by-social-proximity) (quiet responsiveness), [D-134](#d-134-full-character-customization) (full character customization), [D-136](architecture.md#d-136-first-settled-reach-moment-auto-generated-apartment--insert-activation) (first game moment), ticket #617 (auto-generated apartment), ticket #619 (full character customisation) +- **Cross-reference:** [D-125](#d-125-world-is-quietly-responsive--gradient-of-caring-by-social-proximity) (quiet responsiveness), [D-134](architecture.md#d-134-full-character-customisation--hair-clothing-colors-at-tile-scale) (full character customisation), [D-136](architecture.md#d-136-first-settled-reach-moment-auto-generated-apartment--insert-activation) (first game moment), ticket #617 (auto-generated apartment), ticket #619 (full character customisation) - **Resolves:** Q-WTF-040 --- -*45 decisions. Last updated: 2026-03-17 (D-147 aesthetic taste trait)* +*44 decisions. Last updated: 2026-03-17 (D-147 aesthetic taste trait)* diff --git a/decisions/questions-content.md b/decisions/questions-content.md index 18d40cf61..4c9ed4cf1 100644 --- a/decisions/questions-content.md +++ b/decisions/questions-content.md @@ -219,6 +219,13 @@ Narrative, NPCs, dialogue, templates, setting, worldbuilding, and storyteller me - **Assigned to:** Gestalt (systems), Paula (narrative), confirmed by project lead - **Source:** Sprint 27 planning pass (2026-03-17) +### Q-WTF-041: What should the player feel looking at the span gate from their apartment? +- **Status:** Open +- **Question:** The First Settled Reach moment (D-136) is apartment + insert activation. The player's apartment has a view of the span gate. What emotional register should this view hit? Awe? Routine familiarity? Unease? This shapes the visual design of the apartment scene and the insert's first content. +- **Affects:** #626 (setting delivery — both layers). Blocks implementation until the emotional target is defined. +- **Needs:** Gore (thematic framing), Ozzie (player experience), Miri (setting grounding), Araminta (visual direction) +- **Source:** Where's the Fun? Workshop, Round 5 (2026-03-05) + --- -*23 questions (9 resolved, 2 partially resolved, 12 open). Last updated: 2026-03-17 (Q-WTF-039, Q-WTF-040 resolved)* +*24 questions (9 resolved, 2 partially resolved, 13 open). Last updated: 2026-03-17 (Q-WTF-039, Q-WTF-040 resolved, Q-WTF-041 added)* diff --git a/decisions/scope.md b/decisions/scope.md index f0a2cf063..06e2af946 100644 --- a/decisions/scope.md +++ b/decisions/scope.md @@ -289,13 +289,13 @@ What we're building: game concept, design pillars, prototype definition, map spe ### D-146: Character creation preview — tile-scale sprite with heavy zoom - **Date:** 2026-03-17 -- **Decision:** The character creation screen shows the player character's game sprite at heavy zoom — the same top-down tile-scale rendering used in gameplay, rendered at high resolution so it holds up when zoomed in. No separate portrait rendering system. Cosmetic choices (hair, clothing, colors) update the zoomed sprite in real time. Rimworld uses this exact approach: the character customization screen shows the same pawn sprite rendered larger, with clothing/equipment layers visible. -- **Rationale:** The tile-scale sprite IS the player's character for the entire game. Showing it zoomed in character creation: (1) sets accurate expectations for in-game appearance, (2) reuses the production sprite/animation pipeline — zero new rendering infrastructure, (3) validates that cosmetic customization (#619) reads correctly at game scale, (4) keeps #618 as a single client ticket with no visual-team split. A separate portrait system would be a one-off rendering context (different camera, lighting, asset pipeline) that serves no other game feature. "CK3-style" in the bookmark concept refers to the bookmark structure, not the portrait aesthetic. Portraits can be added later as an additive feature if needed. +- **Decision:** The character creation screen shows the player character's game sprite at heavy zoom — the same top-down tile-scale rendering used in gameplay, rendered at high resolution so it holds up when zoomed in. No separate portrait rendering system. Cosmetic choices (hair, clothing, colors) update the zoomed sprite in real time. Rimworld uses this exact approach: the character customisation screen shows the same pawn sprite rendered larger, with clothing/equipment layers visible. +- **Rationale:** The tile-scale sprite IS the player's character for the entire game. Showing it zoomed in character creation: (1) sets accurate expectations for in-game appearance, (2) reuses the production sprite/animation pipeline — zero new rendering infrastructure, (3) validates that cosmetic customisation (#619) reads correctly at game scale, (4) keeps #618 as a single client ticket with no visual-team split. A separate portrait system would be a one-off rendering context (different camera, lighting, asset pipeline) that serves no other game feature. "CK3-style" in the bookmark concept refers to the bookmark structure, not the portrait aesthetic. Portraits can be added later as an additive feature if needed. - **Team implication:** Ticket #618 (CK3-style character creation screen) stays as a single `client` team ticket. No split required. - **Source:** Sprint 27 planning pass — Q-WTF-039 resolution - **Raised by:** Tyre (architecture), Paula (narrative), Gestalt (systems), confirmed by project lead - **Dissent:** Ozzie argued for portrait render (emotional attachment). Overruled: tile-scale at heavy zoom provides sufficient character identity without a second rendering pipeline. -- **Cross-reference:** [D-115](#d-115-character-creation-scoped-to-skills--bookmark-for-v02) (creation scope), [D-134](content.md#d-134-full-character-customization) (full character customization), [D-136](architecture.md#d-136-first-settled-reach-moment-auto-generated-apartment--insert-activation) (first game moment), ticket #618 (CK3-style character creation screen) +- **Cross-reference:** [D-115](#d-115-character-creation-scoped-to-skills--bookmark-for-v02) (creation scope), [D-134](architecture.md#d-134-full-character-customisation--hair-clothing-colors-at-tile-scale) (full character customisation), [D-136](architecture.md#d-136-first-settled-reach-moment-auto-generated-apartment--insert-activation) (first game moment), ticket #618 (CK3-style character creation screen) - **Resolves:** Q-WTF-039 --- diff --git a/docs/sprints/sprint-28/sprint-28-candidates.md b/docs/sprints/sprint-28/sprint-28-candidates.md index 2f402d5a6..aeba3821b 100644 --- a/docs/sprints/sprint-28/sprint-28-candidates.md +++ b/docs/sprints/sprint-28/sprint-28-candidates.md @@ -28,7 +28,7 @@ These tickets have: team assigned, no unresolved open questions, no upstream blo | **#624** | Quietly responsive world | server | World Feel | No blockers. Proximity-weighted NPC attention + reaction systems. | | **#625** | Dual-scale consequence model | server | World Feel | No blockers. Sharp events + slow accumulation. Rimworld + DF model. | -**Total:** 7 tickets across server (3), client (1), planning (2), + 1 server unblocking ticket +**Total:** 7 tickets across server (4), client (1), planning (2) --- -- 2.54.0 From 604360620bc7845c908aa87cda72b4a0ae312700 Mon Sep 17 00:00:00 2001 From: Jeroen Schweitzer Date: Tue, 17 Mar 2026 09:16:21 +0100 Subject: [PATCH 4/5] fix(docs): address PR #92 review round 2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add Q-WTF-039/040/041 to questions-content.md row in README.md - Update questions.md master index: add Q-WTF entries, fix counts (57→60 total, content 21→24), update footer - Add #623 cancelled note to round-21 ticket inventory - Add Q-WTF-041 design pass to sprint-28 candidates list Co-Authored-By: Claude Opus 4.6 (1M context) --- decisions/README.md | 2 +- decisions/questions.md | 8 ++++---- docs/discussions/round-21-v02-ticket-assignments.md | 2 ++ docs/sprints/sprint-28/sprint-28-candidates.md | 3 ++- 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/decisions/README.md b/decisions/README.md index 1f6e1d579..85f73f39b 100644 --- a/decisions/README.md +++ b/decisions/README.md @@ -18,7 +18,7 @@ Cross-domain decisions live in one file with cross-reference notes in related fi | [questions.md](questions.md) | Open questions (index) | Q-001 through Q-054 | | [questions-architecture.md](questions-architecture.md) | Technical questions | Q-001, Q-006, Q-009, Q-018–Q-023, Q-029, Q-030, Q-046 | | [questions-perception.md](questions-perception.md) | Observation questions | Q-003, Q-014, Q-016, Q-024–Q-026, Q-051, Q-053, Q-054 | -| [questions-content.md](questions-content.md) | Narrative questions | Q-010, Q-012–Q-015, Q-017, Q-028, Q-031, Q-033, Q-040–Q-050, Q-052 | +| [questions-content.md](questions-content.md) | Narrative questions | Q-010, Q-012–Q-015, Q-017, Q-028, Q-031, Q-033, Q-040–Q-050, Q-052, Q-WTF-039, Q-WTF-040, Q-WTF-041 | | [questions-scope.md](questions-scope.md) | Scope questions | Q-002, Q-004, Q-005, Q-007, Q-008, Q-011, Q-027, Q-032, Q-034–Q-039 | | [rejected.md](rejected.md) | Rejected alternatives | R-001 through R-010 | diff --git a/decisions/questions.md b/decisions/questions.md index f83da1e4b..8bb821186 100644 --- a/decisions/questions.md +++ b/decisions/questions.md @@ -8,7 +8,7 @@ Tracked questions awaiting discussion or resolution. Split by domain, mirroring |------|--------|-----------| | [questions-architecture.md](questions-architecture.md) | Technical foundation | Q-001, Q-006, Q-009, Q-018, Q-019, Q-020, Q-021, Q-022, Q-023, Q-029, Q-030, Q-046, Q-059 | | [questions-perception.md](questions-perception.md) | Player observation | Q-003, Q-014, Q-016, Q-024, Q-025, Q-026, Q-051, Q-053, Q-054 | -| [questions-content.md](questions-content.md) | Narrative, NPCs, setting | Q-010, Q-012, Q-013, Q-015, Q-017, Q-028, Q-031, Q-033, Q-040, Q-041, Q-042, Q-043, Q-044, Q-045, Q-047, Q-048, Q-049, Q-050, Q-052, Q-056, Q-057 | +| [questions-content.md](questions-content.md) | Narrative, NPCs, setting | Q-010, Q-012, Q-013, Q-015, Q-017, Q-028, Q-031, Q-033, Q-040, Q-041, Q-042, Q-043, Q-044, Q-045, Q-047, Q-048, Q-049, Q-050, Q-052, Q-056, Q-057, Q-WTF-039, Q-WTF-040, Q-WTF-041 | | [questions-scope.md](questions-scope.md) | Game concept, prototype | Q-002, Q-004, Q-005, Q-007, Q-008, Q-011, Q-027, Q-032, Q-034, Q-035, Q-036, Q-037, Q-038, Q-039, Q-058 | ## Status Summary @@ -17,9 +17,9 @@ Tracked questions awaiting discussion or resolution. Split by domain, mirroring |--------|-------|----------|---------|------| | Architecture | 13 | 7 | 1 | 5 | | Perception | 9 | 5 | 1 | 3 | -| Content | 21 | 5 | 2 | 14 | +| Content | 24 | 7 | 2 | 15 | | Scope | 14 | 1 | 3 | 10 | -| **Total** | **57** | **18** | **7** | **32** | +| **Total** | **60** | **20** | **7** | **33** | *Updated 2026-03-05: Q-011 resolved (D-117/D-115/D-122), Q-034 partially resolved (D-117), Q-037 partially resolved (D-119), Q-033 partially resolved/reframed (D-122) — Where's the Fun? Workshop* @@ -35,4 +35,4 @@ Tracked questions awaiting discussion or resolution. Split by domain, mirroring When in doubt about where a question belongs: if it constrains **how we build**, it's architecture. If it defines **what the player observes or knows**, it's perception. If it defines **narrative, NPCs, dialogue, or setting**, it's content. If it defines **what we ship or how big it is**, it's scope. -*54 questions. Last updated: 2026-02-28 (split from single file into domain files).* +*60 questions. Last updated: 2026-03-17 (Q-WTF-039, Q-WTF-040, Q-WTF-041 added to content domain).* diff --git a/docs/discussions/round-21-v02-ticket-assignments.md b/docs/discussions/round-21-v02-ticket-assignments.md index 095bbe975..ef98737b6 100644 --- a/docs/discussions/round-21-v02-ticket-assignments.md +++ b/docs/discussions/round-21-v02-ticket-assignments.md @@ -44,6 +44,8 @@ created: 2026-03-17 | #625 | Dual-scale consequence model | World Feel | — | — | | #626 | Setting delivery — both layers | World Feel | — | — | +*Note: #623 (AI content templating pipeline) is absent from this range — cancelled, superseded by #638.* + --- ## Open Questions to Resolve diff --git a/docs/sprints/sprint-28/sprint-28-candidates.md b/docs/sprints/sprint-28/sprint-28-candidates.md index aeba3821b..cfa55ad65 100644 --- a/docs/sprints/sprint-28/sprint-28-candidates.md +++ b/docs/sprints/sprint-28/sprint-28-candidates.md @@ -27,8 +27,9 @@ These tickets have: team assigned, no unresolved open questions, no upstream blo | **#679** | Location-to-culture resolution system (server) | server | Character Creation | No blockers. Split from #620. Unblocks #621, #680, #681. Critical path for NPC generation. | | **#624** | Quietly responsive world | server | World Feel | No blockers. Proximity-weighted NPC attention + reaction systems. | | **#625** | Dual-scale consequence model | server | World Feel | No blockers. Sharp events + slow accumulation. Rimworld + DF model. | +| **NEW** | Q-WTF-041 design pass (span gate feeling) | planning | World Feel | No blockers. Resolves Q-WTF-041 to unblock #626. Needs Gore, Ozzie, Miri, Araminta. Create ticket during sprint planning. | -**Total:** 7 tickets across server (4), client (1), planning (2) +**Total:** 8 tickets across server (4), client (1), planning (3) --- -- 2.54.0 From c0669489ff1072c4a4abe889663d46a555be9cc8 Mon Sep 17 00:00:00 2001 From: Jeroen Schweitzer Date: Tue, 17 Mar 2026 09:27:02 +0100 Subject: [PATCH 5/5] fix(docs): recount all question domain files for PR #92 round 3 Full recount across all 4 question domain files. Content: 10 resolved (not 9), 12 open (not 13). Scope: 15 total (not 14, Q-058 was missing from count). Grand total: 61 questions. Both questions.md summary table and questions-content.md footer now match actual header counts. Co-Authored-By: Claude Opus 4.6 (1M context) --- decisions/questions-content.md | 2 +- decisions/questions.md | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/decisions/questions-content.md b/decisions/questions-content.md index 4c9ed4cf1..8bae4f918 100644 --- a/decisions/questions-content.md +++ b/decisions/questions-content.md @@ -228,4 +228,4 @@ Narrative, NPCs, dialogue, templates, setting, worldbuilding, and storyteller me --- -*24 questions (9 resolved, 2 partially resolved, 13 open). Last updated: 2026-03-17 (Q-WTF-039, Q-WTF-040 resolved, Q-WTF-041 added)* +*24 questions (10 resolved, 2 partially resolved, 12 open). Last updated: 2026-03-17 (Q-WTF-039, Q-WTF-040 resolved, Q-WTF-041 added; recount)* diff --git a/decisions/questions.md b/decisions/questions.md index 8bb821186..f51dca3eb 100644 --- a/decisions/questions.md +++ b/decisions/questions.md @@ -17,9 +17,9 @@ Tracked questions awaiting discussion or resolution. Split by domain, mirroring |--------|-------|----------|---------|------| | Architecture | 13 | 7 | 1 | 5 | | Perception | 9 | 5 | 1 | 3 | -| Content | 24 | 7 | 2 | 15 | -| Scope | 14 | 1 | 3 | 10 | -| **Total** | **60** | **20** | **7** | **33** | +| Content | 24 | 10 | 2 | 12 | +| Scope | 15 | 2 | 3 | 10 | +| **Total** | **61** | **24** | **7** | **30** | *Updated 2026-03-05: Q-011 resolved (D-117/D-115/D-122), Q-034 partially resolved (D-117), Q-037 partially resolved (D-119), Q-033 partially resolved/reframed (D-122) — Where's the Fun? Workshop* @@ -35,4 +35,4 @@ Tracked questions awaiting discussion or resolution. Split by domain, mirroring When in doubt about where a question belongs: if it constrains **how we build**, it's architecture. If it defines **what the player observes or knows**, it's perception. If it defines **narrative, NPCs, dialogue, or setting**, it's content. If it defines **what we ship or how big it is**, it's scope. -*60 questions. Last updated: 2026-03-17 (Q-WTF-039, Q-WTF-040, Q-WTF-041 added to content domain).* +*61 questions. Last updated: 2026-03-17 (Q-WTF-039, Q-WTF-040, Q-WTF-041 added to content domain; full recount).* -- 2.54.0