Lane 5, PRs 7 and 8: J4 "run the table" with a fake bot that records, and lane 5 in the demo seed (#731) #833

Merged
claude-bot merged 3 commits from build/lane5-j4-seed into main 2026-09-26 12:24:19 +00:00
Collaborator

This is lane 5's last PR. It adds the journey that runs Table mode end to end, and lane 5's rows in the dev demo seed (build plan §7).

J4 (e2e/j4-run-the-table.spec.js)

  • The flow:
    1. Dana opens the table from This week and starts recording. D116: the session goes in progress with started_at, and the bar shows "1 of 1 here".
    2. She uses scenes, the stage and Find (the wiki, rules and shelf), then Preview and Add to the shelf.
    3. She shows a card to Players and Discord. The players' face (a new identity, Joaquín) sees it.
    4. She writes a quick note with its stamp. On the phone, the note goes on the session page instead (D122).
    5. On the keyboard project she moves and resizes a card (D117).
    6. She stops recording and runs the sweep, where Undo works on "Let go".
    7. She marks the session played. Axe runs throughout.
  • The fake bot is now stateful. It keeps one recording per guild and publishes the real bot's status shape to Redis every 2 s, including speakers and in_channel. It returns the real 409s and 400s, and has /__e2e/reset and /__e2e/recordings.
  • J4 has its own seeded campaign, The Lanterns of Cortal, and its own player. It creates its session at run time, confirmed 10 minutes ahead, so it touches no other journey's state and stays inside D123's window.
  • Two real bugs J4 found, fixed here:
    • Find's wiki preview read the lore response's wrapper, not .entry, so it showed "Untitled".
    • A card body that scrolls wasn't keyboard-reachable (axe scrollable-region-focusable, WCAG 2.1.1). It's now a focusable region only while it scrolls.

The demo seed

  • Scenes: 6, one of them empty and one deleted.
  • Shelf cards: 19, including rule cards, written notes and a removed card, with some placed far right so the canvas's edge counts show.
  • Other lane 5 rows:
    • 4 stamped quick-note lines;
    • Session 23 with started_at;
    • the Tuesday Tide's Session 4 in progress;
    • Amberwake's start window at 45 minutes.
  • The README's coverage table gains a "Deferred by decision" section.

Tests

  • Journeys: two full runs in a row, each with 86 passed and 7 skipped (the deliberate per-viewport skips) on desktop, phone and keyboard.
  • Frontend: src/pages/table passes 137 of 137, and the full suite 2470 of 2471; the one failure is a load flake that passes alone.
  • Backend: test_demo_seed passes 6 of 6, with the tripwires held.
  • ruff is clean.

🤖 Generated with Claude Code

This is lane 5's last PR. It adds the journey that runs Table mode end to end, and lane 5's rows in the dev demo seed (build plan §7). **J4** (`e2e/j4-run-the-table.spec.js`) - **The flow:** 1. Dana opens the table from This week and starts recording. D116: the session goes in progress with `started_at`, and the bar shows "1 of 1 here". 2. She uses scenes, the stage and Find (the wiki, rules and shelf), then Preview and Add to the shelf. 3. She shows a card to Players and Discord. The players' face (a new identity, Joaquín) sees it. 4. She writes a quick note with its stamp. On the phone, the note goes on the session page instead (D122). 5. On the keyboard project she moves and resizes a card (D117). 6. She stops recording and runs the sweep, where Undo works on "Let go". 7. She marks the session played. Axe runs throughout. - **The fake bot is now stateful.** It keeps one recording per guild and publishes the real bot's status shape to Redis every 2 s, including `speakers` and `in_channel`. It returns the real 409s and 400s, and has `/__e2e/reset` and `/__e2e/recordings`. - **J4 has its own seeded campaign,** The Lanterns of Cortal, and its own player. It creates its session at run time, confirmed 10 minutes ahead, so it touches no other journey's state and stays inside D123's window. - **Two real bugs J4 found, fixed here:** - Find's wiki preview read the lore response's wrapper, not `.entry`, so it showed "Untitled". - A card body that scrolls wasn't keyboard-reachable (axe `scrollable-region-focusable`, WCAG 2.1.1). It's now a focusable region only while it scrolls. **The demo seed** - **Scenes:** 6, one of them empty and one deleted. - **Shelf cards:** 19, including rule cards, written notes and a removed card, with some placed far right so the canvas's edge counts show. - **Other lane 5 rows:** - 4 stamped quick-note lines; - Session 23 with `started_at`; - the Tuesday Tide's Session 4 in progress; - Amberwake's start window at 45 minutes. - **The README's coverage table** gains a "Deferred by decision" section. **Tests** - **Journeys:** two full runs in a row, each with 86 passed and 7 skipped (the deliberate per-viewport skips) on desktop, phone and keyboard. - **Frontend:** `src/pages/table` passes 137 of 137, and the full suite 2470 of 2471; the one failure is a load flake that passes alone. - **Backend:** `test_demo_seed` passes 6 of 6, with the tripwires held. - ruff is clean. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
J4 walks "start recording, run the table, reveal, take notes, stop" on the
desktop, the phone and the keyboard, with a WCAG 2.2 AA scan on every face it
reaches: This week's "Open the table", Start (the session goes in progress,
D116) with "Recording", a clock and "1 of 1 here" (D120); a scene and an empty
one; the stage by number and arrows; Find across the shelf, the wiki and the
rules, the preview, Add to the shelf; Show the table to the players' screens
and Discord, asserted on the bot-event stream; the player reading it on the
players' face; the quick note stamped from the recording's clock (IS-381), or
on the phone the session page's Notes panel (D122); Move and Resize from a
card's menu by keyboard (D117); Stop, the sweep, and the evening marked played
with the note in the GMs' notes (D112).

It runs in a campaign of its own (The Lanterns of Cortal, seeded with a wiki
entry, a rules pack imported through the GM's import, and two scenes),
because running an evening moves the calendar that J0, J2 and J6 read; each
project makes its own evening, confirmed ten minutes ahead, inside D123's
window and still This week's. Its player is a new identity, Joaquín, with his
Discord linked, not Priya: each evening puts an "is on" row in its players'
bell, and two of them pushed the seeded Session 3's row out of the twenty
J2's bell test reads (the first full run caught it).

The fake bot keeps a recording per Discord server and publishes its status on
the real bot's Redis keys every two seconds (speakers with in_channel), answers
a second start with the real 409, and has POST /__e2e/reset.

Two faults J4 found in lane 5, fixed here: Find's preview of a wiki entry read
the article view's wrapper instead of its entry and drew "Untitled"; and a
card whose body overflowed scrolled out of the keyboard's reach (it is now a
focusable region while it scrolls, axe's scrollable-region-focusable).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Table mode gets data on dev to be reviewed against:

- Scenes: six. Four the cards are filed in ("The Provost's Door" on Session
  23's revealed card and on Session 24's shelf, since a scene is the
  campaign's), one made in prep and empty (D126), one deleted with a card
  still filed in it, which reads as Unfiled. Two pins carry their scene.
- Session 24's shelf: three rules cards from the house rules pack (IS-177;
  one with player text, two without, so the reveal's 422 is reachable), three
  notes written on the shelf (D119; one with text alone), one card taken off
  and restorable (D12), and every card placed, two far to the right (x 1680
  and 2480) so the canvas's edge counts and Whole board have work (D37). The
  house rules are now written before the shelf, which references them.
- The quick note (IS-381, D112): Session 23's GMs' note ends with four
  stamped lines inside its hour and one unstamped, as one quick_note version.
- started_at (D116): Session 23's, six minutes late; and The Tuesday Tide's
  Session 4 is in progress, with no end time, so the poller completes it
  quietly eight hours later (no Discord, no shelf to harvest). Its old
  upcoming evening is now Session 5.
- D123: The Amberwake Accord's recording window is 45 minutes.

tests/test_demo_seed.py checks each of these; the tripwires still hold and
--reset still rebuilds the same ids. The README's coverage table moves lane
5's rows to Seeded and lists what lane 5 deferred by decision: the shared
screen and another recording source (#542), "Out of AI credits" (#642), and
the Foundry map mark (v5.0.0).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Merge remote-tracking branch 'origin/main' into build/lane5-j4-seed
All checks were successful
CI / Summarisation accuracy eval harness (stub provider) (pull_request) Successful in 58s
CI / Backend lint (ruff) (pull_request) Successful in 43s
CI / Bot/backend version sync (pull_request) Successful in 23s
CI / Feedback site tests (pull_request) Successful in 40s
CI / Docker image build (pull_request) Successful in 39s
CI / Does this change touch the recording path? (pull_request) Successful in 26s
CI / Synthetic session harness (no GPU, no LLM) (pull_request) Has been skipped
CI / Bot tests and audit (pull_request) Successful in 2m46s
CI / Backend migration, tests, and audit (pull_request) Successful in 13m36s
CI / Frontend tests, audit, and build (pull_request) Successful in 18m40s
CI / End-to-end journeys (desktop, phone, keyboard-only) (pull_request) Successful in 18m9s
7f373adae3
Sign in to join this conversation.
No description provided.