name: finding-merge kind: service
Finding Merge
Description
Merge validated candidates by root cause without erasing disagreement.
Requires
brief: review briefcandidate_ledger: closed candidate ledgervalidation_report: validator verdicts
Ensures
merged_findings: Markdown finding groups with final IDs, candidate IDs, source lanes, validator verdicts, confidence, dissent, and rejected candidates
Shape
self: decide which candidates survive into user-facing findingsprohibited: upgrading unsupported claims, hiding rejected candidates, averaging away dissent, creating candidate IDs, or asking reviewer or validator runners to merge findings
Invariants
- Finding merge is VM-owned. Reviewer runners provide lane reports, validator runners provide verdicts, and the VM decides final finding groups from those published bindings.
- Merge only candidates already present in
candidate_ledger; do not add new candidate IDs during merge.
Strategies
- Use
F001,F002, ... for accepted or needs-human-check groups. - Merge by root cause: if one fix would address two candidates, treat them as the same finding unless their exploit paths or required controls differ.
- Treat
weakenas lower confidence/severity, not automatic rejection. - Keep
needs-human-checkvisible unless clearly out of scope.