COMPO · 29.04 · MULTI-CHANNEL GROUPS

Aggregate decisions.
Never average unlike distances.

29.04 завершает Topic 29 локально. Six feature channels сохраняют собственные distance semantics до explicit slot thresholds. Затем slot-support агрегируется внутри канала, channel-support — между каналами, а similarity clusters строятся только по `SIMILAR_LINK`.

Module29.04
Progress5/5 local
Channels6
Clusterslink components
Metricsnone
Nextclosing audit

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.

00 / final Topic29 layer
29.01 SHAPE / SIZE relations + 29.02 COLOR / TONE relations + 29.03 ORIENTATION / TEXTURE_STYLE relations + explicit slot thresholds / slot weights / channel weights → slot MATCH / MISMATCH / N_A → channel support → pair support → SIMILAR_LINK | NON_SIMILAR_LINK | N_A → similarity clusters NO raw distance averaging NO auto normalization NO Cartesian pair completion NO clique completion NO scoring

Six channels keep six distance contracts

Equal numeric values across channels do not imply equal meaning.

01 / scale firewall
SHAPE

[0,1]

Comparator normalized.

SIZE

[0,+∞)

Absolute log ratio.

COLOR

[0,1]

Comparator normalized.

TONE

[0,1]

Normalized difference.

ORIENTATION

[0,1]

Cyclic normalized.

TEXTURE_STYLE

[0,1]

Comparator normalized.

Forbidden shortcut`mean(shapeDistance, sizeDistance, colorDistance, …)` is not a valid operation here.

Level 1 · slot threshold

Every explicit slot has its own `maxDistance`. Missing relation remains N_A.

02 / slot

Local classification

MATCHMISMATCHmaxDistancedistance ≤ threshold is inclusive

Level 2 · slots stay inside their channel

TEXTURE_STYLE may contain both `texture` and `style`, but two slots still produce one outer channel contribution.

03 / slot proliferation firewall

Two slots → one channel

texture slotstyle slotTEXTURE_STYLEslotCoverageShareone channelWeight

Level 3 · one pair descriptor

Coverage and match support are separate. Only applicable channels contribute to the match share.

04 / pair support
channelCoverageShare = applicableChannelWeight / configuredChannelWeight weightedChannelMatchShare = matchedApplicableChannelWeight / applicableChannelWeight coverage below minimum → N_A enough coverage + support ≥ minimum → SIMILAR_LINK enough coverage + support < minimum → NON_SIMILAR_LINK weightedChannelMatchShare != probability SIMILAR_LINK != measured human judgment

N_A is not “not similar”

Insufficient evidence is kept separate from an actual model disagreement.

SIMILAR_LINK

Coverage + support

Can connect cluster components.

NON_SIMILAR_LINK

Coverage + weak support

Does not connect.

N_A

Coverage insufficient

No verdict is fabricated.

Clusters use only SIMILAR_LINK edges

Singletons remain valid outputs.

06 / components

Similarity graph

ABCDEcluster A/B/CD singletonE singleton

Connected component ≠ clique

A↔B and B↔C may connect one cluster even when A↔C was never requested. No missing pair is synthesized.

07 / no transitivity claim

A↔C remains absent

A↔C absentcluster ≠ clique

Topic29 cluster ≠ Topic28 proximity group

Similarity links come only from feature relations. Spatial neighbor topology is neither fused nor mutated.

TOPIC 28

Spatial closeness

Neighbor graph and proximity grouping.

TOPIC 29

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.

09 / runtime
Tests not run yet.

DATA FOR LAYOUT ENGINE

Canonical machine contract for final Topic29 grouping layer.

10 / machine
{
  "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"
}
VISITS / ...