COMPO · 18.04 · CORRECTION, SCORING AND TESTS

Score locally.
Correct by owner.

18.04 завершает Topic 18: принимает только уже сформированные hierarchy descriptors из 18.00–18.03, сравнивает их с явным локальным target profile, создаёт четыре зависимых MetricResult и один composite vote. Коррекция остаётся bounded owner-routed request и ничего не мутирует автоматически.

ModuleCompo 18.04
Components4 dependent
Independent1 composite
Mismatch0 + KEEP
Generatorbounded
Topic 185/5 local

Evaluation after detection

00 / contract
18.00 graph + 18.01 weight-envelope descriptors + 18.02 channel-constraint descriptors + 18.03 competition / inversion descriptors + explicit 18.04 target + evaluation profiles → 4 dependent MetricResults → ONE local composite vote → bounded owner-routed correction requests Topic 18 stops here.

Evaluation owner, not hierarchy-truth owner

01 / ownership
OWNS

Local target fit

Explicit target/evaluation profiles and Topic18 MetricResults.

OWNS

Correction requests

Bounded deterministic owner-routed requests under KEEP.

DOES NOT OWN

Upstream truth

Graph, envelopes, constraints, competition and inversion remain immutable upstream evidence.

Four explicit target components

02 / target profile
ComponentObserved sourceTypical explicit state
weightEnvelope18.01WITHIN
channelConstraints18.02WITHIN / ABOVE
competition18.03CLEAR
inversion18.03NOT_INVERTED
No universal target: каждый accepted state и каждый component weight объявляются явно. Компонент можно пометить IGNORE.

Composite-first scoring

03 / MetricResult
4 component MetricResults
  subordination.target.componentFit.weightEnvelope
  subordination.target.componentFit.channelConstraints
  subordination.target.componentFit.competition
  subordination.target.componentFit.inversion

all:
  owner = Compo18.04
  composite = false
  componentOf = subordination.system.localTargetProfileFit
  scoringGroup = subordination-local
  independentVoteAllowed = false

1 composite MetricResult
  key = subordination.system.localTargetProfileFit
  owner = Compo18.04
  composite = true
  componentOf = null
  scoringGroup = subordination-local
  independentVoteAllowed = true
Exactly one vote.

Topic18 independent numeric vote count = 1. Ни один upstream descriptor и ни один component metric не голосует отдельно.

0, N_A and INVALID stay different

04 / semantics

Target mismatch

fit = 0, status OK, evaluationOutcome = KEEP.

Missing / lineage

N_A. Нет догадок и нет generator guessing.

Invalid upstream

INVALID. Не превращается в числовой ноль.

Compare only like with like

05 / comparability
local fit A vs B is comparable only when: same SubordinationTargetProfile + same SubordinationEvaluationProfile + same observed evidence refs cross-target comparison → N_A cross-profile comparison → N_A

Bounded correction generation

06 / non-mutating
ALLOWED

KEEP + failed component

Explicit route, explicit seed, maxCandidates 1..64, hard filter, deduplication, diversity pruning.

FORBIDDEN

N_A / INVALID / mutation

No guessed repair, no Cartesian product, no direct geometry/style/semantic mutation.

correction request != repaired layout ordinal != score route owner != automatic ownership transfer candidate generation != final-layout ranking

Local hierarchy fit is not global quality

07 / firewalls
subordination.system.localTargetProfileFit != beautyScore != dominance score != visual mass score != semantic importance != Topic19 correlation-aware hierarchy != final-layout rank COMPETING != automatic reject INVERTED != automatic reject higher local fit != automatic winner

Topic boundary remains clean

08 / owners
18.00Hierarchy roles, relations and graph identity.
18.01Role-level weight envelopes and observed positions.
18.02SIZE / CONTRAST / ISOLATION constraints and directed descriptors.
18.03Competition, inversion and SubordinationViolation records.
18.04Local target scoring and owner-routed correction requests.
Topic19Correlation-aware multi-signal observed visual hierarchy.

CANON → LAB → DATA → IDEAS

09 / mandatory hooks
IDEAS_REFS[]Human hierarchy calibration remains research.
DATA_CAPTURE[]Profiles, evidence, metrics and correction requests.
DEFERRED_SEMANTIC_INPUTS[]Topic19/global ranking remain downstream.
HUMAN_FEEDBACK_HOOKS[]Target and correction feedback preserved.
CONFLICT_PRIORITY_ASSUMPTIONS[]Weights are local, not global priority.
LAB_HOOKS[]Competition/inversion acceptance studies.

18.04 regression suite

10 / deterministic tests

Tests cover explicit targets, four dependent metrics, exact one-vote rule, mismatch/N_A/INVALID separation, comparability, bounded owner-routed correction generation, upstream immutability and Topic19/global-quality firewalls.

Tests not run yet.

DATA FOR LAYOUT ENGINE

11 / machine contract
{
  "module": "Compo 18.04",
  "name": "correction_scoring_and_tests",
  "version": "1.0-canonical",
  "canonical_main_title": "Correction, scoring and tests",
  "topic": "18_СУБОРДИНАЦИЯ_И_ПОДЧИНЕНИЕ_ЭЛЕМЕНТОВ",
  "scope": "EXPLICIT_LOCAL_SUBORDINATION_TARGET_EVALUATION_ONE_COMPOSITE_METRICRESULT_AND_BOUNDED_OWNER_ROUTED_NONMUTATING_CORRECTION_REQUESTS_ONLY",
  "main_topic_contract": {
    "topic_title": "Субординация и подчинение элементов",
    "topic_goal": "Строит subordination graph для primary/secondary/tertiary/decorative roles и отслеживает случаи, когда нижний уровень начинает визуально спорить с верхним.",
    "expected_output": "HierarchyRelation graph, subordination violations, correction requests",
    "planned_files": [
      "18.00 Subordination graph",
      "18.01 Weight envelopes by hierarchy level",
      "18.02 Contrast/size/isolation constraints",
      "18.03 Competition and inversion detection",
      "18.04 Correction, scoring and tests"
    ]
  },
  "ownership": {
    "owner": "Compo18.04",
    "owns": [
      "SubordinationTargetProfile",
      "SubordinationEvaluationProfile",
      "Topic18 component MetricResults",
      "Topic18 composite MetricResult subordination.system.localTargetProfileFit",
      "SubordinationRepairRoute",
      "SubordinationRepairCandidateSetPolicy",
      "SubordinationCorrectionRequest",
      "SubordinationRepairCandidateSet",
      "explicit local target evaluation over 18.01/18.02/18.03 descriptors",
      "Topic18 independent numeric vote budget",
      "bounded deterministic owner-routed correction generation",
      "final Topic18 regression tests"
    ],
    "does_not_own": [
      "HierarchyRole / HierarchySubject / HierarchyRelation / SubordinationGraph identity — Compo18.00",
      "weight channels / hierarchy-level envelopes / envelope descriptors — Compo18.01",
      "size/contrast/isolation bindings / constraints / comparison values — Compo18.02",
      "competition/inversion verdicts and SubordinationViolation identity — Compo18.03",
      "raw visual mass measurement — Compo4",
      "dominance / focal ranking — Compo13",
      "attention factors — Compo13.01",
      "microdetail semantics — Topic15",
      "object-to-object scale relations — Topic16",
      "aspect ratio / part-to-whole proportions — Topic17",
      "multi-signal observed visual hierarchy / correlation-aware aggregation — Topic19",
      "semantic importance",
      "global balance",
      "final-layout ranking",
      "universal beautyScore",
      "foreign geometry/style/semantic mutation"
    ]
  },
  "consumes": [
    "valid Compo18.00 hierarchy graph lineage",
    "valid Compo18.01 HierarchyWeightEnvelopeDescriptor observations",
    "valid Compo18.02 HierarchyConstraintDescriptor observations",
    "valid Compo18.03 HierarchyRelationCompetitionDescriptor and SubordinationViolation observations",
    "explicit SubordinationTargetProfile",
    "explicit SubordinationEvaluationProfile",
    "explicit owner-qualified repair routes"
  ],
  "provides": [
    "four dependent Topic18 component MetricResults",
    "one composite MetricResult subordination.system.localTargetProfileFit",
    "same-target/same-profile local comparison",
    "bounded SubordinationCorrectionRequest[]",
    "SubordinationRepairCandidateSet",
    "Topic18 completion contract"
  ],
  "metric_contract": {
    "component_keys": [
      "subordination.target.componentFit.weightEnvelope",
      "subordination.target.componentFit.channelConstraints",
      "subordination.target.componentFit.competition",
      "subordination.target.componentFit.inversion"
    ],
    "composite_key": "subordination.system.localTargetProfileFit",
    "scoringGroup": "subordination-local",
    "component_independentVoteAllowed": false,
    "composite_independentVoteAllowed": true,
    "independent_numeric_vote_count": 1,
    "constitution": [
      "one metric = one owner",
      "composite-first scoring",
      "N_A != 0",
      "INVALID != 0",
      "local != global",
      "descriptor != score"
    ]
  },
  "target_profile_contract": {
    "selectionMode": "EXPLICIT_ONLY",
    "components": [
      "weightEnvelope",
      "channelConstraints",
      "competition",
      "inversion"
    ],
    "target_declared_na_allowed": true,
    "no_implicit_equal_weights": true,
    "no_universal_hierarchy_target": true
  },
  "evaluation_semantics": {
    "TARGET_MATCH": "fit in [0,1]",
    "TARGET_MISMATCH": "fit 0 + status OK + evaluationOutcome KEEP",
    "TARGET_DECLARED_NA": "component N_A and excluded from denominator",
    "MISSING_OBSERVED": "composite N_A",
    "LINEAGE_MISMATCH": "composite N_A",
    "UPSTREAM_INVALID": "composite INVALID",
    "zero_is_valid_numeric_mismatch": true
  },
  "generator_contract": {
    "generationMode": "FAILED_APPLICABLE_COMPONENTS_ONLY",
    "evaluationOutcomeRequired": "KEEP",
    "seed": "EXPLICIT",
    "maxCandidates": "1..64",
    "fullCartesianProductAllowed": false,
    "generationOnNA": false,
    "generationOnInvalid": false,
    "hardFilterInvalidRoutes": true,
    "deduplication": "IDENTITY_EQUIVALENT_CORRECTION_REQUEST",
    "diversityPruning": "MAX_ONE_PER_COMPONENT_REPAIR_KIND_IN_V1",
    "candidate_is_repaired_layout": false,
    "mutationAllowed": false
  },
  "firewalls": [
    "18.04 target profile does not redefine 18.00 graph",
    "18.04 target profile does not redefine 18.01 envelopes",
    "18.04 target profile does not redefine 18.02 constraints",
    "18.04 target profile does not redefine 18.03 categorical verdicts",
    "higher local fit != final-layout winner",
    "competition != automatic reject",
    "inversion != automatic reject",
    "correction request != foreign mutation",
    "generator ordinal != score",
    "cross-target comparison forbidden",
    "cross-evaluation-profile comparison forbidden",
    "Topic19 remains owner of correlation-aware multi-signal visual hierarchy"
  ],
  "IDEAS_REFS": [
    "IDEA-01 compare declared hierarchy target fit with later human judgement after all topics",
    "IDEA-02 study style-specific acceptable competition without universal hierarchy law",
    "IDEA-03 preserve categorical upstream evidence separately from numeric target fit",
    "IDEA-04 collect correction reasons for future supervised hierarchy model",
    "IDEA-05 compare local Topic18 fit with Topic19 observed multi-signal hierarchy without ownership merge",
    "IDEA-06 structured machine-readable correction layer for website/workbench",
    "IDEA-07 final-layout ranking remains downstream/separate"
  ],
  "DATA_CAPTURE": [
    "sceneRef",
    "scopeRef",
    "snapshotRef",
    "subordinationGraphRef",
    "subordinationTargetProfileRef",
    "subordinationEvaluationProfileRef",
    "weightEnvelopeObservationRefs[]",
    "constraintObservationRefs[]",
    "competitionDescriptorRefs[]",
    "subordinationViolationRefs[]",
    "componentMetricResultRefs[]",
    "compositeMetricResultRef",
    "failedApplicableComponentKeys[]",
    "correctionRequestRefs[]",
    "repairCandidateSetRef",
    "evaluationOutcome",
    "status",
    "reasonCode"
  ],
  "DEFERRED_SEMANTIC_INPUTS": [
    "Topic19 correlation-aware observed visual hierarchy",
    "global semantic importance",
    "global balance",
    "final-layout ranking",
    "human aesthetic judgement"
  ],
  "HUMAN_FEEDBACK_HOOKS": [
    "correct target profile",
    "correct component weight",
    "mark target component N_A",
    "correct repair route owner",
    "explain acceptable competition",
    "explain acceptable inversion",
    "reject suggested correction",
    "record preferred correction"
  ],
  "CONFLICT_PRIORITY_ASSUMPTIONS": [
    "evaluation weights are local aggregation weights, not global rule priority",
    "component order has no semantic priority",
    "competition and inversion categories remain upstream evidence",
    "no component receives an independent vote",
    "module execution order does not imply final-layout priority"
  ],
  "LAB_HOOKS": [
    "human hierarchy-vs-local-fit calibration",
    "competition acceptability study",
    "inversion acceptability study",
    "repair effectiveness study",
    "cross-style target-profile study",
    "Topic18-vs-Topic19 disagreement study",
    "human correction reason taxonomy"
  ],
  "topic18_local_completion": "18.00–18.04 implemented; closing audit remains a separate audit artifact, not a sixth canonical submodule.",
  "next_step": "COMPO_TOPIC_18_CLOSING_AUDIT_FINAL.html",
  "hard_stop": "Do not implement Topic19 in this file."
}
VISITS / ...