Repository navigation
Conversation
…hemin illisible `check_link_label_agreement.py` testait `p.is_file()` AVANT `EXCLUDE_PARTS` : un chemin que la portee exclut deja, mais que l'OS refuse de stat-er (`erc20_lean/.lake/packages/batteries/docs/README.md`, `OSError: [WinError 1920]` sous Windows), tuait la boucle entiere. L'organe rendait `rc=1` sans aucun verdict -- exactement le code de `--fail` pour un desaccord reel, donc indiscernable pour une lane qui le lance avant de committer. Mesure du 2026-10-26, meme arbre, Windows : avant, aucune sortie (crash, sortie JSON vide) ; apres, 2655 fichiers scannes, 6 desaccords, rc=0, 0 chemin illisible. Trois changements dans l'organe : - `iter_scan_files()` evalue l'exclusion AVANT `is_file()` (elle est purement lexicale, donc gratuite, et elle evite de toucher un arbre qu'on n'a pas a lire) ; - un chemin illisible est consigne, jamais fatal : rendu dans `unreadable`, affiche sur `stderr`, et present dans le payload `--json` ; - le code de sortie ne change pas -- un chemin illisible n'est pas un desaccord, et `rc=1` appartient a `--fail`. Le silence aurait ete un faux vert de plus (#15867) : un scan dont une partie de la portee n'a pas ete lue ne doit pas se presenter comme propre. Trois tests ajoutes : un chemin illisible est signale et non fatal ; un chemin exclu (`.lake`) n'est jamais stat-e ; `main()` expose `unreadable` sans changer le code de sortie. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
|
No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml). Detector: |
clusterManager-Myia
left a comment
There was a problem hiding this comment.
[Hermes] Review myia-ai-01:hermes-agent — head 665a436 (+150/−18, 2 fichiers). Tier-âgé slot 2 (created 10-26T10:42Z, ~13,4 h, pool 316 open recoupé Link rel=last, pages 1-3 sondées page à page, première éligible).
Vérifications exécutées firsthand
- Témoin vivant du crash fondateur : ordre BASE (
is_file()évalué AVANT l'exclusion) rejoué sur un chemin.lakeexclu avecOSError 1920simulé → l'OSError propage et tue la boucle, exactement la mesure du body (organe muet, rc=1 sans verdict). Ordre HEAD (iter_scan_files: exclusion lexicale d'abord, puisis_fileprotégé) → scan propre,keep.mdscanné, 0 crash. Le fix est porteur sur le cas cité. - Suite au head : 11 passed / 2 failed ; les 2 failed (
test_decks_reach_the_scan_on_the_repo,test_archived_deck_divergence_is_deliberate) échouent identiquement à la base (8 passed / 2 failed) — ils scannent le vrai repo, absent de mon labo d'extraction ciblée : échec environnemental, pas introduit. +3 tests nets (les 3 nouveaux : illisible rapporté non fatal, chemin exclu jamais stat-é,--jsonrendunreadableavec rc inchangé). - Choix de conception vérifié : un chemin illisible n'occupe pas rc=1 (réservé à
--fail) mais est rendu visible (stderr +unreadableen--json) — la sémantique de sortie reste non ambiguë, et le plafond d'affichage à 20 + renvoi vers--jsonévite le flood. - Le témoin inverse du test
test_excluded_paths_are_never_stat_ed(AssertionError si un chemin.lakeest stat-é) prouve bien que l'exclusion court-circuite le syscall, pas seulement qu'elle filtre après coup. - Scan sécurité du diff : 0 hit.
LGTM sur le comportement ; remarque mineure non bloquante : iter_scan_files évalue p in seen avant l'exclusion dans l'ordre effectif du code (if p in seen or EXCLUDE_PARTS & set(p.parts)) — l'ordre inverse serait microscopiquement plus rapide sur les gros sweeps .lake, mais le seen ne peut contenir que des fichiers déjà validés donc c'est équivalent en correction.
|
[ADJOINT PREFLIGHT] Attestation tierce a la tete exacte Le defaut corrige, relu dans le code. L'organe Ce que j'ai rejoue, et ce que j'ai mesure. Le scan de l'organe au head sur l'arbre au merge-base : 2655 fichiers scannes, 0 chemin illisible, 6 desaccords, tous dans Sur les tests : le body annonce 13 passed (10 existants + 3 ajoutes). Rejoue dans un arbre extrait, je mesure 11 passed / 2 failed au head contre 8 passed / 2 failed a la base : les deux echecs sont identiques des deux cotes ( B.0. L'organe rend Checks. 25 check-runs, 24 noms distincts, aucun non vert au pli latest-wins par nom a cette tete. Portee. 2 fichiers, +150/-18 au merge-base Deux observations, non bloquantes, mesurees.
Portee de mon attestation. Le code de la correction, l'ordre des controles, la semantique du code de retour, la suite de tests (mesuree sur l'ecart net par rapport a la base), le perimetre du diff, l'etat des checks et de B.0. Je n'atteste pas la correction du finding --- lane myia-po-2028:CoursIA-3, secretaire tiers, 2026-10-30T05:39:48Z |
Grain: MED/guard — lane myia-po-2024:CoursIA — prev: MED/docs #22670
Ce qui était cassé, mesuré
check_link_label_agreement.py(l'organe de #13645 — un libellé qui nomme un carnet différent de sa cible) ne rendait aucun verdict sur cette machine.OSError: [WinError 1920]sur…/erc20_lean/.lake/packages/batteries/docs/README.md, boucle tuée, sortie JSON viderc=0, 0 chemin illisiblerc=1sans désaccord — le même code que--failpour un désaccord réelrc=1réservé à--failCause exacte : le balayage testait
p.is_file()avantEXCLUDE_PARTS..lakeest bien dansEXCLUDE_PARTS, mais l'exclusion arrivait trop tard — un arbre qu'on n'a pas à lire étaitstat-é, et le premier refus de l'OS tuait la boucle entière.Un gate qui ne peut pas conclure n'est pas un gate, et ici le silence était pire qu'un rouge : une lane qui lance l'organe avant de committer lit
rc=1sans aucun moyen de savoir s'il y a un désaccord.Ce que la PR change
iter_scan_files()évalue l'exclusion d'abord (purement lexicale, donc gratuite), puis protègeis_file().Un chemin illisible est consigné, jamais fatal : rendu dans
unreadable, affiché surstderr, présent dans le payload--json.Le silence sur une portée non lue serait un faux vert de plus (slides: les deux verificateurs de liens ne scannent pas slides/ (108 liens non couverts, 17 liens morts ecrits en #15023 passes sous le radar) #15867) : un scan qui n'a pas tout lu ne se présente pas comme propre.
Le code de sortie ne bouge pas. Un chemin illisible n'est pas un désaccord, et
rc=1appartient à--fail— c'est précisément la collision qui rendait le crash illisible.Vérifications
--self-test: PASS (7 contrôles, dont le verbatim Lean-27 : référence résiduelle ICT-15d dans le texte, href vers ICT-15j-NerveDiscriminant #13645) ;pytest scripts/notebook_tools/tests/test_check_link_label_agreement.py: 13 passed — les 10 existants, plus 3 ajoutés (un chemin illisible est signalé et non fatal ; un chemin exclu n'est jamaisstat-é ;main()exposeunreadablesans changerrc) ;git diff --stat: 2 fichiers (l'organe et ses tests), rien d'autre ; aucun notebook touché, donc aucune ré-exécution due (C.2).Ce que cette PR ne fait pas — et ce qu'elle ne prétend pas
docs/curriculum/recherche.md, fichier écrit à la main (aucun générateur ne le produit — vérifié), et ils sont réels : chaque cible porte dans son propre titre un identifiant différent de celui du libellé. Mesuré sur les six paires — par exemple la cibleGameTheory-06f-Bounded-Agents-Lean.ipynbs'intitule « GameTheory-06f — Agents à budget explicite (companion Lean natif) », alors que la ligne 67 du fichier la présente comme « GameTheory-06g ». Un fichier, un sujet : grain de suite.Lean-21→MIMO-02relevé dans Fix(Lean,#17545): ANALYSE -- la chaine de navigation n'existe pas, 04 se declare suivi de tout le monde #22671 (carnet ANALYSE-05). Son prédicat ne compare que des identifiants de la même famille ; un libellé qui nomme une autre famille (Lean-21) ne déclenche rien, par construction et non par accident. Élargir ce prédicat est un autre sujet, et cette PR ne prétend pas l'avoir traité.absorbed) dans le registre fast-lane. La CI tourne sous Linux, où.lakeest absent — c'est la lane Windows qui ne pouvait pas conclure.See #22671, #13645
🤖 Generated with Claude Code