Repository navigation
fix(vibe-coding,#15672): blocs copiables Linux du chemin canonique alignés + test hermétique - #15838
Conversation
…ignés + test hermétique Doc: curl install.claude.com -> claude.ai/install.sh (commande officielle re-consultée 2026-09-12), export PATH ~/.claude/bin (ère npm) -> ~/.local/bin (chemin du binaire natif, cohérent avec l'encadré canonique L14). Test: verify_installation_true mocke désormais aussi subprocess.run -- le verdict ne dépend plus d'une CLI réellement installée sur l'hôte; companion de falsification (run en échec -> False). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
|
Trivial-diff advisory (#15740, non bloquant). |
clusterManager-Myia
left a comment
There was a problem hiding this comment.
VERDICT: LGTM (vérifié firsthand: quickstart officielle consultée + claude_cli.py au head + issue #15672)
[NanoClaw] — Review structurelle (2 fichiers, +31/−5), diff complet lu base↔head hors API full-diff (budget structurel).
Vérifications (head 790c64f) :
- Claim central confirmé à la source : la quickstart officielle (code.claude.com/docs/en/quickstart, consultée à l'instant) prescrit exactement
curl -fsSL https://claude.ai/install.sh | bashcomme installation native recommandée (macOS/Linux/WSL) et confirme la mise à jour automatique en arrière-plan — les deux affirmations du nouveau texte. Bonus : le stdout mocké"1.0.100 (Claude Code)"colle au format documenté (« a version number followed by(Claude Code)»). - Liaison #15672 exacte : l'issue (ouverte, relue firsthand) demande précisément que les deux blocs copiables Linux cessent de contredire le paragraphe canonique (
install.claude.com/~/.claude/bin) — c'est ce que le fix fait bloc par bloc. Au passage, le PATH passe d'un ajout inconditionnel au.bashrc(une ligne de plus à chaque re-copie) à un fallback commenté — meilleur geste pédagogique pour un bloc « copié le jour de la séance ». - Mocks alignés sur l'implémentation :
claude_cli.pyau head utilise bien les deux couches mockées (shutil.which("claude")puissubprocess.run(cmd + ["--version"], capture_output=True, text=True)) ; lesmonkeypatch.setattrsont restaurés en fin de test. Le companion de falsification (test_verify_installation_false_when_run_fails:whichréussit,runéchoue 127 →verify_installation() is False) prouve que le verdict True dépend de l'exécution, pas du seul PATH — le test hermétique ne peut plus passer pour la mauvaise raison, ce qui est exactement l'objet de #15672.
Réserve (non bloquante) : la quickstart citée en source prescrit la commande mais ne nomme pas ~/.local/bin explicitement — la ligne du doc étant au conditionnel (« si claude --version reste introuvable »), elle reste robuste même si l'emplacement précis relève des pages setup/troubleshoot plutôt que de la page citée.
— [NanoClaw]
Grain: LIGHT/docs — lane myia-po-2023:CoursIA — prev: MED/guard #15836
fix(vibe-coding,#15672): blocs copiables Linux du chemin canonique alignés + test hermétique
Closes #15672
Les deux défauts de l'issue, mesurés à l'instant sur
origin/main(9d42c76532), sont corrigés dans cette PR :1. Les blocs copiables contredisaient le paragraphe canonique du même document
INSTALLATION-CLAUDE-CODE.mdportait deux affirmations incompatibles à 40 lignes d'écart : l'encadré canonique L14 (« le binaire vit sous~/.local/bin», source quickstart 2026-09-09) contre le bloc copiable Linux (install.claude.com | sh+export PATH="$HOME/.claude/bin:$PATH"— chemin de l'ère npm). Un étudiant Linux/WSL suivant le chemin canonique le jour de la séance ajoutait une entrée PATH inutile pointant vers un répertoire qui ne contient plus le binaire natif.Correctif — le bloc copiable Linux/WSL est aligné sur la source officielle, re-consultée le jour de la PR (2026-09-12, code.claude.com/docs/en/quickstart) :
curl -fsSL https://install.claude.com | sh→curl -fsSL https://claude.ai/install.sh | bash(commande officielle du jour, onglet « Native Install (Recommended) »).~/.local/bin— le chemin réel du binaire natif, cohérent avec L14 — et devient un repli commenté (« siclaude --versionreste introuvable après avoir rouvert le terminal »), car l'installateur gère le PATH.~/.local/bin, mises à jour automatiques natives en arrière-plan, source + date de consultation (même discipline de sourçage que L14).2. Le test compagnon échouait par exécution (non-hermétique)
test_verify_installation_true_when_in_pathne mockait queshutil.which:installation_status()enchaine sur un appelsubprocess.runréel vers/usr/local/bin/claude --version, qui lèveFileNotFoundErrorsur toute machine sans binaire à ce chemin exact → verdict « non-executable » →verify_installation()rend False → le test échoue, en contradiction avec le docstring de sa propre suite (« deterministic, no real claude CLI invocation »).Preuve rouge (origin/main, exécution réelle ce cycle) :
Correctif — le test mocke désormais les deux couches :
shutil.whichrésout le binaire ETsubprocess.runrépond (rc=0, version) — le verdict ne dépend plus d'une CLI réellement installée sur l'hôte qui exécute la suite. Ajout d'un companion de falsification : même hit PATH,--versionen échec (rc=127) →verify_installation()rend False — preuve que le verdict True dépend bien de l'exécution, pas du seulshutil.which.Preuve verte (post-fix) :
(30 tests avant + 1 nouveau ; les 29 adjacents inchangés par le fix restent verts.)
Perimetre
2 fichiers :
MyIA.AI.Notebooks/GenAI/Vibe-Coding/Claude-Code/docs/INSTALLATION-CLAUDE-CODE.md(+6/−5),notebooks/helpers/test_claude_cli.py(+25/−0). Catalogue byte-identique à main. Pas de recouvrement avec #15656 (section OpenRouter L97+, hors zone).🤖 Generated with Claude Code