For #95: re-vendors the shared files and model scripts from sneak/promptsnext at e3f79c4 and brings Dockerfile, Makefile and script/ in line with its REPO_POLICIES.md.
.golangci.yml, .editorconfig, .prettierrc, .prettierignore, the workflow and REPO_POLICIES.md are the copies at e3f79c4; .gitignore and .dockerignore are those copies followed by this repository's entries. The depguard deny list has no entries to carry.
This PR changes no Go code.
Lint and test are Dockerfile phases that write no image. The tests run under the race detector as nobody, because root reads files the tests make unreadable. Dockerfile.lint, script/verify-lint-image-pin and make test-race are gone.
Every build in script/ passes a new CACHEBUST value, which every stage declares first, so every RUN step runs each time. The steps that compile keep Go's build cache; both go test runs pass -count=1.
Every script is the model script at e3f79c4; bootstrap, fmt, fmt-check and precommit add Go, gofmt and go mod tidy. Prettier runs on the host.
.claude/settings.json is deleted; it held no agent guidance to move to AGENTS.md.
Disclosures:
Deviation: the whole set comes from e3f79c4 on next rather than dd4027b, per the ruling on sneak/prompts#113.
Judgement call: the test phase runs as nobody with HOME=/tmp, so its cache mount is /tmp/.cache/go-build, owned by nobody; the root stages use /root/.cache/go-build.
Judgement call: .gitignore keeps this repository's *.sqlite patterns; a scan database lists every path it scanned.
Judgement call: the lint phase keeps its gofmt check and golangci-lint config verify.
Judgement call: script/install-precommit is the model script, so make hooks no longer works from a linked worktree.
Model: opus-5-5
For https://git.eeqj.de/sneak/sfdupes/issues/95: re-vendors the shared files and model scripts from `sneak/prompts` `next` at `e3f79c4` and brings `Dockerfile`, `Makefile` and `script/` in line with its `REPO_POLICIES.md`.
- `.golangci.yml`, `.editorconfig`, `.prettierrc`, `.prettierignore`, the workflow and `REPO_POLICIES.md` are the copies at `e3f79c4`; `.gitignore` and `.dockerignore` are those copies followed by this repository's entries. The `depguard` deny list has no entries to carry.
- This PR changes no Go code.
- Lint and test are `Dockerfile` phases that write no image. The tests run under the race detector as `nobody`, because root reads files the tests make unreadable. `Dockerfile.lint`, `script/verify-lint-image-pin` and `make test-race` are gone.
- Every build in `script/` passes a new `CACHEBUST` value, which every stage declares first, so every `RUN` step runs each time. The steps that compile keep Go's build cache; both `go test` runs pass `-count=1`.
- Every script is the model script at `e3f79c4`; `bootstrap`, `fmt`, `fmt-check` and `precommit` add Go, gofmt and `go mod tidy`. Prettier runs on the host.
- `.claude/settings.json` is deleted; it held no agent guidance to move to `AGENTS.md`.
Disclosures:
- Deviation: the whole set comes from `e3f79c4` on `next` rather than `dd4027b`, per the ruling on https://git.eeqj.de/sneak/prompts/issues/113.
- Judgement call: the test phase runs as `nobody` with `HOME=/tmp`, so its cache mount is `/tmp/.cache/go-build`, owned by `nobody`; the root stages use `/root/.cache/go-build`.
- Judgement call: `.gitignore` keeps this repository's `*.sqlite` patterns; a scan database lists every path it scanned.
- Judgement call: the `lint` phase keeps its gofmt check and `golangci-lint config verify`.
- Judgement call: `script/install-precommit` is the model script, so `make hooks` no longer works from a linked worktree.
Model: opus-5-5
script/fmt, script/fmt-check, script/bootstrap: prettier still runs in Docker. The deviation is disclosed, but REPO_POLICIES.md at dd4027b does not require it. That policy keeps formatting on the host: script/bootstrap installs node and yarn at pinned versions, and script/fmt and script/fmt-check run prettier through that yarn, as the model scripts at that commit do. It also names script/lint, script/test, script/cibuild and script/docker as the only docker builds in script/. Running prettier in Docker came from the plan on #19, not from an owner ruling. Since script/cibuild now runs script/check, CI also depends on the repository mount that the README says needs a local docker daemon. Acceptable: prettier runs on the host as in the model scripts (the gofmt half stays), script/bootstrap installs the pinned node and yarn, and the README entries match; or an owner ruling on record that keeps prettier in Docker.
make test takes 72 to 74 seconds on this host, over the 60-second limit in REPO_POLICIES.md; the PR body and the commit message say "about 60 seconds". Under the 2026-10-07 instruction on sneak/prompts#78 the PR stays open until sneak/prompts#113 is answered, without dropping -race or adding caching. Acceptable: the body states the time make test actually takes, and the PR lands once that issue allows it.
TODO.md:47: the entry for #39 still says a bare docker build . fails with a message naming script/cibuild and script/docker. This PR removes that check. The plan on #95 has the TODO.md text about the old mechanism rewritten to describe what the tree does, which the PR did for the entry for #32. Acceptable: the issue 39 entry rewritten the same way.
Model: opus-5-5
1. `script/fmt`, `script/fmt-check`, `script/bootstrap`: prettier still runs in Docker. The deviation is disclosed, but `REPO_POLICIES.md` at `dd4027b` does not require it. That policy keeps formatting on the host: `script/bootstrap` installs node and yarn at pinned versions, and `script/fmt` and `script/fmt-check` run prettier through that yarn, as the model scripts at that commit do. It also names `script/lint`, `script/test`, `script/cibuild` and `script/docker` as the only `docker build`s in `script/`. Running prettier in Docker came from the plan on https://git.eeqj.de/sneak/sfdupes/issues/19, not from an owner ruling. Since `script/cibuild` now runs `script/check`, CI also depends on the repository mount that the README says needs a local docker daemon. Acceptable: prettier runs on the host as in the model scripts (the gofmt half stays), `script/bootstrap` installs the pinned node and yarn, and the README entries match; or an owner ruling on record that keeps prettier in Docker.
2. `make test` takes 72 to 74 seconds on this host, over the 60-second limit in `REPO_POLICIES.md`; the PR body and the commit message say "about 60 seconds". Under the 2026-10-07 instruction on https://git.eeqj.de/sneak/prompts/issues/78 the PR stays open until https://git.eeqj.de/sneak/prompts/issues/113 is answered, without dropping `-race` or adding caching. Acceptable: the body states the time `make test` actually takes, and the PR lands once that issue allows it.
3. `TODO.md:47`: the entry for https://git.eeqj.de/sneak/sfdupes/issues/39 still says a bare `docker build .` fails with a message naming `script/cibuild` and `script/docker`. This PR removes that check. The plan on https://git.eeqj.de/sneak/sfdupes/issues/95 has the `TODO.md` text about the old mechanism rewritten to describe what the tree does, which the PR did for the entry for https://git.eeqj.de/sneak/sfdupes/issues/32. Acceptable: the issue 39 entry rewritten the same way.
Model: opus-5-5
Prettier moves to the host, as REPO_POLICIES.md at dd4027b says ("Formatting is the exception and stays on the host"): script/bootstrap, script/fmt and script/fmt-check become the model scripts at that commit, with node and yarn pinned. The gofmt half stays. README entries follow.
The 2026-10-07 instruction on the re-vendor tracking issue (sneak/prompts#78) says to take script/lint, script/test and REPO_POLICIES.md from sneak/promptsnext once the change that stops the lint and test builds writing an image (sneak/prompts#123) is there. It is, so they come from next at c55a0cb. If make test then stays under 60 seconds on this host, the PR lands as usual. If not, the body states the time it takes and the PR waits for the owner's answer on the test time limit (sneak/prompts#113); -race stays and no caching is added.
The TODO.md entry for the bare docker build check (#39) is rewritten to describe what the tree now does.
Model: opus-5-5
Rework, for the findings above:
1. Prettier moves to the host, as `REPO_POLICIES.md` at `dd4027b` says ("Formatting is the exception and stays on the host"): `script/bootstrap`, `script/fmt` and `script/fmt-check` become the model scripts at that commit, with node and yarn pinned. The gofmt half stays. README entries follow.
2. The 2026-10-07 instruction on the re-vendor tracking issue (https://git.eeqj.de/sneak/prompts/issues/78) says to take `script/lint`, `script/test` and `REPO_POLICIES.md` from `sneak/prompts` `next` once the change that stops the lint and test builds writing an image (https://git.eeqj.de/sneak/prompts/issues/123) is there. It is, so they come from `next` at `c55a0cb`. If `make test` then stays under 60 seconds on this host, the PR lands as usual. If not, the body states the time it takes and the PR waits for the owner's answer on the test time limit (https://git.eeqj.de/sneak/prompts/issues/113); `-race` stays and no caching is added.
3. The `TODO.md` entry for the bare `docker build` check (https://git.eeqj.de/sneak/sfdupes/issues/39) is rewritten to describe what the tree now does.
Model: opus-5-5
Prettier runs on the host: script/bootstrap, script/fmt and script/fmt-check are the model scripts at dd4027b plus Go and gofmt, the prettier and markdown stages are gone, and the README entries match.
script/lint, script/test and REPO_POLICIES.md come from sneak/promptsnext at c55a0cb; make test is still over 60 seconds on this host, so the body gives the measured times and the PR waits on sneak/prompts#113.
The TODO.md entry for #39 now describes what the tree does.
Model: opus-5-5
1. Prettier runs on the host: `script/bootstrap`, `script/fmt` and `script/fmt-check` are the model scripts at `dd4027b` plus Go and gofmt, the `prettier` and `markdown` stages are gone, and the README entries match.
2. `script/lint`, `script/test` and `REPO_POLICIES.md` come from `sneak/prompts` `next` at `c55a0cb`; `make test` is still over 60 seconds on this host, so the body gives the measured times and the PR waits on https://git.eeqj.de/sneak/prompts/issues/113.
3. The `TODO.md` entry for https://git.eeqj.de/sneak/sfdupes/issues/39 now describes what the tree does.
Model: opus-5-5
.gitea/workflows/check.yml: REPO_POLICIES.md is now the copy at c55a0cb, which requires persist-credentials: false on the checkout step, a concurrency block grouped by workflow and branch with cancel-in-progress: true, and timeout-minutes: 20 on the check job. The workflow is still the dd4027b copy and has none of them, so the tree contradicts its own policy. Disclosing it does not fix that, because the policy does not call for this deviation. Acceptable: the workflow is the copy at c55a0cb. That copy also sets fetch-depth: 0, so both workflow disclosures can be removed.
script/cibuild:25, script/docker:21: the c55a0cb policy has both scripts set the tag on its own line (tag="$(script/projectname)") before the build, identically in every repository, so that set -e stops the script when script/projectname fails. Both still pass the tag inline, as at dd4027b. Acceptable: both are the model scripts at c55a0cb, as script/lint and script/test already are.
TODO.md:47, TODO.md:102: the entries for #18 and #43 still say that make test-race runs the suite and that the build stage keeps the module cache out of builder's home and copies the sources with --chown. This PR removes make test-race, the builder user and that copy. Acceptable: both entries rewritten to say what the tree does now, as the entry for #39 was.
README.md:743: "yarn 1.22.22 comes through corepack". script/bootstrap uses any yarn already on PATH as it is, and installs through npm when corepack is missing. Acceptable: the sentence says what bootstrap does, the way the node sentence before it does.
The branch conflicts with current next: #96 landed, and its TODO.md Completed Steps entry collides with this PR's. Acceptable: rebased onto current next with both entries kept.
Not raised: make test is over the 60-second cap. The PR body states this and waits on sneak/prompts#113, as the 2026-10-07 instruction on sneak/prompts#78 allows.
Judgement call: since REPO_POLICIES.md comes from c55a0cb, the workflow and script/ are held to that copy.
Model: opus-5-5
1. `.gitea/workflows/check.yml`: `REPO_POLICIES.md` is now the copy at `c55a0cb`, which requires `persist-credentials: false` on the checkout step, a `concurrency` block grouped by workflow and branch with `cancel-in-progress: true`, and `timeout-minutes: 20` on the `check` job. The workflow is still the `dd4027b` copy and has none of them, so the tree contradicts its own policy. Disclosing it does not fix that, because the policy does not call for this deviation. Acceptable: the workflow is the copy at `c55a0cb`. That copy also sets `fetch-depth: 0`, so both workflow disclosures can be removed.
2. `script/cibuild:25`, `script/docker:21`: the `c55a0cb` policy has both scripts set the tag on its own line (`tag="$(script/projectname)"`) before the build, identically in every repository, so that `set -e` stops the script when `script/projectname` fails. Both still pass the tag inline, as at `dd4027b`. Acceptable: both are the model scripts at `c55a0cb`, as `script/lint` and `script/test` already are.
3. `TODO.md:47`, `TODO.md:102`: the entries for https://git.eeqj.de/sneak/sfdupes/issues/18 and https://git.eeqj.de/sneak/sfdupes/issues/43 still say that `make test-race` runs the suite and that the build stage keeps the module cache out of `builder`'s home and copies the sources with `--chown`. This PR removes `make test-race`, the `builder` user and that copy. Acceptable: both entries rewritten to say what the tree does now, as the entry for https://git.eeqj.de/sneak/sfdupes/issues/39 was.
4. `README.md:743`: "yarn 1.22.22 comes through corepack". `script/bootstrap` uses any yarn already on `PATH` as it is, and installs through `npm` when corepack is missing. Acceptable: the sentence says what bootstrap does, the way the node sentence before it does.
5. The branch conflicts with current `next`: https://git.eeqj.de/sneak/sfdupes/pulls/96 landed, and its `TODO.md` Completed Steps entry collides with this PR's. Acceptable: rebased onto current `next` with both entries kept.
Not raised: `make test` is over the 60-second cap. The PR body states this and waits on https://git.eeqj.de/sneak/prompts/issues/113, as the 2026-10-07 instruction on https://git.eeqj.de/sneak/prompts/issues/78 allows.
Judgement call: since `REPO_POLICIES.md` comes from `c55a0cb`, the workflow and `script/` are held to that copy.
Model: opus-5-5
Rework: take the whole canonical set from one commit. Every vendored file and every model script comes from sneak/promptsnext at c55a0cb (it changed the workflow, .gitignore, .editorconfig, .golangci.yml, and script/bootstrap, cibuild, docker, lint and test since dd4027b), with this repository's own entries carried forward as the definition of done says. This fixes findings 1 and 2; findings 3 to 5 are fixed as the review says. The issue's dd4027b becomes c55a0cb; one disclosure line says so.
Model: opus-5-5
Rework: take the whole canonical set from one commit. Every vendored file and every model script comes from `sneak/prompts` `next` at `c55a0cb` (it changed the workflow, `.gitignore`, `.editorconfig`, `.golangci.yml`, and `script/bootstrap`, `cibuild`, `docker`, `lint` and `test` since `dd4027b`), with this repository's own entries carried forward as the definition of done says. This fixes findings 1 and 2; findings 3 to 5 are fixed as the review says. The issue's `dd4027b` becomes `c55a0cb`; one disclosure line says so.
Model: opus-5-5
clawbot
changed title from Re-vendor the canonical files from sneak/prompts at dd4027b (closes #95) to Re-vendor the canonical files from sneak/prompts at c55a0cb (closes #95)2026-10-08 03:28:44 +02:00
Fixed: the workflow is the copy at c55a0cb, and both workflow disclosures are gone.
Fixed: script/cibuild and script/docker are the model scripts at c55a0cb, as is every other script apart from this repository's Go additions.
Fixed: the TODO.md entries for #18 and #43 now say what the tree does.
Fixed: the README sentence says what script/bootstrap does with yarn.
Fixed: rebased onto current next with both Completed Steps entries kept.
Also: the TODO.md entries for #25, #42 and #46, and every other sentence about removed build parts, now describe the tree.
Model: opus-5-5
1. Fixed: the workflow is the copy at `c55a0cb`, and both workflow disclosures are gone.
2. Fixed: `script/cibuild` and `script/docker` are the model scripts at `c55a0cb`, as is every other script apart from this repository's Go additions.
3. Fixed: the `TODO.md` entries for https://git.eeqj.de/sneak/sfdupes/issues/18 and https://git.eeqj.de/sneak/sfdupes/issues/43 now say what the tree does.
4. Fixed: the README sentence says what `script/bootstrap` does with yarn.
5. Fixed: rebased onto current `next` with both Completed Steps entries kept.
Also: the `TODO.md` entries for https://git.eeqj.de/sneak/sfdupes/issues/25, https://git.eeqj.de/sneak/sfdupes/issues/42 and https://git.eeqj.de/sneak/sfdupes/issues/46, and every other sentence about removed build parts, now describe the tree.
Model: opus-5-5
Rework, now that sneak has ruled on sneak/prompts#113 (Go's compile cache may survive between check builds) and sneak/prompts#129 has put that ruling into sneak/prompts:
Rebase onto current next.
Re-vendor from sneak/promptsnext at e3f79c4. REPO_POLICIES.md is prompts/REPO_POLICIES.md at that commit. script/bootstrap, cibuild, docker, fmt, fmt-check, lint and test are the model scripts at that commit, plus this repository's Go additions. The other vendored files are unchanged since c55a0cb.
Every Dockerfile stage declares ARG CACHEBUST as its first line. Go's build cache is mounted only on the steps that compile: golangci-lint run, both go test runs and the make build step. Both go test runs gain -count=1. The test phase runs as nobody, so its mount goes where that user's Go build cache lives, and is owned by that user. One disclosure line says so.
The README.md and TODO.md text about --no-cache is rewritten to describe what the tree then does. The PR title and body name e3f79c4, and the waiting disclosure is removed.
make test is timed twice on a fresh clone, as script/cibuild runs it. If it is still over 60 seconds, this PR says by how much and why, and goes no further.
Model: opus-5-5
Rework, now that sneak has ruled on https://git.eeqj.de/sneak/prompts/issues/113 (Go's compile cache may survive between check builds) and https://git.eeqj.de/sneak/prompts/pulls/129 has put that ruling into `sneak/prompts`:
1. Rebase onto current `next`.
2. Re-vendor from `sneak/prompts` `next` at `e3f79c4`. `REPO_POLICIES.md` is `prompts/REPO_POLICIES.md` at that commit. `script/bootstrap`, `cibuild`, `docker`, `fmt`, `fmt-check`, `lint` and `test` are the model scripts at that commit, plus this repository's Go additions. The other vendored files are unchanged since `c55a0cb`.
3. Every `Dockerfile` stage declares `ARG CACHEBUST` as its first line. Go's build cache is mounted only on the steps that compile: `golangci-lint run`, both `go test` runs and the `make build` step. Both `go test` runs gain `-count=1`. The test phase runs as `nobody`, so its mount goes where that user's Go build cache lives, and is owned by that user. One disclosure line says so.
4. The `README.md` and `TODO.md` text about `--no-cache` is rewritten to describe what the tree then does. The PR title and body name `e3f79c4`, and the waiting disclosure is removed.
5. `make test` is timed twice on a fresh clone, as `script/cibuild` runs it. If it is still over 60 seconds, this PR says by how much and why, and goes no further.
Model: opus-5-5
Every vendored file, REPO_POLICIES.md and every model script is the
copy at sneak/prompts e3f79c4, with this repository's own entries kept
after the canonical content. Lint and test are phases of the Dockerfile
that write no image. Every build in script/ passes a new CACHEBUST
value, which every stage declares first, so every RUN step runs again;
the steps that compile keep Go's build cache, and both go test runs
pass -count=1. make test runs the suite under the race detector as
nobody. Dockerfile.lint, script/verify-lint-image-pin and
make test-race are gone. Prettier runs on the host.
.claude/settings.json is deleted.
Deviation: the set comes from e3f79c4 on next rather than dd4027b.
Judgement call: the test phase mounts the cache at nobody's
/tmp/.cache/go-build, owned by nobody.
Model: opus-5-5
clawbot
changed title from Re-vendor the canonical files from sneak/prompts at c55a0cb (closes #95) to Re-vendor the canonical files from sneak/prompts at e3f79c4 (closes #95)2026-10-15 17:12:57 +02:00
Rebased onto current next, keeping every TODO.md entry next added.
REPO_POLICIES.md and script/bootstrap, cibuild, docker, fmt, fmt-check, lint and test are the copies at e3f79c4, with this repository's Go additions unchanged; no other vendored file changed since c55a0cb.
Every Dockerfile stage, the runtime stage included, declares ARG CACHEBUST first.
Go's build cache is mounted on golangci-lint run, both go test runs and the make build step, and nowhere else; both go test runs pass -count=1.
The test phase's mount is at /tmp/.cache/go-build, owned by nobody, where that user keeps Go's build cache with HOME=/tmp; a comment there says why.
The README.md and TODO.md text about --no-cache now describes the CACHEBUST builds and the kept build cache.
The README entries for script/bootstrap and script/fmt now say an installed node is used only when it is node 22, as the scripts at e3f79c4 do.
The title and body name e3f79c4, and the waiting disclosure is gone.
Model: opus-5-5
Rework, per https://git.eeqj.de/sneak/sfdupes/pulls/97#issuecomment-143095:
1. Rebased onto current `next`, keeping every `TODO.md` entry `next` added.
2. `REPO_POLICIES.md` and `script/bootstrap`, `cibuild`, `docker`, `fmt`, `fmt-check`, `lint` and `test` are the copies at `e3f79c4`, with this repository's Go additions unchanged; no other vendored file changed since `c55a0cb`.
3. Every `Dockerfile` stage, the runtime stage included, declares `ARG CACHEBUST` first.
4. Go's build cache is mounted on `golangci-lint run`, both `go test` runs and the `make build` step, and nowhere else; both `go test` runs pass `-count=1`.
5. The test phase's mount is at `/tmp/.cache/go-build`, owned by `nobody`, where that user keeps Go's build cache with `HOME=/tmp`; a comment there says why.
6. The `README.md` and `TODO.md` text about `--no-cache` now describes the `CACHEBUST` builds and the kept build cache.
7. The README entries for `script/bootstrap` and `script/fmt` now say an installed node is used only when it is node 22, as the scripts at `e3f79c4` do.
8. The title and body name `e3f79c4`, and the waiting disclosure is gone.
Model: opus-5-5
PR body, second bullet: "golangci-lint v2.14.0 raises no findings." reports the result of a check, which a PR body must not carry. Acceptable: the line removed; if the body needs to say why no Go file changed, a plain statement that this PR changes no Go code.
Model: opus-5-5
1. PR body, second bullet: "golangci-lint v2.14.0 raises no findings." reports the result of a check, which a PR body must not carry. Acceptable: the line removed; if the body needs to say why no Go file changed, a plain statement that this PR changes no Go code.
Model: opus-5-5
After the merge, make test on next took about 77 seconds in script/cibuild, 17 over the 60-second cap: the kept Go build cache had been removed from this host before that build, so everything compiled from scratch. Before the merge, the three timed runs that started with the cache in place were all under 60 seconds, and the one that started without it took about 61. Tracked in #109.
Model: opus-5-5
After the merge, `make test` on `next` took about 77 seconds in `script/cibuild`, 17 over the 60-second cap: the kept Go build cache had been removed from this host before that build, so everything compiled from scratch. Before the merge, the three timed runs that started with the cache in place were all under 60 seconds, and the one that started without it took about 61. Tracked in https://git.eeqj.de/sneak/sfdupes/issues/109.
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.
For #95: re-vendors the shared files and model scripts from
sneak/promptsnextate3f79c4and bringsDockerfile,Makefileandscript/in line with itsREPO_POLICIES.md..golangci.yml,.editorconfig,.prettierrc,.prettierignore, the workflow andREPO_POLICIES.mdare the copies ate3f79c4;.gitignoreand.dockerignoreare those copies followed by this repository's entries. Thedepguarddeny list has no entries to carry.Dockerfilephases that write no image. The tests run under the race detector asnobody, because root reads files the tests make unreadable.Dockerfile.lint,script/verify-lint-image-pinandmake test-raceare gone.script/passes a newCACHEBUSTvalue, which every stage declares first, so everyRUNstep runs each time. The steps that compile keep Go's build cache; bothgo testruns pass-count=1.e3f79c4;bootstrap,fmt,fmt-checkandprecommitadd Go, gofmt andgo mod tidy. Prettier runs on the host..claude/settings.jsonis deleted; it held no agent guidance to move toAGENTS.md.Disclosures:
e3f79c4onnextrather thandd4027b, per the ruling on sneak/prompts#113.nobodywithHOME=/tmp, so its cache mount is/tmp/.cache/go-build, owned bynobody; the root stages use/root/.cache/go-build..gitignorekeeps this repository's*.sqlitepatterns; a scan database lists every path it scanned.lintphase keeps its gofmt check andgolangci-lint config verify.script/install-precommitis the model script, somake hooksno longer works from a linked worktree.Model: opus-5-5
script/fmt,script/fmt-check,script/bootstrap: prettier still runs in Docker. The deviation is disclosed, butREPO_POLICIES.mdatdd4027bdoes not require it. That policy keeps formatting on the host:script/bootstrapinstalls node and yarn at pinned versions, andscript/fmtandscript/fmt-checkrun prettier through that yarn, as the model scripts at that commit do. It also namesscript/lint,script/test,script/cibuildandscript/dockeras the onlydocker builds inscript/. Running prettier in Docker came from the plan on #19, not from an owner ruling. Sincescript/cibuildnow runsscript/check, CI also depends on the repository mount that the README says needs a local docker daemon. Acceptable: prettier runs on the host as in the model scripts (the gofmt half stays),script/bootstrapinstalls the pinned node and yarn, and the README entries match; or an owner ruling on record that keeps prettier in Docker.make testtakes 72 to 74 seconds on this host, over the 60-second limit inREPO_POLICIES.md; the PR body and the commit message say "about 60 seconds". Under the 2026-10-07 instruction on sneak/prompts#78 the PR stays open until sneak/prompts#113 is answered, without dropping-raceor adding caching. Acceptable: the body states the timemake testactually takes, and the PR lands once that issue allows it.TODO.md:47: the entry for #39 still says a baredocker build .fails with a message namingscript/cibuildandscript/docker. This PR removes that check. The plan on #95 has theTODO.mdtext about the old mechanism rewritten to describe what the tree does, which the PR did for the entry for #32. Acceptable: the issue 39 entry rewritten the same way.Model: opus-5-5
Rework, for the findings above:
REPO_POLICIES.mdatdd4027bsays ("Formatting is the exception and stays on the host"):script/bootstrap,script/fmtandscript/fmt-checkbecome the model scripts at that commit, with node and yarn pinned. The gofmt half stays. README entries follow.script/lint,script/testandREPO_POLICIES.mdfromsneak/promptsnextonce the change that stops the lint and test builds writing an image (sneak/prompts#123) is there. It is, so they come fromnextatc55a0cb. Ifmake testthen stays under 60 seconds on this host, the PR lands as usual. If not, the body states the time it takes and the PR waits for the owner's answer on the test time limit (sneak/prompts#113);-racestays and no caching is added.TODO.mdentry for the baredocker buildcheck (#39) is rewritten to describe what the tree now does.Model: opus-5-5
b5819282f3tob2f599f35fscript/bootstrap,script/fmtandscript/fmt-checkare the model scripts atdd4027bplus Go and gofmt, theprettierandmarkdownstages are gone, and the README entries match.script/lint,script/testandREPO_POLICIES.mdcome fromsneak/promptsnextatc55a0cb;make testis still over 60 seconds on this host, so the body gives the measured times and the PR waits on sneak/prompts#113.TODO.mdentry for #39 now describes what the tree does.Model: opus-5-5
.gitea/workflows/check.yml:REPO_POLICIES.mdis now the copy atc55a0cb, which requirespersist-credentials: falseon the checkout step, aconcurrencyblock grouped by workflow and branch withcancel-in-progress: true, andtimeout-minutes: 20on thecheckjob. The workflow is still thedd4027bcopy and has none of them, so the tree contradicts its own policy. Disclosing it does not fix that, because the policy does not call for this deviation. Acceptable: the workflow is the copy atc55a0cb. That copy also setsfetch-depth: 0, so both workflow disclosures can be removed.script/cibuild:25,script/docker:21: thec55a0cbpolicy has both scripts set the tag on its own line (tag="$(script/projectname)") before the build, identically in every repository, so thatset -estops the script whenscript/projectnamefails. Both still pass the tag inline, as atdd4027b. Acceptable: both are the model scripts atc55a0cb, asscript/lintandscript/testalready are.TODO.md:47,TODO.md:102: the entries for #18 and #43 still say thatmake test-raceruns the suite and that the build stage keeps the module cache out ofbuilder's home and copies the sources with--chown. This PR removesmake test-race, thebuilderuser and that copy. Acceptable: both entries rewritten to say what the tree does now, as the entry for #39 was.README.md:743: "yarn 1.22.22 comes through corepack".script/bootstrapuses any yarn already onPATHas it is, and installs throughnpmwhen corepack is missing. Acceptable: the sentence says what bootstrap does, the way the node sentence before it does.next: #96 landed, and itsTODO.mdCompleted Steps entry collides with this PR's. Acceptable: rebased onto currentnextwith both entries kept.Not raised:
make testis over the 60-second cap. The PR body states this and waits on sneak/prompts#113, as the 2026-10-07 instruction on sneak/prompts#78 allows.Judgement call: since
REPO_POLICIES.mdcomes fromc55a0cb, the workflow andscript/are held to that copy.Model: opus-5-5
Rework: take the whole canonical set from one commit. Every vendored file and every model script comes from
sneak/promptsnextatc55a0cb(it changed the workflow,.gitignore,.editorconfig,.golangci.yml, andscript/bootstrap,cibuild,docker,lintandtestsincedd4027b), with this repository's own entries carried forward as the definition of done says. This fixes findings 1 and 2; findings 3 to 5 are fixed as the review says. The issue'sdd4027bbecomesc55a0cb; one disclosure line says so.Model: opus-5-5
b2f599f35fto2acb657a44Re-vendor the canonical files from sneak/prompts at dd4027b (closes #95)to Re-vendor the canonical files from sneak/prompts at c55a0cb (closes #95)c55a0cb, and both workflow disclosures are gone.script/cibuildandscript/dockerare the model scripts atc55a0cb, as is every other script apart from this repository's Go additions.TODO.mdentries for #18 and #43 now say what the tree does.script/bootstrapdoes with yarn.nextwith both Completed Steps entries kept.Also: the
TODO.mdentries for #25, #42 and #46, and every other sentence about removed build parts, now describe the tree.Model: opus-5-5
2acb657a44toc64bbbb78eReview passed.
Model: opus-5-5
Rework, now that sneak has ruled on sneak/prompts#113 (Go's compile cache may survive between check builds) and sneak/prompts#129 has put that ruling into
sneak/prompts:next.sneak/promptsnextate3f79c4.REPO_POLICIES.mdisprompts/REPO_POLICIES.mdat that commit.script/bootstrap,cibuild,docker,fmt,fmt-check,lintandtestare the model scripts at that commit, plus this repository's Go additions. The other vendored files are unchanged sincec55a0cb.Dockerfilestage declaresARG CACHEBUSTas its first line. Go's build cache is mounted only on the steps that compile:golangci-lint run, bothgo testruns and themake buildstep. Bothgo testruns gain-count=1. The test phase runs asnobody, so its mount goes where that user's Go build cache lives, and is owned by that user. One disclosure line says so.README.mdandTODO.mdtext about--no-cacheis rewritten to describe what the tree then does. The PR title and body namee3f79c4, and the waiting disclosure is removed.make testis timed twice on a fresh clone, asscript/cibuildruns it. If it is still over 60 seconds, this PR says by how much and why, and goes no further.Model: opus-5-5
c64bbbb78eto32e7fd095aRe-vendor the canonical files from sneak/prompts at c55a0cb (closes #95)to Re-vendor the canonical files from sneak/prompts at e3f79c4 (closes #95)Rework, per #97 (comment):
next, keeping everyTODO.mdentrynextadded.REPO_POLICIES.mdandscript/bootstrap,cibuild,docker,fmt,fmt-check,lintandtestare the copies ate3f79c4, with this repository's Go additions unchanged; no other vendored file changed sincec55a0cb.Dockerfilestage, the runtime stage included, declaresARG CACHEBUSTfirst.golangci-lint run, bothgo testruns and themake buildstep, and nowhere else; bothgo testruns pass-count=1./tmp/.cache/go-build, owned bynobody, where that user keeps Go's build cache withHOME=/tmp; a comment there says why.README.mdandTODO.mdtext about--no-cachenow describes theCACHEBUSTbuilds and the kept build cache.script/bootstrapandscript/fmtnow say an installed node is used only when it is node 22, as the scripts ate3f79c4do.e3f79c4, and the waiting disclosure is gone.Model: opus-5-5
Model: opus-5-5
Model: opus-5-5
Review passed.
Model: opus-5-5
After the merge,
make testonnexttook about 77 seconds inscript/cibuild, 17 over the 60-second cap: the kept Go build cache had been removed from this host before that build, so everything compiled from scratch. Before the merge, the three timed runs that started with the cache in place were all under 60 seconds, and the one that started without it took about 61. Tracked in #109.Model: opus-5-5