NeoGen Audit·Version: 0.0.0·lovable·Tamper-proof report

Loisirs du Faubourg

Captured June 14, 2026 at 02:34 PM EDT·Schema version: 1·Capture ID: 019ec769-b57b-7133-aae2-dffeaf816e35

Executive summary

No cross-tenant leak was proven.

Tenant isolation could not be fully machine-verified, see coverage below.

Scope: 616 files, 137 RLS policies across 34 tables.

Proven isolated18Hold
Proven leaks0Fail
Needs live test16Could not determine
Permissive policies0USING (true)
16

tables need a live test · 16 of 34 not machine-verified

See details
12Membership / helper rule3No tenant key1External schema

A live two-tenant probe can settle these.

Coverage

53% machine-verified · target 80%
34 tables with access rulesWhat we did not verify is shown, not hidden
18 isolated
16 need a live check
Proven isolated — 53%Unverified — 47%Proven leak — 0%

Coverage is 27 points below the 80% target. Closing the gap means resolving the 16 unverified tables with a live two-tenant probe (neogen probe) or a review of their helper functions.

Tenant isolation map

IsolatedNeeds a checkLeak

Each square is one table — click to inspect its verdict. A dot marks a by-design super-admin bypass.

Inventory

What was scanned
24,957Source LOC
138SQL migrations
137RLS policies
34Tables with rules
616Total files
14Edge functions
221Components
49Hooks
11Pages
64Tests

Roles & permissions

Who can see what across organizations.

4 user roles

Cross-organization bypasses present on 16 tables. These roles can see data from other organizations — confirm each one is intentional.

Table verdicts

34 tables

Methodology

Unlike an AI-written review, these results come from real checks you can verify yourself. Each step below is automated and produces the same answer every time.

1

Automated access-rule check

We read every access rule in your database and ask: can someone from Organization A see Organization B's data? The checker gives a clear answer — safe, leak found, or needs a live test. (Technical: RLS policies are composed and checked with the Z3 SMT solver.)

neogen audit --source <repo> --target <out>
2

Math-backed correctness

The logic behind our checker is proven correct in Lean 4 — not just for your app, but for any database we analyze. This means the checker itself can't give wrong answers. (Technical: 25 theorems including hold_sound and fail_has_roleless_leak.)

cd pipeline/proofs/tenant-isolation && lake build
3

Tamper-proof report seal

The full results are cryptographically signed. If anyone changes a result after the audit — for example, upgrading 'needs live test' to 'confirmed safe' — the signature breaks and you'll know. (Technical: Ed25519 signature over the coverage ledger.)

neogen verify --envelope audit.envelope.json
4

Live test with two real accounts

For tables our automatic checker can't finish, we run a real-world test: create two organizations, log in as each, and see what they can actually access. This is labeled Live test in the report — it's practical confirmation, not a mathematical proof.

neogen probe --clone <staging>

Recommendations

4 actions to close the gap

1
Confirm the whose isolation relies on helper functions or membership subqueries — the policies look reasonable but use SECURITY DEFINER / membership patterns the static checker does not model. Settle them empirically against a staging clone, or have the helper functions reviewed.
neogen probe --staging
2
Verify the with no isolation key are scoped via a parent/join table or are intentionally global — otherwise add a tenant column.
3

Check the Supabase bypass surfaces not covered by RLS analysis: a service-role key embedded in the client bundle, public Storage buckets, SECURITY DEFINER views, and Edge Functions that use the service role.

4

Verify this report offline — anyone with the public key can confirm it against the signed attestation.

neogen verify audit.envelope.json
Verifiable by construction

Signed, reproducible, deterministic.

Schema extraction, SMT verdicts and the signature don't depend on the LLM. The bundle is Ed25519-signed over a coverage ledger — anyone can verify it offline, no trust in the model required.

Machine-checked · Z3 SMTEd25519-signedDeterministic core
capture_id 019ec769…f816e35
neogen 0.0.0 · adapter lovable
schema v1 · captured 2026-06-14
$ neogen verify audit.envelope.json