Redesign lane 9: stat blocks and character sheets — research, then design (D73, #659) #720

Closed
opened 2026-09-21 18:35:04 +00:00 by claude-bot · 2 comments
Collaborator

From the owner's review of lane 6c (2026-09-21), recorded as D73. Lane 6c's stat block editor is a start, not the answer. The owner wants to "go even bigger":

  • "Edit stat block" opens its own, system-specific editor, fully featured: an NPC or a player character can be drafted in Quest Board with every field of the standard and extended character sheet.
  • Items, weapons, spells and the like come from the loaded content (the rulebook packs), with their full descriptions and stats, and can be added to the sheet and to the wiki page. Today's example allows neither items nor spells.
  • Prose such as a backstory lives on the wiki page and is pulled into the sheet on the fly, so it is written once.
  • Rolling for stats and the other rolls of character creation, on the sheet.

Scope. New surface WIKI-19 (rows IS-400 to IS-403); touches WIKI-3 (the stat block on a page), WIKI-7 (the editor), TABLE-1 (the look-up card at the table), PREP-2 (the NPC tool) and WIKI-15 (the loaded content). Both game systems the packs cover: Pathfinder 2e and the 5e SRD.

Approach — research first, then design:

  1. What the standard and extended sheets actually contain for each system (fields, sections, derived values, what changes with level), and how Foundry's actor model and Export Data (IS-062) map onto them.
  2. What the loaded content packs already hold for items, weapons and spells, and what the sheet needs from them.
  3. Then the lane page: the sheet for an NPC and a player character, adding from the loaded content, the backstory pulled from the page, rolling at creation, saving with the page (one Save, lane 6c), and the phone reading view — with a coverage script like every other lane.

Not to do: extend lane 6c's per-system form. The owner judged it a start only.

Tracked on the prototype index as lane 9, "not started". Parent: #659.

🤖 Generated with Claude Code

**From the owner's review of lane 6c (2026-09-21), recorded as D73.** Lane 6c's stat block editor is a start, not the answer. The owner wants to "go even bigger": - **"Edit stat block" opens its own, system-specific editor**, fully featured: an NPC or a player character can be drafted in Quest Board with **every field of the standard and extended character sheet**. - **Items, weapons, spells and the like come from the loaded content** (the rulebook packs), with their full descriptions and stats, and can be added to the sheet and to the wiki page. Today's example allows neither items nor spells. - **Prose such as a backstory lives on the wiki page** and is pulled into the sheet on the fly, so it is written once. - **Rolling for stats** and the other rolls of character creation, on the sheet. **Scope.** New surface **WIKI-19** (rows `IS-400` to `IS-403`); touches WIKI-3 (the stat block on a page), WIKI-7 (the editor), TABLE-1 (the look-up card at the table), PREP-2 (the NPC tool) and WIKI-15 (the loaded content). Both game systems the packs cover: Pathfinder 2e and the 5e SRD. **Approach — research first, then design:** 1. What the standard and extended sheets actually contain for each system (fields, sections, derived values, what changes with level), and how Foundry's actor model and Export Data (`IS-062`) map onto them. 2. What the loaded content packs already hold for items, weapons and spells, and what the sheet needs from them. 3. Then the lane page: the sheet for an NPC and a player character, adding from the loaded content, the backstory pulled from the page, rolling at creation, saving with the page (one Save, lane 6c), and the phone reading view — with a coverage script like every other lane. **Not to do:** extend lane 6c's per-system form. The owner judged it a start only. Tracked on the prototype index as lane 9, "not started". Parent: #659. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Author
Collaborator

Researched and drawn — PR #723. Picked up 2026-09-21, after the brief (#722) landed.

Research (three passes, summarised in the spec's §2):

  1. The real sheets — PF2e Remaster, 5e (2024/SRD 5.2.1), Blades, Dungeon World, Fate, Cypher, Call of Cthulhu 7e, Savage Worlds: every field, section and derived value, and how creation and levelling change them. The takeaway: sheets differ in vocabulary far more than in shape. Every one is source values + derived values + a bag of referenced entries + a few hot counters.
  2. The sheet engines — Foundry's actor and item model and its rule elements / active effects, Roll20's sheet workers, Pathbuilder's export, Fantasy Statblocks' block vocabulary, plus the licences (PF2e under ORC; 5e SRD 5.2.1 CC BY 4.0; Blades/DW/Fate CC BY 3.0; Cypher CSOL; CoC and SWADE schema only; never 5etools data).
  3. The codebase today — game_system_schemas (12 fields, 7 types, one definition per system), LoreEntry.stats as a flat envelope, the GM-only StatBlockEditor, reference_entries with stats for creatures only, the .qbpack format, one-way Foundry export, no system-to-system conversion.

The shape — docs/design/character-sheets-spec.md — and the twelve decisions it proposes, D74 to D85:

  • D74 a sheet is its own document: source values, entries with provenance, hot resources; everything derived is computed from the definition on read (server and browser from one definition), never stored as truth; the page keeps the prose and shows a projection; autosave like Prep; every save a version.
  • D75 two definitions per system, character and creature, one vocabulary; a character projects to a block one way.
  • D76 definitions are data in packs (fields, tables, entry schemas, modifiers, generators, views, imports, migrations, reminders, fixtures), validated on upload, no code. First-party PF2e and 5e; then Blades, DW, Fate, Cypher; CoC and SWADE as definitions only; a generic sheet for a system with none.
  • D77 visibility per field with the audience picker; a block GMs only until shown; a sheet the party's except "just you and the GM" fields; the player edits their own, the GM edits any and can lock a field.
  • D78 creation is the system's own steps; every field carries its generator (array, point buy, boosts, dice, fixed); every roll shown and kept.
  • D79 entries from the loaded content with provenance; a removed pack degrades a row to its name, never breaks a sheet.
  • D80 modifiers are declarative; every computed value shows its derivation, penalties included.
  • D81 prose stays on the page, shown on the sheet with Edit on the page.
  • D82 Foundry both ways and Pathbuilder in, through the pack's maps, with a report.
  • D83 versioned per definition; migrations offered, never forced; definitions deprecated, never deleted.
  • D84 at the table the block is the card's face; HP and conditions change from the card.
  • D85 rolls from the sheet during play are phase 2, drawn as a seam.

The drawing — /prototype/lane9 on the review site: nine sections (the sheet; editing and who sees what; from the loaded content; Start a character; the block; at the table; the states; packs and the definition; Prep and the rules), 42 stills, Ossian Vale (PF2e) and Tam Ridley (5e) as the two definitions, Vasko (Mothership) on the generic sheet.

Catalogue: IS-404 to IS-436 on WIKI-19 with seams on WIKI-3, WIKI-7, TABLE-1, PREP-2, WIKI-15, ADMIN-11 and CAMP-8; coverage/lane9.py passes with none missing.

Departures from this issue's approach, deliberately: (a) the sheet does not save with the page's one Save — it is its own document with its own autosave (D74), which is Q14 below; (b) Pathbuilder import is phase 2, not phase 1.

Questions for the owner (also on the tracker):

  • Q11 First-party packs PF2e and 5e first, the CC BY four and Cypher after — agreed?
  • Q12 A player edits their own sheet and the GM can lock a field — yes?
  • Q13 Defaults: a character sheet the party's to read, a creature block GMs only until shown — yes?
  • Q14 The sheet's own autosave, so lane 6c's one Save no longer includes the stat block — yes?
  • Q15 Rolls at the table in phase 2 rather than phase 1 — agreed?

Stays open until the owner has reviewed the lane and answered; D74 to D85 are then confirmed or amended in the catalogue like the earlier decisions.

**Researched and drawn — PR #723.** Picked up 2026-09-21, after the brief (#722) landed. **Research (three passes, summarised in the spec's §2):** 1. *The real sheets* — PF2e Remaster, 5e (2024/SRD 5.2.1), Blades, Dungeon World, Fate, Cypher, Call of Cthulhu 7e, Savage Worlds: every field, section and derived value, and how creation and levelling change them. The takeaway: sheets differ in *vocabulary* far more than in *shape*. Every one is source values + derived values + a bag of referenced entries + a few hot counters. 2. *The sheet engines* — Foundry's actor and item model and its rule elements / active effects, Roll20's sheet workers, Pathbuilder's export, Fantasy Statblocks' block vocabulary, plus the licences (PF2e under ORC; 5e SRD 5.2.1 CC BY 4.0; Blades/DW/Fate CC BY 3.0; Cypher CSOL; CoC and SWADE schema only; never 5etools data). 3. *The codebase today* — `game_system_schemas` (12 fields, 7 types, one definition per system), `LoreEntry.stats` as a flat envelope, the GM-only `StatBlockEditor`, `reference_entries` with stats for creatures only, the `.qbpack` format, one-way Foundry export, no system-to-system conversion. **The shape** — `docs/design/character-sheets-spec.md` — and the twelve decisions it proposes, D74 to D85: - **D74** a sheet is its own document: source values, entries with provenance, hot resources; everything derived is computed from the definition on read (server and browser from one definition), never stored as truth; the page keeps the prose and shows a projection; autosave like Prep; every save a version. - **D75** two definitions per system, character and creature, one vocabulary; a character projects to a block one way. - **D76** definitions are data in packs (fields, tables, entry schemas, modifiers, generators, views, imports, migrations, reminders, fixtures), validated on upload, no code. First-party PF2e and 5e; then Blades, DW, Fate, Cypher; CoC and SWADE as definitions only; a generic sheet for a system with none. - **D77** visibility per field with the audience picker; a block GMs only until shown; a sheet the party's except "just you and the GM" fields; the player edits their own, the GM edits any and can lock a field. - **D78** creation is the system's own steps; every field carries its generator (array, point buy, boosts, dice, fixed); every roll shown and kept. - **D79** entries from the loaded content with provenance; a removed pack degrades a row to its name, never breaks a sheet. - **D80** modifiers are declarative; every computed value shows its derivation, penalties included. - **D81** prose stays on the page, shown on the sheet with Edit on the page. - **D82** Foundry both ways and Pathbuilder in, through the pack's maps, with a report. - **D83** versioned per definition; migrations offered, never forced; definitions deprecated, never deleted. - **D84** at the table the block is the card's face; HP and conditions change from the card. - **D85** rolls from the sheet during play are phase 2, drawn as a seam. **The drawing** — `/prototype/lane9` on the review site: nine sections (the sheet; editing and who sees what; from the loaded content; Start a character; the block; at the table; the states; packs and the definition; Prep and the rules), 42 stills, Ossian Vale (PF2e) and Tam Ridley (5e) as the two definitions, Vasko (Mothership) on the generic sheet. **Catalogue:** `IS-404` to `IS-436` on WIKI-19 with seams on WIKI-3, WIKI-7, TABLE-1, PREP-2, WIKI-15, ADMIN-11 and CAMP-8; `coverage/lane9.py` passes with none missing. **Departures from this issue's approach, deliberately:** (a) the sheet does *not* save with the page's one Save — it is its own document with its own autosave (D74), which is Q14 below; (b) Pathbuilder import is phase 2, not phase 1. **Questions for the owner (also on the tracker):** - **Q11** First-party packs PF2e and 5e first, the CC BY four and Cypher after — agreed? - **Q12** A player edits their own sheet and the GM can lock a field — yes? - **Q13** Defaults: a character sheet the party's to read, a creature block GMs only until shown — yes? - **Q14** The sheet's own autosave, so lane 6c's one Save no longer includes the stat block — yes? - **Q15** Rolls at the table in phase 2 rather than phase 1 — agreed? Stays open until the owner has reviewed the lane and answered; D74 to D85 are then confirmed or amended in the catalogue like the earlier decisions.
Author
Collaborator

The owner's review, 2026-09-21: "Looks great!" Two asks and five answers, all applied in PR #724.

Asked for, and done:

  • Levelling up on the sheet (IS-437, D78 amended). The same machinery as creation: the definition's levels table says what each level brings — hit points, the class's own features, feats and choices from the loaded content, the skill increase, boosts at the levels that have them — and the sheet walks it in order, shows What changes (every value before and after, with why), keeps a version first, then applies on Reach level n. Offered in the header at the XP threshold, or when the GM says (milestone campaigns have no XP). Drawn for Ossian's level 7 (PF2e) and Tam's level 4 (5e: the improvement or a feat). Spec §5.5 gains levels and advancement.
  • Every computed value shown once, with its components smaller beneath it. The "= total" repeat is gone from every derivation on the page.

Answers:

  • Q11 (first-party pack order) — yes → D76 confirmed.
  • Q12 (player edits own sheet, GM can lock a field) — yes → D77 confirmed.
  • Q13 (sheet party-readable, block GM-only until shown) — yes → D77 confirmed.
  • Q14 (the sheet's own autosave, outside lane 6c's one Save) — yes → D74 confirmed.
  • Q15 — rolling attacks and checks during play is Foundry's, not Quest Board's. D85 replaced: the sheet rolls only where creation and levelling roll, and has no roll buttons; nor does the card at the table. The phase-2 seam is gone from the drawing, and the dice service from the spec's phase 2.

D74 to D85 are recorded as the owner's decisions in the catalogue. Nothing on lane 9 is open; this issue closes when #724 merges.

**The owner's review, 2026-09-21: "Looks great!"** Two asks and five answers, all applied in PR #724. **Asked for, and done:** - **Levelling up on the sheet** (`IS-437`, D78 amended). The same machinery as creation: the definition's `levels` table says what each level brings — hit points, the class's own features, feats and choices from the loaded content, the skill increase, boosts at the levels that have them — and the sheet walks it in order, shows What changes (every value before and after, with why), keeps a version first, then applies on Reach level n. Offered in the header at the XP threshold, or when the GM says (milestone campaigns have no XP). Drawn for Ossian's level 7 (PF2e) and Tam's level 4 (5e: the improvement or a feat). Spec §5.5 gains `levels` and `advancement`. - **Every computed value shown once**, with its components smaller beneath it. The "= total" repeat is gone from every derivation on the page. **Answers:** - Q11 (first-party pack order) — yes → D76 confirmed. - Q12 (player edits own sheet, GM can lock a field) — yes → D77 confirmed. - Q13 (sheet party-readable, block GM-only until shown) — yes → D77 confirmed. - Q14 (the sheet's own autosave, outside lane 6c's one Save) — yes → D74 confirmed. - Q15 — **rolling attacks and checks during play is Foundry's, not Quest Board's.** D85 replaced: the sheet rolls only where creation and levelling roll, and has no roll buttons; nor does the card at the table. The phase-2 seam is gone from the drawing, and the dice service from the spec's phase 2. D74 to D85 are recorded as the owner's decisions in the catalogue. Nothing on lane 9 is open; this issue closes when #724 merges.
Sign in to join this conversation.
No milestone
No project
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#720
No description provided.