Attestor 4.0.0 — first stable 4.x
`pip install attestor` now returns 4.0.0 — promoting the alpha line to stable so the install path matches the documented architecture (Postgres + pgvector + Neo4j + Voyage AI + the four-role gpt-4.1 / claude-sonnet-4-6 model lineup).
Highlights
Security & governance
- RBAC enforcement at AgentContext layer (#72) —
ROLE_PERMISSIONSmatrix gates writes / forgets per role - Neo4j namespace tenancy (#74) — closes cross-tenant graph-affinity leak
Reliability & safety nets
- Embedder dimension assertion at startup (#75) — fail-fast on
vector(N)≠ embedder dim instead of silently no-op'ing every write - Exhaustive end-to-end pipeline tracing (#76) —
ATTESTOR_TRACE=1surfaces every step of ingest + retrieval as stderr lines + JSONL - v4 namespace round-trip fix (#77) — caught by the new tracing within ten minutes of shipping it; was silently dropping 100% of namespace-scoped recall candidates
API parity
MemoryClient↔api.pyparity drift (#73) —recall(namespace=...)now forwards over HTTP;QuotaExceeded→ HTTP 429
Distribution
This release auto-publishes to:
- PyPI: `pip install attestor` (no `--pre` needed any more)
- Docker registries: GHCR + Docker Hub (`bolnet2025/attestor`) + Quay.io (`bolnet/attestor`)
- Two image flavors per registry: `:4.0.0` (introspection-only, the artifact Glama / Smithery verify) and `:api-4.0.0` (full HTTP API, what cloud deploys actually pull)
Migration
No breaking API changes vs 4.0.0a5. Three behavior changes worth knowing:
- Callers passing `namespace=` to `mem.add()` / `mem.recall()` on v4 backends now actually have their namespace persisted and matched on read (was silently broken in alphas).
- `AgentRole` is now enforced — `REVIEWER` / `MONITOR` are read-only at the AgentContext layer. Default `EXECUTOR` is unchanged.
- The new embedder-dim assertion is fail-fast. If you see `EmbedderDimMismatchError` on startup, your schema's `vector(N)` doesn't match your embedder's output dim — follow the remediation steps in the error message.
See CHANGELOG.md for the full breakdown.