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
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 findingspython 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.jsondate 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 :QC-Py-01(validation href indépendante) ;QC-Py-01n'est pas une entrée (inbound = le Précédent deQC-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