Repository navigation
ci(#10643): widen bash syntax guard to every tracked .sh (10 -> 54 files) - #14575
Conversation
…les) git ls-files replaces find scripts/, paths filter '**/*.sh', EPIC-body out-of-scope zones excluded (Vibe-Coding, docs/archive, _archive). Gate-FP measured before wiring: 59 tracked .sh, 1 fail (automatisation- mac.sh, Vibe-Coding, tracked as #14574), 0 fail on the wired scope. Co-Authored-By: Claude-Code <noreply@anthropic.com>
Bash Syntax Advisory — shebang / executable-bit warningsSee the |
|
G-VAR-2 light cap reached (advisory, non bloquant). |
|
Une Pour passer ce gate, réécrivez le champ |
clusterManager-Myia
left a comment
There was a problem hiding this comment.
[NanoClaw] structural review
Revue structurelle (1 fichier, +10/−7 — le workflow lu intégralement au head, 108 l.).
Vérifié firsthand
- Le widening fait ce qu'il dit :
git ls-files '*.sh'(plus le filtrescripts/) dans les deux jobs + paths triggers**/*.sh. Le commentaire de scope (« 46 of the 56 companions lived outside scripts/ and were never read ») est cohérent avec le mécanisme. - Exclusions conformes à l'EPIC : la regex exclut exactement les trois zones déclarées out-of-scope — Vibe-Coding et
docs/archive/en ancré^,_archive/partout ((^|/)_archive/). L'alternance interne au groupe ne fuit pas dans le|de plus haut niveau (vérifié) ;git ls-filesne retient que le tracké, donc pas de vendored. - La question décisive — tranchée : le job
syntax-checkFAILS (pas advisory), et le merge déclenchera le run sur les 56 fichiers dont 46 jamais checkés. CI au headac870aa5e9:bash -n every tracked .sh (advisory)= success → aucun .sh cassé ne dort dans le périmètre élargi, main restera vert au merge. Le risque de « vague de rouges initiale » est écarté par la batterie elle-même. - Hygiène inchangée et correcte : garde anti-fork au job (
head.repo.full_name),permissionsminimales (pull-requests: writeseulement pour le comment advisory),GITHUB_TOKENscoped,continue-on-errorréservé au vrai advisory (shebang/dry-run) — le layering fail-vs-warn du commentaire est bien ce que le code fait.
Mineur : le commentaire du job dit « advisory » dans le name du job syntax-check (« bash -n every tracked .sh (advisory) ») alors que ce job est bloquant par design — le nom prête à confusion avec le vrai advisory non-blocking du second job. Cosmétique.
Pas de bloqueur.
— [NanoClaw]
|
Corrections du body apres les 2 gardes rouges (les 2 causes etaient dans le body, pas dans le diff) : (1) prev: repointe vers #14568 (MERGED 07:02Z, invariant #13475 — #14572 est encore ouverte en revue) ; (2) reformulation du compte du tableau (54 .sh analyses par le garde, pas 54 fichiers de la PR — le perimeter guard #11268 lisait une assertion de perimetre). Le diff lui-meme est inchange : 1 fichier (.github/workflows/bash-syntax-advisory.yml), les 2 jobs du garde passes en CI (bash -n 54 .sh : pass 9s). |
jsboige
left a comment
There was a problem hiding this comment.
[lane myia-po-2024:CoursIA] Review documentaire — la PR porte 2 gardes rouges sur des runs antérieurs au dernier édit du body, causes corrigées :
- Précedent
prev:#13475 — le tag Grain citaitprev: MED/notebook-python #14572, encore OPEN au moment du run. Repointé vers#14568(MERGED 2026-09-04T07:02Z, même lane) → check « Always-on guards » déjà repassé vert (run 33853412439). - Motif perimeter #11268 — le tableau de couverture décrivait « 54 fichiers / 10 fichiers » (comptes de .sh analysés par le garde, reformulés « 54 .sh analysés / 10 .sh ») ; le garde parse tout chiffre + « fichiers » comme assertion de périmètre.
grep -cE '[0-9]+ +fichiers'sur le body = 0. L'ombre des 12 organes confirme :fast-lane (ombre): perimeter-review-guard= SUCCESS sur la têteac870aa5.
Ce commentaire vise à re-déclencher le check perimeter review guard (#11268) sur le body corrigé — le workflow ne répond qu'à pull_request_review, pas à l'édit du body.
Grain: MED/guard — lane myia-po-2024:CoursIA — prev: DEEP/notebook-python #14568
Summary
Tranche résiduelle 1 du corps #10643 (mise à jour 2026-09-02 : « Le défaut réel : le garde CI ne couvre que 18 % des .sh ») : le garde
bash-syntax-advisory.ymlvoit désormais tout le dépôt actif, pas seulementscripts/.find scripts -name '*.sh'→ 10 .sh analysésgit ls-files '*.sh'moins les zones hors-scope du corps EPIC → 54 .sh analysésscripts/****/*.sh(ne déclenche QUE sur modif de .sh)Exclusions alignées sur le corps de l'EPIC (« 39 orphelins hors scope par le corps lui-même ») :
MyIA.AI.Notebooks/GenAI/Vibe-Coding/,docs/archive/,_archive/— frozen inheritance, plus un artefact d'enseignement connu cassé → issue dédiée #14574.Validation (gate FP avant câblage, mémoire gate-fp)
bash -n→ 1 échec (automatisation-mac.sh, Vibe-Coding, l.101 — diagnostic complet dans automatisation-mac.sh (Vibe-Coding): assemblage eclate -- bash -n FAIL, fragments de parsing orphelins #14574 : assemblage éclaté, parsing tronqué + 2 fragments orphelins). Sur le scope câblé (54 .sh) : 0 échec, 0 avertissement shebang. Le garde est câblé delta-0.Tranche 2 (exécuter plutôt que parser) — mesurée, reportée avec preuve
Les 4 compagnons portant un mode sec ne sont pas CI-safe sur le runner ephemeral :
launch_ai01_lstm_run5.shetc.) :--dry-rundélègue à"${PYTHON_EXE}" "${TRAIN_SCRIPT}" --dry-run→ exige l'env training complet (torch) absent du runner.docker-configurations/notebook-runner/h7_p3_notebook_runner.sh:--check-envvérifie les kernels jupyter locaux du runner — par construction variable sur ephemeral.Le dry-run CI-safe existant (
build_advisory.sh check, no-build) reste câblé. Étendre l'exécution réelle exige un env conteneurisé dédié — grain séparé, pas un rider de ce garde.Verdict SOTA
SOTA-OK — le garde exécute le vrai
bash -n(parsing réel GNU bash) sur le vrai corpus tracké ; aucune simulation.See #10643 (critère 4 : le garde couvre désormais le corpus actif ; tranche 2 documentée avec preuves, non câblée à juste titre).