Dependency Direction¶
bijux-canon-runtime is the outer execution authority for a canon flow. Its
dependencies point from durable contracts toward orchestration, execution,
persistence, and delivery. That direction keeps a FlowManifest intelligible
without a database, command parser, HTTP process, or concrete executor.
flowchart TB
interfaces[CLI and HTTP adapters]
application[application orchestration]
execution[runtime execution strategies]
verification[verification orchestration]
observability[observability and DuckDB adapters]
contracts[contracts and ontology]
model[immutable domain model]
core[authority, identifiers, errors, rules]
interfaces --> application
application --> execution
application --> verification
application --> observability
application --> contracts
execution --> contracts
execution --> model
verification --> model
observability --> model
contracts --> model
model --> core
The inward boundary¶
core, ontology, contracts, and model describe authority, identity,
manifests, plans, datasets, artifacts, policies, traces, and verification
records. They must remain usable as values and rules. They do not load files,
open DuckDB, parse command lines, call agents, or choose a runtime mode from
ambient configuration.
This boundary is what makes planning reviewable. A plan can be resolved and hashed before execution resources exist, and plan mode can return without allocating a run identifier or mutable trace.
Orchestration and execution¶
application owns complete use cases: resolve, prepare, execute, persist,
resume, and replay. It may coordinate the inner contracts with runtime and
storage capabilities, but it does not hide those capabilities behind global
state. A non-plan execution therefore receives a write store, policy, and
execution resources explicitly.
runtime.execution implements step ordering and mode-specific behavior. Its
executors consume resolved plans and authority-bearing contexts. They may emit
artifacts, evidence, reasoning, tool events, and verification inputs; they may
not redefine the plan contract or append directly to an already finalized
trace.
Verification is a sibling execution concern, not a property of an executor.
verification evaluates declared rules and arbitration policy over recorded
inputs. It must not call an agent to manufacture missing evidence or mutate the
artifact whose integrity it is deciding.
Adapters at the edge¶
observability.capture, observability.storage, and
observability.analysis adapt runtime values to clocks, traces, DuckDB, and
comparison reports. The domain model does not import those adapters. Read and
write storage capabilities are separate so inspection cannot acquire mutation
authority accidentally.
interfaces.cli and api.v1 translate caller input into application calls.
They may select configured adapters and render results, but they do not own
execution semantics. Compatibility distributions forward the canonical import
and command surfaces; they do not introduce a second implementation.
Cross-package direction¶
Ingest, index, reason, and agent produce governed inputs consumed by runtime. Runtime composes those contracts and records their use. It does not absorb their normalization, retrieval, claim-construction, or role-lifecycle rules. Conversely, those packages do not depend on runtime persistence or replay in order to define their own outputs.
The durable direction is:
ingest / index / reason / agent contracts
-> runtime manifest and plan
-> governed execution
-> retained trace and replay verdict
See the module map for concrete ownership and the execution model for the lifecycle built on this dependency structure.