This is the page I would want someone to read before treating a finding as a conclusion. Relay is useful because it is conservative, but that also means context can prove a warning harmless.
Python uses its standard AST with file-local qualified class and nested-function symbols. Relay does not resolve imports, inferred object types, decorators, monkey-patching, or dynamic dispatch.
All other supported languages use structural models, not compiler or language-server front ends. They can identify common functions, calls, loops, constants, blocking waits, and local call paths, but cannot reliably model macros, conditional compilation, templates, overload resolution, function pointers, traits, reflection, virtual dispatch, generated code, build flags, or library internals. Structural findings are capped below high confidence.
Qualified symbols prevent unrelated methods from being merged, but a call is linked only when its target is exact or unique. Relay intentionally accepts missing a path rather than inventing one from an ambiguous basename.
Relay is not a compiler, schedule simulator, hardware simulator, formal verifier, hardware test replacement, deadline proof, or guarantee of real-time behaviour. Validate every remediation on the actual target.