docs(specs): guardian skeptic — per-finding judgement + impact scoring (#246) - #268
Merged
Conversation
…246) Design for the skeptic pass: two orthogonal axes (verdict = is it true, impact_score 0-10 = does it matter), one LLM call per finding with its own hunks instead of one batch call over the whole list, partial degradation, and an A/B benchmark over frozen finder output that attributes any movement to the mechanism rather than the model. Evidence base: the PR #263 live run (8 findings, all confirmed at one severity, one real defect indistinguishable from two factually wrong claims) plus the measured history of same-family skeptics being binary and few-shot FP examples swinging mistral into refute-all. Amends 2026-06-10-guardian-sprint-design.md §5.2 ("one call, not N"), which predates the recall-lean finder. Refs #246 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Contributor
|
Caution The consumer version of Gemini Code Assist on GitHub has been sunset. All code review activity has officially ceased. |
11 TDD tasks: contract fields + sanitizer, FindingJudgement and pure merge, split_diff_by_file moved to the diff leaf, per-finding prompt with the impact rubric, bounded-concurrency judge_all, core and chunked wiring, ranking and threshold in the report, bench per-finding score records with score_separation, finder record/replay, then deletion of the batch API plus the §5.2 amendment. The batch API stays alive until the last task so every intermediate task leaves the suite green. Refs #246 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.



Refs #246. Design only — no implementation.
Why now
The recall-lean finder (#249) delegates precision to the skeptic. The skeptic is not delivering, and the live run on #263 today shows why in one picture: 8 findings, all confirmed, all at one severity. One was a real defect (
Path.is_file()raises on EACCES/ENAMETOOLONG — accepted and fixed). Two were factually wrong (for size: int in range(...)is not valid Python;as_posix()would have broken the Windows-path case the line exists for). Nothing in the output separated them.Two causes, only one of which is the model:
finding_index. Everything competes for one attention window, and index mapping has its own failure modes.Literal["confirmed","refuted","uncertain"]expresses "this is false" but not "this is true and worthless", and cannot be sorted or thresholded.Swapping the skeptic model under an unchanged mechanism buys the same flat output at higher cost. So #246 becomes mechanism-first; the model matrix runs on top as phase 2.
What the design proposes
verdict(truth, unchanged semantics —refuteddrops) +impact_score: int 0-10(importance — below threshold hides, never drops, and stays in the JSONL so the benchmark can still see it).diff_index, bounded concurrency (default 3, mistral's per-minute cap).finding_indexdisappears along with its failure modes.skeptic_statusgainspartialwithjudged/total; one failed call costs one verdict instead of the whole pass.median(score | GT) − median(score | non-GT) ≥ 3pooled across PRs. A flat distribution fails even if noise happens to drop — that is exactly the fix(context): resolve source_root against stored paths, first match wins (#228) #263 pathology.Amends
2026-06-10-guardian-sprint-design.md§5.2 ("one call, not N"), which predates the recall-lean finder: with a ≤5-finding gated finder one call was sufficient; with 10–26 it is the bottleneck.Phase 2 (paid model matrix) does not start without an explicit budget go — the prior gemini run hit the 30 PLN cap.
🤖 Generated with Claude Code