Skip to content

[EPIC] Nettoyage & rangement du dépôt — résidus, consolidation, bases saines pour balisage + localisation #9535

Open

Description

@myia-ai-01

État au 2026-09-02 — l'arbre a maigri de 1 008 entrées, deux items restent, et un item se lisait comme une régression alors que le défaut a été divisé par cinq

Passe de curation (défaut #13906). La mesure du 30/08 en pied de corps était juste et le reste ; celle-ci la prolonge sur les dix items, pas sept, et corrige une lecture que le seul décompte de fichiers rend fausse.

41 PRs mergées portent 9535 au titre, zéro ouverte. Arbre main : 9 884 → 8 876 entrées (−1 008).

Les dix items — état mesuré sur main le 2026-09-02

# Item État Preuve
1 tools/semantic-fleet-radix/ FAIT git ls-files tools/ rend 0
2 PR_BODY.md racine FAIT absent de l'arbre
3 compile_ne_arm.sh racine FAIT — mais la classe s'est réinstanciée, voir §2 absent de l'arbre
4 scripts/ racine encombré largement fait, lecture contre-intuitive — voir §1 60 fichiers directs, dont 3 réellement orphelins (contre 17/43 à l'inventaire)
5 Rapports committés Vibe-Coding FAIT 0 debug_report / rapport_final / validation_report ; dossier dés-accentué
6 FORMAL_STATUS.md + absorption social_choice_lean PARTIEL — seconde moitié seule social_choice_lean porte encore 11 entrées (13 au 30/08) ; un FORMAL_STATUS.md est réapparu sous Search/discrepancy_lean/
7 mémoire d'agent committée régressé, mais pas un git rm .claude/agent-memory/qc-strategy-improver/allweather-lessons.md est tracké et son gate #6891 est CLOSED — mais docs/qc/qc-strategy-improver-memory.md:239 le référence (## AllWeather Lessons -> voir allweather-lessons.md). Disposition = absorber dans la doc qui le cite, ou garder. Jugement, pas suppression
8 GenAI/Audio/.../v4/_legacy/ FAIT absent de l'arbre
9 translations/ racine OUVERT — décision user 60 fichiers toujours à la racine. Son gate #6949 est fermé, mais fermé avec le critère « décision user sur gating GO » explicitement déféré : la fermeture du gate n'a pas tranché la disposition
10 nomenclature d'archives FAIT, avec une exception nommée la convention retenue est _archive/ (et non _archives/ comme le proposait l'item) : 10 emplacements, 121 fichiers. Le seul archive/ nu restant est docs/archive/ (325 fichiers), sous docs/, donc à sa place

1. L'item 4 se lit comme une régression et n'en est pas — 43 → 60 fichiers, 17 → 3 orphelins

L'inventaire annonçait « 43 fichiers directs dont 17 one-shot ». Le compte brut est monté à 60. Pris seul, ce chiffre dit l'inverse de la vérité : la composition a changé, pas seulement la taille. Sur les 60, 54 sont référencés par un workflow, un autre script, une doc ou un hook, et 3 seulement sont de vrais orphelins :

orphelin provenance
scripts/add_p3_bandeaux.py PR bandeaux P3 des slides S3-acculturation, 2026-08-18
scripts/enrich_lean18.py enrichissement Lean-18 A* Optimality (#10488), 2026-08-14
scripts/verify_lean18.py idem, même PR

Ce qui a grossi, ce sont les organes : la majorité des nouveaux fichiers sont des check_*.py appelés par la CI. scripts/ racine est devenu la maison des gardes, ce que l'acceptance (« ≤ scripts vivants et référencés ») autorise explicitement.

Le piège de mesure, à ne pas refaire. Un git grep du nom de fichier restreint à .github/ scripts/ docs/ .claude/ CLAUDE.md en accuse 6 — dont deux organes bien vivants :

  • check_subprocess_encoding.py est un hook .pre-commit-config.yaml, fichier racine hors des chemins fouillés ;
  • gh_payload_cache.py n'est jamais nommé comme fichier : il est importé comme module par pick_idle_grain.py, series_saturation.py et leurs tests.

Un instrument de référence se valide par ses faux positifs ici comme par ses faux négatifs ailleurs : chercher le nom de fichier sur tout le dépôt et chercher la forme import <module>, sinon on propose la suppression de l'organe qu'on utilise pour mesurer.

2. Trois résidus de la même classe, apparus depuis l'inventaire

L'item 4 du corps le prévoyait (« l'inventaire est un seed, pas une clôture »). Les voici, mesurés :

  • run_build_v7.sh à la racine — même classe exacte que l'item 3, ré-instanciée. Script one-shot de build Lean avec deux chemins absolus par-machine en dur (/home/jesse/.elan/bin, /mnt/c/dev/CoursIA-c6724-c31-p4nw/…/conway_lean), sortie vers /tmp, référencé nulle part. Le worktree qu'il cible est un worktree de session, qui n'existe plus.
  • .claude/agent-memory/qc-strategy-improver/allweather-lessons.md — item 7 régressé. Le gate invoqué à l'époque (fix(qc,#6891): [RESCOPE] 7 quantbooks en honnetete interimaire — vraie re-exec via kernel QC (RECOVERABLE-USER-HAND, creds absents) #6891) est fermé, mais le fichier n'est pas orphelin : docs/qc/qc-strategy-improver-memory.md:239 porte ## AllWeather Lessons -> voir allweather-lessons.md. Le supprimer casserait un renvoi de doc tracké. (Correctif du 2026-09-02 : la première rédaction de ce bandeau le donnait pour un retrait débloqué — c'est le piège de mesure décrit en §1, appliqué à mon propre candidat. Mesuré par git grep du nom sur tout le dépôt, ce que la §1 prescrit et que je n'avais pas fait ici.)
  • 11 fichiers *_REPORT / *_STATUS / *_AUDIT.md trackés hors docs/, dont 8 sous slides/**/analysis/ (IMAGE_VALIDATION_REPORT.md, slidev_comparison_report.md, visual_quality_report.md, …), plus QuantConnect/projects/_docs/QUANTCONNECT_PROJECTS_AUDIT.md, scripts/quantconnect/quantbooks_execution_status.md et Search/discrepancy_lean/FORMAL_STATUS.md. L'acceptance dit « zéro non-pédagogique tracké hors docs/ » ; il faut trancher lesquels sont des artefacts pédagogiques assumés (les analyses de slides peuvent l'être) et purger le reste.

3. Acceptance — trois lignes sur six sont tenues

Critère État
tools/ vidé ou justifié TENU — 0 entrée
racine sans fichier de travail tracké NON TENU — run_build_v7.sh
scripts/ racine ≤ scripts vivants et référencés quasi tenu — 57/60, trois orphelins nommés en §1
zéro *_REPORT/_STATUS/_AUDIT.md non-pédagogique hors docs/ NON TENU — 11, à trier
convention d'archives unique appliquée TENU — _archive/, seule exception docs/archive/
chaque item porte un statut final en commentaire TENU — table ci-dessus

Ce qui reste — l'ordre dans lequel une lane devrait le prendre

  1. Le lot racine + orphelins — un grain LIGHT de quatre suppressions, run_build_v7.sh plus les trois scripts one-shot de la §1, chacune avec sa preuve de non-référencement (vérifiée le 2026-09-02 : 0 hit nom-de-fichier sur tout le dépôt, 0 hit en forme d'import). Le fichier d'agent-memory sort de ce lot : il est référencé (item 7). Deux issues portent déjà cette veine — [consolidation] Nettoyage racine + gitignore residuels (V1 sans risque) #13738 (racine, volet V1) et [consolidation] scripts/ racine : restructuration, 22 orphelins, fusions 6->4 dirs (V3) #13744 (orphelins de scripts/) : y contribuer plutôt qu'ouvrir une fille de plus ; les mesures de ce bandeau y sont postées en commentaire.
  2. Le tri des 11 rapports trackés : décision par fichier (pédagogique assumé → garder ; débris de session → purger). Les 8 slides/**/analysis/ se tranchent en bloc, les trois autres au cas.
  3. L'absorption de social_choice_lean (item 6, seconde moitié) — 11 entrées, ouvert depuis [Lean][infra] Regrouper les lakes cohesifs post-convergence (GameTheory 6->2, modele multi-module) #4365. Le seul item qui demande du jugement de contenu, donc le seul MED du lot.
  4. translations/ (item 9) reste une décision user, pas un grain de lane : la fermeture de T3 moteur de traduction — fork Argumentum translate_game_rules.py + arrêt des resync CSV dans le vide #6949 a explicitement déféré le GO. À re-poser au user, pas à trancher seul.

Corps d'origine conservé intégralement ci-dessous (2026-08-05), y compris son état mesuré du 30/08 et le piège de SHA de submodule qu'il documente — celui-ci reste exact et vaut d'être relu avant toute mesure sur un submodule.

Mandat user 2026-08-06 : « garder le dépôt propre, et notamment dans un état où on pourra s'attaquer à son balisage et sa localisation sur des bases saines ». Successeur des nettoyages ponctuels #910 / #67 / #83 / #570 / #2671 (tous fermés) — cette fois en Epic pérenne : le rangement est un flux, pas une passe.

Pourquoi maintenant

Deux chantiers structurants sont en aval et supposent un arbre sain :

Inventaire groundé (2026-08-06, firsthand git ls-files / git log)

Chaque item = 1 grain = 1 PR (jamais une vague). Discipline « Consolider ≠ Archiver » : analyser → fusionner avec preuve (numéros de ligne / cible citée) → archiver/supprimer seulement après. Les dispositions ci-dessous sont des propositions à confirmer par le grain (G.9 : vérifier avant d'agir — certains « résidus » peuvent être du contenu pédagogique intentionnel).

# Item Preuve Disposition proposée
1 tools/semantic-fleet-radix/ (49K, seul occupant de tools/) Ajouté par #5672 (Epic #1210 Axe 4) comme module « standalone » ; son README justifie le placement par un branchement delegate « sans forker semantic-fleet » Item-phare (arbitré user 2026-08-06). Le rationale « standalone / no-fork » est caduc : semantic-fleet est un sous-projet assumé de CoursIA — submodule cloné sous GenAI/SemanticKernel/semantic-fleet (comme MetaGeneticSharp), on committe DEDANS. Disposition ferme : intégrer le module dans le submodule (commit dans le submodule — branche cohérente avec #6405 —, bump du pointeur parent, réécriture du README du module pour retirer le rationale no-fork périmé), puis supprimer tools/
2 PR_BODY.md à la racine — tracké, réécrit par ≥3 PRs successives (e5bfeb9, 55fcc23, 9c6f075) git log -- PR_BODY.md Violation L677-L4 institutionnalisée (body de PR = scratchpad hors worktree, jamais commité). Supprimer + .gitignore
3 compile_ne_arm.sh à la racine Résidu de #9132 (port NE/SW hashlife) Déplacer vers scripts/lean/ ou supprimer si one-shot
4 scripts/ racine : 43 fichiers directs dont 17 one-shot (fix_app*_recycle.py, fix_csp9_*, fix_issue_420.py, create_nb8.py, extract_*) git ls-files scripts Consolidation : ce qui est réutilisable → scripts/notebook_tools/ (règle CLAUDE.md « outil dédié ») ; les one-shots morts → archive avec preuve de non-usage (grep call-sites)
5 Rapports committés Vibe-Coding : debug_report.md, rapport_final.md, validation_report.md + variantes _v2 ×N ateliers dans GenAI/Vibe-Coding/Roo-Code/Corrections/corrigés ateliers-roo/ git ls-files | grep -iE "_REPORT" Audit d'abord : si artefacts pédagogiques intentionnels (sorties d'agent montrées aux étudiants) → garder mais dédupliquer les _v2 ; si débris de session → purger (harness-hygiene : rapport = dashboard). Noms de dossiers accentués + espaces à normaliser au passage
6 FORMAL_STATUS.md dans GameTheory/repeated_games_lean/ et GameTheory/social_choice_lean/ social_choice_lean est censé être vide/absorbé post-#4365 (GT 6→2) Vérifier l'absorption réelle, supprimer les statuts périmés (status = dashboard, pas repo) ; item-témoin des résidus de consolidation
7 .claude/agent-memory/infer-notebook-enricher/project_sudoku_audit.md committé git ls-files .claude/agent-memory Mémoire d'agent = per-machine, pas repo. Supprimer + gitignore le répertoire
8 GenAI/Audio/04-Applications/v4/_legacy/ (7 scripts) git ls-files ..._legacy Consolider (features encore utiles → v4 courant, preuve citée) puis retirer
9 translations/ racine (59 CSV/README) Lié à T3 #6949 (« arrêt des resync CSV dans le vide ») + Epic #1650 Statuer : source de vérité vivante du moteur T3, ou legacy à figer/déplacer sous docs//le futur moteur ? Décision couplée à #6949
10 Nomenclature archives incohérente : archive/ · _archive/ · _archives/ · _archived/ · Archive/ (docs/archive = 319 fichiers) git ls-files | grep -iE "archi" Convention unique (proposition : _archives/) + audit léger : rien d'encore-référencé ne doit y dormir. Renommages purs (git mv), zéro perte

Hors scope repo (ne pas mélanger) : les débris untracked locaux (_logs/, bg_logs/, outputs/, reports/, calib/, tmp/, __pycache__/, .tmp_prover_*.log) relèvent de l'hygiène disque par machine → #8924. Un grain .gitignore-audit peut en revanche vérifier que ces patterns restent bien couverts.

Méthode (HARD)

  1. 1 item = 1 grain = 1 PR atomique (catalog-pr-hygiene R3) ; [CLAIMED] avant pickup ; catalogue byte-identique à main sur chaque branche.
  2. Préservation avant réduction : aucune suppression sans preuve écrite dans le commit (call-sites greppés = 0, ou contenu fusionné avec cible citée). Anti-régression : une cellule/preuve/solution ne se strip jamais au passage.
  3. Grains LIGHT pour la plupart (budget G-VAR-2 s'applique — c'est l'à-côté plafonné, jamais le plat principal d'un cycle) ; les items 1, 5 et 9 sont MED (instruction + décision + exécution).
  4. L'inventaire ci-dessus est un seed, pas une clôture : tout agent qui découvre un résidu du même genre l'ajoute en commentaire ici (jamais un rapport committé) et peut le traiter dans la foulée si son budget le permet.

Acceptance (état-cible)

  • tools/semantic-fleet-radix a une maison définitive documentée (submodule ou série), tools/ vidé ou justifié.
  • Racine du dépôt : plus aucun fichier de travail tracké (PR_BODY.md, compile_ne_arm.sh traités) ; .gitignore couvre les patterns de débris récurrents.
  • scripts/ racine ≤ scripts vivants et référencés ; one-shots consolidés-archivés avec preuve.
  • Zéro *_REPORT/_STATUS/_AUDIT.md non-pédagogique tracké hors docs/.
  • Convention d'archives unique appliquée.
  • Chaque item du tableau porte un statut final en commentaire : FAIT (PR #N) / GARDÉ (justification) / TRANSFÉRÉ (issue #N).

Voir aussi

#1210 (semantic-fleet, Axe 4 = origine de l'item 1) · #6405 (branche stable submodule) · #6949 (T3 translations) · #1650 (localisation) · #2632 / #3973 / #4959 (balisage) · #8924 (hygiène disque machines) · #7423 (revue harnais — le pendant « règles » de ce pendant « arbre »)


Etat mesure du 2026-08-30 (ai-01, tri des refutations Vibe)

Mesure sur l'arbre complet de main (9 884 entrees, truncated: false) :

Item Etat Preuve
1 — tools/semantic-fleet-radix/ FAIT commit 1fe88ea2 (06/08) « absorb semantic-fleet-radix into submodule (item 1) (#9642) » ; la SHA epinglee du submodule (9df3603) contient radix (12 entrees), et tools/ a disparu du parent (0 entree)
2 — PR_BODY.md a la racine FAIT absent de l'arbre
3 — compile_ne_arm.sh a la racine FAIT absent de l'arbre
5 — Rapports committes Vibe-Coding FAIT 0 debug_report / rapport_final / validation_report ; le dossier a ete normalise corriges ateliers-roo -> corriges-ateliers-roo (accents + espaces), ce que l'item demandait au passage
6 — FORMAL_STATUS.md PARTIEL les deux fichiers nommes ont disparu (les repertoires portent STATUS.md), mais social_choice_lean existe toujours avec 13 entrees alors que l'item l'annonce « cense etre vide/absorbe post-#4365 » : l'absorption n'a pas eu lieu
7 — .claude/agent-memory/.../project_sudoku_audit.md FAIT absent de l'arbre
8 — GenAI/Audio/04-Applications/v4/_legacy/ FAIT absent de l'arbre

6 items sur 7 sont executes. Seul l'item 6 reste ouvert, et sur sa seconde moitie uniquement :
l'absorption de social_choice_lean, pas les fichiers de statut.

Commandes reproductibles :

gh api 'repos/jsboige/CoursIA/git/trees/HEAD?recursive=1' --jq '.tree[].path' > tree.txt
grep -ci _legacy tree.txt              # 0
grep -c social_choice_lean tree.txt    # 13

Piege rencontre en mesurant : interroger trees/HEAD du depot submodule repond sur un autre
objet que la SHA epinglee par le parent. radix y est absent, ce qui fabrique une fausse alerte
« suppression sans preservation ». Interroger la SHA epinglee, jamais HEAD.

Activity

  1. added
    EPICEpic tracking issue with sub-issues
    on Aug 5, 2026
  2. added a commit that references this issue on Aug 5, 2026
  3. jsboige commented on Aug 6, 2026

    @jsboige
    Owner

    Diagnostic G.9 first-hand — item 1 disposition à rectifier

    Item 1 du tableau #9535 propose « disposition ferme : intégrer dans le submodule + supprimer tools/ ». G.9 verify-before-claiming : la rationale « le rationale standalone / no-fork est caduc » mérite d'être re-vérifiée firsthand avant destruction.

    Preuves (first-hand, 2026-08-06) :

    1. Le delegate hook est TOUJOURS PRÉSENT et FONCTIONNEL dans le submodule MyIA.AI.Notebooks/GenAI/SemanticKernel/semantic-fleet/ :

      • dotnet/src/Connectors/Connectors.AI.MultiConnector/MultiTextCompletionSettings.cs:131 :
        public Func<CompletionJob, IEnumerable<PromptMultiConnectorSettings>, PromptMultiConnectorSettings?> PromptMatcher { get; set; } = SimpleMatchPromptSettings;
      • dotnet/src/Connectors/Connectors.AI.MultiConnector/MultiTextCompletionSettings.cs:271 :
        var toReturn = this.PromptMatcher(completionJob, this._promptMultiConnectorSettingsInternal);

      → Le hook est utilisé en production par le submodule. Le contrat « no fork required » est toujours valide.

    2. Le module tools/semantic-fleet-radix/ N'EST PAS consommé en production (grep call-sites hors du module = 0 dans la base de code, uniquement docs README qui le décrivent). Le module est documenté comme drop-in alternative mais actuellement inutilisé.

    3. Risques de la disposition proposée :

      • Submodule = https://github.com/MyIntelligenceAgency/semantic-fleet.git (branche stable-from-v0343) — pas jsboige-controlled, ne peut pas être « bumped » localement sans PR upstream
      • Bump du pointeur parent + re-doc = >3 fichiers + changement de path des consommateurs
      • Module UNUSED = ratio coût/bénéfice négatif

    Disposition révisée recommandée : GARDÉ (justification) avec un amendement README mineur ajoutant une mention explicite « Standalone, currently unused-but-availability, see delegate hook at MultiTextCompletionSettings.cs:131 » et un lien vers la PR #5672 originale. Pas de migration destructive.

    Si l'objectif réel est de vider tools/ (mandat user 2026-08-06 « dépôt propre »), la bonne cible est ailleurs (items 3, 4 = root-level résidu, plus propres à supprimer). Item 1 a une justification documentée à conserver.

    Action prise dans ce cycle : PR #9552 pour item 7 (CHANGÉ : scope narrowé au snapshot project_sudoku_audit.md + 8 patterns gitignore, PAS « gitignore tout le répertoire » pour les raisons §1-3 ci-dessus). Item 1 = pas de PR, ce commentaire fait office de verdict d'audit (harness-hygiene : audit = dashboard/issue, jamais repo).

    — po-2023 (lane myia-po-2023:CoursIA-2), 2026-08-06

  4. added 12 commits that reference this issue on Aug 6, 2026
  5. 51 remaining items

  6. added 9 commits that reference this issue on Oct 5, 2026
  7. added a commit that references this issue on Oct 5, 2026
  8. added 3 commits that reference this issue on Oct 5, 2026
  9. added 2 commits that reference this issue on Oct 5, 2026
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

    EPICEpic tracking issue with sub-issues

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions