Update perception decisions to reflect the forward-only 120° cone
(no peripheral sector). Add Q-051: speech bubble indicator over
speaking NPCs for dialogue attribution.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Visible half-angle 150° → 100° (200° arc), matching average human
binocular field. Blind spot widens from 60° to 160° — genuine
vulnerability behind the character.
- Forward half-angle stays at 60° (120° arc) — binocular overlap zone.
- Peripheral zone represents combined sensory awareness: visual
periphery + subconscious sound/motion tracking, not just eyes.
- Per-character VisionConeConfig allows implants and perception modes
(D-017) to widen beyond the unaugmented baseline.
- Fog shader: smooth back-edge gradient via smoothstep blend between
Layer 2 (peripheral) and Layer 3 (deep fog), eliminating blocky
stair-stepped tiles at the rear of the vision cone.
- D-015 updated with physiological basis and per-character config.
- D-017 updated with vision cone modification by perception modes.
- D-020 updated with protocol versioning policy: PROTOCOL_VERSION
gates wire format, not gameplay parameters.
- DB backup after sprint 21 close.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Consolidates all connector scripts under tooling/ per project
structure conventions. Symlink at db/connectors → tooling/db/
preserves backwards compatibility (remove after Sprint 22).
Updated references in CLAUDE.md, Makefile, DEVOPS.md, all skill
files, agent files, rules, schema comments, and Sprint 21
briefings. Python scripts updated with correct SCHEMA_PATH
(now relative to WORKTREE_ROOT/db/schema.sql).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed z-level fix (base_z u8→i8), MobileChunk Idle as stationary
installation primitive, and rejection of separate location instancing.
LocalOverlay confirmed as canonical DLC/mod content injection point.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
D-087 through D-092: v0.1 triangle config, 3-state pause, self-contained
forks, PC voice registers, complicity as theme, anchor line requirement.
Q-030 through Q-039: long-term strategy questions from wiki-review R4
(seed schema, generator pipeline, Sacred/Profane, 300-world estimates).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Resolves ID collision: D-084 was used independently by both the copy
branch (line ID scheme, content.md) and the visual branch (insert icon
system, perception.md). Content's D-084 keeps the number; visual's is
renumbered to D-086.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
D-085: per-game save directory structure with F5/F6 quicksave/quickload.
Q-029: open question tracking long-term save file format design.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Fix events_fired referencing flag names instead of event IDs (two
outcomes unreachable). Wire 4 orphaned flags into narratively
coupled outcome conditions. Fix typo and stale question count.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Role namespace (shared pool) stays unchanged; instance namespace
(role-slug + seeded counter) added as opt-in for per-instance
authored content on auto-generated NPCs. No schema migration needed.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Insert overlay uses custom SVG icons instead of an icon font. No
available font matches the neural lattice visual language. Custom
SVGs respond to lattice_profile weight parameter and maintain visual
coherence with existing geometric primitives.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
NPC-scoped line ID scheme (D-035) works for hand-authored content but
will produce slug collisions with auto-generated populations (D-029).
Tracked as open question with ticket #544.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Sprint 15 amendment: line ID namespace changed from location-scoped
to NPC-scoped. Each NPC's IDs are independent, eliminating cross-file
coordination and collision risk at scale.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Reflects the intentional override — 1200px chosen for readability
after playtest feedback. Updates decision text, derivation, and
amendment history.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Sprint 14 #535 redesigned the dialogue box into a single chronological
log for both player-NPC and overheard NPC-NPC conversations. Updates
D-061 in perception.md to document the unified log pattern, entry
lifecycle, passive line treatment, and cross-references to D-076/D-078.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Server-tracked zone_id on VisibleTile for D-073 zone crossfade and
D-059 deep fog temperature tint. ZoneMap resource backed by BTreeMap,
observer enrichment in snapshot assembly. Backwards-compatible: v10
payloads deserialize with zone_id: None.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
D-075 dissent was pending Gestalt and Nigel input on the no-archetype-tag
decision. Gestalt endorses: access tier tags in content handle archetype
distinction emergently; starting knowledge differentials produce per-character
gate timing without hardcoded archetype filters; maintenance cost of archetype
tags would undermine the "two keyholes on the same world" experience (D-027).
Nigel's input still pending.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
DIALOGUE_MAX_WIDTH: correct to 640px (20 × TILE_SIZE) per Tyre architecture
review. D-076 updated in decisions/perception.md with amendment note.
Initial 1920px was D-061 "max-width" but readability wins at 640px.
D-067 recognition chime: wire sfx_monologue_chime to fog entity recognition
onset. AudioManager.CHIME_RECOGNITION constant added. main.gd tracks seen
entity IDs in _known_recognition_ids; fires chime on first appearance in
pending_recognitions, expires when entity leaves the queue. UISounds bus
(not WorldSFX) per D-038 "monologue chime is a UI sound." Tests added
to test_audio_bus_routing.gd (Layer 2b).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
#345: entity_renderer.gd already used entity_id; added regression tests
confirming old "id" field is rejected and "entity_id" is accepted.
#447 (OQ-29): DIALOGUE_MAX_WIDTH = 1920 added to constants.gd. Full
viewport width at target resolution (60 × TILE_SIZE), per D-061 Lead
directive "max-width". Recorded as D-076 in decisions/perception.md.
#126: SoundIndicatorRenderer — fog-edge directional arrows for medium-range
sound events (D-018). Node2D at z:951 in World scene. Color-coded per
D-018/D-069 (neutral/voice/danger). GameState.medium_sound_events
partitions Medium events from snapshot sound_events field. Tests added
to test_rendering.gd; Hoshe's test_sound_indicators.gd stubs updated.
#125: Close-range stereo audio pipeline wired. AudioManager.play_sound_event()
maps event_type to D-038 asset key (Footstep/FootstepSprint → sfx_footstep_*).
GameState.close_sound_events partitions Close events. main.gd calls
_play_close_sound_events() each snapshot tick. test_audio_bus_routing.gd
Layer 4 stubs upgraded to real tests.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Option (a): cursor shape still changes (body orients to targets), but
verb labels and interaction prompts are suppressed when insert_active
is false. Amends D-056 and D-057 with resolution note.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Re-scope #501 hub teleport as Gauntlet-only dev tool. Production
travel must be diegetic: local gate → system gate → target menu →
destination, gated by region safety, with asymmetric information
exposure (NPCs observe arrivals/departures).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Address all review comments from Hoshe and Tyre on PR #27:
- Remove 2>/dev/null from pre-pr-fixtures (critical: swallowed errors)
- Remove dead _file_type function
- Check 4: error on districts with no locations declared
- Check 5: print advisory message when skipping
- Check 8: cross-file line ID uniqueness (not just per-file)
- Check 9: document D-034 asymmetric relationships in docstring
- Document regex fallback rationale in _scan_knowledge
- Add D-035 decision trace to schema descriptions
- Use concrete protocol version in DEVOPS.md example
- Amend D-035 with focused (9th mood) and greeting (14th situation)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Document client-side movement throttle rates per stance, hold-to-move
input model with composite diagonals, and crouch ticks-per-move value.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
0.5m sim tiles for movement/LOS granularity, 1m visual tiles for
proportional art and readable spaces (2x retina factor). All world
geometry constrained to 2x2 sim tile minimum so cover/LOS maps 1:1
with visuals. Entities occupy 1x1 sim tiles for fine positioning.
Updates: D-043, D-044, D-051, D-056, D-059 annotations, workshop
outcomes (art direction + control/interaction), sprint 6 briefings,
decision index, and CLAUDE.md.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
13 new decisions covering movement stances, tile-based movement, cursor states,
entity interaction, fog rendering, dialogue UX, confrontation, and smuggler inventory.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Three fixes to make the gameplay loop functional end-to-end:
- Add Interactable component to NPC spawn so E-prompt detection works
- Build monologue trigger system (enter_location + time_idle) with
MonologueBuffer/MonologueState components, wire through ObserverSnapshot
as current_monologue field, decode on client and display via HUD
- Change PlayerAction::Interact from unit to struct variant carrying
optional target_entity_id and verb fields
Bumps protocol version from 4 to 5. Regenerates MessagePack fixtures.
All 200 tests pass (170 unit + 30 integration).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Miri (critical):
- Fix 3 stale "Hael" references in decisions/content.md (D-034, D-036)
Paula (suggestions):
- Flag dual-fire 15-30s delay as tuning target in smuggler moral arc
- Clarify MIRROR NPCs can be wrong (lied to) without being dishonest
- Add implementation note for Path C deferred follow-up fork
- Note detective-NPC dialogue rotation variants for post-v0.1
- Clarify detective vs smuggler moral_weight criteria in entity attributes
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add Albert Ford's symmetric shadowcasting algorithm using rational
fraction slopes. Benchmarked 1.2-10.5x faster than recursive with
guaranteed symmetry (if A sees B, B sees A). Resolves Q-018 as D-035.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Six new open questions identified by the Tyre/Troblum architecture
review: shadowcasting algorithm selection, entity ID stability,
multi-entity collision resolution, tick budget overflow policy,
pathfinding cache eviction, and debug visualization scope.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
D-040: hierarchical wiki structure with YAML frontmatter.
6 new open questions from content gap analysis workshop
covering generation expansion, line previewer, audio timing,
FRIEND content authoring, knowledge hierarchy, and triangle
pressure thresholds.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
D-032: separate monologue pools per character
D-033: entity color = relationship to player
D-034: THE FRIEND production-level NPC pattern
D-035: converged tag taxonomy for line pools
D-036: Sova Transit District / Krenn System setting
D-037: contraband specification (unlicensed lattice components)
D-038: audio in v0.1 scope (8 files via Stable Audio Open)
D-039: v0.1 wow moment scope (all 6 moments)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace monolithic 474-line DECISIONS.md with 7 domain files under
decisions/: architecture, perception, content, scope, process,
questions, rejected. Each file owns its decisions with cross-reference
hyperlinks. Root DECISIONS.md becomes a redirect with domain index.
Reduces per-agent context load by ~70-80% (80-150 lines vs 474).
Taxonomy: architecture (D-008..D-031), perception (D-011..D-019),
content (D-023..D-029), scope (D-001..D-027), process (D-004..D-022),
questions (Q-001..Q-011), rejected (R-001..R-010).
Restores D-002 original text (was a tombstone referencing D-005).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>