Hub point before polar geometry
Hub layer has one owner
Evidence → candidate → hub
Position observations, explicit hub evidence, bounded hub candidates, exact-coordinate consensus, hub descriptor and immutable attachment to the 23.00 seed.
Rings, sectors or quality
23.02 owns radius/rings, 23.03 owns angles/sectors, 23.04 owns approximation/scoring/generator. Topic22 retains visual mass centroid and moment semantics.
Root bundle is exact
RadialHubRootBundle {
schema, // Compo23.00 RadialSystemSchema
seed, // exact schema ref
subjectSet, // exact subject set
frameBinding, // exact 2D frame
positionBindings // exact one per subject
}
23.01 validates refs from 23.00.
It does not reconstruct or rewrite root identity.23.00 stores binding refs in the schema; 23.01 therefore consumes the exact records alongside the schema and validates their canonical refs.
Numeric points are adapters
Exact foreign position
Every observation resolves one exact 23.00 positionRef in the same scope, snapshot and coordinate frame. x/y must be finite numbers.
Owner-qualified
positionOwnerRef and coordinateFrameRef must match the foreign binding. 23.01 consumes numeric values but does not claim ownership of upstream geometry.
(0,0) ≠ N_A
Zero coordinates are legitimate geometry. Missing evidence is N_A; malformed numeric evidence is INVALID.
RadialPositionObservation {
scopeRef, snapshotRef, subjectRef,
coordinateFrameRef,
positionRef, positionOwnerRef,
x, y, unitRef,
sourceRef, sourceOwnerRef,
provenance, status,
mutationAllowed: false
}Two explicit hub evidence kinds
| Kind | Meaning | Candidate construction |
|---|---|---|
| EXPLICIT_COORDINATE | Owner/source explicitly declares x/y as the local radial hub in the exact frame. | Uses declared finite x/y directly. |
| DECLARED_SUBJECT_POSITION | Owner/source explicitly declares an exact 23.00 subject as hub anchor. | Resolves that subject's exact RadialPositionObservation. |
Arithmetic mean is opt-in
All selected member positions must resolve exactly. Then meanX = Σx/n and meanY = Σy/n creates one bounded candidate with provenance IMPLEMENTATION_HEURISTIC.
Mean of member positions is not a perceptual truth, not a visual-mass centroid, not a score, and does not override conflicting explicit evidence.
Candidate set is bounded
RadialHubDetectionPolicy {
candidateSelectionMode: EXPLICIT_EVIDENCE_ONLY,
conflictResolutionMode: EXACT_COORDINATE_CONSENSUS_ONLY,
maxEvidence: 0..128,
maxCandidates: 1..128,
maxPositionObservations: 0..4096,
overflowMode: N_A_WITHOUT_TRUNCATION,
allowArithmeticMeanCandidate: false,
autoFrameCenterCandidate: false,
autoVisualCentroidCandidate: false,
autoTolerance: false,
autoScoring: false
}No Cartesian product, no random seed, no silent truncation. Repeated evidence identity is rejected; distinct evidence may support the same exact point.
Consensus is exact in 23.01
Descriptor carries lineage, not quality
RadialHubDescriptor {
radialSystemRef,
scopeRef, snapshotRef,
coordinateFrameRef, unitRef,
x, y,
supportingHubSubjectRefs[],
sourceCandidateRefs[],
basisKinds[],
heuristicCandidateUsed,
provenanceSet[],
status,
mutationAllowed: false
}Attachment does not mutate 23.00
RadialHubAttachment {
radialSystemSeedRef,
hubDescriptorRef,
status,
mutationAllowed: false
}
Compo23.00 RadialSystemSeed.hubAttachmentRef
remains unchanged in-place.Topic22 centroid is foreign
Polar decomposition remains downstream
| 23.01 | Exact local hub resolution and hub descriptor attachment. |
| 23.02 | Distance from resolved hub, radius bands, rings and orbital groups. |
| 23.03 | Angle about resolved hub, angular spacing, sectors and occupancy. |
| 23.04 | Approximation/tolerances, target fit, MetricResult, bounded layout generator and final tests. |
No hidden center preference
Exact root lineage, owner-qualified point observations, explicit hub declarations, optional labeled mean heuristic, exact consensus, immutable hub attachment.
Viewport center, frame origin, highest-confidence winner, source-order priority, visual centroid import, tolerance-based merge, ring inference, sector inference, radial quality score.
CANON → LAB → DATA → IDEAS
23.01 regression suite
Tests cover exact 23.00 lineage, numeric coordinate adapters, explicit evidence kinds, declared-subject resolution, optional mean heuristic, exact consensus/conflict preservation, zero coordinates, immutable attachment, zero metrics, Topic22 firewall and strict 23.02–23.04 ownership boundaries.
DATA FOR LAYOUT ENGINE
{
"module": "Compo 23.01",
"name": "hub_center_detection",
"version": "1.0-canonical",
"canonical_main_title": "Hub/center detection",
"topic": "23_РАДИАЛЬНЫЙ_БАЛАНС_И_ЦЕНТРАЛЬНЫЕ_СИСТЕМЫ",
"scope": "EXACT_RADIAL_ROOT_LINEAGE_OWNER_QUALIFIED_POSITION_OBSERVATIONS_EXPLICIT_HUB_EVIDENCE_OPTIONAL_EXPLICITLY_ENABLED_ARITHMETIC_MEAN_CANDIDATE_EXACT_CENTER_CONSENSUS_AND_IMMUTABLE_HUB_ATTACHMENT_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.01",
"owns": [
"RadialPositionObservation adapter",
"RadialHubEvidenceKind taxonomy",
"RadialHubEvidence",
"RadialHubCandidateKind taxonomy",
"RadialHubCandidate",
"RadialHubDetectionPolicy",
"RadialHubCandidateSet",
"RadialHubResolution",
"RadialHubDescriptor",
"RadialHubAttachment",
"exact hub-point consensus resolution",
"optional explicitly-enabled arithmetic-mean-of-member-positions center candidate",
"identity/status/provenance rules for Topic23 hub layer",
"non-mutating correction request for hub/position evidence"
],
"does_not_own": [
"RadialSystemSchema / RadialSystemSeed identity — Compo23.00",
"raw point geometry or foreign position identities — upstream geometry owners",
"visual center of mass / mass weighting / moments — Topic22",
"polar radius, rings, radius bands, orbital groups — Compo23.02",
"polar angle, angular spacing, sector occupancy — Compo23.03",
"approximation tolerance, target fit, scoring, MetricResult or layout candidate generator — Compo23.04",
"symmetric balance / mirror correspondence — Topic21",
"dominance / hierarchy / semantic importance / beautyScore / final-layout ranking",
"foreign geometry/style/semantic mutation"
]
},
"consumes": [
"exact Compo23.00 root bundle: RadialSystemSchema, RadialSystemSeed, RadialSubjectSet, RadialCoordinateFrameBinding, RadialPositionBinding[]",
"owner-qualified numeric position observations resolving exact foreign positionRef values",
"explicit hub evidence: EXPLICIT_COORDINATE or DECLARED_SUBJECT_POSITION",
"optional explicit policy enabling arithmetic-mean center candidate"
],
"provides": [
"RadialPositionObservation[]",
"RadialHubEvidence[]",
"RadialHubCandidateSet",
"RadialHubResolution",
"RadialHubDescriptor",
"RadialHubAttachment"
],
"owns_metrics": [],
"independent_numeric_votes": 0,
"status_semantics": {
"OK": "valid exact local hub resolution or valid record",
"N_A": "missing/conflicting/not-applicable evidence; never numeric zero",
"INVALID": "malformed or impossible record; never numeric zero"
},
"hub_evidence_kinds": [
"EXPLICIT_COORDINATE",
"DECLARED_SUBJECT_POSITION"
],
"hub_candidate_kinds": [
"EXPLICIT_COORDINATE",
"DECLARED_SUBJECT_POSITION",
"ARITHMETIC_MEAN_MEMBER_POSITIONS"
],
"policy": {
"candidateSelectionMode": "EXPLICIT_EVIDENCE_ONLY by default",
"conflictResolutionMode": "EXACT_COORDINATE_CONSENSUS_ONLY",
"maxEvidence": [
0,
128
],
"maxCandidates": [
1,
128
],
"maxPositionObservations": [
0,
4096
],
"overflow": "N_A_WITHOUT_TRUNCATION",
"allowArithmeticMeanCandidate": false,
"autoFrameCenterCandidate": false,
"autoVisualCentroidCandidate": false,
"autoTolerance": false,
"autoScoring": false
},
"resolution_rules": [
"one valid candidate -> exact local hub point",
"multiple candidates with exactly equal x/y -> exact consensus hub point",
"multiple candidates with different x/y -> N_A; confidence/source order does not select a winner",
"no valid candidates -> N_A",
"invalid selected evidence/observation -> INVALID",
"arithmetic mean is an IMPLEMENTATION_HEURISTIC and exists only when explicitly enabled"
],
"root_attachment_contract": {
"radialSystemSeedRef": "exact Compo23.00 seed lineage",
"hubDescriptorRef": "exact Compo23.01 descriptor identity",
"rootMutation": false,
"metricResultRefs": []
},
"firewalls": [
"coordinate-frame origin != hub",
"frame center != hub",
"viewport center != hub",
"unweighted arithmetic mean candidate != Topic22 visual center of mass",
"arithmetic mean candidate != truth and is disabled by default",
"hub point != focal point",
"hub point != semantic importance",
"hub subject != hierarchy role",
"hub subject != required content",
"hub resolution != ring membership",
"hub resolution != sector membership",
"exact coordinate conflict != approximate agreement",
"confidence != conflict winner",
"source order != priority",
"N_A != 0",
"INVALID != 0",
"descriptor != score",
"heuristic != law",
"local != global",
"geometry != interpretation"
],
"topic23ProgressAfterThisModule": "2/5 local",
"next_module": "Compo 23.02 — Radius bands and orbital groups",
"hard_stop": "No 23.02–23.04 implementation in this file"
}