Files
pf1e-simulator/docs/conformance-srd.md
T
ctan 1a68dfa6db docs(rules): conformance journal rounds 3-4 (22 fix commits) and residual inventory
Round 3 (attack resolution, bestiary/PC stat blocks, action economy) and
round 4 (remaining spells, PC feats) found 2 High, ~11 Med and ~70 Low
findings. Records the 22 fix commits (e0bf484..0c3f5fd), both justified
golden updates (Weapon Focus, Divine Favor), and the residual inventory:
~13 deferred spell effects, 20 feat/racial mismatches, and the missing
subsystems (alignment, items, skills). Journal marked paused at round 4.
2026-09-17 23:28:32 +02:00

25 KiB
Raw Blame History

Conformité SRD Pathfinder 1re édition — journal d'audit

Ce document consigne, de façon exhaustive et vérifiable, l'écart entre les règles implémentées par le moteur et le SRD Pathfinder 1re édition. Il complète le README.md (qui décrit le comportement attendu) en traçant ce qui a été corrigé, ce qui est hors périmètre, et ce qui reste assumé comme résiduel.

Méthode

  1. Audit read-only par domaine : chaque passe couvre un domaine étanche (sorts, mouvement, morts-vivants, dons, manœuvres, conditions, données de sorts, bestiaire). L'auditeur croise le code avec la base de connaissances SRD (pathfinder-kb, collection pathfinder-1e-rules) et cite la règle.
  2. Classement : High (change matériellement l'issue d'un combat), Med (clairement faux, impact étroit), Low (donnée / cosmétique).
  3. Correction : un commit par correctif, gate complète verte avant chaque commit (ruff select=ALL, basedpyright strict, pytest).
  4. Non-régression : le transcript doré (tests/test_pc_combat_golden.py) n'est réécrit que lorsqu'un correctif SRD change légitimement la sortie, avec justification ligne à ligne.
  5. Traçabilité : tout constat non corrigé est classé ici en hors périmètre (choix délibéré) ou résiduel assumé (écart connu, non corrigé).

État de la gate

Contrôle Résultat
uv run pytest -q 1543 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é

1. Écarts corrigés

Correctifs de la passe 2 (commits)

Commit Objet
b03a61d Données de sorts : niveaux (abundant_ammunition, comprehend_languages, deja_vu 0→1 ; create_water 1→0 ; enhance_water 2→1), sauvegardes (blindness_deafness Will→Fort ; enhance_water none→Fort), RM de summon_monster_i/ii, écoles (6 sorts), portées (4 sorts) + pins de registre
317f91a Entangled : jet de concentration DD 15 + niveau ; dex_skills −4
bfe0b76 Exhausted : −6 Dextérité → −3 CA / −3 Réflexes
6220edc Fatigued : −2 Dextérité → −1 CA / −1 Réflexes
def8533 Nauseated : privé d'attaques d'opportunité
68a03a3 Confused : privé d'attaques d'opportunité (simplification)
cf8a073 Grappled/Pinned : −2 aux jets de manœuvre (hors grapple/escape)
f31cc88 Pinned : ne peut plus attaquer
4d45409 Weapon Focus : correspondance insensible à la casse (le don s'applique enfin)
2807f71 Attaque sournoise : toute dissimulation l'annule
350844f Up Close And Deadly : réservé aux armes à feu
fdc9127 Toughness : +3 pv sous 4 DV (max(3, niveau))
2b5920c Disarm : l'arme tombe (weapon_dropped) au lieu d'une pénalité −4
06da519 Dirty trick : liste RAW étendue (shaken, sickened)
0cccea2 Manœuvres : succès automatique contre cible incapable
3a5948c CMD : plus de double comptage de Dextérité (Tiny, CMB pré-calculé)
e89ea42 README/capacités : grapple (pin hors périmètre), pinned/nauseated sans attaque, Weapon Focus par groupe

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).

Correctifs des passes 3 et 4 (commits)

Commit Objet
e0bf484 Tir dans une mêlée : exemption mesurée cible → allié le plus proche (High)
cc9fba3 CA d'une cible inerte : −5 exact, plus de double comptage d'une Dextérité négative
fa63829 trait et racial non cumulables (APG « Traits », CRB)
1c2663d Type non cumulable : meilleur bonus et pire pénalité conservés séparément
ae037c9 Dégâts minimum : 1 point sur une touche réduite sous 1 par la RD
b3a7c37 Types de bonus alchemical/inherent/resistance/size (UM Table 2-7)
feaab5e celestial_wolf aligné sur le loup du SRD + template céleste (DR/RM)
1c94d48 harvie : Sagesse 14, Talons primaires +2 (1d4 ×2), Morsure secondaire
b9477a2 ierlieth : bonus de dégâts −1, Queue secondaire ajoutée
2b5b39a Chevaux : sabots 1d4 marqués naturels, Morsure secondaire de Jeanne
611952c misty : don « Plot Armor » ajouté en no-op tracé
83bbcae Ray of Enfeeblement : type PenaltyEffect (pénalité de Force lancée, Fort moitié) au lieu de fatigued
79d9ff0 drunkards_breath : cône de 30 ft qui rend nauseated (niveau 2, conjuration, Fort annule) — l'ancien contenu était inventé (High)
48c816b delay_disease : niveau 2 conjuration (soins)
27f9629 Données : alarm close, air_bubble/endure_elements touch, delay_poison conjuration, conventions 10 ft/0 ft documentées, daze 4 DV
47f563e Shield of Faith : +2 CA déflexion (+1 / 6 niveaux, max +5)
bee224a Divine Favor : +1 chance attaque/dégâts par 3 niveaux (max +3) — doré mis à jour
6d96779 Spear of Purity / Shard of Chaos : 1d8 / 2 niveaux (max 5d8), Volonté moitié
a5bd3c5 Défense totale : plus d'attaques d'opportunité
e253b03 Charge restreinte à 1× pour un accablé/invalide (et au round de surprise)
980d53d Aide : expiration au début du tour de l'aidant
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)

Passe 1 — sorts de buff, mouvement/grille, morts-vivants, armes naturelles

# Constat Sév. Correctif (commit)
B1 Bless affectait toutes les créatures d'un burst de 20 ft (y compris les ennemis) ; le SRD cible « you and each of your allies within a 50-ft. burst » High e43066e — filtre AreaEffect.targets (all/allies/enemies), burst 50 ft, alliés + lanceur
B2 Bane était un sort mono-cible ; le SRD cible les ennemis dans un burst de 50 ft Med 5e3505d — conversion en AreaEffect 50 ft, targets: "enemies"
B3 Bladed Dash : niveau 1 (au lieu de 2), portée close (au lieu de personal) Med 312f9fd
B4 Aid : niveau 1 (au lieu de 2), portée long (au lieu de touch) Med 312f9fd
B5 Doom : portée close (au lieu de medium) Med 312f9fd
B6 Bull's Strength : sauvegarde fort (le SRD n'accorde pas de jet ; valeur neutre corrigée en will) Med 312f9fd
B7 Bear's Endurance : sauvegarde fort (idem) Med 312f9fd
B8 Mage Armor absent du registre Low 3e19d29 — sort ajouté (niveau 1, conjuration, contact, +4 CA d'armure, RM non) + type de bonus "armor" non cumulable (registre porté à 108 sorts)
C1 Budget de déplacement : parité des diagonales figée à 0 dans les descentes gloutonnes → la règle 5-10-5 était violée (un marcheur vitesse 30 parcourait 6 cases en diagonale au lieu de 4) Med 2cc2ba1 — parité propagée (_best_move_step, _descend_path, _run_line_path, _flee_path) + _path_cost_5105 pour la charge
C2 Pas de placement (5 ft) autorisé depuis/vers un terrain difficile Med 437507e — rejet si le footprint courant ou la destination touche du terrain difficile
C3 Entrer dans la case d'une créature hostile ne provoquait pas d'AoO Med 9a16ca0 — _check_enter_aoo câblé dans _walk_steps
C4 Traversée d'une case hostile à ≥ 3 catégories d'écart de taille non modélisée Med 9a16ca0 — _can_pass_through (porte « traversée ») distincte de _blocked (porte « fin de mouvement »)
C5 Un combattant fatigué/épuisé pouvait courir (seule la charge était bloquée) ; le SRD : « can neither run nor charge » Low 7fc7a1d — garde cant_charge ajoutée à _execute_run
D1 Les morts-vivants (et les créatures artificielles) mouraient à hp ≤ -CON au lieu d'être détruits à hp ≤ 0 Med 59caf67 — seuil de mort à 0, pas de bande d'agonie
D2 Fiche du liche non conforme au bloc SRD : BAB 8 (au lieu de +5), contact +10 (au lieu de +5), damage_bonus 5 doublant la formule (dégâts réels 1d8+10 au lieu de 1d8+5), CA 25/14/23 (au lieu de 23/14/21), jets 10/10/14 (au lieu de 6/7/11), con_score 14 alors qu'un mort-vivant n'a pas de Constitution Low 881f2ef
D3 Les sorts de soin (cure) soignaient les morts-vivants au lieu de les blesser Low cad35e2 — dégâts (Volonté pour moitié), ni RD ni stabilisation
A1 Armes naturelles : itératifs de BAB accordés à tort et absence de la pénalité −5 des attaques secondaires Med e5691bd — champs natural/secondary (une seule attaque, secondaires −5, Multiattack −2)

Passe 2 — dons/capacités, manœuvres, conditions, données de sorts

Constats d'audit (6 High, ~28 Med, ~45 Low). La colonne Disposition indique le sort réservé : corrigé (commit), à corriger, hors périmètre (non modélisable proprement) ou résiduel assumé (écart connu, conservé).

2a. Données de sorts (vérifiées une à une contre le KB)

Constat Sév. Disposition
abundant_ammunition niveau 0 → 1 (toutes classes) High corrigé (passe 2)
comprehend_languages niveau 0 → 1 High corrigé (passe 2)
deja_vu niveau 0 → 1 High corrigé (passe 2)
blindness_deafness sauvegarde will → fort High corrigé (passe 2)
create_water niveau 1 → 0 (clerc/druide) Med corrigé (passe 2)
enhance_water niveau 2 → 1, portée personal → touch Med corrigé (passe 2)
deja_vu portée personal → medium Med corrigé (passe 2)
summon_monster_i / summon_monster_ii RM true → false Med corrigé (passe 2)
divine_favor — effet SRD (+1 chance attaque/dégâts par 3 niveaux) absent Med résiduel assumé
owls_wisdom — effet SRD (+4 Sagesse) absent Med résiduel assumé
shield_of_faith — effet SRD (+2 CA déflexion) absent Med résiduel assumé
weapon_of_awe — effet SRD (+2 dégâts sacrés) absent Med résiduel assumé
Écoles fausses : arcane_mark divination→universal, color_spray enchantment→illusion, dancing_lights conjuration→evocation, deja_vu divination→enchantment, enhance_water abjuration→transmutation, abundant_ammunition transmutation→conjuration Low corrigé (passe 2)
Portées fausses : dancing_lights close→medium, create_water medium→close Low corrigé (passe 2)
enhance_water sauvegarde none → fort (inoffensif) Low corrigé (passe 2)
Effets absents (sorts utilitaires) : guidance, resistance, protection_from_evil, sanctuary, virtue, shard_of_chaos, spear_of_purity, spiritual_weapon Low hors périmètre
Faux positifs (conformes) : web RM, flurry_of_snowballs RM, detect_fiendish_presence niveau, scorching_ray projectiles (max 3), make_whole/restoration_lesser temps d'incantation (long) — conformes
Non vérifiable (le KB omet la ligne RM) : shield, read_magic, comprehend_languages (RM) — indéterminé
Portées « pieds fixes » (15/30/50/60/120 ft) approchées par les catégories close/medium/long pour les cônes, lignes et bursts (burning_hands, color_spray, fear, flurry_of_snowballs, lightning_bolt, bless, bane, obscuring_mist, detect_magic) Low hors périmètre (modèle de portée par catégories)

2b. Conditions

Constat Sév. Disposition
Entangled : aucun jet de concentration DD 15 + niveau à l'incantation Med corrigé (passe 2)
Exhausted : pénalités −3 CA / −3 Réflexes manquantes (−6 Dex) Med corrigé (passe 2)
Nauseated : peut porter des attaques d'opportunité Med corrigé (passe 2)
Confused : peut porter des attaques d'opportunité (le SRD l'interdit) Med corrigé (passe 2)
Grappled : −2 aux jets de manœuvre (sauf grapple/escape) non appliqué Med corrigé (passe 2)
Pinned : peut attaquer ; de plus la condition n'est jamais appliquée (code mort) Med corrigé (f31cc88) / hors périmètre (entretien)
Fatigued : −1 CA / −1 Réflexes manquants (−2 Dex) Low corrigé (passe 2)
Fatigued/Exhausted : pénalité de dégâts appliquée aussi aux armes à distance Low résiduel assumé
Entangled : dex_skills −4 manquant (incohérent avec grappled/pinned) Low corrigé (passe 2)
Shaken/Sickened/Frightened/Panicked : pénalités de compétence/caractéristique non modélisées Low hors périmètre (pas de tests de compétence)
Frightened/Panicked : fuite = retraite 2× au lieu de la course 4× ; acculé attend au lieu de se recroqueviller Low résiduel assumé
Dazzled / Blinded : malus de Perception (dont opposition) non modélisés Low hors périmètre
Deafened : échec d'incantation 20 % Low hors périmètre (déjà documenté)
Stunned/Panicked : « lâche tout ce qu'elle tient » non modélisé Low hors périmètre (pas de modèle d'objet tenu)
Grappled : « aucune action à deux mains » non modélisé Low hors périmètre
Pinned : composantes somatiques/matérielles non modélisées Low hors périmètre
Bleeding : règle de non-cumul (« le pire effet l'emporte ») non vérifiée Low à vérifier

2c. Manœuvres de combat

Constat Sév. Disposition
Grapple : aucun entretien/pin/dégâts/déplacement ; pinned jamais appliqué — le README « grapple → grappled/pinned » est faux High hors périmètre (README corrigé, e89ea42)
Disarm : pénalité −4 synthétique au lieu du lâcher d'arme (le SRD fait tomber l'objet) High à corriger
Grappled : −2 non appliqué aux jets de manœuvre de combat Med corrigé (cf. 2b)
Grapple : plafond arbitraire de 10 rounds ; pas de bonus de +5 d'entretien Med hors périmètre
Disarm : pas d'échec-de-10 → l'attaquant lâche son arme Med résiduel assumé
Trip : prone expire en 1 round au lieu de persister jusqu'à stand_up Med résiduel assumé (README documenté)
Sunder : dégâts str_mod + 2 fixes au lieu des dégâts d'arme ; dureté non modélisée Med résiduel assumé (README documenté)
Sunder : arme cassée retirée des attaques au lieu de −2 (SRD : reste utilisable) Med résiduel assumé
Pas de succès automatique contre une cible incapable/inconsciente Med à corriger
Reposition : contrainte d'allonge non appliquée au déplacement Med résiduel assumé
Dirty trick : options shaken/sickened manquantes ; pas de retrait par action de mouvement Med à corriger
Trip : créatures sans jambes/volantes non trippables ; +2 par paire de jambes Low hors périmètre (pas de traits de créature)
Overrun : option « se laisser éviter » non modélisée Low hors périmètre
Bull rush : vérifications secondaires contre les créatures sur le passage non modélisées Low hors périmètre
Drag : budget de déplacement de l'attaquant non vérifié Low hors périmètre
Disarm : à mains nues −4, +10 → lâcher des deux objets, attente d'un round Low résiduel assumé
Escape : option « devenir le grappleur » non modélisée Low hors périmètre
Grapple : −4 si pas deux mains libres ; restrictions arme légère/Stealth Low hors périmètre (pas de modèle de mains)
CMD : double comptage de Dextérité latent pour une créature Tiny avec cmb pré-calculé Low à corriger

2d. Dons et capacités de classe

Constat Sév. Disposition
Weapon Focus (Pistolet) est un don mort : le filtre de don compare exactement « Pistol » au nom d'arme « Braises d'Automne (pistolet ?) » → le +1 ne s'applique jamais Med à corriger
Attaque sournoise autorisée contre une dissimulation partielle (le SRD bloque dès « concealment » ; le README revendique à tort « total concealment ») Med à corriger
Up Close And Deadly s'applique à toute attaque à distance ; le SRD l'exige d'une arme à feu Med à corriger
Toughness : +niveau au lieu de +3 puis +1 par DV au-delà de 3 (faux aux niveaux 1-2 ; données actuelles ≥ 3) Low à corriger
Channel Energy : 2d6 figés (pas de progression +1d6 par 2 niveaux) ; le canaliseur est toujours inclus Low résiduel assumé
Combat Reflexes : planché à 1 AoO (le SRD autorise 0 avec un modificateur de Dextérité négatif) Low résiduel assumé
Cackle : étend les evil_eye de tous les lanceurs, pas seulement les siens Low résiduel assumé
Improved Critical appliqué à toutes les armes (SRD : un type d'arme) Low résiduel assumé (README documenté)
Inspire Courage : +1 plat (progression +1 par 4 niveaux non modélisée) Low résiduel assumé (README documenté)
Spell Combat : le coût de pool arcanique est un no-op (misty n'a pas de pool) Low sans objet

2. Hors périmètre (choix délibéré, documenté)

Ces règles sont volontairement non modélisées et signalées dans le README.md (sections « Limites hors périmètre » et « Limites de sorts ») pour ne pas être confondues avec des bogues.

Sujet Raison
Squeeze (se serrer dans un passage étroit) La largeur de couloir n'est pas comparée à la taille ; une créature bloquée par son footprint l'est sans option de squeeze payante
Acrobatics « Tumbling » (traverser une case ennemie sans AoO) Le moteur n'a pas de système de compétences
Créature inerte très grande = obstacle à 2 cases Les cases d'une créature inactive ne bloquent pas et ne coûtent pas double
Échec d'incantation du personnage sourd (20 %) SpellSpec n'a pas de composante verbale ; il faudrait encoder les composantes sur les 108 sorts
Incantation multi-round (long : 3 rounds, 10 min, 1 h) Non planifiable dans un tour ; jetée du budget (downgraded:cast_time) plutôt qu'approximée
Co-occupation au-delà de Tiny vs plus grand Deux créatures Small+ ne partagent jamais une case ; plusieurs Tiny sur une case non gérés
Combat à deux armes / arme en main secondaire (×0,5 Force) Hors du modèle d'attaque actuel
Vol 3D / vol par-dessus les obstacles La vitesse de vol est un budget au sol ; pas de maniabilité ni de survol du terrain
markers (points nommés de la carte) Validés à la lecture, non appliqués à la résolution

3. Résiduels assumés (écart connu, non corrigé)

Sujet Nature de l'écart Décision
Course — durée liée à la Constitution, don Run, armure lourde (×3) Le SRD limite la course à CON tours puis impose un jet de Constitution DD 10, et réduit la vitesse de course en armure lourde ; le moteur applique toujours ×4 Assumé : aucun scénario courant ne course plus de quelques tours
Dégâts non létaux Absents du modèle de PV Assumé : aucune source de dégâts non létaux dans les données
Armes à éclaboussures / dégâts d'éclaboussure Absents (pas d'objet concerné dans les données) Assumé
Sort « harmless » sur cible consentante Le moteur roule tout de même une sauvegarde (consommation de RNG) ; l'issue du soin n'en dépend pas Assumé : fidélité de déterminisme, pas d'effet observable
Réglages du liche non SRD (pv 100 vs 111, Force, Intelligence, initiative, aura de terreur 30 ft/DD 22 vs 60 ft/DD 18) Réglages d'équilibrage du scénario doré Assumé : conservés pour ne pas casser la fiche dorée
Dés énergétiques non multipliés par un critique (contact du liche) Règle moteur globale (exceptions CRB « Critical Hits ») Assumé : cohérent avec les autres attaques
selective_channeling non modélisé Le canal d'énergie affecte toutes les créatures du type visé dans la zone Assumé (documenté au README)
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é
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

4. Conformités vérifiées (garde-fous anti-régression)

Constats explicitement contrôlés et confirmés conformes :

  • Résistance aux sorts : le drapeau spell_resistance est respecté et _check_spell_resistance court-circuite sans consommer de RNG quand la cible n'a pas de RM.
  • Description de Lightning Bolt (ligne 120 ft, 1d6/niveau plafonné 10d6, Réflexes demi) : conforme.
  • Diagonale entrant en terrain difficile : coût plat de 3 cases, convention de table explicite dans grid.py, cohérente entre Dijkstra et descentes.
  • Terrain mixte : les coûts de pas s'additionnent sans double comptage.
  • Déplacement d'un personnage aveuglé : le SRD n'interdit ni le déplacement, ni la course, ni la charge à un aveugle (seuls la touche, la CA et les compétences sont affectés) — le constat d'audit initial ne visait pas une vraie règle.

5. Journal des audits

Passe Domaines Sessions Constats Statut
1 Sorts (B), Mouvement/grille (C), Morts-vivants (D), Armes naturelles (A) bg_9e9e22e6, bg_cda707bf, bg_ba80396a, bg_6a621d4c 1 High, 12 Med, ~20 Low Corrigés + documentés (ci-dessus)
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é
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)

6. Relancer une passe d'audit

Chaque passe suit le même protocole :

  1. Choisir un domaine non encore audité (voir le journal § 5).
  2. Lancer un auditeur read-only (agent oracle) avec la base SRD pathfinder-kb et l'exigence de citer la règle et la ligne de code fautive.
  3. Trier chaque constat : corriger (si l'impact est matériel et le correctif propre) ou classer en hors périmètre / résiduel assumé (ce document).
  4. Un commit par correctif ; gate complète verte ; transcript doré préservé ou justifié ligne à ligne.
  5. Reporter les constats dans les tableaux ci-dessus et la ligne de journal.