COMPO · 19.02 · TONE / COLOR CONTRIBUTION

Calibrate appearance.
Keep meanings external.

19.02 превращает явно выбранные owner-qualified TONE и COLOR signals из 19.00 в bounded normalized contributions через явные weak/strong anchors. Модуль не вычисляет luminance, chroma, saturation, color distance или harmony сам и не объединяет TONE с COLOR в общий rank.

ModuleCompo 19.02
InputTONE / COLOR
RepresentationSCALAR only
Range[0,1]
Metricsnone
Next19.03

Contribution after signal registration

00 / contract
19.00 exact TONE or COLOR + SCALAR observation
+ exact evidence lineage
+ explicit weak / strong calibration anchors
→ normalizedToneColorContribution ∈ [0,1]

19.02 stops here.

NO raw color/tone measurement
NO color-space conversion
NO harmony judgement
NO TONE+COLOR aggregation
NO correlation weight
NO composite rank
NO MetricResult

Per-signal contribution only

01 / ownership
OWNS

19.02

Explicit calibration profile, exact evidence revalidation and bounded contribution descriptor for one TONE or COLOR scalar observation.

DOES NOT OWN

Foreign + downstream

Raw luminance/color measurement, color harmony, dominance, Topic18 hierarchy, 19.01 size, 19.03 remaining channels and 19.04 correlation-aware aggregation.

Two signal kinds, one strict adapter rule

02 / TONE + COLOR
KindAcceptedNot inferred here
TONEExact 19.00 SCALAR payload with owner-qualified semanticsluminance/darkness/contrast formula, perceptual desirability
COLORExact 19.00 SCALAR payload with owner-qualified semanticsRGB→Lab/LCH/HSV conversion, vector magnitude, harmony, salience model
No silent scalarization: VECTOR, CATEGORY, ORDINAL, BOOLEAN or OWNER_DEFINED payloads must be converted by their rightful upstream owner into an explicit SCALAR binding before 19.02 may compute a numeric contribution.

Calibration is explicit and binding-specific

03 / profile
ToneColorContributionCalibrationProfile {
  signalKind: TONE | COLOR,
  hierarchySignalBindingRef: exact binding,
  weakAnchorValue: finite scalar → 0,
  strongAnchorValue: finite scalar → 1,
  outOfRangePolicy:
    CLAMP_TO_UNIT_INTERVAL |
    N_A_NO_EXTRAPOLATION,
  calibrationContextRef,
  ...
}
strongAnchorValue may be greater OR smaller than weakAnchorValue.

numeric direction != universal visual-strength direction

Revalidate exact 19.00 evidence lineage

04 / evidence
EXACT

One value

Exact binding, subject, snapshot and payload identity resolve to the observed scalar.

CONSENSUS

Equal duplicates

Identical explicit values may resolve together without changing semantics.

CONFLICT

N_A

Different explicit values are preserved as conflict. No average, median or confidence winner.

Linear mapping, bounded by policy

05 / math
t = (value − weakAnchor) / (strongAnchor − weakAnchor)

inside [0,1] → contribution = t
outside + CLAMP → 0 or 1
outside + N_A_NO_EXTRAPOLATION → N_A
Descriptor semantics: 0 and 1 are valid local normalized channel values. They do not mean globally unimportant/important, bad/good, or reject/accept.

TONE and COLOR remain separate

06 / set
ToneColorContributionSet {
  toneColorContributionDescriptorRefs[],
  toneDescriptorRefs[],
  colorDescriptorRefs[],
  preservedDependencyRefs[],
  ...
}
NO sum
NO average
NO max
NO TONE→COLOR conversion
NO dependency weight
NO composite rank

N_A stays distinct from numeric zero

07 / status
Valid weak anchor0
Valid strong anchor1
Missing/conflicting evidenceN_A
Non-scalar bindingN_A
Wrong signal kindINVALID
Equal anchorsINVALID
Outside range + no extrapolationN_A

Topic 19 ownership chain remains clean

08 / owners
19.00Signal subjects, bindings, observations and dependency topology.
19.01Per-observation SIZE contribution.
19.02Per-observation TONE/COLOR contributions.
19.03ISOLATION / POSITION / SEMANTIC_PRIORITY contributions.
19.04Correlation-aware de-duplication, composite hierarchy rank, confidence and final Topic19 tests.
Topic18Declared subordination graph and competition/inversion remain separate.

No hidden color or hierarchy score

09 / firewalls
normalizedToneColorContribution != quality score
!= color-harmony score
!= dominance score
!= Topic18 hierarchy role
!= composite hierarchy rank
!= final-layout rank

TONE != implicit luminance formula
COLOR != implicit chroma/saturation/color-distance formula

19.02 owns_metrics = []
19.02 independent numeric votes = 0

CANON → LAB → DATA → IDEAS

10 / mandatory hooks
IDEAS_REFS[]Tone/color perception and calibration studies.
DATA_CAPTURE[]Bindings, evidence, anchors, contributions and dependencies.
DEFERRED_SEMANTIC_INPUTS[]19.03 and correlation-aware 19.04 aggregation.
HUMAN_FEEDBACK_HOOKS[]Adapter, anchor and evidence corrections.
CONFLICT_PRIORITY_ASSUMPTIONS[]No hidden TONE/COLOR priority.
LAB_HOOKS[]Color-space and dependency studies.

19.02 regression suite

11 / deterministic tests

Tests cover TONE/COLOR kind gating, scalar-only adapters, exact evidence lineage, ascending and descending calibration, clamp/no-extrapolation semantics, conflict preservation, kind separation, immutable attachment, zero metrics and 19.03/19.04 ownership firewalls.

Tests not run yet.

DATA FOR LAYOUT ENGINE

12 / machine contract
{
  "module": "Compo 19.02",
  "name": "tone_color_contribution",
  "version": "1.0-canonical",
  "canonical_main_title": "Tone/color contribution",
  "topic": "19_ВИЗУАЛЬНАЯ_ИЕРАРХИЯ_ПО_РАЗМЕРУ_ТОНУ_И_ЦВЕТУ",
  "scope": "EXPLICIT_TONE_AND_COLOR_SCALAR_SIGNAL_CALIBRATION_AND_PER_OBSERVATION_NORMALIZED_CONTRIBUTIONS_WITHOUT_RAW_COLOR_TONE_MEASUREMENT_HARMONY_CROSS_CHANNEL_AGGREGATION_CORRELATION_RANKING_OR_SCORING",
  "main_topic_contract": {
    "topic_title": "Визуальная иерархия по размеру, тону и цвету",
    "topic_goal": "Объединяет size, tone, color, isolation, position и semantic priority в многоканальную иерархию с защитой от double-counting коррелированных сигналов.",
    "expected_output": "HierarchySignal[], composite rank, confidence, dependencies",
    "planned_files": [
      "19.00 Hierarchy signal model",
      "19.01 Size contribution",
      "19.02 Tone/color contribution",
      "19.03 Isolation/position/semantic contribution",
      "19.04 Correlation-aware hierarchy and tests"
    ]
  },
  "ownership": {
    "owner": "Compo19.02",
    "owns": [
      "ToneColorContributionOutOfRangePolicy taxonomy",
      "ToneColorContributionCalibrationProfile",
      "ToneColorContributionSelectionPolicy",
      "ToneColorContributionEvidenceResolution adapter",
      "ToneColorContributionDescriptor",
      "ToneColorContributionSet",
      "ToneColorContributionAttachment",
      "explicit weak-anchor to strong-anchor linear calibration for one exact TONE or COLOR SCALAR binding",
      "per-observation bounded normalized TONE/COLOR contribution",
      "identity/status/provenance rules for Topic19 tone/color-contribution layer",
      "non-mutating correction request for calibration/profile/evidence lineage"
    ],
    "does_not_own": [
      "HierarchySignalSubject / HierarchySignalBinding / HierarchySignalObservation / dependency identity — Compo19.00",
      "raw tone/luminance measurement semantics — foreign measurement owner",
      "raw color measurement / color-space conversion / color distance / salience / harmony semantics — foreign measurement owner",
      "visual mass — Compo4",
      "dominance / focal ranking — Compo13",
      "generic hierarchy / subordination — Topic18",
      "size contribution — Compo19.01",
      "isolation/position/semantic contribution — Compo19.03",
      "correlation estimation / anti-double-counting / composite rank / hierarchy confidence — Compo19.04",
      "MetricResult scoring",
      "global beautyScore",
      "final-layout ranking",
      "foreign geometry/style/color/semantic mutation"
    ]
  },
  "consumes": [
    "valid Compo19.00 HierarchySignalSystemSeed lineage",
    "valid Compo19.00 HierarchySignalObservation with signalKind TONE or COLOR",
    "exact Compo19.00 HierarchySignalBinding with signalKind TONE or COLOR and representationKind SCALAR",
    "exact Compo19.00 HierarchySignalEvidence records named by the observation evidenceRefs",
    "explicit ToneColorContributionCalibrationProfile",
    "explicit ToneColorContributionSelectionPolicy",
    "optional explicit Compo19.00 dependency refs preserved for downstream anti-double-counting"
  ],
  "provides": [
    "ToneColorContributionCalibrationProfile",
    "ToneColorContributionEvidenceResolution[]",
    "ToneColorContributionDescriptor[]",
    "ToneColorContributionSet",
    "ToneColorContributionAttachment"
  ],
  "owns_metrics": [],
  "metric_ownership_note": "19.02 produces descriptive bounded per-observation contributions only. It owns no MetricResult, no independent numeric vote, no composite hierarchy rank and no hierarchy confidence.",
  "supported_signal_kinds": {
    "TONE": "Accepted only through an exact 19.00 SCALAR binding. The scalar may represent luminance, darkness, local tonal salience or another owner-defined tone quantity; 19.02 does not define that semantics.",
    "COLOR": "Accepted only through an exact 19.00 SCALAR binding. The scalar may represent chroma, saturation, owner-defined salience or color-distance-like quantity only when the foreign owner declares it; 19.02 does not derive it from RGB/Lab/LCH/vector/category payloads."
  },
  "calibration_profile_schema": {
    "toneColorContributionCalibrationProfileRef": "stable identity",
    "scopeRef": "Topic19 scope",
    "signalKind": "TONE|COLOR; must exactly match the binding",
    "hierarchySignalBindingRef": "exact Compo19.00 TONE/COLOR + SCALAR binding",
    "weakAnchorValue": "finite scalar mapped to normalized contribution 0",
    "strongAnchorValue": "finite scalar mapped to normalized contribution 1; must differ from weakAnchorValue",
    "outOfRangePolicy": "CLAMP_TO_UNIT_INTERVAL|N_A_NO_EXTRAPOLATION",
    "calibrationContextRef": "explicit style/brief/measurement calibration context",
    "calibrationSourceRef": "explicit source",
    "calibrationSourceOwnerRef": "owner",
    "provenance": "canonical provenance",
    "status": "OK|INVALID",
    "mutationAllowed": false,
    "firewall": "Anchor direction is explicit. Larger luminance/chroma/saturation or any other scalar is not universally a stronger hierarchy signal."
  },
  "selection_policy_schema": {
    "selectionMode": "EXPLICIT_TONE_COLOR_OBSERVATION_REFS_ONLY",
    "duplicatePolicy": "IDENTITY_DEDUPLICATE",
    "missingPolicy": "N_A_NO_GUESS",
    "maxContributions": "1..16384",
    "overflowPolicy": "N_A_NO_TRUNCATION",
    "crossBindingAggregationAllowed": false,
    "crossKindAggregationAllowed": false,
    "fullCartesianProductAllowed": false,
    "autoMissingToneColorSignalSynthesis": false
  },
  "evidence_resolution_schema": {
    "toneColorContributionEvidenceResolutionRef": "stable identity",
    "hierarchySignalObservationRef": "exact 19.00 observation",
    "hierarchySignalBindingRef": "exact TONE/COLOR + SCALAR binding",
    "signalKind": "exact TONE or COLOR",
    "evidenceRefs": "must exactly equal observation.evidenceRefs after canonical dedup/order",
    "resolvedScalarValue": "finite scalar when OK; null under N_A/INVALID",
    "observationPayloadRef": "must equal stable payload identity for the resolved scalar",
    "status": "OK|N_A|INVALID",
    "reasonCode": "EXACT_SINGLE_VALUE|CONSENSUS_EQUAL|NON_SCALAR_BINDING|MISSING_EVIDENCE|CONFLICT|LINEAGE_MISMATCH|INVALID_INPUT",
    "mutationAllowed": false,
    "firewall": "Conflicting values are not averaged. VECTOR/CATEGORY/ORDINAL/BOOLEAN/OWNER_DEFINED color or tone payloads require a foreign scalar adapter before 19.02 can compute a numeric contribution."
  },
  "contribution_descriptor_schema": {
    "toneColorContributionDescriptorRef": "stable identity",
    "hierarchySignalObservationRef": "exact 19.00 TONE or COLOR observation",
    "hierarchySignalSubjectRef": "copied exact subject ref",
    "hierarchySignalBindingRef": "exact binding",
    "signalKind": "TONE|COLOR",
    "toneColorContributionCalibrationProfileRef": "exact calibration",
    "toneColorContributionEvidenceResolutionRef": "exact evidence resolution",
    "rawSignalValue": "resolved finite scalar",
    "weakAnchorValue": "profile anchor",
    "strongAnchorValue": "profile anchor",
    "normalizedToneColorContribution": "finite [0,1] when OK; null when N_A/INVALID",
    "wasClamped": "boolean when OK; false otherwise",
    "status": "OK|N_A|INVALID",
    "reasonCode": "WITHIN_CALIBRATION|CLAMPED_WEAK_SIDE|CLAMPED_STRONG_SIDE|OUTSIDE_CALIBRATION|LINEAGE_MISMATCH|MISSING_OBSERVED|INVALID_INPUT",
    "confidence": null,
    "rank": null,
    "score": null,
    "mutationAllowed": false,
    "firewall": "Contribution is a local normalized channel descriptor. It is not a desirability score, color-harmony score, dominance score, Topic18 role, composite rank or final-layout rank."
  },
  "contribution_set_schema": {
    "toneColorContributionSetRef": "stable identity",
    "scopeRef": "scope",
    "snapshotRef": "snapshot",
    "hierarchySignalSystemSeedRef": "exact 19.00 root seed",
    "toneColorContributionSelectionPolicyRef": "explicit policy",
    "toneColorContributionDescriptorRefs": "canonical unique refs",
    "toneDescriptorRefs": "subset where signalKind=TONE",
    "colorDescriptorRefs": "subset where signalKind=COLOR",
    "preservedDependencyRefs": "explicit 19.00 dependencies touching selected observations; copied by identity only",
    "status": "OK|N_A|INVALID",
    "reasonCode": "OK|MISSING_SELECTION|CONTRIBUTION_OVERFLOW|INVALID_INPUT",
    "mutationAllowed": false,
    "firewall": "TONE and COLOR remain separate descriptors. 19.02 does not sum, average, max, rank, correlate or decorrelate them."
  },
  "attachment_schema": {
    "toneColorContributionAttachmentRef": "stable identity",
    "hierarchySignalSystemSeedRef": "exact immutable 19.00 seed",
    "toneColorContributionSetRef": "derived set",
    "mutationAllowed": false,
    "firewall": "Attachment does not rewrite HierarchySignalSystemSeed or 19.00 observations."
  },
  "status_policy": {
    "nonToneColorObservation": "INVALID",
    "nonScalarToneColorBinding": "N_A; v1 numeric contribution requires SCALAR",
    "missingExactEvidence": "N_A",
    "conflictingEvidence": "N_A",
    "bindingMismatch": "N_A",
    "payloadIdentityMismatch": "N_A",
    "profileSignalKindMismatch": "N_A",
    "equalCalibrationAnchors": "INVALID",
    "outsideRangeClampPolicy": "OK + clamped contribution",
    "outsideRangeNoExtrapolation": "N_A",
    "zeroContribution": "valid numeric 0 when calibration resolves there",
    "oneContribution": "valid numeric 1 when calibration resolves there",
    "N_A_not_zero": true
  },
  "identity_policy": {
    "toneColorContributionCalibrationProfileRef": "hash(scope, signal kind, exact binding, weak/strong anchors, out-of-range policy, calibration context, source/owner, provenance, status)",
    "toneColorContributionSelectionPolicyRef": "hash(selection/dedup/missing/max/overflow/no-cross-binding/no-cross-kind/no-Cartesian/source/owner/provenance/status)",
    "toneColorContributionEvidenceResolutionRef": "hash(observation, binding, signal kind, canonical exact evidence refs, resolved scalar or null, payload identity, status, reason)",
    "toneColorContributionDescriptorRef": "hash(observation, subject, binding, kind, calibration, resolution, raw value, normalized contribution, clamped flag, status, reason)",
    "toneColorContributionSetRef": "hash(scope, snapshot, root seed, selection policy, canonical contribution refs, tone/color subsets, preserved dependency refs, status, reason)",
    "toneColorContributionAttachmentRef": "hash(root seed, contribution set, immutable attachment semantics)"
  },
  "critical_firewalls": [
    "19.02 owns no MetricResult and no independent numeric vote",
    "normalizedToneColorContribution != quality score",
    "normalizedToneColorContribution != color-harmony score",
    "normalizedToneColorContribution != dominance score",
    "normalizedToneColorContribution != Topic18 hierarchy role",
    "raw TONE/COLOR scalar semantics remain foreign-owned",
    "COLOR vector/category payload is not silently converted to scalar",
    "no RGB→Lab/LCH/HSV conversion in 19.02",
    "no automatic luminance/chroma/saturation/color-distance formula in 19.02",
    "weak/strong anchors are explicit; numerically larger value is not universally stronger",
    "0 contribution is a valid numeric value and 0 != N_A",
    "missing TONE/COLOR observation != zero contribution",
    "TONE and COLOR are not automatically merged",
    "multiple tone channels are not summed or averaged",
    "multiple color channels are not summed or averaged",
    "dependency declarations are preserved but not converted into correlation weights",
    "no correlation estimation in 19.02",
    "no anti-double-counting weights in 19.02",
    "no composite rank in 19.02",
    "no hierarchy confidence in 19.02",
    "no final-layout ranking",
    "HierarchySignalSystemSeed remains immutable",
    "attachment != root mutation",
    "descriptor != score",
    "local != global",
    "N_A != 0",
    "module execution order != rule priority"
  ],
  "IDEAS_REFS": [
    "IDEA-01 study style-specific tone contribution calibration",
    "IDEA-02 study style-specific color salience calibration without canonizing one color model",
    "IDEA-03 compare owner-supplied luminance/chroma/saturation signals against human hierarchy judgements",
    "IDEA-04 study when tone and color are strongly dependent and must be de-duplicated in 19.04",
    "IDEA-05 collect cases where low numeric luminance is the stronger visual signal",
    "IDEA-06 collect cases where chroma is irrelevant to hierarchy",
    "IDEA-07 preserve color-space and measurement-owner lineage for later experiments"
  ],
  "DATA_CAPTURE": [
    "scopeRef",
    "snapshotRef",
    "hierarchySignalSystemSeedRef",
    "hierarchySignalObservationRef",
    "hierarchySignalSubjectRef",
    "hierarchySignalBindingRef",
    "signalKind",
    "toneColorContributionCalibrationProfileRef",
    "toneColorContributionEvidenceResolutionRef",
    "rawSignalValue",
    "weakAnchorValue",
    "strongAnchorValue",
    "normalizedToneColorContribution",
    "wasClamped",
    "toneColorContributionDescriptorRef",
    "toneColorContributionSetRef",
    "toneDescriptorRefs[]",
    "colorDescriptorRefs[]",
    "preservedDependencyRefs[]",
    "status",
    "reasonCode"
  ],
  "DEFERRED_SEMANTIC_INPUTS": [
    "19.03 isolation/position/semantic contribution",
    "19.04 numeric correlation/dependency strength",
    "19.04 anti-double-counting weights",
    "19.04 composite rank",
    "19.04 hierarchy confidence",
    "global composition quality and final-layout ranking"
  ],
  "HUMAN_FEEDBACK_HOOKS": [
    "correct tone/color signal binding",
    "correct signal kind",
    "correct scalar adapter owner",
    "correct weak/strong anchors",
    "correct calibration context",
    "correct evidence/value/payload identity",
    "mark vector/category signal as needing upstream scalar adapter"
  ],
  "CONFLICT_PRIORITY_ASSUMPTIONS": [
    "TONE and COLOR have no implicit priority over each other",
    "binding serialization order has no priority",
    "evidence confidence cannot resolve conflicting scalar values",
    "calibration anchor direction is local semantics, not global importance",
    "module execution order does not imply hierarchy priority"
  ],
  "LAB_HOOKS": [
    "tone contribution perception study",
    "color salience contribution perception study",
    "color-space adapter comparison study",
    "tone-color dependency study for 19.04",
    "cross-style calibration robustness study",
    "human correction reason taxonomy"
  ],
  "next_module": "Compo 19.03 — Isolation/position/semantic contribution",
  "hard_stop": "Do not implement 19.03 or 19.04 in this file."
}
VISITS / ...