Stage 17 #5: hide finished games from your own lobby list #27

Merged
developer merged 2 commits from feature/hide-finished-games into development 2026-06-08 22:45:07 +00:00
Owner

Lets a player remove a finished game from their own my games list. Per-account, finished-only, irreversible (the game stays for the other players; no un-hide).

UI: on a finished row, swipe-left (touch) or tap its kebab ⋮ (desktop) reveals a that hides it; active rows carry an inert chevron only to keep the right-edge icons aligned. Optimistic removal + lobby-cache sync.

Backend: migration 00012 game_hidden(account_id, game_id); ListGamesForAccount filters the hidden set; POST /api/v1/user/games/:id/hide (seat + finished checks → ErrNotAPlayer / ErrGameActive).

Gateway: game.hide edge op (reuses GameActionRequestAck) + backendclient.HideGame.

Tests: integration (active→ErrGameActive, outsider→ErrNotAPlayer, per-account visibility, idempotent), gateway transcode round-trip, mock e2e (kebab → ). Also hardened a pre-existing chat-screen .back transition flake surfaced by the new test's timing.

Docs: ARCHITECTURE persistence list, FUNCTIONAL (+ _ru) lobby story, PLAN tracker.

Note: tapping hides immediately — the swipe/kebab reveal is the safeguard. Say the word if you'd prefer a hold-to-confirm on the .

Lets a player remove a **finished** game from their own *my games* list. Per-account, finished-only, **irreversible** (the game stays for the other players; no un-hide). **UI:** on a finished row, **swipe-left** (touch) or tap its **kebab ⋮** (desktop) reveals a **❌** that hides it; active rows carry an inert **›** chevron only to keep the right-edge icons aligned. Optimistic removal + lobby-cache sync. **Backend:** migration `00012` `game_hidden(account_id, game_id)`; `ListGamesForAccount` filters the hidden set; `POST /api/v1/user/games/:id/hide` (seat + finished checks → `ErrNotAPlayer` / `ErrGameActive`). **Gateway:** `game.hide` edge op (reuses `GameActionRequest` → `Ack`) + `backendclient.HideGame`. **Tests:** integration (active→`ErrGameActive`, outsider→`ErrNotAPlayer`, per-account visibility, idempotent), gateway transcode round-trip, mock e2e (kebab → ❌). Also hardened a pre-existing chat-screen `.back` transition flake surfaced by the new test's timing. **Docs:** ARCHITECTURE persistence list, FUNCTIONAL (+ _ru) lobby story, PLAN tracker. Note: tapping ❌ hides immediately — the swipe/kebab reveal is the safeguard. Say the word if you'd prefer a hold-to-confirm on the ❌.
developer added 1 commit 2026-06-08 22:26:52 +00:00
Stage 17 #5: hide finished games from your own lobby list
CI / changes (pull_request) Successful in 3s
CI / unit (pull_request) Successful in 9s
CI / integration (pull_request) Successful in 11s
CI / ui (pull_request) Successful in 35s
CI / gate (pull_request) Successful in 0s
CI / deploy (pull_request) Successful in 2m16s
4999478ded
A player can remove a finished game from their own 'my games' list. The action is
per-account, finished-only and irreversible (the game stays for the other players;
there is no un-hide).

- backend: migration 00012 game_hidden(account_id, game_id); store HideGame +
  hiddenGameIDs + ListGamesForAccount filtering; service HideGame (seat + finished
  checks, reusing ErrNotAPlayer / ErrGameActive); POST /api/v1/user/games/:id/hide.
- gateway: game.hide edge op (reuses GameActionRequest -> Ack) + backendclient.HideGame.
- ui: finished rows reveal a delete via swipe-left (touch) or a kebab tap (desktop),
  active rows get an inert chevron for icon alignment; optimistic removal + lobby-cache
  sync; mock + transport + client wiring; lobby.hideGame label (en/ru).
- tests: integration (active->ErrGameActive, outsider->ErrNotAPlayer, per-account,
  idempotent), gateway transcode round-trip, mock e2e (kebab -> delete); hardened a
  pre-existing chat-screen .back transition flake surfaced by the new test's timing.
- docs: ARCHITECTURE persistence list, FUNCTIONAL (+ _ru) lobby story, PLAN tracker.
developer added 1 commit 2026-06-08 22:39:59 +00:00
Stage 17 #5: make the active-row chevron open the game (not a no-op)
CI / changes (pull_request) Successful in 1s
CI / unit (pull_request) Successful in 8s
CI / integration (pull_request) Successful in 11s
CI / ui (pull_request) Successful in 36s
CI / gate (pull_request) Successful in 0s
CI / deploy (pull_request) Successful in 1m5s
13361c098c
Owner review: the '>' on an active game row should be a real tap target that opens
the game, like the rest of the row — not inert. The chevron now navigates (kept out
of the tab order / a11y tree since the row's main button already does the same), and
active-row swipes no longer suppress the tap. Adds an e2e for the chevron navigation.
owner approved these changes 2026-06-08 22:43:55 +00:00
developer merged commit 6956dad354 into development 2026-06-08 22:45:07 +00:00
developer deleted branch feature/hide-finished-games 2026-06-08 22:45:07 +00:00
Sign in to join this conversation.
No Reviewers
No Label
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: developer/scrabble-game#27