- Name-based resolution conflates same-named symbols — dead code hiding behind a popular name is missed (by design; the safe direction).
- String-based reflection is invisible —
Activator.CreateInstance("…"),Type.GetType("…"), and config-wired type names can cause false positives; the attribute-root and scan-target heuristics absorb the common cases, and--rootcovers the rest. - MSBuild
Conditionattributes are not evaluated (all branches included),Directory.Build.propsis not read, andInternalsVisibleTois not modeled. - Razor/
.cshtmlmarkup is not parsed — build first so the generated sources inobj/stand in for it. - Compiler-synthesized calls are invisible (e.g. range/index polyfills).
roe dupesdoes not de-duplicate overlapping or nested occurrences of the same pattern repeated within a single long method — each is reported as-is.roe healthcounts overloads as one type member, since name-based resolution merges them, and its coupling graph is built from the same name-based references — so a cycle routed through a conflated name may not be a real one.roe health --hotspotsneeds git history — it’s the only part of roe that reads a repository, and a shallow clone yields correspondingly shallow churn.
ignore glob, or an extra
entry-point root.