Correspondence after axis declaration
Pair geometry only
21.01
Anchor adapter, exact point-evidence resolution, explicit pair-request identity, reflection math, residual geometry, SymmetryRelation materialization, bounded set and immutable attachment.
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.
Anchor meaning remains owner-qualified
MirrorAnchorBinding {
scopeRef,
snapshotRef,
symmetryCoordinateFrameBindingRef,
anchorKind: CENTROID_ADAPTER | REFERENCE_POINT_ADAPTER | OWNER_DEFINED,
anchorMethodRef,
anchorSourceOwnerRef,
bindingSourceRef,
bindingSourceOwnerRef,
provenance,
status,
mutationAllowed: false
}
Exact evidence, no averaging
Pairs are requested, never discovered
Both subject identities and one axis candidate are named by the request.
Same-subject requests are INVALID in 21.01 v1.
A↔B and B↔A canonicalize to the same pair identity.
No nearest neighbour, Hungarian assignment or best-pair heuristic.
Reflection uses the canonical 21.00 axis
residualDistance = 0 is a valid exact geometric result. It must never collapse into N_A.SymmetryRelation is a geometric relation
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
}
Relation set is bounded and deterministic
N_A, INVALID and zero remain separate
| Exact pair, exact points, residualDistance = 0 | OK · EXACT_REFLECTION |
| Exact pair, exact points, residualDistance > 0 | OK · NONZERO_RESIDUAL |
| Missing point evidence | N_A |
| Conflicting point evidence | N_A · CONFLICT |
| Requested subject absent from 21.00 eligible set | N_A |
| Same-subject pair | INVALID |
| Axis/frame/root lineage mismatch | INVALID |
| Relation-set overflow | N_A · no truncation |
Downstream ownership remains explicit
| 21.00 | Subjects, coordinate frame and exact axis candidates. |
| 21.01 | Explicit mirror pairs, reflected anchor points, raw residual geometry and SymmetryRelation[]. |
| 21.02 | Mass symmetry using Compo4-owned mass values. |
| 21.03 | Shape/color/position channel symmetry; may consume 21.01 geometry but owns channel normalization/interpretation. |
| 21.04 | Approximate tolerance, symmetry errors, intentional violations, scoring and repairs. |
| Topic22 / 23 | Asymmetric balance / radial systems remain foreign. |
No hidden symmetry preference
CANON → LAB → DATA → IDEAS
21.01 regression suite
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.
DATA FOR LAYOUT ENGINE
{
"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."
}