Skip to content

Six decisions, as they actually came out

Each panel renders a JSON artifact produced by zence evaluate --jsonand copied into this site by a build step. The verdicts, rule ids, evidence URNs and remediation text are the engine’s own words.

Synthetic scenario. Northstar Commerce and BluePeak Health are fictional. These are real Zence decisions, recorded from actual runs against the demo catalog — not mock-ups — but no real company or person is represented.

Every part of this is valid. The SQL parses, both tables exist, the developer has credentials for both. The mistake only exists at the level of boundary — and nothing else in the loop is tracking that.

DeniedZR-001

Cross-client PII access

  1. What the developer asked for

    Blend our Northstar leads with the BluePeak patient contact export so we can see overlap.

  2. What Claude tried — Write

    SELECT l.email, p.phone
    FROM   northstar.marketing_leads  l
    JOIN   bluepeak.patient_contacts p
      ON   p.email = l.email
  3. What Zence extracted

    • northstar.marketing_leadshigh confidence · sql
    • bluepeak.patient_contactshigh confidence · sql

    intent: codegen, read

  4. What DataHub said

    • urn:li:dataset:(urn:li:dataPlatform:snowflake,bluepeak.patient_contacts,PROD)

    Classified urn:li:tag:PII · columns email, phone tagged at field level

  5. Decision — ZR-001

    bluepeak.patient_contacts belongs to BluePeak Health, but this session is bounded to Northstar Commerce. It carries urn:li:tag:PII, and columns email, phone are classified at field level. Reading it here would move another client's personal data into this workspace.

    policy v1.0.0 · enforce mode · risk critical · via rule

  6. What Claude is told to do instead

    Use an asset inside Northstar Commerce. If you genuinely need to work on BluePeak Health, switch to that client's workspace so the correct boundary applies.

    The remediation is the point. A bare refusal invites a retry with a variation; naming the alternative turns it into a redirect.

Rendered from cross-client-pii.json — real output of zence evaluate --json

Reproduce it

None of this requires taking our word for it

Clone the repository, start DataHub, seed the synthetic catalog, and run the same commands. The artifacts you get should match the ones on this page.

git clone https://github.com/AmirmLotfy/zence && cd zence
uv sync --all-packages --extra datahub

datahub docker quickstart          # needs ~8 GB RAM
uv run zence demo seed
uv run zence demo verify           # exits non-zero on any gap

uv run zence evaluate --tool Write --file models/blend.sql \
  --content "SELECT l.email, p.phone
             FROM northstar.marketing_leads l
             JOIN bluepeak.patient_contacts p ON p.email = l.email" \
  -C examples/clients/northstar-analytics --json