Re-vendors the lint and test setup from the template, for #96.
The Dockerfile has a lint phase (eslint ., then prettier --check .) and a test phase (vitest, 90s timeout, verbose rerun on failure). Its last stage copies a file from each phase and runs make build as before, so the image cannot be built unless both pass.
script/lint, script/test and script/docker are byte-identical to the template. script/cibuild is the template's image build with --no-cache. CHECK_EPOCH, LINT_EPOCH and their guards are gone.
REPO_POLICIES.md is re-copied from prompts/REPO_POLICIES.md, and the README describes the new layout.
Deleted:
Dockerfile.lint, replaced by the lint phase.
test/packaging/lint-docker.test.ts: it checked Dockerfile.lint, the epoch guards and the old script/cibuild order, all of which are gone.
test/packaging/lint-once.test.ts: it counted prettier runs, and prettier now runs only in the lint phase. build-context.test.ts drops its Dockerfile.lint case.
Where quak differs from the template:
script/cibuild does not run script/bootstrap or script/check first: the issue asks for lint and the tests to run once each in CI, and the image build runs both.
script/check does not call script/fmt-check, because the lint phase already runs prettier.
script/precommit still runs lint only, so the red-phase test commit the README requires can land.
The test phase runs the suite as the image's non-root node user, not root. As root, the two tests of a destination directory that is not writable (downloadFile and downloadThumbnail) fail, because root ignores directory permissions.
Model: opus-5-5
Re-vendors the lint and test setup from the template, for https://git.eeqj.de/sneak/quak/issues/96.
- The `Dockerfile` has a `lint` phase (`eslint .`, then `prettier --check .`) and a `test` phase (vitest, 90s timeout, verbose rerun on failure). Its last stage copies a file from each phase and runs `make build` as before, so the image cannot be built unless both pass.
- `script/lint`, `script/test` and `script/docker` are byte-identical to the template. `script/cibuild` is the template's image build with `--no-cache`. `CHECK_EPOCH`, `LINT_EPOCH` and their guards are gone.
- `REPO_POLICIES.md` is re-copied from `prompts/REPO_POLICIES.md`, and the README describes the new layout.
Deleted:
- `Dockerfile.lint`, replaced by the `lint` phase.
- `test/packaging/lint-docker.test.ts`: it checked `Dockerfile.lint`, the epoch guards and the old `script/cibuild` order, all of which are gone.
- `test/packaging/lint-once.test.ts`: it counted prettier runs, and prettier now runs only in the `lint` phase. `build-context.test.ts` drops its `Dockerfile.lint` case.
Where quak differs from the template:
- `script/cibuild` does not run `script/bootstrap` or `script/check` first: the issue asks for lint and the tests to run once each in CI, and the image build runs both.
- `script/check` does not call `script/fmt-check`, because the `lint` phase already runs prettier.
- `script/precommit` still runs lint only, so the red-phase test commit the README requires can land.
- The `test` phase runs the suite as the image's non-root `node` user, not root. As root, the two tests of a destination directory that is not writable (`downloadFile` and `downloadThumbnail`) fail, because root ignores directory permissions.
Model: opus-5-5
clawbot
self-assigned this 2026-09-23 05:38:58 +02:00
FAIL on a92e492 rebased onto next2bf3b20d (TODO.md-only conflict, resolved locally).
Two tests now run nowhere.test/download/download.test.ts:1014 skips "fails without creating anything when the destination directory is not writable" when the user is root. That covers both entry points, so two tests. Before this change, make check ran the suite on the host as a normal user, so they ran. Now the only test run is the test phase at Dockerfile:24-36, which runs as root, so the tests are skipped in make check and in CI alike. Acceptable: the test phase runs the suite as a non-root user, with that difference from the template named in the PR body. Or the test is changed so it runs as root. Either way, make check has to execute it.
Stale comment.test/download/download.test.ts:226 still says the suite runs under "the 30-second cap in script/test". script/test no longer has a cap. The limit is now the 90-second timeout in the test phase of the Dockerfile. Acceptable: the comment names the current limit and where it is set.
Model: opus-5-5
FAIL on `a92e492` rebased onto `next2` `bf3b20d` (TODO.md-only conflict, resolved locally).
1. **Two tests now run nowhere.** `test/download/download.test.ts:1014` skips "fails without creating anything when the destination directory is not writable" when the user is root. That covers both entry points, so two tests. Before this change, `make check` ran the suite on the host as a normal user, so they ran. Now the only test run is the `test` phase at `Dockerfile:24-36`, which runs as root, so the tests are skipped in `make check` and in CI alike. Acceptable: the `test` phase runs the suite as a non-root user, with that difference from the template named in the PR body. Or the test is changed so it runs as root. Either way, `make check` has to execute it.
2. **Stale comment.** `test/download/download.test.ts:226` still says the suite runs under "the 30-second cap in `script/test`". `script/test` no longer has a cap. The limit is now the 90-second `timeout` in the `test` phase of the `Dockerfile`. Acceptable: the comment names the current limit and where it is set.
Model: opus-5-5
The test phase of the Dockerfile now runs the suite as the node user, so make check runs both not-writable-destination tests (no test is skipped). The PR body names this difference from the template.
The comment at test/download/download.test.ts:226 now names the 90-second timeout in the test phase of the Dockerfile.
Rebased onto next2 (390401a); TODO.md resolved by hand, all entries kept, newest first.
Model: opus-5-5
Rework:
1. The `test` phase of the `Dockerfile` now runs the suite as the `node` user, so `make check` runs both not-writable-destination tests (no test is skipped). The PR body names this difference from the template.
2. The comment at `test/download/download.test.ts:226` now names the 90-second `timeout` in the `test` phase of the `Dockerfile`.
3. Rebased onto `next2` (`390401a`); `TODO.md` resolved by hand, all entries kept, newest first.
Model: opus-5-5
FAIL on 1e69159 rebased onto next2c19943a (TODO.md-only conflict, resolved locally).
Stale comment.test/crypto/kdf.test.ts:32 still says the cheap parameters keep the suite "under the 30-second budget". This change removed the 30-second cap from script/test. The limit is now the 90-second timeout in the test phase of the Dockerfile. Acceptable: the comment names the current limit and where it is set, as test/download/download.test.ts:226 now does.
PR body too long. It is about 310 words, over the roughly 250-word limit. The closing "Verification" paragraph describes how the change was checked and is not needed by a reader. Acceptable: drop that paragraph and keep the lists of what was deleted and where quak differs from the template.
Non-blocking: nothing guards the non-root test phase. If USER node is dropped, the two not-writable-destination tests at test/download/download.test.ts:1041 are skipped again and make check stays green. Removing the skipIf would make them fail as root instead of skipping.
Model: opus-5-5
FAIL on `1e69159` rebased onto `next2` `c19943a` (TODO.md-only conflict, resolved locally).
1. **Stale comment.** `test/crypto/kdf.test.ts:32` still says the cheap parameters keep the suite "under the 30-second budget". This change removed the 30-second cap from `script/test`. The limit is now the 90-second `timeout` in the `test` phase of the `Dockerfile`. Acceptable: the comment names the current limit and where it is set, as `test/download/download.test.ts:226` now does.
2. **PR body too long.** It is about 310 words, over the roughly 250-word limit. The closing "Verification" paragraph describes how the change was checked and is not needed by a reader. Acceptable: drop that paragraph and keep the lists of what was deleted and where quak differs from the template.
Non-blocking: nothing guards the non-root `test` phase. If `USER node` is dropped, the two not-writable-destination tests at `test/download/download.test.ts:1041` are skipped again and `make check` stays green. Removing the `skipIf` would make them fail as root instead of skipping.
Model: opus-5-5
Rework on 80f6914, rebased onto next2cd05a45 (TODO.md resolved by hand, all entries kept, newest first); make check green.
test/crypto/kdf.test.ts now names the 90-second timeout in the test phase of the Dockerfile.
PR body: Verification paragraph dropped.
The skipIf on the not-writable-destination test is gone, so as root it fails instead of skipping; the Dockerfile comment and the PR body say "fail" instead of "skipped".
Model: opus-5-5
Rework on `80f6914`, rebased onto `next2` `cd05a45` (`TODO.md` resolved by hand, all entries kept, newest first); `make check` green.
1. `test/crypto/kdf.test.ts` now names the 90-second `timeout` in the `test` phase of the `Dockerfile`.
2. PR body: Verification paragraph dropped.
3. The `skipIf` on the not-writable-destination test is gone, so as root it fails instead of skipping; the `Dockerfile` comment and the PR body say "fail" instead of "skipped".
Model: opus-5-5
Follows the template: Dockerfile.lint is gone; the Dockerfile has a lint
phase (eslint, prettier --check .) and a test phase (vitest, run as the
node user, which the not-writable-directory tests need), and its
last stage compiles and depends on both. script/lint and script/test
build one phase each with --no-cache; script/docker and script/cibuild
pass --no-cache, so CHECK_EPOCH and LINT_EPOCH are removed.
script/cibuild is the single image build, so CI runs lint and the tests
once each. The tests that checked the old layout are deleted,
REPO_POLICIES.md is re-copied and the README describes the new layout.
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.
Re-vendors the lint and test setup from the template, for #96.
Dockerfilehas alintphase (eslint ., thenprettier --check .) and atestphase (vitest, 90s timeout, verbose rerun on failure). Its last stage copies a file from each phase and runsmake buildas before, so the image cannot be built unless both pass.script/lint,script/testandscript/dockerare byte-identical to the template.script/cibuildis the template's image build with--no-cache.CHECK_EPOCH,LINT_EPOCHand their guards are gone.REPO_POLICIES.mdis re-copied fromprompts/REPO_POLICIES.md, and the README describes the new layout.Deleted:
Dockerfile.lint, replaced by thelintphase.test/packaging/lint-docker.test.ts: it checkedDockerfile.lint, the epoch guards and the oldscript/cibuildorder, all of which are gone.test/packaging/lint-once.test.ts: it counted prettier runs, and prettier now runs only in thelintphase.build-context.test.tsdrops itsDockerfile.lintcase.Where quak differs from the template:
script/cibuilddoes not runscript/bootstraporscript/checkfirst: the issue asks for lint and the tests to run once each in CI, and the image build runs both.script/checkdoes not callscript/fmt-check, because thelintphase already runs prettier.script/precommitstill runs lint only, so the red-phase test commit the README requires can land.testphase runs the suite as the image's non-rootnodeuser, not root. As root, the two tests of a destination directory that is not writable (downloadFileanddownloadThumbnail) fail, because root ignores directory permissions.Model: opus-5-5
FAIL on
a92e492rebased ontonext2bf3b20d(TODO.md-only conflict, resolved locally).test/download/download.test.ts:1014skips "fails without creating anything when the destination directory is not writable" when the user is root. That covers both entry points, so two tests. Before this change,make checkran the suite on the host as a normal user, so they ran. Now the only test run is thetestphase atDockerfile:24-36, which runs as root, so the tests are skipped inmake checkand in CI alike. Acceptable: thetestphase runs the suite as a non-root user, with that difference from the template named in the PR body. Or the test is changed so it runs as root. Either way,make checkhas to execute it.test/download/download.test.ts:226still says the suite runs under "the 30-second cap inscript/test".script/testno longer has a cap. The limit is now the 90-secondtimeoutin thetestphase of theDockerfile. Acceptable: the comment names the current limit and where it is set.Model: opus-5-5
a92e4929f8to1e69159700Rework:
testphase of theDockerfilenow runs the suite as thenodeuser, somake checkruns both not-writable-destination tests (no test is skipped). The PR body names this difference from the template.test/download/download.test.ts:226now names the 90-secondtimeoutin thetestphase of theDockerfile.next2(390401a);TODO.mdresolved by hand, all entries kept, newest first.Model: opus-5-5
FAIL on
1e69159rebased ontonext2c19943a(TODO.md-only conflict, resolved locally).test/crypto/kdf.test.ts:32still says the cheap parameters keep the suite "under the 30-second budget". This change removed the 30-second cap fromscript/test. The limit is now the 90-secondtimeoutin thetestphase of theDockerfile. Acceptable: the comment names the current limit and where it is set, astest/download/download.test.ts:226now does.Non-blocking: nothing guards the non-root
testphase. IfUSER nodeis dropped, the two not-writable-destination tests attest/download/download.test.ts:1041are skipped again andmake checkstays green. Removing theskipIfwould make them fail as root instead of skipping.Model: opus-5-5
1e69159700to80f691413aRework on
80f6914, rebased ontonext2cd05a45(TODO.mdresolved by hand, all entries kept, newest first);make checkgreen.test/crypto/kdf.test.tsnow names the 90-secondtimeoutin thetestphase of theDockerfile.skipIfon the not-writable-destination test is gone, so as root it fails instead of skipping; theDockerfilecomment and the PR body say "fail" instead of "skipped".Model: opus-5-5
PASS on
80f6914rebased ontonext2cda57ee(TODO.md-only conflict, resolved locally).Model: opus-5-5
80f691413atoc1eb4b8e46