COMPO · 23.04 · SCORING / GENERATOR / TESTS

Radial target is local.
Generation stays bounded.

23.04 завершает Topic 23: оценивает только явно заданный local radial target по hub, radial grouping, angular spacing и sector occupancy, выдаёт ровно один независимый composite vote и формирует bounded owner-routed review candidates только для failed applicable target items.

ModuleCompo 23.04
Scoringexplicit local target
Independent votesexactly 1
Generatorfailed-item only
Mutationforbidden
Nextclosing audit

Exact radial descriptors first, preference only by declaration

00 / contract
23.01 exact hub
+ 23.02 radius groups
+ 23.03 angular gaps / sector occupancy
+ explicit local target profile

→ item observations / target-band fits
→ four non-independent component MetricResults
→ one composite radial.system.localTargetProfileFit
→ failed-item-only owner-routed review candidates

NO default canvas center
NO default equal angular spacing
NO default ring count / density
NO beautyScore
NO direct layout mutation

One final Topic23 scoring owner

01 / ownership
OWNS

Compo23.04

Explicit target profiles, item evaluation, four component MetricResults, one composite vote, explicit repair routes, bounded review candidates and final Topic23 tests.

DOES NOT OWN

23.00–23.03 identities

Root schema, hub resolution, radius groups, angular gaps, sectors and occupancy remain immutable foreign inputs.

Four source families, no universal radial ideal

02 / source adapters
SourceObserved valueHidden preference?
HUB_TARGET_DISTANCE_NORMALIZEDdistance to explicit target point / explicit normalizationDistanceNo
RADIUS_GROUP_SUBJECT_FRACTIONgroup subject count / valid radius-observation countNo
ANGULAR_GAP_FRACTIONexact gapFractionOfCircle from 23.03No
SECTOR_OCCUPANCY_FRACTIONexact occupancyFraction from 23.03No

Centered hubs, equal spacing, ring density and sector occupancy stay descriptors. Whether they fit the intended composition is decided only by the explicit local profile.

Local target profile

03 / target semantics
itemFit = 1 if observedValue ∈ [targetBand.min, targetBand.max], else 0

Bands are inclusive.
Weights are explicit.
APPLY family requires at least one explicit item.
IGNORE family weight = 0.

No hidden epsilon. No implicit “equal spacing is best”.

Composite-first scoring

04 / MetricResult
Metric keyCompositeIndependent vote
radial.target.componentFit.hubfalsefalse
radial.target.componentFit.radialGroupingfalsefalse
radial.target.componentFit.angularSpacingfalsefalse
radial.target.componentFit.sectorOccupancyfalsefalse
radial.system.localTargetProfileFittruetrue
component fit = explicit item-weighted mean
composite = explicit APPLY-family-weighted mean

Exactly one independent numeric vote.
scoringGroup = radial-balance-local

Bounded generator emits requests, not edits

05 / candidates
SELECT

Failed applicable only

Passing, ignored, N_A and INVALID items never become candidates.

ROUTE

Explicit route only

Every failed item must resolve to exactly one valid owner-qualified route.

BOUND

No truncation

Route or candidate overflow returns N_A; the generator does not silently trim.

NO MUTATION

Review request

A candidate contains no direct move/resize/delete operation and no promised improvement.

selectionMode = FAILED_APPLICABLE_TARGET_ITEMS_ONLY
routeMode     = EXPLICIT_ROUTE_RECORDS_ONLY
maxRoutes     = 1..512
maxCandidates = 1..128
fullCartesian = false
autoRouteInference = false
autoGeometryMutation = false
candidate.score = null

N_A and INVALID keep their meaning

06 / status
OKExact compatible lineage, explicit target and valid bounded route set.
N_AMissing source, ignored family, upstream N_A, missing/ambiguous route, or bounded overflow. No coercion to zero.
INVALIDMalformed target, incompatible lineage/unit, invalid upstream descriptor or malformed route/policy.
0A valid numeric observation or fit value. Zero remains distinct from N_A and INVALID.

Topic23 closes here

07 / boundaries
23.00Root radial identity and coordinate-frame lineage.
23.01Hub/center resolution.
23.02Radius observations, bands, rings and orbital groups.
23.03Angles, gaps, sectors and occupancy.
23.04Explicit local target fit, one composite vote, bounded review generator and tests.
Topic24Not started in this file.

Local fit ≠ universal quality

08 / firewalls
centered hub != automatically good
off-center hub != automatically bad
equal angular spacing != automatically good
unequal angular spacing != automatically bad
empty sector != defect
dense sector != defect
exact-radius ring != preferred ring
component metric != independent vote
candidate ordinal != score
candidate != mutation
local target fit != beautyScore
N_A != 0
INVALID != 0

CANON → LAB → DATA → IDEAS

09 / mandatory hooks
IDEAS_REFS[]Radial target presets and explainability.
DATA_CAPTURE[]Item fits, family fits, failed lineage and candidate outcomes.
DEFERRED_SEMANTIC_INPUTS[]Desirability and final layout selection stay foreign.
HUMAN_FEEDBACK_HOOKS[]Target-band and route corrections.
CONFLICT_PRIORITY_ASSUMPTIONS[]Conflicting exact declarations produce N_A, not averaging.
LAB_HOOKS[]Center tolerance, ring density, angular rhythm and sector occupancy studies.

23.04 regression suite

10 / deterministic tests

Tests cover exact Topic23 lineage, explicit source adapters, local target-band semantics, one-vote scoring, zero/N_A/INVALID separation, bounded deterministic route generation, no physical mutation, immutable attachments and Topic24 firewall.

Tests not run yet.

DATA FOR LAYOUT ENGINE

11 / machine contract
{
  "module": "Compo 23.04",
  "name": "scoring_generator_and_tests",
  "version": "1.0-canonical",
  "canonical_main_title": "Scoring, generator and tests",
  "topic": "23_РАДИАЛЬНЫЙ_БАЛАНС_И_ЦЕНТРАЛЬНЫЕ_СИСТЕМЫ",
  "scope": "EXPLICIT_LOCAL_RADIAL_TARGET_PROFILE_SCORING_ONE_COMPOSITE_METRICRESULT_AND_BOUNDED_OWNER_ROUTED_NONMUTATING_GENERATOR_OVER_VALID_23_00_TO_23_03_LINEAGE_ONLY",
  "main_topic_contract": {
    "topic_title": "Радиальный баланс и центральные системы",
    "topic_goal": "Формализует радиальные композиции: hub, rings, radius bands, angular sectors и распределение элементов вокруг центра.",
    "expected_output": "RadialGroupDescriptor, hub, rings, sectors",
    "planned_files": [
      "23.00 Radial system schema",
      "23.01 Hub/center detection",
      "23.02 Radius bands and orbital groups",
      "23.03 Angular spacing / sector occupancy",
      "23.04 Scoring, generator and tests"
    ]
  },
  "ownership": {
    "owner": "Compo23.04",
    "owns": [
      "RadialTargetSourceKind taxonomy",
      "RadialTargetFamily taxonomy",
      "RadialLocalTargetItem",
      "RadialLocalTargetProfile",
      "RadialTargetItemEvaluation",
      "four Topic23 component MetricResults",
      "one composite MetricResult radial.system.localTargetProfileFit",
      "RadialLocalEvaluationSet",
      "RadialScoringAttachment",
      "RadialRepairActionKind taxonomy",
      "RadialRepairRoute",
      "RadialGeneratorPolicy",
      "RadialLayoutReviewCandidate",
      "RadialLayoutReviewCandidateSet",
      "explicit local target evaluation over exact 23.01/23.02/23.03 descriptors",
      "Topic23 independent numeric vote budget",
      "bounded deterministic failed-item-only owner-routed candidate generation",
      "final Topic23 regression tests"
    ],
    "does_not_own": [
      "RadialSystemSchema / subjects / coordinate frame / position bindings — Compo23.00",
      "RadialHubDescriptor / hub evidence resolution — Compo23.01",
      "radius observations / bands / rings / orbital groups — Compo23.02",
      "polar angles / angular gaps / sectors / occupancy — Compo23.03",
      "symmetric balance — Topic21",
      "asymmetric mass balance / centroid / torque — Topic22",
      "visual mass extraction",
      "dominance / hierarchy / focal ranking",
      "global beautyScore",
      "final-layout ranking",
      "automatic physical layout mutation",
      "foreign geometry/style/semantic mutation"
    ]
  },
  "source_kinds": [
    "HUB_TARGET_DISTANCE_NORMALIZED",
    "RADIUS_GROUP_SUBJECT_FRACTION",
    "ANGULAR_GAP_FRACTION",
    "SECTOR_OCCUPANCY_FRACTION"
  ],
  "families": [
    "HUB",
    "RADIAL_GROUPING",
    "ANGULAR_SPACING",
    "SECTOR_OCCUPANCY"
  ],
  "source_to_family": {
    "HUB_TARGET_DISTANCE_NORMALIZED": "HUB",
    "RADIUS_GROUP_SUBJECT_FRACTION": "RADIAL_GROUPING",
    "ANGULAR_GAP_FRACTION": "ANGULAR_SPACING",
    "SECTOR_OCCUPANCY_FRACTION": "SECTOR_OCCUPANCY"
  },
  "target_semantics": {
    "HUB_TARGET_DISTANCE_NORMALIZED": "distance from exact Compo23.01 hub to an explicitly declared target point divided by explicit positive normalizationDistance; no default canvas center",
    "RADIUS_GROUP_SUBJECT_FRACTION": "exact group subject count divided by count of valid radius observations in the same 23.02 set",
    "ANGULAR_GAP_FRACTION": "exact Compo23.03 gapFractionOfCircle; equal spacing is never inferred as an ideal",
    "SECTOR_OCCUPANCY_FRACTION": "exact Compo23.03 occupancyFraction for an explicitly referenced sector",
    "fit": "inclusive membership in an explicit targetBand; the band is local tolerance, not a universal radial law"
  },
  "metric_contract": {
    "component_keys": [
      "radial.target.componentFit.hub",
      "radial.target.componentFit.radialGrouping",
      "radial.target.componentFit.angularSpacing",
      "radial.target.componentFit.sectorOccupancy"
    ],
    "composite_key": "radial.system.localTargetProfileFit",
    "owner": "Compo23.04",
    "scoringGroup": "radial-balance-local",
    "component_metrics": {
      "composite": false,
      "independentVoteAllowed": false,
      "componentOf": "radial.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": [
    "radial.target.componentFit.hub",
    "radial.target.componentFit.radialGrouping",
    "radial.target.componentFit.angularSpacing",
    "radial.target.componentFit.sectorOccupancy",
    "radial.system.localTargetProfileFit"
  ],
  "independent_numeric_votes": {
    "count": 1,
    "key": "radial.system.localTargetProfileFit",
    "owner": "Compo23.04",
    "scoringGroup": "radial-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_HUB_DECLARATION",
    "REVIEW_RADIAL_GROUPING",
    "REVIEW_ANGULAR_DISTRIBUTION",
    "REVIEW_SECTOR_CONFIGURATION",
    "REVIEW_POSITION",
    "REVIEW_TARGET_PROFILE"
  ],
  "status_semantics": {
    "OK": "valid exact Topic23 lineage plus explicit compatible target profile; candidate set OK only when every failed applicable item has one explicit valid route and bounds hold",
    "N_A": "missing source, upstream N_A, target family IGNORE, missing explicit route, or bounded overflow; no guessing/truncation/coercion",
    "INVALID": "malformed profile/route/policy, source lineage mismatch, invalid upstream descriptor, unit mismatch, duplicate conflicting declarations, or impossible numeric invariant",
    "zero_note": "hub distance 0, group fraction 0, angular gap 0, sector occupancy 0 and metric fit 0 are valid numbers; N_A != 0"
  },
  "firewalls": [
    "hub at a target point is not automatically good",
    "off-target hub is not automatically bad",
    "equal angular spacing is not automatically good",
    "unequal angular spacing is not automatically bad",
    "empty sector is not automatically a defect",
    "dense sector is not automatically a defect",
    "exact-radius ring is not automatically preferable",
    "local target profile is explicit and style/task scoped",
    "component MetricResults are not independent votes",
    "exactly one Topic23 independent numeric vote",
    "candidate ordinal is not score",
    "candidate != mutation",
    "candidate != guaranteed improvement",
    "no Topic21 mirror requirement",
    "no Topic22 centroid/torque semantics",
    "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[]": [
      "radial target presets by composition class",
      "learned target bands after LAB validation",
      "radial route libraries",
      "human-reviewed radial systems",
      "local radial 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 radial 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 radial center tolerance",
      "ring density perception",
      "angular rhythm perception",
      "sector occupancy perception"
    ]
  },
  "topic23ProgressAfterThisModule": "5/5 local",
  "next_step": "TOPIC23_CLOSING_AUDIT_SEPARATE_STEP",
  "topic24_started": false,
  "publication": "NOT_VERIFIED"
}
VISITS / ...