Loading report…
← nittim
[](https://nittim.com)Shippable once the listed conditions are addressed.You can make it live once the listed conditions are handled.Handle the listed conditions, then ship.
This verdict covers the 1% of your repository we read — see what we didn’t read below.This result is based on the 1% of your project’s code we actually read — see what we didn’t read below.Covers 1% of your repo — see what we didn’t read below.
This audit read 220 of your 16031 files — the ones most likely to hurt you first. The snapshot was truncated — this audit's size limit was reached.
The scores and findings above cover only those files. The rest of the repository hasn’t been audited yet. The denominator counts every file in the repository — images, generated output, vendored and build directories included.
.github/workflows/auto-label-issues.ymlthe spam-detection step uses single quotes around the JSON body: -d '{"issue_id": $NUMBER}'. Single quotes prevent shell expansion, so the literal string $NUMBER is sent rather than the issue number. The subsequent step also reads $SPAM_RESPONSE but the prior step exported spam_response to GITHUB_OUTPUT, not an env var named SPAM_RESPONSE.220 of 16031 files were audited. This audit's size or file-count limit was reached, so some source and configuration files were left unread. The denominator counts every file in the repository — images, generated output, vendored and build directories included.
This audit's size limit was reached before it read the whole repository. The verdict and every score on this report were computed from what it did read — read them as evidence about that sample, not a clean bill of health for the rest.
AI Code Confidence capped at 16
This is the public monorepo for supabase/supabase — a large, mature, professionally engineered open-source platform (Postgres development platform, Studio dashboard, docs site, design system, edge functions). The snapshot covers CI/CD workflows, the docs Next.js app, the design system, and supporting tooling. Overall engineering quality is very high: pinned GitHub Action SHAs, sparse checkouts with persist-credentials:false, careful internal/external PR security separation in docs-lint workflows, GraphQL query depth/complexity limiting, SSRF-hardened markdown route resolution, Zod validation, and comprehensive test suites. No live production secrets or known-vulnerable dependencies were flagged by the scanners. The two JWT hits are public anon keys committed intentionally to apps/docs/.env.development (documented as publicly available, non-secret) — informational only. As an open-source product, code-vector IP exposure is by design and not a defect. The most notable findings are minor: a likely bug in a workflow's curl payload using single-quoted shell interpolation, broad write permissions on some bot workflows, and the usual maintainability burden of a 16k-file monorepo. The audit was conducted on a heavily truncated snapshot (220 of 16,031 files), so coverage of the core Studio app, edge functions, and database migrations is limited; findings are scoped accordingly.
apps/docs/app/api/graphql/route.tsimplements query depth limiting (MAX_DEPTH=5), complexity limiting (createComplexityLimitRule), strict CORS allowlist (isAllowedCorsOrigin), GET restricted to query operations only, Zod payload validation, and Sentry capture. validators.ts handles fragment/circular-reference depth correctly with tests.auto-label-issues.ymlPOSTs issue data to a secret POST_URL with a bearer token for spam classification; search.yml and docs workflows send content to OpenAI (OPENAI_API_KEY).self-host-tests-smoke.ymlboots full docker-compose stacks across 5 config matrices (default, logs, envoy, rustfs, envoy-rustfs) and runs container-log/auth-key/S3 tests; studio-e2e-test.yml runs sharded Playwright tests with report merging and failure diagnostics.apps/design-system/lib/rehype-component.tscontains large blocks of commented-out code; apps/design-system/lib/toc.ts and components/toc.tsx begin with '// @ts-nocheck // TODO: I'll fix this later.'; copy-button.tsx has extensive commented-out CopyNpmCommandButton logic and an 'if (event)' referencing an undefined variable..claude/settings.jsonwires format/lint PostToolUse hooks; .coderabbit.yaml encodes review guidelines; braintrust-evals.yml runs LLM scorers. No placeholder/mock/hallucinated production code was observed in the audited files; implementations (AppleSecretGenerator crypto, GraphQL validators) are complete and internally consistent.studio-master-alert.ymlposts Slack alerts on master breakage; graphql route flushes Sentry and uses sendToLogflare with structured logging codes; dashboard-pr-reminder.yml notifies Slack of stale PRs.Weighted blend of 4 dimensions → ~75/100. Dimensions are weighted by importance (Security and Privacy weigh heaviest). Published figures are approximate; nittim's exact weighting and precise scoring are proprietary, while the verdict is computed on exact internal values.4 categories combine into ~75/100. Some categories count for more than others (Security and Privacy count the most). The published numbers are approximate; nittim's exact math is kept private, while the verdict itself is worked out from the exact internal numbers.Weighted blend of 4 dimensions → ~75/100 (Security and Privacy weigh heaviest). Published figures are approximate; nittim's exact weighting is proprietary. The verdict runs on exact internal values.
IP Protection is an independent IP-defensibility lens and is excluded from this blend.IP Protection (checking whether your ideas are exposed) is judged separately and isn’t
part of this combined number.IP Protection is judged separately, excluded from this blend.
Scores are a judgement, not a measurement: a re-audit of the same commit can land a few
points either side of this figure. The evidence underneath it is deterministic — the same
commit always yields the same committed-secret and vulnerable-dependency findings.Scores are a judgment call, not an exact measurement: checking the same saved snapshot of
your code twice can land a few points either side of this number. The evidence underneath
it is not — the same snapshot always turns up the same passwords-in-code and known-security-bug
findings.Scores are a judgment, not a measurement — a re-audit can land a few points either side. The evidence underneath is deterministic: the same commit always yields the same secret and vulnerable-dependency findings.
Each score is the model's overall assessment of the dimensions it covers, across everything it reviewed — not a tally of the findings in this report. Findings are the subset worth acting on, so a score can sit above or below what the listed findings alone would suggest.Each score is the AI's overall judgment of everything it reviewed in that category — not a
count of the problems listed in this report. The listed problems are the ones worth acting
on, so a score can sit above or below what they alone would suggest.Each score is the model's overall assessment across everything it reviewed — not a tally of this report's findings. A score can sit above or below what the findings alone suggest.
Verdict rationale — Why this verdict — Verdict rationale — The audited surface reflects a mature, professionally engineered open-source platform with strong security hygiene (SHA-pinned actions, least-privilege patterns, GraphQL DoS protections, SSRF/path-traversal hardening), reproducible builds, comprehensive tests, and good observability. The scanner found no live secrets (the two JWTs are intentionally public anon keys) and no vulnerable dependencies. Findings are predominantly low/informational: a shell-quoting bug in a non-critical triage workflow, broad write scopes on bot workflows to monitor, and routine monorepo maintainability load. The 'ready_with_conditions' verdict is driven primarily by audit-coverage limitations: only 220 of 16,031 files were reviewed, and the highest-risk components (Studio auth/dashboard, edge functions, DB migrations/RLS) were largely outside the snapshot. Conditions: (1) fix the spam-detection workflow bug, (2) confirm pull_request_target workflows never execute untrusted PR code, and (3) run a follow-up audit on the un-sampled core application and data layers before treating the whole repository as fully production-validated. IP exposure is by design (OSS) and does not affect the verdict.