CAIN-42 CAIN Studio
AETHER-33 free until 2027-01-01 governed agent memory docs measured 33 invariants homepage

What is checked, every run

The 33 invariants

Thirty-three checks executed against the real engine and a real database. An exception is a failure, not a pass.

Why invariants rather than a feature list

A feature list says what the author intended. An invariant says what the machine will not allow. Each of the 33 below is a function that manipulates a real tenant in a real SQLite file and asserts an observable outcome. GET /invariants runs all of them now and returns per-check detail, including failures.

The checks

Run at 2026-11-03T12:50:24Z · 33/33 passed in 179.23 ms

IDCheckResultDetail
A33-01tenant_isolation_readpasscross-tenant get refused
A33-02tenant_isolation_searchpasstenant B searched A's token and saw 0 hits
A33-03no_authority_from_memorypassevery memory view and hit is annotated non-authoritative
A33-04injection_quarantined_on_writepassstatus=quarantined reason="matches instruction-injection family 'OVERRIDE'"
A33-05quarantined_not_returned_by_defaultpassdefault search returned 0 quarantined hits
A33-06quarantine_visible_when_explicitly_askedpassexplicit search listed 1 hit(s), text withheld
A33-07quarantine_release_requires_named_humanpassblank reviewer and missing reviewer secret refused
A33-08quarantine_release_is_auditedpassaudit actions=['release', 'write']
A33-09released_memory_becomes_searchablepassafter release, search returned 1
A33-10content_hash_is_stablepass56d3e1e3397f5466...
A33-11tombstone_survives_forgetpassrow survives with status=deleted
A33-12deleted_text_is_erasedpassstored text/terms cleared and view hides text
A33-13deleted_memory_not_searchablepasssearch returned 0
A33-14deleted_memory_not_reinstated_by_searchpasshits=[]
A33-15ttl_expires_memorypassexpired memory excluded from search, still addressable by id
A33-16chain_valid_after_writespassentries=5 head=fda4910dcd081c6b...
A33-17chain_detects_edited_entrypassedited seq=28 -> entry_hash does not match its contents
A33-18chain_detects_truncationpassdeleted tail still walks, but fails against the recorded head
A33-19write_log_is_append_onlypassprior seqs preserved as a prefix ([35, 36, 37] -> [35, 36, 37, 38])
A33-20provenance_declared_when_source_givenpassdeclared/source_attached
A33-21unattributed_memory_is_unverifiedpassunattributed/unverified
A33-22contradiction_is_flaggedpassflags=[{'memory_id': 'mem_8687d484cf6d4dd9', 'similarity': 1.0, 'resolution': 'unresolved', 'note': 'lexical overlap with opposite negation polarity; review, not a verdict'}]
A33-23contradiction_is_not_resolvedpassnew memory kept active; every flag marked unresolved
A33-24contradiction_does_not_delete_priorpassprior memory untouched
A33-25recall_is_deterministicpassidentical order across 2 runs (5 hits)
A33-26recall_reports_bm25passranking=Okapi BM25 (k1=1.5, b=0.75) scores_desc=True
A33-27tag_filter_is_conjunctivepassboth tags -> 1, superset -> 0
A33-28empty_query_rejectedpassblank queries refused
A33-29empty_text_rejectedpassblank memories refused
A33-30duplicate_text_gets_distinct_idspasssame content hash, distinct identities (no silent dedupe)
A33-31timestamps_non_decreasingpass1793710224.000 <= 1793710224.002
A33-32audit_covers_every_memorypass4 memories, 4 write entries
A33-33spaces_index_consistentpassspaces={'s1': {'space': 's1', 'active': 2}, 's2': {'space': 's2', 'quarantined': 1}}

How to read a failure

A failing check is evidence, not noise. The response names the check, the detail string and the milliseconds it took. Nothing in this service reports a pass for a check that raised — the runner catches every exception and records passed: false.

AETHER-33 is a product over CAIN-42's governed-memory stack, not a new architecture moat. Memory never carries authority: every response is annotated grants_authority: false. No third-party audit has been performed. Limits · FAQ · what is live now