Skip to content

fix(ci,#16936): markdown-table advisory — materialisation des cibles via git show (plus de sparse-checkout add sur des fichiers) - #17127

Closed
jsboige wants to merge 1 commit into
mainfrom
fix/md-table-guard-materialize
Closed

jsboige wants to merge 1 commit into
mainfrom
fix/md-table-guard-materialize

Conversation

@jsboige

@jsboige jsboige commented Sep 21, 2026

Copy link
Copy Markdown
Owner

Grain: LIGHT/guard -- lane myia-po-2023:CoursIA -- prev: LIGHT/tooling #17018

Panne mesuree

Le check Markdown table syntax advisory (label, non-blocking) echoue des qu'une PR modifie un simple fichier .md (mesure sur #16936, run 35552078192, git 2.43.0) :

Modified *.ipynb/*.md/README* in scope: 1
Positive control passed (whitespace filename fed to argv: 1 NO_SEP finding)
fatal: 'docs/reference/scripts-reference.md' is not a directory; to treat it as a directory anyway, rerun with --skip-checks
##[error]Process completed with exit code 128.

La ligne fautive est git sparse-checkout add --no-cone "${PATHS[@]}" — les PATHS sont des fichiers, or :

  1. Le mode sparse du runner reste CONE a l'execution. Le log du run ne montre aucun git config core.sparseCheckoutCone (le sparse-checkout-cone-mode: false du checkout n'est pas materialise cote git, alors que core.sparseCheckout true l'est) — et le defaut de git est cone, ou un FICHIER est refuse par construction.
  2. --no-cone n'est pas une option de add sur toutes les versions : rejetee en unknown option sur git < 2.44 (mesure locale), silencieusement inoperante ailleurs — le resultat depend donc de la version du runner.

Reproduction locale a l'identique (git du poste, repo cone) : fatal: 'docs/ref.md' is not a directory ... --skip-checks, RC 128.

Impact : faux rouge sur toute PR touchant un .md (advisory non bloquant, mais check rouge + label potentiellement non pose puisque la mesure avorte avant la decision de label).

Correctif

Materialiser les cibles du scan depuis la base d'objets — git show "HEAD:$p" — au lieu de demander au sparse-checkout d'inclure un fichier :

mapfile -d '' PATHS < changed.txt
for p in "${PATHS[@]}"; do
  mkdir -p "$(dirname "$p")"
  if git show "HEAD:$p" > "$p.materialize.$$" 2>/dev/null; then
    mv "$p.materialize.$$" "$p"
  else
    rm -f "$p.materialize.$$"
    echo "::warning::cannot materialize '$p' from HEAD"
  fi
done

Proprietes : independant du mode sparse (cone ou non) et de la version de git ; la boite a outils sparse posee par actions/checkout reste intacte ; seules les cibles du scan sont ecrites ; mapfile -d '' conserve les argv octets-exacts (noms a espaces, CR #16207) ; ecriture temp + mv (une redirection directe creerait un fichier VIDE quand git show echoue, que le scanner lirait comme legitime).

Preuves

  • Reproduction de la panne : repo cone local, git sparse-checkout add docs/ref.md -> fatal: ... is not a directory, RC 128 (message identique au run CI).
  • Preuve du correctif, meme repo cone : docs/ref.md materialise avec son contenu ; chemin a espaces et accents (docs/Correction Activités.md) materialise avec son contenu ; chemin absent -> WARN + aucun fichier vide ni temp residuel (branche d'echec verifiee).
  • Syntaxe : yaml.safe_load OK (bloc run de 187 lignes) ; bash -n sur le bloc extrait OK.
  • Commentaires d'en-tete du workflow mis a jour (les deux endroits qui decrivaient l'ancien mecanisme).

See #16936

🤖 Generated with Claude Code

…via git show, plus de sparse-checkout add sur des fichiers

Panne mesuree (run 35552078192, git 2.43) : des qu'une PR modifie un simple
.md, 'git sparse-checkout add --no-cone <file>' rend 'fatal: ... is not a
directory', exit 128 -- le mode sparse du runner reste CONE a l'execution
(aucun core.sparseCheckoutCone dans le log) et --no-cone n'est pas une option
de add sur toutes les versions. Reproduit localement a l'identique.
Materialisation depuis la base d'objets (git show HEAD:<path>, temp+mv) :
independante du mode sparse et de la version ; prouvee en cone mode localement
(fichier a espaces/accents compris, branche d'echec sans fichier vide).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@github-actions github-actions Bot added variation-tag-missing PR sans tag Grain: <TIER>/<GENRE> (variation-protocol) trivial-diff-advisory Diff trivial : grain META mecanique sans fournee ni exception ecrite (#15740) labels Sep 21, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Trivial-diff advisory (#15740, non bloquant).
genre guard dans la famille META (docs/guard/ledger/readme/test) + diff de 42 lignes changees (<= 100) + aucune exception ecrite dans le body : le litmus de la trivialite (une douzaine d'instances scannees a la suite) est credible. Le verdict est ADVISORY -- fournir une fournée ou citer une exception de la forme #15719 l'eteint.
La demande : une fournee (le geste pourrait comprendre ~10x plus d'instances), OU une exception ecrite dans le body de la forme « exception seulement residu final mesure » (#15719). Editer le body re-deroule cet organe et retire le label.

@github-actions

Copy link
Copy Markdown
Contributor

Grain tag obligatoire (#10045, bloquant).

Grain tag absent (no Grain: / in body).

Pour passer ce gate, le body doit porter en tete une ligne de la forme :

Grain: <DEEP|MED|LIGHT>/<genre> -- lane <machine:workspace> -- prev: <TIER>/<GENRE> #<PR>

Le <genre> doit figurer dans l'enumeration §1 de variation-protocol.md (lean, qc, training, genai, notebook-python, notebook-dotnet, notebook-lean, slides, docs, guard, refactor, ledger, readme, test, tooling, research-code). Les 3 formes tolerées par l'extracteur : Grain: TIER/GENRE, **Grain:** TIER/GENRE, ## Grain + tag sur la ligne suivante. La lane doit suivre le format <machine>:<workspace> (cf. lane-claim-protocol.md).

@github-actions github-actions Bot removed the variation-tag-missing PR sans tag Grain: <TIER>/<GENRE> (variation-protocol) label Sep 21, 2026
@github-actions

github-actions Bot commented Sep 21, 2026 •

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #17127 (fix(ci,#16936): markdown-table advisory — materialisation des cibles via git show (plus de sparse-checkout add sur des fichiers)) touche au moins un chemin de fichier aussi modifie par d'autres PRs ouvertes. Risque de double-livraison (meme fichier livre deux fois, 2x le travail et 2x les runs CI). Advisory : parfois legitime (tranches coordonnees, partition paths: explicite, PRs empilees exclues) -- l'organe rend visible, il ne bloque pas.

Le verdict terminal (#15578) signale qu'un cote de la paire est deja sur main. L'organe mesure un recouvrement de chemins ; il ne compare pas le contenu des deux livraisons, donc il ne conclut PAS a une redondance (#15768) : deux PRs peuvent toucher le meme fichier pour des raisons disjointes. L'arbitrage reste a la lane ou au coordinateur.

@jsboige

jsboige commented Sep 21, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2025:CoursIA-2
pr: 17127
head: e1d297f
complete: true
body: read
comments-reviewed: 3
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 01f70015cdd65a978b2d0b771f5c808972d993aab97a40fb56bd22a1f43dfc46
diff-files: 1
diff-additions: 34
diff-deletions: 8
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
[/ADJOINT PREFLIGHT]

@jsboige

jsboige commented Sep 22, 2026

Copy link
Copy Markdown
Owner Author

Motif BLOCKED : GitHub REST rend mergeable: false, mergeable_state: dirty au head exact e1d297ff464e9b79defe1f71ab7eba54673bee09. Tous les check-runs vivants dédupliqués par (started_at, id) sont verts ou skipped ; B.0 est clair. Action porteuse : résoudre le conflit avec main, puis ré-attestation exact-head.

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2025:CoursIA-2
pr: 17127
head: e1d297f
complete: true
body: read
comments-reviewed: 4
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: a7e69cc9fb3507e554b19013ac65ea1eca8c9167d0f01d128c7c3be3a47b2d87
diff-files: 1
diff-additions: 34
diff-deletions: 8
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: BLOCKED
[/ADJOINT PREFLIGHT]

@myia-po-2023

Copy link
Copy Markdown
Collaborator

Superseedee par #17308 (merge) : le rebase sur main resout les trois zones de conflit en prenant le cote main -- la materialisation set --no-cone --stdin y fixe le meme crash 128 mesure (#16936 run 35552078192) que cette branche traitait via git show HEAD:<path>. Apres resolution, git diff origin/main est VIDE (commit droppe par le rebase) : plus aucune delta. Les deux approches resolvaient la meme panne ; celle du main est deployee et testee live. Fermeture (PR de ma lane) plutot que push d'une branche vide.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

trivial-diff-advisory Diff trivial : grain META mecanique sans fournee ni exception ecrite (#15740)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants