GGateTest
122 modules · 6 tiers · pay per scan or subscribe

The QA gate your CI is missing.

GateTest catches the bug patterns that slip through code review — race conditions, money stored in floats, secrets past rotation, async-iteration footguns, CI supply-chain vectors. One gate. Real findings. Auto-fix PR on every failure.

gatetest scan --suite quick --diff2 issues
$ gatetest scan --suite quick --diff
GateTest v1.62.0 — 122 modules loaded
Scanning 14 changed files vs main...
[PASS] syntax
[PASS] lint
[FAIL] secrets — 2 issues
[FAIL] asyncIteration — 1 issue
ERR secrets › src/billing/stripe.ts:47
STRIPE_SECRET_KEY older than 90 days — rotate now
ERR secrets › .github/workflows/deploy.yml:12
Unpinned action + write GITHUB_TOKEN + shell injection
WARN asyncIteration › src/jobs/process.ts:83
forEach(async ...) — errors swallowed, events out of order
3 issues · 2 errors · 1 warning · 8.3s
122
modules in one gate
12,700+
tests passing on main
85/86
modules green on our own repo
measured 2026-10-05
<30s
quick scan
what it catches

The patterns code review misses because they're invisible in a diff.

Money in floatsmoneyFloat

parseFloat() on billing amounts — sub-cent drift becomes fraud at scale. Finds it across JS + Python with safe-harbour for decimal.js / big.js.

Secrets + rotation agesecrets

Credentials older than 90 days flagged as error. Git-history dated, not guessed. Catches the ones that outlived the breach.

Race conditionsraceCondition

findOne → create with no transaction or ON CONFLICT guard. The duplicate-insert bug you hit only in prod under load.

Async-iteration bugsasyncIteration

forEach(async ...) — errors swallowed, events processed out of order. Also catches .filter(async) returning Promise-truthy nonsense.

CI supply-chainciSecurity

Unpinned GitHub Actions + write-scope GITHUB_TOKEN + ${{ github.event }} shell injection. The attack chain that hits unattended CI.

N+1 queriesnPlusOne

Database calls inside map/forEach/for loops across Prisma, TypeORM, Sequelize, Mongoose, Drizzle. Understands Promise.all batching.

Circular importsimportCycle

Tarjan SCC across your full import graph. Finds the cycle that reproduces randomly depending on module-cache warmth.

Session securitycookieSecurity

httpOnly:false, secure:false, placeholder secrets. Turns XSS into session takeover. Django / Express / FastAPI all covered.

Error swallowingerrorSwallow

Empty catch blocks, .catch(noop), fire-and-forget .save() with no await. Failure becomes invisible success.

SSRF vectorsssrf

User input flowing into fetch() without hostname validation. Taint-tracks across assignments — not just inline calls.

ReDoS patternsredos

Nested quantifiers, overlapping alternation, user-controlled regex construction. Catastrophic backtracking before it hits prod.

Cron expression bugscronExpression

Invalid field ranges, impossible dates (Feb 30), typo aliases (@weely). The silent-failure class nobody checks.

+ 110 more modules across security, CI/CD, TypeScript, async patterns, and runtime correctness.

10 seconds, no signup

Try it on your own repo

Public repos: paste your GitHub URL into the free preview scan.

Open free preview

Any repo (public or private): install the CLI once, then scan locally.

$ npm install -g @gatetest/cli
$ gatetest scan --suite quick --diff

Requires Node 20+. Your code stays on your machine. Anonymous module counts are sent unless GATETEST_NO_TELEMETRY=1.

add to CI: baseline first, then the gate

Capture today's findings so the gate only fails on new ones, commit .gatetest/baseline.json, then run the CI line in any pipeline. No install step: npm is enough.

$ npx -p @gatetest/cli gatetest baseline --init
$ npx -p @gatetest/cli gatetest --suite standard --sarif --junit --parallel

Report-only until a date, then strict: baseline docs.

copy-paste — the same files README.md ships, comments included

The MCP config

Give your AI client the scanner, test runner and fix verifier as tools — free, runs on your machine and your own keys.

{ "mcpServers": { "gatetest": { "command": "npx", "args": ["-y", "@gatetest/mcp-server"] } } }

Full tool list and the exact config line for your specific client: /mcp.

Private repos — install the GitHub App

Checks every push and pull request, with results as commit statuses and PR comments. It starts in advisory mode: nothing blocks until you set mode: strict.

Install GitHub App

Measured on real repositories — see the precision numbers →