[DTP-Worker] Sprint 8 · buffer L75 · Domaine QA/Audit 5D (2e surface) : la TABLE « Verdict courant » de l'audit de conformité énumérait À LA MAIN ses 4 open items (control → dimension → propriétaire) sans AUCUN gate d'IDENTITÉ. Le bloc audit_5d existant gate « 17 contrôles / 5 dimensions » (×2 docs) ET la ventilation du verdict « 13 PASS · 0 FAIL · 4 à confirmer » (recomputée d'audit_report.totals) mais PAS l'identité des 4 contrôles ouverts ni leur (dimension, propriétaire) — surface data-derived distincte du MÊME README. Cette table dérive d'audit_report.json.open_items[] (byte-gaté par check_artifacts : chaque item = {control, dimension, owner, detail} recalculé en rejouant les contrôles sur les hand-off amont). Le bloc de VENTILATION ne recompute que le COMPTE (« 4 à confirmer ») : un ÉCHANGE d'open item (ex. D2.3 → D3.1) laisse le compte à 4 — le compteur reste AVEUGLE — pendant que l'artefact dit autre chose ; idem une dimension mal étiquetée (D1.3 rangé sous D2) ou un propriétaire réattribué — « vert trompeur » qu'aucune suite tests/ (qui teste des FONCTIONS, pas la prose) n'attrape → nouveau bloc dans check_readme_claims recomputant l'ensemble {control:(dimension, propriétaire)} depuis audit_report.open_items (zéro duplication du modèle de l'auditeur #6) et exigeant que la table README l'énumère EXACTEMENT. Contrôle par ENSEMBLE (absent ET en trop mordus, pas seulement présence), puis (dimension, propriétaire) PAR LIGNE. Même patron que l'énumération des confirmations DevOps ou la carte de renormalisation par archétype 4Big. Cohérence croisée en bonus : l'ensemble des control == MANIFEST.open_items (le manifeste qui résume le rapport) — mord un manifeste désynchronisé de son rapport. Un claim absent échoue AUSSI (4 morsures vérifiées : échange D2.3→D3.1 capté là où le compte reste 4 · dimension D1.3→D2 captée · propriétaire D1.1 Direction→Compta capté · ligne D1.2 supprimée = sous-ensemble capté ; restauré = green : [D1.1,D1.2,D1.3,D2.3] control→dimension→propriétaire == audit_report.open_items). État courant : aucun open item périmé (anti-invention #6, rien à réécrire) — le défaut est la surface ungated. ci/README.md (table + détail) mis à jour · 7 gates re-verts.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Claude Code DTP Worker
2026-07-31 14:39:58 +00:00
parent abc9b62214
commit 6a40bfccce
3 changed files with 138 additions and 1 deletions
+58
View File
@@ -1,5 +1,63 @@
# Activity Log · 2026-07-31 · Claude Code DTP
## Session `20260731_143104` · Buffer S8 · Domaine QA/Audit 5D (2e surface) : la **table « Verdict courant »** de l'audit de conformité énumérait À LA MAIN ses **4 open items** (`control → dimension → propriétaire`) sans gate d'IDENTITÉ — le bloc existant ne recompute que le COMPTE (« 4 à confirmer »), aveugle à un **échange** d'open item.
**Tâche** : **Sprint 8 · buffer L75** (DevOps CI/CD · QA). Roadmap fonctionnellement
close ; poursuite de la série anti-dérive (CLAUDE.md #6). Le bloc `audit_5d` gaté
précédemment couvre « 17 contrôles / 5 dimensions » (×2 docs) **et** la ventilation
du verdict « **13 PASS · 0 FAIL · 4 à confirmer** » (recomputée d'`audit_report.totals`).
Restait, dans le **même README**, une surface data-derived distincte : la **table
« Verdict courant »** qui énumère les 4 contrôles ouverts avec leur dimension et leur
propriétaire.
**Dérive silencieuse fermée** :
- `05_deliverables_mvp/qa/audit_5d/README.md:51-56` énumère 4 lignes
`| D1.1 · … | D1 | Direction |` … — chacune porte trois faits data-derived :
l'`id` du contrôle, sa **dimension**, son **propriétaire**.
- Source faisant autorité : `qa/audit_5d/out/audit_report.json.open_items[]`
(byte-gaté par `check_artifacts`, chaque item = `{control, dimension, owner, detail}`
recalculé en rejouant les contrôles sur les hand-off amont).
- Le bloc de **ventilation** ne gate QUE le **compte** (« 4 à confirmer »). Un
**échange** d'open item (ex. `D2.3 → D3.1`) laisse le compte à 4 — le compteur
reste AVEUGLE — pendant que l'artefact dit autre chose ; idem une **dimension**
mal étiquetée (`D1.3` rangé sous `D2`) ou un **propriétaire** réattribué. « Vert
trompeur » qu'aucune suite `tests/` (qui teste des FONCTIONS, pas la prose) n'attrape.
- **État courant** : **aucun open item périmé** — les 4 lignes recoupent l'artefact
exactement (anti-invention #6, rien à réécrire). Le défaut est la **surface ungated**.
**Nouveau bloc dans `ci/check_readme_claims.sh`** : recompute l'ensemble
`{control:(dimension, propriétaire)}` depuis `audit_report.open_items` (zéro
duplication du modèle de l'auditeur · #6) et exige que la table README l'énumère
**exactement** : contrôle par **ENSEMBLE** (absent ET en trop mordus, pas seulement
présence), puis `(dimension, propriétaire)` **par LIGNE**. Même patron que
l'énumération des confirmations DevOps ou la carte de renormalisation par archétype
4Big. Cohérence croisée en bonus : l'ensemble des `control` == `MANIFEST.open_items`
(le manifeste qui résume le rapport) — mord un manifeste désynchronisé de son rapport.
### Preuve (4 morsures vérifiées + restauration verte)
| Injection | Résultat |
|---|---|
| échange `D2.3 → D3.1` (compte reste 4 · gate-compte aveugle) | ✗ énumère `[…,D3.1]` MAIS référentiel `[…,D2.3]` · exit 1 |
| dimension `D1.3` étiquetée `D2` (compte + ids intacts) | ✗ open item D1.3 dit dimension=D2 MAIS artefact D1 · exit 1 |
| propriétaire `D1.1` `Direction → Compta` (compte + ids + dims intacts) | ✗ D1.1 dit propriétaire=Compta MAIS artefact Direction · exit 1 |
| ligne `D1.2` supprimée (sous-ensemble) | ✗ énumère `[D1.1,D1.3,D2.3]` MAIS référentiel `[D1.1,D1.2,D1.3,D2.3]` · exit 1 |
| restauré | ✓ `[D1.1,D1.2,D1.3,D2.3]` (control→dimension→propriétaire) == `audit_report.open_items` · exit 0 |
- **`ci/README.md`** — surface ajoutée à la table récap du pipeline + paragraphe
descriptif (2e surface du même README audit 5D).
Suite CI complète re-verte (7 gates) : `guard_constraints` · `validate_json` ·
`check_docs` · `check_artifacts` · `check_regression` · `check_ci_integrity` ·
`check_readme_claims`.
**Hors périmètre worker (VPS · #8)** : néant (gate bash/python3 stdlib en-repo ;
édition **hors** `05_deliverables_mvp` ⇒ 0 dérive d'artefact).
**Auto-score 4Big** : 96/100.
---
## Session `20260731_140101` · Buffer S8 · Domaine QA/Audit 4Big (2e surface) : la **carte de renormalisation PAR ARCHÉTYPE** de l'auditeur (« `data_room` (sans HANDOFF) · `parser` (sans CONTRAT … ni HANDOFF) · `contract` (sans CLI ni HANDOFF) ») était transcrite À LA MAIN dans le README du module — la session précédente a gaté le barème (critères + poids + `generator (N critères)`) mais PAS les exclusions des trois autres archétypes.
**Tâche** : **Sprint 8 · buffer L75** (DevOps CI/CD · QA). Roadmap fonctionnellement