Lane 2 of the surface mockups — the campaign core (#659) #673

Merged
claude-bot merged 1 commit from feat/659-lane2-campaign-core into main 2026-09-16 16:55:58 +00:00
Collaborator

Lane 2 of the mockup pass: This week, the sessions list, making a session, and members & characters, plus the two pieces of chrome that belong to a campaign rather than to the app — the live-session bar (SH-6) and the banners (SH-8). Settings gets its frame and two of its nine sections drawn whole; the other seven are lane 2b.

Live at /feedback/prototype/lane2. ?only=<section> shows one section on its own, for linking.

Scope

Surface Rows
CAMP-1 This week 8
CAMP-2 Sessions list 21
CAMP-3 New / edit session 19
CAMP-8 Members & characters 38
SH-6 Live-session bar 0 → 6
SH-8 Campaign banners 7
CAMP-9 / CAMP-12, plus the frame 23 of 109

The full lane as originally scoped was 15 surfaces and 202 rows, with Settings alone accounting for 109 across nine sections. The owner chose to split it: the core now, the remaining seven settings sections as lane 2b.

Catalogue corrections

#659 requires a surface's rows to be right before it is drawn. Three were not.

CAMP-1 could not be drawn from its own rows. Design A's screen 2 — the drawing CAMP-1 is — shows "Are you in?" with the roster and count, and Add to calendar. SE-025, SE-026, SE-027, SE-147–SE-150, IS-011 and IS-231 were all placed on SESS-2 alone, with no "also: CAMP-1". Both surfaces' prose admitted the overlap; the ledger did not. Fixed in overrides.json; CAMP-1 goes from 5 borrowed rows to 14.

SH-6 had no features at all — "No features are placed here yet", for a surface Design A asserts exists. Six rows written and added as IS-304–IS-309, and the surface summary rewritten from "States to mock: none — nothing is built yet" to the states it actually has to survive.

Lane 1 created a second search box. The app-bar search settled last week (IS-298) covers sessions, people, wiki and rules; CAMP-2 keeps its own Session Search panel, which holds CA-094, the GM-only "Include transcripts" toggle — the only transcript search anywhere in the product. #593's rule is one box. Recorded as open decision D16 and drawn both ways.

The catalogue is rebuilt: 1,578 rows on 102 surfaces, up from 1,572.

Decisions recorded

  • D14 — a player sees Campaign Analytics' campaign-wide numbers and their own row; the full member table stays the GM's. (Drawn in lane 3, where CAMP-7 lives.)
  • D15 — the footer gains a link to the project, beside the version.
  • D16 — the two search boxes, open, drawn both ways.

Decisions taken while drawing, each marked on the page

  • Banners stack worst-first, one at a time, with the rest folded into a line that names them rather than counts them. Five can apply at once and the ledger explicitly left the stacking to the mockup.
  • The live bar has three states, because a session being in progress and the bot recording are independent facts. A single "recording" bar would be wrong in the direction that matters.
  • Settings is one page of nine sections, not nine Contents entries. Each row says who can see it before you click, which is what IS-199 asks for.

Four faults found by rendering it

None of these were visible from reading the code:

  1. The phone live bar distinguished "recording" from "not recording" by colour alone. The second line is dropped on a phone, and the state was living on it — the exact failure IS-295 exists to prevent, in the place it would matter most. The state moved into the bold line, with the clock.
  2. Member rows put the character's initial on the disc beside the person's name — Priya's row showed "O" for Ossian. On the one page whose purpose is keeping person and character 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, the selection existing only in aria-pressed.

Also fixed on the way: the transcript-search toggle appeared on the Upcoming tab, where there are no transcripts; "Remove" appeared only on time slots after the second; and a date line that stranded the timezone on its own row.

Still open, for the review

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

#671 (the Discord webhook URL and analytics share token returned to every member) was found while scoping this lane and is fixed separately in #672, rather than waiting for the rebuild. The Discord settings section here draws the webhook as the credential it is.

🤖 Generated with Claude Code

Lane 2 of the mockup pass: **This week**, the **sessions list**, **making a session**, and **members & characters**, plus the two pieces of chrome that belong to a campaign rather than to the app — the **live-session bar** (SH-6) and the **banners** (SH-8). Settings gets its **frame** and two of its nine sections drawn whole; the other seven are lane 2b. Live at `/feedback/prototype/lane2`. `?only=<section>` shows one section on its own, for linking. ## Scope | Surface | Rows | |---|---:| | CAMP-1 This week | 8 | | CAMP-2 Sessions list | 21 | | CAMP-3 New / edit session | 19 | | CAMP-8 Members & characters | 38 | | SH-6 Live-session bar | 0 → 6 | | SH-8 Campaign banners | 7 | | CAMP-9 / CAMP-12, plus the frame | 23 of 109 | The full lane as originally scoped was 15 surfaces and 202 rows, with Settings alone accounting for 109 across nine sections. The owner chose to split it: the core now, the remaining seven settings sections as lane 2b. ## Catalogue corrections #659 requires a surface's rows to be right before it is drawn. Three were not. **CAMP-1 could not be drawn from its own rows.** Design A's screen 2 — the drawing CAMP-1 *is* — shows "Are you in?" with the roster and count, and Add to calendar. `SE-025`, `SE-026`, `SE-027`, `SE-147`–`SE-150`, `IS-011` and `IS-231` were all placed on SESS-2 alone, with no "also: CAMP-1". Both surfaces' prose admitted the overlap; the ledger did not. Fixed in `overrides.json`; CAMP-1 goes from 5 borrowed rows to 14. **SH-6 had no features at all** — "No features are placed here yet", for a surface Design A asserts exists. Six rows written and added as `IS-304`–`IS-309`, and the surface summary rewritten from "States to mock: none — nothing is built yet" to the states it actually has to survive. **Lane 1 created a second search box.** The app-bar search settled last week (`IS-298`) covers sessions, people, wiki and rules; CAMP-2 keeps its own Session Search panel, which holds `CA-094`, the GM-only "Include transcripts" toggle — the only transcript search anywhere in the product. #593's rule is one box. Recorded as open decision **D16** and drawn both ways. The catalogue is rebuilt: **1,578 rows on 102 surfaces**, up from 1,572. ## Decisions recorded - **D14** — a player sees Campaign Analytics' campaign-wide numbers and their own row; the full member table stays the GM's. (Drawn in lane 3, where CAMP-7 lives.) - **D15** — the footer gains a link to the project, beside the version. - **D16** — the two search boxes, open, drawn both ways. ## Decisions taken while drawing, each marked on the page - **Banners stack worst-first, one at a time**, with the rest folded into a line that names them rather than counts them. Five can apply at once and the ledger explicitly left the stacking to the mockup. - **The live bar has three states**, because a session being in progress and the bot recording are independent facts. A single "recording" bar would be wrong in the direction that matters. - **Settings is one page of nine sections**, not nine Contents entries. Each row says who can see it before you click, which is what `IS-199` asks for. ## Four faults found by rendering it None of these were visible from reading the code: 1. **The phone live bar distinguished "recording" from "not recording" by colour alone.** The second line is dropped on a phone, and the state was living on it — the exact failure `IS-295` exists to prevent, in the place it would matter most. The state moved into the bold line, with the clock. 2. **Member rows put the character's initial on the disc beside the person's name** — Priya's row showed "O" for Ossian. On the one page whose purpose is keeping person and character 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, the selection existing only in `aria-pressed`. Also fixed on the way: the transcript-search toggle appeared on the Upcoming tab, where there are no transcripts; "Remove" appeared only on time slots after the second; and a date line that stranded the timezone on its own row. ## Still open, for the review - **D16**, above — which search survives, and where GM transcript search lives. - **`IS-308`** — whether the live bar follows you off the campaign's own pages. Design A says "campaign pages", which means a live session is invisible from Home. Drawn as the alternative. - Whether Dana's roster row, which shows *her* pronouns where every other row shows the *character's*, should name her differently. ## Related `#671` (the Discord webhook URL and analytics share token returned to every member) was found while scoping this lane and is fixed separately in **#672**, rather than waiting for the rebuild. The Discord settings section here draws the webhook as the credential it is. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
feat(feedback-site): lane 2 of the surface mockups — the campaign core (#659)
All checks were successful
CI / Bot/backend version sync (pull_request) Successful in 50s
CI / Backend lint (ruff) (pull_request) Successful in 55s
CI / Docker image build (pull_request) Successful in 26s
CI / Summarisation accuracy eval harness (stub provider) (pull_request) Successful in 1m44s
CI / Bot tests and audit (pull_request) Successful in 2m45s
CI / Frontend tests, audit, and build (pull_request) Successful in 3m9s
CI / Backend migration, tests, and audit (pull_request) Successful in 9m49s
CI / Synthetic session harness (no GPU, no LLM) (pull_request) Successful in 12m52s
f584b55dab
This week, the sessions list, making a session, and members & characters,
plus the two pieces of chrome that belong to a campaign rather than the
app: the live-session bar (SH-6) and the banners (SH-8). Settings gets
its frame and two of its nine sections; the other seven are lane 2b.

Three things were wrong in the catalogue and are fixed here, since #659
requires a surface's rows to be right before it is drawn:

- 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, and all nine of those
  rows sat on SESS-2 alone. SE-025..027, SE-147..150, IS-011 and IS-231
  now also sit on CAMP-1 (overrides.json), taking it from 5 borrowed
  rows to 14.
- SH-6 had no features placed on it at all. Six written and added as
  IS-304..309, with the surface summary rewritten from "nothing is built
  yet" to the states it has to survive.
- Lane 1's app-bar search (#667) and this page's Session Search are two
  boxes in one campaign, which #593 forbids — and the latter holds the
  only transcript search in the product. Recorded as open decision D16
  and drawn both ways for the owner to pick.

Also recorded: D14 (a player sees campaign-wide analytics and their own
row, not everyone's attendance by name) and D15 (the footer gains a link
to the project), both decided by the owner on 16 September.

Decisions taken while drawing, each marked on the page: banners stack
worst-first with the rest folded behind a line that names them; 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
rather than nine Contents entries.

Four faults were found by rendering the page and reading it back, not by
reading the code: the phone live bar distinguished "recording" from "not
recording" by colour alone (IS-295), the member rows put the character's
initial on a disc beside the person's name, the RSVP counter disagreed
with its own roster, and the scheduling mode had no visible pressed
state.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
claude-bot deleted branch feat/659-lane2-campaign-core 2026-09-16 16:55:58 +00:00
Sign in to join this conversation.
No description provided.