Rules reference
Every rule the Action ships with, what it catches, and whether it blocks. Two run only when a model is configured.
The bundled ruleset
Deterministic rows run the same way on every pull request you configure, as a plain regex check against the diff. Model-only rows run only when a model is configured.
| Rule | Severity | Tier | Effect | Paths | What it catches |
|---|---|---|---|---|---|
| no-verify-bypass | Critical | Deterministic | Blocking | **/*.sh.githooks/**.github/workflows/** | Flags a git command that bypasses commit hooks with --no-verify. |
| todo-without-issue-ref | Low | Model-only | Model tier only | **/* | Flags a TODO comment with no linked issue reference. |
| eval-of-input | High | Deterministic | Blocking | **/*.sh**/*.py | Flags eval of a value instead of a safe alternative. |
| curl-pipe-to-shell | Critical | Deterministic | Blocking | **/*.sh.github/workflows/** | Flags piping a curl download directly into a shell. |
| hardcoded-aws-access-key | Critical | Deterministic | Blocking | **/* | Flags an AWS access key literal committed in code. |
| hardcoded-localhost-url | Medium | Deterministic | Blocking | **/*.ts**/*.tsx**/*.js**/*.py | Flags a hardcoded localhost or loopback URL. |
| dom-innerhtml-assignment | High | Deterministic | Blocking | **/*.ts**/*.tsx**/*.js**/*.jsx | Flags assigning untrusted content to innerHTML. |
| python-bare-except | High | Deterministic | Blocking | **/*.py | Flags a bare except: clause that swallows every error. |
| empty-js-catch-block | Medium | Deterministic | Advisory | **/*.ts**/*.tsx**/*.js**/*.jsx | Flags an empty catch block that discards an error silently. |
| console-log-debug | Medium | Deterministic | Advisory | **/*.ts**/*.tsx**/*.js**/*.jsx | Flags a leftover console.log debug statement. |
| python-debugger-left-in | High | Deterministic | Blocking | **/*.py | Flags a leftover pdb.set_trace() or breakpoint() call. |
| type-ignore-without-code | Low | Model-only | Model tier only | **/*.py | Flags a bare # type: ignore with no specific error code. |
- no-verify-bypassCritical
Flags a git command that bypasses commit hooks with --no-verify.
BlockingDeterministicPaths: **/*.sh.githooks/**.github/workflows/**
- todo-without-issue-refLow
Flags a TODO comment with no linked issue reference.
Model tier onlyModel-onlyPaths: **/*
- eval-of-inputHigh
Flags eval of a value instead of a safe alternative.
BlockingDeterministicPaths: **/*.sh**/*.py
- curl-pipe-to-shellCritical
Flags piping a curl download directly into a shell.
BlockingDeterministicPaths: **/*.sh.github/workflows/**
- hardcoded-aws-access-keyCritical
Flags an AWS access key literal committed in code.
BlockingDeterministicPaths: **/*
- hardcoded-localhost-urlMedium
Flags a hardcoded localhost or loopback URL.
BlockingDeterministicPaths: **/*.ts**/*.tsx**/*.js**/*.py
- dom-innerhtml-assignmentHigh
Flags assigning untrusted content to innerHTML.
BlockingDeterministicPaths: **/*.ts**/*.tsx**/*.js**/*.jsx
- python-bare-exceptHigh
Flags a bare except: clause that swallows every error.
BlockingDeterministicPaths: **/*.py
- empty-js-catch-blockMedium
Flags an empty catch block that discards an error silently.
AdvisoryDeterministicPaths: **/*.ts**/*.tsx**/*.js**/*.jsx
- console-log-debugMedium
Flags a leftover console.log debug statement.
AdvisoryDeterministicPaths: **/*.ts**/*.tsx**/*.js**/*.jsx
- python-debugger-left-inHigh
Flags a leftover pdb.set_trace() or breakpoint() call.
BlockingDeterministicPaths: **/*.py
- type-ignore-without-codeLow
Flags a bare # type: ignore with no specific error code.
Model tier onlyModel-onlyPaths: **/*.py
Deterministic vs. model-only
A rule counts as Deterministic in the table above only when it compiles as a plain regex, catches its own incorrect example, and spares its own correct example. Two rules fail that round trip; the table marks them Model-only, and they run only when a model is configured, never in the deterministic engine.
Using your own rules
You can point the Action at a custom rules file. It is read from the pull request's base commit, never from the head checkout — so a pull request can never edit the rules that check it. Leave it unset to use the bundled ruleset instead.
Because a custom ruleset comes from your own repository, its safety depends on the Action version you pin and the workflow you write around it.