COMPO · 22.03 · COUNTERWEIGHT / REGIONAL MASS

Regions are declared.
Counterweight is measured.

22.03 строит explicit regional visual-mass distribution и проверяет только явно объявленные пары counterweight по exact axis из 22.02. Равные массы, противоположные моменты и даже точная локальная компенсация остаются дескрипторами, а не вердиктом о качестве композиции.

ModuleCompo 22.03
Regionsexplicit membership
Counterweightsexplicit pairs
Geometry inferencenone
Metricsnone
NextSTOP

Explicit partition → regional mass → explicit counterweight pair

00 / contract
valid 22.00 root model + valid 22.01 VisualCentroid contributions + explicit region definitions + explicit subject → region memberships → RegionalMassDistribution optional valid 22.02 TorqueMomentSystem + explicit unordered region pair + exact axisSemanticRef → CounterweightPairDescriptor[] → CounterweightSystem NO geometric region inference NO all-pairs generation NO score NO candidates

22.03 owns grouping and pair descriptors only

01 / ownership
OWNS

Regional/counterweight layer

Region identity, explicit membership, regional mass sums/shares, explicit region-pair declarations, axis-bound pair moment descriptors and immutable attachment.

DOES NOT OWN

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

02 / explicit regions
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

03 / regional mass
regionalVisualMassᵣ = Σ massᵢ, subjectᵢ ∈ regionᵣ regionalMassShareᵣ = regionalVisualMassᵣ / totalVisualMass assignedMass + unassignedMass = totalVisualMass coverageFraction = assignedMass / totalVisualMass empty explicit region → mass 0, share 0 0 is valid; N_A is not 0.

Counterweight pair stays local to one declared axis

04 / pair descriptor
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
}
OPPOSING

Opposite signs

Regional signed moments oppose on the exact declared axis. This alone is not a quality claim.

SAME SIGN

Same side effect

Regional net moments point in the same signed direction on that axis. Still descriptive.

ZERO

Zero involved

One or both regional moments are exactly zero. Zero remains a valid observation.

Conflicts stay visible

05 / status
OK

Complete explicit lineage

Regions and memberships resolve exactly; requested counterweight axis/pairs resolve exactly when present.

N_A

No guess / no winner

Coverage gap under REQUIRE_ALL, conflicting membership/pair, overflow, missing requested axis or moment layer.

INVALID

Malformed lineage

Foreign subject/region, malformed declaration, invalid upstream bundle or broken attachment.

Bounded and explicit by construction

06 / selection policy
RegionsEXPLICIT_REGIONS_ONLY
MembershipEXPLICIT_MEMBERSHIPS_ONLY
CoverageREQUIRE_ALL_SUBJECTS or ALLOW_UNASSIGNED — explicit policy
Counterweight pairsEXPLICIT_REGION_PAIRS_ONLY
Duplicate exact recordsdeduplicate
ConflictsN_A_NO_WINNER
OverflowN_A_NO_TRUNCATION
Auto geometric partition / all-pairsfalse / false

Root stays immutable

07 / attachment
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

08 / downstream
22.04

Scoring + candidates

Explicit target profiles may interpret regional distribution and counterweight descriptors, own MetricResult, and generate bounded non-mutating candidate requests.

Topic23

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

09 / critical firewalls
regional mass equality != balance regional mass inequality != imbalance region membership != semantic importance counterweight declaration != proof of balance OPPOSING_MOMENTS != automatically good SAME_SIGN_MOMENTS != automatically bad exact pair cancellation != global balance compensationFraction != score residualMagnitude != penalty counterweight pair != mirror pair region != left/right/top/bottom unless explicitly declared NO MetricResult NO candidate generation NO beautyScore N_A != 0 local != global

CANON → LAB → DATA → IDEAS

10 / mandatory hooks
IDEAS_REFS[]Mass-share, moment-cancellation and local/global studies.
DATA_CAPTURE[]Regions, membership, mass shares, pair moments and residuals.
DEFERRED_SEMANTIC_INPUTS[]Targets, scoring and repair remain 22.04.
HUMAN_FEEDBACK_HOOKS[]Region, membership, pair and axis-reference corrections.
CONFLICT_PRIORITY_ASSUMPTIONS[]No declaration-order or confidence winner.
LAB_HOOKS[]Counterweight-vs-human-balance experiments.

22.03 regression suite

11 / deterministic tests

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.

Tests not run yet.

DATA FOR LAYOUT ENGINE

12 / machine contract
{
  "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"
}
VISITS / ...