Governed knowledge store for autonomous organizations. Trust tiers, cryptographic audit trails, content-addressed storage, air-gap native.
Project description
QP Vault
The governed knowledge store for autonomous organizations.
Every document has a trust tier that weights search results. Every chunk has a SHA3-256 content ID. Every mutation is auditable. The entire vault is verifiable via Merkle tree. Content is screened by a Membrane before indexing. Access is controlled by RBAC. Air-gap native. Post-quantum ready.
The Architecture
A Vault is a governed store of knowledge resources. Each resource is screened by the Membrane, chunked, hashed, trust-classified, and indexed for hybrid search. RBAC controls who can read, write, or administer.
┌─────────────────────────────────────────────────────────────────┐
│ VAULT │
├──────────────┬──────────────────────────────────────────────────┤
│ RBAC │ READER · WRITER · ADMIN permission matrix │
│ MEMBRANE │ Innate scan → Release gate → Index/Quarantine │
│ INGEST │ Parse → Chunk → SHA3-256 CID → Embed → Store │
│ GOVERN │ Trust tiers · Lifecycle · Data classification │
│ RETRIEVE │ Hybrid search · Trust-weighted · Time-travel │
│ VERIFY │ Merkle tree · CID per chunk · Proof export │
│ AUDIT │ Every write → VaultEvent → Capsule (opt.) │
│ ENCRYPT │ AES-256-GCM · ML-KEM-768 · ML-DSA-65 │
├──────────────┴──────────────────────────────────────────────────┤
│ Trust weights: CANONICAL 1.5x · WORKING 1.0x · EPHEMERAL 0.7x │
│ FIPS 202 · FIPS 197 · FIPS 203 · FIPS 204 │
└─────────────────────────────────────────────────────────────────┘
Knowledge that can't be verified can't be trusted.
Why qp-vault
Vector databases store embeddings and return them by similarity. When something goes wrong, or when a regulator asks "was this the current policy at the time?", similarity search is not enough.
qp-vault solves three problems that vector databases do not:
1. Trust-weighted retrieval. Every resource has a trust tier (CANONICAL, WORKING, EPHEMERAL, ARCHIVED) that multiplies its search relevance. A CANONICAL SOP at 0.6 similarity outranks a WORKING draft at 0.8 similarity. This is not metadata filtering; it is a scoring function that ensures authoritative knowledge surfaces first, every time, without manual curation.
2. Cryptographic content integrity. Every chunk receives a SHA3-256 content ID at ingest. Every resource receives a Merkle root over its chunk CIDs. The entire vault has a root hash. Any modification to any chunk, in any resource, changes the vault's Merkle root. Auditors can verify a single resource without downloading the vault, using an exported Merkle proof. No trust in the storage layer is required.
3. Knowledge lifecycle with temporal validity. Resources have lifecycles (DRAFT to ACTIVE to SUPERSEDED to ARCHIVED) with temporal validity windows. Point-in-time queries answer "what was our policy on March 15, 2024?" by returning only resources that were ACTIVE at that date. Supersession chains link v1 to v2 to v3 with cryptographic pointers. Expired resources auto-transition. None of this exists in any vector database.
Content Addressing
Every chunk is hashed with SHA3-256 and assigned a content ID:
vault://sha3-256/4cb02d65a1b2c3d4e5f67890abcdef1234567890abcdef1234567890abcdef12
Every resource receives a Merkle root computed over its sorted chunk CIDs. The vault itself has a root hash over all resource hashes:
Vault Merkle Root
/ \
Resource A Root Resource B Root
/ \ |
hash(c1+c2) hash(c3+c4) hash(c5)
/ \ / \ |
CID(c1) CID(c2) CID(c3) CID(c4) CID(c5)
Identical content always produces the same CID. Modified content always produces a different root. Auditors verify a single resource via Merkle proof without downloading the vault.
Trust Tiers
Trust is not metadata. It is a scoring function.
| Tier | Weight | Freshness Half-Life | Behavior |
|---|---|---|---|
| CANONICAL | 1.5x | 365 days | Immutable. Official SOPs, approved policies. |
| WORKING | 1.0x | 180 days | Default. Drafts, in-progress documents. |
| EPHEMERAL | 0.7x | 30 days | Temporary. Meeting notes. Auto-archives after TTL. |
| ARCHIVED | 0.25x | 730 days | Historical. Superseded versions. |
Search ranking formula:
relevance = (0.7 × vector_similarity + 0.3 × text_rank) × trust_weight × freshness_decay × layer_boost
Where freshness_decay = exp(-age_days / half_life × ln2). A 180-day-old WORKING document retains 50% freshness. A CANONICAL document of the same age retains 70%.
Knowledge Lifecycle
DRAFT ──→ REVIEW ──→ ACTIVE ──→ SUPERSEDED ──→ ARCHIVED
│
EXPIRED (auto when valid_until passes)
│
ACTIVE (re-activate)
vault.transition(r.id, "review", reason="Ready for security team")
vault.transition(r.id, "active")
old, new = vault.supersede(v1_id, v2_id) # v1 → SUPERSEDED, linked to v2
chain = vault.chain(v1_id) # [v1, v2, v3, ...]
results = vault.search("policy", as_of=date(2024, 3, 15)) # Time-travel
expiring = vault.expiring(days=90) # What's about to expire?
Install
pip install qp-vault
| Command | What You Get | Dependencies |
|---|---|---|
pip install qp-vault |
SQLite, trust search, CAS, Merkle, lifecycle, Membrane, RBAC | 1 (pydantic) |
pip install qp-vault[postgres] |
+ PostgreSQL + pgvector hybrid search | + sqlalchemy, asyncpg, pgvector |
pip install qp-vault[encryption] |
+ AES-256-GCM encryption at rest | + cryptography, pynacl |
pip install qp-vault[pq] |
+ ML-KEM-768 + ML-DSA-65 post-quantum crypto | + liboqs-python |
pip install qp-vault[capsule] |
+ Cryptographic audit trail | + qp-capsule |
pip install qp-vault[docling] |
+ 25+ format document processing (PDF, DOCX, etc.) | + docling |
pip install qp-vault[local] |
+ Local embeddings (sentence-transformers, air-gap safe) | + sentence-transformers |
pip install qp-vault[openai] |
+ OpenAI embeddings (cloud) | + openai |
pip install qp-vault[integrity] |
+ Near-duplicate + contradiction detection | + numpy |
pip install qp-vault[fastapi] |
+ REST API (30+ endpoints) | + fastapi |
pip install qp-vault[cli] |
+ vault command-line tool (15 commands) |
+ typer, rich |
pip install qp-vault[all] |
Everything | All of the above |
Combine extras with commas:
pip install qp-vault[postgres,encryption,pq,capsule,fastapi] # Production API server
pip install qp-vault[local,encryption,cli] # Air-gapped deployment
pip install qp-vault[docling,integrity,cli] # Development
Quick Start
from qp_vault import Vault
vault = Vault("./my-knowledge")
# Add with trust tiers
vault.add("Incident response: acknowledge within 15 minutes...",
name="sop-incident.md", trust_tier="canonical")
# Trust-weighted search (deduplicated, with freshness decay)
results = vault.search("incident response")
# Multi-keyword grep (single-pass FTS, three-signal scoring)
results = vault.grep(["incident", "response", "P0", "escalation"])
# Retrieve full content
text = vault.get_content(results[0].resource_id)
# Replace content (atomic: creates new version, supersedes old)
old, new = vault.replace(resource_id, "Updated policy v2 content")
# Verify integrity
result = vault.verify()
print(result.merkle_root)
# Export proof for auditors
proof = vault.export_proof(resource_id)
Multi-Tenancy
vault.add("content", tenant_id="site-123")
vault.search("query", tenant_id="site-123") # Scoped to tenant
# Or lock the vault to a single tenant
vault = Vault("./knowledge", tenant_id="site-123")
RBAC
vault = Vault("./knowledge", role="reader") # Search, get, verify only
vault = Vault("./knowledge", role="writer") # + add, update, delete
vault = Vault("./knowledge", role="admin") # + export, import, config
Batch Import
resources = vault.add_batch(["doc1.md", "doc2.md", "doc3.md"], trust_tier="working")
Memory Layers
from qp_vault import MemoryLayer
ops = vault.layer(MemoryLayer.OPERATIONAL) # SOPs, runbooks (boost=1.5x)
strategic = vault.layer(MemoryLayer.STRATEGIC) # ADRs, decisions (trust=CANONICAL)
compliance = vault.layer(MemoryLayer.COMPLIANCE) # Audit evidence (reads audited)
Health Scoring
score = vault.health() # Vault-wide (0-100)
score = vault.health(resource.id) # Per-resource
Content Screening (Membrane)
Content is screened before indexing. Prompt injection, jailbreak, XSS, and code injection attempts are quarantined.
vault.add("ignore all previous instructions") # Quarantined automatically
Plugin System
from qp_vault.plugins import embedder, parser
@embedder("my-model")
class MyEmbedder:
dimensions = 768
async def embed(self, texts):
return my_model.encode(texts)
Three discovery methods: explicit registration, entry_points, or --plugins-dir (air-gap).
Encryption
from qp_vault.encryption import AESGCMEncryptor, HybridEncryptor
# Classical
enc = AESGCMEncryptor()
ciphertext = enc.encrypt(b"secret")
# Post-quantum hybrid (ML-KEM-768 + AES-256-GCM)
enc = HybridEncryptor()
pub, sec = enc.generate_keypair()
ciphertext = enc.encrypt(b"classified", pub)
Event Streaming
from qp_vault.streaming import VaultEventStream
stream = VaultEventStream()
vault = AsyncVault("./knowledge", auditor=stream)
async for event in stream.subscribe():
print(f"{event.event_type}: {event.resource_name}")
Import / Export
await vault.export_vault("backup.json")
await vault.import_vault("backup.json")
CLI
vault init ./knowledge
vault add report.pdf --trust canonical
vault search "revenue projections" --top-k 5
vault list --trust canonical --tenant site-123
vault verify
vault health
vault delete <id>
vault transition <id> review --reason "Ready for review"
vault content <id>
vault replace <id> new-version.md
vault export backup.json
15 commands. Exit codes: 0 = pass, 1 = fail. Designed for CI: vault verify && deploy.
FastAPI
from qp_vault.integrations.fastapi_routes import create_vault_router
router = create_vault_router(vault)
app.include_router(router, prefix="/v1/vault")
# 22+ endpoints: resources, search, faceted search, verify, health,
# lifecycle, collections, provenance, batch, export, content
Security
| Layer | Algorithm | Standard | Purpose |
|---|---|---|---|
| Content integrity | SHA3-256 | FIPS 202 | Tamper-evident CIDs and Merkle roots |
| Symmetric encryption | AES-256-GCM | FIPS 197 | Data at rest |
| Key encapsulation | ML-KEM-768 | FIPS 203 | Post-quantum key exchange |
| Digital signatures | ML-DSA-65 | FIPS 204 | Post-quantum provenance signing |
| Audit signatures | Ed25519 | FIPS 186-5 | Via qp-capsule |
| Hybrid encryption | ML-KEM-768 + AES-256-GCM | FIPS 203+197 | Quantum-resistant data encryption |
| Content screening | Membrane pipeline | -- | Prompt injection, jailbreak, XSS detection |
| Access control | RBAC | -- | Reader / Writer / Admin roles |
| Input validation | Pydantic + custom | -- | Enum checks, name/tag/metadata limits |
| Plugin verification | SHA3-256 manifest | -- | Hash-verified plugin loading |
| Key management | ctypes memset | -- | Secure key zeroization |
| Self-testing | FIPS KAT | -- | SHA3-256 + AES-256-GCM known answer tests |
No deprecated cryptography. No runtime network dependencies. Air-gapped operation supported. Full threat model in docs/security.md.
Part of the Quantum Pipes Stack
| Package | Purpose | Install |
|---|---|---|
| qp-capsule | Cryptographic audit protocol | pip install qp-capsule |
| qp-vault | Governed knowledge store | pip install qp-vault |
| qp-conduit | Infrastructure management | Shell toolkit |
| qp-tunnel | Encrypted remote access | Shell toolkit |
Each independently useful. Together, the governed AI platform for autonomous organizations.
Documentation
| Document | Audience |
|---|---|
| Getting Started | Developers |
| Architecture | Developers, Architects |
| API Reference | Developers |
| Trust Tiers | Developers, Product |
| Knowledge Lifecycle | Developers, Compliance |
| Memory Layers | Developers, Architects |
| Multi-Tenancy | Developers, SaaS |
| Encryption | Developers, Security |
| RBAC | Developers, Compliance |
| Membrane | Developers, Security |
| Streaming & Telemetry | DevOps, Observability |
| Plugin Development | SDK Authors |
| Security Model | CISOs, Security Teams |
| CLI Reference | DevOps, Developers |
| FastAPI Integration | Backend Developers |
Contributing
See CONTRIBUTING.md. Bug fixes with tests, new plugins (embedders, parsers, policies), and documentation improvements are welcome.
License
Knowledge that can't be verified can't be trusted.
An open-source governed knowledge store
Documentation · Security Policy · Changelog
Copyright 2026 Quantum Pipes Technologies, LLC
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file qp_vault-1.4.0.tar.gz.
File metadata
- Download URL: qp_vault-1.4.0.tar.gz
- Upload date:
- Size: 193.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
75007faf6695245debcebad91f4bfa424728f0011ddd1e30b661e896b7c0b47a
|
|
| MD5 |
17ba6d15ad17914202ead5c0de75091e
|
|
| BLAKE2b-256 |
45facf9bcebe5e04dc5f5f15960ae34cc864b70176dcecde4e9304eee1a17f80
|
Provenance
The following attestation bundles were made for qp_vault-1.4.0.tar.gz:
Publisher:
python-ci.yaml on quantumpipes/vault
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
qp_vault-1.4.0.tar.gz -
Subject digest:
75007faf6695245debcebad91f4bfa424728f0011ddd1e30b661e896b7c0b47a - Sigstore transparency entry: 1258502956
- Sigstore integration time:
-
Permalink:
quantumpipes/vault@3af2d088d17e4aa64b7c46dc2c88fc69cce89866 -
Branch / Tag:
refs/tags/v1.4.0 - Owner: https://github.com/quantumpipes
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-ci.yaml@3af2d088d17e4aa64b7c46dc2c88fc69cce89866 -
Trigger Event:
push
-
Statement type:
File details
Details for the file qp_vault-1.4.0-py3-none-any.whl.
File metadata
- Download URL: qp_vault-1.4.0-py3-none-any.whl
- Upload date:
- Size: 120.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
debabc9bfa30753fb467b545c2639034d0f5b7bcdfd8622add99c5f4d81dee91
|
|
| MD5 |
6e03fd71a5d23421af9a10f24f127db2
|
|
| BLAKE2b-256 |
1263612184e17e3ee69724fb7a4dce3760c8005bdde9907cfd66141ea03416b5
|
Provenance
The following attestation bundles were made for qp_vault-1.4.0-py3-none-any.whl:
Publisher:
python-ci.yaml on quantumpipes/vault
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
qp_vault-1.4.0-py3-none-any.whl -
Subject digest:
debabc9bfa30753fb467b545c2639034d0f5b7bcdfd8622add99c5f4d81dee91 - Sigstore transparency entry: 1258502977
- Sigstore integration time:
-
Permalink:
quantumpipes/vault@3af2d088d17e4aa64b7c46dc2c88fc69cce89866 -
Branch / Tag:
refs/tags/v1.4.0 - Owner: https://github.com/quantumpipes
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-ci.yaml@3af2d088d17e4aa64b7c46dc2c88fc69cce89866 -
Trigger Event:
push
-
Statement type: