Форма как объект, не как score
3.00 задаёт объектную оболочку Shape и распределяет ownership. Он не решает, какая форма «красивая», не считает visual mass и не строит scene free-space.
Canonical Shape schema, role taxonomy, geometry union и boundaries для 3.01–3.06.
Локальная геометрия Shape отделена от ObjectTransform, visual mass и scene occupancy.
ENTRYPOINT / SCHEMA ONLY. Никакого localShapeScore в 3.00.
ShapeRole: зачем форма существует
Role задаёт semantic/operational назначение формы. Он не выводится автоматически из rectangle/circle/path и не подменяет topology.
| Role | Назначение | Class |
|---|---|---|
content | основная значимая форма/объект | semantic |
container | форма-контейнер для дочернего содержимого | structural |
panel | локальная плоскость/секция интерфейса или постера | structural |
frame | замкнутое обрамление области/контента | structural |
mask | операционная геометрия clipping/masking | operational |
accent | локальная вспомогательная/акцентная форма | visual |
decoration | декоративная форма без обязательной content-semantics | visual |
annotation | форма, поддерживающая подпись/метку/выноску | semantic |
Canonical Shape schema
Shape хранит идентичность, локальную геометрию и ссылки на внешние/дочерние descriptors. World-space geometry не хранится как второй независимый источник истины.
Shape
Shape {
id,
role: ShapeRole,
subrole?,
rigidity: "hard|soft|free",
geometry: ShapeGeometry, // LOCAL
transformRef?, // ObjectTransform
paintRef?, // 3.04
topologyRef?, // 3.03 / 3.04
source: ShapeGeometrySource,
visibility,
zIndex?,
children[],
provenance
}Identity contract
shape.id = stable object identity geometry.version = geometry revision transform.version = transform revision paint.version = paint/topology revision worldGeometry = derive(geometry, ObjectTransform) NEVER: mutate local points because world rotation changed
ShapeGeometry union
3.00 задаёт только union-interface. Конкретные параметры и вычисления принадлежат 3.01, 3.02 и 3.04.
PRIMITIVE
PrimitiveShapeGeometry {
kind:"PRIMITIVE",
family:
"RECT|ELLIPSE|POLYGON|STAR|...",
params,
localBounds
}PATH
PathShapeGeometry {
kind:"PATH",
closed,
segments[],
windingHint?,
localBounds
}COMPOUND
CompoundShapeGeometry {
kind:"COMPOUND",
outerRegionRef,
holeRegionRefs[],
fillRule,
booleanSourceRefs[]
}Local geometry и ObjectTransform
MAIN отдельно требует вынести ObjectTransform в Core. Поэтому 3.00 сразу проектируется под общий transform contract, а 3.05 становится shape-side specialization/adapter, а не вторым универсальным owner.
Shape transform logic
Применение transform к bounds/path/topology, reflection semantics, transform invariance и bake-policy.
Canonical ObjectTransform
Универсальная schema position/rotation/scale/reflection/skew должна жить выше object-type topics и переиспользоваться другими объектами.
Silhouette, holes и topology
Shape shell содержит ссылки, но не смешивает все вычисления в одном объекте. Silhouette readability и region topology разделены по владельцам.
| Data | Owner | 3.00 treatment |
|---|---|---|
| closed/open contour fact | 3.02 / 3.03 | referenced descriptor |
| componentCount / holeCount | 3.03 / 3.04 | topologyRef |
| fillRule / outer/holes | 3.04 | paint/topology ref |
| convexity / concavity | 3.04 | descriptor; not role |
| contour readability | 3.03 | target/context-aware fit |
| silhouette area / occupancy / density | 4.01 | DEFERRED consumer |
| scene free-space regions | 5.xx | DEFERRED consumer |
shape.visualMass FROM TOPIC 3. Даже если area нужна как внутренний промежуточный расчёт convexity, канонический mass/occupancy contract остаётся у темы 4.Ownership 3.00–3.06
Тема 3 компактная: генератор, scorer и regression объединены в 3.06, поэтому ранние файлы должны особенно чётко отдавать provenance и не дублировать descriptors.
| Module | Domain | Owns / provides |
|---|---|---|
| 3.00 | Shape schema / roles | Shape, ShapeRole, ShapeGeometry union, ownership map; no geometry quality score |
| 3.01 | primitive / parametric | PrimitiveShapeGeometry params and primitive-family descriptors |
| 3.02 | organic / path contour | PathShapeGeometry, contour path construction and local path descriptors |
| 3.03 | silhouette / readability / topology | silhouette topology + contour readability interpretation |
| 3.04 | fill / outline / holes / convexity | paint-region topology, holes, convexity/concavity descriptors |
| 3.05 | shape transforms | shape-side use of canonical ObjectTransform; transform-derived geometry views |
| 3.06 | generator / scoring / tests | bounded ShapeCandidate generation, target-aware local scoring, regression suite |
Pipeline формы
Финальная цель темы — получить shape candidates и local shape scoring, но без захвата mass/space/global composition.
Что тема 3 намеренно не владеет
Это обязательные barriers, чтобы форма не превратилась в универсальный контейнер всех объектных метрик.
Visual mass
silhouette area, occupancy, density, contextual weight.
Negative space
scene free-space mask, connected empty regions, breathing room.
Canvas / grid
format normalization and occupancy registry are external contracts.
Balance / hierarchy
shape may provide evidence, but does not own scene-wide judgment.
Визуальная лаборатория schema
SVG показывает четыре разных cases одной Shape schema: primitive, organic path, compound region с hole и transformed view. Это именно различие representations, а не ranking.
Детерминированные schema tests
3.00 не тестирует geometry algorithms будущих 3.01–3.05. Эти barriers проверяют только canonical shell и ownership.
DATA FOR LAYOUT ENGINE
Machine-readable entrypoint темы 3.
{
"module": "Compo 3.00",
"name": "shape_overview_roles_and_canonical_schema",
"version": "1.1-final",
"scope": "TOPIC_03_ENTRYPOINT_AND_CANONICAL_SHAPE_SCHEMA",
"topic": "03_FORM_SILHOUETTE_CONTOUR",
"planned_files": [
"3.00",
"3.01",
"3.02",
"3.03",
"3.04",
"3.05",
"3.06"
],
"consumes": [
"Compo0.Scene/Object identity",
"Compo0.ObjectTransform? (canonical target owner; Core migration tracked by 3.05)",
"Canvas normalization context when available",
"Compo2.22.MaskCropSeamResult? as optional external region source"
],
"provides": [
"Shape",
"ShapeRole",
"ShapeRigidity",
"ShapeGeometry discriminated-union schema",
"Shape.geometry variant slot: PRIMITIVE -> Compo3.01",
"Shape.geometry variant slot: PATH -> Compo3.02",
"Shape.geometry variant slot: COMPOUND -> Compo3.04",
"Shape.topologyRef reference slot",
"Shape.paintRef reference slot",
"Shape.transformRef reference slot",
"ShapeGeometrySource",
"Topic3 ownership map"
],
"owns_contracts": [
"Shape object shell schema",
"ShapeRole taxonomy",
"ShapeGeometry discriminated-union registration",
"reference slots topologyRef/paintRef/transformRef without re-owning referenced child contracts",
"local-geometry versus transform separation",
"topic-3 module decomposition"
],
"owns_metrics": [],
"roles": [
"content",
"container",
"panel",
"frame",
"mask",
"accent",
"decoration",
"annotation"
],
"shape_schema": {
"id": "string",
"role": "ShapeRole",
"subrole": "string|null",
"rigidity": "hard|soft|free",
"geometry": "ShapeGeometry",
"transformRef": "ObjectTransformRef|null",
"paintRef": "Shape.paintRef slot|null",
"topologyRef": "Shape.topologyRef slot|null",
"source": "ShapeGeometrySource",
"visibility": "visible|hidden|conditional",
"zIndex": "number|null",
"children": "objectId[]",
"provenance": "object"
},
"geometry_union": {
"primitive": {
"owner": "Compo3.01",
"discriminator": "PRIMITIVE"
},
"path": {
"owner": "Compo3.02",
"discriminator": "PATH"
},
"compound": {
"owner": "Compo3.04",
"discriminator": "COMPOUND"
}
},
"ownership_boundaries": {
"raw_shape_geometry": "Topic3",
"silhouette_readability": "Compo3.03",
"holes_convexity_concavity": "Compo3.04",
"object_transform_canonical_owner": "Compo0/Core target architecture",
"shape_transform_adapter": "Compo3.05",
"visual_mass_area_occupancy_density": "Topic4",
"scene_occupied_and_free_space": "Topic5",
"global_balance_hierarchy_eye_flow": "future global owners",
"canvas_format_normalization": "Topic6",
"grid_occupancy": "Topic8"
},
"hard_invariants": [
"ONE_METRIC_ONE_OWNER",
"N_A_NOT_ZERO",
"LOCAL_NOT_GLOBAL",
"GEOMETRY_NOT_INTERPRETATION",
"DESCRIPTOR_NOT_SCORE",
"LOCAL_GEOMETRY_NOT_OBJECT_TRANSFORM",
"SHAPE_AREA_NOT_VISUAL_MASS_OWNER",
"SHAPE_REGION_NOT_SCENE_FREE_SPACE_OWNER",
"NO_FOREIGN_MUTATION",
"NO_MAGIC_BEAUTYSCORE",
"ENTRYPOINT_REFERENCE_SLOT_NOT_CHILD_CONTRACT_OWNER"
],
"pipeline": [
"3.00 create/validate canonical Shape shell",
"3.01 or 3.02 construct local ShapeGeometry",
"3.04 optionally construct compound region/holes and paint-region topology",
"3.05 applies/reads canonical ObjectTransform to derive world-space view without rewriting local geometry",
"3.03 derives silhouette/topology/readability evidence from transformed or local view as explicitly requested",
"3.06 creates bounded shape candidates and performs target-aware local scoring/tests",
"Topic4 consumes silhouette/region geometry to own visual mass",
"Topic5 consumes occupied region geometry to build scene positive/negative space"
],
"finality": "TOPIC_03_SCHEMA_AND_TAXONOMY_ONLY",
"topic_status": "DONE_7_OF_7",
"next_frontier": "Compo 4.00"
}