[DTP-Worker] Sprint 8 · buffer L75 · Domaine mobile : la ligne récap de l'app Expo (« 5 onglets · 44 rôles couverts · 3 langues · 13 identifiants a_confirmer ») était transcrite À LA MAIN dans le README du module mobile/app_config sans AUCUN gate — ajouter un rôle/portail au contrat RBAC, une langue au site ou un credential store ferait dériver le doc en silence pendant que mobile/app_config/out/MANIFEST.json (byte-gaté par check_artifacts, counts recomptés de rbac_50_roles + seo_spec + liste a_confirmer) dit autre chose → nouveau bloc dans check_readme_claims recomputant le quadruplet (onglets + roles_couverts + langues + identifiants_a_confirmer) depuis MANIFEST.counts et exigeant l'égalité (5 morsures vérifiées : dérive de chacun des 4 volets captée là où un seul nombre resterait aveugle · claim disparu = red)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1176,3 +1176,58 @@ les MANIFEST byte-gatés ; les comptes des READMEs **découlent** du contrat RBA
|
||||
**Hors périmètre worker (VPS · #8)** : néant (gate bash/python3 stdlib en-repo).
|
||||
|
||||
**Auto-score 4Big** : 96/100.
|
||||
|
||||
---
|
||||
|
||||
## Sprint 8 · buffer L75 · Gate claims mobile — récap app Expo non gatée (onglets/rôles/langues/identifiants)
|
||||
|
||||
### Diagnostic
|
||||
|
||||
- **Symptôme** : le générateur `mobile/app_config` émet `out/MANIFEST.json` dont
|
||||
`counts` porte **4 nombres** recomptés à chaque build depuis les sources faisant
|
||||
autorité — `rbac_50_roles.json` (portails métier + rôles → `onglets`,
|
||||
`roles_couverts`), `seo/seo_spec.json` (`langues`) et la liste `a_confirmer`
|
||||
(credentials EAS/App Store #32/Play Store jamais fabriqués · #6/#8 →
|
||||
`identifiants_a_confirmer`). Le `out/` est byte-gaté par `check_artifacts`
|
||||
(build frais == commité) ⇒ artefact faisant autorité.
|
||||
- **Contradiction latente** : la ligne récap du README du module
|
||||
(`05_deliverables_mvp/mobile/app_config/README.md` L66-67 — « **5 onglets** ·
|
||||
**44 rôles** couverts · **3 langues** · **13 identifiants `a_confirmer`** »)
|
||||
recopiait ce quadruplet **à la main**, sans **AUCUN** gate. Ajouter un
|
||||
rôle/portail au contrat RBAC, une langue au site, ou un credential store ferait
|
||||
dériver le doc en silence pendant que le MANIFEST (byte-gaté) dit autre chose —
|
||||
même classe de « vert trompeur » que les mots-clés SEO (total + fr/en/es), les
|
||||
triplets par workspace des portails, ou le pipeline vente CRM.
|
||||
- **État au démarrage** : les 4 nombres étaient **justes** (5/44/3/13 == MANIFEST)
|
||||
— le défaut est l'**absence de garde**, pas une valeur périmée.
|
||||
|
||||
### Fix (1 fichier gate + 1 doc CI · aucun chiffre à corriger)
|
||||
|
||||
- **`ci/check_readme_claims.sh`** — nouveau bloc Mobile recomputant le quadruplet
|
||||
`(onglets, roles_couverts, langues, identifiants_a_confirmer)` depuis
|
||||
`mobile/app_config/out/MANIFEST.json · counts` (zéro duplication du compteur du
|
||||
générateur · #6) et exigeant l'égalité avec ce que le README ÉCRIT. Recomputer
|
||||
**les 4** volets (et pas le seul total de rôles) mord une dérive de N'IMPORTE
|
||||
lequel là où un seul nombre resterait aveugle. Un claim absent échoue AUSSI
|
||||
(INTROUVABLE = régression de traçabilité).
|
||||
- **`ci/README.md`** — surface ajoutée à la table récap du pipeline + paragraphe
|
||||
descriptif (classe « app mobile Expo »).
|
||||
|
||||
### Preuve (4 morsures vérifiées + restauration verte)
|
||||
|
||||
| Injection | Résultat |
|
||||
|---|---|
|
||||
| onglets 5→6 | ✗ dit 6/44/3/13 MAIS MANIFEST 5/44/3/13 · exit 1 |
|
||||
| rôles 44→43 | ✗ dit 5/43/3/13 MAIS MANIFEST 5/44/3/13 · exit 1 |
|
||||
| langues 3→2 | ✗ dit 5/44/2/13 MAIS MANIFEST 5/44/3/13 · exit 1 |
|
||||
| identifiants 13→12 | ✗ dit 5/44/3/12 MAIS MANIFEST 5/44/3/13 · exit 1 |
|
||||
| claim supprimé | ✗ récap app INTROUVABLE · exit 1 |
|
||||
| restauré | ✓ 5/44/3/13 == MANIFEST · exit 0 |
|
||||
|
||||
Suite CI complète re-verte : `check_artifacts` · `check_readme_claims` ·
|
||||
`check_docs` · `check_regression` · `check_ci_integrity` (gates statiques
|
||||
verrouillés) · `guard_constraints`.
|
||||
|
||||
**Hors périmètre worker (VPS · #8)** : néant (gate bash/python3 stdlib en-repo).
|
||||
|
||||
**Auto-score 4Big** : 96/100.
|
||||
|
||||
Reference in New Issue
Block a user