Repository navigation
docs(rules,#19297): critères de sortie de la finition de série - #19298
Conversation
Ajoute a la regle des notebooks les criteres de sortie d'une serie en finition : objectifs dans le README de serie, blocs de fin de carnet (A retenir, Verifiez votre comprehension, Pour aller plus loin), capstone la ou il vient naturellement. Detail dans docs/reference/finition-de-serie.md. Regime valide par le mainteneur en session directe le 2026-10-05. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
G-VAR-2 light cap reached (advisory, non bloquant). |
|
G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
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 |
… chemin principal sans profondeur Precise ce que mesure le script de #19297, d'apres le rejeu de #19303 sur le corpus : le comptage de depart inclut les titres voisins (Points cles a retenir, Ce qu'il faut retenir, titres numerotes) ; une serie n'est finie qu'aux titres du tableau, et la mesure separe renommer d'ecrire. Le chemin principal comprend les sous-dossiers, hors _archive/_output et exclusions nommees au README -- pas une profondeur de dossier (ML : 23 carnets sur 128 au filtre depth<=1). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
[ADJOINT] #19298 — pas de dossier tiers : un seul obstacle, et c'est un minuteur Demande du dispatch ai-01 du 2026-10-05 (finition de série #19297). Le dossier Obstacle unique mesuré. Pourquoi pas de dossier. Le champ Ce qui est mesuré et conforme, au head
Geste. Rien à corriger côté code. Après l'échéance ( |
|
[ADJOINT PREFLIGHT] |
…19298 Le garde docs-index est absolu sur main : finition-de-serie.md, entre apres le rebase de la PR, doit etre atteignable depuis docs/README.md. Organ rc=0 sur l'arbre fusionne (217 docs vivants atteignables), 8/8 tests, fast_lane --only docs-index-guard exit 0. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…eignables + organe de couverture (#19260) * docs(consolidation,#13748): index docs/ complet -- 62 docs rendus atteignables + organe de couverture L'index `docs/README.md` revendiquait « tous atteignables » : la mesure first-hand le dementait, 62 des 216 `*.md` vivants (hors `archive/`) etaient inatteignables depuis l'index, directement ou via un index de sous-repertoire. - 62 lignes ajoutees dans les sections existantes (reference, lean, ledgers, ict, genai, curriculum, ci, ml, notebook-metadata, racine) et deux sections pour les repertoires sans section propre (`docs/dotnet/`, `docs/xai-shap-strategy/` + `docs/test-fixtures/`). - le compte ecrit en tete d'index (« 146 live ») est retire : il derivait de plus de soixante fichiers. Conformement a l'arbitrage user du 2026-09-24 (#17029), un compte qui derive ne se remet pas a jour, il se supprime au profit d'un invariant tenu par un organe. - `scripts/check_docs_index.py` mesure la seule metrique que l'index s'est donnee (atteignabilite en fermeture transitive depuis `docs/README.md`), sort 1 des qu'un doc vivant devient inatteignable, et porte un controle positif (`--expect-unreachable N`) pour qu'un arbre propre ne soit pas confondu avec un chemin de detection mort. La fermeture ne sort jamais de `docs/` : elle peut sous-crediter, jamais sur-crediter (fail-closed). - `scripts/tests/test_check_docs_index.py` : 8 tests, dont l'acceptance lue sur l'arbre reel (0 inatteignable) et les deux codes de sortie. Le finding prioritaire de l'audit (4 `*-detail.md` cites par les rules = liens morts) ne reproduit pas : les 39 liens `../../docs/**` des `.claude/rules/*.md` resolvent tous, et `scripts/check_docs_links.py` rend 0 lien casse sur 8252. Les memes documents etaient en revanche absents de l'index -- c'est cette moitie-la qui etait reelle, et elle est corrigee ici. See #13748 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> * fix(ci,#13748): cabler l'organe d'index docs/ -- TRANCHE18, garde bloquant absorbe Reserve de revue Hermes sur #19260 : `scripts/check_docs_index.py` n'etait cable nulle part (`grep -rln check_docs_index .github/workflows/ scripts/ci/` vide des deux cotes) alors que le README de `docs/` cite son `exit 1` comme l'invariant. Un invariant que personne n'execute n'est pas un invariant. - `scripts/ci/fast_lane_registry.py` : TRANCHE18, garde ABSOLU (non-delta, sans `needs_base` ni `swap_paths`), `absorbed=True` -- sans absorption le job always-on l'emet en conclusion NEUTRE sous `fast-lane (ombre): `, soit exactement le defaut signale. - `scripts/ci/fast_lane.py` : import et agregation de TRANCHE18. Controles executes a la main : - positif : organe `rc=0` (216/216 atteignables) ; fast-lane `phase 1 docs-index-guard : exit 0`, aucun bloquant en echec ; - negatif : un doc temoin non indexe sous `docs/` fait rendre `rc=1` a l'organe et `phase 1 docs-index-guard : exit 1` au moteur -- « au moins un bloquant en echec ». Temoin retire, arbre re-verifie vert ; - `scripts/tests/test_fast_lane.py` : 82 passed, dont le test de parite registre->moteur ; - `scripts/tests/test_check_absorbed_check_run_identity.py` : 11 passed. See #19260 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> * docs(consolidation,#13748): post-rebase -- le garde attrape 16473-consolidation-acceptance-2-log Rebase sur main (d1df57e) : la resolution du conflit docs/README.md prend le cote de main (triage racine #19283/#19318 : qc-research, data-policy et claim-implicit-check deplaces, main les reference deja aux bons endroits). Le garde alors rougit : le ledger 16473 ajoute sur main par 84c99c3 est inatteignable -- premiere capture reelle de l'organe apres son cablage. Ligne d'index ajoutee. check_docs_index: 216/216 atteignables, rc=0 ; tests 8/8. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> * docs(index,#19260): indexer reference/finition-de-serie.md arrive par #19298 Le garde docs-index est absolu sur main : finition-de-serie.md, entre apres le rebase de la PR, doit etre atteignable depuis docs/README.md. Organ rc=0 sur l'arbre fusionne (217 docs vivants atteignables), 8/8 tests, fast_lane --only docs-index-guard exit 0. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
…esurable (#19303) * feat(tools,#19297): organe check_series_finish -- finition de série mesurable Implementation du regime de finition valide par le mainteneur (cf docs/reference/finition-de-serie.md, PR #19298) : - README de serie doit avoir une section `## Objectifs d'apprentissage` (H2/H3 strict) - Chaque carnet du chemin principal doit avoir 3 blocs H2/H3 : `## A retenir`, `## Verifiez votre comprehension`, `## Pour aller plus loin` Criteres mesures sur le corpus reel (1492 carnets au 2026-10-05) : - A retenir : 14 % des carnets - Verifiez votre comprehension : 1 % - Pour aller plus loin : 18 % - Objectifs README : manquant dans 5 series sur 14 (Complexity, Compression, NLP, RL, SymbolicAI) API : `--series <nom> --json` (sortie JSON) ou `--report` (sortie texte). Codes de sortie : 0 (serie finie), 1 (au moins 1 carnet manque 1 bloc, ou README sans Objectifs), 2 (serie inconnue, nom invalide). Tests : 24 verts (TestCheckNotebookBlocks, TestCheckReadme, TestRunCheck, TestMainCLI) avec carnets synthetiques (lecon #19215 : 17 tests verts, plantage sur le vrai corpus -- ici on isole en tmp_path via monkey-patch SERIES_ROOT). Rejeu sur le corpus reel : 0/9 series testees finies (ML 0/23, Search 0/73, RL 0/22, SymbolicAI 0/171, Complexity 0/6, Compression 0/1, NLP 0/5+, Probas 0/28, GameTheory 0/94). C'est la mesure de depart ; les series passees en finition recevront leurs blocs en priorite 1 (Search carte validee #19253, RL #19255, puis les 4 series sans Objectifs). Grain: MED/tooling -- lane myia-ai-01:CoursIA-2 -- prev: LIGHT/infra #19057 Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com> * fix(tools,#19303): 3 defauts revue coord -- capstone \b, mesure recursive, canonique vs variantes Issue #19303, revue coord 05/10 (c.5994494493) : 1. **Capstone regex `\b`** : le pattern `n/?a` matchait le 'na' de 'analyse' (et de 'analyse des besoins', etc.) dans tous les READMEs. Capstone_phrase valait 'na' sur ML/Search/Probas/GameTheory/RL/SymbolicAI/Complexity/NLP. Fix : `n\s*/?\s*a` est devenu `\bn\s*/?\s*a\b` (word boundary explicite des deux cotes). Ajout d'un test `test_capstone_pas_de_match_dans_analyse` qui verifie qu'un README avec 'analyse approfondie' ne detecte pas de capstone. 2. **Filtre `depth > 1`** : retirait la majorite des carnets (ML 105/128, Search 69/159, SymbolicAI 132/320, Probas 34/77). La doc finition-de-serie.md dit pourtant : "Le chemin principal d'une serie est l'ensemble de ses carnets, sous-dossiers compris." Mesure recursive par defaut, exclusion _archive / _output / .ipynb_checkpoints uniquement. Nouveau test `test_serie_mesure_recursive`. 3. **Instrument != doc** : separation `canonique` (titres du tableau de la doc) et `variante` (titres voisins reconnus, ex. 'Summary', 'Quiz', 'Bibliographie'). Sortie structuree : pour chaque bloc, deux booleens `canonique[cle]` / `variante[cle]`, et `renommer` = variantes sans canal canonique (a renommer), `missing` = blocs absents (a ecrire). Compteurs agreges `renommer_total` et `ecrire_total` au niveau serie. Permet de repartir le travail (le 14%/1%/18% du comptage de depart sont en realite des variantes a renommer, pas des blocs absents a ecrire). Tests : 31 pytest, 0.22s, tous verts (24 + 7 nouveaux = variantes + capstone \b + tests renommer). Grain: MED/tooling -- lane myia-ai-01:CoursIA-2 -- prev: MED/tooling #19305 Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com> * fix(tools,#19303): nit-fixes revue 6004712644 -- _norm mort + H2 docstring La revue 6004712644 releve 2 nits non bloquants apres retrait des 5 commits README de la branche (qui sont transferes dans la PR dediee feature/19297-readme-finish-objectifs, a venir) : 1. **l.98 _norm mort** : la fonction `_norm` etait definie mais jamais appelee (recherche tolerante sur accents). Retire, ainsi que l'import `unicodedata` devenu orphelin. 2. **docstring dit H2 mais regex `#{2,3}` accepte H2/H3** : la docstring module (l.8) et la docstring `verifie_3_blocs` (l.128) disent "H2" ou "3 blocs H2" ; la regex `H2_H3_HEADING_RE` accepte 2 ou 3 caracteres `#`. Aligne la doc sur le code : "H2/H3". 31/31 tests verts apres les 2 retouches (les tests isoles en tmp_path ne voient pas _norm et ne comptent pas les H3 explicitement -- la couverture tient). Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com> * fix(tools,#19478): nit-fixes check_series_finish -- docstring + exclusion suffixe *_output.ipynb Suivi des residus de la revue f9f2b2f (organe check_series_finish, PR #19303), declares dans l'issue #19478 : 1. **Docstring l.14-15 obsolete** : "le chemin principal exclut les sous-dossiers archive/output, et ne considere que les carnets presents au top-level d'une sous-serie (pas les recursifs profond)" -- le code est recursif (`root.rglob`, l. 113), et c'est ce que la revue avait demande. Reecrit selon le comportement reel, en citant finition-de-serie.md. 2. **Exclusion par suffixe de fichier** : `_output` ne portait que sur les dossiers (par `split("/")`). Un fichier `X_output.ipynb` isole etait comptabilise comme carnet de la serie. Le corpus actuel n'en contient aucun hors `_archive` (verifie), donc l'effet est nul aujourd'hui -- mais la regle manquait. Corrige par ajout d'un test d'exclusion par `p.name.endswith("_output.ipynb")`, avec controle non-regression sur les segments `_archive` / `_output` / `.ipynb_checkpoints` deja exclus. 3. **Tableau du body de #19303** : "A ecrire" affiche " -- " pour 5 series alors que l'organe rend des nombres (RL 104, SymbolicAI 934, Complexity 30, Compression 3, NLP 15). Constat, pas d'action : le premier rapport d'organe post-merge qui cite ces series se regle dans le tableau. Critere de fermeture #19478 : (1) + (2) corriges + tests ; (3) constate. 5/5 tests PASSED (test_excludes_file_with_output_suffix + test_does_not_exclude_carnet_with_output_in_middle_of_name + test_excludes_output_directory_recursively + test_excludes_archive_and_checkpoints_segments + test_recursive_deep_subdirectory_is_included). Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: jsboige <jsboige@gmail.com> Co-authored-by: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
Grain: LIGHT/harness — lane myia-ai-01:CoursIA — prev: DEEP/lean #19271 (merge)
Sujet
Inscrit dans la règle des notebooks les critères de sortie du régime de finition de série (#19297).
Ce qui change
.claude/rules/notebook-conventions.md, section « Structure pédagogique » : une puce. Une série en finition a des objectifs dans son README, et chaque carnet de son chemin principal finit par trois blocs : « À retenir », « Vérifiez votre compréhension », « Pour aller plus loin ». Elle a aussi un capstone là où il vient naturellement. L'application se fait série par série, en markdown seul.docs/reference/finition-de-serie.md(nouveau) : le détail.Gouvernance
Changement normatif du harnais : il ajoute une prescription. Le mainteneur a validé le régime et ces critères en session directe le 2026-10-05, ce qui vaut sign-off (CLAUDE.md §A). La règle reste bornée :
Validation
../../docs/reference/finition-de-serie.mddepuis.claude/rules/résout vers le fichier ajouté.Hors périmètre
check_series_finish.py) : grain séparé, nommé dans [EPIC] Finition de série : critères de sortie (objectifs, blocs de fin, capstone, parcours 0) #19297.See #19297
🤖 Generated with Claude Code