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.