NPC data model, pathfinding, observation events, and interaction foundation. Briefings for server, client, joint, and copy teams. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
7.8 KiB
Sprint 3: Know — Copy Tasks
Goal: Complete the knowledge vocabulary document to unblock content authoring.
Branch: Content work feeds into multiple branches (no code branch) Agents: Mellanie (authoring), Paula (narrative design), Gestalt (systems design)
Carry-over from Sprint 2
| # | Title | Status | Notes |
|---|---|---|---|
| #368 | Knowledge vocabulary for v0.1 content | in_progress | Started Sprint 2, carries to Sprint 3 |
Context
Sprint 2 started the knowledge vocabulary document (docs/design/knowledge-vocabulary-v0.1.md). Sprint 3 completes it.
The knowledge graph data structures are implemented (Sprint 2, tickets #361-367). The observation event pipeline is being built (Sprint 3, ticket #239). The content team needs to define what goes into those containers — the FactIds, EntityKnowledge attribute keys, and RelationshipState transition triggers that actual gameplay content will reference.
Without this vocabulary:
- Mellanie can't write monologue prerequisites (
prerequisite: { suspects: "manifest_discrepancy" }— ismanifest_discrepancya valid FactId?) - Paula can't design NPC profiles with knowledge gates (what
known_attributeskeys exist?) - The observation event generator (#239) can't map NPC behaviors to meaningful triggers (what counts as a "social anomaly"?)
This ticket unblocks content authoring ticket #309 (Sprint 4+) and is the bridge between knowledge graph implementation and actual content.
Assigned Ticket
| # | Title | Priority | Est. | Blocked by |
|---|---|---|---|---|
| #368 | Knowledge vocabulary for v0.1 content (#309) | high | 0.5d | — |
Use db/connectors/ticket show 368 for full details.
What You're Delivering
A design document: docs/design/knowledge-vocabulary-v0.1.md
The document must define:
1. FactId Categories for v0.1
FactId is the identifier for non-entity knowledge (see server/src/knowledge/types.rs lines 21-25). Format: "category.topic" (e.g., "contraband.ring_exists").
Define 15-25 concrete FactIds for v0.1 scope covering:
- Contraband knowledge (ring existence, lattice components, medical-grade replacements, Severance tech per D-037)
- Location knowledge (restricted corridors, smuggling routes, surveillance coverage, span gate schedules)
- Event knowledge (manifest discrepancies, suspicious meetings, evidence discoveries)
- World knowledge (Commission regulations, Syndic supply chains, Sova District context per D-036)
- Relationship knowledge (trust networks, faction allegiances, personal connections)
- Investigation progress (investigation stages, evidence collected, confrontation triggers)
Each FactId must map to the 4-level confidence hierarchy (Suspects / KnowsOf / KnowsDetails / Direct). Example:
contraband.ring_exists
- Suspects: "There's off-the-books cargo moving through here"
- KnowsOf: "There's a smuggling ring operating in Sova"
- KnowsDetails: "Kael, Voss, and Drin are running lattice components through customs bypass"
location.corridor_b7_restricted
- Suspects: "B-7 access is tighter than it should be"
- KnowsOf: "B-7 requires dock credentials after 18:00"
- KnowsDetails: "B-7 is the primary smuggling handoff point, Commission sweeps at shift change"
2. EntityKnowledge Attribute Keys
EntityKnowledge.known_attributes is a BTreeMap<String, String> (see server/src/knowledge/types.rs lines 163-165). Define the canonical keys for v0.1:
- Identity:
name,role,faction,species(human assumed for v0.1) - Social:
relationship_type(colleague, friend, regular, contact, rival),trust_level(low/medium/high) - Behavioral:
routine_pattern(shift worker, bar regular, transient),behavior_flags(avoidant, talkative, nervous, defensive) - Secrets:
secret_held(freeform description),secret_confidence(Suspects/KnowsOf/KnowsDetails) - Investigation:
tell_observed(description of observable tell),contradiction_flagged(yes/no)
Provide 3-5 example EntityKnowledge entries for v0.1 NPCs (Kael Davan, Sera Venn, Lera Sessik, Torek Lintar, Voss Krenn) showing how these keys populate. Use D-034 FRIEND profiles as reference.
3. RelationshipState Transition Patterns
RelationshipState drives entity color rendering (see D-033, server/src/knowledge/types.rs lines 117-140). The enum is:
Unknown(teal)Known(soft green)Friendly(soft green, trusted)PersonOfInterest(amber, flagged by investigation)Hostile(red, character knows there is danger)
Define the canonical transition triggers for v0.1:
Unknown → Known:
- First direct observation with name attribution
- Told about entity by trusted source
Known → Friendly:
- Trust-gated dialogue completed (D-028 Layer 3 "real" tier accessed)
- Multiple positive interactions without contradictions
- Entity provides useful information
Known/Friendly → PersonOfInterest:
- Monologue triggers "something's off" (Suspects-level knowledge about this entity's contradiction)
- Observable tell detected (D-034 tell system)
- Entity avoids specific topics or NPCs
PersonOfInterest → Hostile:
- KnowsDetails-level knowledge of entity's threat to player
- Direct observation of hostile action
- Contradiction confirmed (THE FRIEND arc climax, D-034)
Known/Friendly → Hostile:
- Direct observation of hostile action with no warning
- Emergency trust collapse (rare)
4. Observation Event Trigger Definitions
The observation event generator (#239) needs to know what counts as a "meaningful observation." Define the 5 trigger types with concrete examples:
- Routine deviation: NPC not at expected location during their scheduled time
- Absence detection: Expected NPC missing from usual location
- Social anomaly: Unexpected NPC pairing or avoidance behavior
- New information: First observation of an entity/location/behavior
- Contradiction: Observed behavior conflicts with told information
Each trigger type should map to specific NPC axis data (D-024) and monologue tone.
Key Decisions
decisions/architecture.md— D-041 (Knowledge Graph Data Model — canonical structs)decisions/content.md— D-024 (10-axis NPC model), D-034 (THE FRIEND pattern), D-035 (tag taxonomy), D-036 (Sova setting), D-037 (contraband)decisions/perception.md— D-016 (internal monologue), D-033 (entity color = relationship)
Canonical References
- Knowledge graph structs:
server/src/knowledge/types.rs - Knowledge graph canonical design:
docs/workshops/knowledge-graph-information-boundaries/round2-synthesis.md(Part 3, lines 320-752) - THE FRIEND profiles: D-034 (Kael Davan, Sera Venn)
- Setting details: D-036 (Sova Transit District, Krenn System)
- Contraband details: D-037 (lattice components)
Completion Criteria
The document is complete when:
- All 4 sections (FactIds, EntityKnowledge keys, RelationshipState triggers, Observation triggers) are filled with concrete examples
- Each FactId has confidence-level descriptions
- EntityKnowledge examples cover at least 3 v0.1 NPCs
- RelationshipState transitions map to specific gameplay events
- Observation triggers reference specific NPC axis combinations
This unblocks #309 (content authoring), which is the first monologue/dialogue writing ticket.
Notes
- Sprint 2 progress: If significant work was done in Sprint 2, review and complete remaining sections. If minimal progress, prioritize FactIds and EntityKnowledge keys first (those block #309 most directly).
- Cross-team coordination: Observation event trigger definitions should align with server ticket #239 implementation. Gestalt should coordinate with Dudley on trigger semantics.
- Authoring ergonomics: The vocabulary should be author-friendly. FactIds should read like natural language. Attribute keys should be memorable. Avoid cryptic codes.