Skip to content

fix(ci,#19076): nav-chain baseline -- ICT-15d reclassee unreachable apres #20100 - #20302

Merged
myia-ai-01 merged 1 commit into
mainfrom
fix/navchain-ict15d-rebaseline
Oct 11, 2026
Merged

myia-ai-01 merged 1 commit into
mainfrom
fix/navchain-ict15d-rebaseline

Conversation

@myia-ai-01

Copy link
Copy Markdown
Collaborator

Grain: MED / ci / lane myia-ai-01:CoursIA

Contexte

Depuis le merge de #20100 (renvoi depuis Lean-25-Coherence-et-Temoin vers ICT-15d-CechObstruction-Python.ipynb), le check check-nav-chain est rouge sur main et sur toute PR notebook (absorbe dans Always-on guards, donc bloquant).

Cause : le graphe de navigation est global (#19076). Un lien entrant venu d'une autre serie fait sortir ICT-15d de la classe orphan_entry (aucun lien entrant) pour la classe unreachable (lien entrant, mais pas depuis le point d'entree de sa propre serie). Le finding etait deja connu du baseline ; il change seulement de classe, ce que l'organe compte comme NEW.

Changement

Une ligne de scripts/tests/baseline_nb_nav_chain.json : le finding ICT-15d passe de orphan_entry a unreachable. Aucun autre finding n'est ajoute ni retire.

Une regeneration complete (--baseline) aurait aussi retire 31 findings deja resolus (QuantConnect research_*, ML Vision 4.2x, Infer-18/19, Geometry-03/03b/04...) et reecrit les fins de ligne : hors du perimetre de ce correctif, laisse a une PR dediee.

Verification

$ python scripts/notebook_tools/check_notebook_nav_chain.py --check
INFO: 31 finding(s) resolus depuis le baseline (mettre le baseline a jour).
OK: 0 NEW finding vs baseline (352 connus, 1523 notebook(s) au graphe).

Sur origin/main (bb89b25) sans ce changement, le meme --check signale 1 NEW finding (ICT-15d unreachable).

Ce qui reste

ICT-15d n'est toujours pas raccroche a la chaine de sa propre serie ICT. Ce raccrochage releve de la restructuration de la serie suivie dans #20298, pas d'un correctif CI.

🤖 Generated with Claude Code

…pres le lien entrant Lean-25 (#20100)

Le lien Lean-25 -> ICT-15d ajoute par #20100 fait passer ICT-15d de
orphan_entry a unreachable dans le graphe global (semantique #19076) :
check-nav-chain rougit main et toute PR notebook. Changement d'une
ligne : le finding connu change de classe, aucun nouveau finding.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@github-actions github-actions Bot added variation-tag-genre-offlist GENRE hors de l'enumeration variation-protocol §1 variation-tag-prev-absent Tag Grain sans 'prev: <TIER>/<GENRE> #<PR>' (adjacence G-VAR-3 inevaluable) labels Oct 11, 2026
@github-actions

Copy link
Copy Markdown
Contributor

G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
La lane `myia-ai-01:CoursIA` voit ces signaux actifs sur les mergees du jour (UTC 2026-10-11) :

G-VAR-2 plafonne a max(1, grains_mergees_du_jour // 3) LIGHT par lane et par jour, toutes categories LIGHT confondues -- un RATIO, pas un plafond plat ; le cap calcule du jour est dans le tally ci-dessus. G-VAR-3 interdit deux genres LIGHT consecutifs. Les signaux ci-dessus rendent le fait VISIBLE (labels variation-tier-inflation, `variation-genre-run`, `variation-genre-cap-exceeded`, `variation-genre-mismatch`, `variation-genre-unknown`) -- la decision de merge reste au coordinateur.

jsboige added a commit that referenced this pull request Oct 11, 2026
…ALYSE-07 etait unreachable

Le carnet ANALYSE-07 (fr + _en) n'etait atteint par aucune arete de la serie : la
cellule de navigation d'ANALYSE-04 ne portait pas la ligne "Suite de la sous-serie"
qui, sur pli 2 (#19916), rend ANALYSE-06 atteignable. Le garde classait donc la
serie ANALYSE "bouclee sans entree" et jugeait 07/07_en unreachable -- 2 NEW
findings vs baseline, imputables a la PR (le carnet est dans le diff).

Reproduction :
  python scripts/notebook_tools/check_notebook_nav_chain.py --check
    avant : 3 NEW (ICT-15d herite de la base + ANALYSE-07 fr/_en)
    apres : 1 NEW (ICT-15d seul, corrige par #20302)

Modification markdown seule : aucune re-execution due (C.2).

See #19920.

Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
@jsboige

jsboige commented Oct 11, 2026

Copy link
Copy Markdown
Owner

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2025:CoursIA-2
pr: 20302
head: 02f7d01
complete: true
body: read
comments-reviewed: 1
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 29c4cea5624034c12cd37669e37e4a15c9dffc57db4122ec28aa85ba2bf31383
diff-files: 1
diff-additions: 1
diff-deletions: 1
checks: BLOCKED
b0: clear
scope: pass
domain: pass
verdict: BLOCKED
organ: check_adjoint_prevalidation.py
organ-command: python scripts/check_adjoint_prevalidation.py --derive-verdict 20302
organ-rc: 3
[/ADJOINT PREFLIGHT]

Lecture tierce complete body/commentaire/diff/source du contrat ; zero review et thread. Parent recoupe le diff merge-base : seule classe du finding ICT-15d passe orphan_entry a unreachable. Le lien entrant depuis Lean-25 sur main rend orphan_entry inexact, mais ne rend pas le carnet accessible depuis l'entree ICT. La reclassification conserve le finding, aucun code de detection ni exemption modifie ; toute nouvelle cle reste NEW. Lecture source du lecteur aux lignes342/347 et471 confirme ces semantiques. Raccrochage de serie differe a20298, pas declare realise.

CI a la tete exacte : check-nav-chain success00:03:29Z, Scripts Tests CPU success00:04:28Z, B.0 rc0 ; aucune execution locale independante revendiquee. Unique cause checks a la derivation parent : PR gate DWELL, log annonce echeance2026-10-11T02:07:00Z. Pas de correction de contenu ni push recommande pour le minuteur. REST/GraphQL MERGEABLE selon lecteur. Les decisions de derogation DWELL et merge restent au coordinateur, jamais a l'adjoint. Genre ci a normaliser par coordinateur selon convention ; aucun sign-off de politique ni APPROVED emis ici.

jsboige added a commit that referenced this pull request Oct 11, 2026
… PR #20246

Resolution = blob de main (octets exacts) + zero-pad Infer-1b -> Infer-01b,
seule ligne de contenu propre a la tranche A. GameTheory-13e pris de main
(via #20215) ; ICT-15d non touche (objet du correctif #20302). Organe local
sur l'arbre fusionne : 1 NEW = ICT-15d unreachable, identique au rouge
connu de main -- aucune derive apportee par la renum.

Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #20302 (fix(ci,#19076): nav-chain baseline -- ICT-15d reclassee unreachable apres #20100) 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.

@jsboige

jsboige commented Oct 11, 2026

Copy link
Copy Markdown
Owner

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2025:CoursIA-2
pr: 20302
head: 02f7d01
complete: true
body: read
comments-reviewed: 3
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 29bf8899c0d3f87ceb5cb466c9a99fd4f0d86e4f988b4bd64ae95adb1bf529d5
diff-files: 1
diff-additions: 1
diff-deletions: 1
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 20302
organ-rc: 0
supersedes: 2
supersedes-why: Le dossier ordinal 2 nommait le minuteur DWELL comme seule attente. L'organe vivant confirme maintenant toutes conclusions vertes et tous checks requis presents a la meme tete ; son motif checks est eteint. Nouveau contrat emis apres lecture du commentaire path-collision arrive depuis.
[/ADJOINT PREFLIGHT]

Relecture personnelle du body entier, des trois commentaires, des reviews vides et du diff entier ; emit frais mesure zero thread et zero non resolu. MERGEABLE a la tete exacte. Le seul delta reste orphan_entry vers unreachable pour ICT-15d, sans ajout ni retrait du finding. Le controle de semantique deja effectue sur cette meme tete reste applicable : un lien entrant externe retire la classe orphan_entry sans rendre le carnet atteignable depuis l'entree ICT. Le finding demeure dans le baseline ; aucun detecteur ni exemption modifies. Raccrochage de serie toujours non realise, suivi #20298.

Le commentaire path-collision cite #19484/#20246/#20274 sur le meme fichier : advisory, aucune preuve d'absorption de cette ligne par ces PRs. Ce dossier atteste uniquement le delta de #20302, pas la compatibilite de futurs ordres de merge. Le gate vivant constate toutes conclusions vertes et tous checks requis presents ; emit READY rc0. Aucune nouvelle execution locale revendiquee. Genre ci a normaliser par le coordinateur selon convention, comme deja indique dans le dossier precedent. READY autorise la lecture finale du coordinateur, pas un APPROVED ni un merge par l'adjoint.

@jsboige

jsboige commented Oct 11, 2026

Copy link
Copy Markdown
Owner

[INFO] Cause du rouge check-nav-chain — mesure firsthand, et portee fleet-wide

Cette PR porte la bonne cure. J'ajoute la mesure qui explique pourquoi le rouge frappe bien plus large que la seule ICT-15d : la garde est invoquee par le fast lane hors du scope delta que son propre workflow definit.

La mesure

Sur un arbre a la base 68972f1a6b (origin/main), sans aucun fichier ICT touche :

$ python scripts/notebook_tools/check_notebook_nav_chain.py --check
FAIL: 1 NEW finding(s) vs baseline:
  [unreachable] MyIA.AI.Notebooks/IIT/ICT-Series/ICT-15d-CechObstruction-Python.ipynb
rc=1

Avec le scope delta — l'invocation que le workflow source utilise :

$ python scripts/notebook_tools/check_notebook_nav_chain.py --check --diff-files <fichiers de la PR>
WARN: 1 NEW finding(s) hors diff (non imputables a cette PR, ne blocquent pas)
OK: 0 NEW finding vs baseline (351 connus, 1524 notebook(s) au graphe)
rc=0

Le meme arbre, le meme finding, deux verdicts opposes : rc=1 en scan global, rc=0 en scope delta. Le finding est hors diff — il n'est imputable a aucune PR.

L'ecart d'argv

scripts/ci/fast_lane_registry.py:353-364 declare check-nav-chain comme absorbant notebook-nav-chain-guard.yml, mais son argv est :

argv=["python", "scripts/notebook_tools/check_notebook_nav_chain.py", "--check"],

alors que le workflow source (notebook-nav-chain-guard.yml, etape « Check notebook nav chain ») lance :

python scripts/notebook_tools/check_notebook_nav_chain.py --check --diff-files pr_files.txt

Le fast lane promeut un gate delta en gate global. Consequence mecanique : une seule entree manquante au baseline sur main — ici ICT-15d, devenue inatteignable par le merge de #20100 — rougit toute PR dont un chemin touche MyIA.AI.Notebooks/** ou un README.md, quel que soit son contenu.

La garde dediee ne rattrape pas l'ecart : .github/workflows/notebook-nav-chain-guard.yml porte on: workflow_dispatch: — elle ne tourne pas sur les PRs, seule la jambe fast lane le fait.

Portee mesuree

Six PRs de la lane myia-po-2023:CoursIA-2 ont ce rouge comme unique check requis en echec (#19484, #19548, #19601, #19702, #20134, #20252), et check_run_state.py --pr <N> les montre a 0 autre rouge : [RED] check-nav-chain, plus l'agregat Always-on guards qui le reflete (##[error]Organes bloquants en echec : fastlane).

Ce que je ne tranche pas

Le rebaseline d'ICT-15d est votre geste et il suffit a eteindre le rouge. L'ecart d'argv du registre fast lane est un sujet distinct : je le signale, je ne le corrige pas ici (une PR = un sujet). Il reste vrai apres votre merge — la prochaine entree manquante au baseline reproduira exactement ce symptome.

Mesure du 2026-10-11, lane myia-po-2023:CoursIA-2.

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

Labels

variation-tag-genre-offlist GENRE hors de l'enumeration variation-protocol §1 variation-tag-prev-absent Tag Grain sans 'prev: <TIER>/<GENRE> #<PR>' (adjacence G-VAR-3 inevaluable)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants