Engine / Module / Store factoring
The runtime decomposes into three roles:
- Engine is the shared, immutable base — the shared schema (std + any base packages the workspace declared — including any vocabulary packages — plus the meta-axes those packages declared). The Engine is
Arc<SchemaStore>, mmap-friendly, and shareable across processes and threads. - Module is a typed, loaded
.oxbin. It owns the artifact’s structural content (symbol table, standpoint lattice, tier table, rules, queries, mutations) and is immutable for its lifetime. Many Stores may use one Module concurrently. - Store is the isolated execution context where facts live. One Store is one (tenant, fork) pair: it accumulates events through
mutateand answersquery.
A Store sees facts according to two filters: (1) tenant + fork scope — only events tagged with this Store’s tenant_id and fork_id, under the fork’s copy-on-write lineage rules (AsOf semantics — bitemporal point); (2) standpoint perspective — when a query names a standpoint, only events visible from that standpoint by the lattice ancestor relation.