You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
refactor(spec): remove dead compliance subsystems (ADR-0056 D8) + mark agent visibility EXPERIMENTAL (#1901) (#2693)
ADR-0056 D8 said "design + enforce, or remove" for the declared-but-never-
enforced surface. Dispositions:
REMOVED (no runtime path ever read them; compliance-grade config must never
merely look live):
- system/compliance.zod.ts (GDPR/HIPAA/PCI ComplianceConfig) + tests
- system/masking.zod.ts (MaskingRule/MaskingConfig) + tests — FLS is the
enforced field-visibility path; a masking/deny layer arrives with
ADR-0066 ⑦/⑧ if needed
- security/rls.zod.ts: RLSConfigSchema / RLSAuditEventSchema /
RLSAuditConfigSchema — the enforced RLS path (computeRlsFilter) never read
the global config; per-policy RowLevelSecurityPolicySchema is unchanged
KEPT [EXPERIMENTAL]: system/encryption.zod.ts — real enterprise roadmap item
with a stable shape; carrying it marked costs less than remove-and-re-add
(ADR-0087).
MARKED [EXPERIMENTAL — NOT ENFORCED] (#1901): AgentSchema.visibility — the
chat-access evaluator deliberately excludes it and the list route does not
filter by it, so `private` does not hide an agent. Schema description + the
authoring form now say so; access/permissions (enforced since #1884) are the
real gates.
Ledger: authz-conformance matrix rows flipped (3× removed with disposition
notes, field-encryption note records the keep decision, new agent-visibility
experimental row). Generated reference docs regenerated (compliance/masking
pages deleted); hand-written security/types/authorization docs synced.
Tests: spec 6659 passed (246 files) after removal; api-surface regenerated;
liveness ✓; conformance-matrix companion test ✓; full turbo build green.
Refs #2561, ADR-0056 D8, #1901
Claude-Session: https://claude.ai/code/session_0187GeNqezxV6g5jiLiggfbt
Co-authored-by: Claude <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: content/docs/protocol/objectql/security.mdx
+10-67Lines changed: 10 additions & 67 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -198,7 +198,7 @@ rowLevelSecurity:
198
198
using: "status == 'active'" # date-window/function predicates (NOW(), arithmetic) are NOT pushdown-able (ADR-0055) — enforce time windows in the app layer or a pre-resolved set
199
199
```
200
200
201
-
> RLS conditions are compiled to parameterized queries. The default policy when no rule matches is **deny** (`RLSConfigSchema.defaultPolicy`).
201
+
> RLS conditions are compiled to parameterized queries, and the enforcement path fails **closed**: an applicable policy that cannot be compiled denies (returns zero rows) rather than being dropped. (The old global `RLSConfigSchema` was removed in 2026-07 — it was never read by the enforced path; per-policy `RowLevelSecurityPolicySchema` is the live surface.)
202
202
203
203
---
204
204
@@ -251,71 +251,14 @@ fields:
251
251
252
252
## 4. Data Masking
253
253
254
-
> **Status: schema exists, field wiring removed.** `MaskingRuleSchema`
> `MaskingRuleSchema` / `MaskingConfigSchema` were deleted from the spec: no
256
+
> redaction layer ever applied them, and the per-field `maskingRule` property
257
+
> had already been pruned in 2026-06. To keep a value out of reader hands, use
258
+
> **FLS** (`readable: false` field permissions — enforced by plugin-security's
259
+
> field masker), `hidden`, or a `type: 'secret'` field. A subtractive
260
+
> masking/deny layer, if needed, arrives with the ADR-0066 ⑦/⑧ muting work.
261
+
> Disposition tracked in the ADR-0056 D10 conformance matrix (`data-masking`).
319
262
320
263
---
321
264
@@ -421,7 +364,7 @@ Object- and field-level history is opt-in metadata, not a free-form `enable.audi
421
364
422
365
- **Field history** — set `trackHistory: true` on the object (`ObjectCapabilities` in `object.zod.ts`) to record per-field changes.
423
366
- **Per-field audit trail** — set `auditTrail: true` on an individual field to track every change with user and timestamp.
424
-
- **RLS audit** — RLS policy evaluations can be logged via `RLSAuditConfigSchema` (`enabled`, `logLevel`, `destination`, `retentionDays`, …). The recorded event shape is `RLSAuditEventSchema` (timestamp, userId, operation, object, policyName, granted, evaluationDurationMs).
367
+
- **RLS audit** — removed (2026-07, ADR-0056 D8): the `RLSAuditConfigSchema`/`RLSAuditEventSchema` shapes were never emitted or read by the runtime RLS path and were deleted from the spec. Enforcement decisions surface today through the security plugin's fail-closed warnings and the standard audit log (`plugin-audit`), not a dedicated RLS event stream.
|**visibility**|`Enum<'global' \| 'organization' \| 'private'>`| ✅ |[EXPERIMENTAL — NOT ENFORCED, #1901] Intended listing scope. No runtime consumer yet; use access/permissions for real gating.|
88
88
|**planning**|`Object`| optional | Autonomous reasoning and planning configuration |
0 commit comments