[DTP-Worker 20260805_221354] SWEEP vérification — bijection INVERSE des artefacts out/ (0 fichier commité orphelin) · 0 édition de production

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) <noreply@anthropic.com>
This commit is contained in:
Claude Code DTP Worker
2026-08-05 22:27:02 +00:00
parent d4f9289586
commit d6a8d73aec
+58
View File
@@ -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.