Solving moves to /puzzles/train on GameScreen, with a move list #452

Closed
opened 2026-10-19 14:45:16 +00:00 by root · 14 comments
root commented 2026-10-19 14:45:16 +00:00 (Migrated from gitlab.core-project.space)

Parent

#450

What to build

Solving moves to /puzzles/train and is built on GameScreen, like a Game. Until the landing lands, /puzzles redirects to /puzzles/train, keeping ?theme=.

Board column

  • A row for the Puzzle above the board, with its rating shown as hidden. The value itself comes in the result-dialog ticket.
  • A row for the Player below, showing their Puzzle rating, its change once rated, and "to move" while playing.

Rail

  • Header: the Theme being trained, and the Unrated badge on a Replay.
  • A visible status line ("Find the best move for White").
  • The move list, with its review controls: the opponent's first Move and every Move played since.
  • Footer:
    • Hint and Show solution while playing. During a rated Attempt, Hint still asks to confirm.
    • Next once resolved.

Replay

The Replay at /puzzles/replay/$puzzleId uses the same frame, with "Replay" in the header.

States on the frame

  • Loading: an empty board, placeholders for the rows and a disabled footer.
  • Show solution: plays the rest of the line into the move list.
  • Retry: resets as a Replay.
  • NO_PUZZLE_LEFT with a Theme: the footer offers Mixed training.
  • NO_PUZZLE_LEFT with no Theme: the footer offers the landing.
  • NOT_REPLAYABLE: the footer offers the History.

The old board-and-aside layout and its Theme select go. The existing e2e scenario follows the new route.

Covers stories 18, 20–22, 24–31 and 36. The Theme switcher has its own ticket; until it lands, the header shows the Theme as plain text.

Seam: Front — the pages on the app's router (@/app/router.harness with the puzzles MSW handlers)

Acceptance criteria

  • /puzzles/train and /puzzles/replay/$puzzleId render on GameScreen, with the Puzzle row, the Player row and the move list
  • The move list can be stepped back through as in a Game, and playing returns to the live position
  • Hint, its confirmation during an Attempt, Show solution, Retry and Next work as today
  • The loading state and the three refusals render on the frame, with their way out in the footer
  • /puzzles?theme=fork lands on /puzzles/train?theme=fork
  • Links that meant "train" (the History's empty state, the Replay's Next) point to /puzzles/train
  • View tests cover every state above; puzzles.spec.ts passes on the new route
  • Browser check of every state at 390, 1280 and 1920 px, with screenshots in the merge request
## Parent #450 ## What to build Solving moves to `/puzzles/train` and is built on `GameScreen`, like a Game. Until the landing lands, `/puzzles` redirects to `/puzzles/train`, keeping `?theme=`. **Board column** - A row for the Puzzle above the board, with its rating shown as hidden. The value itself comes in the result-dialog ticket. - A row for the Player below, showing their Puzzle rating, its change once rated, and "to move" while playing. **Rail** - Header: the Theme being trained, and the Unrated badge on a Replay. - A visible status line ("Find the best move for White"). - The move list, with its review controls: the opponent's first Move and every Move played since. - Footer: - Hint and Show solution while playing. During a rated Attempt, Hint still asks to confirm. - Next once resolved. **Replay** The Replay at `/puzzles/replay/$puzzleId` uses the same frame, with "Replay" in the header. **States on the frame** - Loading: an empty board, placeholders for the rows and a disabled footer. - Show solution: plays the rest of the line into the move list. - Retry: resets as a Replay. - `NO_PUZZLE_LEFT` with a Theme: the footer offers Mixed training. - `NO_PUZZLE_LEFT` with no Theme: the footer offers the landing. - `NOT_REPLAYABLE`: the footer offers the History. The old board-and-aside layout and its Theme select go. The existing e2e scenario follows the new route. Covers stories 18, 20–22, 24–31 and 36. The Theme switcher has its own ticket; until it lands, the header shows the Theme as plain text. Seam: Front — the pages on the app's router (`@/app/router.harness` with the puzzles MSW handlers) ## Acceptance criteria - [ ] `/puzzles/train` and `/puzzles/replay/$puzzleId` render on `GameScreen`, with the Puzzle row, the Player row and the move list - [ ] The move list can be stepped back through as in a Game, and playing returns to the live position - [ ] Hint, its confirmation during an Attempt, Show solution, Retry and Next work as today - [ ] The loading state and the three refusals render on the frame, with their way out in the footer - [ ] `/puzzles?theme=fork` lands on `/puzzles/train?theme=fork` - [ ] Links that meant "train" (the History's empty state, the Replay's Next) point to `/puzzles/train` - [ ] View tests cover every state above; `puzzles.spec.ts` passes on the new route - [ ] Browser check of every state at 390, 1280 and 1920 px, with screenshots in the merge request
root commented 2026-10-19 14:45:44 +00:00 (Migrated from gitlab.core-project.space)

mentioned in issue #453

mentioned in issue #453
root commented 2026-10-19 14:45:45 +00:00 (Migrated from gitlab.core-project.space)

mentioned in issue #454

mentioned in issue #454
root commented 2026-10-19 14:46:12 +00:00 (Migrated from gitlab.core-project.space)

mentioned in issue #456

mentioned in issue #456
root commented 2026-10-19 14:46:42 +00:00 (Migrated from gitlab.core-project.space)

marked this issue as related to #450

marked this issue as related to #450
root commented 2026-10-19 14:47:03 +00:00 (Migrated from gitlab.core-project.space)

marked this issue as related to #453

marked this issue as related to #453
root commented 2026-10-19 14:47:04 +00:00 (Migrated from gitlab.core-project.space)

marked this issue as related to #454

marked this issue as related to #454
root commented 2026-10-19 14:47:06 +00:00 (Migrated from gitlab.core-project.space)

marked this issue as related to #456

marked this issue as related to #456
root commented 2026-10-19 15:01:58 +00:00 (Migrated from gitlab.core-project.space)

mentioned in merge request !557

mentioned in merge request !557
root commented 2026-10-19 15:18:06 +00:00 (Migrated from gitlab.core-project.space)

mentioned in commit 4b753127f6

mentioned in commit 4b753127f6035bdc8d76439392f4d7cd10fa6571
root commented 2026-10-19 15:18:06 +00:00 (Migrated from gitlab.core-project.space)

mentioned in commit 9d6c01215c

mentioned in commit 9d6c01215ca78ac525866339d7b108dafd0592d6
root commented 2026-10-19 15:18:06 +00:00 (Migrated from gitlab.core-project.space)

mentioned in commit 4e15ac8f85

mentioned in commit 4e15ac8f853ecbf7855bd2fdd3643067d0c70274
root commented 2026-10-19 18:46:21 +00:00 (Migrated from gitlab.core-project.space)

mentioned in commit b471059039

mentioned in commit b4710590393ce384d208b6a0ad96837cdee94387
root commented 2026-10-19 18:46:21 +00:00 (Migrated from gitlab.core-project.space)

mentioned in commit 197954517f

mentioned in commit 197954517fbf644a9a83cbe2e691952728c83675
root commented 2026-10-19 18:46:21 +00:00 (Migrated from gitlab.core-project.space)

mentioned in commit 0ca9006e0e

mentioned in commit 0ca9006e0e0f6c537dd54edae487356e6abe0586
root (Migrated from gitlab.core-project.space) closed this issue 2026-10-19 19:15:03 +00:00
Sign in to join this conversation.
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.

Reference
amaurycoudr/chess-project#452
No description provided.