v4.0.0a1 — first public alpha
First public alpha cut of Attestor v4 to PyPI.
v4 is a greenfield rebuild. Hard tenant isolation via Postgres RLS, bi-temporal facts, no LLM in the retrieval critical path. v3 was alpha-only with no production users — there is no automated migration; drop your previous DB and install fresh.
This is an alpha — API surface is subject to breaking change until 4.0.0 stable. Track the alpha line:
```bash
pip install "attestor==4.*"
```
Highlights
- Bi-temporal replay — `recall(as_of=...)` reconstructs exactly what was active at any past point in transaction time.
- Semantic-first 6-step pipeline — Vector top-K → Graph narrow → Triples inject → MMR → Decay + temporal boost → Greedy budget pack. Same query → same ranking. Zero LLM in the path.
- Conversation ingest — `ingest_round()` runs two-pass speaker-locked extraction (the +53.6 over Mem0 fix), then a four-decision conflict resolver (`ADD/UPDATE/INVALIDATE/NOOP`) per fact. Every supersession carries an `evidence_episode_id`.
- Tenant isolation — Postgres Row-Level Security via `tenant_isolation_*` policies on the `attestor.current_user_id` session variable.
- Multi-agent primitives — Six RBAC roles, namespace isolation, per-agent token budgets and write quotas, provenance on every memory.
- Sleep-time reflection — Stable preferences, stable constraints, changed beliefs, and contradictions-flagged-for-human-review (regulated-systems posture: never auto-resolved).
- Optional Ed25519 provenance signing — cryptographic non-repudiation for adversarial-write contexts.
- Dual-judge benchmarking — Cross-family judge stack (`openai/gpt-5.2` + `anthropic/claude-sonnet-4.6`) anchors out answerer-judge collusion.
- Multi-backend support — Postgres + Neo4j (default), ArangoDB, AWS (DynamoDB + OpenSearch + Neptune), Azure (Cosmos DB), GCP (AlloyDB).
- Read-only Evidence Board UI — `attestor ui` browser viewer for live trace inspection.
Packaging fixes in this alpha
The first build had three blockers caught during release prep:
- `AgentContext` / `AgentRole` / `Visibility` now re-exported at the top level so `from attestor import AgentMemory, AgentContext, AgentRole` (the README's first example) works.
- Circular import between `attestor.extraction` and `attestor.conversation` resolved — `conversation/init.py` no longer eagerly imports the heavy submodules; `conversation/apply.py` moves type-only imports under `TYPE_CHECKING`.
- `psycopg2-binary` and `neo4j` promoted to required core dependencies (the codebase imports both eagerly).
See `CHANGELOG.md` for the full track-by-track changelog.
Live demo + docs
- Live site: https://attestor.dev/ (interactive recall pipeline at §03)
- Repo: https://github.com/bolnet/attestor
- PyPI: https://pypi.org/project/attestor/