diff --git a/05_activity_log/2026-08-06.md b/05_activity_log/2026-08-06.md index ef76458..59e51ad 100644 --- a/05_activity_log/2026-08-06.md +++ b/05_activity_log/2026-08-06.md @@ -1,5 +1,25 @@ # Activity Log · 2026-08-06 · Claude Code DTP Worker +## Session `20260806_164612` — VÉRIF · axe NEUF « intégrité de la FORME scalaire JSON (type int-vs-float-vs-str), pas la valeur » des 57 out/*.json → 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 (prod VPS / builds EAS / dépôts ONAPI hors périmètre worker · #8), `OPEN_DECISIONS_REGISTER.md` = arbitrages produit de Michel (non éditables). Les 6+ derniers commits sont des sweeps vérification-only à rendement décroissant. Objectif : un **axe objectif encore jamais balayé**. + +**Axe NEUF (absent de la mémoire).** Tous les axes numériques existants portent sur la **valeur** d'un nombre (accord inter/intra-artefact, re-dérivation, arithmétique dérivée) ou sur la **forme-date**. Aucun ne vérifie la **FORME scalaire JSON** elle-même : un compte sérialisé `3.0` (float) ou `"3"` (string) au lieu de `3` (int) **se lit à l'identique** mais casse `type:integer` / une comparaison stricte `== 3` / une colonne DB typée. C'est **aveugle au byte-repro** (build==committed rejoue le type tel quel) et **aveugle aux oracles-schémas** (tous déclarent `type:"number"`, qui accepte int ET float → un `sequence_id` float passe au vert). Sœur-FORME de `cross-artifact-numeric-agreement` (qui, lui, teste la valeur) et de l'axe forme-date. + +**Détecteur — 3 sous-checks, teeth-prouvés** (`/tmp`, stdlib pur, hors réseau, rejouable) : +- **(A) cohérence de type intra-fichier par chemin structurel** — un chemin répété (ex. `[].sequence_id`) dont les occurrences divergent de type scalaire = flag. Le regroupement par **chemin structurel complet** (pas le nom-feuille) évite les faux-positifs de collision de nom inter-schéma. +- **(B) clés à sémantique-compte** (`nb_*` / `*_total` / `*_count` / `passed`/`failed`/`ran`…) **doivent** être des int JSON, jamais float ni string-numérique. +- **(C)** aucun littéral `NaN`/`Infinity` (JSON strict invalide). +- **Dents** : basculer **un seul** `sequence_id` int-parmi-des-floats → **MORD** (`{int,float}`) ; `nb_portails=5.0` et `roles_total="44"` → **MORD** ; les comptes réels de `regression_run.json` **épargnés** (0 faux-positif). Détecteurs non-inertes. + +**Résultat → CLEAN.** B = 0, C = 0. A ne flague qu'**1** chemin = `run_sheet.json … evidence.[].valeur` (str/int/bool) = la **colonne clé-valeur hétérogène par design** (même piège `valeur` générique déjà en mémoire), **pas un bug** ; les 56 autres fichiers sont parfaitement cohérents en type par chemin. Les divergences de type **inter-FICHIERS** (`role`/`passed`/`verdict`/`is_submittable`/`a_confirmer`/`roadmap_line`) = **collisions de nom de clé per-module-local**, le piège générique documenté (chaque schéma distinct). + +**Deux formes float/int DÉLIBÉRÉES — NON-défauts, à NE PAS « corriger » :** (1) `workspace.json sequence_id` = `float(1.0..5.0)` via un cast explicite `float(...)` dans `wslib/frappe.py:162` — **fidélité au champ Float `sequence_id` du Workspace Frappe** ; (2) `is_submittable` = **int 0/1** dans les `doctype_*.json` — convention booléen 0/1 des DocType Frappe. Les deux sont by-design + épinglés byte-repro. Investigués avant conclusion (#5/#6) — pas de correction. + +**Périmètre / décision.** VÉRIF pure : **0 fichier de production modifié** · **0 chiffre inventé** (#6) · **0 commande VPS** (#8) · **aucun gate ajouté** (#5 — axe CLEAN + formes Frappe isolées, comme les précédents CLEAN). `./run_ci.sh` **33 PASS · 0 FAIL · 0 SKIP** inchangé. Détecteur rejouable. Mémoire : `json-scalar-type-integrity`. + +--- + ## 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