[DTP-Worker 20260806_081509] VÉRIF récurrence bug set-semantics (48276ee) sur TOUS les artefacts → CLEAN, détecteur à dents prouvées

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) <noreply@anthropic.com>
This commit is contained in:
Claude Code DTP Worker
2026-08-06 08:21:06 +00:00
parent def4706de3
commit 42d54b045f
+38
View File
@@ -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). (#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 `./run_ci.sh` = **33 PASS · 0 FAIL · 0 SKIP** (inchangé). Seules éditions : ce journal + mémoire
`ci-wiring-bijection-sweep` (+ pointeur `MEMORY.md`). `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 »).