Skip to content

nav-chain: baseline perime (51 NEW sur main) + angle mort du modele d'entree sur les chaines a liens mutuels #17625

Description

@jsboige

Constat (mesuré le 2026-09-24, lors de la tranche #17624)

Deux états distincts, un seul organe : scripts/notebook_tools/check_notebook_nav_chain.py.

1. Le baseline est périmé sur main — le ratchet échoue de 51 findings

python scripts/notebook_tools/check_notebook_nav_chain.py --check
# FAIL: 51 NEW finding(s) vs baseline   (mesuré sur main propre a d762eb52)

Le baseline scripts/tests/baseline_nb_nav_chain.json date de l'atterrissage de l'organe (#17285). Depuis, les notebooks canonicalisés par les campagnes en cours (GameTheory, NLP, ICT, CausalBridges, ML/DSA, Search...) ont dérivé l'état sans que le baseline soit rafraîchi. Le ratchet ne ratchet plus : il échoue toujours, donc il ne signale plus rien.

2. Angle mort structurel : le modèle d'entrée est aveugle aux chaînes à liens mutuels

analyse() ne seed le BFS que depuis les notebooks sans aucun lien entrant. Or la forme canonique de nav (#17277) porte à la fois Précédent et Suivant — donc le premier notebook d'une chaîne saine reçoit toujours le Précédent du deuxième et n'est jamais une « entrée ». Mesure sur la piste QC-Py après #17624 :

  • l'arc 01→41 est parcouru 42/42 depuis QC-Py-01 (validation href indépendante) ;
  • l'organe le rend 42 inatteignables, parce que QC-Py-01 n'est pas une entrée (inbound = le Précédent de QC-Py-02) et que les seules entrées de la série (Cloud-03b, Cloud-13, Dataset-Workflow) n'atteignent pas l'arc.

Le cas « wrapped » (aucune entrée → juger depuis le départ le plus couvrant) ne se déclenche pas, car les entrées Cloud/Dataset-Workflow existent. Toute série canonicalisée à liens mutuels + une seconde chaîne dans le même dossier produira ce faux positif.

Proposition de correction (à débattre)

Seeded additionnel : juger aussi depuis les départs de chaîne — notebooks dont tous les liens entrants viennent de notebooks qu'ils atteignent eux-mêmes (le Précédent du 2ᵉ vers le 1ᵉʳ en est l'exemple type). Si un tel départ atteint toute la série, elle est saine. Puis rafraîchir le baseline à l'état corrigé.

État CI

L'organe n'est câblé dans aucun workflow ni fast_lane_registry.py — le ratchet n'est pas un gate aujourd'hui. Le câblage devient possible une fois l'angle mort corrigé et le baseline rafraîchi.

Reproduction

python scripts/notebook_tools/check_notebook_nav_chain.py --check          # FAIL 51 NEW sur main
python scripts/notebook_tools/check_notebook_nav_chain.py MyIA.AI.Notebooks/QuantConnect/Python/QC-Py-01-Setup.ipynb   # apres #17624 : 42 unreachable dont 01

Activity

  1. jsboige commented on Sep 24, 2026

    @jsboige
    OwnerAuthor

    [CLAIMED] lane myia-po-2026:CoursIA — 2026-09-24T09:25Z. Plan : seeding additionnel depuis les départs de chaîne (inbound ⊆ atteignable depuis le nœud), reproduction QC-Py 42 unreachable → 0, baseline rafraîchi à l'état corrigé, tests unitaires chaîne à liens mutuels.

  2. jsboige commented on Sep 24, 2026

    @jsboige
    OwnerAuthor

    Livré par #17641 (lane myia-po-2026:CoursIA) :

    • Constat 1 (baseline périmé) : ratchet vert après refresh à l'état corrigé de main — 428 connus (396 orphan_entry, 21 unreachable, 11 independent_chain). Reproduit avant fix : 106 NEW sur main frais 87ca2d1.
    • Constat 2 (angle mort) : seeding depuis les départs de chaîne implémenté. Mesure QC-Py : unreachable 42 → 0 (chain_starts: 46, l'arc 01→41 couvert depuis QC-Py-01).
    • Écart documenté vs proposition : le critère strict « un tel départ atteint toute la série » ne résout pas QC-Py lui-même (01 atteint 42/55 non-entrées — la sous-chaîne Cloud-* n'est atteignable que depuis ses propres entrées). Et un îlot mutuel oublié (07↔08, test épinglé) est isomorphe à la forme QC-Py vu des liens. Décision : le départ de chaîne certifie sa composante navigable, mais la déconnexion est rapportée par un nouveau finding independent_chain (clé = série) — la série ne devient jamais silencieuse. Le test épinglé du cycle détaché reste rouge, sous ce nouveau kind.
    • Scan complet : unreachable 53 → 21 (32 faux positifs mutuels éliminés au-delà des 42 QC-Py). Tests : 37 passed (3 nouveaux + 1 épinglé réécrit), sœurs 112 passed.

    Câblage CI de l'organe (aucun workflow ne l'appelle) : possible désormais, grain séparé.

  3. added a commit that references this issue on Sep 24, 2026
  4. added a commit that references this issue on Sep 28, 2026
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

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions