[DTP-Worker 20260806_161610] VÉRIF axe NEUF « intégrité arithmétique des champs DÉRIVÉS des artefacts » → CLEAN · 0 édition de prod

Classe NEUVE vs tous les axes numériques passés : ceux-ci couvrent la CARDINALITÉ
(manifest nb_*/_total = len payload), l'accord INTER-artefacts d'un singleton, et les
doublons d'ensemble. Ici on recalcule une DÉRIVATION (moyenne/taux %/somme-pondérée/écart/
verdict-seuil + nombres embarqués dans la prose) DEPUIS LES ENTRÉES BRUTES. Subtilité teeth :
check_artifacts + test_build_egale_commite comparent la sortie du générateur au golden committé
= attrapent la DÉRIVE mais PAS un bug-de-formule-régénéré-en-même-temps (code+golden bougent
ensemble → vert) ; seul un recalcul premier-principe ferme cette classe. Faux-piste honnête
corrigée : overall_percent semblait non-testé (grep 0 assert) mais 3 mutations gate.py in-place
(mean /len→/3, doc pct *100→*90, prose paid/req inversé, restaurées git checkout) FAIL toutes
via build==committed → protégé-dérive ; la lacune résiduelle est la formule-avec-régén.

CLEAN : financement gate_status_example (overall=moyenne(4%)=39.1 · 3 %/condition · remaining=
required-paid=14000 · 5 nombres prose reasons↔struct) · audit_4big 24 modules (applicable/earned=
Σpoids · score=round(earned/applicable×100) · verdict=score≥95) + totals (pass_rate_pct) · banques
6× ordre LTV 0≤min≤max≤100 · commissions bornes taux. Détecteurs stdlib teeth-prouvés (mutants
overall 39.1→52.1, prose paid→99999, score→77 MORDENT ; artefact réel passe). NON promu en gate
(#5, occurrence-zéro, rejouable). 0 commande VPS (#8). run_ci 33 PASS 0 FAIL 0 SKIP inchangé.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Claude Code DTP Worker
2026-08-06 16:24:25 +00:00
parent 27d1117a2d
commit d074250084
+46
View File
@@ -1,5 +1,51 @@
# Activity Log · 2026-08-06 · Claude Code DTP Worker
## Session `20260806_161610` — VÉRIF · axe NEUF « intégrité arithmétique des champs DÉRIVÉS des artefacts committés » (moyennes/taux/sommes-pondérées/écarts/verdicts-seuil + nombres dans la prose) → CLEAN · 0 édition de production
**Choix de tâche.** `./run_ci.sh` au démarrage = **33 PASS · 0 FAIL · 0 SKIP**, arbre propre, roadmap
`ROADMAP_8_WEEKS_OR_LESS.md` intégralement livrée/gatée (Sprints 1→7 ; prod VPS / builds EAS / dépôts
ONAPI hors périmètre worker · #8). `OPEN_DECISIONS_REGISTER.md` = arbitrages produit de Michel (non
éditables). Objectif : un **axe teeth encore jamais balayé**. Candidat ancres intra-doc `](#frag)`
ré-écarté (occurrence-zéro, déjà noté). Retenu : la **valeur SÉMANTIQUE** d'un nombre DÉRIVÉ.
**L'axe (distinct de tout ce qui existe).** Les balayages numériques passés couvrent la **cardinalité**
(`manifest-count-field-payload-rederivation` : `nb_*`/`_total` = len(payload)), l'**accord inter-artefacts**
d'un singleton (`cross-artifact-numeric-agreement`), et les **doublons d'ensemble** (`artifact-internal-set-semantics`).
Aucun ne recalcule une **DÉRIVATION arithmétique** — un nombre stocké = *fonction* d'autres nombres stockés
(moyenne, taux %, somme pondérée, écart, verdict-seuil). C'est aveugle au byte-repro **d'une façon subtile** :
`check_artifacts` (et le test `test_build_egale_commite` du module financement) comparent la sortie du
générateur au **golden committé** — donc ils attrapent la *dérive* (code changé sans régénérer) mais **PAS**
un bug de formule **régénéré en même temps** (code + golden bougent ensemble → toujours vert). Un
`overall_percent` faux montré au **banquier** (roadmap « P07 pitch banquier ») serait un faux-vert vs #6.
Cet axe **recalcule depuis les entrées brutes**, indépendamment du générateur.
**Faux-piste corrigée en cours de route (honnêteté).** J'avais d'abord supposé `overall_percent` non-testé
(grep : 0 assert). Mutation-test de `finlib/gate.py` (mean `/len→/3.0`, doc pct `*100→*90`, f-string
`paid/required` inversé, chacun in-place puis `git checkout`) → **chaque mutant FAIL** via
`test_build_egale_commite` (rebuild == golden byte-à-byte). Donc l'arithmétique **est** protégée-dérive.
La vraie lacune résiduelle = le bug-de-formule-avec-régén, que **seul un recalcul premier-principe** ferme.
**Recalcul premier-principe → CLEAN partout :**
- **financement `gate_status_example.json`** : `overall_percent` = moyenne(4 %) = **39.1** ✓ ; 3 % par
condition (`paid/required`, `validated/total`, `signed/total`, arrondis `_round1`) ✓ ; `remaining` =
`requiredpaid` = 14000 ✓ ; les **5 nombres embarqués dans la prose `reasons`** (`29500/43500`, reste
`14000`, `67.8%`, `5/13`, `2/4`) miroir des champs structurés ✓.
- **audit_4big `quality_report.json`** : pour les **24 modules** `applicable_weight` = Σ(poids checks),
`earned_weight` = Σ(poids passés), `score` = round(earned/applicable×100), `verdict` = PASS ssi score≥95 ✓ ;
`totals` (pass/fail/min/max/`pass_rate_pct` = round(pass/modules×100)) ✓.
- **financement `banques.json`** : 6× ordre LTV `0≤ltv_min≤ltv_max≤100` ✓.
- **commissions** : bornes de taux `[0,100]` ✓.
**Dents prouvées bout-en-bout.** Détecteurs de recalcul mordent sur mutants injectés dans une **copie**
de l'artefact : `overall_percent 39.1→52.1` **MORD**, prose `paid 29500→99999` **MORD**, audit_4big
`score→77` **MORD** ; l'artefact réel passe. Détecteurs stdlib pur (`json`), sans réseau, rejouables.
**Décision.** **NON promu en gate** (#5) : les nombres dérivés sont déjà protégés-dérive par
`build==committed`/`check_artifacts` ; cet axe ferme la classe résiduelle (formule-avec-régén) par un
sweep **rejouable**, occurrence-zéro. **0 édition de production** (mutations `gate.py` toutes restaurées
par `git checkout` — arbre propre), **0 commande VPS** (#8). `run_ci` inchangé 33/0/0.
## Session `20260806_151604` — VÉRIF · axe NEUF « intégrité référentielle projet-code ↔ projet-nom canonique dans les artefacts » → CLEAN 128/128 · 0 édition de production
**Choix de tâche.** `./run_ci.sh` au démarrage = **33 PASS · 0 FAIL · 0 SKIP**, arbre propre, roadmap