Content slice of epic #1517. Depends on F1 #1710 + F2 #1711. Parallel with the other content slices.
Why
Transcribe the 2014 (PHB'14) Sorcerer spell list, levels 0–9, so a 2014 Sorcerer is offered its own edition's spells with correct text and mechanics — not 2024 content. Full PHB'14 breadth (owner direction), not the SRD subset.
Scope
Acceptance criteria
Relevant code
backend/prisma/seed/spells.ts, SpellClass (F2 #1711), backend/src/routes/catalog/spells.ts, the PHB'14 Sorcerer spell list.
Dependencies
Part of #1517. Depends on F1 #1710 + F2 #1711. Owns rows per the epic's row-ownership rule; 3+-list spells live in the shared slice (CS), not here.
Why
Transcribe the 2014 (PHB'14) Sorcerer spell list, levels 0–9, so a 2014 Sorcerer is offered its own edition's spells with correct text and mechanics — not 2024 content. Full PHB'14 breadth (owner direction), not the SRD subset.
Scope
EDITION_2014Spellrows for every PHB'14 Sorcerer spell this slice owns per the epic's row-ownership rule: owner-class = highest-priority class on the spell's PHB'14 list (Wizard > Cleric > Druid > Bard > Sorcerer > Warlock > Paladin > Ranger); spells on 3+ lists belong to the shared slice, not here. Full PHB'14 text + aPHB'14 p.NNcitation on each.SpellClassrows tagging Sorcerer on every PHB'14 Sorcerer spell — including rows owned by the shared slice or another class that Sorcerer also gets (membership only; do NOT re-author those rows).spell-fork-reseedcoverage for the new rows; seed helper fns cyclomatic ≤4.Acceptance criteria
GET /api/spells?class=sorcerer&edition=EDITION_2014; each owned row citesPHB'14 p.NN.Relevant code
backend/prisma/seed/spells.ts,SpellClass(F2 #1711),backend/src/routes/catalog/spells.ts, the PHB'14 Sorcerer spell list.Dependencies
Part of #1517. Depends on F1 #1710 + F2 #1711. Owns rows per the epic's row-ownership rule; 3+-list spells live in the shared slice (CS), not here.