Skip to content

docs(qc): routes d'exécution des carnets QuantBook et fusion des sorties - #22424

Merged
jsboige merged 3 commits into
mainfrom
docs/qc-quantbook-routes-execution
Oct 26, 2026
Merged

jsboige merged 3 commits into
mainfrom
docs/qc-quantbook-routes-execution

Conversation

@jsboige

@jsboige jsboige commented Oct 24, 2026

Copy link
Copy Markdown
Owner

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 .ipynb qui 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_file MCP puis papermill local, ne rend pas de sorties : l'API de fichiers renvoie outputs: [] (#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.

    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 copie outputs et execution_count d'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.

    • Il refuse quand les sources de code diffèrent (exit 1), et quand le carnet exécuté est incomplet : un execution_count nul ou une sortie error (exit 2).
    • --fingerprint vérifie que le carnet exécuté à distance est bien celui de la branche.
    • L'outil transporte des sorties produites par le noyau. Ce n'est pas une retouche au sens de la règle 6 de 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) et scripts-reference.md.

Validation

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

jsboige and others added 2 commits October 25, 2026 00:59
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>
@github-actions

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #22424 (docs(qc): routes d'exécution des carnets QuantBook et fusion des sorties) touche au moins un chemin de fichier aussi modifie par d'autres PRs ouvertes. Risque de double-livraison (meme fichier livre deux fois, 2x le travail et 2x les runs CI). Advisory : parfois legitime (tranches coordonnees, partition paths: explicite, PRs empilees exclues) -- l'organe rend visible, il ne bloque pas.

@clusterManager-Myia clusterManager-Myia left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[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_count nul → exit 2 ; sortie error → exit 2 (les deux refus du contrat) ;
  • fusion légitime : markdown intact, execution_count copié, 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).

@github-actions

Copy link
Copy Markdown
Contributor

No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml).

Detector: python scripts/audit/detect_organ_duplication.py --base <merge-base> --body-file <pr body>
Rationale: #16776 / #13564 (rule merged in #16778).

@jsboige

jsboige commented Oct 25, 2026

Copy link
Copy Markdown
Owner Author

Le rouge Scripts Tests (CPU) de cette PR ne vient pas de son diff. L'échec porte sur tests/test_rag02_sona_protocol.py::test_arxiv_reference_is_sona_technical_report : le test attend « Udeneev » dans l'introduction de la §7 de RAG-02, alors que #21901 a corrigé la citation en « Sona Team ». Le même test échoue sur main (d4cb3ad). Cette PR ne touche ni ce test ni ce carnet.

Le correctif est en cours dans #22431. Cette PR sera relancée après son merge.

@jsboige

jsboige commented Oct 25, 2026

Copy link
Copy Markdown
Owner Author

Suite du rouge hérité Scripts Tests (CPU) signalé plus haut : son correctif, #22431, est mergé sur main depuis 2026-10-25T07:59:50Z. La branche est rafraîchie par gh pr update-branch, sans conflit et sans commit de contenu. Nouvelle tête : 1b74155cb4. Les jambes repartent sur la base corrigée.

Le second rouge, Paragraph length > 2000 chars advisory, n'est pas bloquant : c'est un label d'avertissement, pas un check requis.

@jsboige

jsboige commented Oct 25, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2025:CoursIA-2
pr: 22424
head: 1b74155
complete: true
body: read
comments-reviewed: 4
reviews-reviewed: 1
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 8d5d79cc6d6af75f88faeff83d13c2c7dff75498e2cd4db4368cd3c01256af17
diff-files: 7
diff-additions: 432
diff-deletions: 5
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
organ: check_adjoint_prevalidation.py
organ-command: python scripts/check_adjoint_prevalidation.py --derive-verdict 22424
organ-rc: 0
[/ADJOINT PREFLIGHT]

@myia-ai-01 myia-ai-01 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

@jsboige
jsboige merged commit bf1a1bb into main Oct 26, 2026
39 of 43 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants