Stage 7: UI playable slice + remaining edge ops #7

Merged
developer merged 6 commits from feature/stage-7-ui into master 2026-06-03 10:20:32 +00:00
Owner

Playable slice of the UI (plain Svelte 5 + TS + Vite) plus the gateway/backend operations it needs.

  • UI: auth (guest/email), my-games lobby, auto-match, board (Pointer-Events drag+tap, MakeMove popup/hold, two-state zoom, blank chooser), pass/exchange/resign, hint, evaluate preview, word-check + complaint, chat + nudge, live stream, i18n en/ru, themes (Telegram-ready), hash router, IndexedDB session, mock transport (pnpm start).
  • Edge/back: 11 new ops (pass/exchange/resign/hint/evaluate/check_word/complaint/history, games.list, chat.list/nudge), new game.ListForAccount, seat display_name; FBS schema extended + Go regenerated; real connect-web + FlatBuffers transport.
  • Docs: new Stage 8 (UI social/account/history), later stages shifted +1.
  • Tests/CI: Vitest + Playwright smoke + ui-test.yaml (strict e2e, bundle budget); gateway transcode tests; ListForAccount integration test. Prod bundle ~67 KB gzip.

UI/UX refinements follow in a separate PR.

Playable slice of the UI (plain Svelte 5 + TS + Vite) plus the gateway/backend operations it needs. - **UI**: auth (guest/email), my-games lobby, auto-match, board (Pointer-Events drag+tap, MakeMove popup/hold, two-state zoom, blank chooser), pass/exchange/resign, hint, evaluate preview, word-check + complaint, chat + nudge, live stream, i18n en/ru, themes (Telegram-ready), hash router, IndexedDB session, mock transport (`pnpm start`). - **Edge/back**: 11 new ops (pass/exchange/resign/hint/evaluate/check_word/complaint/history, games.list, chat.list/nudge), new `game.ListForAccount`, seat `display_name`; FBS schema extended + Go regenerated; real connect-web + FlatBuffers transport. - **Docs**: new Stage 8 (UI social/account/history), later stages shifted +1. - **Tests/CI**: Vitest + Playwright smoke + `ui-test.yaml` (strict e2e, bundle budget); gateway transcode tests; `ListForAccount` integration test. Prod bundle ~67 KB gzip. UI/UX refinements follow in a separate PR.
developer added 6 commits 2026-06-03 10:20:32 +00:00
- plain Svelte 5 + TS + Vite (no SvelteKit); CSS-token design system (Telegram-ready), hash router, IndexedDB session
- pure libs: domain model, premium/value maps ported from solver, board replay, placement state machine, i18n en/ru
- in-memory mock transport + seed data; pnpm start runs lobby->active game->board with no backend
- board: pointer-drag + tap placement, MakeMove (popup / 1s-hold commit), two-state zoom, blank chooser, exchange, hint, word-check, chat
- Playwright smoke (mock) green; svelte-check clean; mock bundle ~37 KB gzip
backend: REST handlers for pass/exchange/resign/hint/evaluate/check_word/complaint/history/chat-list/nudge + new game.ListForAccount (my games) + seat display_name resolution
pkg/fbs: GameActionRequest/ExchangeRequest/EvalRequest/EvalResult/CheckWordRequest/WordCheckResult/ComplaintRequest/HintResult/History/GameList/ChatList + SeatView.display_name; committed Go regenerated (flatc 23.5.26)
gateway: 11 new transcode ops + backendclient methods + FB encoders
ui: edge TS codegen (flatc --ts + protoc-gen-es, committed), FlatBuffers<->model codec, real connect-web transport (binary, bearer auth, Subscribe). prod bundle ~69KB gzip JS
- Vitest units: board replay, placement machine, premium parity, i18n key parity, FlatBuffers codec round-trips (19 tests)
- Playwright smoke (mock transport): guest -> lobby -> board -> place tile -> preview
- ui-test.yaml workflow: check/unit/build + bundle-size budget (67.5KB gzip < 100KB) + chromium e2e
- gateway transcode tests for games.list (seat display_name), pass, hint
- backend integration test for game.ListForAccount
Stage 7 (wip): docs bake + stage renumber (insert UI Stage 8, shift +1)
Tests · Go / test (push) Successful in 7s
Tests · Integration / integration (push) Successful in 12s
Tests · UI / test (push) Failing after 51m19s
7a48327ab6
- PLAN.md: new Stage 8 (UI social/account/history); Telegram->9, Admin->10, Linking->11, Polish->12; tracker + Stage 7 refinements; split the Stage 6 'wired in Stage 7' note between 7 and 8
- ARCHITECTURE: promote ui to current (slice scope, board-replay, codegen, theming, mock)
- FUNCTIONAL(+ru): client-app section with the Stage 7/8 split
- README + ui/README + CLAUDE.md: UI build/run/test, codegen, pnpm notes
- bumped Stage 8-11 refs (+1) across docs and code comments
Stage 7: ui-test CI — Playwright browser/e2e best-effort
Tests · UI / test (push) Successful in 29s
f2f91ae7e6
The Gitea runner is an act host executor without apt privileges, so
'playwright install --with-deps chromium' (apt-get) hung ~51m then failed. Drop
--with-deps, bound the browser-install + e2e steps with timeouts and mark them
continue-on-error so a runner lacking GUI libs can't block the gate. The strict
gate stays check/unit/build/size; the e2e smoke remains a hard local pre-push check.
Stage 7: ui-test CI — make Playwright e2e strict
Tests · UI / test (push) Successful in 11s
Tests · Go / test (pull_request) Successful in 7s
Tests · Integration / integration (pull_request) Successful in 10s
Tests · UI / test (pull_request) Successful in 11s
5b2e95d3c0
System libs are now provisioned once on the runner host (install-deps); the job
downloads the browser into the runner cache and runs the smoke strictly (no
--with-deps, no sudo, no continue-on-error; timeouts kept as a hang guard).
developer merged commit 03347c5a91 into master 2026-06-03 10:20:32 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: developer/scrabble-game#7