docs(rules): conformance journal rounds 5-6 (31 fix commits) and final residual inventory
Rounds 5-6 covered the spell subsystem (metamagic DC, holding the charge, summon duration, Extend, Combat Casting/entangled, ASF/bonus-spells/dismissal docs), the 24 feat/racial residuals, the deferred spell effects (mirror image, bleed, bane, acid arrow, ice slick, owl's wisdom, bear's endurance, aid...) and the map/LoS area-of-effect findings (line truncation at barriers, cone/ burst line of effect, cover-to-Reflex, adjacent melee cover, charge/run corner rule, charge footprint terrain). Records the 31 commits (d0db208..9086038), the deferred/lower-severity residuals, and the audit coverage gap (oracle quota exhausted).
This commit is contained in:
@@ -1896,7 +1896,7 @@ Limites de sorts (conformance D6-D9, documentées plutôt que bricolées) :
|
|||||||
La gate de validation complète (tests + lint + types) :
|
La gate de validation complète (tests + lint + types) :
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
uv run pytest -q # 1543 tests
|
uv run pytest -q # 1596 tests
|
||||||
uv run ruff check src tests
|
uv run ruff check src tests
|
||||||
uv run basedpyright src # mode strict
|
uv run basedpyright src # mode strict
|
||||||
```
|
```
|
||||||
|
|||||||
+41
-2
@@ -26,7 +26,7 @@ résiduel**.
|
|||||||
|
|
||||||
| Contrôle | Résultat |
|
| Contrôle | Résultat |
|
||||||
|---|---|
|
|---|---|
|
||||||
| `uv run pytest -q` | 1543 tests verts |
|
| `uv run pytest -q` | 1596 tests verts |
|
||||||
| `uv run ruff check src tests` (`select=ALL`) | conforme |
|
| `uv run ruff check src tests` (`select=ALL`) | conforme |
|
||||||
| `uv run basedpyright src` (strict) | 0 erreur |
|
| `uv run basedpyright src` (strict) | 0 erreur |
|
||||||
| Transcript doré depuis la passe 1 | inchangé |
|
| Transcript doré depuis la passe 1 | inchangé |
|
||||||
@@ -92,6 +92,40 @@ résiduel**.
|
|||||||
| `a144423` | Défense totale et combat défensif non cumulables |
|
| `a144423` | Défense totale et combat défensif non cumulables |
|
||||||
| `0c3f5fd` | Durées de condition scalées au niveau (hold person, doom, touch of fatigue, vanish) |
|
| `0c3f5fd` | Durées de condition scalées au niveau (hold person, doom, touch of fatigue, vanish) |
|
||||||
|
|
||||||
|
### Correctifs des passes 5 et 6 (commits)
|
||||||
|
|
||||||
|
| Commit | Objet |
|
||||||
|
|---|---|
|
||||||
|
| `d0db208` | *Exalted of the Society* → +1 canalisation/jour (`resource_grants`) ; *Fortified Drinker* → no-op (état « alcool » non modélisé) |
|
||||||
|
| `6d0ee1b` | *Born Damned* et *Axe to Grind* → no-ops documentés (descripteur « curse » absent ; « menacé par vous seul » inexprimable) |
|
||||||
|
| `a5ebbec` | *Friendly Face* et *Extremely Fashionable* → no-ops (attitude animale et port de vêtements non modélisés) |
|
||||||
|
| `b74baf1` | *Lonely* / *Bitter* → vraies penalties (fini les faux +1 Will) |
|
||||||
|
| `81a09c8` | Métamagie : **ne gonfle plus le DD** — seul Heighten (désormais supporté) |
|
||||||
|
| `418fdc8` | **Charge retenue** : un contact de mêlée manqué conserve le sort |
|
||||||
|
| `cec3c5f` | Durée d'invocation **1 round/niveau** (`SummonEffect.duration_rounds_per_level`) |
|
||||||
|
| `65a5e24` | Combat Casting : +4 retiré du jet *entangled* |
|
||||||
|
| `22724f5` | Extend Spell double la durée d'invocation |
|
||||||
|
| `b2739c5` / `1902877` / `17c06e1` | Documentation : échec d'armure, convention `spell_slots`, dissipation `(D)` |
|
||||||
|
| `2dd3fef` | *Larger Than Life*, *Ambitious*, *Focused Study* → no-ops documentés |
|
||||||
|
| `7262568` | Traits sylphes d'Esha + noms inventés (*Whispering Wind*, *Like the Wind*, *Fey-touched*, *Pingre*) → no-ops tracés |
|
||||||
|
| `2df9dd7` | *Scaled Skin* (résistance électricité 5) ; *Maw or Claw* morsure 1d6 |
|
||||||
|
| `13e4a27` | Couverture de test de tout le lot no-op |
|
||||||
|
| `d9b590e` | Acid Arrow (cap total 7) ; Ice Slick (+1/niveau, max +10) |
|
||||||
|
| `56310b1` | Mirror Image (images lancées + miss chance dynamique) ; Bleed (seuil ≤ −1 pv) ; Bane (−1 limité à la peur) |
|
||||||
|
| `35ce41e` | Owl's Wisdom (+2 Volonté) ; docs affinées des utilitaires différés |
|
||||||
|
| `b95533d` | Bear's Endurance (+2 pv/DV) ; Aid (moral limité aux sauvegardes de peur) ; Charm Person (portée close) |
|
||||||
|
| `5250763` | **Ligne** s'arrête au premier obstacle de ligne d'effet |
|
||||||
|
| `389e160` | **Cône** exige une ligne d'effet depuis son origine |
|
||||||
|
| `948edc1` | **Burst** n'affecte pas une créature en couvert total par rapport au centre |
|
||||||
|
| `8774e51` | **Couvert → Réflexes** (moitié du bonus de CA, couvert mou exclu) |
|
||||||
|
| `a2ca78f` | `blocks_los` documenté comme sémantique **ligne d'effet** (vision seule non modélisée) |
|
||||||
|
| `beb8421` | High ground +1 **mêlée uniquement** (vérifié conforme, Table 8-5) |
|
||||||
|
| `fb6f58a` | Règle des coins en diagonale documentée comme plus stricte que le RAW (approximation conservatrice assumée) |
|
||||||
|
| `9f8655d` | README synchronisé (truncature des lignes, LoE cône/burst, couvert Réflexes) |
|
||||||
|
| `27ce33b` | Couvert au **corps-à-corps adjacent** : règle « n'importe quelle ligne » du SRD |
|
||||||
|
| `5e478bf` | Charge et course appliquent la **règle des coins** |
|
||||||
|
| `9086038` | Charge : terrain difficile testé sur **tout le footprint** (« on ne se déplace qu'à la vitesse du terrain le plus difficile occupé ») |
|
||||||
|
|
||||||
### Passe 1 — sorts de buff, mouvement/grille, morts-vivants, armes naturelles
|
### Passe 1 — sorts de buff, mouvement/grille, morts-vivants, armes naturelles
|
||||||
|
|
||||||
| # | Constat | Sév. | Correctif (commit) |
|
| # | Constat | Sév. | Correctif (commit) |
|
||||||
@@ -241,6 +275,9 @@ ne pas être confondues avec des bogues.
|
|||||||
| **Effets de sorts différés (passe 4)** | `mirror_image` (1d4+1 images, ~67-78 % d'échec au lieu du flou 20 %), `spiritual_weapon` (attaque flottante persistante), buffs utilitaires sans mécanique cible (`guidance`, `resistance`, `virtue`, `stabilize`, `owls_wisdom`, `saving_finale`), `acid_arrow` (cap 7 rounds), `ice_slick` (+1/niveau), `charm_person` (condition *charmed*), `bleed` (seuil ≤ −1 pv), `bane` (pénalité −1), `bears_endurance` (+2 pv/DV), `aid` (pv temporaires), `tears_to_wine` (portée 10 ft) | Écart connu, non corrigé dans cette passe (correctifs à effet de bord potentiel sur le choix de sort de `default_policy`) |
|
| **Effets de sorts différés (passe 4)** | `mirror_image` (1d4+1 images, ~67-78 % d'échec au lieu du flou 20 %), `spiritual_weapon` (attaque flottante persistante), buffs utilitaires sans mécanique cible (`guidance`, `resistance`, `virtue`, `stabilize`, `owls_wisdom`, `saving_finale`), `acid_arrow` (cap 7 rounds), `ice_slick` (+1/niveau), `charm_person` (condition *charmed*), `bleed` (seuil ≤ −1 pv), `bane` (pénalité −1), `bears_endurance` (+2 pv/DV), `aid` (pv temporaires), `tears_to_wine` (portée 10 ft) | Écart connu, non corrigé dans cette passe (correctifs à effet de bord potentiel sur le choix de sort de `default_policy`) |
|
||||||
| **20 écarts de dons/raciales (passe 4)** | Effets faux : *Exalted of the Society*, *Fortified Drinker* (Med, ce dernier ne s'applique **jamais** — condition « alcohol » non supportée) ; *Born Damned*, *Half-Forgotten Secrets*, *Axe to Grind*, *Thoroughbred*, *Extremely Fashionable*, *Lonely*/*Bitter* (drawbacks inversés en bonus), *Larger Than Life*, *Friendly Face*, *Breeze-Kissed* ; effets manquants : *Ambitious*, *Focused Study*, *Scaled Skin* ; valeur fausse : *Maw or Claw* (1d4 vs 1d6) ; noms inventés : *Whispering Wind*, *Like the Wind*, *Fey-touched*, *Pingre* | La parité feuille ↔ JSON est parfaite dans les deux sens (aucun don manquant ou en trop, aucun no-op silencieux), mais le résolveur mappe mal ces noms ou accepte des noms non-SRD — non corrigé |
|
| **20 écarts de dons/raciales (passe 4)** | Effets faux : *Exalted of the Society*, *Fortified Drinker* (Med, ce dernier ne s'applique **jamais** — condition « alcohol » non supportée) ; *Born Damned*, *Half-Forgotten Secrets*, *Axe to Grind*, *Thoroughbred*, *Extremely Fashionable*, *Lonely*/*Bitter* (drawbacks inversés en bonus), *Larger Than Life*, *Friendly Face*, *Breeze-Kissed* ; effets manquants : *Ambitious*, *Focused Study*, *Scaled Skin* ; valeur fausse : *Maw or Claw* (1d4 vs 1d6) ; noms inventés : *Whispering Wind*, *Like the Wind*, *Fey-touched*, *Pingre* | La parité feuille ↔ JSON est parfaite dans les deux sens (aucun don manquant ou en trop, aucun no-op silencieux), mais le résolveur mappe mal ces noms ou accepte des noms non-SRD — non corrigé |
|
||||||
| **Morts-vivants / objets / alignement** | Le moteur n'a ni alignement (Shard of Chaos, Spear of Purity, Protection from Evil), ni piste d'objets (Steal, Sunder), ni sous-système de compétences (Perception opposée, Acrobaties) | Hors périmètre : mécaniques absentes du modèle |
|
| **Morts-vivants / objets / alignement** | Le moteur n'a ni alignement (Shard of Chaos, Spear of Purity, Protection from Evil), ni piste d'objets (Steal, Sunder), ni sous-système de compétences (Perception opposée, Acrobaties) | Hors périmètre : mécaniques absentes du modèle |
|
||||||
|
| **Zones d'effet / ligne d'effet — résiduels (passe 6)** | Vitesse de `move` sous terrain difficile mixte pour multi-cases (le *footprint* n'est testé que pour la charge — relâcher le *descent* réécrirait les chemins Dijkstra) ; origin mesuré centre-à-centre plutôt qu'intersection-à-intersection ; caster multi-cases inclus dans son propre cône/ligne ; `square_size_ft` chargé mais non consommé (géométrie figée à 5 ft) ; créatures inertes non traitées comme couvert mou ni par les gabarits ; un aveugle peut charger/courir/retraiter ; incantation par point d'un cône/ligne derrière un mur rejetée | Écart connu / approximation conservatrice assumée |
|
||||||
|
| **Sorts différés restants (passe 5)** | `spiritual_weapon` (attaque flottante persistante), `saving_finale` (reroll immédiat), `guidance`/`resistance`/`virtue`/`stabilize` (buffs utilitaires sans mécanique cible — dégradation du choix de sort envisagée) | Documentés (SRD vérifié, raison moteur consignée) |
|
||||||
|
| **Couverture d'audit** | Audit « cas limites moteur » initialement bloqué par épuisement de quota du modèle oracle (replis mal configurés) ; relancé via un agent fiable. ~60 sorts restent non vérifiés champ par champ (hors ceux couverts en passe 4) ; sous-systèmes non audités : invocation avancée, observation, runner/métriques, CLI | Lacune de couverture à reprendre |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -271,7 +308,9 @@ Constats explicitement contrôlés et **confirmés conformes** :
|
|||||||
| 2 | Dons/capacités (E), Manœuvres (F), Conditions (G), Données de sorts (H) | `bg_5314f54c` (re-run), `bg_9fdc610e`, `bg_f5829c68`, `bg_b289533d` + extraction/vérification `bg_e1ccd2da`, `bg_4292da47`, `bg_14d5344a` | 4 High, ~18 Med, ~45 Low | Constats consignés (§ 1 passe 2) ; correctifs data/conditions/dons en cours |
|
| 2 | Dons/capacités (E), Manœuvres (F), Conditions (G), Données de sorts (H) | `bg_5314f54c` (re-run), `bg_9fdc610e`, `bg_f5829c68`, `bg_b289533d` + extraction/vérification `bg_e1ccd2da`, `bg_4292da47`, `bg_14d5344a` | 4 High, ~18 Med, ~45 Low | Constats consignés (§ 1 passe 2) ; correctifs data/conditions/dons en cours |
|
||||||
| 3 | Résolution d'attaque & défense, bestiaire/PJ (blocs de stats), économie d'action & tour, sorts restants | `bg_38d99eac`, `bg_8cdcb3e2`, `bg_73e3f878` | 1 High, ~10 Med, ~40 Low | 11 correctifs (`e0bf484`..`611952c`) + Ray of Enfeeblement (`83bbcae`) ; le reste documenté |
|
| 3 | Résolution d'attaque & défense, bestiaire/PJ (blocs de stats), économie d'action & tour, sorts restants | `bg_38d99eac`, `bg_8cdcb3e2`, `bg_73e3f878` | 1 High, ~10 Med, ~40 Low | 11 correctifs (`e0bf484`..`611952c`) + Ray of Enfeeblement (`83bbcae`) ; le reste documenté |
|
||||||
| 4 | Sorts restants (champ par champ), dons des 8 PJ vs feuilles Foundry | `bg_29c36b1a` | 1 High, 1 Med, ~30 Low (dont 20 dons) | 11 correctifs (`79d9ff0`..`0c3f5fd`) ; 20 écarts de dons + effets de sorts différés documentés |
|
| 4 | Sorts restants (champ par champ), dons des 8 PJ vs feuilles Foundry | `bg_29c36b1a` | 1 High, 1 Med, ~30 Low (dont 20 dons) | 11 correctifs (`79d9ff0`..`0c3f5fd`) ; 20 écarts de dons + effets de sorts différés documentés |
|
||||||
| 5+ | ~60 sorts non encore vérifiés, sous-systèmes non couverts (invocation, métamagie/slots, concentration, observation, runner/métriques) | — | — | **En pause** (demande utilisateur) |
|
| 5 | Sous-système des sorts (invocation, emplacements, métamagie, concentration, livraison) ; cas limites moteur (LoS/LoE, couvert, élévation, terrain, gabarits de zone) | `bg_938bceca`, `bg_27334a51` | 0 High, ~6 Med, ~15 Low | 15 correctifs (`81a09c8`..`9086038`) + documents ; 8 Low moteur résiduels |
|
||||||
|
| 6 | Résiduels de dons (24) et d'effets de sorts (~13) | `bg_303e14a0`, `bg_151d5a57`, `bg_918e49cf` | 0 High, ~4 Med, ~30 Low | 16 correctifs (`d0db208`..`b95533d`) ; effets non exprimables documentés |
|
||||||
|
| 7+ | ~60 sorts non vérifiés champ par champ ; sous-systèmes non audités (observation, runner/métriques, CLI) | — | — | À reprendre (audit oracle bloqué par quota, contourné via agent fiable) |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user