diff --git a/docs/briefings/araminta.md b/docs/briefings/araminta.md index 8f7201a63..a1acd77b0 100644 --- a/docs/briefings/araminta.md +++ b/docs/briefings/araminta.md @@ -29,7 +29,6 @@ Create Settled Reach visual style guide (color palette, UI patterns, visual gram Note: Image generation via /asset-gen costs money - always get Team Leader permission before generating. Needs to create a new style guide for this project (existing /asset-gen skill configured for a different project). ## Key Documents -- DECISIONS.md - all confirmed decisions -- DISCUSSION.md - active discussion round +- decisions/ - domain-split decision files (see decisions/README.md for index) - docs/discussions/ - archived rounds - TEAM.md - team roster diff --git a/docs/briefings/dudley.md b/docs/briefings/dudley.md index ba77d1546..95790e907 100644 --- a/docs/briefings/dudley.md +++ b/docs/briefings/dudley.md @@ -8,19 +8,26 @@ The Settled Reach: top-down immersive sim, single-character perspective, asymmet STANDBY. This briefing will be populated when backend/engine implementation begins. ## Key Decisions for Your Domain -- D-010: Four architectural principles - client-server, deterministic sim, information boundaries, input events -- D-011: LOS shadowcasting implementation -- D-012: Chunk-based map architecture -- D-014: v0.1 map specification -- D-020: Rust simulation server with bevy_ecs, MessagePack protocol to Godot client -- D-021: Official title "The Settled Reach" +Read `decisions/architecture.md` (primary) and `decisions/content.md` (NPC model). Key decisions: +- **D-010:** Four architectural principles (client-server, info boundaries, deterministic sim, input events) +- **D-020:** Rust simulation server with bevy_ecs, MessagePack protocol to Godot client +- **D-024:** NPC ECS model (10 axes + CombatCapability component) +- **D-026:** Simulation tier engine (Active/Background/State-saved/Ungenerated, timestamp LRU) +- **D-030:** Testability architecture (hybrid Rust tests, deterministic replay critical) +- **D-031:** Time system (10 ticks = 1 game-minute, 4 day phases) -### Round 17 Decisions (Server-Side Core) -- **D-024: NPC ECS model** - 10 axes as components (Want, Secret, Relationships 1-3, Tolerance, Routine, Information, Contentment, Personality, Tell, Skills). CombatCapability as optional component. -- **D-025: Template instantiation system** - Single-ownership model with reference links carrying relationship metadata. NPCs owned by one template, referenced by others. -- **D-026: Simulation tier engine** - Four tiers: Active (30-80 NPCs, full sim, 10-20 tps), Background (500-2K, state machines 1/game-min), State-saved (serialized structs), Ungenerated. Timestamp-based LRU eviction. bevy_ecs dynamic component add/remove for tier transitions. -- **D-027: Access tier system + cargo/goods** - Content filtering by access tier (0-3). Cargo/goods system for smuggling mechanics. +## Development Workflow +See `docs/DEVOPS.md` for full procedures. Your key targets: +- `make setup` — verify Rust toolchain (clippy + rustfmt) +- `make build-server` — `cargo build` in `server/` +- `make server` — `cargo run` in `server/` +- `make test-server` — `cargo test` in `server/` +- `make lint-server` — clippy (deny warnings) + rustfmt check +- `make ci-server` — full server CI pipeline (lint → build → test) +- Server code lives in `server/` — unit tests inline with `#[cfg(test)]`, integration tests in `server/tests/` +- Cross-boundary IPC fixtures in `tests/` ## Key Documents -- DECISIONS.md - all confirmed decisions +- decisions/ - domain-split decision files (see decisions/README.md for index) +- docs/DEVOPS.md - build, test, lint, CI procedures - docs/discussions/ - archived design rounds diff --git a/docs/briefings/gestalt.md b/docs/briefings/gestalt.md index e340d2e02..ac732b0b5 100644 --- a/docs/briefings/gestalt.md +++ b/docs/briefings/gestalt.md @@ -34,7 +34,6 @@ NPC ECS component architecture (10 axes + CombatCapability component). Social si **Iron rule for base builder (future):** CombatCapability component pattern must extend to other optional systems. No breaking the component model. ## Key Documents -- DECISIONS.md - all confirmed decisions -- DISCUSSION.md - active discussion round +- decisions/ - domain-split decision files (see decisions/README.md for index) - docs/discussions/ - archived rounds - TEAM.md - team roster diff --git a/docs/briefings/gore.md b/docs/briefings/gore.md index da93cfc3f..87a20089d 100644 --- a/docs/briefings/gore.md +++ b/docs/briefings/gore.md @@ -27,7 +27,6 @@ Ensure vertical slice thematic spine is sound (both characters face "is this eno **Future flag:** Base builder DLC as thematic counter-offer to ascension (settling as active choice vs escape). Not now — but keep design space open. ## Key Documents -- DECISIONS.md - all confirmed decisions -- DISCUSSION.md - active discussion round +- decisions/ - domain-split decision files (see decisions/README.md for index) - docs/discussions/ - archived rounds - TEAM.md - team roster diff --git a/docs/briefings/hoshe.md b/docs/briefings/hoshe.md index 9582e4bd6..88c444e0b 100644 --- a/docs/briefings/hoshe.md +++ b/docs/briefings/hoshe.md @@ -5,23 +5,11 @@ Last updated: 2026-02-10 The Settled Reach: top-down immersive sim, single-character perspective, asymmetric information core mechanic, Rimworld-style storyteller. 29 confirmed decisions, 17 discussion rounds complete. Engine selected (D-020). Vertical slice defined (D-027). ## Decisions Relevant to Your Role -- D-010: Information boundaries - testable? Can we verify information never leaks? -- D-011: LOS shadowcasting - verify correctness of visibility calculations -- D-012: Chunk loading - seamless? No visible pop-in or loading seams? -- D-013: POI appear/disappear correctly? Diegetic insert triggers reliably? -- D-015: Vision cone - correct blind spots? No information visible outside cone? -- D-016: Monologue triggers - contextually appropriate? Right timing, right content? -- D-017: Perception queries - each mode returns correct information for its type? -- D-018: Three ranges working correctly? Sound quality degrades properly by distance? -- D-020: MessagePack serialization - correct round-trip? No data loss at protocol boundary? -- D-021: Official title "The Settled Reach" - -### Round 17 Decisions (Test Criteria) -- **D-027: Vertical slice success criteria** - Concrete QA targets: - 1. **30-minute breathing room** - Contamination activation must not trigger before player has 30 minutes of daily-life play (configurable for testing) - 2. **Divergent playthroughs** - Same world seed, different character: verify relationships inverted, POIs differ, dialogue access varies - 3. **Emotional attachment test** - Post-playthrough survey: can player name one NPC they felt conflicted about? - 4. **Emergent discovery** - Observe→notice→follow→discover sequence must arise from systems (log-verifiable: no scripted reveals) +Read `decisions/architecture.md` (D-010, D-020, D-030) and `decisions/perception.md` (D-011, D-017, D-018). Key decisions: +- **D-010:** Information boundaries — testable? Can we verify information never leaks? +- **D-020:** MessagePack serialization — correct round-trip? No data loss at protocol boundary? +- **D-027:** Vertical slice success criteria (30-min runway, divergent playthroughs, emergent discovery) +- **D-030:** Testability architecture (hybrid Rust tests, gdUnit4, three-layer IPC, CauseChain) ## Open Questions Assigned to You None assigned. @@ -36,8 +24,20 @@ None assigned. All test plans due BEFORE implementation begins. +## Development Workflow +See `docs/DEVOPS.md` for full procedures. Your key targets: +- `make test` — run all tests (server + client) +- `make test-server` — Rust unit + integration tests +- `make test-client` — gdUnit4 tests (headless runner pending) +- `make lint` — run all linters +- `make ci` — full CI pipeline locally (lint → build → test) +- Server tests: `server/` (inline `#[cfg(test)]` + `tests/` directory per D-030) +- Client tests: `client/` (gdUnit4 per D-030) +- Cross-boundary tests: `tests/` (IPC fixtures, serialization round-trips) +- Test caches: `.cache/` (gitignored, cleared by `make clean`) + ## Key Documents -- DECISIONS.md - all confirmed decisions -- DISCUSSION.md - active discussion round +- decisions/ - domain-split decision files (see decisions/README.md for index) +- docs/DEVOPS.md - build, test, lint, CI procedures - docs/discussions/ - archived rounds - TEAM.md - team roster diff --git a/docs/briefings/justine.md b/docs/briefings/justine.md index 2b2a7a71f..fe4a7e133 100644 --- a/docs/briefings/justine.md +++ b/docs/briefings/justine.md @@ -8,14 +8,24 @@ The Settled Reach: top-down immersive sim, single-character perspective, asymmet STANDBY. This briefing will be populated when build/deployment pipeline work begins. ## Key Decisions for Your Domain -- Q-007: Target platforms (open question - affects entire build pipeline) -- D-019: Top-down primary view with future 3D cutscenes - build implications for asset pipelines and platform support -- D-020: Godot 4 + Rust subprocess architecture -- D-021: Official title "The Settled Reach" +Read `decisions/architecture.md` (D-020, D-026, D-030) and `decisions/questions.md` (Q-007). Key decisions: +- **Q-007:** Target platforms (open question — affects entire build pipeline) +- **D-020:** Godot 4 + Rust subprocess architecture +- **D-026:** State-saved NPC population — save game serializes 10K+ NPCs (~1-2KB each, ~10-20MB) +- **D-030:** Testability architecture (CI pipeline structure, test runner tooling) -### Round 17 Decisions (Save/Load Implications) -- **D-026: State-saved NPC population** - Save game must serialize 10,000+ NPCs as frozen structs (~1-2KB each). Estimated save file size: ~10-20MB for NPC state alone. Compression strategy needed. State-saved NPCs reactivate on player return (~2-5ms per NPC). +## Development Workflow +See `docs/DEVOPS.md` for full procedures. You own the release pipeline. +- `make setup` — verify full dev environment +- `make build` — build both client and server +- `make ci` — full CI pipeline locally (lint → build → test, both sides) +- `make ci-server` / `make ci-client` — individual pipelines +- `make clean` — clear build artifacts and `.cache/` +- CI config: `.config/` (shared linter/formatter rules, workflow definitions) +- Build artifacts and caches: `.cache/` (gitignored) +- Tooling scripts: `tooling/` (asset pipelines, build helpers) ## Key Documents -- DECISIONS.md - all confirmed decisions +- decisions/ - domain-split decision files (see decisions/README.md for index) +- docs/DEVOPS.md - build, test, lint, CI procedures - docs/discussions/ - archived design rounds diff --git a/docs/briefings/mellanie.md b/docs/briefings/mellanie.md index c736d4b22..022a3b705 100644 --- a/docs/briefings/mellanie.md +++ b/docs/briefings/mellanie.md @@ -43,6 +43,6 @@ The Settled Reach: top-down immersive sim, single-character perspective, asymmet **Critical tool:** Tyre's line previewer CLI (weekend build) — authoring tool and regression test harness. ## Key Documents -- DECISIONS.md - all confirmed decisions +- decisions/ - domain-split decision files (see decisions/README.md for index) - docs/discussions/ - archived design rounds - docs/briefings/miri.md - cultural generation guide (forthcoming) diff --git a/docs/briefings/miri.md b/docs/briefings/miri.md index 518d31891..35a178517 100644 --- a/docs/briefings/miri.md +++ b/docs/briefings/miri.md @@ -31,7 +31,6 @@ The Settled Reach: top-down immersive sim, single-character perspective, asymmet Also: ground both vertical slice characters (smuggler and detective) in setting-consistent cultural contexts. ## Key Documents -- DECISIONS.md - all confirmed decisions -- DISCUSSION.md - active discussion round +- decisions/ - domain-split decision files (see decisions/README.md for index) - docs/discussions/ - archived rounds - TEAM.md - team roster diff --git a/docs/briefings/nigel.md b/docs/briefings/nigel.md index 0c398d242..db96c6819 100644 --- a/docs/briefings/nigel.md +++ b/docs/briefings/nigel.md @@ -26,7 +26,6 @@ Access tier system design (Tier 0-3 content pools). Seed-based population split **Key replayability multiplier:** Access tiers make Tier 1 conspiracy pool variable across playthroughs, not just within one game. ## Key Documents -- DECISIONS.md - all confirmed decisions -- DISCUSSION.md - active discussion round +- decisions/ - domain-split decision files (see decisions/README.md for index) - docs/discussions/ - archived rounds - TEAM.md - team roster diff --git a/docs/briefings/oscar.md b/docs/briefings/oscar.md index c129ae74d..35dbef0c4 100644 --- a/docs/briefings/oscar.md +++ b/docs/briefings/oscar.md @@ -8,14 +8,23 @@ The Settled Reach: top-down immersive sim, single-character perspective, asymmet STANDBY. This briefing will be populated when networking/multiplayer implementation begins. ## Key Decisions for Your Domain -- D-009: Multiplayer strategy (design for it, build single-player first) -- D-010: Four architectural principles - especially client-server architecture and deterministic simulation -- D-020: Subprocess/IPC architecture — local socket for single-player, TCP for multiplayer (same protocol) -- D-021: Official title "The Settled Reach" +Read `decisions/architecture.md` (primary). Key decisions: +- **D-009:** Multiplayer strategy (design for it, build single-player first) +- **D-010:** Four architectural principles (client-server, info boundaries, deterministic sim) +- **D-020:** Subprocess/IPC architecture — local socket for single-player, TCP for multiplayer +- **D-026:** Simulation tier sync — deterministic eviction across all observers for future multiplayer -### Round 17 Decisions (Multiplayer Implications) -- **D-026: Simulation tier sync** - For future multiplayer: how do we synchronize State-saved NPC reactivation across clients? Background tier state machines run server-side — clients receive snapshots. Timestamp-based eviction must be deterministic across all observers. +## Development Workflow +See `docs/DEVOPS.md` for full procedures. Your key targets: +- `make setup` — verify Rust toolchain and Godot +- `make build` — build both client and server +- `make test` — run all tests (IPC round-trip tests critical for your domain) +- `make ci` — full CI pipeline locally +- Server code: `server/` (Rust, networking layer) +- Client code: `client/` (Godot, network client) +- Cross-boundary tests: `tests/` (IPC serialization fixtures, protocol regression) ## Key Documents -- DECISIONS.md - all confirmed decisions +- decisions/ - domain-split decision files (see decisions/README.md for index) +- docs/DEVOPS.md - build, test, lint, CI procedures - docs/discussions/ - archived design rounds diff --git a/docs/briefings/ozzie.md b/docs/briefings/ozzie.md index 7b3e2c55b..6ae0398d1 100644 --- a/docs/briefings/ozzie.md +++ b/docs/briefings/ozzie.md @@ -23,7 +23,6 @@ None assigned. Vertical slice playtest evaluation. Champion the 30-minute breathing room success criterion. Verify both playthroughs (smuggler and detective) feel fundamentally different. Ensure social interaction moment-to-moment rewards match investigation moments. Guard the life-sim substrate from being sacrificed to conspiracy pacing. ## Key Documents -- DECISIONS.md - all confirmed decisions -- DISCUSSION.md - active discussion round +- decisions/ - domain-split decision files (see decisions/README.md for index) - docs/discussions/ - archived rounds - TEAM.md - team roster diff --git a/docs/briefings/paula.md b/docs/briefings/paula.md index e7c2c8309..23374cfb2 100644 --- a/docs/briefings/paula.md +++ b/docs/briefings/paula.md @@ -24,7 +24,6 @@ The Settled Reach: top-down immersive sim, single-character perspective, asymmet NPC triangle authoring for vertical slice templates (workplace, bar, smuggling ring). Define cross-template relationship metadata schema for reference links. Design vertical slice character rosters (smuggler + detective perspectives on same NPCs). Map dialogue layers to NPC axes for systemic line selection. Social gameplay loop design — mundane triangles as standalone content. ## Key Documents -- DECISIONS.md - all confirmed decisions -- DISCUSSION.md - active discussion round +- decisions/ - domain-split decision files (see decisions/README.md for index) - docs/discussions/ - archived rounds - TEAM.md - team roster diff --git a/docs/briefings/qatux.md b/docs/briefings/qatux.md index 160c5dab3..bbe3b5a55 100644 --- a/docs/briefings/qatux.md +++ b/docs/briefings/qatux.md @@ -34,7 +34,7 @@ None assigned directly. 6. Verify briefing freshness against DECISIONS.md ## Key Documents -- DECISIONS.md - all confirmed decisions +- decisions/ - domain-split decision files (see decisions/README.md for index) - docs/discussions/ - archived rounds (including active rounds per D-022) - docs/briefings/ - agent briefing files (you maintain these) - TEAM.md - team roster diff --git a/docs/briefings/si.md b/docs/briefings/si.md index af56794ec..1e9e4a3e0 100644 --- a/docs/briefings/si.md +++ b/docs/briefings/si.md @@ -5,16 +5,12 @@ Last updated: 2026-02-10 The Settled Reach: top-down immersive sim, single-character perspective, asymmetric information core mechanic, Rimworld-style storyteller. 29 confirmed decisions, 17 discussion rounds complete. Engine selected (D-020). Vertical slice defined (D-027). Next major workstream: vertical slice implementation. ## Decisions Relevant to Your Role -All decisions (D-001 through D-029) - manages tickets derived from confirmed decisions. - -### Round 17 Summary (Sprint Planning Context) -- **D-023:** Three-tier content architecture (Tier 1 authored modules, Tier 2 templated, Tier 3 procedural) -- **D-024:** NPC generation model (10 axes + CombatCapability component) -- **D-025:** Social site as atomic template unit (4-8 NPCs, 15-40 tiles, single-ownership + reference links) -- **D-026:** Simulation tiers (Active/Background/State-saved/Ungenerated with timestamp eviction) -- **D-027:** Vertical slice = smuggler + detective, station district, 3 templates, 30-min success criterion -- **D-028:** Dialogue system (tagged pools, 4 relational layers, trait modifiers, template content packs) -- **D-029:** Population entanglement ratio (30/50/20, variable per seed) +All decisions across all domains. Read `decisions/README.md` for the index. Query decisions DB for sprint planning: +```bash +make decisions-coverage # Decision-to-ticket coverage by domain +make decisions-orphan # Decisions without implementing tickets +make decisions-active # List all active decisions +``` ## Open Questions Assigned to You All open questions - tracks as tickets for assignment and progress monitoring. @@ -29,8 +25,16 @@ Create sprint plan for vertical slice implementation (D-027). Break D-024 throug Vertical slice is the next major workstream — coordinate with Team Leader on sequencing and resourcing. +## Development Workflow +See `docs/DEVOPS.md` for full procedures. Key awareness for sprint planning: +- `make ci` must pass before any PR merges — definition of done includes CI green +- `make ci-server` = lint-server → build-server → test-server +- `make ci-client` = lint-client → build-client → test-client +- Server work lives in `server/`, client work in `client/`, cross-boundary tests in `tests/` +- Hoshe's test plans target these directories per D-030 testing architecture + ## Key Documents -- DECISIONS.md - all confirmed decisions -- DISCUSSION.md - active discussion round +- decisions/ - domain-split decision files (see decisions/README.md for index) +- docs/DEVOPS.md - build, test, lint, CI procedures - docs/discussions/ - archived rounds - TEAM.md - team roster diff --git a/docs/briefings/stig.md b/docs/briefings/stig.md index 1f0525732..70da8817f 100644 --- a/docs/briefings/stig.md +++ b/docs/briefings/stig.md @@ -8,23 +8,25 @@ The Settled Reach: top-down immersive sim, single-character perspective, asymmet STANDBY. This briefing will be populated when UI implementation begins. ## Key Decisions for Your Domain -- D-013: Diegetic insert/POI navigation system -- D-015: Camera locked to character, vision cone -- D-016: Internal monologue text display -- D-017: Perception mode overlays -- D-018: Sound visual indicators (medium range) -- D-019: Top-down primary view -- D-020: Godot 4 client (GDScript) -- D-021: Official title "The Settled Reach" +Read `decisions/perception.md` (primary) and `decisions/scope.md` (D-013, D-014). Key decisions: +- **D-013:** Diegetic insert/POI navigation system +- **D-015:** Camera locked to character, vision cone +- **D-016:** Internal monologue text display +- **D-017:** Perception mode overlays +- **D-019:** Top-down primary view, Godot 4 client (GDScript) +- **D-028:** Dialogue UI — four relational layers (access tiers, history, trust-gated, unprompted) -### Round 17 Decisions (UI Implications) -- **D-028: Dialogue UI layers** - Four relational layers: - - Access tier indicators (insider/outsider/authority/peer) - - Relationship history feedback (trust/rapport display) - - Trust-gated dialogue options (locked topics until threshold met) - - Unprompted disclosure notifications (NPC volunteers information) -- **D-027: Character-filtered insert UI** - Smuggler sees insider access, detective sees authority access. Same UI system, different filtered POI content. +## Development Workflow +See `docs/DEVOPS.md` for full procedures. Your key targets: +- `make setup` — verify Godot is installed +- `make client` — launch Godot with `client/` project +- `make test-client` — gdUnit4 tests (headless runner pending) +- `make lint-client` — gdlint/gdformat (pending setup) +- `make ci-client` — full client CI pipeline (lint → build → test) +- Client code lives in `client/` — scenes, GDScript, assets +- UI tests use gdUnit4 (D-030) ## Key Documents -- DECISIONS.md - all confirmed decisions +- decisions/ - domain-split decision files (see decisions/README.md for index) +- docs/DEVOPS.md - build, test, lint, CI procedures - docs/discussions/ - archived design rounds diff --git a/docs/briefings/tiger.md b/docs/briefings/tiger.md index e08b5a902..de3396d84 100644 --- a/docs/briefings/tiger.md +++ b/docs/briefings/tiger.md @@ -16,5 +16,5 @@ STANDBY. This briefing will be populated when localization work begins. - **D-028: Tagged line pool dialogue system** - Localization advantages: each line is tagged with context metadata (access tier, relationship level, trust threshold, mood). Translators receive rich context. Lines are pooled, not tree-branched — translation scope is predictable. Trait modifiers apply post-translation (base line + transformation guide = variants in target language). ## Key Documents -- DECISIONS.md - all confirmed decisions +- decisions/ - domain-split decision files (see decisions/README.md for index) - docs/discussions/ - archived design rounds diff --git a/docs/briefings/troblum.md b/docs/briefings/troblum.md index 4f495ecb4..e4a3ad929 100644 --- a/docs/briefings/troblum.md +++ b/docs/briefings/troblum.md @@ -24,7 +24,6 @@ The Settled Reach: top-down immersive sim, single-character perspective, asymmet Monitor D-026 simulation tier implementation for performance validation. Stress-test timestamp-based eviction against worst-case scenarios. Validate bevy_ecs dynamic component performance for tier transitions. Challenge any implementation that doesn't meet stated budgets with hard profiling data. ## Key Documents -- DECISIONS.md - all confirmed decisions -- DISCUSSION.md - active discussion round +- decisions/ - domain-split decision files (see decisions/README.md for index) - docs/discussions/ - archived rounds - TEAM.md - team roster diff --git a/docs/briefings/tyre.md b/docs/briefings/tyre.md index ff9a3a5a3..b55ff9f0a 100644 --- a/docs/briefings/tyre.md +++ b/docs/briefings/tyre.md @@ -5,24 +5,12 @@ Last updated: 2026-02-10 The Settled Reach: top-down immersive sim, single-character perspective, asymmetric information core mechanic, Rimworld-style storyteller. 29 confirmed decisions, 17 discussion rounds complete. Engine selected (D-020: Godot + Rust/bevy_ecs subprocess). Vertical slice defined (D-027). ## Decisions Relevant to Your Role -- D-008: Z-levels, LOD, procedural generation - technical architecture implications -- D-010: Four architectural principles - client-server, deterministic sim, information boundaries, input events -- D-011: LOS shadowcasting implementation for fog of war -- D-012: Chunk-based map architecture for streaming and generation -- D-014: v0.1 map specification - full technical requirements -- D-015: Camera lock to character - vision cone rendering and binaural audio hookup -- D-017: Perception as observer queries - technical pattern for all perception modes -- D-018: Sound propagation system - three-range model with wall occlusion -- D-019: Top-down primary view with potential future 3D client -- D-020: Godot 4 client + Rust/bevy_ecs server via subprocess/IPC, MessagePack serialization -- D-021: Official title "The Settled Reach" - -### Round 17 Decisions (Technical Architecture) -- **D-024: CombatCapability as ECS component** - Optional component triggered by combat-trained skill tag. Pattern applies to all optional systems. Follows D-017 perception mode model (capabilities as components, not monolithic state). -- **D-025: Single-ownership template model with reference links** - NPCs owned by one template, referenced by others. Reference links carry relationship metadata. Prevents lifecycle conflicts. -- **D-026: Simulation tier budgets confirmed** - Your numbers: Active (30-80 NPCs, 10-20 tps), Background (500-2K NPCs, state machines 1/game-min, 4 machines each), State-saved (~1-2KB serialized structs), Ungenerated (doesn't exist). Timestamp-based LRU eviction. bevy_ecs dynamic components for tier transitions. -- **D-027: Vertical slice systems** - Access tier system + cargo/goods system needed for smuggling ring mechanics. Two characters = ~20% more effort, no new architecture (client-server already supports multi-observer). -- **D-028: Line previewer CLI** - Weekend build. Authoring tool and regression test harness. Takes template YAML → NPC instances → trait modifiers → outputs generated line pools with metadata. +Read `decisions/architecture.md` (primary) and `decisions/perception.md` (secondary). Key decisions: +- **D-010:** Four architectural principles (client-server, info boundaries, deterministic sim, input events) +- **D-020:** Godot client + Rust/bevy_ecs server via subprocess/IPC, MessagePack serialization +- **D-026:** Simulation tier budgets (Active 30-80 NPCs, Background 500-2K, State-saved 10K+) +- **D-030:** Testability architecture (hybrid test org, gdUnit4, CauseChain, three-layer IPC testing) +- **D-031:** Time system (10 ticks = 1 game-minute, 4 day phases) ## Open Questions Assigned to You - Q-001: Engine selection (LEAD, CRITICAL - next priority) @@ -41,8 +29,19 @@ Vertical slice technical implementation: **Future flag:** Base builder DLC requires data model stub now: `modifications: Vec` on relevant entities. Add to schema early. +## Development Workflow +See `docs/DEVOPS.md` for full procedures. You own the technical build pipeline. +- `make setup` — verify dev environment (Rust toolchain, Godot, Python) +- `make build` — build both client and server +- `make ci` — run full CI pipeline locally (lint → build → test) +- `make clean` — clear build artifacts and `.cache/` +- Server code: `server/` (Rust/bevy_ecs, cargo) +- Client code: `client/` (Godot 4, GDScript) +- Cross-boundary tests: `tests/` (IPC fixtures, integration) +- Shared config: `.config/` (linters, formatters) + ## Key Documents -- DECISIONS.md - all confirmed decisions -- DISCUSSION.md - active discussion round +- decisions/ - domain-split decision files (see decisions/README.md for index) +- docs/DEVOPS.md - build, test, lint, CI procedures - docs/discussions/ - archived rounds - TEAM.md - team roster