[DTP-Worker 20260802_150601] Sprint 8 · buffer · DevOps outillage : run_ci.sh — miroir LOCAL du gate CI dérivé de gate.needs (zéro liste en dur), reproduit les 30 jobs (7 gates ci/*.sh + 23 suites module) en une commande · anti-dérive par construction (suit ci.yml) · PAS un gate (#5), root ∉ ci/*.sh donc hors INV-B · parseur awk anti-commentaire · chemin d'échec prouvé (EXIT=1 + dump) · doc README + ci/README · 7/7 gates statiques verts

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Claude Code DTP Worker
2026-08-02 15:16:29 +00:00
parent 1c0cb8e973
commit 49123ecba3
4 changed files with 205 additions and 0 deletions
+53
View File
@@ -1,5 +1,58 @@
# Activity log · 2026-08-02 · Claude Code DTP Worker
## Sprint 8 · buffer · DevOps outillage — `run_ci.sh` : miroir LOCAL du gate CI, dérivé de `gate.needs` (zéro liste en dur · PAS un gate #5)
**Contexte — friction récurrente, pas une surface à gater.** Ouverture : arbre
propre, **7 gates statiques verts**, **30/30 jobs `gate.needs` verts** (7 gates
`ci/*.sh` + 23 suites de module · 564/564 tests), campagne de gates **saturée**
(mémoires *verify-uncovered* / *guard-flags-usage-not-mention* : les surfaces
restantes sont mono-sourcées ou déjà mordues). Ajouter un gate N+1 serait
redondant (#5). La vraie friction non-adressée est **opérationnelle** : chaque
session rejouait à la main une boucle ad-hoc `for g in guard_constraints … ; do
bash ci/$g.sh` (cf. logs des sessions précédentes « 7 gates re-joués »). Une
telle liste écrite à la main **dérive en silence** de ce que la CI enforce (un
gate ajouté/retiré dans `ci.yml` n'y est jamais répercuté) — même classe de
« vert trompeur » que les gates traquent, appliquée au **lanceur** lui-même.
**Livraison — `run_ci.sh` à la racine du dépôt.** Un lanceur de commodité qui
reproduit EN LOCAL, en une commande, l'intégralité du gate de merge :
- `bash run_ci.sh` → tout `gate.needs` (30 jobs) · `--static` → les 7 gates
`ci/*.sh` seuls (rapide) · `--list` → plan sans exécution.
- **Aucune liste en dur** : le script PARSE `gate.needs` de
`.gitea/workflows/ci.yml` (la source de vérité que `check_ci_integrity`
verrouille déjà) et exécute, par job, la commande `run:` déclarée dans son
`working-directory:`. Ajouter/retirer un gate en CI se répercute
**automatiquement**, zéro édition — anti-dérive par construction.
- Par périmètre `gate.needs`, exclut à dessein les jobs manuels
`workflow_dispatch` (`e2e-baseline`/`npm test`, qui exige Node) et le job
`gate`. → stdlib pur (bash/awk/git/python3), zéro pip, **zéro commande VPS**.
- Code de sortie **0 ssi tous les jobs passent** (même sémantique que le gate) ;
sur échec, dump des 12 dernières lignes du log fautif + liste des jobs rouges.
**Ce n'est PAS un gate** (aucun nouveau `ci/*.sh`, aucune nouvelle assertion) :
lanceur hors du glob `ci/*.sh`, donc **hors [INV-B]** de `check_ci_integrity` ;
son exactitude est **structurelle** (exécute ce que ci.yml déclare) et n'a pas à
être re-gatée (#5). Placé à la racine (pas dans `ci/`) précisément pour ne pas
déclencher INV-B qui exigerait de le câbler comme job.
**Robustesse prouvée.** Parseur awk **anti-commentaire** (un `working-directory:`
ou `bash ci/…` cité en COMMENTAIRE de ci.yml était capturé par une 1ʳᵉ version →
corrigé par `sub(/^[[:space:]]*#.*$/,"")`, cas réel sur le bloc `check-regression`).
Tests : `--list` = 30 jobs dans l'ordre de `gate.needs` (e2e-baseline/gate
correctement absents) ; `run_ci.sh` = **30 PASS / 0 FAIL** ; **chemin d'échec
vérifié** sur un dépôt-jouet synthétique (`bad-job` → FAIL rendu + dump `boom
detail` + **EXIT=1**) ; hors checkout git → EXIT 3 honnête.
**Doc.** Ligne de nav `README.md` + section « Rejouer le gate EN LOCAL » dans
`ci/README.md` (usage + garantie anti-dérive + rappel « pas un gate #5 »).
Chemins en backticks/liens Markdown vers cibles existantes (`check_docs` vert).
**Vérif finale.** `bash run_ci.sh --static` avec les nouveaux fichiers stagés →
**7 PASS / 0 FAIL** (guard_constraints · validate_json · check_docs ·
check_artifacts · check_regression · check_ci_integrity · check_readme_claims).
Aucun gate perturbé par l'ajout (root ∉ `ci/*.sh` ; nav sans chiffre ; liens
valides). Aucune commande touchant le VPS.
## Sprint 8 · buffer · Reporting stakeholder (canal 2) — rattrapage du snapshot `daily_reports/2026-08-02` sur les 4 sessions buffer intercalées depuis la clôture `120544` (2ᵉ addendum sourcé · ZÉRO gate ajouté #5)
**Nature — réconciliation de reporting, PAS un gate de plus (CLAUDE.md #5).**