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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
E2E connection test (#81) merged via PR #7. Tile collision
system (#236) already on main. Sprint 1 now 7/8 complete.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Tyre #1: Added Rust-generated input_batch_two.msgpack fixture for
bidirectional D-030 Layer 1 symmetry (Vec<PlayerInput>).
Tyre #2: Added all_fixtures_deserialize Rust test that reads every
.msgpack fixture and verifies it deserializes (corruption guard).
Hoshe #3: Added test_decode_snapshot_malformed_entities_counted test
verifying the decode_errors counter on D-010 boundary violations.
45 client tests, 54 server tests pass.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Hoshe #1: E2E test now uses random ephemeral port (49152-65535) with
port rotation on bind failure, avoiding conflicts in parallel CI.
Hoshe #2: Documented intentional input drop on encode failure in
SimBridge — re-queuing would retry bad data and server tick has
already advanced.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace init_skill.py and package_skill.py references with manual
mkdir and validation checklist — the scripts were never created.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Automates the sprint planning workflow: gather carry-overs, scan
backlog, propose tickets, write per-team briefing files. Includes
briefing template reference matching the established format.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Sprint 2 goal: fog of perception working through the bridge. Server
computes LOS visibility, client renders fog. Carries over #236 and #81
from Sprint 1.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
ticket show now accepts multiple IDs (e.g. ticket show 110 111 112).
--brief flag outputs compact human-readable summaries instead of JSON,
useful for sprint planning scans. Single-ID JSON output unchanged.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
D-030 Layer 3: E2E test spawns the Rust server binary, connects via
LocalBridge, sends a batched MoveNorth input, and verifies the player
moved to (16.5, 15.5). Also adds batch encoding roundtrip tests,
framed batch test, and Player entity fixture decode test. 43/43 pass.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Server team added EntityKind::Player variant. Added snapshot_player
fixture and updated snapshot_multi_entity to include all 4 entity kinds
(Player, Npc, Object, Terrain) for complete D-030 Layer 1 coverage.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Server expects a MessagePack array of PlayerInput objects in one framed
message per tick, not individual inputs per frame. Added
Protocol.encode_player_inputs() for batch encoding. Changed SimBridge to
buffer raw input dicts and batch-encode in _process(). Also fixed server
port default (9876) and positional arg format to match server CLI.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Workshop briefs for the larger spikes identified by the architecture
review audit: knowledge graph & information boundaries, observer
snapshot pipeline, NPC AI state machines, save/load architecture,
and map authoring pipeline. Each includes participants, key questions,
input documents, and expected outputs.
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>
Two-round adversarial review by Tyre + Troblum covering full
architecture decisions and implementation. Status: GREEN architecture,
AMBER implementation plan.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>