Campaign search has no results page: a kind stops at ten with no way to the rest, and a rules hit opens nothing #1033

Closed
opened 2026-10-02 04:27:22 +00:00 by claude-bot · 3 comments
Collaborator

Found while checking #667 against main (2b077778), 2 October. The app bar search is built and #667 is closed; these two pieces of it are not.

1. No results page (catalogue surface SH-9, "Search results")

webapp/frontend/src/shell/AppFrame.jsx mounts <Search> with this comment:

No results page yet, so neither "All N in Sessions" nor "See all" is offered: lane 3 builds the one they would lead to.

Lane 3 did not build it, and App.jsx has no search route. The panel shows at most PER_KIND_CAP (10) per kind. The server already returns the true counts in by_kind, and Search already takes seeAllHref and groupHref and draws "All N in …" and "See all" when given them. So today a search with more than ten matches of a kind silently stops at ten.

Smallest build: a /campaigns/:id/search?q=…&kind=… page that reuses searchCampaign (same ranking, same audience filtering, same transcript opt-in for a GM), grouped by kind with every match, and pass seeAllHref / groupHref from AppFrame.jsx. The wiki front page's search (useWikiSearch, kinds wiki + rule) wants the same link.

Needs a ledger row and a drawing check: every UI feature needs a surface in docs/design/redesign-surfaces/CATALOGUE.md.

2. A rules hit has nowhere to go

SearchItem.href is null for a rule (the app has no page for a rule entry), and onOpen={(r) => r.href && navigate(r.href)} makes choosing one do nothing. To check in a browser: whether the row looks and behaves as something you can choose. Options: open the rule in the same preview the prep drawers use (Peek, #1026), or draw the row as not choosable.

Refs #667.

Found while checking #667 against main (2b077778), 2 October. The app bar search is built and #667 is closed; these two pieces of it are not. ## 1. No results page (catalogue surface SH-9, "Search results") `webapp/frontend/src/shell/AppFrame.jsx` mounts `<Search>` with this comment: > No results page yet, so neither "All N in Sessions" nor "See all" is offered: lane 3 builds the one they would lead to. Lane 3 did not build it, and `App.jsx` has no search route. The panel shows at most `PER_KIND_CAP` (10) per kind. The server already returns the true counts in `by_kind`, and `Search` already takes `seeAllHref` and `groupHref` and draws "All N in …" and "See all" when given them. So today a search with more than ten matches of a kind silently stops at ten. Smallest build: a `/campaigns/:id/search?q=…&kind=…` page that reuses `searchCampaign` (same ranking, same audience filtering, same transcript opt-in for a GM), grouped by kind with every match, and pass `seeAllHref` / `groupHref` from `AppFrame.jsx`. The wiki front page's search (`useWikiSearch`, kinds wiki + rule) wants the same link. Needs a ledger row and a drawing check: every UI feature needs a surface in `docs/design/redesign-surfaces/CATALOGUE.md`. ## 2. A rules hit has nowhere to go `SearchItem.href` is `null` for a rule (the app has no page for a rule entry), and `onOpen={(r) => r.href && navigate(r.href)}` makes choosing one do nothing. To check in a browser: whether the row looks and behaves as something you can choose. Options: open the rule in the same preview the prep drawers use (`Peek`, #1026), or draw the row as not choosable. Refs #667.
Author
Collaborator

Picking this up (2 October), branch feat/1033-search-results-page.

Approach: the page asks the same route for every match of the kinds it names (an optional parameter lifts the per-kind cap to a bound; same ranking, audience filtering and transcript rule), at /campaigns/:id/search?q=…&kind=…. No second search box (#593): the app bar's box stays the only one, and its panel gets the drawn "three per kind, then a way into the rest". A rules hit opens the preview the prep drawers already use. The page behind "All N" is added to lane 1's SH-9 drawing, with a ledger row.

Picking this up (2 October), branch `feat/1033-search-results-page`. Approach: the page asks the same route for every match of the kinds it names (an optional parameter lifts the per-kind cap to a bound; same ranking, audience filtering and transcript rule), at `/campaigns/:id/search?q=…&kind=…`. No second search box (#593): the app bar's box stays the only one, and its panel gets the drawn "three per kind, then a way into the rest". A rules hit opens the preview the prep drawers already use. The page behind "All N" is added to lane 1's SH-9 drawing, with a ledger row.
Author
Collaborator

Built on feat/1033-search-results-page (head 17b70c79), reviewed, and checked in a browser. Its PR is held until the CI runner is healthy (it ran out of disk on 2 October, 04:53–04:59 UTC).

What it does

  • The search route takes full=1: every match of each kind up to 200, same sources, permissions, ranking and transcript rule; by_kind stays the true count. The Rules count is now the true one for every caller (it was the length of a list already cut at ten).
  • A page at /campaigns/:id/search?q=…[&kind=…][&transcripts=1]: every match grouped by kind, a row of links to narrow it, no search box of its own. The GM's transcript switch is kept in the address; it is never sent for a player.
  • The panel under the box shows three per kind, then "All N in …" and "See all N results", as lane 1 drew it. Enter in the box goes to the page.
  • A rules hit opens in a dialog (the preview the table and prep already use); closing it returns focus to the row.
  • The wiki front page's own box gets the same links and the same rule dialog.
  • Lane 1's SH-9 drawing gains "The page behind 'All N'" (desktop and phone). Ledger IS-482, IS-483.

Checks

  • Full backend suite 6824 passed, ruff clean. Full vitest 3767 passed before the last small commit; re-running on the head.
  • Browser, 390×844 and 1440×900, light and dark: panel, page, kind filter (no extra requests, Back steps through each), Enter, deep link, every state (empty, one letter, nothing found, error and retry), rule dialog from all three places with focus return, keyboard-only run. axe: 0 violations on the page and with the dialog open. As a player: no transcript switch, no "GM only" rows, 21 results to the GM's 22, and a hand-typed transcripts=1 is not sent.
  • From that check, two fixes added: the results panel comes into view when it opens (the wiki front page's box sits at the foot of its page and its results opened below the window), and "All N in …" and "See all" start on the same left edge as the labels.

Not seen

  • A creature's stat block in the rule dialog: the journey seed's two rules are plain text.
  • A People group: no person matched in the seed.
  • The dev demo seed's tide matches (the builder counted 78 wiki pages from the seed file; not run).
Built on `feat/1033-search-results-page` (head 17b70c79), reviewed, and checked in a browser. Its PR is held until the CI runner is healthy (it ran out of disk on 2 October, 04:53–04:59 UTC). **What it does** - The search route takes `full=1`: every match of each kind up to 200, same sources, permissions, ranking and transcript rule; `by_kind` stays the true count. The Rules count is now the true one for every caller (it was the length of a list already cut at ten). - A page at `/campaigns/:id/search?q=…[&kind=…][&transcripts=1]`: every match grouped by kind, a row of links to narrow it, no search box of its own. The GM's transcript switch is kept in the address; it is never sent for a player. - The panel under the box shows three per kind, then "All N in …" and "See all N results", as lane 1 drew it. Enter in the box goes to the page. - A rules hit opens in a dialog (the preview the table and prep already use); closing it returns focus to the row. - The wiki front page's own box gets the same links and the same rule dialog. - Lane 1's SH-9 drawing gains "The page behind 'All N'" (desktop and phone). Ledger IS-482, IS-483. **Checks** - Full backend suite 6824 passed, ruff clean. Full vitest 3767 passed before the last small commit; re-running on the head. - Browser, 390×844 and 1440×900, light and dark: panel, page, kind filter (no extra requests, Back steps through each), Enter, deep link, every state (empty, one letter, nothing found, error and retry), rule dialog from all three places with focus return, keyboard-only run. axe: 0 violations on the page and with the dialog open. As a player: no transcript switch, no "GM only" rows, 21 results to the GM's 22, and a hand-typed `transcripts=1` is not sent. - From that check, two fixes added: the results panel comes into view when it opens (the wiki front page's box sits at the foot of its page and its results opened below the window), and "All N in …" and "See all" start on the same left edge as the labels. **Not seen** - A creature's stat block in the rule dialog: the journey seed's two rules are plain text. - A People group: no person matched in the seed. - The dev demo seed's `tide` matches (the builder counted 78 wiki pages from the seed file; not run).
Author
Collaborator

Done in PR #1046, merged to main on 2026-10-03 with CI green on a head carrying current main. What was built and checked is in comment 51082 above.

It reaches dev with the first prerelease (v4.5.0-rc1, #1043). Three things were not seen in a browser and are worth a look in the owner's review there: a creature's stat block in the rule dialog, a People group, and the demo seed's tide matches.

Done in PR #1046, merged to main on 2026-10-03 with CI green on a head carrying current main. What was built and checked is in comment 51082 above. It reaches dev with the first prerelease (`v4.5.0-rc1`, #1043). Three things were not seen in a browser and are worth a look in the owner's review there: a creature's stat block in the rule dialog, a People group, and the demo seed's `tide` matches.
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
rbrooks/Quest-Board#1033
No description provided.