[DTP-Worker] Sprint 8 · buffer L75 · Gate intégrité câblage CI (ci/check_ci_integrity.sh) : gate.needs ⊇ tous jobs non-manuels + chaque ci/*.sh verrouillé au gate
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,5 +1,70 @@
|
||||
# Activity Log · 2026-07-31 · Claude Code DTP
|
||||
|
||||
## Session `20260731_005934` · Buffer S8 · Intégrité du câblage CI — le gate d'agrégat verrouille TOUS les jobs (gates statiques compris)
|
||||
|
||||
**Tâche** : **Sprint 8 · buffer L75 (« Regression tests exhaustifs » · DevOps
|
||||
CI/CD)**. Roadmap fonctionnellement close (21/21 modules à 100/100, 534 tests
|
||||
verts, **5** gates statiques tous verts au démarrage). Poursuite de la série
|
||||
anti-dérive (INV4, fraîcheur matrice, reproductibilité artefacts) : recherche d'un
|
||||
**trou de câblage réel** plutôt qu'un correctif cosmétique.
|
||||
|
||||
### Défaut trouvé — les gates STATIQUES n'étaient gardés par aucun invariant d'appartenance au gate
|
||||
|
||||
- **Constat** : le job `gate` (`needs: [...]`) est le **seul verrou de merge** — un
|
||||
check absent de son `needs:` ne bloque **rien**, même rouge. Les deux couvertures
|
||||
existantes (`audit_4big/registry.coverage_report`, `qa/regression/discovery.
|
||||
coverage_report`) prouvent l'appartenance au gate **uniquement** pour les jobs de
|
||||
**module** (ceux portant un `working-directory:` sous `05_deliverables_mvp`). Les
|
||||
**5 gates statiques** (`constraints-guard`/`validate-json`/`check-docs`/
|
||||
`check-artifacts`/`check-regression` → scripts `ci/*.sh`) **n'ont pas** de
|
||||
working-directory : **rien** ne garantissait qu'ils alimentent le gate. Retirer
|
||||
l'un d'eux de `needs:` (ou une **typo** dans la liste, ou un `ci/*.sh` **décâblé**)
|
||||
rendait le gate **vert en se court-circuitant** — même classe de dérive silencieuse
|
||||
que INV4 (orphan_tests_dirs), côté **câblage CI**.
|
||||
- **Fix** : nouveau gate `ci/check_ci_integrity.sh` (bash/awk/git, stdlib pur, zéro
|
||||
réseau) + job CI `check-ci-integrity`, lui-même ajouté à `gate.needs`. Deux
|
||||
invariants, lus par FAITS dans `ci.yml` (jamais une liste à la main) :
|
||||
- **INV-A** : `gate.needs` == { tous les jobs définis } − { `gate` } − { jobs
|
||||
**manuels** `if: … workflow_dispatch …`, ex. `e2e-baseline` légitimement hors du
|
||||
gate push/PR }. Détecte **MISSING** (job oublié → ne bloque pas), **DANGLING**
|
||||
(référence fantôme : typo / job supprimé) et **MANUAL-IN-GATE** (job manuel dans
|
||||
`needs` → gate en attente perpétuelle sur push).
|
||||
- **INV-B** : chaque `ci/*.sh` du dépôt est lancé par exactement un job
|
||||
(`run: bash ci/<script>`), lui-même dans `gate.needs` — un gate statique **non
|
||||
câblé** (script mort) ou **décâblé** casse le check.
|
||||
- **Preuve de morsure (5 modes, tous exit 1)** :
|
||||
- MISSING : `check-artifacts` retiré de `needs` ⇒ `✗ ABSENT de gate.needs` + `✗`
|
||||
INV-B sur `check_artifacts.sh` ;
|
||||
- DANGLING : `seo-tests`→`seo-testz` dans `needs` ⇒ `✗ référence 'seo-testz' non
|
||||
définie` + `✗ seo-tests ABSENT` ;
|
||||
- MANUAL-IN-GATE : `e2e-baseline` ajouté à `needs` ⇒ `✗ job manuel … gate en
|
||||
attente` ;
|
||||
- SCRIPT-MORT : `ci/check_phantom.sh` commité sans job ⇒ `✗ lancé par AUCUN job` ;
|
||||
- DÉCÂBLÉ : couvert par le mode MISSING (job hors `needs`).
|
||||
État nominal restauré ⇒ **exit 0** (`gate.needs = 28 jobs = 30 définis − 1 (gate)
|
||||
− 1 manuel [e2e-baseline]`).
|
||||
|
||||
**Non-régression** : le nouveau job est **statique** (aucun `working-directory`) →
|
||||
comme les 5 autres, il **n'entre pas** dans la matrice de régression ni le registre
|
||||
`audit_4big` (dérivés des seuls jobs de module). Totaux **534/21 inchangés**.
|
||||
Suites harnais **OK** : `qa/regression` (21 suites · 534), `qa/audit_4big` (21/21 ·
|
||||
min 100), `qa/acceptance` (bijectif=True). `ci.yml` YAML **valide**.
|
||||
|
||||
**Anti-invention (#6)** : rien inventé — le gate **relit** `ci.yml` et recalcule les
|
||||
ensembles à chaque run (aucun compteur figé).
|
||||
|
||||
**Vérifs** : **6 gates** statiques verts (`guard_constraints`/`validate_json`/
|
||||
`check_docs`/`check_artifacts`/`check_regression`/`check_ci_integrity`) ; doc
|
||||
`ci/README.md` mise à jour (tableau des jobs, section 2 détaillée, exécution locale,
|
||||
checklist « 6 gates »).
|
||||
|
||||
**Hors périmètre worker (VPS · #8)** : néant (stdlib en-repo ; enregistrement du
|
||||
runner Gitea toujours du ressort DevOps).
|
||||
|
||||
**Auto-score 4Big** : 96/100.
|
||||
|
||||
---
|
||||
|
||||
## Session `20260731_002924` · Buffer S8 · Intégrité de la matrice de régression (bug CI réel + invariant disque→CI)
|
||||
|
||||
**Tâche** : **Sprint 8 · buffer L75 (« Regression tests exhaustifs » · DevOps
|
||||
|
||||
Reference in New Issue
Block a user