Contribution after signal registration
+ 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
19.02
Explicit calibration profile, exact evidence revalidation and bounded contribution descriptor for one TONE or COLOR scalar observation.
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
| Kind | Accepted | Not inferred here |
|---|---|---|
| TONE | Exact 19.00 SCALAR payload with owner-qualified semantics | luminance/darkness/contrast formula, perceptual desirability |
| COLOR | Exact 19.00 SCALAR payload with owner-qualified semantics | RGB→Lab/LCH/HSV conversion, vector magnitude, harmony, salience model |
Calibration is explicit and binding-specific
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,
...
}
numeric direction != universal visual-strength direction
Revalidate exact 19.00 evidence lineage
One value
Exact binding, subject, snapshot and payload identity resolve to the observed scalar.
Equal duplicates
Identical explicit values may resolve together without changing semantics.
N_A
Different explicit values are preserved as conflict. No average, median or confidence winner.
Linear mapping, bounded by policy
inside [0,1] → contribution = t
outside + CLAMP → 0 or 1
outside + N_A_NO_EXTRAPOLATION → N_A
TONE and COLOR remain separate
ToneColorContributionSet {
toneColorContributionDescriptorRefs[],
toneDescriptorRefs[],
colorDescriptorRefs[],
preservedDependencyRefs[],
...
}
NO average
NO max
NO TONE→COLOR conversion
NO dependency weight
NO composite rank
N_A stays distinct from numeric zero
| Valid weak anchor | 0 |
| Valid strong anchor | 1 |
| Missing/conflicting evidence | N_A |
| Non-scalar binding | N_A |
| Wrong signal kind | INVALID |
| Equal anchors | INVALID |
| Outside range + no extrapolation | N_A |
Topic 19 ownership chain remains clean
| 19.00 | Signal subjects, bindings, observations and dependency topology. |
| 19.01 | Per-observation SIZE contribution. |
| 19.02 | Per-observation TONE/COLOR contributions. |
| 19.03 | ISOLATION / POSITION / SEMANTIC_PRIORITY contributions. |
| 19.04 | Correlation-aware de-duplication, composite hierarchy rank, confidence and final Topic19 tests. |
| Topic18 | Declared subordination graph and competition/inversion remain separate. |
No hidden color or hierarchy 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
19.02 regression suite
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.
DATA FOR LAYOUT ENGINE
{
"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."
}