Every warning for a path the summary counts as skipped now reads scan: skipped PATH (REASON), path named once. This covers unreadable directories, failed lstats, failed reads and dropped operands ((a FIFO), (inside a .zfs directory)). One helper, skippedLine in scan.go, builds the read and lstat lines. It strips the path from the error and keeps the underlying reason.
Lines for paths left out on purpose now read scan: left out PATH (...): --exclude, default excludes, and filesystems that are not persistent.
README.md: "What scan prints" gives the wording; the three example lines under "Rules for the walk" changed to match. The issue says two, but there were three.
Judgement call: a file with several hard links that cannot be read used to get one warning naming the first path, while the summary counted every path. Each path now gets its own line, so a search for scan: skipped finds every counted path. Reversing it means restoring the single warning and the README sentence about hard links.
Model: opus-5-5
Fixes https://git.eeqj.de/sneak/sfdupes/issues/170.
- Every warning for a path the summary counts as skipped now reads `scan: skipped PATH (REASON)`, path named once. This covers unreadable directories, failed lstats, failed reads and dropped operands (`(a FIFO)`, `(inside a .zfs directory)`). One helper, `skippedLine` in `scan.go`, builds the read and lstat lines. It strips the path from the error and keeps the underlying reason.
- Lines for paths left out on purpose now read `scan: left out PATH (...)`: `--exclude`, default excludes, and filesystems that are not persistent.
- `README.md`: "What `scan` prints" gives the wording; the three example lines under "Rules for the walk" changed to match. The issue says two, but there were three.
Judgement call: a file with several hard links that cannot be read used to get one warning naming the first path, while the summary counted every path. Each path now gets its own line, so a search for `scan: skipped` finds every counted path. Reversing it means restoring the single warning and the README sentence about hard links.
Model: opus-5-5
internal/sfdupes/scan.go, subdirJob (the skippedLine(p, err) warning after e.Info() fails): no test checks this warning. It is one of the four places changed to print scan: skipped PATH (REASON), and the only one with no test. A subdirectory that cannot be statted gets this line, for example one inside a directory that can be read but not searched. Acceptable: in TestScanWarnsAboutUnreadablePaths in internal/sfdupes/scan_test.go, create a subdirectory inside the walked unsearchable directory before the chmod, expect 4 skipped instead of 3, and expect a scan: skipped line naming that subdirectory with (permission denied).
Model: opus-5-5
Verdict: FAIL
Head: 6cfeb4ab65c05db0512bb25342d29c40651a72ab
1. `internal/sfdupes/scan.go`, `subdirJob` (the `skippedLine(p, err)` warning after `e.Info()` fails): no test checks this warning. It is one of the four places changed to print `scan: skipped PATH (REASON)`, and the only one with no test. A subdirectory that cannot be statted gets this line, for example one inside a directory that can be read but not searched. Acceptable: in `TestScanWarnsAboutUnreadablePaths` in `internal/sfdupes/scan_test.go`, create a subdirectory inside the walked `unsearchable` directory before the chmod, expect 4 skipped instead of 3, and expect a `scan: skipped` line naming that subdirectory with `(permission denied)`.
Model: opus-5-5
README.md, section "What scan prints", in the paragraph after the two example scan: skipped lines: the sentence "When a file with several hard links cannot be read, each of its paths gets a warning." puts a rare case in front of the main rule that follows it, "A line for a path left out on purpose starts with scan: left out instead, and is not counted." The "instead" then reads as if it contrasts with the hard-link warning, not with the skipped-path warning it is meant to contrast with. Acceptable: move the hard-link sentence to the end of the paragraph, after "A search of the log for scan: skipped therefore finds the paths the summary counts."
Model: opus-5-5
Verdict: FAIL
Head: a179fbaa9c74e78a543d4aa6d1a7df8b32ae6725
1. `README.md`, section "What `scan` prints", in the paragraph after the two example `scan: skipped` lines: the sentence "When a file with several hard links cannot be read, each of its paths gets a warning." puts a rare case in front of the main rule that follows it, "A line for a path left out on purpose starts with `scan: left out` instead, and is not counted." The "instead" then reads as if it contrasts with the hard-link warning, not with the skipped-path warning it is meant to contrast with. Acceptable: move the hard-link sentence to the end of the paragraph, after "A search of the log for `scan: skipped` therefore finds the paths the summary counts."
Model: opus-5-5
For the reworker (third failed review; this ends the loop): fix exactly the findings of the newest review as its "Acceptable" lines say, nothing else. The next review checks only those.
Model: opus-5-5
For the reworker (third failed review; this ends the loop): fix exactly the findings of the newest review as its "Acceptable" lines say, nothing else. The next review checks only those.
Model: opus-5-5
A warning for a path the summary counts as skipped now reads
`scan: skipped PATH (REASON)`, naming the path once. This covers
unreadable directories, failed lstats, failed reads and dropped
operands. Each path of a hard-linked file that cannot be read gets its
own line, since each is counted. Lines for paths left out on purpose
(`--exclude`, default excludes, filesystems that are not persistent)
now read `scan: left out PATH (...)`, so a search for `scan: skipped`
finds only the counted paths.
Model: opus-5-5
Every path the summary counts as skipped now gets one scan: skipped PATH (REASON) line, paths left out on purpose get scan: left out, and the README matches the code.
Model: opus-5-5
Verdict: PASS
Head: 4dba676880fa9730f656d30d9b1c13a6dd73e7d1
Every path the summary counts as skipped now gets one `scan: skipped PATH (REASON)` line, paths left out on purpose get `scan: left out`, and the README matches the code.
Model: opus-5-5
clawbot
merged commit e16c46804d into next2026-11-11 13:37:14 +01:00
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.
Fixes #170.
scan: skipped PATH (REASON), path named once. This covers unreadable directories, failed lstats, failed reads and dropped operands ((a FIFO),(inside a .zfs directory)). One helper,skippedLineinscan.go, builds the read and lstat lines. It strips the path from the error and keeps the underlying reason.scan: left out PATH (...):--exclude, default excludes, and filesystems that are not persistent.README.md: "Whatscanprints" gives the wording; the three example lines under "Rules for the walk" changed to match. The issue says two, but there were three.Judgement call: a file with several hard links that cannot be read used to get one warning naming the first path, while the summary counted every path. Each path now gets its own line, so a search for
scan: skippedfinds every counted path. Reversing it means restoring the single warning and the README sentence about hard links.Model: opus-5-5
Verdict: FAIL
Head:
6cfeb4ab65internal/sfdupes/scan.go,subdirJob(theskippedLine(p, err)warning aftere.Info()fails): no test checks this warning. It is one of the four places changed to printscan: skipped PATH (REASON), and the only one with no test. A subdirectory that cannot be statted gets this line, for example one inside a directory that can be read but not searched. Acceptable: inTestScanWarnsAboutUnreadablePathsininternal/sfdupes/scan_test.go, create a subdirectory inside the walkedunsearchabledirectory before the chmod, expect 4 skipped instead of 3, and expect ascan: skippedline naming that subdirectory with(permission denied).Model: opus-5-5
6cfeb4ab65toa179fbaa9ca179fba; the subdirectory istree/unsearchable/d.Model: opus-5-5
Verdict: FAIL
Head:
a179fbaa9cREADME.md, section "Whatscanprints", in the paragraph after the two examplescan: skippedlines: the sentence "When a file with several hard links cannot be read, each of its paths gets a warning." puts a rare case in front of the main rule that follows it, "A line for a path left out on purpose starts withscan: left outinstead, and is not counted." The "instead" then reads as if it contrasts with the hard-link warning, not with the skipped-path warning it is meant to contrast with. Acceptable: move the hard-link sentence to the end of the paragraph, after "A search of the log forscan: skippedtherefore finds the paths the summary counts."Model: opus-5-5
For the reworker (third failed review; this ends the loop): fix exactly the findings of the newest review as its "Acceptable" lines say, nothing else. The next review checks only those.
Model: opus-5-5
a179fbaa9cto4dba6768804dba676.Model: opus-5-5
Verdict: PASS
Head:
4dba676880Every path the summary counts as skipped now gets one
scan: skipped PATH (REASON)line, paths left out on purpose getscan: left out, and the README matches the code.Model: opus-5-5