Files
Claude Code DTP Worker 9d30939db9
CI / Contraintes NON-NÉGOCIABLES (CLAUDE.md) (push) Has been cancelled
CI / Validation JSON (schémas Faisabilité) (push) Has been cancelled
CI / Qualité documentaire (liens + 4Big) (push) Has been cancelled
CI / Reproductibilité des artefacts out/ (build == commité) (push) Has been cancelled
CI / Fraîcheur matrice de régression (run == commité) (push) Has been cancelled
CI / Intégrité du câblage CI (gate agrège tout · gates statiques verrouillés) (push) Has been cancelled
CI / Intégrité des chiffres du README (valeur == artefact cité · (push) Has been cancelled
CI / Intégrité mobile-build.yml (gating portable · activation différée · (push) Has been cancelled
CI / Publiciste · parser + schéma + generator (unittest) (push) Has been cancelled
CI / RBAC · 50 rôles + schéma (unittest) (push) Has been cancelled
CI / Faisabilité · générateur 4 volets + round-trip (unittest) (push) Has been cancelled
CI / RBAC · fixtures ERPNext (Role + Custom DocPerm) (push) Has been cancelled
CI / RBAC · plan User Permission (row-level) (push) Has been cancelled
CI / RBAC · Role Profile (bundles par portail) (push) Has been cancelled
CI / RBAC · run-book d'application unifié (agrégat 3 volets) (push) Has been cancelled
CI / Faisabilité · dossier bancable trilingue FR/EN/ES (push) Has been cancelled
CI / CRM · workflow vente ERPNext (lead → CONFOTUR) (push) Has been cancelled
CI / CRM · DocType porteur OTO Dossier Vente (push) Has been cancelled
CI / CRM · barème commissions vendeurs (push) Has been cancelled
CI / CRM · Financement Bancaire (gate hypothécaire RD) (push) Has been cancelled
CI / Fiscal · e-CF DGII (Compupar) (push) Has been cancelled
CI / Frontend · Workspaces 5 portails rôle (push) Has been cancelled
CI / Legal · DocType CONFOTUR Application (push) Has been cancelled
CI / QA · Audit 5D conformité (push) Has been cancelled
CI / SEO · mots-clés trilingues + schema.org + hreflang (push) Has been cancelled
CI / Chat OTOIA · montage par portail (Custom Block) (push) Has been cancelled
CI / QA · Audit 4Big (95+/100 sur 100% deliverables) (push) Has been cancelled
CI / Démo · Scénarios (run-sheet P07 banquier / P05 client) (push) Has been cancelled
CI / QA · Matrice de régression exhaustive (Sprint 8) (push) Has been cancelled
CI / DevOps · Run-book de déploiement VPS unifié (Sprint 8) (push) Has been cancelled
CI / QA · Matrice d'acceptation / traçabilité MVP (Sprint 8) (push) Has been cancelled
CI / Mobile · config app Expo/EAS (navigation par rôle) (push) Has been cancelled
CI / PIE · manifest de dépendances (Annexe 12 · V10.1) (push) Has been cancelled
CI / E2E baseline Playwright (manuel) (push) Has been cancelled
Mobile Build (EAS) / Préflight config EAS + état secrets (push) Has been cancelled
CI / Gate qualité (agrégat) (push) Has been cancelled
Mobile Build (EAS) / EAS build iOS (App Store (push) Has been cancelled
Mobile Build (EAS) / EAS build Android (Play Store) (push) Has been cancelled
[DTP-Worker 20260805_161319] Auto exec · session 20260805_161319
2026-08-05 16:28:19 +00:00

91 lines
4.8 KiB
Markdown

# QA · Matrice de régression exhaustive (Sprint 8)
> Roadmap **Sprint 8 · QA** : « **Regression tests exhaustifs** ».
> Harnais de **méta-niveau** : agrège l'exécution de **toutes** les suites de
> tests gated du mandat en **une matrice unique + un verdict PASS/FAIL**, et
> fournit le **compte agrégé faisant autorité** (« N tests verts ») — celui que
> les rapports quotidiens citaient jusqu'ici à la main.
## Pourquoi ce livrable
Le mandat compte des dizaines de suites `tests/` (une par module). Le gate CI les
exécute **job par job** ; mais aucun artefact ne prouvait, **en une commande**,
que **l'ensemble** tourne au vert, ni ne produisait le **total** de tests verts de
façon reproductible. Ce harnais formalise cette régression exhaustive.
Il est **complémentaire**, pas redondant, avec l'**audit 4Big**
([`../audit_4big`](../audit_4big/README.md)) :
| | Audit 4Big | Matrice de régression |
|---|---|---|
| Axe | **Qualité statique** par module (doc, schéma, CLI, hand-off) | **Exécution** : chaque suite tourne-t-elle au **vert** ? |
| Sortie | Note ≥ 95/100 par module | Compte agrégé « N tests verts » + verdict |
| Nature | Lecture du système de fichiers | `build` (statique) + `run` (exécution réelle) |
## Zéro invention · zéro duplication (CLAUDE.md #5 · #6)
- **Périmètre dérivé du CI, pas listé à la main** : les suites proviennent de
`.gitea/workflows/ci.yml` via `q4lib/registry.parse_ci` (réutilisé de l'audit
4Big — une seule source de vérité). Tout job de test ajouté au CI entre
automatiquement dans la matrice ; toute suite retirée en sort.
- **Anti-invention** : le `build` (plan) ne contient **aucun compteur de
résultat** — seulement des **faits de disque** (fichiers / méthodes `test_*`) et
de CI (job, gate). Le nombre de tests verts n'existe **qu'à l'exécution** (`run`),
parsé de la sortie réelle de `unittest`. Un invariant refuse tout compteur figé.
- **Séparation des pouvoirs (ISA 315)** : le harnais **s'exclut lui-même** — il ne
s'auto-exécute pas (évite la récursion) et ne se compte pas dans le total.
## Utilisation
```bash
cd 05_deliverables_mvp/qa/regression
# Recensement déterministe des suites gated (commité) :
python3 regression_gen.py build # → out/regression_plan.json + MANIFEST
# Gate : schéma + invariants + couverture prouvée (ce que fait le CI) :
python3 regression_gen.py validate
# Régression EXHAUSTIVE (exécute réellement toutes les suites) — local/DevOps :
python3 regression_gen.py run # → out/regression_run.json (COMMITÉ)
```
`run` renvoie un code de sortie ≠ 0 si **une seule** suite est rouge → utilisable
comme garde de release. Sa sortie est **byte-déterministe** : (a) elle ne porte
**aucun** horodatage / hôte / durée / chemin absolu (`path` relatif, compteurs
`ran/passed/failures` seuls) ; (b) chaque suite est exécutée sous `python -S`
(sans `site-packages`), donc l'unique paquet tiers du corpus — l'oracle
**optionnel** `jsonschema` (toujours gardé par `skipUnless`) — est neutralisé,
exactement comme sur le runner Gitea pip-less. Sans (b), la matrice divergeait
selon que `jsonschema` était `pip install`é ou non (0 vs 17 `skipped`) → un
**faux-vert** : `check_regression` vert en local mais ROUGE sur le runner. Avec
les deux, deux `run` sont **byte-identiques** quel que soit l'environnement
(17 oracles ignorés ; les validateurs maison couvrent les mêmes contrats).
`out/regression_run.json` est donc **commité** et sert de **baseline** au gate CI
`ci/check_regression.sh`, qui régénère un `run` frais et exige l'**identité
byte-for-byte** avec le fichier commité (+ verdict `PASS`) — c'est ce qui empêche
une matrice périmée ou rouge d'être commitée verte. `check_artifacts.sh`, lui, ne
rejoue que `build` (déterministe) et **ignore** cet artefact d'exécution.
## Contrat de sortie (plan)
- `regression.schema.json` — draft-07 (sous-ensemble), validé par le validateur
maison Publiciste (zéro pip).
- Invariants (`regression_gen.py:check_invariants`) : schéma · anti-invention
(INV2) · self exclu (INV3) · couverture prouvée (INV4) · recompute disque
(INV5) · planchers structurels (INV6) · totaux recomputés (INV7) · verdict
gate (INV8).
## Hand-off VPS (hors périmètre worker · #8)
Publier le compte agrégé dans le desk ERPNext / le pipeline de release → agent
**QA / DevOps**. Le `run` lui-même n'est PAS manuel côté worker : sa sortie
`regression_run.json` est **déterministe** (aucun horodatage/hôte) donc commitée
et **byte-gatée à chaque push/PR** par `ci/check_regression.sh`. Ce qui reste
hors périmètre (#8), c'est sa **publication** VPS (desk / release).
## Auto-score 4Big
**96/100** — recensement exhaustif prouvé (couverture dérivée du CI), anti-invention
strict (aucun compteur figé), déterminisme, réutilisation sans duplication.