Train on a Theme #446

Closed
opened 2026-10-16 08:20:44 +00:00 by root · 3 comments
root commented 2026-10-16 08:20:44 +00:00 (Migrated from gitlab.core-project.space)

Parent

#440

What to build

A Player can train on one Theme.

  • A picker on the Puzzles page lists the 20 curated Themes (#442's constant), named in English and French, plus mixed training.
  • The chosen Theme is a search parameter of /puzzles, so it survives a reload and "Next" stays in it.
  • next takes an optional Theme: the pick is the same as mixed training (unseen, ±100, widening) restricted to Puzzles carrying the Theme. An unknown Theme is refused by the contract.
  • A pending Attempt is served first whatever the Theme, so switching is no way to skip.
  • A Theme with no unseen Puzzle left says so and offers mixed training.
  • Theme training moves the one Puzzle rating.
  • After a Puzzle is resolved, its curated Themes are shown.

Seams: S1 (the API through its RPC contract) and S3 (the app's router with the API fakes). Covers stories 33-38 of #440.

Acceptance criteria

  • next with a Theme serves only Puzzles carrying it, within the widening window, never one already attempted.
  • A pending Attempt outside the chosen Theme is still served first.
  • An unknown Theme is refused; a Theme with nothing left returns the no-Puzzle-left error.
  • The Puzzle rating moves the same in Theme and mixed training.
  • Front view tests: the picker, the Theme kept in the URL across "Next" and reload, back to mixed, the empty-Theme message, Themes shown after resolution.
  • Every curated Theme has English and French copy.
  • The gate is green (CONTRIBUTING.md, "The five commands").
## Parent #440 ## What to build A Player can train on one Theme. - A picker on the Puzzles page lists the 20 curated Themes (#442's constant), named in English and French, plus mixed training. - The chosen Theme is a search parameter of `/puzzles`, so it survives a reload and "Next" stays in it. - `next` takes an optional Theme: the pick is the same as mixed training (unseen, ±100, widening) restricted to Puzzles carrying the Theme. An unknown Theme is refused by the contract. - A pending Attempt is served first whatever the Theme, so switching is no way to skip. - A Theme with no unseen Puzzle left says so and offers mixed training. - Theme training moves the one Puzzle rating. - After a Puzzle is resolved, its curated Themes are shown. Seams: S1 (the API through its RPC contract) and S3 (the app's router with the API fakes). Covers stories 33-38 of #440. ## Acceptance criteria - [ ] `next` with a Theme serves only Puzzles carrying it, within the widening window, never one already attempted. - [ ] A pending Attempt outside the chosen Theme is still served first. - [ ] An unknown Theme is refused; a Theme with nothing left returns the no-Puzzle-left error. - [ ] The Puzzle rating moves the same in Theme and mixed training. - [ ] Front view tests: the picker, the Theme kept in the URL across "Next" and reload, back to mixed, the empty-Theme message, Themes shown after resolution. - [ ] Every curated Theme has English and French copy. - [ ] The gate is green (`CONTRIBUTING.md`, "The five commands").
root commented 2026-10-16 08:21:31 +00:00 (Migrated from gitlab.core-project.space)

marked this issue as related to #440

marked this issue as related to #440
root commented 2026-10-16 08:21:43 +00:00 (Migrated from gitlab.core-project.space)

marked this issue as related to #443

marked this issue as related to #443
root commented 2026-10-18 13:02:28 +00:00 (Migrated from gitlab.core-project.space)

mentioned in merge request !554

mentioned in merge request !554
root (Migrated from gitlab.core-project.space) closed this issue 2026-10-19 09:58:35 +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#446
No description provided.