[DTP-Worker] Sprint 8 · buffer L75 · Domaine DevOps : le run-book de déploiement VPS (devops/deploy_runbook) affichait « 7 phases » (fiche agent devops, ×2 transcriptions) et « 7 confirmations préalables » (README du module) — deux nombres data-derived transcrits À LA MAIN dans DEUX docs sans AUCUN gate, alors que devops/deploy_runbook/out/MANIFEST.json (byte-gaté par check_artifacts, counts.phases=len(graph.phase_order) · counts.confirmations=len(confirmations_ouvertes), recomptés à chaque build) fait autorité. Ajouter une phase au graphe OU une confirmation au catalogue ferait dériver les docs en silence — piège AVEUGLE : phases ET confirmations valent tous deux 7 aujourd'hui, un gate qui n'en recompterait qu'UN serait aveugle à la dérive de l'autre → nouveau bloc dans check_readme_claims recomputant CHAQUE nombre depuis SON PROPRE champ du MANIFEST et exigeant l'égalité avec les docs. Le « 22 » (suites gated de la fiche) volontairement écarté (sémantique suites CI ≠ counts.modules qui s'auto-exclut). Bonus : l'énumération snake_case des confirmations du README doit être l'ensemble EXACT de confirmations_ouvertes (mord l'échange 1↔1 d'un nom, aveugle au compte). Cohérences croisées counts.phases==|phase_order| · counts.confirmations==|confirmations_ouvertes| (5 morsures vérifiées : dérive phases 1re transcription · dérive 2e transcription captée là où la 1re resterait 7 · dérive confirmations count · swap d'un nom captée là où le count reste 7 · claim confirmations disparu = red)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
+15
-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) == 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) == 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
|
||||
@@ -233,6 +233,20 @@ contrôle en A_CONFIRMER (pass 13→12, à confirmer 4→5) là où le total de
|
||||
reste 17 et resterait aveugle. Cohérence croisée en bonus : `controls_total` du
|
||||
MANIFEST doit égaler `totals.controls` du rapport.
|
||||
|
||||
Même classe enfin sur le **run-book de déploiement VPS** (livrable
|
||||
`devops/deploy_runbook`) : le compte de **phases** (fiche agent `devops` — « graphe
|
||||
de **7 phases ordonnées** » **et** « exécute les 7 phases sur le VPS ») **et** le
|
||||
compte de **confirmations préalables** (README du module — « renseigner les 7
|
||||
confirmations ») transcrivaient **à la main** deux nombres qui, aujourd'hui, valent
|
||||
**tous deux 7** — un gate qui n'en recompterait qu'un serait **aveugle** à la dérive
|
||||
de l'autre. Chacun est recomputé depuis **son propre** champ de
|
||||
`devops/deploy_runbook/out/MANIFEST.json` (`counts.phases` = `len(graph.phase_order)` ·
|
||||
`counts.confirmations` = `len(confirmations_ouvertes)`, byte-gaté par
|
||||
`check_artifacts`) et comparé aux docs. Bonus anti-dérive : l'**énumération** des
|
||||
confirmations du README (les tokens `snake_case`) doit être l'ensemble **exact** de
|
||||
`confirmations_ouvertes` — mord l'**échange** d'un nom de confirmation là où le seul
|
||||
compte (reste 7) resterait aveugle.
|
||||
|
||||
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