Aggregate evidence, not heterogeneous raw distances
SIZE is unbounded while the other channels use normalized scales. 29.04 therefore classifies each configured slot locally before combining decisions.
Six channels keep six distance contracts
Equal numeric values across channels do not imply equal meaning.
[0,1]
Comparator normalized.
[0,+∞)
Absolute log ratio.
[0,1]
Comparator normalized.
[0,1]
Normalized difference.
[0,1]
Cyclic normalized.
[0,1]
Comparator normalized.
Level 1 · slot threshold
Every explicit slot has its own `maxDistance`. Missing relation remains N_A.
Local classification
Level 2 · slots stay inside their channel
TEXTURE_STYLE may contain both `texture` and `style`, but two slots still produce one outer channel contribution.
Two slots → one channel
Level 3 · one pair descriptor
Coverage and match support are separate. Only applicable channels contribute to the match share.
N_A is not “not similar”
Insufficient evidence is kept separate from an actual model disagreement.
Coverage + support
Can connect cluster components.
Coverage + weak support
Does not connect.
Coverage insufficient
No verdict is fabricated.
Clusters use only SIMILAR_LINK edges
Singletons remain valid outputs.
Similarity graph
Connected component ≠ clique
A↔B and B↔C may connect one cluster even when A↔C was never requested. No missing pair is synthesized.
A↔C remains absent
Topic29 cluster ≠ Topic28 proximity group
Similarity links come only from feature relations. Spatial neighbor topology is neither fused nor mutated.
Spatial closeness
Neighbor graph and proximity grouping.
Feature resemblance
Multi-channel similarity evidence.
29.04 regression suite
Tests cover heterogeneous distance contracts, slot/channel budgets, N_A coverage discipline, explicit relation union, no Cartesian completion, SIMILAR_LINK components, singleton preservation, no clique/transitivity/perception claims and strict absence of scoring.
DATA FOR LAYOUT ENGINE
Canonical machine contract for final Topic29 grouping layer.
{
"module": "Compo 29.04",
"canonical_main_title": "Multi-channel groups and tests",
"topic": "29_СХОДСТВО_И_ПОВТОРЯЕМОСТЬ",
"scope": "EXPLICIT_SLOT_WITHIN_CHANNEL_AND_CHANNEL_ACROSS_PAIR_AGGREGATION_OVER_IMMUTABLE_29_01_29_02_29_03_RELATIONS_WITH_SIMILAR_LINK_COMPONENT_CLUSTERING_ONLY",
"main_topic_contract": {
"topic_title": "Сходство и повторяемость",
"topic_goal": "Измеряет сходство по независимым каналам — shape, size, color, tone, orientation, texture/style — и формирует similarity groups без потери источника сигнала.",
"expected_output": "SimilarityRelation[], feature distances, similarity clusters",
"planned_files": [
"29.00 Similarity feature schema",
"29.01 Shape/size similarity",
"29.02 Color/tone similarity",
"29.03 Orientation/texture/style similarity",
"29.04 Multi-channel groups and tests"
]
},
"ownership": {
"owner": "Compo29.04",
"owns": [
"SimilaritySlotMatchRule",
"SimilarityChannelAggregationRule",
"SimilarityMultiChannelPolicy",
"SimilaritySlotMatchDescriptor",
"SimilarityChannelSupportDescriptor",
"SimilarityPairSupportDescriptor",
"SimilarityPairDecision",
"SimilarityClusterCandidate",
"SimilarityClusterSet",
"SimilarityMultiChannelAttachment",
"slot-threshold classification",
"slot-weight aggregation inside channel",
"channel-weight aggregation across channels",
"coverage gating",
"SIMILAR_LINK decision",
"NON_SIMILAR_LINK decision",
"N_A insufficient-coverage preservation",
"connected components over SIMILAR_LINK",
"singleton clusters",
"cluster evidence lineage",
"bounded explicit relation-union processing",
"non-mutating correction request"
],
"does_not_own": [
"29.00 feature schema",
"29.01 SHAPE/SIZE distances",
"29.02 COLOR/TONE distances",
"29.03 ORIENTATION/TEXTURE_STYLE distances",
"raw distance recomputation",
"automatic raw-distance normalization",
"automatic threshold selection",
"automatic channel weighting",
"automatic slot weighting",
"full Cartesian pair generation",
"raw cross-channel distance averaging",
"clique completion",
"transitive similarity truth",
"measured human similarity judgment",
"Topic28 proximity grouping",
"Topic27 attention flow",
"repair generation",
"universal similarity quality",
"universal beautyScore"
]
},
"pair_decisions": [
"SIMILAR_LINK",
"NON_SIMILAR_LINK"
],
"aggregation_semantics": {
"slot": "distance <= explicit maxDistance => MATCH; missing relation => N_A",
"channel": "slotCoverageShare + slotMatchShare; one outer channelWeight regardless of slot count",
"pair": "channelCoverageShare + weightedChannelMatchShare",
"pair_N_A": "coverage below explicit minimum",
"cluster": "connected components of SIMILAR_LINK only",
"clique_claim": false,
"transitivity_claim": false,
"perceptual_truth_claim": false,
"raw_distance_averaging": false
},
"policy": {
"max_relations": [
0,
393216
],
"max_pair_descriptors": [
0,
131072
],
"max_clusters": [
1,
4096
],
"overflow": "N_A_NO_TRUNCATION",
"auto_threshold_selection": false,
"auto_slot_weight_selection": false,
"auto_channel_weight_selection": false,
"auto_missing_relation_imputation": false,
"auto_pair_cartesian": false,
"auto_raw_distance_normalization": false,
"auto_raw_distance_averaging": false,
"auto_clique_completion": false,
"auto_transitive_similarity_claim": false,
"auto_proximity_fusion": false,
"auto_attention_fusion": false,
"auto_scoring": false
},
"status_semantics": {
"OK": "valid rules and upstream relations resolve deterministic pair-support descriptors and SIMILAR_LINK components",
"N_A": "pair lacks configured channel coverage, required relation lineage is absent, or bounds overflow",
"INVALID": "malformed rule/policy/relation, duplicate identity, negative distance, invalid threshold/weight, or malformed upstream set",
"zero": "distance 0, match share 0 and coverage 0 can be valid; N_A remains distinct"
},
"firewalls": [
"raw distance != cross-channel score",
"channel threshold != universal similarity threshold",
"slot match != channel match",
"channel match != pair similarity fact",
"weighted channel match share != empirical probability",
"SIMILAR_LINK != measured human similarity",
"NON_SIMILAR_LINK != semantic unrelatedness",
"N_A != NON_SIMILAR_LINK",
"connected component != clique",
"cluster membership != every member pair being similar",
"connected component != transitive similarity law",
"similarity cluster != perceptual truth",
"slot proliferation cannot increase outer channel weight",
"multiple texture/style slots do not create extra channels",
"missing relation != mismatch",
"distance zero != N_A",
"pair union != full Cartesian product",
"Topic29 similarity cluster != Topic28 proximity group",
"Topic29 SIMILAR_LINK != Topic28 neighbor relation",
"Topic29 similarity cluster != Topic27 attention path",
"N_A != 0",
"INVALID != 0",
"descriptor != score",
"local != global",
"geometry != interpretation",
"heuristic != law",
"no universal similarity threshold",
"no universal beautyScore"
],
"owns_metrics": [],
"independent_numeric_votes": 0,
"topic29ProgressAfterThisModule": "5/5 local",
"next_step": "COMPO_TOPIC_29_CLOSING_AUDIT_FINAL — separate artifact",
"topic30_started": false,
"publication": "NOT_VERIFIED"
}