Why Scanner Findings Are Not Proof
Retest-confirmed outcomes support a finding within their recorded scope and are recorded separately.

On this page
- 1. What scanners do well and why teams rely on them
- 2. Why detection alone leaves security decisions underdetermined
- 3. What counts as evidence for a security finding
- 4. Where unconfirmed findings create real cost
- 5. How verification changes triage and release decisions
- 6. Why pair scanners with LyraShield
A scanner finding is a candidate based on pattern matching or analysis rules. A retest-confirmed finding passed a fresh server-owned check that covered the original condition within a recorded scope. That check does not automatically establish exploitability across your deployment, and it says nothing about paths the check did not cover.
If you ship AI built apps, you already live with fast generated code, frequent rewrites and dependency churn. Static analysis and other scanners are part of that loop. They surface possible issues early. The question for release is not whether you can detect more, but whether you can prove which alerts matter and whether your remediation holds. For a broader view on securing this workflow, see the vibe coding security guide.
This comparison is not about one vendor versus another. It is about evidence states that are often confused in dashboards. Scanner output gives you candidates. A retest records what a fresh check observed after a change, while detection alone records only that a rule matched. Both have value, but they answer different questions in finding verification.
1. What scanners do well and why teams rely on them
Scanners excel at breadth and speed. A SAST tool can walk thousands of lines in seconds and flag patterns that resemble known weaknesses. That includes injection style sinks, insecure randomness, path traversal or use of risky APIs. For teams building with coding agents, that fast pass is essential because you generate more code than you can manually review.
The category has matured. Rules align with community knowledge like the OWASP Top Ten and the CWE Top 25. Frameworks like the NIST Secure Software Development Framework recommend integrating such checks early. Tools also integrate well into pull requests and CI, so findings appear where developers already work.
Scanners also create a consistent vocabulary. When an alert says potential cross site scripting at a given file and line, everyone knows what class of issue to investigate. Documentation such as MDN on cross site scripting defenses gives teams a shared reference for remediation. For these reasons, detection remains a practical baseline. No honest contrast should dismiss it.
2. Why detection alone leaves security decisions underdetermined
Detection answers whether code looks like a problem. It does not by itself answer whether the problem is reachable, exploitable and relevant in your deployed app. That gap is normal. Static rules work without full runtime context, so they must approximate.
Consider a common case in AI generated code. A rule flags a function that concatenates user input into a query string. In your app, that function might be behind an allow list or role checks or only used in a seed script that does not run in production. Or it might indeed accept unsanitized input from an API route and render it into HTML. The alert looks identical across these situations. Triage still has to do the hard work.
This underdetermination is why teams end up with queues of alerts that are hard to prioritize. Severity from the rule helps, but risk depends on deployment, data flow and controls around the code. When release decisions rely on detection alone, teams either block on low risk alerts or wave through real risk because they have seen many inert alerts before. Both outcomes erode trust in AppSec tooling.
AI built apps amplify this. Agent generated patches may satisfy a rule while missing the root cause or may move risky code to another file. Without a step that checks whether the proposed fix actually resolves the exploitable condition, you cannot close the loop with confidence.
3. What counts as evidence for a security finding
A retest turns a candidate into a claim you can test. It does not mean claiming perfect coverage. It means building evidence around a specific finding in your specific app.
Proof typically includes three elements. First, location and data flow with enough detail to locate the code and understand how input reaches it. Second, conditions under which the issue triggers, including request shape, role or configuration that matters. Third, reproducible evidence such as a request and response pair or a local reproduction that shows the effect without guessing.
That evidence is what allows a second engineer, a security reviewer or an auditor to follow the same path and see the same result. It also becomes the input for retest. When a developer proposes a change, you repeat the same evidence step to see if the behavior changed.
To make the difference concrete, compare the output types teams actually receive:
| Signal | What you get | What you still need to decide | Typical next step |
|---|---|---|---|
| Scanner alert | File, line, rule ID, general description | Is it reachable, exploitable, in scope | Manual triage, rule tuning, keep watching |
| Retest-confirmed | A fresh server-owned retest and the scope it supports | Applicability, owner, release decision | Review the retest record and any stated limitations |
| Retest-confirmed | Fresh server-owned deterministic retest with complete applicable coverage | Whether the condition was absent | Preserve the retest receipt and scope |
This table oversimplifies real tools, since some scanners add data flow or reachability heuristics. Detection, retest-confirmed outcomes and inconclusive results remain separate states; none implies coverage beyond its retained evidence.
4. Where unconfirmed findings create real cost
Unconfirmed findings create cost in three places.
First, triage time. Every alert demands reading code, checking callers and asking whether a control elsewhere mitigates it. In AI built codebases that change rapidly, that context rots quickly. The same file flagged last week might have been rewritten by an agent yesterday. If you rely on alert text alone, you repeat that work.
Second, trust. When a dashboard shows hundreds of undifferentiated findings, developers learn to deprioritize the feed. High signal fixes get lumped with noise. Security teams then push harder on policy, which slows shipping without measurably improving posture.
Third, fix quality. A common failure mode is a syntactic patch that makes the rule quiet while the underlying weakness persists. For example, adding superficial encoding in the wrong layer can still leave an injection path open. A retest records what a fresh, applicable check observed after the proposal. Incomplete coverage remains inconclusive; a manual status change is not a retest receipt.
5. How verification changes triage and release decisions
When a recorded retest is available, your workflow gains evidence to review alongside the original alert and its scope.
Start with detection, then inspect each retained retest record for its method, scope and limitations. Do not infer that a candidate is exploitable from severity alone or that a receipt covers paths it did not evaluate.
After a proposed remediation, run a fresh server-owned deterministic retest. A retest-confirmed outcome requires complete applicable coverage and evidence that the relevant condition is absent. If coverage is missing or partial, keep the result inconclusive. See the security fix retest workflow.
Recording matters too. A release review needs more than a green check: what was checked, what the retest observed, what proposals were reviewed and what remains inconclusive. Preserve each record’s scope and limitations so a reviewer can see which question it answers.
6. Why pair scanners with LyraShield
Scanners and verification tools optimize for different outcomes and the combination optimizes for the release.
Keep scanners for fast breadth. They catch broad classes of issues aligned with references like the OWASP Top Ten and CWE Top 25 and they fit into your existing pull request flow. That coverage has genuine value, especially when AI agents generate large amounts of code across many files.
Pair detection with scoped verification and retest evidence where applicable. LyraShield AI keeps detected candidates, retest-confirmed outcomes and inconclusive results distinct. Fix proposals require review, and a fresh deterministic retest supports a resolution only when relevant coverage is complete. The product is live with open registration in open beta at LyraShield AI.
This pairing also avoids two failure modes. If you rely on scanning alone, you risk shipping based on alert fatigue. If you rely on verification alone without broad detection, you risk missing areas you never checked. Together, you get coverage and confidence.
If you want a practical place to start, run through the AI app security checklist for your stack, then create an account to analyze a repository at LyraShield AI. You can import scanner output, review retained retest evidence and scope, approve or decline fix proposals and inspect the retest record after a change.
Frequently asked
What is the difference between a scanner finding and a retest-confirmed one?
A scanner finding is a candidate generated by pattern or rule matching. A retest-confirmed finding passed a fresh server-owned check that covered the original condition within its recorded scope. That state does not by itself prove universal exploitability or coverage.
Are SAST and other scanners still useful if they are not proof?
Yes. Scanners provide valuable coverage and fast feedback, especially in AI-built code where changes are frequent. They show where to look. Review any separate verification evidence in its stated scope, then assess the finding against your environment and release policy.
What does LyraShield AI check to verify a finding?
LyraShield AI keeps detected candidates, retest outcomes and inconclusive results distinct. A retest records its method and scope. A fresh deterministic retest can confirm resolution only when applicable coverage is complete.
Should teams replace scanners with verification tools?
No. Keep scanners for their applicable coverage. Review any recorded retest evidence in its stated scope, then use a fresh, applicable deterministic retest after a fix. Each state answers a different question.
Related posts
- Aider app security checklist
A security checklist for reviewing apps built with Aider covering repository settings, secrets, dependencies and verifiable evidence with LyraShield AI.
- Using LyraShield alongside Aider for AI coding
How to run LyraShield security checks alongside Aider today using the CLI and GitHub Action diff gate. Native MCP is a roadmap item Aider has not yet shipped.
- Secure an Antigravity Built App Before Launch
A release review checklist for Antigravity apps covering data exposure, config, secrets, dependencies and independent launch evidence before you ship.