From d6a8d73aece459dd46e742c2f0788f7ef5fb355e Mon Sep 17 00:00:00 2001 From: Claude Code DTP Worker Date: Wed, 5 Aug 2026 22:27:02 +0000 Subject: [PATCH] =?UTF-8?q?[DTP-Worker=2020260805=5F221354]=20SWEEP=20v?= =?UTF-8?q?=C3=A9rification=20=E2=80=94=20bijection=20INVERSE=20des=20arte?= =?UTF-8?q?facts=20out/=20(0=20fichier=20commit=C3=A9=20orphelin)=20=C2=B7?= =?UTF-8?q?=200=20=C3=A9dition=20de=20production?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Repo VERT/convergé à l'ouverture (run_ci 33 PASS·0 FAIL·0 SKIP). Balayage lecture-seule multi-surface avant tout travail (anti-gate-N+1 #5) : 24/24 modules CI-câblés+régression-couverts+fiche-documentés ; docstring↔code CLEAN (3 classes, sous-agent Explore) ; registre décisions ouvertes D-01..D-05 encore ouverts + citations file:line encore exactes (re-vérifiées) ; publiciste build/ gitignore-d, fiche exacte ; sweep CWD-hétérogène écarté (faux positifs — gate exécute les gen depuis leur module par conception). FINDING — axe robustesse non couvert : check_artifacts prouve la direction AVANT (produit⊆commité, itère les fichiers produits l.71-93) mais JAMAIS l'INVERSE (un out/ commité orphelin, plus émis par build, passerait silencieusement). Sweep exécuté (lecture seule, rejouable) : 58 fichiers out/ commités, 57 reproduits par build. Le seul « orphelin » = qa/regression/out/regression_run.json, BY DESIGN artefact d'EXÉCUTION (run, pas build) exclu du contrat build (docstring check_artifacts l.21-24) et byte-gaté séparément par check_regression.sh → 0 orphelin réel, bijection inverse tient. PAS un gate (#5) : AVANT déjà gaté ; INVERSE empiriquement propre + transitivement attrapé (tout consommateur reproductible lisant un out/ périmé casse check_artifacts). Consigné comme sweep rejouable, sibling des sweeps hash-seed/locale-TZ/forward-compat. Portée : 0 prod, 0 artefact rebuild, 0 gate ajouté (#5), 0 chiffre saisi (#6 — 8/24/33/58/57 recomputés), 0 VPS (#8). Seule édition : le journal. run_ci 33 PASS. Co-Authored-By: Claude Opus 4.8 (1M context) --- 05_activity_log/2026-08-05.md | 58 +++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/05_activity_log/2026-08-05.md b/05_activity_log/2026-08-05.md index bfcb58b..6331bdc 100644 --- a/05_activity_log/2026-08-05.md +++ b/05_activity_log/2026-08-05.md @@ -1945,3 +1945,61 @@ ajouté** (#5), **0 chiffre saisi à la main** (#6 — `8`/`33`/`258` recomputé + ce journal. **Vérif.** `./run_ci.sh` → **33 PASS · 0 FAIL · 0 SKIP** · `git status` propre après commit. + +--- + +## Session `20260805_221354` · SWEEP de vérification — bijection INVERSE des artefacts `out/` (aucun fichier commité orphelin) · 0 édition de production + +**Contexte.** Repo VERT à l'ouverture (`./run_ci.sh` → 33 PASS · 0 FAIL · 0 SKIP), très +convergé. Balayage lecture-seule multi-surface préalable pour un finding **réel** avant tout +travail (discipline anti-gate-N+1 · #5) : +- **CI** : 8 gates statiques (`git ls-files 'ci/*.sh'` hors `lib.sh` = 8) + 25 suites = 33 jobs. +- **Complétude modules** : **24/24** modules livrés (22 `*/*/tests` + `seo/tests` + `publiciste/tests`) + CI-câblés (`gate.needs`), régression-couverts (`regression_plan.json` = 24 suites, `publiciste` + inclus), fiche-documentés (≥1 `03_agents/*/AGENT.md`). **Aucun orphelin.** +- **Dérive doc↔code** (sous-agent Explore, 3 classes : docstring-vs-code · prose-vs-numeric · + fiche-completeness) → **CLEAN**, 0 dérive présente-temps. +- **Registre décisions ouvertes** (`OPEN_DECISIONS_REGISTER.md`) : les **5** items (D-01..D-05) + re-vérifiés **encore ouverts**, chaque citation `file:line` **encore exacte** (D-01 `pie_spec.json:24` + `contrats→legal/confotur` + 5 downstreams `null` · D-02 `gate.py:142` `_cond_validation_wag` + + `financement_spec.json:157` · D-03 `chat.py` absent fs / `CLAUDE.md:28` le liste / footer L128 + l'omet · D-04 `projets_editor.py` absent fs · D-05 bundle `a_confirmer`/`null`). **Contenu à jour** + (tampon de session en retard, mais bumper sans changement de contenu = churn cosmétique — écarté). +- **publiciste** : `build/` **`.gitignore`-d** (artefacts reproductibles non commités · pattern + `bancable-out-not-committed`), pas de sous-commande `build` ni de `out/` commité → `check_artifacts` + le saute correctement ; fiche L105 « aucun `index.html` commité » **exacte**. **Pas un gap.** +- **Sweep CWD-hétérogène écarté** : `check_artifacts` (l.62) exécute chaque générateur **depuis son + propre répertoire module** ; un sweep « CWD différent » produirait des **faux positifs** (les + générateurs résolvent leurs entrées relativement au module par conception) — piège de faux-positif + signalé à répétition en mémoire, abandonné. + +**Le finding — axe de robustesse génuinement NON couvert.** `check_artifacts.sh` prouve la +direction **AVANT** : pour chaque fichier **produit** par `build` (`$tmp/*`), un jumeau commité +**identique** existe (l.71-93 : itère sur les fichiers produits). Il ne vérifie **jamais l'INVERSE** : +qu'un fichier `out/` **commité** est **toujours** produit par un `build` frais. Un fichier `out/` +**orphelin** — émis par un ancien générateur, plus produit — passerait **silencieusement** (aucune +boucle sur les fichiers commités). Sibling non-déterminisme des sweeps `hash-seed` / `locale-TZ` / +`forward-compat` déjà en mémoire, mais sur une propriété **différente** (complétude/orphelins des +artefacts commités, pas déterminisme). + +**Sweep exécuté (lecture seule, rejouable).** Pour chaque `out/` (21 répertoires, tous avec un +générateur `build`), `build` frais vers un `mktemp -d`, puis pour chaque fichier `git ls-files` +du `out/` commité : exiger sa présence dans le build frais. Résultat : +- **58** fichiers `out/` commités inspectés · **57 reproduits** par `build` (bijection inverse OK). +- **1 seul « orphelin »** : `qa/regression/out/regression_run.json` — **BY DESIGN**, artefact + d'**EXÉCUTION** (`run`, pas `build`) explicitement exclu du contrat `build` par la docstring de + `check_artifacts` (l.21-24) et **byte-gaté séparément** par `check_regression.sh` (régénère un + `run` frais, exige l'identité byte-for-byte · mémoire `regression-baseline-17-skips-by-design`). +- → **0 orphelin réel.** La bijection inverse **tient** ; confiance durable ajoutée. + +**Pourquoi PAS un gate (#5).** La direction AVANT est déjà gatée (`check_artifacts`) ; l'INVERSE +est empiriquement **propre** et un orphelin réel serait de toute façon **transitivement attrapé** +(tout consommateur à build reproductible lisant un `out/` périmé casserait sur `check_artifacts`). +Ajouter un gate N+1 pour une propriété tenue = machinerie redondante. Consigné comme **sweep +rejouable**, comme ses siblings déterministes — pas un `ci/*.sh`. + +**Portée / anti-churn.** **0 fichier de production édité**, **0 artefact reconstruit**, **0 gate +ajouté** (#5), **0 chiffre saisi à la main** (#6 — `8`/`24`/`33`/`58`/`57` recomputés en direct), +**aucune commande VPS** (#8). Seule édition : ce journal (+ mémoire projet). + +**Vérif.** `./run_ci.sh` → **33 PASS · 0 FAIL · 0 SKIP** · `git status` propre après commit.