COMPO · 12.04 · OVERRIDE SCORING + TESTS

Gate first.
Score second.

12.04 завершает локальную логику Topic 12: сначала синтезирует hard gates из protection, exception budget и justification, затем — только для допустимого кандидата — оценивает соответствие фактической величины отклонения явным deviation-fit targets. Единственный независимый числовой vote Topic12 — ruleBreak.system.localControlledBreakFit. Он не является global quality и не может спасать hard reject.

ModuleCompo 12.04
Ordergate → score
Voteone independent
Grouprule-break-local
Globalno
NextSTOP

Hard constraints are not low scores

00 / contract

A candidate is scored only after all required Topic12 evidence exists and every required hard gate passes. This prevents a high local fit from “averaging away” a protected-relation break, exhausted budget or insufficient explicit justification.

INVALID

Malformed or contradictory contract.

REJECT

Hard gate or hard deviation bound fails.

N_A

Required evidence unavailable.

KEEP

Only then may numeric fit vote.

LOCAL TOPIC12 PRECEDENCE: INVALID > REJECT > N_A > KEEP REJECT != score 0 N_A != score 0 A real score 0 is legal only when: outcome = KEEP AND an explicit soft target fit evaluates to 0.

One independent Topic12 vote

01 / ownership

12.04 owns local aggregation, not the upstream facts being aggregated.

INDEPENDENT

ruleBreak.system.localControlledBreakFit

Owner Compo12.04, composite=true, scoringGroup=rule-break-local, independentVoteAllowed=true.

COMPONENT

ruleBreak.deviationTarget.componentFit.*

Owner Compo12.04, componentOf composite, same scoring group, independentVoteAllowed=false.

NOT OWNED

Upstream facts

Intent, magnitude, protection, budget and justification keep their 12.00–12.03 owners.

Deviation-fit target is explicit policy

02 / target schema

There is no universal “ideal” amount of rule breaking. A scoring target declares an explicit preferred band, soft falloff and optional hard bounds.

RuleBreakDeviationFitTarget {
  targetRef,

  targetSourceRef,
  targetSourceOwnerRef,

  valueKind:
    METRIC_MAGNITUDE
    NORMALIZED_MAGNITUDE,

  metricContextRef?,
  metricUnit?,
  normalizationRef?,

  preferredMin,
  preferredMax,

  lowerFalloff,
  upperFalloff,

  hardMin?,
  hardMax?,

  weight,
  required,

  provenance,
  status,
  mutationAllowed: false
}
No inferred target.

12.04 does not derive a preferred band from candidate count, family identity, remaining budget, confidence, module order or the observed value itself.

RuleBreakOverrideScoringProfile

03 / applicability + aggregation

The profile explicitly says when a set of deviation targets is applicable. Different profiles are not rank-compatible.

RuleBreakOverrideScoringProfile {
  overrideScoringProfileRef,

  profileSourceRef,
  profileSourceOwnerRef,

  appliesToIntentModes[],
  appliesToTargetFamilies[],

  deviationTargetRefs[],

  aggregation:
    WEIGHTED_MEAN,

  requireProtectionPass: true,
  requireBudgetPass: true,
  requireJustificationSufficient: true,

  requiredTargetNAHandling:
    N_A,

  optionalTargetNAHandling:
    DROP_EXPLICIT_OPTIONAL_ONLY,

  provenance,
  status,
  mutationAllowed: false
}

Gate synthesis before numeric evaluation

04 / categorical synthesis

Every required upstream result remains categorical. Pass is permission to continue, not a score contribution.

EvidenceRequired stateIf failed
12.00 intent resolutioncontrolledTensionEligible=trueN_A / INVALID by lineage
12.02 protection gatePASSREJECT
12.02 budget bundlePASSREJECT
12.03 justificationSUFFICIENTREJECT if explicit profile requires it
12.04 hard magnitude boundinside explicit boundsREJECT
PASS + PASS + SUFFICIENT != score 1 They only establish: numeric local scoring may proceed.

Soft fit around an explicit preferred band

05 / formula

Inside the preferred band fit is 1. Outside it, fit falls linearly according to explicit falloff distances. Optional hard bounds reject rather than emit zero.

IF hardMin exists AND value < hardMin: REJECT IF hardMax exists AND value > hardMax: REJECT ELSE IF preferredMin <= value <= preferredMax: fit = 1 ELSE IF value < preferredMin: error = preferredMin - value fit = 1 - clamp(error / lowerFalloff, 0, 1) ELSE: error = value - preferredMax fit = 1 - clamp(error / upperFalloff, 0, 1) fit ∈ [0,1] IMPORTANT: soft fit 0 is a legal KEEP score. hard-bound failure is REJECT with no numeric component.

Canonical MetricResult

06 / provenance-aware output

Components and composite carry explicit dependency, lineage and vote-family metadata.

MetricResult {
  key,
  owner,
  value,

  applicability,
  confidence,
  status,
  provenance,

  composite,
  componentOf,

  dependsOn[],
  derivedFrom[],

  scoringGroup,
  independentVoteAllowed,

  evidence,
  repairHints[]
}
Composite

ruleBreak.system.localControlledBreakFit is the only independent Topic12 numeric vote.

Components

ruleBreak.deviationTarget.componentFit.<targetRef> cannot vote independently.

Composite-first weighted mean

07 / aggregation

Weights are explicit within one local profile. They are not global rule priority and are never inferred from target family or evidence count.

For available explicit target components: localControlledBreakFit = Σ(weightᵢ × fitᵢ) ───────────────── Σ(weightᵢ) Required target N_A: composite = N_A Optional target N_A: may be removed from numerator and denominator only because target.required = false No available components: N_A No double-vote: component metrics have independentVoteAllowed=false.

Status cannot be hidden inside a number

08 / precedence

The evaluation outcome remains explicit even when a numeric composite exists.

OutcomeComposite valueMeaning
INVALIDnullContract or lineage contradiction.
REJECTnullHard protection/budget/justification/bound failed.
N_AnullRequired evidence or applicable target unavailable.
KEEP0..1All hard gates passed; explicit local deviation fit calculated.

RuleBreakOverrideEvaluation

09 / final local Topic12 envelope

This is still local Topic12 evidence, not final layout acceptance.

RuleBreakOverrideEvaluation {
  overrideEvaluationRef,

  candidateRef,
  overrideScoringProfileRef,
  targetSetFingerprint,

  hardGateSynthesisRef,

  componentMetricResults[],
  compositeMetricResult,

  outcome:
    INVALID
    REJECT
    N_A
    KEEP,

  reasonCode,

  confidence,
  provenance,
  derivedFrom[],

  mutationAllowed: false
}
KEEP is not final placement.

A candidate with KEEP may still lose to other local/global constraints owned elsewhere. 12.04 does not mutate layout or declare universal quality.

Local comparison only inside the same profile

10 / ranking semantics

Two KEEP evaluations may be compared only when their scoring contract is identical.

Comparable iff: outcome KEEP on both same overrideScoringProfileRef same targetSetFingerprint same scoringGroup = rule-break-local Relations: LESS EQUAL_WITHIN_EPS GREATER INCOMPARABLE Meaning: EXPLICIT_TOPIC12_CONTROLLED_BREAK_TARGET_FIT_ONLY NOT: beauty global balance final layout quality universal controlled-tension rank

Identity follows explicit policy and lineage

11 / deterministic refs

Band parameters, source/context refs and candidate evidence are identity-bearing; confidence and display metadata are not.

targetRef = hash( source + owner, value kind + context ref, preferred band, falloffs, hard bounds, weight, required, provenance ) profileRef = hash( source + owner, canonical intent modes, canonical target families, canonical target refs, fixed aggregation/gate semantics ) targetSetFingerprint = hash( canonical target identities ) overrideEvaluationRef = hash( candidateRef, profileRef, targetSetFingerprint, hardGateSynthesisRef, component refs, composite status/value )

Scoring cannot erase structure

12 / firewalls

The final Topic12 local score is deliberately narrow and protected by hard semantic firewalls.

Forbidden

hard reject → 0; N_A → 0; REQUEST_BREAK bonus; family hidden weight; candidate-count vote; evidence-count vote; cross-profile rank; high score overriding protection/budget.

Preserved

one metric = one owner; composite-first; descriptor != score; local != global; N_A != 0; module order != priority; no beautyScore.

Topic12 ownership chain

13 / integration

12.04 integrates outputs without re-owning them.

ModuleCanonical role
12.00Grid-break taxonomy, explicit target and intent.
12.01Owner-qualified deviation magnitude descriptors.
12.02Hard-protected relations and explicit exception budgets.
12.03Bounded candidates and explicit justification evidence.
12.04Hard-gate synthesis + explicit deviation-target local fit + tests.

CANON → LAB → DATA → IDEAS

14 / cross-cutting hooks

Preferred bands are explicit policy, not universal law. LAB may study perceptual thresholds, but experiment results do not auto-mutate the canonical targets.

IDEAS_REFS[]7 project-level R&D refs retained.
DATA_CAPTURE[]profile, gates, components, composite and human reasons.
DEFERRED_SEMANTIC_INPUTS[]semantic interpretation remains external.
HUMAN_FEEDBACK_HOOKS[]band/bound/weight/gate correction reasons.
CONFLICT_PRIORITY_ASSUMPTIONS[]local weights and precedence are not global priority.
LAB_HOOKS[]empirical calibration without auto-canon mutation.

Capture why the score felt wrong

15 / human evidence

Human corrections remain reason-coded evidence.

ReasonMeaning
CONTROLLED_BREAK_FIT_TOO_HIGHLocal fit overstates perceived controlled quality.
CONTROLLED_BREAK_FIT_TOO_LOWLocal fit understates perceived controlled quality.
PREFERRED_DEVIATION_BAND_WRONGExplicit preferred interval is inappropriate.
HARD_DEVIATION_BOUND_WRONGExplicit reject bound is inappropriate.
TARGET_WEIGHT_WRONGLocal within-group aggregation weight is inappropriate.
REQUIRED_TARGET_SHOULD_BE_OPTIONALRequired N_A policy is too strict.
OPTIONAL_TARGET_SHOULD_BE_REQUIREDOptional denominator-drop is too permissive.
HARD_GATE_DECISION_WRONGProtection/budget/justification gate evidence is wrong.
BREAK_READS_ACCIDENTALScore passes but break still reads accidental.
BREAK_READS_INTENTIONAL_BUT_WEAKTension is intentional but perceptually weak.
BREAK_READS_OVERDONETension is excessive despite local scoring.
TENSION_READS_AS_ERRORControlled tension fails perceptually.

Visual laboratory hook

16 / gate then band fit

The diagram separates hard rejection from soft target fit.

A · HARD GATES PROTECTION = PASSBUDGET = PASS JUSTIFICATION= SUFFICIENT numeric fit allowed B · EXPLICIT DEVIATION TARGET BAND hardMinpreferredMinpreferredMaxhardMax outside hard bounds → REJECT, no numeric zero inside contract → soft fit 0..1 → composite localControlledBreakFit

12.04 consolidated regression suite

17 / tests

Tests cover explicit fit targets, profile applicability, hard-gate precedence, hard-bound rejects, required/optional N_A semantics, MetricResult ownership, composite-first aggregation, comparison, determinism, no foreign mutation and the complete Topic12 local chain.

Tests not run yet.

DATA FOR LAYOUT ENGINE

18 / machine contract

Machine-readable 12.04 canonical contract.

{
  "module": "Compo 12.04",
  "name": "override_scoring_and_tests",
  "version": "1.0-canonical",
  "canonical_main_title": "Override scoring and tests",
  "topic": "12_НАРУШЕНИЕ_СЕТКИ_И_КОНТРОЛИРУЕМОЕ_НАПРЯЖЕНИЕ",
  "scope": "FINAL_LOCAL_TOPIC12_HARD_GATE_SYNTHESIS_EXPLICIT_DEVIATION_TARGET_FIT_SCORING_AND_CONSOLIDATED_TESTS",
  "main_topic_contract": {
    "topic_title": "Нарушение сетки и контролируемое напряжение",
    "topic_goal": "formalize intentional breaking of grid and alignment: deviation magnitude, protected relations, exception budget and justification so controlled tension is distinguishable from error",
    "expected_output": "RuleBreakIntent, deviation metrics, exception budget, evidence",
    "planned_files": [
      "12.00 Grid-break taxonomy and intent",
      "12.01 Deviation magnitude",
      "12.02 Protected relations and exception budgets",
      "12.03 Rule-break candidates and justification",
      "12.04 Override scoring and tests"
    ]
  },
  "ownership": {
    "owner": "Compo12.04",
    "owns": [
      "RuleBreakDeviationFitTarget",
      "RuleBreakOverrideScoringProfile",
      "RuleBreakHardGateSynthesis",
      "per-target deviation fit components",
      "ruleBreak.system.localControlledBreakFit",
      "RuleBreakOverrideEvaluation",
      "same-profile local comparison semantics",
      "Topic12 consolidated local status precedence",
      "Topic12.04 regression contract"
    ],
    "does_not_own": [
      "RuleBreakIntent target/taxonomy/source — Compo12.00",
      "deviation geometry/measurement — Compo12.01",
      "protected relations or exception-budget accounting — Compo12.02",
      "candidate generation or justification evidence — Compo12.03",
      "upstream grid/alignment geometry — Topics8/9/10",
      "global composition quality",
      "global rule/conflict priority",
      "final layout placement",
      "foreign state mutation"
    ]
  },
  "consumes": [
    "valid Compo12.00 RuleBreakTargetEvidence",
    "valid Compo12.00 RuleBreakIntent",
    "valid Compo12.00 RuleBreakIntentResolution",
    "valid Compo12.03 RuleBreakCandidate",
    "valid Compo12.01 RuleBreakDeviationMeasurement",
    "valid Compo12.02 ProtectedRelationGateEvaluation",
    "valid Compo12.02 ExceptionBudgetBundleEvaluation",
    "valid Compo12.03 RuleBreakJustificationEvaluation",
    "valid Compo12.03 RuleBreakCandidateEvidenceBundle",
    "explicit RuleBreakOverrideScoringProfile"
  ],
  "provides": [
    "RuleBreakDeviationFitTarget",
    "RuleBreakOverrideScoringProfile",
    "RuleBreakHardGateSynthesis",
    "MetricResult components ruleBreak.deviationTarget.componentFit.<targetRef>",
    "MetricResult composite ruleBreak.system.localControlledBreakFit",
    "RuleBreakOverrideEvaluation",
    "same-profile diagnostic/local ranking relation",
    "Topic12.04 observation record"
  ],
  "independent_numeric_vote": {
    "key": "ruleBreak.system.localControlledBreakFit",
    "owner": "Compo12.04",
    "composite": true,
    "componentOf": null,
    "scoringGroup": "rule-break-local",
    "independentVoteAllowed": true,
    "meaning": "EXPLICIT_TOPIC12_CONTROLLED_BREAK_TARGET_FIT_ONLY"
  },
  "component_metric": {
    "keyPattern": "ruleBreak.deviationTarget.componentFit.<targetRef>",
    "owner": "Compo12.04",
    "composite": false,
    "componentOf": "ruleBreak.system.localControlledBreakFit",
    "scoringGroup": "rule-break-local",
    "independentVoteAllowed": false
  },
  "deviation_fit_target_schema": {
    "targetRef": "stable identity",
    "targetSourceRef": "explicit source of target band",
    "targetSourceOwnerRef": "owner of band policy",
    "valueKind": "METRIC_MAGNITUDE|NORMALIZED_MAGNITUDE",
    "metricContextRef": "required for METRIC_MAGNITUDE; null otherwise",
    "metricUnit": "required for METRIC_MAGNITUDE; null otherwise",
    "normalizationRef": "required for NORMALIZED_MAGNITUDE; null otherwise",
    "preferredMin": "finite >=0",
    "preferredMax": "finite >= preferredMin",
    "lowerFalloff": "finite >0",
    "upperFalloff": "finite >0",
    "hardMin": "optional finite >=0 and <= preferredMin",
    "hardMax": "optional finite >= preferredMax",
    "weight": "finite >0 explicit local aggregation weight",
    "required": "boolean",
    "provenance": "canonical provenance class",
    "status": "OK|INVALID",
    "mutationAllowed": false
  },
  "fit_formula": {
    "withinPreferredBand": "fit=1",
    "belowPreferredBand": "fit=1-clamp((preferredMin-value)/lowerFalloff,0,1)",
    "abovePreferredBand": "fit=1-clamp((value-preferredMax)/upperFalloff,0,1)",
    "hardMin": "value < hardMin => REJECT, no numeric component for this target",
    "hardMax": "value > hardMax => REJECT, no numeric component for this target",
    "firewall": "hard reject is not numeric zero"
  },
  "scoring_profile_schema": {
    "overrideScoringProfileRef": "stable identity",
    "profileSourceRef": "explicit profile source",
    "profileSourceOwnerRef": "owner of scoring policy",
    "appliesToIntentModes": "non-empty explicit subset of ALLOW_EXCEPTION|EXPLORE_BREAK|REQUEST_BREAK",
    "appliesToTargetFamilies": "non-empty explicit subset of Topic12 target families",
    "deviationTargetRefs": "one or more unique target refs",
    "aggregation": "WEIGHTED_MEAN",
    "requireProtectionPass": true,
    "requireBudgetPass": true,
    "requireJustificationSufficient": true,
    "requiredTargetNAHandling": "N_A",
    "optionalTargetNAHandling": "DROP_EXPLICIT_OPTIONAL_ONLY",
    "provenance": "canonical provenance class",
    "status": "OK|INVALID",
    "mutationAllowed": false,
    "default": "NONE — no universal ideal deviation band"
  },
  "hard_gate_synthesis": {
    "preconditions": [
      "intent resolution controlledTensionEligible=true",
      "candidate is explicit and lineage-compatible",
      "candidate evidence bundle binds required upstream results"
    ],
    "precedence": [
      "INVALID",
      "REJECT",
      "N_A",
      "KEEP"
    ],
    "invalid": [
      "malformed/incompatible lineage",
      "bundle contradiction",
      "profile/target contract invalid"
    ],
    "reject": [
      "protected relation gate REJECT",
      "exception budget bundle REJECT",
      "justification evaluation INSUFFICIENT when profile requires sufficient justification",
      "explicit hard deviation bound violated"
    ],
    "na": [
      "required upstream gate/evidence unavailable",
      "profile not applicable to explicit intent mode or target family",
      "required deviation target value unavailable"
    ],
    "keep": "all required hard gates pass and all required target values are available"
  },
  "metric_result_contract": {
    "minimumFields": [
      "key",
      "owner",
      "value",
      "applicability",
      "confidence",
      "status",
      "provenance",
      "composite",
      "componentOf",
      "dependsOn",
      "derivedFrom",
      "scoringGroup",
      "independentVoteAllowed",
      "evidence",
      "repairHints"
    ],
    "compositeKey": "ruleBreak.system.localControlledBreakFit",
    "componentPattern": "ruleBreak.deviationTarget.componentFit.<targetRef>",
    "compositeAggregation": "weighted mean of available explicit target components",
    "requiredNA": "any required target N_A => composite N_A unless INVALID/REJECT precedence",
    "optionalNA": "may drop denominator only because optionality is explicit",
    "confidence": "minimum evidence confidence among contributing inputs; never tension strength",
    "provenance": "DERIVED"
  },
  "comparison_policy": {
    "requires": [
      "both evaluations outcome KEEP",
      "same overrideScoringProfileRef",
      "same targetSetFingerprint",
      "same scoringGroup rule-break-local"
    ],
    "relations": [
      "LESS",
      "EQUAL_WITHIN_EPS",
      "GREATER",
      "INCOMPARABLE"
    ],
    "meaning": "EXPLICIT_TOPIC12_CONTROLLED_BREAK_TARGET_FIT_ONLY",
    "firewalls": [
      "comparison is not beauty/global quality",
      "higher localControlledBreakFit is not automatic final-layout winner",
      "cross-profile ranking is forbidden"
    ]
  },
  "status_policy": {
    "evaluationOutcome": "INVALID|REJECT|N_A|KEEP",
    "precedence": "INVALID > REJECT > N_A > KEEP",
    "hardReject": "value=null; no conversion to numeric zero",
    "requiredNA": "value=null; N_A != 0",
    "keep": "numeric composite may be 0..1 inclusive",
    "zeroScore": "legal only as an actual soft fit outcome under KEEP; not a proxy for REJECT or N_A"
  },
  "identity_policy": {
    "targetRef": "hash(source/owner, value kind/context, preferred band, falloffs, hard bounds, weight, required, provenance)",
    "overrideScoringProfileRef": "hash(profile source/owner, canonical intent modes, target families, canonical target refs, fixed aggregation/gate policies)",
    "targetSetFingerprint": "hash(canonical target refs and target identities)",
    "hardGateSynthesisRef": "hash(candidate/upstream gate refs and categorical decisions)",
    "overrideEvaluationRef": "hash(candidateRef, profileRef, targetSetFingerprint, hardGateSynthesisRef, component metric refs, composite result status/value)",
    "set_semantics": "set-like refs are canonicalized",
    "excluded_from_identity": [
      "display label",
      "display color",
      "free-form comment",
      "confidence"
    ]
  },
  "critical_firewalls": [
    "RuleBreakIntent != override permission",
    "candidate != placement",
    "deviation magnitude != score",
    "larger deviation != better",
    "smaller deviation != safer by default",
    "preferred band must be explicit; no universal ideal tension",
    "hard protection REJECT != score 0",
    "budget REJECT != score 0",
    "justification INSUFFICIENT != score 0",
    "required N_A != score 0",
    "optional N_A may drop denominator only when optionality is explicit",
    "protection PASS != score 1",
    "budget PASS != score 1",
    "justification SUFFICIENT != score 1",
    "evidence confidence != fit",
    "candidate ordinal != rank",
    "candidate count != vote",
    "target count != vote",
    "explicit target weight != global rule priority",
    "family identity != hidden weight",
    "REQUEST_BREAK != priority",
    "module execution order != rule priority",
    "localControlledBreakFit != global composition quality",
    "localControlledBreakFit != beautyScore",
    "only one independent Topic12 numeric vote",
    "component metrics cannot vote independently",
    "correction request != foreign mutation",
    "N_A != 0",
    "IDEA != CANON",
    "EXPERIMENT != CANON"
  ],
  "IDEAS_REFS": [
    "IDEA-01 full human test after all 72 topics; validate controlled-tension fit bands empirically",
    "IDEA-02 semantics required before placement; semantic refs remain external to 12.04 scoring",
    "IDEA-03 explicit rule priorities; local target weights and module order must not become global priority",
    "IDEA-04 collect structured data for future composition model",
    "IDEA-05 preserve reasons for human corrections",
    "IDEA-06 structured machine-readable layer",
    "IDEA-07 graphics-for-post-text research remains downstream/separate"
  ],
  "DATA_CAPTURE": [
    "sceneRef",
    "candidateRef",
    "overrideScoringProfileRef",
    "targetSetFingerprint",
    "hardGateSynthesisRef",
    "protectionGateDecision",
    "budgetBundleDecision",
    "justificationDecision",
    "deviationMeasurementRef",
    "targetRefs[]",
    "componentMetricKeys[]",
    "componentValues[]",
    "compositeMetricKey",
    "compositeValue",
    "evaluationOutcome",
    "evaluationReasonCode",
    "humanReasonCodes[]"
  ],
  "DEFERRED_SEMANTIC_INPUTS": [
    "semanticIntentRefs[]",
    "perceptual meaning of preferred band",
    "role-specific controlled-tension tolerance",
    "brand/editorial rationale interpretation",
    "future global conflict-priority policy refs"
  ],
  "HUMAN_FEEDBACK_HOOKS": [
    "CONTROLLED_BREAK_FIT_TOO_HIGH",
    "CONTROLLED_BREAK_FIT_TOO_LOW",
    "PREFERRED_DEVIATION_BAND_WRONG",
    "HARD_DEVIATION_BOUND_WRONG",
    "TARGET_WEIGHT_WRONG",
    "REQUIRED_TARGET_SHOULD_BE_OPTIONAL",
    "OPTIONAL_TARGET_SHOULD_BE_REQUIRED",
    "HARD_GATE_DECISION_WRONG",
    "BREAK_READS_ACCIDENTAL",
    "BREAK_READS_INTENTIONAL_BUT_WEAK",
    "BREAK_READS_OVERDONE",
    "TENSION_READS_AS_ERROR"
  ],
  "CONFLICT_PRIORITY_ASSUMPTIONS": [
    "module execution order is not priority",
    "hard-gate precedence is local Topic12 evaluation semantics, not universal COMPO priority",
    "profile target weights aggregate only within rule-break-local scoring group",
    "REQUEST_BREAK has no priority bonus",
    "higher localControlledBreakFit cannot override a foreign hard constraint",
    "future reviewed global conflict-priority owner remains authoritative"
  ],
  "LAB_HOOKS": [
    "human A/B: equal localControlledBreakFit under different semantic roles",
    "human A/B: preferred-band center vs soft-falloff edge",
    "compare metric vs normalized target bands across formats",
    "estimate useful hard bounds empirically without auto-writing them into canon",
    "collect cases where score fits but humans still read accidental/error-like",
    "test target-weight sensitivity as lab-only evidence"
  ],
  "observation_record": {
    "moduleRef": "Compo12.04",
    "candidateRefs": [],
    "metricResults": [
      "ruleBreak.system.localControlledBreakFit",
      "ruleBreak.deviationTarget.componentFit.<targetRef>"
    ]
  },
  "topic12_local_chain": [
    "12.00 explicit intent",
    "12.01 explicit deviation magnitude",
    "12.02 hard protection + exception budget",
    "12.03 bounded candidates + explicit justification",
    "12.04 hard-gate synthesis + explicit local target fit"
  ],
  "stop_condition": "STOP after 12.04. Do not create closing audit in this file."
}
VISITS / ...