[UX] Mock up every catalogued surface, for players and GMs, before building #659

Closed
opened 2026-09-15 19:48:59 +00:00 by claude-bot · 25 comments
Collaborator

Why

Owner decision, 2026-09-15: nothing in the redesign gets built until every screen and surface in Quest Board has been mocked up, for players and for GMs, and reviewed and changed with the owner (#535, #656).

The list of what to draw now exists: docs/design/redesign-surfaces/CATALOGUE.md (#657, PR #658). It has 101 surfaces, with all 1,566 current and planned features placed on them.

Scope

Every surface in the catalogue. For each one, the mockups show:

  • every role variant the catalogue names: public, player, GM, owner, admin
  • the devices it is used on: phone, desktop, and the shared screen where relevant
  • every state in its "States to mock" line: empty, loading, error, in progress, stale, blocked, each stage of a session, and long or many items
  • what it opens: its dialogs, menus, sheets and drawers

The base is Design A (Book & Table) with the shell decisions accepted on #656, drawn in its existing mockup kit (tools/feedback-site/static/mockups/) so everything shares one look.

Outside the web app (EXT-1 to EXT-8): mock the Discord messages and emails too, where their look is Quest Board's to choose.

Before or alongside

The catalogue opens with thirteen decisions for the owner (D1–D13). Each has a proposal. The mockups for the affected surfaces wait for them:

# Decision Surfaces
D1 NPC tracker WIKI-2, WIKI-3
D2 Safety tools CAMP-18, TABLE-1, TABLE-2
D3 Downtime WIKI-12
D4 Accessibility statement PUB-10
D5 Stat conversion CAMP-9, WIKI-6, PREP-2, WIKI-9
D6 Loot and quests move WIKI-12, WIKI-13
D7 Voice and video TABLE-3
D8 Retention settings ADMIN-5, ADMIN-6
D9 Cancelled session SESS-5
D10 Recording controls TABLE-4
D11 Reopen voting SESS-1
D12 Confirmation rule SH-7
D13 Update prompt EXT-7, PUB-7

How

  • Group by group, in the catalogue's order, each group reviewed with the owner before the next: shell and Home first, since every other screen sits inside them.
  • Changes from review flow back into the catalogue: placements into sources/overrides.json, new surfaces into sources/surfaces.json, decisions into the intro. Rebuild with sources/build.ps1, so the catalogue stays the single reference.
  • A feature or surface found while drawing gets added to the catalogue first, so its "nothing unplaced" check keeps holding.

Acceptance criteria

  • Every catalogued surface has a mockup covering its role variants, devices and listed states, and the owner has reviewed it.
  • D1–D13 are decided and recorded in the catalogue.
  • The catalogue is rebuilt with every change review produced.
  • The decisions are written into the brief (#361), ready for the design system (#364) and the build lanes (#366).
## Why **Owner decision, 2026-09-15:** nothing in the redesign gets built until every screen and surface in Quest Board has been mocked up, for players and for GMs, and reviewed and changed with the owner (#535, #656). The list of what to draw now exists: `docs/design/redesign-surfaces/CATALOGUE.md` (#657, PR #658). It has 101 surfaces, with all 1,566 current and planned features placed on them. ## Scope **Every surface in the catalogue.** For each one, the mockups show: - **every role variant** the catalogue names: public, player, GM, owner, admin - **the devices it is used on:** phone, desktop, and the shared screen where relevant - **every state** in its "States to mock" line: empty, loading, error, in progress, stale, blocked, each stage of a session, and long or many items - **what it opens:** its dialogs, menus, sheets and drawers **The base is Design A (Book & Table)** with the shell decisions accepted on #656, drawn in its existing mockup kit (`tools/feedback-site/static/mockups/`) so everything shares one look. **Outside the web app (EXT-1 to EXT-8):** mock the Discord messages and emails too, where their look is Quest Board's to choose. ## Before or alongside **The catalogue opens with thirteen decisions for the owner (D1–D13).** Each has a proposal. The mockups for the affected surfaces wait for them: | # | Decision | Surfaces | |---|---|---| | D1 | NPC tracker | WIKI-2, WIKI-3 | | D2 | Safety tools | CAMP-18, TABLE-1, TABLE-2 | | D3 | Downtime | WIKI-12 | | D4 | Accessibility statement | PUB-10 | | D5 | Stat conversion | CAMP-9, WIKI-6, PREP-2, WIKI-9 | | D6 | Loot and quests move | WIKI-12, WIKI-13 | | D7 | Voice and video | TABLE-3 | | D8 | Retention settings | ADMIN-5, ADMIN-6 | | D9 | Cancelled session | SESS-5 | | D10 | Recording controls | TABLE-4 | | D11 | Reopen voting | SESS-1 | | D12 | Confirmation rule | SH-7 | | D13 | Update prompt | EXT-7, PUB-7 | ## How - **Group by group, in the catalogue's order**, each group reviewed with the owner before the next: shell and Home first, since every other screen sits inside them. - **Changes from review flow back into the catalogue:** placements into `sources/overrides.json`, new surfaces into `sources/surfaces.json`, decisions into the intro. Rebuild with `sources/build.ps1`, so the catalogue stays the single reference. - **A feature or surface found while drawing gets added to the catalogue first,** so its "nothing unplaced" check keeps holding. ## Acceptance criteria - Every catalogued surface has a mockup covering its role variants, devices and listed states, and the owner has reviewed it. - D1–D13 are decided and recorded in the catalogue. - The catalogue is rebuilt with every change review produced. - The decisions are written into the brief (#361), ready for the design system (#364) and the build lanes (#366).
Author
Collaborator

D1–D13 decided (owner, 2026-09-15): every proposal accepted. They are recorded in the catalogue in PR #660: the intro's table, and a "Decided" line on each of the 25 affected surfaces. No mockup is blocked on a decision any more.

# Decision
D1 Fold the NPC tracker into People articles; retire the separate tracker
D2 "Table rules & safety" Contents entry, plus a flag button in Table mode and on This week
D3 Downtime is a section on the party page
D4 Add an accessibility statement page
D5 Stat conversion: link the system in Settings → General, convert from an article's More menu or in bulk from a Prep tool, approve in draft review
D6 All loot & XP editing moves to the party page, and all quest editing to quest articles; players keep adding loot where allowed
D7 No voice, video or text chat surface unless #127's research says go
D8 One "Recording & retention" admin section
D9 A cancelled session shows title, time, reason and "merge notes into another session"; nothing else is actionable
D10 Recording controls appear only while confirmed or in progress
D11 "Add an option" is primary; "Reopen for voting" is secondary, with a votes-lost warning
D12 Typed name for irreversible deletes that reach a whole campaign, account or member; a consequence-stating confirmation for other irreversible actions; undo for reversible ones
D13 A quiet "Updated — reload" notice; installation stays with the browser

Issues whose design these change have been noted: #121 (D2), #124 (D3), #367 (D4), #364 (D12, D13) and #593 (D1, D5, D6).

**D1–D13 decided (owner, 2026-09-15): every proposal accepted.** They are recorded in the catalogue in PR #660: the intro's table, and a "Decided" line on each of the 25 affected surfaces. **No mockup is blocked on a decision any more.** | # | Decision | |---|---| | D1 | Fold the NPC tracker into People articles; retire the separate tracker | | D2 | "Table rules & safety" Contents entry, plus a flag button in Table mode and on This week | | D3 | Downtime is a section on the party page | | D4 | Add an accessibility statement page | | D5 | Stat conversion: link the system in Settings → General, convert from an article's More menu or in bulk from a Prep tool, approve in draft review | | D6 | All loot & XP editing moves to the party page, and all quest editing to quest articles; players keep adding loot where allowed | | D7 | No voice, video or text chat surface unless #127's research says go | | D8 | One "Recording & retention" admin section | | D9 | A cancelled session shows title, time, reason and "merge notes into another session"; nothing else is actionable | | D10 | Recording controls appear only while confirmed or in progress | | D11 | "Add an option" is primary; "Reopen for voting" is secondary, with a votes-lost warning | | D12 | Typed name for irreversible deletes that reach a whole campaign, account or member; a consequence-stating confirmation for other irreversible actions; undo for reversible ones | | D13 | A quiet "Updated — reload" notice; installation stays with the browser | **Issues whose design these change** have been noted: #121 (D2), #124 (D3), #367 (D4), #364 (D12, D13) and #593 (D1, D5, D6).
Author
Collaborator

How the mockup is being built (owner, 2026-09-15):

  • The look comes first (#661). Three directions for colour, custom icons, type and shape, drawn on Design A's existing screens. The owner picks one before any surface is drawn, because every surface inherits it.

  • Then one clickable prototype, not static frames.

    • The real navigation: the Contents, the account menu and the bell.
    • A viewer switch: public / player / GM / owner / admin.
    • A phone / desktop switch.
    • A state picker on every surface, taken from the catalogue's "States to mock".
    • A small catalogue-ID label on each surface, so review comments can cite it.
  • Built in lanes, group by group:

    1. shell, Home, public pages
    2. campaign core: This week, the session lifecycle, Members, Settings
    3. table and recording
    4. Prep
    5. the wiki
    6. Discussions, notifications, safety
    7. admin
    8. outside the app (Discord, email)

    Each lane has a checklist generated from the catalogue and a player-view leak crawl.

  • Review:

    • the owner reviews each lane as it lands
    • players are asked throughout, but are expected to have most to say once the whole prototype is done
  • Hosting: on the feedback site under a new path, /feedback/prototype: the look directions at /prototype/look, the prototype itself later. Round two's /mockups pages, form and responses are untouched, so people can still answer them.

**How the mockup is being built (owner, 2026-09-15):** - **The look comes first** (#661). Three directions for colour, custom icons, type and shape, drawn on Design A's existing screens. The owner picks one before any surface is drawn, because every surface inherits it. - **Then one clickable prototype, not static frames.** - The real navigation: the Contents, the account menu and the bell. - A viewer switch: public / player / GM / owner / admin. - A phone / desktop switch. - A state picker on every surface, taken from the catalogue's "States to mock". - A small catalogue-ID label on each surface, so review comments can cite it. - **Built in lanes, group by group:** 1. shell, Home, public pages 2. campaign core: This week, the session lifecycle, Members, Settings 3. table and recording 4. Prep 5. the wiki 6. Discussions, notifications, safety 7. admin 8. outside the app (Discord, email) Each lane has a checklist generated from the catalogue and a player-view leak crawl. - **Review:** - the owner reviews each lane as it lands - players are asked throughout, but are expected to have most to say once the whole prototype is done - **Hosting:** on the feedback site under a **new path, `/feedback/prototype`**: the look directions at `/prototype/look`, the prototype itself later. Round two's `/mockups` pages, form and responses are untouched, so people can still answer them.
Author
Collaborator

The kit is settled: Lapis Table (#661, closed). Every surface in this mockup is drawn in it.

  • What it is: Illuminated's blue pigments and its opening initial, with Game Night's type (Unbounded and Figtree) and shape: deep navy chrome, hexagonal dice tokens for people, rounded cards, duotone icons, and a midnight-blue Table mode.
  • Where it lives: tools/feedback-site/static/prototype/shared/looks.css (data-look="lapistable"), with the 67-icon set in shared/icons.js and the kit in shared/kit.css. The prototype opens in it by default.
  • Written up in docs/design/redesign-surfaces/look/DIRECTIONS.md.
  • Icons: catalogued at /feedback/prototype/icons. Four are flagged for redrawing (table, lore, maybe, map); names are stable, so a redraw doesn't disturb any screen that uses them.

Next: lane 1 of the prototype — the shell, Home and the public pages — built on this kit at /feedback/prototype.

**The kit is settled: Lapis Table** (#661, closed). Every surface in this mockup is drawn in it. - **What it is:** Illuminated's blue pigments and its opening initial, with Game Night's type (Unbounded and Figtree) and shape: deep navy chrome, hexagonal dice tokens for people, rounded cards, duotone icons, and a midnight-blue Table mode. - **Where it lives:** `tools/feedback-site/static/prototype/shared/looks.css` (`data-look="lapistable"`), with the 67-icon set in `shared/icons.js` and the kit in `shared/kit.css`. The prototype opens in it by default. - **Written up in** `docs/design/redesign-surfaces/look/DIRECTIONS.md`. - **Icons:** catalogued at `/feedback/prototype/icons`. Four are flagged for redrawing (`table`, `lore`, `maybe`, `map`); names are stable, so a redraw doesn't disturb any screen that uses them. **Next:** lane 1 of the prototype — the shell, Home and the public pages — built on this kit at `/feedback/prototype`.
Author
Collaborator

Lane 1 scope, settled 2026-09-15

Before drawing anything I pulled every lane-1 surface out of the catalogue and put the boundary questions to the owner. Three decisions:

1. Search is campaign-wide, not global. A search box in the app bar that reaches the campaign you are in — its sessions, people and characters, wiki articles and rules packs — and never crosses between campaigns. This was new scope the catalogue didn't name anywhere; filed as #667, given surface SH-9 and six ledger rows in PR #668.

2. The live-session bar (SH-6) and the campaign-wide banners (SH-8) move to lane 2. Both are filed under the shell, but neither ever appears outside a campaign page. They are better judged sitting on the page they belong to than floating above one that isn't drawn yet.

3. Profile (HOME-5) and notification settings (HOME-6) join lane 1. The account menu and the bell both open them, and drawing the menu without them would leave two entries pointing at nothing. It also puts pronouns (#653) and the per-channel alert settings in front of the owner alongside the bell that feeds them. Plan & billing (HOME-7) stays out — it is speculative (#642) and belongs with the admin lane.

Lane 1 as it now stands — 20 surfaces

Group Surfaces
Public (10) PUB-1 Sign in · PUB-2 Sign-in failed · PUB-3 Invite landing · PUB-4 Public analytics share · PUB-5 Help index and guides · PUB-6 Rules licences and notices · PUB-7 Not found / crash / loading / offline · PUB-8 First-run instance setup · PUB-9 Discord link result pages · PUB-10 Accessibility statement
Shell (7) SH-1 App bar · SH-2 Contents: Home · SH-3 Contents: campaign · SH-4 Account menu · SH-5 Notifications panel · SH-7 Shared patterns · SH-9 Search
Home and You (3) HOME-1 Home: Needs you and your campaigns · HOME-5 Profile · HOME-6 Notification settings

The extraction counted 156 feature rows across the original 19 surfaces; SH-9 adds six, and HOME-5/HOME-6 add their own on top, while SH-6 (which has no rows at all) and SH-8 (7 rows) leave for lane 2.

Two things the extraction found that the mockup has to answer

  • There is no global footer anywhere. The only footers are per-page help-guide links (SH-072 on Home, SH-097 in the guides, SH-091 on the join page). Worth deciding whether the redesign wants a real one or keeps the current pattern.
  • SH-4 has no settled phone home. Design A's phone "You" entry names only Profile and Help, so where Admin, Theme and Sign out live on a phone is still open. SH-5's bell has the same problem — IS-198 says the phone bar "makes room for it", placement undrawn.

Both are on the list to resolve when those surfaces are drawn, not assumed.

## Lane 1 scope, settled 2026-09-15 Before drawing anything I pulled every lane-1 surface out of the catalogue and put the boundary questions to the owner. Three decisions: **1. Search is campaign-wide, not global.** A search box in the app bar that reaches the campaign you are in — its sessions, people and characters, wiki articles and rules packs — and never crosses between campaigns. This was new scope the catalogue didn't name anywhere; filed as **#667**, given surface `SH-9` and six ledger rows in **PR #668**. **2. The live-session bar (`SH-6`) and the campaign-wide banners (`SH-8`) move to lane 2.** Both are filed under the shell, but neither ever appears outside a campaign page. They are better judged sitting on the page they belong to than floating above one that isn't drawn yet. **3. Profile (`HOME-5`) and notification settings (`HOME-6`) join lane 1.** The account menu and the bell both open them, and drawing the menu without them would leave two entries pointing at nothing. It also puts pronouns (#653) and the per-channel alert settings in front of the owner alongside the bell that feeds them. Plan & billing (`HOME-7`) stays out — it is speculative (#642) and belongs with the admin lane. ### Lane 1 as it now stands — 20 surfaces | Group | Surfaces | |---|---| | Public (10) | `PUB-1` Sign in · `PUB-2` Sign-in failed · `PUB-3` Invite landing · `PUB-4` Public analytics share · `PUB-5` Help index and guides · `PUB-6` Rules licences and notices · `PUB-7` Not found / crash / loading / offline · `PUB-8` First-run instance setup · `PUB-9` Discord link result pages · `PUB-10` Accessibility statement | | Shell (7) | `SH-1` App bar · `SH-2` Contents: Home · `SH-3` Contents: campaign · `SH-4` Account menu · `SH-5` Notifications panel · `SH-7` Shared patterns · `SH-9` Search | | Home and You (3) | `HOME-1` Home: Needs you and your campaigns · `HOME-5` Profile · `HOME-6` Notification settings | The extraction counted 156 feature rows across the original 19 surfaces; `SH-9` adds six, and `HOME-5`/`HOME-6` add their own on top, while `SH-6` (which has no rows at all) and `SH-8` (7 rows) leave for lane 2. ### Two things the extraction found that the mockup has to answer - **There is no global footer anywhere.** The only footers are per-page help-guide links (`SH-072` on Home, `SH-097` in the guides, `SH-091` on the join page). Worth deciding whether the redesign wants a real one or keeps the current pattern. - **`SH-4` has no settled phone home.** Design A's phone "You" entry names only Profile and Help, so where Admin, Theme and Sign out live on a phone is still open. `SH-5`'s bell has the same problem — `IS-198` says the phone bar "makes room for it", placement undrawn. Both are on the list to resolve when those surfaces are drawn, not assumed.
Author
Collaborator

Lane 1 is drawn — the shell

At /prototype/lane1 (PR #669). Six surfaces: SH-1 the app bar, SH-9 search, SH-5 the bell, SH-4 the account menu, and SH-2/SH-3 the Contents. The bell and the account menu had never been drawn; search did not exist until #667 was decided the same evening.

What the drawing commits to

  • Unread is marked twice over — a dot and heavier text — so it never depends on seeing a colour (IS-295).
  • A notification whose subject is gone keeps its row and loses its words (IS-162). Deleting the row would make the earlier count wrong and read like a bug.
  • An unrecognised notification kind is dropped rather than drawn wrong (IS-048).
  • GM-only search results are filtered, not hidden. The player's panel is built from a list those records never entered; the GM's copy marks them.
  • Theme is three choices, not a toggle — a two-state switch cannot express "follow the system", which is the default a fresh account gets.

Still open, drawn both ways rather than decided

  1. The phone bar: keep the wordmark and make search an icon (two taps), or spend the wordmark and the title on a real input.
  2. Search results: grouped by kind, or ranked with the kind as a tag.
  3. Whether there is a footer at all. There is none in Quest Board today.
  4. Where Admin, Theme and Sign out live on a phone, since Design A's "You" group lists only Profile and Help.

A correction worth recording (#653)

My first draft of the account menu showed Priya the pronouns he/him — her character's, not hers. The shared sample only ever carried character pronouns, which made that error structurally easy to make rather than a slip.

shared/data.js now carries playerPron separately from pron, and they deliberately differ: Priya (she/her) plays a he/him rogue, Marcus (he/him) plays a she/her druid. Search renders both, each beside whom it belongs to — "Wren Halloway · Druid 6 · she/her · played by Marcus (he/him)".

Anyone drawing a later lane must keep the two apart. A surface that names a person has to say which set it is using. This is the concrete shape #653 takes in the mockups.

Method note for lanes 2–8

Rendering each lane in a real browser before showing it caught three faults in my own first draft: a caption promising a search box the drawing did not have, a caption pointing at the wrong row, and desktop bars drawn in 340px columns where the breadcrumb wrapped at a width no desktop has. Worth doing every lane, not just this one.

The shell now lives in shared/shell.css and shared/shell.js so lanes 2–8 share one copy. look.html keeps its own inline copy deliberately — it is the frozen record of the look decision and must not be breakable from here.

Next: lane 2, the campaign core, which now also carries SH-6 (the live-session bar) and SH-8 (the campaign banners) after the scope decision above. Waiting on the owner's answers to the four questions first, since two of them change the shell every later lane sits in.

## Lane 1 is drawn — the shell At `/prototype/lane1` (PR #669). Six surfaces: `SH-1` the app bar, `SH-9` search, `SH-5` the bell, `SH-4` the account menu, and `SH-2`/`SH-3` the Contents. The bell and the account menu had never been drawn; search did not exist until #667 was decided the same evening. ### What the drawing commits to - **Unread is marked twice over** — a dot *and* heavier text — so it never depends on seeing a colour (`IS-295`). - **A notification whose subject is gone keeps its row and loses its words** (`IS-162`). Deleting the row would make the earlier count wrong and read like a bug. - **An unrecognised notification kind is dropped rather than drawn wrong** (`IS-048`). - **GM-only search results are filtered, not hidden.** The player's panel is built from a list those records never entered; the GM's copy marks them. - **Theme is three choices, not a toggle** — a two-state switch cannot express "follow the system", which is the default a fresh account gets. ### Still open, drawn both ways rather than decided 1. The phone bar: keep the wordmark and make search an icon (two taps), or spend the wordmark *and* the title on a real input. 2. Search results: grouped by kind, or ranked with the kind as a tag. 3. Whether there is a footer at all. There is none in Quest Board today. 4. Where Admin, Theme and Sign out live on a phone, since Design A's "You" group lists only Profile and Help. ### A correction worth recording (#653) My first draft of the account menu showed Priya the pronouns **he/him** — her *character's*, not hers. The shared sample only ever carried character pronouns, which made that error structurally easy to make rather than a slip. `shared/data.js` now carries `playerPron` separately from `pron`, and they deliberately differ: Priya (she/her) plays a he/him rogue, Marcus (he/him) plays a she/her druid. Search renders both, each beside whom it belongs to — *"Wren Halloway · Druid 6 · she/her · played by Marcus (he/him)"*. **Anyone drawing a later lane must keep the two apart.** A surface that names a person has to say which set it is using. This is the concrete shape #653 takes in the mockups. ### Method note for lanes 2–8 Rendering each lane in a real browser before showing it caught three faults in my own first draft: a caption promising a search box the drawing did not have, a caption pointing at the wrong row, and desktop bars drawn in 340px columns where the breadcrumb wrapped at a width no desktop has. Worth doing every lane, not just this one. The shell now lives in `shared/shell.css` and `shared/shell.js` so lanes 2–8 share one copy. `look.html` keeps its own inline copy deliberately — it is the frozen record of the look decision and must not be breakable from here. **Next:** lane 2, the campaign core, which now also carries `SH-6` (the live-session bar) and `SH-8` (the campaign banners) after the scope decision above. Waiting on the owner's answers to the four questions first, since two of them change the shell every later lane sits in.
Author
Collaborator

Lane 2 — the campaign core — drawn (PR #673)

This week, the sessions list, making a session, members & characters, plus SH-6 (live-session bar) and SH-8 (banners). Settings gets its frame and two of nine sections; the rest is lane 2b.

The lane as scoped was 15 surfaces / 202 rows, of which Settings alone was 109 across nine sections. Split on the owner's decision: core now, the remaining seven settings sections next.

Catalogue corrections made before drawing

Per this issue's rule that a surface's rows must be right first:

  • CAMP-1 could not be drawn from its own rows. Design A's screen 2 shows "Are you in?", the roster and Add to calendar; SE-025–027, SE-147–150, IS-011 and IS-231 were all on SESS-2 alone. Added to CAMP-1 in overrides.json — 5 borrowed rows → 14.
  • SH-6 had zero rows for a surface Design A asserts exists. Six written: IS-304–309.
  • Two search boxes in one campaign — lane 1's app-bar search vs. CAMP-2's Session Search, which holds the product's only transcript search. #593 forbids two. Open as D16, drawn both ways.

Catalogue rebuilt: 1,578 rows on 102 surfaces.

Decisions recorded in the intro

# Decision
D14 Campaign Analytics stays open to every member, but a player sees campaign-wide numbers and their own row only. The full member table is the GM's.
D15 The footer is five things: version, a link to the project, Help, Accessibility, Licences & notices.
D16 The two search boxes — open, drawn both ways for a decision.

Decisions taken while drawing, marked on the page

  • Banners stack worst-first, one at a time, the rest folded behind a line that names them. (The ledger explicitly left this to the mockup; five can apply at once.)
  • The live bar has three states, because a session being in progress and the bot recording are independent facts.
  • Settings is one page of nine sections, not nine Contents entries; each row states who can see it before you click (IS-199).

Rendering it caught four faults that reading the code did not

  1. On a phone the live bar told "recording" from "not recording" by colour alone — IS-295's exact failure, in the place it matters most.
  2. Member rows put the character's initial on the disc beside the person's name, on the one page whose job is keeping those apart.
  3. The RSVP counter said "4 of 6 have answered" beside a roster where all six had.
  4. The scheduling mode had no visible pressed state — three identical buttons.

Same lesson as lane 1: the page has to be looked at, not just read.

Still open for the review

  • D16 — which search survives, and where GM transcript search lives.
  • IS-308 — whether the live bar follows you off the campaign's own pages, leaving a live session invisible from Home. Drawn as the alternative.
  • Whether Dana's roster row, which shows her own pronouns where every other row shows the character's, should name her differently.

Next: lane 2b, the seven remaining settings sections (Invites, Ownership, Recording & AI, Wiki, Content packs, Foundry, Archive & delete).

Separately, #671 — found while scoping this lane — is fixed in #672 rather than waiting for the rebuild.

## Lane 2 — the campaign core — drawn (PR #673) **This week**, the **sessions list**, **making a session**, **members & characters**, plus **SH-6** (live-session bar) and **SH-8** (banners). Settings gets its **frame** and two of nine sections; the rest is lane 2b. The lane as scoped was 15 surfaces / 202 rows, of which Settings alone was 109 across nine sections. Split on the owner's decision: core now, the remaining seven settings sections next. ### Catalogue corrections made before drawing Per this issue's rule that a surface's rows must be right first: - **CAMP-1 could not be drawn from its own rows.** Design A's screen 2 shows "Are you in?", the roster and Add to calendar; `SE-025`–`027`, `SE-147`–`150`, `IS-011` and `IS-231` were all on SESS-2 alone. Added to CAMP-1 in `overrides.json` — 5 borrowed rows → 14. - **SH-6 had zero rows** for a surface Design A asserts exists. Six written: `IS-304`–`309`. - **Two search boxes in one campaign** — lane 1's app-bar search vs. CAMP-2's Session Search, which holds the product's only transcript search. #593 forbids two. Open as **D16**, drawn both ways. Catalogue rebuilt: **1,578 rows on 102 surfaces**. ### Decisions recorded in the intro | # | Decision | |---|---| | **D14** | Campaign Analytics stays open to every member, but a player sees campaign-wide numbers and their own row only. The full member table is the GM's. | | **D15** | The footer is five things: version, a link to the project, Help, Accessibility, Licences & notices. | | **D16** | The two search boxes — **open**, drawn both ways for a decision. | ### Decisions taken while drawing, marked on the page - Banners stack **worst-first, one at a time**, the rest folded behind a line that names them. (The ledger explicitly left this to the mockup; five can apply at once.) - The live bar has **three states**, because a session being in progress and the bot recording are independent facts. - **Settings is one page of nine sections**, not nine Contents entries; each row states who can see it before you click (`IS-199`). ### Rendering it caught four faults that reading the code did not 1. On a phone the live bar told "recording" from "not recording" **by colour alone** — `IS-295`'s exact failure, in the place it matters most. 2. Member rows put the **character's** initial on the disc beside the **person's** name, on the one page whose job is keeping those apart. 3. The RSVP counter said "4 of 6 have answered" beside a roster where all six had. 4. The scheduling mode had no visible pressed state — three identical buttons. Same lesson as lane 1: the page has to be looked at, not just read. ### Still open for the review - **D16** — which search survives, and where GM transcript search lives. - **`IS-308`** — whether the live bar follows you off the campaign's own pages, leaving a live session invisible from Home. Drawn as the alternative. - Whether Dana's roster row, which shows her own pronouns where every other row shows the character's, should name her differently. **Next:** lane 2b, the seven remaining settings sections (Invites, Ownership, Recording & AI, Wiki, Content packs, Foundry, Archive & delete). Separately, **#671** — found while scoping this lane — is fixed in **#672** rather than waiting for the rebuild.
Author
Collaborator

Lane 2b — the rest of Settings — drawn and live (PR #682)

At https://questboard-dev.rhoving.com/feedback/prototype/lane2b. ?only=<id> shows one screen alone (nav, camp10, camp11, camp13, camp14, camp15, camp16, camp17, gen, open), and &theme=light checks the light theme.

The seven sections lane 2 did not draw — CAMP-10 invites and joining, CAMP-11 ownership, CAMP-13 recording/retention/AI, CAMP-14 the wiki's edit permissions, CAMP-15 content packs, CAMP-16 Foundry, CAMP-17 archive/export/clone/delete. 84 feature rows, of which 56 are in two sections. Three sections hold 8 rows between them, 7 of those unbuilt.

Decisions recorded in the intro

# Decision
D21 Open. How a person moves between the nine sections. Drawn both ways — the Contents opening into them, or a "‹ Settings" back bar. Either way each section gets its own address, which is not really optional: SH-036's unsaved-changes prompt only fires on a change of pathname, so nine sections as tabs of one page would lose an edit with the guard sitting right there.
D22 Leaving a section with unsaved edits asks first.
D23 Invites split — getting a link stays on Members in CA-225's compact form; managing them lives in Settings. Otherwise CAMP-8's primary Invite players button pointed at a page a player cannot open.
D24 Instance retention becomes a default and an absolute cap, with a campaign landing between them. Today get_effective_retention lets any non-null campaign value win, so the "default" is a default in name only.
D25 Turning per-campaign AI off says the campaign's settings are kept and inert, instead of removing the panel and leaving a GM to conclude their configuration was lost.

CAMP-11 is renamed Ownership. It was named for two things and held one: Make GM, Remove GM, the owner badge and even the transfer entry point all live on CAMP-8, on the row of the person they affect, and stay there.

Five new IS rows for the scope D24/D25 created (IS-310–IS-314). Catalogue rebuilt: 1,583 rows on 102 surfaces.

Also settled while drawing

  • Two confirmation tiers on invite links, where the catalogue flags today's as one and a half. Under D12 the difference is not which is scarier but whether anyone is holding the link: revoking a live one states its consequence, removing a dead one just goes with an undo.
  • A pack you cannot act on does not get the controls — "Turn off" on a pack that would not load, and "Export" on one still reading, were drawn and would then have been refused.
  • Destructive buttons are no longer the same blue as Save (.btn--danger, borrowing the amber .modal__danger already uses). Lane 2's erase-recordings modal should arguably get it too; left alone rather than editing a reviewed drawing.

Rendering it caught six faults reading the code did not

  1. The phone Contents sheet was not in the picture at all — it ships hidden and is opened by a tap a screenshot does not make, under a caption promising it. Unhiding it exposed a second fault behind the first: the sheet is positioned against .app, so on a page drawn at its natural height the panel landed at the foot of a two-thousand-pixel document instead of over the screen.
  2. Two desktop pages side by side wrapped "Quest Board" across two lines at a width no desktop has — lane 1's exact fault, reintroduced.
  3. The Contents sub-list was headed "Settings" one line under the row that says "Settings".
  4. Every pack read Pathfinder 2e &middot; 214 creatures — an entity written into a string that is then escaped.
  5. An empty months box sat beside an already-chosen "keep them".
  6. A toggle's aria-label read &ldquo;previously on&rdquo; literally, which a screen reader says as "ampersand ldquo semicolon". Invisible on screen and the whole of the label for anyone listening.

Two things in the code, found while scoping

  • #680 — shortening transcript retention destroys transcripts with no bin, no grace and no warning, while audio is looked after three ways over; under the default posture the transcript is the only record left. Filed. The confirmation drawn here is the front half of the fix.
  • IS-188 — export withholds unlicensed records and only the downloaded file says so. The manifest lists each one and the response carries a header with the count, but the button is a plain download link so the page reads neither. Drawn as a line under Export.

A correction to lane 2

CAMP-9 General was drawn at about thirteen of its eighteen rows and captioned as whole. The registry-match nudge (CA-018), the blank-timezone warning and the entire stat-conversion panel that D5 put in Settings → General were missing. All three are drawn at the end of this page.

Separately

#675 is closed (PR #681): the feedback site's tests now run in CI, its dependencies are pinned so CI, the image and a local run are one environment, and two new tests derive what must answer from the folder rather than a hand-kept list — because "page added, route forgotten" is the same forgetting that leaves the list stale.

Next: lane 3, the table and recording.

## Lane 2b — the rest of Settings — drawn and live (PR #682) At **https://questboard-dev.rhoving.com/feedback/prototype/lane2b**. `?only=<id>` shows one screen alone (`nav`, `camp10`, `camp11`, `camp13`, `camp14`, `camp15`, `camp16`, `camp17`, `gen`, `open`), and `&theme=light` checks the light theme. The seven sections lane 2 did not draw — `CAMP-10` invites and joining, `CAMP-11` ownership, `CAMP-13` recording/retention/AI, `CAMP-14` the wiki's edit permissions, `CAMP-15` content packs, `CAMP-16` Foundry, `CAMP-17` archive/export/clone/delete. **84 feature rows, of which 56 are in two sections.** Three sections hold 8 rows between them, 7 of those unbuilt. ### Decisions recorded in the intro | # | Decision | |---|---| | **D21** | **Open.** How a person moves between the nine sections. Drawn both ways — the Contents opening into them, or a "‹ Settings" back bar. Either way each section gets its own address, which is not really optional: `SH-036`'s unsaved-changes prompt only fires on a change of *pathname*, so nine sections as tabs of one page would lose an edit with the guard sitting right there. | | **D22** | Leaving a section with unsaved edits asks first. | | **D23** | Invites split — getting a link stays on Members in `CA-225`'s compact form; managing them lives in Settings. Otherwise CAMP-8's primary *Invite players* button pointed at a page a player cannot open. | | **D24** | Instance retention becomes a **default** and an **absolute cap**, with a campaign landing between them. Today `get_effective_retention` lets any non-null campaign value win, so the "default" is a default in name only. | | **D25** | Turning per-campaign AI off says the campaign's settings are kept and inert, instead of removing the panel and leaving a GM to conclude their configuration was lost. | `CAMP-11` is renamed **Ownership**. It was named for two things and held one: Make GM, Remove GM, the owner badge and even the transfer entry point all live on `CAMP-8`, on the row of the person they affect, and stay there. Five new `IS` rows for the scope D24/D25 created (`IS-310`–`IS-314`). Catalogue rebuilt: **1,583 rows on 102 surfaces**. ### Also settled while drawing - **Two confirmation tiers on invite links**, where the catalogue flags today's as one and a half. Under `D12` the difference is not which is scarier but whether anyone is holding the link: revoking a live one states its consequence, removing a dead one just goes with an undo. - **A pack you cannot act on does not get the controls** — "Turn off" on a pack that would not load, and "Export" on one still reading, were drawn and would then have been refused. - **Destructive buttons are no longer the same blue as Save** (`.btn--danger`, borrowing the amber `.modal__danger` already uses). Lane 2's erase-recordings modal should arguably get it too; left alone rather than editing a reviewed drawing. ### Rendering it caught six faults reading the code did not 1. **The phone Contents sheet was not in the picture at all** — it ships `hidden` and is opened by a tap a screenshot does not make, under a caption promising it. Unhiding it exposed a second fault behind the first: the sheet is positioned against `.app`, so on a page drawn at its natural height the panel landed at the foot of a two-thousand-pixel document instead of over the screen. 2. **Two desktop pages side by side wrapped "Quest Board" across two lines** at a width no desktop has — lane 1's exact fault, reintroduced. 3. The Contents sub-list was **headed "Settings" one line under the row that says "Settings"**. 4. Every pack read **`Pathfinder 2e &middot; 214 creatures`** — an entity written into a string that is then escaped. 5. An empty months box sat beside an already-chosen "keep them". 6. A toggle's **`aria-label` read `&ldquo;previously on&rdquo;` literally**, which a screen reader says as "ampersand ldquo semicolon". Invisible on screen and the whole of the label for anyone listening. ### Two things in the code, found while scoping - **#680** — shortening transcript retention destroys transcripts with no bin, no grace and no warning, while audio is looked after three ways over; under the default posture the transcript is the only record left. Filed. The confirmation drawn here is the front half of the fix. - **`IS-188`** — export withholds unlicensed records and only the downloaded file says so. The manifest lists each one and the response carries a header with the count, but the button is a plain download link so the page reads neither. Drawn as a line under Export. ### A correction to lane 2 **`CAMP-9` General was drawn at about thirteen of its eighteen rows** and captioned as whole. The registry-match nudge (`CA-018`), the blank-timezone warning and the entire stat-conversion panel that **D5** put in Settings → General were missing. All three are drawn at the end of this page. ### Separately **#675 is closed** (PR #681): the feedback site's tests now run in CI, its dependencies are pinned so CI, the image and a local run are one environment, and two new tests derive what must answer from the folder rather than a hand-kept list — because "page added, route forgotten" is the same forgetting that leaves the list stale. **Next:** lane 3, the table and recording.
Author
Collaborator

Lane 3 — the session lifecycle — drawn, reviewed and settled (PR #686)

At https://questboard-dev.rhoving.com/feedback/prototype/lane3. ?only=<id> shows one screen alone (sess1, sess2, sess5, read, review, notes, open), &theme=light for the light theme. Reviewed 17 September with no changes asked for.

A scoping correction first

This lane was lane 2's. This issue scoped lane 2 as "campaign core: This week, the session lifecycle, Members, Settings". Settings turned out to be 109 features, forced the 2/2b split, and the session pages were quietly dropped — 2b closed out Settings rather than the lane, so nothing flagged it. SESS-1–SESS-7 is 166 features and no mockup had touched any of it.

Drawn as one page through five lives rather than six unrelated screens: proposed while people vote, confirmed, cancelled, and afterwards the Read and Review tabs, plus notes.

Decisions recorded in the intro

# Decision
D27 GM review is a tab, not a layer over the reading view. 69 features of machinery over a page whose job is reading is how the reading view ended up carrying the GM's checklist.
D28 The post-session checklist is the GM's. SE-095–SE-102 are all catalogued member, so today every player reads "Recap email: Sent" and "Journal entry: Queued" — the D14 shape again: nobody chose it, it is what the page does.
D29 The voting grid transposes on a phone — one time per row, your answer inline, everyone else's summarised.
D30 One notes panel with an audience switch, using #593's single audience model rather than three bespoke ones. Drawn provisionally to be judged; settled on review (#687).
D31 Pending event corrections are persisted server-side (IS-317).
D32 The session Talk tab defers to lane 6, which owns CAMP-19/20's thread model.

Plus IS-316 for the notes switch. Catalogue rebuilt: 1,586 rows on 102 surfaces.

Two decisions were invisible to anyone drawing these surfaces

D17 (one time, the reader's own) and D20 (no explanatory callouts) are recorded in the decisions table as governing SESS-1/2/3 and TABLE-1, but no Decided line appeared on any of those surface headers — unlike every other decision, which carries one. Someone reading the surface block, which is what you read when you draw it, would have missed both. Added before drawing.

Worth a general check: that was a silent failure of the catalogue's own convention.

Rendering it caught six faults — two in the shared kit

The shared-kit two were about to affect every remaining lane:

  1. .dot has a width and height and no display, so a bare inline span collapses to nothing — four of the five rows of the voting grid were simply empty. Every existing caller happens to put a dot inside a flex row, which hides it. Fixed in kit.css.
  2. shell.js hardcoded "Session 13" in the Contents sub-list whenever the active key was session13 — true for look.html, which only ever drew one session, so a Session 14 page mislabelled itself.

And four in the drawing: four of five rows reading as colour alone (IS-295's exact failure, with the roster directly beneath already correct); two slots tied on seven points with one starred; a player voting on every slot while the roster said she had not answered; and "Who was there" showing RSVPs on a session already played, under a banner saying four voices had been matched.

Three things in the code the drawing had to work around

  • A reload silently discards a GM's event corrections — local state until Regenerate, with SE-154's leave-page guard the only net. D31/IS-317.
  • The recording panel has no lifecycle gate at all (SE-157): Start and Stop stay live on a completed and a cancelled session. Drawing SESS-5 from D9 rather than today's behaviour is what makes that visible.
  • An in-progress session has no badge colour (STATUS_CLASSES has no entry), so every state is drawn with a word.

Lane progress

Lane Surfaces State
1 — the shell 6 settled
2 — campaign core 6 + Settings frame settled
2b — the rest of Settings 7 settled
3 — the session lifecycle 6 settled
4 — table and recording TABLE-1–TABLE-5 next
5–8 Prep, wiki, discussions/safety, admin, outside the app to do

Next: lane 4, the table and recording — 153 features, of which TABLE-1 alone is 101 and is the largest surface in the catalogue. Its biggest question is already visible: six header controls are hidden below the phone breakpoint with no replacement (TB-070), so a GM at a table holding a phone gets a back link and a title.

## Lane 3 — the session lifecycle — drawn, reviewed and settled (PR #686) At **https://questboard-dev.rhoving.com/feedback/prototype/lane3**. `?only=<id>` shows one screen alone (`sess1`, `sess2`, `sess5`, `read`, `review`, `notes`, `open`), `&theme=light` for the light theme. **Reviewed 17 September with no changes asked for.** ### A scoping correction first **This lane was lane 2's.** This issue scoped lane 2 as *"campaign core: This week, the session lifecycle, Members, Settings"*. Settings turned out to be 109 features, forced the 2/2b split, and **the session pages were quietly dropped** — 2b closed out Settings rather than the lane, so nothing flagged it. `SESS-1`–`SESS-7` is 166 features and no mockup had touched any of it. Drawn as **one page through five lives** rather than six unrelated screens: proposed while people vote, confirmed, cancelled, and afterwards the Read and Review tabs, plus notes. ### Decisions recorded in the intro | # | Decision | |---|---| | **D27** | GM review is a **tab**, not a layer over the reading view. 69 features of machinery over a page whose job is reading is how the reading view ended up carrying the GM's checklist. | | **D28** | The post-session checklist is the **GM's**. `SE-095`–`SE-102` are all catalogued `member`, so today every player reads "Recap email: Sent" and "Journal entry: Queued" — the **D14 shape** again: nobody chose it, it is what the page does. | | **D29** | The voting grid **transposes on a phone** — one time per row, your answer inline, everyone else's summarised. | | **D30** | **One notes panel with an audience switch**, using #593's single audience model rather than three bespoke ones. Drawn provisionally to be judged; **settled on review** (#687). | | **D31** | Pending event corrections are **persisted server-side** (`IS-317`). | | **D32** | The session **Talk tab defers to lane 6**, which owns CAMP-19/20's thread model. | Plus `IS-316` for the notes switch. Catalogue rebuilt: **1,586 rows on 102 surfaces**. ### Two decisions were invisible to anyone drawing these surfaces **D17** (one time, the reader's own) and **D20** (no explanatory callouts) are recorded in the decisions table as governing `SESS-1/2/3` and `TABLE-1`, but **no `Decided` line appeared on any of those surface headers** — unlike every other decision, which carries one. Someone reading the surface block, which is what you read when you draw it, would have missed both. Added before drawing. Worth a general check: that was a silent failure of the catalogue's own convention. ### Rendering it caught six faults — two in the shared kit The shared-kit two were about to affect every remaining lane: 1. **`.dot` has a width and height and no `display`**, so a bare inline span collapses to nothing — four of the five rows of the voting grid were simply empty. Every existing caller happens to put a dot inside a flex row, which hides it. Fixed in `kit.css`. 2. **`shell.js` hardcoded "Session 13"** in the Contents sub-list whenever the active key was `session13` — true for `look.html`, which only ever drew one session, so a Session 14 page mislabelled itself. And four in the drawing: four of five rows reading as **colour alone** (`IS-295`'s exact failure, with the roster directly beneath already correct); **two slots tied on seven points** with one starred; **a player voting on every slot while the roster said she had not answered**; and **"Who was there" showing RSVPs on a session already played**, under a banner saying four voices had been matched. ### Three things in the code the drawing had to work around - **A reload silently discards a GM's event corrections** — local state until Regenerate, with `SE-154`'s leave-page guard the only net. D31/`IS-317`. - **The recording panel has no lifecycle gate at all** (`SE-157`): Start and Stop stay live on a completed *and* a cancelled session. Drawing `SESS-5` from D9 rather than today's behaviour is what makes that visible. - **An in-progress session has no badge colour** (`STATUS_CLASSES` has no entry), so every state is drawn with a word. ### Lane progress | Lane | Surfaces | State | |---|---|---| | 1 — the shell | 6 | settled | | 2 — campaign core | 6 + Settings frame | settled | | 2b — the rest of Settings | 7 | settled | | **3 — the session lifecycle** | **6** | **settled** | | 4 — table and recording | `TABLE-1`–`TABLE-5` | next | | 5–8 | Prep, wiki, discussions/safety, admin, outside the app | to do | **Next: lane 4**, the table and recording — 153 features, of which `TABLE-1` alone is 101 and is the largest surface in the catalogue. Its biggest question is already visible: **six header controls are hidden below the phone breakpoint with no replacement** (`TB-070`), so a GM at a table holding a phone gets a back link and a title.
Author
Collaborator

D37 decided (lane 4 review), merged in #692 (631e911), deployed.

The GM's shelf stays freeform, not look.html's reflowing grid, and sideways scrolling is an officially supported way to get more room on the board.

This came from the question of what happens if a GM preps on a 4K monitor and plays on a 1080p one. The variable is CSS width, not resolution: a 4K monitor at 200% scaling is as wide as a 1080p one. Card positions were already screen-independent. What was missing is deliberate scrolling: today the whole page scrolls rather than the board, and nothing marks a card that is off-screen.

  • Catalogue: D37 in the decisions table, a Decided (D37) line on TABLE-1, and three new features:
    • IS-325: the board scrolls within itself and grows when a card is dragged past its edge.
    • IS-326: off-screen cards are counted at the edge.
    • IS-327: an optional "see the whole board" overview, not the default.
  • Lane 4 has a new still, Prepped on a wide screen, played on a narrow one.
  • Rendering caught two faults, both fixed:
    • The Table stills outside the main frame used the page's light accent, so some labels were dark blue on navy. This was already live in lane 4's sweep stills.
    • Stacked headings in the open sections of lanes 3 and 4.

Lane 4 has no open questions left and awaits any further review. Next up: lane 5 (Prep), where scenes get built (PREP-1).

**D37 decided (lane 4 review), merged in #692 (631e911), deployed.** The GM's shelf stays **freeform**, not `look.html`'s reflowing grid, and **sideways scrolling is an officially supported way to get more room** on the board. This came from the question of what happens if a GM preps on a 4K monitor and plays on a 1080p one. The variable is CSS width, not resolution: a 4K monitor at 200% scaling is as wide as a 1080p one. Card positions were already screen-independent. What was missing is deliberate scrolling: today the whole page scrolls rather than the board, and nothing marks a card that is off-screen. - Catalogue: D37 in the decisions table, a `Decided (D37)` line on TABLE-1, and three new features: - **IS-325**: the board scrolls within itself and grows when a card is dragged past its edge. - **IS-326**: off-screen cards are counted at the edge. - **IS-327**: an optional "see the whole board" overview, not the default. - Lane 4 has a new still, *Prepped on a wide screen, played on a narrow one*. - Rendering caught two faults, both fixed: - The Table stills outside the main frame used the page's light accent, so some labels were dark blue on navy. This was already live in lane 4's sweep stills. - Stacked headings in the open sections of lanes 3 and 4. Lane 4 has no open questions left and awaits any further review. Next up: lane 5 (Prep), where scenes get built (PREP-1).
Author
Collaborator

Lane 5 — Prep (PREP-1/2/3): scoped and decided with the owner, now drawing. It will be recorded as D38–D44.

  • The plan (D38): today's Session Prep generator (strong start, scenes, secrets & clues, NPCs, loose ends) becomes its own section of the sheet, under Beats. It is drafted from everything above it and can be redrafted.
  • What's kept, and what "pin" means (D39): anything in the sheet is kept with that session for good. Pin means carry forward: a pinned item appears on every later session's sheet until unpinned, and stays on the sheets it was pinned across. This is the model the shelf already uses (ShelfPin, an interval over the session timeline, #254), extended to the sheet, so an item and its shelf card share one pin. Generation history's retention-only "pin" goes away; history keeps its 30-day rule for runs that never reached a sheet.
  • Autosave (D40), with the existing conflict protection.
  • A campaign-wide planning page (D41), drawn to be judged. It holds sessions ahead, what's carried forward, the scene library with Foundry pairing, story arcs, and work not yet for any session. The owner will decide on seeing it.
  • Phone (D42): the same sheet in one column, with tools behind a Tools button.
  • Scenes (D43) are built in the sheet's Shelf section (empty is fine, pair with a Foundry map). Arranging cards on the board stays in Table mode.
  • "At the table" drawer → "Improv" (D44). It clashed with Table mode.

Calls accepted without change:

  • Beat Planner folds into Beats. That resolves #534's last design item.
  • The arc and quest drawers show what's open; full editing moves to their homes.
  • "Add to shelf" targets this sheet's session.
  • Series titles becomes "Suggest a title".
  • Names joins the shared pipeline.
  • History delete gets an Undo.
  • Rules & bestiary and Wiki drawers are added as Design A draws them.

Filed along the way: #693, a live bug where Re-open on a Names history row opens a blank tool.

**Lane 5 — Prep (PREP-1/2/3): scoped and decided with the owner, now drawing.** It will be recorded as D38–D44. - **The plan (D38):** today's Session Prep generator (strong start, scenes, secrets & clues, NPCs, loose ends) becomes its own section of the sheet, under Beats. It is drafted from everything above it and can be redrafted. - **What's kept, and what "pin" means (D39):** anything in the sheet is kept with that session for good. **Pin means carry forward:** a pinned item appears on every later session's sheet until unpinned, and stays on the sheets it was pinned across. This is the model the shelf already uses (`ShelfPin`, an interval over the session timeline, #254), extended to the sheet, so an item and its shelf card share one pin. Generation history's retention-only "pin" goes away; history keeps its 30-day rule for runs that never reached a sheet. - **Autosave (D40)**, with the existing conflict protection. - **A campaign-wide planning page (D41), drawn to be judged.** It holds sessions ahead, what's carried forward, the scene library with Foundry pairing, story arcs, and work not yet for any session. The owner will decide on seeing it. - **Phone (D42):** the same sheet in one column, with tools behind a Tools button. - **Scenes (D43)** are built in the sheet's Shelf section (empty is fine, pair with a Foundry map). Arranging cards on the board stays in Table mode. - **"At the table" drawer → "Improv" (D44).** It clashed with Table mode. Calls accepted without change: - Beat Planner folds into Beats. That resolves #534's last design item. - The arc and quest drawers show what's open; full editing moves to their homes. - "Add to shelf" targets this sheet's session. - Series titles becomes "Suggest a title". - Names joins the shared pipeline. - History delete gets an Undo. - Rules & bestiary and Wiki drawers are added as Design A draws them. Filed along the way: **#693**, a live bug where Re-open on a Names history row opens a blank tool.
Author
Collaborator

Lane 5 — Prep is drawn, merged in #694 (62c0a24) and deployed at /prototype/lane5.

The page draws the full sheet and each of D38–D44 in turn.

  • Open for the owner: D41, the campaign-wide planning page. It is drawn with five things in it: the sessions ahead, everything pinned, the scenes and their Foundry maps, the story arcs, and prep kept for no session yet. Its catalogue rows follow the decision.
  • Rendering caught nine faults, all fixed and listed on the page.

Next: lane 6 (wiki, discussions and safety), which also picks up SESS-6's Talk tab (D32).

**Lane 5 — Prep is drawn, merged in #694 (62c0a24) and deployed** at `/prototype/lane5`. The page draws the full sheet and each of D38–D44 in turn. - **Open for the owner:** D41, the campaign-wide planning page. It is drawn with five things in it: the sessions ahead, everything pinned, the scenes and their Foundry maps, the story arcs, and prep kept for no session yet. Its catalogue rows follow the decision. - **Rendering caught nine faults,** all fixed and listed on the page. Next: lane 6 (wiki, discussions and safety), which also picks up SESS-6's Talk tab (D32).
Author
Collaborator

Lanes 1b and 2c: the surfaces no lane owned (#696). Scoped and decided with the owner; now drawing.

Lane 1b covers Home and you (HOME-1–7). Lane 2c covers the rest of a campaign: CAMP-4–7 and the shared patterns in SH-7.

  • D45: a member reads the campaign's name, system and description on This week, not in Settings. Drawn in the lane 2 backfill.

  • D46, starting a campaign: a New campaign page that opens on a choice: blank, from a template, a one-shot, or import a file. Join stays a small form on Home.

  • D47, Storyline: two parts. The story is in chapters, generated, and the GM edits it. The timeline holds sessions, milestones and wiki events, one line each, and is filterable. Milestones become timeline entries. The journal goes, since notes live on each session (D30), and the wiki pieces go to the wiki.

  • D48, notification settings: a grid of the four categories against the three channels.

    • A channel appears only when it can work: email only if the instance can send mail, Discord DM only once the account is linked.
    • In-app is always on.
    • The weekly digest is an email option.
    • Per-campaign mutes are listed below the grid.
  • D49, Plan & billing: drawn now, provisional (the owner may change it after seeing it), using the owner's placeholder prices:

    • $4 a month per campaign slot, with no AI features included;
    • AI credits at $1 for 60;
    • an hour of transcription and summary costs 60 credits, and the other AI features cost fewer.

    This sits inside #642's model: slots are on the owner's plan, there is no free tier, and self-hosted instances show no billing at all.

Calls accepted:

  • Profile becomes one page in sections, with a D21 sub-list.
  • Archived and binned campaigns fold away at the foot of Home.
  • A pasted invite link in Join takes the invite-landing path.
  • Recurring series are managed from the Sessions list and from any of their sessions.
  • SH-7 is drawn as a patterns sheet, with no toasts.
**Lanes 1b and 2c: the surfaces no lane owned (#696). Scoped and decided with the owner; now drawing.** Lane 1b covers Home and you (HOME-1–7). Lane 2c covers the rest of a campaign: CAMP-4–7 and the shared patterns in SH-7. - **D45:** a member reads the campaign's name, system and description on This week, not in Settings. Drawn in the lane 2 backfill. - **D46, starting a campaign:** a **New campaign page** that opens on a choice: blank, from a template, a one-shot, or import a file. Join stays a small form on Home. - **D47, Storyline:** two parts. **The story** is in chapters, generated, and the GM edits it. **The timeline** holds sessions, milestones and wiki events, one line each, and is filterable. Milestones become timeline entries. The journal goes, since notes live on each session (D30), and the wiki pieces go to the wiki. - **D48, notification settings:** a grid of the four categories against the three channels. - A channel appears only when it can work: email only if the instance can send mail, Discord DM only once the account is linked. - In-app is always on. - The weekly digest is an email option. - Per-campaign mutes are listed below the grid. - **D49, Plan & billing:** drawn now, **provisional** (the owner may change it after seeing it), using the owner's placeholder prices: - **$4 a month per campaign slot**, with no AI features included; - AI credits at **$1 for 60**; - **an hour of transcription and summary costs 60 credits**, and the other AI features cost fewer. This sits inside #642's model: slots are on the owner's plan, there is no free tier, and self-hosted instances show no billing at all. Calls accepted: - Profile becomes one page in sections, with a D21 sub-list. - Archived and binned campaigns fold away at the foot of Home. - A pasted invite link in Join takes the invite-landing path. - Recurring series are managed from the Sessions list and from any of their sessions. - SH-7 is drawn as a patterns sheet, with no toasts.
Author
Collaborator

Lane 7 — Admin — drawn, merged and deployed (PR #710, bc883f8)

At https://questboard-dev.rhoving.com/feedback/prototype/lane7. ?only=<id> shows one screen alone (nav, users, camps, rec, backup, packs, notices, ai, usage, discord, email, health, audit, import, plans, open), &theme=light for the light theme.

Fourteen surfaces, 179 placements, and Design A drew none of them. Four have a server behind them and no screen at all: Campaigns, Content notices, Instance health, and the summary-mode switch.

What it commits to

  • Admin becomes a place in Home's Contents that opens into its sections, the shape D21 settled for Settings and Profile. The ten tabs go, and an index says how each section stands — so the failed backup and the open rightsholder notice are the first things an administrator sees.
  • Bot Settings' forty-nine fields split three ways: AI models (what they can do, the two models, how the work is done, campaigns' own), AI usage & speed (the measurement and the bill), and Discord (the bot). Notification Settings loses the fallback webhook to Discord and becomes Email.
  • Every Test works on what is typed, saved or not. Today an AI test only appears once a provider has been saved, so there is no way to check before committing.
  • An account that owns a campaign is sent to hand it on, from a new Campaigns section. Today the delete dialog tells the administrator to call PUT /api/admin/campaigns/{id}/owner by hand.
  • The audit log filters by names and dates, not ids, and a row's detail reads as labelled lines with the stored record one click further.
  • Back up now doesn't ask — nothing is lost — while capping a campaign's retention does, naming what would go and offering an export first (D12).
  • The default for audio is "bin it once the summary is approved", which is when audio stops being needed today. "Once transcribed" would bin it before a GM has checked it.

Two things the drawing had to be honest about

  • Map images are not known to be in a backup (IS-081), so the page says so rather than implying they are covered.
  • A self-hosted server has no Plans & entitlements section. #642 has no rows yet, so it is drawn as a placeholder only.

Coverage

coverage/lane7.py: 179 placements, none missing — 154 drawn, 17 replaced by a decision or a proposal, 8 belonging to another surface. All ten coverage scripts pass against the rebuilt catalogue.

Rendering caught eight faults

Three were drawing faults (Admin's sub-list vanishing on its own section pages, backup runs listed oldest-first, a still whose markup collapsed the grid beneath it); five were made-up facts that contradicted the rest of the prototype — a session shown transcribing before it has been played, audio shown binned in a campaign that keeps it 90 days, a campaign's retention disagreeing with its own cap dialog, an entity escaped twice, and import outcomes naming lane 2b's campaign packs.

Next: lane 8, outside the app (EXT-1 to EXT-8) — Discord's commands, posts, reactions and DMs, email, calendars and the installed app. It is drawn and render-checked; 71 placements, none missing.

Still not drawn anywhere: the ten public pages, PUB-1 to PUB-10. This issue's plan put them in lane 1 ("shell, Home, public pages") but lane 1 drew only the shell, and #696's orphan sweep did not list them. They are sign in, sign-in failed, the invite landing, the public analytics share, Help, Licences & notices, not-found/crash/offline, first-run setup, the Discord link result pages, and the accessibility statement. I'll draw them as their own lane after lane 8 unless you'd rather they came first.

## Lane 7 — Admin — drawn, merged and deployed (PR #710, bc883f8) At **https://questboard-dev.rhoving.com/feedback/prototype/lane7**. `?only=<id>` shows one screen alone (`nav`, `users`, `camps`, `rec`, `backup`, `packs`, `notices`, `ai`, `usage`, `discord`, `email`, `health`, `audit`, `import`, `plans`, `open`), `&theme=light` for the light theme. Fourteen surfaces, 179 placements, and **Design A drew none of them**. Four have a server behind them and no screen at all: Campaigns, Content notices, Instance health, and the summary-mode switch. ### What it commits to - **Admin becomes a place in Home's Contents that opens into its sections**, the shape D21 settled for Settings and Profile. The ten tabs go, and an index says how each section stands — so the failed backup and the open rightsholder notice are the first things an administrator sees. - **Bot Settings' forty-nine fields split three ways**: AI models (what they can do, the two models, how the work is done, campaigns' own), AI usage & speed (the measurement and the bill), and Discord (the bot). Notification Settings loses the fallback webhook to Discord and becomes Email. - **Every Test works on what is typed**, saved or not. Today an AI test only appears once a provider has been saved, so there is no way to check before committing. - **An account that owns a campaign is sent to hand it on**, from a new Campaigns section. Today the delete dialog tells the administrator to call `PUT /api/admin/campaigns/{id}/owner` by hand. - **The audit log filters by names and dates**, not ids, and a row's detail reads as labelled lines with the stored record one click further. - **Back up now doesn't ask** — nothing is lost — while capping a campaign's retention does, naming what would go and offering an export first (D12). - **The default for audio is "bin it once the summary is approved"**, which is when audio stops being needed today. "Once transcribed" would bin it before a GM has checked it. ### Two things the drawing had to be honest about - **Map images are not known to be in a backup** (`IS-081`), so the page says so rather than implying they are covered. - **A self-hosted server has no Plans & entitlements section.** #642 has no rows yet, so it is drawn as a placeholder only. ### Coverage `coverage/lane7.py`: **179 placements, none missing** — 154 drawn, 17 replaced by a decision or a proposal, 8 belonging to another surface. All ten coverage scripts pass against the rebuilt catalogue. ### Rendering caught eight faults Three were drawing faults (Admin's sub-list vanishing on its own section pages, backup runs listed oldest-first, a still whose markup collapsed the grid beneath it); five were made-up facts that contradicted the rest of the prototype — a session shown transcribing before it has been played, audio shown binned in a campaign that keeps it 90 days, a campaign's retention disagreeing with its own cap dialog, an entity escaped twice, and import outcomes naming lane 2b's campaign packs. **Next: lane 8, outside the app** (EXT-1 to EXT-8) — Discord's commands, posts, reactions and DMs, email, calendars and the installed app. It is drawn and render-checked; 71 placements, none missing. **Still not drawn anywhere: the ten public pages, PUB-1 to PUB-10.** This issue's plan put them in lane 1 ("shell, Home, public pages") but lane 1 drew only the shell, and #696's orphan sweep did not list them. They are sign in, sign-in failed, the invite landing, the public analytics share, Help, Licences & notices, not-found/crash/offline, first-run setup, the Discord link result pages, and the accessibility statement. I'll draw them as their own lane after lane 8 unless you'd rather they came first.
Author
Collaborator

Lane 8 — outside the app — drawn, merged and deployed (PR #711, 68de545)

At https://questboard-dev.rhoving.com/feedback/prototype/lane8. ?only=<id> shows one screen alone (ext1, ext2, ext3, ext4, ext5, ext6, ext7, ext8, open), &theme=light for the light theme.

That is all eight lanes drawn. Seventy-one placements here, across Discord's commands, posts, reactions and direct messages, email, calendars, the installed app, and Foundry (which has nothing to draw yet).

What it commits to

  • One shape for every channel post: a coloured edge for its kind, the kind first in the title, the facts as fields, and one link back — left out entirely on a server with no public address. Today each post has its own emoji and its own shape.
  • A post meant for the GM goes to the GM. "Session at risk", "summarisation failed" and "this audio is about to be deleted" are GM-facing and posted publicly today; they arrive by direct message where the GM has linked Discord.
  • Times are Discord timestamps, so every reader sees their own zone. D17 arrives for free in Discord and from the profile in email.
  • Every post says what its reactions mean, because taking a reaction off a time means "no", not "undo" — and "maybe" gets a ❔, which Discord has no way to say today.
  • Every email can be stopped in one click, where today there is a sentence naming a setting.
  • The recording announcement is drawn as what it is: the one requirement of this project's standing-consent model.

The failure messages are the bulk of it

Six recording outcomes, the three ways a bot restart can leave a session (#393), four command failures that read differently because they are different, two reaction fallbacks, and the webhook's plain-text version for campaigns with no bot. Each says what happened and what to do next.

Coverage

coverage/lane8.py: 71 placements, none missing — 55 drawn, 3 replaced by a proposal, 7 belonging to another surface, 1 behaviour, and 5 deferred (the speculative Matrix and Element Call ideas, which the page names rather than draws).

Where the eight lanes stand

Lane Covers Placements
1 The shell 59
1b Home and you 113
2 · 2b · 2c A campaign, its Settings, the rest 117 · 147 · 106
3 The session lifecycle 238
4 The table 203
5 Prep 211
6a–6d Talking and the wiki 522
7 Admin 179
8 Outside the app 71

Next, and last: lane 1c, the public pages (PUB-1 to PUB-10) — the gap I flagged on #696. It is drawn and render-checked: 98 placements, none missing. It draws sign in, sign-in failed, an invitation, the shared analytics page, Help, licences and notices, not-found and the crash screens, setting up a new server, the Discord link pages, and the accessibility statement (D4).

## Lane 8 — outside the app — drawn, merged and deployed (PR #711, 68de545) At **https://questboard-dev.rhoving.com/feedback/prototype/lane8**. `?only=<id>` shows one screen alone (`ext1`, `ext2`, `ext3`, `ext4`, `ext5`, `ext6`, `ext7`, `ext8`, `open`), `&theme=light` for the light theme. **That is all eight lanes drawn.** Seventy-one placements here, across Discord's commands, posts, reactions and direct messages, email, calendars, the installed app, and Foundry (which has nothing to draw yet). ### What it commits to - **One shape for every channel post**: a coloured edge for its kind, the kind first in the title, the facts as fields, and one link back — left out entirely on a server with no public address. Today each post has its own emoji and its own shape. - **A post meant for the GM goes to the GM.** "Session at risk", "summarisation failed" and "this audio is about to be deleted" are GM-facing and posted publicly today; they arrive by direct message where the GM has linked Discord. - **Times are Discord timestamps**, so every reader sees their own zone. D17 arrives for free in Discord and from the profile in email. - **Every post says what its reactions mean**, because taking a reaction off a time means "no", not "undo" — and **"maybe" gets a ❔**, which Discord has no way to say today. - **Every email can be stopped in one click**, where today there is a sentence naming a setting. - **The recording announcement is drawn** as what it is: the one requirement of this project's standing-consent model. ### The failure messages are the bulk of it Six recording outcomes, the three ways a bot restart can leave a session (#393), four command failures that read differently because they *are* different, two reaction fallbacks, and the webhook's plain-text version for campaigns with no bot. Each says what happened and what to do next. ### Coverage `coverage/lane8.py`: **71 placements, none missing** — 55 drawn, 3 replaced by a proposal, 7 belonging to another surface, 1 behaviour, and 5 deferred (the speculative Matrix and Element Call ideas, which the page names rather than draws). ### Where the eight lanes stand | Lane | Covers | Placements | |---|---|---| | 1 | The shell | 59 | | 1b | Home and you | 113 | | 2 · 2b · 2c | A campaign, its Settings, the rest | 117 · 147 · 106 | | 3 | The session lifecycle | 238 | | 4 | The table | 203 | | 5 | Prep | 211 | | 6a–6d | Talking and the wiki | 522 | | 7 | Admin | 179 | | 8 | Outside the app | 71 | **Next, and last: lane 1c, the public pages** (PUB-1 to PUB-10) — the gap I flagged on #696. It is drawn and render-checked: 98 placements, none missing. It draws sign in, sign-in failed, an invitation, the shared analytics page, Help, licences and notices, not-found and the crash screens, setting up a new server, the Discord link pages, and the accessibility statement (D4).
Author
Collaborator

Lane 1c — the public pages — merged and deployed (PR #712, df11b84)

At https://questboard-dev.rhoving.com/feedback/prototype/lane1c. 98 placements, none missing.

With this, every catalogued surface is drawn. 103 surfaces, across fifteen pages, each with a coverage script that fails if a feature goes missing.

Lane Covers Placements
1 The shell 59
1b Home and you 113
1c The public pages 98
2 · 2b · 2c A campaign · Settings · the rest 117 · 147 · 106
3 The session lifecycle 238
4 The table 203
5 Prep 211
6a · 6b · 6c · 6d Talking · reading · writing · the party and its world 40 · 184 · 186 · 112
7 Admin 179
8 Outside the app 71

What is waiting on you

Everything below is drawn both ways, or drawn with a recommendation and marked on its page under "Proposed, and settled". Nothing here is settled, and each is a small edit to reverse.

Decisions drawn provisionally

  1. D41 — the campaign-wide planning page (lane 5). Drawn to be judged: sessions ahead, what is carried forward, the scene library, story arcs, and prep not yet for any session.
  2. D49 — Plan & billing (lane 1b, #642). Drawn with placeholder prices; no card details anywhere.
  3. WIKI-5 — who sees an article's History (lane 6b). Recommended: anyone who may edit the page, each version filtered as the page is. The alternative is today's rule — the GM, and a character's own player.

Proposed while drawing (23 items, all in headers.md)

Admin (lane 7) — Admin opens into sections in Home's Contents and the ten tabs go; Bot Settings splits into AI models, AI usage & speed and Discord; every Test works on what is typed; an account that owns a campaign is sent to hand it on; making someone an administrator asks, taking it away is undone; the audit log filters by name; Back up now does not ask; the default for audio is "bin it once the summary is approved".

Outside the app (lane 8) — one shape for every channel post; a post meant for the GM goes to the GM by direct message; a ❔ reaction for "maybe"; every post's footer says what its reactions mean; one-click unsubscribe on every email.

The public pages (lane 1c) — a real "not found" page instead of the double redirect; a session that ran out says so; the shared analytics header links somewhere a stranger can use; an invitation says whether the table records its sessions; first-run setup remembers every skipped step in Admin rather than nagging.

The wiki (lanes 6b–6d) — one Save for a whole page; facts and a timeline on every kind of page; :::for Ossian Vale blocks that follow the character; a player's suggestion arriving as a draft; revealing a GM-only map marker through lane 6a's picker; a quest page carrying its own threads.

Two open server questions the drawings depend on

  • IS-258 — whether an unfinished first-run setup blocks or reminds. Drawn as a reminder that does not nag.
  • IS-081 — whether map images are in backups. Nobody has checked, so lane 7 says so rather than implying they are covered.

What I would do next, unless you want something else first: the acceptance criteria on this issue end with writing the decisions into the brief (#361), ready for the design system (#364) and the build lanes (#366). That is now a real job: D1 to D61 plus the proposals above. I can start it whenever you say, but the review of what is drawn should come first, since it may change what gets written down.

## Lane 1c — the public pages — merged and deployed (PR #712, df11b84) At **https://questboard-dev.rhoving.com/feedback/prototype/lane1c**. 98 placements, none missing. **With this, every catalogued surface is drawn.** 103 surfaces, across fifteen pages, each with a coverage script that fails if a feature goes missing. | Lane | Covers | Placements | |---|---|---| | 1 | The shell | 59 | | 1b | Home and you | 113 | | **1c** | **The public pages** | **98** | | 2 · 2b · 2c | A campaign · Settings · the rest | 117 · 147 · 106 | | 3 | The session lifecycle | 238 | | 4 | The table | 203 | | 5 | Prep | 211 | | 6a · 6b · 6c · 6d | Talking · reading · writing · the party and its world | 40 · 184 · 186 · 112 | | 7 | Admin | 179 | | 8 | Outside the app | 71 | --- # What is waiting on you Everything below is drawn both ways, or drawn with a recommendation and marked on its page under "Proposed, and settled". Nothing here is settled, and each is a small edit to reverse. ### Decisions drawn provisionally 1. **D41 — the campaign-wide planning page** (lane 5). Drawn to be judged: sessions ahead, what is carried forward, the scene library, story arcs, and prep not yet for any session. 2. **D49 — Plan & billing** (lane 1b, #642). Drawn with placeholder prices; no card details anywhere. 3. **WIKI-5 — who sees an article's History** (lane 6b). Recommended: anyone who may edit the page, each version filtered as the page is. The alternative is today's rule — the GM, and a character's own player. ### Proposed while drawing (23 items, all in `headers.md`) **Admin (lane 7)** — Admin opens into sections in Home's Contents and the ten tabs go; Bot Settings splits into AI models, AI usage & speed and Discord; every Test works on what is typed; an account that owns a campaign is sent to hand it on; making someone an administrator asks, taking it away is undone; the audit log filters by name; Back up now does not ask; the default for audio is "bin it once the summary is approved". **Outside the app (lane 8)** — one shape for every channel post; a post meant for the GM goes to the GM by direct message; a ❔ reaction for "maybe"; every post's footer says what its reactions mean; one-click unsubscribe on every email. **The public pages (lane 1c)** — a real "not found" page instead of the double redirect; a session that ran out says so; the shared analytics header links somewhere a stranger can use; an invitation says whether the table records its sessions; first-run setup remembers every skipped step in Admin rather than nagging. **The wiki (lanes 6b–6d)** — one Save for a whole page; facts and a timeline on every kind of page; `:::for Ossian Vale` blocks that follow the character; a player's suggestion arriving as a draft; revealing a GM-only map marker through lane 6a's picker; a quest page carrying its own threads. ### Two open server questions the drawings depend on - **`IS-258`** — whether an unfinished first-run setup blocks or reminds. Drawn as a reminder that does not nag. - **`IS-081`** — whether map images are in backups. Nobody has checked, so lane 7 says so rather than implying they are covered. --- **What I would do next, unless you want something else first:** the acceptance criteria on this issue end with writing the decisions into the brief (#361), ready for the design system (#364) and the build lanes (#366). That is now a real job: D1 to D61 plus the proposals above. I can start it whenever you say, but the review of what is drawn should come first, since it may change what gets written down.
Author
Collaborator

Owner's review received 2026-09-20 (lanes 1c, 7, 8, and two general rules). Applying it now.

What it settles, to be recorded as D62–D67:

  • D62 — the front door. Signed out, the front page is a public site about Quest Board: what it is, how a night runs, a few live numbers from this server (campaigns running, and the like), and the way in. Sign in becomes a page behind it.
  • D63 — what is public. Help (the two guides), the accessibility statement, a privacy policy, and how to contact whoever runs the server are all readable signed out. The server administrator's guide is not in the app: it lives in the project's docs and wiki, and Admin links to it. Admin gains an About this server section holding the contact details and privacy policy, since they are the server's to set.
  • D64 — Licences & notices names no content. What a server has loaded could spoil a campaign. The public page carries a general notice and where to write if something is yours; each pack's required attribution appears where the content is read, to members only.
  • D65 — errors wear the world's colours. Still clear and readable, with a themed line on top; "You have strayed from the path" is the precedent.
  • D66 — how Quest Board talks. Human, semi-professional, a little humour, never corporate. A rule for the brief and the build; applied here to the pages touched.
  • D67 — instance-wide Discord never posts. Admin's Discord section keeps the bot, its token and its key, and checks the bot without posting anywhere. The fallback webhook and the test message to an arbitrary channel go; each campaign configures its own channel.

Also from the review: lane 8 stands as drawn (its five proposals taken as accepted); lane 7's Users table gets its padding fixed; and the question of a server owner who cannot step down or be removed gets a recommendation and a drawing, for you to answer.

Two open items closed by looking rather than asking: IS-081 — the scheduled backup is the database and the audio volume; uploaded images are not in it (OPERATIONS.md documents a manual tar), so lane 7's Backup page will say so and propose including them.

Next: the prototype index gets a review tracker (what is reviewed, what waits on you, and one clear question per open point), and the same questions are posted here when the PR lands.

**Owner's review received 2026-09-20 (lanes 1c, 7, 8, and two general rules). Applying it now.** What it settles, to be recorded as D62–D67: - **D62 — the front door.** Signed out, the front page is a public site about Quest Board: what it is, how a night runs, a few live numbers from this server (campaigns running, and the like), and the way in. Sign in becomes a page behind it. - **D63 — what is public.** Help (the two guides), the accessibility statement, a privacy policy, and how to contact whoever runs the server are all readable signed out. The server administrator's guide is not in the app: it lives in the project's docs and wiki, and Admin links to it. Admin gains an **About this server** section holding the contact details and privacy policy, since they are the server's to set. - **D64 — Licences & notices names no content.** What a server has loaded could spoil a campaign. The public page carries a general notice and where to write if something is yours; each pack's required attribution appears where the content is read, to members only. - **D65 — errors wear the world's colours.** Still clear and readable, with a themed line on top; "You have strayed from the path" is the precedent. - **D66 — how Quest Board talks.** Human, semi-professional, a little humour, never corporate. A rule for the brief and the build; applied here to the pages touched. - **D67 — instance-wide Discord never posts.** Admin's Discord section keeps the bot, its token and its key, and checks the bot without posting anywhere. The fallback webhook and the test message to an arbitrary channel go; each campaign configures its own channel. Also from the review: lane 8 stands as drawn (its five proposals taken as accepted); lane 7's Users table gets its padding fixed; and the question of a **server owner who cannot step down or be removed** gets a recommendation and a drawing, for you to answer. Two open items closed by looking rather than asking: **IS-081** — the scheduled backup is the database and the audio volume; uploaded images are not in it (OPERATIONS.md documents a manual tar), so lane 7's Backup page will say so and propose including them. Next: the prototype index gets a **review tracker** (what is reviewed, what waits on you, and one clear question per open point), and the same questions are posted here when the PR lands.
Author
Collaborator

The owner's review of 20 September is applied — PR #713, merged as c1aed7f and deployed

The prototype index is now the review tracker: https://questboard-dev.rhoving.com/feedback/prototype — where each lane stands, what waits on you, and the questions below.

What changed, by lane

  • 1c, the public pages — the front door (PUB-11: what Quest Board is, how a night runs, what you get, this server's numbers, who runs it), a privacy page (PUB-12), Licences & notices naming nothing a server loaded, the administrator's guide pointed at the project's wiki from Help, and the full-page stops in the world's voice (The gate stayed shut, There is no such place on the map, The page tripped over its own feet). Sign in is a page behind the front door.
  • 7, Admin — Users' padding fixed; About this server (ADMIN-15: name, who runs it, contact, the privacy policy's own words, the numbers switch, the administrator's guide link); Discord reduced to the bot, checked by asking Discord who the token belongs to, nothing on the page posts — the fallback webhook and the test message are gone, and Campaigns lists a channel-less campaign as "None — nothing is posted for it"; Backup says plainly that uploaded images are not in it (IS-081 checked, IS-396 proposes the media volume); a server owner drawn on Users for you to judge (Q1).
  • 2c, the patterns sheet — D65 drawn both ways (a full-page stop; a banner plain and a banner themed), and D66's before-and-afters.
  • 8 — stands as reviewed; its five proposals recorded as decided.
  • Everywhere — the footer gains Privacy (D15 amended).

Recorded: D62–D67 in the decisions table; IS-384 to IS-397; three new surfaces (PUB-11, PUB-12, ADMIN-15). Catalogue: 1,666 rows on 106 surfaces. Coverage: lane 1c 109, lane 7 189, lane 2b 149, lane 6d 113, none missing; all twelve scripts pass. Render-checked in dark and light.

One caution on D64 (licences): the ORC and CC BY licences want a pack's attribution shown where its material is used. Showing it to members at the foot of the rules chapter and in Content packs meets that without a public inventory — Q4 asks you to confirm that home.


Questions for you — a word or two each is enough

  1. Q1 · Lane 7 · Users — Should one account own the server? The first administrator from setup; nobody can remove or delete them; they hand the server on only by an offer another administrator accepts. Drawn on Users. Recommended: yes. — yes / no
  2. Q2 · Lanes 1c, 2c · Errors — Themed line on full-page stops only, or on banners too? Both drawn on lane 2c's patterns sheet. Recommended: stops only. — stops only / banners too
  3. Q3 · Lane 1c · The front door — Which numbers does it show? Drawn with campaigns running, sessions played, running since; never a campaign's or a person's name; switchable off in About this server. Recommended: all three. — all three / campaigns only / none
  4. Q4 · Lanes 1c, 6d, 2b · Licences — Is the attribution's new home right? Foot of the rules chapter and the campaign's Content packs, members only. Recommended: yes. — yes / somewhere else (say where)
  5. Q5 · Lane 5 · Prep — Does the campaign-wide planning page stay (D41)? — keep / drop / keep with changes (say which)
  6. Q6 · Lane 1b · Plan & billing — Does D49 stand as drawn? $4 a month per slot, credits $1 for 60, an hour of transcription 60 credits, no card details anywhere. — stands / change (say what)
  7. Q7 · Lane 6b · The wiki — Who sees an article's History? A: anyone who may edit the page, each version filtered as the page is. B: today's rule, the GM and a character's own player. Recommended: A. — A / B
  8. Q8 · Lane 6a · Talking — A GM sees every thread, including a player's "just you and the GM"? #593's model, as drawn. — yes / no
  9. Q9 · Lanes 1c, 6b, 6c, 6d, 7 · Proposals made while drawing — each page lists them under "Still proposed, for the owner's review". — accept all / name the ones to reverse
  10. Q10 · Lane 1c · Setting up a server — Does an unfinished setup remind, or block (IS-258)? Drawn as a reminder that does not nag. Recommended: reminds. — reminds / blocks

When you answer, each becomes the next D-number, the question leaves the tracker, and the lane page's "Reviewed, settled, and still open" section is updated.

## The owner's review of 20 September is applied — PR #713, merged as c1aed7f and deployed **The prototype index is now the review tracker:** https://questboard-dev.rhoving.com/feedback/prototype — where each lane stands, what waits on you, and the questions below. **What changed, by lane** - **1c, the public pages** — the **front door** (PUB-11: what Quest Board is, how a night runs, what you get, this server's numbers, who runs it), a **privacy page** (PUB-12), Licences & notices naming nothing a server loaded, the administrator's guide pointed at the project's wiki from Help, and the full-page stops in the world's voice (*The gate stayed shut*, *There is no such place on the map*, *The page tripped over its own feet*). Sign in is a page behind the front door. - **7, Admin** — Users' padding fixed; **About this server** (ADMIN-15: name, who runs it, contact, the privacy policy's own words, the numbers switch, the administrator's guide link); Discord reduced to the bot, checked by asking Discord who the token belongs to, **nothing on the page posts** — the fallback webhook and the test message are gone, and Campaigns lists a channel-less campaign as "None — nothing is posted for it"; Backup says plainly that uploaded images are not in it (IS-081 checked, IS-396 proposes the media volume); a **server owner** drawn on Users for you to judge (Q1). - **2c, the patterns sheet** — D65 drawn both ways (a full-page stop; a banner plain and a banner themed), and D66's before-and-afters. - **8** — stands as reviewed; its five proposals recorded as decided. - **Everywhere** — the footer gains Privacy (D15 amended). **Recorded:** D62–D67 in the decisions table; IS-384 to IS-397; three new surfaces (PUB-11, PUB-12, ADMIN-15). Catalogue: 1,666 rows on 106 surfaces. Coverage: lane 1c 109, lane 7 189, lane 2b 149, lane 6d 113, none missing; all twelve scripts pass. Render-checked in dark and light. **One caution on D64 (licences):** the ORC and CC BY licences want a pack's attribution shown where its material is used. Showing it to members at the foot of the rules chapter and in Content packs meets that without a public inventory — Q4 asks you to confirm that home. --- ## Questions for you — a word or two each is enough 1. **Q1 · Lane 7 · Users — Should one account own the server?** The first administrator from setup; nobody can remove or delete them; they hand the server on only by an offer another administrator accepts. Drawn on Users. *Recommended: yes.* — **yes / no** 2. **Q2 · Lanes 1c, 2c · Errors — Themed line on full-page stops only, or on banners too?** Both drawn on lane 2c's patterns sheet. *Recommended: stops only.* — **stops only / banners too** 3. **Q3 · Lane 1c · The front door — Which numbers does it show?** Drawn with campaigns running, sessions played, running since; never a campaign's or a person's name; switchable off in About this server. *Recommended: all three.* — **all three / campaigns only / none** 4. **Q4 · Lanes 1c, 6d, 2b · Licences — Is the attribution's new home right?** Foot of the rules chapter and the campaign's Content packs, members only. *Recommended: yes.* — **yes / somewhere else (say where)** 5. **Q5 · Lane 5 · Prep — Does the campaign-wide planning page stay (D41)?** — **keep / drop / keep with changes (say which)** 6. **Q6 · Lane 1b · Plan & billing — Does D49 stand as drawn?** $4 a month per slot, credits $1 for 60, an hour of transcription 60 credits, no card details anywhere. — **stands / change (say what)** 7. **Q7 · Lane 6b · The wiki — Who sees an article's History?** A: anyone who may edit the page, each version filtered as the page is. B: today's rule, the GM and a character's own player. *Recommended: A.* — **A / B** 8. **Q8 · Lane 6a · Talking — A GM sees every thread, including a player's "just you and the GM"?** #593's model, as drawn. — **yes / no** 9. **Q9 · Lanes 1c, 6b, 6c, 6d, 7 · Proposals made while drawing** — each page lists them under "Still proposed, for the owner's review". — **accept all / name the ones to reverse** 10. **Q10 · Lane 1c · Setting up a server — Does an unfinished setup remind, or block (IS-258)?** Drawn as a reminder that does not nag. *Recommended: reminds.* — **reminds / blocks** When you answer, each becomes the next D-number, the question leaves the tracker, and the lane page's "Reviewed, settled, and still open" section is updated.
Author
Collaborator

Your ten answers and the lane 5/6 reviews are recorded and drawn — PR #721, merged and deployed

Decided, D68–D73

  • D68 One account owns the server: the first administrator from setup; nobody can remove or delete it; it hands the server on by an offer another administrator accepts. Now decided on Users and About this server.
  • D69 Anyone who may edit a page sees its History, each version filtered as the page is.
  • D70 An unfinished setup reminds, never blocks (IS-258).
  • D71 D49 stands, and every price is an instance setting: drawn in Admin → Plans & entitlements on the hosted service (the slot, the credits, what each AI feature costs), read by Plan & billing so nothing is typed twice.
  • D72 Two pages with one name go Wikipedia's way. The editor says what will happen — Kettlebridge (town), the boat's page renamed Kettlebridge (boat) — and the bare name becomes a disambiguation page listing both, so a saved link still lands somewhere useful. Drawn in lane 6c under A new page.
  • D73 A stat block is a full, system-specific character sheet — every field of the standard and extended sheet for NPCs and player characters; items, weapons and spells from the loaded content with their full descriptions and stats; a backstory kept on the page; rolling at creation. Lane 6c's editor is marked as a start. Lane 9 is opened as #720: research the real sheets first, then design (new surface WIKI-19, IS-400 to IS-403).

Confirmed or amended: D41 keep; D62 all three numbers; D64's home confirmed, and Licences & notices reworded to say the simple thing — Quest Board does not come with game rules; the people running each game add content they are licensed to use; a rightsholder who finds content used without a proper licence can ask for it to be removed; D65 stops only (the themed banner stays on the patterns sheet as the road not taken); D66 gains concise — "Message" replaces "More, if it helps" on the new-thread form; a GM seeing every thread confirmed. Every proposal made while drawing is accepted: the fifteen "Proposed … for the owner's review" lines are Decided in the catalogue, and each lane page's section says so. Lanes 5 and 6d: no changes.

The tracker at https://questboard-dev.rhoving.com/feedback/prototype now shows every lane reviewed, no question open, lane 9 not started, and what is new since your last look (the licences wording, the prices form, the naming stills, the Message label).

Catalogue: 1,672 rows on 107 surfaces; all twelve coverage scripts pass (lane 6b 185, 6c 187, 7 190).

What comes next is your call: lane 9's research and design (#720), or writing D1–D73 into the brief (#361) first, ready for the design system (#364) and the build lanes (#366).

## Your ten answers and the lane 5/6 reviews are recorded and drawn — PR #721, merged and deployed **Decided, D68–D73** - **D68** One account owns the server: the first administrator from setup; nobody can remove or delete it; it hands the server on by an offer another administrator accepts. Now decided on Users and About this server. - **D69** Anyone who may edit a page sees its History, each version filtered as the page is. - **D70** An unfinished setup reminds, never blocks (IS-258). - **D71** D49 stands, and **every price is an instance setting**: drawn in Admin → Plans & entitlements on the hosted service (the slot, the credits, what each AI feature costs), read by Plan & billing so nothing is typed twice. - **D72** Two pages with one name go Wikipedia's way. The editor says what will happen — *Kettlebridge (town)*, the boat's page renamed *Kettlebridge (boat)* — and the bare name becomes a **disambiguation page** listing both, so a saved link still lands somewhere useful. Drawn in lane 6c under A new page. - **D73** A stat block is a **full, system-specific character sheet** — every field of the standard and extended sheet for NPCs and player characters; items, weapons and spells from the loaded content with their full descriptions and stats; a backstory kept on the page; rolling at creation. Lane 6c's editor is marked as a start. **Lane 9** is opened as **#720**: research the real sheets first, then design (new surface WIKI-19, IS-400 to IS-403). **Confirmed or amended:** D41 keep; D62 all three numbers; D64's home confirmed, and **Licences & notices reworded** to say the simple thing — Quest Board does not come with game rules; the people running each game add content they are licensed to use; a rightsholder who finds content used without a proper licence can ask for it to be removed; D65 stops only (the themed banner stays on the patterns sheet as the road not taken); D66 gains *concise* — **"Message"** replaces "More, if it helps" on the new-thread form; a GM seeing every thread confirmed. **Every proposal made while drawing is accepted**: the fifteen "Proposed … for the owner's review" lines are Decided in the catalogue, and each lane page's section says so. Lanes 5 and 6d: no changes. **The tracker** at https://questboard-dev.rhoving.com/feedback/prototype now shows every lane reviewed, **no question open**, lane 9 not started, and what is new since your last look (the licences wording, the prices form, the naming stills, the Message label). **Catalogue:** 1,672 rows on 107 surfaces; all twelve coverage scripts pass (lane 6b 185, 6c 187, 7 190). **What comes next is your call:** lane 9's research and design (#720), or writing D1–D73 into the brief (#361) first, ready for the design system (#364) and the build lanes (#366).
Author
Collaborator

Lane 9 drawn and deployed (PR #723, merged 2026-09-21). Stat blocks and character sheets, the last lane: every one of the 107 surfaces now has a drawing.

  • Live at /feedback/prototype/lane9; the tracker on /feedback/prototype marks it "Drawn 21 Sep, awaiting you" with Q11 to Q15 for the owner.
  • The shape is docs/design/character-sheets-spec.md; the twelve proposed decisions D74 to D85 and the questions are summarised on #720, which stays open for the owner's review.
  • Catalogue rebuilt to 1,705 rows; IS-404 to IS-436 on WIKI-19 with seams on WIKI-3, WIKI-7, TABLE-1, PREP-2, WIKI-15, ADMIN-11 and CAMP-8; all thirteen coverage scripts pass.
  • Review site redeployed after a volume backup (qb-feedback-data-20260921T200500Z.tgz, 6 responses); container healthy; the two lanes checked return 200.

Open on this issue: the owner's review of lane 9 (D74 to D85, Q11 to Q15) and the "agreed" on the brief (#361).

**Lane 9 drawn and deployed (PR #723, merged 2026-09-21).** Stat blocks and character sheets, the last lane: every one of the 107 surfaces now has a drawing. - Live at `/feedback/prototype/lane9`; the tracker on `/feedback/prototype` marks it "Drawn 21 Sep, awaiting you" with **Q11 to Q15** for the owner. - The shape is `docs/design/character-sheets-spec.md`; the twelve proposed decisions D74 to D85 and the questions are summarised on #720, which stays open for the owner's review. - Catalogue rebuilt to 1,705 rows; `IS-404` to `IS-436` on WIKI-19 with seams on WIKI-3, WIKI-7, TABLE-1, PREP-2, WIKI-15, ADMIN-11 and CAMP-8; all thirteen coverage scripts pass. - Review site redeployed after a volume backup (`qb-feedback-data-20260921T200500Z.tgz`, 6 responses); container healthy; the two lanes checked return 200. Open on this issue: the owner's review of lane 9 (D74 to D85, Q11 to Q15) and the "agreed" on the brief (#361).
Author
Collaborator

Lane 9 reviewed and closed (PR #724, merged 2026-09-21; #720 closed). Every lane is now drawn and reviewed, and no question is open.

The owner's review: "Looks great", with two asks and five answers, all applied and live on the review site:

  • Levelling up on the sheet (IS-437, D78 amended): the definition's levels table walked in order, What changes before it applies, a version kept first; drawn for PF2e (Ossian's level 7) and 5e (Tam's level 4).
  • Every computed value shown once, its components smaller beneath.
  • Q11 to Q14 yes; Q15: rolling during play is Foundry's, not Quest Board's — D85 replaced, roll buttons gone. D74 to D85 are recorded as the owner's decisions.

Catalogue at 1,706 rows on 107 surfaces; all thirteen coverage scripts pass. Review site redeployed after a volume backup (6 responses intact); the tracker shows lane 9 reviewed and nothing waiting.

Still open on this issue: only the owner's "agreed" on the brief (#361), which is the handoff to the build.

**Lane 9 reviewed and closed (PR #724, merged 2026-09-21; #720 closed).** Every lane is now drawn and reviewed, and no question is open. The owner's review: "Looks great", with two asks and five answers, all applied and live on the review site: - **Levelling up on the sheet** (`IS-437`, D78 amended): the definition's levels table walked in order, What changes before it applies, a version kept first; drawn for PF2e (Ossian's level 7) and 5e (Tam's level 4). - **Every computed value shown once**, its components smaller beneath. - **Q11 to Q14 yes**; Q15: rolling during play is Foundry's, not Quest Board's — D85 replaced, roll buttons gone. D74 to D85 are recorded as the owner's decisions. Catalogue at 1,706 rows on 107 surfaces; all thirteen coverage scripts pass. Review site redeployed after a volume backup (6 responses intact); the tracker shows lane 9 reviewed and nothing waiting. Still open on this issue: only the owner's "agreed" on the brief (#361), which is the handoff to the build.
Author
Collaborator

Every surface, checked row by row now (PR #725, merged 2026-09-21). The owner asked whether every surface is covered and whether anything is missing.

  • Every one of the 107 surfaces was already drawn on a lane page. But three lanes — 1b (Home and you), 2c (the rest of a campaign) and 5 (Prep), 445 placements between them — had never had the row-level check the other lanes have. They have it now: coverage/lane1b.py, lane2c.py and lane5.py, written by a strict audit and committed, so all sixteen scripts exist and pass.
  • The audit found 26 placements counted "drawn" without a still (7, 3 and 16), mostly empty, busy and failed states, plus a few whole features: the star-and-wish prompt on Home (IS-213), calendar invites as a row of the notification grid (SH-133), a plan with no slots, the milestone edit in full, sessions in the last 30 days, the article picker inside a tool (PR-138), and Planning for a campaign just started. All drawn, and live on the review site (each page's coverage paragraph says what the second pass found).
  • The brief (#361) now carries lane 9: a seventh journey, the sheet's words, §7.11 with D74 to D85, the sheet's components in §8; lane 9 is out of its open list.

So the answer is: every surface is drawn, every lane is verified row by row against the live catalogue, and the brief is complete through D85. Nothing on this issue waits on drawing. What remains is the owner's "agreed" on the brief.

**Every surface, checked row by row now (PR #725, merged 2026-09-21).** The owner asked whether every surface is covered and whether anything is missing. - Every one of the 107 surfaces was already drawn on a lane page. But three lanes — 1b (Home and you), 2c (the rest of a campaign) and 5 (Prep), 445 placements between them — had never had the row-level check the other lanes have. They have it now: `coverage/lane1b.py`, `lane2c.py` and `lane5.py`, written by a strict audit and committed, so all sixteen scripts exist and pass. - The audit found **26 placements counted "drawn" without a still** (7, 3 and 16), mostly empty, busy and failed states, plus a few whole features: the star-and-wish prompt on Home (`IS-213`), calendar invites as a row of the notification grid (`SH-133`), a plan with no slots, the milestone edit in full, sessions in the last 30 days, the article picker inside a tool (`PR-138`), and Planning for a campaign just started. **All drawn**, and live on the review site (each page's coverage paragraph says what the second pass found). - The brief (#361) now carries lane 9: a seventh journey, the sheet's words, §7.11 with D74 to D85, the sheet's components in §8; lane 9 is out of its open list. So the answer is: every surface is drawn, every lane is verified row by row against the live catalogue, and the brief is complete through D85. Nothing on this issue waits on drawing. What remains is the owner's "agreed" on the brief.
Author
Collaborator

Drawn after the fact (PR #1047, merged 2026-10-03): five surfaces that were built from review notes without a drawing are now in the prototype, as built, and their ledger entries are flipped to drawn.

Row Origin Where it is drawn
IS-465 #680 lane 3 #review
IS-471 #872 lane 7 #camps
IS-472 #1020 lane 5 #tools and #phone
IS-475 #1020 lane 5 #scenes
IS-476 #1020 lane 3 #read and #review

Every coverage script passes with nothing unclassified.

Still on the old wording (noticed, not changed):

  • Lane 3 says "Approve the transcript" where the app says "Approve…".
  • Lane 4 and lane4.py's IS-476 entry still say "End of session…" where the app says "Sweep the shelf…".
**Drawn after the fact** (PR #1047, merged 2026-10-03): five surfaces that were built from review notes without a drawing are now in the prototype, as built, and their ledger entries are flipped to drawn. | Row | Origin | Where it is drawn | |---|---|---| | IS-465 | #680 | lane 3 `#review` | | IS-471 | #872 | lane 7 `#camps` | | IS-472 | #1020 | lane 5 `#tools` and `#phone` | | IS-475 | #1020 | lane 5 `#scenes` | | IS-476 | #1020 | lane 3 `#read` and `#review` | Every coverage script passes with nothing unclassified. **Still on the old wording** (noticed, not changed): - Lane 3 says "Approve the transcript" where the app says "Approve…". - Lane 4 and `lane4.py`'s IS-476 entry still say "End of session…" where the app says "Sweep the shelf…".
Author
Collaborator

Owner's answer to Q148 (T18), 2026-10-04: (a), as recommended. The app is right in both places, and the drawings change to match:

  • lane 3's Review draws "Approve…" in place of "Approve the transcript";
  • lane 4's table bar draws "Sweep the shelf…" in place of "End of session…", and lane4.py's IS-476 entry follows.

To be recorded as D276. It will be done once the phone-table drawing (Q143 and Q144, also in lane 4's page) has merged, so the two changes to that page don't collide.

**Owner's answer to Q148 (T18), 2026-10-04: (a), as recommended.** The app is right in both places, and the drawings change to match: - lane 3's Review draws "Approve…" in place of "Approve the transcript"; - lane 4's table bar draws "Sweep the shelf…" in place of "End of session…", and `lane4.py`'s IS-476 entry follows. To be recorded as D276. It will be done once the phone-table drawing (Q143 and Q144, also in lane 4's page) has merged, so the two changes to that page don't collide.
Author
Collaborator

D276 carried into the prototype: merged as PR #1067.

  • Lane 3: the transcript and summary buttons read "Approve…".
  • Lane 4: the shelf action reads "Sweep the shelf…".
  • coverage/lane4.py, the IS ledger and the rebuilt catalogue match.

CI was green on the PR's head before the merge.

One thing left for the owner: "Sweep the shelf…" wraps at 390 px. Whether to tighten it is listed on the Build Status page.

**D276 carried into the prototype: merged as PR #1067.** - Lane 3: the transcript and summary buttons read "Approve…". - Lane 4: the shelf action reads "Sweep the shelf…". - `coverage/lane4.py`, the IS ledger and the rebuilt catalogue match. CI was green on the PR's head before the merge. One thing left for the owner: "Sweep the shelf…" wraps at 390 px. Whether to tighten it is listed on the Build Status page.
Author
Collaborator

Closing with the v4.5.0 milestone (owner, 17 Oct 2026). Every catalogued surface was drawn, reviewed and built for 4.5.0. The catalogue (docs/design/redesign-surfaces/CATALOGUE.md) stays the record.

Closing with the v4.5.0 milestone (owner, 17 Oct 2026). Every catalogued surface was drawn, reviewed and built for 4.5.0. The catalogue (docs/design/redesign-surfaces/CATALOGUE.md) stays the record.
Sign in to join this conversation.
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#659
No description provided.