When it runs
Invoked by the scanner orchestrator on every finding ingested, or directly when a developer asks Claude to triage a specific scanner output. Runs customer-side with codebase access; only the verdict and evidence digest leave your environment.
↳ flowrail-triage fnd_d4a1c8e2 (semgrep · javascript.express.injection.tainted-sql-string)
verdict false_positive (confidence 0.87)
evidence
user_input sanitized at src/api/orders.ts:38 via zod
flagged sink at line 47 receives only validated values
no taint flow from request body to query parameter
guardrail_escape noflowrail_triage_finding
{
"design_review_id": "dr_7f3a9e2c",
"finding": {
"finding_id": "fnd_d4a1c8e2",
"scanner": "semgrep",
"rule_id": "javascript.express.injection.tainted-sql-string",
"file": "src/api/orders.ts",
"line_range": [42, 51],
"code_hash": "sha256:e3b0c44…"
}
}{
"verdict": "false_positive",
"confidence": 0.87,
"evidence": ["...", "..."],
"guardrail_escape": false,
"proposed_guardrail_update": null
}When a finding is a true positive AND its threat was predicted at design review AND no guardrail blocked the write, the response carries proposed_guardrail_update with a candidate tightening. The proposal goes through the integrity gate (rate limit, FPR replay, attribution) before any auto-merge.