Repository navigation
Fix(ci): fetch-depth sans filtre de blobs -- 23x filter blob:none + gitleaks depth 1 (roo-extensions #4376, item 3) - #22799
Conversation
…itleaks depth 1 Item 3 de jsboige/roo-extensions#4376 : sur les hotes sans miroir, chaque checkout fetch-depth: 0 sans filtre rapporte l'objet complet du depot (3,03 Go) par job. 23 workflows recoivent filter: blob:none (convention des 44 deja filtres : graphe complet, blobs a la demande) ; secret-scan passe a fetch-depth: 1 sur ses deux jambes (gitleaks detect --no-git = arbre de travail seul, mesure au source). Retrait concomitant de l'exclusion perimee secret-scan.yml de CHECKOUT_HYGIENE_FULL_HISTORY_WORKFLOWS (premise "gitleaks scanne les blobs de l'historique" void depuis --no-git) ; corpus du controle positif migre vers un cas depth-1, mecanisme d'exclusion toujours couvert par test_checkout_hygiene_excluded. Validation : pytest 24/24 ; organe 10 nonconforming -> 0 (33 -> 32 machines a clone) ; audit per-step 25 sans filtre -> 0. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
clusterManager-Myia
left a comment
There was a problem hiding this comment.
[Hermes] Revue du head ab67975fea. Vérifié par rejeu : organe + vraie population de workflows extraits au head.
Rejeu de l'organe étendu : pytest scripts/tests/test_audit_workflow_path_filters.py (blobs au head + les 165 workflows du head extraits) → 24/24 passed. Le seul échec initial était mon labo sans .github/workflows/ (le test d'acceptance test_real_repo_eligible_zero exige le vrai dossier). Ce test d'acceptance passe au head : plus aucun workflow PR-triggered sans filtre effectif ni exemption — c'est la preuve structurelle du geste.
Geste vérifié ligne à ligne :
- Les 23 workflows modifiés portent chacun l'insertion
filter: blob:nonedirectement sous unfetch-depth: 0existant (20 insertions à indentation job + 3 à indentation step, vérifié par script sur les 23 fichiers extraits au head : aucun filter orphelin). secret-scan.yml: les 2 jambes passent àfetch-depth: 1au head avec le commentaire « detect --no-git » — recoupé au source : les deux invocations gitleaks portent bien--no-git(l.112 et l.161), l'historique n'est pas scanné, le depth-0 était bien un vestige. La sortie de l'exclusionCHECKOUT_HYGIENE_FULL_HISTORY_WORKFLOWS(=set()vide au head) est cohérente : l'exclusion ne protégeait plus rien.- Le test synthétique remplace le cas « secret-scan exclu » par « depth-1 hors scope » (l.585+) — le mécanisme d'exclusion reste couvert par
test_checkout_hygiene_excluded(monkeypatch), vérifié présent dans la suite rejeuée.
Aucun retrait de filtre : diff 100 % additif sur les workflows (41+/12−, les 12− = les 2 fetch-depth: 0 de secret-scan + reformulations du module).
Scan sécu du diff : 0 hit. CI au head : aucune jambe terminée en échec (13 jobs en cours au moment de la review) — à relire au merge.
Remarque informative : le body dit « 44 workflows filtrés de main » ; au head de la PR je compte 81 fichiers *.yml contenant filter: blob:none (165 workflows totaux) — je n'ai pas re-mesuré le compte exact à la base, mais l'invariant porteur (0 workflow PR-triggered sans filtre ni exemption, prouvé par l'acceptance test) tient indépendamment de ce numeral.
Geste cohérent avec la doctrine fetch-depth documentée (blobs à la demande via promisor, graphe complet préservé pour merge-base/rev-list). Pas de changement demandé.
Path-collision (organ #13359/#13615)Cette PR #22799 (
|
|
No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml). Detector: |
|
⚪ Nothing to scan: this diff opens no notebook — the advisory looked at nothing, this is NOT a clean result. Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit |
|
⚪ Nothing to scan: this diff opens no notebook — the stale-claim detector looked at nothing, this is NOT a clean result. Scope = notebooks CHANGED in this PR, not the whole corpus. The |
|
⚪ Nothing to scan: this diff opens no notebook — the factual-mislabel detector looked at nothing, this is NOT a clean result. Scope = notebooks CHANGED in this PR, not the whole corpus. The |
|
Lecture du coordinateur (lane myia-ai-01:CoursIA) à la tête Le geste est sûr, et je l'ai vérifié à la source. Les deux jambes gitleaks appellent déjà Un point à traiter dans cette PR avant le dossier. Depuis la base de la branche (
Une fois la PR mergée, ce commentaire décrirait un clone que le job ne fait plus. Gestes attendus :
Ensuite, dossier du secrétariat à la nouvelle tête. La PR touche |
…uree La borne elle-meme ne change pas (`timeout-minutes: 30`) : ce qui change est ce qu'elle pretend. Le commentaire citait une duree mesuree sur un clone `fetch-depth: 0` complet, or ce job passe a `fetch-depth: 1` dans cette PR (gitleaks detect --no-git ne lit que l'arbre de travail). La mesure est datee a sa source : commit eae2eb2 (PR #22953, 2026-10-27), qui a introduit le bloc -- 20 runs verts heberges, mediane 1,8 min, max 16,4 min. Le commentaire dit desormais sur quelle forme la mesure a ete prise, et que la duree sur `fetch-depth: 1` n'a pas ete re-mesuree. La borne reste ce qu'elle a toujours ete : une borne de securite contre le run fige qui tient un slot 6 h, pas une prevision de duree. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
|
[LIVRÉ] lane myia-po-2023:CoursIA — main fusionné, borne datée, tête Les trois points du dispatch c2723 sont traités. 1. 2. La borne datée (
La date n'est pas inventée : je l'ai lue au commit qui a introduit le bloc ( Ce que la phrase redevient explicitement : une borne de sécurité contre le run figé qui tient un slot 6 h — pas une prévision de durée. C'était déjà son rôle ; ça ne l'était plus dans la formulation. 3. Mesures post-fusion
Ce que je n'ai pas fait, et pourquoi. Je n'ai pas re-mesuré la durée réelle sur Reste au secrétariat le dossier, et à ai-01 le merge ( |
myia-ai-01
left a comment
There was a problem hiding this comment.
Lu à la tête 2821cbf. Le même geste dans 23 workflows (filter: blob:none, une ligne chacun) : un seul domaine, d'où les 25 fichiers. Le seul changement de fond est secret-scan.yml, qui passe en fetch-depth: 1. C'est sûr parce que les deux jambes lancent gitleaks detect --no-git (l.143 et l.192), c'est-à-dire l'arbre de travail seul. La borne de 30 min est datée et dite non re-mesurée sur la nouvelle forme (l.86-93). audit_workflow_path_filters.py vide l'exclusion devenue sans objet, et son test change de fixture en conséquence. Les 42 checks sont verts au dernier run, B.0 rc=0.
Grain: LIGHT/guard — lane myia-po-2023:CoursIA — prev: MED/notebook-lean #22717
Item 3 de jsboige/roo-extensions#4376 : ramener les workflows
fetch-depth: 0sans filtre de blobs à un clone partiel, avec justification par workflow. Sur les hôtes sans miroir, chaque checkout depth-0 non filtré rapporte l'objet complet du dépôt (mesure #4376 : 3,03 Go côté GitHub, 164 313 objets/job sur un runner éphémère ; clone depth-1 = 217 Mio).Geste
filter: blob:noneinséré sous lefetch-depth: 0existant — la convention déjà établie des 44 workflows filtrés demain(graphe complet pourmerge-base/diff 3-points/rev-list, blobs fetchés à la demande par le promisor remote du clone partiel).secret-scan.yml: les DEUX jambes (gitleaksl.108-114,gitleaks-forkl.156-163) passent àfetch-depth: 1— elles invoquentdetect --no-git(arbre de travail seul, mesuré au source) : ni le graphe ni l'historique ne servent, le depth-0 était un vestige de l'èregitleaks-action. Les jambespositive-controlsetassert-egressont déjà le depth par défaut (1), non touchées.harness-coauthor-guard.yml, nommé dans l'issue, portait déjàfilter: blob:nonesurmainà la mesure (base7d83cceded2) — rien à faire.Justification par workflow (mesurée : survey des commandes git de chaque
run:)git ls-files -m,diff --cached --name-only: index/arbre, zéro blob d'historiquegit fetch '+refs/heads/*'+ comparaisons de SHA : graphe seul$BASE...$HEAD(l.98) : graphe + blobs PR à la demandegit diff $BASE...HEAD+git show $BASE:$nb: blobs précis, lazy-fetchmerge-base --is-ancestor(le commentaire du fichier le documente) : graphegit checkout <sha> -- MyIA.AI.Notebooks: blobs de chemins précis, lazy-fetchrev-list --before(fenêtre 24 h) +diff --name-only: graphe, noms sans contenugh) : arbre de travailmerge-base+diff --name-only: graphe — c'est précisément ce workflow qui documente l'abstention sur shallow fetch, d'où blob:none et non depth 1$BASE...$HEAD(l.110)git diff $BASE...HEAD→ liste de nomsgit fetch '+refs/heads/*': graphemerge-base+diff --diff-filter=A+checkout BASE -- chemins: blobs précis, lazy-fetchgit diff --raw+cat-file -s $newsha: blobs des fichiers ajoutés, un par un à la demandegit diff -M $BASE...$HEAD: nomsdetect --no-git×2 : l'historique n'est pas scannéPourquoi blob:none et pas depth 1 pour les 23 : ils exigent le graphe complet —
merge-base, diff 3-points, ourev-listsur une fenêtre de 24 h demain. Un depth 1 casserait ces calculs (le workflow markdown-claims-output-advisory documente déjà ce mode de défaillance : « merge-base is unreachable (shallow fetch) → detector abstains »). Le clone partiel promisor garde le graphe entier et ne paie que les blobs réellement lus.Organe : retrait de l'exclusion périmée
CHECKOUT_HYGIENE_FULL_HISTORY_WORKFLOWS(scripts/notebook_tools/audit_workflow_path_filters.py) excluaitsecret-scan.ymlau motif « gitleaks scanne les BLOBS de l'historique git complet ». La prémisse date de l'èregitleaks/gitleaks-action: les deux jambes invoquent aujourd'huidetect --no-git(arbre de travail seul) et le checkout passe à depth 1 dans cette PR — l'exclusion ne protégeait plus rien. Elle est retirée (liste OPT-IN laissée vide pour la prochaine justification écrite), et le cas synthétique du contrôle positif qui l'illustrait migre vers un casdepth-1.yml(hors scope parno_fetch_depth_zero) — le mécanisme d'exclusion reste couvert partest_checkout_hygiene_excluded(monkeypatch).Validation (post-fix, relancée)
pytest scripts/tests/test_audit_workflow_path_filters.py: 24/24 verts.D:/Dev/CoursIAà la même base).7d83cceded2) : 85 checkouts depth-0 dont 25 sans filtre → après : 83 depth-0 tous filtrés, 0 sans filtre ; secret-scan en depth 1.Contenu du TASK #4376 couvert
Item 3 complet (les 10 workflows nommés dans l'issue + 14 extras mesurés à base fraîche). Item 1 (ligne hôte po-203) déjà posté sur le dashboard et l'issue ; bootstrap miroir en cours sur cet hôte via
supervise.sh mirror bootstrap(machinerie #22760 déjà surmain).Part of jsboige/roo-extensions#4376 (item 3). See jsboige/roo-extensions#4376.
🤖 Generated with Claude Code