From e166409674fbe89650e6f5c8df0e04976fedb55a Mon Sep 17 00:00:00 2001 From: Jeroen Schweitzer Date: Sat, 21 Feb 2026 15:03:06 +0100 Subject: [PATCH] =?UTF-8?q?fix(copy):=20PR=20#53=20review=20round=203=20?= =?UTF-8?q?=E2=80=94=20span=20gate=20terminology,=20mood=20tags,=20em-dash?= =?UTF-8?q?=20consistency?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fix "span gate threshold" → "span gate hum" (D-036 canonical term) in detective opening, add missing mood tags on opening_m_d_002 and the-terminal_d_020, normalize sera-venn double-dashes to em-dashes, fix situations.yaml header count, document greeting fallback behavior. Co-Authored-By: Claude Opus 4.6 --- .../dialogue/the-last-shift/sera-venn.yaml | 64 +++++++++---------- .../dialogue/the-terminal/kael-davan.yaml | 1 + .../transit/monologue/detective/opening.yaml | 5 +- content/global/enums/situations.yaml | 2 +- docs/design/layer2-situation-mapping.md | 2 + 5 files changed, 39 insertions(+), 35 deletions(-) diff --git a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/dialogue/the-last-shift/sera-venn.yaml b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/dialogue/the-last-shift/sera-venn.yaml index 9207ffedc..a3dfc3fc3 100644 --- a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/dialogue/the-last-shift/sera-venn.yaml +++ b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/dialogue/the-last-shift/sera-venn.yaml @@ -39,7 +39,7 @@ lines: # ============================================================ - id: the-last-shift_d_101 - text: "There you are. Grab a seat -- Lera's doing that thing with the grain spirit again. Don't ask, just trust me and order the ale." + text: "There you are. Grab a seat — Lera's doing that thing with the grain spirit again. Don't ask, just trust me and order the ale." role: bar-regular access: [peer] trust: surface @@ -49,7 +49,7 @@ lines: tags: [greeting, phase-1, establishes-warmth] - id: the-last-shift_d_102 - text: "Corner booth's free. I saved it -- force of habit." + text: "Corner booth's free. I saved it — force of habit." role: bar-regular access: [peer] trust: surface @@ -79,7 +79,7 @@ lines: tags: [greeting, phase-2-5, repeatable] - id: the-last-shift_d_105 - text: "Good timing. Naia was here earlier -- you just missed her." + text: "Good timing. Naia was here earlier — you just missed her." role: bar-regular access: [peer] trust: surface @@ -89,7 +89,7 @@ lines: tags: [greeting, phase-2, naia-reference] - id: the-last-shift_d_106 - text: "Grab a seat. Quiet night so far -- Lera's in a good mood, which means the ale's fresh." + text: "Grab a seat. Quiet night so far — Lera's in a good mood, which means the ale's fresh." role: bar-regular access: [peer, public] trust: surface @@ -134,7 +134,7 @@ lines: tags: [orientation, district-background] - id: the-last-shift_d_111 - text: "See the card game in the corner? That's Harek's table. Security officer, off-duty. Harmless -- just loud." + text: "See the card game in the corner? That's Harek's table. Security officer, off-duty. Harmless — just loud." role: bar-regular access: [peer] trust: surface @@ -184,7 +184,7 @@ lines: tags: [backstory, phase-1] - id: the-last-shift_d_116 - text: "Lera remembers every regular's order. Eighteen years of that. Don't ask how she does it -- she'll just pour you one and prove it." + text: "Lera remembers every regular's order. Eighteen years of that. Don't ask how she does it — she'll just pour you one and prove it." role: bar-regular access: [peer, public] trust: surface @@ -194,7 +194,7 @@ lines: tags: [community-texture] - id: the-last-shift_d_117 - text: "The shift crowd clears out by 19:00. After that it's just us -- regulars, a few stragglers. The good hours." + text: "The shift crowd clears out by 19:00. After that it's just us — regulars, a few stragglers. The good hours." role: bar-regular access: [peer] trust: surface @@ -233,7 +233,7 @@ lines: # --- Surface trust --- - id: the-last-shift_d_120 - text: "The Commission runs maintenance checks quarterly. I handle the field side -- equipment calibration, relay diagnostics. Standard." + text: "The Commission runs maintenance checks quarterly. I handle the field side — equipment calibration, relay diagnostics. Standard." role: bar-regular access: [peer, authority] trust: surface @@ -243,7 +243,7 @@ lines: tags: [institutional-background] - id: the-last-shift_d_121 - text: "Naia teaches the station kids. Primary education, mostly. She's good at it -- patient. The kids adore her." + text: "Naia teaches the station kids. Primary education, mostly. She's good at it — patient. The kids adore her." role: bar-regular access: [peer] trust: surface @@ -253,7 +253,7 @@ lines: tags: [naia-reference, phase-2] - id: the-last-shift_d_122 - text: "The district runs on freight. Terminal handles most of it -- container processing, manifest filing. Bread and butter." + text: "The district runs on freight. Terminal handles most of it — container processing, manifest filing. Bread and butter." role: bar-regular access: [peer, public] trust: surface @@ -295,7 +295,7 @@ lines: # --- Real trust --- - id: the-last-shift_d_130 - text: "Naia's been worried lately. About Kael -- her partner. He's a dock worker at the Terminal. Late nights, evasive answers. She confided in me." + text: "Naia's been worried lately. About Kael — her partner. He's a dock worker at the Terminal. Late nights, evasive answers. She confided in me." role: bar-regular access: [peer] trust: real @@ -373,7 +373,7 @@ lines: # --- Secret trust --- - id: the-last-shift_d_140 - text: "I ran a compliance check. Unauthorized. Six weeks ago. Naia was so worried about Kael -- I thought I could help. I found manifest discrepancies tied to his shifts." + text: "I ran a compliance check. Unauthorized. Six weeks ago. Naia was so worried about Kael — I thought I could help. I found manifest discrepancies tied to his shifts." role: bar-regular access: [peer] trust: secret @@ -396,7 +396,7 @@ lines: tags: [motivation-confession, phase-5] - id: the-last-shift_d_142 - text: "The irregularities correlate with Torek Lintar's inspection shifts. That's why I can't -- I can't be near him. He doesn't know I know." + text: "The irregularities correlate with Torek Lintar's inspection shifts. That's why I can't — I can't be near him. He doesn't know I know." role: bar-regular access: [peer] trust: secret @@ -409,7 +409,7 @@ lines: confidence: "knows_details" - id: the-last-shift_d_143 - text: "I don't know what you're looking for. I told you everything I know. If you're asking whether I'm hiding something -- I'm a field tech, not an analyst." + text: "I don't know what you're looking for. I told you everything I know. If you're asking whether I'm hiding something — I'm a field tech, not an analyst." role: bar-regular access: [peer, authority] trust: secret @@ -435,7 +435,7 @@ lines: # ============================================================ - id: the-last-shift_d_150 - text: "Oh -- before I forget. The dock scheduler, Maret? She's sharp. If you need freight records context, she's the one to ask." + text: "Oh — before I forget. The dock scheduler, Maret? She's sharp. If you need freight records context, she's the one to ask." role: bar-regular access: [peer] trust: surface @@ -448,7 +448,7 @@ lines: confidence: "suspects" - id: the-last-shift_d_151 - text: "I checked the relay calibration logs for the Terminal this morning. Nothing flagged. But the data throughput was higher than standard -- more manifests processed than usual." + text: "I checked the relay calibration logs for the Terminal this morning. Nothing flagged. But the data throughput was higher than standard — more manifests processed than usual." role: bar-regular access: [peer, authority] trust: real @@ -458,7 +458,7 @@ lines: tags: [unprompted, overcompensation, phase-3-4] - id: the-last-shift_d_152 - text: "I asked around -- quietly -- about the shift rotation schedule. Voss has been adjusting it more than usual this cycle. Might mean nothing." + text: "I asked around — quietly — about the shift rotation schedule. Voss has been adjusting it more than usual this cycle. Might mean nothing." role: bar-regular access: [peer] trust: real @@ -491,7 +491,7 @@ lines: confidence: "knows_details" - id: the-last-shift_d_155 - text: "You should know -- Lera watches out for her regulars. If people have been asking about you, she'd know. She just won't volunteer it." + text: "You should know — Lera watches out for her regulars. If people have been asking about you, she'd know. She just won't volunteer it." role: bar-regular access: [peer] trust: real @@ -506,7 +506,7 @@ lines: # ============================================================ - id: the-last-shift_d_160 - text: "Actually, I should head out. Early shift tomorrow -- calibration rounds start at 07:30." + text: "Actually, I should head out. Early shift tomorrow — calibration rounds start at 07:30." role: bar-regular access: [peer, public] trust: surface @@ -516,7 +516,7 @@ lines: tags: [avoidance-excuse-1, torek-trigger, phase-3] - id: the-last-shift_d_161 - text: "Sorry -- headache coming on. Station air does that sometimes. I'll catch you tomorrow." + text: "Sorry — headache coming on. Station air does that sometimes. I'll catch you tomorrow." role: bar-regular access: [peer, public] trust: surface @@ -526,7 +526,7 @@ lines: tags: [avoidance-excuse-2, torek-trigger, phase-3] - id: the-last-shift_d_162 - text: "I need to check something at the Commission kiosk. Forgot to file a diagnostic report. I'll be quick -- or not. You know how the system is." + text: "I need to check something at the Commission kiosk. Forgot to file a diagnostic report. I'll be quick — or not. You know how the system is." role: bar-regular access: [peer] trust: surface @@ -536,7 +536,7 @@ lines: tags: [avoidance-excuse-3, torek-trigger, phase-3] - id: the-last-shift_d_163 - text: "Torek? He's just loud. I don't love loud drunks. Nothing personal -- I just like a quieter evening." + text: "Torek? He's just loud. I don't love loud drunks. Nothing personal — I just like a quieter evening." role: bar-regular access: [peer] trust: surface @@ -546,7 +546,7 @@ lines: tags: [torek-deflection, phase-4, the-deflection] - id: the-last-shift_d_164 - text: "Manifests? I wouldn't know -- I'm on the equipment side, not the freight side. Different department entirely." + text: "Manifests? I wouldn't know — I'm on the equipment side, not the freight side. Different department entirely." role: bar-regular access: [peer, authority] trust: surface @@ -556,7 +556,7 @@ lines: tags: [topic-deflection, cargo-avoidance, phase-3-5] - id: the-last-shift_d_165 - text: "Anyway -- did you try the ale? Lera got a new supply run in. Much better than last week's batch." + text: "Anyway — did you try the ale? Lera got a new supply run in. Much better than last week's batch." role: bar-regular access: [peer] trust: surface @@ -566,7 +566,7 @@ lines: tags: [redirect, warmth-recovery, phase-4] - id: the-last-shift_d_166 - text: "I'm just a field tech. I maintain equipment. I don't track people or shipments -- that's your department." + text: "I'm just a field tech. I maintain equipment. I don't track people or shipments — that's your department." role: bar-regular access: [peer, authority] trust: surface @@ -576,7 +576,7 @@ lines: tags: [deflection-firm, phase-4-5, the-wall] - id: the-last-shift_d_167 - text: "Let's talk about something else. How's the investigation going -- generally? Making progress?" + text: "Let's talk about something else. How's the investigation going — generally? Making progress?" role: bar-regular access: [peer] trust: real @@ -632,7 +632,7 @@ lines: tags: [post-discovery, genuine-but-contaminated, phase-5] - id: the-last-shift_d_174 - text: "If there's anything I can help with -- anything at all -- you just ask. You know that." + text: "If there's anything I can help with — anything at all — you just ask. You know that." role: bar-regular access: [peer] trust: real @@ -651,7 +651,7 @@ lines: # first_meeting (detective path): RelationshipState Unknown → Public/Authority access. # Sera clocks them as Commission immediately. Makes them welcome anyway. - id: the-last-shift_d_175 - text: "Commission? Don't worry, I don't bite. I'm Sera. Corner booth's better -- you can see the whole room." + text: "Commission? Don't worry, I don't bite. I'm Sera. Corner booth's better — you can see the whole room." role: bar-regular access: [public, authority] trust: surface @@ -659,7 +659,7 @@ lines: mood: [warm] topic: [personal, institution] tags: [sera, greeting, first-meeting, detective-path, layer2] - notes: "Layer 2 greeting — first meeting, detective path. Sera reads the institutional marking immediately and disarms it. Corner booth tip is genuine -- Sera always notices the useful details." + notes: "Layer 2 greeting — first meeting, detective path. Sera reads the institutional marking immediately and disarms it. Corner booth tip is genuine — Sera always notices the useful details." # established (detective path): count >= 3, RelationshipState: Known/Friendly → Peer access. # Warmer, more personal. Sera has been waiting for them. @@ -672,10 +672,10 @@ lines: mood: [warm] topic: [personal, investigation] tags: [sera, greeting, repeat-visit, detective-path, layer2] - notes: "Layer 2 greeting — established, detective path. Personal, invested. Sera asks about their day the way a friend does -- not just small talk." + notes: "Layer 2 greeting — established, detective path. Personal, invested. Sera asks about their day the way a friend does — not just small talk." # first_meeting (smuggler path): smuggler is dock crew, Sera knows the district crowd. - # Peer/insider access from the start -- Sera has social network, not institutional distance. + # Peer/insider access from the start — Sera has social network, not institutional distance. - id: the-last-shift_d_177 text: "Terminal crew? Grab a seat. Kael usually sits in the back if you're looking for him." role: bar-regular @@ -685,7 +685,7 @@ lines: mood: [content] topic: [colleague, personal] tags: [sera, greeting, first-meeting, smuggler-path, layer2] - notes: "Layer 2 greeting — first meeting, smuggler path. Sera recognizes dock crew on sight and extends the social network. Mentioning Kael is casual intel -- she knows everyone's connections." + notes: "Layer 2 greeting — first meeting, smuggler path. Sera recognizes dock crew on sight and extends the social network. Mentioning Kael is casual intel — she knows everyone's connections." # post-confrontation: confrontation logged. Sera's surface warmth is present but qualified. # She doesn't know where they stand. The welcome is real but uncertain. diff --git a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/dialogue/the-terminal/kael-davan.yaml b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/dialogue/the-terminal/kael-davan.yaml index d3527a1dc..e5fd61826 100644 --- a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/dialogue/the-terminal/kael-davan.yaml +++ b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/dialogue/the-terminal/kael-davan.yaml @@ -220,6 +220,7 @@ lines: access: [insider] trust: real situation: [routine] + mood: [content] topic: [colleague] tags: [kael, ring-ops, drin, phase-2] knowledge_grant: diff --git a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/monologue/detective/opening.yaml b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/monologue/detective/opening.yaml index cb877d1f0..5696d91be 100644 --- a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/monologue/detective/opening.yaml +++ b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/monologue/detective/opening.yaml @@ -24,16 +24,17 @@ lines: notes: "Opening line. Reality matches the briefing — he arrived prepared. Establishes: detective as institutional outsider sent here. Cool-lit corridors per D-046 expressed through 'half-cycle' lighting observation. No contractions (analytical)." - id: opening_m_d_002 - text: "Cargo lubricant, recycled atmosphere. Same mixture on every freight hub from here to the span gate threshold. First observation: consistent with Commission briefing profile." + text: "Cargo lubricant, recycled atmosphere. Same mixture on every freight hub from here to the span gate hum. First observation: consistent with Commission briefing profile." role: player_character access: [public] trust: surface situation: [arrival, shift_start] trigger: enter_location + mood: [focused] priority: 10 cooldown: 9999 tags: [opening-hook, tutorial-arc, atmospheric, analytical] - notes: "Environmental sensory in analytical register. Colon usage (detective verbal pattern, section 2.2). No contractions. 'span gate threshold' is canonical terminology (D-036). Contrast with smuggler's 'Home sweet home' — same smell, opposite emotional valence. He's working, not home." + notes: "Environmental sensory in analytical register. Colon usage (detective verbal pattern, section 2.2). No contractions. 'span gate' is canonical terminology (D-036); 'hum' is sensory detail. Contrast with smuggler's 'Home sweet home' — same smell, opposite emotional valence. He's working, not home." - id: opening_m_d_003 text: "Lattice overlay initializing. Four identity flags in immediate range — cross-referencing against Commission case file." diff --git a/content/global/enums/situations.yaml b/content/global/enums/situations.yaml index 74ccedd18..5bdd35a5b 100644 --- a/content/global/enums/situations.yaml +++ b/content/global/enums/situations.yaml @@ -1,4 +1,4 @@ -# 13 situation values (D-035, D-028 Layer 2) +# 14 situation values (D-035, D-028 Layer 2) # Situation context for dialogue line eligibility — engine-state-to-situation mapping name: situations decision_ref: D-035 diff --git a/docs/design/layer2-situation-mapping.md b/docs/design/layer2-situation-mapping.md index 5668e1e5e..506fb9da4 100644 --- a/docs/design/layer2-situation-mapping.md +++ b/docs/design/layer2-situation-mapping.md @@ -201,6 +201,8 @@ Content lines use `situation: [greeting]` as their tag. The engine currently pus **Schema note (dialogue-line.schema.json):** `"'greeting' is not yet in server/src/content/line_pool.rs — lines using it will be skipped until Rust is updated."` +**Current fallback behavior:** Until the Rust update lands, lines tagged `situation: [greeting]` are excluded from the candidate pool entirely — they never fire. NPCs greet the player using their `situation: [routine]` or `situation: [social]` lines instead, filtered by access tier and mood as usual. This means Layer 2 relationship-aware greetings are functionally dormant; the content exists and is schema-valid, but the engine skips it. No error is raised — the line pool query simply finds no match for the `greeting` situation and falls through to other eligible lines. + **Intended resolution (pending Rust update):** When `server/src/content/line_pool.rs` is updated to include `Situation::Greeting`, `greeting`-tagged content lines will fire. The Layer 2 relationship history distinction will then work through the access tier filtering that is already implemented: - `access: [public]` + `situation: [greeting]` → first meeting lines (Unknown relationship)