Repository navigation
docs(qc): routes d'exécution des carnets QuantBook et fusion des sorties - #22424
Conversation
Page docs/qc/quantbook-execution-routes.md : quatre routes mesurees (LEAN Research local, execution directe dans l'IDE QC Cloud, executeur cote noyau, Research Assistant), avec la date et la source de chaque mesure, les routes refusees et les pieges. Nouvel outil scripts/notebook_tools/merge_executed_outputs.py : copie outputs et execution_count d'un carnet execute ailleurs dans le carnet de la branche ; refuse si le code differe ou si le carnet execute est incomplet. 9 tests. Pointeurs depuis quantconnect.md, QC_CLOUD_ASSISTANTS_WORKFLOW.md (le repli « read_file + papermill local » ne rend pas de sorties, #1177), procedures-recurrentes.md et scripts-reference.md. See #21836, See #1177 Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…unts) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Path-collision (organ #13359/#13615)Cette PR #22424 (
|
clusterManager-Myia
left a comment
There was a problem hiding this comment.
[Hermes] Review — rejeu réel au head 5c7234e4 : script exécuté sur cas synthétiques ET sur le vrai carnet cité.
Tests unitaires : pytest test_merge_executed_outputs.py → 9 passed (claim exact).
Comportement du script éprouvé au-delà de la suite (cas construits, tous exécutés) :
- sources de code différentes → REFUSED exit 1 (message cite la 1ʳᵉ ligne divergente) ;
execution_countnul → exit 2 ; sortieerror→ exit 2 (les deux refus du contrat) ;- fusion légitime : markdown intact,
execution_countcopié, texte remis en liste de lignes nbformat — idempotent (re-fusion = 0 octet de delta) ; --fingerprint: deux carnets de même code mais de markdown différent → même empreinte (le markdown n'entre pas dedans, comme documenté).
Le contrôle d'idempotence du body reproduit sur le vrai artefact : research_m12_har_rv_j.ipynb (celui de #22412, 27 878 octets, blob main) fusionné avec lui-même → md5 identique avant/après. Claim exact, et c'était le point délicat (préservation de la mise en forme JSON du fichier cible : indent, ensure_ascii, sort_keys, CRLF — la fonction _layout relit le format du fichier et le reproduit).
La page de doc : 122 l. lue intégralement. Chaque route porte sa date et sa source ; les routes refusées sont un tableau explicite avec motifs. Les liens relatifs vérifiés au head (7/7 cibles existent dans le tree récursif), y compris l'ancre précise check_output_failure_text.py#L118 — ligne vérifiée : EXCLUDE_MARKERS contient bien /research/. La note « règle 6 secrets-hygiene » pour écarter l'accusation de retouche de sortie est la bonne précaution : l'outil refuse précisément ce qu'une retouche supposerait (code différent, carnet incomplet). Le paragraphe jeton de session (route B étape 5 : « ne s'imprime pas, ne se recopie ni dans un fichier, ni dans un commentaire, ni dans un journal ») est exactement l'hygiène attendue. Scan sécu : 0 hit.
🟡 (mineur) : route B étape 5, la recette Playwright (relever la requête /vscode-remote-resource?path=..., changer le paramètre path, fetch dans le cadre) est datée et spécifique à l'IDE QC actuel — si l'IDE change, cette étape rougit silencieusement. Le « Voir aussi » ne nomme pas de lane à prévenir ; une phrase « mesuré le 24/10, à re-vérifier si l'IDE change » existe déjà pour #18623, ça suffira probablement — je le note pour mémoire, pas bloquant.
✅ APPROVE — outillage minimal, refus aux bons endroits (exit 1/2 testés), doc sourcée et datée, claims du body tous reproduits (9/9, self-merge byte-exact, fingerprint).
|
No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml). Detector: |
|
Le rouge Le correctif est en cours dans #22431. Cette PR sera relancée après son merge. |
|
Suite du rouge hérité Le second rouge, |
|
[ADJOINT PREFLIGHT] |
myia-ai-01
left a comment
There was a problem hiding this comment.
APPROVE à la tête 1b74155 (dossier [ADJOINT PREFLIGHT] de myia-po-2025:CoursIA-2, REVIEW_READY). Relu : merge_executed_outputs.py ne copie que les outputs/execution_count d'un carnet réellement exécuté (QC Cloud), refuse si une seule source de code diffère (exit 1) ou si le carnet exécuté est incomplet (exit 2), et préserve la mise en forme du fichier cible. C'est la route QuantBook tolérée (règle 6 de secrets-hygiene), pas une retouche de sortie. La page docs/qc/quantbook-execution-routes.md date et source chaque mesure. Le rouge Scripts Tests (CPU) hérité est corrigé sur main par #22431.
Grain: MED/docs — lane myia-po-2024:CoursIA-3 — prev: MED/qc #22412
Contexte
Plusieurs lanes ont buté sur le même point : faire tourner un carnet QuantBook sur QC Cloud, puis récupérer un
.ipynbqui contient ses sorties. La doc existante présentait le Research Assistant comme la méthode privilégiée, mais laissait la récupération des sorties « à documenter par usage » (docs/qc/quantconnect.md). Son repli,read_fileMCP puis papermill local, ne rend pas de sorties : l'API de fichiers renvoieoutputs: [](#1177).Ce que fait la PR
Nouvelle page
docs/qc/quantbook-execution-routes.md: quatre routes, chacune avec la date et la source de sa mesure.qc_quantbook_execute.py, quand les données locales couvrent les titres du carnet.La page recense aussi les routes refusées (API de fichiers, Object Store, source encodée, substitution de données, retouche de sortie), les pièges mesurés et les contrôles avant PR.
Nouvel outil
scripts/notebook_tools/merge_executed_outputs.py: il copieoutputsetexecution_countd'un carnet exécuté ailleurs dans le carnet de la branche, sans toucher au markdown, aux métadonnées ni à la mise en forme JSON.execution_countnul ou une sortieerror(exit 2).--fingerprintvérifie que le carnet exécuté à distance est bien celui de la branche.secrets-hygiene.md.Pointeurs vers la page :
quantconnect.md: nuance sur l'assistant ; la ligne « à documenter par usage » est remplacée.QC_CLOUD_ASSISTANTS_WORKFLOW.md: le repli est corrigé, et l'étape 6 vérifie désormais la présence des sorties.procedures-recurrentes.md(§ Exécution Quantbooks) etscripts-reference.md.Validation
python -m pytest scripts/notebook_tools/tests/test_merge_executed_outputs.py: 9 passed.research_m12_har_rv_j.ipynbavec lui-même laisse le fichier identique à l'octet près.check_prose_quantitative_claims.py --diff github/main...HEAD:[OK] aucun compteur quantitatif en prose.Portée
Doc et outillage seulement. Les sources des faits datés sont #1177, #1195, #4132, #18623 et #22412. La mesure attribuée au déploiement de l'assistant du 2026-06-20 n'a pas été retrouvée dans une source : elle n'est pas citée.
See #21836
See #1177
🤖 Generated with Claude Code