feat(feedback-site): the wiki in both round-two mockups (#593, #363) #594

Merged
claude-bot merged 5 commits from feat/363-wiki-mockups into main 2026-09-11 02:40:03 +00:00
Contributor

This adds the wiki design agreed in #593 to both round-two mockups, so players and outside reviewers judge it alongside the rest before the final design (#364) is settled. All the data is invented; nothing comes from a real campaign.

What's in it

Shared components (static/mockups/shared/), built once so the two designs differ only in how the wiki fits in, never in polish:

  • data.js extends the invented Amberwake campaign with:
    • articles containing GM blocks
    • a PF2e stat block shaped like a Foundry actor export
    • an organization with reputation over time
    • four maps in two atlases, joined by zoom and travel links. The portal explains the recap's "ninety miles in one night".
    • parties whose membership changes over time
    • quests as articles, handouts revealed to one player, and an unidentified item
  • wiki.js (window.QBW) renders every part. Every renderer defaults to the player view, so a forgotten option hides secrets rather than showing them.
  • kit.css styles GM-only material as hatched and labelled wherever it appears.

Six screens in each design (screens 6–11): the front page and search, an NPC article with its stat block, editing, the map, the party, and a quest. Desktop frames show the GM, with a view-as-player switch; phone frames show a player.

  • A · Book & Table: the wiki is a group of chapters in the book's Contents. Articles read as pages, with the facts and stat block in the margin. Table mode's search reaches wiki pages.
  • B · Session First: a World destination sits beside the session strip, with Wiki, Map, Party and Quests tabs. The strip marks the sessions an article appeared in, and wiki pages opened from a session open beside it.
  • Each design's old wiki and suggestion surfaces are replaced, so each has one wiki.

Form: each design gets a wiki rating, plus one free-text question ("What would you want from the wiki that isn't there?"). Both reach the CSV export. Nobody had answered round two yet, so changing the form loses nothing.

How it was checked

  • Leak crawls, the check that matters most. GM secrets must never reach a player frame. 89 GM-only strings were collected from the data: GM blocks, hidden objectives, GM-only markers and pages, the unidentified ring's true name, unrevealed handouts, and another player's private marker. They were then checked for in every player frame after every click.
    • Design A: about 10,000 checks, 0 leaks.
    • Design B: a 447-click crawl, 0 leaks.
    • Shared components: 3,204 renders, 0 leaks.
    • The crawls found two real gaps in the shared helpers, both fixed in ee7e631: title/get/link returned a GM-only page to a player, and a preview card survived a switch to player view.
  • Frame isolation: a click moves only the frame it happened in.
  • Screens 1–5 still work in both designs.
  • Screenshots in light and dark, desktop and 390px phone: no page errors, no overflow.
  • Site tests: 38 pass. New tests cover the wiki ratings reaching the export, and a guard: every shared/ file a mockup loads must have a route, since a file without one works from disk and returns 404 on the site.

🤖 Generated with Claude Code

This adds the wiki design agreed in #593 to both round-two mockups, so players and outside reviewers judge it alongside the rest before the final design (#364) is settled. All the data is invented; nothing comes from a real campaign. ## What's in it **Shared components** (`static/mockups/shared/`), built once so the two designs differ only in how the wiki fits in, never in polish: - `data.js` extends the invented Amberwake campaign with: - articles containing GM blocks - a PF2e stat block shaped like a Foundry actor export - an organization with reputation over time - four maps in two atlases, joined by zoom and travel links. The portal explains the recap's "ninety miles in one night". - parties whose membership changes over time - quests as articles, handouts revealed to one player, and an unidentified item - `wiki.js` (`window.QBW`) renders every part. Every renderer **defaults to the player view**, so a forgotten option hides secrets rather than showing them. - `kit.css` styles GM-only material as hatched and labelled wherever it appears. **Six screens in each design** (screens 6–11): the front page and search, an NPC article with its stat block, editing, the map, the party, and a quest. Desktop frames show the GM, with a view-as-player switch; phone frames show a player. - **A · Book & Table:** the wiki is a group of chapters in the book's Contents. Articles read as pages, with the facts and stat block in the margin. Table mode's search reaches wiki pages. - **B · Session First:** a World destination sits beside the session strip, with Wiki, Map, Party and Quests tabs. The strip marks the sessions an article appeared in, and wiki pages opened from a session open beside it. - Each design's old wiki and suggestion surfaces are replaced, so each has one wiki. **Form:** each design gets a wiki rating, plus one free-text question ("What would you want from the wiki that isn't there?"). Both reach the CSV export. Nobody had answered round two yet, so changing the form loses nothing. ## How it was checked - **Leak crawls, the check that matters most.** GM secrets must never reach a player frame. 89 GM-only strings were collected from the data: GM blocks, hidden objectives, GM-only markers and pages, the unidentified ring's true name, unrevealed handouts, and another player's private marker. They were then checked for in every player frame after every click. - Design A: about 10,000 checks, 0 leaks. - Design B: a 447-click crawl, 0 leaks. - Shared components: 3,204 renders, 0 leaks. - The crawls found two real gaps in the shared helpers, both fixed in ee7e631: `title`/`get`/`link` returned a GM-only page to a player, and a preview card survived a switch to player view. - **Frame isolation:** a click moves only the frame it happened in. - **Screens 1–5** still work in both designs. - **Screenshots** in light and dark, desktop and 390px phone: no page errors, no overflow. - **Site tests:** 38 pass. New tests cover the wiki ratings reaching the export, and a guard: **every `shared/` file a mockup loads must have a route**, since a file without one works from disk and returns 404 on the site. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
The wiki design agreed in #593 is being added to both round-two mockups.
This commit is everything the two designs share, so the wiki reads
identically in each and they differ only in how you reach it:

- shared/data.js: the invented Amberwake campaign's wiki — articles with
  GM blocks, a PF2e stat block shaped like a Foundry actor export, an
  organization with reputation over time, four maps in two atlases joined
  by zoom and travel links, parties with membership over time, quests as
  articles, handouts with per-player reveals, unidentified items.
- shared/wiki.js: window.QBW, the components both designs render from.
  Every renderer defaults to the player view, so a forgotten option hides
  secrets rather than showing them.
- shared/kit.css: wiki styles; GM-only material is hatched and labelled
  wherever it appears.
- The form asks one wiki rating per design and what people would want
  from the wiki; both reach the CSV export. A new route serves wiki.js,
  and a test fails if a mockup loads a shared file the site cannot serve.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Six wiki screens (6-11) in each design, built from the shared wiki
components so the two differ only in how the wiki sits in the app:
front page and search, an NPC article with its stat block, editing,
the map, the party, and a quest.

- Design A (Book & Table): the wiki is a group of chapters in the book's
  Contents; articles read as pages at reading width with the facts and
  stat block in the margin; Table mode's search reaches wiki pages.
- Design B (Session First): a World destination beside the session
  strip (Wiki, Map, Party, Quests); the strip marks the sessions an
  article appeared in; wiki pages opened from a session open beside it.

Both replace their old wiki and suggestion surfaces so each design has
one wiki. Desktop frames are the GM and carry a view-as-player switch;
phone frames are a player. Crawls of every phone frame and every
desktop frame in player view found none of the 89 GM-only strings.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Found by the two design builders while composing the wiki screens:

- QBW.title / link / get returned a GM-only page's real title and record
  in player view. They now apply the same visibility rules as every
  renderer: '' or null for a page the viewer cannot see, the apparent
  name for an unidentified item, a stripped copy in player view.
- A preview card opened in GM view survived a re-render into player
  view. Cards now close and empty on navigate, re-render or a view change.

And the map and editor details they and the screenshots turned up: one
trail waypoint per place with each leg drawn once and quiet roads, the
portal hop drawn as its own arc, the party label merged with Fogshore and
colliding labels deferred to hover, the map fitting its box at any width
with the party in view by default, filter-aware GM-marker counts, editor
ids honouring idPrefix, and empty pages inviting a first edit instead of
repeating the summary.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Open the editor for a page from its 'Start writing it' invitation, read
per-viewer copies of records wherever they reach a frame, drop the
page-level title guard the shared helper now provides, and give each
frame's editor its own id prefix. Re-crawled: 447 clicks across every
phone frame and View as player, none of the 89 GM-only strings.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
fix(feedback-site): Design A follows the shared wiki fixes (#593)
All checks were successful
CI / Docker image build (pull_request) Successful in 45s
CI / Summarisation accuracy eval harness (stub provider) (pull_request) Successful in 54s
CI / Bot/backend version sync (pull_request) Successful in 54s
CI / Backend lint (ruff) (pull_request) Successful in 58s
CI / Frontend tests, audit, and build (pull_request) Successful in 2m11s
CI / Bot tests and audit (pull_request) Successful in 2m38s
CI / Backend migration, tests, and audit (pull_request) Successful in 7m45s
CI / Synthetic session harness (no GPU, no LLM) (pull_request) Successful in 18m39s
b12d552edc
Open the editor for a page from its 'Start writing it' invitation, drop
the thumbnail label and scroll workarounds the shared map no longer
needs, and keep the thumbnail's trail badges off the merged party label.
Re-crawled: about 10,000 checks across every phone frame and See it as
Wren, none of the 89 GM-only strings.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
claude-bot scheduled this pull request to auto merge when all checks succeed 2026-09-11 02:21:37 +00:00
claude-bot deleted branch feat/363-wiki-mockups 2026-09-11 02:40:03 +00:00
Sign in to join this conversation.
No description provided.