Theme progress and Resume on the landing, through puzzle.progress #455

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

Parent

#450

What to build

The Player sees where they stand on each Theme, and finds a pending Attempt waiting for them.

API: puzzle.progress

A new account-only procedure, returning { pending: boolean, themes: { theme, tried, solved }[] }.

  • themes holds every curated Theme in curated order, with zeros for an untried one.
  • tried counts the Account's resolved Attempts on Puzzles carrying that Theme. solved counts the solved ones among them.
  • An Attempt failed by a Hint or by Show solution counts as failed.
  • Replays and the pending Attempt are never counted.
  • pending is whether the Account has a pending Attempt.

Landing

  • Each card shows solved/tried with a bar, or "New" when the Theme is untried.
  • Each family tab shows its share of solved Attempts, or "New".
  • The big door reads Resume, with its own line, when an Attempt is pending. It still leads to /puzzles/train, which serves the pending Attempt first.
  • Every Puzzle mutation invalidates puzzle.progress in onSettled.
  • Placeholders show while it loads.

Covers stories 11, 13 and 16.

Seam: API — the puzzle.* procedures through the RPC integration harness (widened on #450)

Acceptance criteria

  • RPC integration tests:
    • An Account with no Attempt: all zeros, pending false.
    • Only Replays: still zeros.
    • A pending Attempt: pending true, and not counted.
    • A Hint failure counts as failed.
    • A Puzzle with several curated Themes counts toward each.
  • A visitor gets the usual unauthorised refusal
  • The landing renders progress, family rates, "New" and Resume, with view tests for a fresh Account, a pending Attempt and a mixed history
  • After solving a Puzzle and going back, the landing shows the updated count
  • Browser check at 390, 1280 and 1920 px, with screenshots in the merge request
## Parent #450 ## What to build The Player sees where they stand on each Theme, and finds a pending Attempt waiting for them. **API: `puzzle.progress`** A new account-only procedure, returning `{ pending: boolean, themes: { theme, tried, solved }[] }`. - `themes` holds every curated Theme in curated order, with zeros for an untried one. - `tried` counts the Account's resolved Attempts on Puzzles carrying that Theme. `solved` counts the solved ones among them. - An Attempt failed by a Hint or by Show solution counts as failed. - Replays and the pending Attempt are never counted. - `pending` is whether the Account has a pending Attempt. **Landing** - Each card shows `solved/tried` with a bar, or "New" when the Theme is untried. - Each family tab shows its share of solved Attempts, or "New". - The big door reads Resume, with its own line, when an Attempt is pending. It still leads to `/puzzles/train`, which serves the pending Attempt first. - Every Puzzle mutation invalidates `puzzle.progress` in `onSettled`. - Placeholders show while it loads. Covers stories 11, 13 and 16. Seam: API — the `puzzle.*` procedures through the RPC integration harness (widened on #450) ## Acceptance criteria - [ ] RPC integration tests: - [ ] An Account with no Attempt: all zeros, `pending` false. - [ ] Only Replays: still zeros. - [ ] A pending Attempt: `pending` true, and not counted. - [ ] A Hint failure counts as failed. - [ ] A Puzzle with several curated Themes counts toward each. - [ ] A visitor gets the usual unauthorised refusal - [ ] The landing renders progress, family rates, "New" and Resume, with view tests for a fresh Account, a pending Attempt and a mixed history - [ ] After solving a Puzzle and going back, the landing shows the updated count - [ ] Browser check at 390, 1280 and 1920 px, with screenshots in the merge request
root commented 2026-10-19 14:46:30 +00:00 (Migrated from gitlab.core-project.space)

mentioned in issue #457

mentioned in issue #457
root commented 2026-10-19 14:46:46 +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:05 +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:09 +00:00 (Migrated from gitlab.core-project.space)

marked this issue as related to #457

marked this issue as related to #457
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 16:06:41 +00:00 (Migrated from gitlab.core-project.space)

mentioned in commit f0416b2f5f

mentioned in commit f0416b2f5f8e5ea01d5a6707cbaf2ac5d291c5e1
root commented 2026-10-19 16:06:41 +00:00 (Migrated from gitlab.core-project.space)

mentioned in commit 1de664e70b

mentioned in commit 1de664e70b0cd2025b1c3ec648be9a3f0c1137ea
root commented 2026-10-19 16:06:42 +00:00 (Migrated from gitlab.core-project.space)

mentioned in commit 934fdc43b0

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

mentioned in commit d597aa7e68

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

mentioned in commit 0ee91c0df4

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

mentioned in commit aec8085ea3

mentioned in commit aec8085ea30ca199055c822159dff59e9e0abc24
root (Migrated from gitlab.core-project.space) closed this issue 2026-10-19 19:20:05 +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#455
No description provided.