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.