#!/usr/bin/env bash # ============================================================================ # check_ci_integrity.sh · OTO Enterprise OS DTP # ---------------------------------------------------------------------------- # Intégrité du câblage du workflow CI Gitea (gate anti-dérive · Sprint 8 buffer). # # Le job d'agrégat `gate` est le SEUL verrou de merge : un check qui n'y figure # pas dans `needs:` ne bloque RIEN, même rouge. Les couvertures existantes # (audit_4big/registry, qa/regression/discovery) ne prouvent l'appartenance au # gate QUE pour les jobs de MODULE (ceux qui portent un `working-directory:` sous # 05_deliverables_mvp). Les 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:` rendait le gate vert en le court-circuitant — # même classe de dérive silencieuse que INV4 (orphan_tests_dirs), côté câblage CI. # # Ce gate prouve, par des FAITS lus dans ci.yml (jamais une liste à la main) : # [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). # → aucun job oublié du gate (MISSING) ni référence fantôme (DANGLING). # [INV-B] Chaque script `ci/*.sh` du dépôt est CÂBLÉ : soit lancé par un job # (`run: bash ci/