Dialogue box (#434, D-061): Bottom-screen UI skeleton — NPC speech + max 3 response options, insert-styled colors, WASD walk-away with 300ms fade, no close button. Diegetic on InsertOverlay (CanvasLayer 10, z-layer 6). Mock test data for Sprint 7; server dialogue system (#305) wires in Sprint 8+.
Fog entity visualization (#431, D-059/D-060): Cognitive delay rendering — sonar-style sound pings (3 concentric rings, 1.5s fade), unrecognized grey blobs with 0.8s breathing pulse, D-033 color transition at 50% recognition progress, ±0.5 tile position drift. FogEntities node at z:950 between fog shader and InsertOverlay.
Protocol v7 bump: Client protocol version 6→7 to match server PR #23 (pending_recognitions field in ObserverSnapshot).
Completes Sprint 7 client: 8/8 tickets done.
Files changed
New:
client/ui/dialogue_box.gd + .tscn — dialogue box Control
client/scripts/rendering/fog_entities.gd — fog entity renderer
Modified:
client/scenes/main.tscn — DialogueBox in InsertOverlay, FogEntities at z:950
D-061 compliant UI skeleton: NPC speech top, max 3 response options
below, left-aligned. Insert-styled colors (white-blue, amber hover,
green pressed). WASD walk-away fades over 300ms, no close button.
InsertOverlay (CanvasLayer 10, z-layer 6). Mock data in next commit.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Fog entity cognitive delay rendering (D-059/D-060): sonar-style sound
pings (3 concentric rings, 1.5s fade), unrecognized grey blobs with
breathing pulse, D-033 color transition at 50% recognition progress,
±0.5 tile position drift. FogEntities node at z:950 between fog
shader and InsertOverlay.
Protocol v7 bump to match server PR #23 (pending_recognitions field).
Wires dialogue box and fog entities into game loop with mock test data.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Clean implementation of dialogue box and fog entity visualization with proper spec adherence. However, 3 critical bugs need fixing: a stale protocol test, missing signal connections, and a consume-once race condition.
#
File
Severity
Issue
1
client/tests/test_protocol_v6.gd:30
critical
Protocol version test still checks for v6 but PROTOCOL_VERSION is now 7. Test will fail.
2
client/scripts/main.gd:53-63
critical
Dialogue box signals (option_selected, dialogue_dismissed) never connected. Selecting options or walking away has no effect on simulation.
3
client/scripts/main.gd:56-63
critical
Consume-once pattern broken — current_dialogue set to null after showing, but if new snapshot arrives during 200ms fade-in with null, client sees "dismiss". Need dialogue ID tracking or move consume logic to dialogue_box internal state.
4
client/tests/
warning
Zero test coverage for fog_entities.gd (165 lines) and dialogue_box.gd (127 lines).
5
client/scripts/rendering/fog_entities.gd:40
warning
queue_redraw() every frame unconditionally. Add early-return when no entities and no pings.
6
client/ui/dialogue_box.gd:33-47
suggestion
8 separate is_action_pressed() calls — use action list loop.
7
client/ui/dialogue_box.gd:82-92
suggestion
Hardcoded button colors — reference Constants for consistency with other insert-styled UI.
8
client/scripts/rendering/fog_entities.gd:96
suggestion
Magic number 0.01 for color transition threshold — use named constant.
9
client/scripts/rendering/fog_entities.gd:111
suggestion
Silhouette threshold 0.3 and size Vector2(6, 10) lack explanation.
10
client/scripts/protocol/protocol.gd:126
suggestion
No bounds check on pending_recognitions array size.
11
client/scripts/autoloads/sim_bridge.gd:342-355
suggestion
Test mode dialogue appears for 1 tick then vanishes — can't test sustained dialogue.
Tyre (Architecture): REQUEST_CHANGES
Strong z-layer adherence and correct protocol v7 bump. Cognitive delay visualization correctly implements D-059/D-060. Two architectural violations against D-061: fixed-pixel width instead of max-width, and missing auto-pause.
#
File
Severity
Issue
1
client/ui/dialogue_box.tscn:27-29
critical
D-061 specifies max-width (not percentage) but implementation uses fixed pixel offsets (±416px = 832px). Breaks at non-standard resolutions. Use anchor_right = 1.0 with margin constants.
2
client/ui/dialogue_box.gd
critical
D-061 specifies auto-pause in single-player when dialogue open. No pause/unpause logic present.
3
client/ui/dialogue_box.tscn:8-10
warning
Fixed 200px height = 28% at 720p, violating D-061's "max 20% height". Height should use viewport percentage.
4
client/scripts/rendering/fog_entities.gd:75-82
warning
Drift animation not deterministic — fine for v0.1 single-player but flag for multiplayer.
All 5 criticals resolved, all 3 warnings fixed, all 8 suggestions addressed.
Verdict: APPROVED — merged to main.
Follow-up:test_protocol_v6.gd should be renamed — version numbers in test filenames go stale every sprint. Will rename on main.
## Re-review: fix commit 6d6b59c
All 5 criticals resolved, all 3 warnings fixed, all 8 suggestions addressed.
### Verdict: **APPROVED** — merged to main.
**Follow-up:** `test_protocol_v6.gd` should be renamed — version numbers in test filenames go stale every sprint. Will rename on main.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
Completes Sprint 7 client: 8/8 tickets done.
Files changed
New:
client/ui/dialogue_box.gd+.tscn— dialogue box Controlclient/scripts/rendering/fog_entities.gd— fog entity rendererModified:
client/scenes/main.tscn— DialogueBox in InsertOverlay, FogEntities at z:950client/scripts/main.gd— wiring for both systemsclient/scripts/autoloads/game_state.gd— current_dialogue + pending_recognitions fieldsclient/scripts/autoloads/sim_bridge.gd— mock dialogue + mock cognitive delay dataclient/scripts/protocol/protocol.gd— v7 bump + pending_recognitions decodeclient/scripts/constants.gd— Z_FOG_ENTITIES constantTest plan
🤖 Generated with Claude Code
Review: client → main (type: code)
Hoshe (Code Quality): REQUEST_CHANGES
Clean implementation of dialogue box and fog entity visualization with proper spec adherence. However, 3 critical bugs need fixing: a stale protocol test, missing signal connections, and a consume-once race condition.
option_selected,dialogue_dismissed) never connected. Selecting options or walking away has no effect on simulation.current_dialogueset to null after showing, but if new snapshot arrives during 200ms fade-in with null, client sees "dismiss". Need dialogue ID tracking or move consume logic to dialogue_box internal state.queue_redraw()every frame unconditionally. Add early-return when no entities and no pings.is_action_pressed()calls — use action list loop.0.01for color transition threshold — use named constant.0.3and sizeVector2(6, 10)lack explanation.pending_recognitionsarray size.Tyre (Architecture): REQUEST_CHANGES
Strong z-layer adherence and correct protocol v7 bump. Cognitive delay visualization correctly implements D-059/D-060. Two architectural violations against D-061: fixed-pixel width instead of max-width, and missing auto-pause.
anchor_right = 1.0with margin constants.FADE_OUT = 0.3— consider millisecond constant matching D-064's "300ms" wording.COLOR_PINGreuses cursor color — document intentional coupling or decouple.Decision compliance: D-049 (z-layers) ✅ | D-059 (fog) ✅ | D-060 (cognitive delay) ✅ | D-061 (dialogue box) ❌ width/pause | D-064 (walk-away) ✅
Verdict: CHANGES REQUESTED
Must fix (5 critical):
Should fix (3 warnings):
queue_redraw()every frame when idleRe-review: fix commit
6d6b59cAll 5 criticals resolved, all 3 warnings fixed, all 8 suggestions addressed.
Verdict: APPROVED — merged to main.
Follow-up:
test_protocol_v6.gdshould be renamed — version numbers in test filenames go stale every sprint. Will rename on main.Pull request closed