Keep in-repo agent scratch out of the build context and out of git (closes #27)
The canonical .dockerignore and .gitignore both omitted the in-repo agent scratch directory, which holds one worktree per in-flight agent, so under `COPY . .` an entire extra checkout of the repo reached the image. The two entries are deliberately different shapes: anchored in .dockerignore, where the `**/` form would also delete a legitimately named nested directory, and unanchored in .gitignore, where a pattern already matches at every depth. Anchoring leaves a gap where agents run in subdirectories, stated in the vendored file itself. The second half is the consequence of excluding .git: `git describe` in a build stage yields an empty version without erroring, so the version is now computed on the host and passed in. Model: opus-5
This commit is contained in:
@@ -24,9 +24,11 @@ with your task.
|
||||
- [ ] `LICENSE` file exists and matches the README
|
||||
- [ ] `REPO_POLICIES.md` exists and version date is current — fetch from
|
||||
`https://git.eeqj.de/sneak/prompts/raw/branch/main/prompts/REPO_POLICIES.md`
|
||||
- [ ] `.gitignore` is comprehensive (OS, editor, language artifacts, secrets) —
|
||||
fetch from `https://git.eeqj.de/sneak/prompts/raw/branch/main/.gitignore`
|
||||
if missing
|
||||
- [ ] `.gitignore` is comprehensive (OS, editor, agent scratch, language
|
||||
artifacts, secrets) — fetch from
|
||||
`https://git.eeqj.de/sneak/prompts/raw/branch/main/.gitignore` if missing.
|
||||
An existing repo usually has a hand-written one that is never re-fetched,
|
||||
so check the entries rather than the file's presence.
|
||||
- [ ] `.editorconfig` exists — fetch from
|
||||
`https://git.eeqj.de/sneak/prompts/raw/branch/main/.editorconfig`
|
||||
- [ ] `Dockerfile` and `.dockerignore` exist; Dockerfile runs `make check` as a
|
||||
@@ -42,6 +44,17 @@ with your task.
|
||||
binaries, test binaries, coverage output), written root-anchored —
|
||||
`/myapp`, never `**/myapp`. An existing repo is where such a binary is
|
||||
likeliest to already be sitting in the build context, invisible to git.
|
||||
- [ ] `.claude/` is in `.gitignore` (unanchored) and `.claude` in
|
||||
`.dockerignore` (anchored, no `**/` prefix). Agent worktrees are entire
|
||||
checkouts of the repo, so they inflate the context by a multiple of it and
|
||||
can copy another session's unreviewed work into an image layer. If agents
|
||||
here run anywhere other than the repo root, the anchored entry misses
|
||||
`services/api/.claude/`: add anchored entries for those directories.
|
||||
- [ ] If the repo embeds a version in a binary, that version is computed on the
|
||||
host and passed with `--build-arg VERSION=...` by `script/docker` and
|
||||
`script/cibuild`, and no stage calls `git describe`. A tag-derived version
|
||||
additionally needs `fetch-depth: 0` on the CI checkout step, which clones
|
||||
shallow and fetches no tags by default.
|
||||
- [ ] Gitea Actions workflow in `.gitea/workflows/` runs `script/cibuild` on
|
||||
push — reference
|
||||
`https://git.eeqj.de/sneak/prompts/raw/branch/main/.gitea/workflows/check.yml`
|
||||
|
||||
Reference in New Issue
Block a user