feat(webapp): browse in place, slice 3 — Find at the table browses the rules (#1243) #1320

Merged
claude-bot merged 7 commits from feat/1243-table-find into main 2026-11-03 00:46:53 +00:00
Collaborator

Part of #1243, slice 3 of 3 (D316, D317). It's built on slice 2 (#1319) and should merge after it; the diff here shrinks to this slice once #1319 is in.

What it adds

  • "Browse the rules ›" on Find's "In the rules" group, or on a line under the box when the box is empty. It switches the same dialog into browse: the campaign's kinds, then a kind as stage 3's list, with the system filters folded and numbered pages. The state is in memory, never the table's URL.
  • Choosing a row does exactly what choosing a rules hit does: onOpenEntry, the dialog closes, and the table's aside preview shows it with "Add to the shelf" (D53's single preview).
  • "‹ Back to the search" restores the query. Escape goes back to the search first, then closes.
  • GmTable passes the campaign's system key.

Not in this PR: D207's two cards for one creature. Each card already keeps its own HP, but uq_shelf_cards_session_reference allows one card per rules entry per session. The preview then says "On the shelf", and carry-forward relies on that. A second card needs a schema change. The owner is asked on the Questions page (Q209, SB5).

Checked

  • lint has 0 errors;
  • Find.test.jsx: 18 passed (6 new); GmTable and TableMode: 118 passed;
  • the whole frontend suite: 5651 passed and 1 failed, a load timeout in CampaignSettingsWiki that passed alone.
  • Not yet: the render check (the dialog on the table palette) and CI.

New wording: "Browse the rules ›" and "‹ Back to the search", from the drawing, plus "Esc to go back to the search". It goes on the Wording Review page.

🤖 Generated with Claude Code

Part of #1243, slice 3 of 3 (D316, D317). It's built on slice 2 (#1319) and should merge after it; the diff here shrinks to this slice once #1319 is in. **What it adds** - **"Browse the rules ›"** on Find's "In the rules" group, or on a line under the box when the box is empty. It switches the same dialog into browse: the campaign's kinds, then a kind as stage 3's list, with the system filters folded and numbered pages. The state is in memory, never the table's URL. - **Choosing a row** does exactly what choosing a rules hit does: `onOpenEntry`, the dialog closes, and the table's aside preview shows it with "Add to the shelf" (D53's single preview). - **"‹ Back to the search"** restores the query. Escape goes back to the search first, then closes. - `GmTable` passes the campaign's system key. **Not in this PR: D207's two cards for one creature.** Each card already keeps its own HP, but `uq_shelf_cards_session_reference` allows one card per rules entry per session. The preview then says "On the shelf", and carry-forward relies on that. A second card needs a schema change. The owner is asked on the Questions page (Q209, SB5). **Checked** - lint has 0 errors; - `Find.test.jsx`: 18 passed (6 new); GmTable and TableMode: 118 passed; - the whole frontend suite: 5651 passed and 1 failed, a load timeout in `CampaignSettingsWiki` that passed alone. - **Not yet:** the render check (the dialog on the table palette) and CI. New wording: "Browse the rules ›" and "‹ Back to the search", from the drawing, plus "Esc to go back to the search". It goes on the Wording Review page. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
test: Browse drawer tests pass lint and the filter row (#1243)
Some checks failed
CI / Which journeys does this change need? (pull_request) Successful in 17s
CI / Does this change touch the recording path? (pull_request) Successful in 17s
CI / Synthetic session harness (no GPU, no LLM) (pull_request) Has been skipped
CI / Bot/backend version sync (pull_request) Successful in 1m15s
CI / Backend lint (ruff) (pull_request) Successful in 1m25s
CI / Feedback site tests (pull_request) Successful in 2m0s
CI / Summarisation accuracy eval harness (stub provider) (pull_request) Successful in 2m18s
CI / Docker image build (pull_request) Successful in 2m27s
CI / Bot tests and audit (pull_request) Successful in 4m49s
CI / Frontend (shard 2/2) (pull_request) Successful in 8m2s
CI / Frontend (shard 1/2) (pull_request) Successful in 9m22s
CI / Backend migration, tests, and audit (pull_request) Has been cancelled
CI / End-to-end journeys (desktop) (pull_request) Has been cancelled
c47a1b6d62
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
fix(webapp): Search and Browse show which one is open (#1243)
All checks were successful
CI / Backend lint (ruff) (pull_request) Successful in 33s
CI / Bot/backend version sync (pull_request) Successful in 23s
CI / Summarisation accuracy eval harness (stub provider) (pull_request) Successful in 1m0s
CI / Does this change touch the recording path? (pull_request) Successful in 17s
CI / Feedback site tests (pull_request) Successful in 44s
CI / Which journeys does this change need? (pull_request) Successful in 16s
CI / Synthetic session harness (no GPU, no LLM) (pull_request) Has been skipped
CI / Bot tests and audit (pull_request) Successful in 2m7s
CI / Docker image build (pull_request) Successful in 10m14s
CI / Frontend (shard 2/2) (pull_request) Successful in 18m40s
CI / End-to-end journeys (desktop) (pull_request) Successful in 12m2s
CI / Frontend (shard 1/2) (pull_request) Successful in 24m40s
CI / Backend migration, tests, and audit (pull_request) Successful in 1h9m24s
caef8ffe53
The render check found the pressed state invisible in Prep's drawer.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
test: Find browse button test (#1243)
Some checks failed
CI / Docker image build (pull_request) Successful in 26s
CI / Which journeys does this change need? (pull_request) Successful in 27s
CI / Bot/backend version sync (pull_request) Successful in 28s
CI / Synthetic session harness (no GPU, no LLM) (pull_request) Has been skipped
CI / Does this change touch the recording path? (pull_request) Successful in 28s
CI / Backend lint (ruff) (pull_request) Successful in 36s
CI / Feedback site tests (pull_request) Successful in 50s
CI / Summarisation accuracy eval harness (stub provider) (pull_request) Successful in 54s
CI / Bot tests and audit (pull_request) Successful in 1m59s
CI / Backend migration, tests, and audit (pull_request) Has been cancelled
CI / Frontend (shard 2/2) (pull_request) Has been cancelled
CI / Frontend (shard 1/2) (pull_request) Has been cancelled
CI / End-to-end journeys (desktop) (pull_request) Has been cancelled
029867025d
fix(webapp): Find's browse shows a kind's rows under its filters (#1243)
Some checks failed
CI / Backend lint (ruff) (pull_request) Successful in 35s
CI / Feedback site tests (pull_request) Successful in 55s
CI / Bot/backend version sync (pull_request) Successful in 27s
CI / Does this change touch the recording path? (pull_request) Successful in 20s
CI / Synthetic session harness (no GPU, no LLM) (pull_request) Has been skipped
CI / Which journeys does this change need? (pull_request) Successful in 21s
CI / Summarisation accuracy eval harness (stub provider) (pull_request) Successful in 1m53s
CI / Bot tests and audit (pull_request) Successful in 3m46s
CI / Frontend (shard 2/2) (pull_request) Successful in 8m4s
CI / Docker image build (pull_request) Successful in 7m0s
CI / Frontend (shard 1/2) (pull_request) Successful in 17m33s
CI / End-to-end journeys (desktop) (pull_request) Failing after 25m14s
CI / Backend migration, tests, and audit (pull_request) Has been cancelled
09ba70db9e
The render check found the filter box filling the 26rem browse area, the
rows below the fold. Taller (min(72vh, 46rem)) and a compact filter row.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Author
Collaborator

Render check (journeys stack, desktop, light and dark)

0 console errors, axe clean on browse and on a kind, and the table's URL never changed.

  • Box empty: an underlined "Browse the rules ›" link. "ghoul": the button beside "In the rules".
  • Browse: "‹ Back to the search" over the kinds grid, readable on the table palette (light text, light border, navy dialog), with the footer "Esc to go back to the search".
  • Choosing a row closes the dialog, and the aside shows "From the rules", the stats, and "Add to the shelf".
  • Real-browser Escape from inside a kind goes back to the search with focus on "Browse the rules ›"; a second Escape closes.
  • Phone: not applicable. The phone table has no Find by design (D34).

Found and fixed (09ba70db): with a kind open, the filter box filled the 26rem browse area and the rows began below the fold. The area is now min(72vh, 46rem) tall and the filter row is compact. A quick re-shoot is confirming the rows are visible.

Merges after #1319, on green. The owner approved the wording (part p).

## Render check (journeys stack, desktop, light and dark) 0 console errors, axe clean on browse and on a kind, and the table's URL never changed. - **Box empty:** an underlined "Browse the rules ›" link. **"ghoul":** the button beside "In the rules". - **Browse:** "‹ Back to the search" over the kinds grid, readable on the table palette (light text, light border, navy dialog), with the footer "Esc to go back to the search". - **Choosing a row** closes the dialog, and the aside shows "From the rules", the stats, and "Add to the shelf". - **Real-browser Escape** from inside a kind goes back to the search with focus on "Browse the rules ›"; a second Escape closes. - **Phone:** not applicable. The phone table has no Find by design (D34). **Found and fixed (09ba70db):** with a kind open, the filter box filled the 26rem browse area and the rows began below the fold. The area is now `min(72vh, 46rem)` tall and the filter row is compact. A quick re-shoot is confirming the rows are visible. Merges after #1319, on green. The owner approved the wording (part p).
Author
Collaborator

The re-shoot after 09ba70db: the browse area now scrolls and shows 3 rows at 800px tall, but the filter box was still about 8 lines. Most of that was two long pack names wrapping onto two lines.

Next fix (pushed): with alwaysFold (Find, and Prep's drawer), the pack choice moves into the Filters panel and counts in "Filters (N)". The Rules page's layout is unchanged.

Tests for the files it touches (Rules, RuleText, library, prep tools, Find): 159 passed, 2 failed, at a load average of 33–45. Both failures are load:

  • a Margin timeout;
  • RulesBrowse giving up while the page still read "Loading the kinds…". That's the Rules page, which doesn't take the folded path.

CI decides.

**The re-shoot after 09ba70db:** the browse area now scrolls and shows 3 rows at 800px tall, but the filter box was still about 8 lines. Most of that was two long pack names wrapping onto two lines. **Next fix (pushed):** with `alwaysFold` (Find, and Prep's drawer), the pack choice moves into the Filters panel and counts in "Filters (N)". The Rules page's layout is unchanged. **Tests** for the files it touches (Rules, RuleText, library, prep tools, Find): 159 passed, 2 failed, at a load average of 33–45. Both failures are load: - a Margin timeout; - RulesBrowse giving up while the page still read "Loading the kinds…". That's the Rules page, which doesn't take the folded path. CI decides.
fix(webapp): the pack choice folds with the filters where the list is narrow (#1243)
Some checks failed
CI / Backend lint (ruff) (pull_request) Successful in 36s
CI / Bot/backend version sync (pull_request) Successful in 33s
CI / Summarisation accuracy eval harness (stub provider) (pull_request) Successful in 1m4s
CI / Does this change touch the recording path? (pull_request) Successful in 22s
CI / Synthetic session harness (no GPU, no LLM) (pull_request) Has been skipped
CI / Which journeys does this change need? (pull_request) Successful in 19s
CI / Feedback site tests (pull_request) Successful in 1m46s
CI / Docker image build (pull_request) Successful in 2m28s
CI / Bot tests and audit (pull_request) Successful in 3m55s
CI / Frontend (shard 1/2) (pull_request) Successful in 9m35s
CI / End-to-end journeys (desktop) (pull_request) Failing after 12m24s
CI / Frontend (shard 2/2) (pull_request) Successful in 16m49s
CI / Backend migration, tests, and audit (pull_request) Has been cancelled
39b7724c30
In Find and Prep's drawer two long pack names took two whole lines above
the list (the re-shoot: about 8 lines of filters, 3 rows of results at
800px). With alwaysFold the packs go into the Filters panel and count in
Filters (N); the Rules page is unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
claude-bot scheduled this pull request to auto merge when all checks succeed 2026-11-02 23:35:46 +00:00
fix(webapp): Find's Browse the rules sits under the results, not in the listbox (#1243)
All checks were successful
CI / Backend lint (ruff) (pull_request) Successful in 32s
CI / Summarisation accuracy eval harness (stub provider) (pull_request) Successful in 1m2s
CI / Bot/backend version sync (pull_request) Successful in 29s
CI / Does this change touch the recording path? (pull_request) Successful in 17s
CI / Which journeys does this change need? (pull_request) Successful in 18s
CI / Synthetic session harness (no GPU, no LLM) (pull_request) Has been skipped
CI / Feedback site tests (pull_request) Successful in 55s
CI / Docker image build (pull_request) Successful in 2m50s
CI / Bot tests and audit (pull_request) Successful in 3m44s
CI / Frontend (shard 1/2) (pull_request) Successful in 9m56s
CI / Frontend (shard 2/2) (pull_request) Successful in 16m30s
CI / End-to-end journeys (desktop) (pull_request) Successful in 15m12s
CI / Backend migration, tests, and audit (pull_request) Successful in 34m55s
4208479dab
The button was inside the In the rules heading, which is inside
role=listbox. A listbox may hold only options, and the heading no
longer read as just its name, so the J4 journey's exact-text check
failed. It now always sits on the line under the results.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Author
Collaborator

CI's desktop journeys job failed on J4 (j4-run-the-table.spec.js:300): getByText("In the rules", { exact: true }) found nothing. It failed on the first attempt and on the retry.

Cause: "Browse the rules ›" was inside the "In the rules" group heading, so the heading's text was no longer just its name. The heading is also inside role="listbox", where only options are allowed, so the journey's axe scan would have flagged it next.

Fix, in 4208479d: the button now always sits on the line under the results, outside the listbox. The group heading is plain text again. The wording is unchanged. The unit test now checks that the button is outside the listbox.

Checked: Find.test.jsx 18 passed, and eslint has 0 errors. CI is re-running.

CI's desktop journeys job failed on J4 (`j4-run-the-table.spec.js:300`): `getByText("In the rules", { exact: true })` found nothing. It failed on the first attempt and on the retry. Cause: "Browse the rules ›" was inside the "In the rules" group heading, so the heading's text was no longer just its name. The heading is also inside `role="listbox"`, where only options are allowed, so the journey's axe scan would have flagged it next. Fix, in 4208479d: the button now always sits on the line under the results, outside the listbox. The group heading is plain text again. The wording is unchanged. The unit test now checks that the button is outside the listbox. Checked: `Find.test.jsx` 18 passed, and eslint has 0 errors. CI is re-running.
Sign in to join this conversation.
No description provided.