See #16473 (consolidation) et #7423 (revue globale du harnais, qui couvre CLAUDE.md et les règles, pas les définitions).
Contexte
Audit en lecture seule du 28/09 : 20 agents haiku ont confronté les 50 définitions du harnais (23 sous-agents de .claude/agents/, 8 commandes de .claude/commands/, 19 skills de .claude/skills/) au code de main (a86aee6e2a). Pour chaque lot, un sceptique a ensuite tenté de réfuter chaque constat. L'audit n'a rien exécuté ni écrit dans le dépôt.
- 140 constats, dont 96 survivent au sceptique.
- ai-01 a revérifié à la main, sur
main (f2db58966b), les constats rangés ci-dessous comme vérifiés. Les autres sont rapportés : à revérifier par la lane qui corrige (règle audit-reassessment).
- Un survivant était inversé. L'audit accusait
slide-improver d'appeler un outil mcp__sk-agent__call_agent inexistant. C'est l'inverse : le serveur sk-agent déclare call_agent(prompt, agent?, attachment?, ...) parmi ses 9 outils, et n'a plus d'outil analyze_image. C'est donc slide-analyzer qui est cassé (frontmatter l.4, appels l.73, l.90, l.106). Quatre fichiers citent encore analyze_image sur main : cet agent, skills/analyze-slides/SKILL.md, docs/reference/cluster-agents.md et docs/reference/slide-analyzer-sk-agent.md.
1. Conflits avec une règle HARD (vérifiés)
| Définition |
Ligne |
Ce qu'elle prescrit |
Règle contredite |
agents/notebook-enricher.md |
264 |
git checkout -- <notebook_path> pour revenir en arrière après un écrasement |
Checkout safety : checkout -- restaure depuis l'index et efface tout le non-commité du fichier. Remplacer par une sauvegarde cp et une restauration. |
skills/review-student-prs/SKILL.md |
135 |
« Push to main (after all PRs for the session are processed) » |
Pas de push direct sur main. Le dépôt visé est un argument de la skill : si c'est CoursIA, le geste est interdit ; si c'est un dépôt étudiant, sa charte fait foi. Il faut l'écrire. |
agents/notebook-iterative-builder.md |
308, 323, 336, 517, 540, 560, 580 |
sept Task(subagent_type="general-purpose", ...) sans model |
model-delegation : tout sous-agent porte un modèle explicite. |
agents/readme-hierarchy-auditor.md |
142 |
même motif, un Task() sans model |
idem |
agents/slide-improver.md |
111, 133, 223 |
images en colonne droite (![bg right:40%], ![bg right:35%], pile verticale à droite) |
Slides : images en overlay, jamais en colonne droite (#221). |
2. API ou options qui n'existent pas (vérifiés)
agents/notebook-validator.md
- Appelle
validator.validate_json_format() (l.112), validate_metadata() (l.115) et validate_all() (l.790). NotebookValidator (scripts/notebook_tools/notebook_tools.py:604) ne définit que validate_structure et validate_content, plus des méthodes privées.
- Appelle aussi
helper.get_kernel_name() (l.149, l.166), read_execution_report() (l.229), detect_notebook_level() (l.286) et analyzer.pedagogical_score() (l.795). Aucune n'existe sur NotebookHelper, ni ailleurs sous scripts/notebook_tools/. get_kernel_name existe comme fonction libre dans batch_reexecute.py:78 et validate_pr_notebooks.py:183, pas comme méthode.
- L'import
from scripts.notebook_helpers import NotebookHelper (l.106) vise un module absent. Le bon chemin est scripts/notebook_tools/notebook_helpers.py.
- Le frontmatter (l.4) déclare
Read, Glob, Grep, Bash, alors que le corps appelle helper.save(). Il faut trancher : un validateur en lecture seule, ou un validateur qui corrige.
agents/notebook-executor.md:272 : helper.set_cell_output(...) n'existe pas. NotebookHelper n'a que set_cell_source (l.123). Cet appel écrirait aussi une sortie à la main, ce que la règle 6 de secrets-hygiene interdit. L'import de la l.136 a le même défaut de chemin.
agents/notebook-designer.md
NotebookHelper.create_new(...) (l.543) n'existe pas.
- La l.528 appelle une sous-commande
notebook_helpers.py create, qui n'existe pas non plus. Les sous-commandes réelles sont list, analyze, get-source, get-output, sequence, validate-context, enrichment-plan, execute et detect-kernel.
- La l.117 construit l'objet par
NotebookHelper.__new__ et contourne _load().
- La l.205 importe Infer.NET en Python (
from InferNet import *) alors que la pile est en C#.
- La l.460 renvoie à une commande
/design-notebook absente de .claude/.
agents/notebook-cell-iterator.md:51, 104 : décrit un paramètre objective_type (contains, equals, regex...). CellIterator (notebook_helpers.py:572) prend un objective_checker appelable, et n'a pas de objective_type.
agents/genai-iterator.md:35 et skills/genai-iterate/SKILL.md:27 : python genai.py auth seul échoue. auth exige une action positionnelle, parmi init, sync, audit, get-token et reconstruct-env (commands/auth.py:26).
- Pour
genai.py docker (genai-iterator l.65 et genai-iterate l.26) et genai.py models (genai-iterator l.68), l'argument n'est pas obligatoire, mais sans sous-commande rien ne s'exécute. La forme documentée est genai.py docker status.
skills/validate-genai/SKILL.md:3 annonce --local, --remote et --quick. commands/validate.py:418-435 ne les définit pas.
skills/train-model/SKILL.md:15 prescrit validate_training_package.py --dry-run. Le script (ML-Training-Pipeline/scripts/validate_training_package.py:148-149) n'accepte que --verbose et --script.
3. Faits périmés (vérifiés)
skills/coordinate-adjoint/SKILL.md:110 affirme que « spool n'est pas une sous-commande » et que le CLI en déclare trois. scripts/coordination/debt_ledger.py en déclare quatre : init (l.2356), append (l.2361), spool (l.2380) et reduce (l.2385). La skill énonce donc le contraire de l'organe, sur la surface que l'adjoint suit à chaque cycle.
- l.116 :
dedupe_latest est à scripts/pr_gate.py l.543, pas l.537. Mieux vaut citer le nom seul.
skills/verify-notebooks/SKILL.md:36 range Sudoku en « .NET C#, cell-by-cell only ». La série compte 18 carnets C# et 19 Python.
OPTIMIZATION_BACKLOG.md vit sous MyIA.AI.Notebooks/QuantConnect/projects/_docs/. Trois définitions le cherchent au mauvais endroit :
skills/qc-helpers.md:185 ;
skills/qc-iterative-improve/SKILL.md:82 et :224 ;
agents/qc-strategy-improver.md:47.
agents/prover-forensic.md
- l.10 :
docs/subagents-reference.md a été déplacé sous docs/reference/.
- l.21 :
agent_tests/prover/traces/ n'est pas suivi. Les traces suivies sont sous MyIA.AI.Notebooks/SymbolicAI/Lean/agent_tests/prover/baselines/traces/ (10 fichiers). À vérifier : traces/ est peut-être un répertoire produit à l'exécution.
agents/genai-iterator.md:84-86 et skills/genai-iterate/SKILL.md:50-52
- Ils signalent des
yourdomain.com qu'on ne trouve plus nulle part sous GenAI/.
- Ils citent des noms de carnets périmés. Les noms actuels sont
04-4-Cross-Stitch-Pattern-Maker-Legacy et 01-Foundation/01-5b-Qwen-Image-Edit-2509.
agents/notebook-cell-iterator.md:348 : Search/CSPs_Intro.ipynb est archivé sous Search/_archive/.
agents/training-specialist.md
- l.3 annonce « RL/PPO », alors que le script est
train_dqn_rl.py, un DQN.
- l.28 affirme (vérifié le 2026-05-23) que
gpu_training.py « n'est PAS présent sur disque dans le repo ». Il est suivi sous QuantConnect/shared/gpu_training.py, avec son test. Le risque qui suit reste à garder : si l'import échoue depuis scripts/, le repli except ImportError désactive le garde thermique sans rien dire. Seule la prémisse est à corriger.
skills/notebook-helpers/SKILL.md:59 : Sudoku/Sudoku-01.ipynb n'existe pas. Les carnets s'appellent Sudoku-01-Backtracking-{Csharp,Python}.ipynb.
4. Rapportés, non revérifiés
Ces constats survivent au sceptique, mais ai-01 ne les a pas relus :
agents/slide-improver.md:37, 47 : elle lit slides.md, qui est au format Slidev, alors que les rendus Marp passent par slides.marp.md (12 fichiers suivis).
agents/genai-iterator.md:19-21 et skills/genai-iterate/SKILL.md:32 : les VRAM de la table GPU divergent de docs/genai/genai-services.md:293-303.
agents/qc-research-notebook.md:183, 198, 212, 227 : les projets ETF-Pairs-Trading et research/ sont introuvables sur main.
skills/qc-iterative-improve/SKILL.md:109 : le chemin lean-workspace/{Strategy}-Researcher/ n'existe pas.
commands/validate-genai.md:10 : il cite validate_stack.py, que son propre en-tête déclare déprécié au profit de genai.py validate.
agents/notebook-enricher.md:4 : il documente --execute et --fix-errors sans disposer de Bash.
agents/notebook-designer.md:507 : il annonce un noyau lean4, alors que les carnets Lean du dépôt utilisent un noyau Python.
Écartés à la vérification
skills/train-model/SKILL.md:36 (cool_sleep=30). Le défaut de thermal_check est 15 (gpu_training.py:94), mais les lanceurs passent 30 explicitement (btc_itransformer.py:226). La skill décrit l'usage, pas le défaut.
skills/qc-helpers.md:66-69 (search_quantconnect, check_syntax...). Le sceptique les a jugés absents en les comparant à la version allégée du serveur MCP QuantConnect. Ce ne peut pas trancher pour le serveur complet.
- Arguments de
commands/execute-notebook.md et de commands/cleanup-notebooks.md. Ce sont des arguments de commande slash, que l'agent interprète. Ce ne sont pas des options CLI.
verify-notebooks/SKILL.md:30 et corrective-sweeper.md:48. Les cibles existent. Le sceptique les avait laissés passer comme « informatifs ».
Geste
- Ces fichiers relèvent du harnais : la correction revient à ai-01, une PR par famille. D'abord les conflits de la section 1, puis les API de la section 2, qui envoient un agent sur une erreur dès son premier appel, puis les faits de la section 3.
- Deux options par API absente : la retirer de la définition, ou l'implémenter dans
scripts/notebook_tools/ si le besoin est réel. Ne pas en inventer une troisième.
- Mesure de fermeture : relancer la passe sur
main après les PRs, et constater zéro constat vérifié restant dans les sections 1 à 3. Les éléments de la section 4 sont chacun tranchés, par une correction ou par une phrase de motif sur cette issue.
See #16473 (consolidation) et #7423 (revue globale du harnais, qui couvre
CLAUDE.mdet les règles, pas les définitions).Contexte
Audit en lecture seule du 28/09 : 20 agents haiku ont confronté les 50 définitions du harnais (23 sous-agents de
.claude/agents/, 8 commandes de.claude/commands/, 19 skills de.claude/skills/) au code demain(a86aee6e2a). Pour chaque lot, un sceptique a ensuite tenté de réfuter chaque constat. L'audit n'a rien exécuté ni écrit dans le dépôt.main(f2db58966b), les constats rangés ci-dessous comme vérifiés. Les autres sont rapportés : à revérifier par la lane qui corrige (règleaudit-reassessment).slide-improverd'appeler un outilmcp__sk-agent__call_agentinexistant. C'est l'inverse : le serveur sk-agent déclarecall_agent(prompt, agent?, attachment?, ...)parmi ses 9 outils, et n'a plus d'outilanalyze_image. C'est doncslide-analyzerqui est cassé (frontmatter l.4, appels l.73, l.90, l.106). Quatre fichiers citent encoreanalyze_imagesurmain: cet agent,skills/analyze-slides/SKILL.md,docs/reference/cluster-agents.mdetdocs/reference/slide-analyzer-sk-agent.md.1. Conflits avec une règle HARD (vérifiés)
agents/notebook-enricher.mdgit checkout -- <notebook_path>pour revenir en arrière après un écrasementcheckout --restaure depuis l'index et efface tout le non-commité du fichier. Remplacer par une sauvegardecpet une restauration.skills/review-student-prs/SKILL.mdmain. Le dépôt visé est un argument de la skill : si c'est CoursIA, le geste est interdit ; si c'est un dépôt étudiant, sa charte fait foi. Il faut l'écrire.agents/notebook-iterative-builder.mdTask(subagent_type="general-purpose", ...)sansmodelmodel-delegation: tout sous-agent porte un modèle explicite.agents/readme-hierarchy-auditor.mdTask()sansmodelagents/slide-improver.md![bg right:40%],![bg right:35%], pile verticale à droite)2. API ou options qui n'existent pas (vérifiés)
agents/notebook-validator.mdvalidator.validate_json_format()(l.112),validate_metadata()(l.115) etvalidate_all()(l.790).NotebookValidator(scripts/notebook_tools/notebook_tools.py:604) ne définit quevalidate_structureetvalidate_content, plus des méthodes privées.helper.get_kernel_name()(l.149, l.166),read_execution_report()(l.229),detect_notebook_level()(l.286) etanalyzer.pedagogical_score()(l.795). Aucune n'existe surNotebookHelper, ni ailleurs sousscripts/notebook_tools/.get_kernel_nameexiste comme fonction libre dansbatch_reexecute.py:78etvalidate_pr_notebooks.py:183, pas comme méthode.from scripts.notebook_helpers import NotebookHelper(l.106) vise un module absent. Le bon chemin estscripts/notebook_tools/notebook_helpers.py.Read, Glob, Grep, Bash, alors que le corps appellehelper.save(). Il faut trancher : un validateur en lecture seule, ou un validateur qui corrige.agents/notebook-executor.md:272:helper.set_cell_output(...)n'existe pas.NotebookHelpern'a queset_cell_source(l.123). Cet appel écrirait aussi une sortie à la main, ce que la règle 6 desecrets-hygieneinterdit. L'import de la l.136 a le même défaut de chemin.agents/notebook-designer.mdNotebookHelper.create_new(...)(l.543) n'existe pas.notebook_helpers.py create, qui n'existe pas non plus. Les sous-commandes réelles sontlist,analyze,get-source,get-output,sequence,validate-context,enrichment-plan,executeetdetect-kernel.NotebookHelper.__new__et contourne_load().from InferNet import *) alors que la pile est en C#./design-notebookabsente de.claude/.agents/notebook-cell-iterator.md:51, 104: décrit un paramètreobjective_type(contains,equals,regex...).CellIterator(notebook_helpers.py:572) prend unobjective_checkerappelable, et n'a pas deobjective_type.agents/genai-iterator.md:35etskills/genai-iterate/SKILL.md:27:python genai.py authseul échoue.authexige une action positionnelle, parmiinit,sync,audit,get-tokenetreconstruct-env(commands/auth.py:26).genai.py docker(genai-iteratorl.65 etgenai-iteratel.26) etgenai.py models(genai-iteratorl.68), l'argument n'est pas obligatoire, mais sans sous-commande rien ne s'exécute. La forme documentée estgenai.py docker status.skills/validate-genai/SKILL.md:3annonce--local,--remoteet--quick.commands/validate.py:418-435ne les définit pas.skills/train-model/SKILL.md:15prescritvalidate_training_package.py --dry-run. Le script (ML-Training-Pipeline/scripts/validate_training_package.py:148-149) n'accepte que--verboseet--script.3. Faits périmés (vérifiés)
skills/coordinate-adjoint/SKILL.md:110affirme que «spooln'est pas une sous-commande » et que le CLI en déclare trois.scripts/coordination/debt_ledger.pyen déclare quatre :init(l.2356),append(l.2361),spool(l.2380) etreduce(l.2385). La skill énonce donc le contraire de l'organe, sur la surface que l'adjoint suit à chaque cycle.dedupe_latestest àscripts/pr_gate.pyl.543, pas l.537. Mieux vaut citer le nom seul.skills/verify-notebooks/SKILL.md:36range Sudoku en « .NET C#, cell-by-cell only ». La série compte 18 carnets C# et 19 Python.OPTIMIZATION_BACKLOG.mdvit sousMyIA.AI.Notebooks/QuantConnect/projects/_docs/. Trois définitions le cherchent au mauvais endroit :skills/qc-helpers.md:185;skills/qc-iterative-improve/SKILL.md:82et:224;agents/qc-strategy-improver.md:47.agents/prover-forensic.mddocs/subagents-reference.mda été déplacé sousdocs/reference/.agent_tests/prover/traces/n'est pas suivi. Les traces suivies sont sousMyIA.AI.Notebooks/SymbolicAI/Lean/agent_tests/prover/baselines/traces/(10 fichiers). À vérifier :traces/est peut-être un répertoire produit à l'exécution.agents/genai-iterator.md:84-86etskills/genai-iterate/SKILL.md:50-52yourdomain.comqu'on ne trouve plus nulle part sousGenAI/.04-4-Cross-Stitch-Pattern-Maker-Legacyet01-Foundation/01-5b-Qwen-Image-Edit-2509.agents/notebook-cell-iterator.md:348:Search/CSPs_Intro.ipynbest archivé sousSearch/_archive/.agents/training-specialist.mdtrain_dqn_rl.py, un DQN.gpu_training.py« n'est PAS présent sur disque dans le repo ». Il est suivi sousQuantConnect/shared/gpu_training.py, avec son test. Le risque qui suit reste à garder : si l'import échoue depuisscripts/, le repliexcept ImportErrordésactive le garde thermique sans rien dire. Seule la prémisse est à corriger.skills/notebook-helpers/SKILL.md:59:Sudoku/Sudoku-01.ipynbn'existe pas. Les carnets s'appellentSudoku-01-Backtracking-{Csharp,Python}.ipynb.4. Rapportés, non revérifiés
Ces constats survivent au sceptique, mais ai-01 ne les a pas relus :
agents/slide-improver.md:37, 47: elle litslides.md, qui est au format Slidev, alors que les rendus Marp passent parslides.marp.md(12 fichiers suivis).agents/genai-iterator.md:19-21etskills/genai-iterate/SKILL.md:32: les VRAM de la table GPU divergent dedocs/genai/genai-services.md:293-303.agents/qc-research-notebook.md:183, 198, 212, 227: les projetsETF-Pairs-Tradingetresearch/sont introuvables surmain.skills/qc-iterative-improve/SKILL.md:109: le cheminlean-workspace/{Strategy}-Researcher/n'existe pas.commands/validate-genai.md:10: il citevalidate_stack.py, que son propre en-tête déclare déprécié au profit degenai.py validate.agents/notebook-enricher.md:4: il documente--executeet--fix-errorssans disposer deBash.agents/notebook-designer.md:507: il annonce un noyaulean4, alors que les carnets Lean du dépôt utilisent un noyau Python.Écartés à la vérification
skills/train-model/SKILL.md:36(cool_sleep=30). Le défaut dethermal_checkest 15 (gpu_training.py:94), mais les lanceurs passent 30 explicitement (btc_itransformer.py:226). La skill décrit l'usage, pas le défaut.skills/qc-helpers.md:66-69(search_quantconnect,check_syntax...). Le sceptique les a jugés absents en les comparant à la version allégée du serveur MCP QuantConnect. Ce ne peut pas trancher pour le serveur complet.commands/execute-notebook.mdet decommands/cleanup-notebooks.md. Ce sont des arguments de commande slash, que l'agent interprète. Ce ne sont pas des options CLI.verify-notebooks/SKILL.md:30etcorrective-sweeper.md:48. Les cibles existent. Le sceptique les avait laissés passer comme « informatifs ».Geste
scripts/notebook_tools/si le besoin est réel. Ne pas en inventer une troisième.mainaprès les PRs, et constater zéro constat vérifié restant dans les sections 1 à 3. Les éléments de la section 4 sont chacun tranchés, par une correction ou par une phrase de motif sur cette issue.