Parser and v3.0 trim-aware validator for CLM (Continuity Log Memory)
Project description
tunc-clm (Python)
Parser and v3.0 trim-aware validator for CLM (Continuity Log Memory). Pure Python, no runtime dependencies, type-hinted.
pip install tunc-clm
from clm import Document, validate_v3, validate_v3_with_filesystem
doc = Document.parse(open("MANIFESTO.clm").read())
assert str(doc) == open("MANIFESTO.clm").read() # round-trip byte-identical
report = validate_v3(doc)
print(f"{len(report.errors)} errors, {len(report.warnings)} warnings")
# Filesystem-aware variant cross-checks the sibling archive
report = validate_v3_with_filesystem(doc, base_dir=".")
CLI
clm validate path/to/file.clm
What CLM is for
CLM/3.0 is a write-ahead log for multi-session AI handoff threads. Four axes; this package implements two of them:
- Read retrieval — prose summary wins this axis; don't pick CLM for one-shot Q&A.
- Write cost — CLM wins by 4.2× at 100 sessions, 12.2× at 500. (See
experiments/v3/RESULTS-compounding-cost.md.) - Audit integrity — verbatim preservation, signed deltas. CLM by ritual.
- Tooling — parser round-trip + validator. This package implements axes 3 and 4 in Python; the Rust and TypeScript packages do the same.
See the main README for the full positioning, including links to the four review rounds where each marketing claim was iteratively narrowed by @copyleftdev's empirical work.
What this validator checks
Per SPEC.clm validation.posture.v3.0:
- Header declarations:
trim.mode,trim.config,archive.mode,archive.path - Trim-config grammar: keys / duplicates / missing values / unknown keys
- Lifecycle states A/B/C; declared offload via
(last X of Y archived)form - Sentinel placement (BEFORE entries, not after)
- Per-entry shape (
ROLL.CALLneeds· YYYY-MM-DD ·;DREAM.LOGneeds| YYYY-MM-DD |); malformed quarantined - Cross-doc sentinel symmetry (live ↔ archive)
- Archive structural check (must contain trim ARCHIVE sections, not just any file)
- Filesystem-aware variant (state.B → warning, state.C → error)
- Chained archive validation (warnings propagate from archive into live report)
Mirror of the Rust reference
This package mirrors clm-rs and is paired with clm-js. All three implementations validate the same set of behaviors against the same canonical artifacts (MANIFESTO.clm, SPEC.clm, the experiments/v3/ bench docs). 117 tests across all three.
Known limitations (parity with clm-rs v0.2.0)
Three follow-ups from Codex round-8 review apply equally:
[DECISIONS.ARCHIVE]cross-doc sentinel check is missing (symmetric gap to[ROLL.CALL.ARCHIVE]/[DREAM.LOG.ARCHIVE]).- Malformed lines in
decisions.livearen't quarantined (counted toward overflow). - Generator (
experiments/v3/gen_50_session.py) emits nonsense metadata for depths ≤ 5.
License
MIT.
Audit thread
CLM is itself an append-only audit-thread format. The thread for MANIFESTO.clm and SPEC.clm is at https://github.com/TUNC-AI/tunc-clm — read it like any CLM file: open, sign, append.
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 tunc_clm-0.2.2.tar.gz.
File metadata
- Download URL: tunc_clm-0.2.2.tar.gz
- Upload date:
- Size: 19.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c348683092f865a804fc6861a24449547762eededfa9f1d3a01601394fa2cca2
|
|
| MD5 |
958d61847bcc45883aa9df182b12de1b
|
|
| BLAKE2b-256 |
b9a3f17ae2a39b2ff9d5e01fa57fa9f0814c1cff3ed2048c547d3bf0493043f2
|
File details
Details for the file tunc_clm-0.2.2-py3-none-any.whl.
File metadata
- Download URL: tunc_clm-0.2.2-py3-none-any.whl
- Upload date:
- Size: 15.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
444339fbcb35cdc72b14e3fcb91c60baec3d7ac08d5180ae4ee85e4fb2010779
|
|
| MD5 |
d1febdec17f0dd6b4a80b45bab9573be
|
|
| BLAKE2b-256 |
552b32b87b8bc64b9d3b3ac5fc05825b6256c8eb190a70da9a7a5d58b0dccc03
|