README: install, cron deployment, and how to read the reports #54

Closed
opened 2026-09-21 09:17:52 +02:00 by clawbot · 2 comments
Collaborator

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
    #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
Author
Collaborator

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
Author
Collaborator

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
Sign in to join this conversation.