[DTP-Worker] Sprint 8 · buffer L75 · Domaine QA/Recette : le couple « 8 livrables de sprint · 7 métriques succès MVP » du module d'acceptation (qa/acceptance) était transcrit À LA MAIN dans DEUX docs de module (README qa/acceptance/README.md l.8-9 + cellule fiche agent qa/AGENT.md l.27 « 8 livrables + 7 métriques ») sans AUCUN gate — le bloc racine de check_readme_claims ne recompute ce couple que pour le SEUL README d'entrée (« N promesses (X sprint + Y métriques) »), jamais pour ces deux docs de module qui en dérivent. L'artefact qa/acceptance/out/acceptance_matrix.json (byte-gaté par check_artifacts) porte une ligne par promesse roadmap de kind sprint_deliverable OU mvp_metric ; le roadmap-anchor (INV11) ancre les roadmap_line de l'ARTEFACT au fichier roadmap mais ne compare PAS la prose des docs. Ajouter une promesse roadmap → l'artefact rebâtit 9/7 pendant que les deux docs restent à 8/7 en silence (« vert trompeur » qu'aucune suite tests/, qui teste des FONCTIONS pas la prose, n'attrape) → nouveau bloc dans check_readme_claims recomputant CHAQUE nombre depuis SON PROPRE genre de la matrice (n_sprint/n_metric déjà dérivés · zéro duplication #5) et exigeant l'égalité avec les DEUX docs. Recomputer les DEUX (sprint ET métriques) mord une dérive de l'un là où l'autre resterait aveugle. Cohérence croisée en bonus : MANIFEST.counts.{sprint_deliverables,mvp_metrics} == le compte de la matrice qu'il résume — mord un compteur du manifeste désynchronisé de sa liste. Un claim absent échoue AUSSI (4 morsures vérifiées : dérive sprint README captée là où métriques reste 7 · dérive métriques README captée là où sprint reste 8 · dérive fiche QA captée là où le README est intact · claim fiche disparu = red ; restauré = green). État courant : aucun nombre périmé (8/7 recoupe la matrice · 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:
+16
-1
@@ -20,7 +20,7 @@ et manuellement (`workflow_dispatch`). Jobs statiques (+ une suite `unittest` pa
|
||||
| `check-artifacts` | `ci/check_artifacts.sh` | Reproductibilité : chaque `out/*.json` versionné == build frais | ✅ oui |
|
||||
| `check-regression` | `ci/check_regression.sh` | Fraîcheur : `qa/regression/out/regression_run.json` (`run`) == run frais + verdict PASS | ✅ oui |
|
||||
| `check-ci-integrity` | `ci/check_ci_integrity.sh` | Intégrité du câblage : `gate.needs` == tous les jobs non-manuels · chaque `ci/*.sh` câblé au gate | ✅ oui |
|
||||
| `check-readme-claims` | `ci/check_readme_claims.sh` | Intégrité des chiffres des docs d'entrée : chaque nombre de `README.md` « État courant », de la fiche QA « Verdict agrégé » **et** de la colonne « Tests » par suite des tables de fiches **et** des agrégats en prose (Total CRM / RBAC / e-CF) **et** des comptes par workspace des portails (cartes/liens/rôles, ×2 docs) **et** des comptes RBAC des 3 volets (table Nb rôles/profil, ligne agrégée apply_plan, ventilation userperm) **et** des comptes de mots-clés SEO (total + fr/en/es, ×2 docs) **et** du pipeline vente CRM (états/transitions, ×2 docs) **et** de l'app mobile Expo (onglets/rôles/langues/identifiants a_confirmer) **et** du DocType CONFOTUR (champs/données/sections/rôles/évènements de dépôt, ×2 docs) **et** de l'audit 5D (contrôles/dimensions ×2 docs + ventilation verdict pass/fail/à-confirmer) **et** du run-book de déploiement VPS (phases ×2 dans la fiche devops + confirmations préalables count & énumération dans le README) **et** du run-sheet de démo (nombre de modules cités dans le diagramme du README) **et** du montage Chat OTOIA par portail (`Custom Block`/configs runtime/portails, tous = 5 aujourd'hui, ×2 docs) == artefact cité (#6) | ✅ oui |
|
||||
| `check-readme-claims` | `ci/check_readme_claims.sh` | Intégrité des chiffres des docs d'entrée : chaque nombre de `README.md` « État courant », de la fiche QA « Verdict agrégé » **et** de la colonne « Tests » par suite des tables de fiches **et** des agrégats en prose (Total CRM / RBAC / e-CF) **et** des comptes par workspace des portails (cartes/liens/rôles, ×2 docs) **et** des comptes RBAC des 3 volets (table Nb rôles/profil, ligne agrégée apply_plan, ventilation userperm) **et** des comptes de mots-clés SEO (total + fr/en/es, ×2 docs) **et** du pipeline vente CRM (états/transitions, ×2 docs) **et** de l'app mobile Expo (onglets/rôles/langues/identifiants a_confirmer) **et** du DocType CONFOTUR (champs/données/sections/rôles/évènements de dépôt, ×2 docs) **et** de l'audit 5D (contrôles/dimensions ×2 docs + ventilation verdict pass/fail/à-confirmer) **et** du run-book de déploiement VPS (phases ×2 dans la fiche devops + confirmations préalables count & énumération dans le README) **et** du run-sheet de démo (nombre de modules cités dans le diagramme du README) **et** du montage Chat OTOIA par portail (`Custom Block`/configs runtime/portails, tous = 5 aujourd'hui, ×2 docs) **et** du module de recette `qa/acceptance` (couple livrables de sprint + métriques succès MVP, ×2 docs de module au-delà du README d'entrée) == artefact cité (#6) | ✅ oui |
|
||||
| `gate` | — | Agrégat vert = gate qualité 4Big franchi | ✅ oui |
|
||||
|
||||
Aucune dépendance réseau/marketplace hors `actions/checkout`. Tout tourne avec
|
||||
@@ -274,6 +274,21 @@ croisée : `custom_blocks` == `mounts` == `portails` == |`MANIFEST.portails`| (l
|
||||
bijection 1 block ⇔ 1 mount ⇔ 1 portail du générateur) — mord un compteur
|
||||
désynchronisé de sa propre liste.
|
||||
|
||||
Même classe enfin sur le **module de recette** (`qa/acceptance`) : le couple
|
||||
« **N livrables de sprint** + **M métriques succès MVP** » est transcrit **à la
|
||||
main** dans DEUX docs que le bloc racine ne couvre pas — le README du module
|
||||
(deux puces) ET la fiche agent QA (« (N livrables + M métriques) »). Le bloc
|
||||
racine ne gate que le SEUL README d'entrée (« N promesses (X sprint + Y
|
||||
métriques) ») ; ces deux docs de module en dérivent. Ajouter une promesse roadmap
|
||||
(l'artefact rebâtit 9/7) ferait dériver les deux docs en silence — piège que ni
|
||||
les suites `tests/` ni le **roadmap-anchor** (qui ancre les `roadmap_line` de
|
||||
l'ARTEFACT, pas la prose des docs) n'attrapent. Chaque nombre est recomputé depuis
|
||||
**son propre** genre de la matrice `qa/acceptance/out/acceptance_matrix.json`
|
||||
(`kind` `sprint_deliverable` / `mvp_metric`, byte-gatée par `check_artifacts`) et
|
||||
comparé aux deux docs. Cohérence croisée en bonus :
|
||||
`MANIFEST.counts.{sprint_deliverables,mvp_metrics}` == le compte de la matrice
|
||||
qu'il résume — mord un compteur du manifeste désynchronisé de sa liste.
|
||||
|
||||
Un claim **absent** échoue aussi (la dérive de formulation qui ferait
|
||||
disparaître un chiffre est elle-même une régression de traçabilité). stdlib pur
|
||||
(bash/git/python3), zéro réseau.
|
||||
|
||||
Reference in New Issue
Block a user