Explicit partition → regional mass → explicit counterweight pair
22.03 owns grouping and pair descriptors only
Regional/counterweight layer
Region identity, explicit membership, regional mass sums/shares, explicit region-pair declarations, axis-bound pair moment descriptors and immutable attachment.
Foreign math and judgement
22.01 owns mass observations/VisualCentroid; 22.02 owns axes/arms/moments; 22.04 owns target scoring and candidates. Topic21 mirror pairs stay foreign.
Region identity does not imply geometry
AsymmetricBalanceRegionDefinition {
regionSemanticRef,
regionOwnerRef,
regionContextRef,
regionGeometryRef?: opaque foreign lineage,
provenance,
mutationAllowed: false
}
AsymmetricBalanceRegionMembership {
subjectRef,
regionSemanticRef,
membershipSourceRef,
membershipSourceOwnerRef,
provenance,
mutationAllowed: false
}22.03 не смотрит на x/y и не решает, что объект «слева», «сверху» или «в углу». Такая геометрическая классификация должна прийти как явная foreign declaration.
Mass distribution is a vector, not a score
Counterweight pair stays local to one declared axis
CounterweightPairDeclaration {
regionSemanticRefs: [A, B], // unordered canonical pair
axisSemanticRef, // exact 22.02 axis
pairContextRef,
pairSourceRef,
pairSourceOwnerRef
}
CounterweightPairDescriptor {
regionAMoment,
regionBMoment,
relationClass,
compensationFraction,
netPairMoment,
residualMagnitude,
exactCancellation,
massShareDifference,
score: null,
metricResultRef: null
}Opposite signs
Regional signed moments oppose on the exact declared axis. This alone is not a quality claim.
Same side effect
Regional net moments point in the same signed direction on that axis. Still descriptive.
Zero involved
One or both regional moments are exactly zero. Zero remains a valid observation.
Conflicts stay visible
Complete explicit lineage
Regions and memberships resolve exactly; requested counterweight axis/pairs resolve exactly when present.
No guess / no winner
Coverage gap under REQUIRE_ALL, conflicting membership/pair, overflow, missing requested axis or moment layer.
Malformed lineage
Foreign subject/region, malformed declaration, invalid upstream bundle or broken attachment.
Bounded and explicit by construction
| Regions | EXPLICIT_REGIONS_ONLY |
| Membership | EXPLICIT_MEMBERSHIPS_ONLY |
| Coverage | REQUIRE_ALL_SUBJECTS or ALLOW_UNASSIGNED — explicit policy |
| Counterweight pairs | EXPLICIT_REGION_PAIRS_ONLY |
| Duplicate exact records | deduplicate |
| Conflicts | N_A_NO_WINNER |
| Overflow | N_A_NO_TRUNCATION |
| Auto geometric partition / all-pairs | false / false |
Root stays immutable
CounterweightRegionalAttachment {
asymmetricBalanceSystemSeedRef,
visualCentroidAttachmentRef,
torqueMomentAttachmentRef: null | exact 22.02 ref,
regionalMassDistributionRef,
counterweightSystemRef,
counterweightRegionalSystemRef,
status,
mutationAllowed: false
}22.00 seed не переписывается. Attachment добавляет downstream lineage, не меняя foreign records.
22.04 is the only next interpretation layer
Scoring + candidates
Explicit target profiles may interpret regional distribution and counterweight descriptors, own MetricResult, and generate bounded non-mutating candidate requests.
Radial balance
Hub, rings, sectors and radial occupancy are a separate model. Region declarations here never become radial sectors implicitly.
Local cancellation is still not global balance
CANON → LAB → DATA → IDEAS
22.03 regression suite
Suite covers explicit region identity, membership conflicts, full/partial coverage, zero-mass regions, regional mass conservation, explicit counterweight pairs, exact axis lineage, opposition/same-sign/zero classes, compensation descriptors, immutable attachment and no-score/no-candidate firewalls plus mass-scaling, sign, ordering and translation sweeps.
DATA FOR LAYOUT ENGINE
{
"module": "Compo 22.03",
"name": "counterweight_and_regional_mass_distribution",
"version": "1.0-canonical",
"canonical_main_title": "Counterweight and regional mass distribution",
"topic": "22_АСИММЕТРИЧНЫЙ_БАЛАНС",
"scope": "EXPLICIT_REGION_IDENTITIES_EXPLICIT_SUBJECT_TO_REGION_MEMBERSHIP_REGIONAL_VISUAL_MASS_DISTRIBUTION_AND_EXPLICIT_REGION_PAIR_COUNTERWEIGHT_DESCRIPTORS_OVER_VALID_COMPO22_00_TO_22_02_LINEAGE_ONLY_WITHOUT_SCORING_OR_CANDIDATE_GENERATION",
"main_topic_contract": {
"topic_title": "Асимметричный баланс",
"topic_goal": "Описывает асимметричный баланс через visual center of mass, moments/плечи, regional distribution и counterweights, не требуя зеркального соответствия.",
"expected_output": "VisualCentroid, mass moments, balance descriptors",
"planned_files": [
"22.00 Asymmetric balance model",
"22.01 Visual center of mass",
"22.02 Torque-like moment descriptors",
"22.03 Counterweight and regional mass distribution",
"22.04 Scoring, candidates and tests"
]
},
"ownership": {
"owner": "Compo22.03",
"owns": [
"AsymmetricBalanceRegionDefinition",
"AsymmetricBalanceRegionMembership",
"RegionalMassDistributionPolicy",
"RegionalMassDescriptor",
"RegionalMassDistribution",
"CounterweightPairDeclaration",
"CounterweightPairDescriptor",
"CounterweightSystem",
"CounterweightRegionalSystem",
"CounterweightRegionalAttachment",
"explicit region-set and membership lineage",
"regional visual-mass sums/shares over exact Compo22.01 subject contributions",
"explicit region-pair counterweight evaluation on one exact Compo22.02 axis",
"opposition / same-sign / zero-involved moment relation descriptors",
"pair compensation fraction and residual moment descriptors",
"identity/status/provenance rules for Topic22 regional/counterweight layer",
"non-mutating correction request for region/membership/pair declarations"
],
"does_not_own": [
"AsymmetricBalanceModel / subject / frame / binding identities — Compo22.00",
"VisualCentroid and contribution numeric evidence resolution — Compo22.01",
"axis declaration / signed arm / torque-like moment computation — Compo22.02",
"balance target profiles / scoring / candidate generation / MetricResult — Compo22.04",
"mirror symmetry / mirror pair semantics — Topic21",
"radial balance / hub/ring semantics — Topic23",
"visual-mass computation or semantics — Compo4 / foreign owner",
"geometric region detection / segmentation — foreign geometry owner",
"dominance / hierarchy / focal importance",
"global beautyScore",
"final-layout ranking",
"foreign geometry/mass/style/semantic mutation"
]
},
"consumes": [
"valid Compo22.00 model/frame/seed lineage",
"valid Compo22.01 VisualCentroid plus exact contributionDescriptors",
"explicit owner-declared region definitions",
"explicit subject-to-region memberships",
"optional valid Compo22.02 TorqueMomentSystem + attachment when counterweight pairs are requested",
"explicit region-pair + axisSemanticRef counterweight declarations",
"one explicit RegionalMassDistributionPolicy"
],
"provides": [
"RegionalMassDescriptor[]",
"RegionalMassDistribution",
"CounterweightPairDescriptor[]",
"CounterweightSystem",
"CounterweightRegionalSystem",
"CounterweightRegionalAttachment"
],
"owns_metrics": [],
"independent_numeric_votes": 0,
"region_contract": {
"region_identity": "explicit regionSemanticRef + owner/context; no geometry inferred",
"membership": "explicit subjectRef -> regionSemanticRef only",
"duplicate_membership": "exact duplicates deduplicated",
"conflicting_membership": "same subject assigned to multiple distinct regions => N_A, no winner",
"foreign_subject_or_region": "INVALID",
"coverage_modes": [
"REQUIRE_ALL_SUBJECTS",
"ALLOW_UNASSIGNED"
],
"empty_region": "valid; regional mass 0 and mass share 0 are exact values",
"overlap": "not allowed in one partition context; use a separate explicit context for overlays",
"geometry_note": "regionGeometryRef is opaque optional lineage only; Compo22.03 does not classify points geometrically"
},
"regional_mass_math": {
"region_mass": "sum Compo22.01 massValue for exact declared region members",
"region_mass_share": "regionMass / VisualCentroid.totalVisualMass",
"assigned_mass": "sum mass of uniquely assigned subjects",
"unassigned_mass": "sum mass of model subjects with no membership when ALLOW_UNASSIGNED",
"coverage_fraction": "assignedMass / totalVisualMass",
"zero_note": "zero regional mass/share is valid and distinct from N_A"
},
"counterweight_contract": {
"selection": "explicit unordered region pairs only; no all-pairs generation",
"axis": "each declaration binds one exact axisSemanticRef from Compo22.02",
"region_moment": "sum exact signedMoment of region members on that axis",
"relation_class": [
"OPPOSING_MOMENTS",
"SAME_SIGN_MOMENTS",
"ZERO_INVOLVED"
],
"compensation_fraction": "if max(abs(Ma),abs(Mb)) > 0: min(abs(Ma),abs(Mb)) / max(abs(Ma),abs(Mb)); else null",
"net_pair_moment": "Ma + Mb",
"residual_magnitude": "abs(Ma + Mb)",
"exact_cancellation": "descriptor true only when Ma and Mb oppose and netPairMoment == 0 after deterministic numeric normalization",
"quality_note": "opposition, exact cancellation, compensation fraction and residual are descriptors, not quality scores"
},
"status_semantics": {
"OK": "valid root lineage + valid explicit region partition; counterweight descriptors are OK when requested pair/axis lineage is complete",
"N_A": "missing required declarations, conflicting memberships/pairs, required coverage gap, overflow, missing requested moment axis/system, or incompatible unit; no guessing/truncation",
"INVALID": "malformed policy/region/membership/pair, foreign subject/region, or broken upstream lineage",
"zero_note": "0 mass, 0 share, 0 signed regional moment and 0 residual are valid exact outcomes; N_A != 0"
},
"selection_policy": {
"regions": "EXPLICIT_REGIONS_ONLY",
"memberships": "EXPLICIT_MEMBERSHIPS_ONLY",
"counterweight_pairs": "EXPLICIT_REGION_PAIRS_ONLY",
"coverage_mode": "explicit REQUIRE_ALL_SUBJECTS or ALLOW_UNASSIGNED",
"duplicate_exact_records": "DEDUPLICATE_BY_RECORD_IDENTITY",
"conflict": "N_A_NO_WINNER",
"overflow": "N_A_NO_TRUNCATION",
"auto_region_detection": false,
"auto_membership_from_position": false,
"auto_left_right_partition": false,
"auto_counterweight_pairing": false,
"auto_mirror_import": false,
"full_cartesian_pair_generation": false,
"scoring": false,
"candidate_generation": false
},
"critical_firewalls": [
"region != geometric side unless explicitly declared by its owner",
"region membership != semantic grouping",
"regional mass share != importance",
"regional mass equality != balance",
"unequal regional mass != imbalance",
"counterweight declaration != proof that two regions balance each other",
"OPPOSING_MOMENTS != automatically good",
"SAME_SIGN_MOMENTS != automatically bad",
"exact pair moment cancellation != global balance",
"compensationFraction != score",
"residualMagnitude != penalty",
"counterweight relation != mirror correspondence",
"counterweight pair != symmetry pair",
"22.03 does not create or choose axes",
"22.03 does not recompute visual mass or moments",
"22.03 does not infer regions from x/y position",
"no MetricResult in 22.03",
"no candidate generation in 22.03",
"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 equal regional mass with equal/opposing regional moment profiles",
"IDEA-02 test whether human counterweight judgements track moment compensation better than mass-share similarity",
"IDEA-03 study coarse versus fine explicit region partitions on balance perception",
"IDEA-04 collect layouts with exact local pair cancellation but globally shifted centroid",
"IDEA-05 compare declared semantic regions with purely geometric partitions in LAB only"
],
"DATA_CAPTURE": [
"scopeRef",
"snapshotRef",
"asymmetricBalanceModelRef",
"visualCentroidRef",
"regionSemanticRef",
"regionRef",
"subjectRefs[]",
"regionMass",
"regionMassShare",
"assignedMass",
"unassignedMass",
"coverageFraction",
"counterweightPairRef",
"axisSemanticRef",
"regionAMoment",
"regionBMoment",
"relationClass",
"compensationFraction",
"netPairMoment",
"residualMagnitude",
"exactCancellation",
"status",
"reasonCode"
],
"DEFERRED_SEMANTIC_INPUTS": [
"22.04 explicit balance target profiles",
"22.04 MetricResult ownership and scoring-group budget",
"22.04 bounded correction/candidate generation",
"Topic21 mirror-symmetry interpretation",
"Topic23 radial-system interpretation"
],
"HUMAN_FEEDBACK_HOOKS": [
"correct region semantic/owner/context identity",
"correct subject-to-region membership",
"mark intended unassigned subject under explicit coverage policy",
"correct counterweight region pair declaration",
"correct axisSemanticRef used for counterweight evaluation"
],
"CONFLICT_PRIORITY_ASSUMPTIONS": [
"declaration order has no priority",
"confidence does not resolve conflicting memberships or pair declarations",
"region lexical order has no semantic priority",
"larger mass does not get counterweight priority",
"Topic21 symmetry does not override Topic22 region/pair declarations"
],
"LAB_HOOKS": [
"LAB region-granularity sensitivity study",
"LAB counterweight compensation versus human-rating study",
"LAB mass-share versus moment-cancellation study",
"LAB local-pair cancellation versus global-balance study"
],
"topic22ProgressAfterThisModule": "4/5 local",
"next_module": "Compo 22.04 — Scoring, candidates and tests",
"hard_stop": "Do not implement 22.04 or Topic23 in this file"
}