[DTP-Worker 20260806_151604] VÉRIF axe NEUF « intégrité référentielle projet-code ↔ projet-nom canonique dans les artefacts » → CLEAN 128/128 · sœur de role-portail-referential-integrity mais sur la dimension PROJET/ENTITÉ : tout P0X + nom-projet + les 8 entités des out/*.json résolvent-ils au canon CLAUDE.md §Projets/§Entités, et l'appariement code↔nom est-il bon ? distinct de claude-md-constant-anchor (qui gate des COPIES) = ici on chasse la référence PENDANTE/mauvais appariement, faux-vert contre #6 « Zéro invention » ; détecteur stdlib teeth-prouvé (P02←Nakua MORD, P02→P10 pendante flaguée) ; 128 objets 1:1 0 mismatch + agrégat 9/9 + 0 code pendant + 8/8 entités ; faux-pos écartés = prose forme-courte « Aqua Terra » (P07) ; 0 édition de prod, run_ci 33 PASS 0 FAIL 0 SKIP, rejouable, pas de gate (#5)

This commit is contained in:
Claude Code DTP Worker
2026-08-06 15:22:13 +00:00
parent caeb06be5f
commit fdb0632cf6
+47
View File
@@ -1,5 +1,52 @@
# Activity Log · 2026-08-06 · Claude Code DTP Worker # Activity Log · 2026-08-06 · Claude Code DTP Worker
## Session `20260806_151604` — VÉRIF · axe NEUF « intégrité référentielle projet-code ↔ projet-nom canonique dans les artefacts » → CLEAN 128/128 · 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 (Sprints 1→7 ; prod VPS / builds EAS / dépôts
ONAPI hors périmètre worker · #8). `OPEN_DECISIONS_REGISTER.md` = 3 arbitrages produit de Michel
(non éditables). Objectif : un **axe teeth encore jamais balayé**.
**Axe NEUF (absent de la mémoire).** `role-portail-referential-integrity-sweep` prouve que tout **slug
de rôle/portail** des `out/*.json` résout vers `rbac_50_roles.json`. Le pendant jamais balayé sur la
**dimension PROJET/ENTITÉ** : tout **code-projet** (`P0[0-9]`) et **nom-projet** référencés dans les
artefacts résolvent-ils vers le canon `CLAUDE.md §Projets`, et quand un objet **apparie** un code et un
nom, l'appariement est-il le bon ? Distinct de `claude-md-constant-anchor-gate` (qui gate des **copies**
de la liste §Projets) : ici on chasse la **référence pendante / le mauvais appariement** (une invention
`P10`, ou `P02 « Nakua »` — P02 = Coral del Sur) — un faux-vert invisible à tous les gates et qui
contredirait directement la contrainte **#6 « Zéro invention »**.
**Détecteur (stdlib pur, rejouable).**
- Canon : `{P01 Structure, P02 Coral del Sur, P03 Nakua, P04 Xamaná Cantiles, P05 Las Colinas Najayo
Arriba, P06 Coco Real, P07 Aqua Terra Las Terrenas, P08 Fasano Espirilla, P09 1069 Crisfer}`.
- **Invariant fort (appariement objet)** : pour chaque objet JSON dont les valeurs-chaînes contiennent
**exactement un** code ET **exactement un** nom canonique, le couple `(code, nom)` doit être
canonique. Le « exactement 1+1 » exclut proprement les blobs de prose (voir faux-positifs).
- **Chaîne-agrégat** : l'unique objet multi-codes (`dossier_vente.options` = les 9 paires inline
`"P0X <Nom>"`) vérifié ligne à ligne = 9/9 canoniques (déjà gaté §Projets).
- **Pendantes** : aucun token `P[01][0-9]` hors `{P01..P09}`.
- **Entités** : les 8 de `§Entités` (WAF · WA SRL · AC Arias Cuevas · Consortium ECR DR · Helios RD ·
WAG · Ploutos · 9060 QC) résolvent toutes (WA SRL 26× · Helios RD 23× · AC Arias Cuevas 21× · WAG 7× ·
9060 QC 6× · Ploutos 5× · Consortium ECR DR 5× · WAF 4×) — 0 entité inventée.
**Dents prouvées (mutants sur copie temp, prod intouchée).** baseline `pie_manifest.json` = 0 mismatch ;
mutant `P02 ← Nakua` → **MORD** `[('P02','Nakua')]` ; mutant `P02 → P10` → pendante **flaguée**
`['P10']`. 3/3 discriminés.
**Résultat.** Sur les 57 `out/*.json` : **128 objets 1:1 code+nom → 0 mismatch** · 1 agrégat (les 9
paires inline) 9/9 canonique · **0 code pendant** · 8/8 entités résolvent. Faux-positifs écartés (par
construction du détecteur objet) : 5 adjacences **inline en prose** (`"P07 Aqua Terra — Pitch
banquier"`, `"P07 Aqua Terra faisabilité…"` dans `run_sheet`/`acceptance_matrix`/`MANIFEST`) utilisent
la **forme courte** « Aqua Terra » (abréviation de « Aqua Terra Las Terrenas ») ou **deux codes** dans
une phrase — pas un mauvais appariement, prose légitime que l'invariant « exactement 1 nom **complet** »
exclut correctement.
**Conclusion.** **CLEAN 128/128** (+ agrégat 9/9 + 0 pendant + 8/8 entités). Axe teeth-prouvé, dimension
projet/entité jamais balayée (sœur de la dimension rôle/portail). **0 édition de production** (#8),
`./run_ci.sh` = **33 PASS · 0 FAIL · 0 SKIP**. Fichiers : ce journal + 1 entrée mémoire
(`project-entity-referential-integrity-sweep`). Sweep **rejouable** (stdlib pur, sans réseau) — **NON
promu en gate** (#5 : appariement partiellement déjà couvert §Projets, occurrence-zéro sur la pendance).
## Session `20260806_144555` — VÉRIF · axe NEUF « forme de normalisation Unicode (NFC vs NFD) des sources committées » → CLEAN 387/387 · 0 édition de production ## Session `20260806_144555` — VÉRIF · axe NEUF « forme de normalisation Unicode (NFC vs NFD) des sources committées » → CLEAN 387/387 · 0 édition de production
**Choix de tâche.** `./run_ci.sh` au démarrage = **33 PASS · 0 FAIL · 0 SKIP**, arbre propre, roadmap **Choix de tâche.** `./run_ci.sh` au démarrage = **33 PASS · 0 FAIL · 0 SKIP**, arbre propre, roadmap