Lane 11 PR 5a: the Pathfinder 2e sheet and block definitions (#737) #962

Merged
claude-bot merged 4 commits from build/lane11-5a-pf2e into main 2026-09-30 08:22:22 +00:00
Collaborator

Lane 11 (#737) PR 5a. These are the built-in PF2e Remaster definitions (D220), as data in PR 2's language. They add no code and no migration.

app/sheets/builtin/pf2e/:

  • character.json (176 fields). It covers everything the drawing shows:
    • Attributes: with the boosts generator (ancestry, background, class, four free; cap +4; partial above +4).
    • Proficiency and defences: proficiency per armour and weapon category. AC from the worn armour: Dex cap, item bonus, potency, check and speed penalties waived by Str, resilient. Saves, Perception and class DC, each with ranks.
    • Hit points and tracks: HP = ancestry + (class + Con) × level, with temp HP. Dying is a track of 4 − doomed; wounded is a track; hero points have a max of 3.
    • Skills: all 16 skills and lores, with armour-check marks.
    • Strikes: derived rows from the weapons you carry. Attack and MAP are static numbers (D85), with damage text like "2d6+4 P".
    • What you carry: feats and class features, inventory with bulk (L = 0.1, bulk_per batches), encumbered and max, invested 1 of 10, and wealth.
    • Spells page (when a caster): DC and attack, slots "n of m left", cantrips, focus.
    • Conditions with their real effects: frightened, sickened, clumsy, enfeebled, drained, stupefied, fatigued, off-guard (and what implies it), prone, unconscious, encumbered.
    • Levels, rests and the rest:
      • levels 1–20, and XP advancement (1,000 per level; D204 reads the ledger);
      • rests (daily preparations, Refocus, session start sets hero points to 1);
      • 24 basic actions with costs and no roll buttons (D85, D209);
      • reminders, reveal groups, the four drawn pages, and a block view.
  • creature.json (37 fields):
    • Order: Monster Core's canonical order, with conditions that move the stored numbers.
    • legacy_map: covers all 12 keys of today's schema_v1.json, for PR 7's conversion (D205).
    • Projection and drafting: project_from.character (a character to a block, IS-421) and draft_fields.
    • Reveal groups: the drawing's Show-the-table checklist. GM notes are never in one.
  • Licensing: the ORC notice naming Player Core, GM Core and Monster Core. There are no setting proper nouns (a test checks 33), and the deity is free text. There's no content: classes, feats and items come from packs.

Fixtures (8), from the drawing's own numbers:

  • Ossian Vale, Rogue 6:
    • AC 23 = 10 + Dex 4 + Prof 8 (trained, light) + Item 1;
    • Fort +12, Ref +16, Will +12; Perception +12; Class DC 22;
    • HP 68 = Ancestry 8 + (8 + 2) × 6;
    • all 16 skills and both lores;
    • rapier +13/+8/+3 "2d6+4 P", shortbow +12, dagger;
    • bulk 4.9, encumbered at 5, max 10; invested 1 of 10.
  • Ossian, frightened 1 and off-guard: AC 20, with its modifiers listed.
  • Wren, druid 6: DC 22, attack +12, slots 3/3/2, focus 2. With stupefied and drained: DC 20, HP 56.
  • A level-1 fighter with a hand-typed class (owner answer L8).
  • An encumbered character in heavy armour.
  • Odile Marsh's block: AC 20, HP 58. At the table while frightened: AC 19, Perception +10.
  • Where the drawing departed from the rules: Ossian's arrows are L per 10, so bulk is 4.9 rather than the drawing's 4.6. The drawing is corrected in #963 (PR 5b).

Tests:

  • test_pf2e_definitions.py (24): validates clean (0 errors, 0 warnings), every fixture passes, legacy_map is complete, the projection resolves, the licence is present, and no setting nouns appear.
  • tests/sheets passes (466), ruff is clean, and changelog.py check passes.

Known language gaps (from #961): derivation and modifier labels are fixed text ("Attribute" rather than "Dex 4"), and there's no first/join. PR 2b adds label_expr/note_expr and first/last/join to both engines, and the definitions adopt them once that lands.

Changelog: changelog.d/737-lane11-pf2e.added.md.

🤖 Generated with Claude Code

Lane 11 (#737) PR 5a. These are the built-in PF2e Remaster definitions (D220), as data in PR 2's language. They add no code and no migration. **`app/sheets/builtin/pf2e/`:** - **`character.json`** (176 fields). It covers everything the drawing shows: - **Attributes:** with the boosts generator (ancestry, background, class, four free; cap +4; partial above +4). - **Proficiency and defences:** proficiency per armour and weapon category. AC from the worn armour: Dex cap, item bonus, potency, check and speed penalties waived by Str, resilient. Saves, Perception and class DC, each with ranks. - **Hit points and tracks:** HP = ancestry + (class + Con) × level, with temp HP. Dying is a track of 4 − doomed; wounded is a track; hero points have a max of 3. - **Skills:** all 16 skills and lores, with armour-check marks. - **Strikes:** derived rows from the weapons you carry. Attack and MAP are static numbers (D85), with damage text like "2d6+4 P". - **What you carry:** feats and class features, inventory with bulk (L = 0.1, `bulk_per` batches), encumbered and max, invested 1 of 10, and wealth. - **Spells page** (`when` a caster): DC and attack, slots "n of m left", cantrips, focus. - **Conditions** with their real effects: frightened, sickened, clumsy, enfeebled, drained, stupefied, fatigued, off-guard (and what implies it), prone, unconscious, encumbered. - **Levels, rests and the rest:** - levels 1–20, and XP advancement (1,000 per level; D204 reads the ledger); - rests (daily preparations, Refocus, session start sets hero points to 1); - 24 basic actions with costs and no roll buttons (D85, D209); - reminders, reveal groups, the four drawn pages, and a block view. - **`creature.json`** (37 fields): - **Order:** Monster Core's canonical order, with conditions that move the stored numbers. - **`legacy_map`:** covers all 12 keys of today's `schema_v1.json`, for PR 7's conversion (D205). - **Projection and drafting:** `project_from.character` (a character to a block, IS-421) and `draft_fields`. - **Reveal groups:** the drawing's Show-the-table checklist. GM notes are never in one. - **Licensing:** the **ORC** notice naming Player Core, GM Core and Monster Core. There are no setting proper nouns (a test checks 33), and the deity is free text. There's no content: classes, feats and items come from packs. **Fixtures (8), from the drawing's own numbers:** - **Ossian Vale, Rogue 6:** - AC 23 = 10 + Dex 4 + Prof 8 (trained, light) + Item 1; - Fort +12, Ref +16, Will +12; Perception +12; Class DC 22; - HP 68 = Ancestry 8 + (8 + 2) × 6; - all 16 skills and both lores; - rapier +13/+8/+3 "2d6+4 P", shortbow +12, dagger; - bulk 4.9, encumbered at 5, max 10; invested 1 of 10. - **Ossian, frightened 1 and off-guard:** AC 20, with its modifiers listed. - **Wren, druid 6:** DC 22, attack +12, slots 3/3/2, focus 2. With stupefied and drained: DC 20, HP 56. - **A level-1 fighter with a hand-typed class** (owner answer L8). - **An encumbered character in heavy armour.** - **Odile Marsh's block:** AC 20, HP 58. At the table while frightened: AC 19, Perception +10. - **Where the drawing departed from the rules:** Ossian's arrows are L per 10, so bulk is 4.9 rather than the drawing's 4.6. The drawing is corrected in #963 (PR 5b). **Tests:** - `test_pf2e_definitions.py` (24): validates clean (0 errors, 0 warnings), every fixture passes, `legacy_map` is complete, the projection resolves, the licence is present, and no setting nouns appear. - `tests/sheets` passes (466), ruff is clean, and `changelog.py check` passes. **Known language gaps** (from #961): derivation and modifier labels are fixed text ("Attribute" rather than "Dex 4"), and there's no `first`/`join`. PR 2b adds `label_expr`/`note_expr` and `first`/`last`/`join` to both engines, and the definitions adopt them once that lands. Changelog: `changelog.d/737-lane11-pf2e.added.md`. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Built-in pf2e/character.json (176 fields after repeat expansion) and
pf2e/creature.json (37) in PR 2's definition language; both validate with
no errors and no warnings. Eight fixtures carry the drawing's numbers
(Ossian's Statistics still, frightened + off-guard, Wren's spells page,
stupefied + drained, a hand-typed level-1 fighter, an encumbered ranger,
Odile Marsh's block and at the table). Tests cover the legacy_map against
schema_v1.json, project_from against the character, the ORC notice and
the absence of setting nouns.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Merge remote-tracking branch 'origin/main' into build/lane11-5a-pf2e
All checks were successful
CI / Backend lint (ruff) (pull_request) Successful in 38s
CI / Summarisation accuracy eval harness (stub provider) (pull_request) Successful in 1m11s
CI / Bot/backend version sync (pull_request) Successful in 34s
CI / Does this change touch the recording path? (pull_request) Successful in 30s
CI / Synthetic session harness (no GPU, no LLM) (pull_request) Has been skipped
CI / Bot tests and audit (pull_request) Successful in 2m9s
CI / Docker image build (pull_request) Successful in 59s
CI / Feedback site tests (pull_request) Successful in 2m4s
CI / Frontend (shard 2/2) (pull_request) Successful in 6m10s
CI / Frontend (shard 1/2) (pull_request) Successful in 8m25s
CI / End-to-end journeys (phone) (pull_request) Successful in 7m55s
CI / End-to-end journeys (keyboard) (pull_request) Successful in 8m34s
CI / Backend migration, tests, and audit (pull_request) Successful in 19m48s
CI / End-to-end journeys (desktop) (pull_request) Successful in 15m47s
b6283ad554
Sign in to join this conversation.
No description provided.