README.md §Getting Started is a five-line make build example. A
first-time user of a 1.0 cannot learn from the repo how to install the
tool, how to set up the daily scan the design is built around, or what
to do with the two reports. Everything below is documentation; no code
changes.
Definition of done
§Getting Started gains an install section: go install sneak.berlin/go/sfdupes@latest (verify that the vanity import path
actually resolves before documenting it; if it does not, say so on
the PR and document git clone plus make build only), and the
Docker image with a bind-mounted scan path and database.
A cron deployment example: the crontab line, which user it runs
as, where the database lives by default, and how stderr is
captured (the non-TTY progress lines and the summary line).
A short "Reading the reports" section: what first and dupe
mean, that the match is a candidate signal and not proof, that
hard-linked paths are listed although removing one frees nothing,
and a worked example of verifying one candidate pair with cmp before removing anything.
--workers, -x, --version and --help each appear in the
usage block or the text around it.
Every sentence added is true of the tree it merges into: each
command shown has been run, and nothing is promised that the
code does not do.
Markdown formatted with make fmt once #19 has landed.
Depends on #19 (formatting)
and #15 (--version
behaviour it documents).
Model: fable-5-1
`README.md` §Getting Started is a five-line `make build` example. A
first-time user of a 1.0 cannot learn from the repo how to install the
tool, how to set up the daily scan the design is built around, or what
to do with the two reports. Everything below is documentation; no code
changes.
## Definition of done
1. §Getting Started gains an install section: `go install
sneak.berlin/go/sfdupes@latest` (verify that the vanity import path
actually resolves before documenting it; if it does not, say so on
the PR and document `git clone` plus `make build` only), and the
Docker image with a bind-mounted scan path and database.
2. A cron deployment example: the crontab line, which user it runs
as, where the database lives by default, and how stderr is
captured (the non-TTY progress lines and the summary line).
3. A short "Reading the reports" section: what `first` and `dupe`
mean, that the match is a candidate signal and not proof, that
hard-linked paths are listed although removing one frees nothing,
and a worked example of verifying one candidate pair with
`cmp` before removing anything.
4. `--workers`, `-x`, `--version` and `--help` each appear in the
usage block or the text around it.
5. Every sentence added is true of the tree it merges into: each
command shown has been run, and nothing is promised that the
code does not do.
6. Markdown formatted with `make fmt` once
https://git.eeqj.de/sneak/sfdupes/issues/19 has landed.
Depends on https://git.eeqj.de/sneak/sfdupes/issues/19 (formatting)
and https://git.eeqj.de/sneak/sfdupes/issues/15 (`--version`
behaviour it documents).
Model: fable-5-1
clawbot
added this to the 1.0.0 milestone 2026-09-21 09:17:52 +02:00
Plan (implementer's brief). Dispatched once #15 (--version on stdout) is on next.
Reading taken on item 6: this unit does not wait for #19. Format the new text by hand to match the surrounding README.md (4-space indents, wrapped prose); 19 reformats every Markdown file when it lands.
Install (item 1): check whether sneak.berlin/go/sfdupes resolves (curl -s 'https://sneak.berlin/go/sfdupes?go-get=1' must return a go-import meta tag pointing at this repo) and document go install only if it does; otherwise say so on the PR and document git clone plus make build. For Docker, build the image and show one docker run with the scanned path and the database directory bind-mounted, as the image actually runs.
Cron (item 2): one crontab line for root, the default database path and SFDUPES_DATABASE, where stderr goes (the plain progress lines off a terminal and the summary line), what cron mails on failure, and that a second scan while one runs fails at once naming the lock file. Say that report and trees need only read access, so an unprivileged user can run them against root's database.
Reading the reports (item 3): what first and dupe mean, candidate not proof, hard links, the path escaping (\\, \t, \n, \r) and how to undo it before using a path, and a worked cmp check of one pair before removing anything.
Item 4: --workers, -x, --version, --help in the usage block.
Do not restate what other sections already specify: link to them. Every command shown is one you ran against the tree you push (item 5); nothing is promised that the code does not do.
Model: opus-5-5
Plan (implementer's brief). Dispatched once https://git.eeqj.de/sneak/sfdupes/issues/15 (`--version` on stdout) is on `next`.
- Reading taken on item 6: this unit does not wait for https://git.eeqj.de/sneak/sfdupes/issues/19. Format the new text by hand to match the surrounding `README.md` (4-space indents, wrapped prose); 19 reformats every Markdown file when it lands.
- Install (item 1): check whether `sneak.berlin/go/sfdupes` resolves (`curl -s 'https://sneak.berlin/go/sfdupes?go-get=1'` must return a `go-import` meta tag pointing at this repo) and document `go install` only if it does; otherwise say so on the PR and document `git clone` plus `make build`. For Docker, build the image and show one `docker run` with the scanned path and the database directory bind-mounted, as the image actually runs.
- Cron (item 2): one crontab line for root, the default database path and `SFDUPES_DATABASE`, where stderr goes (the plain progress lines off a terminal and the summary line), what cron mails on failure, and that a second scan while one runs fails at once naming the lock file. Say that `report` and `trees` need only read access, so an unprivileged user can run them against root's database.
- Reading the reports (item 3): what `first` and `dupe` mean, candidate not proof, hard links, the path escaping (`\\`, `\t`, `\n`, `\r`) and how to undo it before using a path, and a worked `cmp` check of one pair before removing anything.
- Item 4: `--workers`, `-x`, `--version`, `--help` in the usage block.
- Do not restate what other sections already specify: link to them. Every command shown is one you ran against the tree you push (item 5); nothing is promised that the code does not do.
Model: opus-5-5
clawbot
self-assigned this 2026-10-04 07:02:08 +02:00
Done in #80. The README now covers installing (go install, a clone plus make build, Docker), a daily root cron scan, and how to read and check the reports. --help is added to the usage block.
Deviation: the install line uses @main. The import path resolves, but @latest installs the v0.0.1 tag, which predates the database.
Model: opus-5-5
Done in https://git.eeqj.de/sneak/sfdupes/pulls/80. The README now covers installing (`go install`, a clone plus `make build`, Docker), a daily root cron scan, and how to read and check the reports. `--help` is added to the usage block.
Deviation: the install line uses `@main`. The import path resolves, but `@latest` installs the `v0.0.1` tag, which predates the database.
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.
README.md§Getting Started is a five-linemake buildexample. Afirst-time user of a 1.0 cannot learn from the repo how to install the
tool, how to set up the daily scan the design is built around, or what
to do with the two reports. Everything below is documentation; no code
changes.
Definition of done
go install sneak.berlin/go/sfdupes@latest(verify that the vanity import pathactually resolves before documenting it; if it does not, say so on
the PR and document
git cloneplusmake buildonly), and theDocker image with a bind-mounted scan path and database.
as, where the database lives by default, and how stderr is
captured (the non-TTY progress lines and the summary line).
firstanddupemean, that the match is a candidate signal and not proof, that
hard-linked paths are listed although removing one frees nothing,
and a worked example of verifying one candidate pair with
cmpbefore removing anything.--workers,-x,--versionand--helpeach appear in theusage block or the text around it.
command shown has been run, and nothing is promised that the
code does not do.
make fmtonce#19 has landed.
Depends on #19 (formatting)
and #15 (
--versionbehaviour it documents).
Model: fable-5-1
Plan (implementer's brief). Dispatched once #15 (
--versionon stdout) is onnext.README.md(4-space indents, wrapped prose); 19 reformats every Markdown file when it lands.sneak.berlin/go/sfdupesresolves (curl -s 'https://sneak.berlin/go/sfdupes?go-get=1'must return ago-importmeta tag pointing at this repo) and documentgo installonly if it does; otherwise say so on the PR and documentgit cloneplusmake build. For Docker, build the image and show onedocker runwith the scanned path and the database directory bind-mounted, as the image actually runs.SFDUPES_DATABASE, where stderr goes (the plain progress lines off a terminal and the summary line), what cron mails on failure, and that a second scan while one runs fails at once naming the lock file. Say thatreportandtreesneed only read access, so an unprivileged user can run them against root's database.firstanddupemean, candidate not proof, hard links, the path escaping (\\,\t,\n,\r) and how to undo it before using a path, and a workedcmpcheck of one pair before removing anything.--workers,-x,--version,--helpin the usage block.Model: opus-5-5
Done in #80. The README now covers installing (
go install, a clone plusmake build, Docker), a daily root cron scan, and how to read and check the reports.--helpis added to the usage block.Deviation: the install line uses
@main. The import path resolves, but@latestinstalls thev0.0.1tag, which predates the database.Model: opus-5-5