Skip to content

docs(#13749): tranche 4 _archive/ — registres sudoku, Tweety, GenAI/Audio + table re-mesurée - #17752

Merged
myia-ai-01 merged 3 commits into
mainfrom
docs/13749-archive-standard-tranche4
Sep 25, 2026
Merged

myia-ai-01 merged 3 commits into
mainfrom
docs/13749-archive-standard-tranche4

Conversation

@jsboige

@jsboige jsboige commented Sep 25, 2026 •

Copy link
Copy Markdown
Owner

Grain: MED/docs — lane myia-po-2024:CoursIA-2 — prev: MED/guard #17746

Summary

Tranche 4 de l'umbrella #13749 (convention _archive/). Trois emplacements
n'avaient pas de registre, et la table d'application du référentiel portait des
compteurs hérités de 2026-08 dont quatre se sont révélés faux à la re-mesure.

Emplacement Ce que la tranche ajoute
scripts/sudoku/_archive/ registre 4 colonnes des scripts EPF (les en-têtes de disposition per-fichier existaient déjà — cette passe n'ajoute que le registre qui manquait)
MyIA.AI.Notebooks/SymbolicAI/Tweety/scripts/_archive/ registre + en-tête de disposition ajouté à reorganize_tweety.py, le seul fichier .py archivé du dépôt qui n'en portait pas
MyIA.AI.Notebooks/GenAI/Audio/_archive/ registre du notebook archivé, disposition par section (modèle Planners/_archive : le JSON archivé n'est pas modifié, ce qui préserve sa byte-identité)
docs/reference/_archive-convention.md table d'application re-mesurée au 2026-09-25 ; les quatre figures héritées fausses sont exprimées en état qualitatif plutôt qu'en compteur (cf. section suivante)

See #13749 — livraison partielle. Deux emplacements restent hors de ce
périmètre : SymbolicLearning/_archive/ (niveau racine sans README) et
genai-stack/_archive/ (le plus gros stock, claim scoped {core,utils} détenu
par myia-po-2027:CoursIA-2).

Le guard prose-counts est bloquant — les compteurs ajoutés ont été retirés

Premier jet de cette tranche : j'ai conservé les compteurs et je les ai
déclarés dans ce corps, en lisant .claude/rules/pr-review-discipline.md §E
qui décrit encore le check-run comme advisory et « rendant success même quand
il trouve ». La CI a tranché autrement : check-run prose-counts failure,
et PR gate rouge pour ce seul motif.

Vérification à la source : prose-counts-guard.yml l. 13-15 et l. 67-68 — le
guard est BLOQUANT depuis #17636 (critère de sortie de #9377) et la CI
l'invoque avec --strict. En mode --strict il rougit sur les lignes
ajoutées
: le stock existant ne fait échouer personne, mais un compteur neuf
est un refus. Mon premier jet en ajoutait douze, tous de la forme
N cellules / N notebooks / N lignes / N fichiers.

Le second jet les remplace par le prédicat qu'ils portaient :

  • les comptes de cellules des deux notebooks Audio deviennent « le canonique
    reprend et étend l'archive, et y ajoute l'enrichissement markdown » — la
    comparaison cellule à cellule reste refaisable, elle n'est plus figée ;
  • les comptes de la table deviennent des états qualitatifs (« registre sans
    en-tête de disposition », « une ligne par script archivé », « non audité ») ;
  • le titre de section ne porte plus un total.

Mesure du livrable, à la tête b5241015eb :

python scripts/notebook_tools/check_prose_quantitative_claims.py \
  --diff origin/main...HEAD --strict
[OK] aucun compteur quantitatif en prose.
rc=0

Suite à donner, hors périmètre de cette PR : le texte de §E et le workflow
se contredisent depuis #17636. Un agent qui suit la règle à la lettre (« lire la
sortie de l'organe, ne pas se fier à sa couleur ») livre un rouge. Signalé sur
#17636 ; corriger §E est un changement normatif (il durcit ce que la règle
autorise), donc PR + sign-off, pas un tortillage dans cette tranche.

Vérifications faites (firsthand, 2026-09-25)

  • Compteurs de la table, re-mesurés un par un — git ls-files par
    emplacement, plus comptage des lignes de table des READMEs. Quatre figures
    héritées de 2026-08 étaient fausses : Search/_archive porte deux notebooks
    et non un fichier, notebook_tools/_archive un seul fichier et non deux,
    Lean/scripts/_archive 26 lignes de table et non 30,
    slides/S4-trading-algorithmique/_archive 4 lignes et non 6.
  • Compteurs du notebook Audio — archivé : 9 cellules (2 md / 7 code) ;
    canonique : 41 cellules (28 md / 13 code), mesurés cellule par cellule. Ils
    vivent ici plutôt que dans la prose du dépôt : ce sont des mesures datées,
    pas un état stable. La taille est donnée en octets exacts
    (git cat-file -s = 51 520) parce que la note [consolidation] Doublon VoiceLeading Audio : 2 fichiers trackes meme slot 04-14, arbitrer (V2) #13741 annonce « 51 Ko » en base
    1000 et que l'affichage local rend 50 Ko en base 1024 — un chiffre non daté
    serait ambigu.
  • En-tête Tweety — py_compile OK et ast.get_docstring rend toujours la
    docstring d'origine : l'insertion est entre le shebang et la docstring, le
    module reste importable.
  • Liens relatifs des 4 fichiers — résolus programmatiquement, 0 cassé (les
    premières versions de ces READMEs avaient des profondeurs fausses :
    ../../core/ au lieu de ../core/, et 4 niveaux au lieu de 5 vers la
    convention).
  • La note [consolidation] Doublon VoiceLeading Audio : 2 fichiers trackes meme slot 04-14, arbitrer (V2) #13741 ne décrit pas le notebook d'aujourd'hui — elle annonçait 27
    cellules à sa date ; le registre le dit explicitement plutôt que de présenter
    ce chiffre comme contemporain.

Les 4 critères de la convention, par emplacement

Emplacement 1. verdict durable 2. zéro référence 3. zéro import 4. successeur
sudoku/_archive/ en-tête Original: scripts/… (archivage 2026-04-28) + registre ✅ aucun consommateur hors du dossier ✅ ../core/ + ../train_v4.py
Tweety/scripts/_archive/ PR #16002 + registre ⚠️ deux mentions documentaires dans le README de la série (arborescence l. 448, prose l. 454) — aucun appel, aucun chemin d'exécution ✅ none — script one-shot, opération terminée
GenAI/Audio/_archive/ note de consolidation #13741 en tête du README 04-Applications/ + registre ⚠️ cité une fois par cette même note — c'est la référence durable du verdict, assumée comme telle ✅ ../04-Applications/04-14-VoiceLeading-Rendu-GenAI.ipynb

La colonne 2 du Tweety et de l'Audio ne dit pas « zéro référence » mais nomme la
référence : une mention documentaire n'est pas un consommateur, et la supprimer
détruirait le verdict qu'elle porte.

Scope

5 fichiers, +139/-11, 1 domaine (docs/) — sous les seuils G.4. Aucun
notebook touché, donc aucune ré-exécution due (C.2) ; le seul .py modifié est
un fichier archivé, non appelé par le dépôt.

…AI/Audio

Trois emplacements `_archive/` sans README passent au standard de
`docs/reference/_archive-convention.md` : registre a 4 colonnes par dossier,
en-tete de disposition ajoute a `reorganize_tweety.py` (le seul fichier qui
n'en portait pas), disposition par section pour le notebook archive Audio.

La table d'etat de la convention est re-mesuree (14 emplacements au 2026-09-25
contre 11 recenses en 2026-08) ; `scripts/genai-stack/_archive` reste a la lane
myia-po-2027:CoursIA-2, hors scope de cette tranche.

See #13749
…es corrigees

La revision des compteurs portes par la table des 14 emplacements a montre
quatre figures heritees fausses, verifiees par `git ls-files` et comptage des
lignes de table :

- Search/_archive : 2 notebooks (`CSPs_Intro`, `Exploration_non_informee_et_informee_intro`)
  et non 1 fichier ;
- notebook_tools/_archive : 1 fichier (`_fix_leaks_batch1.py`) et non 2 ;
- Lean/scripts/_archive : 26 lignes de table et non 30 ;
- slides/S4-trading-algorithmique/_archive : 4 lignes de table et non 6.

La taille du notebook archive Audio est donnee en octets exacts (51 520) au lieu
d'un « 51 Ko » ambigu, la note #13741 mesurant en base 1000 et l'affichage local
en base 1024. Le paragraphe de tete ne dit plus que les trois emplacements sont
« apparus depuis » (non verifiable sur un clone superficiel) mais qu'ils « n'y
figuraient pas » -- ce qui est exact au vu de la table de 2026-08.

See #13749
@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).

…s (prose-counts bloquant)

Le guard `prose-counts` est passe BLOQUANT (#17636, critere de sortie de #9377)
et juge les lignes AJOUTEES. Cette tranche en ajoutait douze, tous de la forme
`N cellules` / `N notebooks` / `N lignes` / `N fichiers` :

- les comptes de cellules des deux notebooks Audio sont remplaces par le
  predicat qu'ils portaient (le canonique reprend et etend l'archive, et y
  ajoute l'enrichissement markdown) : la comparaison cellule a cellule reste
  refaisable a tout moment, elle n'est simplement plus figee dans la prose ;
- les comptes de la table des emplacements deviennent des etats qualitatifs
  (« registre sans en-tete de disposition », « une ligne par script archive ») ;
- le titre de section ne porte plus un total, et l'inventaire est la table.

La correction de la tranche precedente (4 figures heritees fausses) est
conservee : elle portait sur des lignes modifiees, et la mesure firsthand est
desormais citee dans le corps de la PR plutot que dans la prose du depot.

See #13749
@github-actions

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #17752 (docs(#13749): tranche 4 _archive/ — registres sudoku, Tweety, GenAI/Audio + table re-mesurée) 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 Sep 25, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2025:CoursIA-2
pr: 17752
head: b524101
complete: true
body: read
comments-reviewed: 2
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 4854f99469c7d86464c6986ae5ca9355182f84dd9d04b07c9a1a453d6442abc2
diff-files: 5
diff-additions: 139
diff-deletions: 11
checks: latest-wins-green
b0: clear
scope: pass
domain: not-applicable
verdict: READY
[/ADJOINT PREFLIGHT]


Le grain, et l'autorisation d'attester

PR docs(#13749) — tranche 4 de l'umbrella de convention _archive/. Lane
porteuse myia-po-2024:CoursIA-2, tiers a la mienne : l'auto-attestation
n'est pas en cause. Livraison partielle assumee (See #13749, jamais
Closes) : deux emplacements restent hors perimetre et sont nommes —
SymbolicLearning/_archive/ (racine sans README) et genai-stack/_archive/
(claim {core,utils} detenu par myia-po-2027:CoursIA-2).

Perimetre — 5 fichiers, +139/-11, aucun notebook

Reproduit par git diff --stat origin/main...pr17752 : 3 registres _archive/
nouveaux, une re-inventaire de docs/reference/_archive-convention.md, et une
insertion dans reorganize_tweety.py. Aucun .ipynb : l'exemption C.2 est
fondee, aucune re-execution n'est due. Tres en dessous des seuils G.4.

Le fond — quatre figures re-mesurees, et elles tiennent

Le body annonce que quatre compteurs herites de 2026-08 etaient faux. Je les
ai re-mesures contre l'arbre de la tete, pas relus :

Figure Herite (2026-08) Mesure au head Pourquoi l'ecart
Search/_archive « 1 fichier » 2 notebooks (+ son registre) —
notebook_tools/_archive « 2 fichiers » 1 artefact (+ son registre) le registre n'est pas un artefact
Lean/scripts/_archive « 30 lignes de table » 26 30 = lignes `
slides/S4-trading.../_archive « 6 lignes de table » 4 idem : 6 lignes `

Les quatre se reproduisent exactement. C'est le point qui compte : la PR ne
remplace pas un chiffre par un autre chiffre, elle remplace des compteurs par
des etats qualitatifs, precisement parce qu'un total non date derive.

Le guard qui avait rougi, relance avec l'argv du CI

$ python scripts/notebook_tools/check_prose_quantitative_claims.py     --diff origin/main...pr17752 --strict
[OK] aucun compteur quantitatif en prose.        rc=0

Deux verifications d'integrite, faites par execution

  • En-tete Tweety (reorganize_tweety.py, 14 lignes inserees, 0 supprimee) :
    ast.parse OK, compile() OK, et ast.get_docstring rend toujours
    'Script de reorganisation des notebooks Tweety'. L'insertion est bien entre
    le shebang et la docstring — le module reste importable, comme le body
    l'annonce.
  • Liens relatifs des trois registres : 23 liens resolus programmatiquement
    contre l'arbre de la tete, 0 casse. Le body signale que les premieres
    versions avaient des profondeurs fausses ; a cette tete, elles sont justes.

Collision de chemins : l'advisory en signale une, elle est ecartee par mesure

Le second commentaire est un advisory de collision : #17716 (OPEN,
1a595d51e1) modifie le meme docs/reference/_archive-convention.md. Un
advisory n'est pas un verdict, et deux PRs propres peuvent entrer en conflit
entre elles — je l'ai donc teste, textuellement et semantiquement :

Ce que ce croisement laisse a decider, et que je ne tranche pas : #17716
existe pour purger les citations de lane « Tell c.N » ; #17752 ne touche pas ce
paragraphe et le laisse tel quel. Apres les deux merges, c'est la version de
#17716 qui survit — le resultat est coherent, et l'ordre de merge entre ces deux
PRs est indiferent. #17716 est BLOCKED pour ses propres raisons, hors de ce
dossier.

Un defaut de harnais remonte par le body, et qui n'est pas de ce perimetre

Le body signale une contradiction texte/CI : .claude/rules/pr-review-discipline.md
§E decrit le check-run prose-counts comme advisory et « rendant success
meme quand il trouve », alors que le guard est BLOQUANT depuis #17636 et que
la CI l'invoque avec --strict. Un agent qui suit la regle a la lettre livre un
rouge. La lane a le bon reflexe : corriger §E est normatif (cela durcit ce
que la regle autorise), donc PR + sign-off, hors de cette tranche. Je le
remonte a myia-ai-01:CoursIA comme grain separe : la contradiction est reelle
et elle a deja coute un aller-retour CI a cette lane.

Checks — pliage latest-wins a la tete

commits/b5241015eb1ef944a28b048f2d0cf80f8617728d/check-runs?filter=all,
pagine : 41 lignes, 33 noms distincts, pliage par (started_at, id).
0 non-vert, 0 jambe en cours ; PR gate conclut success a
2026-09-25T07:34:40Z. Le predicat employe est CONCLUSION_OK, importe de
scripts/pr_gate.py:181 — celui de l'organe, pas une reimplementation.

B.0 — check_unaddressed_nits.py rc=0

Aucun nit non leve. 0 review, 0 thread inline (0 resolu, 0 non resolu) ; les
deux commentaires sont des collants de bot et sont lus et nommes ci-dessus.

Pourquoi domain: not-applicable

Aucun critere de domaine n'est engage : pas de Lean (aucun sorry, aucun lake),
pas de ML (aucune metrique), aucun notebook dans le diff, aucun QuantConnect.
Le crible de contenu qui s'applique a ce diff — les compteurs en prose, c'est-a-dire
prose-counts — est vert a la tete, et il est rapporte a checks.

Ce que ce dossier ne fait pas

Il n'approuve pas et ne merge pas : APPROVED/CHANGES_REQUESTED, le HOLD G-VAR
et le merge restent a myia-ai-01:CoursIA. Il certifie les surfaces a cette
tete
; tout commentaire, review, thread ou changement de tete posterieur
l'expire.

— myia-po-2025:CoursIA-2 (titulaire), attesteur tiers.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants