COMPO · 29.02 · COLOR / TONE SIMILARITY

Color is not tone.
Keep both signals.

29.02 создаёт channel-local `SimilarityRelation` для COLOR и TONE. COLOR использует explicit owner-normalized comparator evidence с фиксированным color-space lineage; TONE использует абсолютную разницу normalized tone values только внутри одной tone scale. Никакого автоматического смешивания двух сигналов нет.

Module29.02
Progress3/5 local
ChannelsCOLOR · TONE
Relationssymmetric
Metricsnone
Next29.03 only

29.02 adds two more independent distance channels

29.00 remains immutable. SHAPE/SIZE from 29.01 are not read, averaged or rewritten by this module.

00 / contract
immutable 29.00 SimilarityFeatureSchema + explicit unordered pair request + exact same channel / same feature slot + COLOR comparator evidence OR normalized TONE scalar evidence → channel-local feature distance → symmetric SimilarityRelation NO color-space inference NO tone normalization inference NO COLOR+TONE averaging NO threshold decision NO clustering NO scoring

Color distance is comparator-owned

29.02 never assumes RGB Euclidean, DeltaE or any other metric automatically. Comparator identity, color space and normalization contract are explicit evidence.

01 / COLOR
COLOR feature A

payload lineage from 29.00

+
COLOR feature B

same slot

→
color comparator owner

colorSpaceRef + normalized distance

→
29.02

0 ≤ d ≤ 1

Color-space lineage stays attached

Comparator evidence colorSpaceRefcomparatorRefnormalizationContractRef d∈[0,1]

Tone uses normalized scalar difference

Once a foreign owner explicitly provides tone values in [0,1] under one `toneScaleRef`, distance is simply the absolute difference.

02 / TONE
toneA, toneB ∈ [0,1] same toneScaleRef required toneDistance = | toneA - toneB | 0.30 ↔ 0.30 → 0 0.30 ↔ 0.80 → 0.50 0.00 ↔ 1.00 → 1.00 distance range = [0,1] no tone-scale conversion no perceptual-law claim

Normalized tone axis

0.300.80distance = 0.50

Color and tone are independent signals

Two objects may share tone while differing strongly in hue/chroma, or share hue while differing in lightness. 29.02 preserves both channels.

03 / channel firewall

Different color · similar tone

COLOR can differ while TONE stays close

Similar hue · different tone

TONE can differ without changing channel identity
No automatic averagingA low COLOR distance and a high TONE distance stay two descriptors. Multi-channel weighting belongs to 29.04.

Tone-scale mismatch yields N_A

Normalized values are comparable only inside the same explicit scale contract. 0.5 on one scale is not silently treated as the same quantity as 0.5 on another.

04 / scale lineage
OK

toneScale:v1 ↔ toneScale:v1

Absolute difference is defined.

N_A

toneScale:v1 ↔ toneScale:v2

No automatic conversion or alignment.

`SimilarityRelation` remains channel-local

Distance lineage is stored; score, threshold decision, clusters and cross-channel aggregate stay empty.

05 / relation shell

COLOR or TONE relation

SimilarityRelation channel = COLOR | TONE distanceValue = descriptor similarityScore = null thresholdDecision = null clusterRefs = []

Zero distance is not missing evidence

Identical comparator color or equal normalized tone can produce 0. Missing evidence/scale lineage stays N_A.

OK

distance = 0

Valid equality descriptor.

N_A

evidence missing

No numeric substitute.

INVALID

tone outside [0,1]

Malformed normalized evidence.

Feature similarity remains separate from proximity

COLOR/TONE relations can link far-apart repeated objects. They never become Topic28 neighbor edges.

07 / cross-topic

Same palette can repeat across the scene

COLOR similarity relationspatial distance does not invalidate feature similarity

Four channels are now covered

29.01 owns SHAPE/SIZE; 29.02 owns COLOR/TONE. Orientation and texture/style arrive next, while all multi-channel grouping stays at 29.04.

08 / staged ownership
29.00

schema

→
29.01

SHAPE / SIZE

→
29.02

COLOR / TONE

→
29.03

ORIENTATION / TEXTURE_STYLE

→
29.04

multi-channel groups

29.02 regression suite

Tests cover explicit pair identity, owner-normalized color evidence, normalized tone values, tone-scale compatibility, same-slot lineage, zero/N_A separation, immutable 29.00 schema and strict absence of SHAPE/SIZE computation, clustering and scoring.

09 / runtime
Tests not run yet.

DATA FOR LAYOUT ENGINE

Canonical machine contract for Topic29 color/tone layer.

10 / machine
{
  "module": "Compo 29.02",
  "name": "color_tone_similarity",
  "version": "1.0-canonical",
  "canonical_main_title": "Color/tone similarity",
  "topic": "29_СХОДСТВО_И_ПОВТОРЯЕМОСТЬ",
  "scope": "EXPLICIT_UNORDERED_PAIR_COMPARISONS_FOR_COLOR_AND_TONE_CHANNELS_OVER_IMMUTABLE_29_00_FEATURE_SCHEMA_WITH_CHANNEL_LOCAL_DISTANCES_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.02",
    "owns": [
      "SimilarityColorTonePairRequest",
      "SimilarityColorDistanceEvidence",
      "SimilarityToneValueEvidence",
      "SimilarityFeatureDistanceDescriptor for COLOR/TONE",
      "SimilarityRelation for COLOR/TONE",
      "SimilarityColorToneRelationSet",
      "SimilarityColorToneAttachment",
      "canonical unordered subject-pair identity",
      "exact same-channel feature binding",
      "exact same-slot comparison rule",
      "owner-normalized color-distance validation",
      "normalized tone absolute-difference derivation",
      "tone-scale compatibility validation",
      "symmetric relation materialization",
      "zero-distance semantics",
      "bounded explicit pair resolution",
      "non-mutating correction request"
    ],
    "does_not_own": [
      "feature extraction",
      "color vector generation",
      "color comparator implementation internals",
      "automatic color-space selection",
      "automatic color metric selection",
      "automatic tone normalization",
      "shape/size similarity — Compo29.01",
      "orientation/texture/style similarity — Compo29.03",
      "multi-channel aggregation — Compo29.04",
      "similarity thresholds — Compo29.04",
      "similarity clusters — Compo29.04",
      "cross-channel weighting — Compo29.04",
      "automatic pair Cartesian product",
      "proximity grouping — Topic28",
      "attention flow — Topic27",
      "universal similarity quality",
      "universal beautyScore"
    ]
  },
  "supported_channels": [
    "COLOR",
    "TONE"
  ],
  "distance_kinds": [
    "OWNER_NORMALIZED_COLOR_DISTANCE",
    "ABSOLUTE_NORMALIZED_TONE_DIFFERENCE"
  ],
  "distance_semantics": {
    "color": {
      "source": "explicit owner-qualified comparator evidence",
      "range": "[0,1]",
      "zero": "identical under the named color comparator evidence",
      "one": "maximum mismatch only under the comparator owner's normalization contract",
      "color_space_inference": "NONE",
      "universal_metric_claim": false
    },
    "tone": {
      "source": "explicit normalized scalar tone-value evidence bound to TONE featureRefs",
      "formula": "abs(toneA - toneB)",
      "input_range": "[0,1]",
      "distance_range": "[0,1]",
      "zero": "equal normalized tone values in the same explicit toneScaleRef",
      "tone_scale_conversion": "NONE",
      "perceptual_law_claim": false
    },
    "relation": {
      "pair_identity": "unordered canonical subject pair A↔B",
      "symmetric": true,
      "same_channel_required": true,
      "same_feature_slot_required": true,
      "similarityScore": null,
      "thresholdDecision": null,
      "clusterMembership": "DEFERRED_TO_29_04"
    }
  },
  "policy": {
    "max_pair_requests": [
      1,
      131072
    ],
    "max_color_distance_evidence": [
      0,
      131072
    ],
    "max_tone_value_evidence": [
      0,
      262144
    ],
    "overflow": "N_A_NO_TRUNCATION",
    "duplicate_request_ref": "INVALID",
    "duplicate_channel_pair_slot_request": "INVALID",
    "duplicate_evidence_ref": "INVALID",
    "auto_pair_cartesian": false,
    "auto_color_space_selection": false,
    "auto_color_metric_selection": false,
    "auto_color_distance_computation": false,
    "auto_tone_normalization": false,
    "auto_tone_scale_conversion": false,
    "auto_cross_slot_comparison": false,
    "auto_cross_channel_aggregation": false,
    "auto_thresholding": false,
    "auto_clustering": false,
    "auto_scoring": false
  },
  "status_semantics": {
    "OK": "29.00 feature lineage resolves and requested COLOR/TONE comparison produces a valid symmetric channel-local distance",
    "N_A": "feature/evidence is missing, subject/feature/slot lineage mismatches, tone scales differ, or bounds overflow",
    "INVALID": "malformed request/evidence, duplicate identity, self-pair, tone value outside [0,1], unsupported channel, or invalid upstream schema",
    "zero": "distance 0 is a valid equality observation under the channel contract and is never substituted for N_A"
  },
  "firewalls": [
    "color distance != color similarity score",
    "tone difference != tone similarity score",
    "distance zero != N_A",
    "color distance one != universal maximum visual difference",
    "tone distance one != universal maximum perceptual tone difference",
    "same color slot != same color value",
    "same tone slot != same tone value",
    "same feature presence != similarity",
    "feature distance != threshold decision",
    "SimilarityRelation != similarity cluster",
    "COLOR relation != TONE relation",
    "color and tone relations cannot be averaged automatically",
    "pair request != Cartesian pair generation",
    "same-slot comparison != cross-slot inference",
    "tone-scale mismatch != automatic conversion",
    "missing tone != tone zero",
    "Topic29 similarity != Topic28 proximity",
    "Topic29 similarity relation != Topic28 neighbor relation",
    "Topic29 similarity != Topic27 attention flow",
    "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": "3/5 local",
  "next_module": "Compo 29.03 — Orientation/texture/style similarity",
  "topic30_started": false,
  "publication": "NOT_VERIFIED"
}
VISITS / ...