Skip to content

fix(vibe-coding,#15672): blocs copiables Linux du chemin canonique alignés + test hermétique - #15838

Merged
jsboige merged 1 commit into
mainfrom
fix/15672-install-docs-canonical
Sep 13, 2026
Merged

jsboige merged 1 commit into
mainfrom
fix/15672-install-docs-canonical

Conversation

@jsboige

@jsboige jsboige commented Sep 12, 2026

Copy link
Copy Markdown
Owner

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.md portait 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) »).
  • L'export PATH pointe désormais sur ~/.local/bin — le chemin réel du binaire natif, cohérent avec L14 — et devient un repli commenté (« si claude --version reste introuvable après avoir rouvert le terminal »), car l'installateur gère le PATH.
  • Prose ajoutée sous le bloc : binaire sous ~/.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_path ne mockait que shutil.which : installation_status() enchaine sur un appel subprocess.run réel vers /usr/local/bin/claude --version, qui lève FileNotFoundError sur 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) :

test_claude_cli.py::test_verify_installation_true_when_in_path
E   assert False is True
======================== 1 failed, 29 passed in 1.87s =========================

Correctif — le test mocke désormais les deux couches : shutil.which résout le binaire ET subprocess.run ré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, --version en échec (rc=127) → verify_installation() rend False — preuve que le verdict True dépend bien de l'exécution, pas du seul shutil.which.

Preuve verte (post-fix) :

test_claude_cli.py ...............................                       [100%]
============================= 31 passed in 0.52s ==============================

(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

…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>
@github-actions

Copy link
Copy Markdown
Contributor

Trivial-diff advisory (#15740, non bloquant).
genre docs dans la famille META (docs/guard/ledger/readme/test) + diff de 36 lignes changees (<= 100) + aucune exception ecrite dans le body : le litmus de la trivialite (une douzaine d'instances scannees a la suite) est credible. Le verdict est ADVISORY -- fournir une fournée ou citer une exception de la forme #15719 l'eteint.
La demande : une fournee (le geste pourrait comprendre ~10x plus d'instances), OU une exception ecrite dans le body de la forme « exception seulement residu final mesure » (#15719). Editer le body re-deroule cet organe et retire le label.

@clusterManager-Myia clusterManager-Myia left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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) :

  1. 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 | bash comme 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) »).
  2. 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 ».
  3. Mocks alignés sur l'implémentation : claude_cli.py au head utilise bien les deux couches mockées (shutil.which("claude") puis subprocess.run(cmd + ["--version"], capture_output=True, text=True)) ; les monkeypatch.setattr sont restaurés en fin de test. Le companion de falsification (test_verify_installation_false_when_run_fails : which ré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]

@github-actions

github-actions Bot commented Sep 12, 2026 •

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359) — résolue

La collision de chemins signalée sur #15838 n'existe plus au passage du 2026-09-13T06:28Z : aucune autre PR ouverte ne partage désormais de chemin de fichier avec elle. Note laissée en place de l'avertissement (retraction non destructive).

@jsboige
jsboige merged commit 9dbe75a into main Sep 13, 2026
20 of 21 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

trivial-diff-advisory Diff trivial : grain META mecanique sans fournee ni exception ecrite (#15740)

Projects

None yet

2 participants