Measure the counterfactual locally
+ explicit single-subject ablation experiment
+ owner-qualified outcome bindings
+ baseline / SUBJECT_ABLATED evidence
→ per-binding marginal deltas
→ ObjectContributionDescriptor
NO removal candidate
NO redundancy score
NO MetricResult
Ablation describes effect, not permission
20.02
Single-subject experiment identity, exact owner-qualified outcome evidence, baseline-versus-ablated deltas, effect classes and ObjectContributionDescriptor lineage.
20.03–20.04 + foreign
Removal permission, clutter proposal, redundancy score, MetricResult, raw outcome semantics, causal universality, hierarchy, dominance, visual mass or final ranking.
One subject, one controlled hypothetical removal
ObjectAblationExperimentSpec {
objectContributionSubjectRef,
baselineScenarioRef,
ablatedScenarioRef,
selectedOutcomeBindingRefs[],
ablationMode: REMOVE_EXACT_SUBJECT_ONLY,
otherChangesPolicy: NO_OTHER_DECLARED_CHANGES,
mutationAllowed: false
}It compares two explicitly declared evaluation states.
No multi-object combinatorial ablation in canon v1.
Outcome direction belongs to the binding
| Direction | Meaning |
|---|---|
| HIGHER_IS_BETTER | baseline − ablated > 0 means positive local marginal contribution. |
| LOWER_IS_BETTER | Direction is reversed before interpretation; lower baseline can be beneficial. |
| CHANGE_ONLY | Only change/no-change is described. Better/worse semantics are intentionally absent. |
Raw delta stays in source units
HIGHER_IS_BETTER:
orientedDelta = rawDelta
LOWER_IS_BETTER:
orientedDelta = −rawDelta
CHANGE_ONLY:
orientedDelta = null
Positive
Ablation worsened a directed outcome in this exact context.
No change
Exact equality is a valid observed zero.
Negative
Ablation improved a directed outcome locally.
Change only
A change occurred without value judgement.
ObjectContributionDescriptor keeps axes separate
ObjectContributionDescriptor {
objectContributionSubjectRef,
objectNecessityDecorationDescriptorRef,
objectAblationExperimentSpecRef,
marginalContributionDescriptorRefs[],
semanticNecessityVerdict, // copied from 20.01
decorativeContributionState, // copied from 20.01
positiveContributionRefs[],
noObservedChangeRefs[],
negativeContributionRefs[],
changeObservedRefs[],
unresolvedMarginalRefs[],
redundancyHypothesisRefs[], // lineage only
removalCandidateRef: null,
redundancyScore: null,
metricResultRefs: [],
removalSafety: null,
mutationAllowed: false
}Zero, N_A and INVALID remain distinct
| Exact baseline = ablated | OK + NO_OBSERVED_CHANGE + numeric 0 |
| Missing baseline or ablated evidence | N_A |
| Conflicting exact-lineage evidence | N_A |
| Wrong experiment/binding/unit/method/context | INVALID or lineage N_A; no conversion |
| Experiment/binding overflow | N_A; no truncation |
Removal still belongs downstream
| 20.00 | Root objects, requirements, coverage and redundancy hypotheses. |
| 20.01 | Semantic necessity vs decorative contribution. |
| 20.02 | Single-subject ablation, marginal effect descriptors and ObjectContributionDescriptor. |
| 20.03 | Removal candidates and clutter reduction. |
| 20.04 | Redundancy score, MetricResult scoring and final Topic20 tests. |
Observed effect is not a deletion verdict
negative marginal contribution != safe removal
zero observed change != redundancy proof
decorative contribution != marginal contribution
redundancy hypothesis != redundancy score
ablation experiment != physical mutation
N_A != 0
descriptor != score
local != global
correction request != foreign mutation
CANON → LAB → DATA → IDEAS
20.02 regression suite
Tests cover exact experiment identity, owner-qualified outcome lineage, higher/lower/change-only direction semantics, exact zero, conflicts, missing evidence, bounded explicit selection, immutable descriptors and 20.03–20.04 ownership firewalls.
DATA FOR LAYOUT ENGINE
{
"module": "Compo 20.02",
"name": "marginal_contribution_ablation",
"version": "1.0-canonical",
"canonical_main_title": "Marginal contribution / ablation",
"topic": "20_ЭКОНОМИЯ_И_УДАЛЕНИЕ_ЛИШНЕГО",
"scope": "EXPLICIT_SINGLE_SUBJECT_CONTROLLED_ABLATION_OVER_OWNER_QUALIFIED_OUTCOME_BINDINGS_AND_OBJECT_CONTRIBUTION_DESCRIPTORS_ONLY_WITHOUT_REMOVAL_CANDIDATES_REDUNDANCY_SCORING_OR_METRICRESULT",
"main_topic_contract": {
"topic_title": "Экономия и удаление лишнего",
"topic_goal": "Проверяет необходимость каждого элемента через semantic necessity и marginal contribution. Позволяет предлагать удаление лишнего без разрушения обязательного content.",
"expected_output": "ObjectContributionDescriptor, redundancy score, removal candidates",
"planned_files": [
"20.00 Necessity/redundancy model",
"20.01 Semantic necessity vs decorative contribution",
"20.02 Marginal contribution / ablation",
"20.03 Removal candidates and clutter reduction",
"20.04 Scoring and tests"
]
},
"ownership": {
"owner": "Compo20.02",
"owns": [
"ObjectAblationOutcomeDirection taxonomy",
"ObjectAblationCondition taxonomy",
"ObjectMarginalEffectClass taxonomy",
"ObjectAblationOutcomeBinding",
"ObjectAblationExperimentSpec",
"ObjectAblationOutcomeEvidence adapter",
"ObjectAblationOutcomeResolution",
"ObjectMarginalContributionDescriptor",
"ObjectAblationSelectionPolicy",
"ObjectAblationSet",
"ObjectContributionDescriptor",
"ObjectAblationAttachment",
"explicit single-subject hypothetical ablation contract",
"exact baseline-vs-ablated owner-qualified outcome comparison",
"per-binding raw and direction-oriented marginal delta",
"identity/status/provenance rules for Topic20 ablation layer",
"non-mutating correction request for experiment/binding/evidence lineage"
],
"does_not_own": [
"20.00 subjects, requirements, coverage claims, redundancy hypotheses or root identity",
"20.01 semantic necessity / decorative contribution judgement",
"foreign outcome measurement semantics",
"causal inference beyond the exact declared ablation experiment",
"multi-subject combinatorial ablation",
"removal candidate generation / clutter reduction — Compo20.03",
"redundancy score / MetricResult scoring — Compo20.04",
"Topic19 hierarchy",
"Topic18 subordination",
"Compo13 dominance",
"Compo4 visual mass",
"global beautyScore",
"final-layout ranking",
"foreign geometry/content/style mutation"
]
},
"consumes": [
"valid Compo20.00 ObjectContributionSystemSeed lineage",
"exact Compo20.00 ObjectContributionSubject identity",
"valid Compo20.01 ObjectNecessityDecorationDescriptor for the same subject",
"explicit ObjectAblationOutcomeBinding[]",
"explicit ObjectAblationExperimentSpec",
"owner-qualified baseline and SUBJECT_ABLATED outcome evidence",
"explicit ObjectAblationSelectionPolicy"
],
"provides": [
"ObjectAblationOutcomeResolution[]",
"ObjectMarginalContributionDescriptor[]",
"ObjectAblationSet",
"ObjectContributionDescriptor",
"ObjectAblationAttachment"
],
"owns_metrics": [],
"metric_ownership_note": "20.02 produces descriptive per-binding marginal deltas and ObjectContributionDescriptor lineage only. It owns no redundancy score, no MetricResult and no independent numeric vote.",
"outcome_direction_taxonomy": {
"HIGHER_IS_BETTER": "Positive marginal effect when baseline outcome exceeds ablated outcome.",
"LOWER_IS_BETTER": "Positive marginal effect when baseline outcome is lower than ablated outcome.",
"CHANGE_ONLY": "Direction is intentionally unspecified; only change/no-change is described."
},
"ablation_condition_taxonomy": {
"BASELINE": "Original declared evaluation state.",
"SUBJECT_ABLATED": "Hypothetical evaluation state with exactly one selected subject removed/disabled and no other declared change."
},
"marginal_effect_class_taxonomy": {
"POSITIVE_CONTRIBUTION": "Removing the subject worsened an explicitly directed outcome in this exact context.",
"NO_OBSERVED_CHANGE": "Exact baseline and ablated values are equal.",
"NEGATIVE_CONTRIBUTION": "Removing the subject improved an explicitly directed outcome in this exact context.",
"CHANGE_OBSERVED": "A CHANGE_ONLY binding changed, without better/worse semantics."
},
"ablation_outcome_binding_schema": {
"objectAblationOutcomeBindingRef": "stable identity",
"scopeRef": "Topic20 scope",
"outcomeChannelRef": "opaque foreign-owned outcome channel",
"outcomeSourceOwnerRef": "measurement owner",
"unitRef": "exact unit",
"measurementMethodRef": "exact method",
"measurementContextRef": "exact context",
"outcomeDirection": "HIGHER_IS_BETTER|LOWER_IS_BETTER|CHANGE_ONLY",
"bindingSourceRef": "explicit source",
"bindingSourceOwnerRef": "owner",
"provenance": "canonical provenance",
"status": "OK|INVALID",
"mutationAllowed": false
},
"ablation_experiment_spec_schema": {
"objectAblationExperimentSpecRef": "stable identity",
"scopeRef": "scope",
"objectContributionSystemSeedRef": "exact 20.00 seed",
"objectContributionSubjectRef": "exact selected subject",
"baselineScenarioRef": "explicit baseline scenario",
"ablatedScenarioRef": "explicit subject-ablated scenario",
"evaluationContextRef": "exact experiment context",
"selectedOutcomeBindingRefs[]": "explicit only",
"ablationMode": "REMOVE_EXACT_SUBJECT_ONLY",
"otherChangesPolicy": "NO_OTHER_DECLARED_CHANGES",
"experimentSourceRef": "explicit source",
"experimentSourceOwnerRef": "owner",
"provenance": "canonical provenance",
"status": "OK|INVALID",
"mutationAllowed": false
},
"ablation_outcome_evidence_schema": {
"objectAblationOutcomeEvidenceRef": "stable identity",
"scopeRef": "scope",
"objectAblationExperimentSpecRef": "exact experiment",
"objectContributionSubjectRef": "exact ablated subject",
"objectAblationOutcomeBindingRef": "exact binding",
"condition": "BASELINE|SUBJECT_ABLATED",
"scenarioRef": "must match experiment condition scenario",
"value": "finite scalar",
"unitRef": "exact binding unit",
"measurementMethodRef": "exact binding method",
"measurementContextRef": "exact binding context",
"evidenceSourceRef": "explicit source",
"evidenceSourceOwnerRef": "must match binding outcomeSourceOwnerRef",
"confidence": "finite [0,1] or null; diagnostic only",
"provenance": "canonical provenance",
"status": "OK|INVALID",
"mutationAllowed": false
},
"resolution_policy": {
"mode": "EXACT_SINGLE_VALUE_OR_CONSENSUS_EQUAL_ONLY",
"missing": "N_A",
"conflict": "N_A",
"invalid": "INVALID",
"confidenceWinner": false,
"averaging": false,
"latestWinner": false,
"zeroIsValid": true
},
"marginal_math": {
"rawDelta": "baselineValue - ablatedValue",
"HIGHER_IS_BETTER": "orientedDelta = rawDelta",
"LOWER_IS_BETTER": "orientedDelta = -rawDelta",
"CHANGE_ONLY": "orientedDelta = null",
"classification": "positive/zero/negative only when directed; CHANGE_ONLY uses CHANGE_OBSERVED or NO_OBSERVED_CHANGE",
"epsilon": "none; equality is exact in 20.02"
},
"object_contribution_descriptor_schema": {
"objectContributionDescriptorRef": "stable identity",
"scopeRef": "scope",
"objectContributionSubjectRef": "exact subject",
"objectContributionSystemSeedRef": "exact 20.00 seed",
"objectNecessityDecorationDescriptorRef": "exact 20.01 descriptor",
"objectAblationExperimentSpecRef": "exact experiment",
"marginalContributionDescriptorRefs[]": "explicit per-binding results",
"positiveContributionRefs[]": "descriptive lineage",
"noObservedChangeRefs[]": "descriptive lineage",
"negativeContributionRefs[]": "descriptive lineage",
"changeObservedRefs[]": "descriptive lineage",
"unresolvedMarginalRefs[]": "N_A lineage",
"semanticNecessityVerdict": "copied from 20.01; not recomputed",
"decorativeContributionState": "copied from 20.01; not recomputed",
"redundancyHypothesisRefs[]": "optional 20.00 lineage only; not evaluated",
"removalCandidateRef": null,
"redundancyScore": null,
"metricResultRefs": [],
"removalSafety": null,
"status": "OK|N_A|INVALID",
"provenance": "DERIVED",
"mutationAllowed": false
},
"selection_policy": {
"selectionMode": "EXPLICIT_EXPERIMENTS_AND_BINDINGS_ONLY",
"maxExperiments": 128,
"maxBindingsPerExperiment": 64,
"overflowPolicy": "N_A_NO_TRUNCATION",
"duplicatePolicy": "DEDUP_EXACT_IDENTITY",
"allowMultiSubjectAblation": false,
"allowImplicitOutcomeBindings": false,
"allowSilentUnitConversion": false,
"allowSilentMethodConversion": false,
"allowSilentContextConversion": false,
"allowCrossExperimentEvidenceFallback": false,
"allowAggregateMarginalScore": false
},
"status_policy": {
"validExactPair": "OK",
"exactZeroDelta": "OK",
"missingBaselineOrAblated": "N_A",
"conflictingEvidence": "N_A",
"lineageMismatch": "N_A",
"unknownSubject": "N_A",
"invalidEvidence": "INVALID",
"invalidBinding": "INVALID",
"invalidExperiment": "INVALID",
"selectionOverflow": "N_A; no truncation",
"N_A_not_zero": true
},
"critical_firewalls": [
"20.02 owns no MetricResult and no independent numeric vote",
"ablation != physical deletion",
"ablation experiment != removal candidate",
"positive marginal contribution != global necessity",
"negative marginal contribution != safe removal",
"zero observed change != redundancy proof",
"CHANGE_ONLY change != benefit or harm",
"20.01 LOCALLY_REQUIRED remains semantic evidence and is not overwritten by ablation",
"decorative contribution remains independent from marginal contribution",
"redundancy hypothesis != redundancy score",
"single-subject experiment != causal law",
"no multi-object combinatorial ablation",
"no full subject×binding Cartesian product",
"no silent unit/method/context conversion",
"missing evidence != zero contribution",
"N_A != 0",
"INVALID != 0",
"local != global",
"descriptor != score",
"heuristic != law",
"correction request != foreign mutation",
"module execution order != rule priority",
"no universal beautyScore",
"IDEA != CANON",
"EXPERIMENT != CANON"
],
"IDEAS_REFS": [
"IDEA-01 compare declared redundancy hypotheses with observed ablation effects",
"IDEA-02 study false-safe-removal cases where one measured outcome stays unchanged but mandatory content breaks",
"IDEA-03 compare single-object and future interaction-aware ablations without canonizing combinatorial search",
"IDEA-04 collect context-sensitive marginal effects across media and tasks",
"IDEA-05 study outcome binding coverage needed before downstream redundancy scoring"
],
"DATA_CAPTURE": [
"scopeRef",
"snapshotRef",
"objectContributionSystemSeedRef",
"objectContributionSubjectRef",
"objectNecessityDecorationDescriptorRef",
"objectAblationExperimentSpecRef",
"selectedOutcomeBindingRefs[]",
"baselineEvidenceRefs[]",
"ablatedEvidenceRefs[]",
"baselineValueByBinding",
"ablatedValueByBinding",
"rawDeltaByBinding",
"orientedDeltaByBinding",
"marginalEffectClassByBinding",
"objectContributionDescriptorRef",
"status",
"reasonCode"
],
"DEFERRED_SEMANTIC_INPUTS": [
"20.03 removal candidate generation",
"20.03 clutter-reduction proposal logic",
"20.04 redundancy score",
"20.04 MetricResult scoring",
"multi-subject interaction ablation",
"global quality and final-layout ranking"
],
"HUMAN_FEEDBACK_HOOKS": [
"correct outcome binding",
"correct outcome direction",
"correct experiment scenario pairing",
"correct baseline evidence",
"correct ablated evidence",
"mark evidence conflict real",
"mark untracked co-change in ablation",
"correct semantic/decorative lineage",
"mark marginal effect context-specific"
],
"CONFLICT_PRIORITY_ASSUMPTIONS": [
"confidence does not choose evidence winner",
"evidence serialization order has no priority",
"binding order has no outcome priority",
"positive/negative effect classes have no global quality priority",
"module execution order does not imply rule priority"
],
"LAB_HOOKS": [
"single-object ablation reproducibility study",
"outcome-channel sensitivity study",
"semantic-breakage despite zero measured delta study",
"negative marginal effect interpretation study",
"interaction-effect study for future non-canonical multi-object experiments",
"human removal-safety review study"
],
"topic20ProgressAfterThisModule": "3/5 local",
"next_module": "Compo 20.03 — Removal candidates and clutter reduction",
"hard_stop": "Do not implement 20.03 or 20.04 in this file."
}