Found by the #385 coverage re-audit (plans/08062026_se-output-collision-preflight/REAUDIT.md, 2026-08-08 — the first audit to run against the final tree; the three original audits all predate the D7–D13 review round). Verdict was INCOMPLETE on 3 items; no behavioural gap. Two are real loose ends:
1. The CHANGELOG entry contradicts what shipped. CHANGELOG.md:206-211 ends: "All four now use the same key as the pre-flight." D13 then split the key in two, and #389 refined the --passthrough half again. Today the pre-flight uses the case-folded collision_key; the three input-identity checks use the case-preserving path_identity_key; --passthrough uses both. Nothing in the CHANGELOG discloses the split (grep for path_identity_key / "identity key" returns nothing). The bug the entry describes is genuinely fixed — both keys share lexical_normalise — so the entry is stale rather than wrong about the outcome. Fix: correct the final sentence to describe both keys and why they differ (case-folding is right for output paths, wrong for input identity).
2. The D8→D13 reversal has no unit-level guard. CODE_REVIEW_D13.md finding 3 asked for a four-line test, and it was never added:
let cli = Cli::parse_from(["trim_galore", "--paired",
"Sample_R1.fastq.gz", "Sample_R2.fastq.gz", "SAMPLE_R1.fastq.gz", "SAMPLE_R2.fastq.gz"]);
assert!(cli.validate().is_ok(), "case-only variants are distinct inputs");
D8 over-applied case-folding to the input-identity checks, which rejected two genuinely distinct files on a case-sensitive filesystem; D13 reversed it. The io.rs key-level tests pin the keys — but what broke was the wiring in cli.rs, and the only thing covering that today is the #216 CI validation job (.github/workflows/ci.yml:625-630). No files on disk, so the test runs identically on macOS and Linux.
The re-audit's third gap (norm_path's doc block not naming path_identity_key) is already tracked in #399, whose resolution removes that reader-facing surface anyway.
Found by the #385 coverage re-audit (
plans/08062026_se-output-collision-preflight/REAUDIT.md, 2026-08-08 — the first audit to run against the final tree; the three original audits all predate the D7–D13 review round). Verdict was INCOMPLETE on 3 items; no behavioural gap. Two are real loose ends:1. The CHANGELOG entry contradicts what shipped.
CHANGELOG.md:206-211ends: "All four now use the same key as the pre-flight." D13 then split the key in two, and #389 refined the--passthroughhalf again. Today the pre-flight uses the case-foldedcollision_key; the three input-identity checks use the case-preservingpath_identity_key;--passthroughuses both. Nothing in the CHANGELOG discloses the split (grep forpath_identity_key/ "identity key" returns nothing). The bug the entry describes is genuinely fixed — both keys sharelexical_normalise— so the entry is stale rather than wrong about the outcome. Fix: correct the final sentence to describe both keys and why they differ (case-folding is right for output paths, wrong for input identity).2. The D8→D13 reversal has no unit-level guard.
CODE_REVIEW_D13.mdfinding 3 asked for a four-line test, and it was never added:D8 over-applied case-folding to the input-identity checks, which rejected two genuinely distinct files on a case-sensitive filesystem; D13 reversed it. The
io.rskey-level tests pin the keys — but what broke was the wiring incli.rs, and the only thing covering that today is the#216CI validation job (.github/workflows/ci.yml:625-630). No files on disk, so the test runs identically on macOS and Linux.The re-audit's third gap (
norm_path's doc block not namingpath_identity_key) is already tracked in #399, whose resolution removes that reader-facing surface anyway.