Orthogonal result model

SemanticResult[T] and ResultTensor keep independent axes for core presence/status, semantic domain, execution, observation, operation decision, representation, compilation, and ambiguity. Stable integer codes are explicit; enum declaration order has no serialization meaning, and unknown codes fail closed.

Every result also has a ResultOrigin. ASSERTED_INPUT and EXTERNAL_OBSERVATION make no floating-runtime claim; EXACT_COMPUTATION records an exact operation; FLOATING_COMPUTATION requires an immutable ExecutionEvidence; and legacy or incomplete lineage is explicitly DESERIALIZED_LEGACY or UNKNOWN_UNQUALIFIED. Exact semantic identity, payload origin, and floating execution evidence are separate claims.

ExecutionEvidence binds a registered floating-profile identifier to its canonical SHA-256 and, for provider-backed runtimes, an optional runtime contract SHA-256. The registry is the single source of truth for backend, dtype, device/provider, rounding, and supported operators. An asserted result may omit evidence; a computed floating result may not. A result with no payload does not carry payload-execution evidence. Arbitrary-callable composition is always unqualified; only the closed strict operation set enters the validated Python execution path. Custom profile evidence requires an explicitly supplied immutable registry both when it is created and when serialized data is loaded.

Exact bottom is PRESENT + SEMANTIC_BOTTOM with no numeric payload. A floating fault is NO_CORE + NUMERICAL_FAULT. A finite payload may simultaneously be censored and operationally rejected. No global precedence enum erases those facts.

ResultTensor stores internal finite fill values where a payload is absent, but status tensors—not fill values—carry meaning. Its named masks distinguish partial bottom from all-bottom, faults, missingness, invalid observations, rejection, ambiguity, refusal, and representation faults. The mandatory scalar and tensor arithmetic paths consume within-axis priorities from the packaged composition-v1.json table. A non-fault NO_CORE input, such as missing observation or exact task-domain invalidity, remains NO_CORE without acquiring a numerical-fault cause. The tensor contract also carries fixed-width exact-zero-evidence and cause codes. Elementwise evidence may be supplied only through ExactZeroTensorEvidence with a certificate-manifest identity for proven-zero cells. The mandatory elementwise arithmetic fragment shares the scalar composition tables; broad reductions and sparse/zero-skipping behavior are deferred.

Scalar finite construction accepts finite integers, floats, and canonical fractions.Fraction values. Arbitrary objects, strings, context-sensitive decimal values, and non-finite NumPy scalars are refused. The Python type of a zero payload never proves exactness: direct typed division produces semantic bottom only for ExactZeroEvidence.PROVEN_ZERO with a certificate. An uncertified 0 or 0.0 produces ambiguous rejected NO_CORE with a machine-zero cause. Tensor exact-zero codes are defensively copied and integrity-checked before composition so post-validation mutation cannot upgrade machine evidence to semantic bottom.

ResultTensor is a working, backend-native object. It breaks constructor aliasing and guards all arrays with an integrity digest, but a Torch working payload remains usable by autograd and therefore is not durable evidence. Call freeze_evidence() at serialization, monitoring, reporting, checkpoint, or external API boundaries. The returned ResultTensorSnapshot is detached, CPU-canonical, storage-independent, read-only, size-bounded, and digest-bound. Only snapshots have canonical tensor serialization.

Scalar serialization schema v2 stores origin plus the complete evidence object. Strict loading rejects schema v1; SemanticResult.from_legacy_dict() is the explicit compatibility path and always returns unqualified legacy origin. See ADR-0016 and ADR-0017 for the rationale and threat model.

Legacy numeric rendering and merged masks are opt-in lossy projections and emit a warning naming the lost distinctions.