- 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
67 lines
3.1 KiB
Markdown
67 lines
3.1 KiB
Markdown
# 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:
|
||
|
||
```bash
|
||
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
|
||
|
||
```bash
|
||
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 clone` step 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.ts` because 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.
|