{
  "service": "SQLPermit",
  "available": true,
  "generated_at": "2026-08-04T16:05:32.143Z",
  "service_version": "0.1.0",
  "policy_version": "sqlpermit-policy-1.0.0",
  "data_versions": {
    "grammar": "pg18/libpg-query@18.1.4",
    "parser": "libpg-query@18.1.4"
  },
  "corpus_size": 101,
  "methodology": "Five difficulty tiers run against the guard core directly, bypassing HTTP and payment. Tier 2 is composed entirely of legitimate PostgreSQL that must NOT be blocked, so false positives are measured rather than inferred. Tier 4 covers the constructs that present as an ordinary SelectStmt; tier 5 covers obfuscation and permit lifecycle. False positives and false negatives are reported separately and both gate at zero.",
  "metrics": {
    "pass_rate": 1,
    "cases_passed": 101,
    "cases_failed": 0
  },
  "false_positives": 0,
  "false_negatives": 0,
  "latency_ms_p50": 0.146,
  "latency_ms_p95": 0.717,
  "limitations": [
    "SQLPermit never connects to your database. It cannot see your schema, so it cannot tell a table from a view, and it cannot know which columns exist.",
    "search_path is unresolvable from the statement text alone. An unqualified relation or function is reported as unqualified rather than resolved, and is flagged when a schema allowlist is in force.",
    "The executing role and its privileges are invisible to this service. A permit is not a grant.",
    "Function bodies are opaque. CREATE FUNCTION, DO blocks, CALL, and EXECUTE of a prepared statement are reported as such and never analyzed.",
    "The function control is an allowlist. A function you have not allowlisted is reported even when it is harmless, which is the deliberate direction of the trade-off.",
    "There is no implicit list of sensitive relations. A read of pg_catalog.pg_authid is reported as a read of pg_catalog.pg_authid and nothing more, so a policy of only read_only:true will pass it. Set allowed_schemas or allowed_tables — relation access is decided by your policy, never guessed.",
    "Unicode confusable identifiers are a character-level warning, not a structural finding. The parser cannot help: a homoglyph table name is a genuinely distinct, valid object.",
    "The corpus is self-authored and versioned. These figures describe behaviour on it, not a guarantee for any particular statement."
  ],
  "disclaimer": "These figures are evidence from a versioned corpus, not a guarantee. Corpus composition and size are stated so the numbers can be interpreted and reproduced."
}