Magnitude is geometry — not permission
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.
12.00 target + intent + explicit measurement evidence.
deterministic deviation magnitude descriptor.
legal value, distinct from N_A.
larger/smaller is not better/worse.
12.01 owns the descriptor layer
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.
12.01
DeviationSourceEvidence wrapper, MetricContext, optional normalization, numerical epsilon, magnitude descriptor, diagnostic comparison.
8 / 9 / 10 / 12.00
Grid/alignment relation identity and raw owner-qualified measurement refs; target and explicit rule-break intent.
12.02–12.04
Protected relations, exception budget, candidate generation, justification, override scoring and final Topic12 vote.
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
The taxonomy is deliberately small. Every kind has explicit raw semantics and no hidden nearest-feature search.
| Kind | Raw evidence | Magnitude semantics |
|---|---|---|
| AXIS_OFFSET_1D | axis X/Y + signedDeltaRaw | absolute metric displacement on one declared axis |
| VECTOR_OFFSET_2D | deltaXRaw + deltaYRaw | explicit isotropic metric norm after owner-qualified axis scaling |
| SET_SPREAD_1D | axis X/Y + spreadRaw ≥ 0 | metric width of an upstream shared-axis coordinate set |
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
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
}
subjectRefs must equal the canonical subject set of the corresponding RuleBreakIntent.
Changing observed geometry requires a new observedSnapshotRef and changes source evidence identity.
No silent metric space
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
}
One magnitude formula per kind
Signed components are preserved as evidence; magnitude itself is non-negative.
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
A measurement kind that is mathematically valid can still be semantically invalid for the selected target family.
| Target family | Allowed kind | Axis rule |
|---|---|---|
| COLUMN_GRID | AXIS_OFFSET_1D | X only |
| MODULAR_GRID | AXIS_OFFSET_1D / VECTOR_OFFSET_2D | X/Y for axis; null for vector |
| PAIRWISE_ALIGNMENT | AXIS_OFFSET_1D | X or Y exactly as upstream evidence |
| TEXT_BASELINE_ALIGNMENT | AXIS_OFFSET_1D | Y only |
| SHARED_AXIS_ALIGNMENT | AXIS_OFFSET_1D / SET_SPREAD_1D | X or Y exactly as upstream evidence |
Normalization is optional and explicit
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
}
| Kind | Meaning |
|---|---|
| DOMAIN_AXIS_EXTENT | explicit domain extent on the relevant axis |
| DOMAIN_DIAGONAL | explicit metric domain diagonal |
| TARGET_LOCAL_SCALE | explicit owner-qualified local size associated with target |
| EXPLICIT_REFERENCE_LENGTH | generic explicit reference length |
Numerical zero is not design tolerance
A tiny floating-point residual can be described as numerically zero without claiming that a visible deviation is acceptable.
DeviationNumericalPolicy {
numericalPolicyRef,
absEpsMetric,
relEps
}
RuleBreakDeviationMeasurement
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
The module preserves the project-wide N/A != 0 invariant.
| Status | Meaning | Magnitude |
|---|---|---|
| OK | Valid intent-scoped measurement. | May legally be 0. |
| N_A | No explicit intent / no source measurement / no metric context. | null, never synthesized as 0. |
| INVALID | Malformed or incompatible lineage/units/axis/kind/context. | null. |
Comparison is diagnostic only
12.01 may say one deviation is geometrically larger than another only when measurement semantics are comparable. It never says which is compositionally better.
Identity follows evidence and snapshot
Order-insensitive evidence sets are canonicalized; observed geometry and conversion policy are identity-bearing.
Magnitude must not become a loophole
12.01 deliberately refuses semantic and evaluative shortcuts.
large → good; large → intentional; small → accidental; magnitude → priority; magnitude → budget spend; nearest feature → target; N_A → 0.
geometry != interpretation; descriptor != score; local != global; one owner per contract; correction request != foreign mutation; module order != priority.
Upstream geometry stays upstream
12.01 uses refs/adapters rather than recomputing canonical geometry.
| Owner | 12.01 integration rule |
|---|---|
| Topic 8 | Column grid geometry/topology stays Topic8-owned. No nearest column line selection. |
| Topic 9 | Modular grid cells/regions stay Topic9-owned. A 2D displacement needs explicit target/reference evidence. |
| Topic 10 | Alignment offsets/spread/baseline evidence stay Topic10-owned. 12.01 references them rather than recalculating relations. |
| 12.00 | Intent taxonomy, intent source and target evidence remain 12.00-owned. |
| 12.02 | Protected relations and exception budget only. |
| 12.03 | Candidates and justification only. |
| 12.04 | Override scoring/tests only. |
Wrong measurement → request review
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
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.
Preserve correction reasons
Future calibration needs reasons, not only accept/reject.
| Reason code | Meaning |
|---|---|
| DEVIATION_READS_TOO_LARGE | Measured break is perceptually excessive for this context. |
| DEVIATION_READS_TOO_SMALL | Measured break is too weak to read as intended tension. |
| DEVIATION_MAGNITUDE_MEASURED_WRONG | Magnitude calculation or lineage is wrong. |
| WRONG_REFERENCE_FEATURE | The wrong explicit grid/alignment reference was supplied. |
| WRONG_AXIS | Measurement axis is wrong. |
| WRONG_NORMALIZATION_SCALE | Explicit normalization denominator is inappropriate/wrong. |
| TENSION_READS_AS_ERROR | Human interpretation remains accidental/error-like. |
| TENSION_TOO_WEAK_TO_NOTICE | Intended deviation is not perceptually legible. |
Visual laboratory hook
The same module can describe one-axis offset, a 2D vector and shared-axis spread without assigning any quality value.
12.01 regression suite
Tests cover intent gating, source compatibility, axis rules, explicit metric conversion, normalization, numerical zero, N_A semantics, comparison, identity, lineage, determinism and downstream firewalls.
DATA FOR LAYOUT ENGINE
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": []
}
}