fix(content): normalize fact_ids, entity refs, tags across FRIEND content

Fixes from Gestalt mechanical review:
- 73 fact_id normalizations to dotted category.topic format (critical:
  fixes broken detective evidence chain from Sera to Kael observations)
- Entity refs normalized to npc:hyphenated format (~15 occurrences)
- Phase tags standardized (friend-arc-phaseN → phase-N)
- Phase-2 tags added to 8 Kael ring ops lines
- bar_evening situation added to 15 Kael Last Shift lines
- Mood tags added to 10 Kael lines missing them
- 7 new detective monologue lines about Kael (gap: 7 → 15 lines)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-13 17:52:05 +01:00
co-authored by Claude Opus 4.6
parent 99550ed0f5
commit 124573e1c5
6 changed files with 334 additions and 59 deletions
@@ -92,7 +92,7 @@ lines:
trigger: observe_anomaly
prerequisites:
facts:
- fact_id: smuggling_route
- fact_id: investigation.smuggling_route
min_confidence: suspects
priority: 8
tags: [investigation, evidence, breakthrough]
@@ -102,7 +102,7 @@ lines:
trigger: observe_anomaly
prerequisites:
facts:
- fact_id: renn_courier_role
- fact_id: investigation.renn_courier_role
min_confidence: knows_of
priority: 7
tags: [npc, renn, investigation, evidence]
@@ -112,7 +112,7 @@ lines:
trigger: observe_anomaly
prerequisites:
facts:
- fact_id: surveillance_gaps
- fact_id: investigation.surveillance_gaps
min_confidence: suspects
tags: [investigation, operational]
@@ -121,7 +121,7 @@ lines:
trigger: time_idle
prerequisites:
facts:
- fact_id: smuggling_route
- fact_id: investigation.smuggling_route
min_confidence: knows_details
priority: 9
tags: [investigation, breakthrough]
@@ -131,7 +131,7 @@ lines:
trigger: observe_anomaly
prerequisites:
facts:
- fact_id: corridor_regular_use
- fact_id: investigation.corridor_regular_use
min_confidence: knows_of
tags: [investigation, evidence]
@@ -140,7 +140,7 @@ lines:
trigger: time_idle
prerequisites:
facts:
- fact_id: kael_corridor_sighting
- fact_id: investigation.kael_corridor_sighting
min_confidence: suspects
priority: 7
tags: [npc, kael, investigation]
@@ -150,7 +150,7 @@ lines:
trigger: time_idle
prerequisites:
facts:
- fact_id: oversight_gap_pattern
- fact_id: investigation.oversight_gap_pattern
min_confidence: knows_details
tags: [investigation, analytical]
@@ -159,7 +159,7 @@ lines:
trigger: time_idle
prerequisites:
facts:
- fact_id: drin_gambling_debt
- fact_id: investigation.drin_gambling_debt
min_confidence: knows_details
priority: 6
tags: [npc, drin, investigation, moral]
@@ -169,6 +169,6 @@ lines:
trigger: time_idle
prerequisites:
facts:
- fact_id: ring_existence
- fact_id: investigation.ring_existence
min_confidence: suspects
tags: [investigation, reflection]
@@ -112,7 +112,7 @@ lines:
trigger: observe_anomaly
prerequisites:
facts:
- fact_id: sera_avoidance_pattern
- fact_id: behavioral.sera_avoidance_pattern
min_confidence: suspects
priority: 7
tags: [npc, sera, torek, tell, friend-arc]
@@ -122,7 +122,7 @@ lines:
trigger: observe_anomaly
prerequisites:
facts:
- fact_id: sera_avoidance_pattern
- fact_id: behavioral.sera_avoidance_pattern
min_confidence: knows_of
priority: 9
tags: [npc, sera, torek, tell, friend-arc, contradiction]
@@ -132,7 +132,7 @@ lines:
trigger: observe_npc
prerequisites:
facts:
- fact_id: torek_spending_pattern
- fact_id: investigation.torek_spending_pattern
min_confidence: knows_of
tags: [npc, torek, investigation]
@@ -141,7 +141,7 @@ lines:
trigger: observe_npc
prerequisites:
facts:
- fact_id: bar_back_room_significance
- fact_id: knowledge.bar_back_room_significance
min_confidence: suspects
tags: [npc, lera, investigation]
@@ -150,7 +150,7 @@ lines:
trigger: post_conversation
prerequisites:
relationship:
target: sera_venn
target: npc:sera-venn
state: person_of_interest
priority: 7
tags: [npc, sera, friend-arc, behavioral]
@@ -160,7 +160,7 @@ lines:
trigger: observe_npc
prerequisites:
relationship:
target: sera_venn
target: npc:sera-venn
state: person_of_interest
priority: 8
tags: [npc, sera, contaminated-trust, friend-arc]
@@ -170,7 +170,7 @@ lines:
trigger: observe_npc
prerequisites:
relationship:
target: naia_tamm
target: npc:naia-tamm
state: known
tags: [npc, naia, behavioral]
@@ -179,7 +179,7 @@ lines:
trigger: witness_interaction
prerequisites:
facts:
- fact_id: bar_ring_awareness
- fact_id: knowledge.bar_ring_awareness
min_confidence: suspects
tags: [npc, lera, investigation]
@@ -188,7 +188,7 @@ lines:
trigger: witness_interaction
prerequisites:
relationship:
target: kael_davan
target: npc:kael-davan
state: known
tags: [npc, kael, naia, behavioral]
@@ -197,6 +197,153 @@ lines:
trigger: return_visit
prerequisites:
facts:
- fact_id: bar_regular_status
- fact_id: social.bar_regular_status
min_confidence: knows_of
tags: [social, progress]
# --- Kael Davan — Additional Bar Observations ---
# Ticket: #297 review fix | Filling detective monologue gap
- id: the-last-shift_m_d_043
text: "Davan is different here. Looser. The dock worker persona drops and something warmer replaces it."
trigger: observe_npc
prerequisites:
relationship:
target: npc:kael-davan
state: known
tags: [npc, kael, behavioral, dual-context]
- id: the-last-shift_m_d_044
text: "Davan checks the door every time it opens. Even here. Even off-shift. That is not relaxation."
trigger: observe_npc
prerequisites:
relationship:
target: npc:kael-davan
state: person_of_interest
priority: 7
tags: [npc, kael, tell, behavioral, friend-arc]
# --- Sera Venn FRIEND Arc — Tell Observations + Phase Transitions ---
# Ticket: #298 | Author: Paula
# These track the detective's evolving perception of Sera across the
# 5-phase FRIEND arc: trust > background data > pattern > question >
# contaminated trust. Contraction shifts mark objectivity loss.
- id: the-last-shift_m_d_031
text: "Sera changed the subject when I mentioned manifests. Smooth. Practised, maybe."
trigger: post_conversation
prerequisites:
facts:
- fact_id: behavioral.sera_topic_deflection
min_confidence: suspects
priority: 6
tags: [npc, sera, tell, behavioral, friend-arc]
- id: the-last-shift_m_d_032
text: "She volunteers names, routines, context. Gives everything I ask for -- except what I did not."
trigger: post_conversation
prerequisites:
relationship:
target: npc:sera-venn
state: friendly
priority: 6
tags: [npc, sera, tell, overcompensation, friend-arc]
- id: the-last-shift_m_d_033
text: "Sera at the Commission kiosk. Third pass this shift. That is not standard recalibration."
trigger: observe_npc
prerequisites:
facts:
- fact_id: behavioral.sera_kiosk_pattern
min_confidence: suspects
priority: 7
tags: [npc, sera, tell, peripheral, friend-arc]
- id: the-last-shift_m_d_034
text: "Everything Sera told me checks out. Layout, schedules, regulars. Accurate. Thorough. Selective?"
trigger: post_conversation
prerequisites:
relationship:
target: npc:sera-venn
state: friendly
priority: 5
tags: [npc, sera, analytical, phase-2-3, friend-arc]
- id: the-last-shift_m_d_035
text: "She mentioned Naia's worry about Kael early -- before I had context. Priming, or concern?"
trigger: post_conversation
prerequisites:
facts:
- fact_id: relationship.kael_naia_connection
min_confidence: knows_of
priority: 7
tags: [npc, sera, naia, retrospective, friend-arc]
- id: the-last-shift_m_d_036
text: "Sera's institutional access goes further than field calibration. She could pull records I cannot."
trigger: time_idle
prerequisites:
relationship:
target: npc:sera-venn
state: friendly
tags: [npc, sera, analytical, capability, friend-arc]
- id: the-last-shift_m_d_037
text: "Assessment: Venn, S. Cooperative. Embedded. Competent. Green -- with reservations now."
trigger: time_idle
prerequisites:
facts:
- fact_id: behavioral.sera_avoidance_pattern
min_confidence: suspects
priority: 7
tags: [npc, sera, phase-transition, analytical, friend-arc]
- id: the-last-shift_m_d_038
text: "Correction: amber. The avoidance pattern is behavioural, not preferential. Data, not taste."
trigger: observe_anomaly
prerequisites:
facts:
- fact_id: behavioral.sera_avoidance_pattern
min_confidence: knows_of
priority: 9
tags: [npc, sera, phase-transition, tell, contradiction, friend-arc]
- id: the-last-shift_m_d_039
text: "She's the first person who made this place feel less foreign. I need that to not matter right now."
trigger: time_idle
prerequisites:
relationship:
target: npc:sera-venn
state: person_of_interest
priority: 8
tags: [npc, sera, emotional, phase-4-5, friend-arc]
- id: the-last-shift_m_d_040
text: "Those early tips. The district layout, the introductions. Were those help -- or steering?"
trigger: time_idle
prerequisites:
relationship:
target: npc:sera-venn
state: person_of_interest
priority: 7
tags: [npc, sera, contaminated-trust, retrospective, friend-arc]
- id: the-last-shift_m_d_041
text: "She's not a suspect. She's a friend with access to everything I need. That is the problem."
trigger: time_idle
prerequisites:
facts:
- fact_id: behavioral.sera_avoidance_pattern
min_confidence: knows_of
priority: 8
tags: [npc, sera, contaminated-trust, phase-4-5, friend-arc]
- id: the-last-shift_m_d_042
text: "Trust: compromised. The question is not what she told me. It is what she did not."
trigger: post_conversation
prerequisites:
relationship:
target: npc:sera-venn
state: person_of_interest
priority: 9
tags: [npc, sera, contaminated-trust, phase-5, friend-arc, closing]
@@ -132,7 +132,7 @@ lines:
trigger: observe_anomaly
prerequisites:
relationship:
target: kael_davan
target: npc:kael-davan
state: known
tags: [npc, kael, behavioral, tell]
@@ -141,7 +141,7 @@ lines:
trigger: observe_anomaly
prerequisites:
facts:
- fact_id: manifest_discrepancy
- fact_id: investigation.manifest_discrepancy
min_confidence: knows_of
priority: 7
tags: [investigation, evidence]
@@ -151,7 +151,7 @@ lines:
trigger: observe_anomaly
prerequisites:
facts:
- fact_id: manifest_discrepancy
- fact_id: investigation.manifest_discrepancy
min_confidence: suspects
tags: [investigation, evidence]
@@ -160,7 +160,7 @@ lines:
trigger: time_idle
prerequisites:
facts:
- fact_id: drin_gambling_debt
- fact_id: investigation.drin_gambling_debt
min_confidence: knows_details
tags: [npc, drin, investigation, moral]
@@ -169,7 +169,7 @@ lines:
trigger: time_idle
prerequisites:
facts:
- fact_id: manifest_discrepancy
- fact_id: investigation.manifest_discrepancy
min_confidence: knows_of
priority: 7
tags: [investigation, analytical]
@@ -179,7 +179,7 @@ lines:
trigger: time_idle
prerequisites:
facts:
- fact_id: oversight_gap_pattern
- fact_id: investigation.oversight_gap_pattern
min_confidence: knows_details
priority: 7
tags: [investigation, operational]
@@ -189,7 +189,7 @@ lines:
trigger: observe_anomaly
prerequisites:
entity_attributes:
- entity: maret_korr
- entity: npc:maret-korr
key: behavior_flags
value: schedule_modification
tags: [npc, maret, investigation]
@@ -199,7 +199,7 @@ lines:
trigger: observe_npc
prerequisites:
facts:
- fact_id: drin_inspection_pattern
- fact_id: investigation.drin_inspection_pattern
min_confidence: knows_of
priority: 8
tags: [npc, drin, investigation, behavioral]
@@ -209,7 +209,7 @@ lines:
trigger: observe_anomaly
prerequisites:
relationship:
target: kael_davan
target: npc:kael-davan
state: known
tags: [npc, kael, investigation]
@@ -218,7 +218,7 @@ lines:
trigger: observe_npc
prerequisites:
facts:
- fact_id: voss_awareness
- fact_id: behavioral.voss_awareness
min_confidence: suspects
priority: 6
tags: [npc, voss, investigation]
@@ -228,7 +228,61 @@ lines:
trigger: discover_evidence
prerequisites:
facts:
- fact_id: manifest_discrepancy
- fact_id: investigation.manifest_discrepancy
min_confidence: knows_details
priority: 9
tags: [investigation, evidence, breakthrough]
# --- Kael Davan FRIEND Arc — Additional Detective Observations ---
# Ticket: #297 review fix | Filling detective monologue gap (7 → 12 Kael lines)
- id: the-terminal_m_d_036
text: "Davan's shift pattern is clean. Too clean. Same bays, same hours, same rotation. Nothing out of place."
trigger: observe_npc
prerequisites:
relationship:
target: npc:kael-davan
state: known
tags: [npc, kael, analytical, behavioral]
- id: the-terminal_m_d_037
text: "Davan eats with the same group every shift. Social anchor, or keeping tabs?"
trigger: observe_npc
prerequisites:
relationship:
target: npc:kael-davan
state: known
tags: [npc, kael, social, behavioral]
- id: the-terminal_m_d_038
text: "Davan handled that container routing without checking the manifest board. He knows the schedule by heart."
trigger: observe_npc
prerequisites:
relationship:
target: npc:kael-davan
state: known
priority: 6
tags: [npc, kael, behavioral, tell, competence]
- id: the-terminal_m_d_039
text: "Davan's posture changed when I approached bay four. Subtle. Filing it."
trigger: observe_anomaly
prerequisites:
relationship:
target: npc:kael-davan
state: person_of_interest
priority: 7
tags: [npc, kael, tell, behavioral, friend-arc]
- id: the-terminal_m_d_040
text: "Three manifests with weight discrepancies. All during Davan's shifts. Correlation is not causation. But noted."
trigger: time_idle
prerequisites:
facts:
- fact_id: investigation.manifest_discrepancy
min_confidence: knows_of
relationship:
target: npc:kael-davan
state: person_of_interest
priority: 8
tags: [npc, kael, investigation, evidence, analytical]
@@ -92,7 +92,7 @@ lines:
trigger: enter_location
prerequisites:
facts:
- fact_id: kael_corridor_meeting
- fact_id: investigation.kael_corridor_meeting
min_confidence: suspects
priority: 8
tags: [npc, kael, contradiction, friend-arc]
@@ -102,7 +102,7 @@ lines:
trigger: observe_anomaly
prerequisites:
facts:
- fact_id: kael_corridor_meeting
- fact_id: investigation.kael_corridor_meeting
min_confidence: suspects
tags: [evidence, kael, friend-arc]
@@ -111,7 +111,7 @@ lines:
trigger: observe_anomaly
prerequisites:
facts:
- fact_id: ring_route_compromise
- fact_id: awareness.ring_route_compromise
min_confidence: suspects
priority: 7
tags: [operational, caution]
@@ -121,7 +121,7 @@ lines:
trigger: observe_anomaly
prerequisites:
facts:
- fact_id: container_delay
- fact_id: investigation.container_delay
min_confidence: knows_of
tags: [operational, contraband]
@@ -130,7 +130,7 @@ lines:
trigger: observe_anomaly
prerequisites:
facts:
- fact_id: surveillance_change
- fact_id: awareness.surveillance_change
min_confidence: suspects
priority: 7
tags: [investigation, caution]
@@ -140,7 +140,7 @@ lines:
trigger: time_idle
prerequisites:
facts:
- fact_id: kael_unknown_contact
- fact_id: investigation.kael_unknown_contact
min_confidence: knows_of
priority: 8
tags: [npc, kael, operational, friend-arc]
@@ -150,7 +150,7 @@ lines:
trigger: observe_anomaly
prerequisites:
facts:
- fact_id: ring_routing_knowledge
- fact_id: knowledge.ring_routing_knowledge
min_confidence: knows_details
tags: [operational, contraband]
@@ -159,7 +159,7 @@ lines:
trigger: time_idle
prerequisites:
relationship:
target: kael_davan
target: npc:kael-davan
state: person_of_interest
priority: 7
tags: [npc, kael, concern, friend-arc]
@@ -112,7 +112,7 @@ lines:
trigger: observe_anomaly
prerequisites:
facts:
- fact_id: sera_avoidance_pattern
- fact_id: behavioral.sera_avoidance_pattern
min_confidence: suspects
tags: [npc, sera, torek, pattern]
@@ -121,7 +121,7 @@ lines:
trigger: observe_npc
prerequisites:
facts:
- fact_id: torek_spending_pattern
- fact_id: investigation.torek_spending_pattern
min_confidence: knows_of
tags: [npc, torek, operational]
@@ -130,7 +130,7 @@ lines:
trigger: post_conversation
prerequisites:
facts:
- fact_id: ring_bar_operations
- fact_id: knowledge.ring_bar_operations
min_confidence: knows_details
tags: [npc, lera, operational]
@@ -139,7 +139,7 @@ lines:
trigger: observe_npc
prerequisites:
relationship:
target: naia_tamm
target: npc:naia-tamm
state: known
tags: [npc, naia, kael, concern]
@@ -148,7 +148,7 @@ lines:
trigger: observe_npc
prerequisites:
facts:
- fact_id: detective_presence
- fact_id: awareness.detective_presence
min_confidence: knows_of
priority: 8
tags: [investigation, caution]
@@ -158,7 +158,7 @@ lines:
trigger: witness_interaction
prerequisites:
facts:
- fact_id: detective_presence
- fact_id: awareness.detective_presence
min_confidence: knows_of
tags: [npc, sera, investigation]
@@ -167,7 +167,7 @@ lines:
trigger: observe_anomaly
prerequisites:
relationship:
target: kael_davan
target: npc:kael-davan
state: person_of_interest
priority: 8
tags: [npc, kael, contaminated-trust, friend-arc]
@@ -177,7 +177,7 @@ lines:
trigger: observe_anomaly
prerequisites:
facts:
- fact_id: ring_bar_operations
- fact_id: knowledge.ring_bar_operations
min_confidence: knows_details
tags: [operational, nils]
@@ -186,7 +186,7 @@ lines:
trigger: witness_interaction
prerequisites:
facts:
- fact_id: kael_behavioral_change
- fact_id: behavioral.kael_behavioral_change
min_confidence: suspects
tags: [npc, kael, naia, tell, friend-arc]
@@ -195,7 +195,81 @@ lines:
trigger: enter_location
prerequisites:
facts:
- fact_id: ring_tension_escalation
- fact_id: awareness.ring_tension_escalation
min_confidence: suspects
priority: 7
tags: [atmospheric, caution, operational]
# --- Sera Venn Dual-Lens — Smuggler Observations ---
# Ticket: #298 | Author: Paula
# The smuggler sees Sera as Commission — wary, practical, outsider
# perspective. On replay, these lines gain new meaning when the player
# understands Sera's concealment arc from the detective playthrough.
- id: the-last-shift_m_s_031
text: "Sera's at the Commission kiosk. Third time this shift. Nobody recalibrates that much."
trigger: observe_npc
prerequisites:
facts:
- fact_id: behavioral.sera_kiosk_pattern
min_confidence: suspects
priority: 6
tags: [npc, sera, commission, pattern, dual-lens]
- id: the-last-shift_m_s_032
text: "Naia trusts Sera. More than most people here. That says something."
trigger: witness_interaction
tags: [npc, sera, naia, social, dual-lens]
- id: the-last-shift_m_s_033
text: "Sera was studying the freight display. For a calibration tech, that's a lot of manifest reading."
trigger: observe_npc
prerequisites:
facts:
- fact_id: behavioral.sera_topic_deflection
min_confidence: suspects
priority: 6
tags: [npc, sera, tell, cargo, dual-lens]
- id: the-last-shift_m_s_034
text: "That's three times Sera's bailed when Torek showed up. Maybe she owes him money."
trigger: observe_anomaly
prerequisites:
facts:
- fact_id: behavioral.sera_avoidance_pattern
min_confidence: knows_of
priority: 7
tags: [npc, sera, torek, pattern, dual-lens, replay-payload]
- id: the-last-shift_m_s_035
text: "Sera offered the detective compliance records. Helpful -- or professional courtesy?"
trigger: witness_interaction
prerequisites:
facts:
- fact_id: awareness.detective_presence
min_confidence: knows_of
tags: [npc, sera, investigation, caution, dual-lens]
- id: the-last-shift_m_s_036
text: "Something about Sera tonight. Same smile, different eyes."
trigger: observe_npc
prerequisites:
relationship:
target: npc:sera-venn
state: known
tags: [npc, sera, behavioral, dual-lens]
- id: the-last-shift_m_s_037
text: "Commission tech who drinks at a dock bar. Either lonely or embedded. Either way -- careful."
trigger: observe_npc
tags: [npc, sera, commission, assessment, dual-lens]
- id: the-last-shift_m_s_038
text: "Sera knows the shift rotations better than Voss. That's not calibration. That's attention."
trigger: observe_npc
prerequisites:
facts:
- fact_id: behavioral.sera_knowledge_detail
min_confidence: suspects
priority: 6
tags: [npc, sera, tell, competence, dual-lens]
@@ -132,7 +132,7 @@ lines:
trigger: observe_anomaly
prerequisites:
relationship:
target: kael_davan
target: npc:kael-davan
state: friendly
priority: 7
tags: [npc, kael, tell, friend-arc]
@@ -142,7 +142,7 @@ lines:
trigger: observe_anomaly
prerequisites:
facts:
- fact_id: ring_routing_knowledge
- fact_id: knowledge.ring_routing_knowledge
min_confidence: knows_details
tags: [operational, contraband]
@@ -151,7 +151,7 @@ lines:
trigger: observe_anomaly
prerequisites:
facts:
- fact_id: voss_ring_involvement
- fact_id: investigation.voss_ring_involvement
min_confidence: knows_of
tags: [npc, voss, operational]
@@ -160,7 +160,7 @@ lines:
trigger: observe_npc
prerequisites:
facts:
- fact_id: detective_presence
- fact_id: awareness.detective_presence
min_confidence: knows_of
priority: 8
tags: [investigation, caution]
@@ -170,7 +170,7 @@ lines:
trigger: observe_npc
prerequisites:
entity_attributes:
- entity: maret_korr
- entity: npc:maret-korr
key: behavior_flags
value: avoidance
priority: 6
@@ -181,7 +181,7 @@ lines:
trigger: time_idle
prerequisites:
facts:
- fact_id: ring_routing_knowledge
- fact_id: knowledge.ring_routing_knowledge
min_confidence: knows_details
tags: [operational, contraband]
@@ -190,7 +190,7 @@ lines:
trigger: time_idle
prerequisites:
facts:
- fact_id: kael_corridor_meeting
- fact_id: investigation.kael_corridor_meeting
min_confidence: suspects
priority: 8
tags: [npc, kael, contradiction, friend-arc]
@@ -200,7 +200,7 @@ lines:
trigger: time_idle
prerequisites:
facts:
- fact_id: kael_unknown_contact
- fact_id: investigation.kael_unknown_contact
min_confidence: suspects
priority: 9
tags: [npc, kael, contradiction, friend-arc]
@@ -210,7 +210,7 @@ lines:
trigger: post_conversation
prerequisites:
facts:
- fact_id: kael_evasion
- fact_id: behavioral.kael_evasion
min_confidence: direct
priority: 9
tags: [npc, kael, tell, friend-arc]
@@ -220,7 +220,7 @@ lines:
trigger: observe_npc
prerequisites:
facts:
- fact_id: torek_spending_pattern
- fact_id: investigation.torek_spending_pattern
min_confidence: knows_of
tags: [npc, torek, operational, caution]
@@ -229,7 +229,7 @@ lines:
trigger: post_conversation
prerequisites:
relationship:
target: kael_davan
target: npc:kael-davan
state: person_of_interest
priority: 9
tags: [npc, kael, contaminated-trust, friend-arc]