COMPO · 16.02 · LARGE / MEDIUM / SMALL CLASSES

Class is relative.
Meaning is not implied.

16.02 вводит SMALL/MEDIUM/LARGE как profile-relative категории размеров. Классификация строится через explicit reference subject и exact 16.01 magnitude lineage. LARGE не означает dominant, а SMALL не означает microdetail.

ModuleCompo 16.02
ClassesS / M / L
Referenceexplicit
Thresholdsprofile-only
Metricsnone
NextSTOP

Class is relative to an explicit profile

00 / contract
16.01 resolved magnitude + explicit reference subject + exact same binding + exact same unit → subject/reference basis ratio explicit class profile: boundary S→M boundary M→L → SMALL | MEDIUM | LARGE NO universal thresholds NO distribution inference NO hierarchy meaning NO score

Categorical scale, not hierarchy

01 / ownership
OWNS

Class profile

Explicit reference subject, binding and two deterministic boundaries.

OWNS

Assignment

Reference-normalized basis descriptor and profile-relative class.

NO SCORE

Category only

owns_metrics=[]. LARGE is not a vote for importance.

SMALL / MEDIUM / LARGE

02 / taxonomy
ClassExplicit profile rule
SMALLratio < smallToMediumBoundary
MEDIUMsmallToMediumBoundary ≤ ratio < mediumToLargeBoundary
LARGEratio ≥ mediumToLargeBoundary
SMALL < MEDIUM < LARGE = SIZE ORDER ONLY NOT: hierarchy order dominance order importance order quality order score order

Explicit ScaleClassProfile

03 / no defaults
ScaleClassProfile {
  scaleClassProfileRef,

  scopeRef,
  scaleSubjectSetRef,
  scaleRelationRatioSetRef,
  scaleMeasurementBindingRef,

  basisKind:
    REFERENCE_SUBJECT_RATIO,

  referenceSubjectRef,

  smallToMediumBoundary: finite > 0,
  mediumToLargeBoundary:
    finite > smallToMediumBoundary,

  source / owner / provenance,

  status,
  mutationAllowed: false
}
No universal L/M/S cut points.

No equal thirds, quantiles, clustering, golden ratio or implicit 1.618 boundary.

Reference subject is normalization only

04 / semantic firewall
referenceSubjectRef != automatically MEDIUM != dominant != focal != semantically important != ideal size ratio(reference/reference) = 1 which class contains 1 depends ONLY on explicit profile boundaries

Reference-normalized basis

05 / exact lineage
basisRatio
  = subjectMagnitude
    / referenceMagnitude

Required:
  exact same binding
  exact same unit
  both magnitudes resolved OK
  both magnitudes > 0
  exact ratio-set lineage

Domain:
  (0,+∞)
Classification helper only.

This directional basis does not replace the general symmetric ScaleRatioDescriptor owned by 16.01.

Explicit assignment requests only

06 / bounded selection
ScaleClassAssignmentSetPolicy {
  selectionMode:
    EXPLICIT_REQUESTS_ONLY,

  duplicatePolicy:
    DEDUP_EXACT_IDENTITY,

  missingSubjectPolicy:
    N_A_NO_GUESS,

  missingMagnitudePolicy:
    N_A_NO_GUESS,

  magnitudeConflictPolicy:
    N_A_NO_GUESS,

  maxAssignments:
    1..4096,

  overflowPolicy:
    N_A_NO_TRUNCATION
}
NO: implicit classify-all profile × subject Cartesian product silent truncation

Boundary cases are deterministic

07 / exact inclusivity
basisRatioClassBoundary case
< S→MSMALLBELOW_SMALL_TO_MEDIUM
= S→MMEDIUMAT_SMALL_TO_MEDIUM
betweenMEDIUMBETWEEN
= M→LLARGEAT_MEDIUM_TO_LARGE
> M→LLARGEABOVE_MEDIUM_TO_LARGE

Class label is not role or importance

08 / interpretation
LARGE != dominant LARGE != focal LARGE != important MEDIUM != support role SMALL != microdetail SMALL != decorative SMALL != unimportant classKind != score class assignment != hierarchy vote

Different profiles may disagree legitimately

09 / comparability
Comparable class assignments require: same ScaleClassProfileRef same binding same reference subject same ratio-set lineage Different-profile: LARGE vs MEDIUM does NOT imply conflict. Profile-relative categories remain profile-relative.

Attachments do not mutate roots

10 / lineage
ScaleSystemClassAttachment {
  scaleSystemRatioAttachmentRef,
  scaleClassAssignmentSetRef,

  status,
  mutationAllowed: false
}
16.00 ScaleSystemSeed.scaleClassAttachmentRef remains null 16.01 ratio set remains immutable 16.02 attaches derived class data only

Distribution and scoring remain downstream

11 / module boundary
16.00Relation identity and measurement binding.
16.01Magnitude resolution, pairwise ratios, near-equal descriptors.
16.02Profile-relative SMALL/MEDIUM/LARGE assignments.
16.03Scale ladders, class frequencies and distributions.
16.04Target scoring, MetricResult ownership and repair candidates.

No hidden distribution algorithm

12 / firewalls
Forbidden shortcuts

Quantiles, k-means, equal thirds, golden-ratio bands, class→dominance, class counts→quality.

Preserved

Explicit profile, explicit reference, exact lineage, deterministic boundaries, N_A != class, no metrics.

CANON → LAB → DATA → IDEAS

13 / mandatory hooks
IDEAS_REFS[]7 project directions preserved.
DATA_CAPTURE[]Profile, reference, basis ratio and assignment lineage.
DEFERRED_SEMANTIC_INPUTS[]Desired class frequencies and ladder semantics stay downstream.
HUMAN_FEEDBACK_HOOKS[]Boundary/reference/class corrections.
CONFLICT_PRIORITY_ASSUMPTIONS[]Class order is not global priority.
LAB_HOOKS[]Human class-boundary calibration studies.

16.02 regression suite

14 / deterministic tests

Tests cover exact profile validation, positive ordered boundaries, exact reference/magnitude lineage, deterministic boundary inclusion, explicit requests, overflow N_A, cross-profile independence, immutable attachments and no-score/no-hierarchy firewalls.

Tests not run yet.

DATA FOR LAYOUT ENGINE

15 / machine contract
{
  "module": "Compo 16.02",
  "name": "large_medium_small_classes",
  "version": "1.0-canonical",
  "canonical_main_title": "Large/medium/small classes",
  "topic": "16_МАСШТАБ_И_ОТНОШЕНИЕ_РАЗМЕРОВ",
  "scope": "EXPLICIT_REFERENCE_NORMALIZED_PROFILE_RELATIVE_LARGE_MEDIUM_SMALL_CLASS_ASSIGNMENT_OVER_EXACT_16_01_MAGNITUDE_LINEAGE_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.02",
    "owns": [
      "ScaleClassKind taxonomy",
      "ScaleClassBasisKind taxonomy",
      "ScaleClassProfile",
      "ScaleClassAssignmentRequest",
      "ScaleClassAssignmentSetPolicy",
      "ScaleClassBasisDescriptor",
      "ScaleClassAssignment",
      "ScaleClassAssignmentSet",
      "ScaleRelationClassAttachment",
      "ScaleSystemClassAttachment",
      "profile-relative size-order semantics SMALL<MEDIUM<LARGE",
      "exact reference-normalized class-basis computation",
      "identity/status/provenance rules for Topic16 class layer",
      "non-mutating correction request for class profile / assignment request / magnitude lineage"
    ],
    "does_not_own": [
      "ScaleSubject eligibility / ScaleRelation identity — Compo16.00",
      "raw magnitude evidence / magnitude resolution — Compo16.01",
      "pairwise numeric size ratios — Compo16.01",
      "near-equal policy / near-equal bands — Compo16.01",
      "raw geometry measurement — upstream geometry/measurement owners",
      "measurement binding definition — Compo16.00",
      "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",
      "scale ladders / scale distributions — Compo16.03",
      "class-frequency distribution ownership — Compo16.03",
      "target scoring / MetricResult / repair generation — Compo16.04",
      "aspect ratio / part-to-whole proportions — Topic17",
      "generic hierarchy/subordination — Compo18",
      "semantic importance",
      "global balance",
      "foreign geometry/style/semantic mutation"
    ]
  },
  "consumes": [
    "valid Compo16.00 ScaleSubjectSet identity",
    "valid Compo16.01 ScaleRelationRatioSet",
    "resolved Compo16.01 ScaleMagnitudeResolution records",
    "explicit ScaleClassProfile",
    "explicit ScaleClassAssignmentRequest records",
    "explicit ScaleClassAssignmentSetPolicy"
  ],
  "provides": [
    "ScaleClassBasisDescriptor[]",
    "ScaleClassAssignment[]",
    "ScaleClassAssignmentSet",
    "ScaleRelationClassAttachment[] where exact supporting relation exists",
    "ScaleSystemClassAttachment",
    "Topic16.02 observation record"
  ],
  "owns_metrics": [],
  "metric_ownership_note": "16.02 owns profile-relative class assignments only. SMALL/MEDIUM/LARGE are categorical descriptors, not MetricResult values, scores, hierarchy votes or independent numeric votes.",
  "scale_class_kind_taxonomy": {
    "SMALL": "Reference-normalized basis ratio below explicit small→medium boundary.",
    "MEDIUM": "Basis ratio at/above explicit small→medium boundary and below explicit medium→large boundary.",
    "LARGE": "Basis ratio at/above explicit medium→large boundary."
  },
  "scale_class_size_order": {
    "order": [
      "SMALL",
      "MEDIUM",
      "LARGE"
    ],
    "semantics": "SIZE_ORDER_ONLY",
    "firewall": "Class order is only ordinal size-category order inside one explicit profile. It is not importance, hierarchy, dominance, score, priority or quality order."
  },
  "scale_class_basis_kind_taxonomy": {
    "REFERENCE_SUBJECT_RATIO": "subjectMagnitude / explicitReferenceSubjectMagnitude under the exact same Compo16.00 binding and exact same Compo16.01 measurement unit."
  },
  "scale_class_profile_schema": {
    "scaleClassProfileRef": "stable identity",
    "scopeRef": "Topic16 scope",
    "scaleSubjectSetRef": "exact Compo16.00 subject set",
    "scaleRelationRatioSetRef": "exact Compo16.01 ratio set",
    "scaleMeasurementBindingRef": "exact binding used for all class-basis magnitudes",
    "basisKind": "REFERENCE_SUBJECT_RATIO",
    "referenceSubjectRef": "explicit reference subject in scaleSubjectSet",
    "smallToMediumBoundary": "finite strictly positive",
    "mediumToLargeBoundary": "finite strictly greater than smallToMediumBoundary",
    "boundarySemantics": {
      "SMALL": "basisRatio < smallToMediumBoundary",
      "MEDIUM": "smallToMediumBoundary <= basisRatio < mediumToLargeBoundary",
      "LARGE": "basisRatio >= mediumToLargeBoundary"
    },
    "profileSourceRef": "explicit source",
    "profileSourceOwnerRef": "owner",
    "provenance": "canonical provenance",
    "status": "OK|INVALID",
    "mutationAllowed": false,
    "default": "NONE — no implicit class profile and no universal L/M/S boundaries",
    "firewall": "The reference subject is a normalization reference, not automatically MEDIUM, dominant, focal, semantically important or ideal. Whether ratio=1 lands in SMALL/MEDIUM/LARGE is entirely determined by the explicit profile boundaries."
  },
  "scale_class_assignment_request_schema": {
    "scaleClassAssignmentRequestRef": "stable identity",
    "scopeRef": "scope",
    "scaleClassProfileRef": "exact class profile",
    "subjectRef": "explicit subject to classify",
    "requestSourceRef": "explicit source",
    "requestSourceOwnerRef": "owner",
    "provenance": "canonical provenance",
    "status": "OK|INVALID",
    "mutationAllowed": false,
    "firewall": "Classification is explicit-request-only in v1. 16.02 does not silently classify every subject in every profile."
  },
  "scale_class_assignment_set_policy_schema": {
    "scaleClassAssignmentSetPolicyRef": "stable identity",
    "selectionMode": "EXPLICIT_REQUESTS_ONLY",
    "duplicatePolicy": "DEDUP_EXACT_IDENTITY",
    "missingSubjectPolicy": "N_A_NO_GUESS",
    "missingMagnitudePolicy": "N_A_NO_GUESS",
    "magnitudeConflictPolicy": "N_A_NO_GUESS",
    "maxAssignments": "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": "No hidden all-subject/profile Cartesian product. Lexical order is serialization only, not class rank or visual priority."
  },
  "scale_class_basis_descriptor_schema": {
    "scaleClassBasisDescriptorRef": "stable identity",
    "scaleClassProfileRef": "exact profile",
    "subjectRef": "classified subject",
    "referenceSubjectRef": "profile reference subject",
    "subjectMagnitudeResolutionRef": "exact Compo16.01 magnitude resolution",
    "referenceMagnitudeResolutionRef": "exact Compo16.01 magnitude resolution",
    "scaleMeasurementBindingRef": "exact shared binding",
    "measurementUnitRef": "exact shared unit",
    "basisKind": "REFERENCE_SUBJECT_RATIO",
    "basisRatio": "finite strictly positive subjectMagnitude/referenceMagnitude",
    "status": "OK|N_A|INVALID",
    "provenance": "DERIVED",
    "mutationAllowed": false,
    "firewall": "basisRatio is a class-normalization helper owned only for 16.02 classification. It does not replace or redefine the general pairwise ScaleRatioDescriptor owned by 16.01."
  },
  "scale_class_assignment_schema": {
    "scaleClassAssignmentRef": "stable identity",
    "scaleClassAssignmentRequestRef": "exact request",
    "scaleClassProfileRef": "exact profile",
    "scaleClassBasisDescriptorRef": "exact basis descriptor",
    "subjectRef": "classified subject",
    "classKind": "SMALL|MEDIUM|LARGE",
    "boundaryCase": "BELOW_SMALL_TO_MEDIUM|AT_SMALL_TO_MEDIUM|BETWEEN|AT_MEDIUM_TO_LARGE|ABOVE_MEDIUM_TO_LARGE",
    "status": "OK|N_A|INVALID",
    "provenance": "DERIVED",
    "mutationAllowed": false,
    "firewall": "Class assignment is profile-relative categorical interpretation. LARGE != dominant; SMALL != microdetail; MEDIUM != support; classKind != score."
  },
  "scale_class_assignment_set_schema": {
    "scaleClassAssignmentSetRef": "stable identity",
    "scopeRef": "scope",
    "scaleClassProfileRef": "exact single profile in v1 set",
    "scaleRelationRatioSetRef": "exact upstream ratio set",
    "scaleClassAssignmentSetPolicyRef": "explicit policy",
    "scaleClassBasisDescriptorRefs": "canonical refs",
    "scaleClassAssignmentRefs": "canonical refs",
    "status": "OK|N_A|INVALID",
    "reasonCode": "explicit",
    "mutationAllowed": false,
    "firewall": "Assignment set does not own class-frequency distribution, ladder quality, balance, hierarchy or scoring. Assignment count and class counts are not scores."
  },
  "scale_relation_class_attachment_schema": {
    "scaleRelationClassAttachmentRef": "stable identity",
    "scaleRelationRef": "exact supporting relation when one exists between classified subject and reference subject under exact binding",
    "scaleClassProfileRef": "exact profile",
    "subjectRef": "classified subject",
    "referenceSubjectRef": "reference subject",
    "scaleClassAssignmentRef": "exact assignment",
    "status": "OK|N_A|INVALID",
    "mutationAllowed": false,
    "firewall": "This is an optional relation-local attachment. Missing exact supporting relation does not erase a valid class assignment derived from exact magnitude lineage."
  },
  "scale_system_class_attachment_schema": {
    "scaleSystemClassAttachmentRef": "stable identity",
    "scaleSystemRatioAttachmentRef": "exact 16.01 system ratio attachment",
    "scaleClassAssignmentSetRef": "exact 16.02 assignment set",
    "status": "OK|N_A|INVALID",
    "mutationAllowed": false,
    "firewall": "16.00 ScaleSystemSeed.scaleClassAttachmentRef remains null. Downstream class attachment never mutates the root seed or 16.01 ratio set."
  },
  "comparability_contract": {
    "assignment_comparison_requires": [
      "same exact ScaleClassProfileRef",
      "same exact scaleMeasurementBindingRef",
      "same exact referenceSubjectRef",
      "same exact scaleRelationRatioSetRef",
      "compatible snapshot lineage"
    ],
    "forbids": [
      "cross-profile SMALL/MEDIUM/LARGE equivalence assumption",
      "cross-reference-subject class equivalence assumption",
      "cross-binding class equivalence assumption",
      "cross-unit implicit conversion",
      "class label comparison as hierarchy comparison",
      "class order comparison as quality comparison"
    ],
    "firewall": "Two subjects classified LARGE under different profiles are not canonically equivalent in magnitude. Different-profile class disagreement is not a conflict."
  },
  "class_math_contract": {
    "basisRatio": "subjectMagnitude / referenceMagnitude",
    "domain": "(0,+∞)",
    "SMALL": "basisRatio < smallToMediumBoundary",
    "MEDIUM": "smallToMediumBoundary <= basisRatio < mediumToLargeBoundary",
    "LARGE": "basisRatio >= mediumToLargeBoundary",
    "boundaryDeterminism": {
      "exactSmallToMediumBoundary": "MEDIUM",
      "exactMediumToLargeBoundary": "LARGE"
    },
    "firewall": "No quantile inference, k-means, equal-third partition, golden-ratio partition, distribution-derived threshold or universal threshold in 16.02."
  },
  "status_policy": {
    "invalidClassProfile": "INVALID",
    "subjectNotInScaleSubjectSet": "N_A",
    "referenceSubjectNotInScaleSubjectSet": "N_A",
    "missingSubjectMagnitude": "N_A",
    "missingReferenceMagnitude": "N_A",
    "magnitudeResolutionConflict": "N_A",
    "bindingMismatch": "N_A",
    "unitMismatch": "N_A",
    "validBasisRatio": "OK",
    "validClassAssignment": "OK",
    "duplicateExactAssignmentRequest": "deduplicated by identity",
    "assignmentSetOverflow": "N_A; no truncation",
    "missingSupportingRelationAttachment": "N_A attachment only; valid class assignment may remain OK",
    "N_A_not_zero": true
  },
  "identity_policy": {
    "scaleClassProfileRef": "hash(scope, subject set, ratio set, binding, basis kind, reference subject, exact boundaries, source/owner, provenance, status)",
    "scaleClassAssignmentRequestRef": "hash(scope, profile, subject, source/owner, provenance, status)",
    "scaleClassAssignmentSetPolicyRef": "hash(selection/duplicate/missing/conflict/max/overflow/ordering policy, source/owner, provenance, status)",
    "scaleClassBasisDescriptorRef": "hash(profile, subject/reference, magnitude-resolution refs, binding, unit, basis kind/value, status)",
    "scaleClassAssignmentRef": "hash(request, profile, basis descriptor, subject, class kind, boundary case, status)",
    "scaleClassAssignmentSetRef": "hash(scope, profile, ratio set, policy, canonical basis/assignment refs, status)",
    "scaleRelationClassAttachmentRef": "hash(relation, profile, subject/reference, assignment, status)",
    "scaleSystemClassAttachmentRef": "hash(system ratio attachment, assignment set, status)",
    "excluded_from_identity": [
      "display label",
      "display color",
      "UI ordering outside lexical serialization",
      "free-form comment"
    ]
  },
  "critical_firewalls": [
    "16.02 consumes Compo16.01 magnitude resolutions; it does not own raw magnitude evidence",
    "16.02 consumes Compo16.01 ratio-set lineage; it does not redefine pairwise ratio ownership",
    "16.02 owns profile-relative scale classes only",
    "16.02 owns no MetricResult",
    "16.02 owns no independent numeric vote",
    "class profile must be explicit",
    "no implicit class profile",
    "no universal LARGE/MEDIUM/SMALL thresholds",
    "no implicit equal-third thresholds",
    "no quantile-derived thresholds in 16.02",
    "no k-means class inference in 16.02",
    "no golden-ratio class boundaries",
    "no implicit 1.618 class boundary",
    "reference subject must be explicit",
    "reference subject != automatically MEDIUM",
    "reference subject != dominant",
    "reference subject != focal",
    "reference subject != semantically important",
    "reference subject != ideal size",
    "basis kind = REFERENCE_SUBJECT_RATIO only in v1",
    "basisRatio = subjectMagnitude / referenceMagnitude",
    "basisRatio must be finite and strictly positive",
    "basisRatio != ScaleRatioDescriptor ownership transfer",
    "basisRatio != score",
    "basisRatio != desirability",
    "exact same binding required",
    "exact same measurement unit required",
    "different units are not silently converted",
    "different bindings are not silently comparable",
    "missing magnitude => N_A",
    "magnitude conflict => N_A",
    "N_A != SMALL",
    "N_A != MEDIUM",
    "N_A != LARGE",
    "SMALL boundary is strict upper",
    "MEDIUM includes exact small-to-medium boundary",
    "MEDIUM excludes exact medium-to-large boundary",
    "LARGE includes exact medium-to-large boundary",
    "class boundary semantics are deterministic",
    "SMALL < MEDIUM < LARGE is size order only",
    "class size order != hierarchy order",
    "class size order != dominance order",
    "class size order != importance order",
    "class size order != score order",
    "class size order != quality order",
    "LARGE != dominant",
    "LARGE != focal",
    "LARGE != semantically important",
    "MEDIUM != support role",
    "SMALL != microdetail",
    "SMALL != decorative role",
    "SMALL != unimportant",
    "classKind != score",
    "classKind != MetricResult",
    "class assignment != hierarchy vote",
    "class assignment != visual-mass vote",
    "cross-profile class disagreement != conflict",
    "cross-profile class labels are not silently comparable",
    "cross-reference-subject class labels are not silently comparable",
    "cross-binding class labels are not silently comparable",
    "assignment request must be explicit",
    "assignment selection mode = EXPLICIT_REQUESTS_ONLY",
    "no implicit classify-all-subjects operation",
    "no profile×subject Cartesian product",
    "assignment set overflow => N_A without truncation",
    "assignment count != scale distribution",
    "SMALL count != scale distribution score",
    "MEDIUM count != scale distribution score",
    "LARGE count != scale distribution score",
    "class-frequency distribution ownership remains Compo16.03",
    "no scale ladder in 16.02",
    "no scale distribution descriptor in 16.02",
    "no target scoring in 16.02",
    "no repair generator in 16.02",
    "ScaleClassAssignment != MetricResult",
    "ScaleClassAssignmentSet != MetricResult",
    "ScaleSubject/ScaleRelation ownership remains Compo16.00",
    "magnitude/ratio/near-equal ownership remains Compo16.01",
    "scale ladder/distribution ownership remains Compo16.03",
    "scoring/generator ownership remains Compo16.04",
    "visual mass ownership remains Compo4",
    "dominance ownership remains Compo13",
    "microdetail role-envelope ownership remains Topic15",
    "aspect ratio / part-to-whole ownership remains Topic17",
    "generic hierarchy/subordination remains Compo18 territory",
    "transform scale factor ownership remains Compo3.05",
    "format normalization / global scale invariance ownership remains Compo6.03",
    "raw geometry measurement remains foreign-owned",
    "size class != visual mass class",
    "size class != dominance class",
    "size class != semantic importance class",
    "size class != aspect-ratio class",
    "size class != part-to-whole proportion class",
    "relation class attachment != root relation mutation",
    "system class attachment != ScaleSystemSeed mutation",
    "system class attachment != ratio-set 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",
    "IDEA != CANON",
    "EXPERIMENT != CANON"
  ],
  "correction_request_schema": {
    "scaleClassCorrectionRequestRef": "stable identity",
    "targetOwnerRef": "class-profile / magnitude / binding / request owner",
    "reasonCode": "CLASS_PROFILE_WRONG|REFERENCE_SUBJECT_WRONG|SMALL_MEDIUM_BOUNDARY_WRONG|MEDIUM_LARGE_BOUNDARY_WRONG|MAGNITUDE_LINEAGE_WRONG|UNIT_WRONG|BINDING_WRONG|ASSIGNMENT_REQUEST_WRONG|CLASS_ASSIGNMENT_WRONG",
    "scaleClassProfileRef": "exact profile or null",
    "subjectRefs": "canonical refs[]",
    "evidenceRefs": "canonical refs[]",
    "suggestedAction": "non-mutating review request",
    "status": "OPEN|INVALID",
    "mutationAllowed": false
  },
  "deferred_downstream": {
    "16.03": [
      "scale ladder construction from class and ratio evidence",
      "class-frequency distributions",
      "occupied scale-level descriptors",
      "ladder step descriptors",
      "ladder gaps",
      "repeated scale-level families",
      "ScaleLadderAttachment"
    ],
    "16.04": [
      "explicit target scale-class profile fit",
      "target desirability of class proportions",
      "target desirability of near-equal relations",
      "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; compare explicit class profiles with perceived large/medium/small judgments",
    "IDEA-02 semantics before placement; class reference/context remains explicit",
    "IDEA-03 explicit priorities; class order is size order only and never hidden global priority",
    "IDEA-04 collect structured class-assignment data for future composition model",
    "IDEA-05 preserve reasons for human corrections to class boundaries and assignments",
    "IDEA-06 structured machine-readable data layer for website",
    "IDEA-07 graphics-for-post-text research remains downstream/separate"
  ],
  "DATA_CAPTURE": [
    "sceneRef",
    "scopeRef",
    "snapshotRef",
    "scaleSubjectSetRef",
    "scaleRelationRatioSetRef",
    "scaleMeasurementBindingRef",
    "scaleClassProfileRef",
    "referenceSubjectRef",
    "smallToMediumBoundary",
    "mediumToLargeBoundary",
    "scaleClassAssignmentRequestRefs[]",
    "requestedSubjectByRef",
    "scaleClassAssignmentSetPolicyRef",
    "subjectMagnitudeResolutionRefBySubject",
    "referenceMagnitudeResolutionRef",
    "measurementUnitRef",
    "scaleClassBasisDescriptorRefs[]",
    "basisRatioBySubject",
    "scaleClassAssignmentRefs[]",
    "classKindBySubject",
    "boundaryCaseBySubject",
    "scaleClassAssignmentSetRef",
    "scaleRelationClassAttachmentRefs[]",
    "scaleSystemClassAttachmentRef",
    "classProfileSourceRef",
    "classProfileOwnerRef",
    "humanReasonCodes[]",
    "futureScaleLadderRefs[]",
    "futureClassDistributionRefs[]",
    "futureMetricResultRefs[]"
  ],
  "DEFERRED_SEMANTIC_INPUTS": [
    "desired frequency of SMALL/MEDIUM/LARGE classes",
    "whether one class should dominate numerically",
    "desired scale-ladder progression",
    "desired gaps between scale classes",
    "desired class balance",
    "global hierarchy consequences of class assignments",
    "final Topic16 target profile"
  ],
  "HUMAN_FEEDBACK_HOOKS": [
    "CLASS_PROFILE_WRONG",
    "REFERENCE_SUBJECT_WRONG",
    "REFERENCE_SUBJECT_SHOULD_BE_DIFFERENT",
    "SMALL_MEDIUM_BOUNDARY_TOO_LOW",
    "SMALL_MEDIUM_BOUNDARY_TOO_HIGH",
    "MEDIUM_LARGE_BOUNDARY_TOO_LOW",
    "MEDIUM_LARGE_BOUNDARY_TOO_HIGH",
    "SUBJECT_FEELS_SMALLER",
    "SUBJECT_FEELS_LARGER",
    "SUBJECT_FEELS_MEDIUM",
    "LARGE_ASSIGNMENT_FEELS_WRONG",
    "MEDIUM_ASSIGNMENT_FEELS_WRONG",
    "SMALL_ASSIGNMENT_FEELS_WRONG",
    "BOUNDARY_CASE_FEELS_WRONG",
    "MAGNITUDE_LINEAGE_WRONG",
    "UNIT_WRONG",
    "BINDING_WRONG",
    "CLASS_REQUEST_MISSING",
    "CLASS_REQUEST_SHOULD_NOT_EXIST",
    "CROSS_PROFILE_DIFFERENCE_IS_EXPECTED",
    "CROSS_PROFILE_DIFFERENCE_SHOULD_BE_REVIEWED"
  ],
  "CONFLICT_PRIORITY_ASSUMPTIONS": [
    "module execution order is not priority",
    "class taxonomy order is size order only",
    "SMALL/MEDIUM/LARGE order is not global hierarchy priority",
    "assignment request order is not class priority",
    "profile list order is not preferred-profile priority",
    "reference subject is not hierarchy priority",
    "future reviewed global conflict-priority owner remains authoritative"
  ],
  "LAB_HOOKS": [
    "human study: perceived SMALL/MEDIUM/LARGE versus explicit reference-normalized ratio",
    "compare class judgments under different explicit reference subjects",
    "calibrate profile-specific class boundaries by style",
    "collect cases where LARGE is not dominant",
    "collect cases where SMALL is not microdetail",
    "collect cross-profile class disagreements that are both valid",
    "study boundary sensitivity around exact class cut points",
    "compare class judgments across linear versus area bindings",
    "measure agreement on reference-subject choice"
  ],
  "observation_record": {
    "moduleRef": "Compo16.02",
    "metricResults": [],
    "scaleClassAssignmentRefs": [],
    "futureScaleLadderRefs": [],
    "futureClassDistributionRefs": []
  },
  "stop_condition": "STOP after 16.02. Do not create 16.03 in this module."
}
VISITS / ...