COMPO · 21.01 · MIRROR CORRESPONDENCE

Reflect the point.
Do not judge it yet.

21.01 принимает explicit axis candidate из 21.00, owner-qualified 2D anchor points и только явно заданные пары разных subjects. Для каждой пары вычисляется точное отражение одной точки относительно оси и сырой residual до второй точки. Нулевой residual означает exact reflection; ненулевой остаётся геометрическим дескриптором без tolerance, quality judgement или score.

ModuleCompo 21.01
Input21.00 axis + subjects
Pairingexplicit only
Residualraw geometry
Metricsnone
Next21.02

Correspondence after axis declaration

00 / contract
21.00 explicit subjects + exact frame + exact axis candidate + owner-qualified anchor binding + exact point evidence for two distinct subjects + explicit pair request → reflected point → raw residual vector / residual distance → SymmetryRelation[] 21.01 stops here. NO automatic matching NO mass symmetry NO channel symmetry score NO approximate tolerance NO symmetry quality score NO MetricResult

Pair geometry only

01 / ownership
OWNS

21.01

Anchor adapter, exact point-evidence resolution, explicit pair-request identity, reflection math, residual geometry, SymmetryRelation materialization, bounded set and immutable attachment.

DOES NOT OWN

Downstream + foreign

Raw anchor extraction, visual mass, shape/color channel semantics, position-channel normalization, approximate tolerance, intentional symmetry-breaking judgement, scoring, asymmetric or radial balance.

Correspondence is descriptive. Exact reflection can be useful, irrelevant or intentionally avoided. A residual greater than zero is not a penalty in this module.

Anchor meaning remains owner-qualified

02 / anchor binding
MirrorAnchorBinding {
  scopeRef,
  snapshotRef,
  symmetryCoordinateFrameBindingRef,
  anchorKind: CENTROID_ADAPTER | REFERENCE_POINT_ADAPTER | OWNER_DEFINED,
  anchorMethodRef,
  anchorSourceOwnerRef,
  bindingSourceRef,
  bindingSourceOwnerRef,
  provenance,
  status,
  mutationAllowed: false
}
21.01 does NOT compute centroids. It does NOT infer a semantic center. It does NOT convert coordinate frames or units. The binding only says: “these coordinates are the owner-qualified anchor used for mirror correspondence.”

Exact evidence, no averaging

03 / point evidence
MirrorPointEvidence → exact scope + snapshot + subject + anchorBindingRef → finite (x,y) in the exact 21.00 coordinate frame → conflict-preserving resolution no evidence → N_A one exact point repeated → OK multiple identical exact points → OK, lineage preserved different exact points → N_A / CONFLICT invalid record → INVALID confidence is diagnostic only; it never chooses a winner.

Pairs are requested, never discovered

04 / pair requests
Explicit pair

Both subject identities and one axis candidate are named by the request.

Distinct subjects

Same-subject requests are INVALID in 21.01 v1.

Order-neutral

A↔B and B↔A canonicalize to the same pair identity.

No search

No nearest neighbour, Hungarian assignment or best-pair heuristic.

MirrorCorrespondenceRequest identity: scope + snapshot + axisCandidateRef + anchorBindingRef + canonical unordered subject pair Lexical low/high order is serialization hygiene only. It does NOT define left/right, primary/secondary or semantic priority.

Reflection uses the canonical 21.00 axis

05 / geometry
21.00 axis: n·p = d ||n|| = 1 For canonical subject A point p: signedDistanceA = n·p - d R(p) = p - 2*signedDistanceA*n For subject B point q: residualVector = q - R(p) residualDistance = ||residualVector||₂ Exact reflection in 21.01: residualDistance === 0 NO epsilon NO tolerance band NO “close enough”
Zero is data. residualDistance = 0 is a valid exact geometric result. It must never collapse into N_A.

SymmetryRelation is a geometric relation

06 / output
SymmetryRelation {
  symmetryRelationRef,
  axisCandidateRef,
  canonicalSubjectLowRef,
  canonicalSubjectHighRef,
  subjectLowSymmetrySubjectRef,
  subjectHighSymmetrySubjectRef,
  mirrorAnchorBindingRef,
  pointResolutionRefs[],
  reflectedPointOfLow: {x,y},
  residualVector: {dx,dy},
  residualDistance,
  correspondenceClass: EXACT_REFLECTION | NONZERO_RESIDUAL,
  massSymmetryRef: null,
  channelSymmetryRefs: [],
  approximateSymmetryRef: null,
  symmetryErrorRef: null,
  metricResultRef: null,
  score: null,
  status,
  mutationAllowed: false
}
EXACT_REFLECTION != “good” NONZERO_RESIDUAL != “bad” residualDistance != symmetryError score SymmetryRelation != mass symmetry SymmetryRelation != channel symmetry

Relation set is bounded and deterministic

07 / selection
MirrorCorrespondenceSelectionPolicy { selectionMode: EXPLICIT_PAIR_REQUESTS_ONLY, maxRelations: 1..16384, autoPairGeneration: false, nearestNeighbourMatching: false, hungarianMatching: false, bestPairSearch: false, fullCartesian: false, overflowMode: N_A_NO_TRUNCATION } Exact duplicate requests → identity dedup Overflow → N_A, no truncation Missing/conflicted point evidence → relation N_A Invalid lineage → relation/set INVALID

N_A, INVALID and zero remain separate

08 / status
Exact pair, exact points, residualDistance = 0OK · EXACT_REFLECTION
Exact pair, exact points, residualDistance > 0OK · NONZERO_RESIDUAL
Missing point evidenceN_A
Conflicting point evidenceN_A · CONFLICT
Requested subject absent from 21.00 eligible setN_A
Same-subject pairINVALID
Axis/frame/root lineage mismatchINVALID
Relation-set overflowN_A · no truncation

Downstream ownership remains explicit

09 / next owners
21.00Subjects, coordinate frame and exact axis candidates.
21.01Explicit mirror pairs, reflected anchor points, raw residual geometry and SymmetryRelation[].
21.02Mass symmetry using Compo4-owned mass values.
21.03Shape/color/position channel symmetry; may consume 21.01 geometry but owns channel normalization/interpretation.
21.04Approximate tolerance, symmetry errors, intentional violations, scoring and repairs.
Topic22 / 23Asymmetric balance / radial systems remain foreign.

No hidden symmetry preference

10 / firewalls
mirror correspondence != symmetry quality exact reflection != automatically desirable nonzero residual != automatically bad residual distance != symmetry error score NO automatic pair discovery NO nearest-neighbour matching NO Hungarian assignment NO confidence winner NO point averaging NO epsilon / approximate tolerance NO mass comparison NO shape/color score NO MetricResult N_A != 0 INVALID != 0 local != global geometry != interpretation descriptor != score heuristic != law correction request != foreign mutation

CANON → LAB → DATA → IDEAS

11 / mandatory hooks
IDEAS_REFS[]Pairing and anchor studies.
DATA_CAPTURE[]Pair lineage and raw residuals.
DEFERRED_SEMANTIC_INPUTS[]Mass, channels, tolerance, scoring.
HUMAN_FEEDBACK_HOOKS[]Anchor/pair/evidence corrections.
CONFLICT_PRIORITY_ASSUMPTIONS[]No confidence or order winner.
LAB_HOOKS[]Human pair and residual studies.

21.01 regression suite

12 / deterministic tests

Tests cover exact 21.00 lineage, owner-qualified anchor evidence, conflict preservation, order-neutral pair identity, exact reflection math, nonzero residual descriptors, bounded explicit-only relation selection, immutable attachment, zero metrics and 21.02–21.04 ownership firewalls.

Tests not run yet.

DATA FOR LAYOUT ENGINE

13 / machine contract
{
  "module": "Compo 21.01",
  "name": "mirror_correspondence",
  "version": "1.0-canonical",
  "canonical_main_title": "Mirror correspondence",
  "topic": "21_СИММЕТРИЧНЫЙ_БАЛАНС",
  "scope": "EXPLICIT_AXIS_SCOPED_MIRROR_PAIR_REQUESTS_OWNER_QUALIFIED_2D_ANCHOR_EVIDENCE_REFLECTION_GEOMETRY_AND_SYMMETRYRELATION_MATERIALIZATION_ONLY_WITHOUT_MASS_CHANNEL_APPROXIMATE_TOLERANCE_OR_SCORING",
  "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.01",
    "owns": [
      "MirrorAnchorKind taxonomy",
      "MirrorAnchorBinding",
      "MirrorPointEvidence",
      "MirrorPointEvidenceResolution",
      "MirrorCorrespondenceRequest",
      "MirrorCorrespondenceSelectionPolicy",
      "MirrorReflectionDescriptor",
      "SymmetryRelation materialization for explicit distinct subject pairs",
      "MirrorCorrespondenceSet",
      "MirrorCorrespondenceAttachment",
      "exact reflection-point computation against one explicit Compo21.00 axis candidate",
      "raw reflected-position residual vector and Euclidean residual distance",
      "exact-reflection versus nonzero-residual descriptive classification without tolerance",
      "identity/status/provenance rules for Topic21 mirror-correspondence layer",
      "non-mutating correction request for pair/anchor/evidence lineage errors"
    ],
    "does_not_own": [
      "symmetry subject identity / coordinate-frame identity / axis candidate identity — Compo21.00",
      "raw centroid/reference-point extraction semantics — foreign geometry owner",
      "visual mass values and mass symmetry — Compo4 / Compo21.02",
      "shape/color/position channel symmetry normalization — Compo21.03",
      "approximate tolerance / symmetry error / intentional symmetry-breaking judgement / MetricResult scoring — Compo21.04",
      "nearest-neighbour / Hungarian / automatic best-pair search",
      "asymmetric balance — Topic22",
      "radial or rotational balance — Topic23",
      "global beautyScore",
      "final-layout ranking",
      "foreign geometry/style/semantic mutation"
    ]
  },
  "consumes": [
    "valid Compo21.00 SymmetryAxisSystemSeed lineage",
    "valid Compo21.00 SymmetrySubjectSet with explicit eligible subjects",
    "one exact Compo21.00 SymmetryAxisCandidate",
    "exact Compo21.00 SymmetryCoordinateFrameBinding identity",
    "explicit owner-qualified MirrorAnchorBinding in that exact frame",
    "explicit MirrorPointEvidence for each requested subject",
    "explicit distinct subject-pair requests only"
  ],
  "provides": [
    "MirrorAnchorBinding",
    "MirrorPointEvidenceResolution[]",
    "MirrorReflectionDescriptor[]",
    "SymmetryRelation[]",
    "MirrorCorrespondenceSet",
    "MirrorCorrespondenceAttachment"
  ],
  "owns_metrics": [],
  "independent_numeric_votes": 0,
  "reflection_math": {
    "axis": "n·p = d with unit n from Compo21.00",
    "reflection": "R(p) = p - 2*(n·p-d)*n",
    "pair_residual": "q - R(p)",
    "residual_distance": "Euclidean norm of pair_residual",
    "reverse_check": "norm(p - R(q)) equals the same residual distance for a valid reflection axis",
    "exact_classification": "residualDistance === 0 only; no epsilon in 21.01",
    "nonzero_note": "nonzero residual is descriptive and not automatically bad"
  },
  "status_semantics": {
    "OK": "exact upstream lineage and explicit compatible point evidence resolve to one finite point per subject",
    "N_A": "missing or conflicting exact point evidence, missing selected subject, empty selection, or bounded-set overflow; no guess/average/truncation",
    "INVALID": "malformed adapter record, same-subject pair request, frame/axis/root lineage mismatch, invalid policy or non-finite geometry",
    "zero_note": "residualDistance = 0 is a valid exact-reflection result and distinct from N_A"
  },
  "selection_policy": {
    "mode": "EXPLICIT_PAIR_REQUESTS_ONLY",
    "distinct_subjects_only": true,
    "auto_pair_generation": false,
    "nearest_neighbour_matching": false,
    "hungarian_matching": false,
    "best_pair_search": false,
    "full_cartesian": false,
    "overflow": "N_A_NO_TRUNCATION"
  },
  "critical_firewalls": [
    "mirror correspondence != symmetry quality",
    "exact reflection != automatically desirable",
    "nonzero residual != automatically bad",
    "residual distance != symmetry error score",
    "residual distance != approximate tolerance result",
    "mirror pair != mass symmetry",
    "mirror pair != shape/color/position channel symmetry",
    "anchor coordinate != visual mass",
    "anchor coordinate != semantic importance",
    "point evidence confidence != matching priority",
    "no point averaging across conflicting evidence",
    "no confidence winner for conflicting evidence",
    "no automatic subject×subject pair expansion",
    "no automatic nearest-neighbour pairing",
    "no Hungarian assignment",
    "no best-pair search",
    "same-subject pair is invalid in 21.01 v1",
    "axis-fixed self-symmetry is not materialized as a pair in 21.01 v1",
    "no shape similarity in 21.01",
    "no color similarity in 21.01",
    "no mass comparison in 21.01",
    "no approximate epsilon in 21.01",
    "no symmetry error score in 21.01",
    "no MetricResult in 21.01",
    "zero residual 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 compare explicit pair requests with human mirror-pair annotations",
    "IDEA-02 study anchor choices such as centroid versus owner-defined semantic reference points",
    "IDEA-03 collect residual distributions before defining approximate tolerance",
    "IDEA-04 study one-to-many and unmatched-subject cases before any automatic assignment policy",
    "IDEA-05 compare local-group mirror pairing with whole-composition pairing"
  ],
  "DATA_CAPTURE": [
    "scopeRef",
    "snapshotRef",
    "symmetryAxisSystemSeedRef",
    "symmetrySubjectSetRef",
    "symmetryAxisCandidateRef",
    "mirrorAnchorBindingRef",
    "selectedPairRequestRefs[]",
    "pointEvidenceRefsBySubject",
    "resolvedPointBySubject",
    "reflectedPointByRelation",
    "residualVectorByRelation",
    "residualDistanceByRelation",
    "correspondenceClassByRelation",
    "symmetryRelationRefs[]",
    "mirrorCorrespondenceSetRef",
    "status",
    "reasonCode"
  ],
  "DEFERRED_SEMANTIC_INPUTS": [
    "21.02 mass symmetry",
    "21.03 shape/color/position channel symmetry",
    "21.04 approximate tolerance",
    "21.04 symmetry error normalization and scoring",
    "21.04 intentional symmetry-breaking semantics",
    "Topic22 asymmetric-balance interpretation",
    "Topic23 radial/rotational balance"
  ],
  "HUMAN_FEEDBACK_HOOKS": [
    "correct mirror anchor method",
    "correct anchor owner/frame",
    "correct point evidence",
    "mark point evidence conflict real",
    "correct explicit pair request",
    "mark pair request missing",
    "mark pair request extraneous",
    "correct axis candidate used for pairing"
  ],
  "CONFLICT_PRIORITY_ASSUMPTIONS": [
    "point evidence confidence does not choose a winner",
    "point evidence serialization order has no priority",
    "pair request serialization order has no priority",
    "subject lexical order only canonicalizes identity and does not define semantic priority",
    "axis candidate role does not define pair priority",
    "module execution order does not imply symmetry preference"
  ],
  "LAB_HOOKS": [
    "mirror-pair annotation study",
    "anchor-method robustness study",
    "exact residual distribution collection",
    "unmatched-object study",
    "multi-axis pair ambiguity study",
    "human correction reason taxonomy"
  ],
  "topic21ProgressAfterThisModule": "2/5 local",
  "next_module": "Compo 21.02 — Mass symmetry",
  "hard_stop": "Do not implement 21.02, 21.03 or 21.04 in this file."
}
VISITS / ...