Descriptor lineage first, preference only by declaration
+ 22.02 torque-like axis descriptors
+ 22.03 regional mass + counterweight descriptors
+ explicit local target profile
→ item observations / target-band fits
→ four non-independent component MetricResults
→ one composite asymmetricBalance.system.localTargetProfileFit
→ failed-item-only owner-routed review candidates
NO default center
NO default equal-mass target
NO mirror requirement
NO beautyScore
NO direct layout mutation
One final Topic22 scoring owner
Compo22.04
Explicit target profiles, item evaluation, four component MetricResults, one composite vote, repair routes, bounded review candidates and final Topic22 tests.
22.00–22.03 identities
Subject/frame/mass bindings, centroid math, moment math, region membership and counterweight descriptors remain immutable foreign inputs.
Four source families, no universal ideal
| Source | Observed value | Hidden preference? |
|---|---|---|
| CENTROID_NORMALIZED_DISTANCE | distance to explicitly declared target point / explicit normalizationDistance | No |
| AXIS_NET_MOMENT_RATIO | |signedNetMoment| / absoluteMomentSum | No |
| REGION_MASS_SHARE | exact regionalMassShare | No |
| COUNTERWEIGHT_COMPENSATION | exact compensationFraction | No |
Off-center, unequal mass shares and non-zero moments remain valid descriptors. Whether they fit a composition is decided only by the explicit profile.
Local target profile
Bands are inclusive.
Weights are explicit.
APPLY family requires at least one explicit item.
IGNORE family weight = 0.
No hidden epsilon. No implicit “center is best”.
Composite-first scoring
| Metric key | Composite | Independent vote |
|---|---|---|
| asymmetricBalance.target.componentFit.centroid | false | false |
| asymmetricBalance.target.componentFit.moment | false | false |
| asymmetricBalance.target.componentFit.regionalMass | false | false |
| asymmetricBalance.target.componentFit.counterweight | false | false |
| asymmetricBalance.system.localTargetProfileFit | true | true |
composite = explicit APPLY-family-weighted mean
Exactly one independent numeric vote.
scoringGroup = asymmetric-balance-local
Candidate means request, not mutation
Failed applicable items only
Every failed item must have an explicit owner-qualified repair route. No subject × action Cartesian product and no inferred owner.
Owner-routed review request
Candidate contains owner, action and editableRef, but requestedMutation, predictedMetricValue and score remain null.
1 ≤ maxCandidates ≤ 128
explicit seed required
overflow → N_A, zero candidates, no truncation
duplicate exact routes → deduplicate
ordering → seeded hash + canonical tie break
N_A remains different from zero
Explicit + compatible
Exact Topic22 lineage and target declarations are complete.
Evidence unavailable
Missing source, undefined compensation, missing route or bounded overflow. No guess.
Broken contract
Malformed records, source lineage mismatch, unit mismatch or impossible numeric invariant.
Topic 22 closes here
| 22.00 | Asymmetric-balance root subject/frame/mass model. |
| 22.01 | Visual center of mass. |
| 22.02 | Torque-like signed moment descriptors. |
| 22.03 | Counterweight and regional mass distribution. |
| 22.04 | Explicit local scoring, bounded review candidates and final tests. |
| Topic23 | Radial balance / hub / rings / sectors. Separate owner and not started here. |
Asymmetric balance is not “almost symmetry”
centered centroid != automatic success
unequal regional mass != defect
equal regional mass != required
nonzero moment != defect
compensationFraction < 1 != defect
target profile = local declaration, not law
component metric != independent vote
candidate ordinal != score
candidate != mutation
candidate != guaranteed improvement
Topic21 mirror semantics != Topic22
Topic23 radial semantics != Topic22
CANON → LAB → DATA → IDEAS
22.04 final regression suite
Tests cover exact source adapters, explicit off-center/unequal-mass targets, MetricResult constitution, one-vote budget, N_A/zero semantics, owner-routed bounded candidate generation, no truncation, deterministic ordering, no mutation, Topic21/Topic23 firewalls and numeric sweeps over all four source families.
DATA FOR LAYOUT ENGINE
{
"module": "Compo 22.04",
"name": "scoring_candidates_and_tests",
"version": "1.0-canonical",
"canonical_main_title": "Scoring, candidates and tests",
"topic": "22_АСИММЕТРИЧНЫЙ_БАЛАНС",
"scope": "EXPLICIT_LOCAL_ASYMMETRIC_BALANCE_TARGET_PROFILE_SCORING_ONE_COMPOSITE_METRICRESULT_AND_BOUNDED_OWNER_ROUTED_NONMUTATING_CANDIDATES_OVER_VALID_22_00_TO_22_03_LINEAGE_ONLY",
"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.04",
"owns": [
"AsymmetricBalanceTargetSourceKind taxonomy",
"AsymmetricBalanceTargetFamily taxonomy",
"AsymmetricBalanceLocalTargetItem",
"AsymmetricBalanceLocalTargetProfile",
"AsymmetricBalanceTargetItemEvaluation",
"four Topic22 component MetricResults",
"one composite MetricResult asymmetricBalance.system.localTargetProfileFit",
"AsymmetricBalanceLocalEvaluationSet",
"AsymmetricBalanceScoringAttachment",
"AsymmetricBalanceRepairActionKind taxonomy",
"AsymmetricBalanceRepairRoute",
"AsymmetricBalanceRepairCandidatePolicy",
"AsymmetricBalanceRepairCandidate",
"AsymmetricBalanceRepairCandidateSet",
"explicit local target evaluation over 22.01/22.02/22.03 descriptors",
"Topic22 independent numeric vote budget",
"bounded deterministic failed-item-only owner-routed candidate generation",
"final Topic22 regression tests"
],
"does_not_own": [
"AsymmetricBalanceModel / subject / frame / position / mass binding identities — Compo22.00",
"VisualCentroid or contribution evidence resolution — Compo22.01",
"reference axes / signed arms / torque-like moment descriptors — Compo22.02",
"region identity / membership / counterweight pair descriptors — Compo22.03",
"visual-mass extraction or semantics — Compo4 / foreign owner",
"mirror symmetry — Topic21",
"radial balance — Topic23",
"dominance / hierarchy / focal ranking",
"global beautyScore",
"final-layout ranking",
"automatic physical layout mutation",
"foreign geometry/mass/style/semantic mutation"
]
},
"source_kinds": [
"CENTROID_NORMALIZED_DISTANCE",
"AXIS_NET_MOMENT_RATIO",
"REGION_MASS_SHARE",
"COUNTERWEIGHT_COMPENSATION"
],
"families": [
"CENTROID",
"MOMENT",
"REGIONAL_MASS",
"COUNTERWEIGHT"
],
"source_to_family": {
"CENTROID_NORMALIZED_DISTANCE": "CENTROID",
"AXIS_NET_MOMENT_RATIO": "MOMENT",
"REGION_MASS_SHARE": "REGIONAL_MASS",
"COUNTERWEIGHT_COMPENSATION": "COUNTERWEIGHT"
},
"target_semantics": {
"CENTROID_NORMALIZED_DISTANCE": "distance from explicitly declared target point divided by explicitly declared positive normalizationDistance; no default center",
"AXIS_NET_MOMENT_RATIO": "abs(signedNetMoment)/absoluteMomentSum; exact zero denominator with zero net resolves to 0",
"REGION_MASS_SHARE": "uses exact Compo22.03 regionalMassShare",
"COUNTERWEIGHT_COMPENSATION": "uses exact Compo22.03 compensationFraction; null stays N_A and is never coerced to 0",
"fit": "inclusive membership in an explicit targetBand; no hidden ideal or tolerance"
},
"metric_contract": {
"component_keys": [
"asymmetricBalance.target.componentFit.centroid",
"asymmetricBalance.target.componentFit.moment",
"asymmetricBalance.target.componentFit.regionalMass",
"asymmetricBalance.target.componentFit.counterweight"
],
"composite_key": "asymmetricBalance.system.localTargetProfileFit",
"owner": "Compo22.04",
"scoringGroup": "asymmetric-balance-local",
"component_metrics": {
"composite": false,
"independentVoteAllowed": false,
"componentOf": "asymmetricBalance.system.localTargetProfileFit"
},
"composite_metric": {
"composite": true,
"independentVoteAllowed": true,
"componentOf": null
},
"component_value": "explicit item-weighted mean of binary inclusive target-band fits for one APPLY family",
"composite_value": "explicit family-weighted mean of applicable component MetricResults",
"cross_profile_comparison": "forbidden unless a foreign comparison owner explicitly defines it"
},
"owns_metrics": [
"asymmetricBalance.target.componentFit.centroid",
"asymmetricBalance.target.componentFit.moment",
"asymmetricBalance.target.componentFit.regionalMass",
"asymmetricBalance.target.componentFit.counterweight",
"asymmetricBalance.system.localTargetProfileFit"
],
"independent_numeric_votes": {
"count": 1,
"key": "asymmetricBalance.system.localTargetProfileFit",
"owner": "Compo22.04",
"scoringGroup": "asymmetric-balance-local",
"component_metrics_independentVoteAllowed": false,
"composite_independentVoteAllowed": true
},
"candidate_generation": {
"selection": "FAILED_APPLICABLE_TARGET_ITEMS_ONLY",
"routes": "EXPLICIT_ROUTE_RECORDS_ONLY",
"seed": "required explicit deterministic seed",
"bounds": {
"maxRoutes": "1..512",
"maxCandidates": "1..128"
},
"overflow": "N_A_NO_TRUNCATION",
"dedupe": "exact canonical route identity",
"ordering": "stable seed hash + canonical tie break",
"fullCartesian": false,
"autoRouteInference": false,
"autoGeometryMutation": false,
"candidateScore": null,
"candidateMutationAllowed": false,
"candidateMeaning": "owner-routed review request, not a physical edit and not a promise of improvement"
},
"repair_action_kinds": [
"REVIEW_POSITION",
"REVIEW_VISUAL_MASS",
"REVIEW_REFERENCE_AXIS",
"REVIEW_REGION_ASSIGNMENT",
"REVIEW_COUNTERWEIGHT_CONFIGURATION",
"REVIEW_TARGET_PROFILE"
],
"status_semantics": {
"OK": "valid exact Topic22 lineage + explicit compatible target profile; candidate set OK when every failed applicable item has an explicit valid route and bounds hold",
"N_A": "missing source, upstream N_A, target family IGNORE, counterweight compensation null, missing repair route, or bounded overflow; no guessing/truncation/coercion",
"INVALID": "malformed profile/route/policy, source lineage mismatch, invalid upstream descriptor, unit mismatch, or impossible numeric invariant",
"zero_note": "centroid distance 0, net-moment ratio 0, mass share 0, compensation 0 and metric fit 0 are valid numbers; N_A != 0"
},
"firewalls": [
"off-center centroid is not automatically bad",
"centered centroid is not automatically good",
"unequal regional mass shares are not automatically bad",
"equal regional mass shares are not automatically required",
"nonzero net moment is not automatically bad",
"counterweight compensation below 1 is not automatically bad",
"target profile is local and explicit, not a universal asymmetry law",
"component MetricResults are not independent votes",
"exactly one Topic22 independent numeric vote",
"candidate ordinal is not score",
"candidate != mutation",
"candidate != guaranteed improvement",
"no mirror-pair requirement from Topic21",
"no radial semantics from Topic23",
"no global beautyScore",
"no final-layout rank"
],
"metric_result_fields": [
"key",
"owner",
"value",
"applicability",
"confidence",
"status",
"provenance",
"composite",
"componentOf",
"dependsOn[]",
"derivedFrom[]",
"scoringGroup",
"independentVoteAllowed",
"evidence",
"repairHints[]"
],
"hooks": {
"IDEAS_REFS[]": [
"asymmetric target presets by layout class",
"learned explicit target profiles after LAB validation",
"counterweight route libraries",
"human-reviewed off-center balance corpora",
"local balance explainability"
],
"DATA_CAPTURE[]": [
"target item observations",
"family fits",
"composite local target fit",
"failed item lineage",
"repair route selections",
"candidate outcomes after external application"
],
"DEFERRED_SEMANTIC_INPUTS[]": [
"whether a specific asymmetric target is desirable",
"whether candidate application improves task outcome",
"cross-profile preference",
"final layout selection"
],
"HUMAN_FEEDBACK_HOOKS[]": [
"target band correction",
"family weight correction",
"repair route approval",
"candidate rejection reason"
],
"CONFLICT_PRIORITY_ASSUMPTIONS[]": [
"explicit profile declarations outrank implementation heuristics; conflicting exact declarations yield N_A rather than averaging"
],
"LAB_HOOKS[]": [
"perceived asymmetric balance versus centroid displacement",
"moment-ratio perception",
"regional mass asymmetry tolerance",
"counterweight compensation perception"
]
},
"topic22ProgressAfterThisModule": "5/5 local",
"next_step": "TOPIC22_CLOSING_AUDIT_SEPARATE_STEP",
"topic23_started": false,
"publication": "NOT_VERIFIED"
}