Dead ends: a DeadEndPage with a board to play on for the not-found and error screens, and the recovery notices on AuthPage #458

Closed
opened 2026-10-19 15:15:07 +00:00 by root · 2 comments
root commented 2026-10-19 15:15:07 +00:00 (Migrated from gitlab.core-project.space)

Problem Statement

A Player who follows a link to a Game or a profile the server does not hold, types an address no route matches, or hits a failure the router is left with, lands on a page that is almost empty. A short line sits in the middle of the window, or in its top-left corner for the last two cases, with no way onward except the navigation. At 1280 and 1920 px most of the screen is blank (spec #450, Further Notes > Layout audit).

The two notices of the password recovery have the same problem. A Player who asked for a reset link, or who opened one that no longer works, sees the "recovering" pitch and Morphy's board vanish. A narrow column is left on an empty page, so the screen jumps the moment the request goes through, and the next step is a muted link.

Solution

  • DeadEndPage, a fifth page template: an address that leads nowhere, or a failure. It shows a heading, why, the address the Player asked for when it helps, and the way onward. Beside it sits a board on which the Player can play a whole game of chess alone, from the starting position, kept nowhere. Game not found, Player not found, the page for an address no route matches, and the router's error screen all move onto it.
  • Each screen leads onward. Game not found leads to My games and the home. Player not found and the unknown address lead to the home. The error screen offers Try again and the home.
  • The recovery notices become states of AuthPage. The notice takes the form's place in the form column, under the same pitch and board. Its next step becomes a primary button, and its heading takes focus.

The layout was settled with a three-variant prototype, and the owner picked A (Board split), with its still board replaced by a playable one. The variants live on the throwaway branch prototype/dead-end-page; see Further Notes.

User Stories

DeadEndPage screens

  1. As a Player who opens a link to a Game the server does not hold, I want a page that says the Game was not found and why, so that I know the link is at fault and not the site.
  2. As that Player, I want the page to show the address I asked for, the Game id in monospace, so that I can spot a link that was cut short.
  3. As that Player, signed in or a Guest, I want a My games button as the main way onward and a link home beside it, so that I can find the Game I meant.
  4. As a Player who opens a profile whose Username no Account uses, I want a page that says the Player was not found, shows the Username I asked for, and leads home, so that I can check what I typed and move on.
  5. As a Player who types an address no route matches, I want a page that says so and leads home, so that I am never left with a bare line.
  6. As a Player whose page failed to load, I want a page that says something went wrong, with a Try again button that reloads it and a link home, so that I can recover in one click.
  7. As a Player reading the site in French, I want every DeadEndPage screen, its actions and its board's result lines in French, so that nothing switches language on me.
  8. As a Player on a 1280 or 1920 px screen, I want the page split between a board on a coloured panel and the text, so that the page uses the screen instead of leaving it blank.
  9. As a Player on a phone, I want the heading, the reason and the actions first and the board below at full width, so that the way onward is in view without scrolling and the board is large enough to touch.

The board on a DeadEndPage

  1. As a Player on any DeadEndPage, I want a board set at the starting position on which I play White and then Black, so that I have something to do while I am here.
  2. As that Player, I want the same legal-move, last-move and check marks as on every other board, by click and by drag, so that the board plays like the rest of the site.
  3. As that Player, I want a line under the board that names the ending when the game ends (checkmate and who won, stalemate, or the kind of draw), so that I know the game is over and how.
  4. As that Player, I want a Play again button once the game has ended, so that I can start over from the starting position.
  5. As a Player, I want this game kept nowhere: not in My games, not on the server, and gone when I reload or leave, so that a pastime never clutters my Games.
  6. As a Player on the error screen, I want the board to work even though the page failed, so that the screen stays usable when the network does not.

AuthPage notice states

  1. As a Player who asked for a password reset link, I want the page to keep the recovering pitch and Morphy's board and to show the sent notice in place of the form, so that the page does not jump when my request goes through.
  2. As that Player, I want a Back to sign in button as the next step, so that the way onward is obvious.
  3. As a Player who opens a reset link that expired, was already used or is unknown, I want the same page to say the link no longer works, with an Ask for a new link button, so that I can start over.
  4. As a Player using a screen reader, I want the notice's heading to take focus when it replaces the form, and the sent notice to be announced as a status, so that I hear the change.

Screens

Game not found (/games/$id, a Game the server does not hold)

  • Entry and exit: any link to a Game the server does not hold, such as a copied Game link cut short, an old link or a typed id. My games leads to /games, Home leads to /. The site navigation stays as on every page.

  • Template: DeadEndPage. The board panel holds the playable board, and the text column holds the heading, the reason, the address asked for and the actions.

  • Wireframe (1280 px, beside the 16 rem sidebar):

    ┌──────────┬──────────────────────────────┬─────────────────────────────┐
    │ sidebar  │▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓│                             │
    │          │▓▓ ┌──────────────────────┐ ▓▓│  Game not found             │
    │          │▓▓ │                      │ ▓▓│                             │
    │          │▓▓ │   playable board     │ ▓▓│  No game is stored at this  │
    │          │▓▓ │   starting position  │ ▓▓│  link. Check that it was    │
    │          │▓▓ │                      │ ▓▓│  copied whole.              │
    │          │▓▓ │                      │ ▓▓│                             │
    │          │▓▓ └──────────────────────┘ ▓▓│  You asked for /games/abc1… │
    │          │▓▓  result line, Play again ▓▓│                             │
    │          │▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓│  [ My games ]   Home        │
    └──────────┴──────────────────────────────┴─────────────────────────────┘
    

    The panel (▓, the primary colour, as AuthPage's pitch side) fills the full height. The board is as large as AuthPage's, min(28rem, 55dvh), centred in the panel. The text column is centred vertically, at most 28 rem wide. At 1920 px the split keeps its proportions and the board stops at its maximum, centred. On a phone the text block comes first and the panel follows with the board at full width.

  • States:

    • Shown: heading, reason, the id asked for, the actions, the board at the starting position.
    • Board in progress: as Local, without the move list or player rows.
    • Board ended: the result line under the board (checkmate, stalemate, or the kind of draw) and Play again. The line is a status region, so the ending is announced.

Player not found (/players/$username, a Username no Account uses)

  • Entry and exit: a profile link or a typed Username no Account uses. Home leads to /.
  • Template: DeadEndPage, as Game not found.
  • Wireframe: as Game not found, with "Player not found", its reason, "You asked for /players/" and the single Home button.
  • States: as Game not found.

Unknown address (any address no route matches)

  • Entry and exit: a typed or stale address. Home leads to /.
  • Template: DeadEndPage, without the address asked for, since the address bar shows it.
  • Wireframe: as Game not found, with "That page doesn't exist.", a reason inviting the Player to check the address, and the single Home button.
  • States: as Game not found.

Error screen (a failure no route handles)

  • Entry and exit: any failure the router is left with, such as an unreachable API. Try again reloads the page, and Home leads to /.
  • Template: DeadEndPage. The text block is an alert, as today.
  • Wireframe: as Game not found, with "Something went wrong!", a reason saying that trying again usually works, and Try again with Home beside it.
  • States: as Game not found. The board needs no network, so it plays here too.
  • Entry and exit: the forgot-password form, once the request succeeded. Back to sign in leads to /sign-in.
  • Template: AuthPage with the "recovering" pitch. The form column holds the notice in place of the form, and the elsewhere line is dropped because it would repeat the button.
  • Wireframe: AuthPage as on the form, with the column reading "Reset your password", the sent notice and [ Back to sign in ]. On a phone, as the form: the pitch's line under the heading, no board.
  • States: Sent: the heading takes focus, the notice is a status region, the button is primary.
  • Entry and exit: an emailed reset link that no longer works, either at once (no token) or after the server refuses it. Ask for a new link leads to /forgot-password.
  • Template: AuthPage with the "recovering" pitch, the notice in the form column, no elsewhere line.
  • Wireframe: as Reset link sent, with "This link no longer works", its notice and [ Ask for a new link ].
  • States: Invalid on arrival and Refused after submitting: the same notice. The heading takes focus when it replaces the form.

Seams

  • The pages on the app's router (the router harness, with each vertical's MSW handlers), view tests: stories 1–15. Extend the existing route tests for Game not found, Player not found, the unknown address and the error screen, including their French copy.
  • The auth pages on the app's router, view tests: stories 16–19. Extend the forgot-password and reset-password tests.
  • e2e, a new test in apps/e2e: a Player opens a link to a Game that does not exist, sees Game not found and the id asked for, plays a move on the board, then follows My games. It covers the main story, story 1, from the browser's side, as well as through the view tests.

The shared playable board gets no seam of its own. Morphy's finish keeps its existing tests on the sign-in page, which guard the extraction.

Implementation Decisions

  • DeadEndPage is a new template in the design system, next to PageFrame. It takes a heading, a reason, an optional address asked for, the actions (a primary one first), and the board panel as a slot. The design system imports no vertical, so a route or page fills the slot. Its heading is an h2, as the screens it replaces. Its root is the page's main, and the error screen wraps its text block in an alert.
  • A playable board is extracted into game/ from Morphy's finish: the board with click, drag and promotion resolution, and its legal-move, last-move and check marks, driven by a Game held in component state. Morphy's finish becomes a scripted use of it (its forced reply, its take-back of a move Morphy did not play). A free use plays both colours from the starting position, shows the ending's line and offers Play again. The ending's text reuses the Game-over wording game/ already has, so a draw reads as on Local.
  • Nothing is kept. The free board's Game lives in useState: no Query, no zustand store, no procedure. Local's store is not reused.
  • Game not found and Player not found stay exported beside their page files (rule 3) and take the id or Username the route parsed, to show it as the address asked for. The unknown address and the error screen stay in app/, built on DeadEndPage.
  • Ways onward: Game not found → My games (primary) and Home, for every Player without reading the Session, since a Guest has My games too (ADR 0034). Player not found → Home. Unknown address → Home. Error screen → Try again (a full reload) and Home.
  • AuthPage gains a notice state: the heading, the notice as a status region, and a primary action, in place of the form and the elsewhere line. The heading uses LandingHeading with focus asked. AuthNotice is removed.
  • Copy: new messages in English and French for the reasons of the unknown address and the error screen, "You asked for", Try again, Home, My games, Play again, Back to sign in, and the free board's ending lines where game/ has none.
  • Rule 8 of the front standards: propose adding DeadEndPage, "an address that leads nowhere, or a failure: a heading, why, the way onward, and a board to play on". The rule edit is the owner's to make in a dedicated MR (CLAUDE.md); the implementing MR proposes it in its description.
  • ADRs: 0043 (one page file per route, the not-found screens beside their page), 0034 and 0042 (Guests own Games; My games for everyone). None is needed.

Testing Decisions

  • Prior art: the route tests for Game not found and Player not found, the language-switch tests for the unknown address and the error screen in French, the router test for the error screen, the sign-in tests of Morphy's finish (playing a move on a page's board), and the forgot-password and reset-password tests. The e2e prior art is the profile test, which opens a page signed out, and the moves helpers for playing on a board.
  • Edge paths to cover:
    • Each screen's actions and where they lead.
    • The error screen's Try again reloads.
    • The address asked for, shown on Game not found and Player not found, absent on the unknown address.
    • A checkmate and a draw on the free board (reached from the starting position by a short forced line, such as Fool's mate), the result line, and Play again back to the starting position.
    • A promotion on the free board.
    • The French copy of every new line.
    • On the auth pages: the heading's focus, and the reset link refused after submitting showing the same notice as on arrival.
    • Morphy's finish keeps passing unchanged after the extraction.

Out of Scope

  • The 401 that turned /games/<malformed id> into the error screen for a stale Session: fixed separately in MR !558.
  • Saving or resuming the free board's game, playing it against the computer, a move list or player rows on it.
  • The layout of other pages: spec #450 covers the home, the Puzzles screens, PageFrame and GameScreen.
  • Changing rule 8 itself (proposed only).

Further Notes

  • Prototype: three variants of DeadEndPage (A Board split, B Doors, C Centred notice) on the throwaway branch prototype/dead-end-page, switched with ?variant= on Game not found, Player not found, the unknown address and the error screen. The owner picked A, with its still board of two bare kings replaced by a playable game from the starting position. The prototype's copy and its switcher are not to be folded in.
  • Settled in the grilling:
    • The four screens share one template rather than borrowing PageFrame or the home's doors.
    • The recovery notices move onto AuthPage with no prototype, since the template fits.
    • The board is the same on all four screens, the error screen included, since it needs no network.
    • On a phone the text comes before the board.
    • One playable board in game/ serves Morphy's finish and the free board.
  • Next step: this fits one MR, so run implement on this spec.
## Problem Statement A Player who follows a link to a Game or a profile the server does not hold, types an address no route matches, or hits a failure the router is left with, lands on a page that is almost empty. A short line sits in the middle of the window, or in its top-left corner for the last two cases, with no way onward except the navigation. At 1280 and 1920 px most of the screen is blank (spec #450, Further Notes > Layout audit). The two notices of the password recovery have the same problem. A Player who asked for a reset link, or who opened one that no longer works, sees the "recovering" pitch and Morphy's board vanish. A narrow column is left on an empty page, so the screen jumps the moment the request goes through, and the next step is a muted link. ## Solution - **`DeadEndPage`**, a fifth page template: an address that leads nowhere, or a failure. It shows a heading, why, the address the Player asked for when it helps, and the way onward. Beside it sits a board on which the Player can play a whole game of chess alone, from the starting position, kept nowhere. Game not found, Player not found, the page for an address no route matches, and the router's error screen all move onto it. - **Each screen leads onward.** Game not found leads to My games and the home. Player not found and the unknown address lead to the home. The error screen offers Try again and the home. - **The recovery notices become states of `AuthPage`.** The notice takes the form's place in the form column, under the same pitch and board. Its next step becomes a primary button, and its heading takes focus. The layout was settled with a three-variant prototype, and the owner picked **A (Board split)**, with its still board replaced by a playable one. The variants live on the throwaway branch `prototype/dead-end-page`; see Further Notes. ## User Stories DeadEndPage screens 1. As a Player who opens a link to a Game the server does not hold, I want a page that says the Game was not found and why, so that I know the link is at fault and not the site. 2. As that Player, I want the page to show the address I asked for, the Game id in monospace, so that I can spot a link that was cut short. 3. As that Player, signed in or a Guest, I want a My games button as the main way onward and a link home beside it, so that I can find the Game I meant. 4. As a Player who opens a profile whose Username no Account uses, I want a page that says the Player was not found, shows the Username I asked for, and leads home, so that I can check what I typed and move on. 5. As a Player who types an address no route matches, I want a page that says so and leads home, so that I am never left with a bare line. 6. As a Player whose page failed to load, I want a page that says something went wrong, with a Try again button that reloads it and a link home, so that I can recover in one click. 7. As a Player reading the site in French, I want every DeadEndPage screen, its actions and its board's result lines in French, so that nothing switches language on me. 8. As a Player on a 1280 or 1920 px screen, I want the page split between a board on a coloured panel and the text, so that the page uses the screen instead of leaving it blank. 9. As a Player on a phone, I want the heading, the reason and the actions first and the board below at full width, so that the way onward is in view without scrolling and the board is large enough to touch. The board on a DeadEndPage 10. As a Player on any DeadEndPage, I want a board set at the starting position on which I play White and then Black, so that I have something to do while I am here. 11. As that Player, I want the same legal-move, last-move and check marks as on every other board, by click and by drag, so that the board plays like the rest of the site. 12. As that Player, I want a line under the board that names the ending when the game ends (checkmate and who won, stalemate, or the kind of draw), so that I know the game is over and how. 13. As that Player, I want a Play again button once the game has ended, so that I can start over from the starting position. 14. As a Player, I want this game kept nowhere: not in My games, not on the server, and gone when I reload or leave, so that a pastime never clutters my Games. 15. As a Player on the error screen, I want the board to work even though the page failed, so that the screen stays usable when the network does not. AuthPage notice states 16. As a Player who asked for a password reset link, I want the page to keep the recovering pitch and Morphy's board and to show the sent notice in place of the form, so that the page does not jump when my request goes through. 17. As that Player, I want a Back to sign in button as the next step, so that the way onward is obvious. 18. As a Player who opens a reset link that expired, was already used or is unknown, I want the same page to say the link no longer works, with an Ask for a new link button, so that I can start over. 19. As a Player using a screen reader, I want the notice's heading to take focus when it replaces the form, and the sent notice to be announced as a status, so that I hear the change. ## Screens ### Game not found (`/games/$id`, a Game the server does not hold) - **Entry and exit**: any link to a Game the server does not hold, such as a copied Game link cut short, an old link or a typed id. **My games** leads to `/games`, **Home** leads to `/`. The site navigation stays as on every page. - **Template**: `DeadEndPage`. The board panel holds the playable board, and the text column holds the heading, the reason, the address asked for and the actions. - **Wireframe** (1280 px, beside the 16 rem sidebar): ``` ┌──────────┬──────────────────────────────┬─────────────────────────────┐ │ sidebar │▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓│ │ │ │▓▓ ┌──────────────────────┐ ▓▓│ Game not found │ │ │▓▓ │ │ ▓▓│ │ │ │▓▓ │ playable board │ ▓▓│ No game is stored at this │ │ │▓▓ │ starting position │ ▓▓│ link. Check that it was │ │ │▓▓ │ │ ▓▓│ copied whole. │ │ │▓▓ │ │ ▓▓│ │ │ │▓▓ └──────────────────────┘ ▓▓│ You asked for /games/abc1… │ │ │▓▓ result line, Play again ▓▓│ │ │ │▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓│ [ My games ] Home │ └──────────┴──────────────────────────────┴─────────────────────────────┘ ``` The panel (▓, the primary colour, as `AuthPage`'s pitch side) fills the full height. The board is as large as `AuthPage`'s, `min(28rem, 55dvh)`, centred in the panel. The text column is centred vertically, at most 28 rem wide. At 1920 px the split keeps its proportions and the board stops at its maximum, centred. On a phone the text block comes first and the panel follows with the board at full width. - **States**: - **Shown**: heading, reason, the id asked for, the actions, the board at the starting position. - **Board in progress**: as Local, without the move list or player rows. - **Board ended**: the result line under the board (checkmate, stalemate, or the kind of draw) and **Play again**. The line is a status region, so the ending is announced. ### Player not found (`/players/$username`, a Username no Account uses) - **Entry and exit**: a profile link or a typed Username no Account uses. **Home** leads to `/`. - **Template**: `DeadEndPage`, as Game not found. - **Wireframe**: as Game not found, with "Player not found", its reason, "You asked for /players/<username>" and the single **Home** button. - **States**: as Game not found. ### Unknown address (any address no route matches) - **Entry and exit**: a typed or stale address. **Home** leads to `/`. - **Template**: `DeadEndPage`, without the address asked for, since the address bar shows it. - **Wireframe**: as Game not found, with "That page doesn't exist.", a reason inviting the Player to check the address, and the single **Home** button. - **States**: as Game not found. ### Error screen (a failure no route handles) - **Entry and exit**: any failure the router is left with, such as an unreachable API. **Try again** reloads the page, and **Home** leads to `/`. - **Template**: `DeadEndPage`. The text block is an alert, as today. - **Wireframe**: as Game not found, with "Something went wrong!", a reason saying that trying again usually works, and **Try again** with **Home** beside it. - **States**: as Game not found. The board needs no network, so it plays here too. ### Reset link sent (`/forgot-password`, after the request went through) - **Entry and exit**: the forgot-password form, once the request succeeded. **Back to sign in** leads to `/sign-in`. - **Template**: `AuthPage` with the "recovering" pitch. The form column holds the notice in place of the form, and the `elsewhere` line is dropped because it would repeat the button. - **Wireframe**: `AuthPage` as on the form, with the column reading "Reset your password", the sent notice and **[ Back to sign in ]**. On a phone, as the form: the pitch's line under the heading, no board. - **States**: **Sent**: the heading takes focus, the notice is a status region, the button is primary. ### Reset link invalid (`/reset-password`, a link that expired, was used or is unknown) - **Entry and exit**: an emailed reset link that no longer works, either at once (no token) or after the server refuses it. **Ask for a new link** leads to `/forgot-password`. - **Template**: `AuthPage` with the "recovering" pitch, the notice in the form column, no `elsewhere` line. - **Wireframe**: as Reset link sent, with "This link no longer works", its notice and **[ Ask for a new link ]**. - **States**: **Invalid on arrival** and **Refused after submitting**: the same notice. The heading takes focus when it replaces the form. ## Seams - **The pages on the app's router** (the router harness, with each vertical's MSW handlers), view tests: stories 1–15. Extend the existing route tests for Game not found, Player not found, the unknown address and the error screen, including their French copy. - **The auth pages on the app's router**, view tests: stories 16–19. Extend the forgot-password and reset-password tests. - **e2e, a new test in `apps/e2e`**: a Player opens a link to a Game that does not exist, sees Game not found and the id asked for, plays a move on the board, then follows My games. It covers the main story, story 1, from the browser's side, as well as through the view tests. The shared playable board gets no seam of its own. Morphy's finish keeps its existing tests on the sign-in page, which guard the extraction. ## Implementation Decisions - **`DeadEndPage`** is a new template in the design system, next to `PageFrame`. It takes a heading, a reason, an optional address asked for, the actions (a primary one first), and the board panel as a slot. The design system imports no vertical, so a route or page fills the slot. Its heading is an `h2`, as the screens it replaces. Its root is the page's `main`, and the error screen wraps its text block in an alert. - **A playable board** is extracted into `game/` from Morphy's finish: the board with click, drag and promotion resolution, and its legal-move, last-move and check marks, driven by a Game held in component state. Morphy's finish becomes a scripted use of it (its forced reply, its take-back of a move Morphy did not play). A free use plays both colours from the starting position, shows the ending's line and offers Play again. The ending's text reuses the Game-over wording `game/` already has, so a draw reads as on Local. - **Nothing is kept.** The free board's Game lives in `useState`: no Query, no zustand store, no procedure. Local's store is not reused. - **Game not found** and **Player not found** stay exported beside their page files (rule 3) and take the id or Username the route parsed, to show it as the address asked for. **The unknown address** and **the error screen** stay in `app/`, built on `DeadEndPage`. - **Ways onward**: Game not found → My games (primary) and Home, for every Player without reading the Session, since a Guest has My games too (ADR 0034). Player not found → Home. Unknown address → Home. Error screen → Try again (a full reload) and Home. - **`AuthPage`** gains a notice state: the heading, the notice as a status region, and a primary action, in place of the form and the `elsewhere` line. The heading uses `LandingHeading` with focus asked. `AuthNotice` is removed. - **Copy**: new messages in English and French for the reasons of the unknown address and the error screen, "You asked for", Try again, Home, My games, Play again, Back to sign in, and the free board's ending lines where `game/` has none. - **Rule 8 of the front standards**: propose adding `DeadEndPage`, "an address that leads nowhere, or a failure: a heading, why, the way onward, and a board to play on". The rule edit is the owner's to make in a dedicated MR (CLAUDE.md); the implementing MR proposes it in its description. - ADRs: 0043 (one page file per route, the not-found screens beside their page), 0034 and 0042 (Guests own Games; My games for everyone). None is needed. ## Testing Decisions - Prior art: the route tests for Game not found and Player not found, the language-switch tests for the unknown address and the error screen in French, the router test for the error screen, the sign-in tests of Morphy's finish (playing a move on a page's board), and the forgot-password and reset-password tests. The e2e prior art is the profile test, which opens a page signed out, and the moves helpers for playing on a board. - Edge paths to cover: - Each screen's actions and where they lead. - The error screen's Try again reloads. - The address asked for, shown on Game not found and Player not found, absent on the unknown address. - A checkmate and a draw on the free board (reached from the starting position by a short forced line, such as Fool's mate), the result line, and Play again back to the starting position. - A promotion on the free board. - The French copy of every new line. - On the auth pages: the heading's focus, and the reset link refused after submitting showing the same notice as on arrival. - Morphy's finish keeps passing unchanged after the extraction. ## Out of Scope - The 401 that turned `/games/<malformed id>` into the error screen for a stale Session: fixed separately in MR !558. - Saving or resuming the free board's game, playing it against the computer, a move list or player rows on it. - The layout of other pages: spec #450 covers the home, the Puzzles screens, `PageFrame` and `GameScreen`. - Changing rule 8 itself (proposed only). ## Further Notes - **Prototype**: three variants of `DeadEndPage` (A Board split, B Doors, C Centred notice) on the throwaway branch `prototype/dead-end-page`, switched with `?variant=` on Game not found, Player not found, the unknown address and the error screen. The owner picked **A**, with its still board of two bare kings replaced by a playable game from the starting position. The prototype's copy and its switcher are not to be folded in. - **Settled in the grilling**: - The four screens share one template rather than borrowing `PageFrame` or the home's doors. - The recovery notices move onto `AuthPage` with no prototype, since the template fits. - The board is the same on all four screens, the error screen included, since it needs no network. - On a phone the text comes before the board. - One playable board in `game/` serves Morphy's finish and the free board. - Next step: this fits one MR, so run `implement` on this spec.
root commented 2026-10-19 15:38:25 +00:00 (Migrated from gitlab.core-project.space)

mentioned in commit 9e6fc7df2e

mentioned in commit 9e6fc7df2eff00e865f98dff578d3c8e672d01dc
root commented 2026-10-19 15:39:16 +00:00 (Migrated from gitlab.core-project.space)

mentioned in merge request !559

mentioned in merge request !559
root (Migrated from gitlab.core-project.space) closed this issue 2026-10-19 16:05:09 +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.

Dependencies

No dependencies set.

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