Skip to content

Frameworks and workspaces

Detection

audit_project(path) and the audit tool detect the ecosystem at the target:

Marker Framework
package.json plus svelte.config.js, svelte.config.ts, or a declared svelte dependency/devDependency svelte
Otherwise package.json with a declared react dependency/devDependency react
Any other package.json, including an invalid JSON manifest node
No package.json python

Svelte takes precedence over React. A coexisting pyproject.toml does not override package.json. React and Svelte inherit the Node rule set; Svelte adds svelte-check. React currently uses the shared Node rules. Framework detection is manifest-based, not a full inventory of languages.

The Python API accepts audit_project(path, framework="node") to override detection for a single package. The audit tool exposes only path and category: it has no framework or quick argument. Do not pass extra MCP keywords expecting an override; its **kwargs currently accepts and ignores them.

Node tooling

Node rules use the project's node_modules/.bin tools for ESLint, Prettier, TypeScript, Knip and Vitest. Security checks also use npm and Gitleaks from PATH. Install and configure the tools in the audited project. The auditor does not run npm install for you. Missing tools produce findings.

QUALITY_TYPE runs tsc --noEmit --pretty false; Svelte's additional check covers Svelte components. QUALITY_TESTS runs Vitest once with its JSON reporter. Its score is the passing-test ratio; an empty suite fails. This is different from Python coverage measurement.

The test_quality Node rules are structural JS/TS checks, not the Python triage stack described in Test Quality Rules. audit_test still runs pytest, and audit_fix still rewrites Python tests. They do not become Vitest/CST tools through framework detection.

Workspace dispatch

The audit dispatcher recognizes a root without src/ that contains packages/<member>/src/. It audits those immediate members in sorted order, using bounded parallel workers and a separate AST cache per member. Results merge by rule ID: any member failure fails the merged check, and scored results use the lowest member score.

This layout rule is distinct from uv dependency-hygiene workspace discovery, which reads [tool.uv.workspace].members. It is not a general npm/pnpm or recursive workspace resolver. Members without src/ are not dispatched.

Each member is auto-detected separately. An explicit framework= on the workspace root is currently not forwarded to members: target the member directly when overriding its framework.

Quick mode limitation

audit_project(path, quick=True) selects Python LintingRule and TypeCheckRule, even when the detected or requested framework is Node, React or Svelte. Use category="lint" or category="type" on those frameworks. Quick mode also takes precedence over category validation.

See configuration for the separate questions of rule settings, tool settings and environment discovery.