COMPO · 8.04 · VARIANTS / SCORING / TESTS

Variants,
scoring
& tests.

Final local layer Topic 8: immutable ColumnGridVariant bundles, explicit hard/soft GridTargetSpec interpretation, hard-filter precedence, composite-first local target scoring, mutation-free repair routing, deterministic variant comparison and consolidated regression. No target means no numeric grid score. Hard breaches never become aesthetic penalties. Raw grid descriptors and 8.03 seedPriority never vote independently.

ModuleCompo 8.04
Scopevariants / targets / scoring
Primary votelocalGridFit
Hard filterseparate
Topic8 · COLUMN GRID
Nextclosing audit

8.04 оценивает explicit variants

00 / module api

Variant — immutable bundle refs на уже рассчитанные Topic8 outputs. Никакой новой geometry или hidden candidate generation здесь нет.

VARIANT

Immutable lineage bundle.

HARD

Filter, never numeric penalty.

SOFT

Explicit target-fit composite only.

EXPLICIT VARIANT SET ONLY. 8.04 не перемножает geometry × occupancy × candidates.

Evidence bundle, не копия child payloads

01 / ColumnGridVariant

GRID_ONLY используется для оценки самой сетки. GRID_WITH_PLACEMENT_CANDIDATE добавляет один explicit candidate из 8.03.

ColumnGridVariant {
  variantRef,

  variantKind:
    GRID_ONLY |
    GRID_WITH_PLACEMENT_CANDIDATE,

  gridRef,
  columnGeometryRef,
  topologyRef,

  occupancyRegistryRef?,

  candidateSetRef?,
  placementCandidateRef?,

  sourceVariantPolicyRef?,

  confidence,
  provenance,

  mutationAllowed: false
}

Target всегда explicit

02 / GridTargetSpec

8.04 не знает «правильного» количества колонок, gutter или anchor node без внешнего target.

GridTargetSpec {
  targetRef,
  subjectKind,
  observedSelector,

  columnIndex?,
  gutterIndex?,
  spanRef?,
  nodeRef?,

  valueSpace?:
    RAW |
    SHORT_N,

  unit?,

  minValue?,
  maxValue?,
  allowedValues[]?,

  constraintKind:
    HARD |
    SOFT,

  softTolerance?,
  mismatchFit?,

  missingEvidencePolicy:
    N_A |
    INVALID,

  confidence,
  provenance
}

Baseline target families

03 / selectors

Все selectors читают уже существующие descriptors; ни один не создаёт новую geometry.

SelectorEvidence owner
GRID_COLUMN_COUNT_SET8.01
GRID_COLUMN_WIDTH_INTERVAL8.01
GRID_GUTTER_WIDTH_INTERVAL8.01
GRID_SPAN_WIDTH_INTERVAL8.01
NODE_OCCUPANCY_STATE_SET8.02
PLACEMENT_MODE_SET8.03
PLACEMENT_SPAN_COLUMN_COUNT_SET8.03
PLACEMENT_SPAN_REF_SET8.03
PLACEMENT_ANCHOR_NODE_SET8.03

Interval distance

04 / numeric target

Для RAW value target unit должен точно совпадать. SHORT_N не восстанавливается из raw без нормализованного evidence.

inside interval: distance = 0 below min: distance = minValue - observed above max: distance = observed - maxValue HARD: distance = 0 → SATISFIED distance > 0 → BREACHED SOFT: fit = 1 - clamp( distance / softTolerance, 0, 1 )

Allowed set + explicit mismatchFit

05 / categorical target

Для soft categorical mismatch нет скрытого штрафа.

HARD: observed ∈ allowedValues → SATISFIED otherwise → BREACHED SOFT: observed ∈ allowedValues → fit = 1 otherwise → fit = mismatchFit mismatchFit: explicit 0..1

INVALID > REJECT > N_A > KEEP

06 / hard filter

Hard-filter полностью независим от numeric fit.

REJECT

Хотя бы один валидный HARD target доказанно breached.

N_A

Hard evidence не разрешён, но breach/config invalidity ещё не доказаны.

INVALID config beats everything else proven HARD breach → REJECT else unresolved HARD target → N_A else → KEEP
NO SCORE THRESHOLD. `localGridFit=0.95` не может спасти hard breach; `localGridFit=0.2` само по себе не делает REJECT.

Required / optional SOFT targets

07 / scoring profile

Профиль определяет только explicit aggregation.

GridScoringProfile {
  profileRef,

  requiredTargetRefs[],
  optionalTargetRefs[],

  weights: {
    targetRef: positiveWeight
  },

  aggregate:
    WEIGHTED_MEAN,

  missingRequiredPolicy:
    N_A |
    INVALID,

  confidence,
  provenance
}

Один independent Topic8 vote

08 / MetricResult

Component fits диагностические внутри composite.

COMPONENT

key:
  grid.target.componentFit.<targetRef>

componentOf:
  grid.system.localGridFit

scoringGroup:
  grid-system-local

independentVoteAllowed:
  false

COMPOSITE

key:
  grid.system.localGridFit

composite:
  true

scoringGroup:
  grid-system-local

independentVoteAllowed:
  true

Weighted mean applicable only

09 / composite score

Optional N/A target может выпасть из denominator только потому, что profile заранее объявил его optional.

localGridFit = Σ( weight[target] * componentFit[target] ) / Σ( weight[target] for applicable target ) required missing: N_A or INVALID per profile optional missing: exclude explicitly no profile: localGridFit = N_A

Hard и soft deviations остаются evidence

10 / violations

Soft deviation может породить advisory repair, но hard-filter реагирует только на HARD.

GridViolation {
  violationRef,
  owner: "Compo8.04",
  family,
  constraintKind,

  variantRef,
  targetRef?,

  sourceModule,
  sourceRef,

  status,
  observed,
  expected,

  confidence,
  derivedFrom[],
  provenance: DERIVED
}

Никаких foreign mutations

11 / repair requests

Repair говорит владельцу, что следует пересмотреть, но не меняет grid/registry/candidate.

Target familyRepair request
Column countREQUEST_COLUMN_STRUCTURE_ADAPTATION
Column widthREQUEST_GRID_WIDTH_ADAPTATION
Gutter widthREQUEST_GUTTER_ADAPTATION
Span widthREQUEST_SPAN_ADAPTATION
Node occupancyREQUEST_NODE_OCCUPANCY_ADAPTATION
Placement targetREQUEST_PLACEMENT_ADAPTATION
Missing evidenceREQUEST_EVIDENCE_RESOLUTION
Invalid target/profileREQUEST_TARGET_CONFIG_CORRECTION
mutationAllowed = false

Rank = target fit, не beauty

12 / variant comparison

Сравниваются только KEEP variants с применимым score под одним profile/target set.

eligible variant: hardFilter = KEEP AND localGridFit applicable sort: localGridFit descending equal fit: equal rank variantRef: deterministic serialization only REJECT / N_A / INVALID: not numeric zero not score-ranked

Topic 8 закрывается локально

13 / ownership firewalls

8.04 собирает только Topic8-local evidence.

QuestionOwner
Grid geometry?8.01
Lines/nodes/current node occupancy?8.02
X candidate generation?8.03
Explicit Topic8 target fit?8.04
2D rows/cells?Topic 9
Alignment/proximity?Topic 10
Balance/hierarchy/eye flow?future global owners

Visual Lab

14 / visual lab

Один и тот же variant может пройти hard filter и иметь разный soft fit только при разных explicit profiles.

A · HARD TARGET allowed columnCount = {4,6} observed = 5 REJECT no numeric penalty B · SOFT INTERVAL target interval + explicit tolerance fit = explicit distance-to-target C · COMPOSITE FIRST component A .80 component B .60 component C N/A localGridFit = weighted one independent vote variant references 8.01 + 8.02 + optional 8.03 candidate · does not regenerate them no target/profile → localGridFit = N/A · raw descriptors remain non-voting hard breach → REJECT even with perfect soft score optional missing evidence may drop denominator only if profile says OPTIONAL ranking compares KEEP variants under the same explicit profile only repair request != mutation · Topic9/10/global owners remain separate

Topic 8 closing regression inside 8.04

15 / consolidated regression

Проверяем variant lineage, targets, hard/soft semantics, scoring metadata, comparison и ownership границы 8.00–8.04.

Tests not run yet.

DATA FOR LAYOUT ENGINE

16 / machine contract

Machine-readable final module contract Topic 8.

{
  "module": "Compo 8.04",
  "name": "variants_scoring_and_tests",
  "version": "1.1-corrective",
  "canonical_main_title": "Variants, scoring и tests",
  "topic": "08_КОЛОННАЯ_СЕТКА",
  "scope": "EXPLICIT_COLUMNGRID_VARIANTS_TARGET_INTERPRETATION_HARD_FILTER_LOCAL_COMPOSITE_SCORING_REPAIR_COMPARISON_AND_TOPIC8_REGRESSION",
  "consumes": [
    "Compo8.00.ColumnGrid",
    "Compo8.01.ResolvedColumnGeometry",
    "Compo8.01.ResolvedColumnSpan[]",
    "Compo8.02.ColumnGridTopology",
    "optional Compo8.02.ColumnGridNodeOccupancyRegistry",
    "optional Compo8.03.ColumnPlacementCandidateSet",
    "optional Compo8.03.ColumnPlacementCandidate",
    "explicit ColumnGridVariant[]",
    "explicit GridTargetSpec[]",
    "optional explicit GridScoringProfile"
  ],
  "provides": [
    "ColumnGridVariant",
    "ColumnGridVariantSet",
    "GridTargetSpec",
    "GridTargetEvaluation",
    "GridViolation",
    "GridRepairRequest",
    "MetricResult grid.target.componentFit.<targetRef>",
    "MetricResult grid.system.localGridFit",
    "Topic8HardFilterDecision",
    "ColumnGridVariantEvaluation",
    "GridVariantComparisonResult",
    "consolidated Topic8 regression"
  ],
  "owns_metrics": [
    "grid.system.localGridFit"
  ],
  "component_metrics": [
    "grid.target.componentFit.<targetRef>"
  ],
  "column_grid_variant_schema": {
    "variantRef": "stable explicit ref",
    "variantKind": "GRID_ONLY|GRID_WITH_PLACEMENT_CANDIDATE",
    "gridRef": "Compo8.00 grid identity",
    "columnGeometryRef": "Compo8.01 geometry ref",
    "topologyRef": "Compo8.02 topology ref",
    "occupancyRegistryRef": "optional Compo8.02 registry ref",
    "candidateSetRef": "required with placement candidate",
    "placementCandidateRef": "required only for GRID_WITH_PLACEMENT_CANDIDATE",
    "sourceVariantPolicyRef": "optional explicit upstream variant source ref",
    "confidence": "0..1",
    "provenance": "STANDARD|EMPIRICAL|INITIAL_HEURISTIC|STYLE_PRESET|DERIVED",
    "mutationAllowed": false,
    "important": "variant references evidence; it does not clone or own child payloads"
  },
  "variant_set_schema": {
    "variantSetRef": "stable explicit ref",
    "comparisonScopeRef": "explicit scope identity",
    "variantRefs": "unique explicit refs",
    "profileRef": "optional scoring profile ref",
    "targetSetRef": "optional explicit target-set identity",
    "generation": "NONE",
    "cross_product": "FORBIDDEN"
  },
  "grid_target_spec_schema": {
    "targetRef": "stable unique ref",
    "subjectKind": "GRID_VARIANT|GRID_WITH_PLACEMENT_CANDIDATE",
    "observedSelector": "GRID_COLUMN_COUNT_SET|GRID_COLUMN_WIDTH_INTERVAL|GRID_GUTTER_WIDTH_INTERVAL|GRID_SPAN_WIDTH_INTERVAL|NODE_OCCUPANCY_STATE_SET|PLACEMENT_MODE_SET|PLACEMENT_SPAN_COLUMN_COUNT_SET|PLACEMENT_SPAN_REF_SET|PLACEMENT_ANCHOR_NODE_SET",
    "columnIndex": "required for GRID_COLUMN_WIDTH_INTERVAL",
    "gutterIndex": "required for GRID_GUTTER_WIDTH_INTERVAL",
    "spanRef": "required for GRID_SPAN_WIDTH_INTERVAL",
    "nodeRef": "required for NODE_OCCUPANCY_STATE_SET",
    "valueSpace": "RAW|SHORT_N for numeric interval selectors",
    "unit": "required for RAW numeric interval targets and must match observed source unit",
    "minValue": "optional finite numeric lower bound for interval target",
    "maxValue": "optional finite numeric upper bound; at least one bound required",
    "allowedValues": "required non-empty explicit set for categorical/discrete selectors",
    "constraintKind": "HARD|SOFT",
    "softTolerance": "required finite >0 for SOFT numeric interval target",
    "mismatchFit": "required 0..1 for SOFT categorical/discrete target",
    "missingEvidencePolicy": "N_A|INVALID",
    "confidence": "0..1",
    "provenance": "STANDARD|EMPIRICAL|INITIAL_HEURISTIC|STYLE_PRESET",
    "no_hidden_target": "8.04 never invents target values"
  },
  "numeric_interval_fit": {
    "inside_interval": "distance=0",
    "below_min": "distance=minValue-observed",
    "above_max": "distance=observed-maxValue",
    "HARD": "SATISFIED if distance=0 else BREACHED; no numeric component",
    "SOFT": "fit=1-clamp(distance/softTolerance,0,1)",
    "missing": "N_A or INVALID according target policy"
  },
  "categorical_fit": {
    "HARD": "SATISFIED if observed in allowedValues else BREACHED",
    "SOFT_allowed": "fit=1",
    "SOFT_disallowed": "fit=explicit mismatchFit",
    "important": "no hidden default mismatch penalty"
  },
  "grid_scoring_profile_schema": {
    "profileRef": "stable explicit ref",
    "requiredTargetRefs": "unique SOFT target refs",
    "optionalTargetRefs": "unique SOFT target refs disjoint from required",
    "weights": "map targetRef -> finite positive weight; exact declared-key coverage",
    "aggregate": "WEIGHTED_MEAN",
    "missingRequiredPolicy": "N_A|INVALID",
    "confidence": "0..1",
    "provenance": "STYLE_PRESET|EMPIRICAL|STANDARD|INITIAL_HEURISTIC",
    "no_profile": "grid.system.localGridFit=N_A by applicability"
  },
  "metric_result_policy": {
    "component": {
      "key": "grid.target.componentFit.<targetRef>",
      "owner": "Compo8.04",
      "value": "0..1",
      "componentOf": "grid.system.localGridFit",
      "scoringGroup": "grid-system-local",
      "independentVoteAllowed": false,
      "composite": false
    },
    "composite": {
      "key": "grid.system.localGridFit",
      "owner": "Compo8.04",
      "value": "0..1 or N_A",
      "composite": true,
      "componentOf": null,
      "scoringGroup": "grid-system-local",
      "independentVoteAllowed": true
    },
    "hard_constraints": "never encoded as numeric components",
    "raw_topic8_descriptors": "never cast independent votes",
    "no_profile": "composite is N_A without making hard filter itself invalid"
  },
  "violation_schema": {
    "violationRef": "stable ref derived from variant+target",
    "owner": "Compo8.04",
    "family": "GRID_GEOMETRY_TARGET|NODE_OCCUPANCY_TARGET|PLACEMENT_TARGET|CONFIG|DATA_QUALITY",
    "constraintKind": "HARD|SOFT|CONFIG|DATA",
    "variantRef": "source variant",
    "targetRef": "optional target",
    "sourceModule": "Compo8.01|Compo8.02|Compo8.03|Compo8.04",
    "sourceRef": "owner-qualified observed evidence ref",
    "status": "OPEN|RESOLVED_BY_EVIDENCE|N_A|INVALID",
    "observed": "structured evidence",
    "expected": "explicit target/policy evidence",
    "confidence": "0..1",
    "derivedFrom": "owner-qualified evidence refs",
    "provenance": "DERIVED"
  },
  "repair_request_schema": {
    "repairRef": "stable ref",
    "sourceViolationRef": "GridViolation ref",
    "requestKind": "REQUEST_COLUMN_STRUCTURE_ADAPTATION|REQUEST_GRID_WIDTH_ADAPTATION|REQUEST_GUTTER_ADAPTATION|REQUEST_SPAN_ADAPTATION|REQUEST_NODE_OCCUPANCY_ADAPTATION|REQUEST_PLACEMENT_ADAPTATION|REQUEST_EVIDENCE_RESOLUTION|REQUEST_TARGET_CONFIG_CORRECTION",
    "targetOwner": "layout_spec_owner|Compo8.01_input_owner|layout_owner|integration_owner|Compo8.03_request_owner|policy_owner",
    "variantRef": "source variant",
    "targetRef": "optional",
    "contentRef": "optional from placement candidate",
    "observed": "optional descriptor",
    "expected": "optional explicit target",
    "mutationAllowed": false,
    "provenance": "DERIVED"
  },
  "hard_filter_semantics": {
    "INVALID": "invalid target/profile/variant configuration or internally invalid referenced lineage",
    "REJECT": "at least one valid HARD GridTargetSpec is BREACHED",
    "N_A": "one or more supplied HARD targets are unresolved and no INVALID/proven REJECT determines decision",
    "KEEP": "no HARD breach, no blocking invalidity and all supplied HARD targets resolved/satisfied",
    "precedence": "INVALID > REJECT > N_A > KEEP",
    "separate_from_score": "never threshold grid.system.localGridFit to derive hard filter"
  },
  "scoring_semantics": {
    "explicit_profile_required": true,
    "only_soft_targets": true,
    "required_missing": "N_A|INVALID according profile",
    "optional_missing": "drop denominator only when explicitly optional",
    "aggregate": "weighted mean of applicable component fits",
    "score_domain": "0..1",
    "meaning": "closeness to explicit Topic8 target profile only",
    "not_global_quality": true
  },
  "variant_comparison": {
    "eligible": "hardFilter=KEEP and localGridFit applicable under same profile/target set",
    "order": "localGridFit descending",
    "ties": "same rank/equal fit; variantRef used only deterministic serialization",
    "reject_na_invalid": "not assigned numeric zero and not mixed into score ranking",
    "commit": "comparison does not accept/mutate a layout",
    "profile_guard": "all compared evaluations must carry the same profileRef",
    "target_set_guard": "all compared evaluations must carry the same deterministic targetSetFingerprint"
  },
  "repair_policy": {
    "GRID_COLUMN_COUNT_SET": "REQUEST_COLUMN_STRUCTURE_ADAPTATION",
    "GRID_COLUMN_WIDTH_INTERVAL": "REQUEST_GRID_WIDTH_ADAPTATION",
    "GRID_GUTTER_WIDTH_INTERVAL": "REQUEST_GUTTER_ADAPTATION",
    "GRID_SPAN_WIDTH_INTERVAL": "REQUEST_SPAN_ADAPTATION",
    "NODE_OCCUPANCY_STATE_SET": "REQUEST_NODE_OCCUPANCY_ADAPTATION",
    "PLACEMENT_MODE_SET": "REQUEST_PLACEMENT_ADAPTATION",
    "PLACEMENT_SPAN_COLUMN_COUNT_SET": "REQUEST_PLACEMENT_ADAPTATION",
    "PLACEMENT_SPAN_REF_SET": "REQUEST_PLACEMENT_ADAPTATION",
    "PLACEMENT_ANCHOR_NODE_SET": "REQUEST_PLACEMENT_ADAPTATION",
    "missing evidence": "REQUEST_EVIDENCE_RESOLUTION",
    "invalid target/profile": "REQUEST_TARGET_CONFIG_CORRECTION",
    "foreign_mutation": "FORBIDDEN"
  },
  "ownership_map": {
    "8.00": "ColumnGrid root/domain/coordinate ownership",
    "8.01": "column/gutter/span geometry",
    "8.02": "canonical line/node topology and node occupancy registry",
    "8.03": "bounded deterministic X-placement candidate generation",
    "8.04": "variant bundle, target interpretation, hard filter, local scoring, repair, comparison, regression",
    "9.x": "2D modular rows/cells/regions and cell/region occupancy",
    "10.x": "alignment/proximity relations",
    "future_global": "balance/hierarchy/negative space/eye flow/typography/image crop/global composition score"
  },
  "semantic_firewalls": {
    "variant_vs_generation": "variant references existing evidence; no hidden combinatorial generation",
    "hard_filter_vs_score": "hard target breach rejects; never becomes numeric penalty",
    "descriptor_vs_score": "only explicit target fit can score",
    "component_vs_vote": "components are contained in localGridFit and do not vote independently",
    "seed_priority_vs_score": "8.03 seedPriority is never a scoring input",
    "occupancy_vs_alignment": "8.02 node state may be target evidence; proximity remains Topic10",
    "variant_rank_vs_beauty": "rank is explicit target fit only"
  },
  "metric_policy": {
    "primary_numeric_vote": "grid.system.localGridFit only",
    "direct_global_score": "FORBIDDEN",
    "column_count_without_target": "DESCRIPTOR_ONLY",
    "width_without_target": "DESCRIPTOR_ONLY",
    "gutter_without_target": "DESCRIPTOR_ONLY",
    "occupancy_without_target": "DESCRIPTOR_ONLY",
    "candidate_without_target": "DESCRIPTOR_ONLY",
    "seedPriority_score": "FORBIDDEN",
    "beautyScore": "FORBIDDEN"
  },
  "hard_constraints": [
    "8.04 owns immutable ColumnGridVariant bundles, explicit GridTargetSpec interpretation, Topic8 hard-filter decisions, local target-fit scoring, mutation-free repair requests, variant comparison and consolidated Topic8 regression.",
    "8.04 does not generate column geometry, topology, occupancy bindings or placement candidates; it only references outputs owned by 8.01, 8.02 and 8.03.",
    "A ColumnGridVariant is an immutable evidence bundle, not an accepted layout mutation.",
    "Variant sets are explicit lists. 8.04 must not generate Cartesian products of geometry variants, occupancy snapshots or placement candidate sets.",
    "Each variant must preserve gridRef, columnGeometryRef, topologyRef and optional occupancyRegistryRef/candidateSetRef/placementCandidateRef lineage.",
    "GRID_ONLY variants may omit placementCandidateRef. GRID_WITH_PLACEMENT_CANDIDATE variants require a candidate that belongs to the declared candidate set and same grid/geometry/topology lineage.",
    "Scoring requires explicit GridTargetSpec and explicit GridScoringProfile. Without an applicable scoring profile, grid.system.localGridFit is N_A.",
    "No target may be inferred from common design practice, role name, equal-column geometry, centered placement, free-node count or any aesthetic convention.",
    "Baseline target selectors are GRID_COLUMN_COUNT_SET, GRID_COLUMN_WIDTH_INTERVAL, GRID_GUTTER_WIDTH_INTERVAL, GRID_SPAN_WIDTH_INTERVAL, NODE_OCCUPANCY_STATE_SET, PLACEMENT_MODE_SET, PLACEMENT_SPAN_COLUMN_COUNT_SET, PLACEMENT_SPAN_REF_SET and PLACEMENT_ANCHOR_NODE_SET.",
    "Numeric interval targets must declare valueSpace RAW or SHORT_N. RAW targets require an explicit unit matching the observed source unit; no implicit unit conversion occurs.",
    "SHORT_N numeric targets require available ShortN evidence; missing normalized evidence is N_A or INVALID according to the target missingEvidencePolicy.",
    "Categorical/discrete target sets must be explicit non-empty allowedValues.",
    "HARD targets produce SATISFIED/BREACHED/N_A/INVALID evidence only and never numeric component scores.",
    "SOFT numeric interval fit is 1 - clamp(distance/softTolerance,0,1).",
    "SOFT categorical/discrete target fit is 1 when observed is allowed; otherwise explicit mismatchFit is used. mismatchFit must be declared by the target and is not hidden.",
    "Hard-filter decision is separate from grid.system.localGridFit and uses precedence INVALID > REJECT > N_A > KEEP.",
    "A proven HARD breach yields REJECT even if soft localGridFit is high.",
    "Missing or invalid configuration evidence must not be converted into a numeric zero.",
    "Only SOFT target components may contribute to grid.system.localGridFit.",
    "All component MetricResults belong to scoringGroup grid-system-local, componentOf grid.system.localGridFit and independentVoteAllowed=false.",
    "grid.system.localGridFit is the only independent numeric Topic8 vote produced by 8.04.",
    "Raw column count, widths, gutters, span widths, node states, candidate counts and seedPriority never vote independently.",
    "Required and optional scoring targets are explicit. Missing optional targets may drop from the denominator only when declared optional.",
    "Missing required soft target evidence follows GridScoringProfile.missingRequiredPolicy N_A or INVALID.",
    "Weights must be finite positive values and keys must exactly cover all declared requiredTargetRefs and optionalTargetRefs.",
    "Variant ranking is allowed only among KEEP variants with applicable localGridFit under the same profile/target set.",
    "REJECT, N_A and INVALID variants are not silently ranked below valid variants as if they had numeric score zero.",
    "Ranking means closeness to the explicit Topic8 target profile only; it is not universal design quality.",
    "Ties preserve equality and use variantRef only for deterministic serialization, not as a visual preference.",
    "Repair requests are advisory and mutationAllowed=false.",
    "A geometry repair request routes to the 8.01/layout-spec owner; 8.04 does not rewrite geometry.",
    "An occupancy repair request routes to the layout/integration owner; 8.04 does not rewrite the 8.02 registry.",
    "A placement repair request routes to the 8.03 request/layout owner; 8.04 does not accept or move content.",
    "Topic9 retains ownership of 2D modular cells/regions and their occupancy.",
    "Topic10 retains ownership of alignment/proximity measurement.",
    "Variant comparison must reject mixed profileRef or mixed targetSetFingerprint inputs instead of ranking incomparable evaluations.",
    "A target with subjectKind GRID_WITH_PLACEMENT_CANDIDATE is not applicable to GRID_ONLY and must resolve by its explicit missingEvidencePolicy.",
    "Global balance, hierarchy, negative space, eye flow, typography and image crop remain outside Topic8 scoring.",
    "N/A != 0.",
    "No beautyScore."
  ],
  "hard_rules": [
    "8.04 owns immutable ColumnGridVariant bundles, explicit GridTargetSpec interpretation, Topic8 hard-filter decisions, local target-fit scoring, mutation-free repair requests, variant comparison and consolidated Topic8 regression.",
    "8.04 does not generate column geometry, topology, occupancy bindings or placement candidates; it only references outputs owned by 8.01, 8.02 and 8.03.",
    "A ColumnGridVariant is an immutable evidence bundle, not an accepted layout mutation.",
    "Variant sets are explicit lists. 8.04 must not generate Cartesian products of geometry variants, occupancy snapshots or placement candidate sets.",
    "Each variant must preserve gridRef, columnGeometryRef, topologyRef and optional occupancyRegistryRef/candidateSetRef/placementCandidateRef lineage.",
    "GRID_ONLY variants may omit placementCandidateRef. GRID_WITH_PLACEMENT_CANDIDATE variants require a candidate that belongs to the declared candidate set and same grid/geometry/topology lineage.",
    "Scoring requires explicit GridTargetSpec and explicit GridScoringProfile. Without an applicable scoring profile, grid.system.localGridFit is N_A.",
    "No target may be inferred from common design practice, role name, equal-column geometry, centered placement, free-node count or any aesthetic convention.",
    "Baseline target selectors are GRID_COLUMN_COUNT_SET, GRID_COLUMN_WIDTH_INTERVAL, GRID_GUTTER_WIDTH_INTERVAL, GRID_SPAN_WIDTH_INTERVAL, NODE_OCCUPANCY_STATE_SET, PLACEMENT_MODE_SET, PLACEMENT_SPAN_COLUMN_COUNT_SET, PLACEMENT_SPAN_REF_SET and PLACEMENT_ANCHOR_NODE_SET.",
    "Numeric interval targets must declare valueSpace RAW or SHORT_N. RAW targets require an explicit unit matching the observed source unit; no implicit unit conversion occurs.",
    "SHORT_N numeric targets require available ShortN evidence; missing normalized evidence is N_A or INVALID according to the target missingEvidencePolicy.",
    "Categorical/discrete target sets must be explicit non-empty allowedValues.",
    "HARD targets produce SATISFIED/BREACHED/N_A/INVALID evidence only and never numeric component scores.",
    "SOFT numeric interval fit is 1 - clamp(distance/softTolerance,0,1).",
    "SOFT categorical/discrete target fit is 1 when observed is allowed; otherwise explicit mismatchFit is used. mismatchFit must be declared by the target and is not hidden.",
    "Hard-filter decision is separate from grid.system.localGridFit and uses precedence INVALID > REJECT > N_A > KEEP.",
    "A proven HARD breach yields REJECT even if soft localGridFit is high.",
    "Missing or invalid configuration evidence must not be converted into a numeric zero.",
    "Only SOFT target components may contribute to grid.system.localGridFit.",
    "All component MetricResults belong to scoringGroup grid-system-local, componentOf grid.system.localGridFit and independentVoteAllowed=false.",
    "grid.system.localGridFit is the only independent numeric Topic8 vote produced by 8.04.",
    "Raw column count, widths, gutters, span widths, node states, candidate counts and seedPriority never vote independently.",
    "Required and optional scoring targets are explicit. Missing optional targets may drop from the denominator only when declared optional.",
    "Missing required soft target evidence follows GridScoringProfile.missingRequiredPolicy N_A or INVALID.",
    "Weights must be finite positive values and keys must exactly cover all declared requiredTargetRefs and optionalTargetRefs.",
    "Variant ranking is allowed only among KEEP variants with applicable localGridFit under the same profile/target set.",
    "REJECT, N_A and INVALID variants are not silently ranked below valid variants as if they had numeric score zero.",
    "Ranking means closeness to the explicit Topic8 target profile only; it is not universal design quality.",
    "Ties preserve equality and use variantRef only for deterministic serialization, not as a visual preference.",
    "Repair requests are advisory and mutationAllowed=false.",
    "A geometry repair request routes to the 8.01/layout-spec owner; 8.04 does not rewrite geometry.",
    "An occupancy repair request routes to the layout/integration owner; 8.04 does not rewrite the 8.02 registry.",
    "A placement repair request routes to the 8.03 request/layout owner; 8.04 does not accept or move content.",
    "Topic9 retains ownership of 2D modular cells/regions and their occupancy.",
    "Topic10 retains ownership of alignment/proximity measurement.",
    "Variant comparison must reject mixed profileRef or mixed targetSetFingerprint inputs instead of ranking incomparable evaluations.",
    "A target with subjectKind GRID_WITH_PLACEMENT_CANDIDATE is not applicable to GRID_ONLY and must resolve by its explicit missingEvidencePolicy.",
    "Global balance, hierarchy, negative space, eye flow, typography and image crop remain outside Topic8 scoring.",
    "N/A != 0.",
    "No beautyScore."
  ],
  "soft_constraints": [],
  "preferences": [],
  "overrides_allowed_by": [
    "a newer explicit target/profile may evaluate historical immutable variants without mutating them",
    "a newer geometry/topology/registry/candidate snapshot creates a new variant lineage rather than rewriting an old variant"
  ],
  "initial_heuristics": {},
  "style_preset_values": [],
  "candidate_generation": {
    "geometry_candidates": "NONE",
    "placement_candidates": "NONE",
    "variant_cross_product": "FORBIDDEN",
    "reason": "8.04 evaluates explicit variants; generation remains 8.03/upstream"
  },
  "correction_policy": {
    "all_repairs": "mutationAllowed=false",
    "geometry": "route request to layoutSpec/8.01 input owner",
    "occupancy": "route request to layout/integration owner",
    "placement": "route request to 8.03 request/layout owner",
    "target_config": "route request to policy owner",
    "evidence": "route request to source/integration owner"
  },
  "deferred_inputs": [
    "Topic9 2D modular-grid rows/cells/regions",
    "Topic10 alignment scoring",
    "future global composition aggregation",
    "future multi-object layout orchestrator",
    "future empirical calibration of target profiles"
  ],
  "recompute_when": [
    "variant lineage ref changes",
    "target set changes",
    "scoring profile changes",
    "8.01 geometry changes",
    "8.02 topology/registry changes",
    "8.03 candidate set/candidate changes"
  ],
  "tests": [
    "variant lineage validation",
    "grid-only vs placement variant",
    "numeric raw target",
    "numeric ShortN target",
    "categorical target",
    "hard breach/keep/N_A/invalid precedence",
    "soft fit interval",
    "soft categorical mismatchFit",
    "required/optional scoring profile",
    "weight coverage",
    "MetricResult metadata",
    "no double counting",
    "repair routing",
    "variant ranking",
    "tie semantics",
    "no zero-fill",
    "no seedPriority scoring",
    "no mutation",
    "cross-module Topic8 ownership regression"
  ],
  "finality": "TOPIC8_VARIANT_TARGET_HARDFILTER_LOCAL_SCORING_REPAIR_COMPARISON_AND_REGRESSION_OWNER",
  "target_applicability": {
    "GRID_VARIANT": "applicable to GRID_ONLY and GRID_WITH_PLACEMENT_CANDIDATE for non-placement selectors",
    "GRID_WITH_PLACEMENT_CANDIDATE": "requires variantKind=GRID_WITH_PLACEMENT_CANDIDATE",
    "mismatch": "N_A or INVALID according target missingEvidencePolicy"
  }
}
ARCHITECTURE CHECKPOINT · 8.04 OWNS EXPLICIT COLUMNGRID VARIANTS, GRIDTARGETSPEC INTERPRETATION, TOPIC8 HARD FILTER, GRID.SYSTEM.LOCALGRIDFIT, MUTATION-FREE REPAIR ROUTING, TARGET-FIT COMPARISON AND CONSOLIDATED REGRESSION. VARIANTS ARE EXPLICIT IMMUTABLE REF BUNDLES — NO GEOMETRY/CANDIDATE CARTESIAN GENERATION. HARD TARGETS NEVER BECOME NUMERIC COMPONENTS. SOFT COMPONENTS ALL BELONG TO GRID-SYSTEM-LOCAL AND COMPONENTOF GRID.SYSTEM.LOCALGRIDFIT; RAW COLUMN/GUTTER/SPAN/NODE/CANDIDATE DESCRIPTORS DO NOT VOTE. NO PROFILE → LOCALGRIDFIT=N/A. REQUIRED MISSING EVIDENCE IS N/A OR INVALID PER EXPLICIT PROFILE; OPTIONAL EVIDENCE MAY DROP ONLY WHEN DECLARED OPTIONAL. HARD FILTER PRECEDENCE INVALID > REJECT > N_A > KEEP AND IS NEVER DERIVED FROM SCORE. VARIANT RANK = EXPLICIT TARGET FIT ONLY, NEVER BEAUTY. MIXED PROFILE/TARGET-SET EVALUATIONS ARE INVALID FOR COMPARISON. REPAIRS NEVER MUTATE 8.01/8.02/8.03. TOPIC9 CELLS, TOPIC10 ALIGNMENT AND GLOBAL COMPOSITION REMAIN EXTERNAL. NO BEAUTYSCORE.
VISITS / ...