From 42d54b045f80c589d85e1c47e5bba7cc1682dca5 Mon Sep 17 00:00:00 2001 From: Claude Code DTP Worker Date: Thu, 6 Aug 2026 08:21:06 +0000 Subject: [PATCH] =?UTF-8?q?[DTP-Worker=2020260806=5F081509]=20V=C3=89RIF?= =?UTF-8?q?=20r=C3=A9currence=20bug=20set-semantics=20(48276ee)=20sur=20TO?= =?UTF-8?q?US=20les=20artefacts=20=E2=86=92=20CLEAN,=20d=C3=A9tecteur=20?= =?UTF-8?q?=C3=A0=20dents=20prouv=C3=A9es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Généralisation de la chasse au dernier bug générateur commité (48276ee : champ « ensemble » roles_rbac_utilises portant un doublon silencieux, bâti en itérant des slots). Scan des 57 out/*.json commités en 2 formes : SCALAR-DUP (forme exacte du bug, tableau scalaire à valeur répétée) = 0 hit/57 ; OBJ-DUP (clé d'identité dupliquée) = 33 hits, tous BY-DESIGN (doctype/permlevel de lignes de fixtures Frappe + role_id de journaux d'événements — répétition légitime, PAS un ensemble). Distinction clé outillée : champ-ensemble (distinct requis) vs journal-événements/lignes-fixtures. Les 6 MANIFEST portant roles_rbac_utilises tous distincts (commissions 4/4, dossier_vente 7/7, financement 3/3 [fix tient], workflow_vente 7/7, ecf 1/1, confotur 3/3). Dents prouvées par mutation en mémoire (forme plantée mord, pas de faux positif) → CLEAN opposable. Sweep lecture-seule, occurrence-zéro, rejouable → pas un gate (#5). 0 prod éditée · 0 artefact reconstruit · 0 gate ajouté · run_ci 33 PASS 0 FAIL 0 SKIP. Co-Authored-By: Claude Opus 4.8 (1M context) --- 05_activity_log/2026-08-06.md | 38 +++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/05_activity_log/2026-08-06.md b/05_activity_log/2026-08-06.md index f7f68c7..0fa8476 100644 --- a/05_activity_log/2026-08-06.md +++ b/05_activity_log/2026-08-06.md @@ -668,3 +668,41 @@ serait un gate **mort silencieux** — non détecté. CLEAN aujourd'hui (8/8 câ (#5), **0 chiffre saisi à la main** (#6 — `8`/8 recomputé par balayage), **0 commande VPS** (#8). `./run_ci.sh` = **33 PASS · 0 FAIL · 0 SKIP** (inchangé). Seules éditions : ce journal + mémoire `ci-wiring-bijection-sweep` (+ pointeur `MEMORY.md`). + +## Session `20260806_081509` — VÉRIF récurrence du bug *set-semantics* (48276ee) sur **TOUS** les artefacts → CLEAN, détecteur à dents prouvées + +**Choix de tâche.** `./run_ci.sh` au démarrage = **33 PASS · 0 FAIL · 0 SKIP**, arbre propre, roadmap +intégralement livrée/gatée, **0 marqueur `TODO`/`FIXME`** en production (recompté). La currency du canal +stakeholder est déjà à jour (le dernier commit `def4706` l'a explicitement écartée : les commits depuis +`e786c12` sont doc/commentaire, **0 sortie changée**) → un re-port serait du churn. Plutôt qu'un énième +sweep déjà catalogué en mémoire, **chasse à un défaut RÉEL** : le dernier bug générateur commité +(`48276ee`) était un **champ « ensemble » portant un doublon silencieux** (`roles_rbac_utilises` bâti en +itérant des **slots** logiques ; 2 slots → même rôle → 4 entrées/3 distincts). Question ouverte : **ce +bug se répète-t-il ailleurs ?** Un seul champ avait été audité au moment du fix. + +**Méthode — généralisation du bug à l'univers complet des artefacts.** Scan des **57 `out/*.json`** +commités : pour chaque tableau, deux formes du bug — +- **SCALAR-DUP** : tableau de scalaires (la forme EXACTE du bug `48276ee`, ex. `["a","b","a"]`) → **0 hit / 57 artefacts**. +- **OBJ-DUP** : tableau d'objets avec une clé d'identité dupliquée (`id`/`role_id`/`slug`/`doctype`/`permlevel`…) → **33 hits**, tous **BY-DESIGN** après revue : + - `doctype` répété sur les lignes de fixtures Frappe (chaque ligne porte le même DocType) — attendu ; + - `permlevel: 0` répété sur plusieurs lignes de permission — attendu ; + - `role_id` répété dans `evenements`/`emission_events`/`depot_events` — ce sont des **journaux d'événements**, pas des ensembles : un workflow fait légitimement agir le **même** rôle sur plusieurs étapes. + +**Contrôle ciblé du champ-ensemble d'origine.** Les **6** MANIFEST portant `roles_rbac_utilises` sont +**tous distincts** : `commissions 4/4` · `dossier_vente 7/7` · `financement_bancaire 3/3` (le fix +`48276ee` tient) · `workflow_vente 7/7` · `ecf_dgii 1/1` · `confotur 3/3`. **0 doublon résiduel.** + +**Dents prouvées (une CLEAN d'un détecteur sans dents ne vaut rien).** Test de mutation en mémoire : +le détecteur SCALAR-DUP **mord** sur la forme plantée `["a","b","a"]` (= la forme `48276ee`) et **ne +lève pas de faux positif** sur `["a","b","c"]`. Le CLEAN est donc opposable. + +**Verdict.** Le bug *set-semantics* (`artifact-internal-set-semantics`) **ne se reproduit nulle part** +dans les artefacts commités ; distinction clé établie et outillée : **champ-ensemble** (doit être +distinct) vs **journal-d'événements / lignes-de-fixtures** (répétition légitime). **Aucun défaut de +production.** Sweep lecture-seule, occurrence-zéro, rejouable → **pas un gate** (#5, sibling de +`role-portail-referential-integrity-sweep` et `manifest-count-field-payload-rederivation`). + +**Portée / anti-churn.** **0 fichier de production édité**, **0 artefact reconstruit**, **0 gate ajouté** +(#5), **0 chiffre saisi à la main** (#6 — `57`/`6`/comptes distincts recomputés par balayage), **0 +commande VPS** (#8). `./run_ci.sh` = **33 PASS · 0 FAIL · 0 SKIP** (inchangé). Seules éditions : ce +journal + mémoire `artifact-internal-set-semantics` (extension « no-recurrence sweep »).