COMPO · 20.03 · REMOVAL CANDIDATES / CLUTTER REDUCTION

Propose removal.
Delete nothing automatically.

20.03 превращает валидные 20.00–20.02 данные в bounded single-subject removal candidates. Кандидат появляется только после явной проверки semantic necessity, requirement protection, marginal effects и explicit redundancy hypothesis. Даже прошедший все локальные gates объект получает лишь reviewable removal request — без физического удаления, redundancy score и MetricResult.

ModuleCompo 20.03
Input20.00–20.02
Candidatesingle subject
Mutationforbidden
Metricsnone
Next20.04

Removal is a proposal layer

00 / contract
20.00 requirements / coverage / redundancy hypotheses
+ 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

01 / ownership
OWNS

20.03

Removal assessments, explicit local safety gates, deterministic single-subject candidate generation, candidate set identity and non-mutating owner-routed requests.

DOES NOT OWN

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

02 / local gating
Semantic necessityOnly NOT_ESTABLISHED_IN_DECLARED_MODEL may continue. LOCALLY_REQUIRED and UNRESOLVED block.
Requirement protectionCovered REQUIRED_PRESENCE or REVIEW_REQUIRED blocks under v1 policy.
Marginal effectsAny positive contribution or unresolved CHANGE_ONLY effect blocks.
Redundancy evidenceAt least one exact explicit 20.00 redundancy hypothesis containing the subject is required.
DecorationDECLARED_PRESENT is preserved as an explicit review flag; it is never silently discarded.

Assessment explains why a candidate exists or not

03 / auditability
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
}
reason count != score
BLOCKED != global reject
ELIGIBLE_FOR_REVIEW != safe-to-delete

A candidate is an owner-routed request

04 / no mutation
ObjectRemovalCandidate {
  objectRemovalAssessmentRef,
  objectContributionSubjectRef,

  requestedAction:
    REQUEST_REMOVE_SUBJECT,

  reviewRequired: true,
  decorativeLossDeclared,
  evidenceRefs[],
  targetOwnerRef,

  candidateOrdinal,

  redundancyScore: null,
  metricResultRef: null,
  estimatedClutterReduction: null,

  status: OPEN,
  mutationAllowed: false
}
Ordinal is serialization only.

Candidate 1 is not better, safer or more redundant than candidate 2.

Bounded single-subject generation

05 / deterministic
ALLOWED

Explicit selections

Canonical subject ordering, exact deduplication, maxSelectedSubjects ≤ 512, maxCandidates ≤ 128, no truncation on overflow.

FORBIDDEN

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”

06 / status
Valid gates passOK + ELIGIBLE_FOR_REVIEW
Explicit blockerOK + BLOCKED
Missing/conflicting required lineageN_A; no candidate
Malformed/invalid upstreamINVALID; no candidate
OverflowN_A; no truncation

Topic20 ownership remains separated

07 / modules
20.00Root subjects, requirements, coverage claims and redundancy hypotheses.
20.01Semantic necessity vs decorative contribution.
20.02Marginal contribution / ablation and ObjectContributionDescriptor.
20.03Removal assessments, reviewable candidates and clutter-reduction proposal set.
20.04Redundancy score, MetricResult scoring and final Topic20 tests.

Removal candidate is not redundancy proof

08 / firewalls
candidate != deletion
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

09 / mandatory hooks
IDEAS_REFS[]Removal-review precision and false-safe cases.
DATA_CAPTURE[]Every gate, reason, assessment and candidate lineage.
DEFERRED_SEMANTIC_INPUTS[]Redundancy score and MetricResult remain 20.04.
HUMAN_FEEDBACK_HOOKS[]Candidate/blocker/decorative-loss corrections.
CONFLICT_PRIORITY_ASSUMPTIONS[]Gate order and candidate order are not global priority.
LAB_HOOKS[]Human removal-safety review studies.

20.03 regression suite

10 / deterministic tests

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.

Tests not run yet.

DATA FOR LAYOUT ENGINE

11 / machine contract
{
  "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."
}
VISITS / ...