ColumnGrid — корень, не готовая геометрия
8.00 создаёт стабильный root identity и связывает grid с explicit domain. Колонки, gutters, lines, nodes и occupancy появляются только в дочерних модулях.
Root schema, domain binding, coordinate contract.
Columns / gutters / nodes / occupancy / score.
Column partition on X, block extent on Y.
Grid domain выбирается явно
ColumnGrid строится внутри owner-qualified domain: canvas, safe shell, platform-safe snapshot или другого explicit source.
GridDomainBinding {
bindingRef,
gridDomainRef,
domainOwnerRef,
canvasRef,
domainSnapshotRef?,
geometryType:
RECT |
REGION_REF |
DISCONNECTED_REGION_REF,
rect? | regionRef?,
unit:
PX |
CANVAS_UNIT |
MM,
coordinateFrame:
CANVAS_TOP_LEFT_Y_DOWN,
mappingAdapterRef?,
confidence,
provenance
}
Не схлопывать сложную область в bbox
Irregular или disconnected safe-region не должен превращаться в один прямоугольник только ради удобства grid math.
RECT
Baseline напрямую поддерживается.
REGION_REF
PARTIAL до explicit adapter.
DISCONNECTED
Adapter должен явно разбить domain на допустимые segments/instances. BBox-collapse запрещён.
Column axis = X
Baseline Topic 8 — классическая вертикальная колонная сетка в экранной системе координат.
Raw domain units + optional ShortN
8.00 задаёт контракт пространства, но не рассчитывает widths/gutters — это будет 8.01.
mappingAdapterRef лишь идентифицирует adapter. 8.00 не должен притворяться, что строковая ссылка сама конвертирует единицы.Root shell
Root хранит только identity и ссылки на child outputs.
ColumnGrid {
gridRef,
canvasRef,
gridDomainBindingRef,
coordinateContextRef,
gridKind:
COLUMN_GRID,
columnAxis:
X,
blockAxis:
Y,
childRefs: {
columnGeometryRef?,
gridTopologyRef?,
occupancyRegistryRef?,
placementCandidateSetRef?,
gridEvaluationRef?
},
status,
confidence,
provenance
}
Пять модулей — пять границ
Topic 8 заранее делится так, чтобы later modules не создавали overlapping owners.
| Module | Canonical ownership |
|---|---|
| 8.00 | ColumnGrid root, domain binding, coordinate contract, ownership map |
| 8.01 | Columns, widths, gutters, spans, resolved 1D geometry |
| 8.02 | GridLine[], GridNode[], ColumnGrid node occupancy registry |
| 8.03 | Bounded deterministic placement candidates + lineage |
| 8.04 | Variants, explicit-target local scoring, Topic8 regression |
Node occupancy живёт в 8.02
MAIN прямо требует, чтобы ownership занятости grid nodes в итоге жил в Topic 8. 8.00 резервирует границу, но не реализует registry.
Grid evidence ≠ alignment relation
Topic10 сможет измерять выравнивание объектов относительно grid lines/nodes, но не переопределяет grid topology.
Topic 8
Что является column/grid line/node и где оно находится.
Topic 10
Как object edge/center/baseline соотносится с уже существующей line/node.
7.05 может менять domain snapshot
Platform overlay lifecycle остаётся 7.05. Topic 8 получает только versioned resolved geometry/ref.
Recompute ≠ mutation
Изменение domain/canvas/context должно инвалидировать зависимые child results, а не тихо переписывать layout.
ColumnGridDependencyInvalidation {
gridRef,
sourceChangeRef,
invalidate: [
"Compo8.01",
"Compo8.02",
"Compo8.03",
"Compo8.04"
],
mutationAllowed: false
}
Сетка пока ничего не «улучшает»
Сам факт наличия колонной сетки или определённое количество колонок не являются quality evidence.
Visual Lab
8.00 показывает только domain/root semantics — без притворной geometry 8.01.
8.00 schema regression
Проверяем identity, domain, coordinate contract, child-ref shell, ownership firewalls и invalidation semantics.
DATA FOR LAYOUT ENGINE
Machine-readable root contract Topic 8.
{
"module": "Compo 8.00",
"name": "column_grid_schema_and_ownership",
"version": "1.0-canonical",
"canonical_main_title": "ColumnGrid schema и ownership",
"topic": "08_КОЛОННАЯ_СЕТКА",
"scope": "COLUMNGRID_ROOT_SCHEMA_DOMAIN_BINDING_COORDINATE_CONTRACT_AND_TOPIC8_OWNERSHIP",
"consumes": [
"Compo6.00.CanvasDescriptor or equivalent explicit canvas identity",
"explicit GridDomainBinding",
"optional Compo6.03.CanvasNormalizationContext",
"optional Compo7.00 rectangular safe/margin shell geometry as a domain source",
"optional Compo7.05 DynamicSafeZoneSnapshot as a versioned domain source",
"optional explicit domain adapter for non-rect/disconnected regions"
],
"provides": [
"ColumnGrid",
"GridDomainBinding",
"GridCoordinateContext",
"ColumnGridChildRefs",
"ColumnGridOwnershipMap",
"ColumnGridDependencyInvalidation",
"Topic8 module boundary refs for 8.01–8.04"
],
"owns_metrics": [],
"descriptors_only": [
"grid.column.gridRef",
"grid.column.canvasRef",
"grid.column.gridDomainRef",
"grid.column.domainSnapshotRef",
"grid.column.domainGeometryType",
"grid.column.sourceUnit",
"grid.column.coordinateFrame",
"grid.column.columnAxis",
"grid.column.blockAxis",
"grid.column.geometryRef",
"grid.column.topologyRef",
"grid.column.occupancyRegistryRef",
"grid.column.placementCandidateSetRef",
"grid.column.evaluationRef",
"grid.column.status",
"grid.column.confidence"
],
"grid_domain_binding_schema": {
"bindingRef": "stable versioned ref",
"gridDomainRef": "owner-qualified source domain ref",
"domainOwnerRef": "Compo6.00 | Compo7.00 | Compo7.05 | explicit external owner",
"canvasRef": "must match ColumnGrid canvasRef unless explicit mapping adapter exists",
"domainSnapshotRef": "required for dynamic/versioned domain sources",
"geometryType": "RECT | REGION_REF | DISCONNECTED_REGION_REF",
"rect": "required for RECT; finite x0< x1 and y0< y1",
"regionRef": "required for REGION_REF / DISCONNECTED_REGION_REF",
"unit": "PX | CANVAS_UNIT | MM",
"coordinateFrame": "CANVAS_TOP_LEFT_Y_DOWN",
"mappingAdapterRef": "optional explicit cross-space/cross-canvas adapter",
"confidence": "0..1",
"provenance": "object",
"important": "8.00 never derives the grid domain from content occupancy or object extrema"
},
"grid_coordinate_context_schema": {
"coordinateContextRef": "stable ref",
"canvasRef": "same canvas as grid/domain",
"sourceUnit": "PX | CANVAS_UNIT | MM",
"coordinateFrame": "CANVAS_TOP_LEFT_Y_DOWN",
"columnAxis": "X",
"blockAxis": "Y",
"normalizationContextRef": "optional Compo6.03 context",
"normalizedLengthMode": "NONE | SHORT_N",
"uvPolicy": "PLACEMENT_ONLY_NOT_METRIC",
"important": "portrait/landscape changes domain dimensions but do not rotate ColumnGrid ownership semantics implicitly"
},
"column_grid_schema": {
"gridRef": "stable versioned root ref",
"canvasRef": "canvas identity",
"gridDomainBindingRef": "required GridDomainBinding ref",
"coordinateContextRef": "required GridCoordinateContext ref",
"gridKind": "COLUMN_GRID",
"columnAxis": "X",
"blockAxis": "Y",
"childRefs": "ColumnGridChildRefs",
"status": "SCHEMA_READY | PARTIAL | INVALID",
"confidence": "0..1",
"provenance": "object",
"important": "root shell references child contracts but does not duplicate their data"
},
"child_refs_schema": {
"columnGeometryRef": "Compo8.01 output ref or null",
"gridTopologyRef": "Compo8.02 output ref or null",
"occupancyRegistryRef": "Compo8.02 ColumnGrid node occupancy registry ref or null",
"placementCandidateSetRef": "Compo8.03 output ref or null",
"gridEvaluationRef": "Compo8.04 output ref or null",
"no_embedded_child_payloads": true
},
"topic8_ownership_map": {
"8.00": [
"ColumnGrid root identity",
"GridDomainBinding",
"GridCoordinateContext",
"child-ref shell",
"Topic8 ownership boundary"
],
"8.01": [
"columns",
"column widths",
"gutters",
"spans",
"resolved 1D column geometry"
],
"8.02": [
"canonical grid lines",
"canonical grid nodes",
"ColumnGrid node occupancy registry",
"node occupancy state/provenance"
],
"8.03": [
"placement candidates constrained by resolved ColumnGrid",
"candidate lineage",
"bounded/deterministic column-grid candidate generation"
],
"8.04": [
"grid variants",
"explicit-target local grid scoring",
"Topic8 violation/repair aggregation where applicable",
"consolidated Topic8 regression"
]
},
"cross_topic_ownership": {
"Compo6.00": "canvas/domain identity and aspect ratio",
"Compo6.03": "canonical ShortN normalization context",
"Compo7.00": "safe/margin/bleed shell geometry that may be selected as a grid domain",
"Compo7.05": "dynamic platform-safe region lifecycle/snapshots",
"Compo9": "2D modular grid rows/cells/regions and ModularGrid cell/region occupancy; must not re-own ColumnGrid node occupancy",
"Compo10": "alignment relations that may consume Topic8 lines/nodes; does not own the line/node definitions",
"future_global": "balance/hierarchy/eye-flow/global composition evaluation"
},
"domain_resolution_policy": {
"RECT": "direct baseline support",
"REGION_REF": "PARTIAL until an explicit adapter exposes a supported column-domain representation",
"DISCONNECTED_REGION_REF": "PARTIAL unless an explicit adapter creates separate valid grid-domain segments/instances",
"forbidden": "silent bounding-box collapse of irregular or disconnected safe regions"
},
"identity_policy": {
"same_canvas": "required by default",
"cross_canvas": "INVALID without explicit mappingAdapterRef",
"dynamic_snapshot": "domainSnapshotRef participates in lineage and recompute identity",
"child_ref_canvas_consistency": "validated downstream when child outputs resolve"
},
"normalization_policy": {
"raw_source_unit": "inherited from explicit domain binding",
"SHORT_N": "optional normalized representation through Compo6.03 only",
"UV": "placement-only; not canonical metric distance/width unit",
"conversion": "requires explicit adapter; unitMappingRef/mappingAdapterRef is evidence of adapter identity, not an implementation of conversion by itself"
},
"lifecycle_and_recompute": {
"root_shell_mutation": "forbidden as implicit response to dependency change",
"domain_snapshot_change": [
"invalidate/recompute Compo8.01 geometry",
"invalidate/recompute Compo8.02 topology/occupancy interpretation where geometry-dependent",
"invalidate Compo8.03 placement candidates",
"invalidate Compo8.04 evaluations"
],
"canvas_geometry_change": "same downstream invalidation chain",
"normalization_context_change": "recompute normalized grid measurements in downstream owners",
"important": "invalidation is not automatic content reflow"
},
"semantic_firewalls": {
"grid_vs_safe_zone": "grid may bind to a safe-zone domain but does not own safety semantics",
"grid_vs_content": "grid existence does not imply content must occupy every column/node",
"schema_vs_geometry": "8.00 root schema does not define actual widths/gutters/spans",
"node_vs_cell_occupancy": "ColumnGrid node occupancy belongs 8.02; ModularGrid cell/region occupancy belongs Topic9",
"grid_vs_alignment": "Topic10 measures alignment relations to grid evidence but does not redefine grid topology",
"grid_vs_quality": "column count/grid presence are not universal quality votes"
},
"metric_policy": {
"direct_scoring": "FORBIDDEN in 8.00",
"column_count_score": "FORBIDDEN",
"grid_presence_score": "FORBIDDEN",
"more_columns_is_better": "FORBIDDEN",
"symmetrical_grid_is_better": "FORBIDDEN",
"beautyScore": "FORBIDDEN"
},
"hard_constraints": [
"8.00 owns the ColumnGrid root schema, grid identity, domain binding, coordinate-space contract and Topic8 ownership map only.",
"8.00 does not own column count, column widths, gutter widths or span geometry; Compo8.01 owns those contracts.",
"8.00 does not own canonical grid lines, grid nodes or node occupancy; Compo8.02 owns those contracts and the ColumnGrid node occupancy registry.",
"8.00 does not generate placement candidates; Compo8.03 owns candidate generation over an already resolved ColumnGrid.",
"8.00 does not own grid variant scoring; Compo8.04 owns variants, local scoring and consolidated Topic8 tests.",
"The baseline ColumnGrid is one-dimensional along canvas X: columns partition the inline X axis and extend through the bound grid domain in Y.",
"Screen coordinate convention remains top-left origin with +X right and +Y down.",
"A grid domain must be explicit and owner-qualified; 8.00 must not infer a safe zone, margin, canvas crop or platform-safe region from content geometry.",
"A rectangular domain may be consumed directly. A non-rect or disconnected region requires an explicit adapter or remains PARTIAL; it must not be collapsed to one bounding box silently.",
"Canvas/domain/grid identity must remain explicit and consistent. Cross-canvas bindings are INVALID unless an explicit mapping adapter is supplied.",
"The grid source unit follows the bound domain unit. Unit conversion requires an explicit mapping/adapter; a string ref alone does not perform conversion.",
"SHORT_N may be carried as an optional normalized representation only through a compatible Compo6.03 CanvasNormalizationContext.",
"AXIS_FRACTION_UV is placement space, not the canonical metric unit for grid widths/gutters.",
"Dynamic safe-region snapshots from Compo7.05 may be bound as versioned grid-domain evidence, but 8.00 does not own overlay lifecycle or safe-region resolution.",
"A change of bound domain snapshot invalidates downstream Topic8 geometry/topology/candidate/evaluation evidence; it does not mutate content or rebuild a grid automatically.",
"Topic8 ColumnGrid node occupancy and Topic9 ModularGrid cell/region occupancy are distinct ownership domains.",
"Topic10 alignment may consume grid lines/nodes but does not retroactively own or redefine them.",
"Grid schema existence is not a quality score.",
"No universal preferred column count or gutter ratio is defined in 8.00.",
"N/A != 0.",
"No beautyScore."
],
"hard_rules": [
"8.00 owns the ColumnGrid root schema, grid identity, domain binding, coordinate-space contract and Topic8 ownership map only.",
"8.00 does not own column count, column widths, gutter widths or span geometry; Compo8.01 owns those contracts.",
"8.00 does not own canonical grid lines, grid nodes or node occupancy; Compo8.02 owns those contracts and the ColumnGrid node occupancy registry.",
"8.00 does not generate placement candidates; Compo8.03 owns candidate generation over an already resolved ColumnGrid.",
"8.00 does not own grid variant scoring; Compo8.04 owns variants, local scoring and consolidated Topic8 tests.",
"The baseline ColumnGrid is one-dimensional along canvas X: columns partition the inline X axis and extend through the bound grid domain in Y.",
"Screen coordinate convention remains top-left origin with +X right and +Y down.",
"A grid domain must be explicit and owner-qualified; 8.00 must not infer a safe zone, margin, canvas crop or platform-safe region from content geometry.",
"A rectangular domain may be consumed directly. A non-rect or disconnected region requires an explicit adapter or remains PARTIAL; it must not be collapsed to one bounding box silently.",
"Canvas/domain/grid identity must remain explicit and consistent. Cross-canvas bindings are INVALID unless an explicit mapping adapter is supplied.",
"The grid source unit follows the bound domain unit. Unit conversion requires an explicit mapping/adapter; a string ref alone does not perform conversion.",
"SHORT_N may be carried as an optional normalized representation only through a compatible Compo6.03 CanvasNormalizationContext.",
"AXIS_FRACTION_UV is placement space, not the canonical metric unit for grid widths/gutters.",
"Dynamic safe-region snapshots from Compo7.05 may be bound as versioned grid-domain evidence, but 8.00 does not own overlay lifecycle or safe-region resolution.",
"A change of bound domain snapshot invalidates downstream Topic8 geometry/topology/candidate/evaluation evidence; it does not mutate content or rebuild a grid automatically.",
"Topic8 ColumnGrid node occupancy and Topic9 ModularGrid cell/region occupancy are distinct ownership domains.",
"Topic10 alignment may consume grid lines/nodes but does not retroactively own or redefine them.",
"Grid schema existence is not a quality score.",
"No universal preferred column count or gutter ratio is defined in 8.00.",
"N/A != 0.",
"No beautyScore."
],
"soft_constraints": [],
"preferences": [],
"overrides_allowed_by": [
"a newer explicit GridDomainBinding/domain snapshot may be used for future ColumnGrid instances",
"a newer explicit GridCoordinateContext may supersede an older future evaluation context",
"historical ColumnGrid roots remain tied to original refs and are not retroactively mutated"
],
"initial_heuristics": {},
"style_preset_values": [],
"candidate_generation": {
"geometry_candidates": "NONE",
"placement_candidates": "NONE",
"reason": "8.00 is a schema/ownership module; 8.03 owns bounded placement candidate generation"
},
"correction_policy": {
"foreign_content_mutation": "FORBIDDEN",
"missing_canvas": "route to Compo6.00/integration owner",
"missing_or_invalid_grid_domain": "route to source domain owner or explicit adapter",
"missing_normalization_context": "allow raw-only downstream geometry or route to Compo6.03",
"column_geometry_question": "route to Compo8.01",
"grid_line_node_occupancy_question": "route to Compo8.02",
"placement_candidate_question": "route to Compo8.03",
"variant_scoring_question": "route to Compo8.04",
"modular_rows_cells_question": "route to Topic9",
"alignment_question": "route to Topic10"
},
"deferred_inputs": [
"Compo8.01 column widths/gutters/spans",
"Compo8.02 grid lines/nodes/ColumnGrid node occupancy registry",
"Compo8.03 placement candidates",
"Compo8.04 variants/scoring/tests",
"Topic9 two-dimensional ModularGrid",
"Topic10 alignment relations",
"future non-rect/disconnected domain adapters"
],
"recompute_when": [
"canvas identity or geometry changes",
"GridDomainBinding changes",
"domainSnapshotRef changes",
"domain geometry/unit/frame changes",
"GridCoordinateContext changes",
"Compo6.03 normalizationContext changes",
"resolved child refs are replaced by newer explicit versions"
],
"tests": [
"root schema validation",
"rect domain validation",
"cross-canvas mismatch",
"non-rect partial behavior",
"disconnected region no bbox collapse",
"coordinate frame",
"X/Y axis ownership",
"ShortN context contract",
"UV metric prohibition",
"child-ref shell",
"Topic8 ownership firewall",
"Topic9 node-vs-cell occupancy firewall",
"Topic10 alignment firewall",
"dynamic domain invalidation",
"determinism",
"no score/global leakage"
],
"finality": "COLUMNGRID_ROOT_SCHEMA_DOMAIN_BINDING_AND_TOPIC8_OWNERSHIP_ONLY"
}