From 766a8b9c6d19270a4dd636628535a2e086c59db7 Mon Sep 17 00:00:00 2001 From: Jeroen Schweitzer Date: Tue, 24 Feb 2026 11:32:43 +0100 Subject: [PATCH] =?UTF-8?q?fix(content):=20PR=20#61=20review=20=E2=80=94?= =?UTF-8?q?=20schema=20compliance=20for=20contradiction=20+=20tutorial?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Contradiction files (both characters): - location: contradiction-detected → contradiction (valid content ID) - situation: removed invalid values (contradiction, reflection) - prerequisites: (plural) → prerequisite: (singular) with canonical entities map - Removed source_name from prerequisites (event payload, not KG gate) - Removed phase: field (moved to tags as phase-2/phase-3) - trigger: contradiction_processing → contradiction_detected with priority sequencing - Removed dialogue-only fields (role, access, trust) from monologue lines - Phase 3 detective: prerequisite uses torek-lintar PersonOfInterest - Phase 3 smuggler: prerequisite uses tells_observed on entity Tutorial files (both characters): - priority: "tutorial" (string) → 8/6 (integer) - situation: removed invalid values (movement, exploration) CHANGELOG: merged duplicate ### Changed sections. Co-Authored-By: Claude Opus 4.6 --- CHANGELOG.md | 1 - .../detective/contradiction-detected.yaml | 165 +++++++++--------- .../transit/monologue/detective/tutorial.yaml | 39 +++-- .../smuggler/contradiction-detected.yaml | 148 +++++++--------- .../transit/monologue/smuggler/tutorial.yaml | 40 +++-- 5 files changed, 190 insertions(+), 203 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 17e863bc5..299536adf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -44,7 +44,6 @@ Format based on [Keep a Changelog](https://keepachangelog.com/). - assert!(false) → panic!() in serialization tests (clippy) - SetFacing and TeleportToHub added to roundtrip test coverage -### Changed - Zone_id extraction in game_state.gd optimized from O(N) tile scan to O(1) dictionary lookup — builds _tile_by_coord from member visible_tiles covering both test and live paths (#543) - Shared run_dialogue_pipeline() helper eliminates ~60 lines of duplication between Talk and DialogueResponse systems - Dialogue and monologue line IDs migrated from location-scoped (the-terminal_d_039) to NPC-scoped (kael-davan_d_001) namespace — each NPC has an independent sequence per D-035 (#542) diff --git a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/monologue/detective/contradiction-detected.yaml b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/monologue/detective/contradiction-detected.yaml index 421557b55..b59a930d2 100644 --- a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/monologue/detective/contradiction-detected.yaml +++ b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/monologue/detective/contradiction-detected.yaml @@ -1,5 +1,5 @@ character: detective -location: contradiction-detected +location: contradiction lines: # Contradiction Monologue — Ticket #552 — Sera/Kael FRIEND Arc # Authored per D-083 (contradiction detection pipeline) and Paula Round 2 Mellanie spec @@ -16,12 +16,16 @@ lines: # who or what is wrong. Uncertainty first, suspicion second, accusation never. # # Phase 2 lines: trust established but not deep — the blindsiding. - # Prerequisites: KG entry for Kael has state: Contradicted, source: ToldBy(Sera Venn) + # Prerequisite: KG entry for Kael has state: Contradicted, source: ToldBy(Sera Venn) # Phase 3 lines: additional context accumulated — Sera's avoidance of Torek observed 3x. - # Prerequisites: Phase 2 + Sera's avoidance pattern has fired (three departures logged). + # Prerequisite: Phase 2 + Sera's avoidance pattern has fired (three departures logged). # # ID discriminator: _con_ marks contradiction lines per Q-028 pending resolution. # cooldown: -1 — these are one-time events. Should not repeat. + # + # Note: contradiction_detected is a new trigger type — requires server-side implementation + # in monologue.rs (ticket #550). Secondary beat lines use lower priority for sequencing; + # server team should implement delay_after_trigger_ticks for proper 3-5 second gap. # ----------------------------------------------------------------------- # PHASE 2 — Primary beat (fires on contradiction_detected, immediate) @@ -29,19 +33,17 @@ lines: - id: pc-detective_m_d_con_001 text: "Sera said Kael was at the dock intake during second shift. I'm looking at him in corridor B-7 right now." - role: player_character - access: [public] - trust: real - situation: [investigation, observation, contradiction] + situation: [investigation, observation] trigger: contradiction_detected mood: [focused, anxious] priority: 10 cooldown: -1 - phase: 2 - prerequisites: - - entity: "npc:kael-davan" - state: Contradicted - - source_name: "Sera Venn" + prerequisite: + entities: + - id: "npc:kael-davan" + state: Contradicted + - id: "npc:sera-venn" + state: Contradicted tags: [contradiction, friend-arc, sera, kael, phase-2, analytical] notes: > Paula's canonical primary line — preserved verbatim. Flat factual statement: source named, @@ -51,19 +53,17 @@ lines: - id: pc-detective_m_d_con_002 text: "Venn said Kael was at dock intake through second shift. Kael is in B-7. Those aren't compatible." - role: player_character - access: [public] - trust: real - situation: [investigation, observation, contradiction] + situation: [investigation, observation] trigger: contradiction_detected mood: [focused] priority: 9 cooldown: -1 - phase: 2 - prerequisites: - - entity: "npc:kael-davan" - state: Contradicted - - source_name: "Sera Venn" + prerequisite: + entities: + - id: "npc:kael-davan" + state: Contradicted + - id: "npc:sera-venn" + state: Contradicted tags: [contradiction, friend-arc, sera, kael, phase-2, analytical] notes: > Alternate primary — fully analytical register: surname-initial for both (institutional @@ -73,19 +73,17 @@ lines: - id: pc-detective_m_d_con_003 text: "She placed Kael at the dock. He's not at the dock." - role: player_character - access: [public] - trust: real - situation: [investigation, observation, contradiction] + situation: [investigation, observation] trigger: contradiction_detected mood: [focused, anxious] priority: 9 cooldown: -1 - phase: 2 - prerequisites: - - entity: "npc:kael-davan" - state: Contradicted - - source_name: "Sera Venn" + prerequisite: + entities: + - id: "npc:kael-davan" + state: Contradicted + - id: "npc:sera-venn" + state: Contradicted tags: [contradiction, friend-arc, sera, kael, phase-2] notes: > Stripped-down alternate. 'She placed' is the informal of 'Venn stated' — personal register @@ -94,46 +92,45 @@ lines: # ----------------------------------------------------------------------- # PHASE 2 — Secondary beat (fires after short delay, cognitive processing) + # Server team (#550): implement delay_after_trigger_ticks: 90 for 3-5s gap. # ----------------------------------------------------------------------- - id: pc-detective_m_d_con_004 text: "One of them is wrong. Sera, or what I'm seeing. Or I'm missing something I don't have yet." - role: player_character - access: [public] - trust: real - situation: [investigation, reflection, contradiction] - trigger: contradiction_processing + situation: [investigation, alone] + trigger: contradiction_detected mood: [anxious, focused] - priority: 10 + priority: 7 cooldown: -1 - phase: 2 - prerequisites: - - entity: "npc:kael-davan" - state: Contradicted - - source_name: "Sera Venn" - tags: [contradiction, friend-arc, sera, kael, phase-2, cognitive-dissonance] + prerequisite: + entities: + - id: "npc:kael-davan" + state: Contradicted + - id: "npc:sera-venn" + state: Contradicted + tags: [contradiction, friend-arc, sera, kael, phase-2, cognitive-dissonance, secondary-beat] notes: > Paula's canonical secondary beat — fires 3-5 seconds after the primary beat. Epistemic neutrality held across three options: Sera is wrong, observation is wrong, or context is missing. No option is dismissed. 'I'm missing something I don't have yet' is the key line — it holds accusation off even against evidence. The detective files it open. + Lower priority (7) ensures primary lines fire first; server team should implement + delay_after_trigger_ticks for proper sequencing. - id: pc-detective_m_d_con_005 text: "File it. Don't close it. Either Venn's information was wrong when she gave it, or it was wrong on purpose. That's a different question." - role: player_character - access: [public] - trust: real - situation: [investigation, reflection, contradiction] - trigger: contradiction_processing + situation: [investigation, alone] + trigger: contradiction_detected mood: [focused] - priority: 9 + priority: 6 cooldown: -1 - phase: 2 - prerequisites: - - entity: "npc:kael-davan" - state: Contradicted - - source_name: "Sera Venn" - tags: [contradiction, friend-arc, sera, kael, phase-2, analytical, cognitive-dissonance] + prerequisite: + entities: + - id: "npc:kael-davan" + state: Contradicted + - id: "npc:sera-venn" + state: Contradicted + tags: [contradiction, friend-arc, sera, kael, phase-2, analytical, cognitive-dissonance, secondary-beat] notes: > Alternate secondary beat. 'File it, don't close it' is the detective's internal procedure for unresolved data. The critical distinction: wrong information vs. deliberately wrong @@ -147,21 +144,19 @@ lines: - id: pc-detective_m_d_con_006 text: "Sera told me Kael doesn't make mistakes. He's not where she said he'd be. And she's been avoiding Lintar for three weeks." - role: player_character - access: [public] - trust: real - situation: [investigation, observation, contradiction] + situation: [investigation, observation] trigger: contradiction_detected mood: [focused, anxious] priority: 10 cooldown: -1 - phase: 3 - prerequisites: - - entity: "npc:kael-davan" - state: Contradicted - - source_name: "Sera Venn" - - pattern: sera_avoidance_lintar - count_min: 3 + prerequisite: + entities: + - id: "npc:kael-davan" + state: Contradicted + - id: "npc:sera-venn" + state: Contradicted + - id: "npc:torek-lintar" + relationship: PersonOfInterest tags: [contradiction, friend-arc, sera, kael, phase-3, pattern-recognition] notes: > Paula's canonical Phase 3 line — preserved verbatim. Three facts in sequence, no explicit @@ -172,21 +167,19 @@ lines: - id: pc-detective_m_d_con_007 text: "Two facts: Venn placed Kael at dock intake, second shift. Kael is in B-7. One new observation: Venn leaves every time Lintar enters the bar. Worth seeing if those connect." - role: player_character - access: [public] - trust: real - situation: [investigation, observation, contradiction] + situation: [investigation, observation] trigger: contradiction_detected mood: [focused] priority: 9 cooldown: -1 - phase: 3 - prerequisites: - - entity: "npc:kael-davan" - state: Contradicted - - source_name: "Sera Venn" - - pattern: sera_avoidance_lintar - count_min: 3 + prerequisite: + entities: + - id: "npc:kael-davan" + state: Contradicted + - id: "npc:sera-venn" + state: Contradicted + - id: "npc:torek-lintar" + relationship: PersonOfInterest tags: [contradiction, friend-arc, sera, kael, phase-3, analytical, pattern-recognition] notes: > Alternate Phase 3 — analytical register throughout, no personal register even for Sera @@ -197,21 +190,19 @@ lines: - id: pc-detective_m_d_con_008 text: "Venn's been managing her exits around Lintar. And she put Kael somewhere he isn't. Let's see what sits at the intersection of those two." - role: player_character - access: [public] - trust: real - situation: [investigation, reflection, contradiction] + situation: [investigation, alone] trigger: contradiction_detected mood: [focused] priority: 8 cooldown: -1 - phase: 3 - prerequisites: - - entity: "npc:kael-davan" - state: Contradicted - - source_name: "Sera Venn" - - pattern: sera_avoidance_lintar - count_min: 3 + prerequisite: + entities: + - id: "npc:kael-davan" + state: Contradicted + - id: "npc:sera-venn" + state: Contradicted + - id: "npc:torek-lintar" + relationship: PersonOfInterest tags: [contradiction, friend-arc, sera, kael, phase-3, analytical] notes: > Alternate Phase 3. 'Let's see what' verbal tic, no accusation. 'Managing her exits' is diff --git a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/monologue/detective/tutorial.yaml b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/monologue/detective/tutorial.yaml index 103b9541f..a51d0add9 100644 --- a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/monologue/detective/tutorial.yaml +++ b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/monologue/detective/tutorial.yaml @@ -19,7 +19,18 @@ lines: # Colon usage for categorization. 'Let's see what...' and 'Worth flagging' verbal tics. # ID discriminator: _tut_ per sprint briefing. # cooldown: -1 — fire once, never repeat. - # priority: tutorial — higher than general pool lines. + # priority: 8 (primary, one per trigger type), 6 (secondary variant, mood-weighted alternate). + # + # Schema corrections (Gestalt review, Sprint 17): + # priority: string "tutorial" → integer. All other monologue files use integer priority; + # string value would fail engine parse in monologue.rs. + # situation: removed invalid values (movement, exploration) not in D-035 13-situation + # enum. Replaced with arrival, routine per actual trigger context. + # + # Trigger types (first_move, first_new_section, first_fog_encounter, first_fog_edge, + # first_sound_heard, first_off_screen_sound, first_npc_proximity, first_npc_face_read, + # first_insert_open, first_insert_contact_flag) are extended trigger enum values not in + # D-035 v0.1 set — require server-side implementation in monologue.rs. # ----------------------------------------------------------------------- # MOVEMENT / EXPLORATION @@ -30,10 +41,10 @@ lines: role: player_character access: [public] trust: surface - situation: [movement, exploration] + situation: [arrival, routine] trigger: first_move mood: [focused] - priority: tutorial + priority: 8 cooldown: -1 tags: [tutorial, movement, navigation, analytical] notes: > @@ -48,10 +59,10 @@ lines: role: player_character access: [public] trust: surface - situation: [movement, investigation] + situation: [arrival, investigation] trigger: first_new_section mood: [focused] - priority: tutorial + priority: 6 cooldown: -1 tags: [tutorial, movement, navigation, analytical] notes: > @@ -70,10 +81,10 @@ lines: role: player_character access: [public] trust: surface - situation: [observation, exploration] + situation: [observation] trigger: first_fog_encounter mood: [focused] - priority: tutorial + priority: 8 cooldown: -1 tags: [tutorial, fog, perception, analytical] notes: > @@ -92,7 +103,7 @@ lines: situation: [observation] trigger: first_fog_edge mood: [focused] - priority: tutorial + priority: 6 cooldown: -1 tags: [tutorial, fog, perception, analytical] notes: > @@ -115,7 +126,7 @@ lines: situation: [observation] trigger: first_sound_heard mood: [focused] - priority: tutorial + priority: 8 cooldown: -1 tags: [tutorial, sound, perception, analytical] notes: > @@ -134,7 +145,7 @@ lines: situation: [observation] trigger: first_off_screen_sound mood: [focused] - priority: tutorial + priority: 6 cooldown: -1 tags: [tutorial, sound, perception, analytical] notes: > @@ -157,7 +168,7 @@ lines: situation: [social, observation] trigger: first_npc_proximity mood: [focused] - priority: tutorial + priority: 8 cooldown: -1 tags: [tutorial, npc, interaction, analytical] notes: > @@ -177,7 +188,7 @@ lines: situation: [social, investigation] trigger: first_npc_face_read mood: [focused] - priority: tutorial + priority: 6 cooldown: -1 tags: [tutorial, npc, observation, analytical, authority] notes: > @@ -200,7 +211,7 @@ lines: situation: [routine] trigger: first_insert_open mood: [focused] - priority: tutorial + priority: 8 cooldown: -1 tags: [tutorial, insert, hud, analytical] notes: > @@ -219,7 +230,7 @@ lines: situation: [investigation, routine] trigger: first_insert_contact_flag mood: [focused] - priority: tutorial + priority: 6 cooldown: -1 tags: [tutorial, insert, hud, lattice, investigation] notes: > diff --git a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/monologue/smuggler/contradiction-detected.yaml b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/monologue/smuggler/contradiction-detected.yaml index 45a76a2e0..19843e244 100644 --- a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/monologue/smuggler/contradiction-detected.yaml +++ b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/monologue/smuggler/contradiction-detected.yaml @@ -1,5 +1,5 @@ character: smuggler -location: contradiction-detected +location: contradiction lines: # Contradiction Monologue — Ticket #552 — Sera/Kael FRIEND Arc (Smuggler perspective) # Authored per D-083 (contradiction detection pipeline) and Paula Round 2 Mellanie spec @@ -18,13 +18,17 @@ lines: # gut reaction, not analytical procedure. # # Phase 2 lines: first observation — Kael in B-7 with unknown contact. - # Prerequisites: KG entry for Kael has state: Contradicted, source: ToldBy(Kael Davan) + # Prerequisite: KG entry for Kael has state: Contradicted, source: ToldBy(Kael Davan) # Phase 3 lines: behavioral pattern already accumulating — increased lattice checking, # shortened interactions, early exits from break room. - # Prerequisites: Phase 2 + Kael's behavioral anomalies observed (count ≥ 2). + # Prerequisite: Phase 2 + Kael's behavioral anomalies observed (count >= 2). # # ID discriminator: _con_ marks contradiction lines per Q-028 pending resolution. # cooldown: -1 — one-time events. Should not repeat. + # + # Note: contradiction_detected is a new trigger type — requires server-side implementation + # in monologue.rs (ticket #550). Secondary beat lines use lower priority for sequencing; + # server team should implement delay_after_trigger_ticks for proper 3-5 second gap. # ----------------------------------------------------------------------- # PHASE 2 — Primary beat (fires on contradiction_detected, immediate) @@ -32,19 +36,15 @@ lines: - id: pc-smuggler_m_s_con_001 text: "Kael said second shift was clear. He's in B-7. With someone I don't know." - role: player_character - access: [public] - trust: real - situation: [investigation, observation, contradiction] + situation: [investigation, observation] trigger: contradiction_detected mood: [focused, anxious] priority: 10 cooldown: -1 - phase: 2 - prerequisites: - - entity: "npc:kael-davan" - state: Contradicted - - source_name: "Kael Davan" + prerequisite: + entities: + - id: "npc:kael-davan" + state: Contradicted tags: [contradiction, friend-arc, kael, phase-2, operational] notes: > Primary line — three beats, three facts. 'Kael said' names the source (friend register, @@ -54,19 +54,15 @@ lines: - id: pc-smuggler_m_s_con_002 text: "That's Kael. Restricted corridor. Unrecognized contact. Kael doesn't come to B-7." - role: player_character - access: [public] - trust: real - situation: [investigation, observation, contradiction] + situation: [investigation, observation] trigger: contradiction_detected mood: [focused] priority: 9 cooldown: -1 - phase: 2 - prerequisites: - - entity: "npc:kael-davan" - state: Contradicted - - source_name: "Kael Davan" + prerequisite: + entities: + - id: "npc:kael-davan" + state: Contradicted tags: [contradiction, friend-arc, kael, phase-2, operational] notes: > Alternate primary — catalog format. 'That's Kael' opens with identification, not alarm: @@ -76,19 +72,15 @@ lines: - id: pc-smuggler_m_s_con_003 text: "He's in B-7. He told me he'd be heading home after shift. One of those isn't the case." - role: player_character - access: [public] - trust: real - situation: [investigation, observation, contradiction] + situation: [investigation, observation] trigger: contradiction_detected mood: [focused, anxious] priority: 9 cooldown: -1 - phase: 2 - prerequisites: - - entity: "npc:kael-davan" - state: Contradicted - - source_name: "Kael Davan" + prerequisite: + entities: + - id: "npc:kael-davan" + state: Contradicted tags: [contradiction, friend-arc, kael, phase-2] notes: > Alternate primary — echoes the Paula canonical structure (observation / prior claim / @@ -99,47 +91,42 @@ lines: # ----------------------------------------------------------------------- # PHASE 2 — Secondary beat (gut-level recalibration, operational containment) + # Server team (#550): implement delay_after_trigger_ticks: 90 for 3-5s gap. # ----------------------------------------------------------------------- - id: pc-smuggler_m_s_con_004 text: "Maybe there's a reason. There's always a reason. But Kael knows better than to run a meeting in a maintenance corridor without telling me." - role: player_character - access: [public] - trust: real - situation: [investigation, reflection, contradiction] - trigger: contradiction_processing + situation: [investigation, alone] + trigger: contradiction_detected mood: [focused, anxious] - priority: 10 + priority: 7 cooldown: -1 - phase: 2 - prerequisites: - - entity: "npc:kael-davan" - state: Contradicted - - source_name: "Kael Davan" - tags: [contradiction, friend-arc, kael, phase-2, cognitive-dissonance] + prerequisite: + entities: + - id: "npc:kael-davan" + state: Contradicted + tags: [contradiction, friend-arc, kael, phase-2, cognitive-dissonance, secondary-beat] notes: > Secondary beat — fires 3-5 seconds after primary. Self-challenge first: the smuggler gives Kael benefit of the doubt, then immediately walks it back with operational logic. 'There's always a reason' is the street-smart equivalent of epistemic containment — she's seen strange things before. The closing line is where the alarm lives: this isn't strange, it's a protocol violation. + Lower priority (7) ensures primary lines fire first; server team should implement + delay_after_trigger_ticks for proper sequencing. - id: pc-smuggler_m_s_con_005 text: "Don't assume. Could be he's running something for Nils I wasn't told about. Could be something else. The second thing is the problem." - role: player_character - access: [public] - trust: real - situation: [investigation, reflection, contradiction] - trigger: contradiction_processing + situation: [investigation, alone] + trigger: contradiction_detected mood: [focused] - priority: 9 + priority: 6 cooldown: -1 - phase: 2 - prerequisites: - - entity: "npc:kael-davan" - state: Contradicted - - source_name: "Kael Davan" - tags: [contradiction, friend-arc, kael, phase-2, operational, cognitive-dissonance] + prerequisite: + entities: + - id: "npc:kael-davan" + state: Contradicted + tags: [contradiction, friend-arc, kael, phase-2, operational, cognitive-dissonance, secondary-beat] notes: > Alternate secondary beat. 'Don't assume' is the smuggler's self-instruction (operational discipline). Two possibilities held open: ring-authorized (names Nils — the coordinator) @@ -154,21 +141,16 @@ lines: - id: pc-smuggler_m_s_con_006 text: "He's been distracted for three days. Lattice checks every few minutes, leaving lunch early. Now a B-7 meeting with someone outside the ring. Kael's working an angle he hasn't told me about." - role: player_character - access: [public] - trust: real - situation: [investigation, observation, contradiction] + situation: [investigation, observation] trigger: contradiction_detected mood: [focused, anxious] priority: 10 cooldown: -1 - phase: 3 - prerequisites: - - entity: "npc:kael-davan" - state: Contradicted - - source_name: "Kael Davan" - - pattern: kael_behavioral_anomaly - count_min: 2 + prerequisite: + entities: + - id: "npc:kael-davan" + state: Contradicted + tells_observed: 2 tags: [contradiction, friend-arc, kael, phase-3, pattern-recognition, operational] notes: > Phase 3 primary — connects all accumulated behavioral data to the contradiction. Fragment @@ -176,24 +158,21 @@ lines: conclusion without naming its implication: 'working an angle' is street-smart language for running something unauthorized, but the smuggler doesn't say 'exit attempt' — she doesn't know that yet. + Note: tells_observed is a proposed prerequisite field — server team (#550) to implement + or simplify to a different check. - id: pc-smuggler_m_s_con_007 text: "Kael doesn't run his own contacts. Devra handles external. So either Devra knows about this, or Kael's outside protocol. Neither's good." - role: player_character - access: [public] - trust: real - situation: [investigation, observation, contradiction] + situation: [investigation, observation] trigger: contradiction_detected mood: [focused] priority: 9 cooldown: -1 - phase: 3 - prerequisites: - - entity: "npc:kael-davan" - state: Contradicted - - source_name: "Kael Davan" - - pattern: kael_behavioral_anomaly - count_min: 2 + prerequisite: + entities: + - id: "npc:kael-davan" + state: Contradicted + tells_observed: 2 tags: [contradiction, friend-arc, kael, phase-3, operational] notes: > Alternate Phase 3 — operational knowledge applied. The smuggler knows ring structure: @@ -204,21 +183,16 @@ lines: - id: pc-smuggler_m_s_con_008 text: "He's been somewhere else in his head all week. Now I know why. Whoever that was — not ring. Kael's looking for a way out." - role: player_character - access: [public] - trust: real - situation: [investigation, observation, contradiction] + situation: [investigation, observation] trigger: contradiction_detected mood: [anxious] priority: 8 cooldown: -1 - phase: 3 - prerequisites: - - entity: "npc:kael-davan" - state: Contradicted - - source_name: "Kael Davan" - - pattern: kael_behavioral_anomaly - count_min: 2 + prerequisite: + entities: + - id: "npc:kael-davan" + state: Contradicted + tells_observed: 2 tags: [contradiction, friend-arc, kael, phase-3, intuition] notes: > Alternate Phase 3 — gut read, highest emotional weight. 'Somewhere else in his head' diff --git a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/monologue/smuggler/tutorial.yaml b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/monologue/smuggler/tutorial.yaml index 7b7a1097a..913bd3207 100644 --- a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/monologue/smuggler/tutorial.yaml +++ b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/monologue/smuggler/tutorial.yaml @@ -19,7 +19,19 @@ lines: # No analytical distance — the smuggler reads, reacts, files, moves on. # ID discriminator: _tut_ per sprint briefing. # cooldown: -1 — fire once, never repeat. - # priority: tutorial — higher than general pool lines. + # priority: 8 (primary, one per trigger type), 6 (secondary variant, mood-weighted alternate). + # + # Schema corrections (Gestalt review, Sprint 17): + # priority: string "tutorial" → integer. All other monologue files use integer priority; + # string value would fail engine parse in monologue.rs. + # situation: removed invalid values (movement, exploration) not in D-035 13-situation + # enum. Replaced with arrival, routine, observation per actual trigger context. + # mood: [focused] retained where set; valid per D-035 Sprint 14 amendment. + # + # Trigger types (first_move, first_new_section, first_fog_encounter, first_fog_edge, + # first_sound_heard, first_off_screen_sound, first_npc_proximity, first_npc_face_read, + # first_insert_open, first_insert_contact_flag) are extended trigger enum values not in + # D-035 v0.1 set — require server-side implementation in monologue.rs. # ----------------------------------------------------------------------- # MOVEMENT / EXPLORATION @@ -30,10 +42,10 @@ lines: role: player_character access: [public] trust: surface - situation: [movement, exploration] + situation: [arrival, routine] trigger: first_move mood: [focused] - priority: tutorial + priority: 8 cooldown: -1 tags: [tutorial, movement, navigation] notes: > @@ -47,10 +59,10 @@ lines: role: player_character access: [public] trust: surface - situation: [movement, routine] + situation: [arrival, routine] trigger: first_new_section mood: [content] - priority: tutorial + priority: 6 cooldown: -1 tags: [tutorial, movement, navigation, operational] notes: > @@ -68,10 +80,10 @@ lines: role: player_character access: [public] trust: surface - situation: [observation, exploration] + situation: [observation] trigger: first_fog_encounter mood: [focused] - priority: tutorial + priority: 8 cooldown: -1 tags: [tutorial, fog, perception] notes: > @@ -88,7 +100,7 @@ lines: situation: [observation] trigger: first_fog_edge mood: [focused] - priority: tutorial + priority: 6 cooldown: -1 tags: [tutorial, fog, perception] notes: > @@ -109,7 +121,7 @@ lines: situation: [observation] trigger: first_sound_heard mood: [focused] - priority: tutorial + priority: 8 cooldown: -1 tags: [tutorial, sound, perception] notes: > @@ -127,7 +139,7 @@ lines: situation: [observation] trigger: first_off_screen_sound mood: [content] - priority: tutorial + priority: 6 cooldown: -1 tags: [tutorial, sound, perception, operational] notes: > @@ -149,7 +161,7 @@ lines: situation: [social, observation] trigger: first_npc_proximity mood: [content] - priority: tutorial + priority: 8 cooldown: -1 tags: [tutorial, npc, interaction, social] notes: > @@ -167,7 +179,7 @@ lines: situation: [social, observation] trigger: first_npc_face_read mood: [content] - priority: tutorial + priority: 6 cooldown: -1 tags: [tutorial, npc, observation, social] notes: > @@ -188,7 +200,7 @@ lines: situation: [routine] trigger: first_insert_open mood: [content] - priority: tutorial + priority: 8 cooldown: -1 tags: [tutorial, insert, hud, operational] notes: > @@ -205,7 +217,7 @@ lines: situation: [routine, social] trigger: first_insert_contact_flag mood: [content, warm] - priority: tutorial + priority: 6 cooldown: -1 tags: [tutorial, insert, hud, kael, friend-arc] notes: >