From 5e5e7ea9519ffca1c5a28bf95768bb771cbf0f25 Mon Sep 17 00:00:00 2001 From: clawbot <35+clawbot@noreply.example.org> Date: Sun, 4 Oct 2026 14:48:47 +0200 Subject: [PATCH] Say which Dockerfile stages run script/bootstrap (closes #90) The bullet in `prompts/REPO_POLICIES.md` that requires a `Dockerfile` said every Dockerfile installs its prerequisites by running `script/bootstrap`, which the canonical Go `Dockerfile` in the same file never does. Reading the example as the deliberate one, the bullet now says the gate phases and the build stage start from their pinned base images and install what those images lack either inline, as the Go example does for `git`, or by running `script/bootstrap`, as this repository's own `Dockerfile` does for its yarn packages; the development environment stage of a non-server repo runs `script/bootstrap`. The new repo checklist item says the same. The `COPY --from=` lines and the build stage's `apk add` line are unchanged. Model: opus-5-5 --- TODO.md | 7 +++++++ prompts/NEW_REPO_CHECKLIST.md | 6 ++++-- prompts/REPO_POLICIES.md | 12 ++++++++---- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/TODO.md b/TODO.md index 673f109..0717a5f 100644 --- a/TODO.md +++ b/TODO.md @@ -21,6 +21,13 @@ fmt-check, and commit. # Completed Steps +- 2026-10-04: `REPO_POLICIES.md` now says which `Dockerfile` stages run + `script/bootstrap` (issue 90). The gate phases and the build stage start from + their pinned base images and install what those images lack either inline, as + the canonical Go `Dockerfile` does for `git`, or by running + `script/bootstrap`, as this repo's own `Dockerfile` does for its yarn + packages. The development environment stage, the final stage of a non-server + repo, runs `script/bootstrap`. The new repo checklist says the same. - 2026-10-04: Added a root `.gitattributes` that merges `TODO.md` with git's union merge (issue 98), so two branches that each add an entry at the top of Completed Steps merge without a conflict. Git now never reports a conflict in diff --git a/prompts/NEW_REPO_CHECKLIST.md b/prompts/NEW_REPO_CHECKLIST.md index 575c6fc..b425e37 100644 --- a/prompts/NEW_REPO_CHECKLIST.md +++ b/prompts/NEW_REPO_CHECKLIST.md @@ -124,8 +124,10 @@ are thin shims calling them. Model scripts: - [ ] `script/bootstrap` / `make bootstrap` — installs all dependencies, idempotently, assuming nothing (pkg manager detection nix/apt/brew/apk; node used if present, else pinned version via nvm from a hash-verified - archive; pinned yarn via corepack); Dockerfile runs it instead of inline - installs + archive; pinned yarn via corepack); a non-server repo's development + environment stage runs it instead of inline installs; a gate phase or the + build stage installs what its base image lacks either inline or by running + it - [ ] `script/setup` / `make setup` — readies a fresh clone: runs `bootstrap`, then `install-precommit`, plus repo-specific init - [ ] `script/test` / `make test` — `docker build --no-cache --target test .`, diff --git a/prompts/REPO_POLICIES.md b/prompts/REPO_POLICIES.md index bd423c9..8c72a7b 100644 --- a/prompts/REPO_POLICIES.md +++ b/prompts/REPO_POLICIES.md @@ -104,10 +104,14 @@ style conventions are in separate documents: `lint` phase and a `test` phase, with the final stage depending on both so the image cannot be built unless they pass. For non-server repos the final stage brings up a development environment; for server repos it is the runtime image. - Dockerfiles install development prerequisites by running `script/bootstrap` - rather than duplicating installs inline; COPY `script/` and the dependency - manifests (`package.json` + `yarn.lock`, `go.mod` + `go.sum`, etc.) before - running it. + The gate phases and the build stage start from their pinned base images and + install what those images lack either inline, as the canonical Go `Dockerfile` + below does for `git`, or by running `script/bootstrap`, as the `prompts` + repo's own `Dockerfile` does for its yarn packages. The development + environment stage installs development prerequisites by running + `script/bootstrap` rather than duplicating its installs inline. A stage that + runs `script/bootstrap` COPYs `script/` and the dependency manifests + (`package.json` + `yarn.lock`, `go.mod` + `go.sum`, etc.) before running it. - **Linting and testing run in Docker, as phases of the `Dockerfile`.** There is no separate lint file. `script/lint` and `script/test` each build one phase