Standardized YAML frontmatter on all 10 files. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
17 KiB
title, description, type, status, workshop, agent, round, created
| title | description | type | status | workshop | agent | round | created |
|---|---|---|---|---|---|---|---|
| Sprint 2 Impact Summary — Knowledge Graph Workshop | Sprint 2 scope impact analysis with 8 new tickets, critical path changes, and risk assessment | workshop | archived | knowledge-graph-information-boundaries | 0 | 2026-02-11 |
Sprint 2 Impact Summary — Knowledge Graph Workshop
Date: 2026-02-11 Author: SI (Project Manager) Source: Workshop synthesis (round2-synthesis.md)
Executive Summary
The Knowledge Graph Workshop (#351) has been reconciled into Sprint 2 scope. 8 new tickets added to Sprint 2, all under epic #351. Sprint scope expands from 14 to 22 tickets, adding approximately 6.5 developer-days of work.
Critical path impact: New tickets #361, #362, and #366 block #112 (Observer visibility query), which is already on the critical path. Knowledge graph work is now part of Sprint 2's critical path, not parallel to it.
Risk level: MEDIUM. Knowledge graph stub must ship with Sprint 2 proof (#357), but full implementation (gossip, inference, contradiction detection) is correctly deferred to Sprint 3+.
New Tickets Added (8 total)
All tickets created as children of #351 (Knowledge Graph Workshop epic), assigned to Sprint 2.
| # | Title | Type | Priority | Team | Estimate | Blocks |
|---|---|---|---|---|---|---|
| #361 | Implement KnowledgeGraph component + types (D-041) | story | critical | server | 1 day | #112 |
| #362 | StableEntityId component + EntityRegistry resource | story | critical | server | 1 day | #112, #360 |
| #363 | KnowledgeEventQueue + processing system | story | high | server | 0.5 day | #112 |
| #364 | Direct observation knowledge flow | story | critical | server | 0.5 day | #112 |
| #365 | Basic knowledge decay system | story | high | server | 0.5 day | - |
| #366 | Observer snapshot knowledge integration | task | critical | joint | 1 day | #358, #356 |
| #367 | Knowledge graph unit test suite | task | high | server | 1 day | - |
| #368 | Knowledge vocabulary for v0.1 content | task | high | content | 0.5 day | #309 |
Total added effort: ~6.5 developer-days (per synthesis Part 7)
Backlog Ticket Reconciliation
Tickets Cancelled
| # | Title | Reason |
|---|---|---|
| #89 | Information inventory | Subsumed by #361 (KnowledgeGraph component). The Vec<String> placeholder is replaced by the full knowledge graph data model. |
Tickets Marked Done
| # | Title | Reason |
|---|---|---|
| #269 | CauseChain component | Already implemented per audit report (server/src/cause_chain.rs). Integration with knowledge system is Sprint 3+ work. |
Tickets Requiring Reparenting (SQL Updates Needed)
The following tickets are children of #49 (Information Boundary System epic) but should be reparented under #351 or updated with new dependencies:
| # | Current Parent | Action Required | Rationale |
|---|---|---|---|
| #138 | #49 | Reparent to #351 | Information tag schema = KnowledgeConfidence + FactId system (D-041) |
| #139 | #49 | Reparent to #351, defer to Sprint 3 | Component-level access control depends on knowledge system |
| #140 | #49 | Reparent to #351, merge into #366 | Entity visibility filtering IS the observer snapshot integration |
| #141 | #49 | Reparent to #351, defer to Sprint 3 | Knowledge-based gating requires dialogue system + knowledge queries |
| #142 | #49 | Reparent to #351, defer to Sprint 3 | NPC boundaries = KnowledgeGraph per NPC, but enforcement is Sprint 3 |
SQL commands required:
UPDATE tickets SET parent_id = 351 WHERE id IN (138, 139, 140, 141, 142);
UPDATE tickets SET status = 'backlog', sprint_id = NULL WHERE id IN (139, 141, 142); -- Defer to Sprint 3
UPDATE tickets SET status = 'cancelled' WHERE id = 140; -- Merged into #366
Tickets With New Dependencies
| # | Title | New Dependency | Reason |
|---|---|---|---|
| #309 | Knowledge state vocabulary for v0.1 | Unblocked by #368 | D-041 Appendix A provides the vocabulary taxonomy |
| #182 | Divergent starting knowledge | Depends on #361 | Starting knowledge = KnowledgeGraph::with_background() |
| #360 | Resolve Q-019: entity ID stability | Partially resolved by #362 | Server-side stable IDs now defined, client mapping remains open |
SQL commands required:
-- Add blocking relationships
INSERT INTO ticket_deps (blocker_id, blocked_id) VALUES (361, 112); -- KnowledgeGraph blocks observer query
INSERT INTO ticket_deps (blocker_id, blocked_id) VALUES (362, 112); -- StableEntityId blocks observer query
INSERT INTO ticket_deps (blocker_id, blocked_id) VALUES (362, 360); -- StableEntityId partially resolves Q-019
INSERT INTO ticket_deps (blocker_id, blocked_id) VALUES (366, 358); -- Snapshot integration blocked by schema design
INSERT INTO ticket_deps (blocker_id, blocked_id) VALUES (366, 356); -- Snapshot integration blocks bridge ticket
INSERT INTO ticket_deps (blocker_id, blocked_id) VALUES (368, 309); -- Vocabulary document unblocks content ticket
INSERT INTO ticket_deps (blocker_id, blocked_id) VALUES (361, 182); -- KnowledgeGraph blocks divergent starting knowledge
Updated Sprint 2 Critical Path
Before Workshop
#359 (Q-018) → #110 (shadowcast) → #111 (vision cone) → #112 (observer query) → #356 (bridge) → #357 (proof)
Critical path length: 6 tickets serial
After Workshop
#359 (Q-018) → #110 (shadowcast) → #111 (vision cone) →
↓
#361 (KnowledgeGraph) → #362 (StableEntityId) → #363 (EventQueue) → #364 (Direct obs) →
↓
#366 (Snapshot integration) → #112 (observer query) →
↓
#356 (bridge) → #357 (proof)
Critical path length: 10 tickets serial (4 new knowledge tickets added to critical path)
Parallel Tracks (Unchanged)
- Client rendering: #116, #129, #130, #131, #113 (mostly independent until #113 waits on #112)
- Time system: #358 → #25 → #357
- Knowledge testing/docs: #367, #368 (can run parallel to implementation)
Sprint Scope Assessment
Baseline Sprint 2 Scope (Before Workshop)
- 14 tickets across 3 tracks (server, client, joint)
- Critical path: 6 tickets serial
- Estimated effort: ~10-12 developer-days (not explicitly estimated pre-workshop)
New Sprint 2 Scope (After Workshop)
- 22 tickets (+8 knowledge graph tickets)
- Critical path: 10 tickets serial (+4 on critical path)
- Estimated effort: ~16-18 developer-days (+6.5 from knowledge graph)
Sprint Capacity Analysis
Assumption: 2-week sprint, 2 full-time developers (Dudley + Oscar on server, Stig on client)
- Available capacity: ~20 developer-days (2 devs × 10 days, assuming 50% utilization for blockers/reviews/overhead)
- Estimated work: ~16-18 developer-days
- Buffer: ~2-4 days
Verdict: Sprint scope is achievable but TIGHT. No room for scope creep. Knowledge graph stub must ship as-is — no feature additions beyond Sprint 2 scope.
Risks and Mitigations
RISK 1: Critical Path Extended by 4 Tickets
Severity: HIGH
Impact: Knowledge graph tickets #361, #362, #363, #364 are now serially dependent and block #112. If any knowledge ticket slips, #112 slips, and the entire sprint slips.
Mitigation:
- Prioritize #361 (KnowledgeGraph) as first sprint task (day 1-2)
- #362 (StableEntityId) starts immediately after #361 (day 2-3)
- #363 and #364 are smaller (0.5 day each) and can be parallelized across team members
- #366 (snapshot integration) is joint ticket — assign to Oscar (networking) to avoid blocking Dudley on server work
Owner: SI (sprint tracking), Dudley (server lead)
RISK 2: #112 Interface Contract Not Defined Until Week 2
Severity: MEDIUM
Impact: #112 (Observer visibility query) needs the knowledge graph query interface from #361. If #361 is delayed or incomplete, #112 cannot start.
Mitigation:
- D-041 synthesis Part 5 defines the interface contract explicitly (lines 219-269)
- #112 implementation can reference the synthesis while #361 is in progress
- Interface is simple:
knows_entity(),relationship_with(),known_entities_iter()— low risk of misinterpretation
Status: Mitigated by synthesis clarity. No blocker expected.
RISK 3: Stub vs Full Implementation Scope Creep
Severity: MEDIUM
Impact: Knowledge graph has many deferred features (gossip, inference, contradiction detection). Risk that developers implement more than Sprint 2 scope during #361.
Mitigation:
- Synthesis Part 7 explicitly defines Sprint 2 scope: data structures + direct observation + basic decay. No gossip, no inference.
- #361 ticket description references D-041 Part 3 (structs) — implementation is struct definition, not full systems
- Sprint 2 success criteria:
observe_entity()works, relationship color appears in snapshot, remembered entities render as ghosts. That's it.
Owner: Dudley (server), SI (scope enforcement)
RISK 4: Testing Effort Underestimated
Severity: LOW
Impact: #367 (unit tests) is 1 day estimate, but knowledge graph has complex state (confidence levels, decay, serialization). 1 day may not be enough.
Mitigation:
- D-041 synthesis explicitly calls out test scenarios: CRUD, decay, confidence ordering, serialization roundtrip
- If #367 slips, move to Sprint 3 — knowledge graph ships without full test coverage initially
- Integration testing via Sprint 2 proof (#357) provides baseline validation
Owner: Dudley (implementation + tests)
Sprint Completion Criteria (Updated)
Sprint 2 is DONE when:
- Player character moves on screen (Sprint 1 baseline, maintained) ✓
- Camera follows the player character (no panning) (#116) ✓
- Tiles render from snapshot data (floor + walls visible) (#129) ✓
- Entities appear/disappear based on line-of-sight (#110, #111, #112) ✓
- Fog covers areas outside the vision cone (#131, #113) ✓
- Walking behind a wall hides what's on the other side (#110, #112) ✓
- Walking around a corner reveals what's there (#110, #112) ✓
- [NEW] Entity color reflects relationship state from knowledge graph (#361, #366) ✓
- [NEW] 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 = person of interest).
Open Questions (Not Sprint 2 Blockers)
From synthesis Part 9:
| Question | Description | Sprint Impact |
|---|---|---|
| Q-024 | Gossip propagation timing (immediate vs queued) | Sprint 3+ decision |
| Q-025 | Knowledge graph cap and eviction policy | Sprint 3+ optimization |
| Q-026 | Contradiction detection algorithm | Sprint 3+ (THE FRIEND arc) |
None of these block Sprint 2. Defer to Sprint 3 planning.
Recommendations
For Sprint Planning
- Prioritize #361 as first sprint task. Everything depends on the KnowledgeGraph struct existing. Start day 1.
- Assign #366 (snapshot integration) to Oscar. Dudley is overloaded on server critical path. Oscar can handle joint ticket after #358 (snapshot schema) is done.
- Defer #367 (tests) if needed. If sprint runs tight, ship #361-#366 without full test coverage. Tests can be Sprint 3 follow-up.
- Track critical path daily. With 10 serial tickets, 1-day slip = sprint slip. Daily standup must surface blockers immediately.
For Epic #49 (Information Boundary System)
Epic #49 now overlaps significantly with #351 (Knowledge Graph Workshop). Post-sprint, consolidate:
- Mark #49 as superseded by #351, OR
- Re-scope #49 as "client-facing information UI" (journal, knowledge display) while #351 owns the data model
Owner: SI (post-sprint cleanup), Tyre (architecture reconciliation)
Files Updated
- New tickets: #361-#368 created, assigned to Sprint 2
- Cancelled tickets: #89 (information inventory)
- Done tickets: #269 (CauseChain)
- Reparenting needed: #138, #139, #140, #141, #142 (SQL updates required)
- New dependencies: See "Tickets With New Dependencies" section above
SQL Updates Required (Permission Denied — Manual Execution Needed)
The following SQL commands need to be executed manually (ticket CLI does not support reparenting or dependency addition):
-- Reparent information boundary tickets under #351
UPDATE tickets SET parent_id = 351, updated_at = datetime('now') WHERE id IN (138, 139, 140, 141, 142);
-- Defer Sprint 3+ tickets
UPDATE tickets SET status = 'backlog', sprint_id = NULL, updated_at = datetime('now') WHERE id IN (139, 141, 142);
-- Cancel #140 (merged into #366)
UPDATE tickets SET status = 'cancelled', updated_at = datetime('now') WHERE id = 140;
-- Add ticket descriptions for new tickets
UPDATE tickets SET description = 'Full KnowledgeGraph component with BTreeMap<StableId, EntityKnowledge> and BTreeMap<FactId, FactKnowledge>. Includes KnowledgeConfidence (4 levels), KnowledgeState (3 variants), KnowledgeSource enums. All types per D-041 synthesis Part 3. Sprint 2 uses DirectObservation and Background sources only. Estimate: 1 day.', updated_at = datetime('now') WHERE id = 361;
UPDATE tickets SET description = 'StableEntityId component and EntityRegistry resource for bidirectional StableId <-> Entity mapping. Assigns stable IDs at spawn, survives save/load. Partially resolves Q-019. Estimate: 1 day.', updated_at = datetime('now') WHERE id = 362;
UPDATE tickets SET description = 'Event-driven knowledge updates. KnowledgeEventQueue resource + processing system drains queue per tick. Decouples perception from knowledge writes. Estimate: 0.5 day.', updated_at = datetime('now') WHERE id = 363;
UPDATE tickets SET description = 'Perception system calls observe_entity() when entity in LOS, observe_entity_leaving_los() when exits. Sets Direct confidence, downgrades to KnowsDetails on departure. Estimate: 0.5 day.', updated_at = datetime('now') WHERE id = 364;
UPDATE tickets SET description = 'Knowledge decay pass once per game-minute (every 10 ticks per D-031). Configurable via DecayThresholds resource. Downgrades confidence based on tick age. Does not generate Stale state yet (Sprint 3). Estimate: 0.5 day.', updated_at = datetime('now') WHERE id = 365;
UPDATE tickets SET description = 'Observer visibility query (#112) reads KnowledgeGraph to: 1) overlay relationship color on visible entities, 2) include remembered (not visible) entities in snapshot. Implements interface from D-041 Part 5. Estimate: 1 day.', updated_at = datetime('now') WHERE id = 366;
UPDATE tickets SET description = 'Unit tests for CRUD operations, decay mechanics, confidence ordering, serialization roundtrip, relationship state transitions. Estimate: 1 day.', updated_at = datetime('now') WHERE id = 367;
UPDATE tickets SET description = 'Content authoring vocabulary document from D-041 Appendix A. Entity knowledge categories (identity, location, behavior, relationship, secret, contraband), world knowledge categories, prerequisite format for D-035 integration. Unblocks content team ticket #309. Estimate: 0.5 day.', updated_at = datetime('now') WHERE id = 368;
-- Add blocking dependencies
INSERT INTO ticket_deps (blocker_id, blocked_id) VALUES (361, 112); -- KnowledgeGraph blocks observer query
INSERT INTO ticket_deps (blocker_id, blocked_id) VALUES (362, 112); -- StableEntityId blocks observer query
INSERT INTO ticket_deps (blocker_id, blocked_id) VALUES (362, 360); -- StableEntityId partially resolves Q-019
INSERT INTO ticket_deps (blocker_id, blocked_id) VALUES (366, 358); -- Snapshot integration blocked by schema design
INSERT INTO ticket_deps (blocker_id, blocked_id) VALUES (366, 356); -- Snapshot integration blocks bridge ticket
INSERT INTO ticket_deps (blocker_id, blocked_id) VALUES (368, 309); -- Vocabulary document unblocks content ticket
INSERT INTO ticket_deps (blocker_id, blocked_id) VALUES (361, 182); -- KnowledgeGraph blocks divergent starting knowledge
Execute via: db/connectors/sqlite-exec "<command>" for each UPDATE/INSERT statement (requires bash permission restoration)
Next Steps
- Execute SQL updates (requires manual intervention — bash permission denied during reconciliation)
- Update sprint briefings with new ticket IDs (#361-#368)
- Communicate critical path changes to team (standup: knowledge graph is now on critical path)
- Begin #361 implementation immediately (day 1 of sprint)
- Schedule daily critical path reviews (10 serial tickets = daily tracking required)
End of Sprint 2 Impact Summary
Files referenced:
/var/mnt/data/projects/settled-reach/planning/docs/workshops/knowledge-graph-information-boundaries/round2-synthesis.md/var/mnt/data/projects/settled-reach/planning/docs/sprints/sprint-2/server.md/var/mnt/data/projects/settled-reach/planning/docs/sprints/sprint-2/joint.md/var/mnt/data/projects/settled-reach/planning/docs/sprints/sprint-2/client.md/var/mnt/data/projects/settled-reach/planning/db/connectors/ticket(CLI used for ticket operations)