docs(rules): conformance journal round 8 - adversarial verification and 8 new fixes
An independent pass confirmed the sampled High/Med fixes are genuinely implemented, then found previously-undocumented divergences in the default policy (spell combat without a slot, out-of-range heal wasting the turn, wasted grit on a melee deed, fixed hex range), dice (wrong exception for d1), the channel-heal trigger, and the foundry migration tool. All fixed; corrects the stale 'goblin dies round 4' note (now round 5) and records the Bless centering residual.
This commit is contained in:
+26
-6
@@ -26,7 +26,7 @@ résiduel**.
|
||||
|
||||
| Contrôle | Résultat |
|
||||
|---|---|
|
||||
| `uv run pytest -q` | 1634 tests verts |
|
||||
| `uv run pytest -q` | 1647 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é |
|
||||
@@ -59,10 +59,11 @@ résiduel**.
|
||||
|
||||
> Transcript doré : mis à jour **deux fois**, chaque fois par un correctif SRD
|
||||
> justifié ligne à ligne dans le docstring du test — `4d45409` (Weapon Focus :
|
||||
> le +1 transforme le jet 15 en 16 contre CA 16, le gobelin meurt au round 4)
|
||||
> puis `bee224a` (Shield of Faith et Divine Favor portent enfin leurs vrais
|
||||
> buffs : `_find_buff_spell` retient désormais Divine Favor, index 20, ce qui
|
||||
> remonte la CA de tammara et réécrit son transcript).
|
||||
> le +1 transforme le jet 15 en 16 contre CA 16) puis `bee224a` (Shield of
|
||||
> Faith et Divine Favor portent enfin leurs vrais buffs : `_find_buff_spell`
|
||||
> retient désormais Divine Favor, index 20, ce qui remonte la CA de tammara et
|
||||
> réécrit son transcript). Le second correctif déplace la mort du gobelin au
|
||||
> **round 5** (le « round 4 » du premier correctif est superseded).
|
||||
|
||||
### Correctifs des passes 3 et 4 (commits)
|
||||
|
||||
@@ -143,6 +144,23 @@ résiduel**.
|
||||
| `ba5eb4c` | Déploiement : deux camps sur la **même lettre de zone** rejetés |
|
||||
| `9a087a4` | Exemples du README **rafraîchis** contre le moteur réel (Quick start 96,2 % ; exemple vérifié 33,0 %) |
|
||||
|
||||
### Correctifs de la passe 8 — vérification indépendante
|
||||
|
||||
Une passe de vérification adversariale a confirmé que les 15 correctifs High/Med
|
||||
échantillonnés sont **réellement implémentés**, puis a trouvé des écarts
|
||||
**jamais documentés** (politique par défaut, dés, outillage), tous corrigés :
|
||||
|
||||
| Commit | Objet |
|
||||
|---|---|
|
||||
| `31d47ae` | *Spell Combat* : garde `_has_slot` (sans emplacement, la policy ne provoque plus l'attaque à −2) |
|
||||
| `bdf15aa` | Soin de la policy : contrôle **portée + ligne d'effet** (fini le tour perdu sur un contact hors portée) |
|
||||
| `e8b7a73` | `parse_dice("d1"/"1d1")` lève bien `DiceParseError` (plus de `ValidationError` pydantique) |
|
||||
| `f93c55b` | *Up Close and Deadly* émis seulement si un tir d'arme à feu suit (fini le grit gaspillé) |
|
||||
| `c23fc36` | Seuil « < 50 % » exact (`hp*2 < hp_max`) |
|
||||
| `6f01a8e` | Mode soin du canal : seuls les **vivants** comptent (un allié mort-vivant ne le déclenche plus) |
|
||||
| `238e5f2` | Hex : portée **close scalée** au niveau (25 ft + 5 / 2 niveaux) au lieu d'un 25 ft figé |
|
||||
| `1b43f4e` | README : `data/pcs/*.json` sont **canoniques** ; `foundry.py` est un outil one-shot incomplet (ne pas régénérer sans réappliquer les correctifs) |
|
||||
|
||||
> **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
|
||||
@@ -296,6 +314,7 @@ ne pas être confondues avec des bogues.
|
||||
| **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** | 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 ; un caster multi-cases dont une case est « effleurée » consomme un slot de longueur | Résiduel assumé (approximations conservatrices) |
|
||||
| **Statistiques** | Deux invocations de la même créature partagent un même emplacement de stats (ids non désambiguïsés) ; `healing_done` n'est pas exposé séparément | Limitation documentée |
|
||||
| **Centrage du burst de *Bless*** | Le rayon de 50 ft est centré sur la cible résolue, pas forcément sur le lanceur (SRD : « centered on you ») ; le filtre « alliés » inclut bien le lanceur | Résiduel assumé (approximation) |
|
||||
| **Non vérifiable (KB)** | `create_alcool`, `hidden_diplomacy` (absents du KB) ; ligne de description « acid » de `detect_poison` | Indéterminé / nit |
|
||||
| **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** | Registre des sorts **clos** (108/108 couverts ; 35 vérifiés en passe 7, 0 divergence). Audit « cas limites moteur » initialement bloqué par épuisement de quota de l'oracle (replis mal configurés) — relancé via un agent fiable. Restent non audités : observation, runner/métriques désormais couverts (passe 7) ; subsistent des sous-systèmes annexes (rendu du transcript, formats de données avancés) | Couverture largement complète |
|
||||
@@ -332,7 +351,8 @@ Constats explicitement contrôlés et **confirmés conformes** :
|
||||
| 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 | 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+ | Sous-systèmes annexes (rendu du transcript, formats avancés) | — | — | À reprendre si besoin |
|
||||
| 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+ | Sous-systèmes annexes (rendu du transcript, formats avancés) | — | — | À reprendre si besoin |
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user