fix(client): T-1146 review round — gate the T-1088 seams, kill the settle fallback tautology, neutralize AutoPause leak
PR #190 review (Hoshe + Tyre), all five findings addressed: - Tyre: queue_move_step/queue_stance_toggle (the T-1088 click-to-move seams) now share the full suppression predicate — all three input_queue producers in the module are gated, making the header's 'every action this file can produce' claim true (previously the seams relied on the sandbox caller's own freeze). +3 regression tests. - Hoshe: the live suite's settle=baseline timeout fallback compared baseline to itself, vacuously passing the no-movement claim — a timeout now fails loudly (both tests). - Hoshe: the unit suite's real open_app/close_app transitions fire the global auto-pause handler; with ambient SimBridge.state left CONNECTED by earlier suites (test_hub_teleport has no after_test) each transition silently appended AutoPause/AutoResume to the shared _outbound_buffer. before_test now forces DISCONNECTED (restored in after_test) and clears the buffer. - Hoshe: documented why the live suite's reset_test_state() call is inert but still correct. Full suite: 3374/3374.
This commit is contained in:
@@ -290,7 +290,12 @@ func flush_queue() -> Array[Dictionary]:
|
||||
# false when throttled or input-suppressed. Ordinary Move* actions only: zero
|
||||
# protocol change, no client prediction, the server validates every step (D-010).
|
||||
func queue_move_step(tile_delta: Vector2i) -> bool:
|
||||
if GameState.dialogue_active or GameState.free_camera_mode:
|
||||
# T-1146: same suppression predicate as the _process poll — all three
|
||||
# input_queue producers in this module share it, so the occlusion gate is
|
||||
# self-contained here rather than delegated to seam callers (today the
|
||||
# sandbox freezes the path follower itself, but Phase 5/T-962 lifts
|
||||
# click-to-move into the shared session driver).
|
||||
if GameState.dialogue_active or GameState.free_camera_mode or _gameplay_occluded:
|
||||
return false
|
||||
if tile_delta == Vector2i.ZERO:
|
||||
return false
|
||||
@@ -312,9 +317,9 @@ func queue_move_step(tile_delta: Vector2i) -> bool:
|
||||
# Sprint, down = toward Crouch) through the same input_queue movement rides. Discrete,
|
||||
# so no throttle — the server's handle_toggle_stance has no cooldown, so the sandbox
|
||||
# follower can burst the exact ladder distance and trust it (server validates). No-op
|
||||
# while input is suppressed (dialogue / free camera), matching movement.
|
||||
# while input is suppressed (dialogue / free camera / occlusion), matching movement.
|
||||
func queue_stance_toggle(up: bool) -> void:
|
||||
if GameState.dialogue_active or GameState.free_camera_mode:
|
||||
if GameState.dialogue_active or GameState.free_camera_mode or _gameplay_occluded:
|
||||
return
|
||||
input_queue.append(
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user