Bijux Core¶
Bijux Core is the execution foundation for two separate public commands:
bijux, a command runtime for applications and plugins, and bijux-dag, a
local-first workflow runtime for validated graphs, retained evidence, replay,
comparison, and verification.
They share repository governance and release evidence. They do not share one executable or one installation contract.
Choose The Product First¶
| Product | Use it for | Distribution boundary | Start here |
|---|---|---|---|
bijux |
mounted apps, plugins, layered configuration, diagnostics, history, memory, and REPL workflows | Rust crate and Python distribution; it does not install bijux-dag |
CLI handbook |
bijux-dag |
graph validation, planning, execution, evidence retention, cache explanation, replay, comparison, and verification | Rust crate family and command; it does not provide the bijux plugin or REPL runtime |
DAG handbook |
The private bijux-dev control plane generates and checks repository evidence.
It is maintainer tooling, not a third public runtime.
Execution Evidence Is A Product Surface¶
bijux-dag does not reduce a workflow to a final exit code. A finalized run
retains the identities and observations needed to ask what was authored,
planned, executed, consumed, produced, cached, or promoted.
flowchart LR
graph["Authored graph"] --> validate["Validate and canonicalize"]
validate --> plan["Lowered execution plan"]
plan --> execute["Backend execution"]
execute --> nodes["Node traces and attempts"]
nodes --> artifacts["Verified artifacts and lineage"]
artifacts --> run["Finalized run bundle"]
run --> replay["Replay, compare, and verify"]
The evidence has a trust order. Manifests and graph snapshots establish run and structure identity. Node traces, attempt records, and input/output indexes establish execution behavior. Digests and producer fingerprints establish artifact identity. Summaries and visualizations help investigation but do not replace the underlying records.
Identity Is Deliberately Plural¶
No single fingerprint proves that two workflow runs are equivalent.
| Identity | Question it answers | What still needs separate evidence |
|---|---|---|
| graph fingerprint | is canonical authored structure equal? | plan, environment, inputs, and output |
| planner fingerprint | did graph lowering produce the same executable plan? | runtime policy and external state |
| execution fingerprint | is execution-relevant work equal? | undeclared ambient state and external side effects |
| declared-environment fingerprint | is the declared node environment equal? | the complete host environment |
| cache identity | is one node result eligible for exact reuse? | retained payload integrity and business equivalence |
| artifact digest and producer identity | are retained output bytes and producer equal? | scientific or business meaning |
This separation prevents “same DAG” from being used as a shortcut for “same run” or “same result.”
Read A Run As A State Machine¶
A workflow is not simply running or successful. Planning, attempts, artifact verification, and finalization create distinct evidence states.
stateDiagram-v2
[*] --> Declared
Declared --> Rejected: graph or policy invalid
Declared --> Planned: canonical plan accepted
Planned --> Executing: backend starts attempts
Executing --> Partial: interruption or node failure
Executing --> Completed: required nodes terminal
Partial --> Resumed: governed continuation
Resumed --> Executing
Completed --> Finalized: indexes and evidence close
Finalized --> Verified: retained bundle passes checks
| State | Strongest justified claim | Evidence still required for the next state |
|---|---|---|
| declared | authored graph exists | canonical validation and policy decision |
| planned | executable structure and identities resolved | backend attempt evidence |
| partial | some attempts and artifacts exist | terminal node population, continuation decision, and completeness checks |
| completed | required work reached terminal states | finalized manifests, indexes, lineage, and integrity |
| finalized | the run bundle is closed for review | independent bundle verification or comparison |
| verified | retained evidence satisfies the selected verification contract | domain acceptance, if the workflow supports a scientific or business claim |
A process exit cannot skip finalization. Partial artifacts remain useful for diagnosis, but they do not become outputs of a completed run until the owning indexes and terminal-state rules accept them.
Explain Retry, Resume, Cache, And Replay Separately¶
These mechanisms all avoid repeating some work, but their trust contracts are different.
| Mechanism | Reuses | Required identity and decision |
|---|---|---|
| retry | the same node intent after an unsuccessful attempt | attempt ordering, retry policy, prior failure, and new terminal state |
| resume | retained state from an incomplete run | source run, eligible node population, continuation policy, and preserved history |
| cache | a previously completed node result | exact cache key, producer fingerprint, payload integrity, and cache decision reason |
| replay | retained evidence or declared execution under a comparison contract | source bundle, replay mode, protected source evidence, compared fields, and verdict |
A retry must not erase the failed attempt. Resume must not present old work as newly executed. A cache hit is not proof that two whole workflows are equivalent. Replay “match” means only that the registered comparison fields agree; environment, external effects, or domain meaning remain separate unless the replay contract names them.
Treat Cancellation And Deadlines As Terminal Evidence¶
Cancellation, timeout, worker loss, and caller abandonment are not equivalent to work that never started. Work may have acquired resources, emitted artifacts, mutated external state, or completed after the caller stopped waiting.
flowchart LR
admitted["Admitted work"] --> started["Attempt started"]
started --> signal["Cancel or deadline signal"]
signal --> stopped["Owned work stops and resources close"]
signal --> unknown["External effect or worker state unknown"]
stopped --> terminal["Typed terminal record"]
unknown --> reconcile["Reconcile before retry"]
reconcile --> terminal
A useful terminal record retains who requested cancellation, when the signal was observed, which attempts and descendants stopped, cleanup outcomes, artifacts already committed, external-effect certainty, and whether retry is safe. A client-side timeout is not proof of server-side cancellation, and a cancelled parent does not prove every child or adapter stopped.
Keep External Effects Outside Reproducibility Claims¶
A run can reproduce its retained files while an external side effect differs. Messages, remote API mutations, database writes, notifications, and actions in an operator-controlled system have identities and commit semantics outside the run directory.
| Effect question | Evidence required | Unsafe inference |
|---|---|---|
| was the effect declared? | authored effect contract and policy decision | declaration proves the process obeyed it |
| was an attempt made? | node attempt, request identity, target, and timing | attempt proves the remote system committed it |
| was it accepted remotely? | remote receipt, transaction, object, or idempotency identity | acceptance proves downstream business completion |
| may a retry repeat it? | operation-specific idempotency or deduplication contract | identical node inputs make repetition harmless |
| did resume inherit it? | source attempt state and explicit continuation decision | missing local output means no external effect occurred |
| can replay reproduce it? | replay mode and a deliberately controlled effect adapter | matching retained evidence recreates remote history |
flowchart LR
intent["Declared node intent"] --> local["Local attempt evidence"]
local --> remote["External system decision"]
remote --> receipt["Remote identity or receipt"]
receipt --> reconcile["Run-to-effect reconciliation"]
local -. "timeout or interruption" .-> unknown["Effect state unknown"]
unknown --> reconcile
An interrupted call may have committed remotely before the local receipt was persisted. The safe terminal state is then unknown until the external identity is reconciled. Core's declared-effect policy can deny or shape known effects, but it cannot make an arbitrary external operation atomic with run finalization. Workflow authors must choose effect-specific idempotency, compensation, or human reconciliation where the domain requires it.
Treat Exactly-Once As An End-To-End Claim¶
A scheduler can ensure that it admits one logical node identity, but it cannot promise one external effect unless every boundary from attempt creation to the remote commit participates in the same deduplication or transaction contract.
| Boundary | Evidence needed for an exactly-once claim |
|---|---|
| logical work | stable operation identity independent of worker attempt |
| dispatch | durable record of which operation was offered to which executor |
| adapter | deterministic mapping from operation identity to remote idempotency identity |
| remote system | documented deduplication or transactional commit semantics and retention window |
| acknowledgement | receipt bound to the committed object or transaction, not only request acceptance |
| reconciliation | query that distinguishes committed, absent, conflicting, and indeterminate state |
When any boundary lacks that contract, describe the narrower guarantee: at-most-once attempt, at-least-once delivery, idempotent effect within a named window, or reconciled completion. “Exactly once” must not be inferred from a single local terminal record while acknowledgements, retries, or remote state can be lost independently.
Distinguish Staging From Promotion¶
Run-local outputs, verified artifacts, and promoted artifacts are different states. Atomic writes protect governed records from partial filesystem content; they do not authorize an output for downstream use. Promotion needs the source digest, destination, policy decision, and resulting destination digest. A failed promotion leaves the verified run evidence intact and the delivery claim incomplete.
Runtime Layers¶
| Layer | Responsibility |
|---|---|
| DAG core | parsing, validation, canonicalization, planning, and semantic graph identity |
| DAG runtime | execution, retries, policy, cache decisions, replay, and diagnostics |
| DAG artifacts | storage layout, integrity, retention, lineage, and evidence identity |
| DAG application | orchestration and response shaping for user workflows |
| DAG command | the installable bijux-dag interface |
| command runtime | the independent bijux application, plugin, configuration, and REPL surface |
The split makes ownership reviewable. Artifact integrity does not belong inside command rendering; graph semantics do not belong inside a backend adapter; maintainer release policy does not become a hidden public runtime dependency.
Execution Security Boundary¶
bijux-dag provides policy gates, rooted evidence storage, validated output
paths, environment shaping, and backend-specific controls. It is not a
general-purpose host sandbox.
- The shell backend is for code already inside the host trust boundary. It does not firewall sockets, virtualize time, or block arbitrary host reads.
- Docker and Podman execution can enforce validated mounts and no-network mode through the selected container engine. This is not a virtual-machine boundary.
- Replay sandboxing protects retained source evidence from writes. It does not isolate the process being replayed.
- Effect policy fails closed on declared effects; it cannot detect a dishonest or incomplete declaration after process launch.
Read Execution Security And Isolation before using a backend as a security control.
Release Claims Stay In Lanes¶
Core distinguishes what is stable from what is callable, simulated, maintainer-only, or not released.
| Lane | Meaning |
|---|---|
| stable | documented commands and explicitly supported execution contracts |
| experimental | callable behavior outside the compatibility promise |
| simulated | modeled namespaces that require an explicit feature gate |
| internal | maintainer routes unavailable as public product behavior |
| unreleased | future service, worker, federation, or broad scheduler claims not present in the product contract |
The machine-readable release truth table in the Core repository is the authority. Future-direction material describes promotion criteria; it does not silently widen the current product.
Verify A Core Claim¶
| Claim | Evidence route |
|---|---|
| a command is public | visible help, owning handbook, package boundary, and release artifact |
| a graph is valid | canonical validation result and graph identity |
| a run completed | finalized manifest, node terminal states, and required evidence layout |
| an output belongs to a run | node and root output indexes, digest, producer identity, and lineage |
| a cache hit is safe to reuse | exact cache identity plus retained payload verification |
| a replay matches | the documented replay comparison fields plus separately inspected environment and artifact evidence |
| a backend is isolated | the backend-specific enforcement matrix, selected controls, and unprotected surfaces |
Diagnose A Surprising Output¶
Work backward from the output digest and producer identity to the node attempt, execution fingerprint, lowered plan, and authored graph. Then inspect cache or resume decisions and the declared environment before rerunning. This order distinguishes an unexpected byte sequence from an unexpected producer, execution path, input, or graph interpretation.
flowchart RL
output["Output digest"] --> producer["Producer node + attempt"]
producer --> execution["Execution fingerprint"]
execution --> plan["Planner fingerprint"]
plan --> graph["Graph fingerprint"]
producer --> reuse["Cache, resume, or retry decision"]
execution --> environment["Declared environment + backend"]
Do not start by comparing rendered summaries. They intentionally omit parts of the evidence bundle and cannot establish lineage or reuse eligibility.
Core's Boundary In The Family¶
Core owns execution semantics and evidence mechanics. It does not decide what
a protein claim means, which pollen records belong in a curated database, how
an Atlas API authorizes a consumer, or which shared workflow is canonical
across every repository. Those authorities remain with domain repositories,
service owners, and bijux-std.
Continue with Operational Assurance to compare execution evidence with service and publication evidence, or Security Model to place Core's isolation guarantees in the wider trust model.