fix(docker): claude-code via npm + pinned default #29

Merged
janpeter merged 4 commits from fix/claude-code-npm-install into master 2026-06-08 08:39:27 +02:00
Owner

Fix: claude-code via npm in Dockerfile claude stage

Vervangt RUN curl claude.ai/install.sh | bash met npm install -g @anthropic-ai/claude-code@${CLAUDE_CODE_VERSION}. Phase 0 Task 8 op host 154 ontdekte dat verse fleet-rebuilds (no---target build) faalden op de upstream installer — die plaatst het binary niet meer op /root/.local/bin/claude binnen een Docker RUN-laag. Het draaiende production-image (gebouwd vóór de upstream-wijziging) heeft geen probleem, maar elke rebuild (update_mcp_worker, redeploy_all, codex-image, nieuwe agent) klapt.

Plan + reviews

  • Plan: docs/superpowers/plans/2026-06-08-claude-code-npm-install-fix.md (in deze PR)
  • Codex round-1: NO-GO → 2× P2 + 2× P3 — review-bestand op ~/Development/s4m-queue/reviews/2026-06-08-scrum4me-docker-claude-installer-fix-plan-review-codex.md
  • Codex round-2: GO + 3 non-blocking editorial notes (verwerkt) — review-bestand op ~/Development/s4m-queue/reviews/2026-06-08-scrum4me-docker-claude-installer-fix-plan-r2-review-codex.md

Wijzigingen

Dockerfileclaude-stage:

# was:
ARG CLAUDE_CODE_VERSION=latest
RUN curl -fsSL https://claude.ai/install.sh | bash -s ${CLAUDE_CODE_VERSION} \
    && cp /root/.local/bin/claude /usr/local/bin/claude \
    && chmod +x /usr/local/bin/claude \
    && claude --version

# nu:
ARG CLAUDE_CODE_VERSION=2.1.153
RUN npm install -g @anthropic-ai/claude-code@${CLAUDE_CODE_VERSION} \
    && npm cache clean --force \
    && claude --version | grep -F "${CLAUDE_CODE_VERSION}"
  • $HOME-onafhankelijk (npm gebruikt z'n eigen prefix, niet $HOME/.local/bin).
  • Deterministisch + reproducerbaar: pin op een exacte versie + assert via grep -F zodat een verkeerde pin (typo, niet-bestaande npm-versie) hard faalt.
  • Symmetrisch met de bestaande codex-stage (@openai/codex@0.137.0-alpha.4 met identieke grep -F-assert) — één install-recept over beide CLI's.
  • Geen extra apt-deps: base heeft al Node 22 + npm + tsx.
  • @anthropic-ai/claude-code engines.node >=18.0.0 (npm metadata 2026-06-08); base draait Node 22 — ruim voldoende.

Waarom 2.1.153? Huidige npm stable dist-tag (2026-06-08: stable=2.1.153, latest=2.1.168). Stable is de veiligste default zonder verdere productie-version-evidence — een bump naar latest zou een bewuste keuze moeten zijn met canary-bewijs. Overrride via --build-arg CLAUDE_CODE_VERSION=... of .env.

.env.exampleCLAUDE_CODE_VERSION=latestCLAUDE_CODE_VERSION=2.1.153 met expliciete pin-rationale + verwijzing naar npm view @anthropic-ai/claude-code dist-tags.

README.md — build-arg-voorbeeld geupdate; nieuwe sectie CLAUDE_CODE_VERSION — pin van de Claude Code CLI onder de bestaande MCP_GIT_REF bump-instructies.

Verification

  • Plan-doc en r1 + r2 review-bestanden zijn gepushed in deze branch.
  • Mijn r1/r2 plan-review-cyclus reproduceerde niet lokaal (Docker daemon was niet aan op de mac in die sessies); grounding rust op (a) host-agent's directe observatie in Phase 0 Task 8 + (b) statische read van claude.ai/install.sh die de $HOME-afhankelijkheid bevestigt (DOWNLOAD_DIR="$HOME/.claude/downloads" op regel 15, binary_path="$DOWNLOAD_DIR/claude-$version-$platform" op regel 134, gevolgd door "$binary_path" install op regel 158).
  • Step 4 canary op host 154 (fleet-regression gate) is in deze PR de finale verificatie — niet in deze repo uit te voeren. Dispatch volgt direct na PR-merge: bouw worker-idea image vanaf de gemergde master + --force-recreate worker-idea + verifieer dat een echte Claude-job DONE wordt + worker-idea-fleet ononderbroken claimt. Rollout-acceptatie hangt af van die canary.

Out of scope

  • Wijzigingen aan codex-stage (al op pinned npm install).
  • Wijzigingen aan bin/run-one-job.ts, bin/check-tokens.sh, .claude/settings.json — install-method-onafhankelijk.
  • Een version-bump voorbij 2.1.153. Bewuste bumps gaan via een nieuwe PR die ARG + .env.example + README simultaan update.

🤖 Generated with Claude Code

# Fix: claude-code via npm in Dockerfile claude stage Vervangt `RUN curl claude.ai/install.sh | bash` met `npm install -g @anthropic-ai/claude-code@${CLAUDE_CODE_VERSION}`. Phase 0 Task 8 op host 154 ontdekte dat verse fleet-rebuilds (no-`--target` build) faalden op de upstream installer — die plaatst het binary niet meer op `/root/.local/bin/claude` binnen een Docker `RUN`-laag. Het draaiende production-image (gebouwd vóór de upstream-wijziging) heeft geen probleem, maar elke rebuild (`update_mcp_worker`, `redeploy_all`, codex-image, nieuwe agent) klapt. ## Plan + reviews - Plan: `docs/superpowers/plans/2026-06-08-claude-code-npm-install-fix.md` (in deze PR) - Codex round-1: NO-GO → 2× P2 + 2× P3 — review-bestand op `~/Development/s4m-queue/reviews/2026-06-08-scrum4me-docker-claude-installer-fix-plan-review-codex.md` - Codex round-2: **GO** + 3 non-blocking editorial notes (verwerkt) — review-bestand op `~/Development/s4m-queue/reviews/2026-06-08-scrum4me-docker-claude-installer-fix-plan-r2-review-codex.md` ## Wijzigingen **`Dockerfile`** — `claude`-stage: ```dockerfile # was: ARG CLAUDE_CODE_VERSION=latest RUN curl -fsSL https://claude.ai/install.sh | bash -s ${CLAUDE_CODE_VERSION} \ && cp /root/.local/bin/claude /usr/local/bin/claude \ && chmod +x /usr/local/bin/claude \ && claude --version # nu: ARG CLAUDE_CODE_VERSION=2.1.153 RUN npm install -g @anthropic-ai/claude-code@${CLAUDE_CODE_VERSION} \ && npm cache clean --force \ && claude --version | grep -F "${CLAUDE_CODE_VERSION}" ``` - `$HOME`-onafhankelijk (npm gebruikt z'n eigen prefix, niet `$HOME/.local/bin`). - Deterministisch + reproducerbaar: pin op een exacte versie + assert via `grep -F` zodat een verkeerde pin (typo, niet-bestaande npm-versie) hard faalt. - Symmetrisch met de bestaande `codex`-stage (`@openai/codex@0.137.0-alpha.4` met identieke `grep -F`-assert) — één install-recept over beide CLI's. - Geen extra apt-deps: `base` heeft al Node 22 + npm + tsx. - `@anthropic-ai/claude-code` `engines.node >=18.0.0` (npm metadata 2026-06-08); base draait Node 22 — ruim voldoende. **Waarom `2.1.153`?** Huidige npm `stable` dist-tag (2026-06-08: `stable=2.1.153`, `latest=2.1.168`). Stable is de veiligste default zonder verdere productie-version-evidence — een bump naar `latest` zou een bewuste keuze moeten zijn met canary-bewijs. Overrride via `--build-arg CLAUDE_CODE_VERSION=...` of `.env`. **`.env.example`** — `CLAUDE_CODE_VERSION=latest` → `CLAUDE_CODE_VERSION=2.1.153` met expliciete pin-rationale + verwijzing naar `npm view @anthropic-ai/claude-code dist-tags`. **`README.md`** — build-arg-voorbeeld geupdate; nieuwe sectie `CLAUDE_CODE_VERSION — pin van de Claude Code CLI` onder de bestaande `MCP_GIT_REF` bump-instructies. ## Verification - Plan-doc en r1 + r2 review-bestanden zijn gepushed in deze branch. - Mijn r1/r2 plan-review-cyclus reproduceerde **niet** lokaal (Docker daemon was niet aan op de mac in die sessies); grounding rust op (a) host-agent's directe observatie in Phase 0 Task 8 + (b) statische read van `claude.ai/install.sh` die de `$HOME`-afhankelijkheid bevestigt (`DOWNLOAD_DIR="$HOME/.claude/downloads"` op regel 15, `binary_path="$DOWNLOAD_DIR/claude-$version-$platform"` op regel 134, gevolgd door `"$binary_path" install` op regel 158). - **Step 4 canary op host 154** (fleet-regression gate) is in deze PR de finale verificatie — niet in deze repo uit te voeren. Dispatch volgt direct na PR-merge: bouw worker-idea image vanaf de gemergde master + `--force-recreate worker-idea` + verifieer dat een echte Claude-job DONE wordt + worker-idea-fleet ononderbroken claimt. Rollout-acceptatie hangt af van die canary. ## Out of scope - Wijzigingen aan `codex`-stage (al op pinned npm install). - Wijzigingen aan `bin/run-one-job.ts`, `bin/check-tokens.sh`, `.claude/settings.json` — install-method-onafhankelijk. - Een version-bump voorbij `2.1.153`. Bewuste bumps gaan via een nieuwe PR die ARG + .env.example + README simultaan update. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Phase-0 Task 8 op 154 ontdekte dat verse fleet-rebuilds breken op de
claude.ai/install.sh upstream — die plaatst het binary niet meer op
/root/.local/bin/claude in een Docker RUN-laag (HOME-interactie). Dit
plan vervangt de installer door 'npm install -g @anthropic-ai/claude-code'
— $HOME-onafhankelijk, deterministisch, symmetrisch met de bestaande
codex stage.

Awaiting codex review op de mac voor merge.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
P2.1 — Step 1 reproductie-gate naar diagnostic-evidence gate; host-agent
build-log uit Task 8 telt als geldig bewijs als lokale reproductie niet
beschikbaar of niet reproduceert.
P2.2 — Dockerfile-default gepinned op CLAUDE_CODE_VERSION=2.1.153 (npm
stable) + 'claude --version | grep -F' assert, spiegelt het codex-stage
patroon.
P3.1 — Step 3 smoke uitgebreid met daemon-like invocation (stream-json
+ verbose), tweelaags zodat flag-validation zonder auth kan.
P3.2 — Node-engine constraint (>=18, base op Node 22) toegevoegd aan de
Risks-lijst.
Vraag-6 follow-on — Step 2b toegevoegd voor .env.example + README; uit
out-of-scope-lijst gehaald. Verification rolled-up bijgewerkt.

Review-bestand: s4m-queue/reviews/2026-06-08-scrum4me-docker-claude-installer-fix-plan-review-codex.md

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Step 2b verplaatst van na Step 5 naar tussen Step 2 en Step 3 (logische
  uitvoer-volgorde — .env.example/README hoort vóór de local build-smoke).
- Step 1 wording: 'mandatory gates vóór merge' → 'mandatory voor rollout-
  acceptatie'; PR mag mergen na codex-review maar rollout telt pas als
  geslaagd nadat Step 4 op 154 GROEN is.
- Install.sh regel-referentie: 138 → 134 (verified via curl + grep).

Codex r2-review: GO. Geen P1/P2/P3 meer open.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Vervangt `RUN curl claude.ai/install.sh | bash` in de claude-stage door
`npm install -g @anthropic-ai/claude-code@${CLAUDE_CODE_VERSION}`. De
upstream installer downloadt naar $HOME/.claude/downloads + delegeert
naar `claude install`, wat in een Docker RUN-laag het binary niet meer
op /root/.local/bin/claude plaatst — verse fleet-rebuilds faalden
daarop (geverifieerd door host-agent in Phase 0 Task 8 op 154,
2026-06-08).

Dockerfile-default gepinned op CLAUDE_CODE_VERSION=2.1.153 (npm
stable-tag per 2026-06-08) + `claude --version | grep -F` assert,
spiegelt het bestaande codex-stage patroon. Bewuste bumps gaan via een
PR die ARG + .env.example + README simultaan update.

.env.example: regel naar 2.1.153 met uitgebreid commentaar.
README.md: build-arg example geupdate; nieuwe CLAUDE_CODE_VERSION
sectie toegevoegd onder de bestaande MCP_GIT_REF + bump-instructies.

Plan: docs/superpowers/plans/2026-06-08-claude-code-npm-install-fix.md
Codex review: r1 NO-GO → P2-fixes → r2 GO.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
janpeter merged commit 16ead86184 into master 2026-06-08 08:39:27 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
janpeter/scrum4me-docker!29
No description provided.