[DTP-Worker 20260801_203424] Sprint 8 · buffer · Audit 5D (4e surface du même README) : gate d'IDENTITÉ des LIVRABLES AUDITÉS — la liste des 5 hand-off out/*.json que l'audit de second niveau LIT (README qa/audit_5d §« Livrables audités »), énumérée à la main hors de tout gate ; recomputée par ENSEMBLE de MANIFEST.audited_artifacts (byte-gaté · = sorted(ARTIFACT_PATHS.values())), ordre README ≠ ordre MANIFEST trié ⇒ set-diff absent/fantôme ; cross-anchors : chaque chemin résout un fichier commité (a) + |audités| == |alias distincts des controls[].artifacts du spec| (b) ; 6 morsures vérifiées (4 README · 2 source), 7 gates re-verts
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -2183,3 +2183,74 @@ Working tree byte-restauré via `git checkout -- <fichier précis>` (**JAMAIS**
|
||||
- **Hors périmètre worker (VPS · #8)** : néant (gate bash/python3 stdlib en-repo ;
|
||||
édition **hors** `05_deliverables_mvp/*/out` ⇒ 0 dérive d'artefact).
|
||||
- **Auto-score 4Big** : 96/100.
|
||||
|
||||
## Session `20260801_203424` · Buffer S8 · Audit 5D (4e surface du même README) : gate de l'IDENTITÉ des **LIVRABLES AUDITÉS** — la liste des hand-off `out/*.json` que l'audit de second niveau LIT comme matière première
|
||||
|
||||
**Contexte** : la série anti-dérive Sprint-8 gate chaque surface data-derived contre
|
||||
sa source de vérité (CLAUDE.md #6, roadmap fonctionnellement close). Trois blocs
|
||||
`audit_5d` de `ci/check_readme_claims.sh` couvrent déjà le MÊME README : la **synthèse**
|
||||
(17 contrôles / 5 dimensions + ventilation verdict), l'**énumération des open items**
|
||||
(`control→dimension→propriétaire`) et l'**IDENTITÉ des 5 dimensions** (`id→titre→
|
||||
reference`). Une **4e surface** du même README restait ungated.
|
||||
|
||||
**Surface trouvée (ungated)** : `05_deliverables_mvp/qa/audit_5d/README.md:21-27` —
|
||||
section « ## Livrables audités (source = leur `out/`) » : une **liste de 5 puces** qui
|
||||
énumère À LA MAIN les hand-off `out/*.json` que l'auditeur charge réellement
|
||||
(`crm/workflow_vente/out/workflow.json` · `crm/dossier_vente/out/doctype_oto_dossier_
|
||||
vente.json` · `crm/commissions/out/commission_plan.json` · `fiscal/ecf_dgii/out/
|
||||
ecf_plan.json` · `legal/confotur/out/doctype_confotur_application.json`). Aucun bloc ne
|
||||
la touchait — vérifié : le seul `audited_artifacts` de tout le gate était dans un
|
||||
**commentaire** ; les 3 blocs audit_5d ne `load()` que `controls_total`/`totals`/
|
||||
`open_items`/`dimensions[]`.
|
||||
|
||||
**Source faisant autorité** : `qa/audit_5d/out/MANIFEST.json` clé `audited_artifacts`
|
||||
(byte-gaté par `check_artifacts` ⇒ reproduit à chaque build via
|
||||
`sorted(ARTIFACT_PATHS.values())` dans `audit_5d_gen.py:61` — le registre des hand-off
|
||||
que `qalib/artifacts.py::load_artifacts()` charge). Le README énumère les 5 chemins
|
||||
dans un **ORDRE DIFFÉRENT** du MANIFEST (workflow 2e ici, 3e au MANIFEST trié) ⇒
|
||||
comparaison par **ENSEMBLE**.
|
||||
|
||||
**Dérive silencieuse fermée** : brancher un nouveau livrable amont sur l'audit
|
||||
(nouvelle entrée `ARTIFACT_PATHS` → nouveau chemin dans `audited_artifacts`) ou en
|
||||
retirer un laisse la section README **périmée en silence** pendant que l'audit lit un
|
||||
autre jeu de fichiers ⇒ le lecteur/banquier croirait l'audit couvrir un **périmètre
|
||||
qu'il ne couvre plus** (l'invention #6 interdit), qu'aucune suite `tests/` (FONCTIONS
|
||||
de contrôle, pas la prose) n'attrape. **État courant** : les 5 puces == registre
|
||||
exactement (rien à réécrire · anti-invention #6), le défaut est la **surface ungated**.
|
||||
|
||||
**Gate ajouté** (`ci/check_readme_claims.sh`, nouveau bloc « Audit 5D (4e surface) ·
|
||||
IDENTITÉ des LIVRABLES AUDITÉS » entre le bloc des 5 dimensions et le bloc DevOps
|
||||
run-book) : on RECOMPUTE l'ensemble depuis `MANIFEST.audited_artifacts` (zéro
|
||||
duplication du registre) et on parse les puces `` - `<chemin>` `` de la section
|
||||
« ## Livrables audités » → égalité par ENSEMBLE exigée (absent ET fantôme mordus, via
|
||||
set-diff `absents`/`en trop`). **Cohérences croisées bonus** : **(a)** chaque chemin
|
||||
audité RÉSOUT un fichier commité sur disque (`os.path.exists` — le `_load` de l'auditeur
|
||||
lève `FileNotFoundError` sinon, audit à vide impossible) ; **(b)** |livrables audités|
|
||||
== |alias distincts d'artefacts référencés par les `controls[].artifacts` de
|
||||
`audit_spec.json`| (un artefact chargé mais jamais contrôlé, ou un alias contrôlé sans
|
||||
chemin de chargement → `KeyError` runtime, désynchronise). Section absente = échec
|
||||
(traçabilité #6). `import os` ajouté au bloc (non importé globalement).
|
||||
|
||||
**6 morsures vérifiées** (4 côté README · 2 côté source) :
|
||||
1. README puce `workflow.json` retirée → ✗ « absents=[…workflow.json] » ;
|
||||
2. README puce FANTÔME `demo/scenarios/out/run_sheet.json` ajoutée → ✗ « en trop
|
||||
(fantôme)=[…run_sheet.json] » ;
|
||||
3. README typo `commission_plan.json`→`commissions_plan.json` → ✗ absents ET fantôme ;
|
||||
4. README header de section renommé → ✗ « section « ## Livrables audités »
|
||||
INTROUVABLE/vide » ;
|
||||
5. `audit_spec.json` : alias `phantom_alias` ajouté à un contrôle → ✗ « désynchro
|
||||
registre/spec : 5 livrables MAIS 6 alias distincts contrôlés » (cross-anchor b) ;
|
||||
6. `MANIFEST.audited_artifacts` : un chemin pointé vers un fichier inexistant → ✗
|
||||
« INTROUVABLES sur disque » (cross-anchor a) + ✗ README périmé.
|
||||
Restauré = green : 5 puces == registre · 5 == 5 alias · 5 fichiers résolus · exit 0.
|
||||
Working tree byte-restauré via `git checkout -- <fichier précis>` (**JAMAIS**
|
||||
`git checkout .` / `git clean`, interdits absolus). **7 gates re-verts** :
|
||||
`validate_json` / `guard_constraints` / `check_docs` / `check_artifacts` /
|
||||
`check_regression` / `check_ci_integrity` / `check_readme_claims` (tous rc=0).
|
||||
|
||||
- `ci/README.md` mis à jour : clause de la row récap `check-readme-claims` (surface
|
||||
audit 5D étendue) + paragraphe détaillé « 4ᵉ surface du même README de l'audit 5D ».
|
||||
- **Hors périmètre worker (VPS · #8)** : néant (gate bash/python3 stdlib en-repo ;
|
||||
édition **hors** `05_deliverables_mvp/*/out` ⇒ 0 dérive d'artefact ; l'exécution
|
||||
réelle de l'audit `bench` reste côté VPS).
|
||||
- **Auto-score 4Big** : 96/100.
|
||||
|
||||
Reference in New Issue
Block a user