v4.3.0 build order: Product Surface in eight phases #514
Closed
opened 2026-09-06 00:33:37 +00:00 by claude-bot
·
9 comments
No Branch/Tag specified
main
feat/1328-fill-it-in
feat/1328-fill-frontend
feat/1328-fill-backend
feat/9-foundry-push
fix/9-foundry-live
feat/9-foundry-push-frontend
renovate/celery-5.x
feat/5-foundry-connect
feat/9-foundry-push-backend
feat/9-foundry-push-module
feat/5-foundry-frontend
feat/5-foundry-backend
feat/5-foundry-module
release/v4.8.0-rc1
docs/d341-convert-draft
feat/958-update-to-version
feat/958-convert-sheet
feat/958-pathbuilder-import-frontend
fix/1360-heading-order
feat/958-pathbuilder-import-backend
feat/11-weekly-digest
feat/1341-auto-update
docs/d332-superseded
chore/1345-names-cleanup
feat/1342-mentioned-pages
feat/1328-recipes
fix/1346-pgdg-key
perf/1247-shared-recording-stream
chore/132-gitleaks-allowlist
release/v4.7.1
spike/foundry-module
release/v4.7.1-rc1
docs/decisions-d332-d337
fix/bot-certifi
chore/release-4.7.0
chore/release-4.7.0-rc4
chore/deps-4.7.0
chore/release-4.7.0-rc3
fix/1280-quote-must-say-it
fix/1257-names-row-squeeze
chore/release-4.7.0-rc2
fix/1245-pg-upgrade-count
chore/release-4.7.0-rc1
feat/1257-names-in-prep
feat/1257-be
feat/1257-fe
feat/1257-rating-fixes
design/1328-fill-it-in
feat/1257-name-splits
fix/1326-redis-503
feat/1280-fact-suggestions
feat/1280-be
feat/1280-fe
design/1280-fact-suggestions
feat/1279-infobox
feat/1279-be
feat/1279-fe
feat/1321-shelf-copies
design/1279-infobox
feat/1243-table-find
feat/1257-who-rated
feat/1243-prep-drawer
feat/1243-sheet-pickers
design/1243-browse-in-place
feat/1315-hotwords-default
feat/1242-system-filters
feat/1257-more-name-styles
feat/506-leg3-hotwords
design/1242-system-filters
fix/1302-packs-polish
feat/1241-rules-library
design/1241-rules-library
feat/1245-postgres-18
integ/4.6.2
fix/1263-map-ui-2
fix/1263-map-server
fix/1263-map-ui-1
fix/1261-editor-link-menu
fix/1229-axe-4.14-name-mismatch
renovate/axllent-mailpit-1.x
renovate/eslint-monorepo
renovate/authlib-1.x
chore/release-4.6.0
chore/release-4.6.0-rc2
fix/460-rc2-screens
fix/460-rc2-server
fix/release-prerelease-exit
chore/release-4.6.0-rc1
feat/125-campaign-templates
feat/126-calendar
feat/1181-pictures-and-files
feat/1190-event-people
integ/4.6.0
feat/1191-line-of-the-night
feat/1200-starter-packs
chore/bot-multidict-and-playwright-group
fix/1202-this-week-answered-count
fix/122-124-leftovers
fix/1178-get-routes-that-write
fix/1203-journeys-check-names
design/125-campaign-templates
feat/126-calendar-engine
design/126-in-world-calendar
fix/1189-cited-stamp-in-range
fix/1189-v4-looser-check
fix/1189-richer-beats
fix/1113-export-bind-lists
fix/1154-release-notes-by-file
chore/release-4.5.0
chore/release-4.5.0-rc12
fix/1135-wiki-markup-as-text
fix/demo-usage-cost-in-window
chore/release-4.5.0-rc11
fix/1121-sheet-consistency
fix/1121-sheet-5e-terms-and-card-hp
copy/1122-busiest-pages
fix/1121-relevant-choices
fix/1121-wiki-create-npc-save-sheet-links
fix/1029-menu-stays-on-screen
docs/prototype-transcript-bin-wording
fix/1023-editor-save-row-back-scroll
fix/1020-search-exact-first
fix/1020-table-prep
fix/1020-shell-wordmark-footer-bell
fix/1020-wiki-article-party
fix/872-admin-kept-until-phone-tables
feat/l13-milestone-level-waiting
fix/1000-1001-bell-older-setup-context
fix/999-pronouns-in-prompts
fix/l19-other-class-feats
fix/1010-transcript-window-ordinary-confirm
docs/d254-d269-decisions
fix/702-member-search
fix/680-transcript-bin
fix/993-unidentified-prompts
fix/841-redis-timeouts
fix/990-binned-not-exported
fix/830-export-prep-shelf
fix/deps-audit-2026-10-01
fix/877-title-reads
fix/798-audio-received-at
build/lane11-17-j7
build/lane11-16-levelup
build/lane11-14-seams
build/lane11-14-seed
build/lane11-15-start
build/lane11-13-old-block-out
fix/980-review-r3
build/lane11-12-block
build/lane11-8-packs
fix/demo-seed-canonical-names
build/lane11-11-hot-half
docs/l11-decisions
build/lane11-7-convert
build/lane11-10-editing
fix/npm-audit-brace-expansion
build/lane11-9-sheet-page
fix/bot-pyjwt
build/lane11-6-content
fix/lane11-rank-names
build/lane11-2b-language
build/lane11-4-js-evaluator
build/lane11-3-server
build/lane11-5a-pf2e
build/lane11-5b-5e
feat/design-admin
build/lane11-2-evaluator
build/lane11-1-sheet-pieces
build/lane11-0-drawing
fix/943-quest-objectives-fk
fix/prepsheet-shelf-flake
fix/945-leftovers
build/demo-gm-copy
fix/901-email-landings
build/lane10-8-journeys
build/demo-seed-lanes-8-10
fix/887-gm-own-confirmation
build/lane9-5-j1-admin
fix/918-audience-click
fix/useasync-overtaken
ci/939-critical-path
test/937-backend-suite-speed
chore/claude-orchestration
fix/924-xp-gm-only
fix/session-stale-poll
docs/decisions-d239-d242
fix/930-pypdf
build/lane8-journeys
build/925-quest-editor
fix/894-private-page-pictures
build/lane8-p4-drafts
build/lane8-p7-map
build/lane8-p6-handouts-rules
fix/wiki-fixture-names
build/lane10-d227-test-usage
fix/rsvp-horizon-test-tuesday
fix/media-volume-owner
build/lane8-p3-editor
fix/912-unidentified-rename
build/lane8-p5-party-quests
build/lane8-handout-takeback
build/lane10-pickers
build/lane8-p2-article
build/lane8-6-map
build/lane10-7b-email-pages
build/lane8-5-handouts
build/lane10-7a-test-the-bot-pages
build/lane8-p1-pages
build/lane8-4-quests
build/lane8-2b-feeds
build/lane8-3-parties
build/lane8-2a-links
build/lane10-5-commands
build/lane9-6-seed
build/lane10-4b-reactions
build/lane9-4d-pages
build/lane9-4c-pages
build/lane10-4a-posts
build/lane10-3-email
fix/891-web-fonts
build/lane9-4b-pages
build/lane10-6-test-the-bot
build/lane10-2-notify-out
build/lane8-1-wiki-text
build/lane9-4a-frame
design/lane10-drawings
fix/j6-budget
fix/j5-phone-flake
fix/869-test-leaks
fix/843-record-start-followups
build/lane7-all
build/lane6-all
build/lane9-b2-server
chore/changelog-fragments
docs/decisions-d218
build/lane9-a-owner-overview
fix/rule-card-level-label
fix/834-retention-semantics
fix/o3c-record-without-announcement
docs/decisions-d179
docs/decisions-d131-d170
fix/851-commit-before-response
build/lane6-j3-seed
build/lane9-b1-d67-identity
fix/841-blocking-loop
build/lane9-c-backups-audit
fix/vote-race-and-start-commit
fix/recording-announcement
fix/proposal-read-leak
fix/last-admin-guard
build/lane6-p4c-planning
build/lane6-p4b-margin
build/lane6-p4a-sheet
build/lane5-j4-seed
build/lane6-base
build/lane7-pages-talk
build/lane5-pages
build/lane7-pages-safety
build/lane7-p3-safety
build/lane7-p2-notify
build/lane6-p3-planning
build/lane6-p2-history
build/lane6-p1b-items
build/lane7-p1-threads
build/lane5-p6-faces
build/lane6-p1a-sheet
build/lane5-p5-find
build/lane5-p4a-board
build/lane5-p4b-scenes
build/lane5-p3-live
build/lane5-base
build/lane5-p2-cards
docs/lane5-decisions
build/review-r2-wide
fix/review-r1
build/lane5-p1-scenes
build/demo-seed
build/lane4-journeys-j5
build/lane4-page-review-b
build/lane4-page-review-a
build/lane4-page-read
build/lane4-journeys
build/lane4-page-sess2
build/lane4-page-sess1
build/lane4-notes
build/lane4-discord-on-approval
build/lane4-scheduling
build/lane4-versions
build/760-session-number
build/lane4-decisions
build/797-erase-no-regenerate
build/test-race-audit
build/lane3-completions
build/794-dark-only
build/796-titles-scroll
build/791-retention-anchor
build/a11y-sweep
build/shell-followups
build/retention-preview
build/753-backup-readback
docs/d91-d93
build/lane3-j1
build/ci-harness-paths-selftest
fix/useauth-test-race
build/ci-harness-paths
build/777-ai-settings-read
build/lane3-settings-c
build/lane3-settings-b
build/lane3-j6
build/lane3-sessionform
build/lane3-settings-a
build/lane3-members
build/lane3-thisweek
build/lane3-story
chore/87-align-python-3.12
v4.8.0-rc1
v4.7.1
v4.7.1-rc1
v4.7.0
v4.7.0-rc4
v4.7.0-rc3
v4.7.0-rc2
v4.7.0-rc1
v4.6.2
v4.6.2-rc4
v4.6.2-rc3
v4.6.2-rc2
v4.6.2-rc1
v4.6.1
v4.6.1-rc1
v4.6.0
v4.6.0-rc2
v4.6.0-rc1
v4.5.3
v4.5.3-rc1
v4.5.2
v4.5.2-rc1
v4.5.1
v4.5.1-rc2
v4.5.1-rc1
v4.5.0
v4.5.0-rc12
v4.5.0-rc11
v4.5.0-rc10
v4.5.0-rc9
v4.5.0-rc8
v4.5.0-rc7
v4.5.0-rc6
v4.5.0-rc5
v4.5.0-rc4
v4.5.0-rc3
v4.5.0-rc2
v4.5.0-rc1
v4.4.1
v4.4.0
v4.3.0
v4.2.3
v4.2.2
v4.2.1
v4.2.0
v4.1.2
v4.1.1
v4.1.0
v4.0.1
v4.0.0
v3.11.4
v3.11.3
v3.11.2
v3.11.1
v3.11.0
v3.10.0
v3.9.1
v3.9.0
v3.8.0
v3.7.0
v3.6.1
v3.6.0
v3.5.0
v3.4.1
v3.4.0
v3.3.0
v3.2.0
v3.1.0
v3.0.0
v2.1.0
v2.0.0
v1.1.0
v1.0.0
v0.12.0
v0.11.0
v0.10.0
v0.9.1
v0.3.3
v0.9.0
v0.8.0
v0.3.2
v0.3.1
v0.3.0
v0.7.0
v0.6.0
v0.5.0
v0.4.0
v0.2.1
v0.2.0
v0.1.1
v0.1.0
Labels
Clear labels
backend
Issue related to the backend
bot
Issue related to the bot
bug
Something is not working
duplicate
This issue or pull request already exists
enhancement
New feature
frontend
Issue related to the frontend
help wanted
Need some help
invalid
Something is wrong
question
More information is needed
recording
Issue related to the recording system
security
Security hardening / vulnerability work
wontfix
This won't be fixed
No labels
backend
bot
bug
duplicate
enhancement
frontend
help wanted
invalid
question
recording
security
wontfix
Milestone
Clear milestone
No items
Projects
Clear projects
No items
No project
Assignees
Clear assignees
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#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.