For #95: re-vendors the shared files and model scripts from sneak/promptsnext at c55a0cb 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 c55a0cb; .gitignore and .dockerignore are those copies followed by this repository's entries. The depguard deny list has no entries to carry.
golangci-lint v2.14.0 raises no findings.
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 script is the model script at c55a0cb; bootstrap, fmt, fmt-check and precommit add Go, gofmt and go mod tidy. Prettier runs on the host, so the prettier and markdown stages are gone.
.claude/settings.json is deleted; it held no agent guidance to move to AGENTS.md.
Disclosures:
Waiting: make test took 112, 94 and 87 seconds on this host at load average 100 to 147 (cap 60), the tests themselves 17 to 25 seconds. This PR waits for the owner's answer on sneak/prompts#113.
Deviation: the whole set comes from c55a0cb on next rather than dd4027b, as the instructions on sneak/prompts#78 allow.
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 `c55a0cb` 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 `c55a0cb`; `.gitignore` and `.dockerignore` are those copies followed by this repository's entries. The `depguard` deny list has no entries to carry.
- golangci-lint v2.14.0 raises no findings.
- 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 script is the model script at `c55a0cb`; `bootstrap`, `fmt`, `fmt-check` and `precommit` add Go, gofmt and `go mod tidy`. Prettier runs on the host, so the `prettier` and `markdown` stages are gone.
- `.claude/settings.json` is deleted; it held no agent guidance to move to `AGENTS.md`.
Disclosures:
- Waiting: `make test` took 112, 94 and 87 seconds on this host at load average 100 to 147 (cap 60), the tests themselves 17 to 25 seconds. This PR waits for the owner's answer on https://git.eeqj.de/sneak/prompts/issues/113.
- Deviation: the whole set comes from `c55a0cb` on `next` rather than `dd4027b`, as the instructions on https://git.eeqj.de/sneak/prompts/issues/78 allow.
- 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
Every vendored file, REPO_POLICIES.md and every model script is the
copy at sneak/prompts c55a0cb, with this repository's own entries kept
after the canonical content. Lint and test are phases of the Dockerfile
that write no image, built uncached. make test runs the suite under the
race detector as nobody, because root reads the files the tests make
unreadable. Dockerfile.lint, script/verify-lint-image-pin and
make test-race are gone. Prettier runs on the host, from the node and
yarn that script/bootstrap installs. golangci-lint v2.14.0 raises no
findings. .claude/settings.json is deleted.
Deviation: the set comes from c55a0cb on next rather than dd4027b, as
the instructions on sneak/prompts#78 allow.
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/promptsnextatc55a0cband bringsDockerfile,Makefileandscript/in line with itsREPO_POLICIES.md..golangci.yml,.editorconfig,.prettierrc,.prettierignore, the workflow andREPO_POLICIES.mdare the copies atc55a0cb;.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.c55a0cb;bootstrap,fmt,fmt-checkandprecommitadd Go, gofmt andgo mod tidy. Prettier runs on the host, so theprettierandmarkdownstages are gone..claude/settings.jsonis deleted; it held no agent guidance to move toAGENTS.md.Disclosures:
make testtook 112, 94 and 87 seconds on this host at load average 100 to 147 (cap 60), the tests themselves 17 to 25 seconds. This PR waits for the owner's answer on sneak/prompts#113.c55a0cbonnextrather thandd4027b, as the instructions on sneak/prompts#78 allow..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
View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.