[Feature] Rules and bestiary lookup at the table and in Prep #553
Closed
opened 2026-09-08 00:44:58 +00:00 by claude-bot
·
5 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#553
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?
Requested by the owner in the v4.4.0 checkpoint A feedback (#535, GM answers, 2026-09-07): "I also would love it if I could reference rules / search bestiaries, which isn't currently a supported feature in Quest Board but I would love to have added." Alongside it, the same answer names the things a GM needs at the table: the beats and arcs laid out, name generation, and a fast way back into the wiki's history. This issue is the reference half.
What
A search over the rules and creatures of the campaign's game system, reachable from where a GM already works: Prep, the Shelf's search (Ctrl-K), and the live table surface of the redesign. A hit renders as Quest Board already renders game-aware content (a stat block in the structured schema from #130; a rule, condition or action as text with its source), can be put on the Shelf as a card with a GM side and a player-safe side, and carries its licence attribution.
Why it belongs here
Quest Board is already game-aware (v3.9.0: a game-system registry, structured stat blocks, a stat-conversion wizard) and already has the card and search surfaces a lookup would land on. What it lacks is the content and a way to search it. Self-hosting shapes the answer: content must be either bundled under a licence that allows redistribution or fetched from a source the operator can point at, and the lookup must work offline at a table with no dependence on a third party being up.
Open questions the investigation answers first
/askanswers from campaign history.Not in scope
Anything that requires paid or non-redistributable content; a full rules engine; character sheets.
Milestone candidate: v4.5.0 Table & Safety Tools, on top of the v4.4.0 design system. The investigation is filed against this issue as a committed report under
docs/design/, not the gitignored internal folder.Investigation done, committed as
docs/design/rules-reference-investigation-2026-09.md(PR to follow). The short version:Licences allow bundling, for two sources. Pathfinder 2e's remaster line is under the ORC licence (mechanics may be copied into software, commercially, with the ORC Notice and Paizo's attribution; proper nouns, lore and art are reserved). D&D's SRD 5.1 and 5.2.1 are CC-BY-4.0, irrevocably. Machine-readable forms: the Foundry pf2e packs (each record carries
publication.license, so an ORC-only filter is trivial) and Open5e's data (per-document licences;srd-2014andsrd-2024). The Paizo Community Use Policy, which Archives of Nethys and pf2ools rely on, forbids commercial use, so neither is a foundation for a hosted product. The 2026-07 decision not to bundle content was right about that policy and is reversed here only for ORC and CC-BY material.The codebase is close. The registry and versioned stat schemas already hold exactly a Monster Core or SRD creature's headline numbers; the stat-block renderer, the Shelf card and reveal pipeline, the Prep tool registry and the LLM call surface are reusable as they are. Missing: content, a table with a real index (the session
tsvectorsearch is the pattern to copy; the wiki search is a Python substring match that ignoresstats), areferencesnapshot kind on the Shelf, and structured citations.Design: repo import scripts pull pinned upstream commits, filter by licence, drop reserved material (mechanics and rules text in, creature flavour paragraphs out), and write committed packs with a manifest; a
reference_entriestable seeded idempotently like the builtin schemas;GET /api/game-systems/{key}/reference?q=&kind=&level…; a "Look up" Prep tool, a third Ctrl-K section, areferenceShelf card (a condition's text is player-safe by default, a creature's stat block never is), a licences page, the same search inside the v4.4.0 Table mode, and later an ask-the-rules tool with{answer, citations[]}underjson_schema.Phases: 1 data and search (backend-only, can start now beside the redesign); 2 surfaces; 3 table and ask; 4 optional operator packs for OGL third-party books. Milestone candidate v4.5.0 for 2 and 3.
Decisions to confirm with the owner: bundle in the image rather than download-on-demand; start phase 1 now; the reserved-material rule as stated.
Direction confirmed by the owner (2026-09-08): importer-first. Quest Board ships no game content. People load content they have, in formats already in use, and affirm at import (a required checkbox backed by a versioned, server-recorded affirmation) that they are allowed to; starter packs built from ORC and CC-BY sources are release assets fetched on request, never bundled; exports carry licences forward and withhold what may not be shared; and a host can act on rightsholder notices (#555, filed).
Formats in phase 1: the native Quest Board pack (also the export format; a bare JSON array and a CSV for hand-written homebrew), Foundry VTT documents (the common denominator of every system the owner plays: PF2e, D&D 5e, Ryuutama, Discworld, Ember), 5etools homebrew JSON, Dungeon Master's Vault
.orcbrew, and Open5e JSON. Two scopes (instance by an admin, campaign by a GM), campaign wins on a name clash, GM-only visibility by default for campaign packs, sanitised HTML, size caps, a private-address guard on URL fetches.The contract is
docs/design/content-packs-spec.md(PR to follow). Phase 1 is starting now as six lanes: foundation; Foundry adapter; 5etools and orcbrew adapters; Open5e adapter and starter scripts; notices (#555); the minimal Content packs screen. Backend-first, beside the redesign.Phase 1 foundation merged (PR #557,
531c2a9): thecontent_packsandreference_entriestables (migration1c2d3e4f5a6b), the import pipeline with the server-enforced affirmation, format detection, the native.qbpack/ JSON array / CSV adapter, sanitisation and caps, URL fetch with the private-address guard, full-text search with campaign-over-instance precedence and GM-only visibility, export with a withheld list, and every endpoint for members, admins and GMs. 118 new tests; the whole backend suite passes.docs/CONTENT-PACKS.mddocuments the format and the affirmation.Adapter lanes are built and rebasing onto it: Foundry VTT documents (PF2e and 5e maps, generic fallback, licence read from all four publication paths), 5etools JSON and
.orcbrew(EDN), Open5e JSON plus the two starter-pack build scripts. The notices lane (#555) and the Content packs screen are in progress on the same base. The spec is updated with the conventions the build settled (PR #558).Phase 1 (import, search, export, the screen) is on main and deployed to dev (main
d87c08c, dev at https://questboard-dev.rhoving.com/).PRs, in merge order
content_packs+reference_entries(migration1c2d3e4f5a6b), the adapter contract, the import pipeline with the affirmation gate, local search, export with per-record licence withholding, the endpoints.docs/design/content-packs-spec.md.questboard.sniff, which had been claiming every bare JSON array..orcbrewreaders, adapter warnings reaching the importer, a CRLF fix for.orcbrewfiles saved on Windows.kindis inside the sniff window; the writer emitskindfirst and a test pins that).ContentPacksscreen (Admin → Content packs tab; a GM panel on the campaign page), plus the affirmation 422 brought back to the project's one error shape (detailstring, wording underaffirmation).scripts/content/(SRD 5.1/5.2.1 under CC-BY, and the ORC-licensed Pathfinder 2e records with flavour text removed). Starter packs are release assets fetched on request, never bundled.Dev check: migration head
2d3e4f5a6b7capplied,DETECT_ORDER= questboard, foundry, fivetools, orcbrew, open5e, the content-pack and notice routes answer 401 unauthenticated, the frontend bundle carries the screen, no worker or beat errors. An import through the UI on dev still wants a human with an OIDC login; the invented fixtures underwebapp/backend/tests/fixtures/reference/are safe files to try.Decisions worth keeping
.qbpackformat is the native and export shape; a hand-written bare JSON array must putkindfirst (documented indocs/CONTENT-PACKS.md).Still open under this issue
Closing on the owner's answer to Q138 (G2), 2026-10-01: (b). To be recorded as D266.
The lookup this issue asked for is built and on main: packs are imported by someone who affirms they may, and the rules are searchable from the app bar, the Prep drawer, the wiki's Rules & bestiary chapter and Table mode's Find, with a hit shown as a stat block or a cited rule that can go on the shelf.
The optional part, a model answering a rules question from the retrieved text with citations, was never scoped. It is now its own issue for a later release: #1011.