ADR-0013: Canonical projective gauge

Status: accepted Date: 2026-08-29

Decision

The authoritative 0.7 gauge is canonical_l2_qpositive_v1. Coordinates are validated as finite, the all-zero tuple is rejected as REPRESENTATION_FAULT, and an overflow-safe promoted calculation normalizes the tuple to unit L2 norm. Global sign is chosen so Q >= 0; when Q == 0, the first non-zero numerator coordinate is the deterministic tie-breaker. Application orientation is a separate witness.

Strict thresholds consume the dimensionless normalized denominator score. The 0.6 canonical_denominator policy remains a versioned legacy gauge. Its thresholds cannot be transferred to the new gauge without a new calibration record.

Invalid or non-finite coordinates are isolated before differentiable normalization so a representation or execution fault cannot inject a non-finite gradient into valid samples. A declared shared-denominator coordinate axis is an executable representation contract. Generic schema-v3 export accepts that contract only from a model that declares the versioned shared_denominator_by_construction_v1 capability; otherwise export refuses before tracing. Denominator disagreement is also tensorized as REPRESENTATION_FAULT with a task-domain-invalid cause, so a certified model that violates its construction contract at runtime still fails closed in ONNX. This keeps trace-time Python validation from being mistaken for a runtime ONNX guard.

Consequences

Training, inference, calibration, bundle, benchmark, and export paths share one serialized policy. Positive or negative projective rescaling cannot change the decoded value/status after canonicalization. Representation validation precedes every ratio calculation.

The retained v0.6 raw-denominator loss helpers remain compatibility APIs and are not canonical-gauge threshold implementations. Claim-bearing 0.7 training, sampling, and benchmark paths consume the normalized denominator score or pass both projective coordinates through the canonical gauge. Exported custom shared-denominator models must either construct one denominator by design and declare the capability above, or remain unexportable under schema v3.