Files
settled-reach/docs/diagrams/data-flow/dialogue-pipeline.d2
T
jpmschweitzerandClaude Opus 4.6 1e556ccca2 docs(diagrams): add decision diagrams across all domains
16 d2 diagrams covering architecture (IPC bridge, system tiers,
testability, audio bus), data flow (perception, dialogue, eavesdrop
pipelines), entity (knowledge graph, NPC generation, dialogue tags),
state (simulation tiers, movement stances, knowledge confidence), and
UI (HUD layout, interaction flow, fog layers). PNG output for universal
viewer compatibility. Removes test SVG from font debugging.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 11:57:07 +01:00

172 lines
5.1 KiB
Plaintext

# Dialogue Pipeline — D-028, D-062, D-063, D-064, D-075
# Four relational layers, two-phase verb computation, invisible locks,
# confrontation weight, walk-away consequences.
vars: {
color-bg: "#2a3040"
color-stroke: "#333340"
color-text: "#c8d0e0"
color-accent: "#c8d8f0"
color-dim: "#1a1e24"
}
direction: down
player_action: Player Initiates Interaction {
shape: oval
style.fill: ${color-bg}
style.stroke: ${color-accent}
style.font-color: ${color-text}
}
verb_phase1: Phase 1 — Simulation\n(no KnowledgeGraph read) {
style.fill: ${color-bg}
style.stroke: ${color-stroke}
style.font-color: ${color-text}
style.border-radius: 4
object_type: ObjectType component\n→ max possible verb set {
style.fill: ${color-dim}
style.stroke: ${color-stroke}
style.font-color: ${color-text}
}
}
verb_phase2: Phase 2 — Observer\n(reads KnowledgeGraph) {
style.fill: ${color-bg}
style.stroke: ${color-accent}
style.font-color: ${color-text}
style.border-radius: 4
kg_filter: Filter by KG confidence\n(Confront requires KnowsDetails+) {
style.fill: ${color-dim}
style.stroke: ${color-accent}
style.font-color: ${color-text}
}
poi_flip: POI priority flip\n+ contradiction markers {
style.fill: ${color-dim}
style.stroke: ${color-stroke}
style.font-color: ${color-text}
}
archetype_filter: Archetype filter rules\n(same crate: smuggler→Stash · detective→Flag) {
style.fill: ${color-dim}
style.stroke: ${color-stroke}
style.font-color: ${color-text}
}
}
layer_filter: Four Relational Layers (D-028) {
style.fill: ${color-dim}
style.stroke: ${color-stroke}
style.font-color: ${color-text}
l1: Layer 1 — Access Tier\n(RelationshipState only) {
style.fill: ${color-bg}
style.stroke: ${color-stroke}
style.font-color: ${color-text}
}
l2: Layer 2 — Relationship History\n(interaction log: greeting + topic) {
style.fill: ${color-bg}
style.stroke: ${color-stroke}
style.font-color: ${color-text}
}
l3: Layer 3 — Trust-gated Gossip\n(RelationshipState AND KnowledgeConfidence — D-075) {
style.fill: ${color-bg}
style.stroke: ${color-accent}
style.font-color: ${color-text}
}
l4: Layer 4 — Unprompted Disclosure\n(weighted by trust + mood) {
style.fill: ${color-bg}
style.stroke: ${color-stroke}
style.font-color: ${color-text}
}
}
invisible_locks: Invisible Locked Options (D-062) {
style.fill: ${color-bg}
style.stroke: ${color-stroke}
style.font-color: ${color-text}
style.border-radius: 4
rule: Locked options = completely invisible\nNo grayed-out · no lock icons · no hints {
style.fill: ${color-dim}
style.stroke: ${color-stroke}
style.font-color: ${color-text}
}
reveal: New options appearing on repeat visits\n= the reward (dopamine) {
style.fill: ${color-dim}
style.stroke: ${color-accent}
style.font-color: ${color-text}
}
}
confrontation: Confrontation Weight (D-063) {
style.fill: ${color-bg}
style.stroke: ${color-accent}
style.font-color: ${color-text}
style.border-radius: 4
voice: Written in character's internal voice\n(italicized first-person) {
style.fill: ${color-dim}
style.stroke: ${color-stroke}
style.font-color: ${color-text}
}
monologue_beat: Pre-delivery monologue beat\n1-2s: "No taking it back." {
style.fill: ${color-dim}
style.stroke: ${color-stroke}
style.font-color: ${color-text}
}
world_reacts: World reacts\n(NPC Tier 2 anim · D-033 fade · monologue spikes) {
style.fill: ${color-dim}
style.stroke: ${color-stroke}
style.font-color: ${color-text}
}
}
walk_away: Walk-away (D-064)\nWASD during conversation {
shape: diamond
style.fill: ${color-bg}
style.stroke: ${color-accent}
style.font-color: ${color-text}
}
walk_away_phases: Walk-away Consequences {
style.fill: ${color-dim}
style.stroke: ${color-stroke}
style.font-color: ${color-text}
immediate: 1 — Dialogue fades 300ms\n(no close button) {
style.fill: ${color-bg}
style.stroke: ${color-stroke}
style.font-color: ${color-text}
}
npc_reacts: 2 — NPC reacts\n(animation · may call after player) {
style.fill: ${color-bg}
style.stroke: ${color-stroke}
style.font-color: ${color-text}
}
kg_record: 3 — KG records incompleteness\n(per-seed tolerance: no universal safe-to-leave rules) {
style.fill: ${color-bg}
style.stroke: ${color-accent}
style.font-color: ${color-text}
}
}
player_action -> verb_phase1
verb_phase1 -> verb_phase2: "max verb set" { style.stroke: ${color-accent} }
verb_phase2 -> layer_filter: "filtered verb set" { style.stroke: ${color-accent} }
layer_filter.l1 -> layer_filter.l2
layer_filter.l2 -> layer_filter.l3
layer_filter.l3 -> layer_filter.l4
layer_filter -> invisible_locks: "visible options only\n(max 3 shown)" {
style.stroke: ${color-accent}
}
invisible_locks -> confrontation: "if Confront option present" {
style.stroke: ${color-stroke}
style.stroke-dash: 4
}
invisible_locks -> walk_away
walk_away -> walk_away_phases.immediate
walk_away_phases.immediate -> walk_away_phases.npc_reacts
walk_away_phases.npc_reacts -> walk_away_phases.kg_record