Review follow-ups R3: star-and-wish for every campaign, board placement, Test the bot padding (#980) #983

Merged
claude-bot merged 6 commits from fix/980-review-r3 into main 2026-09-30 21:01:08 +00:00
Collaborator

The owner's Redesign Review pass on 2026-09-30 (#980).

Fixed here

  • [rc-l1-wish] Two star-and-wish prompts. The owner's two on dev were The Tuesday Tide ("The Reading Room") and The Amberwake Accord ("The Tide-Gate"). Home asked about one, and the other appeared only after answering and reloading.
    • GET /api/me/star-wish now returns prompts, one per campaign (its newest askable session), newest first. prompt is kept as the first of them for older clients.
    • Home shows every card at once, each naming its campaign when there is more than one. Waving one away leaves the others.
    • A campaign the person GMs (the owner's "(GM copy)") is still never asked about.
  • [l5-addcard] Where a new card lands. Unplaced cards pack compactly, and a new one lands beside the last card in view without overlapping another.
  • [rc-l3-set-rec] "Test the bot" box. It now has inner padding.

Checked, no code change needed (fresh production build in the e2e stack):

  • /design: an admin reaches the design reference by URL; a player gets Not found.
  • /setup: once setup is finished, /setup goes to /admin.
  • Skip link: on a fresh load with nothing clicked, the first Tab lands on "Skip to the page" in both Chromium and Firefox, and Enter moves focus to <main>. After an in-app navigation, focus moves to the page's h1 by design (IS-296), so the next Tab goes to the first control after it.

The likely cause on dev is an older app still cached by the service worker in the owner's browser. Details are on #980.

Tests: test_session_feedback.py 30/30 and 218 in related modules; vitest for Home, table and settings 199/199; ruff 0.4.4 clean.

🤖 Generated with Claude Code

The owner's Redesign Review pass on 2026-09-30 (#980). **Fixed here** - **[rc-l1-wish] Two star-and-wish prompts.** The owner's two on dev were The Tuesday Tide ("The Reading Room") and The Amberwake Accord ("The Tide-Gate"). Home asked about one, and the other appeared only after answering and reloading. - `GET /api/me/star-wish` now returns `prompts`, one per campaign (its newest askable session), newest first. `prompt` is kept as the first of them for older clients. - Home shows every card at once, each naming its campaign when there is more than one. Waving one away leaves the others. - A campaign the person GMs (the owner's "(GM copy)") is still never asked about. - **[l5-addcard] Where a new card lands.** Unplaced cards pack compactly, and a new one lands beside the last card in view without overlapping another. - **[rc-l3-set-rec] "Test the bot" box.** It now has inner padding. **Checked, no code change needed** (fresh production build in the e2e stack): - **/design:** an admin reaches the design reference by URL; a player gets Not found. - **/setup:** once setup is finished, `/setup` goes to `/admin`. - **Skip link:** on a fresh load with nothing clicked, the first Tab lands on "Skip to the page" in both Chromium and Firefox, and Enter moves focus to `<main>`. After an in-app navigation, focus moves to the page's h1 by design (IS-296), so the next Tab goes to the first control after it. The likely cause on dev is an older app still cached by the service worker in the owner's browser. Details are on #980. **Tests:** `test_session_feedback.py` 30/30 and 218 in related modules; vitest for Home, table and settings 199/199; ruff 0.4.4 clean. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
The owner, on dev: "the text is right up against the edge." The box is a
`Panel`, which is the kit's frame with no padding of its own, and `.tbx`
added margin but never padding. It now has `--sp-4` inside the border, as
the lane 8 drawing's `.tbx` and the `.aipanel` above it on the same page do.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The owner, on dev: "The test note landed way down in the bottom-left ... It
should land next to the last card in the view, as long as it doesn't overlap
another card. By default the layout of cards should be compact."

Cause: `positionFor` cascaded a never-placed card by its index in the whole
shelf, four to a row, a slot per card whether or not that card had been
placed by hand. On a shelf of placed cards a new note (index N) went to slot
N, rows down the board, with every earlier slot empty -- and the cascade
ignored the placed cards, so it could land on one.

`placement.js` answers both questions, pure and tested:

- `layoutBoard`: placed cards stay where they were put (#235); the rest are
  packed into four columns, each into the lowest free spot around what is
  already there. Stable by construction -- a card added somewhere free does
  not shuffle the packed ones -- and laid out over the whole shelf, so a
  scene filter still never moves a card (IS-320). While a card is in hand
  (drag or keyboard Move/Resize) the others pack around where it was picked
  up, so they do not jump about under the pointer.
- `placeNew`: to the right of the last card on screen (of the scene on show),
  else under it, else the first free spot on screen, else the first below it
  in the same stretch; never colliding. The Board exposes it as
  `spotForNew`; a note and a Find/preview add send it as the new card's
  `position` (the create endpoint already accepted one). No board (the
  phone) sends none, and the card is packed.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Merge remote-tracking branch 'origin/main' into fix/980-review-r3
All checks were successful
CI / Summarisation accuracy eval harness (stub provider) (pull_request) Successful in 1m9s
CI / Backend lint (ruff) (pull_request) Successful in 34s
CI / Bot/backend version sync (pull_request) Successful in 39s
CI / Bot tests and audit (pull_request) Successful in 2m1s
CI / Feedback site tests (pull_request) Successful in 53s
CI / Does this change touch the recording path? (pull_request) Successful in 34s
CI / Synthetic session harness (no GPU, no LLM) (pull_request) Has been skipped
CI / Docker image build (pull_request) Successful in 1m17s
CI / Frontend (shard 2/2) (pull_request) Successful in 6m26s
CI / Frontend (shard 1/2) (pull_request) Successful in 8m18s
CI / End-to-end journeys (phone) (pull_request) Successful in 7m15s
CI / End-to-end journeys (desktop) (pull_request) Successful in 7m50s
CI / Backend migration, tests, and audit (pull_request) Successful in 17m48s
CI / End-to-end journeys (keyboard) (pull_request) Successful in 17m17s
8270cf5e50
Sign in to join this conversation.
No description provided.