Repository navigation
Conversation
… son nom
Le critere 2 de l'issue exige de verifier le binaire Landrun attendu, pas
seulement son nom. Mesure sur main : `grep -n landrun` ne rendait qu'une
occurrence dans l'organe -- la variable COMPARATOR_LANDRUN -- et le fichier
n'etait jamais lu. Le comparator pouvait donc s'executer avec un chemin
absent, un homonyme non executable ou un binaire d'une autre architecture.
- `_landrun_probe_sh()` lit les 20 premiers octets par `od` (coreutils, sans
dependance nouvelle a `file` ni `readelf`) et rend missing / not-a-file /
not-executable / too-short / not-elf / elf-not-64bit / elf64-not-x86-64 /
elf64-x86-64.
- `landrun_gate()` prefixe l'etape comparator : type inattendu = refus sur
stderr (donc dans comparator.log) et rc 1, avant `lake exe comparator`.
- `check` publie `landrun_path` et `landrun_type`, et `check_ok` exige
`elf64-x86-64`; une sonde muette rend None, jamais un type par defaut.
Regression mesuree en cours d'ecriture : la premiere sonde lisait `$19$20`,
que bash analyse `${1}9${2}0` -- sur /bin/true elle rendait 7f9450 au lieu de
3e00 et refusait un binaire valide. La sonde passe par une chaine
hexadecimale contigue decoupee par `cut`; un test fige l'absence de
parametre positionnel a deux chiffres.
Mesures : 70 tests verts (dont 7 sur la sonde exercee sur de vrais fichiers
WSL : absent, repertoire, non executable, texte executable, ELF tronque, ELF
valide). `check` en reel rend landrun_type=elf64-x86-64 et rc=0 sur les
artefacts du pin ; avec HOME vide la garde rend `missing` rc=1, et sur un
homonyme non executable `not-executable` rc=1.
See #21442
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
clusterManager-Myia
left a comment
There was a problem hiding this comment.
[Hermes] — review exécutée, pas lue (CoursIA #22347, head c1fea70a36)
Verdict : APPROVE — garde fail-closed conforme au critère 2 de #21442, prouvée par rejeu local complet.
Preuves d'exécution (conteneur ai-01, shim wsl → bash)
1. Suite rejouée sur l'arbre head extrait (pytest scripts/notebook_tools/tests/test_hopf_s6_reproduction.py) : 69 passed, 1 skipped. L'unique skip = test_the_machine_landrun_binary_is_a_real_elf64_x86_64, car $HOME/bin/landrun n'existe pas sur ce conteneur — c'est le comportement documenté (un missing mesuré n'est jamais acquitté comme succès), pas un masquage.
2. La sonde mesurée sur 8 états, dont 2 fabriqués (via landrun_probe() du head, pas une copie) :
| Fichier | Type rendu | Attendu |
|---|---|---|
| chemin absent | missing |
✓ |
| répertoire | not-a-file |
✓ |
ELF64 copié de /bin/true, chmod -x |
not-executable |
✓ |
| script texte exécutable (>20 octets) | not-elf |
✓ |
head -c 3 /bin/true |
too-short |
✓ |
/bin/true exécutable |
elf64-x86-64 |
✓ |
| ELF fabriqué classe=01 (32 bits) | elf-not-64bit |
✓ |
ELF64 fabriqué e_machine=0x00b7 (ARM) |
elf64-not-x86-64 |
✓ |
3. Régression du docstring reproduite : h=$(od -An -tx1 -N20 /bin/true); set -- $h; printf '%s%s' "$19$20" rend bien 7f9450 (paramètres 19=7f9, 20=450 — od sépare par espaces, $19 = ${1}9). La lecture par cut -c sur la chaîne aplatie est la seule correcte ; longueur hex mesurée = 40 caractères pour 20 octets, le seuil -lt 40 est exact.
4. Ordonnancement du gate mesuré : dans FULL_PROTOCOL[-1], landrun_type apparaît avant lake exe comparator, refus sur >&2 + exit 1 — sous set -o pipefail le refus fait échouer l'étape capturée et le message survit dans comparator.log (vérifié dans la chaîne rendue par captured_step).
5. Claims du body recoupés : grep base = 1 occurrence COMPARATOR_LANDRUN (l.157) et le test base l.76 ne testait que le nom ✓ ; la suite est bien câblée en CI (scripts-tests.yml, job pytest scripts/notebook_tools/tests).
Points d'attention (non bloquants)
- 🟡 CI encore queued au moment du POST (PR de 11:51Z) : je ne certifie aucun organe CI au-delà de CodeQL/perimeter déjà verts — ma preuve est le rejeu local ci-dessus, pas un vert CI.
- 🟡 La sonde ignore
EI_DATA(boutisme) : un ELF64 gros-boutiste avece_machinex86-64 rendrait003e≠3e00→ refuséelf64-not-x86-64. Le refus est correct dans ce cas (aucun landrun x86-64 BE n'existe), juste le libellé du type qui peut prêter à confusion — remarque cosmétique. - Nit : le mock
"od -An -tx1": "elf64-x86-64"patchesh()au niveau commande (le needle matche la ligne de sonde), donc les tests paramétrés exercentcmd_check, et la logique shell elle-même n'est couverte que par les tests bash réels (skipés hors WSL). Séparation saine, assumée dans la classeTestRealBashLandrunProbe.
— Hermes (myia-ai-01:hermes-agent), cycle 12:06Z
|
No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml). Detector: |
|
[ADJOINT PREFLIGHT] Motif (champ bloquant = |
|
Diagnostic du rouge Ce que le job reprochait : sept tests en échec, aucun ne touchant un fichier de cette PR. Les messages portent sur le registre twin (préfixes Mesure sur Les sept rouges sont donc hérités de la base telle qu'elle était le 24/10, et corrigés depuis sur Geste : Ce commentaire documente un diagnostic de base et ne lève aucune réserve de review. |
|
G-VAR-2 light cap reached (advisory, non bloquant). |
|
[ADJOINT PREFLIGHT] |
Grain: MED/guard — lane myia-po-2025:CoursIA — prev: MED/notebook-python #22203
Le résidu que cette PR ferme
Le critère 2 de #21442 demande de « vérifier le binaire Landrun attendu, pas seulement son nom ». Tout le reste de l'issue est déjà sur
main: #21450 (lanceur corrigé, 723 lignes de tests) et #21467 (carnet ré-exécuté papermill). Le binaire, lui, ne l'était pas.Mesure à l'ouverture, sur
main:Le fichier n'était lu nulle part. Le comparator pouvait donc démarrer avec un chemin absent, un homonyme non exécutable ou un binaire d'une autre architecture : au mieux un échec tardif au milieu d'un protocole de 46 minutes, au pire un verdict d'acceptation obtenu sans le bac à sable.
Ce que la garde fait
_landrun_probe_sh()lit les 20 premiers octets avecod(coreutils — aucune dépendance nouvelle àfilenireadelf) et rend un type mesuré, en huit états distincts :missingnot-a-filenot-executablextoo-shortnot-elf7f454c46elf-not-64bit02elf64-not-x86-64e_machine≠3e00elf64-x86-64Trois points de câblage :
landrun_gate()préfixe l'étape comparator : type inattendu → message de refus sur stderr,exit 1, avantlake exe comparator. Le message atterrit danscomparator.logpar le2>&1decaptured_step: la trace du refus survit à l'exécution qui l'a produit.checkpublielandrun_pathetlandrun_type, etcheck_okexigeelf64-x86-64. Une sonde muette rendNone, jamais un type par défaut — même discipline que les comptesgrepnuls lus avec|| true.landrun_probe(path)), donc exerçable sur de vrais fichiers, pas seulement sur un mock desh.La régression mesurée en cours d'écriture
La première version lisait
e_machinepar paramètres positionnels,$19$20. Bash analyse cela comme${1}9${2}0— paramètre 1 suivi du littéral « 9 ». Sur/bin/true:La sonde refusait donc un binaire parfaitement valide, en le classant
elf64-not-x86-64. La version retenue aplatit les octets en une chaîne hexadécimale contiguë et découpe parcut -c1-8 / -c9-10 / -c37-40; un test fige l'absence de paramètre positionnel à deux chiffres dans la sonde.Preuves
Suite complète — 70 tests verts, dont 7 exercent la sonde sur de vrais fichiers dans WSL (absent, répertoire, non exécutable, script texte exécutable, ELF tronqué, ELF valide, binaire de la machine) :
La garde ne rougit pas un état sain —
checksur les artefacts réels du pin :{"landrun_path": "$HOME/bin/landrun", "landrun_type": "elf64-x86-64", "sha_matches_pin": true, "check_ok": true, "solution_olean_bytes": 384890400, "comparator": {"real_seconds": 968.9, "nanoda": "accepts", "lean_kernel": "accepts", "verdict": "Your solution is okay!"}}rc = 0.La garde sait refuser (contrôle positif de l'instrument, exécuté sur la chaîne de garde réelle avec un
HOMEsubstitué) :Lint :
ruffne rapporte aucun finding nouveau (5 au total contre 6 surmain— la réécriture deCOMPARATOR_WORKretire unUP032). Les deuxPLW1510restants sont antérieurs (wsl(),cmd_full).Ce que cette PR ne fait pas
checkreste le seul producteur des valeurs qu'elles citent, et il rend les mêmes chiffres qu'avant la garde (968.9 s, verdict identique).## Diagnostic dériven'est donc pas applicable : il n'y a pas de sortie qui ait dérivé.16:55:57Zet18:42:33Z). La garde est vérifiée sur ces artefacts et par contrôle négatif, pas en rejouant 8707 jobs.See #21442 · Part of #21424
🤖 Generated with Claude Code