What you're trying to do
gbrain's audit is per-user visibility-filtered (the "company brain" pattern). Vouch's kb.audit returns every event; once #2 (multi-dim scopes) lands, a reviewer with project-scope-A should not see project-scope-B's audit events. Bake the filter into the audit reader so the visibility model is enforced by the read path, not by the caller.
Suggested shape
kb.audit accepts a viewer_scope: ScopeSpec param (passed by the transport's auth layer).
audit.read_events filters events whose object_ids reference artifacts outside viewer_scope.
- Fallback: events with no
object_ids (e.g. kb.init) are visible to everyone.
Acceptance
- A two-project KB with reviewer A in project-A sees no project-B events.
- A fuzz test asserts no project leak across viewers (mirrors gbrain's "zero leaks" claim).
Out of scope
- Encrypted audit log entries (visibility is filtering; encryption is a separate ask).
- Cross-viewer aggregate queries.
What you're trying to do
gbrain's audit is per-user visibility-filtered (the "company brain" pattern). Vouch's
kb.auditreturns every event; once #2 (multi-dim scopes) lands, a reviewer with project-scope-A should not see project-scope-B's audit events. Bake the filter into the audit reader so the visibility model is enforced by the read path, not by the caller.Suggested shape
kb.auditaccepts aviewer_scope: ScopeSpecparam (passed by the transport's auth layer).audit.read_eventsfilters events whoseobject_idsreference artifacts outsideviewer_scope.object_ids(e.g.kb.init) are visible to everyone.Acceptance
Out of scope