feat(loaders): extend Foundry loader with feat/spell extraction

Map Foundry feat strings to AbilitySpec constants (Power Attack, Iron Will,
Alertness, Point-Blank Shot, Precise Shot, Dodge, Weapon Focus (X)).
Extract spell names from spellcasting.spells into Combatant.spells.
Wire features and spells into load_sheet_detailed return.
Add 41 tests (unit + golden on 8 real sheets).

Gate: 377 tests, ruff clean, basedpyright clean.
This commit is contained in:
2026-08-17 22:49:50 +02:00
parent 828afc15c0
commit e9e8c26d50
3 changed files with 324 additions and 5 deletions
+7 -5
View File
@@ -399,15 +399,16 @@ dans la résolution) :
agrégation en `EncounterReport` avec attrition par combattant.
- `cli.py` — front-end argparse `pf1e-sim`, rapport français, code de sortie 2
en cas d'erreur.
- `loaders/``foundry.py` (fiches Foundry `pf1-sheet/v1`) et `monster.py`
(JSON de monstre).
- `loaders/``foundry.py` (fiches Foundry `pf1-sheet/v1` avec extraction
automatique des dons → `AbilitySpec` et des sorts → `Combatant.spells`) et
`monster.py` (JSON de monstre).
## Développement
La gate de validation complète (tests + lint + types) :
```bash
uv run pytest -q # 336 tests
uv run pytest -q # 377 tests
uv run ruff check src tests
uv run basedpyright src # mode strict
```
@@ -427,8 +428,9 @@ uv run basedpyright src # mode strict
règles d'empilement des bonus, les jets de sauvegarde (`resolve_save`), le
système de conditions (`conditions.py`), les dons passifs et actifs
(`abilities.py`) et les sorts (`spells.py` + base JSON `data/spells/`)
sont en place. Extension du chargeur Foundry pour l'extraction des sorts et
dons en cours.
sont en place. Le chargeur Foundry extrait automatiquement les dons
(feats, traits, racial) vers des `AbilitySpec` pré-définis et les noms
de sorts vers `Combatant.spells`.
- **Phase 2** — couche tactique LLM : stratégies en langage naturel traduites
en politiques, balayage de matrices de positionnement.
- **Phase 3** — rapporteur LLM local : agrégation des statistiques et