Atomic cell = ColumnTrack × RowTrack
9.01 создаёт каноническую адресуемую 2D lattice из уже готовых X/Y tracks. Gutter/gap остаются spacing bands, а не cells.
One column × one row.
Zero-based row + column.
No occupancy / forbidden / score.
Zero-based canonical machine address
One-based label может существовать только как UI-подпись.
CellAddress {
rowIndex,
columnIndex,
addressKey:
"r<row>:c<column>",
ordinal:
rowIndex * columnCount
+ columnIndex,
displayLabel?:
"R1C1" // presentation only
}
One identity, one atomic module
`module` здесь — терминологический alias ячейки, а не новый объект с отдельным moduleRef.
Cell {
cellRef,
cellSetRef,
modularGridRef,
gridRef,
columnGeometryRef,
rowGeometryRef,
address,
moduleKind:
ATOMIC_CELL,
columnTrackRef,
rowTrackRef,
rect: {
x0, y0,
x1, y1
},
widthRaw,
heightRaw,
aspectRatio,
neighborRefs,
status,
confidence,
provenance
}
Gutters/gaps не входят
Cell rectangle берёт только содержательные track intervals.
Полный canonical address space
Семантически CellSet содержит rowCount×columnCount атомарных cells; реализация может быть eager или lazy.
CellSet {
cellSetRef,
modularGridRef,
gridRef,
columnGeometryRef,
rowGeometryRef,
rowCount,
columnCount,
cellCount,
canonicalOrder:
ROW_MAJOR_TOP_TO_BOTTOM_LEFT_TO_RIGHT,
cells[],
status,
confidence,
provenance
}
Address ↔ ordinal
Отображение биективно внутри одного CellSet.
TOP / RIGHT / BOTTOM / LEFT
Neighbor — топологическая смежность индексов. Positive gaps не отменяют lattice adjacency.
neighborRefs {
TOP: CellRef | null,
RIGHT: CellRef | null,
BOTTOM: CellRef | null,
LEFT: CellRef | null
}
Точная классификация lattice
Point locator адресует не только cells, но и spacing bands.
Half-open internal intervals
Чтобы одна координата не принадлежала двум tracks, используется детерминированная boundary policy.
Spacing остаётся structural evidence
Пересечение row-gap и gutter тоже не создаёт микрочейку.
COLUMN GUTTER
Вертикальная spacing band между atomic column cells.
ROW GAP
Горизонтальная spacing band между atomic row cells.
Eager или lazy — identity одна
Полный Cartesian row×column здесь является самой canonical lattice, а не candidate search.
Cell existence ≠ state
9.01 заканчивается на atomic topology/geometry.
| Question | Owner |
|---|---|
| Columns/gutters? | 8.01 |
| ColumnGrid nodes/node occupancy? | 8.02 |
| Rows/row gaps/ModularGrid root? | 9.00 |
| Atomic Cell + addressing? | 9.01 |
| Merged/Region/forbidden? | 9.02 |
| Cell/region occupancy/collision/reflow? | 9.03 |
| Variants/scoring? | 9.04 |
Geometry version creates new CellSet
Cell identities version-sensitive через parent geometry refs.
Cell shape — не качество
Aspect ratio и cell count пока только descriptors.
Visual Lab
Показываем atomic cells, gaps и deterministic addressing.
9.01 cell/address regression
Проверяем row-major IDs, geometry, ordinals, neighbors, point lookup, gaps, boundary policy и ownership barriers.
DATA FOR LAYOUT ENGINE
Machine-readable 9.01 contract.
{
"module": "Compo 9.01",
"name": "cells_modules_coordinate_addressing",
"version": "1.0-canonical",
"canonical_main_title": "Cells/modules, coordinate addressing",
"topic": "09_МОДУЛЬНАЯ_СЕТКА_КОЛОНКИ_И_РЯДЫ",
"scope": "ATOMIC_CELL_IDENTITY_ROW_COLUMN_ADDRESSING_GEOMETRY_POINT_CLASSIFICATION_AND_LATTICE_ADJACENCY",
"review_basis": {
"public_MAIN": "9.01 exact title confirmed; Topic9 output requires Cell[] and later Region[]/occupancy/candidates",
"public_Core_0.00": "canonical public Core link could not be opened; no Core content invented",
"previous_module": "Compo9.00 ModularGrid root + row geometry",
"related_owners_reviewed": [
"Compo8.01 ColumnTrack[] / GutterTrack[]",
"Compo8.02 GridNode[] / ColumnGrid node occupancy",
"Compo9.00 RowTrack[] / RowGapTrack[] / ModularGrid root"
]
},
"consumes": [
"Compo9.00.ModularGrid",
"Compo8.01.ResolvedColumnGeometry",
"Compo9.00.ResolvedRowGeometry"
],
"provides": [
"CellAddress",
"Cell",
"Cell[]",
"CellSet",
"CellNeighborRefs",
"PointLatticeLocation",
"cellSetRef for Compo9.02 / Compo9.03 / Compo9.04"
],
"owns_metrics": [],
"descriptors_only": [
"grid.modular.cell.rowIndex",
"grid.modular.cell.columnIndex",
"grid.modular.cell.ordinal",
"grid.modular.cell.x0Raw",
"grid.modular.cell.x1Raw",
"grid.modular.cell.y0Raw",
"grid.modular.cell.y1Raw",
"grid.modular.cell.widthRaw",
"grid.modular.cell.heightRaw",
"grid.modular.cell.aspectRatio",
"grid.modular.cell.addressKey",
"grid.modular.cell.neighborCount"
],
"cell_address_schema": {
"rowIndex": "zero-based integer 0..rowCount-1",
"columnIndex": "zero-based integer 0..columnCount-1",
"addressKey": "r<rowIndex>:c<columnIndex>",
"ordinal": "rowIndex*columnCount+columnIndex",
"displayLabel": "optional noncanonical one-based label e.g. R1C1",
"canonical_identity": "rowIndex,columnIndex,addressKey; displayLabel is presentation only"
},
"cell_schema": {
"cellRef": "stable derived ref scoped to cellSetRef + canonical addressKey",
"cellSetRef": "parent set identity",
"modularGridRef": "Compo9.00 root",
"gridRef": "source ColumnGrid",
"columnGeometryRef": "Compo8.01 geometry lineage",
"rowGeometryRef": "Compo9.00 row geometry lineage",
"address": "CellAddress",
"moduleKind": "ATOMIC_CELL",
"moduleAlias": "CELL",
"columnTrackRef": "exact parent ColumnTrack",
"rowTrackRef": "exact parent RowTrack",
"rect": "x0,x1 from column; y0,y1 from row",
"widthRaw": "x1-x0",
"heightRaw": "y1-y0",
"aspectRatio": "widthRaw/heightRaw descriptor only",
"neighborRefs": "TOP|RIGHT|BOTTOM|LEFT refs or null",
"status": "OK",
"confidence": "minimum parent/root confidence",
"provenance": "DERIVED",
"occupancy": "not owned / absent",
"score": "not owned / absent"
},
"cell_set_schema": {
"cellSetRef": "cell-set:<modularGridRef>:<columnGeometryRef>:<rowGeometryRef>",
"modularGridRef": "same root",
"gridRef": "same source ColumnGrid",
"columnGeometryRef": "exact inherited geometry version",
"rowGeometryRef": "exact row geometry version",
"rowCount": "from ResolvedRowGeometry",
"columnCount": "from ResolvedColumnGeometry",
"cellCount": "rowCount*columnCount",
"canonicalOrder": "ROW_MAJOR_TOP_TO_BOTTOM_LEFT_TO_RIGHT",
"cells": "conceptually complete atomic Cell[]",
"status": "OK|INVALID",
"confidence": "0..1",
"provenance": "DERIVED"
},
"cell_geometry_formula": {
"x0": "column.x0",
"x1": "column.x1",
"y0": "row.y0",
"y1": "row.y1",
"width": "column.widthRaw",
"height": "row.heightRaw",
"aspectRatio": "widthRaw/heightRaw",
"important": "gutter widths and row-gap heights are excluded from cell rectangles"
},
"ordinal_addressing": {
"forward": "ordinal = rowIndex*columnCount + columnIndex",
"inverse_row": "floor(ordinal/columnCount)",
"inverse_column": "ordinal % columnCount",
"range": "0..cellCount-1",
"ordering": "row-major"
},
"neighbor_semantics": {
"TOP": "rowIndex-1, same column if rowIndex>0",
"RIGHT": "same row, columnIndex+1 if <columnCount-1",
"BOTTOM": "rowIndex+1, same column if <rowCount-1",
"LEFT": "same row, columnIndex-1 if columnIndex>0",
"diagonal": "not direct neighbor in baseline",
"geometric_contact": "not implied; gutters/gaps may create physical separation"
},
"point_lattice_location_schema": {
"status": "OK|INVALID",
"classification": "CELL|COLUMN_GUTTER_BAND|ROW_GAP_BAND|GAP_INTERSECTION|OUTSIDE_DOMAIN",
"xTrackKind": "COLUMN|GUTTER|OUTSIDE",
"yTrackKind": "ROW|ROW_GAP|OUTSIDE",
"columnIndex": "when xTrackKind=COLUMN",
"gutterIndex": "when xTrackKind=GUTTER",
"rowIndex": "when yTrackKind=ROW",
"rowGapIndex": "when yTrackKind=ROW_GAP",
"cellRef": "only when classification=CELL",
"boundaryPolicy": "HALF_OPEN_INTERNAL_FINAL_MAX_INCLUSIVE",
"snapTolerance": "NONE"
},
"point_location_policy": {
"x_axis_partition": "ColumnTrack and GutterTrack intervals from Compo8.01",
"y_axis_partition": "RowTrack and RowGapTrack intervals from Compo9.00",
"internal_intervals": "[start,end)",
"final_axis_interval": "includes exact domain maximum",
"classification_matrix": {
"COLUMN + ROW": "CELL",
"GUTTER + ROW": "COLUMN_GUTTER_BAND",
"COLUMN + ROW_GAP": "ROW_GAP_BAND",
"GUTTER + ROW_GAP": "GAP_INTERSECTION",
"any OUTSIDE": "OUTSIDE_DOMAIN"
},
"hidden_snap": "FORBIDDEN"
},
"storage_policy": {
"semantic_cell_set": "complete rowCount*columnCount address space",
"implementation": "may materialize eagerly, stream or resolve lazily",
"invariant": "storage strategy cannot change refs/addresses/ordinals/geometry/neighbors",
"candidate_cartesian_rule": "not applicable: CellSet is the canonical lattice itself, not a candidate search space"
},
"ownership_map": {
"8.01": "ColumnTrack/GutterTrack geometry",
"8.02": "GridLine/GridNode topology and ColumnGrid node occupancy",
"9.00": "ModularGrid root and RowTrack/RowGapTrack geometry",
"9.01": "atomic Cell identity, addressing, cell geometry, lattice adjacency, point classification",
"9.02": "merged cells, Region[], forbidden cell/region semantics",
"9.03": "2D cell/region occupancy, collision, reflow hooks, placement candidates",
"9.04": "variants, hard filter, local scoring, repairs/comparison/tests",
"10.x": "alignment/proximity interpretation"
},
"semantic_firewalls": {
"cell_vs_column_node": "CellRef/addressKey is not GridNodeRef and cannot alias Topic8 node identity",
"cell_vs_region": "Cell is one atomic row×column module; multi-cell Region belongs to 9.02",
"cell_vs_occupancy": "cell existence/geometry does not imply occupied/free state",
"cell_vs_forbidden": "atomic Cell has no forbidden semantics in 9.01",
"neighbor_vs_contact": "lattice neighbors may be physically separated by gutters/gaps",
"point_location_vs_alignment": "point partition lookup is exact topology addressing, not tolerant alignment measurement",
"aspect_ratio_vs_quality": "cell aspect ratio is descriptor only"
},
"metric_policy": {
"direct_scoring": "FORBIDDEN in 9.01",
"cell_count_score": "FORBIDDEN",
"square_cell_score": "FORBIDDEN",
"neighbor_count_score": "FORBIDDEN",
"aspect_ratio_score_without_target": "FORBIDDEN",
"beautyScore": "FORBIDDEN"
},
"hard_constraints": [
"9.01 owns canonical atomic Cell[] identities, row×column coordinate addresses, row-major ordinals, atomic cell rectangles, point-to-lattice classification and atomic lattice-neighbor relations.",
"Every atomic Cell is derived from exactly one Compo8.01 ColumnTrack and exactly one Compo9.00 RowTrack.",
"Cell geometry is the Cartesian intersection of the selected ColumnTrack X interval and RowTrack Y interval; 9.01 does not alter either parent track.",
"Column gutters and row gaps are structural spacing intervals and are not atomic cells.",
"The canonical CellSet contains exactly rowCount * columnCount atomic cells for a valid rectangular ModularGrid.",
"Cell materialization order is deterministic row-major: top-to-bottom rows, left-to-right columns.",
"Canonical machine address is zero-based (rowIndex,columnIndex).",
"Canonical addressKey is r<rowIndex>:c<columnIndex> and is derived only from zero-based indices.",
"Optional human display labels may be one-based, but they are noncanonical presentation metadata and must never be parsed as machine identity without an explicit adapter.",
"Cell ordinal is rowIndex * columnCount + columnIndex.",
"Ordinal inversion is deterministic: rowIndex=floor(ordinal/columnCount), columnIndex=ordinal mod columnCount.",
"CellRef identity must include cellSetRef and canonical zero-based address so a geometry-version change cannot alias an older Cell identity.",
"CellSetRef must include ModularGrid lineage plus columnGeometryRef and rowGeometryRef.",
"The semantic term module in 9.01 is an alias for one atomic Cell; it does not create a second module identity or moduleRef namespace.",
"Merged modules or multi-cell regions are not owned by 9.01; Compo9.02 owns merged cells and Region[].",
"Forbidden cell/region semantics are not owned by 9.01.",
"Cell/region occupancy is not owned by 9.01; Compo9.03 owns the 2D occupancy map.",
"Collision, reflow hooks and 2D placement candidate generation are not owned by 9.01.",
"Variants and numeric scoring are not owned by 9.01.",
"Canonical ColumnGrid GridNode identity and node occupancy remain owned by Compo8.02.",
"Cell address is not GridNode identity and must never alias a Topic8 nodeRef.",
"Lattice adjacency is index adjacency, not geometric contact; a positive gutter/row-gap may separate logical neighbors physically.",
"Atomic neighbors are at most TOP, RIGHT, BOTTOM and LEFT; diagonals are not baseline direct neighbors.",
"Point classification uses the complete row/column partition including gutters and row gaps.",
"A point can classify as CELL, COLUMN_GUTTER_BAND, ROW_GAP_BAND, GAP_INTERSECTION or OUTSIDE_DOMAIN.",
"Point classification must never silently snap a coordinate across a gap or boundary using a hidden tolerance.",
"Internal interval lookup is half-open [start,end); the final interval on an axis includes the inherited domain maximum so every in-domain point has one deterministic axis classification.",
"A point in a column gutter and row track is not assigned to either adjacent Cell.",
"A point in a row gap and column track is not assigned to either adjacent Cell.",
"A point at a gutter×row-gap crossing is GAP_INTERSECTION.",
"Cell rectangle bounds may be used as geometry descriptors but do not imply occupancy, content placement or alignment quality.",
"Cell aspect ratio is a descriptor only and is not a score.",
"Square cells are not universally better.",
"Cell count is not a quality score.",
"9.01 may expose lazy/addressable implementation semantics, but conceptual CellSet identity and address space must remain complete and deterministic.",
"Storage strategy must not change CellRef, addressKey, ordinal, geometry or neighbor semantics.",
"N/A != 0.",
"No beautyScore."
],
"hard_rules": [
"9.01 owns canonical atomic Cell[] identities, row×column coordinate addresses, row-major ordinals, atomic cell rectangles, point-to-lattice classification and atomic lattice-neighbor relations.",
"Every atomic Cell is derived from exactly one Compo8.01 ColumnTrack and exactly one Compo9.00 RowTrack.",
"Cell geometry is the Cartesian intersection of the selected ColumnTrack X interval and RowTrack Y interval; 9.01 does not alter either parent track.",
"Column gutters and row gaps are structural spacing intervals and are not atomic cells.",
"The canonical CellSet contains exactly rowCount * columnCount atomic cells for a valid rectangular ModularGrid.",
"Cell materialization order is deterministic row-major: top-to-bottom rows, left-to-right columns.",
"Canonical machine address is zero-based (rowIndex,columnIndex).",
"Canonical addressKey is r<rowIndex>:c<columnIndex> and is derived only from zero-based indices.",
"Optional human display labels may be one-based, but they are noncanonical presentation metadata and must never be parsed as machine identity without an explicit adapter.",
"Cell ordinal is rowIndex * columnCount + columnIndex.",
"Ordinal inversion is deterministic: rowIndex=floor(ordinal/columnCount), columnIndex=ordinal mod columnCount.",
"CellRef identity must include cellSetRef and canonical zero-based address so a geometry-version change cannot alias an older Cell identity.",
"CellSetRef must include ModularGrid lineage plus columnGeometryRef and rowGeometryRef.",
"The semantic term module in 9.01 is an alias for one atomic Cell; it does not create a second module identity or moduleRef namespace.",
"Merged modules or multi-cell regions are not owned by 9.01; Compo9.02 owns merged cells and Region[].",
"Forbidden cell/region semantics are not owned by 9.01.",
"Cell/region occupancy is not owned by 9.01; Compo9.03 owns the 2D occupancy map.",
"Collision, reflow hooks and 2D placement candidate generation are not owned by 9.01.",
"Variants and numeric scoring are not owned by 9.01.",
"Canonical ColumnGrid GridNode identity and node occupancy remain owned by Compo8.02.",
"Cell address is not GridNode identity and must never alias a Topic8 nodeRef.",
"Lattice adjacency is index adjacency, not geometric contact; a positive gutter/row-gap may separate logical neighbors physically.",
"Atomic neighbors are at most TOP, RIGHT, BOTTOM and LEFT; diagonals are not baseline direct neighbors.",
"Point classification uses the complete row/column partition including gutters and row gaps.",
"A point can classify as CELL, COLUMN_GUTTER_BAND, ROW_GAP_BAND, GAP_INTERSECTION or OUTSIDE_DOMAIN.",
"Point classification must never silently snap a coordinate across a gap or boundary using a hidden tolerance.",
"Internal interval lookup is half-open [start,end); the final interval on an axis includes the inherited domain maximum so every in-domain point has one deterministic axis classification.",
"A point in a column gutter and row track is not assigned to either adjacent Cell.",
"A point in a row gap and column track is not assigned to either adjacent Cell.",
"A point at a gutter×row-gap crossing is GAP_INTERSECTION.",
"Cell rectangle bounds may be used as geometry descriptors but do not imply occupancy, content placement or alignment quality.",
"Cell aspect ratio is a descriptor only and is not a score.",
"Square cells are not universally better.",
"Cell count is not a quality score.",
"9.01 may expose lazy/addressable implementation semantics, but conceptual CellSet identity and address space must remain complete and deterministic.",
"Storage strategy must not change CellRef, addressKey, ordinal, geometry or neighbor semantics.",
"N/A != 0.",
"No beautyScore."
],
"soft_constraints": [],
"preferences": [],
"overrides_allowed_by": [
"a new columnGeometryRef or rowGeometryRef creates a new CellSet lineage",
"historical CellSet/Cell refs remain immutable"
],
"initial_heuristics": {},
"style_preset_values": [],
"candidate_generation": {
"placement_candidates": "NONE",
"reason": "atomic lattice materialization/addressing is canonical geometry, not placement candidate generation"
},
"correction_policy": {
"foreign_content_mutation": "FORBIDDEN",
"invalid_column_geometry": "route to Compo8.01",
"invalid_row_geometry": "route to Compo9.00",
"invalid_modular_root": "route to Compo9.00/integration owner",
"merged_or_forbidden_request": "route to Compo9.02",
"occupancy_collision_reflow_request": "route to Compo9.03",
"variant_scoring_request": "route to Compo9.04",
"alignment_tolerance_request": "route to Topic10"
},
"deferred_inputs": [
"Compo9.02 Region/merge/forbidden contracts",
"Compo9.03 occupancy/collision/reflow/candidate contracts",
"Compo9.04 variant/scoring contracts",
"Topic10 alignment/proximity tolerance"
],
"recompute_when": [
"modularGridRef changes",
"columnGeometryRef changes",
"rowGeometryRef changes",
"rowCount/columnCount or any parent track bounds change"
],
"tests": [
"CellSet lineage",
"row-major materialization",
"address key and ordinal inversion",
"cell geometry intersection",
"cell count exact",
"neighbors corners/edges/interior",
"gutter exclusion",
"row-gap exclusion",
"point classification matrix",
"domain max boundary",
"outside domain",
"no hidden snapping",
"storage-invariant identity",
"no occupancy/region/scoring ownership",
"Topic8 node firewall",
"determinism"
],
"finality": "ATOMIC_CELL_IDENTITY_ADDRESSING_GEOMETRY_AND_LATTICE_LOOKUP_ONLY"
}