Occupancy — отдельный runtime layer
9.03 получает immutable Cell/Region/Forbidden evidence и строит текущий occupancy snapshot, collision checks, reflow requests и placement candidates.
FREE / UNKNOWN / OCCUPIED.
Discrete CellRef conflict only.
Request, never mutation.
Coverage определяет смысл отсутствия binding
Без coverage нельзя отличить реально свободную cell от просто неописанной.
OccupancySnapshotSpec {
occupancyMapRef,
cellSetRef,
coverage:
COMPLETE |
PARTIAL |
MISSING,
bindings[],
confidence,
provenance
}
Distinct contentRef matters
Два bindings одного contentRef не превращают cell в MULTI_OCCUPIED.
OccupancyBinding {
bindingRef,
cellSetRef,
cellRef,
contentRef,
status:
ACTIVE |
INACTIVE,
sourceOwnerRef,
sourceEvidenceRef,
confidence,
provenance
}
Только memberCellRefs
Outer envelope region не участвует в occupancy aggregation.
CLEAR / COLLISION / UNKNOWN
Collision смотрит только current atomic-cell occupancy.
Explicit excludeContentRef
При relocation можно исключить собственные текущие bindings из проверки, не изменяя snapshot.
Constraint остаётся 9.02
Candidate filter объединяет evidence channels, но не смешивает их семантику.
OCCUPANCY
FREE / UNKNOWN / OCCUPIED / MULTI_OCCUPIED
owner: 9.03
FORBIDDEN
FORBIDDEN / UNRESTRICTED / N_A
owner: 9.02
One contentRef per request
Source scope и filtering policies задаются явно.
GridPlacementRequest {
requestRef,
contentRef,
modularGridRef,
cellSetRef,
regionSetRef?,
occupancyMapRef?,
forbiddenRegistryRef?,
candidateSourceKind:
ALL_CELLS |
EXPLICIT_CELL_REFS |
EXPLICIT_REGION_REFS |
RECT_BLOCK,
allowedCellRefs[]?,
allowedRegionRefs[]?,
rowSpan?,
columnSpan?,
occupancyPolicy:
REQUIRE_KNOWN_FREE |
ALLOW_UNKNOWN |
IGNORE_OCCUPANCY,
forbiddenPolicy:
REQUIRE_UNRESTRICTED |
IGNORE_FORBIDDEN,
excludeContentRef?,
generationBudget,
seed
}
Четыре bounded source models
Никакого hidden multi-object Cartesian product.
| Source | Footprint |
|---|---|
| ALL_CELLS | каждая atomic Cell отдельно |
| EXPLICIT_CELL_REFS | только explicit allow-list cells |
| EXPLICIT_REGION_REFS | exact Region.memberCellRefs |
| RECT_BLOCK | все valid top-left anchors заданного rowSpan×columnSpan |
Unknown не маскируется
Enabled channel либо разрешает, либо блокирует, либо оставляет PARTIAL evidence.
No silent truncation
Raw space проверяется до materialization.
GenerationBudget {
maxRawEvaluations,
maxAcceptedCandidates
}
Fingerprint включает runtime snapshots
Та же requestRef с новой occupancy map — уже другой candidate set.
Advisory only
Collision или нехватка evidence не запускают автоматическое движение.
ReflowRequest {
reflowRequestRef,
requestKind:
REQUEST_RELOCATE_CONTENT |
REQUEST_RELEASE_OCCUPANCY |
REQUEST_RESOLVE_OCCUPANCY |
REQUEST_RESOLVE_FORBIDDEN_CONSTRAINT |
REQUEST_EXPAND_PLACEMENT_SCOPE |
REQUEST_REGENERATE_CANDIDATES,
contentRef,
sourceEvidenceRefs[],
targetOwnerRef,
mutationAllowed: false
}
Runtime state локален
9.03 не становится global layout solver.
| Question | Owner |
|---|---|
| Atomic Cell? | 9.01 |
| Region/forbidden? | 9.02 |
| Cell/region occupancy? | 9.03 |
| Grid collision? | 9.03 |
| Reflow requests? | 9.03 |
| 2D placement candidates? | 9.03 |
| Variants/scoring/final local fit? | 9.04 |
Feasible candidate ≠ good design
Количество свободных cells или candidates не является эстетическим голосом.
Visual Lab
Показываем independence occupancy/forbidden, unknown evidence и reflow without mutation.
9.03 occupancy/collision/candidate regression
Проверяем coverage semantics, region aggregation, self-exclusion, forbidden independence, budgets, deterministic candidate identity и mutation barriers.
DATA FOR LAYOUT ENGINE
Machine-readable 9.03 contract.
{
"module": "Compo 9.03",
"name": "occupancy_collision_reflow_hooks",
"version": "1.1-corrective",
"canonical_main_title": "Occupancy, collision, reflow hooks",
"topic": "09_МОДУЛЬНАЯ_СЕТКА_КОЛОНКИ_И_РЯДЫ",
"scope": "CELL_REGION_OCCUPANCY_GRID_COLLISION_REFLOW_HOOKS_AND_BOUNDED_2D_PLACEMENT_CANDIDATES",
"review_basis": {
"public_MAIN": "9.03 exact title confirmed; Topic9 output includes occupancy map and placement candidates",
"public_Core_0.00": "canonical public Core link still not verifiable; no Core contents invented",
"previous_module": "Compo9.02 regions + forbidden constraints",
"related_owners_reviewed": [
"Compo9.01 CellSet/CellRef/addressing/neighbors",
"Compo9.02 RegionSet/ForbiddenGridRegistry",
"Compo8.02 ColumnGrid node occupancy registry",
"Compo8.03 bounded seeded deterministic candidate generation patterns"
]
},
"consumes": [
"Compo9.00.ModularGrid",
"Compo9.01.CellSet",
"optional Compo9.02.RegionSet",
"optional Compo9.02.ForbiddenGridRegistry",
"explicit OccupancySnapshotSpec",
"explicit GridPlacementRequest",
"explicit GenerationBudget"
],
"provides": [
"OccupancyBinding",
"OccupancySnapshotSpec",
"CellOccupancyState[]",
"RegionOccupancyDescriptor[]",
"ModularGridOccupancyMap",
"GridOccupancyCollision",
"CandidateConstraintCheck",
"ReflowRequest",
"GridPlacementRequest",
"GridPlacementCandidate",
"GridPlacementCandidateSet",
"CandidateRejectionDiagnostic",
"ProposedOccupancyBinding[]"
],
"owns_metrics": [],
"descriptors_only": [
"grid.modular.occupancy.coverage",
"grid.modular.cell.occupancyState",
"grid.modular.cell.distinctOccupantCount",
"grid.modular.region.occupancyState",
"grid.modular.collision.result",
"grid.modular.candidate.rawCount",
"grid.modular.candidate.acceptedCount",
"grid.modular.candidate.evidenceStatus"
],
"occupancy_binding_schema": {
"bindingRef": "stable unique ref",
"cellSetRef": "exact CellSet lineage",
"cellRef": "exact atomic CellRef",
"contentRef": "explicit occupant identity",
"status": "ACTIVE|INACTIVE",
"sourceOwnerRef": "required owner-qualified source",
"sourceEvidenceRef": "required evidence ref",
"confidence": "0..1",
"provenance": "STANDARD|EMPIRICAL|INITIAL_HEURISTIC|STYLE_PRESET|DERIVED"
},
"occupancy_snapshot_spec_schema": {
"occupancyMapRef": "stable versioned snapshot ref",
"cellSetRef": "exact CellSet lineage",
"coverage": "COMPLETE|PARTIAL|MISSING",
"bindings": "OccupancyBinding[]",
"confidence": "0..1",
"provenance": "STANDARD|EMPIRICAL|INITIAL_HEURISTIC|STYLE_PRESET|DERIVED",
"important": "absence semantics depend on coverage"
},
"cell_occupancy_semantics": {
"MISSING": "N_A for every cell",
"COMPLETE + 0 distinct active contentRef": "FREE",
"PARTIAL + 0 distinct active contentRef": "UNKNOWN",
"1 distinct active contentRef": "OCCUPIED",
">=2 distinct active contentRef": "MULTI_OCCUPIED",
"inactive_bindings": "do not occupy",
"same_content_duplicate_bindings": "one distinct occupant"
},
"region_occupancy_semantics": {
"all FREE": "EMPTY_KNOWN",
"all occupied/multi and no unknown": "FULLY_OCCUPIED_KNOWN",
"mix occupied and FREE, no unknown": "PARTIALLY_OCCUPIED_KNOWN",
"occupied plus UNKNOWN/N_A": "OCCUPIED_WITH_UNKNOWN",
"UNKNOWN/N_A with no occupied": "UNKNOWN",
"missing map": "N_A",
"source": "exact Region.memberCellRefs only"
},
"collision_schema": {
"collisionRef": "stable derived ref",
"occupancyMapRef": "exact current snapshot",
"cellSetRef": "exact lineage",
"contentRef": "proposed content",
"proposedCellRefs": "unique explicit atomic CellRefs",
"excludeContentRef": "optional exact self-exclusion",
"result": "CLEAR|COLLISION|UNKNOWN|N_A|INVALID",
"collidingCellRefs": "proven occupied after self-exclusion",
"unknownCellRefs": "unresolved cells",
"occupantRefsByCell": "remaining distinct occupants",
"confidence": "0..1",
"provenance": "DERIVED",
"meaning": "grid occupancy collision only, not arbitrary geometric object intersection"
},
"reflow_request_schema": {
"reflowRequestRef": "stable ref",
"requestKind": "REQUEST_RELOCATE_CONTENT|REQUEST_RELEASE_OCCUPANCY|REQUEST_RESOLVE_OCCUPANCY|REQUEST_RESOLVE_FORBIDDEN_CONSTRAINT|REQUEST_EXPAND_PLACEMENT_SCOPE|REQUEST_REGENERATE_CANDIDATES",
"contentRef": "explicit content",
"sourceEvidenceRefs": "collision/constraint/candidate refs",
"targetOwnerRef": "layout_owner|occupancy_source_owner|constraint_owner|placement_request_owner|candidate_orchestrator",
"suggestedCellRefs": "optional advisory refs",
"mutationAllowed": false,
"provenance": "DERIVED"
},
"grid_placement_request_schema": {
"requestRef": "stable explicit ref",
"contentRef": "exactly one content identity",
"modularGridRef": "exact 9.00 root",
"cellSetRef": "exact 9.01 set",
"regionSetRef": "required for EXPLICIT_REGION_REFS",
"occupancyMapRef": "optional current 9.03 map",
"forbiddenRegistryRef": "optional current 9.02 registry",
"candidateSourceKind": "ALL_CELLS|EXPLICIT_CELL_REFS|EXPLICIT_REGION_REFS|RECT_BLOCK",
"allowedCellRefs": "required for EXPLICIT_CELL_REFS",
"allowedRegionRefs": "required for EXPLICIT_REGION_REFS",
"rowSpan": "integer >=1 for RECT_BLOCK",
"columnSpan": "integer >=1 for RECT_BLOCK",
"occupancyPolicy": "REQUIRE_KNOWN_FREE|ALLOW_UNKNOWN|IGNORE_OCCUPANCY",
"forbiddenPolicy": "REQUIRE_UNRESTRICTED|IGNORE_FORBIDDEN",
"excludeContentRef": "optional explicit self-exclusion",
"generationBudget": "GenerationBudget",
"seed": "required deterministic seed",
"confidence": "0..1",
"provenance": "STANDARD|EMPIRICAL|INITIAL_HEURISTIC|STYLE_PRESET"
},
"generation_budget_schema": {
"maxRawEvaluations": "integer >=1",
"maxAcceptedCandidates": "integer >=1",
"budget_exceeded": "return BUDGET_EXCEEDED before raw materialization; no silent prefix truncation"
},
"candidate_source_semantics": {
"ALL_CELLS": "one one-cell candidate for every atomic Cell",
"EXPLICIT_CELL_REFS": "one one-cell candidate per explicit unique allowed CellRef",
"EXPLICIT_REGION_REFS": "one candidate per exact Region.memberCellRefs footprint",
"RECT_BLOCK": "one candidate for every valid top-left anchor of explicit rowSpan×columnSpan complete atomic block",
"cross_content_cartesian": "FORBIDDEN"
},
"candidate_filter_semantics": {
"occupancy_REQUIRE_KNOWN_FREE": "accept only collision=CLEAR",
"occupancy_ALLOW_UNKNOWN": "reject COLLISION; CLEAR=>COMPLETE evidence, UNKNOWN=>PARTIAL evidence",
"occupancy_IGNORE_OCCUPANCY": "no occupancy rejection; evidenceStatus NOT_APPLIED for occupancy channel",
"forbidden_REQUIRE_UNRESTRICTED": "requires OK registry and all footprint cells UNRESTRICTED_BY_THIS_REGISTRY",
"forbidden_IGNORE_FORBIDDEN": "no forbidden rejection; evidenceStatus NOT_APPLIED for forbidden channel",
"combined": "candidate accepted only when no enabled channel proves or blocks feasibility"
},
"candidate_schema": {
"candidateRef": "generation-set-scoped deterministic ref",
"candidateSetRef": "parent set",
"requestRef": "source request",
"contentRef": "single content",
"sourceKind": "CELL|REGION|RECT_BLOCK",
"sourceRef": "CellRef|RegionRef|derived rect-block signature",
"footprintCellRefs": "canonical row-major unique CellRefs",
"collisionEvidence": "GridOccupancyCollision or NOT_APPLIED",
"forbiddenEvidence": "CandidateConstraintCheck or NOT_APPLIED",
"evidenceStatus": "COMPLETE|PARTIAL|NOT_APPLIED",
"proposedOccupancyBindings": "proposal objects; never applied automatically",
"seedPriority": "deterministic subset-selection key only",
"score": "null / not owned",
"mutationAllowed": false
},
"candidate_set_identity": {
"candidateSetRef": "candidate-set:<requestRef>:<generationFingerprintHash>",
"generationFingerprint": "deterministic serialization of request+lineage+source+policies+budget+seed+occupancyMapRef+forbiddenRegistryRef",
"important": "any relevant snapshot or policy change creates new identity"
},
"ownership_map": {
"8.02": "ColumnGrid node occupancy",
"9.01": "atomic Cell identity/address/geometry",
"9.02": "Region membership and forbidden constraints",
"9.03": "cell/region occupancy, grid collision, reflow hooks, 2D placement candidates",
"9.04": "variants, hard-filter aggregation, local scoring, repairs/comparison/tests"
},
"semantic_firewalls": {
"forbidden_vs_occupied": "9.02 forbidden constraint and 9.03 occupancy state are independent",
"unrestricted_vs_free": "UNRESTRICTED_BY_THIS_REGISTRY is not FREE",
"node_vs_cell_occupancy": "8.02 node occupancy and 9.03 cell occupancy never share registry identity",
"region_envelope_vs_collision": "grid collision uses Region.memberCellRefs, not outerEnvelope",
"grid_collision_vs_geometry_collision": "9.03 collision is discrete occupancy collision only",
"candidate_vs_accepted_layout": "candidate is local feasibility evidence, not layout commitment",
"seed_priority_vs_score": "seedPriority is not a score",
"reflow_vs_mutation": "reflow request never mutates foreign-owned state"
},
"metric_policy": {
"direct_scoring": "FORBIDDEN in 9.03",
"free_cell_count_score": "FORBIDDEN",
"collision_count_score": "FORBIDDEN",
"candidate_count_score": "FORBIDDEN",
"seedPriority_score": "FORBIDDEN",
"beautyScore": "FORBIDDEN"
},
"hard_constraints": [
"9.03 owns canonical ModularGrid atomic-cell occupancy state, region occupancy descriptors, grid-occupancy collision evidence, mutation-free reflow hooks and bounded seeded deterministic 2D placement candidate generation.",
"Atomic Cell identity/address/geometry remain owned by Compo9.01.",
"Region identity/membership/forbidden constraints remain owned by Compo9.02.",
"Canonical ColumnGrid GridNode occupancy remains owned by Compo8.02 and must not alias ModularGrid cell occupancy.",
"Occupancy map lineage is scoped to exactly one CellSetRef.",
"Occupancy coverage state is explicit: COMPLETE, PARTIAL or MISSING.",
"MISSING coverage produces occupancy map status N_A and every atomic Cell occupancy state N_A.",
"COMPLETE coverage plus no active occupant binding on a Cell means FREE.",
"PARTIAL coverage plus no active occupant binding on a Cell means UNKNOWN.",
"One distinct active contentRef on a Cell means OCCUPIED.",
"Two or more distinct active contentRef values on a Cell means MULTI_OCCUPIED.",
"Multiple active bindings for the same contentRef on one Cell do not create MULTI_OCCUPIED by themselves.",
"Inactive occupancy bindings are preserved as provenance but do not occupy cells.",
"Unknown CellRef, duplicate bindingRef or cross-CellSet binding is INVALID.",
"Occupancy binding contentRef must be explicit and non-empty.",
"Region occupancy is derived only from its explicit memberCellRefs and never from outerEnvelope geometry.",
"Region occupancy descriptors are EMPTY_KNOWN, PARTIALLY_OCCUPIED_KNOWN, FULLY_OCCUPIED_KNOWN, OCCUPIED_WITH_UNKNOWN, UNKNOWN or N_A.",
"Region occupancy with any UNKNOWN member and at least one proven occupied member is OCCUPIED_WITH_UNKNOWN.",
"Region occupancy with UNKNOWN members and no proven occupied member is UNKNOWN.",
"Region occupancy is a descriptor and is not a score.",
"Forbidden state from 9.02 and occupancy state from 9.03 are independent evidence channels.",
"FORBIDDEN does not imply OCCUPIED.",
"UNRESTRICTED_BY_THIS_REGISTRY does not imply FREE.",
"GridOccupancyCollision evaluates proposed atomic CellRefs against current occupancy evidence only.",
"Collision result is COLLISION if any proposed Cell is OCCUPIED or MULTI_OCCUPIED after explicit self-exclusion policy.",
"Collision result is UNKNOWN if there is no proven collision but at least one proposed Cell is UNKNOWN or N_A.",
"Collision result is CLEAR only when all evaluated proposed Cells are known FREE after explicit self-exclusion policy.",
"Collision does not inspect forbidden constraints; forbidden conflict is a separate CandidateConstraintCheck.",
"Collision does not claim exact pixel/shape intersection inside gutters, row gaps or arbitrary object geometry.",
"Self-exclusion is allowed only by explicit excludeContentRef and removes only that contentRef from occupancy evaluation; it never deletes stored bindings.",
"Reflow hooks are advisory requests with mutationAllowed=false.",
"9.03 never automatically moves content, clears occupancy, edits RegionSet, changes forbidden declarations or rewrites CellSet.",
"Baseline reflow request kinds are REQUEST_RELOCATE_CONTENT, REQUEST_RELEASE_OCCUPANCY, REQUEST_RESOLVE_OCCUPANCY, REQUEST_RESOLVE_FORBIDDEN_CONSTRAINT, REQUEST_EXPAND_PLACEMENT_SCOPE and REQUEST_REGENERATE_CANDIDATES.",
"One GridPlacementRequest operates on exactly one explicit contentRef.",
"Baseline candidate source kinds are ALL_CELLS, EXPLICIT_CELL_REFS, EXPLICIT_REGION_REFS and RECT_BLOCK.",
"RECT_BLOCK requires explicit rowSpan>=1 and columnSpan>=1 and enumerates valid top-left anchors only.",
"EXPLICIT_REGION_REFS uses exact Region memberCellRefs as occupancy footprint; region outerEnvelope is not used for grid-occupancy collision.",
"Candidate occupancy policy is explicit: REQUIRE_KNOWN_FREE, ALLOW_UNKNOWN or IGNORE_OCCUPANCY.",
"Candidate forbidden policy is explicit: REQUIRE_UNRESTRICTED or IGNORE_FORBIDDEN.",
"REQUIRE_KNOWN_FREE accepts only footprints whose collision result is CLEAR.",
"ALLOW_UNKNOWN rejects proven COLLISION but may retain UNKNOWN candidates with evidenceStatus PARTIAL.",
"IGNORE_OCCUPANCY does not convert occupied cells to free; it marks occupancy filtering NOT_APPLIED.",
"REQUIRE_UNRESTRICTED requires a present OK forbidden registry and every footprint Cell state UNRESTRICTED_BY_THIS_REGISTRY.",
"A missing forbidden registry under REQUIRE_UNRESTRICTED yields unresolved candidate evidence and must not be treated as unrestricted.",
"Any FORBIDDEN cell under REQUIRE_UNRESTRICTED rejects the candidate.",
"IGNORE_FORBIDDEN does not convert forbidden cells to allowed; it marks forbidden filtering NOT_APPLIED.",
"GenerationBudget requires finite integer maxRawEvaluations>=1 and maxAcceptedCandidates>=1.",
"If potential raw candidate count exceeds maxRawEvaluations, generation returns BUDGET_EXCEEDED and does not silently truncate the raw candidate space.",
"CandidateSetRef must include a deterministic generation fingerprint over request lineage, source, policies, budget, seed, occupancyMapRef and forbiddenRegistryRef.",
"Changing seed, budget, candidate source, occupancy snapshot, forbidden registry or policy must create a new candidate-set identity.",
"Candidate semantic identity includes exact ordered footprint CellRefs and source semantics.",
"Candidate subset selection above maxAcceptedCandidates is deterministic and seed-dependent.",
"Seed priority is an implementation selection key only and must never become a score or aesthetic preference.",
"Candidate generation must not produce a Cartesian product across multiple contentRef values.",
"Proposed occupancy bindings emitted by candidates are proposals only and never mutate the current occupancy map.",
"Placement candidate acceptance is local grid feasibility evidence, not global layout acceptance.",
"9.03 owns no numeric aesthetic metric.",
"9.04 owns explicit variants, hard-filter aggregation, local Topic9 scoring, repairs/comparison and consolidated tests.",
"N/A != 0.",
"No beautyScore.",
"Collision identity must canonicalize proposedCellRefs before hashing so semantically identical footprints are order-invariant.",
"Collision identity must include excludeContentRef because self-exclusion can change the collision result.",
"Generation fingerprint must canonicalize set-like allowedCellRefs and allowedRegionRefs before hashing."
],
"hard_rules": [
"9.03 owns canonical ModularGrid atomic-cell occupancy state, region occupancy descriptors, grid-occupancy collision evidence, mutation-free reflow hooks and bounded seeded deterministic 2D placement candidate generation.",
"Atomic Cell identity/address/geometry remain owned by Compo9.01.",
"Region identity/membership/forbidden constraints remain owned by Compo9.02.",
"Canonical ColumnGrid GridNode occupancy remains owned by Compo8.02 and must not alias ModularGrid cell occupancy.",
"Occupancy map lineage is scoped to exactly one CellSetRef.",
"Occupancy coverage state is explicit: COMPLETE, PARTIAL or MISSING.",
"MISSING coverage produces occupancy map status N_A and every atomic Cell occupancy state N_A.",
"COMPLETE coverage plus no active occupant binding on a Cell means FREE.",
"PARTIAL coverage plus no active occupant binding on a Cell means UNKNOWN.",
"One distinct active contentRef on a Cell means OCCUPIED.",
"Two or more distinct active contentRef values on a Cell means MULTI_OCCUPIED.",
"Multiple active bindings for the same contentRef on one Cell do not create MULTI_OCCUPIED by themselves.",
"Inactive occupancy bindings are preserved as provenance but do not occupy cells.",
"Unknown CellRef, duplicate bindingRef or cross-CellSet binding is INVALID.",
"Occupancy binding contentRef must be explicit and non-empty.",
"Region occupancy is derived only from its explicit memberCellRefs and never from outerEnvelope geometry.",
"Region occupancy descriptors are EMPTY_KNOWN, PARTIALLY_OCCUPIED_KNOWN, FULLY_OCCUPIED_KNOWN, OCCUPIED_WITH_UNKNOWN, UNKNOWN or N_A.",
"Region occupancy with any UNKNOWN member and at least one proven occupied member is OCCUPIED_WITH_UNKNOWN.",
"Region occupancy with UNKNOWN members and no proven occupied member is UNKNOWN.",
"Region occupancy is a descriptor and is not a score.",
"Forbidden state from 9.02 and occupancy state from 9.03 are independent evidence channels.",
"FORBIDDEN does not imply OCCUPIED.",
"UNRESTRICTED_BY_THIS_REGISTRY does not imply FREE.",
"GridOccupancyCollision evaluates proposed atomic CellRefs against current occupancy evidence only.",
"Collision result is COLLISION if any proposed Cell is OCCUPIED or MULTI_OCCUPIED after explicit self-exclusion policy.",
"Collision result is UNKNOWN if there is no proven collision but at least one proposed Cell is UNKNOWN or N_A.",
"Collision result is CLEAR only when all evaluated proposed Cells are known FREE after explicit self-exclusion policy.",
"Collision does not inspect forbidden constraints; forbidden conflict is a separate CandidateConstraintCheck.",
"Collision does not claim exact pixel/shape intersection inside gutters, row gaps or arbitrary object geometry.",
"Self-exclusion is allowed only by explicit excludeContentRef and removes only that contentRef from occupancy evaluation; it never deletes stored bindings.",
"Reflow hooks are advisory requests with mutationAllowed=false.",
"9.03 never automatically moves content, clears occupancy, edits RegionSet, changes forbidden declarations or rewrites CellSet.",
"Baseline reflow request kinds are REQUEST_RELOCATE_CONTENT, REQUEST_RELEASE_OCCUPANCY, REQUEST_RESOLVE_OCCUPANCY, REQUEST_RESOLVE_FORBIDDEN_CONSTRAINT, REQUEST_EXPAND_PLACEMENT_SCOPE and REQUEST_REGENERATE_CANDIDATES.",
"One GridPlacementRequest operates on exactly one explicit contentRef.",
"Baseline candidate source kinds are ALL_CELLS, EXPLICIT_CELL_REFS, EXPLICIT_REGION_REFS and RECT_BLOCK.",
"RECT_BLOCK requires explicit rowSpan>=1 and columnSpan>=1 and enumerates valid top-left anchors only.",
"EXPLICIT_REGION_REFS uses exact Region memberCellRefs as occupancy footprint; region outerEnvelope is not used for grid-occupancy collision.",
"Candidate occupancy policy is explicit: REQUIRE_KNOWN_FREE, ALLOW_UNKNOWN or IGNORE_OCCUPANCY.",
"Candidate forbidden policy is explicit: REQUIRE_UNRESTRICTED or IGNORE_FORBIDDEN.",
"REQUIRE_KNOWN_FREE accepts only footprints whose collision result is CLEAR.",
"ALLOW_UNKNOWN rejects proven COLLISION but may retain UNKNOWN candidates with evidenceStatus PARTIAL.",
"IGNORE_OCCUPANCY does not convert occupied cells to free; it marks occupancy filtering NOT_APPLIED.",
"REQUIRE_UNRESTRICTED requires a present OK forbidden registry and every footprint Cell state UNRESTRICTED_BY_THIS_REGISTRY.",
"A missing forbidden registry under REQUIRE_UNRESTRICTED yields unresolved candidate evidence and must not be treated as unrestricted.",
"Any FORBIDDEN cell under REQUIRE_UNRESTRICTED rejects the candidate.",
"IGNORE_FORBIDDEN does not convert forbidden cells to allowed; it marks forbidden filtering NOT_APPLIED.",
"GenerationBudget requires finite integer maxRawEvaluations>=1 and maxAcceptedCandidates>=1.",
"If potential raw candidate count exceeds maxRawEvaluations, generation returns BUDGET_EXCEEDED and does not silently truncate the raw candidate space.",
"CandidateSetRef must include a deterministic generation fingerprint over request lineage, source, policies, budget, seed, occupancyMapRef and forbiddenRegistryRef.",
"Changing seed, budget, candidate source, occupancy snapshot, forbidden registry or policy must create a new candidate-set identity.",
"Candidate semantic identity includes exact ordered footprint CellRefs and source semantics.",
"Candidate subset selection above maxAcceptedCandidates is deterministic and seed-dependent.",
"Seed priority is an implementation selection key only and must never become a score or aesthetic preference.",
"Candidate generation must not produce a Cartesian product across multiple contentRef values.",
"Proposed occupancy bindings emitted by candidates are proposals only and never mutate the current occupancy map.",
"Placement candidate acceptance is local grid feasibility evidence, not global layout acceptance.",
"9.03 owns no numeric aesthetic metric.",
"9.04 owns explicit variants, hard-filter aggregation, local Topic9 scoring, repairs/comparison and consolidated tests.",
"N/A != 0.",
"No beautyScore.",
"Collision identity must canonicalize proposedCellRefs before hashing so semantically identical footprints are order-invariant.",
"Collision identity must include excludeContentRef because self-exclusion can change the collision result.",
"Generation fingerprint must canonicalize set-like allowedCellRefs and allowedRegionRefs before hashing."
],
"soft_constraints": [],
"preferences": [],
"overrides_allowed_by": [
"a newer explicit occupancy snapshot creates a new occupancyMapRef",
"a newer forbidden registry changes candidate constraint evidence without mutating occupancy",
"a new request/seed/budget/policy creates a new candidate set lineage",
"historical occupancy maps and candidate sets remain immutable"
],
"initial_heuristics": {
"seed_hash": {
"algorithm": "FNV-1a 32-bit reference implementation for deterministic subset selection",
"provenance": "IMPLEMENTATION_HEURISTIC",
"note": "selection determinism only; not visual scoring"
}
},
"style_preset_values": [],
"correction_policy": {
"foreign_content_mutation": "FORBIDDEN",
"collision": "emit REQUEST_RELOCATE_CONTENT or REQUEST_RELEASE_OCCUPANCY; do not move/delete",
"unknown_occupancy": "emit REQUEST_RESOLVE_OCCUPANCY",
"forbidden_conflict": "emit REQUEST_RESOLVE_FORBIDDEN_CONSTRAINT or relocate",
"candidate_exhaustion": "emit REQUEST_EXPAND_PLACEMENT_SCOPE or REQUEST_REGENERATE_CANDIDATES",
"variant_scoring_question": "route to Compo9.04"
},
"deferred_inputs": [
"Compo9.04 variants/scoring/closing tests",
"non-grid exact geometric object collision if required by another owner",
"global multi-content placement orchestration"
],
"recompute_when": [
"CellSetRef changes",
"RegionSetRef changes",
"ForbiddenGridRegistry changes",
"occupancy snapshot coverage/bindings change",
"placement request/source/policy/budget/seed changes"
],
"tests": [
"occupancy COMPLETE/PARTIAL/MISSING semantics",
"distinct occupants vs duplicate same content",
"region occupancy descriptors",
"self-exclusion collision",
"CLEAR/COLLISION/UNKNOWN/N_A",
"forbidden independence",
"candidate source enumeration",
"rect block generation",
"budget exceeded",
"require known free / allow unknown / ignore occupancy",
"require unrestricted / missing registry / forbidden reject",
"generation fingerprint",
"deterministic subset",
"proposed bindings no mutation",
"reflow requests mutation-free",
"no score/global leakage"
],
"finality": "MODULARGRID_OCCUPANCY_COLLISION_REFLOW_AND_2D_CANDIDATE_OWNER_ONLY",
"corrective_identity_rules": {
"collisionRef": "hashes canonical row-major proposedCellRefs plus occupancyMapRef, cellSetRef, contentRef and excludeContentRef",
"collision_order_invariance": "same semantic footprint with different input order => same collisionRef",
"self_exclusion_identity": "excludeContentRef is part of collision identity because it can change collision result",
"candidateSet_allowlist_order_invariance": "EXPLICIT_CELL_REFS and EXPLICIT_REGION_REFS are canonicalized before generation fingerprinting"
}
}