v0.6.2 — visibility enforced on read
Read-path authorization. The visibility column (global | scope | private) was stamped on save but never consulted at retrieval — a private/scoped row was returned to any caller. handle_search now composes a read-authorization predicate into every read (Tier-1 vector search, keyword fallback, Tier-3 insight/summary), gated by the server-verified agent identity:
global→ all callersprivate→ only the owningagent_idscope→ only a caller asserting the matchingscope- anonymous →
globalonly (fail closed)
Tier-3 is gated too, so a private fact filtered from Tier-1 cannot leak through its community summary.
No migration, no client change. Columns/indexes exist since migration 001; every stored row defaults to global, so nothing currently stored is hidden — behavior changes only for rows explicitly marked. api_version unchanged (1).
Full suite: 432 passed (8 new in tests/test_visibility.py).