Lane 2b review — encoding, alignment, D21 and a licence way out (#659) #683
Closed
claude-bot
wants to merge 0 commits from
redesign/lane2b-review into main
pull from: redesign/lane2b-review
merge into: rbrooks:main
rbrooks:main
rbrooks:feat/1328-fill-it-in
rbrooks:feat/1328-fill-frontend
rbrooks:feat/1328-fill-backend
rbrooks:feat/9-foundry-push
rbrooks:fix/9-foundry-live
rbrooks:feat/9-foundry-push-frontend
rbrooks:renovate/celery-5.x
rbrooks:feat/5-foundry-connect
rbrooks:feat/9-foundry-push-backend
rbrooks:feat/9-foundry-push-module
rbrooks:feat/5-foundry-frontend
rbrooks:feat/5-foundry-backend
rbrooks:feat/5-foundry-module
rbrooks:release/v4.8.0-rc1
rbrooks:docs/d341-convert-draft
rbrooks:feat/958-update-to-version
rbrooks:feat/958-convert-sheet
rbrooks:feat/958-pathbuilder-import-frontend
rbrooks:fix/1360-heading-order
rbrooks:feat/958-pathbuilder-import-backend
rbrooks:feat/11-weekly-digest
rbrooks:feat/1341-auto-update
rbrooks:docs/d332-superseded
rbrooks:chore/1345-names-cleanup
rbrooks:feat/1342-mentioned-pages
rbrooks:feat/1328-recipes
rbrooks:fix/1346-pgdg-key
rbrooks:perf/1247-shared-recording-stream
rbrooks:chore/132-gitleaks-allowlist
rbrooks:release/v4.7.1
rbrooks:spike/foundry-module
rbrooks:release/v4.7.1-rc1
rbrooks:docs/decisions-d332-d337
rbrooks:fix/bot-certifi
rbrooks:chore/release-4.7.0
rbrooks:chore/release-4.7.0-rc4
rbrooks:chore/deps-4.7.0
rbrooks:chore/release-4.7.0-rc3
rbrooks:fix/1280-quote-must-say-it
rbrooks:fix/1257-names-row-squeeze
rbrooks:chore/release-4.7.0-rc2
rbrooks:fix/1245-pg-upgrade-count
rbrooks:chore/release-4.7.0-rc1
rbrooks:feat/1257-names-in-prep
rbrooks:feat/1257-be
rbrooks:feat/1257-fe
rbrooks:feat/1257-rating-fixes
rbrooks:design/1328-fill-it-in
rbrooks:feat/1257-name-splits
rbrooks:fix/1326-redis-503
rbrooks:feat/1280-fact-suggestions
rbrooks:feat/1280-be
rbrooks:feat/1280-fe
rbrooks:design/1280-fact-suggestions
rbrooks:feat/1279-infobox
rbrooks:feat/1279-be
rbrooks:feat/1279-fe
rbrooks:feat/1321-shelf-copies
rbrooks:design/1279-infobox
rbrooks:feat/1243-table-find
rbrooks:feat/1257-who-rated
rbrooks:feat/1243-prep-drawer
rbrooks:feat/1243-sheet-pickers
rbrooks:design/1243-browse-in-place
rbrooks:feat/1315-hotwords-default
rbrooks:feat/1242-system-filters
rbrooks:feat/1257-more-name-styles
rbrooks:feat/506-leg3-hotwords
rbrooks:design/1242-system-filters
rbrooks:fix/1302-packs-polish
rbrooks:feat/1241-rules-library
rbrooks:design/1241-rules-library
rbrooks:feat/1245-postgres-18
rbrooks:integ/4.6.2
rbrooks:fix/1263-map-ui-2
rbrooks:fix/1263-map-server
rbrooks:fix/1263-map-ui-1
rbrooks:fix/1261-editor-link-menu
rbrooks:fix/1229-axe-4.14-name-mismatch
rbrooks:renovate/axllent-mailpit-1.x
rbrooks:renovate/eslint-monorepo
rbrooks:renovate/authlib-1.x
rbrooks:chore/release-4.6.0
rbrooks:chore/release-4.6.0-rc2
rbrooks:fix/460-rc2-screens
rbrooks:fix/460-rc2-server
rbrooks:fix/release-prerelease-exit
rbrooks:chore/release-4.6.0-rc1
rbrooks:feat/125-campaign-templates
rbrooks:feat/126-calendar
rbrooks:feat/1181-pictures-and-files
rbrooks:feat/1190-event-people
rbrooks:integ/4.6.0
rbrooks:feat/1191-line-of-the-night
rbrooks:feat/1200-starter-packs
rbrooks:chore/bot-multidict-and-playwright-group
rbrooks:fix/1202-this-week-answered-count
rbrooks:fix/122-124-leftovers
rbrooks:fix/1178-get-routes-that-write
rbrooks:fix/1203-journeys-check-names
rbrooks:design/125-campaign-templates
rbrooks:feat/126-calendar-engine
rbrooks:design/126-in-world-calendar
rbrooks:fix/1189-cited-stamp-in-range
rbrooks:fix/1189-v4-looser-check
rbrooks:fix/1189-richer-beats
rbrooks:fix/1113-export-bind-lists
rbrooks:fix/1154-release-notes-by-file
rbrooks:chore/release-4.5.0
rbrooks:chore/release-4.5.0-rc12
rbrooks:fix/1135-wiki-markup-as-text
rbrooks:fix/demo-usage-cost-in-window
rbrooks:chore/release-4.5.0-rc11
rbrooks:fix/1121-sheet-consistency
rbrooks:fix/1121-sheet-5e-terms-and-card-hp
rbrooks:copy/1122-busiest-pages
rbrooks:fix/1121-relevant-choices
rbrooks:fix/1121-wiki-create-npc-save-sheet-links
rbrooks:fix/1029-menu-stays-on-screen
rbrooks:docs/prototype-transcript-bin-wording
rbrooks:fix/1023-editor-save-row-back-scroll
rbrooks:fix/1020-search-exact-first
rbrooks:fix/1020-table-prep
rbrooks:fix/1020-shell-wordmark-footer-bell
rbrooks:fix/1020-wiki-article-party
rbrooks:fix/872-admin-kept-until-phone-tables
rbrooks:feat/l13-milestone-level-waiting
rbrooks:fix/1000-1001-bell-older-setup-context
rbrooks:fix/999-pronouns-in-prompts
rbrooks:fix/l19-other-class-feats
rbrooks:fix/1010-transcript-window-ordinary-confirm
rbrooks:docs/d254-d269-decisions
rbrooks:fix/702-member-search
rbrooks:fix/680-transcript-bin
rbrooks:fix/993-unidentified-prompts
rbrooks:fix/841-redis-timeouts
rbrooks:fix/990-binned-not-exported
rbrooks:fix/830-export-prep-shelf
rbrooks:fix/deps-audit-2026-10-01
rbrooks:fix/877-title-reads
rbrooks:fix/798-audio-received-at
rbrooks:build/lane11-17-j7
rbrooks:build/lane11-16-levelup
rbrooks:build/lane11-14-seams
rbrooks:build/lane11-14-seed
rbrooks:build/lane11-15-start
rbrooks:build/lane11-13-old-block-out
rbrooks:fix/980-review-r3
rbrooks:build/lane11-12-block
rbrooks:build/lane11-8-packs
rbrooks:fix/demo-seed-canonical-names
rbrooks:build/lane11-11-hot-half
rbrooks:docs/l11-decisions
rbrooks:build/lane11-7-convert
rbrooks:build/lane11-10-editing
rbrooks:fix/npm-audit-brace-expansion
rbrooks:build/lane11-9-sheet-page
rbrooks:fix/bot-pyjwt
rbrooks:build/lane11-6-content
rbrooks:fix/lane11-rank-names
rbrooks:build/lane11-2b-language
rbrooks:build/lane11-4-js-evaluator
rbrooks:build/lane11-3-server
rbrooks:build/lane11-5a-pf2e
rbrooks:build/lane11-5b-5e
rbrooks:feat/design-admin
rbrooks:build/lane11-2-evaluator
rbrooks:build/lane11-1-sheet-pieces
rbrooks:build/lane11-0-drawing
rbrooks:fix/943-quest-objectives-fk
rbrooks:fix/prepsheet-shelf-flake
rbrooks:fix/945-leftovers
rbrooks:build/demo-gm-copy
rbrooks:fix/901-email-landings
rbrooks:build/lane10-8-journeys
rbrooks:build/demo-seed-lanes-8-10
rbrooks:fix/887-gm-own-confirmation
rbrooks:build/lane9-5-j1-admin
rbrooks:fix/918-audience-click
rbrooks:fix/useasync-overtaken
rbrooks:ci/939-critical-path
rbrooks:test/937-backend-suite-speed
rbrooks:chore/claude-orchestration
rbrooks:fix/924-xp-gm-only
rbrooks:fix/session-stale-poll
rbrooks:docs/decisions-d239-d242
rbrooks:fix/930-pypdf
rbrooks:build/lane8-journeys
rbrooks:build/925-quest-editor
rbrooks:fix/894-private-page-pictures
rbrooks:build/lane8-p4-drafts
rbrooks:build/lane8-p7-map
rbrooks:build/lane8-p6-handouts-rules
rbrooks:fix/wiki-fixture-names
rbrooks:build/lane10-d227-test-usage
rbrooks:fix/rsvp-horizon-test-tuesday
rbrooks:fix/media-volume-owner
rbrooks:build/lane8-p3-editor
rbrooks:fix/912-unidentified-rename
rbrooks:build/lane8-p5-party-quests
rbrooks:build/lane8-handout-takeback
rbrooks:build/lane10-pickers
rbrooks:build/lane8-p2-article
rbrooks:build/lane8-6-map
rbrooks:build/lane10-7b-email-pages
rbrooks:build/lane8-5-handouts
rbrooks:build/lane10-7a-test-the-bot-pages
rbrooks:build/lane8-p1-pages
rbrooks:build/lane8-4-quests
rbrooks:build/lane8-2b-feeds
rbrooks:build/lane8-3-parties
rbrooks:build/lane8-2a-links
rbrooks:build/lane10-5-commands
rbrooks:build/lane9-6-seed
rbrooks:build/lane10-4b-reactions
rbrooks:build/lane9-4d-pages
rbrooks:build/lane9-4c-pages
rbrooks:build/lane10-4a-posts
rbrooks:build/lane10-3-email
rbrooks:fix/891-web-fonts
rbrooks:build/lane9-4b-pages
rbrooks:build/lane10-6-test-the-bot
rbrooks:build/lane10-2-notify-out
rbrooks:build/lane8-1-wiki-text
rbrooks:build/lane9-4a-frame
rbrooks:design/lane10-drawings
rbrooks:fix/j6-budget
rbrooks:fix/j5-phone-flake
rbrooks:fix/869-test-leaks
rbrooks:fix/843-record-start-followups
rbrooks:build/lane7-all
rbrooks:build/lane6-all
rbrooks:build/lane9-b2-server
rbrooks:chore/changelog-fragments
rbrooks:docs/decisions-d218
rbrooks:build/lane9-a-owner-overview
rbrooks:fix/rule-card-level-label
rbrooks:fix/834-retention-semantics
rbrooks:fix/o3c-record-without-announcement
rbrooks:docs/decisions-d179
rbrooks:docs/decisions-d131-d170
rbrooks:fix/851-commit-before-response
rbrooks:build/lane6-j3-seed
rbrooks:build/lane9-b1-d67-identity
rbrooks:fix/841-blocking-loop
rbrooks:build/lane9-c-backups-audit
rbrooks:fix/vote-race-and-start-commit
rbrooks:fix/recording-announcement
rbrooks:fix/proposal-read-leak
rbrooks:fix/last-admin-guard
rbrooks:build/lane6-p4c-planning
rbrooks:build/lane6-p4b-margin
rbrooks:build/lane6-p4a-sheet
rbrooks:build/lane5-j4-seed
rbrooks:build/lane6-base
rbrooks:build/lane7-pages-talk
rbrooks:build/lane5-pages
rbrooks:build/lane7-pages-safety
rbrooks:build/lane7-p3-safety
rbrooks:build/lane7-p2-notify
rbrooks:build/lane6-p3-planning
rbrooks:build/lane6-p2-history
rbrooks:build/lane6-p1b-items
rbrooks:build/lane7-p1-threads
rbrooks:build/lane5-p6-faces
rbrooks:build/lane6-p1a-sheet
rbrooks:build/lane5-p5-find
rbrooks:build/lane5-p4a-board
rbrooks:build/lane5-p4b-scenes
rbrooks:build/lane5-p3-live
rbrooks:build/lane5-base
rbrooks:build/lane5-p2-cards
rbrooks:docs/lane5-decisions
rbrooks:build/review-r2-wide
rbrooks:fix/review-r1
rbrooks:build/lane5-p1-scenes
rbrooks:build/demo-seed
rbrooks:build/lane4-journeys-j5
rbrooks:build/lane4-page-review-b
rbrooks:build/lane4-page-review-a
rbrooks:build/lane4-page-read
rbrooks:build/lane4-journeys
rbrooks:build/lane4-page-sess2
rbrooks:build/lane4-page-sess1
rbrooks:build/lane4-notes
rbrooks:build/lane4-discord-on-approval
rbrooks:build/lane4-scheduling
rbrooks:build/lane4-versions
rbrooks:build/760-session-number
rbrooks:build/lane4-decisions
rbrooks:build/797-erase-no-regenerate
rbrooks:build/test-race-audit
rbrooks:build/lane3-completions
rbrooks:build/794-dark-only
rbrooks:build/796-titles-scroll
rbrooks:build/791-retention-anchor
rbrooks:build/a11y-sweep
rbrooks:build/shell-followups
rbrooks:build/retention-preview
rbrooks:build/753-backup-readback
rbrooks:docs/d91-d93
rbrooks:build/lane3-j1
rbrooks:build/ci-harness-paths-selftest
rbrooks:fix/useauth-test-race
rbrooks:build/ci-harness-paths
rbrooks:build/777-ai-settings-read
rbrooks:build/lane3-settings-c
rbrooks:build/lane3-settings-b
rbrooks:build/lane3-j6
rbrooks:build/lane3-sessionform
rbrooks:build/lane3-settings-a
rbrooks:build/lane3-members
rbrooks:build/lane3-thisweek
rbrooks:build/lane3-story
rbrooks:chore/87-align-python-3.12
No reviewers
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!683
Loading…
Reference in a new issue
No description provided.
Delete branch "redesign/lane2b-review"
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?
Refs #659. Owner review of lane 2b — five things.
The page was double-encoded (my fault)
I inserted the closing section with PowerShell
Get-Content -Raw+Set-Content -Encoding utf8. PS 5.1 reads a BOM-less UTF-8 file as the Windows ANSI codepage, so every non-ASCII character came back one layer too deep —Pathfinder 2e · 214 creatures,an administrator’s— plus a BOM on the front.Repaired by re-encoding only the runs that are genuinely double-encoded. A mojibake run re-encodes to valid UTF-8, because that is precisely what it is; a correct run does not — a lone
ébecomes the single byte0xE9, which is not a valid UTF-8 sequence on its own — so it fails the test and is left untouched. That property matters here, because the file was mixed: the edits I made after the bad write were correct, and a blanket transform would have corrupted them. My first two attempts at a blanket repair both aborted on their own guard rails, which is how I found that out.Guarded by a test, which CI now runs: every prototype file must be valid UTF-8, carry no BOM, and contain none of the mojibake markers.
Settings → General did not line up
.form__twostretched its cells, and each cell is itself a grid of label/field/hint with auto rows — so the spare height was distributed between those rows, and the moment one side's hint wrapped to two lines the other side's field slid down.align-items: start. This fixes lane 2's General too, which has the same pair.Same class of fault in the new stat-conversion list: the type chips differ in width, so on a flex row every title started at a different x. Now a grid with a fixed first column.
D21 — settled
The Contents opens into the nine. The back bar is kept for the phone, where there is no rail on screen to go back through. Recorded in the intro and on CAMP-9; the page no longer presents it as a choice.
A pack with no licence is no longer a dead end
New row
IS-315.export_service.decide()withholds anything whose licence is not redistributable and nothing can add one afterwards — which lands hardest on exactly the wrong pack: the house rules a group wrote themselves, and therefore certainly own, are the ones the product refuses to give back. The block now carries the way past it, written as a question about use rather than a licence picker ("We wrote it" is the common answer and is not a licence anyone has heard of), and a licence a GM sets is marked as theirs rather than the file's.Foundry copy corrected
"Most groups do not run Foundry" was wrong — the integration is unbuilt because it is large, not because it is unwanted. The empty state now reads as an invitation rather than as a feature that is missing.
Also
The CAMP-11 rename was labelled D21 in
headers.md, which is the navigation decision's number. It gets its own, D26.Verification
🤖 Generated with Claude Code
Merged to
maininb2e4675, and deployed. Closing by hand — merged by pushing the merge commit rather than through the API, which does not auto-close the PR.Verified on the live page afterwards: no mojibake, the General field pair aligns, and the licence flow and settled D21 copy are both serving.
Pull request closed