COMPO · 16.00 · SCALE RELATION MODEL

Relation first.
Ratio later.

16.00 задаёт root-модель сравнения размеров между объектами: кто участвует, по какому size channel сравнение допустимо и какая unordered pair считается одной ScaleRelation. Никакие числовые ratio, классы или scale ladders здесь ещё не вычисляются.

ModuleCompo 16.00
TopicScale relations
Pairingexplicit only
Ratiodeferred 16.01
Metricsnone
NextSTOP

Relation identity before ratio

00 / contract
explicit subject eligibility → ScaleSubjectSet explicit measure binding + explicit unordered pair request → ScaleRelation 16.00 stops here. NO numeric ratio NO large/medium/small class NO scale ladder NO score

Root model only

01 / ownership
OWNS

Participation

Explicit scale-subject eligibility and immutable subject set.

OWNS

Comparison contract

Exact measure channel/method/context binding and explicit unordered relation identity.

NO METRICS

Downstream later

owns_metrics=[]. Ratio starts only in 16.01.

Scale subject eligibility is explicit

02 / subject model
KindMeaning
SCALE_SUBJECTMay participate in object-to-object scale relations.
NON_SCALE_SUBJECTExplicitly excluded.
UNSPECIFIEDExplicit no-commitment value; not missing evidence.
no evidence → N_A agreement → OK + RESOLVED disagreement → OK + CONFLICT confidence does NOT break conflict
Size does not imply participation.

Large, small, dominant, visually heavy or semantically important objects are not automatically scale subjects.

Scale measurement binding

03 / like-for-like only
ChannelDimension
VISIBLE_AREAAREA
BBOX_AREA_PROXYAREA
WIDTHLINEAR
HEIGHTLINEAR
MAX_EXTENTLINEAR
MIN_EXTENTLINEAR
TEXT_EM_HEIGHTLINEAR
STROKE_WIDTHLINEAR
EXPLICIT_SCALAREXPLICIT_SCALAR
Comparable only under exact: channel dimension measurementMethodRef referenceContextRef scalarSemanticsRef (if EXPLICIT_SCALAR)

No channel substitution

04 / comparability firewall
Forbidden

VISIBLE_AREA→BBOX_AREA_PROXY fallback; WIDTH→MAX_EXTENT fallback; area ratio→linear ratio; TEXT_EM_HEIGHT→generic height.

Required

Exact channel + exact method + exact reference context. Different bindings remain different relations.

Explicit unordered pair request

05 / pair identity
ScaleRelationRequest {
  scaleRelationRequestRef,

  scopeRef,

  subjectRefA,
  subjectRefB,

  canonicalSubjectLowRef,
  canonicalSubjectHighRef,

  scaleMeasurementBindingRef,

  comparisonSemantics:
    PEER_OBJECT_SCALE,

  source / owner / provenance,

  status,
  mutationAllowed: false
}
canonical lexical pair order = identity normalization only NOT: smaller/larger size numerator/denominator hierarchy importance visual priority

No automatic all-pairs explosion

06 / relation-set policy
ScaleRelationSetPolicy {
  selectionMode:
    EXPLICIT_PAIR_BINDINGS_ONLY,

  duplicatePolicy:
    DEDUP_EXACT_IDENTITY,

  missingSubjectPolicy:
    N_A_NO_GUESS,

  conflictedSubjectPolicy:
    N_A_NO_GUESS,

  maxRelations:
    1..8192,

  overflowPolicy:
    N_A_NO_TRUNCATION,

  fullCartesianProductAllowed:
    false
}

ScaleRelation has no ratio yet

07 / immutable root
ScaleRelation {
  scaleRelationRef,

  scopeRef,
  scaleSubjectSetRef,

  subjectRefA,
  subjectRefB,

  scaleMeasurementBindingRef,
  scaleRelationRequestRef,

  comparisonSemantics:
    PEER_OBJECT_SCALE,

  numericRatio: null,
  sizeClass: null,
  scaleStep: null,
  score: null,

  status: OK,
  mutationAllowed: false
}
Expected-output root exists now.

ScaleRelation[] is canonical relation identity. Numeric size-ratio descriptors begin in 16.01.

Scale ≠ proportion ≠ hierarchy

08 / module boundaries
ConceptOwner
Object-to-object scale relation identity16.00
Pairwise numeric size ratio16.01
Large/Medium/Small classes16.02
Scale ladders/distributions16.03
Target scoring / repair candidates16.04
Aspect ratio / part-to-whole proportionsTopic17
Generic hierarchy/subordinationCompo18
Visual massCompo4
DominanceCompo13

N_A never becomes zero

09 / status
No eligibility evidenceN_A
Eligibility conflictOK + CONFLICT; excluded
UNSPECIFIEDResolved explicit value; excluded by v1 policy
Subject-set overflowN_A; no truncation
Same-subject relation requestINVALID
Requested subject missing/conflictedN_A; no guess
Relation-set overflowN_A; no truncation
Exact duplicate requestDeduplicated by identity

Downstream ownership is explicit

10 / deferrals
16.01

Ratios

Positive magnitude evidence, larger/smaller/equal resolution, numeric ratio, near-equal descriptive band.

16.02

Classes

Explicit Large/Medium/Small class profile and assignments.

16.03

Ladders

Scale steps, occupied levels and distribution descriptors.

16.04

Scoring

Explicit target profile, MetricResult ownership and bounded repair candidates.

No hidden hierarchy through size

11 / critical firewalls
large size != semantic importance small size != decorative role size ratio != visual mass ratio size ratio != dominance ratio size ratio != aspect ratio near-equal ratio != automatically bad equal size != hierarchy violation NO: golden-ratio default 1.618 target implicit L/M/S thresholds implicit scale-ladder step

CANON → LAB → DATA → IDEAS

12 / mandatory hooks
IDEAS_REFS[]7 project directions preserved.
DATA_CAPTURE[]Eligibility, binding and relation lineage.
DEFERRED_SEMANTIC_INPUTS[]Near-equal desirability and target ladder stay downstream.
HUMAN_FEEDBACK_HOOKS[]Size-channel and pair corrections.
CONFLICT_PRIORITY_ASSUMPTIONS[]Lexical order and confidence are not priority.
LAB_HOOKS[]Perceived versus geometric scale studies.

16.00 regression suite

13 / deterministic tests

Tests cover eligibility conflict preservation, subject-set policy, exact channel/dimension binding, unordered relation identity, explicit-pair-only selection, duplicate deduplication, overflow N_A, immutable root records and ownership firewalls.

Tests not run yet.

DATA FOR LAYOUT ENGINE

14 / machine contract
{
  "module": "Compo 16.00",
  "name": "scale_relation_model",
  "version": "1.0-canonical",
  "canonical_main_title": "Scale relation model",
  "topic": "16_МАСШТАБ_И_ОТНОШЕНИЕ_РАЗМЕРОВ",
  "scope": "EXPLICIT_SCALE_SUBJECT_ELIGIBILITY_SIZE_MEASURE_BINDING_AND_UNORDERED_OBJECT_TO_OBJECT_SCALE_RELATION_ROOT_MODEL_ONLY",
  "main_topic_contract": {
    "topic_title": "Масштаб и отношение размеров",
    "topic_goal": "Считает отношения размеров между объектами и масштабные ступени. Нужна для выразительной дифференциации, scale ladders и контроля почти-равных размеров.",
    "expected_output": "ScaleRelation[], size-ratio descriptors, scale classes",
    "planned_files": [
      "16.00 Scale relation model",
      "16.01 Pairwise size ratios",
      "16.02 Large/medium/small classes",
      "16.03 Scale ladders and distributions",
      "16.04 Candidates, scoring and tests"
    ]
  },
  "ownership": {
    "owner": "Compo16.00",
    "owns": [
      "ScaleSubjectEligibilityKind taxonomy",
      "ScaleSubjectEligibilityEvidence",
      "ScaleSubjectEligibilityResolution",
      "ScaleSubjectSetPolicy",
      "ScaleSubject",
      "ScaleSubjectSet",
      "ScaleMeasureDimension taxonomy",
      "ScaleMeasureChannel taxonomy",
      "ScaleMeasurementBinding",
      "ScaleRelationRequest",
      "ScaleRelationSetPolicy",
      "ScaleRelation",
      "ScaleRelationSet",
      "ScaleSystemSeed",
      "identity/status/provenance rules for Topic16 root relation layer",
      "non-mutating correction request for scale-subject eligibility / measurement binding / relation request"
    ],
    "does_not_own": [
      "raw geometry measurement — upstream geometry/measurement owners",
      "visible area computation — upstream geometry/visibility owner",
      "bounding-box computation — upstream geometry owner",
      "transform scale parameter — Compo3.05",
      "format normalization / global scale invariance — Compo6.03",
      "visual mass — Compo4",
      "dominance / focal ranking — Compo13",
      "microdetail size/contrast role-envelope semantics — Topic15",
      "pairwise numeric size ratios — Compo16.01",
      "near-equal ratio interpretation — Compo16.01/16.04 according to explicit target policy",
      "large/medium/small class assignment — Compo16.02",
      "scale ladders / scale distributions — Compo16.03",
      "scale target scoring / repair candidates — Compo16.04",
      "aspect ratios inside one subject — Topic17",
      "part-to-whole proportional relations — Topic17",
      "generic hierarchy/subordination — Compo18",
      "global balance",
      "semantic importance",
      "foreign geometry/style/semantic mutation"
    ]
  },
  "consumes": [
    "explicit scene/scope identity",
    "owner-qualified ScaleSubjectEligibilityEvidence",
    "explicit ScaleSubjectSetPolicy",
    "explicit ScaleMeasurementBinding records",
    "explicit ScaleRelationRequest records",
    "explicit ScaleRelationSetPolicy"
  ],
  "provides": [
    "ScaleSubjectEligibilityResolution[]",
    "ScaleSubjectSet",
    "ScaleMeasurementBinding[]",
    "ScaleRelation[]",
    "ScaleRelationSet",
    "ScaleSystemSeed",
    "Topic16.00 observation record"
  ],
  "owns_metrics": [],
  "metric_ownership_note": "16.00 owns relation identity/model only. It computes no numeric pairwise ratio, no size class, no ladder score and no independent numeric vote.",
  "scale_subject_eligibility_kind_taxonomy": {
    "SCALE_SUBJECT": "Explicitly eligible as an object-level scale-comparison subject.",
    "NON_SCALE_SUBJECT": "Explicitly excluded from Topic16 object-level scale comparison.",
    "UNSPECIFIED": "Explicit source makes no eligibility commitment; distinct from missing evidence."
  },
  "scale_subject_eligibility_evidence_schema": {
    "scaleSubjectEligibilityEvidenceRef": "stable identity",
    "scopeRef": "Topic16 scope",
    "subjectRef": "exact subject identity",
    "eligibilityKind": "SCALE_SUBJECT|NON_SCALE_SUBJECT|UNSPECIFIED",
    "evidenceSourceRef": "explicit evidence source",
    "evidenceSourceOwnerRef": "canonical owner of subject eligibility semantics",
    "confidence": "finite [0,1] source confidence only",
    "provenance": "canonical provenance",
    "snapshotRef": "exact snapshot",
    "status": "OK|INVALID",
    "mutationAllowed": false,
    "firewall": "Object size, bounding-box area, visual mass, dominance, semantic role or transform scale do not establish Topic16 eligibility automatically."
  },
  "scale_subject_eligibility_resolution_schema": {
    "scaleSubjectEligibilityResolutionRef": "stable identity",
    "scopeRef": "scope",
    "subjectRef": "subject",
    "evidenceRefs": "canonical evidence refs",
    "resolvedEligibilityKind": "taxonomy value or CONFLICT",
    "resolutionState": "RESOLVED|CONFLICT",
    "confidence": "null in v1; confidence cannot break conflict",
    "status": "OK|N_A|INVALID",
    "reasonCode": "explicit",
    "mutationAllowed": false,
    "rules": {
      "noEvidence": "N_A",
      "exactAgreement": "OK + RESOLVED",
      "disagreement": "OK + CONFLICT"
    },
    "firewall": "No evidence => N_A, not UNSPECIFIED. Confidence and source order never pick a winner."
  },
  "scale_subject_set_policy_schema": {
    "scaleSubjectSetPolicyRef": "stable identity",
    "conflictPolicy": "EXCLUDE",
    "unspecifiedEligibilityPolicy": "EXCLUDE",
    "maxSubjects": "integer 1..4096",
    "overflowPolicy": "N_A_NO_TRUNCATION",
    "ordering": "LEXICAL_SERIALIZATION_ONLY",
    "policySourceRef": "explicit source",
    "policySourceOwnerRef": "owner",
    "provenance": "canonical provenance",
    "status": "OK|INVALID",
    "mutationAllowed": false,
    "firewall": "Lexical order is serialization only, not scale rank, visual rank, hierarchy rank or importance. Overflow never silently truncates."
  },
  "scale_subject_schema": {
    "scaleSubjectRef": "stable identity",
    "scopeRef": "scope",
    "subjectRef": "exact subject",
    "eligibilityResolutionRef": "resolved SCALE_SUBJECT evidence",
    "status": "OK",
    "mutationAllowed": false,
    "firewall": "ScaleSubject is participation identity only. It contains no measured size and no class."
  },
  "scale_subject_set_schema": {
    "scaleSubjectSetRef": "stable identity",
    "scopeRef": "scope",
    "scaleSubjectSetPolicyRef": "explicit policy",
    "scaleSubjectRefs": "canonical refs",
    "subjectRefs": "canonical subject refs",
    "status": "OK|N_A|INVALID",
    "reasonCode": "explicit",
    "mutationAllowed": false,
    "firewall": "Subject count is not density, size rank, hierarchy, score or scale ladder."
  },
  "scale_measure_dimension_taxonomy": {
    "LINEAR": "One-dimensional extent. Ratios compare like-for-like linear magnitudes only.",
    "AREA": "Two-dimensional area magnitude. Ratios compare like-for-like areas only.",
    "EXPLICIT_SCALAR": "Owner-defined positive scalar semantics; requires explicit scalarSemanticsRef."
  },
  "scale_measure_channel_taxonomy": {
    "VISIBLE_AREA": {
      "dimension": "AREA"
    },
    "BBOX_AREA_PROXY": {
      "dimension": "AREA"
    },
    "WIDTH": {
      "dimension": "LINEAR"
    },
    "HEIGHT": {
      "dimension": "LINEAR"
    },
    "MAX_EXTENT": {
      "dimension": "LINEAR"
    },
    "MIN_EXTENT": {
      "dimension": "LINEAR"
    },
    "TEXT_EM_HEIGHT": {
      "dimension": "LINEAR"
    },
    "STROKE_WIDTH": {
      "dimension": "LINEAR"
    },
    "EXPLICIT_SCALAR": {
      "dimension": "EXPLICIT_SCALAR"
    }
  },
  "scale_measurement_binding_schema": {
    "scaleMeasurementBindingRef": "stable identity",
    "scopeRef": "scope",
    "measureChannel": "one ScaleMeasureChannel",
    "measureDimension": "must exactly match channel dimension",
    "measurementMethodRef": "exact upstream measurement method",
    "referenceContextRef": "exact comparison/reference context",
    "scalarSemanticsRef": "required only for EXPLICIT_SCALAR; null otherwise",
    "bindingSourceRef": "explicit source",
    "bindingSourceOwnerRef": "owner",
    "provenance": "canonical provenance",
    "status": "OK|INVALID",
    "mutationAllowed": false,
    "comparability": [
      "same measureChannel",
      "same measureDimension",
      "same measurementMethodRef",
      "same referenceContextRef",
      "same scalarSemanticsRef when EXPLICIT_SCALAR"
    ],
    "firewall": "Binding defines how later magnitudes may be compared. It contains no magnitude, no ratio and no desirability. WIDTH, AREA, TEXT_EM_HEIGHT and STROKE_WIDTH are never interchangeable."
  },
  "scale_relation_request_schema": {
    "scaleRelationRequestRef": "stable identity",
    "scopeRef": "scope",
    "subjectRefA": "first explicit subject ref",
    "subjectRefB": "second explicit subject ref; must differ",
    "canonicalSubjectLowRef": "lexically smaller subject ref",
    "canonicalSubjectHighRef": "lexically larger subject ref",
    "scaleMeasurementBindingRef": "exact binding",
    "comparisonSemantics": "PEER_OBJECT_SCALE",
    "requestSourceRef": "explicit source",
    "requestSourceOwnerRef": "owner",
    "provenance": "canonical provenance",
    "status": "OK|INVALID",
    "mutationAllowed": false,
    "firewall": "Pair identity is unordered. Lexical low/high is identity canonicalization only and never means smaller/larger observed size, numerator/denominator, hierarchy or visual priority."
  },
  "scale_relation_set_policy_schema": {
    "scaleRelationSetPolicyRef": "stable identity",
    "selectionMode": "EXPLICIT_PAIR_BINDINGS_ONLY",
    "duplicatePolicy": "DEDUP_EXACT_IDENTITY",
    "missingSubjectPolicy": "N_A_NO_GUESS",
    "conflictedSubjectPolicy": "N_A_NO_GUESS",
    "maxRelations": "integer 1..8192",
    "overflowPolicy": "N_A_NO_TRUNCATION",
    "ordering": "LEXICAL_IDENTITY_SERIALIZATION_ONLY",
    "policySourceRef": "explicit source",
    "policySourceOwnerRef": "owner",
    "provenance": "canonical provenance",
    "status": "OK|INVALID",
    "mutationAllowed": false,
    "fullCartesianProductAllowed": false,
    "firewall": "16.00 does not auto-generate every subject×subject×channel combination. Every v1 relation is explicitly requested and bounded."
  },
  "scale_relation_schema": {
    "scaleRelationRef": "stable identity",
    "scopeRef": "scope",
    "scaleSubjectSetRef": "exact subject set",
    "subjectRefA": "canonical lexical low ref",
    "subjectRefB": "canonical lexical high ref",
    "scaleMeasurementBindingRef": "exact binding",
    "scaleRelationRequestRef": "exact request",
    "comparisonSemantics": "PEER_OBJECT_SCALE",
    "status": "OK",
    "mutationAllowed": false,
    "numericRatio": null,
    "sizeClass": null,
    "scaleStep": null,
    "score": null,
    "firewall": "ScaleRelation is an immutable relation identity, not a measured ratio. Numeric ratio belongs to 16.01; class to 16.02; ladder/distribution to 16.03; scoring/generation to 16.04."
  },
  "scale_relation_set_schema": {
    "scaleRelationSetRef": "stable identity",
    "scopeRef": "scope",
    "scaleSubjectSetRef": "exact set",
    "scaleRelationSetPolicyRef": "explicit policy",
    "scaleMeasurementBindingRefs": "bindings actually referenced",
    "scaleRelationRefs": "canonical relations",
    "status": "OK|N_A|INVALID",
    "reasonCode": "explicit",
    "mutationAllowed": false,
    "firewall": "Relation count is not a score, scale diversity, hierarchy, ladder quality or differentiation quality."
  },
  "scale_system_seed_schema": {
    "scaleSystemSeedRef": "stable identity",
    "scopeRef": "scope",
    "scaleSubjectSetRef": "subject set",
    "scaleRelationSetRef": "relation set",
    "pairwiseRatioAttachmentRef": null,
    "scaleClassAttachmentRef": null,
    "scaleLadderAttachmentRef": null,
    "evaluationAttachmentRef": null,
    "status": "OK|N_A|INVALID",
    "mutationAllowed": false,
    "firewall": "Downstream modules attach derived records; 16.00 root identities are not mutated in place."
  },
  "identity_policy": {
    "scaleSubjectEligibilityEvidenceRef": "hash(scope, subject, eligibility, source/owner, confidence, provenance, snapshot, status)",
    "scaleSubjectEligibilityResolutionRef": "hash(scope, subject, canonical evidence refs, resolved kind/state/status)",
    "scaleSubjectSetPolicyRef": "hash(conflict/unspecified/overflow/ordering policy, maxSubjects, source/owner, provenance, status)",
    "scaleSubjectRef": "hash(scope, subject, eligibility resolution)",
    "scaleSubjectSetRef": "hash(scope, subject-set policy, canonical scale-subject refs, status)",
    "scaleMeasurementBindingRef": "hash(scope, channel/dimension, method, reference context, scalar semantics, source/owner, provenance, status)",
    "scaleRelationRequestRef": "hash(scope, canonical unordered pair, measurement binding, comparison semantics, source/owner, provenance, status)",
    "scaleRelationSetPolicyRef": "hash(selection/duplicate/missing/conflict/max/overflow/ordering policy, source/owner, provenance, status)",
    "scaleRelationRef": "hash(scope, subject set, canonical unordered pair, measurement binding, relation request, comparison semantics)",
    "scaleRelationSetRef": "hash(scope, subject set, relation-set policy, canonical relation refs, status)",
    "scaleSystemSeedRef": "hash(scope, subject set, relation set, status)",
    "excluded_from_identity": [
      "display label",
      "display color",
      "UI ordering beyond canonical lexical serialization",
      "free-form comment"
    ]
  },
  "status_policy": {
    "noEligibilityEvidence": "N_A",
    "eligibilityAgreement": "OK + RESOLVED",
    "eligibilityConflict": "OK + CONFLICT",
    "unspecifiedEligibility": "resolved UNSPECIFIED then excluded by v1 subject-set policy",
    "subjectSetOverflow": "N_A; no truncation",
    "relationRequestSameSubject": "INVALID",
    "relationRequestMissingSubject": "N_A",
    "relationRequestConflictedSubject": "N_A",
    "relationSetOverflow": "N_A; no truncation",
    "duplicateExactRelationRequest": "deduplicated by identity",
    "validRequestedRelation": "OK",
    "N_A_not_zero": true
  },
  "relation_build_rules": [
    "Resolve eligibility before building ScaleSubjectSet.",
    "Include only RESOLVED SCALE_SUBJECT under v1 policy.",
    "Exclude NON_SCALE_SUBJECT.",
    "Exclude UNSPECIFIED.",
    "Exclude CONFLICT.",
    "Do not use confidence to choose among conflicting eligibility evidence.",
    "Require explicit valid ScaleMeasurementBinding.",
    "Require explicit valid ScaleRelationRequest.",
    "Canonicalize pair identity lexically only.",
    "Require subjectRefA != subjectRefB.",
    "Require both subjects to exist in the exact ScaleSubjectSet.",
    "Deduplicate exact relation identities only.",
    "Do not merge different measurement bindings.",
    "Do not fallback WIDTH→MAX_EXTENT or VISIBLE_AREA→BBOX_AREA_PROXY.",
    "Do not create a full Cartesian product.",
    "Do not truncate on maxRelations overflow.",
    "Build relation identities without numeric size values."
  ],
  "critical_firewalls": [
    "16.00 owns relation identity/model only",
    "16.00 computes no pairwise numeric ratio",
    "16.00 computes no scale class",
    "16.00 computes no scale ladder",
    "16.00 computes no scale score",
    "16.00 owns no MetricResult",
    "16.00 owns no independent numeric vote",
    "scale-subject eligibility must be explicit",
    "object existence != scale-subject eligibility",
    "large object != scale-subject eligibility",
    "small object != scale-subject eligibility",
    "bounding-box size != scale-subject eligibility",
    "visual mass != scale-subject eligibility",
    "dominance != scale-subject eligibility",
    "semantic importance != scale-subject eligibility",
    "transform scale parameter != scale-subject eligibility",
    "UNSPECIFIED != missing evidence",
    "missing evidence => N_A, not UNSPECIFIED",
    "confidence cannot break eligibility conflict",
    "confidence != size rank",
    "confidence != hierarchy rank",
    "ScaleSubject != measured size",
    "ScaleSubject != size class",
    "subject count != scale diversity",
    "subject count != hierarchy",
    "subject count != score",
    "measurement binding != measurement value",
    "measurement binding != ratio",
    "measurement binding != desirability",
    "measure channel must match measure dimension",
    "VISIBLE_AREA != BBOX_AREA_PROXY",
    "WIDTH != HEIGHT",
    "WIDTH != MAX_EXTENT",
    "HEIGHT != MAX_EXTENT",
    "MAX_EXTENT != MIN_EXTENT",
    "TEXT_EM_HEIGHT != generic object height",
    "STROKE_WIDTH != object size",
    "LINEAR != AREA",
    "AREA ratio != linear scale ratio",
    "EXPLICIT_SCALAR requires explicit scalar semantics",
    "different measurement methods are not silently comparable",
    "different reference contexts are not silently comparable",
    "different scalar semantics are not silently comparable",
    "no fallback between size channels",
    "no universal preferred size channel",
    "ScaleRelation pair identity is unordered",
    "lexical pair order != observed size order",
    "lexical pair order != numerator/denominator",
    "lexical pair order != hierarchy order",
    "lexical pair order != visual priority",
    "subjectRefA != subjectRefB",
    "relation request must be explicit",
    "relation selection mode = EXPLICIT_PAIR_BINDINGS_ONLY",
    "no implicit all-pairs relation generation",
    "full Cartesian product forbidden",
    "relation count != scale diversity",
    "relation count != hierarchy quality",
    "relation count != expressive differentiation",
    "ScaleRelation != size-ratio descriptor",
    "ScaleRelation.numericRatio remains null in 16.00",
    "ScaleRelation.sizeClass remains null in 16.00",
    "ScaleRelation.scaleStep remains null in 16.00",
    "ScaleRelation.score remains null in 16.00",
    "ratio 1 meaning is deferred to 16.01 evidence",
    "near-equal ratio != automatically bad",
    "equal observed size != hierarchy violation",
    "large size != semantic importance",
    "small size != decorative role",
    "size ratio != visual mass ratio",
    "size ratio != dominance ratio",
    "size ratio != contrast ratio",
    "size ratio != spacing ratio",
    "size ratio != aspect ratio",
    "object-to-object scale relation != part-to-whole proportion",
    "object-to-object scale relation != single-object aspect ratio",
    "Topic16 != Topic17 proportional-system owner",
    "Topic16 != Compo18 hierarchy owner",
    "Topic16 != Compo4 visual-mass owner",
    "Topic16 != Compo13 dominance owner",
    "Topic16 != Topic15 microdetail size-envelope owner",
    "transform scale factor ownership remains Compo3.05",
    "format normalization / global scale invariance ownership remains Compo6.03",
    "raw geometry measurement remains foreign-owned",
    "relation identity does not mutate geometry",
    "relation identity does not mutate semantics",
    "relation identity does not mutate measurement method",
    "root ScaleRelation records are immutable",
    "ScaleSystemSeed is immutable",
    "downstream attachment != root mutation",
    "correction request != foreign mutation",
    "N_A != 0",
    "INVALID != 0",
    "local != global",
    "geometry != interpretation",
    "descriptor != score",
    "heuristic != law",
    "one metric = one owner",
    "module execution order != rule priority",
    "no universal beautyScore",
    "no universal ideal size ratio",
    "no implicit golden ratio",
    "no implicit 1.618 target",
    "no implicit large/medium/small thresholds",
    "no implicit scale-ladder step",
    "IDEA != CANON",
    "EXPERIMENT != CANON"
  ],
  "correction_request_schema": {
    "scaleRelationModelCorrectionRequestRef": "stable identity",
    "targetOwnerRef": "eligibility / binding / relation-request owner",
    "reasonCode": "ELIGIBILITY_WRONG|ELIGIBILITY_CONFLICT_WRONG|MEASURE_CHANNEL_WRONG|MEASUREMENT_METHOD_WRONG|REFERENCE_CONTEXT_WRONG|SCALAR_SEMANTICS_WRONG|RELATION_PAIR_WRONG|RELATION_BINDING_WRONG|SUBJECT_MISSING",
    "subjectRefs": "canonical refs[]",
    "evidenceRefs": "canonical refs[]",
    "suggestedAction": "non-mutating review request",
    "status": "OPEN|INVALID",
    "mutationAllowed": false
  },
  "deferred_downstream": {
    "16.01": [
      "owner-qualified positive scalar size magnitude evidence",
      "exact same-binding comparability enforcement",
      "pairwise larger/smaller/equal resolution",
      "pairwise numeric size ratio",
      "ratio distance from equality descriptor",
      "near-equal descriptive band under explicit policy",
      "ScaleRatioDescriptor",
      "ScaleRelationRatioAttachment"
    ],
    "16.02": [
      "explicit scale-class profile",
      "Large/Medium/Small class thresholds or clustering policy",
      "class assignment descriptors",
      "class ambiguity/conflict semantics",
      "ScaleClassAttachment"
    ],
    "16.03": [
      "scale ladder construction",
      "step descriptors",
      "distribution descriptors",
      "repeated scale-level families",
      "ladder gaps / occupied levels",
      "ScaleLadderAttachment"
    ],
    "16.04": [
      "explicit target scale-relation profile",
      "near-equal target semantics",
      "component/composite MetricResult ownership",
      "exact independent-vote budget for Topic16",
      "bounded deterministic repair candidates",
      "final Topic16 regression tests"
    ]
  },
  "IDEAS_REFS": [
    "IDEA-01 full human test after all 72 topics; prepare hooks for perceived scale differentiation",
    "IDEA-02 semantics before placement; scale-subject eligibility and comparison intent stay explicit",
    "IDEA-03 explicit priorities; module order and lexical pair order never become conflict priority",
    "IDEA-04 collect structured scale-relation data for future composition model",
    "IDEA-05 preserve reasons for human corrections to scale comparisons",
    "IDEA-06 structured machine-readable data layer for website",
    "IDEA-07 graphics-for-post-text research remains downstream/separate"
  ],
  "DATA_CAPTURE": [
    "sceneRef",
    "scopeRef",
    "snapshotRef",
    "eligibilityEvidenceRefs[]",
    "eligibilityResolutionRefs[]",
    "resolvedEligibilityBySubject",
    "eligibilityConflictBySubject",
    "scaleSubjectSetPolicyRef",
    "scaleSubjectRefs[]",
    "scaleSubjectSetRef",
    "scaleMeasurementBindingRefs[]",
    "measureChannelByBinding",
    "measureDimensionByBinding",
    "measurementMethodByBinding",
    "referenceContextByBinding",
    "scalarSemanticsByBinding",
    "scaleRelationRequestRefs[]",
    "requestedPairByRef",
    "measurementBindingByRequest",
    "scaleRelationSetPolicyRef",
    "scaleRelationRefs[]",
    "relationPairByRef",
    "relationBindingByRef",
    "scaleRelationSetRef",
    "scaleSystemSeedRef",
    "relationSetStatus",
    "humanReasonCodes[]",
    "futureRatioDescriptorRefs[]",
    "futureScaleClassRefs[]",
    "futureScaleLadderRefs[]",
    "futureMetricResultRefs[]"
  ],
  "DEFERRED_SEMANTIC_INPUTS": [
    "whether near-equal size is desirable or undesirable in a target style",
    "which ratio bands count as expressive differentiation",
    "desired number of scale classes",
    "desired scale-ladder spacing",
    "semantic importance of size differences",
    "global hierarchy consequences of size differences",
    "final Topic16 target profile"
  ],
  "HUMAN_FEEDBACK_HOOKS": [
    "SCALE_SUBJECT_SHOULD_BE_INCLUDED",
    "SCALE_SUBJECT_SHOULD_BE_EXCLUDED",
    "ELIGIBILITY_CONFLICT_REAL",
    "ELIGIBILITY_CONFLICT_SHOULD_RESOLVE",
    "MEASURE_CHANNEL_WRONG",
    "VISIBLE_AREA_PREFERRED",
    "BBOX_AREA_PROXY_PREFERRED",
    "WIDTH_PREFERRED",
    "HEIGHT_PREFERRED",
    "MAX_EXTENT_PREFERRED",
    "MIN_EXTENT_PREFERRED",
    "TEXT_EM_HEIGHT_PREFERRED",
    "STROKE_WIDTH_PREFERRED",
    "EXPLICIT_SCALAR_SEMANTICS_WRONG",
    "MEASUREMENT_METHOD_WRONG",
    "REFERENCE_CONTEXT_WRONG",
    "PAIR_SHOULD_EXIST",
    "PAIR_SHOULD_NOT_EXIST",
    "PAIR_BINDING_WRONG",
    "RELATION_SET_TOO_LARGE",
    "RELATION_SET_TOO_SMALL",
    "NEAR_EQUAL_FEELS_TOO_CLOSE",
    "NEAR_EQUAL_FEELS_DISTINCT_ENOUGH",
    "SIZE_DIFFERENCE_FEELS_TOO_STRONG",
    "SIZE_DIFFERENCE_FEELS_TOO_WEAK"
  ],
  "CONFLICT_PRIORITY_ASSUMPTIONS": [
    "module execution order is not priority",
    "eligibility evidence order is not priority",
    "confidence is not conflict priority",
    "lexical subject order is not scale rank",
    "relation serialization order is not visual priority",
    "measurement-binding list order is not preferred-channel priority",
    "future reviewed global conflict-priority owner remains authoritative"
  ],
  "LAB_HOOKS": [
    "human study: perceived difference versus geometric linear ratio",
    "human study: perceived difference versus area ratio",
    "compare visible-area and bbox-area proxy judgments",
    "study when equal/near-equal sizes feel intentional versus accidental",
    "study text-em-height versus generic object-size comparability",
    "collect cases where visual mass and geometric size diverge",
    "collect cases where semantic importance and geometric size diverge",
    "study explicit scale-ladder preferences by style",
    "measure agreement on large/medium/small class boundaries"
  ],
  "observation_record": {
    "moduleRef": "Compo16.00",
    "metricResults": [],
    "futurePairwiseRatioRefs": [],
    "futureScaleClassRefs": [],
    "futureScaleLadderRefs": []
  },
  "stop_condition": "STOP after 16.00. Do not create 16.01 in this module."
}
VISITS / ...