thesmos
θεσμόςWho may do what, answered as a proof anyone can re-check — never a claim you take on trust.
the admission law — who may; authority laid down, anchored in a signed root
https://github.com/Bitspark/thesmos ↗Why it exists
Every running system has to answer one question — who may do what? — and most answer it with a claim you have to trust: an access-control list, a token, a service that says yes. thesmos answers it the way the rest of the stack answers questions: with an account anyone can re-verify. It owns the authority vocabulary — the trust anchor (is_root, exactly one authority), the fact that carries its own warrant (signed_fact, signed with Ed25519), delegation (grant), and the one thing a rule may conclude (authorized) — together with the law that ties them together: the program that derives authorized from the root through a chain of grants, each gated by what it covers.
It is not a set of interfaces. The interfaces belong to logos — Theory, LeafVerifier, RuleAdmissibility. thesmos implements them, with real logic, as three cores (Go, Rust, TypeScript) pinned byte-for-byte by a shared conformance oracle.
A concrete example
A fact lives in the system as a signed_fact — a signer, a space, a predicate, and a body, carrying its own Ed25519 signature. To decide whether some request is authorized, thesmos builds the canonical proof: the cited signed facts, the grants that delegate authority from the root, and the covers_* clauses that say each grant actually reaches this op, predicate, and pattern. It then runs logos's check() over that derivation. The thesmos verify --authorize CLI does exactly this for a scenario and prints authorized, or reject: <code>: <detail> — a named reason like not_visible_in_projection when a cited fact isn't visible from the target space, never a silent denial.
Nothing here is taken on faith. thesmos never searches for the proof; it only checks one it is handed.
What it unlocks
Because thesmos invents no value model and no engine, it composes cleanly with the rest of the stack. A fact's body is an ontos value; a clause is a logos clause; admission is logos's check(). That keeps the law portable: the same authorization program, serialized once to canonical bytes, loads identically into all three cores.
The runtime that searches for authorization proofs — and stores the facts — is the sibling stele service, which drives logos's engine and applies thesmos's law as its check gate. thesmos is the law that runtime enforces. See where it sits in the stack.
What's next
The signature tier (tier-a) is the surface in production admission today. The freshness tier (tier-b) — whether every cited leaf is still active at a frontier — is split produces-vs-verifies: thesmos already ships the portable verifier (FreshnessVerifier over the active_leaf relation, with its merkle-inclusion-v1 proof primitive), while the active-set producer that emits signed heads stays in stele. The canonical production root is still a clearly-marked public placeholder; the real key is value-swapped in later via a key-generation ceremony in stele, with the format and every consuming mechanism unchanged.
Depends on
compiles or links against ontos
compiles against the ontos value model — ontos-core/ontos-codec git deps (versions pinned per core; the per-core skew is intentional — see ADR 0010, byte-agreement enforced by vectors/, not version strings), go.mod require github.com/bitspark/ontos, imports ontos_core::Value
depends on the published interface of logos
codes to logos's published checker SPI (logos-contract — the Derivation/checker types), not logos's engine; the authorization program logos checks
compiles or links against logos
the tri-core compiles/links logos's checker package — cli/{go,rs} + core/{go,rs} pin github.com/Bitspark/logos/contract/go and the logos-contract git dep; today only logos-contract is compiled, not the engine
compiles or links against logos-db
db-binding/go compiles/links the logos-db-seam package (the frozen FactView + CheckProfile injection points, ADR 0017) — requires github.com/Bitspark/logos-db/seam/go, never the engine runtime or the seam's store facet
Depended on by
compiles against thesmos's fact + authorization program — thesmos git dep (tag v0.3.2), imports github.com/Bitspark/thesmos/core/go/fact
the gate compiles against thesmos's fact program — direct go dep github.com/Bitspark/thesmos/core/go, imported as .../core/go/fact in internal/gate
the authority law kosmos enforces — grants evaluated for admissibility (direct go dep github.com/Bitspark/thesmos/core/go)
run-edge grant-chain verification compiles against thesmos's fact program — direct go dep github.com/Bitspark/thesmos/core/go v0.8.0
Examples involving thesmos
A worked walkthrough of one protected action — admitting a signed fact — as a gate whose account any party can re-check.
A walkthrough of one participant becoming usable by another written years later, through substrate-visible evidence alone — and where that story is realized today versus still a sketch.