Skip to content

Change Principles

Changes to bijux-canon-reason must preserve the path from a declared problem to a reviewable claim. More capable planning or generation is useful only when the retained record remains sufficient to inspect the inputs, reconstruct the execution, locate every support span, and understand why verification passed or failed.

flowchart TD
    C[Proposed reasoning change] --> M{Changes a public model?}
    M -- yes --> A[Update schemas, canonicalization, examples, and compatibility tests]
    M -- no --> B{Changes execution or support semantics?}
    A --> B
    B -- yes --> T[Update traces, bundles, replay fixtures, and invariant checks]
    B -- no --> O[Confirm ownership remains local]
    T --> O
    O --> R{Can a reviewer challenge the result from retained artifacts?}
    R -- yes --> E[Accept with focused evidence]
    R -- no --> X[Reject or redesign]

Preserve content-addressed meaning

Identifiers, canonical JSON, trace ordering, byte spans, and digests are part of the reasoning contract. A change that alters any of them must make the change observable through versions, schemas, or deliberately changed fingerprints. Never preserve an old identifier for semantically different content.

Support must remain byte-addressable. A document URI, chunk identifier, or human-readable quotation alone is not enough: the retained evidence bytes, exact span, and snippet digest provide the independently checkable connection.

Preserve explicit outcomes

insufficient_evidence is a valid governed result. Do not turn it into an exception, silently drop it, or replace it with an unsupported answer. Keep these states distinct:

  • the specification or artifact is invalid;
  • execution failed before a reasoning result existed;
  • execution completed without enough evidence;
  • a claim was proposed but failed verification;
  • the record passed its configured structural and grounding checks.

A passing report must not be described as proof of source authority, completeness, calibrated confidence, or real-world truth.

Preserve the plan, trace, and verification chain

Planning changes require fixtures that prove dependency order and stable plan identity. Execution changes require typed trace evidence, including failure and tool-return paths. Claim changes require support and status coverage. Verification changes require both passing and deliberately failing artifacts, with failure identifiers that remain useful to operators.

Replay must continue to use frozen tool returns and pinned retrieval inputs. Running the same question against live tools is a new execution, even if its seed and visible answer match.

Keep ownership in the right package

Change concerns Owning surface
parsing, normalization, chunk creation, or embeddings bijux-canon-ingest
retrieval contracts, backend capability, ranking, or index isolation bijux-canon-index
plans, claims, support, traces, verification, or reasoning replay bijux-canon-reason
role scheduling, provider calls, or convergence policy bijux-canon-agent
run admission, cross-package policy, effects, or workflow acceptance bijux-canon-runtime

Moving logic out of reason is appropriate when ownership truly changes. Moving it merely to avoid documenting a reasoning invariant hides the contract and is not an architectural simplification.

Evidence expected with a change

Changed surface Minimum focused evidence
Pydantic model or canonical form round-trip, rejection, and stable-identity tests
plan construction dependency validation and deterministic fingerprint tests
trace event or ordering canonical JSONL and trace-fingerprint tests
evidence or support reference byte-span, digest, missing-file, and tamper tests
verifier positive and negative invariant fixtures with stable failure output
replay frozen-runtime comparison and missing-input failure tests
CLI or HTTP representation contract and artifact-equivalence tests for the affected surface

Update the reader-facing examples and artifact descriptions whenever a reviewer would observe different behavior. Compatibility aliases may delegate to the canonical interface; they must not acquire independent semantics.

Refuse the change when

  • a claim can no longer be traced to retained support bytes;
  • a fingerprint can remain unchanged while its meaning changes;
  • replay requires an unrecorded live dependency;
  • verification errors are weakened into warnings for convenience;
  • provider output or retrieval rank is treated as verified reasoning;
  • a new interface can produce results that the canonical artifact contract cannot represent; or
  • the change makes a reasoning result harder to inspect or challenge.

A sound change increases capability without reducing the evidence available to the next reviewer.