Sidian Labs

DASH — Evidence-First Vector Database

Answers that cite their evidence.

Evidence-first data infrastructure for provenance-aware retrieval.

Working / Active Development

Runs as a Docker Compose stack: see Install.

Fig. 1Illustrative

A claim at the centre, the evidence for and against it around it, and edges to related claims. A drawing of the data model, not output from DASH.

Abstract

DASH is a working Rust-based vector database that stores atomic claims with provenance, retrieves them with citation-grade rankings, and ships an OpenAI-compatible embeddings endpoint. Active development toward distributed and production-scale deployments.

01

Similarity is not accuracy.

Naive RAG ranks documents by vector similarity, which fails when sources contradict or facts expire. Three failures follow from treating the chunk as the unit of knowledge.

  1. 1.1Vector blindness. Vector search returns the chunk closest to the query: a contradicted fact ranks exactly as high as a correct one.
  2. 1.2Lost provenance. Chunks carry no stance, no source quality, and no way to cite exactly where an answer came from.
  3. 1.3Temporal expiry. A revenue figure from Q2 keeps ranking in Q4. Standard vector stores have no concept of time or validity windows.

DASH is the evidence and provenance layer of the lab’s single investigation, after POLICY.md, MAP and OVARA. See Research.

Nearest chunks, by cosine similarityExample
#ChunkScore
1The public API rate limit is 250 requests per minute.No source. Nothing says where this came from.0.912
2The public API rate limit is 100 requests per minute.Expired in April. Nothing marks it as stale.0.907
3Still getting throttled at 100 a minute.Disagrees with the first result. No stance, so it ranks as an answer.0.889

02

The claim is the primitive.

DASH treats the claim, an atomic, source-bound assertion, as the primary primitive. It is designed around a first-class Claim, Evidence and Edge data model rather than opaque vectors. Every assertion carries provenance, stance, and a temporal validity window.

Evidence points at its claim through claim_id; an edge joins two claims through from_claim_id and to_claim_id.

Built in Rust. Source: github.com/BHAWESHBHASKAR/DASH.

Three records, linked by identifierExample

Evidence

evidence_id
ev_0907
claim_id
cl_0202
source_id
changelog.md
stance
supports
source_quality
0.90

Claim

claim_id
cl_0202
tenant_id
docs
canonical_text
“The public API rate limit is 250 requests per minute.”
confidence
0.84
valid_from → valid_to
2026-05-01 → open

Edge

from → to
cl_0202 → cl_0198
relation
refines
strength
0.70
reason_codes
a list of codes explaining the link

Field names are DASH’s; values are illustrative.

Table 1 — the three primitives and their fields

PrimitiveWhat it isFields
ClaimThe atomic assertion. Never a blob: one fact, one confidence, one validity window.claim_id, tenant_idcanonical_textconfidencevalid_from / valid_to
EvidenceThe provenance. Where the claim came from, and which way the source leans.evidence_id, claim_idsource_idstance: supports | contradictssource_quality
EdgeThe relationship between two claims: typed, weighted, and explainable.from_claim_id -> to_claim_idrelation: duplicates | refinesstrengthreason_codes[]

03

Both sides. And when a fact holds.

  1. 3.1Contradiction handling. Supporting and contradicting evidence is surfaced as a first-class query result: a source that supports a claim and one that contradicts it come back side by side. DASH does not resolve which source is authoritative; it exposes the contradiction for downstream judgment.
  2. 3.2Temporal validity windows. Claims carry valid_from / valid_to fields so retrieval can filter by time. Stale facts are excluded by query rather than relying on manual metadata tagging, so you can retrieve claims within a temporal validity window.

What DASH does not promise is written down in the repository’s Non-Guarantees.

Fig. 2Example

One claim as DASH models it, listed below: the assertion with its confidence and validity window, the evidence that supports and contradicts it with each source, and an edge to a related claim. The incident, sources and values are illustrative; the field names are DASH’s.

Fig. 2, as records — one claim, its evidence, a related claim

Example

RecordKindTextRelationSourceQuality / values
cl_0142Claim“The March outage was caused by an expired TLS certificate.”——confidence 0.86 · valid 2026-03-14 → open
ev_0311Evidence“Root cause: the edge certificate expired at 02:10 UTC.”supportspostmortem-0314.md0.95
ev_0318Evidence“Looks like a bad config push, rolling back now.”contradictsincident-chat.log0.40
ev_0322Evidence“Service restored after certificate renewal at 03:05 UTC.”supportsstatus-page.md0.80
cl_0139Claim“The edge certificate expired at 02:10 UTC on 14 March.”refines → cl_0142—strength 0.70

Claims about one fact, by validity window — query 2026-06-01

Example

Claimvalid_fromvalid_toAt the query time
cl_0201“The public API rate limit is 100 requests per minute.”2026-01-012026-04-30Excluded by the query: window has closed
cl_0202“The public API rate limit is 250 requests per minute.”2026-05-01openReturned: window contains the query time

Two claims about one fact. At the query time only one window is open, and it comes back with the evidence on both sides.

Returned with cl_0202, side by side

Example

supports · changelog.md · source_quality 0.90
“Raised the public rate limit to 250 requests per minute.”
contradicts · forum-thread.html · source_quality 0.35
“Still getting throttled at 100 a minute.”

DASH returns both. Which source to believe is left to the reader downstream.

04

Retrieval that cites.

Every retrieval returns the claim, supporting and contradicting evidence, citations, and source quality, ranked at citation grade. Behind the API sits the Evidence Memory Engine (EME), in three stages.

  1. 4.1Ingestion. Extraction & Normalization → Claim Log (WAL)
  2. 4.2Indexing. Mutable Delta Index → Background Compaction → Immutable Segments
  3. 4.3Retrieval. Query Planner → Evidence Graph Assembler → Ranking & Calibration → RAG Retrieval API

Performance notes: Benchmarks. Method: Evaluation Protocol. The API itself is in the documentation.

Retrieval · 1 claim · 2 evidenceExample

As cited

The public API rate limit is 250 requests per minute.12

confidence 0.84 · valid 2026-05-01 → open

  1. 1 · supports · changelog.md · 0.90
  2. 2 · contradicts · forum-thread.html · 0.35

The record behind it

claim_id
cl_0202
tenant_id
docs
valid_to
none (window still open)
Evidence 1
ev_0907 · supports · changelog.md · source_quality 0.90
Evidence 2
ev_0912 · contradicts · forum-thread.html · source_quality 0.35

Field names are DASH’s (Claim and Evidence); the response shape and values are illustrative.

05

A log that keeps its own history.

DASH is a WAL-backed store with a durable write-ahead log. It appends every write to a hash-chained audit log, providing tamper-evident provenance for ingestion and retrieval operations.

Each entry carries the hash of the one before it: the chain is what makes the log tamper-evident.

See the Threat Model.

Claim log (WAL) · hash-chained audit

Example

SeqOpTargetprevhash
#1041ingestclaim cl_02023a9e…c2107f12…9b04
#1042ingestevidence ev_09077f12…9b04c4d8…1e77
#1043ingestevidence ev_0912c4d8…1e779d30…a6f1
#1044retrieveclaim cl_02029d30…a6f105bb…e3a2

Sequence numbers, operations and hashes are illustrative and shortened. Each row’s prev equals the hash of the row above.

06

Zero migration: /v1/embeddings

An OpenAI-compatible /v1/embeddings endpoint lets existing OpenAI SDKs point at DASH without code changes, while backing calls with an auditable evidence store. Point any OpenAI SDK’s base_url at DASH, no other code changes: every embeddings call site you already have keeps working. Use it to replace OpenAI embeddings with an auditable local endpoint.

The switch, in one setting

Endpoint
POST /v1/embeddings
Change
The SDK’s base_url, pointed at DASH (for a local stack, http://localhost:8080/v1)
API key
Not needed for a local stack
Your code
Unchanged: same client, same embeddings calls, same model name
Backed by
An auditable, hash-chained evidence store

07

Tenants, keys and clients.

Multi-tenancy and auth. Every claim belongs to a tenant (tenant_id). Access is multi-tenant with JWT auth, scoped API keys, and rate limiting, so you can run multi-tenant knowledge stores with scoped keys and rate limits.

SDKs. Client SDKs for Python, Go, and TypeScript.

See also the Security Checklist.

Every claim
tenant_id
Auth
JWT
Keys
Scoped API keys
Limits
Rate limiting
Client SDKs
Python, Go, TypeScript

08

What engineers are building.

DASH replaces standard vector stores when accuracy, provenance, and auditability are non-negotiable.

  1. 8.1Build RAG systems that cite sources and expose contradictions
  2. 8.2Replace OpenAI embeddings with an auditable local endpoint
  3. 8.3Retrieve claims within a temporal validity window
  4. 8.4Run multi-tenant knowledge stores with scoped keys and rate limits

09

Install.

Clone the repository, generate secrets with the script it ships, and start the container stack with Docker Compose. The step-by-step commands are in the install guide.

  1. 9.1Clone the DASH repository from GitHub.
  2. 9.2Generate secrets with the repository’s secrets script.
  3. 9.3Start the stack with Docker Compose, using the compose file under deploy/container.

10

Scope.

Current status Working / Active Development

  1. 10.1Current scope. DASH is a working implementation under active development. Distributed failover, quorum, and production-scale operational guarantees remain under development.
  2. 10.2Single-node, not distributed. DASH is currently a single-node implementation. The single-node implementation is working and under active development toward distributed operation.

The path is laid out in the Production Readiness Plan. Lab-wide limits: Non-guarantees.

11

Evidence & limitations.

In the DASH repository

  1. [1]Non-Guarantees docs/NON-GUARANTEES.md
  2. [2]Threat Model docs/threat-model.md
  3. [3]Benchmarks docs/benchmarks/performance.md
  4. [4]Evaluation Protocol docs/benchmarks/evaluation-protocol.md
  5. [5]Security Checklist docs/security-checklist.md
  6. [6]Production Readiness Plan docs/plans/2026-08-09-production-readiness-remediation.md