feat(feedback-site): lane 8 — outside the app (#659) #711

Closed
claude-bot wants to merge 0 commits from feat/lane8-outside into main
Collaborator

Lane 8 of the redesign mockups (#659), the last of the eight, draws everything Quest Board says where it does not own the screen: EXT-1 to EXT-8, at /prototype/lane8.

The chat, mail and calendar frames are plain stand-ins for somebody else's client. What is Quest Board's to choose — and what these draw — is what the message says and how it is laid out.

What's drawn

  • Slash commands (EXT-1). All twelve, with their replies.
    • A reply only the asker needs is private; anything the table should see is posted.
    • /record start's session picker, which is the only way a GM gets a session id into the command (#393).
    • Starting a recording announces itself in the channel, which is the one requirement of the group's standing consent.
    • Four failures, each saying what to do next: not a campaign server, no such session, not linked, and Quest Board unreachable — the last two being different things.
    • The bot's own status line.
    • Matrix and Element (IS-289, IS-290) are named as speculative and deliberately not drawn.
  • Channel posts (EXT-2). Twenty kinds, in one shape.
    • A session from proposed to played: the poll, a time added, the poll closed, confirmed, reminded, nudged, cancelled, played, and short-handed.
    • Recording: handed over, stopped at the limit, nothing captured, already transcribed, Quest Board unreachable, an unknown problem, and the three outcomes after a bot restart (#393).
    • At the table: a card revealed, a handout shown (D61).
    • After it: summary ready with its feedback reactions, summarisation failed, summary approved.
    • The vote tally, both as an embed and as the plain-text webhook version a campaign with no bot gets.
    • Joining a server, and a post on an instance with no public address, where the link is left out rather than drawn broken.
  • Reactions (EXT-3). A vote counted, a vote taken off (which means "no"), in/out/maybe, summary feedback, a closed poll, an expired poll, not linked, and the two failure fallbacks.
  • Direct messages (EXT-4). The link DM and its three resolutions, the self-deleting mention when DMs are closed, and the three planned uses: a notification (IS-167), a private concern (IS-211), and the star-and-wish after a session (IS-213).
  • Email (EXT-5). The recap, the no-bot confirmation and reminder, the calendar invite and its cancellation, and the admin's test.
  • Calendars (EXT-6). One session in a calendar app, a cancelled session, the personal feed across both campaigns, a session with no time yet, and a revoked feed's bare "not found".
  • The installed app (EXT-7). The home-screen icon, opening straight to Home, the browser colour in both themes, offline (the shell opens; anything it would fetch says it cannot, because none of a signed-in person's data is kept on the device), and D13's quiet "updated — reload" notice.
  • Foundry (EXT-8). Nothing is catalogued; the page says where it would land (#656) rather than drawing it.

Proposed while drawing, for the owner's review

  • One shape for every post: a coloured edge for its kind, the kind first in the title, the facts as fields, one link back.
  • A post meant for the GM goes to the GM. At risk, a failed summary, and audio about to be deleted are GM-facing but posted publicly today. They would arrive by direct message where the GM has linked Discord, and in the channel only where they have not.
  • A ❔ reaction for "maybe", which Discord has no way to say today, and a footer on every post saying what its reactions mean — since taking a reaction off a time means "no", not "undo".
  • One click to stop any email, where today there is a sentence naming a setting.

Coverage

coverage/lane8.py checks 71 placements, and none are missing:

Result Placements
Drawn 55
Replaced by a proposal here 3
Belong to another surface 7
Behaviour only 1
Deferred (Matrix, Element Call) 5

All eleven coverage scripts pass against the rebuilt catalogue.

Checks

  • Render-checked in headless Edge, dark and light: commands, posts, reactions, DMs, email, calendars and the installed app.
  • One fault caught and fixed: audio shown about to be deleted for a campaign that keeps its audio 90 days, which contradicted lane 7.
  • The DOM probe finds 83 shots and no undefined or NaN.
  • Feedback-site tests pass (121).

🤖 Generated with Claude Code

Lane 8 of the redesign mockups (#659), the last of the eight, draws everything Quest Board says where it does not own the screen: EXT-1 to EXT-8, at `/prototype/lane8`. The chat, mail and calendar frames are plain stand-ins for somebody else's client. What is Quest Board's to choose — and what these draw — is what the message says and how it is laid out. ## What's drawn - **Slash commands (EXT-1).** All twelve, with their replies. - A reply only the asker needs is private; anything the table should see is posted. - `/record start`'s session picker, which is the only way a GM gets a session id into the command (#393). - Starting a recording announces itself in the channel, which is the one requirement of the group's standing consent. - Four failures, each saying what to do next: not a campaign server, no such session, not linked, and Quest Board unreachable — the last two being different things. - The bot's own status line. - Matrix and Element (`IS-289`, `IS-290`) are named as speculative and deliberately not drawn. - **Channel posts (EXT-2).** Twenty kinds, in one shape. - A session from proposed to played: the poll, a time added, the poll closed, confirmed, reminded, nudged, cancelled, played, and short-handed. - Recording: handed over, stopped at the limit, nothing captured, already transcribed, Quest Board unreachable, an unknown problem, and the three outcomes after a bot restart (#393). - At the table: a card revealed, a handout shown (D61). - After it: summary ready with its feedback reactions, summarisation failed, summary approved. - The vote tally, both as an embed and as the plain-text webhook version a campaign with no bot gets. - Joining a server, and a post on an instance with no public address, where the link is left out rather than drawn broken. - **Reactions (EXT-3).** A vote counted, a vote taken off (which means "no"), in/out/maybe, summary feedback, a closed poll, an expired poll, not linked, and the two failure fallbacks. - **Direct messages (EXT-4).** The link DM and its three resolutions, the self-deleting mention when DMs are closed, and the three planned uses: a notification (`IS-167`), a private concern (`IS-211`), and the star-and-wish after a session (`IS-213`). - **Email (EXT-5).** The recap, the no-bot confirmation and reminder, the calendar invite and its cancellation, and the admin's test. - **Calendars (EXT-6).** One session in a calendar app, a cancelled session, the personal feed across both campaigns, a session with no time yet, and a revoked feed's bare "not found". - **The installed app (EXT-7).** The home-screen icon, opening straight to Home, the browser colour in both themes, offline (the shell opens; anything it would fetch says it cannot, because none of a signed-in person's data is kept on the device), and D13's quiet "updated — reload" notice. - **Foundry (EXT-8).** Nothing is catalogued; the page says where it would land (#656) rather than drawing it. ## Proposed while drawing, for the owner's review - **One shape for every post**: a coloured edge for its kind, the kind first in the title, the facts as fields, one link back. - **A post meant for the GM goes to the GM.** At risk, a failed summary, and audio about to be deleted are GM-facing but posted publicly today. They would arrive by direct message where the GM has linked Discord, and in the channel only where they have not. - **A ❔ reaction for "maybe"**, which Discord has no way to say today, and a footer on every post saying what its reactions mean — since taking a reaction off a time means "no", not "undo". - **One click to stop any email**, where today there is a sentence naming a setting. ## Coverage `coverage/lane8.py` checks 71 placements, and none are missing: | Result | Placements | |---|---| | Drawn | 55 | | Replaced by a proposal here | 3 | | Belong to another surface | 7 | | Behaviour only | 1 | | Deferred (Matrix, Element Call) | 5 | All eleven coverage scripts pass against the rebuilt catalogue. ## Checks - Render-checked in headless Edge, dark and light: commands, posts, reactions, DMs, email, calendars and the installed app. - One fault caught and fixed: audio shown about to be deleted for a campaign that keeps its audio 90 days, which contradicted lane 7. - The DOM probe finds 83 shots and no `undefined` or `NaN`. - Feedback-site tests pass (121). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
feat(feedback-site): lane 8 — outside the app (#659)
All checks were successful
CI / Summarisation accuracy eval harness (stub provider) (pull_request) Successful in 54s
CI / Bot tests and audit (pull_request) Successful in 1m57s
CI / Frontend tests, audit, and build (pull_request) Successful in 2m55s
CI / Docker image build (pull_request) Successful in 31s
CI / Bot/backend version sync (pull_request) Successful in 43s
CI / Backend lint (ruff) (pull_request) Successful in 48s
CI / Feedback site tests (pull_request) Successful in 1m4s
CI / Backend migration, tests, and audit (pull_request) Successful in 8m50s
CI / Synthetic session harness (no GPU, no LLM) (pull_request) Successful in 16m47s
6893e869a6
Draws EXT-1 to EXT-8 at /prototype/lane8: Discord's slash commands and
their replies, the campaign channel's twenty kinds of post, reactions,
direct messages, email, calendars, and the installed app. Foundry has no
rows and is noted rather than drawn.

Proposed for the owner's review, and noted in headers.md: one shape for
every channel post; a post meant for the GM goes to the GM by direct
message where they have linked Discord; a ❔ reaction for "maybe", which
Discord cannot say today, with every post's footer saying what its
reactions mean; one-click unsubscribe on every email.

The chat, mail and calendar frames are plain stand-ins for somebody
else's client: what is drawn is what Quest Board says inside them.

coverage/lane8.py: 71 placements, none missing (55 drawn, 3 replaced,
7 elsewhere, 1 behaviour, 5 deferred as the speculative Matrix ideas).

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

CI green (run 10078). Merged to main as 68de545.

CI green (run 10078). Merged to main as 68de545.
claude-bot closed this pull request 2026-09-19 22:03:48 +00:00
All checks were successful
CI / Summarisation accuracy eval harness (stub provider) (pull_request) Successful in 54s
Required
Details
CI / Bot tests and audit (pull_request) Successful in 1m57s
Required
Details
CI / Frontend tests, audit, and build (pull_request) Successful in 2m55s
Required
Details
CI / Docker image build (pull_request) Successful in 31s
Required
Details
CI / Bot/backend version sync (pull_request) Successful in 43s
Required
Details
CI / Backend lint (ruff) (pull_request) Successful in 48s
Required
Details
CI / Feedback site tests (pull_request) Successful in 1m4s
Required
Details
CI / Backend migration, tests, and audit (pull_request) Successful in 8m50s
Required
Details
CI / Synthetic session harness (no GPU, no LLM) (pull_request) Successful in 16m47s
Required
Details

Pull request closed

Sign in to join this conversation.
No description provided.