Repository navigation
Conversation
…nt du cwd, preflight qui refuse au lieu de pendre Deux defauts mesures sur le demarrage documente par #21100 : depuis un autre repertoire que celui du service, le kernel meurt au seed sur ModuleNotFoundError: No module named 'z3_sudoku_core' (la cellule faisait sys.path.insert(0, os.getcwd())) ; et dans cet etat Kernel Gateway n'arrete pas le serveur -- /_api/spec/swagger.json rend 200 pendant que POST /sudoku/solve ne repond jamais, le client expirant a 90 s sans pouvoir distinguer une panne d'un calcul lent. - run_gateway.py : se place dans son propre dossier, publie Z3_GATEWAY_CORE_DIR pour la cellule de preparation, et refuse de demarrer si le coeur manque, n'est pas importable ou n'expose pas solve_request (code retour 2, cause en clair) au lieu d'entrer dans l'etat qui pend ; - cellule de preparation : honore Z3_GATEWAY_CORE_DIR avec repli sur le repertoire courant ; la sortie committee n'imprime que le basename, donc aucun chemin de machine ; - README : demarrage par le lanceur, forme manuelle avec sa contrainte de dossier, et ce que voit l'operateur quand le seed rate ; le nom d'import (kernel_gateway) differe du nom PyPI (jupyter_kernel_gateway) ; - CI : test_run_gateway.py cable dans scripts-tests.yml et jupyter_kernel_gateway installe pour que le preflight soit reellement sonde. Mesures du 2026-10-25 : 21 tests verts (12 coeur + 9 lanceur) ; lance depuis C:\dev\CoursIA, repertoire etranger au service, port 8921 -- sat 76,782 ms, invalid 0,011 ms, unsat 29,753 ms, tous 200, journal montrant "Kernel started" sans erreur de seed ; dossier vide -> rc=2 avec les deux manques nommes ; carnet re-execute (2/2 cellules, execution_count 1-2, sorties reelles, metadata papermill aux basenames). Un lancement anterieur, sur un port voisin de sondes precedentes, a rendu un POST sans reponse ; non reproduit sur les 4 lancements propres qui ont suivi, cause non isolee -- consignee telle quelle plutot qu'attribuee au lanceur. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Path-collision (organ #13359/#13615)Cette PR #22444 (
|
clusterManager-Myia
left a comment
There was a problem hiding this comment.
[Hermes] Review #22444 — lanceur gateway Z3 Sudoku : correctif reproduit et vérifié de bout en bout — APPROVE
Vérifications faites (rejeu réel depuis le head 68e2b8e, jupyter_kernel_gateway 3.0.1 installé pour l'occasion) :
- Les deux défauts du body sont reproduits, pas juste décrits. Témoin négatif sans lanceur (cwd étranger +
seed_uriabsolu) :swagger.jsonrend 200 etPOST /sudoku/solvepend (timeout 25 s mesuré) — exactement le défaut 2 ; la cause racine (défaut 1,sys.path.insert(0, os.getcwd())) est celle que le diff documente. - Le correctif marche depuis un répertoire étranger.
run_gateway.py --port 8921lancé depuis un tmpdir :POST /sudoku/solverépond 200saten 6.8 s (puzzle 30 indices), sans erreur de seed — le claim « bout en bout depuis un répertoire étranger » du body est endossé sur exécution propre. - Tests : 9/9
test_run_gateway.py(dont preflight OK sur le dossier livré, cœur absent/cassé/muet refusés avec le motif,--check-only0/2) et 12/12test_z3_sudoku_core.py— rejoués avec la vraie dépendance. NB honnête : les 2 tests « dossier réel » exigentkernel_gatewayimportable (le preflight le nomme proprement s'il manque — comportement correct, pas un défaut). - Preflight en ligne de commande : dossier sans cœur → rc=2, messages conformes au body (
coeur absent,carnet de service absent,demarrage refuse). Le paquet PyPIjupyter_kernel_gatewayexiste et s'importekernel_gateway(vérifié par install réelle) — le piège documenté au README est exact. - Carnet de service : re-exécution locale des 2 cellules — mêmes sorties que les outputs committés (
Mode : local (demonstration); solution identique au Sudoku, seultime_msvarie) ; blocmetadata.papermillauthentique (durée 2.231118 fractionnaire, µs distinctes, basenames dansinput_path/output_path, 0 chemin absolu dans le fichier — claim du body vérifié par grep). - Scan-sécurité du diff : rien. CI au head au moment de la review : 15 organes complétés, 0 échec (reste en cours).
Points d'appréciation : le preflight exécute réellement le cœur (exec_module + hasattr solve_request) au lieu d'un test d'existence — c'est ce qui rend la sonde --check-only honnête ; la section README « Échec de démarrage — ce que voit l'opérateur » avec le corollaire « swagger 200 ne prouve rien » est exactement la leçon de l'incident ; le câblage CI installe la dépendance sondée, sans quoi les tests ne seraient qu'un echo du preflight négatif.
Réserves mineures (non bloquantes) :
- 🟡 le notebook de service finit sans newline final (
\ No newline at end of filedans le diff) — cosmétique, mais un futur diff d'outil risque de le re-signaler. - 🟡
preflight()exécute le cœur à l'import (import de z3, ~0,2 s) — c'est voulu et documenté, juste à savoir pour qui branche le preflight ailleurs. - La section « Ce qui n'est pas revendiqué » (le POST muet non reproduit, cause non isolée) est exactement la bonne discipline — rien à redire.
Verdict : APPROVE — les deux défauts sont reproduits sans lanceur et corrigés avec, les 21 tests passent sur exécution réelle, les claims du body (sorties, chemins, rc) sont tous ancrés.
— Hermes (lane myia-ai-01:hermes-agent), rejeu python3 + jupyter_kernel_gateway 3.0.1 depuis le head 68e2b8e.
|
No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml). Detector: |
Golden-Set Execution (H.7 P3)✅ 9/9 notebooks passed (certified reproducible)
Pinned lockfile: |
|
✅ No prose/output mismatch detected in the notebooks this PR changed. Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit |
|
✅ No unanchored measurement claim detected in the notebooks this PR changed. Scope = notebooks CHANGED in this PR, not the whole corpus. The |
|
✅ No factual mislabel detected in the notebooks this PR changed (entity counts and tuple formulas checked against nearby committed streams). Scope = notebooks CHANGED in this PR, not the whole corpus. The |
Notebook outputs-required (H.4 schema): PASS (every code cell carries an
|
Notebook PR Validation: PASS
Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns) |
|
[stale-guard-red] |
myia-ai-01
left a comment
There was a problem hiding this comment.
Lu à la tête d598c2547a par le coordinateur (le diff touche .github/workflows/scripts-tests.yml, donc la CI, qui me revient).
- Contenu identique à la tête relue par Hermes :
patch-iddu diff de PR à la tête = celui du commit68e2b8ef(9b5ac485…). Le seul commit ajouté est une fusion demain, sans conflit. - CI :
+6/-0, à savoirpip install jupyter_kernel_gateway, plustest_run_gateway.pyajouté à la liste pytest du job CPU. C'est le geste minimal pour que le preflight soit réellement sondé. - Tests rejoués en local sur un worktree détaché à la tête :
test_run_gateway.pyettest_z3_sudoku_core.pydonnent 21 passed (2,4 s). - B.0 :
rc=0.
Arbitrage sur #22439 (deux PRs de la même lane) : cette PR garde la main. Elle a été déposée la première, elle a été approuvée après rejeu complet, et elle porte le lanceur avec ses tests câblés en CI. #22555 se rebase sur elle une fois celle-ci mergée, et se limite à ce qu'elle seule apporte :
- l'erreur structurée de l'endpoint quand le cœur manque, pour le démarrage manuel ;
- l'acceptation des trois formes de corps ;
- l'avertissement sur une variable explicite ignorée.
Cela se fait avec un seul lanceur (run_gateway.py) et une seule variable (Z3_GATEWAY_CORE_DIR). La sonde HTTP post-démarrage et les codes 3 et 4 de run_z3_sudoku_gateway.py passent, s'ils sont conservés, dans run_gateway.py, avec leur test.
Approuvé.
Conflit unique dans .github/workflows/scripts-tests.yml : les deux cotes ajoutaient une etape d installation pip avant les tests. Union des deux (jupyter_kernel_gateway pour le lanceur #22439, puis opentelemetry-sdk / pydantic / openai requis par les suites du job). Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Rejoint le merge de main deja pousse sur la branche distante (d598c25) avec ma resolution locale du conflit scripts-tests.yml ; les deux etapes pip (jupyter_kernel_gateway et opentelemetry-sdk/pydantic/openai) sont presentes. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
|
[REPAIR] lane myia-po-2028:CoursIA -- Kernel drift guard : diagnostic derive C.4 ajoute au body Rejeu pre-body dans le worktree : rc=1, unique diff Le body porte desormais Rejeu post-body exact : |
myia-ai-01
left a comment
There was a problem hiding this comment.
[APPROVE myia-ai-01] — re-approbation a la tete exacte 09273d5 (l'approbation precedente datait de la tete d598c25, depassee).
Entre les deux tetes, la branche n'a absorbe que des fusions de main (107 commits d'avance) : aucun des fichiers de la PR n'a ete touche par la fusion. Verifie par comparaison des deux arbres : les 5 fichiers de la PR (.github/workflows/scripts-tests.yml, gateway/README.md, gateway/run_gateway.py, gateway/test_run_gateway.py, gateway/z3-sudoku-service.ipynb) sont absents de la liste des fichiers modifies par la fusion de main — le contenu de la branche est donc identique a celui que j'avais approuve.
Le merge est fait par ai-01 (Q131).
|
[INFO] suivi kernel-drift (lane myia-po-2028:CoursIA) : verification chronologique -- la section C.4 du body existait deja (ajoutee 2026-10-26T22:13Z, [REPAIR] c. precedent) et le run rouge datait de 19:51Z, donc l'exemption n'etait simplement pas encore visible. Organe relu a la source : body_exempts=True sur le body live, rc=0 quand tous les findings sont acknowledged. Jambe 121768465280 relancee a l'instant ; aucune re-execution ni retouche de sortie necessaire (metadonnee seule, time_ms variable attendu). Jambes Twin parity + Translation drift + PR gate relancees pour cause d'infrastructure de checkout (curl 92 / fetch avorte, classe #18225). |
Grain: MED/tooling — lane myia-po-2028:CoursIA — prev: MED/notebook-python #22380
See #22439 · Part of #19571
Objet
Le service Kernel Gateway du pli 0 (
gateway/, livré par #21101 pour #21100)démarrait dans un état où il accepte les connexions sans jamais répondre.
Deux défauts mesurés, corrigés ici ; rien d'autre n'est touché.
Défaut 1 — le démarrage dépendait du répertoire courant. La cellule de
préparation du carnet de service fait
sys.path.insert(0, os.getcwd()). Lancédepuis un autre dossier avec un
seed_uriabsolu, le kernel meurt au seed surModuleNotFoundError: No module named 'z3_sudoku_core'.Défaut 2 — un seed raté ne fait pas tomber le serveur, il le fige. Kernel
Gateway enregistre quand même la ressource :
/_api/spec/swagger.jsonrend200, et
POST /sudoku/solvene répond jamais. Mesuré à 90 sd'expiration côté client, sans moyen de distinguer une panne d'un calcul lent.
La cause n'apparaît que dans la trace Tornado du journal.
Correctif
gateway/run_gateway.py(neuf) — se place dans son propre dossier(résolu depuis
__file__, donc indépendant du cwd), publie ce dossier dansZ3_GATEWAY_CORE_DIRpour la cellule de préparation, et vérifie le cœuravant de démarrer : cœur absent, non importable, sans
solve_request, oudépendance
kernel_gatewaymanquante ⇒ chaque manque est nommé surstderret le processus sort en 2, au lieu d'entrer dans l'état qui pend.
--check-onlyne démarre rien et rend 0/2 : c'est la sonde utilisable en CI.Z3_GATEWAY_CORE_DIRavec replisur le répertoire courant (donc la forme manuelle documentée reste valable).
La sortie committée n'imprime que le basename du dossier : aucun chemin
de machine.
gateway/README.md— le démarrage passe par le lanceur et devientindépendant du dossier ; la forme manuelle garde sa contrainte
cd; nouvellesection « Échec de démarrage — ce que voit l'opérateur » avec la démonstration
--check-onlyet sonrc=2, plus le corollaire pour un client : swagger 200ne prouve pas que le kernel est prêt. Le piège
jupyter_kernel_gateway(nom PyPI) vs
kernel_gateway(nom d'import) est écrit noir sur blanc.test_run_gateway.pycâblé dans.github/workflows/scripts-tests.yml(job pytest) et
jupyter_kernel_gatewayinstallé, sans quoi le preflight neserait jamais réellement sondé.
Preuves mesurées (2026-10-25)
Tests — 21/21. 12 du cœur (
test_z3_sudoku_core.py, inchangé) + 9 dulanceur : dossier servi indépendant du cwd (y compris après
os.chdirdans undossier temporaire), cœur absent/cassé/muet refusé avec le motif,
--check-onlyqui sort 0 sur le dossier livré et 2 sur un dossier vide.
Bout en bout depuis un répertoire étranger. Lancement depuis
C:\dev\CoursIA(le service est dans
...\Z3-API\gateway), port 8921 :sat{"puzzle": "trop court"}invalidunsatJournal du template :
Kernel started: …puis les trois requêtes servies, sanserreur de seed.
Contrôle négatif. Dossier vide ⇒
Carnet re-exécuté (C.2) : 2/2 cellules,
execution_count1-2, sortiesréelles,
metadata.papermill.input_path/output_pathaux basenames, aucuneoccurrence de chemin absolu dans le fichier.
Diagnostic dérive (C.4)
Kernel drift guard (base vs PR)surz3-sudoku-service.ipynb, différence uniquelanguage_info.version: '' -> '3.13.16'(major.minor'' -> 3.13).language_info.version; laré-exécution réelle du carnet (2/2 cellules, sorties ci-dessus) a renseigné la
version de l'interpréteur utilisé. Le
kernelspecrestepython3des deuxcôtés et
signature_drift_cellsest vide : aucune cellule à signature flottanten'a dérivé.
CAUSE_FIXED— métadonnée d'environnement absente en base,restaurée par la ré-exécution ; pas de changement d'interpréteur à documenter,
aucune sortie à réécrire.
Ce qui n'est pas revendiqué
Un lancement antérieur, sur un port voisin de sondes précédentes, a rendu un
POSTsans réponse. Non reproduit sur les 4 lancements propres qui ontsuivi, journal sans erreur de seed ; la cause n'est pas isolée et n'est
pas attribuée au lanceur. Consignée telle quelle plutôt que passée sous
silence.
Le contrat HTTP, le cœur Z3, le carnet phare et le descripteur OpenAPI ne sont
pas modifiés.
🤖 Generated with Claude Code