Topic 7 начинается с нейтральной геометрии
7.00 определяет, где зона находится относительно canvas. Он ещё не решает, что объекту разрешено или запрещено делать в этой зоне.
6.00 boundary + 6.03 optional ShortN normalization.
zone shells / offsets / rect geometry / zone set.
SCHEMA + NEUTRAL GEOMETRY ONLY.
Четыре shell-типа
Названия фиксируют назначение данных в pipeline, но не присваивают им чужие policy semantics.
| zoneKind | 7.00 meaning | Semantic owner later |
|---|---|---|
MARGIN_ZONE | нейтральная margin geometry | 7.04 / layout owner |
SAFE_ZONE_SHELL | геометрия потенциальной safe-region | 7.01 |
BLEED_ZONE_SHELL | геометрия за canvas/trim boundary | 7.02 |
PLATFORM_RESERVED_SHELL | placeholder reserved/exclusion geometry | 7.05 |
Три разные геометрические операции
Margin, safe region и bleed не следует хранить как один знакованный inset.
INSET_KEEP_IN_REGION
Внутренний rect после insets. Базовая форма safe-zone shell.
INSET_EDGE_BAND
Полоса между canvas edge и inset inner boundary. Базовая margin geometry.
OUTSET_BAND
Полоса снаружи canvas до expanded outer boundary. Базовая bleed geometry.
Top / right / bottom / left
Все четыре значения принадлежат одному coordinate space и одной unit system.
EdgeOffsetSet {
offsetRef,
direction:
INSET | OUTSET,
unit:
PX |
CANVAS_UNIT |
MM |
SHORT_N,
top,
right,
bottom,
left,
normalizationContextRef?,
unitMappingRef?,
provenance
}
SHORT_N разрешён, UV — нет
6.03 уже определил, какая normalization сохраняет метрическую геометрию.
Isotropic
Один scale для всех edges.
Placement-only
Нельзя использовать как metric edge offset: X/Y имеют разные scale factors на non-square canvas.
Baseline EDGE_OFFSETS_RECT
Для обычных poster margins/safe/bleed базовая exact geometry — axis-aligned rect offsets.
Inset
Outset
Margin band без overlap
Baseline margin band раскладывается на четыре неперекрывающиеся полосы только для geometry bookkeeping.
Zero ≠ N/A; oversized ≠ clamp
Геометрически экстремальные значения должны сохраняться для последующей проверки constraints.
Offsets = 0
Valid. Safe keep-in = full canvas; margin/bleed band area = 0.
Insets consume canvas
Keep-in region получает `EMPTY`. 7.00 не уменьшает insets автоматически.
Не все safe zones прямоугольные
Notches, UI-overlays и irregular exclusions требуют polygon/mask geometry, но 7.00 не изобретает их содержимое.
geometryType: EDGE_OFFSETS_RECT POLYGON_REF MASK_REF CUSTOM For non-rect geometry: geometryRef required owner adapter required 7.00 result: schema-valid shell PARTIAL until geometry adapter resolves 7.05 later: platform overlay semantics dynamic geometry updates
Один canvas — много зон
Набор зон хранится детерминированно и не сворачивается в один универсальный margin.
EdgeZoneSet {
zoneSetRef,
canvasRef,
domainRef,
zones: [
EdgeZoneGeometryResult...
],
status,
confidence,
provenance
}
Почему тема раздроблена на 7 файлов
7.00 не должен заранее отвечать на вопросы следующих owners.
| Module | Owns |
|---|---|
| 7.00 | schema / neutral zone geometry |
| 7.01 | hard safe zones / protected semantic content |
| 7.02 | bleed / intentional edge exit / crop intent |
| 7.03 | object-to-edge clearance / edge tension |
| 7.04 | role-dependent edge policy |
| 7.05 | platform overlays / dynamic safe zones |
| 7.06 | violations / repair / scoring / tests |
Похожие слова — разные сущности
Этот firewall нужен, чтобы safe zones не начали дублировать Topic5 или future grid logic.
Zone ≠ free space
Safe/margin geometry — constraint/reference region. Topic5 free space — complement occupied support.
Zone ≠ clearance
Inset `40px` не говорит, насколько объект реально удалён от edge. Это измеряет 7.03.
Zone ≠ grid
Edge bands не становятся grid cells или occupancy registry. Topic8 остаётся owner.
Schema errors только маршрутизируются
7.00 может объяснить, какой contract отсутствует, но не правит content/layout.
ZoneSchemaCorrectionRequest {
zoneRef,
reason,
routeTo:
source owner |
Compo6.03 |
Compo7.01 |
Compo7.02 |
Compo7.03 |
Compo7.04 |
Compo7.05 |
Compo7.06,
mutationAllowed: false
}
Visual Lab
Три базовых relation types показываются без enforcement/scoring.
Zone schema regression
Проверяем inset/outset geometry, zero/empty semantics, ShortN conversion, unit firewall, band partition и ownership leakage.
DATA FOR LAYOUT ENGINE
Machine-readable entrypoint Topic 7.
{
"module": "Compo 7.00",
"name": "margin_safe_bleed_zone_schema",
"version": "1.1-final",
"canonical_main_title": "Margin / safe / bleed zone schema",
"topic": "07_ПОЛЯ_SAFE_ZONES_И_BLEED",
"scope": "EDGE_ZONE_SCHEMA_RECTANGULAR_OFFSET_GEOMETRY_ZONESET_AND_TOPIC7_OWNERSHIP",
"main_topic_output": "SafeZone[], BleedZone, edge metrics, violations and repair requests",
"planned_files": {
"7.00": "Margin / safe / bleed zone schema",
"7.01": "Hard safe zones и protected semantic content",
"7.02": "Bleed и intentional edge exit",
"7.03": "Edge clearance / edge tension",
"7.04": "Role-dependent edge policy",
"7.05": "Platform overlays и динамические safe zones",
"7.06": "Violations, repair, scoring и tests"
},
"consumes": [
"Compo6.00.CanvasDescriptor",
"Compo6.00.CanvasDomainBoundary",
"Compo6.03.CanvasNormalizationContext?",
"explicit EdgeZoneSpec[] from document/platform/style owner",
"optional owner-qualified polygon/mask geometry adapters"
],
"provides": [
"EdgeOffsetSet",
"EdgeZoneSpec",
"EdgeZoneGeometryResult",
"EdgeBandSet",
"EdgeZoneSet",
"MarginZoneShell",
"SafeZoneShell",
"BleedZoneShell",
"PlatformReservedZoneShell",
"ZoneSchemaCorrectionRequest[]",
"hardSafePolicyRef slot -> Compo7.01",
"bleedPolicyRef slot -> Compo7.02",
"edgeMetricRef slot -> Compo7.03",
"roleEdgePolicyRef slot -> Compo7.04",
"platformOverlayPolicyRef slot -> Compo7.05",
"violationScoringRef slot -> Compo7.06"
],
"owns_metrics": [],
"descriptors_only": [
"edge.zone.zoneRef",
"edge.zone.zoneKind",
"edge.zone.geometryType",
"edge.zone.relationToCanvas",
"edge.zone.offsetDirection",
"edge.zone.offsets",
"edge.zone.innerRect",
"edge.zone.outerRect",
"edge.zone.edgeBands",
"edge.zone.geometryArea",
"edge.zone.status",
"edge.zone.confidence",
"edge.zone.setRef"
],
"canvas_contract": {
"canvasRef": "must match Compo6.00 CanvasDescriptor",
"domainRef": "full-canvas domain ref from Compo6.00 for baseline edge zones",
"coordinateFrame": "CANVAS_TOP_LEFT_Y_DOWN",
"edge_names": {
"top": "y=0 edge",
"right": "x=width edge",
"bottom": "y=height edge",
"left": "x=0 edge"
},
"important": "edge names are screen/canvas-frame semantics and are not remapped from content orientation or reading direction"
},
"edge_offset_set_schema": {
"offsetRef": "string",
"direction": "INSET|OUTSET",
"unit": "PX|CANVAS_UNIT|MM|SHORT_N",
"top": "finite >=0",
"right": "finite >=0",
"bottom": "finite >=0",
"left": "finite >=0",
"normalizationContextRef": "required when unit=SHORT_N",
"unitMappingRef": "required when raw unit differs from canvas/domain unit and no canonical 6.03 conversion exists",
"provenance": "object",
"single_unit_rule": "all four offsets share one unit and one coordinate-space meaning"
},
"zone_kind_schema": {
"MARGIN_ZONE": "neutral margin geometry shell; enforcement/role semantics not owned here",
"SAFE_ZONE_SHELL": "neutral safe-region shell; HARD protected-content semantics begin in 7.01",
"BLEED_ZONE_SHELL": "neutral outside-canvas shell; intentional edge-exit semantics begin in 7.02",
"PLATFORM_RESERVED_SHELL": "geometry placeholder only; overlay/dynamic semantics begin in 7.05",
"CUSTOM_ZONE": "requires explicit semanticsOwner and geometry adapter"
},
"relation_to_canvas_schema": {
"INSET_KEEP_IN_REGION": "zone is the inner region left after edge insets; baseline shape for safe-zone shells",
"INSET_EDGE_BAND": "zone is the union of edge bands between canvas boundary and inset inner boundary; baseline margin geometry",
"OUTSET_BAND": "zone is the band outside canvas and inside an expanded outer boundary; baseline bleed geometry",
"OVERLAY_EXCLUSION_REGION": "arbitrary owner-qualified polygon/mask region; baseline shell only",
"CUSTOM": "requires explicit geometry adapter"
},
"edge_zone_spec_schema": {
"zoneRef": "stable unique ref",
"canvasRef": "must match target canvas",
"domainRef": "baseline full-canvas domain unless explicit adapter says otherwise",
"zoneKind": "MARGIN_ZONE|SAFE_ZONE_SHELL|BLEED_ZONE_SHELL|PLATFORM_RESERVED_SHELL|CUSTOM_ZONE",
"geometryType": "EDGE_OFFSETS_RECT|POLYGON_REF|MASK_REF|CUSTOM",
"relationToCanvas": "enum above",
"offsetSet": "required for EDGE_OFFSETS_RECT",
"geometryRef": "required for POLYGON_REF/MASK_REF/CUSTOM",
"semanticsOwner": "Compo7.00 shell owner or explicit future/external owner",
"enforcement": "UNASSIGNED in 7.00",
"confidence": "0..1",
"provenance": "object"
},
"rectangular_geometry": {
"insetInnerRect": "[left, top, width-right, height-bottom]",
"outsetOuterRect": "[-left, -top, width+right, height+bottom]",
"insetKeepInArea": "max(0,x1-x0)*max(0,y1-y0)",
"insetBandArea": "canvasArea - insetKeepInArea when the inner region is nonempty; if inset collapses the region, edge band saturates to the full canvas area",
"outsetBandArea": "outerRectArea - canvasArea",
"zeroOffsets": "valid; keep-in region=full canvas, margin/bleed band area=0",
"oversizedInsets": "valid geometry evidence with status EMPTY for the keep-in region; not automatically a violation until 7.06"
},
"edge_band_set": {
"purpose": "non-overlapping rectangular partition of the inset band for baseline rect geometry",
"top": "[0,0,width,top]",
"bottom": "[0,height-bottom,width,height]",
"left": "[0,top,left,height-bottom]",
"right": "[width-right,top,width,height-bottom]",
"clamping": "for geometric band partition only, band rectangles are clipped to canvas and made non-overlapping",
"important": "band partition is geometry bookkeeping, not per-edge policy priority"
},
"unit_resolution": {
"same_raw_unit": "offset unit matching canvas/domain unit resolves directly",
"SHORT_N": "requires Compo6.03 CanvasNormalizationContext for the same canvas/domain; resolved raw offset = value*shortSide",
"MM_on_MM_canvas": "direct",
"PX_on_PX_canvas": "direct",
"CANVAS_UNIT_on_CANVAS_UNIT_canvas": "direct",
"cross_raw_unit": "N_A without explicit unitMappingRef/adapter; no silent PX↔MM or PX↔CANVAS_UNIT conversion",
"AXIS_FRACTION_UV": "not an allowed edge-offset metric unit because 6.03 defines UV as placement-only, not isotropic metric geometry"
},
"edge_zone_set_schema": {
"zoneSetRef": "stable versioned ref",
"canvasRef": "string",
"domainRef": "string",
"zones": "EdgeZoneGeometryResult[] sorted deterministically by zoneRef",
"status": "OK|PARTIAL|N_A|INVALID",
"confidence": "min/aggregate evidence confidence without turning confidence into score",
"provenance": "object",
"duplicate_zone_ref": "INVALID"
},
"ownership_map": {
"7.00": "zone shells, edge-offset geometry, zone collection and neutral margin/safe/bleed terminology",
"7.01": "hard safe-zone enforcement and protected semantic content",
"7.02": "bleed permission, intentional edge exit and crop/trim semantics",
"7.03": "content-to-edge clearance metrics and edge tension",
"7.04": "role-dependent edge policy",
"7.05": "platform UI overlays, dynamic safe zones and time/platform-dependent exclusion geometry",
"7.06": "violations, repair requests, target-aware scoring and consolidated Topic7 regression"
},
"semantic_firewalls": {
"margin_vs_safe": "margin geometry is not automatically a protected safe zone",
"safe_shell_vs_hard_safe": "SAFE_ZONE_SHELL is geometry only; hard enforcement is 7.01",
"bleed_shell_vs_exit_permission": "BLEED_ZONE_SHELL is geometry only; permission/intentional exit is 7.02",
"zone_geometry_vs_clearance": "zone offsets are not measurements of object clearance; 7.03 owns object-to-edge metrics",
"platform_shell_vs_dynamic_overlay": "PLATFORM_RESERVED_SHELL does not own platform timing/UI behavior; 7.05 does",
"zone_vs_grid": "edge zones are not grid occupancy; Topic8 remains separate",
"zone_vs_free_space": "edge zones are constraints/reference geometry, not Topic5 negative-space regions"
},
"metric_policy": {
"zone_area": "geometry descriptor only; not a design score",
"offset_size": "geometry descriptor only",
"direct_scoring": "FORBIDDEN in 7.00",
"larger_margin_is_better": "FORBIDDEN",
"larger_safe_zone_is_better": "FORBIDDEN",
"more_bleed_is_better": "FORBIDDEN",
"symmetric_offsets_are_better": "FORBIDDEN"
},
"hard_constraints": [
"one metric = one owner",
"7.00 owns no design-quality MetricResult; it owns neutral zone schema and geometry only",
"edge offsets must be explicit finite nonnegative values and share one declared unit",
"EDGE_OFFSETS_RECT requires an explicit offset set; polygon/mask/custom geometries require an explicit geometryRef and adapter owner",
"INSET relations require direction=INSET; OUTSET_BAND requires direction=OUTSET",
"SHORT_N edge offsets require a compatible Compo6.03 CanvasNormalizationContext and are resolved isotropically by shortSide",
"AXIS_FRACTION_UV is forbidden as edge-offset metric geometry",
"cross-unit PX/MM/CANVAS_UNIT conversion is forbidden without explicit unit mapping",
"zero offsets are valid and not N/A",
"oversized insets may produce an EMPTY keep-in region and must not be silently clamped into a nonempty safe region",
"SAFE_ZONE_SHELL does not imply HARD enforcement; 7.01 owns that decision",
"BLEED_ZONE_SHELL does not imply permission to crop/exit; 7.02 owns that decision",
"7.00 does not measure object edge clearance or edge tension; 7.03 owns those metrics",
"7.00 does not decide role-specific edge requirements; 7.04 owns them",
"7.00 does not own dynamic platform overlay behavior; 7.05 owns it",
"7.00 does not emit violations/design scores; 7.06 owns violations, repair and scoring",
"margin/safe/bleed geometry does not become Topic5 free-space geometry",
"zone geometry does not become Topic8 grid occupancy",
"global balance/hierarchy/eye-flow remain future owners",
"N/A != 0",
"no beautyScore"
],
"initial_heuristics": {
"numeric_epsilon": {
"value": 1e-12,
"provenance": "IMPLEMENTATION_HEURISTIC"
}
},
"correction_policy": {
"foreign_content_mutation": "FORBIDDEN",
"invalid_zone_schema": "request source document/style/platform owner correction",
"missing_normalization_context": "route to Compo6.03 or request raw same-unit offsets",
"hard_safe_requirement": "route to Compo7.01",
"bleed_or_edge_exit_requirement": "route to Compo7.02",
"edge_clearance_measurement": "route to Compo7.03",
"role_policy_requirement": "route to Compo7.04",
"platform_overlay_requirement": "route to Compo7.05",
"violation_or_repair_requirement": "route to Compo7.06"
},
"deferred_inputs": [
"Compo7.01 hard safe zones/protected content",
"Compo7.02 bleed/intentional edge exit",
"Compo7.03 edge clearance/tension",
"Compo7.04 role-dependent edge policy",
"Compo7.05 platform overlays/dynamic safe zones",
"Compo7.06 violations/repair/scoring/tests",
"Topic8 grids",
"future global balance/hierarchy/eye-flow"
],
"recompute_when": [
"Compo6.00 canvas extent/domain/frame changes",
"Compo6.03 normalizationContext changes for SHORT_N offsets",
"edge offset values/unit/direction change",
"zone kind/relation/geometry ref changes",
"zone set membership/version changes"
],
"finality": "EDGE_ZONE_SCHEMA_AND_NEUTRAL_GEOMETRY_ONLY",
"hard_rules": [
"one metric = one owner",
"7.00 owns no design-quality MetricResult; it owns neutral zone schema and geometry only",
"edge offsets must be explicit finite nonnegative values and share one declared unit",
"EDGE_OFFSETS_RECT requires an explicit offset set; polygon/mask/custom geometries require an explicit geometryRef and adapter owner",
"INSET relations require direction=INSET; OUTSET_BAND requires direction=OUTSET",
"SHORT_N edge offsets require a compatible Compo6.03 CanvasNormalizationContext and are resolved isotropically by shortSide",
"AXIS_FRACTION_UV is forbidden as edge-offset metric geometry",
"cross-unit PX/MM/CANVAS_UNIT conversion is forbidden without explicit unit mapping",
"zero offsets are valid and not N/A",
"oversized insets may produce an EMPTY keep-in region and must not be silently clamped into a nonempty safe region",
"SAFE_ZONE_SHELL does not imply HARD enforcement; 7.01 owns that decision",
"BLEED_ZONE_SHELL does not imply permission to crop/exit; 7.02 owns that decision",
"7.00 does not measure object edge clearance or edge tension; 7.03 owns those metrics",
"7.00 does not decide role-specific edge requirements; 7.04 owns them",
"7.00 does not own dynamic platform overlay behavior; 7.05 owns it",
"7.00 does not emit violations/design scores; 7.06 owns violations, repair and scoring",
"margin/safe/bleed geometry does not become Topic5 free-space geometry",
"zone geometry does not become Topic8 grid occupancy",
"global balance/hierarchy/eye-flow remain future owners",
"N/A != 0",
"no beautyScore"
],
"soft_constraints": [],
"preferences": [],
"overrides_allowed_by": [],
"style_preset_values": [],
"candidate_generation": {
"layout_candidates": "NONE",
"geometry_candidates": "NONE",
"reason": "schema/neutral geometry owner only"
}
}