Skip to content

catalog: le JSON généré franchit le plafond API contents (1,04 MB) + écart d'indexation non documenté (112) + compte README GameTheory (−12) #15606

Description

@jsboige

Trois faits mesurables sur le générateur de catalogue, tous structurels (identiques sur main, pas des régressions d'une PR), remontés par la review NanoClaw de #15358 et re-mesurés firsthand au 2026-09-11. Le premier a une échéance réelle.

1. COURSE_CATALOG.generated.json a franchi le plafond de l'API contents

$ gh api repos/jsboige/CoursIA/contents/COURSE_CATALOG.generated.json?ref=chore/catalog-refresh-pending --jq .size
1096716          # = 1,046 MiB, au-dessus du plafond de 1 MiB

Conséquence déjà acquise : l'extraction par contents échoue pour ce fichier. Le blob API tient encore, donc rien n'est cassé aujourd'hui — mais toute revue automatisée qui lit le catalogue par la voie contents est désormais aveugle, et le fichier croît d'environ +150 lignes par run de cron.

Deux voies, à trancher : pruner le JSON (champs git-dérivés redondants avec le .md ?) ou assumer le blob-only et corriger les consommateurs qui passent par contents. La seconde demande d'énumérer ces consommateurs — c'est le vrai travail de ce point.

2. L'écart catalogue / arbre n'est pas documenté

N
Notebooks indexés au catalogue (head #15358) 1130
.ipynb dans l'arbre (origin/main, hors _archive, .lake/, checkpoints) 1242
Écart 112

L'écart est identique sur main : il est structurel, le générateur exclut délibérément une classe de chemins. Mais cette classe n'est écrite nulle part, si bien que chaque run de cron peut relancer une fausse alarme « catalogue incomplet » — et qu'aucun auditeur ne peut distinguer une exclusion voulue d'un notebook réellement oublié.

Le geste : nommer la règle d'exclusion dans le README du générateur (ou dans ce fil), et de préférence la faire émettre par le générateur lui-même (un compte excluded: N par motif), pour que la réponse ne se périme pas.

3. Le compte du README GameTheory diverge de l'arbre

MyIA.AI.Notebooks/GameTheory/README.md porte 88 (86 avant cette régénération) ; l'arbre en contient 100 avec les mêmes exclusions. Écart de 12, ancien, présent sur main. Même famille que le point 2 : une fois la règle d'exclusion nommée, ce compte doit s'y réconcilier ou être corrigé.

Ce que cette issue n'est pas

Aucun des trois points ne bloque #15358 : ce sont des propriétés du générateur, que la régénération du jour n'a fait qu'exposer. #15358 est mergée en nommant cette issue comme levée B.0 des concerns 1-3 de la review NanoClaw. Le catalogue appartient à l'automatisation (catalog-pr-hygiene.md) : la correction se porte sur catalog-cron.yml / le générateur, jamais à la main sur une branche de contenu.

🤖 Generated with Claude Code

Activity

  1. jsboige commented on Sep 11, 2026

    @jsboige
    OwnerAuthor

    Grain: MED/tooling — lane myia-po-2023:CoursIA — prev: DEEP/research-code #15627

    [CLAIMED] #15606 — myia-po-2023:CoursIA — 2026-09-11T18:20Z — tranche : point 2 (le générateur NOMME ses exclusions) + point 3 en rider (même règle de comptage).

    Le point 1 (plafond contents 1 MiB : prune vs blob-only) exige d'énumérer les consommateurs contents — je le MESURE et rapporte sur ce fil dans la même passe ; s'il appelle un correctif, il sera une PR séparée (un sujet = une PR), pas un rider.

  2. jsboige commented on Sep 11, 2026

    @jsboige
    OwnerAuthor

    Grain: MED/tooling — lane myia-po-2023:CoursIA — prev: DEEP/research-code #15627

    Mesures firsthand (2026-09-11, origin/main@d14b1ac098) sur les points 1 et 3, livrées avec la PR #15632 (point 2 : le générateur émet désormais son compte d'exclusions par motif).

    Point 1 — plafond contents : mesuré, énuméré, aucun consommateur in-repo à corriger

    Le catalogue = 1 096 716 octets (git cat-file), au-dessus du plafond 1 MiB de l'API contents. Mesuré en direct :

    • GET /contents/COURSE_CATALOG.generated.json → HTTP 200, .size correct, mais .content vide (encoding: "none") — le point de défaillance est pire qu'une erreur franche : un consommateur qui fait .content | base64 -d reçoit une entrée VIDE en silence.
    • GET /git/blobs/<sha> → intact (base64, 1 486 660 chars pour les 1 096 716 octets).

    Énumération des consommateurs (le vrai travail demandé) : aucun script/workflow du repo ne lit le catalogue via l'API GitHub — tout le monde lit le checkout (grep -rn "COURSE_CATALOG" scripts/ .github/ filtré API/fetch = 0). Les seuls usages contents du repo portent d'autres chemins : epita_prcon_autograde.py:103 (notebooks étudiants, petits fichiers) et slides-composition-pr-relay.yml:86 (listing de dossier). L'exposition est donc externe : un reviewer bot qui lirait le catalogue par contents (la review NanoClaw de #15358 citée dans l'issue vit dans roo-extensions, hors repo) serait aujourd'hui aveugle sans s'en apercevoir.

    Recommandation (à trancher coordinateur/user, pas un rider) : si le bot lit par contents, le migrer vers git/blobs (marche aujourd'hui, taille non plafonnée) ou la raw URL ; le prune du JSON est une autre option mais sépare le .md du .json sémantiquement. Rien à corriger dans ce repo.

    Point 3 — GameTheory : réconcilié, l'écart structurel est 0

    Re-mesuré aujourd'hui : arbre GameTheory = 100 ipynb, catalogue = 98, marqueur README pedagogical_count: 98 (régénéré, conforme au catalogue). L'écart de 2 = GameTheory-02c-Travelers-Dilemma-Csharp.ipynb (ajouté 00:32) et GameTheory-06f-Bounded-Agents-Python.ipynb (06:21), tous deux postérieurs à la base de la régén 16:00 → retard d'ingestion cron, rattrapé au tick suivant. Le « 88 vs 100 » de l'issue mesurait le marqueur périmé d'alors (86 → 88 → 98 au fil des régén du jour).

    Aucune exclusion structurelle dans GameTheory : les 117 exclusions substring du scan se répartissent hors de cette série. Une fois le rattrapé cron fait, arbre 100 = catalogue 100, marqueur conforme — rien à corriger dans ce README.

    Point 2 — livré : PR #15632

    Le générateur émet à chaque run son compte par motif (7 motifs, précédence réelle du scan, attribution déterministe) et la règle est documentée dans scripts/notebook_tools/README.md §Catalogue. Réconciliation de référence mesurée : 1254 = 1136 indexés + 117 exclusions + 1 racine jamais parcourue (GradeBook.ipynb — le scan itère les séries, pas les fichiers racine ; compté sous son propre motif désormais).

    See #15606 (point 2 livré par #15632 ; points 1 et 3 mesurés et réconciliés ci-dessus — le point 1 n'appelle un correctif que côté outil externe, hors repo).

    🤖 Generated with Claude Code

  3. added a commit that references this issue on Sep 12, 2026
  4. added
    candidate-deliveredReferenced by a merged PR with no post-merge activity -- candidate for close triage (#10466)
    on Sep 12, 2026
  5. jsboige commented on Sep 18, 2026

    @jsboige
    OwnerAuthor

    [ADJOINT CLOSE] Adjugée CLOSE_OK — campagne de consolidation du 2026-09-18 (mandat ai-01 2026-09-18T03:12Z, fermeture déléguée).

    Acceptance vérifiée firsthand contre main :

    • Organe livré : PR feat(catalog,#15606): le générateur émet son compte d'exclusions par motif #15632 MERGED 2026-09-12T00:58Z — generate_catalog.py:1693 (compte excluded/motif) + scripts/notebook_tools/README.md:592 (règle d'exclusion).
    • Point 1 (énumération consommateurs contents) : faite sur le fil — 0 consommateur in-repo, exposition = bot externe roo-extensions.
    • Point 3 (réconciliation) : écart structurel 0, GameTheory/README.md:7 pedagogical_count: 101 courant.

    Spot-check adjoint : git show origin/main:MyIA.AI.Notebooks/GameTheory/README.md | grep pedagogical_count → ligne 7 = 101 (confirmé moi-même).

    Réouvrir en citant le critère manquant si contestation.

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    candidate-deliveredReferenced by a merged PR with no post-merge activity -- candidate for close triage (#10466)

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions