Goal
Show progress during duplicate hashing, not only the coarse phase label.
Large duplicate candidate sets can make the app feel busy for a while. Users should see that duplicate work is moving forward.
Current behavior
The app already maps report stages to labels:
ReportStage::FindingDuplicates => ScanPhase::CheckingDuplicates,
But it does not show how many duplicate candidates have been hashed.
Suggested design
Add a small progress contract around duplicate hashing, for example:
struct DuplicateProgress {
candidates_seen: u64,
candidates_total: u64,
}
This should stay approximate and should not fake a percentage unless the total is known.
Acceptance criteria
- Duplicate hashing emits useful progress for large candidate sets.
- The UI remains calm and does not jump layout.
- Cancellation still works during duplicate hashing.
- Tests cover the progress callback shape.
Goal
Show progress during duplicate hashing, not only the coarse phase label.
Large duplicate candidate sets can make the app feel busy for a while. Users should see that duplicate work is moving forward.
Current behavior
The app already maps report stages to labels:
But it does not show how many duplicate candidates have been hashed.
Suggested design
Add a small progress contract around duplicate hashing, for example:
This should stay approximate and should not fake a percentage unless the total is known.
Acceptance criteria