COMPO · 21.03 · CHANNEL SYMMETRY

Compare channels.
Judge nothing yet.

21.03 добавляет relation-scoped descriptors для SHAPE, COLOR и POSITION. Форма и цвет сравниваются только в owner-qualified mirror-comparable представлениях; позиция переиспользует точный residual из 21.01. Никакой raw channel не извлекается заново, а raw difference не превращается в approximate symmetry, error score или quality.

ModuleCompo 21.03
Channelsshape / color / position
Pairing21.01 explicit relations
Tolerancenone
Metricsnone
Next21.04

Three channels, one explicit pair lineage

00 / contract
21.00 exact axis + root lineage + 21.01 explicit SymmetryRelation + explicit relation × channel request + owner-qualified SHAPE/COLOR evidence OR 21.01 POSITION residual → ChannelSymmetryDescriptor → ChannelSymmetrySet NO channel aggregation NO tolerance NO symmetry error score NO MetricResult

Comparison adapter, not channel owner

01 / ownership
OWNS

21.03

Channel binding identity, evidence resolution, explicit relation-channel requests, raw channel comparison descriptors, bounded set and immutable attachment.

DOES NOT OWN

Foreign + downstream

Shape extraction, color-space semantics, mirror geometry, visual mass, approximate tolerance, cross-channel error aggregation, target desirability, scoring or repair.

Parallel layer: 21.02 mass symmetry may coexist in the same Topic21 snapshot, but module execution order does not make it a computational input to 21.03.

Binding declares comparable semantics

02 / owner-qualified channel
SHAPE

Prepared representation

Scalar, vector or category supplied by the rightful shape owner after any needed reflection normalization.

COLOR

Prepared representation

Scalar, vector or category supplied with explicit color-space / method context. 21.03 chooses no color model.

POSITION

Upstream residual

Only MIRROR_RESIDUAL_FROM_21_01. Point reflection is not recomputed here.

SymmetryChannelBinding {
  channelKind: SHAPE | COLOR | POSITION,
  representationKind: SCALAR | VECTOR | CATEGORY | UPSTREAM_POSITION_RESIDUAL,
  comparisonMethod: ABSOLUTE_DIFFERENCE | L2_DISTANCE | EXACT_EQUALITY | MIRROR_RESIDUAL_FROM_21_01,
  channelUnitRef,
  comparisonContextRef,
  channelSourceOwnerRef,
  bindingSourceRef,
  bindingSourceOwnerRef,
  provenance,
  mutationAllowed: false
}

Exact evidence; conflict stays conflict

03 / evidence
For SHAPE / COLOR: exact scope + snapshot + subject + binding → zero compatible evidence: N_A → one or many identical payloads: OK → conflicting payloads: N_A → malformed payload: INVALID No averaging. No median. No confidence winner. POSITION consumes no duplicate evidence; it reuses relation.residualDistance.

Raw comparison math only

04 / methods
RepresentationMethodOutputInterpretation deferred
SCALARABSOLUTE_DIFFERENCE|a − b|unit-specific tolerance
VECTORL2_DISTANCE√Σ(aᵢ−bᵢ)²representation-specific tolerance
CATEGORYEXACT_EQUALITYexactMatch booleancategory desirability
POSITIONMIRROR_RESIDUAL_FROM_21_01relation.residualDistanceapproximate positional symmetry
Descriptor ≠ score: a larger raw difference is not automatically worse; a zero difference is not automatically better.

No relation × channel Cartesian product

05 / explicit requests
ChannelSymmetryRequest {
  symmetryRelationRef,
  symmetryChannelBindingRef,
  requestSourceRef,
  requestSourceOwnerRef,
  provenance,
  mutationAllowed: false
}

ChannelSymmetrySelectionPolicy {
  selectionMode: EXPLICIT_RELATION_CHANNEL_REQUESTS_ONLY,
  maxRequests: 1..16384,
  overflowMode: N_A_NO_TRUNCATION,
  autoPairGeneration: false,
  autoChannelSynthesis: false,
  fullCartesian: false
}

One raw descriptor per explicit request

06 / descriptor
ChannelSymmetryDescriptor {
  symmetryRelationRef,
  symmetryAxisCandidateRef,
  channelKind,
  representationKind,
  comparisonMethod,
  symmetryChannelBindingRef,
  evidenceResolutionRefs[],
  comparisonValue,      // numeric for scalar/vector/position, else null
  exactMatch,           // boolean for all OK descriptors
  descriptorClass,      // EXACT_MATCH | NONZERO_DIFFERENCE | CATEGORY_MATCH | CATEGORY_MISMATCH
  approximateFit: null,
  normalizedSymmetryError: null,
  symmetryErrorRef: null,
  metricResultRef: null,
  score: null,
  status,
  reasonCode,
  mutationAllowed: false
}

Bounded set, immutable attachment

07 / set

ChannelSymmetrySet

Preserves every explicit descriptor identity and separate SHAPE/COLOR/POSITION refs. No weighted mean, max, voting or normalization across channels.

ChannelSymmetryAttachment

References the 21.00 root seed and the 21.03 set. Upstream axis and relation records remain immutable.

N_A stays different from zero

08 / status
OKExact compatible lineage and evidence produce a raw comparison.
N_AMissing/conflicting evidence, missing requested relation/binding, empty request set or bounded overflow. No imputation.
INVALIDMalformed adapter/policy/request or incompatible upstream lineage/method.
0Valid exact numeric equality/residual. 0 ≠ N_A and 0 ≠ INVALID.

21.04 owns approximation and scoring

09 / boundaries
21.00Axis candidates and root symmetry geometry.
21.01Explicit mirror correspondence, reflection geometry and position residual.
21.02Visual-mass adapters and mass-symmetry descriptors.
21.03Raw SHAPE/COLOR/POSITION channel comparison descriptors.
21.04Approximate tolerance, symmetry errors, target semantics, scoring/tests and any bounded corrections.

Comparison does not imply desirability

10 / firewalls
shape difference != shape quality color difference != color quality position residual != balance quality exact match != automatically desirable nonzero difference != automatically bad 21.03 owns_metrics = [] 21.03 independent numeric votes = 0 21.03 normalized symmetry error = null 21.03 score = null N_A != 0 local != global descriptor != score correction request != foreign mutation

CANON → LAB → DATA → IDEAS

11 / mandatory hooks
IDEAS_REFS[]Channel representation and disagreement studies.
DATA_CAPTURE[]Binding, evidence, request and raw comparison lineage.
DEFERRED_SEMANTIC_INPUTS[]Tolerance, aggregation, scoring and intentional breaks.
HUMAN_FEEDBACK_HOOKS[]Channel/method/evidence corrections.
CONFLICT_PRIORITY_ASSUMPTIONS[]No confidence or serialization winner.
LAB_HOOKS[]Shape/color/position symmetry studies.

21.03 regression suite

12 / deterministic tests

Tests cover channel/method compatibility, exact evidence lineage, scalar/vector/category math, direct reuse of 21.01 position residual, explicit relation-channel requests, bounded no-Cartesian selection, immutable attachment, zero metrics and the 21.04 ownership firewall.

Tests not run yet.

DATA FOR LAYOUT ENGINE

13 / machine contract
{
  "module": "Compo 21.03",
  "name": "channel_symmetry_shape_color_position",
  "version": "1.0-canonical",
  "canonical_main_title": "Channel symmetry: shape/color/position",
  "topic": "21_СИММЕТРИЧНЫЙ_БАЛАНС",
  "scope": "EXPLICIT_RELATION_SCOPED_OWNER_QUALIFIED_SHAPE_COLOR_AND_POSITION_CHANNEL_COMPARISON_DESCRIPTORS_ONLY_WITHOUT_RAW_CHANNEL_EXTRACTION_APPROXIMATE_TOLERANCE_SCORING_OR_FINAL_SYMMETRY_JUDGEMENT",
  "main_topic_contract": {
    "topic_title": "Симметричный баланс",
    "topic_goal": "Измеряет осевую и зеркальную симметрию по позиции, форме, массе и цвету, включая approximate symmetry и намеренные нарушения.",
    "expected_output": "SymmetryRelation[], axis candidates, symmetry errors",
    "planned_files": [
      "21.00 Symmetry axis model",
      "21.01 Mirror correspondence",
      "21.02 Mass symmetry",
      "21.03 Channel symmetry: shape/color/position",
      "21.04 Approximate symmetry, scoring/tests"
    ]
  },
  "ownership": {
    "owner": "Compo21.03",
    "owns": [
      "SymmetryChannelKind taxonomy: SHAPE/COLOR/POSITION",
      "SymmetryChannelRepresentationKind taxonomy",
      "SymmetryChannelComparisonMethod taxonomy",
      "SymmetryChannelBinding",
      "SymmetryChannelEvidence",
      "SymmetryChannelEvidenceResolution",
      "ChannelSymmetryRequest",
      "ChannelSymmetrySelectionPolicy",
      "ChannelSymmetryDescriptor",
      "ChannelSymmetrySet",
      "ChannelSymmetryAttachment",
      "owner-qualified scalar/vector/category comparison adapters for SHAPE and COLOR",
      "POSITION descriptor adapter from exact Compo21.01 mirror residual geometry",
      "exact-match versus nonzero-difference descriptive classes without tolerance",
      "identity/status/provenance rules for Topic21 channel-symmetry layer",
      "non-mutating correction request for channel binding/evidence/request lineage errors"
    ],
    "does_not_own": [
      "symmetry subject/frame/axis identity — Compo21.00",
      "mirror pair identity/reflection geometry/residual — Compo21.01",
      "visual mass semantics or mass symmetry — Compo4 / Compo21.02",
      "raw shape extraction, shape embedding or reflection normalization — foreign shape owner",
      "raw color extraction, color-space conversion or perceptual color distance semantics — foreign color owner",
      "raw point/anchor geometry — Compo21.01 / geometry owner",
      "approximate tolerance, normalized symmetry error, intentional-break semantics, MetricResult scoring or repair — Compo21.04",
      "asymmetric balance — Topic22",
      "radial/rotational balance — Topic23",
      "global beautyScore or final-layout ranking",
      "foreign geometry/style/color mutation"
    ]
  },
  "consumes": [
    "valid Compo21.00 SymmetryAxisSystemSeed lineage",
    "one exact Compo21.00 SymmetryAxisCandidate",
    "valid Compo21.01 MirrorCorrespondenceSet and explicit SymmetryRelation records",
    "owner-qualified SHAPE/COLOR mirror-comparable evidence when requested",
    "explicit SymmetryChannelBinding and ChannelSymmetryRequest records",
    "21.02 MassSymmetryAttachment may coexist as parallel Topic21 context but is not a computational dependency of 21.03"
  ],
  "provides": [
    "SymmetryChannelBinding[]",
    "SymmetryChannelEvidenceResolution[]",
    "ChannelSymmetryRequest[]",
    "ChannelSymmetryDescriptor[]",
    "ChannelSymmetrySet",
    "ChannelSymmetryAttachment"
  ],
  "owns_metrics": [],
  "independent_numeric_votes": 0,
  "channel_contract": {
    "SHAPE": "owner-prepared mirror-comparable SCALAR, VECTOR or CATEGORY representation; 21.03 does not extract or normalize shape",
    "COLOR": "owner-prepared mirror-comparable SCALAR, VECTOR or CATEGORY representation; 21.03 does not choose a color space or perceptual color metric",
    "POSITION": "uses only Compo21.01 residualDistance through MIRROR_RESIDUAL_FROM_21_01; no duplicate point extraction",
    "methods": {
      "SCALAR": "ABSOLUTE_DIFFERENCE",
      "VECTOR": "L2_DISTANCE",
      "CATEGORY": "EXACT_EQUALITY",
      "UPSTREAM_POSITION_RESIDUAL": "MIRROR_RESIDUAL_FROM_21_01"
    },
    "meaning": "comparisonValue/exactMatch are descriptive observations, not symmetry quality or error scores"
  },
  "status_semantics": {
    "OK": "exact upstream lineage plus compatible explicit binding/evidence produce a raw channel comparison descriptor",
    "N_A": "missing/conflicting exact SHAPE/COLOR evidence, missing requested relation/binding, empty request set or bounded overflow; no guess/average/truncation",
    "INVALID": "malformed binding/evidence/request/policy, incompatible method/representation combination, invalid upstream relation or root/axis lineage mismatch",
    "zero_note": "comparisonValue = 0 and POSITION residualDistance = 0 are valid exact observations and distinct from N_A"
  },
  "selection_policy": {
    "mode": "EXPLICIT_RELATION_CHANNEL_REQUESTS_ONLY",
    "maxRequests": "1..16384",
    "overflow": "N_A_NO_TRUNCATION",
    "dedup": "identity by exact relationRef + bindingRef + scope/snapshot",
    "autoPairGeneration": false,
    "autoChannelSynthesis": false,
    "fullCartesian": false
  },
  "critical_firewalls": [
    "channel difference != symmetry quality",
    "channel difference != normalized symmetry error",
    "exact channel match != automatically desirable",
    "nonzero channel difference != automatically bad",
    "SHAPE comparison != raw shape extraction",
    "COLOR comparison != color-space ownership",
    "POSITION comparison reuses 21.01 residual and does not recompute mirror correspondence",
    "position residual != 21.04 approximate tolerance result",
    "shape equality != mass symmetry",
    "color equality != mass symmetry",
    "mass symmetry != channel symmetry",
    "21.02 execution order does not make mass an input to 21.03",
    "category equality is descriptive and not a score",
    "vector L2 distance is in owner-qualified representation space only",
    "scalar absolute difference retains owner-qualified unit/context",
    "no automatic normalization across SHAPE/COLOR/POSITION",
    "no cross-channel averaging/summing/max in 21.03",
    "no automatic subject×subject or relation×channel Cartesian expansion",
    "no nearest-neighbour matching",
    "no confidence winner for conflicting evidence",
    "no averaging conflicting evidence",
    "no approximate epsilon in 21.03",
    "no symmetry error score in 21.03",
    "no MetricResult in 21.03",
    "zero comparison is valid and not N_A",
    "N_A != 0",
    "INVALID != 0",
    "local != global",
    "geometry != interpretation",
    "descriptor != score",
    "heuristic != law",
    "correction request != foreign mutation",
    "module execution order != rule priority",
    "one metric = one owner",
    "no universal beautyScore",
    "IDEA != CANON",
    "EXPERIMENT != CANON"
  ],
  "IDEAS_REFS": [
    "IDEA-01 study mirror-comparable shape representations without canonizing one descriptor",
    "IDEA-02 compare owner-qualified color representations and human color-symmetry judgements",
    "IDEA-03 study position residual perception separately from geometric residual magnitude",
    "IDEA-04 study cross-channel disagreement patterns before defining 21.04 aggregation",
    "IDEA-05 collect intentional channel asymmetry examples for later target semantics"
  ],
  "DATA_CAPTURE": [
    "scopeRef",
    "snapshotRef",
    "symmetryAxisSystemSeedRef",
    "symmetryAxisCandidateRef",
    "mirrorCorrespondenceSetRef",
    "channelBindingRefs[]",
    "channelRequestRefs[]",
    "symmetryRelationRefByDescriptor",
    "channelKindByDescriptor",
    "representationKindByDescriptor",
    "comparisonMethodByDescriptor",
    "evidenceResolutionRefs[]",
    "comparisonValue",
    "exactMatch",
    "descriptorClass",
    "status",
    "reasonCode"
  ],
  "DEFERRED_SEMANTIC_INPUTS": [
    "21.04 approximate symmetry tolerance profiles",
    "21.04 cross-channel normalization",
    "21.04 symmetry error aggregation",
    "21.04 intentional symmetry-breaking target semantics",
    "21.04 MetricResult scoring and repair candidates",
    "Topic22 asymmetric-balance interpretation",
    "Topic23 radial/rotational balance"
  ],
  "HUMAN_FEEDBACK_HOOKS": [
    "correct channel kind",
    "correct representation kind",
    "correct comparison method",
    "correct source owner/unit/context",
    "correct SHAPE/COLOR evidence",
    "mark evidence conflict real",
    "correct explicit relation-channel request",
    "mark request missing",
    "mark request extraneous",
    "correct POSITION relation residual lineage"
  ],
  "CONFLICT_PRIORITY_ASSUMPTIONS": [
    "evidence confidence does not choose a winner",
    "evidence serialization order has no priority",
    "request serialization order has no priority",
    "channel kind order does not define weight",
    "representation kind order does not define authority",
    "module execution order does not imply channel priority"
  ],
  "LAB_HOOKS": [
    "shape mirror-comparability study",
    "color symmetry representation study",
    "position residual perception study",
    "cross-channel disagreement study",
    "intentional symmetry break study",
    "human correction reason taxonomy"
  ],
  "topic21ProgressAfterThisModule": "4/5 local",
  "next_module": "Compo 21.04 — Approximate symmetry, scoring/tests",
  "hard_stop": "Do not implement 21.04 in this file."
}
VISITS / ...