content(wiki): purge v0.1 Sova/Van Maanen residue (#865)
Spring-cleaning accumulated v0.1 vertical-slice residue across the wiki. Scope per Jeroen's pre-decisions on 2026-04-21: - Delete outright: wiki/star-systems/GJ-35/sova/ subtree (5 files + 2 dirs) — v0.1 Station Sova / Transit District content. - Strip example blocks in authoring guides and _templates/ that cited dropped v0.1 NPCs (Kael Davan, Sera Venn, Nils Davan, Devra, Torek, Renn, Pell, Tav, Lera Sessik, Sabel). Replaced with short "v0.1 examples removed — D-122" notes pointing authors to the active NPC roster. - Rewrite canonical-lore references file-by-file: faction pages, technology pages, contraband pages, concepts pages, corp pages that cited v0.1 names/places. Preserve institutional/structural content, drop specific-name citations. - Commission name drift: replace "Concord Commission" and "Assembly Commission" with "the Lattice Commission" (D-193) throughout. - Van Maanen's Star cultural references: the canonical in-game name is Vuurkloof. "Van Maanen's Star" is retained only as an astronomical designation (glossary + GJ-35 Calibration Note). All cultural/system references converted to Vuurkloof across culture-authoring-guide, cultural-generation-guide, founder-gates, and star-system adjacent-system descriptions. - Strip `v0.1` from faction/triangle frontmatter tags (8 files). - wiki/triangles/hub-power.md and wiki/factions/the-ring.md: rewritten using role-name exemplars (Ring Coordinator / Shift Supervisor / THE FRIEND) instead of named v0.1 NPCs. Triangle pattern preserved as a structural reference. Also applies drive-by Commission drift fixes and minor cross-ref updates to canonical corps (gate-corporation, mastroianni-vehicle-group, stalownia-kowalski, prometheus-labs, ferreira-monteiro, vins-de-grand-vide, and 13 others). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -38,11 +38,11 @@ The knowledge graph uses these attributes to determine:
|
||||
**Value format**: Full name as known to the observer.
|
||||
|
||||
**Examples**:
|
||||
- `"Kael Davan"` — observer knows full name
|
||||
- `"Kael"` — observer knows first name only
|
||||
- `"{NPC Full Name}"` — observer knows full name
|
||||
- `"{First Name}"` — observer knows first name only
|
||||
- `"the dock worker"` — observer doesn't know name, only role
|
||||
|
||||
**Usage**: Monologue and dialogue rendering. If `name` is absent or generic, monologue says "the dock worker" instead of "Kael."
|
||||
**Usage**: Monologue and dialogue rendering. If `name` is absent or generic, monologue uses role description.
|
||||
|
||||
---
|
||||
|
||||
@@ -66,7 +66,7 @@ The knowledge graph uses these attributes to determine:
|
||||
**Value format**: Institutional or organizational allegiance.
|
||||
|
||||
**Examples**:
|
||||
- `"Commission"` — Sera, Torek, Detective
|
||||
- `"Commission"` — institutional contacts, inspectors, detective
|
||||
- `"civilian"` — most NPCs
|
||||
- `"ring member"` — if discovered
|
||||
- `"unknown"` — not yet determined
|
||||
@@ -77,13 +77,13 @@ The knowledge graph uses these attributes to determine:
|
||||
|
||||
### `species`
|
||||
|
||||
**Value format**: Species identifier (future-proofing — v0.1 is all human).
|
||||
**Value format**: Species identifier.
|
||||
|
||||
**Examples**:
|
||||
- `"human"` (default)
|
||||
- (Future: other species as defined)
|
||||
|
||||
**Usage**: Not load-bearing in v0.1. Placeholder for future non-human NPCs.
|
||||
**Usage**: Future-proofing for non-human NPCs.
|
||||
|
||||
---
|
||||
|
||||
@@ -94,11 +94,11 @@ The knowledge graph uses these attributes to determine:
|
||||
**Value format**: Relationship category from observer's perspective.
|
||||
|
||||
**Examples**:
|
||||
- `"colleague"` — Kael to smuggler
|
||||
- `"friend"` — Sera to detective
|
||||
- `"authority figure"` — Voss to subordinates
|
||||
- `"suspect"` — Kael to detective (post-discovery)
|
||||
- `"partner"` — Naia to Kael
|
||||
- `"colleague"` — ring member to fellow ring member
|
||||
- `"friend"` — institutional contact to detective
|
||||
- `"authority figure"` — shift supervisor to subordinates
|
||||
- `"suspect"` — ring member to detective (post-discovery)
|
||||
- `"partner"` — non-ring partner to ring member
|
||||
- `"stranger"` — new NPCs
|
||||
|
||||
**Usage**: Drives `RelationshipState` calculation (Unknown/Known/Friendly/PersonOfInterest/Hostile). Determines emotional tone of monologue.
|
||||
@@ -142,9 +142,9 @@ The knowledge graph uses these attributes to determine:
|
||||
**Value format**: Comma-separated behavioral observations.
|
||||
|
||||
**Examples**:
|
||||
- `"nervous,lattice_checking"` — Kael during contradiction arc
|
||||
- `"avoidance_pattern,evasive"` — Sera avoiding Torek
|
||||
- `"spending_beyond_means"` — Torek buying rounds
|
||||
- `"nervous,lattice_checking"` — ring member showing stress during contradiction arc
|
||||
- `"avoidance_pattern,evasive"` — contact avoiding a suspect
|
||||
- `"spending_beyond_means"` — inspector buying rounds on a dock worker's income
|
||||
- `"reliable,punctual"` — baseline normal behavior
|
||||
|
||||
**Usage**: Tell system. Multiple flags accumulate as evidence. Detective's analytical lattice auto-flags some behaviors.
|
||||
@@ -158,11 +158,11 @@ The knowledge graph uses these attributes to determine:
|
||||
**Value format**: What the observer believes gives them (or could give them) power over this entity. This covers secrets, debts, promises, obligations, and compromising positions — not just secrets. Any information or relationship that creates asymmetric power over the target qualifies as leverage.
|
||||
|
||||
**Examples**:
|
||||
- `"ring membership"` — detective's suspicion about Kael (secret)
|
||||
- `"unreported evidence"` — smuggler's read on Sera (concealed information)
|
||||
- `"gambling debt"` — if Drin's vulnerability is discovered (financial obligation)
|
||||
- `"exit attempt"` — if Kael's unauthorized contact is discovered (betrayal)
|
||||
- `"owes favor to Voss"` — social obligation
|
||||
- `"ring membership"` — detective's suspicion about a cargo handler (secret)
|
||||
- `"unreported evidence"` — smuggler's read on an institutional contact (concealed information)
|
||||
- `"gambling debt"` — if a peripheral member's vulnerability is discovered (financial obligation)
|
||||
- `"exit attempt"` — if a ring member's unauthorized contact is discovered (betrayal)
|
||||
- `"owes favor to supervisor"` — social obligation
|
||||
- `"witnessed the handoff"` — compromising position
|
||||
|
||||
**Usage**: Drives PersonOfInterest state. Gates confrontation dialogue. Smuggler and detective track different leverage about the same NPCs. The broader scope (beyond secrets) allows content authors to capture debts, promises, and obligations that create power dynamics without requiring additional keys.
|
||||
@@ -189,8 +189,8 @@ The knowledge graph uses these attributes to determine:
|
||||
**Value format**: Specific tell noted by the observer.
|
||||
|
||||
**Examples**:
|
||||
- `"looks left when lying"` — Kael's tell
|
||||
- `"leaves when Torek arrives"` — Sera's avoidance
|
||||
- `"looks left when lying"` — ring member's tell
|
||||
- `"leaves when inspector arrives"` — contact's avoidance
|
||||
- `"checks lattice before answering"` — nervous behavior
|
||||
- `"forced casualness after shift supervisor passes"` — hypervigilance
|
||||
|
||||
@@ -205,9 +205,9 @@ The knowledge graph uses these attributes to determine:
|
||||
**Value format**: Boolean-ish flag (presence of key = true).
|
||||
|
||||
**Examples**:
|
||||
- `"meeting_unknown_contact"` — Kael contradiction
|
||||
- `"avoidance_inconsistency"` — Sera contradiction
|
||||
- `"manifest_access_mismatch"` — Maret handling cargo she shouldn't process
|
||||
- `"meeting_unknown_contact"` — {THE FRIEND} smuggler path contradiction
|
||||
- `"avoidance_inconsistency"` — {THE FRIEND} detective path contradiction
|
||||
- `"manifest_access_mismatch"` — manifest clerk handling cargo they shouldn't process
|
||||
|
||||
**Usage**: THE FRIEND arc trigger. When this attribute is set, monologue tone shifts. Dialogue options change. RelationshipState moves toward PersonOfInterest.
|
||||
|
||||
@@ -226,9 +226,9 @@ These four keys capture the observer's subjective assessment of the target throu
|
||||
**Values**: `none`, `low`, `moderate`, `high`, `critical`.
|
||||
|
||||
**Examples**:
|
||||
- Smuggler's assessment of Pell (wavering member) = `"high"` (unpredictable, could expose the ring)
|
||||
- Detective's assessment of Voss = `"moderate"` (obstructive but not directly dangerous)
|
||||
- Smuggler's assessment of Naia = `"low"` (uninvolved, unlikely to cause exposure)
|
||||
- Smuggler's assessment of a wavering ring member = `"high"` (unpredictable, could expose the ring)
|
||||
- Detective's assessment of the shift supervisor = `"moderate"` (obstructive but not directly dangerous)
|
||||
- Smuggler's assessment of an uninvolved partner = `"low"` (unlikely to cause exposure)
|
||||
|
||||
**Usage**: Gates operational monologue. High-risk targets trigger cautionary internal dialogue. Critical-risk targets may trigger evasion or preemptive action. The nature of "risk" depends on the archetype (see interpretation note).
|
||||
|
||||
@@ -241,9 +241,9 @@ These four keys capture the observer's subjective assessment of the target throu
|
||||
**Values**: `solid`, `dependable`, `uncertain`, `wavering`, `hostile`.
|
||||
|
||||
**Examples**:
|
||||
- Smuggler's assessment of Renn (courier) = `"dependable"` (reliable, follows instructions)
|
||||
- Smuggler's assessment of Kael (mid-game) = `"wavering"` (showing signs of doubt)
|
||||
- Detective's assessment of Sera = `"solid"` (committed to the investigation)
|
||||
- Smuggler's assessment of the courier = `"dependable"` (reliable, follows instructions)
|
||||
- Smuggler's assessment of {THE FRIEND} mid-game = `"wavering"` (showing signs of doubt)
|
||||
- Detective's assessment of their institutional contact = `"solid"` (committed to the investigation)
|
||||
|
||||
**Usage**: Determines how much the observer relies on or confides in the target. Wavering loyalty triggers monitoring behavior. Hostile loyalty triggers defensive or adversarial posture.
|
||||
|
||||
@@ -256,7 +256,7 @@ These four keys capture the observer's subjective assessment of the target throu
|
||||
**Values**: `solid`, `thin`, `cracking`, `blown`, `N/A`.
|
||||
|
||||
**Examples**:
|
||||
- Ring member's assessment of Kael = `"thin"` (behavior changes are visible to anyone watching)
|
||||
- Ring member's assessment of a compromised colleague = `"thin"` (behavior changes are visible to anyone watching)
|
||||
- Smuggler's self-assessment near the detective = `"cracking"` (too many close calls)
|
||||
- Detective's assessment of a civilian witness = `"N/A"` (no cover to assess)
|
||||
|
||||
@@ -271,13 +271,13 @@ These four keys capture the observer's subjective assessment of the target throu
|
||||
**Values**: `innocent`, `peripheral`, `complicit`, `compromised`, `willing`.
|
||||
|
||||
**Examples**:
|
||||
- Detective's assessment of Naia = `"innocent"` (uninvolved partner caught in the fallout)
|
||||
- Smuggler's assessment of Drin = `"compromised"` (dragged in by debt, not by choice)
|
||||
- Smuggler's assessment of Torek = `"willing"` (fully aware, actively participating)
|
||||
- Detective's assessment of an uninvolved partner = `"innocent"` (caught in the fallout)
|
||||
- Smuggler's assessment of a debt-dragged peripheral = `"compromised"` (dragged in by debt, not by choice)
|
||||
- Smuggler's assessment of the compromised inspector = `"willing"` (fully aware, actively participating)
|
||||
|
||||
**Usage**: Shapes the observer's moral arc and internal conflict. Monologue tone shifts when the observer assigns moral weight — guilt, justification, and rationalization are driven by this key. The Comfort-Doubt-Reckoning-Compromise arc references `moral_weight` to determine which phase the observer occupies relative to specific NPCs.
|
||||
|
||||
**Archetype note**: Both smuggler and detective use `moral_weight` with the same enum values but different criteria. The smuggler assesses complicity in the ring's operations ("how dirty are their hands?") — see [Smuggler Moral Arc](../../design/smuggler-moral-arc.md). The detective assesses culpability in the crime ("how responsible are they for the harm?"). Same scale, different lens. A smuggler might mark Drin as `"compromised"` (dragged in, not choosing) while the detective marks Drin as `"complicit"` (he knew and did nothing). The detective's moral arc spec is unwritten in v0.1 but follows the same key.
|
||||
**Archetype note**: Both smuggler and detective use `moral_weight` with the same enum values but different criteria. The smuggler assesses complicity in the ring's operations ("how dirty are their hands?") — see [Smuggler Moral Arc](../../design/smuggler-moral-arc.md). The detective assesses culpability in the crime ("how responsible are they for the harm?"). Same scale, different lens. A smuggler might mark a debt-driven peripheral as `"compromised"` (dragged in, not choosing) while the detective marks the same NPC as `"complicit"` (they knew and did nothing).
|
||||
|
||||
---
|
||||
|
||||
@@ -298,7 +298,7 @@ This pattern scales to all 8 planned archetypes without schema modification. An
|
||||
|
||||
## Examples: Full EntityKnowledge Entries
|
||||
|
||||
### Smuggler's knowledge of Kael (early game, pre-contradiction)
|
||||
### Smuggler's knowledge of {THE FRIEND} (early game, pre-contradiction)
|
||||
|
||||
```rust
|
||||
EntityKnowledge {
|
||||
@@ -310,7 +310,7 @@ EntityKnowledge {
|
||||
state: KnowledgeState::Active,
|
||||
relationship: RelationshipState::Friendly,
|
||||
known_attributes: BTreeMap::from([
|
||||
("name".to_string(), "Kael Davan".to_string()),
|
||||
("name".to_string(), "{NPC Full Name}".to_string()),
|
||||
("role".to_string(), "dock worker".to_string()),
|
||||
("faction".to_string(), "ring member".to_string()), // smuggler knows
|
||||
("species".to_string(), "human".to_string()),
|
||||
@@ -318,7 +318,7 @@ EntityKnowledge {
|
||||
("trust_level".to_string(), "trusted".to_string()),
|
||||
("routine_pattern".to_string(), "morning shift 06:00-14:00, bar after shift".to_string()),
|
||||
("behavior_flags".to_string(), "reliable,punctual".to_string()),
|
||||
("risk_assessment".to_string(), "low".to_string()), // Kael is reliable, no exposure concern
|
||||
("risk_assessment".to_string(), "low".to_string()), // reliable, no exposure concern
|
||||
("loyalty_assessment".to_string(), "solid".to_string()), // loyal to the ring
|
||||
("position_integrity".to_string(), "solid".to_string()), // cover is intact
|
||||
("moral_weight".to_string(), "willing".to_string()), // fully aware, active participant
|
||||
@@ -326,7 +326,7 @@ EntityKnowledge {
|
||||
}
|
||||
```
|
||||
|
||||
### Detective's knowledge of Kael (mid-game, post-contradiction discovery)
|
||||
### Detective's knowledge of a suspect (mid-game, post-contradiction discovery)
|
||||
|
||||
```rust
|
||||
EntityKnowledge {
|
||||
@@ -343,7 +343,7 @@ EntityKnowledge {
|
||||
state: KnowledgeState::Active,
|
||||
relationship: RelationshipState::PersonOfInterest, // flagged
|
||||
known_attributes: BTreeMap::from([
|
||||
("name".to_string(), "Kael Davan".to_string()),
|
||||
("name".to_string(), "{NPC Full Name}".to_string()),
|
||||
("role".to_string(), "dock worker".to_string()),
|
||||
("faction".to_string(), "civilian".to_string()), // detective doesn't know ring membership yet
|
||||
("species".to_string(), "human".to_string()),
|
||||
@@ -357,13 +357,13 @@ EntityKnowledge {
|
||||
("contradiction_flagged".to_string(), "meeting_unknown_contact".to_string()),
|
||||
("risk_assessment".to_string(), "high".to_string()), // obstructing investigation, potential flight risk
|
||||
("loyalty_assessment".to_string(), "hostile".to_string()), // uncooperative, evasive
|
||||
("position_integrity".to_string(), "cracking".to_string()), // his story is falling apart
|
||||
("position_integrity".to_string(), "cracking".to_string()), // their story is falling apart
|
||||
("moral_weight".to_string(), "complicit".to_string()), // involved, degree of responsibility unclear
|
||||
]),
|
||||
}
|
||||
```
|
||||
|
||||
### Smuggler's knowledge of Sera (if observant, mid-game)
|
||||
### Smuggler's knowledge of the institutional contact (if observant, mid-game)
|
||||
|
||||
```rust
|
||||
EntityKnowledge {
|
||||
@@ -373,9 +373,9 @@ EntityKnowledge {
|
||||
confidence: KnowledgeConfidence::KnowsOf,
|
||||
source: KnowledgeSource::DirectObservation { tick: 1800 },
|
||||
state: KnowledgeState::Active,
|
||||
relationship: RelationshipState::Known, // not Friendly -- smuggler doesn't know Sera well
|
||||
relationship: RelationshipState::Known, // not Friendly -- smuggler doesn't know them well
|
||||
known_attributes: BTreeMap::from([
|
||||
("name".to_string(), "Sera Venn".to_string()),
|
||||
("name".to_string(), "{Institutional Contact Name}".to_string()),
|
||||
("role".to_string(), "Commission field tech".to_string()),
|
||||
("faction".to_string(), "Commission".to_string()),
|
||||
("species".to_string(), "human".to_string()),
|
||||
@@ -383,11 +383,11 @@ EntityKnowledge {
|
||||
("trust_level".to_string(), "uncertain".to_string()),
|
||||
("routine_pattern".to_string(), "bar regular, off-duty evenings".to_string()),
|
||||
("behavior_flags".to_string(), "observant,avoidance_pattern".to_string()),
|
||||
("leverage_held".to_string(), "knows something about Torek or Naia".to_string()),
|
||||
("leverage_held".to_string(), "knows something about the inspector or someone close to the ring".to_string()),
|
||||
("leverage_confidence".to_string(), "suspected".to_string()),
|
||||
("risk_assessment".to_string(), "moderate".to_string()), // Commission presence is inherently risky
|
||||
("loyalty_assessment".to_string(), "uncertain".to_string()), // unknown allegiance
|
||||
("position_integrity".to_string(), "N/A".to_string()), // Sera isn't maintaining a cover
|
||||
("position_integrity".to_string(), "N/A".to_string()), // not maintaining a cover
|
||||
("moral_weight".to_string(), "peripheral".to_string()), // not involved in ring, but near it
|
||||
]),
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
title: "Knowledge Fact Catalog"
|
||||
description: "All 27 canonical FactIds for v0.1 with confidence progressions, smuggler/detective starting levels, and mechanical purposes"
|
||||
description: "Canonical FactIds for smuggling scenario content — confidence progressions, character starting levels, and mechanical purposes"
|
||||
slug: fact-catalog
|
||||
category: concept
|
||||
status: canonical
|
||||
@@ -14,7 +14,7 @@ cross_refs: []
|
||||
|
||||
# Knowledge Fact Catalog
|
||||
|
||||
Canonical FactIds for the v0.1 vertical slice. All facts follow the `category.topic` format defined in `server/src/knowledge/types.rs`.
|
||||
Canonical FactIds for smuggling scenario content. All facts follow the `category.topic` format defined in `server/src/knowledge/types.rs`.
|
||||
|
||||
## Format
|
||||
|
||||
@@ -31,14 +31,14 @@ Canonical FactIds for the v0.1 vertical slice. All facts follow the `category.to
|
||||
|
||||
**Suspects**: "Something's going on with the cargo schedules. Too many off-manifest deliveries."
|
||||
**KnowsOf**: "There's a smuggling operation running through the logistics hub."
|
||||
**KnowsDetails**: "The ring moves unlicensed lattice components during shift transitions. Voss manages the timing."
|
||||
**KnowsDetails**: "The ring moves unlicensed lattice components during shift transitions. The shift supervisor manages the timing."
|
||||
**Direct**: N/A (abstract knowledge -- never directly observed)
|
||||
|
||||
**Mechanical Purpose**: Gates investigation dialogue trees. Required for ring-specific monologue. The detective starts at Suspects and escalates. The smuggler (if playing the ring member path) starts at KnowsDetails.
|
||||
|
||||
**Smuggler Starting Level**: KnowsDetails
|
||||
**Smuggler Perspective**:
|
||||
**KnowsDetails**: "Our operation. Nils runs coordination, Voss covers the schedule, Kael and I handle cargo. Two years now. Runs like clockwork when everyone hits their marks."
|
||||
**KnowsDetails**: "Our operation. The coordinator runs things off-site, the shift supervisor covers the schedule, and I handle cargo. Two years now. Runs like clockwork when everyone hits their marks."
|
||||
|
||||
---
|
||||
|
||||
@@ -76,52 +76,52 @@ Canonical FactIds for the v0.1 vertical slice. All facts follow the `category.to
|
||||
|
||||
### `contraband.severance_tech`
|
||||
|
||||
**Suspects**: "Sealed containers Nils won't discuss. Heavier than lattice components."
|
||||
**Suspects**: "Sealed containers the coordinator won't discuss. Heavier than lattice components."
|
||||
**KnowsOf**: "Severance equipment. Counter-surveillance tech. Illegal across most of the Reach."
|
||||
**KnowsDetails**: "Guardians of Severance supply chain. This isn't local -- it's connected to something bigger."
|
||||
**Direct**: N/A (not directly visible in v0.1)
|
||||
**KnowsDetails**: "Guardians of Autonomy supply chain. This isn't local -- it's connected to something bigger."
|
||||
**Direct**: N/A (not directly visible in the early arc)
|
||||
|
||||
**Mechanical Purpose**: Contamination seed for storyteller expansion. The thing that makes the smuggler question how deep the ring goes.
|
||||
|
||||
**Smuggler Starting Level**: Suspects
|
||||
**Smuggler Perspective**:
|
||||
**Suspects**: "Sealed containers Nils won't talk about. Different markings, heavier than lattice mods. He said don't ask. So I don't ask."
|
||||
**KnowsOf**: "Severance gear. Counter-surveillance equipment. Whoever Nils is supplying, it's not just local lattice demand."
|
||||
**KnowsDetails**: "Guardians of Severance supply chain. Nils has been using us as a distribution point for something I didn't sign up for. This is bigger than Sova."
|
||||
**Suspects**: "Sealed containers the coordinator won't talk about. Different markings, heavier than lattice mods. Told me don't ask. So I don't ask."
|
||||
**KnowsOf**: "Severance gear. Counter-surveillance equipment. Whoever the coordinator is supplying, it's not just local lattice demand."
|
||||
**KnowsDetails**: "Guardians of Autonomy supply chain. We've been used as a distribution point for something I didn't sign up for. This is bigger than this district."
|
||||
|
||||
---
|
||||
|
||||
### `contraband.supply_chain`
|
||||
|
||||
**Suspects**: "The cargo doesn't originate on this station."
|
||||
**KnowsOf**: "Off-station coordinator manages incoming shipments. Someone named Sabel."
|
||||
**KnowsDetails**: "Supply chain: aftermarket manufacturers (Syndic-adjacent) -> freight networks -> Sabel (off-station) -> ring coordinator (Devra or Nils) -> local distribution."
|
||||
**KnowsOf**: "Off-station coordinator manages incoming shipments."
|
||||
**KnowsDetails**: "Supply chain: aftermarket manufacturers (Syndic-adjacent) -> freight networks -> off-station coordinator -> local coordinator -> distribution."
|
||||
**Direct**: N/A (network knowledge)
|
||||
|
||||
**Mechanical Purpose**: Investigation depth. Detective at KnowsDetails can map the full chain. Smuggler at KnowsDetails understands their position in the network.
|
||||
|
||||
**Smuggler Starting Level**: KnowsOf
|
||||
**Smuggler Perspective**:
|
||||
**KnowsOf**: "Cargo comes through Sabel, off-station. Sabel handles the incoming shipments, we handle local. What happens upstream, I don't ask."
|
||||
**KnowsDetails**: "Syndic-adjacent manufacturers, freight networks, Sabel, then Nils or Devra, then us. I'm a link in a chain I can't see the end of."
|
||||
**KnowsOf**: "Cargo comes through the off-station coordinator. They handle the incoming shipments, we handle local. What happens upstream, I don't ask."
|
||||
**KnowsDetails**: "Syndic-adjacent manufacturers, freight networks, the off-station coordinator, then local distribution, then us. I'm a link in a chain I can't see the end of."
|
||||
|
||||
---
|
||||
|
||||
## Location Facts
|
||||
|
||||
### `location.corridor_b7_restricted`
|
||||
### `location.restricted_corridor`
|
||||
|
||||
**Suspects**: "Corridor B-7 should see foot traffic during shift change. It's empty."
|
||||
**Suspects**: "The maintenance corridor should see foot traffic during shift change. It's empty."
|
||||
**KnowsOf**: "Maintenance corridor used for smuggling operations. Access requires hub clearance."
|
||||
**KnowsDetails**: "Corridor B-7 is between old and new prefab sections. Service hatch from break room. The ring routes shipments through here during shift transitions."
|
||||
**Direct**: "I'm in Corridor B-7 right now. Old construction smell, minimal Meridian coverage, no surveillance."
|
||||
**KnowsDetails**: "The corridor runs between old and new prefab sections. Service hatch from break room. The ring routes shipments through here during shift transitions."
|
||||
**Direct**: "I'm in the restricted corridor right now. Old construction smell, minimal Meridian coverage, no surveillance."
|
||||
|
||||
**Mechanical Purpose**: Spatial knowledge. Required for investigation progression (detective) and operational planning (smuggler). Direct confidence gates monologue about current surroundings.
|
||||
|
||||
**Smuggler Starting Level**: KnowsDetails
|
||||
**Smuggler Perspective**:
|
||||
**KnowsDetails**: "B-7. Between the old and new panels. Service hatch from the break room gets you in. No Meridian, no cameras. Our corridor."
|
||||
**Direct**: "In B-7 right now. Stale air, maintenance lighting. The usual."
|
||||
**KnowsDetails**: "Between the old and new panels. Service hatch from the break room gets you in. No Meridian, no cameras. Our corridor."
|
||||
**Direct**: "In the corridor right now. Stale air, maintenance lighting. The usual."
|
||||
|
||||
---
|
||||
|
||||
@@ -129,15 +129,15 @@ Canonical FactIds for the v0.1 vertical slice. All facts follow the `category.to
|
||||
|
||||
**Suspects**: "Cargo movements don't match the official routing."
|
||||
**KnowsOf**: "The ring uses a specific path: freight bay -> service corridor -> temporary storage -> bar district back room."
|
||||
**KnowsDetails**: "Timing is critical. The route only works during shift transition when patrol coverage thins. Lera provides the final handoff point."
|
||||
**Direct**: "Watching the route right now. Kosse moving a container through the service hatch."
|
||||
**KnowsDetails**: "Timing is critical. The route only works during shift transition when patrol coverage thins. The bar provides the final handoff point."
|
||||
**Direct**: "Watching the route right now. The courier moving a container through the service hatch."
|
||||
|
||||
**Mechanical Purpose**: Investigation mechanics. Detective needs KnowsOf to predict NPC movements. Smuggler needs KnowsDetails for operational participation.
|
||||
|
||||
**Smuggler Starting Level**: KnowsDetails
|
||||
**Smuggler Perspective**:
|
||||
**KnowsDetails**: "Freight bay to service corridor to temp storage to Lera's back room. Twenty-minute window during shift change. The route runs itself when everyone hits their marks."
|
||||
**Direct**: "Watching the handoff. Renn's moving through the service hatch now. Clean."
|
||||
**KnowsDetails**: "Freight bay to service corridor to temp storage to the bar back room. Twenty-minute window during shift change. The route runs itself when everyone hits their marks."
|
||||
**Direct**: "Watching the handoff. The courier moving through the service hatch now. Clean."
|
||||
|
||||
---
|
||||
|
||||
@@ -145,31 +145,31 @@ Canonical FactIds for the v0.1 vertical slice. All facts follow the `category.to
|
||||
|
||||
**Suspects**: "Some areas feel less monitored than others."
|
||||
**KnowsOf**: "Meridian coverage degrades in older sections. Maintenance corridors have minimal surveillance."
|
||||
**KnowsDetails**: "Corridor B-7, break room service hatch, bar back room -- all Meridian dead spots. The ring exploits these systematically."
|
||||
**KnowsDetails**: "The restricted corridor, break room service hatch, bar back room -- all Meridian dead spots. The ring exploits these systematically."
|
||||
**Direct**: "Checking my lattice overlay now. Zero Meridian signal in this section."
|
||||
|
||||
**Mechanical Purpose**: Stealth and observation mechanics. Detective's augmented lattice can detect coverage gaps (requires KnowsOf). Smuggler uses gaps operationally (requires KnowsDetails).
|
||||
|
||||
**Smuggler Starting Level**: KnowsDetails
|
||||
**Smuggler Perspective**:
|
||||
**KnowsDetails**: "B-7, the break room hatch, Lera's back room -- all dead spots. Old construction left the gaps. We just learned the map."
|
||||
**KnowsDetails**: "The restricted corridor, the break room hatch, the bar back room -- all dead spots. Old construction left the gaps. We just learned the map."
|
||||
**Direct**: "No signal here. Same as always."
|
||||
|
||||
---
|
||||
|
||||
### `location.dead_drop_location`
|
||||
|
||||
**Suspects**: "Kael leaves things in the break room locker area. Not his own locker."
|
||||
**KnowsOf**: "Locker 47 in the hub break room. Unofficial dead drop for small items."
|
||||
**KnowsDetails**: "Locker 47 is registered to a worker who transferred off-station 18 months ago. Never reassigned. The ring has used it ever since."
|
||||
**Direct**: "Locker 47 is open. There's a sealed packet inside."
|
||||
**Suspects**: "A ring member leaves things in the break room locker area. Not their own locker."
|
||||
**KnowsOf**: "An inactive locker in the hub break room. Unofficial dead drop for small items."
|
||||
**KnowsDetails**: "The locker is registered to a worker who transferred off-station over a year ago. Never reassigned. The ring has used it ever since."
|
||||
**Direct**: "The locker is open. There's a sealed packet inside."
|
||||
|
||||
**Mechanical Purpose**: Discovery mechanic. Detective can discover through observation (Suspects -> KnowsOf). Smuggler knows from background (starts at KnowsDetails).
|
||||
|
||||
**Smuggler Starting Level**: KnowsDetails
|
||||
**Smuggler Perspective**:
|
||||
**KnowsDetails**: "Locker 47. Break room. Registered to someone who left a year and a half ago. Small items, messages, keys. Don't use it for actual cargo."
|
||||
**Direct**: "47's open. Sealed packet. Not mine -- someone else has been using it."
|
||||
**KnowsDetails**: "Break room. Dead locker, registered to someone who left over a year ago. Small items, messages, keys. Don't use it for actual cargo."
|
||||
**Direct**: "Locker's open. Sealed packet. Not mine -- someone else has been using it."
|
||||
|
||||
---
|
||||
|
||||
@@ -179,29 +179,29 @@ Canonical FactIds for the v0.1 vertical slice. All facts follow the `category.to
|
||||
|
||||
**Suspects**: "Cargo manifests have inconsistencies. Weight doesn't match volume."
|
||||
**KnowsOf**: "Systematic manifest doctoring. Someone with freight scheduler access is altering records."
|
||||
**KnowsDetails**: "Maret Korr processes manifests. She's noticed the discrepancies but hasn't reported them. She's either complicit or terrified."
|
||||
**KnowsDetails**: "The manifest clerk processes the documents. They've noticed the discrepancies but haven't reported them. Either complicit or terrified."
|
||||
**Direct**: "Comparing the manifest right now. Container 4471 -- logged weight 240kg, actual weight closer to 310kg."
|
||||
|
||||
**Mechanical Purpose**: Core investigation mechanic. Detective's analytical lattice flags discrepancies at Suspects. Full understanding requires KnowsDetails. Smuggler knows Maret's position from background.
|
||||
**Mechanical Purpose**: Core investigation mechanic. Detective's analytical lattice flags discrepancies at Suspects. Full understanding requires KnowsDetails. Smuggler knows the clerk's position from background.
|
||||
|
||||
**Smuggler Starting Level**: KnowsDetails
|
||||
**Smuggler Perspective**:
|
||||
**KnowsDetails**: "Maret handles the manifests. She adjusts the numbers for us -- or at least doesn't flag them. Whether she's on board or just scared, the result's the same."
|
||||
**KnowsDetails**: "The clerk handles the manifests. Adjusts the numbers for us -- or at least doesn't flag them. Whether they're on board or just scared, the result's the same."
|
||||
|
||||
---
|
||||
|
||||
### `investigation.shift_mismatch`
|
||||
|
||||
**Suspects**: "Night shift schedules don't align with freight volume."
|
||||
**KnowsOf**: "Voss adjusts shift schedules to create coverage gaps. Deliberate understaffing during high-risk windows."
|
||||
**KnowsDetails**: "Shift mismatches occur every third rotation. Coincides exactly with off-station shipment arrivals. Voss takes a cut."
|
||||
**KnowsOf**: "The shift supervisor adjusts schedules to create coverage gaps. Deliberate understaffing during high-risk windows."
|
||||
**KnowsDetails**: "Shift mismatches occur every third rotation. Coincides exactly with off-station shipment arrivals. The supervisor takes a cut."
|
||||
**Direct**: "Checking the current schedule. Night shift is short two workers -- again."
|
||||
|
||||
**Mechanical Purpose**: Pattern recognition. Detective needs KnowsOf to connect schedule to smuggling. Smuggler knows the pattern operationally.
|
||||
|
||||
**Smuggler Starting Level**: KnowsDetails
|
||||
**Smuggler Perspective**:
|
||||
**KnowsDetails**: "Voss thins the rotation every third cycle. Two short on nights, right when Sabel's shipment comes in. Not a coincidence -- it's the plan. Voss takes his cut."
|
||||
**KnowsDetails**: "The supervisor thins the rotation every third cycle. Two short on nights, right when the shipment comes in. Not a coincidence -- it's the plan. The supervisor takes their cut."
|
||||
|
||||
---
|
||||
|
||||
@@ -209,22 +209,22 @@ Canonical FactIds for the v0.1 vertical slice. All facts follow the `category.to
|
||||
|
||||
**Suspects**: "That container sat in temporary storage for 18 hours. Standard procedure is 4-6 hours max."
|
||||
**KnowsOf**: "Delayed processing indicates off-manifest handling. Someone's buying time to repackage cargo."
|
||||
**KnowsDetails**: "Nils coordinates timing. Container arrives, sits in temp storage during shift A, gets repackaged during shift B transition, moves out during shift C startup."
|
||||
**KnowsDetails**: "The coordinator handles timing. Container arrives, sits in temp storage during shift A, gets repackaged during shift B transition, moves out during shift C startup."
|
||||
**Direct**: "Container 4471 has been sitting here for 14 hours. No movement orders logged."
|
||||
|
||||
**Mechanical Purpose**: Observation-based discovery. Detective builds case from Suspects upward. Smuggler knows the workflow (starts KnowsDetails).
|
||||
|
||||
**Smuggler Starting Level**: KnowsDetails
|
||||
**Smuggler Perspective**:
|
||||
**KnowsDetails**: "Container arrives, sits in temp during A shift, gets repackaged during B transition, moves out during C startup. Nils handles the timing. I handle the routing. Clockwork."
|
||||
**KnowsDetails**: "Container arrives, sits in temp during A shift, gets repackaged during B transition, moves out during C startup. The coordinator handles the timing. I handle the routing. Clockwork."
|
||||
|
||||
---
|
||||
|
||||
### `investigation.evidence_collected`
|
||||
|
||||
**Suspects**: N/A (binary fact -- you either have evidence or you don't)
|
||||
**KnowsOf**: "I have documented manifest discrepancies, shift schedule anomalies, and witness testimony from Drin."
|
||||
**KnowsDetails**: "Full case file: manifest logs, Drin's testimony under pressure, Maret's reluctant cooperation, surveillance footage from observation gallery showing Corridor B-7 access."
|
||||
**KnowsOf**: "I have documented manifest discrepancies, shift schedule anomalies, and witness testimony."
|
||||
**KnowsDetails**: "Full case file: manifest logs, witness testimony under pressure, the manifest clerk's reluctant cooperation, surveillance footage showing restricted corridor access."
|
||||
**Direct**: N/A (abstract accumulation)
|
||||
|
||||
**Mechanical Purpose**: Investigation state tracker. Gates confrontation dialogue. Detective-specific -- smuggler doesn't collect evidence against themselves. (Smuggler equivalent: `progress.operation_compromised`.)
|
||||
@@ -261,24 +261,24 @@ Canonical FactIds for the v0.1 vertical slice. All facts follow the `category.to
|
||||
**Smuggler Starting Level**: Suspects
|
||||
**Smuggler Perspective**:
|
||||
**Suspects**: "Cargo's not local. Different seals, different packaging. Someone manufacturing off-station."
|
||||
**KnowsOf**: "Syndic supply chain. Medical-grade lattice parts diverted from legitimate production. Sabel's our connection point."
|
||||
**KnowsOf**: "Syndic supply chain. Medical-grade lattice parts diverted from legitimate production. The off-station coordinator is our connection point."
|
||||
**KnowsDetails**: "Two sources, based on the serial patterns. The Syndics aren't partners -- they're wholesalers. We're downstream, and we're replaceable."
|
||||
|
||||
---
|
||||
|
||||
### `world.sova_district_layout`
|
||||
### `world.district_layout`
|
||||
|
||||
**Suspects**: "The district is a mix of old and new construction."
|
||||
**KnowsOf**: "40-year-old prefab base with retrofitted partitions. Logistics hub, bar district, residential sections. Meridian coverage is uneven."
|
||||
**KnowsDetails**: "Older sections have hidden spaces between wall layers. Service corridors from original construction still exist but aren't on current maps. The ring exploits architectural legacy."
|
||||
**Direct**: "I'm looking at the district map overlay right now. Official layout vs. actual structure don't match in Section 3."
|
||||
**Direct**: "I'm looking at the district map overlay right now. Official layout vs. actual structure don't match in the old section."
|
||||
|
||||
**Mechanical Purpose**: Navigation and investigation. Detective needs KnowsDetails to find hidden spaces. Smuggler starts with KnowsOf (knows layout from living here).
|
||||
|
||||
**Smuggler Starting Level**: KnowsOf
|
||||
**Smuggler Perspective**:
|
||||
**KnowsOf**: "Forty-year-old prefab, retrofitted to hell. The hub, Lera's, residential blocks. I know every corridor by feel. Meridian's patchy in the old sections."
|
||||
**KnowsDetails**: "Hidden spaces between old walls in Section 3. Service corridors from original construction, not on any current map. The ring uses what the builders left behind."
|
||||
**KnowsOf**: "Forty-year-old prefab, retrofitted to hell. The hub, the bar, residential blocks. I know every corridor by feel. Meridian's patchy in the old sections."
|
||||
**KnowsDetails**: "Hidden spaces between old walls in the original construction zones. Service corridors not on any current map. The ring uses what the builders left behind."
|
||||
|
||||
---
|
||||
|
||||
@@ -286,14 +286,14 @@ Canonical FactIds for the v0.1 vertical slice. All facts follow the `category.to
|
||||
|
||||
**Suspects**: "Logistics hub runs three shifts: morning, day, night."
|
||||
**KnowsOf**: "Shift transitions are 30-minute windows with reduced oversight. Ring operations happen during transitions."
|
||||
**KnowsDetails**: "Shift A: 06:00-14:00. Shift B: 14:00-22:00. Shift C: 22:00-06:00. Transition windows: 13:30-14:30, 21:30-22:30, 05:30-06:30. Voss manages the schedule."
|
||||
**KnowsDetails**: "Shift A: 06:00-14:00. Shift B: 14:00-22:00. Shift C: 22:00-06:00. Transition windows: 13:30-14:30, 21:30-22:30, 05:30-06:30. The shift supervisor manages the schedule."
|
||||
**Direct**: "Current time: 21:45. Shift transition active. Observing movement patterns."
|
||||
|
||||
**Mechanical Purpose**: Temporal mechanics. Required for NPC routine prediction and investigation timing. Smuggler starts KnowsDetails. Detective learns through observation.
|
||||
|
||||
**Smuggler Starting Level**: KnowsDetails
|
||||
**Smuggler Perspective**:
|
||||
**KnowsDetails**: "A shift: 06:00 to 14:00. B shift: 14:00 to 22:00. C shift: 22:00 to 06:00. Thirty-minute transitions. That's when the oversight thins and the route opens. Voss keeps it thin."
|
||||
**KnowsDetails**: "A shift: 06:00 to 14:00. B shift: 14:00 to 22:00. C shift: 22:00 to 06:00. Thirty-minute transitions. That's when the oversight thins and the route opens. The supervisor keeps it thin."
|
||||
**Direct**: "Transition's active. Twenty minutes of open corridor. Time to move."
|
||||
|
||||
---
|
||||
@@ -302,65 +302,65 @@ Canonical FactIds for the v0.1 vertical slice. All facts follow the `category.to
|
||||
|
||||
### `relationship.ring_membership`
|
||||
|
||||
**Suspects**: "Kael's behavior suggests involvement in something off-book."
|
||||
**KnowsOf**: "Kael is a ring member. Mid-level, handles physical cargo."
|
||||
**KnowsDetails**: "Ring structure: Devra or Nils coordinate, Voss provides scheduling cover, Kael and Kosse handle cargo, Lera provides handoff point, Pell is wavering."
|
||||
**Direct**: "Watching Kael move a container right now. Ring operation in progress."
|
||||
**Suspects**: "A ring member's behavior suggests involvement in something off-book."
|
||||
**KnowsOf**: "A mid-level ring member handles physical cargo."
|
||||
**KnowsDetails**: "Ring structure: coordinators manage the operation, the shift supervisor provides scheduling cover, cargo handlers move product, the bar owner provides a handoff point, and at least one member is wavering."
|
||||
**Direct**: "Watching a ring member route a container right now. Operation in progress."
|
||||
|
||||
**Mechanical Purpose**: Social knowledge. Detective builds this through investigation. Smuggler knows from shared membership (if on that path) or observation.
|
||||
|
||||
**Smuggler Starting Level**: KnowsDetails
|
||||
**Smuggler Perspective**:
|
||||
**KnowsDetails**: "Nils coordinates from off-site. Devra handles messages. Voss covers the schedule. Kael and I handle cargo. Renn's the courier. Lera runs the handoff point. Pell's been shaky lately -- that worries me."
|
||||
**Direct**: "Watching Kael work a shipment. We've done this a hundred times. Smooth."
|
||||
**KnowsDetails**: "The off-station coordinator runs the chain. The local coordinator manages operations. The shift supervisor covers the schedule. Cargo handlers route product. The bar owner runs the handoff point. One member's been shaky lately -- that worries me."
|
||||
**Direct**: "Watching a ring member work a shipment. We've done this a hundred times. Smooth."
|
||||
|
||||
---
|
||||
|
||||
### `relationship.kael_naia_connection`
|
||||
### `relationship.friend_personal_life`
|
||||
|
||||
**Suspects**: "Kael mentions a partner. Someone named Naia."
|
||||
**KnowsOf**: "Kael's partner is Naia, a teacher. They're worried about Kael's late nights."
|
||||
**KnowsDetails**: "Naia confides in Sera Venn. Sera knows something is wrong but hasn't reported it. The worry is contaminating Kael's operational security."
|
||||
**Suspects**: "{THE FRIEND} mentions someone outside the ring. A partner."
|
||||
**KnowsOf**: "{THE FRIEND}'s partner is someone not involved in the operation. They're worried about {THE FRIEND}'s late nights."
|
||||
**KnowsDetails**: "The partner confides in a mutual contact who has institutional access. That contact knows something is wrong but hasn't reported it. The worry is contaminating {THE FRIEND}'s operational security."
|
||||
**Direct**: N/A (relationship knowledge)
|
||||
|
||||
**Mechanical Purpose**: Emotional leverage. Detective can use Naia as pressure point. Smuggler (if Kael's friend) must protect Naia from knowledge.
|
||||
**Mechanical Purpose**: Emotional leverage. Detective can use the partner as a pressure point. Smuggler (if {THE FRIEND}'s colleague) must protect the partner from knowledge.
|
||||
|
||||
**Smuggler Starting Level**: KnowsOf
|
||||
**Smuggler Perspective**:
|
||||
**KnowsOf**: "Naia's Kael's partner. Good person. Worries about him working late. Doesn't know about the ring -- at least that's what Kael says."
|
||||
**KnowsDetails**: "Naia's been talking to Sera. Sera's Commission. If Naia shares too much and Sera connects the dots, Kael's problem becomes everyone's problem."
|
||||
**KnowsOf**: "{THE FRIEND}'s partner is good people. Worries about them working late. Doesn't know about the ring -- at least that's what {THE FRIEND} says."
|
||||
**KnowsDetails**: "The partner's been talking to someone with institutional connections. If that person connects the dots, {THE FRIEND}'s problem becomes everyone's problem."
|
||||
|
||||
---
|
||||
|
||||
### `relationship.trust_network`
|
||||
|
||||
**Suspects**: "People here know each other. Tight social bonds."
|
||||
**KnowsOf**: "The ring depends on trust networks: Kael trusts Nils (sibling), Lera trusts the regulars, Drin is compromised by debt to Harek."
|
||||
**KnowsDetails**: "Trust map: Kael <-> Nils (blood), Kael <-> Naia (partnership), Naia <-> Sera (friendship), Sera <-> Detective (professional/personal), Drin -> Harek (debt), Voss -> Devra/Nils (financial)."
|
||||
**KnowsOf**: "The ring depends on trust networks: the cargo handler trusts the off-station coordinator (prior relationship), the bar owner trusts the regulars, at least one peripheral member is compromised by debt."
|
||||
**KnowsDetails**: "Trust map: coordinator chain (off-station to local, prior loyalty), {THE FRIEND} to their partner (personal), {THE FRIEND}'s partner to a mutual institutional contact (friendship), compromised peripheral to their creditor (debt), shift supervisor to ring leadership (financial)."
|
||||
**Direct**: N/A (social network knowledge)
|
||||
|
||||
**Mechanical Purpose**: Social manipulation mechanics. Detective at KnowsDetails can exploit trust fractures. Smuggler at KnowsDetails knows whom to protect.
|
||||
|
||||
**Smuggler Starting Level**: KnowsOf
|
||||
**Smuggler Perspective**:
|
||||
**KnowsOf**: "Kael trusts Nils -- blood. Lera's reliable, keeps her mouth shut. Drin's compromised somehow. Voss is solid as long as the money flows."
|
||||
**KnowsDetails**: "Full picture: Kael to Nils is blood. Kael to Naia is heart. Naia to Sera is friendship. Drin owes Harek. Voss follows whoever's paying. Pull one thread, the whole thing comes apart."
|
||||
**KnowsOf**: "The coordinator chain runs on prior loyalty. The bar owner keeps her mouth shut. At least one person's compromised somehow. The shift supervisor is solid as long as the money flows."
|
||||
**KnowsDetails**: "Full picture: coordinator chain is loyalty. {THE FRIEND} to their partner is personal. The partner to a mutual contact is friendship. The compromised member owes someone. The supervisor follows whoever's paying. Pull one thread, the whole thing comes apart."
|
||||
|
||||
---
|
||||
|
||||
### `relationship.faction_allegiance`
|
||||
|
||||
**Suspects**: "Some people here are Commission-aligned. Others resent the Commission."
|
||||
**KnowsOf**: "Sera is Commission. Torek Lintar is nominally Commission but lives here. The detective represents institutional authority. Everyone else is civilian."
|
||||
**KnowsDetails**: "Faction tensions: Commission (Sera, Torek, Detective) vs. ring (Kael, Nils, Kosse, Voss, Lera) vs. civilians (Naia, Maret, Drin, Resha). Drin is compromised between civilian and Commission."
|
||||
**KnowsOf**: "The institutional contact is Commission. The inspector is nominally Commission but lives in the district. The detective represents institutional authority. Everyone else is civilian."
|
||||
**KnowsDetails**: "Faction tensions: Commission (institutional contact, inspector, detective) vs. ring (coordinators, cargo handlers, shift supervisor, bar owner) vs. civilians (partners, manifest clerk, peripheral workers). Some civilians are compromised between civilian and Commission."
|
||||
**Direct**: N/A (political knowledge)
|
||||
|
||||
**Mechanical Purpose**: Access tier logic. Explains why NPCs treat characters differently. Detective at KnowsDetails understands institutional barriers.
|
||||
|
||||
**Smuggler Starting Level**: KnowsOf
|
||||
**Smuggler Perspective**:
|
||||
**KnowsOf**: "Sera's Commission. Torek's Commission-adjacent but lives here, so who knows where he really stands. The new investigator is Commission, full stop. Everyone else is us or civilian."
|
||||
**KnowsDetails**: "Lines aren't simple. Drin's civilian but compromised. Maret's civilian but knows too much. The detective is Commission sent to investigate. Commission versus ring versus people caught in between -- and nobody gets to be just one thing."
|
||||
**KnowsOf**: "The institutional contact is Commission. The inspector is Commission-adjacent but lives here, so who knows where they really stand. The new investigator is Commission, full stop. Everyone else is us or civilian."
|
||||
**KnowsDetails**: "Lines aren't simple. Some civilians are compromised. The manifest clerk knows too much. The detective is Commission sent to investigate. Commission versus ring versus people caught in between -- and nobody gets to be just one thing."
|
||||
|
||||
---
|
||||
|
||||
@@ -381,7 +381,7 @@ Canonical FactIds for the v0.1 vertical slice. All facts follow the `category.to
|
||||
|
||||
**Suspects**: N/A (binary -- investigation is active or it isn't)
|
||||
**KnowsOf**: "I'm building a case. Evidence collected, witnesses identified, patterns mapped."
|
||||
**KnowsDetails**: "Case file: manifest logs, Drin testimony, Maret's reluctant cooperation, surveillance data, NPC behavioral analysis. Ready to escalate."
|
||||
**KnowsDetails**: "Case file: manifest logs, witness testimony, the manifest clerk's reluctant cooperation, surveillance data, NPC behavioral analysis. Ready to escalate."
|
||||
**Direct**: N/A (meta-knowledge)
|
||||
|
||||
**Mechanical Purpose**: Detective arc state. Gates confrontation options. Changes NPC dialogue (they know they're being investigated).
|
||||
@@ -391,7 +391,7 @@ Canonical FactIds for the v0.1 vertical slice. All facts follow the `category.to
|
||||
### `progress.confrontation_ready`
|
||||
|
||||
**Suspects**: N/A
|
||||
**KnowsOf**: "I have enough to confront specific NPCs. Kael, Voss, or Lera."
|
||||
**KnowsOf**: "I have enough to confront specific NPCs — the shift supervisor, the bar owner, or a cargo handler."
|
||||
**KnowsDetails**: "Full case built. Can confront the ring, turn an informant, or escalate to Commission enforcement."
|
||||
**Direct**: N/A (meta-knowledge)
|
||||
|
||||
@@ -416,12 +416,12 @@ These facts track the smuggler's operational arc. They are the smuggler's equiva
|
||||
|
||||
### `progress.operation_compromised`
|
||||
|
||||
**Suspects**: "Something feels wrong today. Voss is tenser than usual. Kael's distracted."
|
||||
**Suspects**: "Something feels wrong today. The shift supervisor is tenser than usual. A ring member's distracted."
|
||||
**KnowsOf**: "There's pressure on the ring. Someone's asking questions about manifests. The Commission presence isn't routine."
|
||||
**KnowsDetails**: "The detective isn't here for compliance review. They're building a case. Maret's nervous, Drin might crack, and Kael's doing something unauthorized that makes everything worse."
|
||||
**KnowsDetails**: "The detective isn't here for compliance review. They're building a case. The manifest clerk's nervous, witnesses might crack, and a ring member's doing something unauthorized that makes everything worse."
|
||||
**Direct**: N/A (meta-knowledge)
|
||||
|
||||
**Mechanical Purpose**: Smuggler arc state. Gates operational monologue, defensive decision-making, and ring NPC dialogue. The smuggler's analog to `progress.initial_suspicion` + `progress.active_investigation`. Escalation triggers: detective asking questions about manifests, ring members reporting close calls, Kael's behavioral shift, Maret's visible anxiety.
|
||||
**Mechanical Purpose**: Smuggler arc state. Gates operational monologue, defensive decision-making, and ring NPC dialogue. The smuggler's analog to `progress.initial_suspicion` + `progress.active_investigation`. Escalation triggers: detective asking questions about manifests, ring members reporting close calls, a ring member's behavioral shift, the manifest clerk's visible anxiety.
|
||||
|
||||
**Discoverable by**: smuggler only.
|
||||
|
||||
@@ -430,7 +430,7 @@ These facts track the smuggler's operational arc. They are the smuggler's equiva
|
||||
### `progress.cover_threatened`
|
||||
|
||||
**Suspects**: "That was a close call. The detective looked at me a beat too long."
|
||||
**KnowsOf**: "I'm on someone's radar. The detective, or Torek, or both. Need to be more careful."
|
||||
**KnowsOf**: "I'm on someone's radar. The detective, or the inspector, or both. Need to be more careful."
|
||||
**KnowsDetails**: "They know. Maybe not everything, but enough. My routine's being watched. My associates flagged. My cargo containers noted."
|
||||
**Direct**: N/A (meta-knowledge)
|
||||
|
||||
@@ -442,12 +442,12 @@ These facts track the smuggler's operational arc. They are the smuggler's equiva
|
||||
|
||||
### `progress.detective_tracking`
|
||||
|
||||
**Suspects**: "New Commission liaison. Showed up a few days ago. Voss mentioned it."
|
||||
**KnowsOf**: "The detective is investigating freight irregularities. They've been requesting manifests, talking to Maret and Drin. This isn't routine."
|
||||
**KnowsDetails**: "The detective has evidence. Don't know how much, but enough to make Maret sweat and Drin avoid eye contact. They're close."
|
||||
**Suspects**: "New Commission liaison. Showed up a few days ago. A ring member mentioned it."
|
||||
**KnowsOf**: "The detective is investigating freight irregularities. They've been requesting manifests, talking to the manifest clerk and witnesses. This isn't routine."
|
||||
**KnowsDetails**: "The detective has evidence. Don't know how much, but enough to make the manifest clerk sweat and others avoid eye contact. They're close."
|
||||
**Direct**: N/A (meta-knowledge)
|
||||
|
||||
**Mechanical Purpose**: Smuggler's tracking of the detective's investigation. Inverse of the detective's evidence tracking. The smuggler's monologue shifts from operational confidence to defensive awareness as this fact escalates. Gates ring-related dialogue: at KnowsOf, ring members start discussing countermeasures; at KnowsDetails, Nils may order the smuggler to change routines or go dark.
|
||||
**Mechanical Purpose**: Smuggler's tracking of the detective's investigation. Inverse of the detective's evidence tracking. The smuggler's monologue shifts from operational confidence to defensive awareness as this fact escalates. Gates ring-related dialogue: at KnowsOf, ring members start discussing countermeasures; at KnowsDetails, the coordinator may order the smuggler to change routines or go dark.
|
||||
|
||||
**Discoverable by**: smuggler only.
|
||||
|
||||
@@ -459,7 +459,7 @@ These facts track the smuggler's operational arc. They are the smuggler's equiva
|
||||
- **Confidence levels** are ordered: Suspects < KnowsOf < KnowsDetails < Direct. Use `KnowledgeConfidence::decayed()` for time-based degradation.
|
||||
- **Direct confidence** is perception-system-managed. Content authors rarely set this manually -- it's automatically assigned when an entity/location is in the observer's LOS.
|
||||
- **Abstract facts** (e.g., `contraband.ring_exists`, `world.commission_regulations`) never reach Direct -- they're conceptual, not observable.
|
||||
- **Spatial facts** (e.g., `location.corridor_b7_restricted`) can reach Direct when the observer is physically present.
|
||||
- **Spatial facts** (e.g., `location.restricted_corridor`) can reach Direct when the observer is physically present.
|
||||
- **Progression text** is for content authoring reference, not runtime display. Monologue lines reference these facts as prerequisites; they don't display the progression text directly.
|
||||
- **Smuggler perspective text** follows the smuggler voice register (see [Smuggler Voice Card](../../docs/design/smuggler-voice-card.md)): fragments, first names, feeling-first, concrete, operational. Where the detective discovers facts through investigation, the smuggler often starts with operational knowledge and discovers threats to the operation.
|
||||
|
||||
@@ -470,22 +470,22 @@ These facts track the smuggler's operational arc. They are the smuggler's equiva
|
||||
| `contraband.ring_exists` | KnowsDetails | Suspects | Insider knowledge |
|
||||
| `contraband.lattice_components` | KnowsDetails | Suspects | Handles the cargo |
|
||||
| `contraband.medical_grade` | KnowsOf | Suspects | Knows the cargo, reckons with meaning later |
|
||||
| `contraband.severance_tech` | Suspects | Suspects | Nils won't discuss -- both characters discover |
|
||||
| `contraband.supply_chain` | KnowsOf | Suspects | Knows Sabel, not full upstream |
|
||||
| `location.corridor_b7_restricted` | KnowsDetails | Suspects | Uses it regularly |
|
||||
| `contraband.severance_tech` | Suspects | Suspects | Coordinator won't discuss -- both characters discover |
|
||||
| `contraband.supply_chain` | KnowsOf | Suspects | Knows off-station contact, not full upstream |
|
||||
| `location.restricted_corridor` | KnowsDetails | Suspects | Uses it regularly |
|
||||
| `location.smuggling_route` | KnowsDetails | Suspects | Works the route |
|
||||
| `location.surveillance_gaps` | KnowsDetails | Suspects | Knows them operationally |
|
||||
| `location.dead_drop_location` | KnowsDetails | Suspects | Uses Locker 47 |
|
||||
| `location.dead_drop_location` | KnowsDetails | Suspects | Uses the dead drop |
|
||||
| `investigation.manifest_discrepancy` | KnowsDetails | Suspects | Creates the discrepancies |
|
||||
| `investigation.shift_mismatch` | KnowsDetails | Suspects | Part of the operation |
|
||||
| `investigation.cargo_anomaly` | KnowsDetails | Suspects | Knows the workflow |
|
||||
| `investigation.evidence_collected` | N/A | Suspects | Detective-only |
|
||||
| `world.commission_regulations` | KnowsOf | Suspects | Lives under them |
|
||||
| `world.syndic_supply_chain` | Suspects | Suspects | Knows cargo's off-station, not source |
|
||||
| `world.sova_district_layout` | KnowsOf | Suspects | Born here, knows lived layout |
|
||||
| `world.district_layout` | KnowsOf | Suspects | Lives here, knows the lived layout |
|
||||
| `world.shift_schedule` | KnowsDetails | Suspects | Works the shifts |
|
||||
| `relationship.ring_membership` | KnowsDetails | Suspects | Is a member |
|
||||
| `relationship.kael_naia_connection` | KnowsOf | Suspects | Knows Kael's partner through Kael |
|
||||
| `relationship.friend_personal_life` | KnowsOf | Suspects | Knows {THE FRIEND}'s partner through {THE FRIEND} |
|
||||
| `relationship.trust_network` | KnowsOf | Suspects | Knows who's who from living there |
|
||||
| `relationship.faction_allegiance` | KnowsOf | Suspects | Knows the social landscape |
|
||||
| `progress.operation_compromised` | Suspects | N/A | Smuggler-only arc state |
|
||||
@@ -494,4 +494,4 @@ These facts track the smuggler's operational arc. They are the smuggler's equiva
|
||||
|
||||
---
|
||||
|
||||
**Total FactIds**: 27 (5 contraband, 4 location, 4 investigation, 4 world, 4 relationship, 3 detective progress, 3 smuggler progress). 21 existing facts received smuggler-perspective text. 3 new smuggler-specific progress facts added. Sufficient for v0.1 vertical slice. Expandable by adding new categories or topics within existing categories.
|
||||
**Total FactIds**: 24 (5 contraband, 4 location, 4 investigation, 4 world, 4 relationship, 3 detective progress, 3 smuggler progress). Expandable by adding new categories or topics within existing categories.
|
||||
|
||||
@@ -68,15 +68,15 @@ pub enum RelationshipState {
|
||||
|
||||
**What it means**: Positive relationship, trusted. Emotional connection or reliable professional rapport.
|
||||
|
||||
**Monologue tone**: Warm, personal. "Good to see Kael. Always reliable."
|
||||
**Monologue tone**: Warm, personal. "Good to see them. Always reliable."
|
||||
|
||||
**Dialogue availability**: Public + peer + insider-tier. Trust-gated content unlocks. Some secret-tier content if relationship deepens.
|
||||
|
||||
**Color**: Soft green (same as Known — the distinction is semantic, not visual).
|
||||
|
||||
**Typical entities**: THE FRIEND NPCs (Kael to smuggler, Sera to detective), close colleagues, trusted contacts.
|
||||
**Typical entities**: THE FRIEND NPCs, close colleagues, trusted contacts.
|
||||
|
||||
**Why same color as Known**: Visual simplicity for v0.1. Future refinement could add subtle shader variation (warmth, pulse, saturation).
|
||||
**Why same color as Known**: Visual simplicity in early implementation. Future refinement could add subtle shader variation (warmth, pulse, saturation).
|
||||
|
||||
---
|
||||
|
||||
@@ -84,7 +84,7 @@ pub enum RelationshipState {
|
||||
|
||||
**What it means**: Flagged. Something's wrong. Under observation or suspicion.
|
||||
|
||||
**Monologue tone**: Analytical, cautious. "Kael's meeting someone I don't recognize. That's not normal."
|
||||
**Monologue tone**: Analytical, cautious. "{THE FRIEND}'s meeting someone I don't recognize. That's not normal."
|
||||
|
||||
**Dialogue availability**: Shifts. Trust-gated content may become unavailable. Confrontation options unlock.
|
||||
|
||||
@@ -108,7 +108,7 @@ pub enum RelationshipState {
|
||||
|
||||
**Typical entities**: NPCs who've turned on the player, authority figures during a confrontation gone bad, exposed ring members cornered by the detective.
|
||||
|
||||
**Rare in v0.1**: Most NPCs don't reach Hostile. It's the endgame state for failed social maneuvering.
|
||||
**Rare**: Most NPCs don't reach Hostile. It's the endgame state for failed social maneuvering.
|
||||
|
||||
---
|
||||
|
||||
@@ -139,93 +139,93 @@ Unknown → Known → PersonOfInterest → Hostile (if confrontation fails)
|
||||
- Known → PersonOfInterest: Behavioral flags accumulate, tells observed, manifest discrepancy linked to this NPC.
|
||||
- PersonOfInterest → Hostile: Confrontation attempt rejected, NPC realizes they're under investigation, escalation.
|
||||
|
||||
**Example**: Detective observes Kael. Unknown (first sight) → Known (lattice query: "Davan, K., dock worker") → PersonOfInterest (observed in restricted corridor, evasive answers) → Hostile (confrontation: "I know you're involved. You need to cooperate." / Kael: "Stay away from me.").
|
||||
**Example**: Detective observes a cargo handler. Unknown (first sight) → Known (lattice query: "dock worker, logistics") → PersonOfInterest (observed in restricted corridor, evasive answers) → Hostile (confrontation: "I know you're involved. You need to cooperate." / handler: "Stay away from me.").
|
||||
|
||||
---
|
||||
|
||||
### THE FRIEND Contradiction Arc (Kael — Smuggler's Perspective)
|
||||
### THE FRIEND Contradiction Arc (Smuggler's Perspective)
|
||||
|
||||
```
|
||||
Friendly → PersonOfInterest → [resolution: Friendly-but-contaminated OR Hostile]
|
||||
```
|
||||
|
||||
**Phase 1: Friendly (baseline)**
|
||||
- Kael is the smuggler's trusted colleague.
|
||||
- {THE FRIEND} is the smuggler's trusted colleague.
|
||||
- Monologue: fond, casual.
|
||||
- Color: soft green.
|
||||
- Dialogue: insider-tier, warm.
|
||||
|
||||
**Phase 2: First Crack (still Friendly, but flags accumulating)**
|
||||
- Behavioral flags: `lattice_checking,distracted`.
|
||||
- Monologue shifts slightly: "Kael's been quiet lately."
|
||||
- Monologue shifts slightly: "{THE FRIEND}'s been quiet lately."
|
||||
- State unchanged (still Friendly), but `EntityKnowledge.known_attributes["behavior_flags"]` updates.
|
||||
|
||||
**Phase 3: The Contradiction (Friendly → PersonOfInterest)**
|
||||
- Trigger: Direct observation of Kael meeting unknown contact in Corridor B-7.
|
||||
- Trigger: Direct observation of {THE FRIEND} meeting an unknown contact off-route.
|
||||
- `EntityKnowledge.known_attributes["contradiction_flagged"] = "meeting_unknown_contact"`.
|
||||
- `RelationshipState` transitions to `PersonOfInterest`.
|
||||
- Color shifts: soft green → amber.
|
||||
- Monologue: "That wasn't anyone from our rotation. Kael, what are you doing?"
|
||||
- Dialogue options change: confrontation unlocks, trust-tier content locks (Kael is evasive).
|
||||
- Monologue: "That wasn't anyone from our rotation. {THE FRIEND}, what are you doing?"
|
||||
- Dialogue options change: confrontation unlocks, trust-tier content locks ({THE FRIEND} is evasive).
|
||||
|
||||
**Phase 4: Post-Confrontation**
|
||||
- **Path A (understanding)**: Smuggler confronts Kael gently. Kael confesses: trying to exit the ring to protect Naia. `RelationshipState` remains `PersonOfInterest` but monologue tone shifts to conflicted sympathy. Color stays amber (still a problem), but dialogue reflects empathy.
|
||||
- **Path B (betrayal)**: Smuggler reports Kael to Nils or pressures Kael harshly. Kael turns defensive. `RelationshipState` → `Hostile`. Color → red. Kael avoids the smuggler, might actively obstruct.
|
||||
- **Path A (understanding)**: Smuggler confronts {THE FRIEND} gently. {THE FRIEND} confesses: trying to exit the ring to protect someone close to them. `RelationshipState` remains `PersonOfInterest` but monologue tone shifts to conflicted sympathy. Color stays amber (still a problem), but dialogue reflects empathy.
|
||||
- **Path B (betrayal)**: Smuggler reports {THE FRIEND} to ring leadership or applies harsh pressure. {THE FRIEND} turns defensive. `RelationshipState` → `Hostile`. Color → red. {THE FRIEND} avoids the smuggler, might actively obstruct.
|
||||
|
||||
**THE FRIEND pattern**: Friendly → PersonOfInterest is the emotional core. The player trusted Kael. Now Kael is amber. That color shift IS the narrative moment.
|
||||
**THE FRIEND pattern**: Friendly → PersonOfInterest is the emotional core. The player trusted {THE FRIEND}. Now {THE FRIEND} is amber. That color shift IS the narrative moment.
|
||||
|
||||
---
|
||||
|
||||
### THE FRIEND Contradiction Arc (Sera — Detective's Perspective)
|
||||
### THE FRIEND Contradiction Arc (Detective's Perspective)
|
||||
|
||||
```
|
||||
Friendly → PersonOfInterest → [resolution: Friendly-but-contaminated OR Known-distanced OR Hostile]
|
||||
```
|
||||
|
||||
**Phase 1: Friendly (baseline)**
|
||||
- Sera is the detective's institutional contact and social anchor.
|
||||
- {THE FRIEND} is the detective's institutional contact and social anchor.
|
||||
- Monologue: professional warmth, relief.
|
||||
- Color: soft green.
|
||||
- Dialogue: peer-tier, cooperative, helpful.
|
||||
|
||||
**Phase 2: Pattern Observation (still Friendly, but flags accumulating)**
|
||||
- Behavioral flags: `avoidance_pattern` (Sera leaves when Torek arrives).
|
||||
- Monologue: "That's the third time. Sera leaves when Torek shows up."
|
||||
- Behavioral flags: `avoidance_pattern` ({THE FRIEND} leaves when a suspect arrives).
|
||||
- Monologue: "That's the third time. {THE FRIEND} leaves when that person shows up."
|
||||
- State unchanged (still Friendly), but `EntityKnowledge.known_attributes["behavior_flags"]` updates.
|
||||
|
||||
**Phase 3: The Contradiction (Friendly → PersonOfInterest)**
|
||||
- Trigger: Detective asks Sera directly about Torek. Sera deflects unconvincingly.
|
||||
- Trigger: Detective asks {THE FRIEND} directly about their avoidance. {THE FRIEND} deflects unconvincingly.
|
||||
- `EntityKnowledge.known_attributes["contradiction_flagged"] = "avoidance_inconsistency"`.
|
||||
- `EntityKnowledge.known_attributes["secret_held"] = "unreported evidence"` (detective's inference).
|
||||
- `RelationshipState` transitions to `PersonOfInterest`.
|
||||
- Color shifts: soft green → amber.
|
||||
- Monologue: "She's not lying. But she's not telling me everything. Sera, what do you know?"
|
||||
- Monologue: "They're not lying. But they're not telling me everything. {THE FRIEND}, what do you know?"
|
||||
- Dialogue options change: pressing questions unlock, casual warmth diminishes.
|
||||
|
||||
**Phase 4: Post-Confrontation**
|
||||
- **Path A (loyalty test)**: Detective confronts Sera about concealment. Sera confesses: sitting on evidence to protect Naia (friend of Sera, partner of Kael). Detective can choose: report Sera (Hostile), use the information without reporting her (PersonOfInterest → Known, relationship damaged), or protect Sera and accept the information gap (PersonOfInterest → Friendly-but-contaminated).
|
||||
- **Path B (institutional)**: Detective reports Sera immediately. `RelationshipState` → `Hostile`. Sera is reprimanded or reassigned. Color → red. The detective loses their only local ally.
|
||||
- **Path A (loyalty test)**: Detective confronts {THE FRIEND} about concealment. {THE FRIEND} confesses: sitting on evidence to protect a third party. Detective can choose: report {THE FRIEND} (Hostile), use the information without reporting them (PersonOfInterest → Known, relationship damaged), or protect {THE FRIEND} and accept the information gap (PersonOfInterest → Friendly-but-contaminated).
|
||||
- **Path B (institutional)**: Detective reports {THE FRIEND} immediately. `RelationshipState` → `Hostile`. {THE FRIEND} is reprimanded or reassigned. Color → red. The detective loses their only local ally.
|
||||
|
||||
**THE FRIEND pattern**: The detective's trust in Sera is tested. Amber means "my friend is hiding something." The resolution determines whether the friendship survives.
|
||||
**THE FRIEND pattern**: The detective's trust in {THE FRIEND} is tested. Amber means "my contact is hiding something." The resolution determines whether the friendship survives.
|
||||
|
||||
---
|
||||
|
||||
## Contradiction Patterns: Kael + Sera
|
||||
## Contradiction Patterns: Smuggler vs. Detective Paths
|
||||
|
||||
Both THE FRIEND NPCs follow the same structural arc, but the **nature of the contradiction differs**:
|
||||
|
||||
| Dimension | Kael (Smuggler's FRIEND) | Sera (Detective's FRIEND) |
|
||||
|-----------|--------------------------|---------------------------|
|
||||
| **Contradiction type** | Spatial deviation (meeting unknown contact) | Behavioral avoidance (leaving when Torek arrives) |
|
||||
| Dimension | {THE FRIEND} — Smuggler Path | {THE FRIEND} — Detective Path |
|
||||
|-----------|------------------------------|-------------------------------|
|
||||
| **Contradiction type** | Spatial deviation (meeting unknown contact) | Behavioral avoidance (leaving when a suspect arrives) |
|
||||
| **Discovery method** | Direct observation in restricted area | Pattern recognition over multiple visits |
|
||||
| **What they're hiding** | Attempt to exit the ring (protect Naia) | Unreported evidence (protect Naia) |
|
||||
| **Sympathetic motivation** | Family protection (Naia is Kael's partner) | Friendship loyalty (Naia is Sera's friend) |
|
||||
| **Naia as connection** | Kael's personal life | Sera's social network |
|
||||
| **What they're hiding** | Attempt to exit the ring (protect someone close) | Unreported evidence (protect a third party) |
|
||||
| **Sympathetic motivation** | Personal protection (someone they care about) | Friendship loyalty (mutual third-party connection) |
|
||||
| **Third-party connection** | {THE FRIEND}'s personal life | {THE FRIEND}'s social network |
|
||||
| **Color shift timing** | Single observation event (immediate) | Third occurrence (cumulative) |
|
||||
| **Confrontation stakes** | Ring security vs. personal loyalty | Institutional duty vs. personal loyalty |
|
||||
| **Resolution spectrum** | Understanding ↔ Betrayal | Protect friend ↔ Report corruption |
|
||||
|
||||
**Common structure**: Both contradictions involve **Naia** as the emotional anchor. Naia is worried about Kael. Sera knows why (unreported evidence). Kael is trying to protect Naia (exit attempt). The smuggler and detective approach the same NPC web from opposite sides. THE FRIEND, in both cases, is the person caught in the middle trying to protect someone they care about.
|
||||
**Common structure**: Both contradictions involve a **shared third party** as the emotional anchor — someone both THE FRIEND NPCs are trying to protect, approached from opposite sides of the case.
|
||||
|
||||
---
|
||||
|
||||
@@ -239,7 +239,7 @@ Both THE FRIEND NPCs follow the same structural arc, but the **nature of the con
|
||||
|
||||
**Effect on relationship**: None directly. A Friendly NPC with Active knowledge remains Friendly.
|
||||
|
||||
**Example**: Smuggler's knowledge of Kael as "trusted colleague" is Active until the contradiction.
|
||||
**Example**: Smuggler's knowledge of {THE FRIEND} as "trusted colleague" is Active until the contradiction.
|
||||
|
||||
---
|
||||
|
||||
@@ -254,7 +254,7 @@ When `KnowledgeState` becomes `Contradicted`, the system:
|
||||
2. Triggers a monologue event: "Wait, that doesn't match what I thought I knew."
|
||||
3. Evaluates `RelationshipState` transition. If the contradicted knowledge is about a Friendly NPC, transition to PersonOfInterest.
|
||||
|
||||
**Example**: Smuggler's knowledge "Kael operates within ring protocol" contradicts with new observation "Kael meeting unauthorized contact." Both entries become `Contradicted`. Monologue fires. Kael's `RelationshipState` → `PersonOfInterest`.
|
||||
**Example**: Smuggler's knowledge "{THE FRIEND} operates within ring protocol" contradicts with new observation "{THE FRIEND} meeting unauthorized contact." Both entries become `Contradicted`. Monologue fires. {THE FRIEND}'s `RelationshipState` → `PersonOfInterest`.
|
||||
|
||||
---
|
||||
|
||||
@@ -264,7 +264,7 @@ When `KnowledgeState` becomes `Contradicted`, the system:
|
||||
|
||||
**Effect on relationship**: Degrades confidence but doesn't change relationship state. A Friendly NPC remains Friendly, but positional knowledge becomes unreliable.
|
||||
|
||||
**Example**: Smuggler last saw Kael at the hub 7 hours ago. `last_known_position` becomes Stale. Monologue: "Kael should be off-shift by now. Probably at the bar, but I haven't seen him."
|
||||
**Example**: Smuggler last saw {THE FRIEND} at the hub 7 hours ago. `last_known_position` becomes Stale. Monologue: "{THE FRIEND} should be off-shift by now. Probably at the bar, but I haven't seen them."
|
||||
|
||||
---
|
||||
|
||||
@@ -289,7 +289,7 @@ The dialogue system (D-028, D-035) uses `RelationshipState` as a filter:
|
||||
### Unknown → Known
|
||||
|
||||
- **Before**: "Who's that?"
|
||||
- **After**: "That's Drin, the maintenance tech."
|
||||
- **After**: "That's the maintenance tech."
|
||||
|
||||
**Shift**: Identification. Observer now has context.
|
||||
|
||||
@@ -297,8 +297,8 @@ The dialogue system (D-028, D-035) uses `RelationshipState` as a filter:
|
||||
|
||||
### Known → Friendly
|
||||
|
||||
- **Before**: "Drin's over there."
|
||||
- **After**: "Good to see Drin. Always fixes things without making a fuss."
|
||||
- **Before**: "They're over there."
|
||||
- **After**: "Good to see them. Always fixes things without making a fuss."
|
||||
|
||||
**Shift**: Warmth. Personal regard.
|
||||
|
||||
@@ -306,8 +306,8 @@ The dialogue system (D-028, D-035) uses `RelationshipState` as a filter:
|
||||
|
||||
### Friendly → PersonOfInterest (THE FRIEND)
|
||||
|
||||
- **Before**: "There's Kael. Good — I was starting to worry."
|
||||
- **After**: "Kael's here. But he's been acting strange. What's going on?"
|
||||
- **Before**: "There's {THE FRIEND}. Good — I was starting to worry."
|
||||
- **After**: "{THE FRIEND}'s here. But they've been acting strange. What's going on?"
|
||||
|
||||
**Shift**: Doubt contaminates warmth. The fond observation is now analytical.
|
||||
|
||||
@@ -315,8 +315,8 @@ The dialogue system (D-028, D-035) uses `RelationshipState` as a filter:
|
||||
|
||||
### PersonOfInterest → Hostile
|
||||
|
||||
- **Before**: "Kael's avoiding me. Something's wrong."
|
||||
- **After**: "Kael just signaled security. He's turned on me."
|
||||
- **Before**: "{THE FRIEND}'s avoiding me. Something's wrong."
|
||||
- **After**: "{THE FRIEND} just signaled security. They've turned on me."
|
||||
|
||||
**Shift**: Assessment → alarm.
|
||||
|
||||
@@ -329,7 +329,7 @@ The dialogue system (D-028, D-035) uses `RelationshipState` as a filter:
|
||||
```yaml
|
||||
prerequisite:
|
||||
relationship_state: PersonOfInterest
|
||||
subject: kael_davan
|
||||
subject: {npc_id}
|
||||
```
|
||||
- **Dialogue lines** filter on `access` tier, which is derived from `RelationshipState` + character type (smuggler/detective/NPC role).
|
||||
- **Color shifts** are client-side rendering, but the knowledge graph determines the state. Content authors write to the state; the client handles the color.
|
||||
@@ -343,4 +343,4 @@ The dialogue system (D-028, D-035) uses `RelationshipState` as a filter:
|
||||
|
||||
---
|
||||
|
||||
**Total states**: 5. **Load-bearing transitions for v0.1**: Unknown → Known (universal), Known/Friendly → PersonOfInterest (THE FRIEND), PersonOfInterest → Hostile (confrontation failure). Other transitions exist but are less structurally critical.
|
||||
**Total states**: 5. **Load-bearing transitions**: Unknown → Known (universal), Known/Friendly → PersonOfInterest (THE FRIEND), PersonOfInterest → Hostile (confrontation failure). Other transitions exist but are less structurally critical.
|
||||
|
||||
Reference in New Issue
Block a user