[DTP-Worker] Sprint 8 · buffer L75 · Domaine SEO : le total ET la ventilation par langue des mots-clés (« 258 (fr=87·en=87·es=84) ») étaient transcrits À LA MAIN dans DEUX docs (table du README module seo + ligne de la fiche agent seo) sans AUCUN gate — ajouter un projet/vocabulaire ferait dériver les deux docs en silence pendant que seo/out/MANIFEST.json (byte-gaté par check_artifacts, counts recomptés de projets_master.json) dit autre chose → nouveau bloc dans check_readme_claims recomputant le quadruplet (total + fr/en/es) depuis MANIFEST.counts et exigeant l'égalité avec les deux docs (3 morsures : dérive total · compensation entre langues captée là où le total seul est aveugle · claim disparu)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,5 +1,65 @@
|
||||
# Activity Log · 2026-07-31 · Claude Code DTP
|
||||
|
||||
## Session `20260731_090037` · Buffer S8 · Domaine SEO : le total ET la ventilation par langue des mots-clés (« 258 mots-clés (fr=87 · en=87 · es=84) »), transcrits À LA MAIN dans DEUX docs (table du README module + ligne de la fiche agent), n'étaient couverts par AUCUN gate — ajouter un projet ferait dériver les deux docs en silence
|
||||
|
||||
**Tâche** : **Sprint 8 · buffer L75** (DevOps CI/CD · QA régression). Roadmap
|
||||
fonctionnellement close (22/22 modules · 564 tests · 7 gates verts au démarrage).
|
||||
Poursuite de la série anti-dérive (CLAUDE.md #6). Les sessions précédentes ont gaté
|
||||
les comptes **data-derived** des domaines tests, portails (structure), RBAC (3 volets).
|
||||
Cette session cible le **domaine SEO**, dernier grand livrable dont un compte
|
||||
data-derived cité dans deux docs pointait un artefact sans être recomputé par aucun gate.
|
||||
|
||||
### Défaut trouvé — comptes de mots-clés ungated, transcrits dans DEUX docs
|
||||
|
||||
- **`05_deliverables_mvp/seo/README.md:15`** : table « Livrables » →
|
||||
« `out/seo_keywords.json` — **258** mots-clés (fr=87 · en=87 · es=84) ».
|
||||
- **`03_agents/seo/AGENT.md:24`** : **même** ligne, mêmes 4 nombres recopiés.
|
||||
- **Pourquoi non gaté** : `check_readme_claims` couvrait les comptes tests, les
|
||||
triplets par workspace des portails et les 3 volets RBAC — jamais le domaine SEO.
|
||||
`check_docs` ne valide que les liens ; `check_artifacts` prouve que
|
||||
`seo/out/MANIFEST.json` est **reproductible byte-for-byte** (bloc `counts`
|
||||
= {keywords_total, keywords_per_lang{fr,en,es}} recomptés de `projets_master.json`
|
||||
à chaque build) mais **ne compare pas** ce que les DEUX docs en **écrivent**.
|
||||
Ajouter un projet / du vocabulaire éditorial ferait dériver les deux docs **en
|
||||
silence** pendant que l'artefact dit autre chose — même « vert trompeur ».
|
||||
- **État courant** : **aucun nombre périmé** — 258=(87+87+84) recoupe MANIFEST
|
||||
exactement (anti-invention #6 : rien à réécrire). Le défaut est la **surface
|
||||
ungated** (faux-vert latent), pas un chiffre faux.
|
||||
|
||||
### Fix — extension de `check_readme_claims.sh` (recompute total + 3 langues depuis MANIFEST)
|
||||
|
||||
Nouveau bloc qui RECOMPUTE le quadruplet `(total, fr, en, es)` depuis
|
||||
`MANIFEST.counts` (source déjà byte-gatée · zéro duplication du compteur du
|
||||
générateur) et exige l'égalité avec **les deux** docs. Recomputer les **trois
|
||||
langues** (pas seulement le total) attrape une **compensation** entre langues
|
||||
(fr −1 / en +1) qui laisserait le total juste et la ventilation fausse. Un claim
|
||||
**absent** échoue AUSSI. En-tête du gate + `ci/README.md` (§ table + § détail) mis à jour.
|
||||
|
||||
### Preuves de morsure
|
||||
|
||||
| Injection | Résultat |
|
||||
|---|---|
|
||||
| **README total** `258→259` | **exit 1** `dit 259/87/87/84 MAIS MANIFEST 258/87/87/84` |
|
||||
| **Fiche compensation** `fr=87/en=87 → fr=86/en=88` (total inchangé) | **exit 1** `dit 258/86/88/84 MAIS MANIFEST 258/87/87/84` — mord là où le total seul est aveugle |
|
||||
| **Claim disparu** (README) | **exit 1** `claim mots-clés INTROUVABLE (attendu total=258 …)` |
|
||||
| Restauré | **exit 0** (2 docs verts) |
|
||||
|
||||
### Vérifs
|
||||
|
||||
| Contrôle | Résultat |
|
||||
|---|---|
|
||||
| 7 gates (`guard`/`json`/`docs`/`artifacts`/`regression`/`ci_integrity`/`readme_claims`) | ✅ exit 0 |
|
||||
| `check_artifacts` (rebuild + égalité byte des `out/`) | ✅ (édition **hors** `05_deliverables_mvp` ⇒ 0 dérive d'artefact ; aucun README/AGENT.md touché) |
|
||||
| Matrice de régression | **564/22 · PASS** inchangée (ni `tests/` ni doc-evidence touchés) |
|
||||
| Diff | 2 fichiers (`ci/check_readme_claims.sh` + `ci/README.md`) · 0 untracked |
|
||||
|
||||
**Anti-invention (#6)** : rien inventé — le gate recompute total + 3 langues depuis
|
||||
`MANIFEST.counts` au lieu de figer un compteur ; les nombres des deux docs **découlent** de l'artefact.
|
||||
**Hors périmètre worker (VPS · #8)** : néant (gate python/stdlib en-repo).
|
||||
**Auto-score 4Big** : 96/100.
|
||||
|
||||
---
|
||||
|
||||
## Session `20260731_080025` · Buffer S8 · Hors du domaine « tests » : les comptes PAR WORKSPACE (cartes/liens/rôles) des 5 portails frontend, transcrits À LA MAIN dans DEUX docs (table du README module + prose de la fiche agent), n'étaient couverts par AUCUN gate — ajouter un rôle/DocType au contrat RBAC ferait dériver les deux docs en silence
|
||||
|
||||
**Tâche** : **Sprint 8 · buffer L75** (DevOps CI/CD · QA régression). Roadmap
|
||||
|
||||
Reference in New Issue
Block a user