Goal
Turn the scan/report pipeline into an explicit incremental state machine.
The desktop app can now show provisional findings while scanning, but the final report still has several full passes. A future architecture could make each stage clearer, testable, and easier to stream.
Why this is super advanced
This touches scanner, graph, rules, risk, dedup, report, cancellation, and UI events.
Current pipeline shape:
scanner -> graph -> rules + risk -> dedup -> report
Possible future shape:
enum ScanPipelineEvent {
EntrySeen(FileEntry),
ProvisionalFinding(Finding),
GraphReady,
FinalFinding(Finding),
DuplicateSetReady(DuplicateSet),
Complete(Report),
}
Suggested deliverable
Start with a design PR or markdown document. Do not try to rewrite the whole pipeline in one PR.
Acceptance criteria
- Identifies the pipeline states and what each state owns.
- Keeps cancellation behavior clear.
- Keeps final report authority separate from provisional UI previews.
- Includes a migration plan with small PR steps.
Goal
Turn the scan/report pipeline into an explicit incremental state machine.
The desktop app can now show provisional findings while scanning, but the final report still has several full passes. A future architecture could make each stage clearer, testable, and easier to stream.
Why this is super advanced
This touches scanner, graph, rules, risk, dedup, report, cancellation, and UI events.
Current pipeline shape:
Possible future shape:
Suggested deliverable
Start with a design PR or markdown document. Do not try to rewrite the whole pipeline in one PR.
Acceptance criteria