{
  "schemaVersion": 1,
  "generatedAt": "2026-08-12T23:42:46.846Z",
  "generationKey": "77aeab53a3be9045a52a191e657dc411d0ae9666602c23439c13847f2faff56e",
  "metadataPayloadSha256": "da2480e4d98f4fa5d25c26125f94409e5db4b424d0a522a524c6351f676e9bb4",
  "diagram": {
    "id": "tenancy-and-rls-7eec09d7",
    "title": "Tenancy and RLS",
    "description": "Membership check → withWorkspace → transaction-local GUC → RLS policy. Unset or mismatched context returns zero rows.",
    "status": "current",
    "canonicalAppearanceKey": "tsx:src/app/(docs)/docs/architecture/page.tsx:TENANCY_CHART#1"
  },
  "aliases": [
    "Tenancy & security (load-bearing)"
  ],
  "concepts": [
    "Tenancy and RLS",
    "Public overview diagrams",
    "Tenancy & security (load-bearing)",
    "Architecture",
    "Tenancy"
  ],
  "keywords": [
    "queries run under RLS",
    "workspace_id = app.workspace_id?",
    "membership check (role)",
    "zero rows (fail closed)",
    "unset / mismatch",
    "Request /w/:workspaceId/…",
    "withWorkspace(workspaceId, fn)",
    "transaction-local",
    "policy",
    "rows",
    "match",
    "requireWorkspaceAccess(workspaceId)"
  ],
  "mermaid": {
    "type": "flowchart",
    "direction": "TD",
    "sourceSha256": "7eec09d714e2b4ff19bb93e99366904e9936f44b18dd2d17c224c0aba6710521"
  },
  "provenance": [
    {
      "appearanceKey": "md:docs/architecture/public-overview-diagrams.md#2",
      "surface": "markdown",
      "sourcePath": "docs/architecture/public-overview-diagrams.md",
      "line": 65,
      "heading": "Tenancy and RLS"
    },
    {
      "appearanceKey": "md:docs/architecture/README.md#2",
      "surface": "markdown",
      "sourcePath": "docs/architecture/README.md",
      "line": 109,
      "heading": "Tenancy & security (load-bearing)"
    },
    {
      "appearanceKey": "tsx:src/app/(docs)/docs/architecture/page.tsx:TENANCY_CHART#1",
      "surface": "route",
      "sourcePath": "src/components/docs/diagrams.ts",
      "line": 25,
      "route": "/docs/architecture",
      "symbol": "TENANCY_CHART",
      "caption": "Membership check → withWorkspace → transaction-local GUC → RLS policy. Unset or mismatched context returns zero rows."
    },
    {
      "appearanceKey": "tsx:src/app/(docs)/docs/concepts/tenancy/page.tsx:tenancyChart#1",
      "surface": "route",
      "sourcePath": "src/app/(docs)/docs/concepts/tenancy/page.tsx",
      "line": 25,
      "route": "/docs/concepts/tenancy",
      "symbol": "tenancyChart",
      "caption": "Membership check → transaction-local GUC → RLS → fail closed."
    }
  ],
  "embeddedMetadata": [
    {
      "sourcePath": "docs/architecture/public-overview-diagrams.md",
      "heading": "Tenancy and RLS"
    },
    {
      "sourcePath": "docs/architecture/README.md",
      "heading": "Tenancy & security (load-bearing)"
    },
    {
      "sourcePath": "src/components/docs/diagrams.ts",
      "caption": "Membership check → withWorkspace → transaction-local GUC → RLS policy. Unset or mismatched context returns zero rows."
    },
    {
      "sourcePath": "src/app/(docs)/docs/concepts/tenancy/page.tsx",
      "caption": "Membership check → transaction-local GUC → RLS → fail closed."
    }
  ],
  "generation": {
    "application": {
      "name": "eli-ai",
      "version": "0.1.0"
    },
    "environment": {
      "node": "v26.3.1",
      "yarn": "4.17.1",
      "platform": "linux",
      "architecture": "x64",
      "containerImage": "playwright:v1.62.1-noble@sha256:c091b21d9fae78c76e85cd4356431e9b018402f172a214fc7d7a5e9a7e29d8ac+node:26.3.1-bookworm-slim@sha256:209558c3e5e40e8adff68959d3c2ba7cd73723e716d89196878a0c362fa1e109"
    },
    "packages": {
      "mermaid": "11.16.0",
      "mermaidCli": "11.16.0",
      "playwright": "1.62.1",
      "playwrightCore": "1.62.1",
      "puppeteer": "25.6.0",
      "puppeteerCore": "25.6.0"
    },
    "renderer": {
      "mermaidConfigSha256": "68c10966fe84406ee626034d58bfabd555df9f65f691204b7c46db24038da101",
      "themeCssSha256": "c80287a78d80ad63d27bd5ca348b2ef9a7e2f44da289e436be6484ea28a1b033",
      "browser": {
        "name": "chromium",
        "revision": "1234",
        "version": "151.0.7922.34",
        "executableSha256": "0b20b130e7edd9dd51873be867761295fe0cfad490c2b9a64f95bd3cfc08fa71"
      },
      "font": {
        "family": "Eli Diagram Inter Variable",
        "fileSha256": "3100e775e8616cd2611beecfa23a4263d7037586789b43f035236a2e6fbd4c62",
        "licenseSha256": "3b0a5fca3d17942cde889069889dedbbbd075e9b599968c82a95f4d944e9b345"
      }
    },
    "adapterVersions": {
      "diagramGenerator": "2",
      "drawioFlowchart": "1",
      "drawioSequence": "1",
      "drawioState": "1",
      "drawioGantt": "1"
    }
  },
  "artifacts": {
    "mmd": "/diagrams/tenancy-and-rls-7eec09d7/tenancy-and-rls-7eec09d7.mmd",
    "svg": "/diagrams/tenancy-and-rls-7eec09d7/tenancy-and-rls-7eec09d7.svg",
    "png": "/diagrams/tenancy-and-rls-7eec09d7/tenancy-and-rls-7eec09d7.png",
    "drawio": "/diagrams/tenancy-and-rls-7eec09d7/tenancy-and-rls-7eec09d7.drawio",
    "json": "/diagrams/tenancy-and-rls-7eec09d7/tenancy-and-rls-7eec09d7.json"
  },
  "artifactSha256": {
    "mmd": "fc14fa171c1d46912fd76adcabb879a2bacbe31ebc7cb426d5ad530e58a8c564",
    "svg": "9cc53ca9686ae324fea74251af0a8117e0fd2c028e036cd5bb7700d0951156eb",
    "png": "73f885a14b3a08606f518f52e22c2d389fae5177c71050e70aebb06095a0738d",
    "drawio": "f397209cfe4dc633bb476c044210532a67575176cf82e0d421f80fd0a455196f"
  }
}
