Repository navigation
tooling(research,#19452): le pin des sources Harvey verifie au runtime, pas seulement en prose #22052
Description
Le pin des sources vendorisées de Harvey vit en commentaires et en prose, pas en enforcement runtime — un manifeste vérifié au démarrage du driver le rendrait falsifiable.
Part of #19452 (Cartier-Miller P1+).
Constat, mesuré
docs/research/cartier-miller-p1-cpp.md (l. 22, 103, 114) et docs/research/cartier-miller-p1-plus-results.md (§7.1) déclarent que harvey_adapter.cpp, upstream/recurrences_ntl.cpp et upstream/hypellfrob.cpp sont vendorisés au pin 37a9b72, et que leur modification est interdite. Rien, à l'exécution, ne vérifie cette affirmation : scripts/cartier_miller/run_harvey_p1_plus.py charge le binaire du chemin executable consigné dans le JSON et l'interroge, sans jamais confronter les sources présentes sur le disque au pin annoncé.
La seule garde runtime existante est le compte all_stopping_indices == 10809 codé dur : elle fait échouer fermé si la population dérive (c'est sa qualité, et elle est réelle), mais elle ne voit pas un échange de source qui préserverait la population — une récurrence modifiée resterait cohérente avec elle-même et produirait les mêmes 10 809 indices.
Conséquence pratique : la revue d'une passe ultérieure ne peut distinguer « sources au pin » de « sources modifiées » qu'en relisant la prose. C'est exactement le mode de défaillance que l'anti-régression interdit (sources upstream interdites de modification), et il est aujourd'hui déclaratif.
Ce que la réparation ferait
- Un manifeste versionné, à côté du driver — par exemple
scripts/cartier_miller/harvey_sources_pin.json— portant le pin (37a9b72) et la SHA-256 des trois sources vendorisées. - Un contrôle au démarrage du driver (
--verify-sources, actif par défaut) qui recalcule les empreintes et sort en erreur au premier écart, avant toute requête. - Le report du résultat dans le JSON de validation (
sources_pin_verified: true, et les trois empreintes), pour qu'un auditeur voie la garde s'être exécutée plutôt que de la supposer.
Critères d'acceptation, mesurables
- Le manifeste existe, porte le pin et les trois empreintes, et la revue en vérifie au moins une à la main contre
sha256sum. - Un test mute un octet d'une des trois sources dans une copie temporaire et attend
rc != 0avant tout appel au binaire (garde fail-closed, pas un avertissement). - Le JSON de validation d'une exécution ultérieure porte
sources_pin_verified: trueavec les trois empreintes. - Les sources elles-mêmes ne sont pas modifiées : la garde mesure, elle ne réécrit pas.
Pourquoi une issue et pas un correctif dans la PR courante
La réserve est explicitement non bloquante dans la revue de #22034 (« Acceptable en l'état »), et toucher le driver d'une passe déjà validée pour y ajouter une garde changerait l'outil qui a produit les résultats — c'est un grain séparé, pas un rattrapage. Les résultats de #22034 restent valides sous la garde actuelle (stopping_total == 10809).
Parent : #19452, nommé en tête — ce constat porte sur l'outillage de recherche scripts/cartier_miller/ de cette série, il n'appartient à aucune autre.
Activity
jsboige commentedon Oct 26, 2026
Grain: MED/research-code — lane myia-ai-01:CoursIA-2 -- prev: MED/genai #22691
[CLAIMED] lane myia-ai-01:CoursIA-2 -- paths: scripts/cartier_miller/harvey_sources_pin.json, scripts/cartier_miller/run_harvey_p1_plus.py, docs/research/cartier-miller-p1-cpp.md, docs/research/cartier-miller-p1-plus-results.md
Intention : rendre le pin des sources Harvey falsifiable a l'execution — manifeste
harvey_sources_pin.json(pin + commit complet + URL amont + SHA-256 des 3 sources vendorisees), garde--verify-sourcesfail-closed (exit != 0) AVANT tout appel au binaire, reportsources_pin_verified+ les 3 empreintes dans le JSON de validation, et test de mutation d'un octet attendu en echec avant tout appel. Les sources elles-memes ne sont pas modifiees : la garde mesure.Controle de collision fait par la lane avant ce claim :
check_lane_claim.py 22052 --lane myia-ai-01:CoursIA-2 --paths ...->blocking_lanes: [], 3 chemins libres + 1 chemin a creer ; balayage REST sur les PRs ouvertes (gh pr list --state open --limit 300 --json files) -> 0 collision sur les 4 chemins ;gh pr list --state all --search 22052-> seule #22034 (pas mere, deja mergede, ses resultats restent valides).jsboige commentedon Oct 26, 2026
Grain: DEEP/research-code — lane myia-ai-01:CoursIA-2 -- prev: MED/genai #22691
[CLAIMED-AMEND] lane myia-ai-01:CoursIA-2 -- paths: scripts/cartier_miller/harvey_sources_pin.json, scripts/cartier_miller/run_harvey_p1_plus.py, scripts/tests/test_harvey_sources_pin.py, docs/research/cartier-miller-p1-cpp.md, docs/research/cartier-miller-p1-plus-results.md
Scope COMPLET en 5 chemins (remplace le scope a 4 chemins du claim initial). Raison : le critere d'acceptation n°2 exige un test qui mute un octet de l'une des trois sources ; ce test vit nécessairement dans un fichier propre (
scripts/tests/test_harvey_sources_pin.py). Hors clause, l'edition ne serait pas verifiable par le claim.Controle de collision refait par la lane sur les 5 chemins :
gh pr list --state open --limit 300 --json files-> 0 collision surscripts/tests/test_harvey_sources_pin.py;check_lane_claim.py 22052 --lane myia-ai-01:CoursIA-2 --paths <5>->blocking_lanes: [],blocked: false, 3 chemins libres + 2 globs lus comme scope de CREATION (harvey_sources_pin.jsonet le fichier de test n'existent pas encore sur main).Tier : MED -> DEEP. Litmus :
maincontiendra-t-il une CAPACITE qui n'existait pas ? Oui — le driver Harvey cessera d'accepter silencieusement des sources divergeantes et sortira en erreur AVANT tout appel au binaire ; la production a demande du raisonnement de domaine (resolution du pin amont, mesure des 3 SHA-256, ordonnancement fail-closed, preuve que l'executable n'est pas lance). Le plancher G-VAR-1 du cycle est deja tenu par #22686 (DEEP/lean) : ce grain ne le porte pas a lui seul, il vient en deca.Fix(research,#22052): le faux executable du temoin est portable (batc…
Fix(research,#22052): le pin des sources Harvey est verifie au runtim…