Radius first. Angle later.
One owner for radial distance grouping
Distance + radial grouping
Derived radius observations, explicit interval bands, exact-radius rings, band-backed orbital groups, immutable attachment and all local identity/status/provenance rules.
Angle + quality
Polar angle, angular sectors, approximate-ring tolerance, perceptual ring merge, target fit, MetricResult, candidate generation, symmetry, visual mass, hierarchy or beauty.
Hub lineage must be exact
23.00 exact bundle
Schema, seed, subject set, coordinate frame and one exact position binding per radial subject must remain consistent.
23.01 exact descriptor
Hub descriptor and attachment must reference the same radial system, scope, snapshot, coordinate frame and unit.
Centroid ≠ hub
Topic22 visual centroid, frame origin, viewport center and arbitrary point cannot silently replace the resolved 23.01 hub.
Euclidean radius is descriptive geometry
RadialRadiusObservation {
radialSystemRef,
scopeRef, snapshotRef,
subjectRef,
coordinateFrameRef, unitRef,
positionRef, positionOwnerRef,
hubDescriptorRef,
dx, dy,
radiusSquared,
radius,
derivedFrom[],
provenance: DERIVED,
status,
mutationAllowed: false
}Radius bands are explicit intervals
No hidden ring thresholds
Every band has an explicit owner/source, nonnegative min/max radius and explicit lower/upper inclusion flags. No k-means, quantiles or “natural” gaps are inferred.
Multiple matches stay N_A
If one radius belongs to multiple declared bands, assignment is AMBIGUOUS/N_A. Source order, confidence, narrower interval or lexical band name never selects a winner.
RadialRadiusBandDefinition {
bandRef,
radialSystemRef,
scopeRef, snapshotRef,
coordinateFrameRef, unitRef,
minRadius, maxRadius,
lowerInclusive, upperInclusive,
sourceRef, sourceOwnerRef,
provenance,
status,
mutationAllowed: false
}Band assignment preserves gaps
| Result | Condition | Status |
|---|---|---|
| ASSIGNED | Exactly one explicit interval contains the radius. | OK |
| UNASSIGNED | No explicit interval contains the radius. | OK |
| AMBIGUOUS | Two or more explicit intervals contain the radius. | N_A |
Exact rings need no tolerance
At least two subjects have exactly equal derived radiusSquared. Their ring descriptor records the exact common radius. This is deterministic geometry.
Near-equal radii, perceptual ring tolerance, fuzzy clustering and “close enough” merge belong to 23.04 and require explicit approximation policy.
RadialGroupDescriptor stays non-scoring
RadialGroupDescriptor {
groupRef,
groupKind: EXACT_RADIUS_RING | RADIUS_BAND_GROUP,
radialSystemRef,
scopeRef, snapshotRef,
coordinateFrameRef, unitRef,
subjectRefs[],
exactRadius, // only exact ring
radiusBandRef, // only band group
observedMinRadius,
observedMaxRadius,
sourceRadiusObservationRefs[],
provenanceSet[],
status,
mutationAllowed: false
}Bounded and deterministic
0..512
Overflow becomes N_A without truncation. Definitions remain explicit-only.
1..4096
One exact position/radius observation per selected root subject. Missing or conflicting lineage is preserved.
0..4096
Derived exact-ring and band groups are bounded. No Cartesian subject×band candidate generator exists.
Attachment is immutable
RadialRadiusBandAttachment {
radialSystemSeedRef,
hubDescriptorRef,
radiusObservationSetRef,
radiusBandSetRef,
orbitalGroupSetRef,
status,
mutationAllowed: false
}
Compo23.00 RadialSystemSeed.radiusBandAttachmentRef
remains unchanged in-place.Angular structure remains downstream
| 23.02 | Distance from hub, explicit radius bands, exact-radius rings and orbital groups. |
| 23.03 | Polar angle, angular spacing, angular sectors and sector occupancy. |
| 23.04 | Approximation/tolerance, target fit, MetricResult, bounded generator and final tests. |
Radius does not smuggle interpretation
Exact hub lineage, Euclidean radius, explicit bands, exact equal-radius rings, descriptive orbital groups and immutable attachments.
Angle/sector derivation, approximate-ring tolerance, hidden band discovery, band-as-quality, radius-as-importance, mass centroid import, symmetry score, radial score or generator.
CANON → LAB → DATA → IDEAS
23.02 regression suite
Tests cover exact 23.00/23.01 lineage, zero-radius validity, Euclidean distance math, explicit interval boundaries, band gaps, ambiguity preservation, exact equal-radius rings, band-backed groups, immutable attachment, zero metrics, no angle/sector API and strict 23.03–23.04 ownership boundaries.
DATA FOR LAYOUT ENGINE
{
"module": "Compo 23.02",
"name": "radius_bands_and_orbital_groups",
"version": "1.0-canonical",
"canonical_main_title": "Radius bands and orbital groups",
"topic": "23_РАДИАЛЬНЫЙ_БАЛАНС_И_ЦЕНТРАЛЬНЫЕ_СИСТЕМЫ",
"scope": "EXACT_COMPO23_00_ROOT_AND_COMPO23_01_HUB_LINEAGE_DERIVED_NONNEGATIVE_RADII_EXPLICIT_RADIUS_BANDS_EXACT_RADIUS_RINGS_AND_NONSCORING_ORBITAL_GROUP_DESCRIPTORS_ONLY_WITHOUT_ANGLE_SECTORS_TOLERANCE_OR_SCORING",
"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.02",
"owns": [
"RadialRadiusObservation",
"RadialRadiusObservationSet",
"RadialRadiusBandDefinition",
"RadialRadiusBandPolicy",
"RadialRadiusBandAssignment",
"RadialRadiusBandSet",
"RadialOrbitalGroupKind taxonomy",
"RadialGroupDescriptor",
"RadialOrbitalGroupSet",
"RadialRadiusBandAttachment",
"exact Euclidean distance-from-hub derivation without angle",
"explicit interval-based radius-band assignment with ambiguity preservation",
"exact equal-radius ring grouping without tolerance",
"band-backed orbital grouping without quality interpretation",
"identity/status/provenance rules for Topic23 radial-distance layer",
"non-mutating correction request for radius/band/group lineage"
],
"does_not_own": [
"RadialSystemSchema / RadialSystemSeed identity — Compo23.00",
"hub detection / hub truth — Compo23.01",
"raw point geometry or foreign position identities — upstream geometry owners",
"polar angle, angular spacing, angular sectors or sector occupancy — Compo23.03",
"approximate-radius tolerance, fuzzy ring merge, target fit, scoring, MetricResult or generator — Compo23.04",
"visual center of mass, moments and counterweights — Topic22",
"mirror symmetry and symmetric-balance scoring — Topic21",
"hierarchy, dominance, semantic importance, beautyScore or final-layout ranking",
"foreign geometry/style/semantic mutation"
]
},
"consumes": [
"exact Compo23.00 root bundle: RadialSystemSchema, RadialSystemSeed, RadialSubjectSet, RadialCoordinateFrameBinding, RadialPositionBinding[]",
"exact Compo23.01 hub layer: RadialHubDescriptor + RadialHubAttachment",
"owner-qualified RadialPositionObservation[] resolving exact 23.00 position bindings",
"optional explicit RadialRadiusBandDefinition[] and bounded policies"
],
"provides": [
"RadialRadiusObservation[]",
"RadialRadiusObservationSet",
"RadialRadiusBandDefinition[]",
"RadialRadiusBandAssignment[]",
"RadialRadiusBandSet",
"RadialGroupDescriptor[]",
"RadialOrbitalGroupSet",
"RadialRadiusBandAttachment"
],
"owns_metrics": [],
"independent_numeric_votes": 0,
"status_semantics": {
"OK": "valid exact local radius/band/group descriptor",
"N_A": "missing/conflicting/ambiguous/not-applicable evidence; never numeric zero",
"INVALID": "malformed or impossible record; never numeric zero"
},
"radius_rules": [
"dx = subject.x - hub.x",
"dy = subject.y - hub.y",
"radiusSquared = dx^2 + dy^2",
"radius = sqrt(radiusSquared)",
"radius >= 0 and radius=0 is valid",
"no angle is computed in 23.02"
],
"band_policy": {
"definitionMode": "EXPLICIT_INTERVALS_ONLY",
"multipleMatchMode": "N_A_NO_GUESS",
"gapMode": "UNASSIGNED_OK",
"maxBands": [
0,
512
],
"maxRadiusObservations": [
1,
4096
],
"maxOrbitalGroups": [
0,
4096
],
"overflow": "N_A_WITHOUT_TRUNCATION",
"autoBandDiscovery": false,
"autoTolerance": false,
"autoApproximateRingMerge": false,
"autoScoring": false
},
"orbital_group_kinds": [
"EXACT_RADIUS_RING",
"RADIUS_BAND_GROUP"
],
"group_rules": [
"EXACT_RADIUS_RING requires at least two subjects with exactly equal derived radiusSquared; no tolerance",
"RADIUS_BAND_GROUP groups subjects with one unambiguous explicit band assignment",
"a subject may appear in an exact-radius ring and a band-backed group because these are distinct descriptors, not independent scores",
"singleton explicit band groups are valid descriptive groups",
"unassigned band membership is valid and does not imply error or low quality",
"ambiguous multiple-band membership is N_A and is never resolved by source order/confidence"
],
"root_attachment_contract": {
"radialSystemSeedRef": "exact Compo23.00 seed lineage",
"hubDescriptorRef": "exact Compo23.01 hub descriptor identity",
"radiusObservationSetRef": "exact Compo23.02 radius set identity",
"radiusBandSetRef": "exact Compo23.02 band set identity",
"orbitalGroupSetRef": "exact Compo23.02 group set identity",
"rootMutation": false,
"metricResultRefs": []
},
"firewalls": [
"radius != angle",
"radius != visual mass",
"radius != hierarchy or importance",
"radius=0 != N_A",
"equal radius != equal shape/color/semantic role",
"exact-radius ring != approximate ring",
"radius band != quality band",
"band midpoint is not inferred as target",
"unassigned band != bad composition",
"multiple band match -> N_A, not winner selection",
"orbital group != angular sector",
"orbital group != symmetry class",
"descriptor != score",
"N_A != 0",
"INVALID != 0",
"heuristic != law",
"local != global",
"geometry != interpretation",
"correction request != foreign mutation"
],
"topic23ProgressAfterThisModule": "3/5 local",
"next_module": "Compo 23.03 — Angular spacing / sector occupancy",
"hard_stop": "No 23.03–23.04 implementation in this file"
}