Build lane 11: stat blocks and character sheets (WIKI-19) #737
Closed
opened 2026-09-22 00:12:28 +00:00 by claude-bot
·
10 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
No milestone
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#737
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?
Build lane 11 of the v4.5.0 redesign. The brief is
docs/design/v4.5.0-brief.md(§9, the lanes in order); the build plan isdocs/design/v4.5.0-build-plan.md(the rollout rule, the design-system mapping, the journeys as tests). Umbrella: #366. Goes after lane 8 (it replaces the wiki's stat block) and can run beside 9 and 10.Scope
Surfaces: WIKI-19 and its seams on WIKI-3, WIKI-7, TABLE-1, PREP-2, WIKI-15, ADMIN-11 and CAMP-8.
The drawing:
/feedback/prototype/lane9— 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)
sheet_definitions,character_sheets,character_sheet_versionswithrolls_log; the definition validator; the sheet evaluator in both languages with shared fixtures, for creation and levelling (docs/design/character-sheets-spec.md§4, §5, §7 phase 1)sheets/; entryfieldsper kind;LoreEntry.statsbecomes the projection (D74)Acceptance
coverage/lane9.pyclassifies as drawn or replaced is built as the prototype draws it; the script is the checklist. Rows it marks behaviour are tested, not drawn.vocabulary.js; no page-level error destroys rendered content; every async operation shows progress and a next action on failure; disabled controls say why.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
🤖 Generated with Claude Code
An inheritance from lane 3: the CAMP-8 Foundry seam has no owner
Lane 3 has built Members & characters (CAMP-8, #768). Four of its drawn coverage rows are not built, and this is the lane whose scope names that seam.
IS-272(members looked up by name in Foundry),IS-273(AC · HP · Perception, and "Open in Foundry ↗"),IS-274("Synced 2 hours ago") andIS-275(Refresh / "Synced 9 days ago" / "Fetching from Foundry…").There is no server for any of it. The only Foundry code in the backend is
app/reference/adapters/foundry.py, which imports reference content for content packs. Nothing fetches a Foundry actor, stores one, or records a sync time, andCampaignResponsehas no Foundry connection field. D36 — "a Discord or Foundry action is never a dead button" — so the panel is absent rather than drawn dead.IS-276, the typed sheet link that stands in for it, is built.Where it belongs is currently ambiguous, which is why this is here. This issue's scope includes "WIKI-19 and its seams on … CAMP-8", but its own notes say "phase 2 and 3 of the spec (Foundry both ways, Pathbuilder, conversion, the community packs) are their own issues later". D82 ("Foundry both ways and Pathbuilder in", owner, 2026-09-21) is phase 2. So on a plain reading these four rows are neither lane 3's, nor this lane's phase 1, nor any issue that exists yet.
Nothing needs deciding now — flagging it so that when phase 2 is cut as its own issue, these four rows are in its scope rather than being discovered later as a hole in CAMP-8. The member page is built to take the panel: the row layout leaves room for it and the sheet link is where it would sit.
🤖 Generated with Claude Code
Addendum: Settings → Foundry (CAMP-16) is the second Foundry surface with no server
Following the CAMP-8 note above. Lane 3's last Settings PR leaves CAMP-16 unbuilt, for the same reason: every one of its rows needs a server that does not exist.
IS-268Foundry server URL, API key, system selectorIS-269set and clear the stored Foundry key (never returned)IS-270/IS-271Test connection, with a clear pass/fail and an actionable errorIS-321a scene paired with a Foundry map, in both directionsThere are no Foundry fields on the campaign and no Foundry router at all — the only Foundry code in the backend is
game_system.foundry_system_idand the content-pack reference adapter.IS-321additionally needs scenes to be first-class (#689 / D33), which they are not yet.D36: the section stays
built: falseinshell/settingsSections.jsand is absent from the index and the Contents.So phase 2's scope, whenever it is cut as an issue, now has nine drawn rows across two surfaces waiting on it: CAMP-8's four (
IS-272–IS-275) and CAMP-16's five. The connection settings (IS-268–IS-271) are the natural first step, since everything else reads them.🤖 Generated with Claude Code
Correction to both notes above. I said the CAMP-8 and CAMP-16 Foundry rows "belong to nobody" and that phase 2 "has no issue yet". Both are wrong. The work is already planned, under the v5.0.0 – FoundryVTT Phase 1: Foundation milestone:
IS-268,IS-269: URL, key, system selectorIS-270,IS-271: test connection, pass/failIS-272–IS-275: CAMP-8's member-list panelIS-321: scene ↔ map pairingSo nothing is orphaned. Those rows arrive with v5.0.0, and the redesign ships without them, absent rather than drawn dead (D36). Lane 11's scope line about "its seams on … CAMP-8" is satisfied by #8 whenever v5.0.0 lands, not by lane 11 itself.
🤖 Generated with Claude Code
Owner's answers, 2026-09-30. The build contract's Q1–Q10 (L1–L10 on the morning page) and L11 (the PF2e Hit Points wording) all went as recommended, so nothing already built changes. They are recorded as D243–D253 in
sources/intro.mdandCATALOGUE.md, and the prototype index and contract §5 note them. Branchdocs/l11-decisions(dd0e3033); its PR opens when a CI slot frees.One consequence to carry into the rest of the lane: D243 makes publishing the full Player Core and SRD 5.2.1 starters a release step for the owner, due before v4.5.1.
PR 11 #976 merged (2026-09-30, the sheet's hot half). It includes the lock-draft fix: a kept draft drops any fields the GM has locked since. The earlier red runs were runner trouble; the re-run was green.
PR 8 #977 is green but was refused as behind main; main is merged into it and it's being re-tested. PR 12 render-check fixes are committed (
a7e90811; backend 818/818, the affected vitest files green) and being re-rendered. PR 13 is clean on a full run (backend 6519 passed, vitest 3448 passed) with PR 12 merged in. PR 15's name-match fallback is reverted (id match only), and it has a proper fix for the "adds a row" test race.Merged on 2026-09-30: PR 8 #977, PR 12 #982, PR 13 #984 and PR 15 #985 (plus PR 11 #976 earlier). The D243–D253 decisions landed as #981. Lane 11 PRs 0–13 and 15 are now on main.
PR 14 (seams, Admin, demo seed wave A) is built on
build/lane11-14-seams, with the seed merged in frombuild/lane11-14-seed. It is being re-tested after render-check fixes; its PR follows.GET /sheets/editable).sheet_id).Seed notes for later:
@ext.xp_awarded, PF2e XP reads 0 (Ossian 0/1,000, not the drawing's 340).tableaudience, because that is whatlegacy.field_visibilitydoes; the contract says party. To revisit.PR 16 (Level up) is being built on
build/lane11-16-levelup, off PR 15.Progress, 1 Oct (15:05 UTC):
sheet_idstays as the contract has it. IS-463 and IS-464 are now classified inlane9.py, and inlane2.pyandlane6b.py, which also failed on them.build/lane11-17-j7. It also takes the two wave A seed caveats (PF2e XP reading 0; converted public legacy blocks coming outtablerather thanparty).class: "Rogue"text on a PF2e sheet does not link the class record, so Hit Points lack the class figure. Start a character's picker sets it properly; seeded sheets must do the same.After PR 17: lane 11's items go on the Redesign Review page, with the R3 (#980) answers.
Lane 11's build series is complete (1 Oct, 16:36 UTC). Every PR of the contract's plan, 0 to 17, is on main (
46233e4c). Merged today: #986 (PR 14), #987 (PR 16), #989 (PR 17).What landed today
Wave A's two seed caveats
table, notparty: left as built, on purpose (PR 7'sAUDIENCE_OF, the merged migration and a test all hold it;partywould hide a block from a member with no active character). The contract row is noted as differing. Question L17.Open for the owner (Questions page, the build follows the recommendations): L12–L16 (Level up), L17 (converted blocks), L18 (a retired character's party XP), L19 (class feat step offers other classes' feats; a follow-up if (b)).
Follow-up closed: #988 (reads moving
updated_at) was not reproducible.Next: lane 11 is on the Redesign Review page (21 pieces), with the R3 (#980) re-checks. It needs a dev deploy and re-seed before the owner can review it; that waits for the owner's OK. This issue stays open for that review.
The owner answered L12–L19 on 2026-10-01; recorded as D254–D261 in PR #1012 (merged, main
9112e245), with the eight answers from the issue work (D262–D269).Lane 11 stays open for the owner's review of dev. #1007 and #1008 are being built now.
Lane 11 is signed off. The owner reviewed it on dev on 10 and 11 October (13 pieces fine, 7 to change; #1121), re-checked the fixes on v4.5.0-rc11 on 12 October, marked every piece "Looks right" and signed the lane: "I think you nailed it. Nice work!". Follow-ups from the review are #1121 (closed) and #1135. Closing.