feat(rules): encode SRD spell components for all 108 registry spells

- Every data/spells/*.json now carries a "components" field with the
  V/S/M/F/DF tokens from its KB Components line (material/focus
  descriptions dropped; M/DF and F/DF alternatives kept verbatim).
- 107/108 encoded. Create Alcool (data/spells/create_alcool.json) is
  left without the field: it is a homebrew cantrip (level 0) with no KB
  entry - the closest real spell, Enhance Water (Inner Sea Gods, V, S),
  is already a separate registry entry.
- summon_monster_i/ii map to the KB's numeric files (summon-monster-1/2);
  hidden_diplomacy maps to its KB name Egorian Diplomacy (same spell,
  Spymaster's Handbook rename): V, S, M.
- tests/test_spell_failure.py: the placeholder asserting the registry was
  not yet encoded is replaced by an encoded-state smoke test (all spells
  but Create Alcool declare components; five spot-checks against the SRD
  stat blocks). Golden transcripts unchanged: the component gates still
  need deafened/ASF conditions no golden combat has.
This commit is contained in:
2026-09-20 14:21:15 +02:00
parent 1f8f068dd1
commit 91666d84b9
108 changed files with 123 additions and 4 deletions
+1
View File
@@ -2,6 +2,7 @@
"name": "Abundant Ammunition",
"level": 1,
"school": "conjuration",
"components": "V, S, M/DF",
"range": "close",
"save": "none",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Acid Arrow",
"level": 2,
"school": "evocation",
"components": "V, S, M, F",
"range": "long",
"save": "none",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Acid Splash",
"level": 0,
"school": "conjuration",
"components": "V, S",
"range": "close",
"save": "none",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Aid",
"level": 2,
"school": "enchantment",
"components": "V, S, DF",
"range": "touch",
"save": "none",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Air Bubble",
"level": 1,
"school": "conjuration",
"components": "S, M/DF",
"range": "touch",
"save": "none",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Alarm",
"level": 1,
"school": "abjuration",
"components": "V, S, F/DF",
"range": "close",
"save": "none",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Arcane Mark",
"level": 0,
"school": "universal",
"components": "V, S",
"range": "touch",
"save": "none",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Bane",
"level": 1,
"school": "enchantment",
"components": "V, S, DF",
"range": "medium",
"save": "will",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Bear's Endurance",
"level": 2,
"school": "transmutation",
"components": "V, S, M/DF",
"range": "touch",
"save": "will",
"harmless": true,
+1
View File
@@ -2,6 +2,7 @@
"name": "Bladed Dash",
"level": 2,
"school": "transmutation",
"components": "V",
"range": "personal",
"save": "none",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Bleed",
"level": 0,
"school": "necromancy",
"components": "V, S",
"range": "close",
"save": "will",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Bless",
"level": 1,
"school": "enchantment",
"components": "V, S, DF",
"range": "medium",
"save": "none",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Blindness/Deafness",
"level": 2,
"school": "necromancy",
"components": "V",
"range": "medium",
"save": "fort",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Bull's Strength",
"level": 2,
"school": "transmutation",
"components": "V, S, M/DF",
"range": "touch",
"save": "will",
"harmless": true,
+1
View File
@@ -2,6 +2,7 @@
"name": "Burning Hands",
"level": 1,
"school": "evocation",
"components": "V, S",
"range": "close",
"save": "ref",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Charm Person",
"level": 1,
"school": "enchantment",
"components": "V, S",
"range": "close",
"save": "will",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Color Spray",
"level": 1,
"school": "illusion",
"components": "V, S, M",
"range": "close",
"save": "will",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Comprehend Languages",
"level": 1,
"school": "divination",
"components": "V, S, M/DF",
"range": "personal",
"save": "none",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Create Water",
"level": 0,
"school": "conjuration",
"components": "V, S",
"range": "close",
"save": "none",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Cure Light Wounds",
"level": 1,
"school": "conjuration",
"components": "V, S",
"range": "touch",
"save": "will",
"harmless": true,
+1
View File
@@ -2,6 +2,7 @@
"name": "Cure Moderate Wounds",
"level": 2,
"school": "conjuration",
"components": "V, S",
"range": "touch",
"save": "will",
"harmless": true,
+1
View File
@@ -2,6 +2,7 @@
"name": "Dancing Lights",
"level": 0,
"school": "evocation",
"components": "V, S",
"range": "medium",
"save": "none",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Darkness",
"level": 2,
"school": "evocation",
"components": "V, M/DF",
"range": "touch",
"save": "none",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Daze",
"level": 0,
"school": "enchantment",
"components": "V, S, M",
"range": "close",
"save": "will",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Deja Vu",
"level": 1,
"school": "enchantment",
"components": "V",
"range": "medium",
"save": "none",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Delay Disease",
"level": 2,
"school": "conjuration",
"components": "V, S, DF",
"range": "touch",
"save": "fort",
"harmless": true,
+1
View File
@@ -2,6 +2,7 @@
"name": "Delay Poison",
"level": 2,
"school": "conjuration",
"components": "V, S, DF",
"range": "touch",
"save": "fort",
"harmless": true,
@@ -2,6 +2,7 @@
"name": "Detect Fiendish Presence",
"level": 0,
"school": "divination",
"components": "V, S",
"range": "close",
"save": "none",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Detect Magic",
"level": 0,
"school": "divination",
"components": "V, S",
"range": "close",
"save": "none",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Detect Poison",
"level": 0,
"school": "divination",
"components": "V, S",
"range": "close",
"save": "none",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Disrupt Undead",
"level": 0,
"school": "necromancy",
"components": "V, S",
"range": "close",
"save": "none",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Divine Favor",
"level": 1,
"school": "evocation",
"components": "V, S, DF",
"range": "personal",
"save": "none",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Doom",
"level": 1,
"school": "necromancy",
"components": "V, S, DF",
"range": "medium",
"save": "will",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Drunkard's Breath",
"level": 2,
"school": "conjuration",
"components": "V, S, M",
"range": "close",
"save": "fort",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Endure Elements",
"level": 1,
"school": "abjuration",
"components": "V, S",
"range": "touch",
"save": "none",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Enhance Water",
"level": 1,
"school": "transmutation",
"components": "V, S",
"range": "touch",
"save": "fort",
"harmless": true,
+1
View File
@@ -2,6 +2,7 @@
"name": "Enhanced Diplomacy",
"level": 0,
"school": "divination",
"components": "V, S",
"range": "touch",
"save": "will",
"harmless": true,
+1
View File
@@ -2,6 +2,7 @@
"name": "Face of the Devourer",
"level": 1,
"school": "transmutation",
"components": "V, S",
"range": "touch",
"save": "fort",
"harmless": true,
+1
View File
@@ -2,6 +2,7 @@
"name": "Fear",
"level": 4,
"school": "necromancy",
"components": "V, S, M",
"range": "close",
"save": "will",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Fireball",
"level": 3,
"school": "evocation",
"components": "V, S, M",
"range": "long",
"save": "ref",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Flurry of Snowballs",
"level": 2,
"school": "evocation",
"components": "V, S",
"range": "close",
"save": "ref",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Forbid Action",
"level": 1,
"school": "enchantment",
"components": "V",
"range": "close",
"save": "will",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Grasp",
"level": 0,
"school": "divination",
"components": "V",
"range": "personal",
"save": "none",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Guidance",
"level": 0,
"school": "divination",
"components": "V, S",
"range": "touch",
"save": "will",
"harmless": true,
+1
View File
@@ -2,6 +2,7 @@
"name": "Heroism",
"level": 2,
"school": "enchantment",
"components": "V, S",
"range": "touch",
"save": "will",
"harmless": true,
+1
View File
@@ -2,6 +2,7 @@
"name": "Hex Vulnerability",
"level": 1,
"school": "necromancy",
"components": "V, S, M",
"range": "close",
"save": "will",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Hidden Diplomacy",
"level": 1,
"school": "enchantment",
"components": "V, S, M",
"range": "close",
"save": "will",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Hide from Undead",
"level": 1,
"school": "abjuration",
"components": "V, S, DF",
"range": "touch",
"save": "will",
"harmless": true,
+1
View File
@@ -2,6 +2,7 @@
"name": "Hold Person",
"level": 3,
"school": "enchantment",
"components": "V, S, F/DF",
"range": "medium",
"save": "will",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Ice Slick",
"level": 2,
"school": "evocation",
"components": "V, S",
"range": "close",
"save": "ref",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Ill Omen",
"level": 1,
"school": "enchantment",
"components": "V, S, M",
"range": "close",
"save": "none",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Inflict Light Wounds",
"level": 1,
"school": "necromancy",
"components": "V, S",
"range": "touch",
"save": "will",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Ironskin",
"level": 2,
"school": "transmutation",
"components": "V, S, DF/M",
"range": "personal",
"save": "none",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Light",
"level": 0,
"school": "evocation",
"components": "V, M/DF",
"range": "touch",
"save": "none",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Lightning Bolt",
"level": 3,
"school": "evocation",
"components": "V, S, M",
"range": "medium",
"save": "ref",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Mage Armor",
"level": 1,
"school": "conjuration",
"components": "V, S, F",
"range": "touch",
"save": "none",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Mage Hand",
"level": 0,
"school": "transmutation",
"components": "V, S",
"range": "close",
"save": "none",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Magic Missile",
"level": 1,
"school": "evocation",
"components": "V, S",
"range": "medium",
"save": "none",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Make Whole",
"level": 2,
"school": "transmutation",
"components": "V, S",
"range": "close",
"save": "will",
"harmless": true,
@@ -2,6 +2,7 @@
"name": "Masterwork Transformation",
"level": 2,
"school": "transmutation",
"components": "V, S, M",
"range": "touch",
"save": "none",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Mending",
"level": 0,
"school": "transmutation",
"components": "V, S",
"range": "close",
"save": "will",
"harmless": true,
+1
View File
@@ -2,6 +2,7 @@
"name": "Message",
"level": 0,
"school": "transmutation",
"components": "V, S, F",
"range": "medium",
"save": "none",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Mirror Image",
"level": 2,
"school": "illusion",
"components": "V, S",
"range": "personal",
"save": "none",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Oath of Anonymity",
"level": 0,
"school": "illusion",
"components": "V",
"range": "personal",
"save": "none",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Obscuring Mist",
"level": 1,
"school": "conjuration",
"components": "V, S",
"range": "close",
"save": "none",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Open/Close",
"level": 0,
"school": "transmutation",
"components": "V, S, F",
"range": "close",
"save": "will",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Owl's Wisdom",
"level": 2,
"school": "transmutation",
"components": "V, S, M/DF",
"range": "touch",
"save": "will",
"harmless": true,
+1
View File
@@ -2,6 +2,7 @@
"name": "Prestidigitation",
"level": 0,
"school": "universal",
"components": "V, S",
"range": "close",
"save": "none",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Protection from Evil",
"level": 1,
"school": "abjuration",
"components": "V, S, M/DF",
"range": "touch",
"save": "will",
"harmless": true,
@@ -2,6 +2,7 @@
"name": "Protection from Evil, Communal",
"level": 2,
"school": "abjuration",
"components": "V, S, M/DF",
"range": "touch",
"save": "will",
"harmless": true,
+1
View File
@@ -2,6 +2,7 @@
"name": "Protection from Law",
"level": 1,
"school": "abjuration",
"components": "V, S, M/DF",
"range": "touch",
"save": "will",
"harmless": true,
@@ -2,6 +2,7 @@
"name": "Protection from Law, Communal",
"level": 2,
"school": "abjuration",
"components": "V, S, M/DF",
"range": "touch",
"save": "will",
"harmless": true,
+1
View File
@@ -2,6 +2,7 @@
"name": "Purify Food and Drink",
"level": 0,
"school": "transmutation",
"components": "V, S",
"range": "close",
"save": "will",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Putrefy Food and Drink",
"level": 0,
"school": "transmutation",
"components": "V, S",
"range": "close",
"save": "will",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Ray of Enfeeblement",
"level": 1,
"school": "necromancy",
"components": "V, S",
"range": "close",
"save": "fort",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Ray of Frost",
"level": 0,
"school": "evocation",
"components": "V, S",
"range": "close",
"save": "none",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Read Magic",
"level": 0,
"school": "divination",
"components": "V, S, F",
"range": "personal",
"save": "none",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Resistance",
"level": 0,
"school": "abjuration",
"components": "V, S, M/DF",
"range": "touch",
"save": "will",
"harmless": true,
+1
View File
@@ -2,6 +2,7 @@
"name": "Restoration, Lesser",
"level": 2,
"school": "conjuration",
"components": "V, S",
"range": "touch",
"save": "will",
"harmless": true,
+1
View File
@@ -2,6 +2,7 @@
"name": "Sanctuary",
"level": 1,
"school": "abjuration",
"components": "V, S, DF",
"range": "touch",
"save": "will",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Saving Finale",
"level": 1,
"school": "evocation",
"components": "V, S",
"range": "close",
"save": "will",
"harmless": true,
+1
View File
@@ -2,6 +2,7 @@
"name": "Scorching Ray",
"level": 2,
"school": "evocation",
"components": "V, S",
"range": "close",
"save": "none",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Shard of Chaos",
"level": 2,
"school": "evocation",
"components": "V, S, DF",
"range": "close",
"save": "will",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Shield",
"level": 1,
"school": "abjuration",
"components": "V, S",
"range": "personal",
"save": "none",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Shield of Faith",
"level": 1,
"school": "abjuration",
"components": "V, S, M",
"range": "touch",
"save": "will",
"harmless": true,
+1
View File
@@ -2,6 +2,7 @@
"name": "Shocking Grasp",
"level": 1,
"school": "evocation",
"components": "V, S",
"range": "touch",
"save": "none",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Silence",
"level": 2,
"school": "illusion",
"components": "V, S",
"range": "long",
"save": "will",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Sleep",
"level": 1,
"school": "enchantment",
"components": "V, S, M",
"range": "medium",
"save": "will",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Sound Burst",
"level": 2,
"school": "evocation",
"components": "V, S, F/DF",
"range": "close",
"save": "fort",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Spark",
"level": 0,
"school": "evocation",
"components": "V/S",
"range": "close",
"save": "fort",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Spear of Purity",
"level": 2,
"school": "evocation",
"components": "V, S, DF",
"range": "close",
"save": "will",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Spiritual Weapon",
"level": 2,
"school": "evocation",
"components": "V, S, DF",
"range": "medium",
"save": "none",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Stabilize",
"level": 0,
"school": "conjuration",
"components": "V, S",
"range": "close",
"save": "will",
"harmless": true,
+1
View File
@@ -2,6 +2,7 @@
"name": "Status",
"level": 2,
"school": "divination",
"components": "V, S",
"range": "touch",
"save": "will",
"harmless": true,
+1
View File
@@ -2,6 +2,7 @@
"name": "Stave Off Corruption",
"level": 2,
"school": "abjuration",
"components": "V, S, M",
"range": "touch",
"save": "will",
"harmless": true,
+1
View File
@@ -2,6 +2,7 @@
"name": "Summon Instrument",
"level": 0,
"school": "conjuration",
"components": "V, S",
"range": "personal",
"save": "none",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Summon Monster I",
"level": 1,
"school": "conjuration",
"components": "V, S, F/DF",
"range": "close",
"save": "none",
"base_dc": 10,
+1
View File
@@ -2,6 +2,7 @@
"name": "Summon Monster II",
"level": 2,
"school": "conjuration",
"components": "V, S, F/DF",
"range": "close",
"save": "none",
"base_dc": 10,
@@ -2,6 +2,7 @@
"name": "Suppress Charms and Compulsions",
"level": 2,
"school": "abjuration",
"components": "V, S",
"range": "close",
"save": "will",
"harmless": true,
+1
View File
@@ -2,6 +2,7 @@
"name": "Surmount Affliction",
"level": 2,
"school": "abjuration",
"components": "V, S",
"range": "personal",
"save": "none",
"base_dc": 10,

Some files were not shown because too many files have changed in this diff Show More