Skip to content

Gateway Z3 Sudoku : démarrage dépendant du cwd, et un seed raté fait pendre l'endpoint au lieu d'échouer #22439

Open

Description

@jsboige

Contexte

Le service Kernel Gateway du carnet phare Z3 Sudoku (Z3-API/gateway/) a été livré par #21101 et vérifié sur main le 2026-10-25 : avec le dossier de démarrage documenté, POST /sudoku/solve rend sat correctement. Deux fragilités mesurées le même jour, qui ne sont pas dans les critères du pli 0 mais qui coûtent à l'exploitation.

a) Démarrage dépendant du répertoire courant

La cellule 1 du carnet de service fait sys.path.insert(0, os.getcwd()) et compte trouver z3_sudoku_core.py dans le dossier courant. Lancé depuis la racine du dépôt avec un seed_uri absolu (forme naturelle quand on n'est pas dans le dossier), le kernel meurt au seed :

RuntimeError: ('Error seeding kernel memory', {... 'ename': 'ModuleNotFoundError',
  'evalue': "No module named 'z3_sudoku_core'" ...})

Le README documente un seed_uri relatif, donc un démarrage depuis le dossier — le contrat est respecté à la lettre. Mais le service casse pour quiconque le lance autrement, y compris un orchestrateur ou un script de CI qui passerait un chemin absolu.

b) Un seed raté fait pendre l'endpoint au lieu d'échouer

Dans l'état ci-dessus, la mesure est :

Requête Réponse
GET /_api/spec/swagger.json 200 (le descripteur est servi)
POST /sudoku/solve aucune réponse, expiration du client après 90 s
GET /api 404 (attendu en v3)

Le service se présente donc comme démarré — il enregistre bien la ressource et publie son OpenAPI — pendant que le pool de kernels est vide. Un client ne peut pas distinguer un kernel mort d'un calcul long, et l'opérateur ne voit la cause que dans la trace Tornado du journal.

Ce qui serait tenu pour résolu

  1. Démarrage indépendant du cwd : soit le chemin du cœur est résolu explicitement (variable d'environnement ou argument du lanceur), soit le README impose le dossier de façon non ambiguë et le lanceur le vérifie. Le critère : lancer le service depuis la racine du dépôt avec un seed_uri absolu fonctionne.
  2. Échec rapide et lisible quand le seed rate : plus de pendaison. Le service doit répondre une erreur (503 ou équivalent) ou refuser de se déclarer disponible ; la cause (kernel absent) doit apparaître dans la réponse ou, à défaut, dans un message de démarrage explicite.
  3. Une ligne de rejeu dans le README pour les deux cas : démarrage nominal, et ce que voit l'opérateur si le seed échoue.

Le second point est le plus utile : un service qui pend est plus coûteux qu'un service qui refuse.

Hors scope

Aucune modification du carnet pédagogique Z3-02-Sudoku-Python.ipynb — le correctif vit dans Z3-API/gateway/ et, si besoin, dans le lanceur documenté.

Part of #19571
See #21100

Activity

  1. jsboige commented on Oct 25, 2026

    @jsboige
    OwnerAuthor

    [CLAIMED] lane myia-po-2028:CoursIA -- paths: MyIA.AI.Notebooks/SymbolicAI/SMT/Z3-API/gateway/** -- lanceur avec preflight : demarrage independant du repertoire courant, et echec rapide et lisible quand le coeur est absent (au lieu de la pendaison mesuree). Issue ouverte par cette lane apres verification de #21100.

    Portee : run_gateway.py (neuf), son test, README.md du dossier gateway, et la cellule de preparation du carnet de service si l'env du lanceur doit y etre honoree. Aucun carnet pedagogique touche.

    Grain: MED/tooling -- lane myia-po-2028:CoursIA

  2. jsboige commented on Oct 25, 2026

    @jsboige
    OwnerAuthor

    [DELIVERED] lane myia-po-2028:CoursIA -- PR #22444

    Lanceur gateway/run_gateway.py + preflight : demarrage independant du
    repertoire courant, refus explicite (rc=2) au lieu de l'etat ou swagger rend
    200 et POST /sudoku/solve ne repond jamais.

    Preuves dans le body de la PR : 21/21 tests, e2e depuis un repertoire etranger
    (sat 76,782 ms / invalid 0,011 ms / unsat 29,753 ms, tous 200), controle negatif
    rc=2 avec les deux manques nommes, carnet re-execute (2/2 cellules, sorties
    reelles, aucun chemin de machine).

    Un lancement anterieur a rendu un POST sans reponse ; non reproduit sur les 4
    lancements propres suivants, cause non isolee -- consignee dans le body.

  3. jsboige commented on Oct 25, 2026

    @jsboige
    OwnerAuthor

    [CLAIMED-AMEND] lane myia-po-2028:CoursIA -- paths: MyIA.AI.Notebooks/SymbolicAI/SMT/Z3-API/gateway/z3-sudoku-service.ipynb, MyIA.AI.Notebooks/SymbolicAI/SMT/Z3-API/gateway/README.md, MyIA.AI.Notebooks/SymbolicAI/SMT/Z3-API/gateway/run_z3_sudoku_gateway.py

    Reprise du grain, defauts a et b reproduits de premiere main avant tout fix (voir PR a venir pour les mesures).

  4. jsboige commented on Oct 25, 2026

    @jsboige
    OwnerAuthor

    [DELIVERED] lane myia-po-2028:CoursIA -- PR #22555 : coeur resolu hors du dossier courant (env, cwd, puis parents sur 8 niveaux), import capture au lieu de tuer le kernel, lanceur avec pre-vol + sonde (codes 0/2/3/4), README avec le rejeu des deux cas.

    Mesures : avant POST sans reponse (rc=28 apres 15,0 s) ; apres reponse structuree en 1,61 s ; depuis la racine du depot, --check rend status=sat en 78,7 ms (rc=0). 12 tests du coeur verts, carnet re-execute.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions