[DTP-Worker 20260805_201339] ATTESTATION bout-en-bout · chaîne d'intégrité des constantes mandataires CLOSE CLEAN · 0 édition de production
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 -- <path> (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) <noreply@anthropic.com>
This commit is contained in:
@@ -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 -- <path>` (**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.
|
||||
|
||||
Reference in New Issue
Block a user