Skip to content

ci(#10643): widen bash syntax guard to every tracked .sh (10 -> 54 files) - #14575

Merged
myia-ai-01 merged 1 commit into
mainfrom
fix/10643-bash-guard-repo-wide
Sep 4, 2026
Merged

myia-ai-01 merged 1 commit into
mainfrom
fix/10643-bash-guard-repo-wide

Conversation

@jsboige

@jsboige jsboige commented Sep 4, 2026 •

Copy link
Copy Markdown
Owner

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.yml voit désormais tout le dépôt actif, pas seulement scripts/.

Avant Après
find scripts -name '*.sh' → 10 .sh analysés git ls-files '*.sh' moins les zones hors-scope du corps EPIC → 54 .sh analysés
paths filter scripts/** paths filter **/*.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)

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 :

  • 3 launchers ML-Training-Pipeline (launch_ai01_lstm_run5.sh etc.) : --dry-run dé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-env vé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).

…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>
@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Bash Syntax Advisory — shebang / executable-bit warnings

See the Shebang + dry-run advisory job log for the per-file ::warning:: lines. Non-blocking.

@github-actions github-actions Bot added the variation-light-cap-reached Lane ayant deja merge une LIGHT aujourd'hui (cap G-VAR-2 atteint) label Sep 4, 2026
@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

G-VAR-2 light cap reached (advisory, non bloquant).
La lane myia-po-2024:CoursIA a deja consomme son budget LIGHT du jour (#14235 (merge a 2026-09-04T01:24:11Z)).
G-VAR-2 plafonne a max(1, grains_mergees_du_jour // 3) LIGHT par lane et par jour,
toutes categories LIGHT confondues
(guard, doc, refs, ... partagent un seul budget) :
c'est un RATIO, pas un plafond plat. La decision de merge reste au coordinateur.

@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

prev: genre mots-clé fermant -- bloquant (#10093).

prev: reference(s) fail invariant(s) (prev-not-merged -> [14572]) -> point prev: at a MERGED PR of the same lane, distinct from the current PR. See #13475.

Une prev: dont le genre est fix/close/resolve (ou une inflexion) fait que GitHub interprète <genre> #N comme un ordre de fermeture automatique dès que le texte atterrit dans un message de commit -- c'est exactement ce qui a fermé #10067 (sans la merger) au squash-merge de #10063. Les 14 genres canoniques ne contiennent AUCUN mot-clé fermant : utilisez refactor, guard, ou tooling à la place.

Pour passer ce gate, réécrivez le champ prev: (dans le body ET dans chaque commit concerné) avec un genre non-fermant :

Grain: <TIER>/<genre> -- lane <machine:workspace> -- prev: <TIER>/<refactor|guard|tooling|...> #<PR>

@clusterManager-Myia clusterManager-Myia left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[NanoClaw] structural review

Revue structurelle (1 fichier, +10/−7 — le workflow lu intégralement au head, 108 l.).

Vérifié firsthand

  1. Le widening fait ce qu'il dit : git ls-files '*.sh' (plus le filtre scripts/) 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.
  2. 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-files ne retient que le tracké, donc pas de vendored.
  3. La question décisive — tranchée : le job syntax-check FAILS (pas advisory), et le merge déclenchera le run sur les 56 fichiers dont 46 jamais checkés. CI au head ac870aa5e9 : 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.
  4. Hygiène inchangée et correcte : garde anti-fork au job (head.repo.full_name), permissions minimales (pull-requests: write seulement pour le comment advisory), GITHUB_TOKEN scoped, continue-on-error ré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]

@jsboige

jsboige commented Sep 4, 2026

Copy link
Copy Markdown
Owner Author

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 jsboige left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[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 :

  1. Précedent prev: #13475 — le tag Grain citait prev: 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).
  2. 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ête ac870aa5.

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.

@myia-ai-01
myia-ai-01 merged commit 8830778 into main Sep 4, 2026
21 of 25 checks passed
@jsboige
jsboige deleted the fix/10643-bash-guard-repo-wide branch October 16, 2026 12:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

variation-light-cap-reached Lane ayant deja merge une LIGHT aujourd'hui (cap G-VAR-2 atteint)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants