docs: reorganize documentation structure

- Clean README.md with installation, usage, CLI, examples
- Move data formats to docs/data-formats/ (map.md, monster.md, pc-sheets.md, index.md)
- Move architecture to docs/architecture/ (index.md, technical-architecture.md, phase-2-llm-architecture.md)
- Add contributing guidelines in docs/contributing.md
- Clean README.md: install, usage, CLI, data-formats/rules/architecture links, contributing link
This commit is contained in:
2026-09-26 20:12:05 +02:00
parent b0bd0b95f4
commit f61fc5c61f
9 changed files with 764 additions and 2304 deletions
+67
View File
@@ -0,0 +1,67 @@
# Architecture & Plan d'implémentation
## Vue d'ensemble
- [Architecture technique](technical-architecture.md) — modules, flux de données, interfaces
- [Plan Phase 2 (LLM)](phase-2-llm-architecture.md) — étapes P5.1–P5.3, décisions, risques
- [Conformité SRD](conformance-srd.md) — écarts documentés, corrigés, hors périmètre
- [Feuille de route](roadmap.md) — Phases 0, 1, 2, 3 et au-delà
## Structure du code
```
src/pf1e_simulator/
├── combat.py # CombatEngine, résolution attaques, actions, states
├── dice.py # parseur notation dés (2d4+1)
├── rng.py # SeededRng, ScriptedRng
├── models.py # schémas Pydantic v2 (Combatant, AttackSpec, etc.)
├── map.py # MapSpec, chargement YAML, validation
├── grid.py # grille 5-10-5, Dijkstra, airborne_view
├── los.py # ligne d'effet, couvert (règle des coins)
├── areas.py # cône, ligne, burst (géométrie zones)
├── effects.py # StatModifier, resolve_modifiers (empilement bonus)
├── conditions.py # 29 conditions PF1e + flags comportementaux
├── abilities.py # dons (Weapon Focus, Power Attack, etc.)
├── spells.py # SpellSpec, effets, scalage, métamagie
├── metrics.py # win_rate, win_rate_sigma, win_rate_band
├── runner.py # EncounterSpec, run_encounter, EncounterReport
├── objectives.py # primitives Phase 2 (P(survie), P(TPK), etc.)
├── phase2_spike.py # politique "focus fire", danger cartography
├── cli.py # argparse, rapport FR, flags LLM
├── loaders/
│ ├── combatant.py # chargeur PJ + monstres + dons/sorts
│ └── foundry.py # migration Foundry (one-shot, incomplet)
└── report.py # LLM report writer (Phase 3)
```
## Décisions clés (D-table)
| ID | Domaine | Décision |
|----|---------|----------|
| D1 | Économie d'action | Résolue par deux étages (budget général + filtres spécialisés) |
| D2 | Cartographie danger | Non exhaustive : région d'échec + frontière + sensibilité |
| D3 | Priorité v1 | Cartographie d'abord, puis optimiseur (mêmes briques) |
| D4 | Fournisseur/modèle | Client agnostique ; implémentation distante d'abord, locale ensuite ; mode JSON/schéma requis |
| D5 | Budget | Plafonds petits (≤ 50 appels/campagne, ≤ 20 combats vitrine) + coupe-circuit |
| D6 | Reproductibilité | Cache obligatoire ; clé composite incluant le modèle ; replay `call_seq` |
| D7 | Prompts | Externes / dépôt séparé (voir §14) |
## Gate de validation
```bash
uv run pytest -q
uv run ruff check src tests
uv run basedpyright src
```
- Ruff : `select = ["ALL"]`, longueur ligne 100
- Basedpyright : `typeCheckingMode = "strict"` sur `src` et `tests`
- Transcripts épinglés + assertions statistiques (matchup symétrique dans bande 3σ)
## Feuille de route
- **Phase 0** ✅ — socle combat (initiative, attaques, critiques, RD, états, déplacement, mêlée/distance)
- **Phase 1** ✅ — magie/états (108 sorts, DD/sauvegardes, concentration, invocation, conditions, manœuvres, dons, capacités de classe)
- **Phase 2** ✅ — couche tactique LLM (few-shot, réparation bornée, contrat Observation/LLMPolicy)
- **Phase 3** ✅ — rapporteur LLM local (agrégation stats + rédaction FR, `report.py`, `--llm-report`)
- **Phase 4** (futur) — optimiseur de scénarios, campagnes multi-rencontres