fix(copy): PR #53 review round 3 — span gate terminology, mood tags, em-dash consistency

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 <noreply@anthropic.com>
This commit is contained in:
2026-02-21 15:03:06 +01:00
co-authored by Claude Opus 4.6
parent 4be9cde3fa
commit e166409674
5 changed files with 39 additions and 35 deletions
@@ -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.
@@ -220,6 +220,7 @@ lines:
access: [insider]
trust: real
situation: [routine]
mood: [content]
topic: [colleague]
tags: [kael, ring-ops, drin, phase-2]
knowledge_grant:
@@ -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."
+1 -1
View File
@@ -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
+2
View File
@@ -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)