Skip to content

#385 loose ends: CHANGELOG claims one path key (D13 split it), and the D8/D13 regression has no unit guard #401

Description

@FelixKrueger

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions