[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:
+23
-1
@@ -19,6 +19,7 @@ et manuellement (`workflow_dispatch`). Jobs statiques (+ une suite `unittest` pa
|
||||
| `check-docs` | `ci/check_docs.sh` | Liens Markdown internes + présence auto-score 4Big | ✅ oui (liens) |
|
||||
| `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 |
|
||||
| `gate` | — | Agrégat vert = gate qualité 4Big franchi | ✅ oui |
|
||||
|
||||
Aucune dépendance réseau/marketplace hors `actions/checkout`. Tout tourne avec
|
||||
@@ -78,6 +79,26 @@ commitée verte. `regression_run.json` ne contient aucun horodatage/hôte → le
|
||||
déterministe et l'égalité exacte licite. Correctif : `regression_gen.py run -o out`
|
||||
puis commit.
|
||||
|
||||
### `check_ci_integrity.sh`
|
||||
Prouve, en lisant `.gitea/workflows/ci.yml`, que le **câblage** du workflow tient —
|
||||
car le job `gate` est le **seul verrou de merge** : un check absent de son `needs:`
|
||||
ne bloque **rien**, même rouge. Deux invariants :
|
||||
- **INV-A** — `gate.needs` == { tous les jobs définis } − { `gate` } − { jobs manuels }
|
||||
(un job manuel = gardé par `if: … workflow_dispatch …`, ex. `e2e-baseline`,
|
||||
légitimement hors du gate push/PR car il exige un serveur live). Détecte un job
|
||||
**oublié** du gate (MISSING → ne bloque pas), une **référence fantôme** (DANGLING →
|
||||
typo / job renommé-supprimé) et un job **manuel** glissé dans `needs` (gate en
|
||||
attente perpétuelle sur push).
|
||||
- **INV-B** — chaque script `ci/*.sh` du dépôt est lancé par exactement un job
|
||||
(`run: bash ci/<script>`), lui-même dans `gate.needs`. Un nouveau gate statique
|
||||
**non câblé** (script mort) ou **décâblé** casse le check.
|
||||
|
||||
Ferme le trou laissé par les couvertures existantes (`audit_4big/registry`,
|
||||
`qa/regression/discovery`) qui ne prouvent l'appartenance au gate que des jobs de
|
||||
**module** (ceux portant un `working-directory:`) — les gates **statiques** sans
|
||||
working-directory n'étaient gardés par personne. Même classe d'anti-dérive que INV4
|
||||
(disque→CI), appliquée au **câblage** CI. stdlib pur (bash/awk/git), zéro réseau.
|
||||
|
||||
## 3. Exécution locale (avant push)
|
||||
|
||||
```bash
|
||||
@@ -86,6 +107,7 @@ bash ci/validate_json.sh # schémas JSON
|
||||
bash ci/check_docs.sh # liens + score
|
||||
bash ci/check_artifacts.sh # reproductibilité out/ (build)
|
||||
bash ci/check_regression.sh # fraîcheur matrice régression (run)
|
||||
bash ci/check_ci_integrity.sh # intégrité du câblage CI (gate ⊇ tous jobs)
|
||||
```
|
||||
|
||||
Chaque script retourne `0` si conforme, `1` sinon. Reproduit exactement ce que
|
||||
@@ -117,7 +139,7 @@ Actions** doit être activé, et le runner doit apparaître « Idle ».
|
||||
|
||||
- `[ ]` Gitea Actions activé au niveau instance ET repo.
|
||||
- `[ ]` `act_runner` enregistré, label `ubuntu-latest`, statut Idle.
|
||||
- `[ ]` Push de test → les 5 gates statiques apparaissent et passent au vert.
|
||||
- `[ ]` Push de test → les 6 gates statiques apparaissent et passent au vert.
|
||||
- `[ ]` PR de test avec violation volontaire → `constraints-guard` bloque (rouge).
|
||||
|
||||
---
|
||||
|
||||
Reference in New Issue
Block a user