From 27c7d20449b7af2f055f2e3a999e7854669bc78a Mon Sep 17 00:00:00 2001 From: Claude Code DTP Worker Date: Wed, 5 Aug 2026 20:23:34 +0000 Subject: [PATCH] =?UTF-8?q?[DTP-Worker=2020260805=5F201339]=20ATTESTATION?= =?UTF-8?q?=20bout-en-bout=20=C2=B7=20cha=C3=AEne=20d'int=C3=A9grit=C3=A9?= =?UTF-8?q?=20des=20constantes=20mandataires=20CLOSE=20CLEAN=20=C2=B7=200?= =?UTF-8?q?=20=C3=A9dition=20de=20production?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Roadmap livrée+gatée, baseline verte (33 PASS) : plutôt qu'un gate marginal (#5), preuve end-to-end que la classe de bug latent la plus coûteuse — un générateur figeant une constante du mandat en littéral (précédent réel bancable_gen.py 0.52→finance._pct) — n'a AUCUN maillon hardcodé ni ungaté. 3 sondes : (1) Explore fan-out 05_deliverables_mvp/** → 0 littéral non-sourcé ; tous les générateurs lisent 2 sources canoniques uniques (genlib/model.py CANONICAL 6 valeurs #9/#10 ; publiciste/lib/branding.py 4 tokens #4). (2) ces 2 sources sont elles-mêmes ancrées à CLAUDE.md dans check_readme_claims.sh (bloc l.5427 model.py↔#9/#10 ; bloc l.6958 branding.py↔#4 + docstring + README + oracle test + renderer._CANONICAL_MARKERS) → boucle fermée sans trou. (3) les 2 ancres-pivots MORDENT, mutation-prouvé : MUT1 branding COLOR_ACCENT #f0b429→#e0a420 → RED nommant l'écart ; MUT2 model.py marketing 8.5%→9% → RED ; restauration ciblée git checkout -- (JAMAIS git clean) → tree propre, gate re-vert. Faux-positif écarté (settled) : daily 2026-08-05 tête « 624 passés · 0 skip » vs artefact 607/17 = dated-snapshot déjà reconcilié §CURRENCY l.146-171, LAISSÉ. 0 prod, 0 gate (#5), 0 artefact reconstruit, 0 chiffre saisi (#6), 0 VPS (#8). run_ci 33 PASS · 0 FAIL · 0 SKIP · git status propre. Co-Authored-By: Claude Opus 4.8 (1M context) --- 05_activity_log/2026-08-05.md | 56 +++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/05_activity_log/2026-08-05.md b/05_activity_log/2026-08-05.md index 7afd6c6..838d840 100644 --- a/05_activity_log/2026-08-05.md +++ b/05_activity_log/2026-08-05.md @@ -1761,3 +1761,59 @@ Documenté en `ci/README.md` §2 sous `check_readme_claims.sh` (nouveau paragrap (cf. [[ci-readme-table-detail-in-section2]]). **Vérif.** `./run_ci.sh` → **33 PASS · 0 FAIL · 0 SKIP**. + +--- + +## Session `20260805_201339` · ATTESTATION chaîne d'intégrité des constantes mandataires — bout-en-bout · 0 édition de production + +**Contexte.** Roadmap intégralement livrée+gatée ; baseline `run_ci.sh` verte (**33 PASS**). +Aucune tâche fonctionnelle in-repo ne reste (cf. sessions du jour). Plutôt qu'ajouter +un gate marginal (risque #5, cf. [[verify-uncovered-before-gating]]), la valeur honnête +du jour : **prouver de bout en bout que la chaîne de dérivation des constantes du mandat +n'a AUCUN maillon hardcodé ni maillon ungaté**, la classe de bug latent la plus coûteuse +(un générateur qui fige `0.52`/`8.5 %`/`#f0b429` en littéral dérive en silence si CLAUDE.md +change — précédent réel `bancable_gen.py 0.52→finance._pct`, cf. +[[fix-vs-gate-transitively-protected-constant]] · [[claude-md-constant-anchor-gate]]). + +**Sonde 1 — aucun littéral hardcodé côté générateurs.** Fan-out Explore sur +`05_deliverables_mvp/**` (recherche `0.52`/`0.085`/`0.03`/`3 %`/`8.5 %`/`52 %`/`#0a0a12`/ +`#f0b429`/`Cardnet`/`USD`/`DOP`/`Fraunces`/`Cormorant` en CODE exécutable des générateurs) : +**0 littéral non-sourcé**. Tous les générateurs lisent depuis **2 sources canoniques uniques** : +- `faisabilite/generator/genlib/model.py` → dict `CANONICAL` (6 valeurs : édition 3 %, + marketing 8.5 %, équilibre 52 %, devises USD+DOP, Cardnet, Letter US) — consommé par + bancable (`finance._pct(deps.CANONICAL[...])`), report, renderer. +- `publiciste/lib/branding.py` → `COLOR_BG`/`COLOR_ACCENT`/`FONT_DISPLAY`/`FONT_BODY` + (#0a0a12 · #f0b429 · Fraunces · Cormorant Garamond) — importé par mobile/app_config, + frontend/chat_otoia, seo (via `deps.branding`), publiciste/generator. + +**Sonde 2 — les 2 sources canoniques sont elles-mêmes ancrées à CLAUDE.md.** Le maillon +critique : une source unique n'est correcte que si ELLE est gatée contre le mandat. Vérifié +dans `ci/check_readme_claims.sh` : +- bloc l.5427 — `model.py CANONICAL` **re-dérivé de CLAUDE.md #9/#10** (6 valeurs). +- bloc l.6958 — `branding.py` CONSTANTES **re-dérivées de CLAUDE.md #4** (2 couleurs + + 2 fontes) + docstring + README:43 + oracle du test publiciste (+ `renderer._CANONICAL_MARKERS`). +→ boucle fermée : générateur → source canonique → CLAUDE.md, **sans trou**. + +**Sonde 3 — les 2 ancres-pivots MORDENT (mutation-prouvé, arbre byte-restauré).** +- MUT1 `branding.py COLOR_ACCENT #f0b429→#e0a420` → **RED** : « Branding canoniques · + branding.py CONSTANTES DÉRIVENT de CLAUDE.md #4 : accent='#e0a420' (attendu '#f0b429') ». +- MUT2 `model.py CANONICAL marketing_pct 8.5 %→9 %` → **RED** : « Faisabilité canoniques · + model.py CANONICAL DÉRIVE de CLAUDE.md #9/#10 : marketing_pct='9 %' (attendu 8.5%) ». +- Restauration ciblée par `git checkout -- ` (**JAMAIS `git clean`**, #interdits) → + `git status --porcelain` **vide** · gate re-vert. + +**Faux-positif écarté (settled, NON édité).** Le tableau « launch-readiness / Attestation » +en tête du daily report `2026-08-05.md` (l.30/45) lit « 624 passés · 0 skip » alors que +`regression_run.json.totals` = 607 passés / 17 skip. Ce n'est **pas une dérive neuve** : +la §CURRENCY du même fichier (l.146-171) reconcile explicitement (« les 624 passés · 0 skip +des sections antérieures sont des snapshots datés », nouvelle baseline 607/17 posée par +`1b99917`) — classe *dated-snapshot = KEEP* déjà consignée [[regression-baseline-17-skips-by-design]]. +Re-l'éditer = re-litiguer un settled → LAISSÉ. + +**Périmètre.** **0 édition de production**, **0 gate ajouté** (#5 — chaîne déjà défendue +end-to-end, sonde = attestation pas nouvelle machinerie), **0 artefact reconstruit**, +**0 chiffre saisi à la main** (#6), **aucune commande VPS** (#8 — 100 % local). Classe +mandate-constant-integrity **CLOSE CLEAN** ce jour (générateurs 0 hardcode · 2 sources · +2 ancres CLAUDE.md prouvées mordantes). + +**Vérif.** `./run_ci.sh` → **33 PASS · 0 FAIL · 0 SKIP** · `git status` propre.