COMPO · 7.00 · MARGIN / SAFE / BLEED ZONE SCHEMA

Margin / safe /
bleed zone
schema.

Entry point Topic 7: neutral edge-zone taxonomy, explicit top/right/bottom/left offsets, inset keep-in regions, non-overlapping margin bands, outside-canvas bleed shells and deterministic EdgeZoneSet. Geometry is deliberately separated from hard safe enforcement, intentional edge exit, object clearance, role policy, platform overlays and violations/scoring.

ModuleCompo 7.00
Scopeedge-zone schema
Metricsnone
Geometryinset / band / outset
Topic7 · EDGE ZONES
Next7.01

Topic 7 начинается с нейтральной геометрии

00 / module api

7.00 определяет, где зона находится относительно canvas. Он ещё не решает, что объекту разрешено или запрещено делать в этой зоне.

CANVAS

6.00 boundary + 6.03 optional ShortN normalization.

OWNS

zone shells / offsets / rect geometry / zone set.

FINALITY

SCHEMA + NEUTRAL GEOMETRY ONLY.

GEOMETRY ≠ ENFORCEMENT. Safe shell ещё не hard safe zone; bleed shell ещё не разрешение выпустить объект за trim edge.

Четыре shell-типа

01 / zone taxonomy

Названия фиксируют назначение данных в pipeline, но не присваивают им чужие policy semantics.

zoneKind7.00 meaningSemantic owner later
MARGIN_ZONEнейтральная margin geometry7.04 / layout owner
SAFE_ZONE_SHELLгеометрия потенциальной safe-region7.01
BLEED_ZONE_SHELLгеометрия за canvas/trim boundary7.02
PLATFORM_RESERVED_SHELLplaceholder reserved/exclusion geometry7.05

Три разные геометрические операции

02 / relation to canvas

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.

NO NEGATIVE-INSET TRICK. Bleed не кодируется отрицательным margin. Direction (`INSET|OUTSET`) остаётся explicit.

Top / right / bottom / left

03 / EdgeOffsetSet

Все четыре значения принадлежат одному coordinate space и одной unit system.

EdgeOffsetSet {
  offsetRef,

  direction:
    INSET | OUTSET,

  unit:
    PX |
    CANVAS_UNIT |
    MM |
    SHORT_N,

  top,
  right,
  bottom,
  left,

  normalizationContextRef?,
  unitMappingRef?,
  provenance
}
top >= 0 right >= 0 bottom >= 0 left >= 0 screen frame: top → y=0 right → x=W bottom → y=H left → x=0

SHORT_N разрешён, UV — нет

04 / unit firewall

6.03 уже определил, какая normalization сохраняет метрическую геометрию.

SHORT_N

Isotropic

raw offset = offsetShortN × shortSide

Один scale для всех edges.

UV

Placement-only

Нельзя использовать как metric edge offset: X/Y имеют разные scale factors на non-square canvas.

NO SILENT UNIT CONVERSION. PX↔MM и PX↔CANVAS_UNIT требуют explicit mapping. Число `20` без совместимого unit context не становится margin.

Baseline EDGE_OFFSETS_RECT

05 / rectangular geometry

Для обычных poster margins/safe/bleed базовая exact geometry — axis-aligned rect offsets.

Inset

innerRect: x0 = left y0 = top x1 = W - right y1 = H - bottom

Outset

outerRect: x0 = -left y0 = -top x1 = W + right y1 = H + bottom

Margin band без overlap

06 / EdgeBandSet

Baseline margin band раскладывается на четыре неперекрывающиеся полосы только для geometry bookkeeping.

TOP: [0,0,W,top] BOTTOM: [0,H-bottom,W,H] LEFT: [0,top,left,H-bottom] RIGHT: [W-right,top,W,H-bottom]
PARTITION, NOT PRIORITY. То, что corner попал в top/bottom band partition, не означает semantic priority верхнего edge. Role policies появятся в 7.04.

Zero ≠ N/A; oversized ≠ clamp

07 / zero and empty

Геометрически экстремальные значения должны сохраняться для последующей проверки constraints.

ZERO

Offsets = 0

Valid. Safe keep-in = full canvas; margin/bleed band area = 0.

EMPTY

Insets consume canvas

Keep-in region получает `EMPTY`. 7.00 не уменьшает insets автоматически.

EMPTY ≠ VIOLATION YET. Это геометрический факт. Whether the requested configuration is unsatisfiable/invalid for content belongs to 7.06.

Не все safe zones прямоугольные

08 / polygon & mask adapters

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 — много зон

09 / EdgeZoneSet

Набор зон хранится детерминированно и не сворачивается в один универсальный margin.

EdgeZoneSet {
  zoneSetRef,
  canvasRef,
  domainRef,

  zones: [
    EdgeZoneGeometryResult...
  ],

  status,
  confidence,
  provenance
}
Canonical ordering: zoneRef lexical Duplicate zoneRef: INVALID Different zone kinds: coexist are NOT auto-merged

Почему тема раздроблена на 7 файлов

10 / ownership map

7.00 не должен заранее отвечать на вопросы следующих owners.

ModuleOwns
7.00schema / neutral zone geometry
7.01hard safe zones / protected semantic content
7.02bleed / intentional edge exit / crop intent
7.03object-to-edge clearance / edge tension
7.04role-dependent edge policy
7.05platform overlays / dynamic safe zones
7.06violations / repair / scoring / tests

Похожие слова — разные сущности

11 / semantic firewalls

Этот 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 только маршрутизируются

12 / correction routing

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

13 / visual lab

Три базовых relation types показываются без enforcement/scoring.

A · MARGIN BAND INSET_EDGE_BAND neutral geometry B · SAFE SHELL INSET_KEEP_IN_REGION hard semantics deferred 7.01 C · BLEED SHELL OUTSET_BAND edge-exit intent deferred 7.02 offsets = explicit lengths in one metric space SHORT_N allowed through 6.03 · UV forbidden for metric edge offsets zero offsets are valid · oversized inset may yield EMPTY zone geometry ≠ free-space ≠ object clearance ≠ grid occupancy violations / repair / score arrive only in 7.06

Zone schema regression

14 / deterministic tests

Проверяем inset/outset geometry, zero/empty semantics, ShortN conversion, unit firewall, band partition и ownership leakage.

Tests not run yet.

DATA FOR LAYOUT ENGINE

15 / machine contract

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"
  }
}
ARCHITECTURE CHECKPOINT · 7.00 OWNS NEUTRAL EDGE-ZONE SCHEMA, EXPLICIT OFFSET GEOMETRY AND EDGEZONESET ONLY — NO DESIGN-QUALITY METRICS. SAFE_ZONE_SHELL IS NOT HARD SAFE ENFORCEMENT; BLEED_ZONE_SHELL IS NOT EDGE-EXIT PERMISSION. INSET_KEEP_IN_REGION / INSET_EDGE_BAND / OUTSET_BAND ARE DISTINCT GEOMETRIC RELATIONS. SHORT_N MAY RESOLVE THROUGH 6.03; UV IS FORBIDDEN FOR METRIC EDGE OFFSETS. 7.01 HARD SAFE, 7.02 BLEED INTENT, 7.03 CLEARANCE/TENSION, 7.04 ROLE POLICY, 7.05 PLATFORM OVERLAYS, 7.06 VIOLATIONS/REPAIR/SCORING. TOPIC5 FREE SPACE AND TOPIC8 GRID OCCUPANCY REMAIN SEPARATE. NO BEAUTYSCORE.
VISITS / ...