Commit Graph
392 Commits
Author SHA1 Message Date
jpmschweitzerandClaude Opus 4.6 d4fdbf426e fix(server): address PR #23 review — 4 critical bugs, 3 warnings, 11 suggestions
Critical fixes:
- Add PendingRecognitionWire serialization roundtrip test
- Check Option return from delay.cancel() before logging
- InputQueue capacity limit (1000) with drop-oldest and warning
- TODO in observation.rs references ticket #450

Warning fixes:
- Hot-reload guards against invalid/empty content root
- Location header mismatch warning in line pool indexing
- walk_yaml() depth limit (100) against symlink loops
- Consecutive reload failure counter (warns after 5+)

Test additions:
- Negative prerequisite filtering test for monologue lines
- Integration test for pending_recognitions in observer snapshot
- Eavesdrop threshold ordering assertion (Careful < default)

Documentation:
- Playtesting expectation comments on delay constants
- is_pending() scalability note for future NPC cognitive delay
- ID format regex validation in line pool spec
- BTreeMap vs sort() ordering clarification in loader
- Multiplayer TODO in relationships.rs references D-010
- ContentSlug ticket #452 filed for entity slug resolution

394 tests, 0 failures.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 01:03:51 +01:00
jpmschweitzerandClaude Opus 4.6 8a334b47f3 chore(meta): update changelog
Sprint 7 server entries: cognitive delay, ListeningFocus, YAML loader,
line pool spec, interaction memory schema.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 00:42:13 +01:00
jpmschweitzerandClaude Opus 4.6 087ff67bfb docs(architecture): add interaction memory KG schema design (#442)
Design doc at docs/architecture/interaction-memory-schema.md extending
FactKnowledge with interaction tracking. FactMetadata enum on existing
BTreeMap, 5-state InteractionState (Active/Completed/WalkedAway/
Confrontation/ConflictAbandoned), monologue prerequisite extension.

Includes entity slug resolution approach, NpcTolerance reconciliation,
and fact decay exemption documentation.

Ref: D-041, D-064, D-063

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 00:41:40 +01:00
jpmschweitzerandClaude Opus 4.6 91d6b1b1cb feat(simulation): add YAML content loader with hot-reload (#326)
LinePool system parses dialogue.yaml and monologue.yaml into indexed
BTreeMap structures. Supports 4-layer query filtering (access >
situation > trust > topic+mood) per D-028. Hot-reload via timestamp
polling every 20 ticks (dev-only). Graceful failure preserves
previous content on reload error.

30+ tests covering enum parsing, index building, query filtering,
monologue fallback, and content watching.

Ref: D-028, D-032, D-035, D-041

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 00:41:29 +01:00
jpmschweitzerandClaude Opus 4.6 ea0a3f0b35 docs(architecture): add line pool format specification (#308)
Formal spec at docs/architecture/line-pool-format.md defining YAML
structure for dialogue and monologue content files. Covers tag enums,
4-layer filtering pipeline, prerequisite-to-KG mapping, ID format,
validation rules, and Rust loader interface.

Fixes monologue schema: adds required constraint on relationship
prerequisite target/state fields.

Ref: D-028, D-032, D-035, D-041

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 00:41:18 +01:00
jpmschweitzerandClaude Opus 4.6 4d8fe996fc feat(perception): add cognitive delay system for fog recognition (#423)
New CognitiveDelay component buffers perception events before emitting
KnowledgeEvents. Normal delay: 6 ticks (0.6s), urgent: 3 ticks (0.3s).
Drain system runs after emit_observation_events, before process_knowledge_events.

Adds pending_recognitions to ObserverSnapshot (protocol v7) for client
fog entity visualization. Includes cancellation when entity leaves LOS.

Monologue fires during delay (not after) per D-060 — cross-system
wiring deferred to follow-up ticket #451.

Ref: D-060 (cognitive delay), D-031 (10 tps), D-059 (fog layers)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 00:41:08 +01:00
jpmschweitzerandClaude Opus 4.6 3a2cfc37e0 feat(simulation): add ListeningFocus eavesdrop positioning (#426)
New ListeningFocus component tracks stationary_ticks for eavesdrop
mechanic. Increments when position unchanged, resets on movement.
Sprint stance blocks accumulation, Careful reduces threshold from
30 to 20 ticks. Registered in SimulationPlugin after validate_movement.

17 tests covering all stances, thresholds, and edge cases.

Ref: D-053 (stance system), D-018 (sound model)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 00:40:54 +01:00
jpmschweitzerandClaude Opus 4.6 d0663c4193 refactor(server): apply rustfmt and clippy suggestions
Formatting pass across simulation, perception, knowledge, NPC, and
test modules. Includes two clippy fixes in monologue.rs (.values()
instead of for (_, v) pattern).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 00:40:43 +01:00
jpmschweitzerandClaude Opus 4.6 8ec875385a docs(sprints): add Sprint 7: Talk briefings
Briefings for server, client, copy, audio, and joint teams.
Sprint goal: complete interaction UI layer and activate basic
dialogue system with NPC conversations.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 23:51:57 +01:00
jpmschweitzerandClaude Opus 4.6 d52179c58b docs(meta): add scratchpad for design ideas and notes
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 23:35:20 +01:00
jpmschweitzerandClaude Opus 4.6 ebf348e838 chore(db): snapshot database after Sprint 6 completion
All 18 tickets marked done, sprint closed.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 23:32:01 +01:00
jpmschweitzerandClaude Opus 4.6 9e8ccb13bf fix(client): address PR #22 review — 3 critical bugs, 2 warnings, 8 suggestions
Critical fixes:
- fog_state: guard _compute_bounds() against all-invalid tiles (negative Rect2i crash)
- fog_shader: read Camera2D zoom dynamically instead of hardcoded Vector2(2,2)
- world_radial: set custom_minimum_size in _ready() from spoke geometry

Warnings:
- fog.gdshader: tighten PERIPHERAL_LOW 0.15→0.55 to match D-059 peripheral band
- Extract color_for_entity_kind() to Constants.gd, decouple CursorRenderer from EntityRenderer

Documentation: shallow copy assumption, gradual decay TODO, tween guard rationale,
fade timing rationale, ToggleInsert TODO, monologue consume-once, hover offset safety,
v6 fixture gap TODO.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 23:23:11 +01:00
jpmschweitzerandClaude Opus 4.6 1b0953db25 chore(meta): update changelog
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 23:06:32 +01:00
jpmschweitzerandClaude Opus 4.6 f08710fa61 docs(architecture): z-layer gap analysis, fog shader spec, flying taxi analysis
Three architecture documents from Sprint 6 design work:
- z-layer-gap-analysis.md: full three-scope rendering pipeline with
  reserved z-ranges, airborne treatment, cross-floor VFX, liquid depth
- fog-shader-spec.md: 5-layer fog shader architecture (D-059)
- flying-taxi-analysis.md: validates z-layer architecture supports
  flight scenarios with LOD tiers and performance budget

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 23:06:12 +01:00
jpmschweitzerandClaude Opus 4.6 1fcf08d21f feat(client): Sprint 6 Touch — z-layer pipeline, cursor, fog, interactions, inventory, stance, radial
Three-scope z-layer rendering pipeline (D-049): world z:0-900 inside
CanvasGroup, insert overlay CanvasLayer 10, UI CanvasLayer 20, modal
CanvasLayer 30. Y-sort contract enforced (entities z_index=0). Reserved
ranges for VFX, airborne, lower floors documented in constants.gd.

Sprint 6 client tickets:
- #429: Cursor state machine — 4 states, 150ms transitions (D-056)
- #430: Fog shader rebuild — 5-layer fragment shader, animated noise (D-059)
- #432: Entity interaction list — vertical multi-verb, insert-styled (D-057)
- #433: World radial menu — 2 spokes, drag-release + click-click (D-058)
- #438: Inventory UI — 3x3 grid, 40x40px, 1-9 hotkeys (D-065)
- #439: Stance indicator — color-coded HUD, C/X keybinds (D-053)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 23:06:03 +01:00
jpmschweitzerandClaude Opus 4.6 24cce41379 feat(client): protocol v6 bridge — stance, inventory, input mapping
Upgrade client protocol bridge from v5 to v6 to match server.
Adds player_stance (4 variants) and player_inventory decode to
ObserverSnapshot. Adds TOGGLE_STANCE_UP/DOWN to InputMapper.
Includes 25 gdUnit4 tests for v6 decode + server serialization
test gap fix.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 23:05:47 +01:00
jpmschweitzerandClaude Opus 4.6 f3550577a9 chore(db): snapshot database after server branch merge
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 16:10:13 +01:00
jpmschweitzer 2b98e54103 Merge remote-tracking branch 'origin/server' 2026-02-14 16:09:18 +01:00
jpmschweitzerandClaude Opus 4.6 aadb155968 chore(meta): update changelog
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 16:01:08 +01:00
jpmschweitzerandClaude Opus 4.6 3d63a4f9f6 test(simulation): QA coverage for Phase 2 verbs, sprint suppression, occupancy, inventory
Add comprehensive test suites across sprint 6 systems:
- Phase 2 observer filter: Confront injection, archetype label relabeling,
  contradiction marking, POI priority ordering (12 tests)
- Sprint anomaly: detection during sprint, queue semantics, delay timing,
  D-055 visible-but-suppressed integration (7 tests)
- Wire format: Confront and CharacterArchetype msgpack roundtrip (4 tests)
- TilePresence: 4-layer coexistence on same tile (1 test)
- Inventory: Take/Place full roundtrip, capacity enforcement (3 tests)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 16:00:32 +01:00
jpmschweitzerandClaude Opus 4.6 df81b24cd1 feat(simulation): sprint anomaly double-take monologue (#428, D-055)
When sprinting past a Contradicted entity, queue a delayed retroactive
monologue that fires after ~1.5s: "Wait — something wasn't right back
there." SprintAnomalyQueue component with first-in-wins semantics.
Detection in observer pipeline, processing in monologue system.
Wire MovementProfile, Stance, and SprintAnomalyQueue into player spawn.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 16:00:20 +01:00
jpmschweitzerandClaude Opus 4.6 1d76100f5d feat(simulation): movement profile per archetype and sprint interaction suppression (#418, #419)
Add MovementProfile component with per-archetype default stances (D-053).
Sprint stance now explicitly clears the interaction buffer — no verbs
computed or sent during sprint (D-055). Anomaly monologue pipeline is
unaffected (handled by separate system).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 16:00:09 +01:00
jpmschweitzerandClaude Opus 4.6 2fc8bf9545 chore(meta): update changelog
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 15:44:53 +01:00
jpmschweitzerandClaude Opus 4.6 6ef7029707 feat(simulation): smuggler inventory — CarriedBy, Take/Place verbs (#424)
Implement physical inventory system per D-065:

- CarriedBy(StableId) component marks items as carried by an entity
- ItemName and InventorySlot components for display and slot assignment
- Take verb: removes TilePosition, adds CarriedBy + InventorySlot
- Place verb: removes CarriedBy + InventorySlot, adds TilePosition
- Observer snapshot populates player_inventory from carried items query
- Info boundary: carried items lack TilePosition, naturally excluded
  from all spatial queries (visibility, interactions) for other entities
- 9-slot capacity (3x3 grid per OQ-24), auto-assigns first free slot
- 8 new tests covering take, place, sequential slots, full rejection

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 15:44:37 +01:00
jpmschweitzerandClaude Opus 4.6 32422ac4bc chore(meta): update changelog
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 15:39:28 +01:00
jpmschweitzerandClaude Opus 4.6 98f4cedc03 feat(simulation): Sprint 6 Touch — stance, tile presence, verbs, protocol v6
Implements the core Sprint 6: Touch systems across 5 tickets:

- #449 ObserverSnapshot v6: add player_stance (MovementStance) and
  player_inventory (Vec<InventoryItem>) wire fields with serde defaults
  for backward compatibility. Bump PROTOCOL_VERSION 5→6.

- #417 Stance system: Sprint/Walk/Careful/Crouch movement stance with
  tick-based speed (1/2/3/4 ticks per move), monologue rate multipliers,
  and PlayerMoveCooldown component. ToggleStanceUp/Down player actions.

- #420 TilePresence: posture-layer collision system allowing same-tile
  occupancy for different layers (Standing/Prone/Seated/Fixture).
  Layer-based collision in validate_movement.

- #421 ObjectType component: Readable/Container/Terminal/Door/Pickup/
  Furniture types with Phase 1 verb sets computed from type + proximity.

- #422 Phase 2 verb filter: KG-gated observer-side verb processing —
  POI priority flips, Confront injection at KnowsDetails+, contradiction
  marking, archetype-specific label relabeling (Smuggler/Detective).

217 unit tests + 17 integration tests passing. All MessagePack fixtures
regenerated for v6 wire format.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 15:38:59 +01:00
jpmschweitzerandClaude Opus 4.6 eb69f1f9ac chore(config): add git rev-parse --show-toplevel permission
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 15:29:07 +01:00
jpmschweitzerandClaude Opus 4.6 651b1d34a6 chore(db): update database backup after server merge
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 15:17:23 +01:00
jpmschweitzerandClaude Opus 4.6 1126df4198 chore(meta): update changelog
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 15:15:58 +01:00
jpmschweitzerandClaude Opus 4.6 52c4872650 chore(config): add worktree boundary rules to CLAUDE.md and plan-sprint skill
Agents were navigating outside the git root into sibling worktrees.
Added explicit boundary rules: all work stays within the git root
unless directly instructed otherwise. Updated plan-sprint to enforce
worktree-relative paths in generated briefings.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 15:15:45 +01:00
jpmschweitzerandClaude Opus 4.6 538b59a7ff chore(meta): update changelog
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 11:01:33 +01:00
jpmschweitzerandClaude Opus 4.6 15b1955827 chore(config): add find, list, tree command permissions
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 11:01:10 +01:00
jpmschweitzerandClaude Opus 4.6 f1bd361816 feat(docs): add D-066 dual-scale grid decision and propagate to all docs
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>
2026-02-14 11:01:05 +01:00
jpmschweitzerandClaude Opus 4.6 2c67ed7254 chore(meta): update changelog
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 10:29:58 +01:00
jpmschweitzerandClaude Opus 4.6 007d9eddea chore(config): standardize permissions in shared settings.json
Move universally-needed permissions from per-worktree
settings.local.json into the shared .claude/settings.json:
git operations, ticket/sprint/sqlite CLI, make, tea, skills.
Add deny rules for destructive operations (force push, hard
reset, clean -f, rm -rf). Migrate from deprecated :* suffix
to modern space-wildcard syntax.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 10:29:36 +01:00
jpmschweitzerandClaude Opus 4.6 187584209f feat(db): add sprint CLI for lifecycle management and agent context
Unified sprint script at db/connectors/sprint with 5 subcommands:
status, start, stop, start-work, prepare. Calls ticket CLI via
subprocess (no SQL duplication), auto-detects sprint from DB state
and team from git branch. Guards prevent activating unplanned
sprints. Updated start-sprint, plan-sprint, and ticket skills to
reference the new CLI. Added sprint CLI section to CLAUDE.md.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 10:29:28 +01:00
jpmschweitzerandClaude Opus 4.6 c41bec0d15 chore(client): track Godot .uid resource identifier files
These are auto-generated by Godot 4 to provide stable resource
references across renames. Tracking them prevents UID divergence.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 09:49:41 +01:00
jpmschweitzerandClaude Opus 4.6 b06a676dcf chore(meta): update changelog
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 09:48:46 +01:00
jpmschweitzerandClaude Opus 4.6 6e0ecb4d4a chore(db): update database backup after planning merge
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 09:48:30 +01:00
jpmschweitzerandClaude Opus 4.6 82bb6289c7 fix(skills): discover worktree branches dynamically in worktree-update
The skill previously relied on the agent hardcoding branch names,
which missed non-standard branches like planning. Now explicitly
instructs the agent to use git worktree list for discovery.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 09:48:26 +01:00
jpmschweitzerandClaude Opus 4.6 3671fceeb8 chore(skills): add start-workshop skill and update CLAUDE.md
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 09:35:07 +01:00
jpmschweitzerandClaude Opus 4.6 47f65c3302 feat(content): smuggler inventory item specs (#441)
Three physical items for the smuggler archetype per D-065: manifest copy,
corridor access token, personal comm log. Each with KG links, confrontation
mechanics, and risk/reward gameplay notes.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 09:35:02 +01:00
jpmschweitzerandClaude Opus 4.6 9d0077bb80 docs(sprints): Sprint 6 Touch briefings — server, client, copy, joint
18 tickets across 3 teams. Movement stances, fog shader rebuild,
multi-verb interactions, smuggler inventory.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 09:34:55 +01:00
jpmschweitzerandClaude Opus 4.6 5c3c2a527b docs(workshops): Control & Interaction Workshop outputs
Workshop notes (2 rounds), outcomes document (13 decisions, 27 tickets,
v0.1 interaction model), and updated brief with final lead direction.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 09:34:49 +01:00
jpmschweitzerandClaude Opus 4.6 c28d9b6501 feat(decisions): formalize D-053 through D-065 from Control & Interaction Workshop
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>
2026-02-14 09:34:42 +01:00
jpmschweitzerandClaude Opus 4.6 485dccf30b chore(meta): update changelog
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 19:26:34 +01:00
jpmschweitzerandClaude Opus 4.6 ce3778321d chore(skills): update review-pr skill
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 19:26:00 +01:00
jpmschweitzerandClaude Opus 4.6 dde270322c docs(briefings): update agent briefings after Sprint 5 pipeline fixes
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 19:24:43 +01:00
jpmschweitzerandClaude Opus 4.6 3c106aa2d0 feat(simulation): complete interaction and monologue pipelines (#413, #414, #415)
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>
2026-02-13 19:23:47 +01:00
jpmschweitzerandClaude Opus 4.6 8228ef3c1c chore(db): update database backup after client merge
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 18:11:56 +01:00