- Foundry pf2e v8 nests pf2e packs under packs/pf2e/ (v7 had packs/classes/ directly) - Update FOUNDRY_CLASSES_DIR path to packs/pf2e/classes/ - Document v8 layout in SEED-README and update failure-mode path string - Pitfall #5 mitigation: comment in seed script explains version-specific path Worked-example verification (Wizard end-to-end): - 320 ClassProgression rows seeded (16 classes x 20 levels) - Wizard L1..L19 carry ARCANE spell-slot increments + L1 has 5 cantrips - Wizard L1 has choiceType=school, choiceOptionsRef=wizard-school - 1 ClassFeatureOption row for wizard-school (battle-magic / School of Battle Magic) - Idempotent on re-run: 0 created, 320 updated, 0 errors
3.1 KiB
Phase 1 — ClassProgression Seed README
The seed script server/prisma/seed-class-progression.ts populates the ClassProgression
and ClassFeatureOption tables from the Foundry pf2e system repository (license: Apache 2.0
- OGL 1.0a + Paizo Community Use Policy — verified 2026-04-27).
One-time dev setup
Clone the pinned Foundry pf2e tag into the gitignored data folder:
cd server/prisma/data
git clone --depth 1 --branch pf2e-8.0.3 https://github.com/foundryvtt/pf2e.git foundry-pf2e
server/prisma/data/foundry-pf2e/ is excluded from version control (.gitignore line added in Plan 01).
Do NOT commit the clone. Re-clone after a Foundry pf2e major version ships.
Pinned tag: pf2e-8.0.3 (Pathfinder 2e system release on the foundryvtt/pf2e repo;
selected from https://github.com/foundryvtt/pf2e/tags — current stable Pathfinder 2e
release as of 2026-04-27, includes Player Core / APG content for all 16 D-16 classes).
Tag drift note (RESEARCH §Pitfall 5): The Foundry pf2e JSON shape may change across major versions. If the seed script fails with "Class JSON does not match expected schema", either pin to an older tag here or update the parser in
seed-class-progression.ts. Do not auto-track HEAD.
Run the seed
cd server
npm run db:seed:class-progression
Idempotent: running twice does not duplicate rows. Console output reports created and
updated counts plus any errors.
Foundry pf2e v8 layout note
In Foundry pf2e v8 (the pinned tag pf2e-8.0.3), class JSONs live under
packs/pf2e/classes/. Earlier major versions (v7) used packs/classes/ directly. The
seed script reads from the v8 path; if you bump the pinned tag back to a v7 release,
update FOUNDRY_CLASSES_DIR in server/prisma/seed-class-progression.ts accordingly.
Failure modes
- "Foundry pf2e clone not found at server/prisma/data/foundry-pf2e/packs/pf2e/classes/" —
run the
git clonestep above. - "Class JSON does not match expected schema" — Foundry pf2e changed the JSON shape between major versions. Update the seed parser or pin to an older tag.
What gets seeded (cumulative across Plan 03 and Plan 03b)
- ClassProgression rows: 16 classes × 20 levels = 320 rows, with
grants[],proficiencyChanges,spellSlotIncrement,cantripIncrement,repertoireIncrement,choiceType,choiceOptionsRef. Plan 03 ships Wizard L1..L20 fully (worked example); Plan 03b adds remaining 15 classes' L1..L20 rows (data-only — Plan 03's pipeline already seeds 320 rows; Plan 03b just enriches them with overlay data). - ClassFeatureOption rows: hand-curated Cleric Doctrines, Wizard Schools, Champion Causes, Sorcerer Bloodlines (where L1-set), Druid Orders, etc. Joint goal across both plans: ≥50 rows. Plan 03 ships at least 1 (Wizard School worked example); Plan 03b ships ≥49 more.
- Spell-slot/cantrip/repertoire progressions come from the hand-curated overlay
server/prisma/data/spell-slot-overlays.tsbecause Foundry encodes them in prose (Pitfall #6). Plan 03 ships Wizard's full L1..L19 entries; Plan 03b ships the other 6 caster classes plus empty arrays for non-casters.