COMPO · 14.04 · SCORING / CANDIDATES / TESTS

Score the target.
Not the taste.

14.04 закрывает Topic14: explicit target profile сравнивается с наблюдаемыми ratio/spatial/semantic/echo/subordination descriptors. Ровно один independent numeric vote — secondary.system.localSupportProfileFit. Repair candidates bounded, seeded, deterministic и non-mutating.

ModuleCompo 14.04
Targetexplicit
Compositeone vote
Candidatessingle-axis
Repairnon-mutating
Topic145/5 local

Observed → explicit target → one local vote

00 / contract
14.00 relation intent + 14.01 ratio + 14.02 spatial/semantic/echo + 14.03 observed state → observed set observed set + explicit target profile + explicit evaluation profile → component fits → secondary.system.localSupportProfileFit failed KEEP components + explicit routing + bounded generation policy → non-mutating repair candidates

Metric ownership

01 / ownership

Components

secondary.support.componentFit.<componentKey>
non-independent, componentOf composite.

Composite

secondary.system.localSupportProfileFit
only independent Topic14 vote.

Firewall

Local explicit target fit only — not beauty, not global hierarchy.

SecondaryRelationSupportTarget

02 / target
ComponentExplicit target
weightRatioIGNORE | RANGE
directionOppositionIGNORE | RANGE
radialLeverageIGNORE | RANGE
semanticRelationIGNORE | ANY_OF
semanticEvidenceConflictIGNORE | REQUIRE_TRUE | REQUIRE_FALSE
echoSimilarityfeature-specific RANGE + explicit weight multiplier
subordinationStateIGNORE | ANY_OF
No universal target.

SUBORDINATED may be wanted or unwanted; COMPETING and INVERTED may also be explicitly allowed. Target cannot invent a support function absent from 14.00 intent.

Binding is compatibility, not satisfaction

03 / binding
weight target → exact required 14.01 aggregationPolicyRef spatial target → exact required 14.02 spatialAnchorPolicyRef state target → exact required 14.03 competitionPolicyRef policy mismatch → N_A lineage mismatch → INVALID binding PASS != target satisfied

No implicit equal weights

04 / evaluation
SecondarySupportEvaluationProfile {
  relationWeightsByRelationRef {},
  componentWeights {
    weightRatio, directionOpposition, radialLeverage,
    semanticRelation, semanticEvidenceConflict,
    echoSimilarity, subordinationState
  },
  missingObservedEvidencePolicy: PROPAGATE_N_A
}
instanceWeight = relationWeight × componentWeight × echoFeatureWeightMultiplier fit components under KEEP are binary {0,1}.

secondary.system.localSupportProfileFit

05 / composite-first
localSupportProfileFit = Σ(instanceWeight × componentFit) / Σ(instanceWeight) domain under KEEP: [0,1] components: independentVoteAllowed=false composite: independentVoteAllowed=true scoringGroup: secondary-support-local

INVALID > N_A > KEEP

06 / status
mismatch with complete evidence → KEEP + 0 match → KEEP + 1 explicit target IGNORE → denominator excluded missing required evidence → N_A invalid required evidence → INVALID 0 != N_A 0 != INVALID Topic14 v1 has no mismatch REJECT.

Bounded single-axis repair candidates

07 / candidates
failed component (KEEP + 0) → explicit route → at most one single-axis proposal hard filter allowedActionKinds seeded deterministic identity deduplicate canonical serialization no full Cartesian product overflow → N_A, no truncation candidate != mutation candidate != better-layout proof

Target fit is not taste

08 / firewalls
Forbidden

SUBORDINATED→good; INVERTED→bad; mismatch→REJECT; missing→0; components vote independently; equal weights by default; candidate→mutation.

Preserved

explicit target/weights; one independent vote; composite-first; N_A != 0; bounded seeded repair; local != global.

Topic14 chain

09 / integration
ModuleOwns
14.00roles, intents, relation seeds
14.01weight ratios
14.02spatial / semantic / echo descriptors
14.03competition flags / observed subordination
14.04explicit target fit / one composite / repair candidates
Compo18generic hierarchy/subordination graph remains separate

CANON → LAB → DATA → IDEAS

10 / hooks
IDEAS_REFS[]7 refs
DATA_CAPTURE[]target, weights, metrics, candidates
DEFERRED_SEMANTIC_INPUTS[]global winner and learned defaults deferred
HUMAN_FEEDBACK_HOOKS[]target/score/repair feedback
CONFLICT_PRIORITY_ASSUMPTIONS[]weights are not global priority
LAB_HOOKS[]human fit/repair studies

14.04 final regression suite

11 / tests
Tests not run yet.

DATA FOR LAYOUT ENGINE

12 / machine contract
{
  "module": "Compo 14.04",
  "name": "scoring_candidates_and_tests",
  "version": "1.0-canonical",
  "canonical_main_title": "Scoring, candidates and tests",
  "topic": "14_ВТОРИЧНЫЕ_МАССЫ_И_ПОДДЕРЖКА",
  "scope": "EXPLICIT_SECONDARY_SUPPORT_TARGET_PROFILE_BINDING_COMPONENT_FIT_COMPOSITE_LOCAL_SUPPORT_SCORE_BOUNDED_REPAIR_CANDIDATES_AND_TOPIC14_FINAL_REGRESSION_ONLY",
  "main_topic_contract": {
    "topic_title": "Вторичные массы и поддержка",
    "topic_goal": "Описывает вторичные массы как поддержку доминанты: counterweight, spatial support, echo/repetition и контроль конкуренции с главным элементом.",
    "expected_output": "SecondaryMassRelation[], support score, competition flags",
    "planned_files": [
      "14.00 Secondary role system",
      "14.01 Secondary-to-dominant weight ratios",
      "14.02 Spatial counterweight and semantic support",
      "14.03 Competition detection / subordination",
      "14.04 Scoring, candidates and tests"
    ]
  },
  "ownership": {
    "owner": "Compo14.04",
    "owns": [
      "SecondarySupportObservedRelation adapter",
      "SecondarySupportObservedSet",
      "SecondarySupportRangeConstraint",
      "SecondarySupportSemanticRelationConstraint",
      "SecondarySupportSemanticConflictConstraint",
      "SecondarySupportEchoSimilarityTarget",
      "SecondarySupportSubordinationStateConstraint",
      "SecondaryRelationSupportTarget",
      "SecondarySupportTargetProfile",
      "SecondarySupportTargetBinding",
      "SecondarySupportEvaluationProfile",
      "secondary.support.componentFit.<componentKey> MetricResult family",
      "secondary.system.localSupportProfileFit composite MetricResult",
      "SecondarySupportTargetEvaluation",
      "SecondarySupportRepairActionKind taxonomy",
      "SecondarySupportRepairRoutingPolicy",
      "SecondarySupportCandidateGenerationPolicy",
      "SecondarySupportCorrectionRequest",
      "SecondarySupportRepairCandidate",
      "SecondarySupportRepairCandidateSet",
      "same-target/same-evaluation-profile comparison contract",
      "final Topic14 runtime regression contract"
    ],
    "does_not_own": [
      "visual mass calculation — Compo4",
      "secondary role evidence / support intent / relation seed — Compo14.00",
      "weight-ratio calculation — Compo14.01",
      "spatial counterweight / semantic support / echo evidence calculation — Compo14.02",
      "competition rule evaluation / observed subordination state — Compo14.03",
      "observed dominance / focal ranking / leader-set identity — Compo13",
      "generic hierarchy/subordination graph — Compo18",
      "global hierarchy priority",
      "global balance ownership",
      "universal support target profile",
      "universal support component weights",
      "automatic foreign mutation or repair execution"
    ]
  },
  "owns_metrics": [
    "secondary.support.componentFit.<componentKey>",
    "secondary.system.localSupportProfileFit"
  ],
  "metric_ownership": {
    "component_family": {
      "key_pattern": "secondary.support.componentFit.<componentKey>",
      "owner": "Compo14.04",
      "composite": false,
      "componentOf": "secondary.system.localSupportProfileFit",
      "scoringGroup": "secondary-support-local",
      "independentVoteAllowed": false
    },
    "only_independent_vote": {
      "key": "secondary.system.localSupportProfileFit",
      "owner": "Compo14.04",
      "composite": true,
      "componentOf": null,
      "scoringGroup": "secondary-support-local",
      "independentVoteAllowed": true,
      "meaning": "EXPLICIT_TOPIC14_SECONDARY_SUPPORT_TARGET_PROFILE_FIT_ONLY"
    }
  },
  "component_fit_contract": {
    "componentKeys": [
      "weightRatio",
      "directionOpposition",
      "radialLeverage",
      "semanticRelation",
      "semanticEvidenceConflict",
      "echoSimilarity",
      "subordinationState"
    ],
    "fitDomain": "{0,1} under KEEP",
    "rangeFit": "inclusive range => 1 else 0",
    "semanticRelationFit": "ANY_OF intersection => 1 else 0",
    "semanticConflictFit": "required boolean equality => 1 else 0",
    "echoFit": "feature similarity within target inclusive range => 1 else 0",
    "subordinationFit": "observed state in explicit allowedStates => 1 else 0",
    "targetIgnore": "component not instantiated / denominator excluded because target explicitly declared IGNORE",
    "missingObservedEvidence": "component/result N_A and whole composite N_A",
    "invalidObservedEvidence": "component/result INVALID and whole composite INVALID",
    "firewall": "target mismatch produces numeric 0 under KEEP; it does not become N_A, INVALID or REJECT"
  },
  "composite_formula": {
    "instanceWeight": "relationWeight * componentWeight * echoFeatureWeightMultiplier(if echo feature; otherwise 1)",
    "value": "sum(instanceWeight * componentFit) / sum(instanceWeight)",
    "domain": "[0,1] under KEEP",
    "noApplicableComponents": "N_A",
    "anyInvalid": "INVALID",
    "anyRequiredNA": "N_A",
    "otherwise": "KEEP",
    "firewall": "value measures explicit Topic14 target-profile fit only; it is not global composition quality or beauty"
  },
  "evaluation_status_precedence": {
    "order": "INVALID > N_A > KEEP",
    "targetMismatch": "numeric 0 under KEEP",
    "rejectState": "NONE in Topic14 v1",
    "zero": "valid complete mismatch; 0 != N_A and 0 != INVALID",
    "firewall": "support target mismatch is not a hard reject"
  },
  "target_contract": {
    "rangeModes": [
      "IGNORE",
      "RANGE"
    ],
    "semanticRelationModes": [
      "IGNORE",
      "ANY_OF"
    ],
    "semanticConflictModes": [
      "IGNORE",
      "REQUIRE_TRUE",
      "REQUIRE_FALSE"
    ],
    "stateModes": [
      "IGNORE",
      "ANY_OF"
    ],
    "intentCompatibility": {
      "directionOpposition/radialLeverage": "requires COUNTERWEIGHT or SPATIAL_SUPPORT",
      "semantic relation/conflict": "requires SEMANTIC_SUPPORT",
      "echoSimilarity": "requires ECHO_REPETITION",
      "weightRatio": "allowed for any explicit secondary relation"
    },
    "default": "NONE — no universal target profile or subordination preference"
  },
  "target_binding_contract": {
    "checks": [
      "exact target relation exists",
      "weight target uses required 14.01 aggregation policy ref",
      "spatial target uses required 14.02 spatial-anchor policy ref",
      "state target uses required 14.03 competition policy ref"
    ],
    "policyMismatch": "N_A",
    "lineageMismatch": "INVALID",
    "firewall": "binding checks compatibility only; target binding != target satisfaction"
  },
  "evaluation_profile_contract": {
    "relationWeights": "explicit positive weight for every targeted relation",
    "componentWeights": {
      "weightRatio": "explicit >=0; must be >0 when active",
      "directionOpposition": "explicit >=0; must be >0 when active",
      "radialLeverage": "explicit >=0; must be >0 when active",
      "semanticRelation": "explicit >=0; must be >0 when active",
      "semanticEvidenceConflict": "explicit >=0; must be >0 when active",
      "echoSimilarity": "explicit >=0; must be >0 when active",
      "subordinationState": "explicit >=0; must be >0 when active"
    },
    "missingObservedEvidencePolicy": "PROPAGATE_N_A only in v1",
    "default": "NONE — no implicit equal relation/component weights"
  },
  "repair_action_kind_taxonomy": {
    "REQUEST_WEIGHT_RATIO_ADJUSTMENT": "weight_ratio_adjustment",
    "REQUEST_SPATIAL_POSITION_ADJUSTMENT": "spatial_position_adjustment",
    "REQUEST_SEMANTIC_RELATION_REVIEW": "semantic_relation_review",
    "REQUEST_ECHO_REPETITION_REVIEW": "echo_repetition_review",
    "REQUEST_COMPETITION_SUBORDINATION_REVIEW": "competition_subordination_review"
  },
  "repair_routing_policy_schema": {
    "routeByComponentKey": "explicit component -> {actionKind,targetOwnerRef}",
    "mutationAllowed": false,
    "firewall": "routing does not grant mutation permission and evaluation weights are not repair priority"
  },
  "candidate_generation_policy_schema": {
    "allowedActionKinds": "explicit non-empty subset",
    "maxCandidates": "integer 1..4096",
    "seed": "explicit deterministic string",
    "singleAxisOnly": "true in v1",
    "deduplicate": "true",
    "firewall": "one single-axis proposal per failed component instance; no Cartesian product; no automatic mutation"
  },
  "repair_candidate_set_schema": {
    "noFailedComponents": "OK empty set",
    "failedButNoRoutableCandidates": "N_A",
    "overflow": "N_A; no truncation",
    "candidateOrder": "canonical serialization only, not preference"
  },
  "comparison_contract": {
    "requires": [
      "same SecondarySupportTargetProfileRef",
      "same SecondarySupportEvaluationProfileRef",
      "same upstream policy lineage",
      "same snapshot lineage"
    ],
    "forbids": [
      "cross-target-profile ranking",
      "cross-evaluation-profile ranking",
      "treating higher localSupportProfileFit as automatic final-layout winner",
      "using evaluation weights as global rule priority"
    ]
  },
  "critical_firewalls": [
    "observed secondary relation != desired secondary relation",
    "observed subordination state != target subordination state",
    "SUBORDINATED is not universally good",
    "COMPETING is not universally bad",
    "INVERTED is not universally bad",
    "target profile must be explicit",
    "no universal support target profile",
    "no universal preferred weight ratio",
    "no universal preferred opposition",
    "no universal preferred radial leverage",
    "no universal semantic relation target",
    "no universal echo similarity target",
    "no universal subordination target",
    "target cannot invent undeclared support function",
    "target binding != target satisfaction",
    "target profile != score",
    "target mismatch may produce numeric 0 under KEEP",
    "numeric 0 under KEEP != N_A",
    "numeric 0 under KEEP != INVALID",
    "target mismatch != REJECT",
    "N_A != 0",
    "INVALID != 0",
    "target-declared IGNORE may remove denominator only explicitly",
    "missing required observed evidence cannot silently drop denominator",
    "missing required observed evidence => N_A",
    "invalid observed evidence => INVALID",
    "component metric != independent numeric vote",
    "component metrics cannot vote independently",
    "only one independent Topic14 numeric vote",
    "secondary.system.localSupportProfileFit != global composition quality",
    "secondary.system.localSupportProfileFit != beautyScore",
    "secondary.system.localSupportProfileFit != global hierarchy quality",
    "higher localSupportProfileFit != automatic final-layout winner",
    "weight ratio != independent vote",
    "directionOppositionCosine != independent vote",
    "radialLeverageRatio != independent vote",
    "semantic relation != independent vote",
    "semantic conflict flag != independent vote",
    "echo similarity != independent vote",
    "competition flag != independent vote",
    "inversion flag != independent vote",
    "observed subordination state != independent vote",
    "flag count != score",
    "candidate count != score",
    "relation count != score",
    "no implicit equal relation weights",
    "no implicit equal component weights",
    "no implicit equal echo-feature weights",
    "evaluation weights != global rule priority",
    "candidate order != repair priority",
    "candidate generation is bounded",
    "candidate generation is seeded",
    "candidate generation is deterministic",
    "candidate generation is reproducible",
    "candidate generation is lineage-aware",
    "candidate generation is audit-friendly",
    "candidate generation is deduplicated",
    "no full Cartesian candidate product",
    "candidate overflow => N_A, no truncation",
    "repair candidate != applied mutation",
    "correction request != foreign mutation",
    "visual mass ownership remains Compo4",
    "secondary role ownership remains Compo14.00",
    "weight-ratio ownership remains Compo14.01",
    "spatial/semantic/echo ownership remains Compo14.02",
    "competition/subordination ownership remains Compo14.03",
    "dominance ownership remains Compo13",
    "generic hierarchy/subordination graph remains Compo18 territory",
    "global hierarchy is not owned by 14.04",
    "global balance is not owned by 14.04",
    "local != global",
    "descriptor != score unless explicit MetricResult owner says so",
    "one metric = one owner",
    "module execution order != rule priority",
    "no universal beautyScore",
    "IDEA != CANON",
    "EXPERIMENT != CANON"
  ],
  "identity_policy": {
    "secondarySupportObservedRelationRef": "stable hash over exact canonical lineage and policy-bearing fields",
    "secondarySupportObservedSetRef": "stable hash over exact canonical lineage and policy-bearing fields",
    "secondaryRelationSupportTargetRef": "stable hash over exact canonical lineage and policy-bearing fields",
    "secondarySupportTargetProfileRef": "stable hash over exact canonical lineage and policy-bearing fields",
    "secondarySupportTargetBindingRef": "stable hash over exact canonical lineage and policy-bearing fields",
    "secondarySupportEvaluationProfileRef": "stable hash over exact canonical lineage and policy-bearing fields",
    "metricResultRef": "stable hash over exact canonical lineage and policy-bearing fields",
    "secondarySupportTargetEvaluationRef": "stable hash over exact canonical lineage and policy-bearing fields",
    "secondarySupportRepairRoutingPolicyRef": "stable hash over exact canonical lineage and policy-bearing fields",
    "secondarySupportCandidateGenerationPolicyRef": "stable hash over exact canonical lineage and policy-bearing fields",
    "secondarySupportCorrectionRequestRef": "stable hash over exact canonical lineage and policy-bearing fields",
    "secondarySupportRepairCandidateRef": "stable hash over exact canonical lineage and policy-bearing fields",
    "secondarySupportRepairCandidateSetRef": "stable hash over exact canonical lineage and policy-bearing fields"
  },
  "IDEAS_REFS": [
    "IDEA-01 full human test after all 72 topics; compare local support-profile fit and generated repairs with human judgment",
    "IDEA-02 semantics needed before placement; semantic target constraints remain explicit and owner-qualified",
    "IDEA-03 explicit rule priorities; evaluation weights and candidate serialization never become global rule priority",
    "IDEA-04 collect structured data for future composition model",
    "IDEA-05 preserve reasons for human corrections",
    "IDEA-06 structured machine-readable layer for website",
    "IDEA-07 graphics-for-post-text research remains downstream/separate"
  ],
  "DATA_CAPTURE": [
    "sceneRef",
    "secondarySupportObservedSetRef",
    "secondarySupportObservedRelationRefs[]",
    "secondarySupportTargetProfileRef",
    "secondaryRelationSupportTargetRefs[]",
    "secondarySupportTargetBindingRef",
    "secondarySupportEvaluationProfileRef",
    "relationWeightsByRelationRef",
    "componentWeights",
    "componentMetricResultRefs[]",
    "componentFitByRelationAndKey",
    "secondary.system.localSupportProfileFit",
    "compositeMetricResultRef",
    "evaluationStatus",
    "secondarySupportRepairRoutingPolicyRef",
    "secondarySupportCandidateGenerationPolicyRef",
    "secondarySupportCorrectionRequestRefs[]",
    "secondarySupportRepairCandidateRefs[]",
    "candidateActionKindsByRelation",
    "humanReasonCodes[]",
    "comparisonTargetProfileRef",
    "comparisonEvaluationProfileRef"
  ],
  "DEFERRED_SEMANTIC_INPUTS": [
    "global desirability of secondary support",
    "global hierarchy priority",
    "final-layout winner selection",
    "style-level learned default profiles",
    "learned evaluation weights",
    "automatic repair execution"
  ],
  "HUMAN_FEEDBACK_HOOKS": [
    "SUPPORT_TARGET_PROFILE_WRONG",
    "RELATION_TARGET_WRONG",
    "WEIGHT_RATIO_TARGET_TOO_LOW",
    "WEIGHT_RATIO_TARGET_TOO_HIGH",
    "OPPOSITION_TARGET_TOO_LOW",
    "OPPOSITION_TARGET_TOO_HIGH",
    "LEVERAGE_TARGET_TOO_LOW",
    "LEVERAGE_TARGET_TOO_HIGH",
    "SEMANTIC_RELATION_TARGET_WRONG",
    "SEMANTIC_CONFLICT_TARGET_WRONG",
    "ECHO_TARGET_FEATURE_WRONG",
    "ECHO_TARGET_RANGE_WRONG",
    "SUBORDINATION_TARGET_WRONG",
    "RELATION_WEIGHT_WRONG",
    "COMPONENT_WEIGHT_WRONG",
    "ECHO_FEATURE_WEIGHT_WRONG",
    "LOCAL_SUPPORT_FIT_TOO_HIGH",
    "LOCAL_SUPPORT_FIT_TOO_LOW",
    "REPAIR_ROUTE_WRONG",
    "REPAIR_ACTION_WRONG",
    "REPAIR_CANDIDATE_SHOULD_BE_INCLUDED",
    "REPAIR_CANDIDATE_SHOULD_BE_EXCLUDED",
    "CANDIDATE_OVERFLOW_POLICY_WRONG",
    "HIGHER_LOCAL_SUPPORT_FIT_GLOBALLY_WORSE"
  ],
  "CONFLICT_PRIORITY_ASSUMPTIONS": [
    "module execution order is not priority",
    "relation weight is evaluation weight, not global rule priority",
    "component weight is evaluation weight, not global rule priority",
    "echo feature multiplier is evaluation weight, not global rule priority",
    "candidate serialization order is not repair priority",
    "routing owner does not imply authority to mutate",
    "future reviewed global conflict-priority owner remains authoritative"
  ],
  "LAB_HOOKS": [
    "human study: localSupportProfileFit versus perceived support quality",
    "compare profiles that explicitly allow COMPETING or INVERTED secondaries",
    "compare binary range fit with future empirically learned response curves without changing canon automatically",
    "evaluate whether relation/component weights match human judgments",
    "evaluate whether repair candidates are actionable and correctly routed",
    "collect cases where higher local support fit produces worse global composition",
    "collect deliberate-tension scenes where SUBORDINATED target is undesirable"
  ],
  "observation_record": {
    "moduleRef": "Compo14.04",
    "onlyIndependentMetric": "secondary.system.localSupportProfileFit",
    "metricResults": [],
    "repairCandidateRefs": []
  },
  "stop_condition": "STOP after 14.04. Topic14 canonical submodules are 5/5 locally; closing audit must be a separate step."
}
VISITS / ...