Skip to content

Compatibility Matrix

bijux-dag accepts only declared compatibility lanes and refuses unknown versions before interpreting payload contents. The machine-readable authority is contracts/foundation/version_compatibility_lanes.v1.json; the DAG-owned lanes below govern graph, run, index, and bundle readers.

Lane Semantics

Classification Meaning
current canonical identifier emitted and consumed by this release
accepted previous explicit alias or older identifier accepted by the current reader
refused known unsupported identifier that must fail closed

Acceptance means the reader recognizes the declared version. It does not promise that malformed payloads, missing required evidence, or incompatible semantics will be repaired automatically.

Compatibility Decision

flowchart LR
    input["Versioned graph, run, index, or bundle"]
    declared["Read declared identifier"]
    lane{"Compatibility lane"}
    parse["Parse current contract"]
    validate["Validate shape, semantics, and integrity"]
    accept["Accept for bounded use"]
    refuse["Refuse before interpretation"]

    input --> declared --> lane
    lane -->|current or accepted alias| parse --> validate
    lane -->|unknown or refused| refuse
    validate -->|complete| accept
    validate -->|malformed, incomplete, or corrupt| refuse

Version recognition is the first gate, not the last. Current identifiers still require full schema, semantic, path, and integrity validation before the payload can support execution, replay, or comparison.

DAG Compatibility Lanes

Surface Current identifiers Accepted previous identifiers Explicitly refused identifiers Executable evidence
graph schema and specification bijux-dag/v0.1 v1, v0.1, 0.1 v9, bijux-dag/v9 evidence/compat/graph_schema/
run manifest run-manifest/v0.1 none run-manifest/v0, run-manifest/v2 evidence/compat/run_dir/
run-dir format and artifact index run-dir-schema/v0.1 none run-dir-schema/v0, run-dir-schema/v2 evidence/compat/run_dir/
export bundle and proof bundle export-bundle/v0.1, proof-bundle/v0.1 none corresponding v0 and v2 bundle identifiers evidence/compat/export_bundle/

The graph spellings in the accepted column are aliases for the same retained graph contract, not four independent schema generations. Run manifests, artifact indexes, and replay bundles have no accepted predecessor lane in the current contract.

Producer And Consumer Direction

Writers emit only the canonical current identifier. Readers may accept the explicit previous aliases listed in the machine contract. This asymmetry keeps new output unambiguous while allowing a bounded read window.

Operation Required behavior
write a new graph, run, index, or bundle emit the current canonical identifier
read an accepted graph alias normalize it to the current in-memory contract without claiming a separate schema generation
read a future or refused identifier fail before trusting payload fields
migrate retained evidence write a new destination through an explicit governed migration; preserve the source
compare differently versioned evidence classify compatibility before semantic equivalence

Refusal And Migration

  • Reject an unknown or explicitly refused version before using its fields as trusted execution or replay evidence.
  • Preserve the declared version in diagnostics so an operator can identify the incompatible producer.
  • Do not silently rewrite retained runs or bundles in place.
  • Use an explicit migration command or governed import path only when the relevant evolution rulebook defines one.
  • Treat a future version as unsupported even when its JSON happens to resemble the current shape.

Refusal is a safety property: interpreting unknown retained evidence as current would make replay, integrity, and compatibility claims unreliable.

Cross-Product Boundary

The same machine contract also governs CLI command, output, and error envelopes, configuration schema registries, and product mount descriptors. Those are owned by the CLI handbook and are not duplicated here. A change to the shared contract must keep both product handbooks and their executable fixtures aligned.

Change Review

A compatibility change must update:

  • contracts/foundation/version_compatibility_lanes.v1.json
  • the relevant schema or evolution rulebook under docs/spec/
  • compatibility fixtures under evidence/compat/
  • the reader or migration implementation
  • this matrix and its governing tests

Adding an accepted predecessor is a deliberate compatibility expansion. Removing one or reinterpreting an existing identifier is incompatible and requires explicit release treatment.

Required Change Evidence

Decision Required evidence
add a readable alias emitting writer, consuming readers, normalization rule, and acceptance fixture
add a new canonical identifier schema or rulebook, current writer, reader behavior, refusal fixture, and release boundary
migrate retained evidence immutable source, governed destination writer, integrity comparison, and recovery path
remove an accepted identifier incompatible release treatment, retained-evidence impact, refusal fixture, and removal notice
compare different identifiers compatibility classification before cache, replay, export, import, or semantic comparison

Every change must identify the first emitting release and the conditions under which an older read lane may be removed. Similar JSON shape is not compatibility evidence.