v4.3.0 build order: Product Surface in eight phases #514
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Tracking issue for the v4.3.0 milestone (34 issues from the #319 audit plus #302–#305 and #479). Proposed order, with the reasoning, so the milestone is built as a sequence rather than a pile. Each phase is one or more PRs; phases marked ∥ can run in parallel with the previous one because they touch different files.
Principles
Phase 1 — Stop lying (all small, all independent, run in parallel) → ship early as v4.2.3
session_urlexists, thread it through)Worth a patch release on its own: three of these are CRITICAL/HIGH bot lies on prod today, and none touches the frontend structure.
Phase 2 — The spine
Sequential in one lane: the nav links need the final names.
Phase 3 — The workbench lane (sequential, one lane)
#302 session picker default → #303 beat-notes round trip (read path, real append, no clobber) → #304 re-open restores output → #305 prep prompt gets GM intent (notes box in the prep panel, one-shot steer, rebalanced prompt) → #374 the navigational fixes (Prep-this-session button, query params, date labels, one save action, history refetch, palette 13 → 5–6) → #381 elapsed timers (GeneratorPanel is already open).
Decision recorded here, override if wrong: the palette cut folds
series_titles,npc_voiceandrandom_tableinto the tools they support, as the audit proposes.Phase 4 ∥ — The attention surface (parallel with phase 3; different files)
#370 web RSVP (writes to the same attendance data as Discord reactions; party roster) → #380 status fields for the four invisible post-session tasks (migration) and the "Post-session processing" checklist → #368 the "Needs you" aggregate endpoint and dashboard block (open votes, missing RSVPs, transcripts awaiting approval, pending suggestions, in-progress sessions; countdown becomes a link).
Phase 5 ∥ — Bot self-diagnosis (parallel with phases 3–4; two lanes inside
bot/)/help, guild-join welcome, real error strings, "no campaign bound" vs "nothing scheduled" → #393/record startsession identity, validated UUID, fulfilled stop, restart-safe active state (#399's recovery already covers the audio; this is the state and the messages) → #392 linking dead ends (real pages instead of raw JSON, correct DM on conflict,/linknamed in Profile)Phase 6 — The wiki lane (sequential, one lane; after phase 2 so names are settled)
#375 proposal discovery (one-line link fix, entry link out of the hidden aside, inline queue replaced by an always-visible summary row) → #385 one review vocabulary and flow (Approve vs Review merge, busy states, no
alert(), consistent append/replace copy) → #395 robustness (poll timeout, inline errors instead of page-level, confirm on Full regenerate) → #396 search box and paginated sidebar → #377 the silent-error sweep last, because it touches twelve files across every cluster and is cheapest once the others have settled.Phase 7 — Onboarding and self-service
#387
/join/<code>link and first-run checklist → #388 players get the "Previously on" recap → #389 un-reveal, delete XP,.icsexport → #382 explain gated states instead of hiding → #390 end-user docs and the Login page copy (last, so it documents what shipped).Phase 8 — One live-session screen
#386 fold the Recording Dashboard into SessionDetail. Last because it is the largest restructuring and v4.4.0 redesigns this surface anyway. Decision recorded here, override if wrong: SessionDetail becomes the canonical screen (it is the hub every other link lands on); the standalone dashboard's live panel moves into it, the "Dashboard →" link goes, and recording controls become reachable from a
proposedsession.Release shape
Phase 1 as v4.2.3 within a day; phases 2–8 as v4.3.0, deployed to dev after each phase for a look, prod once at the end. If the milestone runs long, phases 2–5 are a coherent v4.3.0 on their own and 6–8 can be v4.3.1.
Out of scope, noted
Nothing here is visual redesign; that is v4.4.0. #386 is the one place the two milestones touch, which is why it is last.
v4.3.0 build order: Product Surface in eight phases</title> <parameter name="body">Tracking issue for the v4.3.0 milestone (34 issues from the #319 audit plus #302–#305 and #479). Proposed order, with the reasoning, so the milestone is built as a seq…to v4.3.0 build order: Product Surface in eight phasesApproved 2026-09-06; phase 1 started. Three lanes in parallel: bot (#372, #391, #394 on one branch, since they share
cogs/notifications.py), frontend (#384, #383, #376 on one branch), and #479 on its own. One PR per lane, thenchore(release): v4.2.3, dev, prod. The two decisions recorded above (palette cut, SessionDetail as the canonical recording screen) stand unless overridden.Phase 1 shipped as v4.2.3 (PRs #515, #516, #517; release PR #518), live on dev and prod 2026-09-06 02:23 UTC. All seven issues closed with completion notes; #383 turned out to be already fixed by #330 and got regression tests instead.
In flight now, in parallel: phase 2 (#378 nav bar → #379 vocabulary), phase 5 lane A (#369 → #371) and phase 5 lane B (#373 → #393 → #392). Phase 4 starts when phase 2 lands, so its dashboard and session-page work uses the new nav and names. Two migrations are expected before v4.3.0 (#369's delivery status, #380's task statuses); they will be chained to one head at the release.
Phase 2 landed (PR #519, #378 + #379) and is on dev now for a look: the nav bar, the campaign switcher, and the new names. Phase 4 (#370 → #380 → #368) started from that base. Phase 5 lane B is PR #521 (#373, #393, #392), auto-merging; lane A (#369, #371) is still building. One adjacent finding from lane B filed as #520 (raw tracks deleted on a mid-conversion failure), not in this milestone unless you want it.
Phase 5 complete on main: lane B (PR #521: #373, #393, #392) and lane A (PR #523: #369, #371). Phase 4 (#370, #380, #368) is finished and going up as a PR now; its RSVP migration was re-chained after lane A's delivery-status migration so alembic has one head (
f0ab1c2d3e4f → fa0b1c2d3e4f → 0b1c2d3e4f5a), proven by applying all four on a fresh database. Phases 3 (Prep lane) and 6 (wiki lane) are building in parallel; #377 runs after they land, then phases 7 and 8.Follow-ups filed from the reviews, none in this milestone: #520 (raw tracks deleted on a mid-conversion failure), #522 (
QuestBoardApiErrorconstructor guard), #524 (count_bot_proposalsignoresdeleted_at), #525 (RSVP "no" into the at-risk evaluation).Phase 4 merged (PR #526) and dev is now on main
50fa488with phases 1, 2, 4 and 5 all in: the migrate container appliedf0ab1c2d3e4f → fa0b1c2d3e4f → 0b1c2d3e4f5ain order, head0b1c2d3e4f5a, 7/7 healthy. Worth a look on dev: the nav bar and campaign switcher, the "Needs you" block on the dashboard (it is absent until something is pending), the RSVP control and post-session checklist on a session page, and the delivery-status banner and per-field Discord test buttons on a campaign page. The bot side (acks,/help, autocomplete, the failure embed) is not observable on dev, which has no Discord token; it will be on prod at v4.3.0.Remaining: phase 3 (Prep lane) and phase 6 (wiki lane) are building; then #377, phase 7, phase 8, release.
Phase 6 merged (PR #527: #375, #385, #395, #396). Main now carries phases 1, 2, 4, 5 and 6; 26 of the milestone's 34 issues are closed. Phase 3 (the Prep lane, six issues) is the last lane still building; after it, #377, phase 7 and phase 8 run in sequence since they share files, then the v4.3.0 release with its three migrations.
#377 (PR #529) and phase 7a (PR #530: #387, #390) are merged; 30 of 34 issues closed, main at
a3ee8a8. Both PRs needed one CI fix each before landing: #530's own founding-GM test relied on an ambiguousjoined_attie (now dated explicitly, with a deterministic tie-break in the query), and #529 tripped a flaky phase-6 poll test whose wait was too short for a loaded runner (widened). Phase 7b (#388, #389, #382) is building now; then phase 8 (#386), then the v4.3.0 release.Phase 7b merged (PR #531: #388, #389, #382). 33 of 34 issues closed; only #386 (phase 8, the single live-session screen) is still building. One correction from 7b worth knowing about the plan: widening the cold-open recap to players would have exposed GM-only plot threads, so the endpoint filters them for non-GMs rather than opening the whole payload. Dev is being redeployed with everything merged so far; the v4.3.0 release follows #386.
v4.3.0 is live on prod and dev (release PR #533, tag
v4.3.0, deployed 2026-09-06 09:53 UTC). All 34 issues of the milestone are closed with completion notes on each; the build followed the eight phases above, with phase 1 shipped early as v4.2.3.What the plan got wrong, for the record:
beat_noteson the GM-gated session response); the read endpoint was added anyway and the field kept, with a test that the two agree..icsendpoint already existed with no caller.proposedsessions: there never was one.Two decisions recorded here were applied as written: the Prep palette folds to six jobs with every tool kept as a leaf, and
SessionDetailis the canonical live-session screen with the old recording address redirecting.Follow-ups filed during the build, all outside this milestone: #520, #522, #524, #525, and one end-of-milestone bundle for the smaller findings. Closing.