[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:
@@ -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 »).
|
||||
|
||||
Reference in New Issue
Block a user