Commit Graph
185 Commits
Author SHA1 Message Date
jpmschweitzerandClaude Opus 4.6 fe4d01c5d4 chore(skills): add team-agent mapping to plan-sprint skill
Defines default agents per team so sprint briefings name the
right agents to spawn. Registers Inigo for the audio team.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 01:49:12 +01:00
jpmschweitzerandClaude Opus 4.6 e1510a48f8 chore(agents): add Inigo sound designer agent
Standby agent for audio implementation phase. Named after the
Dreamer from the Void Trilogy. Covers soundscape design, ambient
layers, diegetic cues, and D-018 audio propagation rules.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 01:49:10 +01:00
jpmschweitzer c8fb2a48dd Merge remote-tracking branch 'origin/main' into copy 2026-02-12 01:37:03 +01:00
jpmschweitzerandClaude Opus 4.6 bc311c9893 fix(skills): recognize all team branches in sprint skills
start-sprint and plan-sprint only recognized server/client as valid team
branches. Updated to include all six teams (server, client, copy, audio,
visual, ci) matching the SI agent's ticket assignment rules.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 01:36:41 +01:00
jpmschweitzerandClaude Opus 4.6 715c7e16ab docs(sprints): add copy team briefing for Sprint 2
Sprint briefing for #368 (knowledge vocabulary for v0.1 content).
Defines FactId categories, known_attributes keys, and
RelationshipState transition patterns the copy team needs to deliver.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 01:31:00 +01:00
jpmschweitzerandClaude Opus 4.6 5c7d546f48 chore(config): add new team branches to protected list
Add copy, audio, visual, ci to protected branches in CLAUDE.md.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 01:26:53 +01:00
jpmschweitzerandClaude Opus 4.6 fb9d684767 chore(agents): add ticket assignment rules to SI agent
Teams are server, client, copy, audio, visual, ci. Never use
"joint" — split cross-team work into per-team tickets with
explicit dependencies.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 01:22:33 +01:00
jpmschweitzerandClaude Opus 4.6 12dc0bc0bf chore(db): mark #130 and #360 done after PR merge
Sprint 2 progress: 19/22 tickets done.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 01:17:42 +01:00
jpmschweitzer 7d6503d8eb Merge remote-tracking branch 'origin/client'
# Conflicts:
#	CHANGELOG.md
2026-02-12 01:16:02 +01:00
jpmschweitzer c02b762ddc Merge remote-tracking branch 'origin/server' 2026-02-12 01:15:46 +01:00
jpmschweitzerandClaude Opus 4.6 995baf393d chore(meta): update changelog
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 01:07:19 +01:00
jpmschweitzerandClaude Opus 4.6 64897a40b3 fix(client): address PR #11 review — type safety, perf, tests
Add Dictionary validation in game_state visible_tiles loop to prevent
crash on malformed data (Hoshe critical). Skip redundant modulate.a
writes (Hoshe suggestion). Add 3 tests: malformed visible_tiles,
facing rotation accuracy, v1 backward compatibility. Clarify D-033
Phase 1/Phase 2 comments.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 01:07:02 +01:00
jpmschweitzerandClaude Opus 4.6 3115c7a84c fix(simulation): address PR #10 review — plugin wiring, stale reset, warnings
- Register KnowledgePlugin in main.rs and game_loop test (Tyre critical)
- Add KnowledgeGraph component to player spawn (Tyre critical)
- Reset Stale -> Active on fresh direct observation (Hoshe warning)
- Make registry/queue non-optional in emit_observation_events (Tyre/Hoshe)
- Add tracing::warn for missing EntityRegistry entries (Hoshe warning)
- Replace HashSet with Vec for small entity ID lookups (Hoshe suggestion)
- Add const static assertion for KnowledgeConfidence ordering (Hoshe)
- Add is_empty() and known_facts_iter() to KnowledgeGraph (Tyre)
- Add decay_skips_non_minute_ticks and observe_resets_stale tests (Hoshe)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 01:06:33 +01:00
jpmschweitzerandClaude Opus 4.6 30b028e85a chore(meta): update changelog
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 00:53:46 +01:00
jpmschweitzerandClaude Opus 4.6 f3793bf16e feat(client): D-033 entity colors, peripheral dimming, facing indicator (#130)
Replace hardcoded entity colors with D-033 relationship palette:
Player=#e0e8ff, Npc=unknown teal #4a9ebb, Object=grey #8b8ba0.
Phase 1 defaults by entity kind; Phase 2 (#361) will derive color
from RelationshipState via knowledge graph.

Entities in peripheral vision dimmed to 50% alpha (D-015).
Player entity gets a Polygon2D triangle indicator showing facing
direction, rotated from GameState.player_facing.

82 tests total, 0 failures.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 00:53:28 +01:00
jpmschweitzerandClaude Opus 4.6 57da75c509 feat(client): upgrade protocol decoder and GameState for v2 snapshot
Server shipped ObserverSnapshot v2 with game_time, player_facing,
visible_tiles (with visibility sectors), and per-entity visibility.
Protocol decoder was silently ignoring these fields. Now extracts
all v2 data with null defaults for backward compatibility.

GameState gains game_time, player_facing, visibility_sectors vars.
Derives visible_positions from visible_tiles when present (for real
server mode). Test snapshot updated with v2 fields.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 00:53:18 +01:00
jpmschweitzerandClaude Opus 4.6 a68a3ef429 chore(meta): update changelog
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 00:49:08 +01:00
jpmschweitzerandClaude Opus 4.6 804379dee2 feat(simulation): wire direct observation to knowledge graph (#364, #367)
Perception system emits DirectObservation/LeftLOS knowledge events
based on snapshot visibility. Entities entering LOS get Direct
confidence; leaving LOS downgrades to KnowsDetails. System params
are optional for backward compatibility when KnowledgePlugin is not
registered. 28 knowledge graph unit tests included.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 00:48:51 +01:00
jpmschweitzerandClaude Opus 4.6 e733a4c223 feat(simulation): add knowledge graph system per D-041 (#361, #362, #363, #365)
Implement per-entity KnowledgeGraph component with BTreeMap storage
for deterministic iteration (D-010). StableEntityId + EntityRegistry
for entity identity across save/load. KnowledgeEventQueue + processing
system for decoupled knowledge updates. Decay system runs once per
game-minute. All types conform to D-041 canonical structs.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 00:48:43 +01:00
jpmschweitzer 419f308451 Merge remote-tracking branch 'origin/maintenance' 2026-02-12 00:42:45 +01:00
jpmschweitzerandClaude Opus 4.6 2da6923189 docs(config): prefer ticket CLI over raw SQL in CLAUDE.md
Agents were writing raw SQL with incorrect column names (e.g. `sprint`
instead of `sprint_id`). Leading with the ticket CLI as the preferred
approach avoids this class of errors.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 00:39:16 +01:00
jpmschweitzer a9f1cbd865 Merge remote-tracking branch 'origin/client'
# Conflicts:
#	CHANGELOG.md
2026-02-12 00:32:30 +01:00
jpmschweitzer 4a153d31fd Merge remote-tracking branch 'origin/server' 2026-02-12 00:31:55 +01:00
jpmschweitzerandClaude Opus 4.6 6ff6be9a78 fix(client): use tick-based invalidation for world renderer
Count-based dirty tracking missed content changes when tile/visibility
count stayed the same (e.g., door opening, player moving through
corridor). Now re-renders all layers when GameState.current_tick
advances, which correctly handles every snapshot change.

Adds 3 tests for tick advancement and same-count-different-content
scenarios. 68 total tests, 0 failures.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 00:24:30 +01:00
jpmschweitzerandClaude Opus 4.6 d646d86212 chore(meta): update changelog
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 00:21:33 +01:00
jpmschweitzerandClaude Opus 4.6 e205b38938 feat(simulation): integrate observer visibility query (#112)
Replace unfiltered generate_snapshot with compute_observer_snapshot
that combines shadowcasting + vision cone to send only visible
entities and tiles. Enforces information asymmetry (D-011): NPCs
behind walls or in the blind spot are excluded from the snapshot.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 00:21:07 +01:00
jpmschweitzerandClaude Opus 4.6 f760624967 feat(simulation): add vision cone with forward/peripheral/blind sectors (#111)
Implement direction-dependent visibility modulation per D-015.
Forward cone (~120 deg) at full range, peripheral (~180 deg each side)
at reduced range, blind spot (~60 deg behind) excluded. Facing component
updated on player movement via facing_from_delta.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 00:21:01 +01:00
jpmschweitzerandClaude Opus 4.6 3323678ddf feat(simulation): implement symmetric shadowcasting for LOS (#359, #110)
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>
2026-02-12 00:20:54 +01:00
jpmschweitzerandClaude Opus 4.6 bb6bc287e9 feat(simulation): add ObserverSnapshot v2 schema with visibility types (#358, #25)
Expand wire protocol with version field, GameTime (day/phase/paused),
FacingDirection (8-directional), VisibleTile, VisibilitySector
(Forward/Peripheral), and visibility tag on VisibleEntity.
Regenerate all msgpack fixtures for client compatibility.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 00:20:46 +01:00
jpmschweitzerandClaude Opus 4.6 aa3a3fea7d fix(client): address PR review — invalidation, constants, tests
Review feedback from Hoshe + Tyre on PR #8:

- Extract shared TILE_SIZE to Constants class_name (Tyre #5, Hoshe #7)
- Fix tile invalidation: detect tile/visibility count changes instead
  of one-shot dirty flag, supports chunk loading (Tyre #3, #4)
- Fog dirty tracking: only re-render when visible_positions changes
- Add bounds warning for unknown tile types (Hoshe #1)
- Add player-not-found warning in GameState (Hoshe #5)
- Use Image.fill_rect() instead of pixel loops (Tyre #10)
- Document _player_pos as reserved for fog decay #113 (Tyre #6)
- Add TODO(#130) for D-033 relationship colors (Hoshe #3, Tyre #8)
- Add class_name to EntityRenderer, FogRenderer, TileRenderer
- 20 new rendering tests (D-030 Layer 1): entity lifecycle, fog
  registration, tile type mapping, snapshot completeness, constants
- 65 total tests passing, 0 failures

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 00:15:42 +01:00
jpmschweitzerandClaude Opus 4.6 1443f9dc9e chore(meta): update changelog
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 23:48:28 +01:00
jpmschweitzerandClaude Opus 4.6 dcf887cb49 feat(client): add tile rendering, fog overlay, and camera smoothing
Sprint 2 rendering pipeline: tiles (#129), fog (#131), camera (#116).

- tile_renderer.gd: programmatic TileSet with floor/wall/door/object
  placeholder tiles, renders from snapshot tile data
- fog_renderer.gd: TileMapLayer overlay with three visibility states
  (visible/fog-edge/hidden), computed from visible_positions data
- Camera2D: smoothing enabled (speed 6.0), 2x zoom, locked to player
- game_state.gd: stores visible_tiles and visible_positions from snapshots
- sim_bridge.gd: test data with 8x8 room, corridor, and Manhattan
  distance visibility for development without server
- Scene render order: Tiles -> FogOverlay -> Entities
- Background clear color set to near-black for unexplored areas

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 23:48:02 +01:00
jpmschweitzerandClaude Opus 4.6 55b775ee73 fix(client): fix entity renderer to match protocol format
entity_renderer.gd used wrong field names ("id" instead of
"entity_id", "type" instead of "kind.variant", "position" instead
of x/y). Now matches Protocol.decode_entity() output exactly.
Also centers entities (24x24) within 32px tiles.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 23:47:49 +01:00
jpmschweitzer 3de9c29073 Merge branch 'maintenance' 2026-02-11 23:32:02 +01:00
jpmschweitzerandClaude Opus 4.6 7b81871ba4 chore(meta): update changelog
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 23:31:24 +01:00
jpmschweitzerandClaude Opus 4.6 5805d17f0b chore(skills): require plan mode in start-sprint skill
Replace immediate ticket status change with a mandatory plan mode
step. Agent must now enter plan mode, create a concrete sprint plan
covering implementation approach and ticket ordering, and get user
approval before marking any ticket as in_progress.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 23:31:10 +01:00
jpmschweitzerandClaude Opus 4.6 93abd9b9d0 docs(workshops): complete Knowledge Graph & Information Boundaries workshop
Two-round workshop producing D-041 (Knowledge Graph Data Model):
- Round 1: independent analyses from Dudley, Gestalt, SI, Tyre, Paula
- Round 2: synthesis resolving debates + Gestalt mechanics validation

Key decisions:
- 4-level confidence hierarchy (Suspects < KnowsOf < KnowsDetails < Direct)
- BTreeMap for deterministic iteration (D-010 principle 4)
- Per-entity Component model, not centralized Resource
- StableEntityId + EntityRegistry for save/load stability (partial Q-019)
- Sprint 2 stub: structs + direct observation + basic decay (~6.5 dev-days)

Resolved Q-016 (knowledge hierarchy), raised Q-024/Q-025/Q-026.
Created tickets #361-#368 under epic #351, reconciled #49 children.
Updated sprint 2 briefings, agent briefings, and decision files.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 23:24:37 +01:00
jpmschweitzer 6580346c75 Merge branch 'main' into client 2026-02-11 23:03:32 +01:00
jpmschweitzerandClaude Opus 4.6 c065d98325 chore(meta): update changelog
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 23:02:27 +01:00
jpmschweitzerandClaude Opus 4.6 edfb1bb93d feat(db): add team column to ticket system
Adds a comma-separated team field to tickets so work can be
attributed to server, client, or joint teams. Includes --team
filter on list, --team on create, and a new team subcommand.
Schema, CLI, and skill docs all updated.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 23:02:06 +01:00
jpmschweitzer 70a7d6527d Merge branch 'main' into client 2026-02-11 22:57:23 +01:00
jpmschweitzerandClaude Opus 4.6 811a5f8a4c chore(config): track .claude/settings.json in version control
Settings.json is the shared team config (distinct from settings.local.json
which remains per-user). Remove it from .gitignore so it's tracked.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 22:55:56 +01:00
jpmschweitzerandClaude Opus 4.6 1883a6a6d4 docs(sprints): add updated joint briefing for sprint 2
Joint tasks with ticket IDs (#356-#360), dependency chains,
and sprint completion proof criteria for client team reference.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 22:34:24 +01:00
jpmschweitzerandClaude Opus 4.6 160add9719 docs(sprints): update sprint 2 briefings with ticket IDs and dependencies
Server team added #356-#360 for pre-sprint design tasks and
integration milestones. Updated server.md and joint.md with
actual ticket numbers, dependency chains, and done status.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 22:30:05 +01:00
jpmschweitzerandClaude Opus 4.6 79603c9a7f chore(db): add sprint 2 pre-sprint tickets and update joint briefing
Server team added #356-#360: fog bridge, sprint proof, snapshot
v2 schema, Q-018/Q-019 resolution tasks. Updated joint.md with
actual ticket numbers and #81 done status.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 22:24:09 +01:00
jpmschweitzer 45ad3cdf0c Merge remote-tracking branch 'origin/maintenance' 2026-02-11 22:20:10 +01:00
jpmschweitzerandClaude Opus 4.6 8c5a022cfd chore(db): activate sprint 2 "See" with 9 tickets
Server: #110 shadowcasting, #111 vision cone, #112 observer
query, #25 game clock. Client: #116 camera lock, #129 tile
rendering, #130 entity sprites, #131 fog overlay, #113 fog
rendering.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 22:17:31 +01:00
jpmschweitzerandClaude Opus 4.6 468aad60d4 chore(meta): update changelog
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 22:11:44 +01:00
jpmschweitzerandClaude Opus 4.6 39f85dfb3a fix(skills): use absolute paths in start-sprint for worktree safety
The skill used bare relative paths like db/connectors/ticket which
fail when the shell CWD doesn't match the worktree root. Now requires
resolving REPO_ROOT via git rev-parse --show-toplevel first.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 22:11:34 +01:00
jpmschweitzerandClaude Opus 4.6 08e794086e chore(db): close sprint 1 and mark epic #37 done
Sprint 1 "Run" completed — 8/8 tickets done. Player-controlled
character moving on screen through working IPC bridge achieved.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 22:10:27 +01:00