Контекст меняет массу, не качество
4.02 получает base/intrinsic mass и owner-qualified contextual evidence, после чего выдаёт один cross-object contextual mass magnitude.
Contextualization через contrast / isolation / position / overlap.
Mass magnitude + evidence stage + owner-qualified signed context effects.
CROSS-OBJECT CONTEXTUAL MASS ONLY.
ContextEvidenceRef
4.02 не вычисляет raw contrast или расстояния. Он требует уже нормализованный signed effect от authoritative owner/adapter.
ContextEvidenceRef
{
evidenceRef,
owner,
channel:
"CONTRAST" |
"ISOLATION" |
"POSITION" |
"OVERLAP",
effect: [-1,1],
confidence: [0,1],
derivedFrom[],
status,
provenance
}Meaning of effect
-1 strong mass suppression 0 neutral +1 strong mass reinforcement effect is NOT: beauty quality preference hierarchy rank
Какой mass приходит на вход
Point/line могут приходить через adapters 4.00; shape — через 4.01. Для честного cross-object comparison нужна calibration-domain metadata.
ContextMassInput {
baseMassValue,
baseMassRef,
inputStage:
"INTRINSIC" |
"LOCAL_CONTEXTUALIZED",
alreadyAppliedContextRefs[],
alreadyAppliedChannels?,
confidence,
calibrationDomainRef,
provenance
}
Четыре context channels
Channel names описывают тип salience evidence, но не навязывают универсальный знак.
| Channel | Что приходит | Что 4.02 НЕ делает |
|---|---|---|
CONTRAST | signed visibility/salience effect | не считает luminance/ΔE/foreground-background contrast |
ISOLATION | signed effect от spacing/crowding context | не измеряет nearest-neighbor distances |
POSITION | signed effect от location/context model | не объявляет center/edge «хорошими» или «плохими» |
OVERLAP | signed visibility/occlusion effect | не вычисляет intersection geometry |
Почему log-space
Масса должна оставаться неотрицательной. Log-space даёт симметричную нейтральную точку и ограничивает экстремальные modifiers.
e = 0
multiplier = 1 · neutral.
e > 0
mass reinforcement.
e < 0
mass suppression, но multiplier остаётся positive.
Несколько evidence одного channel
Сначала дедупликация, затем confidence-weighted effect. Никакого суммирования одинакового contrast evidence трижды.
Главная защита 4.02
Если upstream уже применил контекст, 4.02 использует lineage, а не угадывает.
Можно contextualize
inputStage=INTRINSIC alreadyApplied=[] ↓ enabled evidence CONTRAST ISOLATION POSITION OVERLAP ↓ apply once
Нужно suppress
upstream contextual metric derivedFrom=[ contrast:x, isolation:y ] 4.02 receives same refs → SUPPRESS new overlap:z → APPLY
Policy и calibration
Strength/caps — параметры модели, не законы композиции. Они обязаны иметь provenance.
MassContextPolicy {
enabledChannels[],
channelStrength: {
CONTRAST,
ISOLATION,
POSITION,
OVERLAP
},
channelLogCaps{},
totalLogCap,
missingEvidencePolicy:
"ALLOW_PARTIAL" |
"REQUIRE_ENABLED" |
"DIAGNOSTIC_ONLY_IF_MISSING",
calibrationProfileRef?,
provenance
}
N/A и partial
Отсутствие contrast evidence не равно отрицательному contrast.
| Policy | Missing enabled channel |
|---|---|
ALLOW_PARTIAL | применить доступные channels; confidence/coverage снизить |
REQUIRE_ENABLED | contextual mass = N/A до появления всех enabled channels |
DIAGNOSTIC_ONLY_IF_MISSING | вернуть channel diagnostics, но не публиковать canonical contextualMass |
Confidence
Мagnitude и evidence quality разделены.
CrossObjectContextMassResult
После 4.02 descriptor получает stage `CROSS_OBJECT_CONTEXTUALIZED`.
CrossObjectContextMassResult {
objectRef,
baseMassRef,
baseMassValue,
inputStage,
outputStage:
"CROSS_OBJECT_CONTEXTUALIZED",
channelResults[],
contextMultiplier,
contextualMass,
appliedEvidenceRefs[],
suppressedEvidenceRefs[],
missingChannels[],
channelCoverage,
confidence,
status,
calibrationDomainRef,
provenance
}
Correction routing
4.02 не двигает объекты и не меняет цвет.
Contrast
→ color/render owner.
Isolation
→ spacing/proximity owner.
Position
→ layout/canvas owner.
Overlap
→ occlusion/visibility owner.
Visual Lab
Одинаковая intrinsic mass может получить разную contextual mass, но это не ranking качества.
Reference contextual-mass tests
Проверяем log model, dedupe, anti-double-context, missing policy, confidence и no-global leakage.
DATA FOR LAYOUT ENGINE
Machine-readable contract 4.02.
{
"module": "Compo 4.02",
"name": "contextual_weight_contrast_isolation_position_overlap",
"version": "1.0-canonical",
"scope": "CROSS_OBJECT_CONTEXTUAL_VISUAL_MASS_FROM_OWNER_QUALIFIED_CONTEXT_EVIDENCE",
"consumes": [
"Compo4.00.VisualMassDescriptor / MassEvidenceStage / anti-double-context policy",
"Compo4.01.visualMass.geometry.intrinsicCoverageMassShortN2? as intrinsic shape base evidence",
"Compo1.01.Point.visualWeightBase or Point.visualWeightContextual? via Compo4.00 adapter",
"Compo2.06.Line.baseWeight or Line.contextualWeight? via Compo4.00 adapter",
"ContextEvidenceRef[CONTRAST] from authoritative color/render owner",
"ContextEvidenceRef[ISOLATION] from authoritative spacing/proximity owner",
"ContextEvidenceRef[POSITION] from authoritative canvas/layout owner",
"ContextEvidenceRef[OVERLAP] from authoritative occlusion/visibility owner",
"MassContextPolicy",
"StylePreset.massContextCalibration?"
],
"provides": [
"ContextEvidenceRef",
"MassContextPolicy",
"ContextChannelResult[]",
"CrossObjectContextMassResult",
"MassEvidenceRef[visualMass.context.contextualMass]",
"visualMass.context.contextMultiplier",
"visualMass.context.contextualMass",
"visualMass.context.confidence",
"visualMass.context.appliedEvidenceRefs[]",
"visualMass.context.suppressedEvidenceRefs[]",
"ContextMassCorrectionRequest[]"
],
"owns_metrics": [
"visualMass.context.contrastMultiplier",
"visualMass.context.isolationMultiplier",
"visualMass.context.positionMultiplier",
"visualMass.context.overlapMultiplier",
"visualMass.context.contextMultiplier",
"visualMass.context.contextualMass",
"visualMass.context.confidence"
],
"descriptors_only": [
"visualMass.context.appliedEvidenceRefs[]",
"visualMass.context.suppressedEvidenceRefs[]",
"visualMass.context.missingChannels[]",
"visualMass.context.activeChannels[]",
"visualMass.context.channelConfidence[]",
"visualMass.context.status",
"visualMass.context.inputStage",
"visualMass.context.outputStage"
],
"context_channels": [
"CONTRAST",
"ISOLATION",
"POSITION",
"OVERLAP"
],
"context_evidence_schema": {
"evidenceRef": "string",
"owner": "module id / authoritative adapter",
"channel": "CONTRAST|ISOLATION|POSITION|OVERLAP",
"effect": "normalized signed contextual salience effect in [-1,1]",
"confidence": "0..1",
"derivedFrom": "refs[] including raw source evidence",
"status": "OK|N_A|PARTIAL|INVALID",
"provenance": "DERIVED|EMPIRICAL|INITIAL_HEURISTIC|STYLE_PRESET|DEFERRED"
},
"context_policy_schema": {
"enabledChannels": "subset of CONTRAST|ISOLATION|POSITION|OVERLAP",
"channelStrength": {
"CONTRAST": "positive finite",
"ISOLATION": "positive finite",
"POSITION": "positive finite",
"OVERLAP": "positive finite"
},
"channelLogCaps": "map channel->positive finite cap on |log multiplier|",
"totalLogCap": "positive finite cap on |Σ log multipliers|",
"missingEvidencePolicy": "ALLOW_PARTIAL|REQUIRE_ENABLED|DIAGNOSTIC_ONLY_IF_MISSING",
"calibrationProfileRef": "optional",
"provenance": "STYLE_PRESET|EMPIRICAL|INITIAL_HEURISTIC"
},
"mass_input_contract": {
"baseMassValue": "positive or zero finite intrinsic/base mass on an explicitly declared calibration domain",
"baseMassRef": "owner-qualified metric ref",
"inputStage": "INTRINSIC|LOCAL_CONTEXTUALIZED",
"alreadyAppliedContextRefs": "refs[]",
"alreadyAppliedChannels": "optional channel labels when lineage is known",
"confidence": "0..1",
"calibrationDomainRef": "required for cross-object comparability",
"provenance": "object"
},
"context_math": {
"per_channel": "logMultiplier_c = clamp(strength_c * effect_c, -logCap_c, +logCap_c)",
"channelMultiplier": "exp(logMultiplier_c)",
"combine": "totalLog = clamp(sum(logMultiplier_c), -totalLogCap, +totalLogCap)",
"contextMultiplier": "exp(totalLog)",
"contextualMass": "baseMassValue * contextMultiplier",
"neutral_effect": "effect=0 => multiplier=1",
"reason_for_log_space": "positive multiplicative mass, symmetric reinforcement/suppression around neutral in log domain"
},
"evidence_aggregation": {
"same_channel_multiple_refs": "confidence-weighted mean signed effect after exact evidenceRef dedupe",
"N_A": "excluded, never zero-filled",
"invalid_effect_or_confidence": "diagnostic/suppressed",
"already_applied_upstream": "suppressed before channel aggregation",
"shared_derivedFrom_same_channel": "deduplicate when direct lineage overlap proves same underlying context signal",
"cross_channel_shared_lineage": "diagnostic flag; do not suppress automatically unless adapter declares channels non-independent"
},
"anti_double_context_policy": {
"input_INTRINSIC": "all new enabled context evidence may be considered once",
"input_LOCAL_CONTEXTUALIZED": "suppress evidenceRef or declared underlying refs already present in upstream lineage",
"unknown_upstream_context_lineage": "status=PARTIAL_OR_DIAGNOSTIC according policy; do not blindly reapply same named channels",
"output_stage": "CROSS_OBJECT_CONTEXTUALIZED",
"downstream_rule": "4.03 consumes contextualMass as final Topic4 context magnitude and must not contextualize it again"
},
"channel_semantics": {
"CONTRAST": "signed salience effect supplied by contrast/color/render owner; 4.02 does not compute luminance contrast",
"ISOLATION": "signed salience effect supplied by spacing/proximity owner; isolated may increase salience, crowding may decrease or redistribute it depending calibration",
"POSITION": "signed salience effect supplied by canvas/layout context owner; center/edge/corner are not universal quality rules",
"OVERLAP": "signed visibility/salience effect supplied by occlusion owner; occlusion can reduce visible mass, deliberate overlap can have other calibrated effects"
},
"hard_constraints": [
"raw contrast/luminance is not measured or owned here",
"raw spacing/isolation geometry is not measured or owned here",
"raw position/canvas relation is not measured or owned here",
"raw overlap/occlusion geometry is not measured or owned here",
"context evidence must be owner-qualified and carry provenance/confidence",
"already-applied upstream context evidence must not be applied twice",
"missing upstream context lineage must not be guessed",
"effect is signed salience influence, not aesthetic quality",
"contextMultiplier must remain positive finite",
"baseMassValue is never clamped to [0,1]",
"contextualMass is a mass magnitude descriptor, not a score",
"higher contextualMass is not universally better",
"negative space remains Topic5",
"mass relations remain Compo4.03",
"target-aware mass fit/scoring remains Compo4.04",
"global balance/hierarchy/eye-flow remain future global owners",
"N/A != 0",
"no beautyScore"
],
"initial_heuristics": {
"default_channel_strength": {
"value": {
"CONTRAST": 0.35,
"ISOLATION": 0.25,
"POSITION": 0.15,
"OVERLAP": 0.35
},
"provenance": "INITIAL_HEURISTIC"
},
"default_channel_log_cap": {
"value": 0.35,
"provenance": "INITIAL_HEURISTIC"
},
"default_total_log_cap": {
"value": 0.7,
"provenance": "INITIAL_HEURISTIC"
}
},
"correction_policy": {
"foreign_context_geometry_mutation": "FORBIDDEN",
"contrast_issue": "request authoritative contrast/color owner evidence or correction",
"isolation_issue": "request spacing/proximity owner correction",
"position_issue": "request layout/canvas owner correction",
"overlap_issue": "request occlusion/visibility owner correction",
"base_mass_issue": "route to Compo4.01 or source local-weight owner",
"relation_issue": "route to Compo4.03",
"target_preference_issue": "route to Compo4.04"
},
"deferred_inputs": [
"Compo4.03 mass relations",
"Compo4.04 calibration/target scoring/regression",
"Topic5 positive/negative space",
"future hierarchy/balance/global eye-flow",
"future canonical contrast/isolation/position/overlap owners where not yet available"
],
"recompute_when": [
"base mass evidence changes",
"input evidence stage or upstream applied-context lineage changes",
"any enabled context evidence changes",
"context policy/calibration profile changes",
"channel confidence/provenance changes",
"enabled channel set changes"
],
"finality": "CROSS_OBJECT_CONTEXTUAL_MASS_ONLY"
}