heartwood every commit a ring

the soil's own node feeds playwright, the chrome shim shrinks to a glob

8518bead by Isaac Bythewood · 1 day ago

modified CLAUDE.md
@@ -51,7 +51,7 @@ There are no tests, linters, or build steps in this repo — it is pure configur  - `dotfiles/host/zed-settings.json` -> `%APPDATA%\Zed\settings.json`  - `dotfiles/host/zed-keymap.json` -> `%APPDATA%\Zed\keymap.json`  - `dotfiles/host/ssh-config` -> `~\.ssh\config` (merge into existing entries if you have other Hosts already configured)- **`containers/webdev/`** — Ubuntu 24.04 dev container with Node 22, Python 3 (pip + uv), Bun, Rust (rustup-managed stable toolchain with rust-analyzer, clippy, rustfmt — for the axum projects and the Claude Code rust-analyzer LSP plugin), Docker CLI, Playwright Chromium (under `/opt/playwright-browsers`, for the Claude playwright MCP), and standard dev tools (neovim, tmux, git, rsync, htop, nmap, unzip, etc.). Stays alive via `sleep infinity`; entered through `docker exec -it ... tmux` for the TUI workflow or over SSH on host port 2222 for editor remote-dev. `entrypoint.sh` starts sshd before exec'ing CMD; host keys persist in the `bythewood-ssh` volume so fingerprints survive rebuilds. Started with `docker run --init` so PID 1 reaps zombies left behind when tmux/sshd children exit. Helper scripts (`restic-backup`, `restic-restore`, `restic-status`, `code-sync`, `server-health-check`) are baked in at `/home/dev/scripts/` and on PATH. Host setup is automated by `bootstrap.ps1`.- **`containers/webdev/`** — Ubuntu 24.04 dev container with Node (apt, only for `npx playwright install`), Python 3 (pip + uv), Bun, Rust (rustup-managed stable toolchain with rust-analyzer, clippy, rustfmt — for the axum projects and the Claude Code rust-analyzer LSP plugin), Docker CLI, Playwright Chromium (under `/opt/playwright-browsers`, for the Claude playwright MCP), and standard dev tools (neovim, tmux, git, rsync, htop, nmap, unzip, etc.). Stays alive via `sleep infinity`; entered through `docker exec -it ... tmux` for the TUI workflow or over SSH on host port 2222 for editor remote-dev. `entrypoint.sh` starts sshd before exec'ing CMD; host keys persist in the `bythewood-ssh` volume so fingerprints survive rebuilds. Started with `docker run --init` so PID 1 reaps zombies left behind when tmux/sshd children exit. Helper scripts (`restic-backup`, `restic-restore`, `restic-status`, `code-sync`, `server-health-check`) are baked in at `/home/dev/scripts/` and on PATH. Host setup is automated by `bootstrap.ps1`.- **`hosts/alpine/`** — Production server setup: Caddy (in Docker, auto HTTPS) on the shared `bythewood-edge` network for reverse-proxying, Docker Compose for services, restic backups to Backblaze B2, UFW firewall, push-to-deploy via git hooks.## Deployed Projects
modified containers/webdev/Dockerfile
@@ -60,23 +60,21 @@ RUN apt-get update && \        # Python        python3 python3-pip python3-venv \        # Docker (buildx enables BuildKit cache mounts in Dockerfiles)        docker.io docker-compose-v2 docker-buildx && \    curl -fsSL https://deb.nodesource.com/setup_22.x | bash - && \    apt-get install -y nodejs && \        docker.io docker-compose-v2 docker-buildx \        # Node (only used for `npx playwright install` below; bun is the JS runtime)        nodejs npm && \    curl -fsSL https://astral.sh/uv/install.sh | env UV_INSTALL_DIR=/usr/local/bin sh && \    curl -fsSL https://bun.sh/install | env BUN_INSTALL=/usr/local bash# Playwright Chromium for the Claude playwright MCP. The MCP defaults to the# stable-Chrome discovery path /opt/google/chrome/chrome, so symlink the# version-pinned playwright build there. The find resolves chromium-NNNN at# build time, so a future playwright bump still produces a valid link.# Playwright Chromium for the Claude playwright MCP. The MCP looks for stable# Chrome at /opt/google/chrome/chrome, so symlink the playwright build there.# The chromium-* glob absorbs future playwright revision bumps.ENV PLAYWRIGHT_BROWSERS_PATH=/opt/playwright-browsersRUN npx --yes playwright@latest install --with-deps chromium && \    chmod -R a+rx /opt/playwright-browsers && \    chrome_bin=$(find /opt/playwright-browsers -maxdepth 3 -path '*/chrome-linux64/chrome' | head -n 1) && \    test -x "$chrome_bin" && \    mkdir -p /opt/google/chrome && \    ln -snf "$chrome_bin" /opt/google/chrome/chrome    ln -snf /opt/playwright-browsers/chromium-*/chrome-linux64/chrome /opt/google/chrome/chrome && \    test -x /opt/google/chrome/chromeRUN ln -snf /usr/share/zoneinfo/UTC /etc/localtime && echo "UTC" > /etc/timezone