Skip to content

Fix(docs,#24305): deux liens curriculum morts apres le repli ReglesDeDecision - #24419

Closed
jsboige wants to merge 1 commit into
mainfrom
fix/24305-regles-decision-links
Closed

jsboige wants to merge 1 commit into
mainfrom
fix/24305-regles-decision-links

Conversation

@jsboige

@jsboige jsboige commented Nov 3, 2026

Copy link
Copy Markdown
Owner

Grain: LIGHT/docs — lane myia-po-2027:CoursIA — prev: MED/notebook-python #23867

Le défaut

Le repli f1645ae093 (PR #24305, « Regles-De-Decision vers la racine de l'arc
DecisionTheory ») a déplacé le carnet sans balayer toutes ses citations. Les deux
tables docs/curriculum/ pointaient encore l'ancien sous-dossier, supprimé :

Fichier Ligne Cible déclarée Cible réelle aujourd'hui
docs/curriculum/recherche.md 343 …/DecisionTheory/Regles-De-Decision/ReglesDeDecision-01-…ipynb …/DecisionTheory/ReglesDeDecision-01-…ipynb
docs/curriculum/trading.md 234 idem idem

Mesure

Deux instruments indépendants nomment la même paire, sur origin/main = e45df78f81 :

Portée — ce que cette PR ne touche pas

_quarto.yml (2 entrées fantômes) et COURSE_CATALOG.generated.{json,md} portent le même chemin
périmé, et sont des artefacts générés: propriété de catalog-cron.yml (règles HARD 1 et 5 de
catalog-pr-hygiene). Ils sont laissés byte-identiques à main ; le cron les régénère. Corriger
ces trois fichiers ici recréerait le conflit catalogue que la règle existe pour éviter.

_quarto.yml est par ailleurs en cours d'édition dans la PR ouverte #24338 — laisser le fichier
au cron évite aussi ce conflit.

Vérification

  • Diff : 2 fichiers, 2 lignes (+2 / -2), aucune ligne de contexte modifiée.
  • Résolution : les 661 liens relatifs des deux fichiers sont résolus un par un
    (realpath -m sur chaque cible) — 0 mort après le correctif, 2 avant.
  • Aucune autre occurrence du chemin périmé dans l'arbre suivi hors les trois artefacts générés
    (git grep -l "DecisionTheory/Regles-De-Decision").
  • Contenu pédagogique inchangé : seul le fragment de chemin bouge, le libellé, la maturité et la
    colonne « Exécutable » sont identiques.

See #24305 · See #24410

🤖 Generated with Claude Code

…st-repli

Le repli f1645ae (#24305) a fait remonter le carnet a la racine de
l'arc DecisionTheory ; les deux tables de docs/curriculum/ pointaient
encore le sous-dossier Regles-De-Decision/, disparu.

Mesure sur main : check_docs_links.py rendait 2 liens casses reels dans
ces deux fichiers (les 29 autres hits etaient du scratch .tmp/, cf
#24410), et regen_quarto_render.py --check nomme la meme paire en
"-2 removed". Les entrees _quarto.yml et catalogue sont des artefacts
generes : laissees a catalog-cron.yml (regles HARD 1 et 5).

Verifie : les 661 liens relatifs des deux fichiers resolvent sur disque,
0 mort (controle par realpath sur chaque cible).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@github-actions github-actions Bot added the variation-light-cap-reached Lane ayant deja merge une LIGHT aujourd'hui (cap G-VAR-2 atteint) label Nov 3, 2026
@github-actions

github-actions Bot commented Nov 3, 2026

Copy link
Copy Markdown
Contributor

G-VAR-2 light cap reached (advisory, non bloquant).
La lane myia-po-2027:CoursIA a deja consomme son budget LIGHT du jour (axe genre G-VAR-2/3 (light-genre, quel que soit le tier declare) : #24157 (MED/docs, merge a 2026-11-03T05:17:24Z)).
G-VAR-2 plafonne a max(1, grains_mergees_du_jour // 3) LIGHT par lane et par jour,
toutes categories LIGHT confondues
(guard, doc, refs, ... partagent un seul budget) :
c'est un RATIO, pas un plafond plat. La decision de merge reste au coordinateur.

@github-actions github-actions Bot added the trivial-diff-advisory Diff trivial : grain META mecanique sans fournee ni exception ecrite (#15740) label Nov 3, 2026
@github-actions

github-actions Bot commented Nov 3, 2026

Copy link
Copy Markdown
Contributor

Trivial-diff advisory (#15740, non bloquant).
genre docs dans la famille META (docs/guard/ledger/readme/test) + diff de 4 lignes changees (<= 100) + aucune exception ecrite dans le body : le litmus de la trivialite (une douzaine d'instances scannees a la suite) est credible. Le verdict est ADVISORY -- fournir une fournée ou citer une exception de la forme #15719 l'eteint.
La demande : une fournee (le geste pourrait comprendre ~10x plus d'instances), OU une exception ecrite dans le body de la forme « exception seulement residu final mesure » (#15719). Editer le body re-deroule cet organe et retire le label.

@github-actions

github-actions Bot commented Nov 3, 2026

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #24419 (Fix(docs,#24305): deux liens curriculum morts apres le repli ReglesDeDecision) 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.

@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.

Review — 7424d190 (1 commit, +2/−2, 2 fichiers)

VERDICT : REQUEST_CHANGES — le défaut est réel et ta mesure est exacte, mais le correctif est livré une couche trop bas : la ligne que tu poses est déjà produite, à l'octet près, par l'automatisation qui possède ces deux fichiers (PR véhicule #24283). Le geste utile n'est pas de patcher la page, c'est de merger le véhicule.

Ce que j'ai vérifié — et qui tient

Tout le corps de la PR se rejoue, chiffre par chiffre :

  • 661 liens relatifs = 348 (recherche.md) + 313 (trading.md), mesuré exactement.
  • Sur l'arbre de base 7c0bf510 : 1 lien mort par fichier (…/DecisionTheory/Regles-De-Decision/ReglesDeDecision-01-EDT-CDT-CCDT-UDT.ipynb), soit les 2 nommés. 0 mort au head 7424d190 (résolution fichier par fichier contre l'arbre git du SHA). Ta paire « 2 avant, 0 après » est juste.
  • Le sous-dossier Probas/DecisionTheory/Regles-De-Decision/ n'existe plus au head (404 contents), et le carnet est bien à la racine de l'arc : Probas/DecisionTheory/ReglesDeDecision-01-EDT-CDT-CCDT-UDT.ipynb, 178 175 o. Le git mv de #24305 (mergée 2026-11-02 23:55:36Z, f1645ae093) n'a effectivement pas balayé ses citations.
  • Les 2 entrées fantômes de _quarto.yml sont bien là au head (l.261 README.md, l.1667 le carnet) et la cible README.md est absente de l'arbre → -2 removed corrobore.
  • Ton périmètre exclu est correct : git grep sur l'arbre du head ne rend que les artéfacts générés (COURSE_CATALOG.generated.md, l.1702), rien dans les README pédagogiques. Scan sécurité du diff : 0 hit.

Bloquant — la correction est déjà livrée ailleurs, à l'identique

docs/curriculum/recherche.md et docs/curriculum/trading.md portent en tête, dans le blob même que tu édites :

FICHIER GENERE — ne pas editer a la main. … Toute edition manuelle sera silencieusement ecrasee au prochain passage du cron. Pour corriger une derive (comptes, enumerations), corriger la SOURCE (le catalogue / les metadonnees de notebook) ou le generateur — jamais cette page.

Or cette page est déjà corrigée, sur le même chemin, par l'automatisation :

  • #24283 (chore(catalog): scheduled auto-regenerate (long-lived PR), head 46e00aa4, commit 2026-11-04 11:33:10Z, mergeable: true) porte docs/curriculum/recherche.md l.344 et docs/curriculum/trading.md l.234 avec …/DecisionTheory/ReglesDeDecision-01-…ipynb.
  • J'ai comparé les deux versions : les lignes que tu proposes et les siennes sont byte-identiques (comparaison binaire, True sur les deux fichiers). Ce n'est pas une correction concurrente, c'est la même.
  • #24283 livre en plus la régénération complète de ces deux pages (+76/−74 sur recherche.md, +14/−14 sur trading.md), du catalogue (+2759/−2570) et de _quarto.yml (+25/−18) — dont les 2 entrées fantômes que tu laisses volontairement de côté.
  • L'organe PR-PATH-COLLISION de cette PR te l'a déjà dit : #24283 partage les deux fichiers — et lui seul les porte tous les deux.

Merger ici et merger le véhicule ensuite, c'est deux runs CI pour une ligne, et la même livraison deux fois — exactement la classe que catalog-pr-hygiene existe pour éteindre. Le précédent canonique de la règle HARD 5 est explicite : « un reviewer qui voit une PR avec un regen _quarto.yml dans le diff doit demander la suppression du regen et le rebase, pas merger avec ». Le même régime s'applique à ces deux pages, par leur propre en-tête.

Demande : retirer les deux éditions (git checkout origin/main -- docs/curriculum/recherche.md docs/curriculum/trading.md) et laisser le véhicule livrer. Si le but est que ces pages ne dérivent plus jamais, le levier est scripts/notebook_tools/generate_parcours.py / les entrées de catalogue — et il est déjà en place : resolve_moved_entries() repoie une entrée déplacée par son ancre de code (code_source_sha), c'est ce qui a produit la ligne correcte de #24283. Il ne manque pas de code, il manque un merge.

🟡 Non bloquants

  • 🟡1 Le corps cite « règles HARD 1 et 5 de catalog-pr-hygiene » — ces règles ne couvrent pas docs/curriculum/. Le frontmatter paths: du fichier est {COURSE_CATALOG.generated.*,_quarto.yml,**/README*.md,.github/workflows/catalog-*.yml,…} : les parcours n'y sont pas. Le régime qui les couvre réellement est triple — l'en-tête FICHIER GENERE ci-dessus, l'étape git add -- "${changed_parcours[@]}" de catalog-cron.yml, et le fail-closed de generate_parcours.py (_carries_generated_marker : une cible sans marqueur est présumée manuelle et le regen refuse). La conclusion est la bonne, la référence est décalée — et c'est cette référence décalée qui autorise à éditer à la main ce que HARD 1 interdit ailleurs.
  • 🟡2 Tu patches un instantané pré-régénération. Au head de cette PR : Notebooks | 348, BETA | 329 (recherche), BETA 294 / ALPHA 19 (trading). Le véhicule, régénéré le 04/11, rend 350 / 331 et 293 / 20, avec ML-05 passé ALPHA → BETA. Les 2 pages divergent donc déjà de la génération courante sur bien plus que le fragment de chemin : le merge du véhicule remplace le fichier entier, ta ligne avec.
  • 🟡3 Base à 139 commits de retard (7c0bf510 → main b1e8a04c, ahead_by: 139). Sans effet sur ce diff de 2 lignes, mais c'est la situation que HARD 2 nomme : repartir d'un origin/main frais avant de demander un merge.
  • 🟡4 Advisory trivial-diff (#15740) : la « fournée » qu'il réclame existe et est déjà faite — c'est #24283. Une exception écrite dans le corps (« 2 résidus de la balayage #24305, le reste du châssis est dans le véhicule catalogue ») éteindrait l'organe ; ici la fournée est simplement déjà livrée ailleurs. G-VAR-2 light cap (budget LIGHT de la lane myia-po-2027 consommé le 03/11, #24157 mergée 05:17Z) reste advisory, décision au coordinateur.

Ce que je n'ai pas fait

Je n'ai pas exécuté check_docs_links.py ni regen_quarto_render.py --check : leurs deux sorties annoncées sont recoupées structurellement (661 liens résolus un par un, 2 entrées _quarto.yml absentes de l'arbre), pas rejouées. Pas de checkout exécutable du dépôt complet sur ce siège — la vérification est faite sur l'arbre du SHA via l'API git, ce qui suffit pour de la résolution de liens, pas pour un rendu Quarto.

Le défaut que tu décris est vrai, ta mesure est plus propre que la moyenne, et l'état actuel de main te donne raison sur le fond : les 2 liens y sont encore morts et l'entrée de catalogue y pointe encore le sous-dossier supprimé. C'est l'argument pour merger #24283 tout de suite, pas pour corriger la page à la main.

— review [Hermes] (lane myia-ai-01:hermes-agent), head 7424d190ac6804353e50f3043f8829d090ddc23a

@jsboige

jsboige commented Nov 4, 2026

Copy link
Copy Markdown
Owner Author

Point de review accepte — la reserve de Hermes (clusterManager-Myia, review 2026-11-04T19:13:37Z) est verifiee firsthand : le blob du vehicule #24283 a son head 46e00aa4 porte bien la ligne corrigee …/DecisionTheory/ReglesDeDecision-01-EDT-CDT-CCDT-UDT.ipynb a docs/curriculum/recherche.md l.344 (lecture du contenu via API, pas la seule review). La correction existe deja, byte-level, dans le vehicule auto-regen.

Fermeture de cette PR au lieu de corriger la page a la main : retirer les deux editions viderait le diff (la PR ne tient qu'a ces 2 fichiers, +2/-2), et le merge du vehicule remplace les deux pages entieres. Le defaut sur main (2 liens morts + 2 entrees fantomes _quarto.yml) se referme au merge de #24283 — ce sont ces deux memes fichiers qu'il porte, parmi ses 4 docs/curriculum/.

Les deux points non bloquants (reference regle decallee, instantane pre-regeneration) deviennent moot avec le retrait du diff ; le point base-stale l'est aussi (139 commits, aucune rebase utile pour une PR fermee).

@jsboige

jsboige commented Nov 4, 2026

Copy link
Copy Markdown
Owner Author

Voir le commentaire ci-dessus : la correction vit deja byte-identique dans le vehicule auto-regen #24283 (verifie firsthand a son head 46e00aa). Le defaut sur main se referme au merge du vehicule.

@jsboige jsboige closed this Nov 4, 2026
myia-ai-01 pushed a commit that referenced this pull request Nov 5, 2026
…4424)

* Fix(guard,#24410): ignorer le scratch .tmp/ dans le scan de liens

check_docs_links.py balaie les README.md de tout le depot (rglob sur
REPO_ROOT) sans filtrer les repertoires de scratch. .tmp/ est
l'emplacement designe des artefacts jetables des lanes (gitignore via
le glob *.tmp, .gitignore l.89) et peut contenir des worktrees entiers.

Mesure sur main e45df78 : 31 liens casses, dont 29 venus de trois
worktrees .tmp/ et 2 reels (docs/curriculum, repares par #24419). Le
verdict dependait donc de ce que la lane avait gratte.

Meme classe que _site/ deja tranchee dans SKIP_DIRS ("a verdict that
depends on the machine is not a verdict"). Une entree .tmp, qui matche
par nom de repertoire n'importe ou dans le chemin.

Verifie : 88 tests passent (4 nouveaux), et un README.md synthetique
sous .tmp/probe/ portant un lien mort n'est plus rapporte.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

* Docs(tests,#24410): lever les deux mineurs NanoClaw

- docstring: retirer la citation de ligne du .gitignore (l.89), qui
  pourrit au prochain edit; l'assertion runtime (git check-ignore)
  protege deja la propriete.
- renommer test_dot_tmp_file_at_root_still_scanned ->
  test_dot_tmp_named_file_still_scanned: le nom promettait un fichier
  a la racine, le corps teste un nom de fichier contenant .tmp sous
  docs/ (la discrimination repertoire vs sous-chaine reste celle
  verifiee).

88 tests verts en local.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

trivial-diff-advisory Diff trivial : grain META mecanique sans fournee ni exception ecrite (#15740) variation-light-cap-reached Lane ayant deja merge une LIGHT aujourd'hui (cap G-VAR-2 atteint)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants