Skip to content

Rule catalog

Generated from prodpilot 1.1.0 on 2026-10-10 by scripts/gen_reference.py. Do not edit this page by hand; run the script again when the package changes.

ProdPilot 1.1.0 checks 50 rules: 28 for Node.js with Express and 22 for React with Vite. A project is audited against the rules for its own stack only.

Fix type Rules
STATIC 28
DYNAMIC-PARAMETRIC 16
DYNAMIC-DELEGATED 6

rules.determinism_ratio() returns 0.88: 44 of 50 rules are fixed with no model writing anything. See Fix types for what each type means, and Score bands and gate policy for how priority weighs in the score.

How to read a row: the priority runs from P0, critical, to P5. Checked by is how the audit decides the rule: a syntax tree of your JavaScript, a check of the files present, or an entropy scan for credential-shaped strings. Scope says whether the rule looks at one file at a time or across files.

Rule Stack Priority Checked by Scope Fix type Requirement
SEC-001 Node.js with Express P0 File check One file STATIC the Dockerfile must run the process as a non-root user
SEC-002 Node.js with Express P0 Syntax tree One file STATIC helmet must be registered before any route definition
SEC-003 Node.js with Express P0 Syntax tree One file STATIC the CORS origin must come from an environment variable, not a wildcard
SEC-004 Node.js with Express P0 Syntax tree One file STATIC Content Security Policy and HTTPS redirect headers must be set
SEC-005 React with Vite P0 File check One file STATIC the Dockerfile must run the server process as a non-root user
SEC-006 React with Vite P0 File check One file STATIC the serving layer must set Content Security Policy and related security headers
Rule Stack Priority Checked by Scope Fix type Requirement
SCR-001 Node.js with Express P0 File check One file STATIC .gitignore must exclude .env and .env.production
SCR-002 Node.js with Express P0 Entropy scan Across files DYNAMIC-PARAMETRIC no API key, token or password literal may appear in source
SCR-003 React with Vite P0 File check One file STATIC .gitignore must exclude .env and .env.production
SCR-004 React with Vite P0 Entropy scan Across files DYNAMIC-PARAMETRIC no API key or token literal may appear in source
Rule Stack Priority Checked by Scope Fix type Requirement
ENV-001 Node.js with Express P0 Syntax tree Across files DYNAMIC-PARAMETRIC .env.example must cover every environment key the code reads
ENV-002 Node.js with Express P0 Syntax tree One file STATIC the listening port must be read from the environment
ENV-003 React with Vite P0 Syntax tree Across files DYNAMIC-PARAMETRIC .env.example must cover every VITE_ key the code reads
ENV-004 React with Vite P0 Syntax tree Across files DYNAMIC-PARAMETRIC the API base URL must be read from import.meta.env rather than hardcoded
ENV-005 React with Vite P0 Syntax tree Across files DYNAMIC-PARAMETRIC no backend host literal may appear in source
Rule Stack Priority Checked by Scope Fix type Requirement
BLD-001 Node.js with Express P1 File check One file DYNAMIC-PARAMETRIC Dockerfile must be present at the project root
BLD-002 Node.js with Express P1 File check One file STATIC .dockerignore must be present at the project root
BLD-003 Node.js with Express P1 File check One file DYNAMIC-PARAMETRIC a GitHub Actions workflow must be present under .github/workflows
BLD-004 Node.js with Express P1 File check One file DYNAMIC-PARAMETRIC package.json must declare a start script that runs without a dev watcher
BLD-005 Node.js with Express P1 File check One file STATIC package.json must pin the Node engine to 20 LTS
BLD-006 Node.js with Express P1 File check One file DYNAMIC-PARAMETRIC the Dockerfile must use a multi-stage build
BLD-007 React with Vite P1 File check One file DYNAMIC-PARAMETRIC Dockerfile must be present at the project root
BLD-008 React with Vite P1 File check One file STATIC .dockerignore must be present at the project root
BLD-009 React with Vite P1 File check One file STATIC an nginx configuration must be present for serving the built application
BLD-010 React with Vite P1 File check One file DYNAMIC-PARAMETRIC a GitHub Actions workflow must be present under .github/workflows
BLD-011 React with Vite P1 File check One file STATIC package.json must declare a build script that produces the production bundle
BLD-012 React with Vite P1 File check One file DYNAMIC-PARAMETRIC the Dockerfile must build in one stage and serve the assets from a static image
BLD-013 React with Vite P1 File check One file STATIC nginx must fall back to index.html so client side routes resolve on refresh
Rule Stack Priority Checked by Scope Fix type Requirement
CON-001 Node.js with Express P1 Syntax tree One file DYNAMIC-PARAMETRIC database credentials must be read from the environment
CON-002 Node.js with Express P1 Syntax tree One file DYNAMIC-PARAMETRIC database access must use a connection pool
Rule Stack Priority Checked by Scope Fix type Requirement
API-001 Node.js with Express P2 Syntax tree One file STATIC public routes must be rate limited
API-002 Node.js with Express P2 Syntax tree Across files DYNAMIC-PARAMETRIC routes must be mounted under a versioned prefix
API-003 Node.js with Express P2 Syntax tree One file STATIC a centralised error handler must return a consistent shape and leak no stack traces
Rule Stack Priority Checked by Scope Fix type Requirement
STR-001 Node.js with Express P3 Syntax tree Across files DYNAMIC-DELEGATED database calls must live in a service layer rather than inside controllers
STR-002 Node.js with Express P3 Syntax tree Across files DYNAMIC-DELEGATED business logic must live in services rather than inline in route handlers
STR-003 React with Vite P3 Syntax tree Across files DYNAMIC-DELEGATED an error boundary must wrap the root of the component tree
STR-004 React with Vite P3 Syntax tree One file DYNAMIC-DELEGATED the client router must handle unmatched routes with a catch all
Rule Stack Priority Checked by Scope Fix type Requirement
OBS-001 Node.js with Express P4 Syntax tree One file STATIC a health check endpoint must be exposed
OBS-002 Node.js with Express P4 Syntax tree One file STATIC structured logging must be configured rather than bare console output
OBS-003 Node.js with Express P4 Syntax tree One file STATIC the process must expose monitoring hooks the hosting platform can scrape
OBS-004 Node.js with Express P4 Syntax tree One file STATIC SIGTERM must be handled so the server drains connections before exit
OBS-005 React with Vite P4 File check One file STATIC nginx must serve a health path that does not load the application bundle
OBS-006 React with Vite P4 File check One file STATIC nginx access and error logging must write to the container log stream
Rule Stack Priority Checked by Scope Fix type Requirement
GIT-001 Node.js with Express P5 File check One file STATIC .gitignore must be present at the project root
GIT-002 Node.js with Express P5 File check One file STATIC .gitignore must exclude node_modules
GIT-003 Node.js with Express P5 Entropy scan Across files DYNAMIC-DELEGATED no secret may appear anywhere in the committed Git history
GIT-004 React with Vite P5 File check One file STATIC .gitignore must be present at the project root
GIT-005 React with Vite P5 File check One file STATIC .gitignore must exclude node_modules
GIT-006 React with Vite P5 File check One file STATIC .gitignore must exclude the dist build output
GIT-007 React with Vite P5 Entropy scan Across files DYNAMIC-DELEGATED no secret may appear anywhere in the committed Git history