Lane 2 backfill — the campaign core, every state drawn (#659, #696) #703

Closed
claude-bot wants to merge 0 commits from feat/lane2-backfill into main
Collaborator

This is step 3 of #696, part 1: backfilling lane 2's four campaign screens (CAMP-1, 2, 3 and 8). Settings (lane 2b) and the shell (lane 1) follow in their own PRs.

Coverage

coverage/lane2.py classifies 117 placements, none missing:

Class Count
Drawn 99
Replaced by a decision 7
Belong to other surfaces 10
Deferred 1 (the post-session prompt, not specified yet)

Before the backfill, the audit counted 34 missing and 30 half-drawn. lane3.py and lane4.py were rerun against the rebuilt catalogue and still classify everything.

Decisions (the owner took one recommendation and chose the other option)

  • D56: the instance decides who a GM's name search can find. An admin setting chooses between anyone on this server and only people the GM has played with. The line under the box says which is in force. The server change is IS-382, filed as #702.
  • D57: the owner can step down as GM and keep the campaign, but only while another member is GM. IS-383.

What is drawn

This week

  • D45's "About the campaign" card, at the foot of the right-hand column.
  • The checklist in three states: timezone not set, hidden, and on an archived campaign.
  • The recap error.
  • The four answer states.

Sessions

  • Rows for voting, pencilled-in and in-progress sessions.
  • Mark as played and Mark as not played.
  • Empty wording for every tab.
  • The search states: one letter, searching, nothing found, not answering. Matches are marked.
  • Load more, while loading.
  • All five states of the merge modal.
  • Phone layouts.

Session form

  • A structured picker: day, hour, minute and AM/PM. An off-grid minute is kept rather than snapped.
  • Plain direct mode.
  • Reuse from a cancelled session.
  • The edit form, with title ideas.
  • All six title-suggestion states.
  • The form when the campaign has no timezone.
  • The Creating, Saving and error footers.

Members

  • The invite panel.
  • Add someone, drawn in both D56 scopes.
  • Approving a request.
  • The character form, as the player sees it and as a GM sees it.
  • Foundry stats and each sync state.
  • Handing ownership over.
  • Two GMs, seen by the owner and by the co-GM.
  • Attaching an imported member.
  • Erase in progress, failed, and queued.

Faults found

Two are from the first drawing:

  • Monday night's This week still asked "Are you in?" and offered the nudge, prep and the calendar.
  • The empty Sessions stills showed tab counts that contradicted them.

Four were caught by rendering:

  • The time picker's AM/PM control wrapped onto its own line on a phone.
  • Search marks split titles into pieces.
  • The live row's elapsed time disagreed with the bar above it.
  • There was no spacing between consecutive stills, and stills of mixed heights shared a row.

Shared changes

  • shell.js: search marks the match in the title and the line, and a played session's line starts with its date. Lane 1's search stills were checked after the change.
  • shell.css: the picker, the members pieces, and the tooltip.

All eight lane pages render, and the feedback-site tests pass (101).

🤖 Generated with Claude Code

This is step 3 of #696, part 1: backfilling lane 2's four campaign screens (CAMP-1, 2, 3 and 8). Settings (lane 2b) and the shell (lane 1) follow in their own PRs. ## Coverage `coverage/lane2.py` classifies **117 placements, none missing**: | Class | Count | |---|---| | Drawn | 99 | | Replaced by a decision | 7 | | Belong to other surfaces | 10 | | Deferred | 1 (the post-session prompt, not specified yet) | Before the backfill, the audit counted 34 missing and 30 half-drawn. `lane3.py` and `lane4.py` were rerun against the rebuilt catalogue and still classify everything. ## Decisions (the owner took one recommendation and chose the other option) - **D56: the instance decides who a GM's name search can find.** An admin setting chooses between anyone on this server and only people the GM has played with. The line under the box says which is in force. The server change is `IS-382`, filed as **#702**. - **D57: the owner can step down as GM** and keep the campaign, but only while another member is GM. `IS-383`. ## What is drawn **This week** - D45's "About the campaign" card, at the foot of the right-hand column. - The checklist in three states: timezone not set, hidden, and on an archived campaign. - The recap error. - The four answer states. **Sessions** - Rows for voting, pencilled-in and in-progress sessions. - Mark as played and Mark as not played. - Empty wording for every tab. - The search states: one letter, searching, nothing found, not answering. Matches are marked. - Load more, while loading. - All five states of the merge modal. - Phone layouts. **Session form** - A structured picker: day, hour, minute and AM/PM. An off-grid minute is kept rather than snapped. - Plain direct mode. - Reuse from a cancelled session. - The edit form, with title ideas. - All six title-suggestion states. - The form when the campaign has no timezone. - The Creating, Saving and error footers. **Members** - The invite panel. - Add someone, drawn in both D56 scopes. - Approving a request. - The character form, as the player sees it and as a GM sees it. - Foundry stats and each sync state. - Handing ownership over. - Two GMs, seen by the owner and by the co-GM. - Attaching an imported member. - Erase in progress, failed, and queued. ## Faults found Two are from the first drawing: - Monday night's This week still asked "Are you in?" and offered the nudge, prep and the calendar. - The empty Sessions stills showed tab counts that contradicted them. Four were caught by rendering: - The time picker's AM/PM control wrapped onto its own line on a phone. - Search marks split titles into pieces. - The live row's elapsed time disagreed with the bar above it. - There was no spacing between consecutive stills, and stills of mixed heights shared a row. ## Shared changes - `shell.js`: search marks the match in the title and the line, and a played session's line starts with its date. Lane 1's search stills were checked after the change. - `shell.css`: the picker, the members pieces, and the tooltip. All eight lane pages render, and the feedback-site tests pass (101). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
feat(feedback-site): lane 2 backfill — the campaign core, every state drawn (#659, #696)
Some checks failed
CI / Summarisation accuracy eval harness (stub provider) (pull_request) Successful in 1m0s
CI / Backend lint (ruff) (pull_request) Has been cancelled
CI / Feedback site tests (pull_request) Has been cancelled
CI / Bot/backend version sync (pull_request) Has been cancelled
CI / Docker image build (pull_request) Has been cancelled
CI / Synthetic session harness (no GPU, no LLM) (pull_request) Has been cancelled
CI / Frontend tests, audit, and build (pull_request) Has been cancelled
CI / Bot tests and audit (pull_request) Has been cancelled
CI / Backend migration, tests, and audit (pull_request) Has been cancelled
4f9c04e0d5
The row-by-row audit found lane 2 had dropped 34 of its CAMP-1/2/3/8
features and half-drawn 30 more. All are drawn now; coverage/lane2.py
classifies 117 placements with none missing (99 drawn, 7 replaced,
10 elsewhere, 1 deferred).

- This week: D45's About the campaign card; the checklist with the
  timezone not set, hidden, and on an archived campaign; the recap
  error; every answer state. A live session no longer asks "Are you
  in?" or offers the nudge, prep and calendar (a first-draw fault).
- Sessions: proposed, pencilled and in-progress rows; Mark as played /
  Mark as not played; empty wording per tab with counts that agree;
  search's one-letter, busy, empty and error states with marked
  matches; Load more busy; every merge-modal state; phones.
- Session form: the structured day/hour/minute/AM-PM picker, which
  keeps an off-grid minute instead of snapping it; plain direct mode;
  Reuse; the edit form with title ideas; every suggestion state; no
  campaign timezone; form busy and error feet.
- Members: invite panel; Add someone in both D56 scopes; approving;
  the character form for a player and for a GM; Foundry stats and
  sync states; handing ownership over; D57's step-down with two GMs;
  imported-member attach; erase busy, error and queued.
- D56 (the instance decides who the name search finds; IS-382, #702)
  and D57 (the owner may step down as GM while another GM exists;
  IS-383) are recorded in the catalogue.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
fix(feedback-site): lane 2's erase button uses the destructive style (#696)
All checks were successful
CI / Summarisation accuracy eval harness (stub provider) (pull_request) Successful in 50s
CI / Bot/backend version sync (pull_request) Successful in 46s
CI / Backend lint (ruff) (pull_request) Successful in 50s
CI / Bot tests and audit (pull_request) Successful in 1m52s
CI / Feedback site tests (pull_request) Successful in 1m9s
CI / Frontend tests, audit, and build (pull_request) Successful in 2m21s
CI / Docker image build (pull_request) Successful in 4m45s
CI / Backend migration, tests, and audit (pull_request) Successful in 8m31s
CI / Synthetic session harness (no GPU, no LLM) (pull_request) Successful in 23m17s
065fc1032f
Lane 2b introduced .btn--danger and asked for lane 2's erase modal to
get it; lanes 3 and 4 have used it for every irreversible action since.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Author
Collaborator

Merged as 3c5d7b6. CI was green on all nine jobs. The review site is being deployed next.

Merged as 3c5d7b6. CI was green on all nine jobs. The review site is being deployed next.
claude-bot closed this pull request 2026-09-19 05:11:32 +00:00
All checks were successful
CI / Summarisation accuracy eval harness (stub provider) (pull_request) Successful in 50s
Required
Details
CI / Bot/backend version sync (pull_request) Successful in 46s
Required
Details
CI / Backend lint (ruff) (pull_request) Successful in 50s
Required
Details
CI / Bot tests and audit (pull_request) Successful in 1m52s
Required
Details
CI / Feedback site tests (pull_request) Successful in 1m9s
Required
Details
CI / Frontend tests, audit, and build (pull_request) Successful in 2m21s
Required
Details
CI / Docker image build (pull_request) Successful in 4m45s
Required
Details
CI / Backend migration, tests, and audit (pull_request) Successful in 8m31s
Required
Details
CI / Synthetic session harness (no GPU, no LLM) (pull_request) Successful in 23m17s
Required
Details

Pull request closed

Sign in to join this conversation.
No description provided.