Files
settled-reach/docs/workshops/control-interaction/workshop-outcomes.md
T
jpmschweitzerandClaude Opus 4.8 943f2e7749 docs(workshops): add decision_refs provenance frontmatter (pql migration phase 5)
Workshop -> decision provenance was prose-only. Adds a `decision_refs:` YAML
frontmatter list (the confirmed D-records each workshop-outcomes.md touches,
filtered against the governance decision set) to all 17 workshop outcomes; the two
that lacked frontmatter (commodity-catalog, system-economic-specialization) get a
minimal block. pql indexes the list and `SELECT fm.decision_refs` round-trips it, so
"which workshops touch D-NNN" is answerable via SELECT + filter or `pql search`.

decision_refs is a relevance signal (decisions a workshop discusses/produces), not a
strict authorship claim — historical bare refs aren't disambiguated. Generated wiki
read-only sections are left untouched.

Noted in pql-requirements #5: 1.6.2 has no working DSL operator for frontmatter
list-membership (`~`/`contains` error, `in` matches nothing), so membership queries
need a client-side filter for now.

Reproducible via tooling/pql-migrate/add_workshop_provenance.py (idempotent).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-06 13:06:33 +02:00

29 KiB

title, description, type, status, workshop, created, decision_refs
title description type status workshop created decision_refs
Workshop Outcomes: Control & Interaction Scheme 13 decisions (D-053 to D-065) covering movement stances, cursor states, fog layers, dialogue UX, and smuggler inventory workshop archived control-interaction 2026-02-14
D-009
D-010
D-017
D-018
D-027
D-033
D-041
D-045
D-048
D-053
D-054
D-055
D-056
D-057
D-058
D-059
D-060
D-061
D-062
D-063
D-064
D-065
D-066

Workshop Outcomes: Control & Interaction Scheme

Workshop: Control & Interaction Scheme — "How Does the Player Touch the World?" Date: 2026-02-13 Rounds: 2 + final lead calls Participants: Gestalt, Ozzie, Tyre, Stig, Dudley, Paula, Araminta, Nigel Documenter: Qatux Full notes: docs/workshops/control-interaction/workshop-notes.md


Decisions Produced

This workshop produced 13 decisions ready for formalization. Suggested D-NNN IDs and domain file assignments below.

D-053: Movement as stance toggle system (scope.md)

  • Decision: Movement uses a stance toggle ladder: Sprint / Walk / Careful / Crouch / (Prone future). Toggle-based, not hold-to-activate. Each archetype has a default stance via MovementProfile component. All characters have access to all stances. Prone: toggle out only in normal play; future combat allows "hit the deck" quick-entry.
  • Rationale: Stances compose with perception (sprint = tunnel vision, careful = heightened awareness) and with the tile-based eavesdropping system. Toggle avoids modifier-key fatigue.
  • Raised by: Lead (final call), building on Gestalt (triad), Dudley (MovementProfile), Nigel (character-defining speed)
  • Server values (Dudley): Walk = 1 tile/2 ticks. Sprint = 1 tile/1 tick. Careful = 1 tile/3 ticks. Crouch TBD.
  • Perception coupling (Gestalt + Ozzie, endorsed by lead): Sprint suppresses interpretation (monologue at 40%), not data (overlays still render). Careful enhances monologue (150%) and grants "tell notice bonus." Composable via multiplicative formula: movement_modifier * perception_load_modifier.
  • Dissent: None after lead call. Nigel's character-differentiation concern addressed by MovementProfile (different defaults per archetype).

D-054: Tile-based movement with same-tile occupancy (architecture.md)

  • Decision: All movement is tile-based (server-authoritative, discrete positions). Client-side Tween interpolation (100-150ms) hides the grid. Same-tile occupancy via TilePresence component (Standing/Prone/Seated/Fixture layers) allows multiple entities on one tile in different postures. Mouse facing is client-side float; server receives facing octant only.
  • Rationale: Determinism (D-010). Tile-based enables shadowcasting, pathfinding, and trivial collision. Occupancy system addresses Nigel's emergent positioning needs (doorway blocking, eavesdrop positioning, furniture interaction) within tile-based constraints. ~150 lines server-side.
  • Raised by: Tyre (tile-based, non-negotiable), Dudley (tiles-per-tick), Nigel (converted: "tiles are BETTER for replayability — discrete positions = finite meaningful choices")
  • Dissent: None. Nigel initially proposed free movement (Round 1) but converted in Round 2 after seeing how tile-based spatial puzzles create replayability.

D-055: Sprint explicitly suppresses interaction buffer (architecture.md)

  • Decision: When in Sprint stance, the server explicitly clears the interaction buffer. No interaction verbs are computed or sent to the client during sprint. Anomaly monologue survives sprint (Ozzie's "sprint double-take").
  • Rationale: Mouse gymnastics to click during sprint = bad UX. Explicit suppression is cleaner and deterministic. "Sprint double-take" preserves the feel that the character is still aware even when the player can't interact.
  • Raised by: Dudley (explicit suppression), Ozzie (anomaly survival)
  • Dissent: Gestalt argued physics handles it naturally (player passes through interaction radius too fast to click). Lead ruled explicit suppression for clarity.

D-056: Cursor states — insert-styled geometric (perception.md)

  • Decision: Four cursor states using the neural insert's geometric visual language (Araminta's spec):
    • Default: four thin inward-pointing ticks, bloom, white-blue #c8d0e0
    • Entity hover: ticks expand outward (150ms), corner brackets frame entity, shifts to D-033 relationship color, verb tooltip in insert styling
    • Object hover: ticks rotate 45 degrees to X-shape, muted grey #8b8ba0 (amber #e8c547 if flagged)
    • Weapon aim: hard transition, ticks extend, center gap widens, lines thicken 1px to 2px, warm white #f0e8d8, NO bloom. Entity in sights tints to D-033 color.
    • All transitions 150ms linear, z-layer 7, never changes by zone or narrative state (D-045).
    • Cursor changes on LOS, not just proximity (Stig). Click range: ~2 sim tiles (= 1m per D-066). Weapon-selected mode suppresses interaction prompts unless Shift held (Ozzie: "combat intent trumps social intent").
  • Rationale: Diegetic — cursor is the insert's own interface element. Consistent with D-048 (insert overlay aesthetic). Entity in weapon sights tinting to D-033 creates moral friction (aiming at a friend should feel wrong).
  • Raised by: Araminta (visual spec), Stig (UX rules), Ozzie (weapon suppression)
  • Dissent: None.

D-057: Entity interaction — vertical list, insert-styled (perception.md)

  • Decision: Entity interactions use a compact vertical list (not radial). 2-4 options max, anchored to entity position. Insert-styled with Araminta's aesthetic. New options (unlocked by knowledge changes) highlighted with gradient glow background. Radial menu reserved for world menu only.
  • Rationale: Variable-length text options (e.g., confrontation lines in character voice) break radial spatial memory. List handles 1-4 options cleanly. New-item glow signals "something changed" without the UX hazard of geometry transforming under the cursor. Labels render on z-layer 6 (insert overlay) — diegetic test: labels disappear if insert is off.
  • Raised by: Stig (vertical list structure + diegetic test), Araminta (insert aesthetic). Lead resolved in Stig's favor on structure, Araminta's on styling.
  • Dissent: Araminta argued for spoke radial (geometry transformation signals qualitative change). Lead rejected — moving goalpost under cursor is bad UX during aiming.
  • References: Disco Elysium (world-embedded indicators), Darkwood (minimal cursor), Rimworld (right-click context list).

D-058: World menu — radial, 4 spokes (perception.md)

  • Decision: Right-click opens a radial world menu. Four spokes: Observe (eye icon), Insert (phone), Comms (signal), Wait (clock). Drag-release for power users, click-click for newcomers. Insert-styled: geometric lines, thin spokes with icons, nearly transparent. Renders on z-layer 6. v0.1: 2 spokes only (Observe + Insert).
  • Rationale: Radial works for world menu because items are fixed categories that don't vary by knowledge state. Spatial memory builds quickly (~10 minutes). Scaling to 5-6 spokes is straightforward.
  • Raised by: Stig (structure + implementation), Araminta (insert aesthetic)
  • Dissent: None.

D-059: Fog — shader-based, five layers, knowledge-graph-driven (perception.md)

  • Decision: Fog is a shader-driven system (not particles) with five distinct layers:
    1. Clear (vision cone): soft gradient edge 6-8 sim tiles (= 3-4 visual tiles per D-066), no hard line (Darkwood approach)
    2. Light fog (peripheral): desaturated 40-50%, brightness -30%, animated Perlin noise (8-10s cycle), entity D-033 colors visible but reduced
    3. Deep fog (explored): near-monochrome, ~10% zone temperature tint (bar=warm, hub=cool, corridor=neutral), more pronounced noise (15-20s cycle)
    4. Unexplored + maps app: geometric wireframe outlines #333340
    5. Unexplored, no maps: solid near-black #12141a
    • Fog is knowledge-graph-driven: same fog shows different information per character based on their KG. "Fog is not darkness — it's the absence of your attention."
    • Sound pings: 2-3 concentric expanding rings (sonar-style), insert white-blue. Loud = 3 rings bright fast, quiet = 1 ring faint slow. Fade over 1.5s.
    • Recognized entity in fog: D-033 color glow + faint identifying silhouette feature + 0.8s breathing pulse + half-tile position drift (approximate, not exact).
    • Unrecognized entity: neutral grey #555566 blob, no features.
    • Performance: <1ms/frame total. Vision cone = PointLight2D. Fog = darkness + noise shader on CanvasGroup (Layer 5).
    • Soft perception degradation (diegetic scan-line interference) at high overlay load, replacing hard mode cap.
  • Rationale: Fog must be crucial in v0.1 (lead directive). KG-driven fog is the primary replayability mechanism — same corridor, different character, different information visible. Shader approach confirmed technically trivial by Tyre.
  • Raised by: Araminta (visual spec), Tyre (technical validation), Nigel (replayability case), Gestalt (signal framework)
  • Dissent: None.

D-060: Cognitive delay for fog recognition (perception.md)

  • Decision: When the player recognizes a heard/sensed entity in fog, recognition is NOT instant. Single cognitive delay: 0.6s base, 0.3s when observe_anomaly triggers (urgent context). Values are tunable. Monologue fires DURING the delay ("Those footsteps... that's Kael's walk"), not after. Visual transition: grey blob to D-033 color + silhouette over ~0.3s within the cognitive delay window. Natural recognition (organic resolve) feels different from sensor recognition (digital snap with biometric ID).
  • Rationale: Recognition should feel like a cognitive event, not a UI update. The delay creates a moment where the player's brain and the character's brain are working together. Context-sensitive urgency (0.3s for anomalies) prevents the delay from feeling sluggish in tense situations.
  • Raised by: Ozzie (timing values + urgency split, adopted), Gestalt (longer values, not adopted but playtesting may adjust), Araminta (visual transition spec)
  • Dissent: Gestalt proposed 0.8-1.2s (longer, more contemplative). Lead chose Ozzie's shorter values as starting point, tunable.

D-061: Dialogue box — bottom screen, max 20% height, no portraits (perception.md)

  • Decision: Dialogue occupies the bottom of the screen, max 20% height, max-width (not percentage-based). Layout: NPC speech top, player response options below, left-aligned. Max 3 response options visible. NO portraits (NPC is on screen). Monologue floats ABOVE the dialogue box on z-layer 7 — spatial separation allows monologue to contradict dialogue visually. Walk-away via WASD, dialogue fades over 300ms, no close button.
  • Rationale: Game world stays live above the dialogue box. The player sees the NPC's body language while talking — no portrait needed. Monologue above + dialogue below = the character can think one thing while saying another. Max 3 options + invisible locks = player never knows what they're missing.
  • Raised by: Stig (UI spec), Lead (20% height constraint, max-width directive)
  • Dissent: Stig initially proposed 25% height and 50% width centered. Lead constrained to 20% height and max-width.

D-062: Invisible locked dialogue options (content.md)

  • Decision: Dialogue options the player hasn't unlocked are completely invisible. No grayed-out options. No lock icons. No hint that more options exist. Exception: NPC holding back is communicated via monologue ("She changed the subject. Fast."), not via locked UI elements.
  • Rationale: Four reasons (Gestalt): (1) Asymmetry — you don't know what you don't know. (2) Dopamine — new options appearing on repeat visits IS the reward. (3) Anti-metagaming — no checklist to complete. (4) Confrontation surprise — Confront option appearing for the first time is a dramatic moment. Strongest consensus point of the entire workshop.
  • Raised by: Gestalt (proposal + rationale), Nigel (emphatic reinforcement: "non-negotiable")
  • Dissent: None. Unanimous across all 8 participants.

D-063: Confrontation — same box, different weight (content.md)

  • Decision: Confrontation uses the same dialogue UI as casual conversation. No separate confrontation mode. Different weight communicated through: (1) italic text in character's internal voice for confrontation options (regular: "Shift schedule" / confrontation: "I saw you in corridor B-7"), (2) pre-delivery monologue beat (1-2s: "This changes things. No taking it back."), (3) world responds — NPC shifts to Tier 2 animation, entity D-033 color may fade, monologue frequency spikes, available topics narrow. Walk-away mid-confrontation contaminates social space (NPC routine shifts, KG records incompleteness). v0.1 staging: proximity check + audio dip + text styling. Camera tighten deferred.
  • Rationale: Confrontation should feel heavy because of what you're saying, not because the UI changed. The weight comes from pacing, voice, and consequence.
  • Explicitly NOT: Separate confrontation UI, timed responses, visible relationship meter, correct/incorrect approaches.
  • Raised by: Paula (mechanism), Ozzie (physical staging), Stig (UI container)
  • Dissent: None.

D-064: Walk-away — three-phase consequences (content.md)

  • Decision: Walking away from dialogue (WASD during conversation) triggers three phases: (1) Immediate break — dialogue fades over 300ms, silence. (2) NPC reacts — animation shifts, may call after you, routine may change. (3) KG records — incompleteness is logged (confrontation initiated but not completed), queryable, affects future dialogue/monologue/NPC behavior. Walk-away consequences vary by NPC tolerance threshold per seed — no universal social rules to metagame.
  • Rationale: Walking away is an action with meaning. Leaving mid-confrontation is different from leaving mid-smalltalk. The KG recording means the game remembers what you started.
  • Raised by: Paula (three phases), Stig (WASD mechanic, 300ms fade), Ozzie (consequences), Nigel (tolerance per seed)
  • Dissent: None.

D-065: Smuggler inventory — knowledge-primary with physical evidence (scope.md)

  • Decision: Knowledge is the primary "inventory" for all characters. The smuggler additionally gets a minimal physical inventory: 3 specific items in v0.1 (manifest copy, corridor access token, personal comm log). Capacity per archetype: smuggler 3-4 slots, detective 2. Carried items are PRIVATE (info boundary — not visible to other entities unless revealed via search/scan/confrontation). UI: pocket icons bottom-right, 40x40px, no empty slots displayed. Verbs: Take, Place. Server: carried items are world entities with CarriedBy component.
  • Evidence presentation differs by archetype (Paula): Detective sees case-file-style (structured, what/where/when/source/confidence, insert suggests links). Smuggler sees personal notebook (organized by person, informal voice, no contradiction flags). Same underlying KG, different presentation layer.
  • Rationale: Smuggler's word doesn't carry institutional weight — they need tangible proof. Detective's word IS evidence (institutional authority), so they're mostly KG-only. Three items demonstrate the risk/reward concept and differentiate the smuggler's gameplay loop.
  • Raised by: Lead (smuggler needs inventory), Paula (three items + presentation split), Gestalt (knowledge-primary framework), Tyre (minimal implementation), Dudley (server model + info boundary)
  • Dissent: Tyre initially argued zero physical items in v0.1 (saves 3-4 sprints). Adapted with SmallVec<3> implementation.

Decisions Endorsed (Confirmed from Prior or This Workshop)

These were raised in the workshop and confirmed, but may overlap with or extend existing decisions:

Topic Status Reference
Signal/answer framework for information access New principle — recommend formalization Gestalt R1, Ozzie R1
Eavesdrop: passive base + positioning enhances quality Extends D-018 Dudley R2 (ListeningFocus)
Two-phase verb computation (simulation max then observer filter) Architecture pattern Dudley R1
SP auto-pause for implant, overlay for MP Extends D-009 implications Tyre R1, Lead final
Implant organized by data type, not quest UX principle Ozzie R1
No highlights on implant data UX principle Ozzie R1
Soft perception degradation (diegetic), not hard cap Extends D-017 Araminta R2, Lead LD-04
MovementProfile per archetype Extends D-053 Dudley R2
Message history: design KG schema now, build display later Scope constraint Stig R2, Paula R2, Lead LD-09
Sprint double-take (anomaly monologue survives sprint) Extends D-055 Ozzie R2

v0.1 Minimum Viable Interaction Model

Control Map

Input Action Stance/Context Notes
WASD Move Current stance Tile-based, Tween interpolated 100-150ms
Toggle key (TBD) Cycle stances Sprint / Walk / Careful / Crouch
Mouse movement Facing direction All Client-side float, server gets octant
Left click Default interaction Non-weapon Context: cursor state determines action
Left click Fire Weapon aim Cursor = weapon reticle
Right click World radial menu All v0.1: 2 spokes (Observe, Insert)
Scroll wheel Zoom All Fog boundaries unchanged
WASD during dialogue Walk away Dialogue open 300ms fade, 3-phase consequences
Shift (with weapon) Suppress interaction Weapon selected Hold to interact while armed

Stance Table

Stance Speed Monologue Rate Noise Interaction Buffer v0.1
Sprint 1 tile/1 tick 40% (urgent only) Loud CLEARED (D-055) Yes
Walk 1 tile/2 ticks 100% (normal) Normal Active Yes
Careful 1 tile/3 ticks 150% + tell notice bonus Quiet Active (enhanced) Yes
Crouch TBD TBD Very quiet Active Yes (D-054 occupancy)
Prone TBD TBD Minimal TBD No (future)

Cursor States (D-056)

State Visual Color z-layer
Default Four thin inward ticks, bloom #c8d0e0 7
Entity hover Expand outward, corner brackets, verb tooltip D-033 color 7
Object hover Rotate 45 degrees (X-shape) #8b8ba0 / #e8c547 7
Weapon aim Extend, gap widens, 2px, NO bloom #f0e8d8 7

Fog Layers (D-059)

Layer Treatment Key Values
Clear Soft gradient edge 6-8 sim tiles (= 3-4 visual tiles, D-066)
Light fog Desaturated, Perlin noise 40-50%, 8-10s cycle
Deep fog Near-monochrome, zone temperature ~10% tint, 15-20s cycle
Unexplored + maps Geometric wireframe #333340
Unexplored Solid black #12141a

Entity Interaction (D-057)

Element Spec
Menu type Vertical list, insert-styled
Max options 2-4, anchored to entity position
New option highlight Gradient glow background
Trigger LOS + ~2 sim tiles proximity (= 1m, D-066)
Diegetic test Labels on z-layer 6, disappear if insert off

World Menu (D-058)

Element Spec
Menu type Radial, 4 spokes (v0.1: 2)
v0.1 spokes Observe (eye), Insert (phone)
Full spokes + Comms (signal), Wait (clock)
Interaction Drag-release or click-click

Dialogue (D-061, D-062, D-063, D-064)

Element Spec
Position Bottom screen, max 20% height
Width Max-width (not percentage) — value TBD
Layout NPC speech top, options below, left-aligned
Max options 3 visible
Locked options Invisible (D-062)
Portraits None
Monologue Floats above dialogue (z-layer 7)
Confrontation Same box, italic voice, 1-2s monologue beat
Walk-away WASD, 300ms fade, 3-phase consequences

Smuggler Inventory (D-065)

Element Spec
Model Knowledge-primary + physical evidence
Capacity Smuggler 3-4, Detective 2
v0.1 items Manifest copy, corridor access token, personal comm log
UI Pocket icons, bottom-right, 40x40px, no empty slots
Verbs Take, Place
Info boundary Carried items private

Fog Recognition (D-060)

Element Spec
Cognitive delay 0.6s base, 0.3s urgent
Monologue timing Fires DURING delay, not after
Visual transition Grey to D-033 color + silhouette over ~0.3s
Natural recognition Organic resolve
Sensor recognition Digital snap with biometric ID
Position accuracy Half-tile drift (approximate)

Server Performance Budget

System Budget Source
Full tick pipeline (9 steps) <0.5ms/tick Dudley
Fog rendering <1ms/frame Tyre
Client overlay composition (4 modes) ~7-11ms/frame Tyre

Implementation Priorities

Priority 1: Core Movement and Interaction (Server)

Estimate: ~5-6 days server (Tyre)

  1. Stance system (Sprint/Walk/Careful/Crouch) with tick-based movement values
  2. MovementProfile component per archetype
  3. Sprint interaction buffer suppression (D-055)
  4. Same-tile occupancy (TilePresence with posture layers) (~150 lines)
  5. Two-phase verb computation extension (ObjectType component, KG-gated Phase 2)
  6. Cognitive delay system for fog recognition (0.6s/0.3s, tunable)

Priority 2: Core UI and Rendering (Client)

Estimate: ~8-10 days client (Tyre)

  1. Cursor state machine (4 states, Araminta spec, 150ms transitions)
  2. Fog shader (5-layer Araminta spec, CanvasGroup Layer 5)
  3. Fog entity visualization (sound pings, recognized/unrecognized, cognitive delay animation)
  4. Entity interaction vertical list (insert-styled, z-layer 6, diegetic test)
  5. World radial menu (2 spokes: Observe, Insert)
  6. Dialogue box (max 20% height, max-width, NPC speech + options + monologue)
  7. Walk-away mechanic (WASD detection, 300ms fade)

Priority 3: Smuggler Systems

  1. Minimal inventory (SmallVec or BTreeMap, Take/Place, info boundary)
  2. Pocket-icon UI (bottom-right, 40x40px, no empty slots)
  3. Three smuggler items (manifest copy, access token, comm log) — content definition
  4. Contraband detection (NPC scan checks carried items + KG)

Priority 4: Perception and Audio

  1. Eavesdrop positioning (ListeningFocus accumulates stationary_ticks) — deferrable per Dudley
  2. Sprint double-take (anomaly monologue survival)
  3. 6 new audio assets (cursor hover, weapon mode, fog recognition, implant open/close, dialogue emerge, confrontation dip)
  4. Confrontation staging (proximity + audio dip + text styling)

Priority 5: Deferred (Design Now, Build Later)

  1. InteractionMemory KG schema for message history (LD-09)
  2. Archetype-specific evidence presentation (detective case file vs smuggler notebook)
  3. Pre-dialogue proximity acknowledgment (NPC turns, ambient line)
  4. Camera tighten for confrontation staging
  5. Prone stance
  6. Perception mode soft degradation (scan-line interference)

Open Questions Deferred to Implementation

These questions were not resolved in the workshop and should be addressed during implementation:

# Question Owner Suggestion
OQ-01 Tile size in world units? Resolved: 0.5m sim tiles, 1m visual tiles (D-066) Tyre/Dudley
OQ-07 No insert = no interaction prompts? (Diegetic test implication) Stig/Gestalt
OQ-08 False-positive fog shapes: gameplay or atmospheric? Gestalt/Araminta
OQ-09 Zone temperature memory: server-tracked or client-only? Tyre/Dudley
OQ-10 Sensor recognition "different monologue voice": text styling or narrator tone? Paula/Stig
OQ-13 No data highlights in implant — how does player know new data was added? Ozzie/Stig
OQ-14 Scan effectiveness varies per character seed: different data or different actions? Gestalt/Dudley
OQ-18 Nigel's dialogue access tiers vs D-041 confidence hierarchy: same or layered? Paula/Gestalt
OQ-21 Archetype evidence presentation: skin on same app or different apps? Stig/Paula
OQ-24 Inventory capacity: 3 slots (Tyre) or 4 (Dudley)? Lead call needed
OQ-25 Stance name: "Careful" or "Sneak"? Lead call needed
OQ-26 Multiplicative perception formula: actual modifier values? Gestalt/Dudley
OQ-27 Soft perception degradation threshold? Araminta/Gestalt
OQ-28 InteractionMemory KG schema design? Paula/Dudley
OQ-29 Dialogue max-width: pixel value? Stig/Lead
OQ-30 14 audio assets: who creates them, when in sprint schedule? Inigo/Si

Suggested Tickets

For SI to process and assign to sprints:

Server Team

# Title Scope Estimate Depends On
T-1 Implement stance system (Sprint/Walk/Careful/Crouch) D-053 2-3d
T-2 MovementProfile component per archetype D-053 1d T-1
T-3 Sprint interaction buffer suppression D-055 0.5d T-1
T-4 Same-tile occupancy (TilePresence layers) D-054 1-2d
T-5 ObjectType component + verb sets per type D-057 (server) 1d
T-6 Two-phase verb computation: KG-gated Phase 2 D-057 (server) 1-2d T-5
T-7 Cognitive delay system for fog recognition D-060 1d
T-8 Smuggler inventory (BTreeMap/SmallVec, Take/Place, info boundary) D-065 1-2d
T-9 Contraband detection (scan + KG check) D-065 0.5d T-8
T-10 ListeningFocus (eavesdrop positioning) D-053 ext 1d T-1 (deferrable)
T-11 Walk-away KG recording (confrontation incompleteness) D-064 0.5d
T-12 Sprint anomaly monologue (double-take) D-055 ext 0.5d T-3

Client Team

# Title Scope Estimate Depends On
T-13 Cursor state machine (4 states, Araminta spec) D-056 2d
T-14 Fog shader (5-layer, CanvasGroup Layer 5) D-059 3-4d
T-15 Fog entity visualization (pings, recognized/unrecognized, delay anim) D-059, D-060 2d T-14, T-7
T-16 Entity interaction vertical list (insert-styled) D-057 1-2d T-13
T-17 World radial menu (2 spokes v0.1) D-058 1d
T-18 Dialogue box (max 20% height, max-width) D-061 2d
T-19 Dialogue response selection (max 3, invisible locks) D-062 1d T-18
T-20 Confrontation text styling (italic voice, monologue beat) D-063 1d T-18, T-19
T-21 Walk-away mechanic (WASD detect, 300ms fade) D-064 0.5d T-18
T-22 Smuggler pocket-icon inventory UI D-065 1d T-8
T-23 Stance toggle UI (keybind, HUD indicator) D-053 0.5d T-1

Audio Team

# Title Scope Estimate Depends On
T-24 6 interaction audio assets D-059, D-060, D-061 2-3d

Design/Content Team

# Title Scope Estimate Depends On
T-25 Define 3 smuggler item specs (content/attributes/interactions) D-065 1d
T-26 InteractionMemory KG schema design D-064, LD-09 1d
T-27 Archetype evidence presentation spec (detective case file vs smuggler notebook) D-065 1d

Replayability Validation

Nigel's Round 2 scenario trace validates the v0.1 interaction model against D-027 replayability criteria:

  • 10-minute scenario, two characters (smuggler vs detective), same world state
  • 12 points of divergence, zero scripted branching
  • All divergence emerges from knowledge graph differences interacting with: tile-based positioning, fog visibility, verb sets, dialogue access tiers, evidence presentation, and inventory constraints
  • Passes the second-playthrough test: playing again as a different character reveals genuinely different information, interactions, and available actions

Cross-Layer Interaction Chains (Workshop Validated)

Five chains documented in workshop notes demonstrate how the layers compose:

  1. Eavesdropping Loop: Careful stance > tile positioning > ListeningFocus > monologue > KG update > new dialogue options
  2. Fog Recognition Loop: Sound/sensor detection > cognitive delay (0.6/0.3s) > monologue during delay > KG query > identity resolution or blob remains
  3. Confrontation Chain: KG contradiction > monologue signal > approach NPC > pre-dialogue beat > dialogue > confront option (italic) > monologue beat > delivery > world responds > KG records
  4. Smuggler Evidence Loop: Eavesdrop > KG records discrepancy > terminal access > raw data (no highlights) > player notices > Take physical item > info boundary (private) > risk/leverage
  5. Sprint Double-Take: Sprint through corridor > interaction suppressed > routine monologue suppressed > anomaly detected > delayed monologue > player decides: double back or continue

Workshop closed. 13 decisions produced (D-053 through D-065). 27 suggested tickets across server, client, audio, and design teams. Full discussion notes at docs/workshops/control-interaction/workshop-notes.md.

Compiled by Qatux.