The GM's Review, part two — events and corrections, who was there, highlights — and the old session page goes (SESS-4, lane 4) #818

Merged
claude-bot merged 4 commits from build/lane4-page-review-b into main 2026-09-25 15:57:45 +00:00
Collaborator

Lane 4's last page PR (#730). Review now draws all six of its sections, and SessionDetail.jsx is deleted, after an audit of everything it still offered.

The events it was built from (D31, D104)

  • The header: "21 events checked against the transcript · one did not check out".
  • Each row: time · who · what, with Strike, Reword (500 characters) and ⋯ More (the kind picker, emphasis, and make it a table note).
  • Once changed, a row shows its tag (Struck, Reworded, Now a table note, → reveal, → emphasised) with an Undo per change. "Corrected by you" keeps the original.
  • Failures: "⚠ Did not check out: …" (IS-240).
  • Citations read "at 1:09:12" and open the transcript fold at that line (D104).
  • Saving: every correction saves as it's made, through PUT /pending-corrections/{beat_id}, in order. The pending banner counts them, and a reload keeps them.
  • The fold "7 table notes", with Make it story.
  • Escape cancels a reword or the kind picker.

Who was there

  • Proposals from the recording, with Use these / Leave it, and an unmatched voice named as such. A channel read that failed is told apart from nobody being there.
  • There / Not there, per member.
  • "Playing …" (IS-236 to IS-238), for members with more than one character, backed by a new read, GET /api/sessions/{id}/character-overrides.

Highlights

  • Drafts are marked "Draft — publishes when the summary is approved".
  • Add a quote or a moment ("Who said it" suggests the table's names), and edit or delete one. The delete wording tells a draft apart from a published highlight.

The old page goes: the audit

Every feature SessionDetail still offered now has a home on the new pages. The PR's commit 6f90cd7b lists each one and where it went.

  • One feature had no home: the member-erasure notes (#118). They'd been missing on played sessions since #816. They now sit under the recording's state line on Read and on Review. This isn't in the drawing, and is recorded as a departure.
  • Deleted:
    • SessionDetail and its test;
    • PostSessionChecklist, SessionHighlights, ProcessingQueueNote and SeriesUnderTitle;
    • 7a's only mode and LegacyLeaveGuard;
    • the unused restorePreviousSummary, fetchMyNotes and upsertMyNote clients. Their server endpoints stay.
  • Kept, because other pages use them: ColdOpenPanel, ElapsedTimer, RecordingPanel and TitleSuggestions.
  • Also fixed: ui/Segmented, whose group with nothing chosen couldn't be reached by keyboard.
  • The bell's "couldn't be transcribed" now links to Review, where Try again lives.

Departures (reasoned in the commits)

  • Citations are times, not line numbers (D104).
  • A row can carry several changes, each with its own Undo.
  • "Make it a table note" sits in ⋯ More.
  • "Who said it" is free text with suggestions, because a quote can be an NPC's.
  • The GM's own row has no There toggle.
  • A proposed session nobody put to a vote is drawn as pencilled in.
  • The erasure notes, as above.

Checks

  • Frontend: 170 files, 2269 tests. Fewer than before, because the old page's 2000-line test went with it. Lint: 0 errors, 224 warnings, down from 226.
  • Backend: the pins read, notifications and approval tests pass (90). Ruff is clean.
  • Render check: 28 stills in Chromium, light and dark, 390px and desktop. It fixed the There/Not there strip and the highlight buttons overflowing on a phone. I reviewed the events and Who-was-there stills myself.

With this, lane3.py's SESS-4 rows are all built, replaced or deferred. Lane 4's last PR, J5's journey, follows.

🤖 Generated with Claude Code

Lane 4's last page PR (#730). Review now draws all six of its sections, and **`SessionDetail.jsx` is deleted**, after an audit of everything it still offered. ## The events it was built from (D31, D104) - **The header:** "21 events checked against the transcript · one did not check out". - **Each row:** time · who · what, with **Strike**, **Reword** (500 characters) and **⋯ More** (the kind picker, emphasis, and make it a table note). - **Once changed,** a row shows its tag (Struck, Reworded, Now a table note, → reveal, → emphasised) with an **Undo** per change. "Corrected by you" keeps the original. - **Failures:** "⚠ Did not check out: …" (IS-240). - **Citations** read **"at 1:09:12"** and open the transcript fold at that line (D104). - **Saving:** every correction saves as it's made, through `PUT /pending-corrections/{beat_id}`, in order. The pending banner counts them, and a reload keeps them. - **The fold** "7 table notes", with **Make it story**. - **Escape** cancels a reword or the kind picker. ## Who was there - **Proposals from the recording**, with Use these / Leave it, and an unmatched voice named as such. A channel read that failed is told apart from nobody being there. - **There / Not there**, per member. - **"Playing …"** (IS-236 to IS-238), for members with more than one character, backed by a new read, `GET /api/sessions/{id}/character-overrides`. ## Highlights - Drafts are marked "Draft — publishes when the summary is approved". - Add a quote or a moment ("Who said it" suggests the table's names), and edit or delete one. The delete wording tells a draft apart from a published highlight. ## The old page goes: the audit Every feature `SessionDetail` still offered now has a home on the new pages. The PR's commit `6f90cd7b` lists each one and where it went. - **One feature had no home: the member-erasure notes (#118).** They'd been missing on played sessions since #816. They now sit under the recording's state line on Read and on Review. This isn't in the drawing, and is recorded as a departure. - **Deleted:** - `SessionDetail` and its test; - `PostSessionChecklist`, `SessionHighlights`, `ProcessingQueueNote` and `SeriesUnderTitle`; - 7a's `only` mode and `LegacyLeaveGuard`; - the unused `restorePreviousSummary`, `fetchMyNotes` and `upsertMyNote` clients. Their server endpoints stay. - **Kept, because other pages use them:** `ColdOpenPanel`, `ElapsedTimer`, `RecordingPanel` and `TitleSuggestions`. - **Also fixed:** `ui/Segmented`, whose group with nothing chosen couldn't be reached by keyboard. - **The bell's "couldn't be transcribed"** now links to Review, where Try again lives. ## Departures (reasoned in the commits) - **Citations are times, not line numbers** (D104). - **A row can carry several changes,** each with its own Undo. - **"Make it a table note"** sits in ⋯ More. - **"Who said it" is free text with suggestions,** because a quote can be an NPC's. - **The GM's own row has no There toggle.** - **A proposed session nobody put to a vote** is drawn as pencilled in. - **The erasure notes,** as above. ## Checks - **Frontend:** 170 files, **2269 tests**. Fewer than before, because the old page's 2000-line test went with it. **Lint:** 0 errors, 224 warnings, down from 226. - **Backend:** the pins read, notifications and approval tests pass (90). Ruff is clean. - **Render check:** 28 stills in Chromium, light and dark, 390px and desktop. It fixed the There/Not there strip and the highlight buttons overflowing on a phone. I reviewed the events and Who-was-there stills myself. With this, `lane3.py`'s SESS-4 rows are all built, replaced or deferred. Lane 4's last PR, J5's journey, follows. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
`GET /sessions/{id}/character-overrides` (GM only) is the read the pin never
had (IS-236 to IS-238): per member with a character, the character this
session attributes to them (the pin, or their active character), whether it
is a pin, and every character they could be pinned to. Additive; the PUT is
unchanged.

The bell's `transcript_failed` row links to `/sessions/{id}/review`, where
Try again lives since 7a.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Review draws its last three sections itself; the old page's `only` mode is
no longer used by it (it goes in the next commit).

- The events it was built from: "N events checked against the transcript ·
  one did not check out", each row time · who · what with Strike, Reword and
  ⋯ More (the kind picker, Emphasise/Unemphasise). Every correction is saved
  at once through `PUT /pending-corrections/{beat_id}` with that event's
  whole set (D31), serialised so answers cannot land out of order; Undo is a
  PUT of what remains. Tags (Struck / Reworded / Now a table note / → story:
  kind / → emphasised / → not emphasised), "Corrected by you", "was: a story
  event, kind", the star, "Did not check out: reason" (IS-240, from the
  latest run), and a citation by transcript time ("at 1:09:12", D104) that
  opens the transcript fold at that line. Reword counts 500; Escape cancels
  it and the kind picker. A 422 is said beside the row. Table notes folded,
  each with Make it story. While a rewrite runs, or the saved set is stale,
  the events say why once and offer nothing.
- Who was there: the recording's proposals (spoke / in channel, silent / not
  heard, and the voice matched to nobody with how long it talked), Use these
  and Leave it, "Filled in from the recording", the channel-read failure,
  There / Not there per player, and who played whom from the new pins read.
- Highlights: drafts said, Edit and Delete each, Add one (A quote / A moment,
  Who said it, When · optional, the line — "Write the line itself."), and the
  drawing's delete question.
- The three buttons a rewrite holds say why on one line; each keeps its
  reason as its accessible description.
- Review makes its own attendance read (the lead counts it); Read's reads are
  no longer made for Review. Segmented keeps a tab stop with nothing chosen.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Deleted: pages/SessionDetail.jsx and its test, and the components only it
used — PostSessionChecklist, SessionHighlights, ProcessingQueueNote (each
with its test) and SeriesManager's SeriesUnderTitle (its TakeOut tests are
kept, now against TakeOut itself). Its `only` mode, LegacyLeaveGuard and
Review's legacy-remainder hook went with it in the previous commit.

The audit found one feature with no home in the rebuilt pages: the erasure
notes (#118), "Contributions from a former member were removed on …", shown
to every member. It has one now, under the recording's state on Read and on
Review (`ErasureNotes`), tested.

The session page no longer hands anything to an old page: a proposed session
not put to a vote (a "direct" one is confirmed on creation, so only an import
makes one) is drawn as pencilled in, and a status the page does not know says
it could not be drawn. `fetchMyNotes`/`upsertMyNote`, which only the old page
called, are gone from the client (the endpoints stay).

Kept: ColdOpenPanel (shelf, table), ElapsedTimer, RecordingPanel,
TitleSuggestions and DateTimePicker (CampaignDetail), InlineError, and
useUnsavedChangesPrompt (the kit's useLeaveGuard) — all still imported.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
fix(webapp): Who was there and the highlights fit a phone; the notes above the list have room (#730, lane 4)
All checks were successful
CI / Bot/backend version sync (pull_request) Successful in 28s
CI / Backend lint (ruff) (pull_request) Successful in 30s
CI / Feedback site tests (pull_request) Successful in 41s
CI / Does this change touch the recording path? (pull_request) Successful in 16s
CI / Synthetic session harness (no GPU, no LLM) (pull_request) Has been skipped
CI / Summarisation accuracy eval harness (stub provider) (pull_request) Successful in 1m45s
CI / Bot tests and audit (pull_request) Successful in 1m54s
CI / Docker image build (pull_request) Successful in 4m40s
CI / End-to-end journeys (desktop, phone, keyboard-only) (pull_request) Successful in 13m37s
CI / Backend migration, tests, and audit (pull_request) Successful in 21m7s
CI / Frontend tests, audit, and build (pull_request) Successful in 23m46s
726a1dfcfc
Found by the render check at 390px: the There / Not there strip went off the
edge beside a long name, and Edit / Delete squeezed a quote to a few words.
Both now wrap under what they belong to.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Sign in to join this conversation.
No description provided.