Removal is a proposal layer
+ 20.01 semantic necessity / decorative contribution
+ 20.02 ObjectContributionDescriptor / marginal effects
+ explicit removal-candidate policy
→ ObjectRemovalAssessment[]
→ bounded ObjectRemovalCandidate[]
→ ClutterReductionCandidateSet
NO automatic deletion
NO redundancy score
NO MetricResult
Candidate generation owns no content
20.03
Removal assessments, explicit local safety gates, deterministic single-subject candidate generation, candidate set identity and non-mutating owner-routed requests.
20.00–20.02 / 20.04 / foreign
Requirement truth, semantic verdicts, ablation math, redundancy score, MetricResult, physical removal, geometry/content mutation, global quality or final ranking.
Every candidate passes explicit safety gates
| Semantic necessity | Only NOT_ESTABLISHED_IN_DECLARED_MODEL may continue. LOCALLY_REQUIRED and UNRESOLVED block. |
| Requirement protection | Covered REQUIRED_PRESENCE or REVIEW_REQUIRED blocks under v1 policy. |
| Marginal effects | Any positive contribution or unresolved CHANGE_ONLY effect blocks. |
| Redundancy evidence | At least one exact explicit 20.00 redundancy hypothesis containing the subject is required. |
| Decoration | DECLARED_PRESENT is preserved as an explicit review flag; it is never silently discarded. |
Assessment explains why a candidate exists or not
ObjectRemovalAssessment {
objectContributionSubjectRef,
objectContributionDescriptorRef,
semanticNecessityVerdict,
decorativeContributionState,
protectedRequirementRefs[],
reviewRequirementRefs[],
matchedRedundancyHypothesisRefs[],
positiveContributionRefs[],
noObservedChangeRefs[],
negativeContributionRefs[],
changeObservedRefs[],
candidateState:
ELIGIBLE_FOR_REVIEW | BLOCKED | N_A | INVALID,
reasonCodes[],
removalSafety: null,
redundancyScore: null,
metricResultRef: null,
mutationAllowed: false
}BLOCKED != global reject
ELIGIBLE_FOR_REVIEW != safe-to-delete
A candidate is an owner-routed request
ObjectRemovalCandidate {
objectRemovalAssessmentRef,
objectContributionSubjectRef,
requestedAction:
REQUEST_REMOVE_SUBJECT,
reviewRequired: true,
decorativeLossDeclared,
evidenceRefs[],
targetOwnerRef,
candidateOrdinal,
redundancyScore: null,
metricResultRef: null,
estimatedClutterReduction: null,
status: OPEN,
mutationAllowed: false
}Candidate 1 is not better, safer or more redundant than candidate 2.
Bounded single-subject generation
Explicit selections
Canonical subject ordering, exact deduplication, maxSelectedSubjects ≤ 512, maxCandidates ≤ 128, no truncation on overflow.
Combinatorial cleanup
No all-pairs scan, no subset search, no multi-subject removal candidate, no Cartesian product, no automatic iterative deletion.
N_A never becomes “safe enough”
| Valid gates pass | OK + ELIGIBLE_FOR_REVIEW |
| Explicit blocker | OK + BLOCKED |
| Missing/conflicting required lineage | N_A; no candidate |
| Malformed/invalid upstream | INVALID; no candidate |
| Overflow | N_A; no truncation |
Topic20 ownership remains separated
| 20.00 | Root subjects, requirements, coverage claims and redundancy hypotheses. |
| 20.01 | Semantic necessity vs decorative contribution. |
| 20.02 | Marginal contribution / ablation and ObjectContributionDescriptor. |
| 20.03 | Removal assessments, reviewable candidates and clutter-reduction proposal set. |
| 20.04 | Redundancy score, MetricResult scoring and final Topic20 tests. |
Removal candidate is not redundancy proof
candidate != redundancy score
candidate ordinal != quality
negative marginal != universally redundant
zero change != redundancy proof
decorative != redundant
NOT_ESTABLISHED != unnecessary
redundancy hypothesis != score
low hierarchy rank != removable
N_A != 0
descriptor != score
local != global
correction request != foreign mutation
CANON → LAB → DATA → IDEAS
20.03 regression suite
Tests cover semantic and requirement blockers, explicit redundancy-hypothesis gating, marginal-effect blockers, decorative-loss preservation, deterministic candidate identity/order, bounded generation, non-mutation, zero MetricResults and all 20.04 ownership firewalls.
DATA FOR LAYOUT ENGINE
{
"module": "Compo 20.03",
"name": "removal_candidates_and_clutter_reduction",
"version": "1.0-canonical",
"canonical_main_title": "Removal candidates and clutter reduction",
"topic": "20_ЭКОНОМИЯ_И_УДАЛЕНИЕ_ЛИШНЕГО",
"scope": "EXPLICIT_SINGLE_SUBJECT_REMOVAL_CANDIDATE_ASSESSMENT_AND_BOUNDED_NON_MUTATING_CLUTTER_REDUCTION_PROPOSALS_FROM_VALID_20_00_TO_20_02_LINEAGE_WITHOUT_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.03",
"owns": [
"ObjectRemovalCandidateState taxonomy",
"ObjectRemovalCandidateReasonCode taxonomy",
"ObjectRemovalCandidateGenerationPolicy",
"ObjectRemovalAssessment",
"ObjectRemovalCandidate",
"ClutterReductionCandidateSet",
"ObjectRemovalCandidateAttachment",
"exact validation of 20.00 requirement/coverage/hypothesis protection lineage for removal gating",
"single-subject candidate eligibility from explicit 20.01 semantic verdict and 20.02 marginal-effect lineage",
"bounded deterministic single-subject candidate generation",
"identity/status/provenance rules for Topic20 removal-candidate layer",
"non-mutating correction requests for candidate/protection/lineage errors"
],
"does_not_own": [
"20.00 subject/requirement/coverage/hypothesis identities",
"20.01 semantic necessity or decorative contribution verdicts",
"20.02 ablation experiment, marginal delta or ObjectContributionDescriptor identity",
"20.04 redundancy score, target fit, MetricResult or final Topic20 tests",
"physical object deletion or foreign geometry/content mutation",
"global clutter score or final-layout ranking",
"Topic18 hierarchy/subordination",
"Topic19 observed visual hierarchy",
"Compo13 dominance or Compo4 visual mass"
]
},
"consumes": [
"valid ObjectContributionSystemSeed lineage from 20.00",
"valid ObjectContributionRequirement[] / ObjectContributionCoverageClaim[] / ObjectRedundancyHypothesis[] from 20.00",
"valid 20.01 ObjectNecessityDecorationDescriptor",
"valid 20.02 ObjectContributionDescriptor",
"explicit selected subject refs",
"explicit ObjectRemovalCandidateGenerationPolicy"
],
"provides": [
"ObjectRemovalAssessment[]",
"ObjectRemovalCandidate[]",
"ClutterReductionCandidateSet",
"ObjectRemovalCandidateAttachment"
],
"owns_metrics": [],
"metric_ownership_note": "20.03 owns candidate assessment and bounded proposal generation only. It owns no redundancy score, no MetricResult and no independent numeric vote.",
"candidate_state_taxonomy": {
"ELIGIBLE_FOR_REVIEW": "All explicit local gates pass. This is a reviewable proposal, never an automatic deletion permission.",
"BLOCKED": "One or more explicit safety gates reject candidate generation.",
"N_A": "Required lineage/evidence is missing or unresolved; no candidate is generated.",
"INVALID": "Malformed or invalid upstream contract; no candidate is generated."
},
"reason_code_taxonomy": [
"SEMANTIC_NOT_ESTABLISHED",
"SEMANTIC_LOCALLY_REQUIRED",
"SEMANTIC_UNRESOLVED",
"REQUIRED_PRESENCE_PROTECTION",
"REVIEW_REQUIRED_PROTECTION",
"POSITIVE_MARGINAL_CONTRIBUTION",
"CHANGE_ONLY_OUTCOME_UNRESOLVED",
"EXPLICIT_REDUNDANCY_HYPOTHESIS_PRESENT",
"MISSING_REDUNDANCY_HYPOTHESIS",
"DECLARED_DECORATIVE_LOSS_REVIEW",
"NO_DECLARED_DECORATIVE_LOSS",
"UPSTREAM_N_A",
"UPSTREAM_INVALID",
"LINEAGE_MISMATCH"
],
"object_removal_candidate_generation_policy_schema": {
"selectionMode": "EXPLICIT_SUBJECTS_ONLY",
"candidateMode": "SINGLE_SUBJECT_ONLY",
"maxSelectedSubjects": "1..512",
"maxCandidates": "1..128",
"requireSemanticNotEstablished": true,
"requireExplicitRedundancyHypothesis": true,
"blockRequiredPresence": true,
"blockReviewRequired": true,
"blockPositiveMarginalContribution": true,
"blockChangeOnlyObserved": true,
"decorativePresentPolicy": "ALLOW_REVIEW_WITH_EXPLICIT_LOSS_FLAG",
"missingOrConflictingPolicy": "N_A_NO_GUESS",
"overflowPolicy": "N_A_NO_TRUNCATION",
"deduplication": "EXACT_CANDIDATE_IDENTITY",
"ordering": "CANONICAL_SUBJECT_REF_ASCENDING_NOT_QUALITY_ORDER",
"allowCombinedRemoval": false,
"allowAutomaticDeletion": false,
"allowForeignMutation": false
},
"object_removal_assessment_schema": {
"objectRemovalAssessmentRef": "stable identity",
"objectContributionSystemSeedRef": "exact 20.00 seed lineage",
"objectContributionSubjectRef": "exact selected subject",
"objectContributionDescriptorRef": "exact 20.02 descriptor",
"semanticNecessityVerdict": "copied from 20.02/20.01 lineage",
"decorativeContributionState": "copied from 20.02/20.01 lineage",
"protectedRequirementRefs[]": "exact REQUIRED_PRESENCE requirements covered by subject",
"reviewRequirementRefs[]": "exact REVIEW_REQUIRED requirements covered by subject",
"matchedRedundancyHypothesisRefs[]": "exact explicit hypotheses that include the subject",
"positiveContributionRefs[]": "exact 20.02 marginal refs",
"noObservedChangeRefs[]": "exact 20.02 marginal refs",
"negativeContributionRefs[]": "exact 20.02 marginal refs",
"changeObservedRefs[]": "exact 20.02 CHANGE_ONLY refs",
"candidateState": "ELIGIBLE_FOR_REVIEW|BLOCKED|N_A|INVALID",
"reasonCodes[]": "explicit categorical reasons; count is not a score",
"removalSafety": null,
"redundancyScore": null,
"metricResultRef": null,
"mutationAllowed": false
},
"object_removal_candidate_schema": {
"objectRemovalCandidateRef": "stable identity",
"objectRemovalAssessmentRef": "exact eligible assessment",
"objectContributionSubjectRef": "single subject only",
"requestedAction": "REQUEST_REMOVE_SUBJECT",
"reviewRequired": true,
"decorativeLossDeclared": "boolean copied from explicit 20.01 state",
"evidenceRefs[]": "actual assessment/upstream lineage",
"targetOwnerRef": "explicit foreign owner that may apply or reject removal",
"candidateOrdinal": "deterministic serialization ordinal; not a quality score",
"redundancyScore": null,
"metricResultRef": null,
"estimatedClutterReduction": null,
"status": "OPEN",
"mutationAllowed": false
},
"clutter_reduction_candidate_set_schema": {
"clutterReductionCandidateSetRef": "stable identity",
"selectedSubjectRefs[]": "explicit selection only",
"assessmentRefs[]": "all selected-subject assessments",
"candidateRefs[]": "eligible review proposals only",
"blockedSubjectRefs[]": "explicitly blocked selections",
"unresolvedSubjectRefs[]": "N_A selections",
"maxCandidates": "policy bound",
"status": "OK|N_A|INVALID",
"redundancyScore": null,
"metricResultRefs": [],
"mutationAllowed": false
},
"candidate_generation_rules": [
"Candidate generation is explicit-subject-only and single-subject-only.",
"LOCALLY_REQUIRED or UNRESOLVED semantic necessity blocks removal candidate generation.",
"Any covered REQUIRED_PRESENCE or REVIEW_REQUIRED requirement blocks candidate generation under v1 policy.",
"Any positive marginal contribution blocks candidate generation under v1 policy.",
"Any CHANGE_ONLY observed change blocks candidate generation because direction is unresolved.",
"At least one explicit valid redundancy hypothesis including the subject is required.",
"DECLARED_PRESENT decorative contribution does not silently block a review candidate; it adds an explicit decorative-loss review flag.",
"No candidate means no automatic keep/delete verdict beyond the local blocking reason.",
"Candidate list order is deterministic serialization, not candidate quality ranking.",
"No combined multi-subject removal and no subset/Cartesian enumeration."
],
"critical_firewalls": [
"removal candidate != automatic deletion",
"candidate ordinal != score",
"reason count != redundancy score",
"negative marginal contribution != universal redundancy",
"zero observed change != redundancy proof",
"decorative contribution != redundancy",
"semantic NOT_ESTABLISHED != unnecessary",
"explicit redundancy hypothesis != redundancy score",
"low hierarchy rank != removal eligibility",
"low visual mass != removal eligibility",
"N_A != 0",
"descriptor != score",
"local != global",
"correction request != foreign mutation",
"no universal beautyScore",
"no final-layout ranking"
],
"IDEAS_REFS": [
"IDEA-01 measure human acceptance of reviewable removal candidates versus actual removals",
"IDEA-02 collect false-safe candidates that pass local ablation but fail broader content review",
"IDEA-03 study when declared decorative loss should block rather than merely flag removal",
"IDEA-04 compare explicit redundancy hypotheses with eventual 20.04 redundancy scores",
"IDEA-05 study bounded multi-step cleanup only after single-subject candidate precision is known"
],
"DATA_CAPTURE": [
"scopeRef",
"snapshotRef",
"objectContributionSystemSeedRef",
"selectedSubjectRefs[]",
"objectContributionDescriptorRefBySubject",
"semanticNecessityVerdictBySubject",
"decorativeContributionStateBySubject",
"protectedRequirementRefsBySubject",
"reviewRequirementRefsBySubject",
"matchedRedundancyHypothesisRefsBySubject",
"positiveContributionRefsBySubject",
"noObservedChangeRefsBySubject",
"negativeContributionRefsBySubject",
"changeObservedRefsBySubject",
"candidateStateBySubject",
"reasonCodesBySubject",
"assessmentRefs[]",
"candidateRefs[]",
"blockedSubjectRefs[]",
"unresolvedSubjectRefs[]",
"status",
"reasonCode"
],
"DEFERRED_SEMANTIC_INPUTS": [
"20.04 redundancy score",
"20.04 target/evaluation profile",
"20.04 MetricResult ownership and one Topic20 composite independent vote if canonical scoring requires it",
"20.04 final Topic20 regression/closing tests",
"global composition quality",
"physical removal execution",
"final-layout ranking"
],
"HUMAN_FEEDBACK_HOOKS": [
"candidate should exist",
"candidate should be blocked",
"required-content protection missing",
"review protection should apply",
"redundancy hypothesis missing",
"redundancy hypothesis extraneous",
"decorative loss acceptable",
"decorative loss unacceptable",
"positive marginal contribution should block",
"change-only outcome needs interpretation",
"target removal owner wrong"
],
"CONFLICT_PRIORITY_ASSUMPTIONS": [
"safety-gate evaluation order is not global rule priority",
"candidate serialization order is not quality order",
"reason-code order is canonical serialization only",
"hypothesis source order is not authority order",
"confidence does not choose semantic or ablation winners",
"module execution order does not define composition priority"
],
"LAB_HOOKS": [
"single-subject removal review precision/recall study",
"mandatory-content breakage study",
"decorative-loss acceptance study",
"ablation-to-removal calibration study",
"redundancy-hypothesis usefulness study",
"human correction reason taxonomy"
],
"topic20ProgressAfterThisModule": "4/5 local",
"next_module": "Compo 20.04 — Scoring and tests",
"hard_stop": "Do not implement 20.04 in this file."
}