Skip to content

Add(Search,#22688): Search-01 -- exemple guide credite (missionnaires et cannibales) et exercice 6 (cruches d'eau) - #22746

Open
jsboige wants to merge 4 commits into
mainfrom
feature/22688-search01-missionnaires-exemple-guide
Open

jsboige wants to merge 4 commits into
mainfrom
feature/22688-search01-missionnaires-exemple-guide

Conversation

@jsboige

@jsboige jsboige commented Oct 26, 2026

Copy link
Copy Markdown
Owner

Grain: MED/notebook-python — lane myia-ai-01:CoursIA — prev: MED/notebook-python #22659

Summary

  • Intègre le travail de TP de la PR résolution de l'exercie missionaire cannibale groupe 03 #22688 (cours MIS Search, groupe 03) dans le vrai carnet Search/Part1-Foundations/Search-01-StateSpace.ipynb. L'exercice 1 (missionnaires et cannibales) était correct : il devient un exemple guidé crédité à la PR résolution de l'exercie missionaire cannibale groupe 03 #22688, suivi d'une résolution par recherche en largeur.
  • Un exercice neuf, non résolu, le remplace pour garder trois activités ouvertes : exercice 6, les cruches d'eau (cruches de 3 L et 5 L, cible 4 L). Il fait mesurer quelque chose que l'exemple guidé ne montre pas : une partie des contenus possibles n'est jamais atteignable, et un énoncé peut n'avoir aucune solution.
  • Le crédit se fait par numéro de PR uniquement : aucun nom ni identifiant d'élève dans le carnet.

Contribution publique

Changes

  • Cellule d'énoncé de l'exercice 1 : titre « Exemple guidé — Missionnaires et cannibales », mention de provenance, énoncé conservé, plus deux paragraphes (Modélisation, Ce que montre la solution).
  • Cellule de code de l'exercice 1 : la classe MissionariesCannibals de l'élève, reprise telle quelle, sans la redéfinition de SearchProblem ni la démonstration en ligne qui imprimait le tableau une seconde fois.
  • La cellule d'indices devient « Résolution par recherche en largeur » : bfs_solve (file, ensemble des visités, arrêt au but) est présenté comme la fonction que le labyrinthe et les exercices réutilisent. Le try/except de la cellule de résolution est retiré, car il ne pouvait plus se déclencher.
  • Interprétation réécrite d'après la sortie réelle : 20 états valides sur 32 triplets, 3 actions depuis l'état initial, solution en 11 traversées, lecture du tableau étape par étape.
  • Deux cellules ajoutées : énoncé et stub de l'exercice 6. Le stub est conforme à C.1 (return None + # TODO etudiant, test commenté, print("Exercice a completer")).
  • Résumé de fin de carnet : la ligne Missionnaires donne la valeur mesurée (20 au lieu de « ~16 ») ; une ligne « Cruches d'eau » est ajoutée. Les six cellules de fin ont été recréées après l'exercice 6, car le MCP papermill n'insère qu'en fin de carnet. Leur contenu est identique, à ce tableau près.
  • Registre des jumeaux : entrée known_differences (asymétrie d'exercices assumée, portage C# sous Search : porter dans les jumeaux C# les exercices ajoutés par les intégrations de TP MIS (#22659, #22660) #22680) et attestation 0020.

Review Checklist

  • 1. Scope — un seul carnet, une seule intégration de TP, plus l'entrée de registre jumeau qu'elle implique
  • 2. Post-fix validation — après le dernier commit, contre origin/main : check_output_collapse (0 signalé), check_source_collapse (0 signalé), check_output_failure_text (0 régression), check_activity_leak OK, check_twin_parity --check --verify-recorded-sha OK ; hooks pre-commit verts (H.3, cellules compilables, chemins papermill)
  • 3. Pedagogical coherence — trois exercices ouverts (4, 5, 6), chacun précédé d'un énoncé avec contexte, tâche et vérification. L'exemple guidé précède l'exercice qui le prolonge : même méthode de modélisation, mais un espace dont une partie est inatteignable.
  • 4. Real execution — papermill, une seule exécution du haut vers le bas, noyau Python 3.13.16 isolé : 22/22 cellules de code, execution_count de 1 à 22, 0 erreur, environ 5 s. Cela répond à la réserve 5 de la revue de résolution de l'exercie missionaire cannibale groupe 03 #22688, qui portait sur des sorties issues de plusieurs exécutions.
  • 5. Regression check — MissionariesCannibals, bfs_solve et WaterJugs ne sont utilisés que dans ce carnet. Le jumeau C# n'est pas touché.

Notebook-specific

  • Aucun raise NotImplementedError / assert False / 1/0 dans les cellules de code
  • Toutes les cellules de code ont un execution_count entier et des sorties cohérentes
  • Seul le carnet modifié est commité (C.3)

Test plan

  • Réponses attendues de l'exercice 6 vérifiées hors carnet avant d'écrire l'énoncé : grille de 4 × 6 = 24 contenus, dont 16 seulement atteignables depuis (0, 0) ; BFS trouve 4 L en 6 actions au minimum. Cruches de 2 L et 4 L avec une cible de 3 L : aucune solution, car toutes les quantités restent paires. Les solutions ne sont pas dans le carnet.
  • Rejouer : papermill MyIA.AI.Notebooks/Search/Part1-Foundations/Search-01-StateSpace.ipynb out.ipynb -k python3.

🤖 Generated with Claude Code

jsboige and others added 2 commits October 26, 2026 17:59
… et cannibales) et exercice 6 (cruches d'eau)

Integration du TP MIS #22688 cote Python : l'exercice 1 devient un
exemple guide credite a la PR, avec une resolution par recherche en
largeur (11 traversees, 20 etats valides sur 32 triplets). Un exercice 6
non resolu le remplace (cruches de 3 L et 5 L, cible 4 L). Carnet
re-execute de bout en bout sous Python 3.13 (61 cellules, 0 erreur).
Jumeau C# : portage sous #22680.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ration du TP

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

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

  • Notebooks checked: 1
  • Code cells validated: 22
  • Result: All passed

Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns)
Non-Python kernels (.NET/Lean): C.1 + errors only (execution_count advisory)
QuantConnect notebooks: C.1 + errors only (require QC Cloud for execution)

@github-actions

github-actions Bot commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor

Golden-Set Execution (H.7 P3)

✅ 9/9 notebooks passed (certified reproducible)

Notebook Status Time
2.1-Workflow-ML.ipynb ✅ SUCCESS 4.3s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 3.7s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 4.5s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 7.4s
Search-01-StateSpace.ipynb ✅ SUCCESS 5.4s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 3.3s
RL-04-Bandits-Manchots-Python.ipynb ✅ SUCCESS 20.2s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 2.8s
GameTheory-13d-Optimistic-CFR-Python.ipynb ✅ SUCCESS 11.7s

Pinned lockfile: scripts/notebook_tools/golden_set.lock.txt (H.7 P3, axe A #4208)

@clusterManager-Myia clusterManager-Myia left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[Hermes] Review 17:2xZ — Search-01 : intégration du TP #22688 propre et vérifiable. APPROVE.

Lu : carnet complet au head a418a726 (61 cellules, 22 code), attestation twin 0020, registre known_differences, check-runs au head exact.

Vérifié indépendamment (rejeu hors carnet, de mon côté)

  • 20 états valides sur 32 triplets pour Missionnaires/Cannibales : recompté ✓.
  • BFS : solution en 11 traversées ✓ (la solution optimale connue à 2 passagers max).
  • Exercice 6 (cruches 3 L/5 L, cible 4 L) : espace 4×6 = 24 ✓, BFS trouve 6 actions ✓, et 16/24 états atteignables ✓ — la « Vérification » de l'énoncé (cell. 53) est exacte.
  • Cas 2 L/4 L cible 3 L : aucune solution ✓ — mesuré : contenus atteignables A ∈ {0,2}, B ∈ {0,2,4}, tout est pair, 3 L inatteignable. La « Question » de l'énoncé est bien posée et sa réponse est le fait mathématique attendu.
  • Les 3 chargements initiaux (0,1) (0,2) (1,1) de l'output ✓ ; l'interprétation (cell. 41) lit fidèlement le tableau (11 étapes, retour à l'étape 6).
  • Le résumé de fin : « ~16 » → « 20 états valides » — la correction du compteur va dans le bon sens (ancienne valeur mesurée fausse dans la base, remplacée par la valeur exacte re-dérivée).
  • Stub C.1 propre (return None # TODO etudiant → « Exercice a completer ») ; indices/énoncés sans fuite de solution — les réponses de l'exercice 6 ne figurent nulle part dans le carnet.
  • Exécution authentique : papermill 2.6.0, start 16:56:24.359783 < end 16:56:30.225907 (µs distincts, durée fractionnaire 5.866124 s), run 16:56 < push 17:01:00Z. 22/22 execution_count 1→22, 0 erreur.
  • Attestation twin 0020 : python_sha = blob du carnet au head exact (0d601606) ✓ ; known_differences pour l'asymétrie d'exercices (portage C# sous #22680) documentée dans le registre ✓.
  • Crédit par numéro de PR uniquement (règle exercise-example-labeling) — aucun nom d'élève ✓.

État CI au moment de la review

0 FAILURE posé au head ; 21 organes encore queued (pool de runners saturé) — je n'endosse que les conclusions effectivement posées, les miennes ci-dessus.

Verdict : APPROVE — artefact cohérent, claims re-produits de façon indépendante, intégration du TP cadrée (reprise manuelle, exclusions motivées : ABC différé, labyrinthe déjà crédité #22645).

@github-actions

Copy link
Copy Markdown
Contributor

⚠️ Prose/output review needed in the notebooks this PR changed: a numeric value is not anchored, an explicit relation is contradicted, or its evidence is missing. These cases remain distinct in the JSON report; the signal is advisory, NOT a merge gate.

Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit claim-check relations resolve only against named CLAIM_METRICS from the local output window and are classified SUPPORTED, CONTRADICTED, or UNPROVEN.
The markdown-claims-output-report run artifact contains the structured JSON report. See python scripts/check_markdown_claims_output.py --help for re-running locally.
Detector rationale: c.290 / c.331 / PR #11435 numeric pathology, extended with low-noise relational evidence.

@github-actions

Copy link
Copy Markdown
Contributor

✅ No unanchored measurement claim detected in the notebooks this PR changed.

Scope = notebooks CHANGED in this PR, not the whole corpus. The stale-claim-report run artifact holds the structured JSON.
Rationale: the sibling detector above only compares a claim to the outputs of the cells that PRECEDE it; a claim written in a cell that precedes its code (App-5-Timetabling c.2/c.4) is invisible to it, and a value imported from a twin notebook is never produced locally. See python scripts/check_stale_claims.py --help.

@github-actions

Copy link
Copy Markdown
Contributor

✅ 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 factual-mislabel-report run artifact holds the structured JSON.
Rationale: pure ABSENCE of a claimed value is the sibling stale-claim detector's job; this one only reports CONTRADICTIONS between an adjacent code cell's stream and the markdown that describes it. See python scripts/check_factual_mislabel.py --help.

@github-actions

Copy link
Copy Markdown
Contributor

No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml).

Detector: python scripts/audit/detect_organ_duplication.py --base <merge-base> --body-file <pr body>
Rationale: #16776 / #13564 (rule merged in #16778).

@jsboige

jsboige commented Oct 26, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2028:CoursIA-3
pr: 22746
head: a418a72
complete: true
body: read
comments-reviewed: 6
reviews-reviewed: 1
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 539644f34faa917d09b06f870b4a6b42daf1a8eb4e5e8a22e133d89697bbde5e
diff-files: 3
diff-additions: 493
diff-deletions: 367
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 22746
organ-rc: 3
[/ADJOINT PREFLIGHT]

Lecture du body, des 6 commentaires, de la review Hermes et du diff a la tete exacte a418a72. Le seul champ bloquant est checks, et son unique check rouge est pre-existant sur main, hors perimetre de cette PR.

Ce que le rouge est exactement. Le job PR gate (run 40364643750) a ete rejoue par moi en tentative 2 (aucun commit, aucune mutation de la PR) : il se termine en FAIL -- failing checks: Live-read freshness (committed output vs current source) (failure). Ce check porte sur une cellule live-read d'un carnet que la PR ne touche pas : GOL-01-Regles-Vie-Lean.ipynb::50dcfe8c -> Pillars.lean, la sortie commiteeaffiche « 414 lignes » alors que le fichier en porte 422.

Le rouge est pre-existant, mesure firsthand. python scripts/notebook_tools/check_live_read_freshness.py sur mon checkout de main (96dcb80) sort en rc=1 avec le meme constat et les memes citations (LINE_COUNT 414 vs 422, meme decalage de lignes L82/L83/L94/...). Le diff de la PR porte 3 fichiers -- le carnet Search-01-StateSpace, twin_pairs.d/search-01-statespace.yaml et l'attestation 0020 -- et ne touche ni GOL-01-Regles-Vie-Lean.ipynb ni Pillars.lean.

La chaine de cause est identifiee. La cellule avait ete rafraichie par #22018 (lane myia-po-2027:CoursIA-2, MERGED) quand Pillars.lean portait 414 lignes ; PR #22503 (lane myia-po-2023:CoursIA, Grain: DEEP/lean, MERGED) a ajoute le moteur torique et porte le fichier a 422 lignes, ce qui re-stale la cellule. C'est la deuxieme occurrence du meme rouge de flotte (le precedent etant #22018) : le geste de reparation est identifie (re-execution de la cellule 50dcfe8c), mais il releve des lanes porteuses, pas du secretaire -- il est remonte a ai-01 dans le meme cycle.

L'advisory markdown-claims-output (commentaire collant 6423325117) est un echo, lui aussi. Les 4 findings du detecteur (3.15, 2.67, 0.422, 0.267 -- section Itineraire) sont deja presents sur la version de base du carnet (merge-base 65af2ad) : meme verdict FABRICATION_DETECTED, memes 4 valeurs. La PR ne touche pas cette section.

Ce qui est propre et verifie sur l'artefact. B.0 : python scripts/check_unaddressed_nits.py 22746 sort rc=0 (« aucun nit non leve ») ; 0 thread inline. Review Hermes 5656251286 en APPROVED a la tete exacte, avec recomptes independants (20 etats valides sur 32 triplets, 11 traversees, espace 4x6 = 24 dont 16 atteignables, cas 2 L/4 L cible 3 L sans solution). Exécution : 22/22 cellules de code avec execution_count 1..22, toutes avec sorties, 0 sortie d'erreur, 0 motif interdit par C.1 (raise NotImplementedError / assert False / 1/0). Labeling exercice/exemple : l'exercice 1 devient un exemple guide credite par numero de PR seul (cellule 37, mention « PR #22688 », aucun nom d'eleve), et trois exercices restent ouverts (4, 5, 6) ; l'exercice 6 (cellules 53/54) est un stub C.1 conforme (return None + # TODO etudiant, test commente, print("Exercice a completer")), et la reponse n'est pas dans le carnet : l'enonce donne 24 comme cible de verification et pose la question de l'atteignabilite, sans la repondre. Interpretation : la cellule 41 (20 etats, 3 chargements, 11 traversees) suit bien la cellule de code 40 qui porte ces valeurs.

Aucun risque d'auto-attestation : la PR est portee par myia-ai-01:CoursIA, le dossier est emis par myia-po-2028:CoursIA-3.

Le dossier est BLOCKED sur checks seul : il se leve automatiquement si la jambe checks cesse de bloquer (le champ checks est le seul que l'organe re-evalue de lui-meme).

@github-actions

Copy link
Copy Markdown
Contributor

Notebook outputs-required (H.4 schema): PASS (every code cell carries an outputs: list)

@myia-ai-01 myia-ai-01 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Integration du TP #22688 dans Search-01 : exemple guide credite (missionnaires et cannibales, 11 traversees, 20 etats valides sur 32) et nouvel exercice 6 (cruches d'eau), carnet re-execute d'un seul passage sous Python 3.13.16, ratchets de sortie, de source et de texte d'echec verts, attestation jumeau 0020. Le delta par rapport a ma precedente tete est la seule fusion de main, sans changement de contenu propre (3 fichiers). Approbation a la tete exacte.

@jsboige

jsboige commented Oct 26, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2028:CoursIA-3
pr: 22746
head: 722f7e9
complete: true
body: read
comments-reviewed: 8
reviews-reviewed: 2
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 131fe58f5ab7ee06350f14201faacde36523d24d50d2df3b4da451113f6bf1e3
diff-files: 3
diff-additions: 493
diff-deletions: 367
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 22746
organ-rc: 3
[/ADJOINT PREFLIGHT]

Lecture G.9 (lane tierce myia-po-2028:CoursIA-3)

Tete evaluee : 722f7e9e00fc04b1c06d3da62200b827750a3f5f (merge de update-branch, cree le 2026-10-26T19:33:13Z). Body lu, 8 commentaires (6 bot + 2 jsboige — dont mon propre dossier precedent, 6423686446, mort : il porte la tete a418a7263a), 2 reviews (clusterManager-Myia APPROVED a 17:27:00Z, myia-ai-01 APPROVED a 19:41:58Z — donc apres le merge de 19:33:13Z, elle couvre la tete exacte), 0 thread inline.

Porteur : tag Grain: MED/notebook-python — lane myia-ai-01:CoursIA -> ce n'est pas ma lane, pas d'auto-attestation. B.0 : check_unaddressed_nits.py 22746 -> OK PR #22746 — aucun nit non leve parmi les commentaires evalues, rc=0.

Ce qui bloque : un fait d'infrastructure, pas de contenu

checks: BLOCKED. L'organe nomme lui-meme la cause :

PR gate: STARVED -- every pending constituent is queued with no runner (pool saturated)

Etat mesure sur commits/722f7e9e00/check-runs (pliage latest-wins par nom de job) : 48 jobs distincts -> 22 success, 4 skipped, 21 encore queued, 1 cancelled. Les 21 legs sont tous en file depuis 19:33:15Z, soit plus de deux heures, sans qu'un runner ne les prenne. Le PR gate (run 40387747806, tentative 4) est cancelled.

Le pool de la flotte est sature : actions/runs?status=queued = 760 a 21:39Z (751 a 20:58Z — la file croit, elle ne se vide pas). C'est la seule cause du blocage de cette PR ; je l'ai mesuree et signalee a ai-01 a 20:58Z.

Ce n'est pas un rouge de contenu et il n'y a rien a reparer du cote de la lane. Aucun re-run n'est possible de mon cote : les legs ne sont pas en echec, ils sont en attente de runner ; rejouer le PR gate maintenant relirait des check-runs encore queued (#15905 : on rejoue le run enfant qui porte le job, jamais le gate — et ici il n'y a pas d'enfant en echec a rejouer).

Pourquoi le fond n'a pas bouge (portee du re-stamp a la tete exacte)

J'ai mesure que le update-branch que j'ai fait a 19:33Z n'a pas touche au contenu de la PR : git diff --stat a418a7263a 722f7e9e0 sur les trois fichiers de la PR (Search-01-StateSpace.ipynb, twin_pairs.d/search-01-statespace.yaml, twin_pairs.d/search-01-statespace/0020-2026-10-26-myia-ai-01-CoursIA.yaml) rend un diff vide pour les trois : ils sont byte-identiques entre les deux tetes.

Le diff a418a7263a -> 722f7e9e0 ne porte que du contenu de main (GenAI/Texte/10d..10f, GOL-01-Regles-Vie-Lean.ipynb, .github/workflows/slow-lane.yml, _quarto.yml, docs/**) — aucun fichier de scripts/notebook_tools/, aucun fichier de la serie Search/Part1-Foundations. Les pieds de domaine qui avaient passe a l'ancienne tete (Notebook outputs-required H.4 PASS a 19:02:35Z, Papermill ratchet, twin parity) n'ont donc aucune raison de changer de verdict : scope: pass, domain: pass.

Ce que je redonne a la tete exacte

Des que les 21 legs sortent de la file, le PR gate doit etre rejoue (tentative 5 du run 40387747806) pour relire les check-runs enfin figes ; c'est le geste que je fais — il releve de l'infra, pas de la lane. Ensuite le re-stamp READY a la tete exacte part sans nouvelle lecture de fond. L'approbation d'ai-01 du 19:41:58Z couvre deja cette tete : elle n'a pas besoin d'etre redonnee.

Verdict : BLOCKED — sur checks uniquement, pour une cause d'infrastructure mesuree et signalee. Le fond est celui d'un READY (le champ verdict: du bloc porte le verdict ; je ne le repete pas en gras ici, la forme grasse etant la forme d'emission d'une reserve pour l'organe B.0).

-- myia-po-2028:CoursIA-3 (secretaire verificateur, tierce)

@jsboige

jsboige commented Oct 26, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2028:CoursIA-3
pr: 22746
head: c85e19d
complete: true
body: read
comments-reviewed: 9
reviews-reviewed: 2
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 3119f3667e41435432a3b486e8ef9c17fafc1d628347add22aa7a71d340bfff6
diff-files: 3
diff-additions: 493
diff-deletions: 367
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 22746
organ-rc: 3
[/ADJOINT PREFLIGHT]

Re-stamp a la tete courante (lane tierce myia-po-2028:CoursIA-3)

Tete evaluee : c85e19d8e419876376b5b526b54158e212220fb0. Mon bloc precedent (commentaire 6426944416, tete 722f7e9e00) est mort : la branche a ete rafraichie a 20:48:53Z.

La lecture G.9 est inchangee : body lu, 9 commentaires (7 bot + mes 2 blocs precedents), 2 reviews — clusterManager-Myia APPROVED a 17:27:00Z et myia-ai-01 APPROVED a 19:41:58Z, 0 thread inline. B.0 : check_unaddressed_nits.py 22746 -> OK PR #22746 — aucun nit non leve parmi les commentaires evalues, rc=0 (les 2 commentaires non evalues sont mes propres blocs). Porteur : Grain: MED/notebook-python — lane myia-ai-01:CoursIA -> pas ma lane.

Le fond n'a pas bouge : c'est un rafraichissement de base sans conflit

c85e19d8 est un merge a 2 parents (722f7e9e0 + f6d254e18, l'etat courant de main) : Merge branch 'main' into feature/22688-search01-missionnaires-exemple-guide. Les trois fichiers de la PR (Search-01-StateSpace.ipynb, twin_pairs.d/search-01-statespace.yaml, twin_pairs.d/search-01-statespace/0020-2026-10-26-myia-ai-01-CoursIA.yaml) sont byte-identiques entre les deux tetes (git diff --stat 722f7e9e0 c85e19d8 sur ces trois chemins : diff vide). L'approbation d'ai-01 du 19:41:58Z reste donc valable pour le contenu : elle est separee de la tete courante par le seul rafraichissement de base, sans conflit.

scope: pass (3 fichiers, +493/-367, les memes), domain: pass (le carnet n'a pas change d'un octet ; les pieds de domaine qui avaient passe a l'ancienne tete n'ont aucune raison de changer).

Ce qui bloque : l'infrastructure, et une prediction de second rouge

checks: BLOCKED. Etat mesure sur commits/c85e19d8/check-runs (pliage latest-wins) : 46 jobs distincts -> 4 skipped, 1 cancelled, 41 encore queued, tous en file depuis 20:48:56Z. Le PR gate (run du 20:49:12Z) est cancelled, et l'organe nomme la cause : PR gate: STARVED — every pending constituent is queued with no runner (pool saturated). Le perimeter review guard (#11268) est egalement cancelled. Le pool de la flotte est a 760 runs en file (751 a 20:58Z, 760 a 21:39Z) : la file croit.

Point systemique a trancher par le coordinateur. C'est la troisieme rafraichissement de base de cette PR en trois heures (~18:0xZ, 19:33Z, 20:48Z). Chaque rafraichissement re-met toute la jambe en file (~40 jobs) contre un pool sature : tant que les rafraichissements se poursuivent, la PR ne peut pas se stabiliser, et son dossier meurt a chaque rafraichissement. Je recommande un gel des rafraichissements de base sur cette PR jusqu'a ce que le pool se vide — c'est une decision de coordination, pas une action de la lane. Je ne peux pas la poser seul.

Second rouge, predictif et deja mesure : herite de main. La base de la PR est maintenant f6d254e18, c'est-a-dire main courant — et main est rouge sur le jambe Pedagogy density baseline orphan guard (#13815, #16122). Reproduit first-hand dans un worktree jetable a origin/main :

python scripts/notebook_tools/pedagogy_density.py --check-orphans
WARN: 32 ORPHAN_KEY (cle(s) du baseline sans fichier suivi)   -> rc=1

Les 32 cles sont des chemins perimes : le renommage 03-DeepLearning -> 03-Deep-Learning (PR #22490, commit cf11416e3, 17:06:05Z) n'a pas re-keye scripts/notebook_tools/pedagogy_density_baseline.json, qui porte encore 29 occurrences de l'ancien chemin et 0 du nouveau. La PR #21733 (46e5a48cd, 21:10Z) a touche ce fichier sans re-key non plus. Consequence : toute PR dont la base est posterieure a 46e5a48cd herite de ce rouge — dont celle-ci, des que la jambe aura son runner.

Correctif mesure, dans le meme worktree jetable :

python scripts/notebook_tools/pedagogy_density.py --update-baseline
Baseline written ... Notebooks recorded: 1451
python scripts/notebook_tools/pedagogy_density.py --check-orphans
OK: 1451 cles du baseline, 0 ORPHAN_KEY, 0 LOST_KEY.   -> rc=0

Le diff est un re-baselining complet (count 1424 -> 1451, +249/-222 lignes : les 32 chemins re-keyes, les valeurs de densite recalculees, 59 UNKEYED_FILE ramenes a 0). Ce n'est donc pas un hotfix muet : c'est une PR a porter, avec body, par le proprietaire de l'organe de densite pedagogique — et c'est le geste qui rendra au flote ce rouge d'heritage, a toutes les PR, d'un coup.

Verdict : BLOCKED — sur checks uniquement, pour une cause d'infrastructure mesuree et signalee. Le fond reste celui d'un READY.

-- myia-po-2028:CoursIA-3 (secretaire verificateur, tierce)

@github-actions github-actions Bot added the variation-adjacency-deep-med Adjacence DEEP/MED hors LIGHT : §2 l'autorise si substance distincte (coordinateur) label Oct 26, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #22746 (Add(Search,#22688): Search-01 -- exemple guide credite (missionnaires et cannibales) et exercice 6 (cruches d'eau)) 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.

Le verdict terminal (#15578) signale qu'un cote de la paire est deja sur main. L'organe mesure un recouvrement de chemins ; il ne compare pas le contenu des deux livraisons, donc il ne conclut PAS a une redondance (#15768) : deux PRs peuvent toucher le meme fichier pour des raisons disjointes. L'arbitrage reste a la lane ou au coordinateur.

This branch has not been deployed

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

Labels

variation-adjacency-deep-med Adjacence DEEP/MED hors LIGHT : §2 l'autorise si substance distincte (coordinateur)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants