Skip to main content

Benchmarks · public evidence

Results you can inspect.

Every number below is recomputed from one file you can download, hash and rerun.

Skylos 4.50.1 0e4055c7Recorded
Cases completed
109 / 109
Expected issues found
129 / 129
Clean code left quiet
147 / 147

Evidence file SHA-256

7c913c45e94155f75da72240f62286c2c6c8a081b528873a40950a591ed5229a

Project-authored regression tests. Not an independent accuracy score. What this covers

Regression results

109 cases across three complete manifests. Counts are recomputed from the downloadable output.

Download evidence
Completed coverage, positive and negative expectation checks, and additional findings for each regression suite.
SuiteCases completedPositive checks metNegative controls clearUnlabelled in suiteOther detectorsErrors / excluded
Dead code21 / 2147 / 4777 / 77000 / 0
Security68 / 6840 / 4035 / 351530 / 0
Code quality20 / 2042 / 4235 / 3563370 / 0

Scroll the table horizontally to see every result.

Positive checks ask for a declared symbol or rule to be reported. Negative controls ask for it to stay quiet. Ratios include completed cases only. A finding can satisfy more than one rule or symbol check. Unlabelled findings are in the suite's detector categories but outside its declared labels; they need review. Output from other detectors is counted separately. Neither count is automatically treated as false positives.

Every case, including failures

Each fixture link opens the exact public source commit. Complete native output and labels are in the evidence download.

Dead code 21 cases · 0 failed checks · 0 errors
All dead code regression cases
FixtureStatusChecks metUnlabelled in suiteOther detectors
basic-unused-symbolspythonChecks met8 / 800
fastapi-route-usedpythonChecks met3 / 300
dynamic-registry-usedpythonChecks met4 / 400
local-registration-decorator-entrypointspythonChecks met7 / 700
explicit-same-name-reexportspythonChecks met4 / 400
annotation-metadata-import-scopepythonChecks met5 / 500
sqlalchemy-mixed-modelspythonChecks met9 / 900
flask-cli-blueprintpythonChecks met5 / 500
package-service-layerspythonChecks met9 / 900
django-management-commandpythonChecks met8 / 800
celery-task-entrypointspythonChecks met5 / 500
pytest-fixture-entrypointspythonChecks met3 / 300
pydantic-validator-entrypointspythonChecks met10 / 1000
alembic-migration-entrypointspythonChecks met6 / 600
importlib-plugin-loadingpythonChecks met8 / 800
package-entrypointspythonChecks met2 / 200
go-service-entrypointsgoChecks met4 / 400
java-service-entrypointsjavaChecks met6 / 600
java-fxml-controller-callbacksjavaChecks met4 / 400
typescript-vscode-pseudoterminal-callbackstypescriptChecks met9 / 900
ts-js-package-reachabilitytypescript, javascriptChecks met5 / 500
Security 68 cases · 0 failed checks · 0 errors

Native reachability evidence: 2 abstentions and 0 rescued definitions. These are not additional passing checks.

All security regression cases
FixtureStatusChecks metUnlabelled in suiteOther detectors
sql-tainted-parampythonChecks met1 / 101
sql-constant-formatpythonChecks met2 / 201
ssrf-tainted-hostpythonChecks met1 / 100
ssrf-helper-parameter-safepythonChecks met1 / 101
ssrf-fixed-host-pathpythonChecks met1 / 101
subprocess-alias-shellpythonChecks met1 / 101
yaml-safeloader-positionalpythonChecks met1 / 101
path-traversal-tainted-joinpythonChecks met1 / 110
path-traversal-basenamepythonChecks met1 / 100
xss-mark-safepythonChecks met1 / 100
xss-escape-safepythonChecks met1 / 100
open-redirect-taintedpythonChecks met1 / 101
open-redirect-local-guardpythonChecks met1 / 101
jwt-verify-disabledpythonChecks met1 / 101
cors-wildcardpythonChecks met1 / 101
go-zip-slipgoChecks met1 / 101
go-zip-slip-safegoChecks met1 / 101
java-path-traversaljavaChecks met1 / 101
java-path-traversal-safejavaChecks met1 / 101
typescript-evaltypescriptChecks met1 / 102
csharp-command-injectioncsharpChecks met1 / 100
csharp-command-literal-safecsharpChecks met1 / 100
csharp-sql-injectioncsharpChecks met1 / 100
csharp-sql-parameterized-safecsharpChecks met1 / 100
csharp-ssrfcsharpChecks met1 / 100
csharp-ssrf-fixed-host-safecsharpChecks met1 / 100
csharp-path-traversalcsharpChecks met1 / 100
csharp-path-basename-safecsharpChecks met1 / 100
csharp-open-redirectcsharpChecks met1 / 100
csharp-open-redirect-literal-safecsharpChecks met1 / 100
php-unserializephpChecks met1 / 101
php-json-decode-safephpChecks met1 / 101
php-path-traversalphpChecks met1 / 101
php-path-basename-safephpChecks met1 / 101
typescript-eval-safetypescriptChecks met1 / 102
typescript-nextjs-author-shadow-missing-authtypescriptChecks met1 / 100
typescript-nextjs-auth-decoystypescriptChecks met1 / 101
typescript-nextjs-session-guard-safetypescriptChecks met1 / 100
typescript-nextjs-authjs-v5-safetypescriptChecks met1 / 100
typescript-server-action-prisma-unsafetypescriptChecks met1 / 102
typescript-server-action-constant-safetypescriptChecks met2 / 202
typescript-server-action-inline-unsafetypescriptChecks met1 / 101
typescript-server-action-repository-unsafetypescriptChecks met1 / 102
typescript-server-action-query-config-safetypescriptChecks met2 / 203
typescript-server-action-trusted-runtime-safetypescriptChecks met2 / 202
typescript-server-action-prisma-tag-safetypescriptChecks met2 / 202
typescript-webhook-unverifiedtypescriptChecks met1 / 101
typescript-webhook-nondominating-verifiertypescriptChecks met1 / 101
typescript-webhook-verified-safetypescriptChecks met2 / 200
typescript-cookie-explicit-falsetypescriptChecks met1 / 102
typescript-cookie-literal-safetypescriptChecks met1 / 102
java-ssrf-httpclient-sendjavaChecks met1 / 101
java-open-redirect-protocol-relativejavaChecks met1 / 101
java-ldap-xpath-injectionjavaChecks met2 / 201
go-command-shell-querygoChecks met1 / 101
go-tar-symlink-escapegoChecks met1 / 101
rust-shell-arg-taintrustChecks met1 / 100
rust-path-filename-saferustChecks met1 / 101
dart-http-tainted-urldartChecks met1 / 102
dart-uri-https-safedartChecks met1 / 102
php-request-includephpChecks met1 / 100
shell-eval-argshellChecks met1 / 100
shell-source-argshellChecks met1 / 100
shell-c-flag-argshellChecks met1 / 100
shell-curl-tainted-urlshellChecks met1 / 100
shell-curl-fixed-host-pathshellChecks met1 / 100
shell-path-read-argshellChecks met1 / 100
shell-basename-safeshellChecks met1 / 100
Code quality 20 cases · 0 failed checks · 0 errors

Native reachability evidence: 1 abstentions and 0 rescued definitions. These are not additional passing checks.

All code quality regression cases
FixtureStatusChecks metUnlabelled in suiteOther detectors
complexity-hotspotpythonChecks met3 / 342
long-functionpythonChecks met3 / 342
argument-overloadpythonChecks met3 / 342
inconsistent-returnpythonChecks met2 / 241
empty-error-handlerpythonChecks met1 / 141
type-annotation-gapspythonChecks met4 / 442
type-annotation-coverage-onlypythonChecks met2 / 240
framework-route-policypythonChecks met4 / 450
opaque-identifierpythonChecks met5 / 543
repo-policy-missing-typecheckerpythonChecks met5 / 501
clean-modulepythonChecks met7 / 741
typescript-async-loop-duplicate-conditiontypescriptChecks met5 / 524
typescript-type-safety-unsafetypescriptChecks met3 / 324
typescript-type-safety-cleantypescriptChecks met3 / 324
typescript-quality-signals-unsafetypescriptChecks met10 / 1024
typescript-quality-signals-cleantypescriptChecks met7 / 723
python-mutable-alias-unsafepythonChecks met1 / 141
python-mutable-alias-cleanpythonChecks met1 / 141
go-service-quality-hotspotgoChecks met4 / 420
java-service-quality-hotspotjavaChecks met4 / 421

What these results establish

A regression check, with its limits

The corpus contains small, project-authored examples, including patterns distilled from other projects. Skylos has been developed against these examples. They are not independently labelled production repositories or a blind holdout.

Security and quality expectations cover selected rule IDs and symbols, not every finding in the output. This page therefore shows expectation counts instead of presenting them as real-world precision or recall.

Recorded inputs and outputs

The bundle includes 144 tracked fixture and manifest files, original expectations, native scanner reports, analysis errors, effective scan options, dependency versions, and SHA-256 inventories. Every manifest case is accounted for.

These are static source scans with all advice included, without LLM review or dependency-CVE lookups. Source-only fixtures have no Git history: the published profile does not request a before-and-after security regression comparison. Timing is recorded, but it is not a performance score.

A checksum detects changed bytes. It does not prove that a label is correct, that a maintainer ran the scanner honestly, or that the study is independent. Inspecting the public source and rerunning the published procedure are separate checks.

Older studies and their limitations are described in the source benchmark notes. Historical percentages are not mixed into this run.

Verify the files. Rerun the scanner.

1. Verify this published bundle

Download all three files into the same directory. This checks the published digest, embedded input inventories, reproduction script and scoring arithmetic without running fixture code.

node verify.mjs regression-20261022.json --sha256 7c913c45e94155f75da72240f62286c2c6c8a081b528873a40950a591ed5229a --runner reproduce.py

The command checks the SHA-256 shown at the top. The site build uses the same pinned digest and fails if the evidence is missing, malformed or altered.

2. Produce a fresh run

Download the runner and inspect it first. Use the recorded Python and dependency versions for closer reproduction. A new run will have different timestamps and temporary paths; compare case outcomes, not whole-file checksums.

Reproduction runner
git clone https://github.com/duriantaco/skylos.git
cd skylos
git checkout 0e4055c70e3d8f1b0409227e4f16f6c514b3b5a4
python -m venv .venv
. .venv/bin/activate
python -m pip install -e .
python /path/to/reproduce.py --source . --output /tmp/skylos-replay.json

The source commit is pinned, the checkout must be clean, and each case runs in a fresh scanner process. Fixture programs are not executed. No API keys or paid model calls are required.

Environment and scan limitations
Python
3.14.4 (main, Apr 7 2026, 13:13:20) [Clang 15.0.0 (clang-1500.1.0.2.5)]
Platform
macOS-13.7.3-arm64-arm-64bit-Mach-O
  • Development regression fixtures; no independent holdout or production accuracy claim
  • Security and quality labels are rule-level presence/absence expectations, not exhaustive finding labels
  • Unmatched findings remain in nativeReport and are not automatically classified as false positives
  • Timing is informational, one run on one machine; it is not included in correctness totals
  • No security or quality benchmark covers every Skylos rule, secret detector or SCA provider
  • Hash checks detect artifact changes; they do not establish independent label correctness
  • Profile differs from scripts/security_benchmark.py: changed_files is omitted because isolated fixtures have no Git comparison history; its original profile produced security_regression_unavailable ConfigError in a diagnostic run
  • all_advice=True retains raw advice checks; this report does not measure the terminal default noise level
  • The Python network audit hook does not sandbox native subprocesses; Go proxy, checksum service and toolchain downloads are disabled explicitly
  • Reproduction compares expected-case outcomes, not identical report bytes; temporary paths, timings and randomized Python hashing can vary