check / check (push) Successful in 2m13s
formatBytes already ends in a unit, so the summary line read "9 B bytes" or "1.0 KiB bytes". The format string in Stats.Print no longer adds the word "bytes". Print now takes the io.Writer to print to; its callers pass os.Stderr, and the new test passes a buffer to read the line for one small and one large byte count. Model: opus-5-5
80 lines
3.7 KiB
Markdown
80 lines
3.7 KiB
Markdown
# Workflow
|
|
|
|
* branch (from `main`)
|
|
* do the work in Next Step
|
|
* move Next Step to the top of Completed Steps
|
|
* move the top item of Future Steps into Next Step
|
|
* commit (`TODO.md` changes in the same commit as the work)
|
|
* merge to `main` if the branch is not protected, otherwise open a PR
|
|
* push
|
|
|
|
# Status
|
|
|
|
1.0+
|
|
|
|
Tagged 1.0.0 (2025-05-08). Substantial correctness fixes and features
|
|
have landed since the tag.
|
|
|
|
# Next Step
|
|
|
|
Re-vendor the canonical files from `sneak/prompts` at `dd4027b`
|
|
(https://git.eeqj.de/sneak/attrsum/issues/13): add `REPO_POLICIES.md`
|
|
and `.editorconfig`, refresh `.gitignore` (only the `attrsum` binary
|
|
today), `.dockerignore`, `.gitea/workflows/check.yml` and
|
|
`.golangci.yml`, and move the lint phase to golangci-lint v2.14.0.
|
|
|
|
# Completed Steps
|
|
|
|
* 2026-10-06: the summary line after `sum`, `check` and `clear` prints
|
|
the byte unit once (`1.5 KiB`, not `1.5 KiB bytes`)
|
|
* 2026-10-06: a path that `--exclude` or `--exclude-dotfiles` excludes
|
|
is skipped even when it cannot be read, so an excluded directory
|
|
that cannot be listed no longer fails the run
|
|
* 2026-10-06: lint and test run as phases of the `Dockerfile`, and the
|
|
build stage depends on both; `script/lint` and `script/test` each
|
|
build their phase with `--no-cache`; `script/cibuild` bootstraps,
|
|
runs `script/check`, then builds the image; golangci-lint is no
|
|
longer installed on the host
|
|
* 2026-10-06: `check --continue` keeps going past a file or directory
|
|
it cannot read: it counts it as failed, prints the error and the
|
|
path on stderr, and checks the rest of the tree
|
|
* 2026-10-05: golangci-lint settings take effect: canonical
|
|
`.golangci.yml` (v2 layout, settings under `linters.settings`),
|
|
golangci-lint pinned at v2.12.2 in `Dockerfile` and
|
|
`script/bootstrap`, and the code fixed for what the settings now
|
|
report (long lines in `attrsum.go` rewrapped)
|
|
* 2026-10-05: `make try` runs on three small files in a temporary
|
|
directory that it removes afterwards, also when a step fails,
|
|
instead of on a fixed directory on one person's machine
|
|
* 2026-10-02: `attrsum --version` reports the git tag or short commit,
|
|
stamped by `make build` and by a plain `docker build .` of a clone;
|
|
`.dockerignore` sends `.git` without `.git/config` and keeps a
|
|
host-built `attrsum` out; CI checks out full history so it stamps
|
|
the same version
|
|
* 2026-02-02: correctness pass: track actual bytes read instead of
|
|
stale file size, atomic failure tracking in ProcessCheck, detect
|
|
file modification during checksum (TOCTOU), propagate countFiles
|
|
errors, single progress bar across paths, error on empty stdin,
|
|
dead code removal
|
|
* 2026-02-01: added quiet mode, progress bar, summary report, and stdin
|
|
path input; multiple file/directory arguments for all commands
|
|
* 2025-07-12: README update
|
|
* 2025-05-08: initial working tool with passing tests, skips
|
|
non-regular files, Makefile, README; tagged 1.0.0
|
|
|
|
# Future Steps
|
|
|
|
* Restructure README.md into the standard sections: Description,
|
|
Getting Started, Entrypoints, Rationale, Design, TODO, License,
|
|
Author (Getting Started, Why?, TODO, License exist; Description,
|
|
Entrypoints, Design, Author are missing)
|
|
* Add a `LICENSE` file matching the README's WTFPL v2; sneak's to add,
|
|
not an agent's
|
|
* Tag a patch release to ship the 2026-02-02 correctness fixes
|
|
* Dry-run mode (--dry-run, -n): show what would be done without making
|
|
changes (from README TODO)
|
|
* JSON output (--json) for scripting and integration (from README TODO)
|
|
* Parallel processing (-j N) with multiple goroutines for faster
|
|
checksumming on large trees (from README TODO)
|
|
* Formalize and document exit codes for scripting (from README TODO)
|