Central decisions (PDP) + per‑field obligations (PEP) at resolve time. Same query, different answers by role, attributes, and risk. Everything is recorded in spans you can audit.
{
"allow": true,
"obligations": {
"allowFields": ["id","department","userId","total"],
"features": {"ai": false},
"mask": []
},
"policyEtag": "v1",
"reason": "analyst masked read",
"resource": {"type":"GraphQuery","name":"orders"}
}{
"allow": true,
"obligations": {
"allowFields": ["*"],
"features": {"ai": true},
"mask": []
},
"policyEtag": "v1",
"reason": "admin full access",
"resource": {"type":"GraphQuery","name":"orders"}
}POST /compliance/:tenant/:workspace/dsar # create export/delete GET /compliance/:tenant/:workspace/dsar # list requests GET /compliance/:tenant/:workspace/dsar/:id/artifact # download export
{
"apigql.pdp.action": "read",
"apigql.pdp.allow": true,
"apigql.pdp.reason": "admin full access",
"apigql.pdp.resource.type": "GraphQuery",
"apigql.pdp.resource.name": "orders"
}