COMPO · 17.01 · SHAPE ASPECT RATIOS

Observed aspect.
No hidden preference.

17.01 вычисляет ordered shape aspect ratio из owner-qualified axis measurements, сохраняя numerator/denominator orientation 17.00. Ratio может быть меньше, равен или больше 1; closeness к square/reference и tolerance остаются downstream.

ModuleCompo 17.01
Ratioordered
Squareexact only
Reference fitnone
Metricsnone
NextSTOP

Observed shape ratio, no target fit

00 / contract
17.00 SHAPE_ASPECT relation + owner-qualified numerator evidence + owner-qualified denominator evidence → measurement resolutions → orderedAspectRatio → inverseAspectRatio → exact orientation class NO: reference closeness near-square tolerance family membership score

Aspect observation only

01 / ownership
OWNS

Axis evidence resolution

Exact owner-qualified measurement lineage for the ordered terms.

OWNS

Ordered aspect ratio

Numerator divided by denominator; no larger-to-smaller normalization.

NO SCORE

Descriptor only

owns_metrics=[]. Tolerance and scoring remain 17.04.

ShapeAxisMeasurementEvidence

02 / owner-qualified evidence
ShapeAxisMeasurementEvidence {
  proportionRelationRef,
  proportionTermRef,
  proportionMeasureBindingRef,

  axisRole,

  value: finite > 0,

  exact:
    unit
    method
    frame
    reference context
    measurement owner,

  evidence source,
  confidence,

  mutationAllowed: false
}

No conflict arbitration

03 / resolution
one valid value → OK duplicate exact-equal values → OK conflicting values → N_A + CONFLICT NO: average median confidence winner geometry fallback

Ordered aspect ratio

04 / math
orderedAspectRatio
  = numeratorValue
    / denominatorValue

inverseAspectRatio
  = denominatorValue
    / numeratorValue

deviationFromSquare
  = orderedAspectRatio - 1

absoluteDeviationFromSquare
  = abs(orderedAspectRatio - 1)
ratio may be: < 1 = 1 > 1 17.01 does NOT normalize to >= 1.

Exact orientation class

05 / no tolerance
orderedAspectRatio > 1NUMERATOR_LONGER
orderedAspectRatio = 1SQUARE_EQUAL
orderedAspectRatio < 1DENOMINATOR_LONGER
SQUARE_EQUAL means exact 1 only. No near-square band in 17.01.

Orientation ≠ landscape/portrait by default

06 / semantic firewall
NUMERATOR_LONGER != automatically LANDSCAPE DENOMINATOR_LONGER != automatically PORTRAIT Mapping requires explicit upstream axis semantics.

Reference links are lineage only

07 / no fit yet
referenceRatioRefs[] copied from 17.00 relation 17.01 does NOT compute: distance to reference tolerance match target desirability reference score

Topic17 ratio stays ordered

08 / Topic16 boundary
Topic16: larger / smaller → symmetric scale differentiation → ratio >= 1 Topic17: numerator / denominator → ordered shape proportion → ratio may be <1 These are NOT interchangeable.

Immutable downstream attachment

09 / root preserved
ShapeAspectAttachment {
  proportionSystemSeedRef,
  shapeAspectObservationSetRef,

  status,
  mutationAllowed: false
}
17.00 ProportionSystemSeed remains unchanged.

Downstream remains separate

10 / next owners
17.01Observed shape aspect ratios.
17.02Part-to-whole membership and observed ratios.
17.03Ratio families and repeated proportional systems.
17.04Tolerance, deviation fit, scoring and repair candidates.

Descriptor ≠ quality

11 / firewalls
deviationFromSquare != penalty absoluteDeviationFromSquare != quality score closer to square != automatically better farther from square != automatically worse orientation class != hierarchy != dominance != quality

CANON → LAB → DATA → IDEAS

12 / mandatory hooks
IDEAS_REFS[]7 project directions preserved.
DATA_CAPTURE[]Axis evidence, resolutions, ratios and orientation descriptors.
DEFERRED_SEMANTIC_INPUTS[]Near-square/reference desirability remains downstream.
HUMAN_FEEDBACK_HOOKS[]Axis evidence and orientation corrections.
CONFLICT_PRIORITY_ASSUMPTIONS[]Axis naming and term order are not global priority.
LAB_HOOKS[]Aspect-ratio perception and near-square studies.

17.01 regression suite

13 / deterministic tests

Tests cover exact binding lineage, positive evidence, conflict handling, ordered ratio math, reciprocal relation, exact square classification, ratio-below-one preservation, no reference fit, immutable attachment and Topic16/17.02–17.04 ownership boundaries.

Tests not run yet.

DATA FOR LAYOUT ENGINE

14 / machine contract
{
  "module": "Compo 17.01",
  "name": "shape_aspect_ratios",
  "version": "1.0-canonical",
  "canonical_main_title": "Shape aspect ratios",
  "topic": "17_ПРОПОРЦИИ_ФОРМ_И_ЧАСТЕЙ_К_ЦЕЛОМУ",
  "scope": "OWNER_QUALIFIED_SHAPE_AXIS_MEASUREMENTS_ORDERED_OBSERVED_ASPECT_RATIOS_AND_NONSCORING_ORIENTATION_DESCRIPTORS_ONLY",
  "main_topic_contract": {
    "topic_title": "Пропорции форм и частей к целому",
    "topic_goal": "Формализует пропорции формы и part-to-whole relations: aspect ratios, повторяемые ratio families, допустимые отклонения и style-specific пропорциональные системы.",
    "expected_output": "ProportionRelation[], ratio families, tolerance profiles",
    "planned_files": [
      "17.00 Proportion schema and reference ratios",
      "17.01 Shape aspect ratios",
      "17.02 Part-to-whole ratios",
      "17.03 Repeated proportional systems",
      "17.04 Tolerance, scoring and tests"
    ]
  },
  "ownership": {
    "owner": "Compo17.01",
    "owns": [
      "ShapeAxisRole taxonomy",
      "ShapeAxisMeasurementEvidence",
      "ShapeAxisMeasurementResolution",
      "ShapeAspectRatioDescriptor",
      "ShapeAspectOrientationDescriptor",
      "ShapeAspectObservationSet",
      "ShapeAspectAttachment",
      "owner-qualified shape-axis evidence resolution",
      "ordered observed shape aspect-ratio computation",
      "shape orientation descriptor derived from ordered ratio direction",
      "identity/status/provenance rules for Topic17 shape-aspect layer",
      "non-mutating correction request for shape-axis / observed aspect evidence"
    ],
    "does_not_own": [
      "ProportionSubject / ProportionMeasureBinding / ProportionRelation identity — Compo17.00",
      "reference-ratio declaration — Compo17.00",
      "part/whole membership semantics — Compo17.02",
      "observed part-to-whole ratios — Compo17.02",
      "ratio families / repeated proportional systems — Compo17.03",
      "tolerance profiles / deviation evaluation — Compo17.04",
      "MetricResult ownership / scoring / repair generation — Compo17.04",
      "raw geometry measurement — upstream geometry/measurement owners",
      "object-to-object scale differentiation — Topic16",
      "Topic16 ScaleRatioDescriptor / scale classes / scale ladders",
      "transform scale parameter — Compo3.05",
      "visual mass — Compo4",
      "format normalization / global scale invariance — Compo6.03",
      "dominance / focal ranking — Compo13",
      "microdetail size/contrast role envelopes — Topic15",
      "generic hierarchy/subordination — Compo18",
      "semantic importance",
      "global balance",
      "final-layout ranking",
      "foreign geometry/style/semantic mutation"
    ]
  },
  "consumes": [
    "valid Compo17.00 SHAPE_ASPECT ProportionRelation",
    "valid Compo17.00 NUMERATOR and DENOMINATOR ProportionTerms",
    "valid Compo17.00 compatible ProportionMeasureBinding comparison signatures",
    "owner-qualified axis measurement evidence",
    "explicit ShapeAspectObservationPolicy"
  ],
  "provides": [
    "ShapeAxisMeasurementResolution[]",
    "ShapeAspectRatioDescriptor[]",
    "ShapeAspectOrientationDescriptor[]",
    "ShapeAspectObservationSet",
    "ShapeAspectAttachment",
    "Topic17.01 observation record"
  ],
  "owns_metrics": [],
  "metric_ownership_note": "17.01 owns observed shape-axis ratios and orientation descriptors only. It does not score closeness to reference ratios, tolerance fit, proportional quality or hierarchy.",
  "shape_axis_role_taxonomy": {
    "PRIMARY_X": "Explicit first shape axis/channel, usually width-like if upstream semantics say so.",
    "PRIMARY_Y": "Explicit second shape axis/channel, usually height-like if upstream semantics say so.",
    "CUSTOM_AXIS_A": "Explicit custom numerator-capable shape dimension channel.",
    "CUSTOM_AXIS_B": "Explicit custom denominator-capable shape dimension channel."
  },
  "shape_axis_measurement_evidence_schema": {
    "shapeAxisMeasurementEvidenceRef": "stable identity",
    "scopeRef": "Topic17 scope",
    "proportionRelationRef": "exact SHAPE_ASPECT relation",
    "proportionTermRef": "exact numerator or denominator term",
    "proportionMeasureBindingRef": "exact 17.00 binding",
    "axisRole": "one ShapeAxisRole",
    "value": "finite strictly positive scalar",
    "measurementUnitRef": "must exactly match binding unit",
    "measurementFrameRef": "must exactly match binding frame",
    "measurementReferenceContextRef": "must exactly match binding context",
    "measurementMethodRef": "must exactly match binding method",
    "measurementOwnerRef": "must exactly match binding owner",
    "measurementEvidenceSourceRef": "foreign evidence source",
    "confidence": "finite [0,1] or null; diagnostic only",
    "status": "OK|INVALID",
    "provenance": "canonical provenance",
    "mutationAllowed": false,
    "firewall": "Evidence is owner-qualified. 17.01 does not synthesize width/height from geometry when explicit upstream evidence is absent."
  },
  "shape_axis_measurement_resolution_schema": {
    "shapeAxisMeasurementResolutionRef": "stable identity",
    "proportionRelationRef": "exact relation",
    "proportionTermRef": "exact term",
    "proportionMeasureBindingRef": "exact binding",
    "axisRole": "exact role",
    "resolvedValue": "finite >0 when OK, null when N_A/INVALID",
    "measurementUnitRef": "exact unit",
    "evidenceRefs": "actual evidence lineage",
    "resolutionPolicy": "EXACT_SINGLE_VALUE_OR_CONSENSUS_EQUAL_ONLY",
    "status": "OK|N_A|INVALID",
    "reasonCode": "explicit",
    "provenance": "DERIVED",
    "mutationAllowed": false,
    "firewall": "Identical duplicate values may resolve. Conflicting values do not average, median, vote by confidence or silently pick one."
  },
  "shape_aspect_ratio_descriptor_schema": {
    "shapeAspectRatioDescriptorRef": "stable identity",
    "proportionRelationRef": "exact SHAPE_ASPECT relation",
    "numeratorTermRef": "exact NUMERATOR term",
    "denominatorTermRef": "exact DENOMINATOR term",
    "numeratorResolutionRef": "exact resolved axis measurement",
    "denominatorResolutionRef": "exact resolved axis measurement",
    "comparisonSignatureRef": "exact shared signature from 17.00",
    "numeratorValue": "finite >0",
    "denominatorValue": "finite >0",
    "orderedAspectRatio": "numeratorValue / denominatorValue, finite >0",
    "inverseAspectRatio": "denominatorValue / numeratorValue, finite >0",
    "deviationFromSquare": "orderedAspectRatio - 1; signed descriptor",
    "absoluteDeviationFromSquare": "abs(orderedAspectRatio - 1)",
    "referenceRatioRefs": "copied explicit references from 17.00 relation; no fit evaluated",
    "status": "OK|N_A|INVALID",
    "provenance": "DERIVED",
    "mutationAllowed": false,
    "firewall": "orderedAspectRatio is not canonicalized to >=1. Reference links are descriptive lineage only; 17.01 does not compute target closeness."
  },
  "shape_aspect_orientation_descriptor_schema": {
    "shapeAspectOrientationDescriptorRef": "stable identity",
    "shapeAspectRatioDescriptorRef": "exact ratio descriptor",
    "orientationClass": "NUMERATOR_LONGER|SQUARE_EQUAL|DENOMINATOR_LONGER",
    "basis": "orderedAspectRatio compared exactly with 1",
    "status": "OK",
    "provenance": "DERIVED",
    "mutationAllowed": false,
    "firewall": "Orientation class describes ordered axis relation only. It is not landscape/portrait unless upstream channel semantics explicitly map axes that way."
  },
  "shape_aspect_observation_policy_schema": {
    "shapeAspectObservationPolicyRef": "stable identity",
    "relationSelectionMode": "EXPLICIT_SHAPE_ASPECT_RELATIONS_ONLY",
    "measurementResolutionMode": "EXACT_SINGLE_VALUE_OR_CONSENSUS_EQUAL_ONLY",
    "duplicateEvidencePolicy": "IDENTICAL_VALUES_MAY_COLLAPSE",
    "conflictPolicy": "N_A_NO_ARBITRATION",
    "maxRelations": "integer 1..4096",
    "maxEvidencePerTerm": "integer 1..4096",
    "overflowPolicy": "N_A_NO_TRUNCATION",
    "policySourceRef": "explicit source",
    "policySourceOwnerRef": "owner",
    "provenance": "canonical provenance",
    "status": "OK|INVALID",
    "mutationAllowed": false,
    "firewall": "No auto-discovery of shape relations, no geometry fallback, no implicit axis swap, no inverse-relation generation."
  },
  "shape_aspect_observation_set_schema": {
    "shapeAspectObservationSetRef": "stable identity",
    "scopeRef": "scope",
    "snapshotRef": "snapshot",
    "proportionSchemaRef": "exact 17.00 schema",
    "shapeAspectObservationPolicyRef": "exact policy",
    "relationRefs": "explicit SHAPE_ASPECT relations",
    "measurementResolutionRefs": "resolved numerator/denominator measurements",
    "shapeAspectRatioDescriptorRefs": "observed ordered ratios",
    "shapeAspectOrientationDescriptorRefs": "orientation descriptors",
    "status": "OK|N_A|INVALID",
    "reasonCode": "explicit",
    "mutationAllowed": false,
    "firewall": "Observation set is descriptive only. Missing/conflicting evidence does not become zero and does not trigger scoring."
  },
  "shape_aspect_attachment_schema": {
    "shapeAspectAttachmentRef": "stable identity",
    "proportionSystemSeedRef": "exact immutable 17.00 seed",
    "shapeAspectObservationSetRef": "exact 17.01 set",
    "status": "OK|N_A|INVALID",
    "mutationAllowed": false,
    "firewall": "Attachment does not mutate ProportionSystemSeed.shapeAspectAttachmentRef in place; it is a downstream record."
  },
  "ratio_math_contract": {
    "orderedAspectRatio": "numeratorValue / denominatorValue",
    "inverseAspectRatio": "denominatorValue / numeratorValue",
    "reciprocalInvariant": "orderedAspectRatio * inverseAspectRatio = 1 within numeric precision",
    "deviationFromSquare": "orderedAspectRatio - 1",
    "absoluteDeviationFromSquare": "abs(orderedAspectRatio - 1)",
    "domains": {
      "orderedAspectRatio": "(0,+∞)",
      "inverseAspectRatio": "(0,+∞)",
      "absoluteDeviationFromSquare": "[0,+∞)"
    },
    "orientationRules": {
      "NUMERATOR_LONGER": "orderedAspectRatio > 1",
      "SQUARE_EQUAL": "orderedAspectRatio == 1 exactly",
      "DENOMINATOR_LONGER": "orderedAspectRatio < 1"
    },
    "firewall": "No tolerance band around square in 17.01. Near-square semantics belong to 17.04 if explicitly defined."
  },
  "status_policy": {
    "invalidRelationKind": "INVALID",
    "invalidEvidence": "INVALID",
    "nonPositiveMeasurement": "INVALID",
    "unitMismatch": "N_A",
    "methodMismatch": "N_A",
    "frameMismatch": "N_A",
    "contextMismatch": "N_A",
    "ownerMismatch": "N_A",
    "missingNumeratorEvidence": "N_A",
    "missingDenominatorEvidence": "N_A",
    "duplicateEqualEvidence": "OK",
    "duplicateConflictingEvidence": "N_A + CONFLICT",
    "relationOverflow": "N_A; no truncation",
    "evidenceOverflow": "N_A; no truncation",
    "validObservedAspect": "OK",
    "N_A_not_zero": true
  },
  "identity_policy": {
    "shapeAxisMeasurementEvidenceRef": "hash(scope, relation, term, binding, axis role, value, exact unit/method/frame/context/owner, source, provenance, status)",
    "shapeAxisMeasurementResolutionRef": "hash(relation, term, binding, axis role, resolved value/unit, canonical evidence refs, resolution policy, status)",
    "shapeAspectRatioDescriptorRef": "hash(relation, ordered terms/resolutions, signature, numeric ratio/inverse/deviations, reference refs, status)",
    "shapeAspectOrientationDescriptorRef": "hash(ratio descriptor, exact orientation class, status)",
    "shapeAspectObservationPolicyRef": "hash(selection/resolution/duplicate/conflict/max/overflow policies, source/owner, provenance, status)",
    "shapeAspectObservationSetRef": "hash(scope, snapshot, schema, policy, relation/resolution/ratio/orientation refs, status)",
    "shapeAspectAttachmentRef": "hash(seed, observation set, status)",
    "excluded_from_identity": [
      "display label",
      "UI color",
      "free-form comment",
      "confidence when not used by resolution policy"
    ]
  },
  "critical_firewalls": [
    "17.01 owns observed shape aspect ratios only",
    "17.01 owns no MetricResult",
    "17.01 owns no independent numeric vote",
    "ProportionSubject / binding / relation identity remains Compo17.00",
    "reference-ratio declaration ownership remains Compo17.00",
    "only SHAPE_ASPECT relations are eligible in 17.01",
    "shape relation selection is explicit",
    "shape-axis measurement evidence must be owner-qualified",
    "shape-axis measurement must be finite and strictly positive",
    "zero shape-axis measurement = INVALID",
    "negative shape-axis measurement = INVALID",
    "measurement unit must exactly match binding",
    "measurement method must exactly match binding",
    "measurement frame must exactly match binding",
    "measurement reference context must exactly match binding",
    "measurement owner must exactly match binding",
    "no silent unit conversion",
    "no silent method conversion",
    "no silent frame conversion",
    "no silent context conversion",
    "no silent owner substitution",
    "no raw geometry fallback in 17.01",
    "no bbox fallback unless the binding explicitly owns bbox-derived measurement",
    "confidence cannot arbitrate conflicting measurement evidence",
    "duplicate equal evidence may resolve",
    "duplicate conflicting evidence => N_A + CONFLICT",
    "no averaging conflicting evidence",
    "no median conflicting evidence",
    "no confidence winner",
    "NUMERATOR remains numerator from 17.00",
    "DENOMINATOR remains denominator from 17.00",
    "17.01 does not lexically swap terms",
    "17.01 does not normalize ratio to >=1",
    "orderedAspectRatio = numeratorValue/denominatorValue",
    "inverseAspectRatio = denominatorValue/numeratorValue",
    "ordered ratio may be <1",
    "ordered ratio may equal 1",
    "ordered ratio may be >1",
    "ordered aspect ratio != Topic16 larger-to-smaller scale ratio",
    "Topic16 ScaleRatioDescriptor is not reused",
    "Topic16 scale classes are not aspect classes",
    "Topic16 scale ladder is not aspect-ratio family",
    "SQUARE_EQUAL means exact ratio 1 only",
    "no near-square tolerance in 17.01",
    "NUMERATOR_LONGER != landscape unless axis semantics explicitly say so",
    "DENOMINATOR_LONGER != portrait unless axis semantics explicitly say so",
    "orientation class != hierarchy",
    "orientation class != dominance",
    "orientation class != quality",
    "deviationFromSquare is signed descriptor, not penalty",
    "absoluteDeviationFromSquare is descriptor, not score",
    "larger absolute deviation from square != worse",
    "ratio closer to 1 != automatically better",
    "ratio farther from 1 != automatically worse",
    "referenceRatioRefs are lineage only in 17.01",
    "17.01 does not evaluate reference-ratio closeness",
    "17.01 does not evaluate tolerance",
    "17.01 does not assign ratio family membership",
    "17.01 does not infer repeated proportional systems",
    "17.01 does not score shape proportions",
    "part/whole membership semantics ownership remains Compo17.02",
    "part-to-whole ratio ownership remains Compo17.02",
    "ratio family / repeated system ownership remains Compo17.03",
    "tolerance / deviation fit / scoring ownership remains Compo17.04",
    "repair generator ownership remains Compo17.04",
    "object-to-object scale differentiation remains Topic16",
    "transform scale factor ownership remains Compo3.05",
    "visual mass ownership remains Compo4",
    "format normalization / global scale invariance ownership remains Compo6.03",
    "dominance ownership remains Compo13",
    "microdetail role-envelope ownership remains Topic15",
    "generic hierarchy/subordination remains Compo18 territory",
    "semantic importance remains foreign-owned",
    "global balance remains foreign-owned",
    "final-layout ranking remains foreign-owned",
    "shape aspect attachment != ProportionSystemSeed 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": {
    "shapeAspectCorrectionRequestRef": "stable identity",
    "targetOwnerRef": "shape-axis evidence / binding / relation owner",
    "reasonCode": "AXIS_EVIDENCE_MISSING|AXIS_EVIDENCE_CONFLICT|AXIS_VALUE_WRONG|AXIS_ROLE_WRONG|BINDING_WRONG|RELATION_ORDER_WRONG|RELATION_KIND_WRONG|REFERENCE_LINK_WRONG",
    "proportionRelationRef": "exact relation",
    "proportionTermRef": "exact term or null",
    "shapeAspectRatioDescriptorRef": "exact descriptor or null",
    "evidenceRefs": "actual lineage refs",
    "suggestedAction": "non-mutating review request",
    "status": "OPEN|INVALID",
    "mutationAllowed": false
  },
  "deferred_downstream": {
    "17.02": [
      "part/whole membership evidence",
      "observed part-to-whole ratios",
      "part-to-whole attachment"
    ],
    "17.03": [
      "ratio family membership",
      "repeated proportional system detection",
      "family descriptors"
    ],
    "17.04": [
      "near-square tolerance",
      "reference-ratio tolerance/deviation fit",
      "target desirability",
      "MetricResult ownership",
      "independent vote budget",
      "repair generation",
      "final Topic17 tests"
    ]
  },
  "IDEAS_REFS": [
    "IDEA-01 full human test after all 72 topics; later compare perceived shape proportion with exact ordered aspect descriptors",
    "IDEA-02 semantics before placement; axis/channel meaning remains explicit and owner-qualified",
    "IDEA-03 explicit priorities; numerator/denominator orientation is math semantics, not hidden priority",
    "IDEA-04 collect structured observed aspect-ratio data for future composition model",
    "IDEA-05 preserve reasons for human corrections to axis evidence and orientation",
    "IDEA-06 structured machine-readable data layer for website",
    "IDEA-07 graphics-for-post-text research remains downstream/separate"
  ],
  "DATA_CAPTURE": [
    "sceneRef",
    "scopeRef",
    "snapshotRef",
    "proportionSchemaRef",
    "shapeAspectObservationPolicyRef",
    "proportionRelationRefs[]",
    "numeratorTermRefByRelation",
    "denominatorTermRefByRelation",
    "numeratorBindingRefByRelation",
    "denominatorBindingRefByRelation",
    "comparisonSignatureRefByRelation",
    "shapeAxisMeasurementEvidenceRefs[]",
    "axisRoleByEvidence",
    "measurementValueByEvidence",
    "measurementUnitRefByEvidence",
    "measurementMethodRefByEvidence",
    "measurementFrameRefByEvidence",
    "measurementReferenceContextRefByEvidence",
    "measurementOwnerRefByEvidence",
    "confidenceByEvidence",
    "shapeAxisMeasurementResolutionRefs[]",
    "resolvedValueByResolution",
    "resolutionReasonCodeByRef",
    "shapeAspectRatioDescriptorRefs[]",
    "orderedAspectRatioByRef",
    "inverseAspectRatioByRef",
    "deviationFromSquareByRef",
    "absoluteDeviationFromSquareByRef",
    "referenceRatioRefsByDescriptor",
    "shapeAspectOrientationDescriptorRefs[]",
    "orientationClassByDescriptor",
    "shapeAspectObservationSetRef",
    "shapeAspectAttachmentRef",
    "humanReasonCodes[]",
    "futureRatioFamilyRefs[]",
    "futureToleranceEvaluationRefs[]",
    "futureMetricResultRefs[]"
  ],
  "DEFERRED_SEMANTIC_INPUTS": [
    "whether PRIMARY_X means width in a given shape model",
    "whether PRIMARY_Y means height in a given shape model",
    "whether orientation classes should map to landscape/portrait",
    "what tolerance defines near-square",
    "what tolerance defines reference-ratio match",
    "whether a specific aspect ratio is desirable",
    "whether inverse ratios belong to one design family",
    "global hierarchy consequences of aspect-ratio choices"
  ],
  "HUMAN_FEEDBACK_HOOKS": [
    "SHAPE_RELATION_SHOULD_BE_INCLUDED",
    "SHAPE_RELATION_SHOULD_BE_EXCLUDED",
    "AXIS_EVIDENCE_MISSING",
    "AXIS_EVIDENCE_WRONG",
    "AXIS_EVIDENCE_CONFLICT_REAL",
    "AXIS_EVIDENCE_CONFLICT_SHOULD_RESOLVE",
    "AXIS_ROLE_WRONG",
    "AXIS_CHANNEL_WRONG",
    "AXIS_UNIT_WRONG",
    "AXIS_METHOD_WRONG",
    "AXIS_FRAME_WRONG",
    "AXIS_CONTEXT_WRONG",
    "NUMERATOR_DENOMINATOR_REVERSED",
    "ASPECT_RATIO_WRONG",
    "INVERSE_RATIO_WRONG",
    "SQUARE_EQUAL_WRONG",
    "ORIENTATION_CLASS_WRONG",
    "REFERENCE_LINK_WRONG",
    "RATIO_FEELS_NEAR_SQUARE",
    "RATIO_FEELS_NOT_NEAR_SQUARE",
    "REFERENCE_FEELS_MATCHED",
    "REFERENCE_FEELS_NOT_MATCHED"
  ],
  "CONFLICT_PRIORITY_ASSUMPTIONS": [
    "module execution order is not priority",
    "NUMERATOR before DENOMINATOR is mathematical orientation, not global priority",
    "PRIMARY_X before PRIMARY_Y is taxonomy naming, not design priority",
    "orientation class order is not quality order",
    "evidence source order is not confidence priority",
    "reference list order is not target priority",
    "future reviewed global conflict-priority owner remains authoritative"
  ],
  "LAB_HOOKS": [
    "human study: perceived aspect-ratio orientation versus exact ordered ratio",
    "study perceptual near-square thresholds without canonizing them in 17.01",
    "compare width/height semantic mappings across shape models",
    "collect successful compositions with ratios below 1 and above 1",
    "study whether inverse aspect ratios belong to same perceived family",
    "compare exact square and near-square perception",
    "collect cases where distance from square is irrelevant to quality",
    "measure correction frequency for axis evidence and orientation"
  ],
  "observation_record": {
    "moduleRef": "Compo17.01",
    "metricResults": [],
    "shapeAspectRatioDescriptorRefs": [],
    "shapeAspectOrientationDescriptorRefs": [],
    "futureToleranceEvaluationRefs": []
  },
  "stop_condition": "STOP after 17.01. Do not create 17.02 in this module."
}
VISITS / ...