From 112b2bfff8f3b1d3962c25e9537ed4b18c45a81d Mon Sep 17 00:00:00 2001 From: talpitoo Date: Wed, 22 Jul 2026 19:24:43 +0200 Subject: [PATCH 1/3] fix(devcontainer): repair postCreateCommand and pin Feature versions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - postCreateCommand called `npm run build:lib`, removed from the root package.json in #1004 — postCreate failed after `npm install`, so the library build and the Playwright install never ran. Build the core package directly instead. - Commit devcontainer-lock.json (git 1.3.8 / node 1.7.1 by digest) so upstream Feature releases no longer invalidate the multi-minute feature-install image layer on every fresh container create; document the lockfile and its upgrade path in the README. Co-Authored-By: Claude Fable 5 --- .devcontainer/README.md | 19 +++++++++++++++++++ .devcontainer/devcontainer-lock.json | 14 ++++++++++++++ .devcontainer/devcontainer.json | 2 +- 3 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 .devcontainer/devcontainer-lock.json diff --git a/.devcontainer/README.md b/.devcontainer/README.md index 1a60315f3..51449bfd8 100644 --- a/.devcontainer/README.md +++ b/.devcontainer/README.md @@ -33,6 +33,25 @@ once, and the volume keeps it. 3. Reinstall any apt packages you use (see the example below) — their auth and config are already on the volume. +## Feature versions are pinned (lockfile) + +[devcontainer-lock.json](devcontainer-lock.json) pins the exact versions of the +Dev Container Features (`node`, `git`) referenced by +[devcontainer.json](devcontainer.json), the same way `package-lock.json` pins +npm dependencies. Without it, `node:1` / `git:1` resolve to the newest upstream +release on every image build, and any new Feature release invalidates the +Docker layer that installs them — turning the next container create into a +multi-minute rebuild (several `apt` rounds plus the node toolchain install). +With the lockfile committed, image builds keep hitting the cached layer until +the pins are deliberately updated: + +```bash +npx @devcontainers/cli upgrade --workspace-folder . +``` + +Commit the updated lockfile afterwards. (Deleting the lockfile and rebuilding +has the same effect, minus the reproducibility.) + ## Example: one developer's loadout (Claude Code + GitHub CLI) An example of setting up personal tooling so that it persists. Substitute your diff --git a/.devcontainer/devcontainer-lock.json b/.devcontainer/devcontainer-lock.json new file mode 100644 index 000000000..9fc1270a7 --- /dev/null +++ b/.devcontainer/devcontainer-lock.json @@ -0,0 +1,14 @@ +{ + "features": { + "ghcr.io/devcontainers/features/git:1": { + "version": "1.3.8", + "resolved": "ghcr.io/devcontainers/features/git@sha256:fd75977de13a9979000e0e78baf949adb0ca71d2398995fa22e0a36d7e7e7fe2", + "integrity": "sha256:fd75977de13a9979000e0e78baf949adb0ca71d2398995fa22e0a36d7e7e7fe2" + }, + "ghcr.io/devcontainers/features/node:1": { + "version": "1.7.1", + "resolved": "ghcr.io/devcontainers/features/node@sha256:8c0de46939b61958041700ee89e3493f3b2e4131a06dc46b4d9423427d06e5f6", + "integrity": "sha256:8c0de46939b61958041700ee89e3493f3b2e4131a06dc46b4d9423427d06e5f6" + } + } +} diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index b17ef2ea5..fe0730285 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -15,7 +15,7 @@ // Use 'forwardPorts' to make a list of ports inside the container available locally. // "forwardPorts": [], // Use 'postCreateCommand' to run commands after the container is created. - "postCreateCommand": "npm install && npm run build:lib && cd packages/openbridge-webcomponents && npx playwright install --with-deps chromium", + "postCreateCommand": "npm install && cd packages/openbridge-webcomponents && npm run build && npx playwright install --with-deps chromium", // Persist the container user's home directory across rebuilds (named Docker // volume). Tool-agnostic developer convenience: anything installed into // $HOME survives "Rebuild Container" — per-developer AI/CLI tooling and its From bd5e35e836fc3bc1f0922bdfbb21c4eb8f8f5967 Mon Sep 17 00:00:00 2001 From: talpitoo Date: Wed, 22 Jul 2026 19:26:04 +0200 Subject: [PATCH 2/3] docs(readme): drop stale build:lib reference in manual setup Co-Authored-By: Claude Fable 5 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index dac013303..c231f4666 100644 --- a/README.md +++ b/README.md @@ -103,7 +103,7 @@ To get started with developing the components: 1. Clone the repository. 2. Install Node.js (v20+). 3. Run `npm install` in the root folder. -4. Run `npm run build:lib` to build all libraries. +4. Run `npm run build -w packages/openbridge-webcomponents` to build the core library. For more detailed development instructions, see [IMPLEMENTATION_GUIDELINES.md](IMPLEMENTATION_GUIDELINES.md), [AGENTS.md](AGENTS.md) and [CONTRIBUTING.md](CONTRIBUTING.md). From 6c65c40f2713764d1147491bccd6a8e9344f99f8 Mon Sep 17 00:00:00 2001 From: talpitoo Date: Wed, 22 Jul 2026 17:43:41 +0000 Subject: [PATCH 3/3] docs(devcontainer): note upgrade command must run from repo root Co-Authored-By: Claude Opus 4.8 (1M context) --- .devcontainer/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.devcontainer/README.md b/.devcontainer/README.md index 51449bfd8..ed27c9de9 100644 --- a/.devcontainer/README.md +++ b/.devcontainer/README.md @@ -43,7 +43,8 @@ release on every image build, and any new Feature release invalidates the Docker layer that installs them — turning the next container create into a multi-minute rebuild (several `apt` rounds plus the node toolchain install). With the lockfile committed, image builds keep hitting the cached layer until -the pins are deliberately updated: +the pins are deliberately updated (run from the repository root, so +`--workspace-folder .` resolves to the folder containing `.devcontainer/`): ```bash npx @devcontainers/cli upgrade --workspace-folder .