Observed → explicit target → one local vote
Metric 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
| Component | Explicit target |
|---|---|
| weightRatio | IGNORE | RANGE |
| directionOpposition | IGNORE | RANGE |
| radialLeverage | IGNORE | RANGE |
| semanticRelation | IGNORE | ANY_OF |
| semanticEvidenceConflict | IGNORE | REQUIRE_TRUE | REQUIRE_FALSE |
| echoSimilarity | feature-specific RANGE + explicit weight multiplier |
| subordinationState | IGNORE | ANY_OF |
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
No implicit equal weights
SecondarySupportEvaluationProfile {
relationWeightsByRelationRef {},
componentWeights {
weightRatio, directionOpposition, radialLeverage,
semanticRelation, semanticEvidenceConflict,
echoSimilarity, subordinationState
},
missingObservedEvidencePolicy: PROPAGATE_N_A
}secondary.system.localSupportProfileFit
INVALID > N_A > KEEP
Bounded single-axis repair candidates
Target fit is not taste
SUBORDINATED→good; INVERTED→bad; mismatch→REJECT; missing→0; components vote independently; equal weights by default; candidate→mutation.
explicit target/weights; one independent vote; composite-first; N_A != 0; bounded seeded repair; local != global.
Topic14 chain
| Module | Owns |
|---|---|
| 14.00 | roles, intents, relation seeds |
| 14.01 | weight ratios |
| 14.02 | spatial / semantic / echo descriptors |
| 14.03 | competition flags / observed subordination |
| 14.04 | explicit target fit / one composite / repair candidates |
| Compo18 | generic hierarchy/subordination graph remains separate |
CANON → LAB → DATA → IDEAS
14.04 final regression suite
DATA FOR LAYOUT ENGINE
{
"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."
}