Verify findings against full file before posting #82
Labels
No labels
Compat/Breaking
Kind/Bug
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/Security
Kind/Testing
Priority
Critical
Priority
High
Priority
Low
Priority
Medium
Reviewed
Confirmed
Reviewed
Duplicate
Reviewed
Invalid
Reviewed
Won't Fix
Status
Abandoned
Status
Blocked
Status
Need More Info
No milestone
No assignees
1 participant
Notifications
Due date
No due date set.
Reference
marvin8/wuming#82
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Reviewers see only diff hunks, so findings regularly contain false premises — claims contradicted by code or docs outside the reviewed hunks.
Evidence from #75: "count says six but only four backends documented" (the missing sections sat outside the diff); "no positive test exists" (it did, outside the hunk); "base_url/model are not validated" (they were, in unchanged code).
A verification pass — checking each candidate finding against the full file (or wider repo context) before it is posted — would drop findings that do not survive contact and spare the author round-trips.
Plan of attack (design agreed in session; spec: wave-1 review quality)
Exploration findings:
Backend.complete()already takes a per-callmodel(all three backends honor it, defaulting whenNone) — so the verifier can use the producing agent model with no new knob (decided: noWUMING_VERIFY_MODEL).with_retry— verification inherits rate-limit resilience for free; the pass only needs to bound its own fan-out.ForgejoClient.get_file_content()returnsNoneon 404;FileDiff.full_contentalready carries attached file contents that can seed the verification cache.Approach: new
src/wuming/verify.py:parse_verdict()— strict parse of{"verdict": "confirmed"|"rejected", "reason": str}; anything else → keep.verify_finding()— one call per finding, fail-open: only an affirmativerejecteddrops; garbage/exception/timeout keep the finding with a logged warning.fetch_file_contents()— lazy per-file fetch, cached, seeded from attachedfull_content, oversize guard (2000-line module constant) skips verification for huge files.build_model_map()— agent → model fromWUMING_AGENTS(last-wins; unknown → backend default).verify_comments()— bounded concurrency (semaphore, 4) so a 50–200-finding PR cannot trigger a rate-limit storm; fail-open otherwise turns the pass into a silent no-op exactly when needed.WUMING_VERIFYconfig flag, default on, fail-closed parser (typo →ValueError)._main()after position resolution — free filters always run before LLM spend. Scope note: the verifier checks claims against the changed file only; claims about other files are out of scope by design.Branch:
feat/issue-82-verify-findingsCommits:
:sparkles:verdict parsing →:sparkles:fail-open verify call →:sparkles:file sourcing →:sparkles:model map →:sparkles:orchestration →:sparkles:config flag →:sparkles:pipeline wiring →:memo:docsPR: targets
main,Closes #82