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