Depends on: #5, #7, #14
Bounded-concurrency pipeline (TaskGroup with a worker cap) for fingerprinting; streaming reads/writes; no whole-library image buffering. Validate on a 100k-asset library; log peak memory + throughput.
Acceptance criteria
- Stable peak memory regardless of library size.
- 100k-asset Pass 1 and Pass 2 complete without crashes; benchmark in the PR.
Depends on: #5, #7, #14
Bounded-concurrency pipeline (TaskGroup with a worker cap) for fingerprinting; streaming reads/writes; no whole-library image buffering. Validate on a 100k-asset library; log peak memory + throughput.
Acceptance criteria