COMPO · 12.01 · DEVIATION MAGNITUDE

Measure
the break.

12.01 формализует только величину отклонения для уже явным образом объявленного RuleBreakIntent. Геометрическая величина не создаёт намерение, не определяет качество tension, не расходует exception budget и не является score. Raw upstream measurements остаются у своих владельцев; 12.01 строит owner-qualified deviation descriptor поверх их evidence.

ModuleCompo 12.01
Scopedeviation magnitude
Intentconsume 12.00
Budgetdeferred 12.02
Scorenone
NextSTOP

Magnitude is geometry — not permission

00 / contract

12.01 starts only after the Topic12 intent layer exists. An upstream relation can be geometrically offset without being an intentional break; Topic12 therefore does not infer intent from magnitude.

INPUT

12.00 target + intent + explicit measurement evidence.

OUTPUT

deterministic deviation magnitude descriptor.

ZERO

legal value, distinct from N_A.

NO SCORE

larger/smaller is not better/worse.

VALID Topic12 chain: target evidence → explicit RuleBreakIntent → explicit upstream measurement evidence → explicit metric context → RuleBreakDeviationMeasurement FORBIDDEN: observed offset → infer intent nearest grid feature → implicit target large magnitude → stronger intention magnitude → score / budget / priority

12.01 owns the descriptor layer

01 / ownership

Raw grid/alignment geometry is not copied into new ownership. 12.01 owns the wrapper, metric conversion, magnitude descriptor, deterministic identity and diagnostic comparison semantics.

OWNS

12.01

DeviationSourceEvidence wrapper, MetricContext, optional normalization, numerical epsilon, magnitude descriptor, diagnostic comparison.

CONSUMES

8 / 9 / 10 / 12.00

Grid/alignment relation identity and raw owner-qualified measurement refs; target and explicit rule-break intent.

DEFERS

12.02–12.04

Protected relations, exception budget, candidate generation, justification, override scoring and final Topic12 vote.

Metric terminology.

Topic MAIN says “deviation metrics”. In 12.01 these are numeric geometric descriptors. They are not MetricResult scoring votes. owns_metrics=[] remains true for score ownership.

Three measurement kinds

02 / closed taxonomy

The taxonomy is deliberately small. Every kind has explicit raw semantics and no hidden nearest-feature search.

KindRaw evidenceMagnitude semantics
AXIS_OFFSET_1Daxis X/Y + signedDeltaRawabsolute metric displacement on one declared axis
VECTOR_OFFSET_2DdeltaXRaw + deltaYRawexplicit isotropic metric norm after owner-qualified axis scaling
SET_SPREAD_1Daxis X/Y + spreadRaw ≥ 0metric width of an upstream shared-axis coordinate set
No implicit nearest reference.

12.01 never asks “which grid line/cell is nearest?”. The target/reference must already be explicit in upstream evidence. Choosing the nearest feature would be candidate/selection logic, not measurement.

Raw values need lineage

03 / source evidence

The wrapper points to the upstream owner and observed snapshot. It does not become owner of the underlying grid or alignment relation.

DeviationSourceEvidence {
  sourceEvidenceRef,

  targetEvidenceRef,
  intentRef,
  targetFamily,
  subjectRefs[],

  sourceMeasurementRef,
  sourceOwnerRef,
  sourceModuleRef,
  observedSnapshotRef,

  measurementKind,
  axis?,

  signedDeltaRaw? ,
  deltaXRaw?,
  deltaYRaw?,
  spreadRaw?,

  sourceUnit,
  canvasRef,
  coordinateFrame,

  evidenceRefs[],
  confidence,
  provenance,
  status,

  mutationAllowed: false
}
Exact subject scope

subjectRefs must equal the canonical subject set of the corresponding RuleBreakIntent.

Snapshot-sensitive

Changing observed geometry requires a new observedSnapshotRef and changes source evidence identity.

No silent metric space

04 / metric context

Raw X/Y numbers cannot be combined into a 2D norm unless their conversion into one metric space is explicit.

DeviationMetricContext {
  metricContextRef,
  metricContextOwnerRef,
  metricSpaceRef,

  canvasRef,
  coordinateFrame,

  sourceUnit,
  metricUnit,

  xScaleToMetric,
  yScaleToMetric,

  evidenceRefs[],
  confidence,
  provenance,
  status,

  mutationAllowed: false
}
EXPLICIT EXAMPLE: sourceUnit = PX metricUnit = PX xScaleToMetric = 1 yScaleToMetric = 1 This still exists as an explicit context. FORBIDDEN: raw UV pair → hypot(u,v) → call it canonical isotropic distance unless an explicit metric conversion context defines the axis scales.

One magnitude formula per kind

05 / deterministic math

Signed components are preserved as evidence; magnitude itself is non-negative.

AXIS_OFFSET_1D, axis X: signedDeltaMetric = signedDeltaRaw × xScaleToMetric magnitudeMetric = abs(signedDeltaMetric) AXIS_OFFSET_1D, axis Y: signedDeltaMetric = signedDeltaRaw × yScaleToMetric magnitudeMetric = abs(signedDeltaMetric) VECTOR_OFFSET_2D: metricDeltaX = deltaXRaw × xScaleToMetric metricDeltaY = deltaYRaw × yScaleToMetric magnitudeMetric = hypot(metricDeltaX, metricDeltaY) SET_SPREAD_1D, axis X: magnitudeMetric = spreadRaw × xScaleToMetric SET_SPREAD_1D, axis Y: magnitudeMetric = spreadRaw × yScaleToMetric
Raw relation tolerance is separate.

12.01 does not subtract Topic10 visual/design tolerance and does not convert offset into “violation excess”. A non-zero magnitude can still be within an upstream tolerance. That decision stays with its owner.

Target family constrains measurement semantics

06 / compatibility

A measurement kind that is mathematically valid can still be semantically invalid for the selected target family.

Target familyAllowed kindAxis rule
COLUMN_GRIDAXIS_OFFSET_1DX only
MODULAR_GRIDAXIS_OFFSET_1D / VECTOR_OFFSET_2DX/Y for axis; null for vector
PAIRWISE_ALIGNMENTAXIS_OFFSET_1DX or Y exactly as upstream evidence
TEXT_BASELINE_ALIGNMENTAXIS_OFFSET_1DY only
SHARED_AXIS_ALIGNMENTAXIS_OFFSET_1D / SET_SPREAD_1DX or Y exactly as upstream evidence

Normalization is optional and explicit

07 / dimensionless descriptor

Raw metric magnitude is canonical. A dimensionless value may be useful for experiments/comparison, but the denominator cannot be silently selected.

DeviationNormalizationContext {
  normalizationRef,
  normalizationOwnerRef,

  normalizationKind,
  referenceScaleRef,
  referenceScaleMetric,
  metricUnit,

  evidenceRefs[],
  confidence,
  provenance,
  status,

  mutationAllowed: false
}
KindMeaning
DOMAIN_AXIS_EXTENTexplicit domain extent on the relevant axis
DOMAIN_DIAGONALexplicit metric domain diagonal
TARGET_LOCAL_SCALEexplicit owner-qualified local size associated with target
EXPLICIT_REFERENCE_LENGTHgeneric explicit reference length
normalizedMagnitude = magnitudeMetric / referenceScaleMetric referenceScaleMetric > 0 NO normalization context: normalizedMagnitude = N_A / null NOT: normalizedMagnitude = 0

Numerical zero is not design tolerance

08 / numerical stability

A tiny floating-point residual can be described as numerically zero without claiming that a visible deviation is acceptable.

DeviationNumericalPolicy {
  numericalPolicyRef,
  absEpsMetric,
  relEps
}
effectiveEpsMetric = max( absEpsMetric, relEps × max(1, abs(magnitudeMetric)) ) numericallyZero = magnitudeMetric <= effectiveEpsMetric IMPORTANT: numericallyZero != allowed numericallyZero != protected numericallyZero != budget-free numerical epsilon != visual/design tolerance

RuleBreakDeviationMeasurement

09 / output contract

The output is auditable, deterministic and mutation-free. Confidence records evidence quality; it is not tension strength.

RuleBreakDeviationMeasurement {
  deviationMeasurementRef,

  targetEvidenceRef,
  intentRef,
  sourceEvidenceRef,

  targetFamily,
  subjectRefs[],

  measurementKind,
  axis?,

  metricContextRef,
  normalizationRef?,
  numericalPolicyRef,

  metricDeltaX?,
  metricDeltaY?,

  magnitudeMetric,
  metricUnit,

  normalizedMagnitude?,

  numericallyZero,
  directionDescriptor,

  confidence,
  status,
  reasonCode,
  provenance,

  derivedFrom[],

  mutationAllowed: false
}

Axis direction

NEGATIVE / ZERO_WITHIN_EPS / POSITIVE.

Vector direction

VECTOR_2D. Components stay explicit; 12.01 does not reduce them to a preference-bearing angle.

Set spread

UNSIGNED_SPREAD. Spread has no sign.

0, N_A and INVALID are different

10 / status semantics

The module preserves the project-wide N/A != 0 invariant.

StatusMeaningMagnitude
OKValid intent-scoped measurement.May legally be 0.
N_ANo explicit intent / no source measurement / no metric context.null, never synthesized as 0.
INVALIDMalformed or incompatible lineage/units/axis/kind/context.null.
valid explicit intent + signedDeltaRaw = 0 → status = OK → magnitudeMetric = 0 no explicit RuleBreakIntent → status = N_A → magnitudeMetric = null These states are not interchangeable.

Comparison is diagnostic only

11 / same-context relation

12.01 may say one deviation is geometrically larger than another only when measurement semantics are comparable. It never says which is compositionally better.

Comparable only when: status OK on both same targetFamily same measurementKind same axis semantics same metricContextRef same normalizationRef state/value relation: LESS EQUAL_WITHIN_EPS GREATER INCOMPARABLE meaning: GEOMETRIC_DEVIATION_MAGNITUDE_ONLY NOT: preference quality score priority exception permission

Identity follows evidence and snapshot

12 / deterministic lineage

Order-insensitive evidence sets are canonicalized; observed geometry and conversion policy are identity-bearing.

sourceEvidenceRef = hash( targetEvidenceRef, intentRef, sourceMeasurementRef, sourceOwnerRef, sourceModuleRef, observedSnapshotRef, sorted(unique(subjectRefs)), measurementKind, axis?, raw measurement values, sourceUnit, canvasRef, coordinateFrame, sorted(unique(evidenceRefs)) ) deviationMeasurementRef = hash( targetEvidenceRef, intentRef, sourceEvidenceRef, metricContextRef, normalizationRef?, numericalPolicyRef ) NOT identity: display label display color free-form comment confidence

Magnitude must not become a loophole

13 / firewalls

12.01 deliberately refuses semantic and evaluative shortcuts.

Forbidden

large → good; large → intentional; small → accidental; magnitude → priority; magnitude → budget spend; nearest feature → target; N_A → 0.

Preserved

geometry != interpretation; descriptor != score; local != global; one owner per contract; correction request != foreign mutation; module order != priority.

Upstream geometry stays upstream

14 / integration

12.01 uses refs/adapters rather than recomputing canonical geometry.

Owner12.01 integration rule
Topic 8Column grid geometry/topology stays Topic8-owned. No nearest column line selection.
Topic 9Modular grid cells/regions stay Topic9-owned. A 2D displacement needs explicit target/reference evidence.
Topic 10Alignment offsets/spread/baseline evidence stay Topic10-owned. 12.01 references them rather than recalculating relations.
12.00Intent taxonomy, intent source and target evidence remain 12.00-owned.
12.02Protected relations and exception budget only.
12.03Candidates and justification only.
12.04Override scoring/tests only.

Wrong measurement → request review

15 / correction channel

If lineage, axis, target reference or scale evidence is wrong, 12.01 emits a non-mutating correction request to the responsible owner.

RuleBreakDeviationCorrectionRequest {
  requestRef,
  targetOwnerRef,
  reasonCode,
  evidenceRefs[],
  suggestedAction,
  status,

  mutationAllowed: false
}

CANON → LAB → DATA → IDEAS

16 / cross-cutting hooks

Perceptual thresholds for “too weak”, “intentional” or “error-like” are empirical questions. 12.01 captures the data hooks but does not hard-code those thresholds.

IDEAS_REFS[]7 project-level R&D references retained.
DATA_CAPTURE[]raw lineage, metric magnitude, optional normalization and status.
DEFERRED_SEMANTIC_INPUTS[]salience, role and semantic rationale remain external.
HUMAN_FEEDBACK_HOOKS[]wrong axis/reference/scale and perceptual correction reasons.
CONFLICT_PRIORITY_ASSUMPTIONS[]magnitude never becomes priority.
LAB_HOOKS[]perceptual calibration without auto-mutating canon.

Preserve correction reasons

17 / human evidence

Future calibration needs reasons, not only accept/reject.

Reason codeMeaning
DEVIATION_READS_TOO_LARGEMeasured break is perceptually excessive for this context.
DEVIATION_READS_TOO_SMALLMeasured break is too weak to read as intended tension.
DEVIATION_MAGNITUDE_MEASURED_WRONGMagnitude calculation or lineage is wrong.
WRONG_REFERENCE_FEATUREThe wrong explicit grid/alignment reference was supplied.
WRONG_AXISMeasurement axis is wrong.
WRONG_NORMALIZATION_SCALEExplicit normalization denominator is inappropriate/wrong.
TENSION_READS_AS_ERRORHuman interpretation remains accidental/error-like.
TENSION_TOO_WEAK_TO_NOTICEIntended deviation is not perceptually legible.

Visual laboratory hook

18 / descriptor illustration

The same module can describe one-axis offset, a 2D vector and shared-axis spread without assigning any quality value.

A · AXIS OFFSET signed Δx preserved · magnitude = |Δx| in explicit metric B · VECTOR OFFSET explicit Δx/Δy · hypot only after explicit axis scaling C · SET SPREAD spread = max(cᵢ) − min(cᵢ), supplied by upstream owner NONE OF THESE MEANS “BETTER”, “MORE INTENTIONAL” OR “MORE BEAUTIFUL”. 12.01 records geometric magnitude only. 12.02 will own protection/budget · 12.03 candidates/justification · 12.04 override scoring/tests.

12.01 regression suite

19 / deterministic tests

Tests cover intent gating, source compatibility, axis rules, explicit metric conversion, normalization, numerical zero, N_A semantics, comparison, identity, lineage, determinism and downstream firewalls.

Tests not run yet.

DATA FOR LAYOUT ENGINE

20 / machine contract

Machine-readable 12.01 canonical contract.

{
  "module": "Compo 12.01",
  "name": "deviation_magnitude",
  "version": "1.0-canonical",
  "canonical_main_title": "Deviation magnitude",
  "topic": "12_НАРУШЕНИЕ_СЕТКИ_И_КОНТРОЛИРУЕМОЕ_НАПРЯЖЕНИЕ",
  "scope": "INTENT_SCOPED_RULE_BREAK_DEVIATION_MAGNITUDE_GEOMETRIC_DESCRIPTOR_ONLY",
  "main_topic_contract": {
    "topic_title": "Нарушение сетки и контролируемое напряжение",
    "topic_goal": "formalize intentional breaking of grid and alignment: deviation magnitude, protected relations, exception budget and justification so controlled tension is distinguishable from error",
    "expected_output": "RuleBreakIntent, deviation metrics, exception budget, evidence",
    "planned_files": [
      "12.00 Grid-break taxonomy and intent",
      "12.01 Deviation magnitude",
      "12.02 Protected relations and exception budgets",
      "12.03 Rule-break candidates and justification",
      "12.04 Override scoring and tests"
    ]
  },
  "ownership": {
    "owner": "Compo12.01",
    "owns": [
      "DeviationSourceEvidence adapter schema",
      "DeviationMetricContext",
      "DeviationNormalizationContext",
      "DeviationNumericalPolicy",
      "RuleBreakDeviationMeasurement",
      "RuleBreakDeviationComparison",
      "RuleBreakDeviationCorrectionRequest",
      "serializable deviation observation record"
    ],
    "does_not_own": [
      "RuleBreakIntent taxonomy or intent source — Compo12.00",
      "upstream grid/alignment geometry or relation identity — Topics8/9/10",
      "protected relations or exception budget — Compo12.02",
      "rule-break candidate generation or justification — Compo12.03",
      "override scoring or final Topic12 vote — Compo12.04",
      "global composition quality",
      "global conflict priority"
    ]
  },
  "consumes": [
    "valid Compo12.00 RuleBreakTargetEvidence",
    "valid Compo12.00 RuleBreakIntent",
    "Compo12.00 RuleBreakIntentResolution with status OK for controlled-tension interpretation",
    "owner-qualified upstream measurement reference wrapped as DeviationSourceEvidence",
    "explicit DeviationMetricContext",
    "optional explicit DeviationNormalizationContext",
    "explicit DeviationNumericalPolicy",
    "optional opaque semanticIntentRefs[]",
    "optional human feedback reason codes"
  ],
  "provides": [
    "DeviationSourceEvidence",
    "DeviationMetricContext",
    "DeviationNormalizationContext",
    "DeviationNumericalPolicy",
    "RuleBreakDeviationMeasurement",
    "RuleBreakDeviationComparison",
    "RuleBreakDeviationCorrectionRequest",
    "Topic12.01 observation record"
  ],
  "owns_metrics": [],
  "metric_ownership_note": "12.01 owns numeric deviation descriptors, but no MetricResult scoring metric and no independent vote.",
  "descriptors_only": [
    "ruleBreak.deviation.measurementKind",
    "ruleBreak.deviation.axis",
    "ruleBreak.deviation.signedDeltaRaw",
    "ruleBreak.deviation.deltaXRaw",
    "ruleBreak.deviation.deltaYRaw",
    "ruleBreak.deviation.spreadRaw",
    "ruleBreak.deviation.metricDeltaX",
    "ruleBreak.deviation.metricDeltaY",
    "ruleBreak.deviation.magnitudeMetric",
    "ruleBreak.deviation.metricUnit",
    "ruleBreak.deviation.normalizedMagnitude",
    "ruleBreak.deviation.numericallyZero",
    "ruleBreak.deviation.directionDescriptor",
    "ruleBreak.deviation.comparisonRelation"
  ],
  "measurement_kind_taxonomy": {
    "AXIS_OFFSET_1D": "signed one-axis offset from an explicit upstream target/reference",
    "VECTOR_OFFSET_2D": "explicit 2D displacement vector from an explicit upstream target/reference",
    "SET_SPREAD_1D": "non-negative one-axis spread supplied by an upstream shared-axis relation"
  },
  "target_measurement_compatibility": {
    "COLUMN_GRID": [
      "AXIS_OFFSET_1D"
    ],
    "MODULAR_GRID": [
      "AXIS_OFFSET_1D",
      "VECTOR_OFFSET_2D"
    ],
    "PAIRWISE_ALIGNMENT": [
      "AXIS_OFFSET_1D"
    ],
    "TEXT_BASELINE_ALIGNMENT": [
      "AXIS_OFFSET_1D"
    ],
    "SHARED_AXIS_ALIGNMENT": [
      "AXIS_OFFSET_1D",
      "SET_SPREAD_1D"
    ]
  },
  "axis_policy": {
    "COLUMN_GRID": "X only",
    "MODULAR_GRID": "X or Y for AXIS_OFFSET_1D; no axis field for VECTOR_OFFSET_2D",
    "PAIRWISE_ALIGNMENT": "X or Y, exactly as declared by upstream measurement evidence",
    "TEXT_BASELINE_ALIGNMENT": "Y only",
    "SHARED_AXIS_ALIGNMENT": "X or Y, exactly as declared by upstream relation"
  },
  "deviation_source_evidence_schema": {
    "sourceEvidenceRef": "stable identity owned by Compo12.01",
    "targetEvidenceRef": "exact Compo12.00 target evidence ref",
    "intentRef": "exact Compo12.00 intent ref",
    "targetFamily": "must match target evidence",
    "subjectRefs": "exact canonical subject set of the RuleBreakIntent",
    "sourceMeasurementRef": "required upstream measurement/ref identity",
    "sourceOwnerRef": "required upstream owner",
    "sourceModuleRef": "required upstream module/service ref",
    "observedSnapshotRef": "required observed-state snapshot/version ref",
    "measurementKind": "AXIS_OFFSET_1D|VECTOR_OFFSET_2D|SET_SPREAD_1D",
    "axis": "X|Y where applicable",
    "signedDeltaRaw": "finite for AXIS_OFFSET_1D only",
    "deltaXRaw": "finite for VECTOR_OFFSET_2D only",
    "deltaYRaw": "finite for VECTOR_OFFSET_2D only",
    "spreadRaw": "finite >=0 for SET_SPREAD_1D only",
    "sourceUnit": "must match target sourceUnit",
    "canvasRef": "must match target canvasRef",
    "coordinateFrame": "must match target coordinateFrame",
    "evidenceRefs": "one or more owner-qualified lineage refs",
    "confidence": "0..1 evidence confidence only",
    "provenance": "canonical provenance class",
    "status": "OK|N_A|INVALID",
    "mutationAllowed": false
  },
  "metric_context_schema": {
    "metricContextRef": "deterministic identity of metric conversion context",
    "metricContextOwnerRef": "explicit owner of conversion evidence/policy",
    "metricSpaceRef": "explicit metric-space identity",
    "canvasRef": "must match target/source",
    "coordinateFrame": "must match target/source",
    "sourceUnit": "must match source evidence",
    "metricUnit": "output metric unit",
    "xScaleToMetric": "finite >0",
    "yScaleToMetric": "finite >0",
    "evidenceRefs": "one or more evidence refs",
    "confidence": "0..1",
    "provenance": "canonical provenance class",
    "status": "OK|INVALID",
    "mutationAllowed": false
  },
  "metric_formulas": {
    "AXIS_OFFSET_1D_X": "magnitudeMetric = abs(signedDeltaRaw * xScaleToMetric)",
    "AXIS_OFFSET_1D_Y": "magnitudeMetric = abs(signedDeltaRaw * yScaleToMetric)",
    "VECTOR_OFFSET_2D": "metricDeltaX=deltaXRaw*xScaleToMetric; metricDeltaY=deltaYRaw*yScaleToMetric; magnitudeMetric=hypot(metricDeltaX,metricDeltaY)",
    "SET_SPREAD_1D_X": "magnitudeMetric = spreadRaw * xScaleToMetric",
    "SET_SPREAD_1D_Y": "magnitudeMetric = spreadRaw * yScaleToMetric"
  },
  "normalization_schema": {
    "optional": true,
    "normalizationRef": "deterministic identity",
    "normalizationOwnerRef": "explicit owner",
    "normalizationKind": "DOMAIN_AXIS_EXTENT|DOMAIN_DIAGONAL|TARGET_LOCAL_SCALE|EXPLICIT_REFERENCE_LENGTH",
    "referenceScaleRef": "required owner-qualified scale identity",
    "referenceScaleMetric": "finite >0",
    "metricUnit": "must equal measurement metricUnit",
    "evidenceRefs": "one or more refs",
    "confidence": "0..1",
    "provenance": "canonical provenance class",
    "status": "OK|INVALID",
    "mutationAllowed": false,
    "formula": "normalizedMagnitude = magnitudeMetric / referenceScaleMetric",
    "default": "NONE — normalization is never chosen silently"
  },
  "numerical_policy_schema": {
    "numericalPolicyRef": "deterministic identity",
    "absEpsMetric": "finite >=0",
    "relEps": "finite 0..1",
    "formula": "effectiveEpsMetric=max(absEpsMetric, relEps*max(1,abs(magnitudeMetric)))",
    "numericallyZero": "magnitudeMetric <= effectiveEpsMetric",
    "firewall": "numerical epsilon is computational stability only; it is not design tolerance, permission, exception budget or score"
  },
  "measurement_schema": {
    "deviationMeasurementRef": "stable identity from target/intent/source/metric/normalization/numerical policy refs",
    "targetEvidenceRef": "Compo12.00 ref",
    "intentRef": "Compo12.00 ref",
    "sourceEvidenceRef": "Compo12.01 source wrapper ref",
    "targetFamily": "copied for auditability",
    "subjectRefs": "canonical exact intent subject set",
    "measurementKind": "closed taxonomy",
    "axis": "X|Y|null",
    "metricContextRef": "required",
    "normalizationRef": "optional",
    "numericalPolicyRef": "required",
    "metricDeltaX": "VECTOR_OFFSET_2D only",
    "metricDeltaY": "VECTOR_OFFSET_2D only",
    "magnitudeMetric": "non-negative geometric descriptor",
    "metricUnit": "explicit",
    "normalizedMagnitude": "optional dimensionless descriptor",
    "numericallyZero": "boolean computational descriptor",
    "directionDescriptor": "NEGATIVE|ZERO_WITHIN_EPS|POSITIVE|VECTOR_2D|UNSIGNED_SPREAD",
    "status": "OK|N_A|INVALID",
    "reasonCode": "explicit status reason",
    "confidence": "minimum evidence confidence; never tension strength",
    "provenance": "DERIVED",
    "derivedFrom": "explicit refs",
    "mutationAllowed": false
  },
  "status_policy": {
    "OK": "valid explicit intent scope + compatible source evidence + explicit metric context; zero is a legal numeric value",
    "N_A": "controlled-tension intent is unavailable, source measurement is unavailable, or required metric context is unavailable; N_A is not zero",
    "INVALID": "malformed/incompatible target, intent, source, axis, units, lineage, metric context, normalization or numerical policy"
  },
  "comparison_policy": {
    "purpose": "diagnostic geometric magnitude comparison only",
    "requires": [
      "both measurements status OK",
      "same targetFamily",
      "same measurementKind",
      "same axis semantics",
      "same metricContextRef",
      "same normalizationRef state/value"
    ],
    "relations": [
      "LESS",
      "EQUAL_WITHIN_EPS",
      "GREATER",
      "INCOMPARABLE"
    ],
    "meaning": "GEOMETRIC_DEVIATION_MAGNITUDE_ONLY",
    "preference": "NONE — greater or smaller is not automatically better"
  },
  "identity_policy": {
    "sourceEvidenceRef": "includes targetEvidenceRef, intentRef, source measurement/snapshot, canonical subjects, kind/axis/raw values, canvas/frame/unit",
    "metricContextRef": "includes owner/space/canvas/frame/units/scales/evidence refs",
    "normalizationRef": "includes owner/kind/reference scale identity/value/unit/evidence refs",
    "numericalPolicyRef": "includes abs/relative eps values",
    "deviationMeasurementRef": "includes targetEvidenceRef,intentRef,sourceEvidenceRef,metricContextRef,normalizationRef?,numericalPolicyRef",
    "set_semantics": "subjectRefs/evidenceRefs are lexically canonicalized",
    "excluded_from_identity": [
      "display label",
      "display color",
      "free-form human comment",
      "confidence"
    ]
  },
  "critical_firewalls": [
    "deviation magnitude != RuleBreakIntent",
    "deviation magnitude != intention strength",
    "deviation magnitude != controlled-tension quality",
    "deviation magnitude != score",
    "deviation magnitude != exception budget consumption",
    "deviation magnitude != protected-relation decision",
    "large deviation != better",
    "large deviation != more intentional",
    "small deviation != accidental",
    "zero deviation != N_A",
    "N_A != 0",
    "numerical epsilon != design tolerance",
    "raw UV Euclidean norm is not silently treated as an isotropic metric",
    "nearest grid line/cell/reference is never selected implicitly",
    "12.01 does not recompute Topic10 alignment relations",
    "12.01 does not re-own Topic8/9 grid geometry",
    "module execution order != rule priority",
    "correction request != foreign mutation",
    "no universal beautyScore",
    "IDEA != CANON",
    "EXPERIMENT != CANON"
  ],
  "deferred_downstream": {
    "12.02": [
      "protected relations",
      "exception budgets",
      "budget accounting",
      "hard protection policy"
    ],
    "12.03": [
      "rule-break candidates",
      "candidate generation",
      "justification evidence",
      "justification verdict"
    ],
    "12.04": [
      "override scoring",
      "Topic12 independent vote if canonically introduced",
      "hard/soft override evaluation",
      "final Topic12 tests"
    ]
  },
  "correction_request_schema": {
    "requestRef": "stable request identity",
    "targetOwnerRef": "owner whose evidence must be reviewed",
    "reasonCode": "explicit",
    "evidenceRefs": "canonicalized refs",
    "suggestedAction": "non-mutating suggestion",
    "status": "OPEN|RESOLVED|REJECTED",
    "mutationAllowed": false
  },
  "IDEAS_REFS": [
    "IDEA-01 full human test after all 72 topics; capture perceived tension vs error now",
    "IDEA-02 semantics required before placement; semanticIntentRefs remain opaque/deferred",
    "IDEA-03 explicit rule priorities; magnitude must never become hidden priority",
    "IDEA-04 collect structured data for future composition model",
    "IDEA-05 preserve reasons for human corrections",
    "IDEA-06 structured machine-readable layer",
    "IDEA-07 graphics-for-post-text research remains downstream/separate"
  ],
  "DATA_CAPTURE": [
    "sceneRef",
    "targetEvidenceRef",
    "intentRef",
    "targetFamily",
    "subjectRefs[]",
    "sourceMeasurementRef",
    "sourceOwnerRef",
    "observedSnapshotRef",
    "measurementKind",
    "axis",
    "sourceUnit",
    "metricContextRef",
    "metricUnit",
    "magnitudeMetric",
    "normalizationRef",
    "normalizedMagnitude",
    "numericallyZero",
    "deviationStatus",
    "deviationReasonCode",
    "humanReasonCodes[]",
    "future protectedRelationRefs[]",
    "future exceptionBudgetRef",
    "future justificationEvidenceRef",
    "future overrideEvaluationRef"
  ],
  "DEFERRED_SEMANTIC_INPUTS": [
    "semanticIntentRefs[]",
    "perceptual salience of a given deviation magnitude",
    "role-sensitive tolerance expectations",
    "meaning/hierarchy rationale",
    "brand/editorial tone rationale"
  ],
  "HUMAN_FEEDBACK_HOOKS": [
    "DEVIATION_READS_TOO_LARGE",
    "DEVIATION_READS_TOO_SMALL",
    "DEVIATION_MAGNITUDE_MEASURED_WRONG",
    "WRONG_REFERENCE_FEATURE",
    "WRONG_AXIS",
    "WRONG_NORMALIZATION_SCALE",
    "TENSION_READS_AS_ERROR",
    "TENSION_TOO_WEAK_TO_NOTICE"
  ],
  "CONFLICT_PRIORITY_ASSUMPTIONS": [
    "module execution order is not priority",
    "larger deviation does not gain priority",
    "REQUEST_BREAK does not gain priority from magnitude",
    "12.01 records geometry only and does not resolve protected-relation conflicts",
    "future reviewed priority/conflict owner remains authoritative"
  ],
  "LAB_HOOKS": [
    "human A/B: equal normalized magnitude across different target families",
    "human A/B: same geometric magnitude under different semantic roles",
    "estimate perception thresholds without writing them into canon",
    "compare raw vs explicitly normalized magnitude for cross-format studies",
    "collect reason codes when users say the break reads as error"
  ],
  "observation_record": {
    "moduleRef": "Compo12.01",
    "metricResults": [],
    "candidateRefs": [],
    "budgetRefs": [],
    "protectedRelationRefs": [],
    "justificationRefs": [],
    "overrideEvaluationRefs": []
  }
}
VISITS / ...