Architecture¶
The bounded projection kernel in one picture, then the pieces. Depth lives in the framework reference — this page tells you which document to open.
The kernel in one diagram¶
Solid boxes are merged today. Dashed boxes are the host-integration mechanism owned by PRP-008: hydrate a declared, versioned closure into an all-or-nothing snapshot; run the unchanged kernel over it; commit a typed proposed effect set back only if the source still matches the recorded versions. Nothing inside the kernel box performs a network read, ever — that is the anti-wrapper boundary, enforced mechanically (make check-boundary, make no-model-gate).
One transaction, end to end¶
text ──Bridge──▶ JSON (schema-forced) ──gate──▶ base facts
│ forward chain (Rete-lite, in-core)
▼
derived facts + proofs
│ constraint re-check
▼
commit ── snapshot ── trace append ── subscribers
Everything after the Bridge call is allocation-light Rust over interned IRIs. Python and (planned) WASM hand a whole input over and get a whole outcome back — there is no cross-language chatter inside a transaction, a lesson measured in the sigil-lang project this framework inherits from.
The pieces and where they live¶
| Piece | Crate / package | Read |
|---|---|---|
| Turtle parsing, RDFS-plus profile validation, schema and subsumption, imports and anchoring | horismos-core::ontology |
The Ontology |
| The typed instance store, five-check gate, provenance, snapshots, diff, binary form, queries | horismos-core::world |
The World |
| Rule model, the 11 condition operators, naive and Rete-lite matchers, forward and backward chaining, proof trees | horismos-core::reason |
Reasoning |
The workflow interpreter (Agent), step types, tool contracts and effect validation |
horismos-core::workflow |
Workflows, Tools |
The Bridge trait — a pure interface, no provider code |
horismos-core::bridge |
The Bridge, LLM Boundaries |
horismos.trace/1 and /2, emission, migration policy |
horismos-core::trace |
Traces |
| BDD verification with witnesses, assumption manifest, non-vacuity | horismos-core::verify (PRP-005) |
Verification |
MockBridge (the CI workhorse) and OpenRouterBridge (feature bridges-openrouter) |
horismos-bridges |
The Bridge |
| PyO3 extension — marshaling only, no logic | horismos-py |
Python API |
The horismos Python package: naming sugar over the native handle |
python/horismos |
Python API |
FHIR and coding-harness adapters, host SPI (ExternalSnapshot, ProposedEffectSet) |
new crates outside horismos-core (PRP-008) |
PRPs/PRP-008-standards-host-integration.md |
The invariants that make it a kernel¶
- Anti-wrapper boundary.
horismos-corenever depends onhorismos-bridges, a provider SDK, or the network.make no-model-gatebuilds and tests the core with--no-default-features --features verify;make check-boundarygreps the manifest. Red means the "runs with the LLM deleted" claim broke. - Determinism. No wall-clock, randomness, or hash-order dependence in inference.
horis:nowis stamped once per transaction. Two runs of the same input produce byte-identical trajectories, and the test suite asserts it. - One vocabulary end to end. The CURIEs an author writes are the CURIEs the API takes, the errors print, and the proofs render. No second naming system in the bindings (a generated-proxy design was prototyped and rejected on evidence;
PRPs/PRP-003-python-bindings/03-decision-instances.md). - Whole inputs in, whole outcomes out. Each Python call is one transaction: gate, chaining, fixed point, diff, all under one lock acquisition with the GIL released.
- Two wire contracts, versioned forever. The trace schema evolves only by minting a new version with a converter; the snapshot binary form has a versioned header.
- One world per case. A
Worldis a serial transaction stream; parallelism is many worlds sharing one immutableOntology. Under the projection model, one world per decision epoch.
Performance posture¶
Triage-scale targets (about 50 rules, hundreds of facts): gate-plus-chain transaction under 1 ms, prove/explain under 1 ms, load-plus-verify under 1 s, perception overhead under 5 ms on top of the model call. Criterion benchmarks are tracked from PRP-002 onward; adapter I/O is measured separately and never blended into kernel numbers. Scaling beyond that is measured, not promised — see Architecture internals.
Go deeper¶
Concepts for the nouns and the two principles; Architecture internals for the crate layout, the dependency invariant, and the concurrency model; Security & Trust for the five trust boundaries and what each one leaves to the deployer.