Scanning the yard for a cellmate: no Esc-back from waiting-for-opponent screen #85

Closed
opened 2026-06-22 13:10:09 +02:00 by bosun · 1 comment
Owner

Behavior (operator-observed 2026-06-22)

When entering multiplayer mode and the "Scanning the yard for a cellmate..." screen appears (waiting for opponent), there is no keyboard way back to the welcome screen if no opponent arrives.

Expected

Esc key returns the player to the welcome screen, abandoning the in-progress matchmaking flow.

Same shape as #79

#79 fixed the same gap on the multiplayer name-entry screen (checkin Esc→title). The waiting/scanning screen has the symmetric gap on the next state in the multiplayer flow.

Lane + size

Shipwright lane (client-side state-machine cancel-transition). Size/S — same shape as #79.

Acceptance criteria

  1. From "Scanning the yard for a cellmate..." screen, Esc returns to welcome screen
  2. Welcome-screen state is fresh (player can re-enter MP or pick another mode)
  3. No keyboard-trap (player always has a way back without page reload)
  4. No regression on the "opponent found" → match-start transition path
  5. Harness #81 extended with a row for the new cancel-transition (completeness meta-check picks it up automatically)
## Behavior (operator-observed 2026-06-22) When entering multiplayer mode and the "Scanning the yard for a cellmate..." screen appears (waiting for opponent), there is no keyboard way back to the welcome screen if no opponent arrives. ## Expected Esc key returns the player to the welcome screen, abandoning the in-progress matchmaking flow. ## Same shape as #79 #79 fixed the same gap on the multiplayer name-entry screen (checkin Esc→title). The waiting/scanning screen has the symmetric gap on the next state in the multiplayer flow. ## Lane + size Shipwright lane (client-side state-machine cancel-transition). Size/S — same shape as #79. ## Acceptance criteria 1. From "Scanning the yard for a cellmate..." screen, Esc returns to welcome screen 2. Welcome-screen state is fresh (player can re-enter MP or pick another mode) 3. No keyboard-trap (player always has a way back without page reload) 4. No regression on the "opponent found" → match-start transition path 5. Harness #81 extended with a row for the new cancel-transition (completeness meta-check picks it up automatically)
bosun closed this issue 2026-06-22 13:47:21 +02:00
Author
Owner

AC-tick pass — closed by PR #90 (squashed):

  1. From Scanning-the-yard lobby screen, Esc returns to welcome ✓ — keydown screen===connected phase lobby branch added, mirrors #79 shape. Mutation-proven (disable keyboard branch → harness keyboard-row reds).
  2. Welcome-screen state is fresh ✓ — backToYard() teardown (net.close + initialState + screen=title) reused; clean state on return.
  3. No keyboard-trap ✓ — both keyboard Esc AND touch BACK exits available (touch BACK folded in per (a)-ratify of Shipwright fork-surfacing, addresses mobile-keyboard-trap by symmetric-input-path discipline).
  4. No regression on opponent-found → match-start transition ✓ — state.spectating/net.spectating gate consistency checked by Surveyor; cannot diverge.
  5. Harness #81 extended with new cancel-transition row(s) ✓ — both keyboard + touch rows independently mutation-proven (disable keyboard → only keyboard-row reds; neuter touch hit-test → only touch-row reds). Completeness meta-check auto-picks up the new node×key cells.

BONUS substrate-discipline applied:

  • Input-path-symmetry built-in-by-construction: rather than ship keyboard-only fix + file follow-up tracker for touch, Shipwright surfaced the symmetric mobile-keyboard-trap fork at design-time + folded touch BACK into the same PR. Codified-to-embodied from the #80 touch-restart-guard catch on PR #84.
  • Layered-instrument-axes: portrait render-capture caught touch BACK colliding with DOM audio toolbar at top-left (hit-test passed; visual-layout failed). Repositioned to centered-below-text via mutable-layout pattern. Bank-instance n=2 of "screenshot caught what hit-test passed".
  • Scope-discipline: #79 checkin parallel touch-back gap deferred to systematic touch-back audit tracker (#88) rather than scope-creep into #85.

Honest ceiling: on-device iOS touch is operator-device-gated (same ceiling as #66/#73). Code axis + harness mutation-proof + render-capture done; iOS-touch live-confirm awaits operator playtest post round-13 redeploy.

**AC-tick pass** — closed by PR #90 (squashed): 1. **From Scanning-the-yard lobby screen, Esc returns to welcome** ✓ — keydown screen===connected phase lobby branch added, mirrors #79 shape. Mutation-proven (disable keyboard branch → harness keyboard-row reds). 2. **Welcome-screen state is fresh** ✓ — backToYard() teardown (net.close + initialState + screen=title) reused; clean state on return. 3. **No keyboard-trap** ✓ — both keyboard Esc AND touch BACK exits available (touch BACK folded in per (a)-ratify of Shipwright fork-surfacing, addresses mobile-keyboard-trap by symmetric-input-path discipline). 4. **No regression on opponent-found → match-start transition** ✓ — state.spectating/net.spectating gate consistency checked by Surveyor; cannot diverge. 5. **Harness #81 extended with new cancel-transition row(s)** ✓ — both keyboard + touch rows independently mutation-proven (disable keyboard → only keyboard-row reds; neuter touch hit-test → only touch-row reds). Completeness meta-check auto-picks up the new node×key cells. BONUS substrate-discipline applied: - **Input-path-symmetry built-in-by-construction**: rather than ship keyboard-only fix + file follow-up tracker for touch, Shipwright surfaced the symmetric mobile-keyboard-trap fork at design-time + folded touch BACK into the same PR. Codified-to-embodied from the #80 touch-restart-guard catch on PR #84. - **Layered-instrument-axes**: portrait render-capture caught touch BACK colliding with DOM audio toolbar at top-left (hit-test passed; visual-layout failed). Repositioned to centered-below-text via mutable-layout pattern. Bank-instance n=2 of "screenshot caught what hit-test passed". - **Scope-discipline**: #79 checkin parallel touch-back gap deferred to systematic touch-back audit tracker (#88) rather than scope-creep into #85. Honest ceiling: on-device iOS touch is operator-device-gated (same ceiling as #66/#73). Code axis + harness mutation-proof + render-capture done; iOS-touch live-confirm awaits operator playtest post round-13 redeploy.
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
frankenbit/cellblock#85
No description provided.