Step 1: collect runtime signals
Capture runtime observations such as executed functions, dependency loading, network calls, and exploit attempts. These signals enter as unverified claims and must be qualified by source and freshness.
Step 2: map findings to the application graph
Use an application graph, not just a repository inventory, to see how code, services, and dependencies connect. Application graph security depends on accurate mapping across repositories and runtime boundaries.
Step 3: apply reachability and exploitability
Prioritize vulnerabilities that are reachable from production entry points and exercised by real traffic. Exploitability-based prioritization ranks issues by whether they can be triggered, not just by severity score.
Step 4: validate fixes with runtime evidence
After a fix, compare runtime behavior before and after. If the vulnerable function is no longer exercised or the expected safe behavior is observed, the fix is supported by evidence. Absence of expected behavior is indeterminate, not proof.