COMPO · 20.04 · SCORING AND TESTS

Measure redundancy.
Delete nothing automatically.

20.04 завершает Topic 20: превращает валидные 20.00–20.03 lineage records в явный локальный redundancy score, затем сравнивает его с explicit target profile. Диагностический redundancy score отделён от MetricResult; единственный independent numeric vote Topic 20 — composite local target fit. Ни score, ни candidate не дают автоматического права удалить объект.

ModuleCompo 20.04
Components3 dependent
Independent1 composite
Redundancydiagnostic
Mutationforbidden
Topic 205/5 local

Score evidence after ablation and removal assessment

00 / contract
20.00 requirement / overlap declarations
+ 20.01 semantic necessity / decoration
+ 20.02 controlled ablation / marginal effects
+ 20.03 reviewable removal assessments
+ explicit local scoring profile
+ explicit local target profile
→ ObjectRedundancyScoreDescriptor[]
→ diagnostic redundancy score
→ 3 dependent MetricResults
→ 1 composite target-fit vote

NO automatic deletion
NO beautyScore
NO final-layout ranking

Scoring owner, not content owner

01 / ownership
OWNS

Evidence scoring

Explicit profile-relative semantic, marginal and overlap components plus diagnostic redundancyScore.

OWNS

Target fit

Three dependent component MetricResults and one composite Topic20 vote.

DOES NOT OWN

Deletion

20.03 candidates remain review requests. Foreign object/content mutation is never performed here.

No universal redundancy formula

02 / explicit profiles
SCORING PROFILE

Evidence → local redundancy

Explicit values for semantic verdicts, marginal effect classes and redundancy-hypothesis kinds. Explicit component weights only.

TARGET PROFILE

Local expected band

Inclusive target bands for semantic, marginal, overlap and system redundancy. Target mismatch is a valid zero fit, not N_A.

Heuristic stays declared: profile values may come from STYLE_PRESET, EMPIRICAL or another allowed provenance. They are local calibration, never a universal design law.

Diagnostic redundancy score

03 / three evidence axes
semanticComponent
  explicit mapping of 20.01 semanticNecessityVerdict

marginalComponent
  mean of explicitly selected 20.02 marginalEffectClass values

overlapComponent
  mean of explicitly selected 20.00 redundancy-hypothesis-kind values

redundancyScore
  = weighted mean of the three applicable components

candidate state / candidate ordinal / decorative state
  are NOT numeric inputs
redundancyScore ∈ [0,1]
diagnostic descriptor ≠ MetricResult
higher redundancyScore ≠ permission to delete

Composite-first MetricResult discipline

04 / exactly one vote
3 component MetricResults:

redundancy.target.componentFit.semanticDispensability
redundancy.target.componentFit.marginalEvidence
redundancy.target.componentFit.overlapEvidence

owner = Compo20.04
componentOf = redundancy.system.localTargetProfileFit
scoringGroup = redundancy-local
independentVoteAllowed = false

1 composite MetricResult:

key = redundancy.system.localTargetProfileFit
owner = Compo20.04
composite = true
componentOf = null
scoringGroup = redundancy-local
independentVoteAllowed = true
Exactly one independent numeric vote.

Diagnostic redundancyScore values do not vote independently. Upstream 20.00–20.03 descriptors and removal candidates do not vote.

Zero, N_A and INVALID stay different

05 / status
Complete evidence + target matchOK, fit 1
Complete evidence + target mismatchOK, fit 0, KEEP
Valid redundancyScore = 0OK; zero is observed value
Missing required marginal/overlap evidenceN_A; no imputation
Lineage mismatchN_A; no guessing
Malformed profile/upstream invalidINVALID

20.03 candidate is lineage, not score input

06 / anti-circularity
candidate eligible
does NOT raise redundancyScore

candidate blocked
does NOT lower redundancyScore

candidateOrdinal
does NOT rank redundancy

decorative loss flag
remains visible for review
but is not silently converted into a penalty

Topic20 ownership chain closes cleanly

07 / modules
20.00Root objects, requirements, coverage and redundancy hypotheses.
20.01Semantic necessity and decorative contribution.
20.02Controlled ablation, marginal effects and ObjectContributionDescriptor.
20.03Reviewable removal candidates and clutter-reduction proposal set.
20.04Diagnostic redundancy score, local target fit and final Topic20 tests.
Topic21+Balance/symmetry and later global composition concerns remain downstream.

Local redundancy is not global quality

08 / firewalls
redundancyScore != removal permission
redundancyScore != beautyScore
redundancyScore != final-layout rank
candidate != score
candidate ordinal != score
decorative != redundant
negative marginal != universal redundancy
zero change != universal redundancy
overlap hypothesis != proof
high local target fit != global winner

N_A != 0
INVALID != 0
local != global
heuristic != law
correction request != foreign mutation

CANON → LAB → DATA → IDEAS

09 / mandatory hooks
IDEAS_REFS[]Calibration and false-positive removal studies.
DATA_CAPTURE[]All component values, scores, target fits and lineage.
DEFERRED_SEMANTIC_INPUTS[]Global quality and actual deletion stay downstream.
HUMAN_FEEDBACK_HOOKS[]Score, target and removal-review corrections.
CONFLICT_PRIORITY_ASSUMPTIONS[]Weights explicit; order never priority.
LAB_HOOKS[]Human redundancy calibration and profile sensitivity.

20.04 final regression suite

10 / deterministic tests

Tests cover profile validity, exact 20.00–20.03 lineage, explicit semantic/marginal/overlap mapping, zero/N_A/INVALID separation, anti-circular candidate handling, diagnostic redundancy score bounds, target-band fit, MetricResult ownership, exactly one independent vote and Topic21/global-quality firewalls.

Tests not run yet.

DATA FOR LAYOUT ENGINE

11 / machine contract
{
  "module": "Compo 20.04",
  "name": "scoring_and_tests",
  "version": "1.0-canonical",
  "canonical_main_title": "Scoring and tests",
  "topic": "20_ЭКОНОМИЯ_И_УДАЛЕНИЕ_ЛИШНЕГО",
  "scope": "EXPLICIT_LOCAL_REDUNDANCY_EVIDENCE_SCORING_TARGET_PROFILE_FIT_AND_FINAL_TOPIC20_TESTS_FROM_VALID_20_00_TO_20_03_LINEAGE_WITHOUT_AUTOMATIC_REMOVAL_GLOBAL_QUALITY_OR_FOREIGN_MUTATION",
  "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.04",
    "owns": [
      "ObjectRedundancyScoringProfile",
      "ObjectRedundancyTargetProfile",
      "ObjectRedundancyScoreDescriptor",
      "ObjectRedundancyEvaluationSet",
      "Topic20 component MetricResults",
      "Topic20 composite MetricResult redundancy.system.localTargetProfileFit",
      "ObjectRedundancyScoringAttachment",
      "local target evaluation semantics",
      "final Topic20 regression tests"
    ],
    "does_not_own": [
      "20.00 subjects, requirements, coverage claims or redundancy hypotheses",
      "20.01 semantic-necessity or decorative-contribution truth",
      "20.02 ablation experiments, marginal math or ObjectContributionDescriptor identity",
      "20.03 removal assessment/candidate identity or physical removal",
      "foreign content, geometry, style, semantics or task ownership",
      "global beautyScore",
      "final-layout ranking"
    ]
  },
  "consumes": [
    "valid Compo20.00 ObjectContributionSystemSeed lineage",
    "valid Compo20.02 ObjectContributionDescriptor per explicitly selected subject",
    "valid Compo20.02 ObjectMarginalContributionDescriptor records named by the object descriptor",
    "valid Compo20.00 ObjectRedundancyHypothesis records named by the object descriptor or 20.03 assessment",
    "optional valid Compo20.03 ObjectRemovalAssessment / ObjectRemovalCandidate lineage",
    "explicit ObjectRedundancyScoringProfile",
    "explicit ObjectRedundancyTargetProfile"
  ],
  "provides": [
    "ObjectRedundancyScoreDescriptor[]",
    "ObjectRedundancyEvaluationSet",
    "redundancy score",
    "3 dependent component MetricResults",
    "1 composite MetricResult redundancy.system.localTargetProfileFit",
    "ObjectRedundancyScoringAttachment"
  ],
  "owns_metrics": [
    "redundancy.target.componentFit.semanticDispensability",
    "redundancy.target.componentFit.marginalEvidence",
    "redundancy.target.componentFit.overlapEvidence",
    "redundancy.system.localTargetProfileFit"
  ],
  "metric_ownership": {
    "owner": "Compo20.04",
    "component_keys": [
      "redundancy.target.componentFit.semanticDispensability",
      "redundancy.target.componentFit.marginalEvidence",
      "redundancy.target.componentFit.overlapEvidence"
    ],
    "composite_key": "redundancy.system.localTargetProfileFit",
    "scoringGroup": "redundancy-local",
    "component_independentVoteAllowed": false,
    "composite_independentVoteAllowed": true,
    "independent_numeric_vote_count": 1
  },
  "redundancy_scoring_profile_schema": {
    "objectRedundancyScoringProfileRef": "stable identity",
    "scopeRef": "Topic20 scope",
    "semanticValueByVerdict": "explicit mapping for LOCALLY_REQUIRED / UNRESOLVED / NOT_ESTABLISHED_IN_DECLARED_MODEL to finite [0,1]",
    "marginalValueByEffectClass": "explicit mapping for POSITIVE_CONTRIBUTION / NO_OBSERVED_CHANGE / NEGATIVE_CONTRIBUTION / CHANGE_OBSERVED to finite [0,1] or null",
    "hypothesisValueByKind": "explicit mapping for four 20.00 hypothesis kinds to finite [0,1]",
    "rawComponentWeights": "explicit non-negative weights for semanticDispensability / marginalEvidence / overlapEvidence",
    "requireCompleteMarginalEvidence": "boolean",
    "requireExplicitOverlapEvidence": "boolean",
    "marginalAggregation": "MEAN_SELECTED_MARGINAL_VALUES",
    "hypothesisAggregation": "MEAN_SELECTED_HYPOTHESIS_VALUES",
    "subjectAggregation": "MEAN_SELECTED_SUBJECT_SCORES",
    "profileSourceRef": "explicit source",
    "profileSourceOwnerRef": "owner",
    "provenance": "canonical provenance; heuristic/style values remain explicit and non-universal",
    "status": "OK|INVALID",
    "mutationAllowed": false
  },
  "redundancy_target_profile_schema": {
    "objectRedundancyTargetProfileRef": "stable identity",
    "scopeRef": "scope",
    "selectedSubjectRefs[]": "explicit only",
    "semanticTargetBand": "inclusive finite [0,1] min/max",
    "marginalTargetBand": "inclusive finite [0,1] min/max",
    "overlapTargetBand": "inclusive finite [0,1] min/max",
    "systemRedundancyTargetBand": "inclusive finite [0,1] min/max; diagnostic redundancy amount target",
    "componentFitWeights": "explicit non-negative weights for the three component fits",
    "fitMode": "BINARY_INCLUSIVE_BAND_V1",
    "requireCompleteSelectedSubjects": true,
    "targetSourceRef": "explicit source",
    "targetSourceOwnerRef": "owner",
    "provenance": "canonical provenance; target is local/style/task-specific, never universal",
    "status": "OK|INVALID",
    "mutationAllowed": false
  },
  "object_redundancy_score_descriptor_schema": {
    "objectRedundancyScoreDescriptorRef": "stable identity",
    "objectContributionSystemSeedRef": "exact 20.00 seed",
    "objectContributionSubjectRef": "exact selected subject",
    "objectContributionDescriptorRef": "exact 20.02 descriptor",
    "objectRemovalAssessmentRef": "optional exact 20.03 assessment or null",
    "semanticComponent": "finite [0,1] when OK",
    "marginalComponent": "finite [0,1] when OK",
    "overlapComponent": "finite [0,1] when OK",
    "redundancyScore": "explicit weighted local evidence score in [0,1]; diagnostic, not a MetricResult and not an independent vote",
    "selectedMarginalRefs[]": "exact evidence lineage",
    "selectedHypothesisRefs[]": "exact evidence lineage",
    "removalCandidateRef": "optional 20.03 lineage only; excluded from numeric score",
    "decorativeContributionState": "copied lineage only; excluded from numeric score",
    "status": "OK|N_A|INVALID",
    "reasonCode": "SCORED|MISSING_REQUIRED_EVIDENCE|LINEAGE_MISMATCH|UPSTREAM_INVALID|INVALID_PROFILE",
    "provenance": "DERIVED",
    "mutationAllowed": false
  },
  "evaluation_set_schema": {
    "objectRedundancyEvaluationSetRef": "stable identity",
    "objectContributionSystemSeedRef": "exact root seed",
    "scoringProfileRef": "exact scoring profile",
    "targetProfileRef": "exact target profile",
    "selectedSubjectRefs[]": "explicit selected subjects",
    "scoreDescriptorRefs[]": "per-subject score descriptors",
    "systemRedundancyScore": "mean selected subject redundancyScore when complete; null on N_A/INVALID",
    "semanticAggregate": "mean subject semantic components",
    "marginalAggregate": "mean subject marginal components",
    "overlapAggregate": "mean subject overlap components",
    "componentMetricResultRefs[]": "three dependent MetricResults",
    "compositeMetricResultRef": "one composite MetricResult",
    "evaluationOutcome": "KEEP|N_A|INVALID",
    "status": "OK|N_A|INVALID",
    "mutationAllowed": false
  },
  "metric_result_schema": {
    "key": "metric key",
    "owner": "Compo20.04",
    "value": "finite [0,1] when applicable, null for N_A/INVALID",
    "applicability": "APPLICABLE|N_A|INVALID",
    "confidence": "finite [0,1] or null; 20.04 uses 1 only for complete deterministic local evaluation",
    "status": "OK|N_A|INVALID",
    "provenance": "DERIVED",
    "composite": "boolean",
    "componentOf": "redundancy.system.localTargetProfileFit or null",
    "dependsOn[]": "computational/recompute dependencies",
    "derivedFrom[]": "actual evidence lineage",
    "scoringGroup": "redundancy-local",
    "independentVoteAllowed": "false for components, true only for composite",
    "evidence": "structured local evidence summary",
    "repairHints[]": "diagnostic hints only; no automatic mutation"
  },
  "scoring_rules": [
    "Raw redundancyScore is profile-relative diagnostic evidence, not universal object quality.",
    "20.03 candidate eligibility and candidate ordinal are excluded from numeric redundancyScore to prevent circular scoring.",
    "Decorative contribution is preserved in lineage but excluded from redundancyScore by default; decorative != redundant.",
    "Semantic, marginal and overlap components are separately normalized only by explicit profile mappings.",
    "Missing required evidence yields N_A, never zero.",
    "Invalid upstream data yields INVALID, never zero.",
    "Zero redundancyScore is a valid observed score under an explicit complete profile.",
    "Target mismatch yields component fit 0 with status OK and evaluationOutcome KEEP.",
    "Exactly one Topic20 independent numeric vote exists: redundancy.system.localTargetProfileFit.",
    "Higher redundancyScore does not automatically authorize deletion and does not imply worse global quality."
  ],
  "status_policy": {
    "invalidScoringOrTargetProfile": "INVALID",
    "unknownSelectedSubject": "N_A",
    "objectDescriptorN_A": "N_A",
    "objectDescriptorInvalid": "INVALID",
    "marginalLineageMismatch": "N_A",
    "missingRequiredMarginalEvidence": "N_A",
    "missingRequiredOverlapEvidence": "N_A",
    "invalidMarginalOrHypothesisEvidence": "INVALID",
    "completeScore": "OK",
    "validScoreZero": "OK",
    "targetMismatch": "OK + KEEP + fit 0",
    "N_A_not_zero": true,
    "INVALID_not_zero": true
  },
  "critical_firewalls": [
    "redundancyScore != removal permission",
    "removal candidate != redundancyScore",
    "candidate ordinal != score",
    "decorative != redundant",
    "low hierarchy rank != redundant",
    "negative marginal contribution != universal redundancy",
    "zero observed change != universal redundancy",
    "explicit redundancy hypothesis != redundancy proof",
    "high redundancyScore != automatic delete",
    "high local target fit != final-layout winner",
    "N_A != 0",
    "INVALID != 0",
    "local != global",
    "descriptor != MetricResult",
    "heuristic != law",
    "correction request != foreign mutation",
    "module execution order != rule priority",
    "no universal beautyScore"
  ],
  "IDEAS_REFS": [
    "IDEA-01 calibrate redundancy evidence mappings against human removal review",
    "IDEA-02 compare high redundancyScore with accepted versus rejected removal candidates",
    "IDEA-03 study whether decorative loss should ever enter scoring in style-specific profiles",
    "IDEA-04 evaluate false positives caused by overlap hypotheses without ablation support",
    "IDEA-05 collect cases where high local redundancy improves or harms global composition"
  ],
  "DATA_CAPTURE": [
    "scopeRef",
    "objectContributionSystemSeedRef",
    "scoringProfileRef",
    "targetProfileRef",
    "selectedSubjectRefs[]",
    "objectRedundancyScoreDescriptorRefs[]",
    "semanticComponentBySubject",
    "marginalComponentBySubject",
    "overlapComponentBySubject",
    "redundancyScoreBySubject",
    "systemRedundancyScore",
    "componentMetricResultRefs[]",
    "compositeMetricResultRef",
    "removalAssessmentRefs[]",
    "removalCandidateRefs[]",
    "status",
    "reasonCode"
  ],
  "DEFERRED_SEMANTIC_INPUTS": [
    "global composition quality",
    "final-layout ranking",
    "actual content deletion or mutation",
    "human approval of reviewable removal candidates",
    "cross-topic balance/symmetry interactions from Topic21+"
  ],
  "HUMAN_FEEDBACK_HOOKS": [
    "correct redundancy scoring profile",
    "correct local target band",
    "correct semantic mapping",
    "correct marginal mapping",
    "correct overlap mapping",
    "mark false-positive redundancy score",
    "mark false-negative redundancy score",
    "approve removal candidate",
    "reject removal candidate",
    "mark decorative loss unacceptable"
  ],
  "CONFLICT_PRIORITY_ASSUMPTIONS": [
    "component order does not define importance; explicit weights do",
    "candidate order does not define quality",
    "confidence does not resolve evidence conflict",
    "hypothesis serialization order does not define authority",
    "module execution order does not imply rule priority",
    "future reviewed global conflict-priority owner remains authoritative"
  ],
  "LAB_HOOKS": [
    "human redundancy-score calibration study",
    "ablation-vs-human-removal agreement study",
    "decorative-loss acceptability study",
    "requirement protection false-positive study",
    "local redundancy versus global quality study",
    "profile sensitivity and stability study"
  ],
  "topic20ProgressAfterThisModule": "5/5 local",
  "next_step": "TOPIC20_CLOSING_AUDIT_SEPARATE_STEP",
  "hard_stop": "Do not implement Topic21 in this file."
}
VISITS / ...