Build lane 10: outside the app (EXT-1 to EXT-8) #736

Closed
opened 2026-09-22 00:12:27 +00:00 by claude-bot · 6 comments
Collaborator

Build lane 10 of the v4.5.0 redesign. The brief is docs/design/v4.5.0-brief.md (§9, the lanes in order); the build plan is docs/design/v4.5.0-build-plan.md (the rollout rule, the design-system mapping, the journeys as tests). Umbrella: #366. Goes after lane 9.

Scope

Surfaces: EXT-1 to EXT-8: the bot's channel posts and DMs, reactions, email, calendar feeds and invites, the offline app.
The drawing: /feedback/prototype/lane8 — the page the build must match, still by still.
Decisions: the brief §7, and each surface's header in redesign-surfaces/sources/headers.md.

Server changes it needs (in this lane or an earlier one)

  • the bot's one post shape and its DMs; the ❔ reaction and the footer that says what reactions mean; one-click unsubscribe; calendar cancellations

Acceptance

  • Every placement coverage/lane8.py classifies as drawn or replaced is built as the prototype draws it; the script is the checklist. Rows it marks behaviour are tested, not drawn.
  • J2 (the Discord notification and the email) and J4 (the recording announcement) pass on desktop, on a phone and keyboard-only in the journeys suite (#726), with the axe scan clean (WCAG 2.2 AA, #367).
  • The brief's vocabulary (§5) throughout, from vocabulary.js; no page-level error destroys rendered content; every async operation shows progress and a next action on failure; disabled controls say why.
  • Main stays deployable after every PR of the lane: the new shell carries the old pages until each is replaced (the rollout rule).
  • The surfaces' headers in redesign-surfaces/sources/headers.md (Decided lines and the owner's review notes) are honoured; a departure is a decision change on #659 first.

Notes

  • Bot and backend changes to the bot API land in the same PR (CLAUDE.md), with BOT_CONTRACT_VERSION bumped where the shape changes.

🤖 Generated with Claude Code

**Build lane 10 of the v4.5.0 redesign.** The brief is `docs/design/v4.5.0-brief.md` (§9, the lanes in order); the build plan is `docs/design/v4.5.0-build-plan.md` (the rollout rule, the design-system mapping, the journeys as tests). Umbrella: #366. Goes after lane 9. ## Scope **Surfaces:** EXT-1 to EXT-8: the bot's channel posts and DMs, reactions, email, calendar feeds and invites, the offline app. **The drawing:** `/feedback/prototype/lane8` — the page the build must match, still by still. **Decisions:** the brief §7, and each surface's header in `redesign-surfaces/sources/headers.md`. ## Server changes it needs (in this lane or an earlier one) - the bot's one post shape and its DMs; the ❔ reaction and the footer that says what reactions mean; one-click unsubscribe; calendar cancellations ## Acceptance - [ ] Every placement `coverage/lane8.py` classifies as **drawn** or **replaced** is built as the prototype draws it; the script is the checklist. Rows it marks **behaviour** are tested, not drawn. - [ ] J2 (the Discord notification and the email) and J4 (the recording announcement) pass on desktop, on a phone and keyboard-only in the journeys suite (#726), with the axe scan clean (WCAG 2.2 AA, #367). - [ ] The brief's vocabulary (§5) throughout, from `vocabulary.js`; no page-level error destroys rendered content; every async operation shows progress and a next action on failure; disabled controls say why. - [ ] Main stays deployable after every PR of the lane: the new shell carries the old pages until each is replaced (the rollout rule). - [ ] The surfaces' headers in `redesign-surfaces/sources/headers.md` (Decided lines and the owner's review notes) are honoured; a departure is a decision change on #659 first. ## Notes - Bot and backend changes to the bot API land in the same PR (CLAUDE.md), with `BOT_CONTRACT_VERSION` bumped where the shape changes. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Author
Collaborator

Lane 10 started (2026-09-26), from the owner's O1–O17 answers. Those are D149–D164 plus D171; O12 is (b), a Voice channel setting.

In progress:

  • PR 0, design/lane10-drawings: drawing Test the bot, the email landings (/email/stop, /email/answer), the grid's DM column, the Voice channel setting and "Where", and D171's warning. New IS rows start at IS-443. The owner reviews the drawings before the pages are built.
  • PR 2, build/lane10-2-notify-out: notifications out (§3.2): DMs, the GM's warnings in the bell, per-person email for groups without Discord (#840/O6), the star and wish by DM, and the Voice channel setting's server side. Migration 10a1b2c3d4e5.
  • PR 6, build/lane10-6-test-the-bot: the Test the bot pipeline (#824, D124), on the server and the bot. Migration 10c3d4e5f6a7.

Already on main: PR 1, the announcement (#842, amended by #853 per D171).

**Lane 10 started (2026-09-26), from the owner's O1–O17 answers.** Those are D149–D164 plus D171; O12 is (b), a Voice channel setting. **In progress:** - **PR 0, `design/lane10-drawings`:** drawing Test the bot, the email landings (`/email/stop`, `/email/answer`), the grid's DM column, the Voice channel setting and "Where", and D171's warning. New IS rows start at IS-443. The owner reviews the drawings before the pages are built. - **PR 2, `build/lane10-2-notify-out`:** notifications out (§3.2): DMs, the GM's warnings in the bell, per-person email for groups without Discord (#840/O6), the star and wish by DM, and the Voice channel setting's server side. Migration `10a1b2c3d4e5`. - **PR 6, `build/lane10-6-test-the-bot`:** the Test the bot pipeline (#824, D124), on the server and the bot. Migration `10c3d4e5f6a7`. **Already on main:** PR 1, the announcement (#842, amended by #853 per D171).
Author
Collaborator

#904 (D226 Discord pickers) merged on green CI, 2026-09-28. D227 test usage counting (build/lane10-d227-test-usage, migration 10e5f6a7b8c9) is back in progress. Still to come for lane 10: PR 8 (J2/J4 journeys) and PR 9 (demo seed).

#904 (D226 Discord pickers) merged on green CI, 2026-09-28. D227 test usage counting (`build/lane10-d227-test-usage`, migration `10e5f6a7b8c9`) is back in progress. Still to come for lane 10: PR 8 (J2/J4 journeys) and PR 9 (demo seed).
Author
Collaborator

Picking up lane 10 PR 8, the J2/J4 journeys (2026-09-29), on branch build/lane10-8-journeys. It follows the lane survey's §5:

  • J2: the Discord group's extras, a DM for a linked player, the no-Discord email's To and headers, and the answer and stop landings.
  • J4: Test the bot, the start's channel_id and announced_in, and D171's refusal.

The journeys assert only what reaches the fake bot and Mailpit. Discord's rendering is covered by the bot's golden tests (test_faces.py). PR 9 (the demo seed) runs alongside it.

Picking up **lane 10 PR 8, the J2/J4 journeys** (2026-09-29), on branch `build/lane10-8-journeys`. It follows the lane survey's §5: - **J2:** the Discord group's extras, a DM for a linked player, the no-Discord email's To and headers, and the answer and stop landings. - **J4:** Test the bot, the start's `channel_id` and `announced_in`, and D171's refusal. The journeys assert only what reaches the fake bot and Mailpit. Discord's rendering is covered by the bot's golden tests (`test_faces.py`). PR 9 (the demo seed) runs alongside it.
Author
Collaborator

Lane 10's build is complete, pending the owner's review. The last two PRs merged on green CI on 2026-09-30:

  • PR 8, #945 (b9a6072a): the J2, J4 and new J4b journeys.
    • It also fixes one-click unsubscribe. List-Unsubscribe now points at POST /api/email/stop/one-click; before this, a mail app's own Unsubscribe got a 405 from nginx and stopped nothing.
    • It closes #887 item 2.
  • PR 9, #946 (c7d79fe7): the demo seed for lanes 8 and 10. The next dev deploy has to re-run the seed with --reset.

Small follow-ups from #945, queued:

  • the stale "refuses" docstring on session_record_start (stale since D171);
  • the answer-buttons email has no link to the session page;
  • the email's <h2> repeats "Quest Board".

Next: #901 (the email landings' session_id and reason codes). Leaving this issue open for the owner's review.

**Lane 10's build is complete**, pending the owner's review. The last two PRs merged on green CI on 2026-09-30: - **PR 8, #945** (`b9a6072a`): the J2, J4 and new J4b journeys. - It also fixes one-click unsubscribe. `List-Unsubscribe` now points at `POST /api/email/stop/one-click`; before this, a mail app's own Unsubscribe got a 405 from nginx and stopped nothing. - It closes #887 item 2. - **PR 9, #946** (`c7d79fe7`): the demo seed for lanes 8 and 10. The next dev deploy has to re-run the seed with `--reset`. **Small follow-ups from #945, queued:** - the stale "refuses" docstring on `session_record_start` (stale since D171); - the answer-buttons email has no link to the session page; - the email's `<h2>` repeats "Quest Board". **Next:** #901 (the email landings' session_id and reason codes). Leaving this issue open for the owner's review.
Author
Collaborator

#945's three follow-ups are merged, as #949 (2026-09-30):

  • The email heading: notification emails no longer repeat "Quest Board" in a heading under the brand line, as EX-040 draws them.
  • The D171 comment in session_record_start is corrected.
  • The answer-email session link: left as drawn. The answer page it opens now links the session instead (#950).
#945's three follow-ups are merged, as #949 (2026-09-30): - **The email heading:** notification emails no longer repeat "Quest Board" in a heading under the brand line, as EX-040 draws them. - **The D171 comment** in `session_record_start` is corrected. - **The answer-email session link:** left as drawn. The answer page it opens now links the session instead (#950).
Author
Collaborator

Closing with the v4.5.0 milestone (owner, 17 Oct 2026). The owner signed this lane off on 5 Oct, and it shipped in 4.5.0 on 12 Oct; fixes found on prod since went into 4.5.1 to 4.5.3.

Closing with the v4.5.0 milestone (owner, 17 Oct 2026). The owner signed this lane off on 5 Oct, and it shipped in 4.5.0 on 12 Oct; fixes found on prod since went into 4.5.1 to 4.5.3.
Sign in to join this conversation.
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
rbrooks/Quest-Board#736
No description provided.