sneak's ruling on sneak/prompts#40 (comment): there is no separate Dockerfile.lint. Linting and testing are phases of the main Dockerfile. script/lint and script/test each build one phase with caching off, and the main build depends on both phases. The canonical template in sneak/prompts now follows this: its Dockerfile, script/lint, script/test, script/cibuild, and prompts/REPO_POLICIES.md in the sections on the Dockerfile and on --no-cache. Quak still has the older layout: Dockerfile.lint guarded by LINT_EPOCH, a Dockerfile guarded by CHECK_EPOCH that runs make test and make build, and host-run tests.
Definition of done
Dockerfile.lint is deleted. Dockerfile has a lint stage (eslint, then prettier --check ., invoked directly) and a test stage (the suite, invoked directly). Its last stage depends on both through COPY --from=, following the shape of the template's Dockerfile, and it still builds the package the way the current image does.
script/lint is docker build --no-cache --target lint -t "$(script/projectname)-lint" . and script/test is the same with --target test, as in the template. script/cibuild and script/docker pass --no-cache. No other docker build exists in script/.
CHECK_EPOCH and LINT_EPOCH and their guards are gone, since --no-cache replaces them.
script/check, script/precommit, make check and the CI workflow still run lint and the tests exactly once each, and nothing that runs inside a container calls docker build.
The tests in test/packaging/ that read Dockerfile.lint, the epoch arguments or the old call graph (lint-once.test.ts, lint-docker.test.ts, build-context.test.ts) are updated to the new layout or deleted where the template makes them moot. Keep only what a reader can follow in one pass. The PR body lists what was deleted and why.
REPO_POLICIES.md is re-copied from sneak/prompts (prompts/REPO_POLICIES.md), and the README's description of linting and testing matches the new layout.
Two consecutive make check runs on an unchanged tree both actually execute eslint, prettier and the suite, with nothing served from cache. A deliberate lint violation fails make check with that finding.
make check green; TODO.md updated in the same commit.
Follow the template. Where quak truly needs something the template does not have, name the difference in the PR body; do not invent a local variant of the layout.
sneak's ruling on https://git.eeqj.de/sneak/prompts/issues/40#issuecomment-54891: there is no separate `Dockerfile.lint`. Linting and testing are phases of the main `Dockerfile`. `script/lint` and `script/test` each build one phase with caching off, and the main build depends on both phases. The canonical template in `sneak/prompts` now follows this: its `Dockerfile`, `script/lint`, `script/test`, `script/cibuild`, and `prompts/REPO_POLICIES.md` in the sections on the Dockerfile and on `--no-cache`. Quak still has the older layout: `Dockerfile.lint` guarded by `LINT_EPOCH`, a `Dockerfile` guarded by `CHECK_EPOCH` that runs `make test` and `make build`, and host-run tests.
## Definition of done
1. `Dockerfile.lint` is deleted. `Dockerfile` has a `lint` stage (eslint, then `prettier --check .`, invoked directly) and a `test` stage (the suite, invoked directly). Its last stage depends on both through `COPY --from=`, following the shape of the template's `Dockerfile`, and it still builds the package the way the current image does.
2. `script/lint` is `docker build --no-cache --target lint -t "$(script/projectname)-lint" .` and `script/test` is the same with `--target test`, as in the template. `script/cibuild` and `script/docker` pass `--no-cache`. No other `docker build` exists in `script/`.
3. `CHECK_EPOCH` and `LINT_EPOCH` and their guards are gone, since `--no-cache` replaces them.
4. `script/check`, `script/precommit`, `make check` and the CI workflow still run lint and the tests exactly once each, and nothing that runs inside a container calls `docker build`.
5. The tests in `test/packaging/` that read `Dockerfile.lint`, the epoch arguments or the old call graph (`lint-once.test.ts`, `lint-docker.test.ts`, `build-context.test.ts`) are updated to the new layout or deleted where the template makes them moot. Keep only what a reader can follow in one pass. The PR body lists what was deleted and why.
6. `REPO_POLICIES.md` is re-copied from `sneak/prompts` (`prompts/REPO_POLICIES.md`), and the README's description of linting and testing matches the new layout.
7. Two consecutive `make check` runs on an unchanged tree both actually execute eslint, prettier and the suite, with nothing served from cache. A deliberate lint violation fails `make check` with that finding.
8. `make check` green; `TODO.md` updated in the same commit.
Follow the template. Where quak truly needs something the template does not have, name the difference in the PR body; do not invent a local variant of the layout.
Replaces https://git.eeqj.de/sneak/quak/issues/32.
Model: opus-5-5
clawbot
self-assigned this 2026-09-23 05:28:05 +02:00
Built in #112: lint and test are now phases of the Dockerfile, Dockerfile.lint and the epoch arguments are gone, and the tests of the old layout are deleted. The PR body names where quak differs from the template.
Model: opus-5-5
Built in https://git.eeqj.de/sneak/quak/pulls/112: lint and test are now phases of the `Dockerfile`, `Dockerfile.lint` and the epoch arguments are gone, and the tests of the old layout are deleted. The PR body names where quak differs from the template.
Model: opus-5-5
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
sneak's ruling on sneak/prompts#40 (comment): there is no separate
Dockerfile.lint. Linting and testing are phases of the mainDockerfile.script/lintandscript/testeach build one phase with caching off, and the main build depends on both phases. The canonical template insneak/promptsnow follows this: itsDockerfile,script/lint,script/test,script/cibuild, andprompts/REPO_POLICIES.mdin the sections on the Dockerfile and on--no-cache. Quak still has the older layout:Dockerfile.lintguarded byLINT_EPOCH, aDockerfileguarded byCHECK_EPOCHthat runsmake testandmake build, and host-run tests.Definition of done
Dockerfile.lintis deleted.Dockerfilehas alintstage (eslint, thenprettier --check ., invoked directly) and ateststage (the suite, invoked directly). Its last stage depends on both throughCOPY --from=, following the shape of the template'sDockerfile, and it still builds the package the way the current image does.script/lintisdocker build --no-cache --target lint -t "$(script/projectname)-lint" .andscript/testis the same with--target test, as in the template.script/cibuildandscript/dockerpass--no-cache. No otherdocker buildexists inscript/.CHECK_EPOCHandLINT_EPOCHand their guards are gone, since--no-cachereplaces them.script/check,script/precommit,make checkand the CI workflow still run lint and the tests exactly once each, and nothing that runs inside a container callsdocker build.test/packaging/that readDockerfile.lint, the epoch arguments or the old call graph (lint-once.test.ts,lint-docker.test.ts,build-context.test.ts) are updated to the new layout or deleted where the template makes them moot. Keep only what a reader can follow in one pass. The PR body lists what was deleted and why.REPO_POLICIES.mdis re-copied fromsneak/prompts(prompts/REPO_POLICIES.md), and the README's description of linting and testing matches the new layout.make checkruns on an unchanged tree both actually execute eslint, prettier and the suite, with nothing served from cache. A deliberate lint violation failsmake checkwith that finding.make checkgreen;TODO.mdupdated in the same commit.Follow the template. Where quak truly needs something the template does not have, name the difference in the PR body; do not invent a local variant of the layout.
Replaces #32.
Model: opus-5-5
Built in #112: lint and test are now phases of the
Dockerfile,Dockerfile.lintand the epoch arguments are gone, and the tests of the old layout are deleted. The PR body names where quak differs from the template.Model: opus-5-5