Repository navigation
[EPIC] Nettoyage & rangement du dépôt — résidus, consolidation, bases saines pour balisage + localisation #9535
Description
É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.pyest un hook.pre-commit-config.yaml, fichier racine hors des chemins fouillés ;gh_payload_cache.pyn'est jamais nommé comme fichier : il est importé comme module parpick_idle_grain.py,series_saturation.pyet 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:239porte## 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é pargit grepdu 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.mdtrackés horsdocs/, dont 8 sousslides/**/analysis/(IMAGE_VALIDATION_REPORT.md,slidev_comparison_report.md,visual_quality_report.md, …), plusQuantConnect/projects/_docs/QUANTCONNECT_PROJECTS_AUDIT.md,scripts/quantconnect/quantbooks_execution_status.mdetSearch/discrepancy_lean/FORMAL_STATUS.md. L'acceptance dit « zéro non-pédagogique tracké horsdocs/» ; 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
- Le lot racine + orphelins — un grain LIGHT de quatre suppressions,
run_build_v7.shplus 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 descripts/) : y contribuer plutôt qu'ouvrir une fille de plus ; les mesures de ce bandeau y sont postées en commentaire. - 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. - 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. translations/(item 9) reste une décision user, pas un grain de lane : la fermeture de T3 moteur de traduction — fork Argumentumtranslate_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 :
- Balisage : catalogue automatisé (chore(catalog): catalogue hors-branche cron-only — stopper le silent-revert au merge (decision user 07/06) #2632, cron + drift), hiérarchie README ([EPIC] README ascendant — resynchroniser la hiérarchie (feuilles -> principal) depuis l'évolution du dépôt #3973 / [#3973] READMEs intermédiaires & centraux — première passe sans attendre feuilles 100% (P0 : hub notebooks + SymbolicAI) #4959). Baliser des résidus, c'est graver du bruit dans le catalogue.
- Localisation : Epic [EPIC] Traduction multilingue du depot via datasetupdater Argumentum (low priority) #1650 (français d'abord,
.en.mdpréservés). Traduire des fichiers qui devraient être supprimés ou déplacés est du travail perdu.
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 item = 1 grain = 1 PR atomique (catalog-pr-hygiene R3) ;
[CLAIMED]avant pickup ; catalogue byte-identique à main sur chaque branche. - 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.
- 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).
- 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-radixa 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.shtraités) ;.gitignorecouvre 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.mdnon-pédagogique tracké horsdocs/. - 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
chore(repo,#9535): untrack PR_BODY.md scratchpad + gitignore root path (
jsboige commentedon Aug 6, 2026
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) :
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:dotnet/src/Connectors/Connectors.AI.MultiConnector/MultiTextCompletionSettings.cs:271:→ Le hook est utilisé en production par le submodule. Le contrat « no fork required » est toujours valide.
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é.Risques de la disposition proposée :
https://github.com/MyIntelligenceAgency/semantic-fleet.git(branchestable-from-v0343) — pas jsboige-controlled, ne peut pas être « bumped » localement sans PR upstreamDisposition 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
chore(repo,#9535): remove agent-memory audit snapshot + reinforce git…
chore(repo,#9535): remove Audio v4 _legacy/ scripts (7 dead V3 pipeli…
chore(vibe-coding): normalize accented/space dir names, fix cross-refs (
chore(repo,#9535): retire root compile_ne_arm.sh + 2 archive FORMAL_S…
chore(repo,#9535): archive 7 CSP recycle one-shots to scripts/_archiv…
chore(repo,#9535): archive 10 one-shots post-#463 (item 4-bis) (#9580)
chore(repo,#9535): rename SymbolicAI/Lean/scripts/archive -> _archive…
chore(repo,#9535): rename SymbolicAI/Lean/scripts/archive -> _archive…
chore(repo,#9535): archive 4 one-shot fix scripts + 2 tests (item 4-t…
chore(repo,#9535): rename scripts/sudoku/_archived -> _archive (item …
chore(repo,#9535): rename SymbolicAI/Lean/scripts/archive -> _archive…
fix(search,#9535): repair 3 archive/ links broken by Search/archive -…
51 remaining items
docs(consolidation,#16473): acceptance 2 lot 1 — ledger de suivi des …
feat(scripts,#16473): --suggest-rattachement — heuristique axe->chape…
docs(consolidation,#16473): acceptance 2 lot 1 — ledger de suivi des …
docs(consolidation,#16473): acceptance 2 lot 1 — ledger de suivi des …
feat(scripts,#16473): --suggest-rattachement — heuristique axe->chape…
docs(consolidation,#16473): acceptance 2 lot 5 (axe D, 4 orphelines #…
docs(consolidation,#16473): acceptance 2 lot 1 — ledger de suivi des …
docs(consolidation,#16473): acceptance 2 lot 5 (axe D, 4 orphelines #…
feat(scripts,#16473): --suggest-rattachement — heuristique axe->chape…
docs(consolidation,#9535): item 7 -- pointeur mort allweather-lessons…
docs(consolidation,#16473): acceptance 2 lot 1 — ledger de suivi des …
docs(consolidation,#16473): acceptance 2 lot 5 (axe D, 4 orphelines #…
feat(scripts,#16473): --suggest-rattachement — heuristique axe->chape…
feat(scripts,#16473): --suggest-rattachement — heuristique axe->chape…
docs(consolidation,#16473): acceptance 2 lots 1+3+4+5+6 (axes B/A/C/D…