From 160add971910c63b5a45c167db7e4809ad6ab0ef Mon Sep 17 00:00:00 2001 From: Jeroen Schweitzer Date: Wed, 11 Feb 2026 22:30:05 +0100 Subject: [PATCH 1/2] docs(sprints): update sprint 2 briefings with ticket IDs and dependencies Server team added #356-#360 for pre-sprint design tasks and integration milestones. Updated server.md and joint.md with actual ticket numbers, dependency chains, and done status. Co-Authored-By: Claude Opus 4.6 --- docs/sprints/sprint-2/joint.md | 23 ++++++++++----------- docs/sprints/sprint-2/server.md | 36 +++++++++++++++++---------------- 2 files changed, 30 insertions(+), 29 deletions(-) diff --git a/docs/sprints/sprint-2/joint.md b/docs/sprints/sprint-2/joint.md index bea579cb0..62c6edae5 100644 --- a/docs/sprints/sprint-2/joint.md +++ b/docs/sprints/sprint-2/joint.md @@ -4,21 +4,20 @@ **Branches:** `server` + `client` (merge to main for integration) -## Pre-Sprint +## Design Tasks -| # | Task | Owner | Notes | -|---|------|-------|-------| -| #359 | Resolve Q-018 (shadowcast algorithm) | Tyre, Dudley | Blocks #110. Benchmark symmetric vs recursive at 150x150 scale. | -| #360 | Resolve Q-019 (entity ID stability) | Tyre, Dudley | Affects client entity lifecycle (#130). | -| #358 | Design ObserverSnapshot v2 schema | Tyre | Add visible_tiles, player_facing, game_time fields. Both teams need this before fog integration. | +| # | Title | Owner | Blocks | +|---|-------|-------|--------| +| #359 | Resolve Q-018: shadowcasting algorithm selection | server (Tyre, Dudley) | #110 | +| #360 | Resolve Q-019: entity ID stability | joint (Tyre, Dudley) | #130 | +| #358 | Design ObserverSnapshot v2 schema | joint (Tyre) | #112, #113, #25 | ## Integration Tickets | # | Title | Blocked by | |---|-------|------------| -| #81 | End-to-end connection test | ~~Sprint 1 carry-over~~ **done** | -| #356 | Fog data through bridge | Server #112, Client #113 | -| #357 | Sprint 2 proof: fog of perception | All above | +| #356 | Fog data through bridge | #112, #113 | +| #357 | Sprint 2 proof: fog of perception | #356, #116, #25 | Use `db/connectors/ticket show ` for full details. @@ -43,9 +42,9 @@ This is the first moment the game *feels* like an immersive sim — you can't se ## Notes -- **#81 (done):** End-to-end connection test completed in Sprint 1. Full round-trip verified. -- **ObserverSnapshot v2:** The current `ObserverSnapshot` (`server/src/bridge/types.rs`) only has `tick` + `entities: Vec`. Sprint 2 needs: tile visibility data, facing direction, time-of-day. Design the expanded schema before both teams start, so the contract is clear. -- **Fog data through bridge:** Server #112 produces visibility-filtered snapshots. Client #113 consumes them. The bridge already handles MessagePack serialization — new fields just need to be added to both sides. +- **#81 (done):** End-to-end connection test completed in Sprint 1. IPC bridge is operational. +- **#358 (ObserverSnapshot v2):** The current `ObserverSnapshot` (`server/src/bridge/types.rs`) only has `tick` + `entities: Vec`. Sprint 2 needs: tile visibility data, facing direction, time-of-day. Design the expanded schema before both teams start, so the contract is clear. +- **#356 (Fog data through bridge):** Server #112 produces visibility-filtered snapshots. Client #113 consumes them. The bridge already handles MessagePack serialization — new fields just need to be added to both sides. - **Test plan per D-030 Phase 1:** Sprint 2 aligns with D-030's "Phase 1 (sprint 1-2): test infra + collision/pathfinding/time." Collision tests exist (`movement.rs`). Shadowcasting (#110) needs unit tests for known LOS scenarios (corridor, corner peek, wall block). Vision cone (#111) needs sector boundary tests. ## PR Workflow diff --git a/docs/sprints/sprint-2/server.md b/docs/sprints/sprint-2/server.md index 281eb6fb6..2895bd0a5 100644 --- a/docs/sprints/sprint-2/server.md +++ b/docs/sprints/sprint-2/server.md @@ -5,20 +5,21 @@ **Branch:** `server` **Agents:** Dudley (simulation), Oscar (networking) -## Carry-over from Sprint 1 - -| # | Title | Status | Notes | -|---|-------|--------|-------| -| #236 | Tile collision system | ready | WalkabilityMap exists, needs wall data for LOS | - -## New Tickets +## Design Tasks | # | Title | Blocked by | |---|-------|------------| -| #110 | Shadowcasting algorithm - server | #236 (walls needed for LOS) | +| #359 | Resolve Q-018: shadowcasting algorithm selection | — | +| #358 | Design ObserverSnapshot v2 schema | — | + +## Implementation Tickets + +| # | Title | Blocked by | +|---|-------|------------| +| #110 | Shadowcasting algorithm - server | #359 (algorithm decision) | | #111 | Vision cone implementation | #110 | -| #112 | Observer visibility query | #111 | -| #25 | Game clock and day-phase system | — (SimulationTime exists, needs day-phase integration into snapshot) | +| #112 | Observer visibility query | #111, #358 (snapshot schema) | +| #25 | Game clock and day-phase system | #358 (snapshot schema) | Use `db/connectors/ticket show ` for full details. @@ -29,14 +30,14 @@ Use `db/connectors/ticket show ` for full details. ## Open Questions to Resolve Early -- **Q-018: Shadowcasting algorithm selection** — symmetric (Albert Ford) vs recursive. Needs benchmarking at 150x150 scale. Resolve before #110 starts. -- **Q-019: Entity ID stability** — how `entity_id: u64` maps to bevy `Entity`. Affects client entity lifecycle. -- **Q-021: Tick budget overflow policy** — what happens when a tick exceeds 100ms. +- **Q-018 (#359):** Shadowcasting algorithm selection — symmetric (Albert Ford) vs recursive. Needs benchmarking at 150x150 scale. Resolve before #110 starts. +- **Q-019 (#360):** Entity ID stability — how `entity_id: u64` maps to bevy `Entity`. Affects client entity lifecycle. (Joint ticket, blocks #130.) +- **Q-021:** Tick budget overflow policy — what happens when a tick exceeds 100ms. (Not yet ticketed.) ## Notes -- **#236 (carry-over):** `WalkabilityMap` and `validate_movement` are already implemented (`server/src/simulation/movement.rs`). The remaining work is integrating wall/blocked tile data that the shadowcasting algorithm needs. Walls must be both collision barriers AND LOS occluders. -- **#110:** Core of the sprint. Implement LOS calculation per z-level. The `WalkabilityMap` stores tile walkability in chunks — the shadowcasting system reads this (or a parallel opacity map) to determine what blocks vision. Output: set of visible tiles for a given observer position. +- **#236 (Sprint 1, done):** `WalkabilityMap` and `validate_movement` are implemented (`server/src/simulation/movement.rs`). Walls are both collision barriers AND LOS occluders — the shadowcasting system reads the walkability map (or a parallel opacity map) to determine what blocks vision. +- **#110:** Core of the sprint. Implement LOS calculation per z-level. Output: set of visible tiles for a given observer position. - **#111:** Vision cone sectors (forward/peripheral/behind per D-015). Facing direction component needed. Forward = full LOS range, peripheral = reduced range + dimmer, behind = blind. The cone modulates the shadowcast output. - **#112:** Given an observer entity, return visible entities and tiles. This is the system that populates `ObserverSnapshot.entities` with only what the observer can see. Currently the snapshot includes ALL entities (no filtering). This ticket adds the filter. - **#25:** `SimulationTime` already exists (`server/src/simulation/time.rs`) with tick/pause/day-phase. Remaining: include time data in `ObserverSnapshot` so the client can display it. May also need `FacingDirection` component for vision cone. @@ -45,8 +46,9 @@ Use `db/connectors/ticket show ` for full details. ## Dependency Chain ``` -#236 (walls) → #110 (shadowcast) → #111 (vision cone) → #112 (observer query) -#25 (time) → standalone, parallel track +#359 (Q-018) → #110 (shadowcast) → #111 (vision cone) → #112 (observer query) +#358 (snapshot v2) → #112, #113, #25 +#25 (time) → parallel track, blocked by #358 ``` ## PR Workflow From 811a5f8a4cacbca570ca6060020efb3d86891c10 Mon Sep 17 00:00:00 2001 From: Jeroen Schweitzer Date: Wed, 11 Feb 2026 22:55:56 +0100 Subject: [PATCH 2/2] chore(config): track .claude/settings.json in version control Settings.json is the shared team config (distinct from settings.local.json which remains per-user). Remove it from .gitignore so it's tracked. Co-Authored-By: Claude Opus 4.6 --- .claude/settings.json | 6 ++++++ .gitignore | 5 ++--- 2 files changed, 8 insertions(+), 3 deletions(-) create mode 100644 .claude/settings.json diff --git a/.claude/settings.json b/.claude/settings.json new file mode 100644 index 000000000..ec5ce99e9 --- /dev/null +++ b/.claude/settings.json @@ -0,0 +1,6 @@ +{ + "env": { + "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1" + }, + "teammateMode": "in-process" +} diff --git a/.gitignore b/.gitignore index 355e2c107..1ffae9ec9 100644 --- a/.gitignore +++ b/.gitignore @@ -27,8 +27,7 @@ Thumbs.db *.swp *.swo -# Claude Code internals (plans, session transcripts, local settings) -# Note: .claude/agents/ and .claude/skills/ ARE tracked +# Claude Code internals (plans, session transcripts) +# Note: .claude/agents/, .claude/skills/, and .claude/settings.json ARE tracked .claude/plans/ .claude/projects/ -.claude/settings.json