Skip to content

Releases: omic/attest

v0.1.41 — Temporal Analytics

04 Apr 16:55

Choose a tag to compare

What's New

Temporal analyticsdb.at(timestamp) now exposes the full analytics layer, not just query() and stats().

snapshot = db.at(timestamp)
snapshot.what_if(("KRAS", "gene"), ("activates", "relation"), ("MEK", "gene"))
snapshot.predict("BRCA1")
snapshot.evolution("TP53")
snapshot.knowledge_health()
# ... all analytics methods work on point-in-time state

Architecture

TemporalStoreView proxy filters claim-returning store methods by timestamp. AnalyticsEngine(snapshot) works transparently — zero changes to the analytics engine itself. Every analytics method automatically operates on point-in-time state.

Benchmarked

Proxy overhead: <0.5µs per call, +3.3% on compounded access patterns (statistically not significant at p>0.05).

Full Changelog: v0.1.40...v0.1.41

v0.1.40 — Enterprise pipeline

04 Apr 14:24

Choose a tag to compare

What's New

  • Enterprise provenance: project, agent_id, source_version, labels fields on Provenance struct (Rust + Python)
  • LegacyProvenance fallback: backward-compatible bincode deserialization for databases created before namespace/provenance fields
  • Discovery pipeline: schema sampler, analyzer, aligner, claim templates, drift detection, schema versioning
  • Calibration engine: prediction log, adaptive threshold engine, data quality tracker, feedback loop
  • Review API: human review queue, bulk approve, MCP tools for conversational review
  • Entity resolution: fuzzy/exact/domain matching, materialized views, ingestion hooks, CDC
  • Unified query: query decomposer, conflict resolver, source authority matrix
  • Access control: ACL sync, provenance-based policy engine, security middleware
  • Audit layer: tamper-evident SHA-256 hash chain, SOC 2 export, SIEM webhook
  • Extraction pipeline: unstructured claim extraction (email, Slack, QBR), entity linker, claim normalizer
  • Resilience: circuit breakers, dead letter queues, rate limiter, idempotency store, source health tracker
  • Claim type taxonomy: 32 hierarchical types with runtime extension
  • CLI: attest discover command for schema discovery
  • Drift check job: scheduled drift detection with auto-resolve and circuit breaker

Full Changelog

v0.1.39...v0.1.40

v0.1.39 — Launch CLI

01 Apr 16:44

Choose a tag to compare

New CLI commands: quickstart, mcp-config, doctor, trial, upgrade, share, stats, telemetry. 10 authored skill templates. ~12µs queries. 106 MCP tools.

v0.1.38 — Launch CLI

01 Apr 16:39

Choose a tag to compare

New CLI commands: quickstart, mcp-config, doctor, trial, upgrade, share, stats, telemetry.
10 authored skill templates. Bundled sample data. ~12µs queries. 106 MCP tools.

v0.1.37 — Fix MCP server crash on clean install

30 Mar 14:29

Choose a tag to compare

Bug fix

Fixed ModuleNotFoundError: No module named 'attestdb.mcp_tools_learning' that crashed attest-mcp on clean pip install. Enterprise-only modules (mcp_tools_learning, mcp_tools_viz, mcp_tools_autonomous, mcp_tools_analysis) are now guarded with try/except ImportError.

Also includes (from v0.1.36)

  • attest brain install — personal knowledge system for AI agents
  • Proactive MCP server instructions (tells agents to USE the brain tools)
  • MCP server name changed from "attest" to "brain" (fixes Claude Code /doctor errors)
pip install -U attestdb
attest brain install

Full changelog: v0.1.36...v0.1.37

v0.1.36 — Attest Brain

29 Mar 03:39

Choose a tag to compare

Attest Brain — personal knowledge system for AI agents

Give Claude Code, Cursor, OpenClaw, and any MCP-compatible agent a persistent brain that gets smarter every session.

pip install attestdb
attest brain install

What's new

  • attest brain install — one command to install the brain into your coding tools (Claude Code, Cursor, Windsurf, Codex, Gemini CLI)
  • attest brain status — view brain statistics (claims, entities, sessions, knowledge breakdown)
  • attest brain uninstall — clean removal
  • attest-brain — standalone CLI entry point

What the brain does

  • Session recall — prior knowledge injected at session start
  • Pre-edit warnings — known bugs surface before you edit a file
  • Post-test fixes — prior solutions appear when tests fail
  • Negative results — records what didn't work so nobody repeats the search
  • Confidence scoring — every fact has a 0-1 score that updates with evidence
  • Gap detection — finds what the brain doesn't know

Landing page

attestdb.com/brain.html

Full changelog: v0.1.35...v0.1.36

v0.1.35 — pip install attestdb now auto-installs Rust engine

28 Mar 20:01

Choose a tag to compare

What's New

One-command install

pip install attestdb now automatically installs attest-py (the Rust storage engine) as a dependency. No more ModuleNotFoundError: No module named 'attest_rust'.

Quality of life

  • Downgraded "Unknown entity_type" warnings to DEBUG level — clean output for new users
  • Performance regression tests (8 tests verifying ask <500ms, search <10ms)
  • MCP tool cleanup: 4 uncapped claims_for calls fixed
  • LIVE indicator on demo search inputs
  • Updated PyPI descriptions and keywords

Full Changelog

v0.1.34...v0.1.35

v0.1.34 — Enterprise RBAC, Rust neighbors(), 3D graph labels

28 Mar 04:50

Choose a tag to compare

What's New

Enterprise RBAC (Group-Based Access Control)

  • Groups & memberships: db.create_group(), db.add_to_group() — team-based access
  • Declarative policies: db.add_policy() — allow/deny rules per group/namespace/predicate
  • Entitlement resolution: principal → groups → policies → effective access
  • SecureStoreProxy: wraps Rust store, filters ALL claim-returning methods
  • 6-level sensitivity: SHARED → PUBLIC → INTERNAL → CONFIDENTIAL → RESTRICTED → REDACTED
  • JWT + SAML auth: API middleware resolves user identity per request
  • Audit logging: group_created, member_added, policy_created, access_denied events
  • 29 security review findings fixed (5 CRITICAL, 8 HIGH, 10 MEDIUM)

Rust-native neighbors()

  • store.neighbors(entity_id) returns neighbor IDs from adjacency index
  • 11,020 neighbors in 3ms (no claim materialization)

Demo improvements

  • 3D force-graph with HTML overlay labels (DOM-based, works everywhere)
  • 2D force-graph with d3-force collision detection
  • Stronger charge repulsion, circular initial positions

Full Changelog

v0.1.33...v0.1.34

v0.1.33 — Rust neighbors(), predicate composition, security fixes

27 Mar 17:07

Choose a tag to compare

What's New

Rust-native neighbors() method

  • store.neighbors(entity_id) returns neighbor IDs from adjacency index — no claim materialization
  • KRAS: 11,020 neighbors in 3ms (vs seconds for claims_for)
  • Wired into ask engine's bridge finding for O(degree) intersection

Predicate-chain composition

  • Bridges now compose predicates: A --[inhibits]--> X --[causes]--> B → inferred: A prevents B
  • Uses PREDICATE_COMPOSITION table (41 rules)
  • Evidence shows composed relationship in citations

Security fixes

  • XSS: 6 innerHTML points in legal search results now escaped via esc()
  • _safe_claims_for fallback always caps at 500 (was unbounded on old wheels)

Code quality

  • compose_predicates and EntitySummary moved to module-level imports
  • Exception logging added to _get_llm_client fallback path

Full Changelog

v0.1.32...v0.1.33

v0.1.32 — V2 ask engine (45s → 2.5s), predicate-weighted bridges

27 Mar 14:33

Choose a tag to compare

What's New

V2 Ask Engine (45s → 2.5s on 85M claims)

  • Entity-first retrieval: exact match → single-word BM25 → LLM extraction (replaces word-by-word BM25 scanning that took 30-40s)
  • Neighborhood intersection: sample neighbors of both entities, intersect sets to find bridges. O(sample_a + sample_b) — no BFS needed
  • Predicate-weighted bridge scoring: inhibits/binds=1.0, associated_with=0.1. Score = weight_a × weight_b
  • _llm_call_via_requests(): uses requests library directly instead of openai/httpx (avoids asyncio deadlock in web servers)

Performance

  • Rust claims_for(limit=N): stops materialization at Rust level (was deserializing ALL claims then slicing in Python)
  • 18 uncapped claims_for() calls fixed across query_engine, topic_threads, mcp_server
  • Hub entity filtering: entities with >100K claims are filtered from bridges (Inflammation, Protein, Calcium bridge everything)
  • BM25 skip list: common bio terms like "disease" (9s BM25 scan) are skipped in entity resolution

Bug Fixes

  • claim_from_dict(): display_name now falls back to name field (fixes empty names for SemMedDB entities)
  • Entity name resolution: _entity_name() helper checks display_namename → fallback

Full Changelog

v0.1.31...v0.1.32