Change Principles¶
Changes to bijux-canon-runtime must make authority more explicit. A new
executor, store, policy, or interface is safe only when the runtime can still
explain what was declared, what was admitted, which effects were permitted,
which checks ran, why the final verdict followed, and what a later replay may
compare.
flowchart TD
C[Proposed runtime change] --> A{Changes authority or policy?}
A -- yes --> P[Update manifest, plan, decision evidence, and refusal tests]
A -- no --> E{Changes execution, effects, or persistence?}
P --> E
E -- yes --> T[Update event, recovery, idempotency, and store evidence]
E -- no --> R[Check replay and interface impact]
T --> R
R --> V{Can the governed verdict be reconstructed?}
V -- yes --> G[Accept with focused evidence]
V -- no --> X[Reject or redesign]
Preserve the authority chain¶
Manifest validation, resolution, planning, authority checks, execution, verification, arbitration, finalization, and persistence are distinct decisions. Do not bypass one by importing the outcome of another. Every authority-changing path needs an explicit refusal result and retained evidence for both positive and negative decisions.
Lower-package artifacts retain their original meaning. Runtime may require, compare, or reject ingest, index, reason, and agent evidence; it must not reimplement their normalization, ranking, support, or lifecycle semantics.
Preserve mode semantics¶
plan, dry-run, live, observe, and unsafe are governed modes rather
than convenience flags. A change must state which steps, effects, persistence,
checks, and verdicts are permitted in each affected mode. Never allow an
observer or dry run to acquire live effects through a shared helper.
Unsafe execution must remain visibly unsafe in the plan, event record, stored configuration, diagnostics, and result interpretation. It must not be promoted to certifiable merely because execution completed.
Preserve effect and recovery honesty¶
The DuckDB execution store provides durable local state under a single-writer lock. It does not create a distributed transaction with external systems. Changes involving effects must define idempotency, receipt capture, retry behavior, crash windows, and the classification of an effect whose outcome is unknown.
Recovery must proceed from retained checkpoints and events. It must not infer that an absent local completion event means a remote effect did not occur.
Preserve replay meaning¶
Dataset identity, policy fingerprint, determinism level, entropy consumption, replay envelope, and acceptability threshold are part of the historical run. Do not evaluate replay under silently changed policy. A compatibility rule may admit declared evolution, but the rule and resulting diff must be retained.
Replay comparisons must distinguish exact equality, admitted variance, drift, and non-certifiability. A successful comparison covers only the captured contract; it is not evidence that an external provider or environment was globally unchanged.
Preserve persistence invariants¶
Store changes require explicit migration and compatibility behavior. Readers must not observe a partially finalized trace as accepted state. Writers must respect the single-writer contract, and migrations must preserve tenant, run, policy, dataset, event-order, and replay identities.
Do not broaden storage into runtime authority. A record existing in DuckDB does not make it admissible; the retained decision and its evidence do.
Keep ownership in the right package¶
| Change concerns | Owning surface |
|---|---|
| parsing, normalization, chunks, or embeddings | bijux-canon-ingest |
| retrieval contracts, ranking, or backend capability | bijux-canon-index |
| claims, support, reasoning traces, or reasoning verification | bijux-canon-reason |
| roles, providers, lifecycle, or convergence | bijux-canon-agent |
| manifest admission, cross-package policy, effects, arbitration, persistence, or workflow replay | bijux-canon-runtime |
Composition is runtime's responsibility; semantic duplication is not.
Evidence expected with a change¶
| Changed surface | Minimum focused evidence |
|---|---|
| manifest or resolution | structural rejection, semantic refusal, and deterministic plan tests |
| authority or verification policy | accepted, rejected, and non-certifiable fixtures |
| run mode | per-mode effect, event, persistence, and unsafe-warning tests |
| executor or external effect | idempotency, partial failure, retry, and unknown-outcome tests |
| DuckDB schema or store | migration, single-writer, crash recovery, and read-after-finalize tests |
| replay contract | exact, bounded, policy-mismatch, dataset-mismatch, and drift tests |
| CLI | exit, structured output, persisted state, and diagnostic tests |
| HTTP schema or handler | schema-hash, contract, implemented-status, and failure-envelope tests |
Update public examples and artifact descriptions whenever an operator would observe different policy, mode, event, verdict, replay diff, or recovery state.
Refuse the change when¶
- a well-formed input can reach effects before semantic admission;
- a lower-layer success is treated as whole-run acceptance;
- dry-run or observer execution can cause live effects;
- unsafe execution can appear certifiable without explicit qualification;
- a crash window or unknown external effect is hidden;
- replay uses changed policy or data identity without reporting the mismatch;
- a stored trace can be mutated after finalization;
- HTTP documentation claims execution that still returns
501; or - runtime becomes a holding area for unrelated late-stage logic.
A sound change expands runtime capability while making the authority decision and its retained evidence easier to reconstruct.