Skip to main content

Rules

Every finding names the rule that produced it. This is the complete catalog; the same definitions ship machine-readably in capabilities and in every JSON meta block.

Architecture

RuleSeverityFires when
circular-dependencyhighAn elementary dependency cycle A -> … -> A exists among modules
boundary rules (your name)configurableAn import crosses a [[rules.boundaries]] declaration with allowed = false
banned-import/<name>configurableAn import matches a [[rules.banned_imports]] pattern

Security (code)

RuleSeverityFires when
security/secretcriticalA hardcoded credential — provider pattern (AWS, Stripe, …) or high-entropy value in a secret-named binding
security/evalhighDynamic code execution: eval, new Function
security/command-exechighOS command execution (exec / execSync / spawn on a child-process module; os.system / subprocess.*; exec.Command; process::Command)
security/weak-hashmediumObsolete hashing algorithm (MD5 / SHA-1)
security/corsmediumPermissive CORS: origin: "*" or setHeader("Access-Control-Allow-Origin", "*")

Taint flows

RuleSeverityFires when user-controlled input may reach…
taint/evalcritical…dynamic code execution
taint/commandcritical…OS command execution
taint/writeshigh…a database write (injection candidate)
taint/readsmedium…a database read

Taint findings are explicit reachability over-approximations — see how to read them.

Dependencies

RuleSeverityFires when
audit/osvper advisory (default high)A declared dependency matches a known OSV advisory
unlisted-dependencymediumA package is imported but missing from every package.json (phantom dependency)
unused-dependencylowA manifest dependency is never imported (opt-in: [index] detect_unused_deps)
unused-dev-dependencylowA devDependency is never imported, invoked by a script, or config-loaded (opt-in)
unused-optional-dependencylowAn optionalDependency is never imported or invoked by a script (opt-in)

Dead code

RuleSeverityFires when
unused-exportlowAn export is reachable but imported by no reachable module
unused-typelowA type-only export (interface/type alias) is never imported
unused-filelowA file is reachable from no entry point and imported by nothing

Code health

RuleSeverityFires when
complexitymedium/highA function exceeds the cyclomatic/cognitive complexity thresholds
long-functionlow/mediumA function exceeds the unit-size thresholds (75 / 150 source lines)
long-parameter-listlow/mediumA function has too many parameters (7 / 10)

Hygiene

RuleSeverityFires when
stale-suppressionlowAn ovecc-ignore comment suppresses no finding — it would silently swallow the next real finding on its line

Suppressing findings

Inline, per line: // ovecc-ignore, // ovecc-ignore-next-line, or # ovecc-ignore in Python — the finding is dropped at index time. Per repository: the baseline ratchet. Auto-fixable rules are remediated by ovecc fix.