diff --git a/README.md b/README.md index 59b5dbe..2fae697 100644 --- a/README.md +++ b/README.md @@ -1999,7 +1999,7 @@ Limites de sorts (conformance D6-D9, documentées plutôt que bricolées) : La gate de validation complète (tests + lint + types) : ```bash -uv run pytest -q # 1691 tests +uv run pytest -q # 1734 tests uv run ruff check src tests uv run basedpyright src # mode strict ``` diff --git a/docs/conformance-srd.md b/docs/conformance-srd.md index 774ddf0..94d4dde 100644 --- a/docs/conformance-srd.md +++ b/docs/conformance-srd.md @@ -26,7 +26,7 @@ résiduel**. | Contrôle | Résultat | |---|---| -| `uv run pytest -q` | 1691 tests verts | +| `uv run pytest -q` | 1734 tests verts | | `uv run ruff check src tests` (`select=ALL`) | conforme | | `uv run basedpyright src` (strict) | 0 erreur | | Transcript doré depuis la passe 1 | inchangé | @@ -176,6 +176,16 @@ Une passe de vérification adversariale a confirmé que les 15 correctifs High/M | `d5ad3c3` | Un **cône/trait** ne perd plus de longueur à cause des cases du lanceur effleurées | | `b775d46` | Origine des **bursts** (centre-à-centre vs intersection) : **différé** et documenté précisément (nécessite une coordonnée d'intersection dans le contrat) | +### Correctifs de la passe 10 — sorts utilitaires résiduels (lot 4) + +| Commit | Objet | +|---|---| +| `08f9af9` | **Guidance** : nouveau type `OneShotEffect` (+1 compétence one-shot sur un unique jet d'attaque, non appliqué au jet de confirmation) — implémente le variant attaque du SRD | +| `1238c40` | **Resistance** : +1 résistance aux jets de sauvegarde (1 min) ; `_find_buff_spell` ignore désormais les cantrips sans emplacement (évite de préempter les buffs de niveau et de dégrader la policy) | +| `a8a65b1` | **Virtue** : 1 pv temporaire (track `temp_hp` consommé avant les vrais pv) | +| `f788613` | **Stabilize** : `StabilizeEffect` qui stabilise automatiquement une créature mourante | +| — | `spiritual_weapon` (attaque flottante persistante) et `saving_finale` (reroll immédiat) restent **différés** (mécanique porteuse absente) | + > **Registre des sorts clos** : les 35 derniers sorts ont été vérifiés champ par champ contre le KB — **0 divergence** (niveaux, sauvegardes, RM, portées, zones, formules conformes). Seuls 2 sorts sont absents du KB (`create_alcool`, `hidden_diplomacy`) et 1 nit de description subsiste (`detect_poison` mentionne « acid »). ### Passe 1 — sorts de buff, mouvement/grille, morts-vivants, armes naturelles @@ -321,7 +331,7 @@ ne pas être confondues avec des bogues. | **Course en armure lourde (×3)** | Le modèle n'a pas de champ d'armure ; la course est désormais bornée par la CON et le don Run est modélisé | Hors périmètre (reclassé) | | **Dégâts non létaux** | Aucune source dans les données ; le minimum de dégâts est approximé en dégâts normaux | Hors périmètre (aucune source) | | **Armes à éclaboussures** | Aucun objet concerné dans les données | Hors périmètre | -| **Sorts utilitaires différés** | `spiritual_weapon` (attaque flottante persistante), `saving_finale` (reroll immédiat), `guidance`/`resistance`/`virtue`/`stabilize` (buffs sans mécanique cible exploitable par la policy) | Documentés (SRD vérifié, raison moteur consignée) | +| **Sorts utilitaires différés** | `spiritual_weapon` (attaque flottante persistante — pas d'attaquant sans porteur dans le moteur) et `saving_finale` (reroll immédiat — pas de crochet de réaction sur un jet de sauvegarde) restent hors d'atteinte ; `guidance`, `resistance`, `virtue` et `stabilize` sont désormais **modélisés** | Différés (raison moteur consignée) | | **Non vérifiable (KB)** | `create_alcool`, `hidden_diplomacy` absents du KB ; nit de description de `detect_poison` (« acid ») | Indéterminé / nit | | **Couverture d'audit** | Rendu du transcript et formats de données avancés non encore audités | À reprendre si besoin | @@ -359,7 +369,8 @@ Constats explicitement contrôlés et **confirmés conformes** : | 7 | Registre des sorts (35 restants, champ par champ) ; moteur : Low documentés ; sous-systèmes runner/métriques/observation/CLI | `bg_0a3e3844`, `bg_2c4d185a`, `bg_cc8f0788` | 2 High, 2 Med, ~8 Low | 12 correctifs (`792cec1`..`9a087a4`) ; **registre des sorts clos (108/108)** | | 8 | Vérification adversariale (correctifs réels + chasse aux écarts non documentés : `dice`, `rng`, `foundry`, `map`, `default_policy`, transcript) | `bg_d8cba9d1`, `bg_1bac8900` | 15 claims vérifiés réels ; 2 High/Med + ~6 Low nouveaux | 8 correctifs (`31d47ae`..`1b43f4e`) ; reste = résiduels assumés et hors périmètre | | 9 | Résiduels assumés (lots 1-3) : course/CON+Run, harmless, centrage Bless/Bane, Selective Channeling, liche, invocations, healing_done, terrain multi-cases, cône effleuré | `bg_0a5b0d6b`, `bg_b304c5a3`, `bg_b277ee2d` | ~10 correctifs, 1 différé | 10 correctifs (`ea83529`..`d5ad3c3`), doré re-pinné une fois (liche) | -| 10+ | Sorts utilitaires différés (guidance, resistance, virtue, stabilize, spiritual_weapon, saving_finale) ; origine des bursts ; rendu du transcript | — | — | **En pause** (demande utilisateur) | +| 10 | Sorts utilitaires résiduels (lot 4) : guidance, resistance, virtue, stabilize, spiritual_weapon, saving_finale | `bg_9c989e12` | 4 implémentés, 2 différés | 4 correctifs (`08f9af9`..`f788613`) | +| 11+ | **Hors périmètre** : alignement, objets/inventaire, compétences, pv non létaux, armes à éclaboussures, champ d'armure ; rendu du transcript non audité | — | — | À reprendre (en cours) | ---