Disclaimer
The pgtap suite proves the patterns shipped in this template. It does not prove your fork is secure if you modified the policies.
Cinderblock's test suite asserts a specific surface: every policy under the public schema honors the tenant boundary, every app_private.*helper is hardened, every audit invariant holds, the seat trigger fires when expected. If you change any of those — even "just renaming a column" — the guarantee is your fork's responsibility, not the template's.
What the tests prove
- A user with no membership in workspace X cannot read, create, update, or delete rows belonging to X — under SELECT, joins, UNION, CTEs, subqueries, and aggregate queries.
- Append-only audit (no UPDATE or DELETE grant exists for
authenticated). - Search-path attack denied (helpers have
set search_path = ''). - Past-due-beyond-grace and canceled workspaces are read-only (
workspace_is_writablegates inserts/updates). - Insert-first Stripe webhook idempotency (duplicate event_id returns 0 rows from RETURNING).
What the tests do NOT prove
- Your fork's policies are correct after modification. Extend the tests when you modify a policy.
- Anything about your hosting environment (TLS termination, DDoS mitigation, secret leakage via logging, etc).
- Cinderblock is not a substitute for a third-party security audit. Use the pgtap suite as a structural floor; layer audits, penetration tests, and ongoing reviews on top for production.
Compliance
See Compliance posture for SOC2 / GDPR framing. Short version: Cinderblock ships the technical controls (audit log, impersonation tracing, MFA enforcement, retention) that make a compliance posture defensible, not the attestation itself.