audytx vs Checkov: 7 real Terraform repos, full receipts
Seven real public AWS Terraform repos, no cherry-picked fixtures — four secure-by-default modules to measure noise, three intentionally-vulnerable repos to measure detection. Every finding below traces to the Code Scanning SARIF, not the truncated comment — knives out, including where audytx loses.
Methodology
Same files, same live pull request, both tools automated — no suppression files, audytx v0.2.4.
Real repos, vendored
AWS .tf only, vendored onto long-lived PRs in the public
audytx-testbed repo.
audytx GitHub App
Scans the PR and uploads SARIF to Code Scanning. Counts come from the structured output, not the truncated summary comment.
Stock Checkov
Default ruleset, pip-latest (2026-06), same files. Full failed-check count from JSON output.
Trivy config
v0.71, trivy config, default ruleset, run locally against each corpus directory.
Scoreboard
Precision repos: lower is better (findings are candidate false positives on secure code). Recall repos: detection across the intentional-vuln surface.
| Repo | Role | audytx (high) | Checkov | Trivy |
|---|---|---|---|---|
| Precision — secure-by-default modules (lower = less noise) | ||||
| terraform-aws-vpc | noise | 6 (0) | 25 | 25 |
| terraform-aws-s3-bucket | noise | 20 (3) | 129 | 53 |
| terraform-aws-eks | noise | 31 (5) | 88 | 73 |
| terraform-aws-secure-baseline | noise | 29 (4) | 107 | 0 |
| Recall — intentionally-vulnerable repos (higher = better detection) | ||||
| terragoat | detect | 86 (16) | 213 | — |
| iam-vulnerable | detect | 201 (83) | 269 | 62 |
| KaiMonkey | detect | 43 (11) | 100 | 55 |
What Checkov's 129 actually are
On the secure, popular terraform-aws-s3-bucket module, Checkov's 129 failed checks break down by rule like this:
So ~108 of Checkov's 129 are DR/cost preferences, hygiene, stale, or pure style. audytx surfaced 20 findings (3 high) on the same module — actual S3/KMS/SQS security, never the cross-region-replication / multipart / event-notification / commit-hash noise.
4× less noise on secure modules
Across the 4 secure modules: audytx 6 / 20 / 31 / 29 vs Checkov 25 / 129 / 88 / 107 and Trivy 25 / 53 / 73 / 0 — audytx 0–5 high vs dozens.
Loud where it should be, quiet where it shouldn't
audytx's 86 terragoat findings span 10 AWS services across 10 of 14 files — loud on terragoat (86), quiet on vpc (6). That's the context graph, not luck.
Where audytx loses
This is a benchmark, not a highlight reel. The SARIF surfaced three concrete gaps.
No ELB or Neptune checks
terragoat's ELB (no access logging, no TLS listener) and Neptune cluster (unencrypted) produced zero audytx findings — real misconfigs it didn't check yet.
IAM depth was shallow
On iam-vulnerable, only one distinct IAM check fired (AWS_IAM_006, hardcoded keys, ×41). Privilege-escalation detection came later — Checkov was broader here that day.
The OPS family over-fired
151 of the 201 iam-vulnerable findings were operational (AWS_OPS_*) checks — useful signal, but enough volume that audytx isn't immune to its own noise.
Checkov still has more raw coverage. It's breadth-first: more rules across more services. audytx trades breadth for context — fewer findings, each one reasoned against the graph.
Reproduce it
The corpus is public. Pull audytx's full findings from Code Scanning SARIF, run Checkov on the same files. The Terraform precision harness with its per-finding adjudication records is also public: audytx-benchmark.
# the corpus lives as open PRs on the public testbed gh pr list --repo victorsinha/audytx-testbed --search "bench/ in:head" # audytx's full findings (not the truncated comment) come from Code Scanning SARIF: gh api 'repos/victorsinha/audytx-testbed/code-scanning/analyses?ref=refs/heads/bench/terragoat' \ --jq '.[] | select(.tool.name=="audytx") | .id' # then: gh api repos/.../code-scanning/analyses/<id> -H "Accept: application/sarif+json" # Checkov on the same files: checkov -d corpus -o json --quiet --soft-fail | jq '[.. | objects | select(.check_type=="terraform") | .summary.failed] | add'
Start free during the open beta
Install the GitHub App and run the same engine on your own pull requests — every repo, public or private, no feature gates.