[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:
@@ -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).**
|
||||
|
||||
Reference in New Issue
Block a user