Integrity Verification
Context Nest uses SHA-256 hash chains to make version history tamper-evident.
Hash types
| Hash | Scope | What it proves |
|---|---|---|
content_hash |
Single version | The document content hasn't changed |
chain_hash |
Version chain | No versions have been inserted, removed, or reordered |
checkpoint_hash |
Checkpoint | The checkpoint hasn't been modified |
| Cross-chain binding | Checkpoint ↔ document | Document chain hashes match what the checkpoint recorded |
How chain hashes work
v1: chain_hash = SHA256(content_hash_v1)
v2: chain_hash = SHA256(chain_hash_v1 + content_hash_v2)
v3: chain_hash = SHA256(chain_hash_v2 + content_hash_v3)
Each version's chain hash depends on all previous versions. Changing any version invalidates all subsequent chain hashes.
Verification
ctx verify # Verify all hash chains
ctx verify --json # JSON output for CI integration
Verification checks:
- Each document's content hash matches the stored content.
- Each chain hash is correctly derived from the previous chain hash + content hash.
- Each checkpoint's document chain hashes match the actual document histories.
Hardened tamper detection
Verification is hardened against the ways a history could be forged or silently degraded:
- Torn seals — a partially written version or checkpoint (from a crash or interrupted write) is flagged, not trusted as complete.
- Tamper — editing any stored version, hash, or checkpoint breaks the derived chain and is reported.
- Races — concurrent writes cannot leave the chain in a half-updated state that passes verification.
- Rebuild-laundering — a rebuilt checkpoint history is validated against the recorded per-document histories, so tampered content cannot be "washed" into an apparently valid chain by rebuilding.
Missing change-log patch = hash mismatch
If a per-version change-log (unified diff) is missing, the affected version reconstructs to empty content, which no longer matches its recorded content_hash. This surfaces as a content_hash_mismatch failure rather than passing silently. A gap in the change-log chain is treated as tampering, not as an absent-but-fine version.
Confirmed in the inspected build: an absent diff is read as "", hashes to the empty-content hash, and fails the content_hash_mismatch check.
Verification reports these mismatch reasons: content_hash_mismatch, chain_hash_mismatch, checkpoint_hash_mismatch, and cross_chain_mismatch; a failure raises an IntegrityError (code INTEGRITY_ERROR).
Server-side enforcement on governed remotes
On governed remotes (hosted nests), writes are routed through the governed write path so that every write is versioned and hash-chained server-side — a client cannot fabricate history that the server will accept. ctx verify on the client is a local check; the governed remote maintains the authoritative chain.
CI integration
Run ctx verify in your CI pipeline to ensure vault integrity on every commit:
# GitHub Actions example
- name: Verify vault integrity
run: ctx verify
Verification is idempotent and read-only — it produces no file changes.
Related pages
- Nest CheckpointsA nest checkpoint is an atomic, immutable snapshot of the entire vault — the Context Nest equivalent of a git commit.
- Versioning & IntegrityContext Nest provides a tamper-evident version history for every document, with cryptographic hash chains and vault-level checkpoints.
- Storage ModelVersion history uses a keyframe + change-log model for storage efficiency. Keyframes are full snapshots stored as separate vN.md files; every intermediate…
- Context Nest SpecificationThe Context Nest Specification is the canonical reference for the protocol. It defines the complete format, rules, and behavior that implementations must…
- Remote & Governed NestsA nest does not have to live on your local disk. ContextNest can register remote nests and route reads and writes to them over MCP — the same ctx commands…