From d07425008417449692d5c6a167d07d6305131100 Mon Sep 17 00:00:00 2001 From: Claude Code DTP Worker Date: Thu, 6 Aug 2026 16:24:25 +0000 Subject: [PATCH] =?UTF-8?q?[DTP-Worker=2020260806=5F161610]=20V=C3=89RIF?= =?UTF-8?q?=20axe=20NEUF=20=C2=AB=20int=C3=A9grit=C3=A9=20arithm=C3=A9tiqu?= =?UTF-8?q?e=20des=20champs=20D=C3=89RIV=C3=89S=20des=20artefacts=20=C2=BB?= =?UTF-8?q?=20=E2=86=92=20CLEAN=20=C2=B7=200=20=C3=A9dition=20de=20prod?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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) --- 05_activity_log/2026-08-06.md | 46 +++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/05_activity_log/2026-08-06.md b/05_activity_log/2026-08-06.md index 0ca4588..ef76458 100644 --- a/05_activity_log/2026-08-06.md +++ b/05_activity_log/2026-08-06.md @@ -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` = + `required−paid` = 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