docs(workshops): complete Knowledge Graph & Information Boundaries workshop

Two-round workshop producing D-041 (Knowledge Graph Data Model):
- Round 1: independent analyses from Dudley, Gestalt, SI, Tyre, Paula
- Round 2: synthesis resolving debates + Gestalt mechanics validation

Key decisions:
- 4-level confidence hierarchy (Suspects < KnowsOf < KnowsDetails < Direct)
- BTreeMap for deterministic iteration (D-010 principle 4)
- Per-entity Component model, not centralized Resource
- StableEntityId + EntityRegistry for save/load stability (partial Q-019)
- Sprint 2 stub: structs + direct observation + basic decay (~6.5 dev-days)

Resolved Q-016 (knowledge hierarchy), raised Q-024/Q-025/Q-026.
Created tickets #361-#368 under epic #351, reconciled #49 children.
Updated sprint 2 briefings, agent briefings, and decision files.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-11 23:24:37 +01:00
co-authored by Claude Opus 4.6
parent c065d98325
commit 93abd9b9d0
19 changed files with 6137 additions and 38 deletions
+3 -3
View File
@@ -11,7 +11,7 @@
|---|-------|------------|
| #116 | Camera lock to character | — |
| #129 | Tile rendering engine | — |
| #130 | Entity sprite management | — |
| #130 | Entity sprite management | #360 (entity ID stability, partially resolved by #362) |
| #131 | Fog overlay rendering | #129 (needs tile layer to overlay) |
| #113 | Fog rendering - client | #131 (rendering layer), server #112 (fog data in snapshot) |
@@ -20,14 +20,14 @@ Use `db/connectors/ticket show <id>` for full details.
## Key Decisions
- `decisions/perception.md` — D-015 (camera locked, no panning), D-011 (fog of perception), D-019 (top-down camera)
- `decisions/architecture.md` — D-020 (ObserverSnapshot drives all rendering)
- `decisions/architecture.md` — D-020 (ObserverSnapshot drives all rendering), D-041 (Knowledge Graph — entity color from relationship state)
- `decisions/scope.md` — D-014 (v0.1 map spec: ~150x150, 2-3 z-levels, fog + LOS)
## Notes
- **#116:** Camera follows player character position. No panning, no rotation (v0.1). The `GameState.player_position` already tracks position — camera just needs to center on it smoothly. Use `Camera2D` with smoothing. Existing `main.gd` handles input; camera attaches to the player entity's position.
- **#129:** Multi-layer tilemap rendering from snapshot data. Currently the client renders entities as `ColorRect` placeholders (`client/scripts/rendering/entity_renderer.gd`). This ticket adds a `TileMapLayer` (or multiple layers) for floor/walls/objects. Tiles come from the `ObserverSnapshot` — the client draws what the server says is visible. Placeholder art: colored rectangles with labels (D-014: "functional boxes with labels").
- **#130:** Upgrade entity rendering from `ColorRect` to proper sprite management. Animation states (idle, walk). Entity color based on relationship state (D-033: unknown=teal, known=green, POI=amber, hostile=red). Facing direction indicator. Builds on existing `entity_renderer.gd`.
- **#130:** Upgrade entity rendering from `ColorRect` to proper sprite management. Animation states (idle, walk). Entity color based on relationship state from knowledge graph (D-033: unknown=teal, known=green, POI=amber, hostile=red; D-041: KnowledgeGraph drives relationship color). Facing direction indicator. Remembered (not-visible) entities render as ghosts. Builds on existing `entity_renderer.gd`.
- **#131:** Fog overlay on the tile layer. Three visibility states: visible (clear), fog-edge (dimmed), hidden (dark/black). Driven by `visible_tiles` data from `ObserverSnapshot`. This is the rendering half of the fog system — the server (#112) determines what's visible, the client draws the fog.
- **#113:** Integration of server fog data into the client fog renderer. The existing `fog_renderer.gd` is a stub. This ticket connects it to actual visibility data from the snapshot. Fog returns when you leave an area (time-based decay, tracked client-side from last-seen tick).
- **WorldRenderer:** The existing `world_renderer.gd` orchestrates entity + fog rendering. It already calls `entity_renderer.update_entities()` and `fog_renderer.update_fog()` — the stubs just need real implementations.
+19 -3
View File
@@ -9,22 +9,34 @@
| # | 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 |
| #360 | Resolve Q-019: entity ID stability | joint (Tyre, Dudley) | #130 (partially resolved by #362) |
| #358 | Design ObserverSnapshot v2 schema | joint (Tyre) | #112, #113, #25 |
## Knowledge Graph Integration Tickets (from Workshop #351, D-041)
| # | Title | Priority | Est. | Blocks |
|---|-------|----------|------|--------|
| #366 | Observer snapshot knowledge integration | critical | 1d | #356 |
| #368 | Knowledge vocabulary for v0.1 content | high | 0.5d | #309 |
**#366** integrates KnowledgeGraph queries into ObserverSnapshot: entity color from relationship state + remembered entities as ghosts. Assign to Oscar to avoid blocking Dudley on server critical path.
**#368** provides the content authoring vocabulary from D-041 Appendix A, unblocking Mellanie on #309.
## Integration Tickets
| # | Title | Blocked by |
|---|-------|------------|
| #356 | Fog data through bridge | #112, #113 |
| #356 | Fog data through bridge | #112, #113, #366 |
| #357 | Sprint 2 proof: fog of perception | #356, #116, #25 |
Use `db/connectors/ticket show <id>` for full details.
## Key Decisions
- `decisions/architecture.md` — D-020 (IPC protocol, ObserverSnapshot), D-010 (information boundaries)
- `decisions/architecture.md` — D-020 (IPC protocol, ObserverSnapshot), D-010 (information boundaries), D-041 (Knowledge Graph Data Model)
- `decisions/perception.md` — D-011 (fog non-negotiable), D-015 (vision cone)
- `docs/workshops/knowledge-graph-information-boundaries/round2-synthesis.md` — canonical reference for D-041
## Sprint Completion Proof
@@ -37,6 +49,10 @@ Use `db/connectors/ticket show <id>` for full details.
5. Fog covers areas outside the vision cone
6. Walking behind a wall hides what's on the other side
7. Walking around a corner reveals what's there
8. Entity color reflects relationship state from knowledge graph (#361, #366)
9. Remembered (not visible) entities appear as ghosts with faded color (#361, #366)
**Knowledge graph proof:** Observe an NPC, walk away, return. The NPC appears as a ghost at last-known position while not in LOS. Color shifts based on relationship state (green = known, amber = flagged).
This is the first moment the game *feels* like an immersive sim — you can't see behind walls, and that constraint IS the game.
+23 -4
View File
@@ -18,15 +18,29 @@
|---|-------|------------|
| #110 | Shadowcasting algorithm - server | #359 (algorithm decision) |
| #111 | Vision cone implementation | #110 |
| #112 | Observer visibility query | #111, #358 (snapshot schema) |
| #112 | Observer visibility query | #111, #358, #361, #362 |
| #25 | Game clock and day-phase system | #358 (snapshot schema) |
## Knowledge Graph Tickets (from Workshop #351, D-041)
| # | Title | Priority | Est. | Blocked by |
|---|-------|----------|------|------------|
| #361 | Implement KnowledgeGraph component + types | critical | 1d | — |
| #362 | StableEntityId + EntityRegistry resource | critical | 1d | — |
| #363 | KnowledgeEventQueue + processing system | high | 0.5d | — |
| #364 | Direct observation knowledge flow | critical | 0.5d | — |
| #365 | Basic knowledge decay system | high | 0.5d | — |
| #367 | Knowledge graph unit test suite | high | 1d | — |
**Start #361 and #362 on day 1.** Both block #112 (observer visibility query). See `decisions/architecture.md` D-041 for canonical struct definitions.
Use `db/connectors/ticket show <id>` for full details.
## Key Decisions
- `decisions/perception.md` — D-011 (fog non-negotiable), D-015 (locked camera + vision cone), D-018 (three-range sound model)
- `decisions/architecture.md` — D-010 (information boundaries), D-020 (ObserverSnapshot), D-031 (time system)
- `decisions/architecture.md` — D-010 (information boundaries), D-020 (ObserverSnapshot), D-031 (time system), D-041 (Knowledge Graph Data Model)
- `docs/workshops/knowledge-graph-information-boundaries/round2-synthesis.md` — canonical reference for knowledge graph structs and Sprint 2 scope
## Open Questions to Resolve Early
@@ -46,9 +60,14 @@ Use `db/connectors/ticket show <id>` for full details.
## Dependency Chain
```
#359 (Q-018) → #110 (shadowcast) → #111 (vision cone) → #112 (observer query)
#358 (snapshot v2) → #112, #113, #25
#359 (Q-018) → #110 (shadowcast) → #111 (vision cone) ──┐
#361 (KnowledgeGraph) ─┬─→ #112 (observer query) → ... │
#362 (StableEntityId) ─┘ │
#358 (snapshot v2) → #112, #113, #25 ────────────────────┘
#25 (time) → parallel track, blocked by #358
Knowledge graph parallel track:
#361, #362 (day 1-3, no blockers) → #363, #364 (day 3-4) → #365, #367 (parallel)
```
## PR Workflow