COMPO · 7.01 · HARD SAFE ZONES / PROTECTED SEMANTIC CONTENT

Hard safe zones &
protected
semantic content.

Hard-constraint layer поверх neutral SAFE_ZONE_SHELL 7.00: explicit protected-content bindings, owner-qualified geometry modes, ALLOW_TOUCH/STRICT_INTERIOR containment semantics и deterministic SATISFIED/BREACHED/N_A state. Без implicit semantic importance, role heuristics, platform lifecycle, continuous edge metrics или violation/scoring ownership.

ModuleCompo 7.01
Scopehard safe containment
Protectedexplicit bindings
Violationsdeferred 7.06
Topic7 · EDGE ZONES
Next7.02

Safe shell становится hard constraint

00 / module api

7.01 не создаёт safe-zone geometry заново: он получает её из 7.00 и связывает с explicit protected content.

ZONE

7.00 SAFE_ZONE_SHELL.

CONTENT

Explicit owner-qualified protected bindings.

OUTPUT

SATISFIED / BREACHED / N_A / INVALID.

NO IMPLICIT IMPORTANCE. Слово `logo`, `title`, `CTA` или визуальная заметность не делают объект protected автоматически.

Как трактовать boundary

01 / HardSafePolicy

Hard policy говорит только о containment semantics уже выбранного protected content.

HardSafePolicy {
  policyRef,
  zoneRef,

  boundaryRule:
    ALLOW_TOUCH |
    STRICT_INTERIOR,

  geometryMode:
    FULL_SUPPORT |
    BOUNDING_BOX |
    ANCHOR_SET |
    CUSTOM_REGION,

  missingGeometryPolicy:
    N_A |
    INVALID,

  confidence,
  provenance
}

ProtectedSemanticContentBinding

02 / protected content

Binding связывает внешний semantic decision с конкретной geometry representation.

ProtectedSemanticContentBinding {
  bindingRef,
  contentRef,

  semanticRoleRef?,
  protectionSourceRef,

  protectionMode:
    FULL_SUPPORT |
    BOUNDING_BOX |
    ANCHOR_SET |
    CUSTOM_REGION,

  geometryRef?,
  anchorRefs[]?,
  customRegionRef?,

  confidence,
  provenance
}
ROLE REF ≠ ROLE LOGIC. 7.01 может хранить `semanticRoleRef`, но правила вида «logo всегда protected» или «caption можно ближе к краю» принадлежат 7.04.

Containment relation

03 / support relation

Результат сначала описывает геометрическую связь, затем policy переводит её в hard constraint state.

supportRelationMeaning
INSIDEвся проверенная geometry строго внутри zone
INSIDE_OR_TOUCHINGвнутри, но есть boundary contact
PARTIAL_OUTSIDEчасть geometry вышла за safe boundary
FULLY_OUTSIDEвся проверенная geometry снаружи
N_Ageometry не разрешена/отсутствует

Touch может быть допустим или запрещён

04 / boundary rule

Boundary semantics нельзя заменять скрытым дополнительным margin.

ALLOW_TOUCH

point valid if: x0 <= x <= x1 y0 <= y <= y1

Boundary contact допускается.

STRICT_INTERIOR

point valid if: x0 < x < x1 y0 < y < y1

Любой touch даёт BREACHED.

Что именно защищаем

05 / protection modes

Разные modes дают разную силу утверждения и не должны маскироваться друг под друга.

FULL_SUPPORT

Проверяется реальная supplied support geometry.

BOUNDING_BOX

Консервативная approximation. Не равна exact shape containment.

ANCHOR_SET

Проверяются только объявленные protected anchors.

CUSTOM_REGION

Owner-qualified region adapter.

Rect safe zone + bbox

06 / rectangular reference

Для baseline implementation 7.01 умеет детерминированно проверять bounding boxes и point/anchor sets.

Safe rect: [x0,y0,x1,y1] BBox ALLOW_TOUCH: bx0 >= x0 by0 >= y0 bx1 <= x1 by1 <= y1 BBox STRICT_INTERIOR: bx0 > x0 by0 > y0 bx1 < x1 by1 < y1
BBOX IS APPROXIMATION. Если irregular shape bbox пересёк boundary, это не доказывает, что actual painted support вышел наружу. Mode обязан оставаться видимым в evidence.

N/A != safe

07 / missing and empty

Hard constraint нельзя автоматически считать выполненным, если protected geometry отсутствует.

Missing geometry

N_A или INVALID — согласно policy.

Empty safe region

Непустой protected content → BREACHED.

No protected bindings

Set может быть валидно пустым: просто нечего проверять. Это не score и не утверждение о качестве.

BREACHED ещё не Violation

08 / breach semantics

7.01 отвечает только на вопрос «constraint выполнен?».

HardSafeConstraintResult {
  constraintRef,
  policyRef,
  zoneRef,
  contentRef,

  protectionMode,
  supportRelation,

  containmentStatus:
    SATISFIED |
    BREACHED |
    N_A |
    INVALID,

  boundaryContactStatus,
  maxOutsideDistance,

  confidence,
  provenance
}
7.06 OWNS VIOLATIONS. Severity, repair hints, ranking penalty и consolidated violation list здесь не создаются.

Outside distance — не edge clearance

09 / outside-distance diagnostic

Для debug можно посчитать, насколько geometry вышла за safe rect, но это не continuous object↔canvas edge metric 7.03.

outsideLeft = max(0, x0 - bx0) outsideTop = max(0, y0 - by0) outsideRight = max(0, bx1 - x1) outsideBottom = max(0, by1 - y1) maxOutsideDistance = max(all four)
DIAGNOSTIC ONLY. Значение относится к safe-zone boundary breach. `edge.clearance.*` и `edge.tension.*` остаются 7.03.

HardSafeEvaluationSet

10 / evaluation set

Набор результатов строится детерминированно и сохраняет явную связь binding↔zone↔policy.

HardSafeEvaluationSet {
  evaluationSetRef,
  canvasRef,
  policyRef,
  protectedContentSetRef,

  results[],

  status:
    OK |
    PARTIAL |
    N_A |
    INVALID,

  confidence,
  provenance
}
Ordering: bindingRef lexical Duplicate bindingRef: INVALID Empty explicit binding set: OK results = []

Не забираем 7.02–7.06

11 / ownership firewall

Hard-safe containment — только один слой Topic 7.

QuestionOwner
Где safe shell?7.00
Должен ли explicit protected content быть внутри?7.01
Можно ли intentional bleed/edge exit?7.02
Каков continuous edge clearance/tension?7.03
Какие роли требуют какой edge policy?7.04
Какие UI overlays сейчас активны?7.05
Какие violation/repair/score?7.06

Visual Lab

12 / visual lab

Одна и та же geometry даёт разный hard result только из-за explicit boundary policy.

A · SATISFIED protected bbox inside safe rect B · TOUCHING ALLOW_TOUCH → SATISFIED STRICT_INTERIOR → BREACHED C · PARTIAL OUTSIDE PARTIAL_OUTSIDE → BREACHED protected status comes from explicit binding, not object name BREACHED = hard-constraint evidence, not yet a Violation object bbox / anchors / support modes preserve different evidence strength role-dependent protection = 7.04 · dynamic platform geometry = 7.05 repair / severity / scoring = 7.06

Hard-safe regression

13 / deterministic tests

Проверяем boundary rules, missing geometry, bbox/anchors, empty safe zone, explicit bindings, deterministic sets и ownership barriers.

Tests not run yet.

DATA FOR LAYOUT ENGINE

14 / machine contract

Machine-readable 7.01 contract.

{
  "module": "Compo 7.01",
  "name": "hard_safe_zones_and_protected_semantic_content",
  "version": "1.1-final",
  "canonical_main_title": "Hard safe zones и protected semantic content",
  "topic": "07_ПОЛЯ_SAFE_ZONES_И_BLEED",
  "scope": "HARD_SAFE_CONSTRAINT_BINDING_PROTECTED_CONTENT_REFERENCES_AND_CONTAINMENT_EVALUATION",
  "consumes": [
    "Compo7.00.SafeZoneShell / EdgeZoneGeometryResult with zoneKind=SAFE_ZONE_SHELL",
    "owner-qualified ProtectedSemanticContentSet",
    "content geometry/support adapters from owning modules",
    "optional Compo6.03 CanvasNormalizationContext when protected geometry uses compatible normalized representation",
    "optional role/platform policies only as explicit upstream binding sources"
  ],
  "provides": [
    "HardSafePolicy",
    "ProtectedSemanticContentBinding",
    "ProtectedSemanticContentSet",
    "SafeContainmentEvidence",
    "HardSafeConstraintResult",
    "HardSafeEvaluationSet",
    "HardSafeCorrectionRequest[]",
    "hardSafePolicyRef for SafeZoneShell",
    "protectedContentSetRef for downstream 7.06"
  ],
  "owns_metrics": [],
  "descriptors_only": [
    "edge.safe.policyRef",
    "edge.safe.protectedContentSetRef",
    "edge.safe.constraintRef",
    "edge.safe.zoneRef",
    "edge.safe.contentRef",
    "edge.safe.protectionMode",
    "edge.safe.supportRelation",
    "edge.safe.containmentStatus",
    "edge.safe.boundaryContactStatus",
    "edge.safe.maxOutsideDistance",
    "edge.safe.status",
    "edge.safe.confidence"
  ],
  "hard_safe_policy_schema": {
    "policyRef": "string",
    "zoneRef": "must point to 7.00 SAFE_ZONE_SHELL",
    "boundaryRule": "ALLOW_TOUCH|STRICT_INTERIOR",
    "geometryMode": "FULL_SUPPORT|BOUNDING_BOX|ANCHOR_SET|CUSTOM_REGION",
    "missingGeometryPolicy": "N_A|INVALID",
    "confidence": "0..1",
    "provenance": "STYLE_PRESET|STANDARD|EMPIRICAL|INITIAL_HEURISTIC|IMPLEMENTATION_HEURISTIC",
    "important": "policy does not infer semantic importance; it only states how already-bound protected content must relate to the safe zone",
    "sourceRef": "optional explicit source ref for custom/external policies; provenance class remains canonical"
  },
  "protected_content_binding_schema": {
    "bindingRef": "stable ref",
    "contentRef": "owner-qualified object/text/image/logo/etc ref",
    "semanticRoleRef": "optional external role ref; 7.01 does not interpret role hierarchy",
    "protectionSourceRef": "explicit upstream policy/owner ref explaining why this content is protected",
    "protectionMode": "FULL_SUPPORT|BOUNDING_BOX|ANCHOR_SET|CUSTOM_REGION",
    "geometryRef": "owner geometry/support ref appropriate to protectionMode",
    "anchorRefs": "required for ANCHOR_SET",
    "customRegionRef": "required for CUSTOM_REGION",
    "confidence": "0..1",
    "provenance": "object",
    "no_implicit_semantics": "absence of explicit binding means not evaluated as protected by 7.01; it is not auto-classified from text/logo/title names",
    "fullSupportRuntimeContract": "FULL_SUPPORT requires owner-supplied actual support extrema/adapter evidence; a generic bbox is not silently accepted as exact support"
  },
  "protected_content_set_schema": {
    "setRef": "stable versioned ref",
    "canvasRef": "same canvas as safe zone",
    "bindings": "ProtectedSemanticContentBinding[]",
    "status": "OK|PARTIAL|N_A|INVALID",
    "duplicateContentBindingPolicy": "same contentRef may appear more than once only if protectionMode/geometry target differs explicitly; duplicate bindingRef is INVALID",
    "confidence": "0..1",
    "provenance": "object"
  },
  "containment_semantics": {
    "ALLOW_TOUCH": "protected geometry may lie on safe-zone boundary; outside support is BREACHED",
    "STRICT_INTERIOR": "protected geometry must be strictly inside safe-zone boundary; any boundary touch is BREACHED",
    "FULL_SUPPORT": "all supplied actual-support extrema/geometry must satisfy policy; for a rectangular safe region exact owner-supplied extrema are sufficient for exact containment",
    "BOUNDING_BOX": "owner-supplied bbox must satisfy policy; this is an explicit approximation and may be more conservative than actual shape support",
    "ANCHOR_SET": "all declared protected anchors must satisfy policy",
    "CUSTOM_REGION": "owner-qualified geometry adapter supplies region relation",
    "empty_protected_geometry": "N_A/INVALID according missingGeometryPolicy; never treated as automatically safe",
    "empty_safe_zone": "hard constraint cannot be satisfied by nonempty protected geometry; status BREACHED, but violation object creation remains 7.06"
  },
  "support_relation_schema": {
    "INSIDE": "all tested geometry strictly inside zone boundary",
    "INSIDE_OR_TOUCHING": "all tested geometry inside or on boundary, at least one boundary contact",
    "PARTIAL_OUTSIDE": "some tested geometry outside",
    "FULLY_OUTSIDE": "tested geometry entirely outside",
    "N_A": "missing/unresolved geometry"
  },
  "rect_safe_evaluation": {
    "zone": "7.00 INSET_KEEP_IN_REGION rectangular safe shell",
    "point_allow_touch": "x>=x0 && x<=x1 && y>=y0 && y<=y1",
    "point_strict": "x>x0 && x<x1 && y>y0 && y<y1",
    "bbox_allow_touch": "bbox.x0>=zone.x0 && bbox.y0>=zone.y0 && bbox.x1<=zone.x1 && bbox.y1<=zone.y1",
    "bbox_strict": "all bbox edges strictly inside zone edges",
    "outside_distance": "max axis-aligned amount beyond safe rect; descriptor only, not 7.03 edge-clearance metric"
  },
  "ownership_map": {
    "7.00": "safe-zone shell geometry",
    "7.01": "hard safe constraint policy, explicit protected-content bindings and containment status",
    "7.02": "bleed / intentional edge exit / crop permission",
    "7.03": "continuous object-to-edge clearance and edge-tension metrics",
    "7.04": "role-dependent generation/selection of protection bindings and edge policy",
    "7.05": "platform overlay/dynamic safe-zone source geometry",
    "7.06": "Violation objects, repair requests, target-aware scoring and consolidated Topic7 regression"
  },
  "semantic_firewalls": {
    "protected_binding_vs_role_policy": "7.01 may carry semanticRoleRef but does not infer protection from role; 7.04 may author role-dependent bindings",
    "breached_vs_violation": "BREACHED is constraint-state evidence; canonical Violation object belongs to 7.06",
    "outside_distance_vs_edge_clearance": "outside-distance is only containment diagnostic relative to safe-zone boundary; continuous edge-clearance/tension remains 7.03",
    "safe_zone_vs_platform_overlay": "7.05 may produce dynamic safe-zone geometry, but 7.01 only evaluates the resolved zone presented to it",
    "hard_safe_vs_bleed": "protected content hard-safe containment does not grant or deny bleed permission for decorative/background elements"
  },
  "metric_policy": {
    "constraint_status": "hard constraint state, not design-quality score",
    "outside_distance": "diagnostic only",
    "direct_scoring": "FORBIDDEN in 7.01",
    "more_inside_is_better": "FORBIDDEN as universal score",
    "more_margin_is_better": "FORBIDDEN",
    "boundary_touch_is_bad": "only when explicit STRICT_INTERIOR policy says so"
  },
  "hard_constraints": [
    "one metric = one owner",
    "7.01 owns no design-quality MetricResult; it owns hard-safe applicability and containment state only",
    "only a 7.00 SAFE_ZONE_SHELL may be bound as HardSafePolicy.zoneRef",
    "protected semantic content must be explicit through owner-qualified bindings; 7.01 must not infer importance from content names, text roles or visual appearance",
    "protectionMode must match supplied geometry representation",
    "ALLOW_TOUCH and STRICT_INTERIOR boundary semantics must be explicit; no hidden epsilon margin may change policy meaning",
    "missing protected geometry is N_A or INVALID according explicit policy; never automatically SATISFIED",
    "empty safe-zone geometry cannot satisfy a nonempty protected geometry",
    "BOUNDING_BOX mode must identify itself as approximation evidence and may not be silently treated as exact support containment",
    "ANCHOR_SET checks only declared protected anchors and must not claim full-shape containment",
    "BREACHED is not a canonical Violation object; 7.06 owns violation construction/aggregation",
    "7.01 does not generate role-dependent protection rules; 7.04 owns role policy",
    "7.01 does not own platform overlay geometry lifecycle; 7.05 owns dynamic platform sources",
    "7.01 does not own continuous edge clearance/tension metrics; 7.03 owns them",
    "7.01 does not grant bleed/edge-exit permission; 7.02 owns it",
    "7.01 does not mutate content geometry to repair a breach",
    "safe containment is not Topic5 free-space geometry",
    "safe containment is not 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",
      "note": "used only for numerical comparisons in runtime reference implementation; policy boundary semantics remain explicit"
    }
  },
  "correction_policy": {
    "foreign_content_mutation": "FORBIDDEN",
    "missing_safe_zone": "route to Compo7.00 / zone source owner",
    "missing_protected_binding": "request upstream semantic/role owner; do not infer",
    "role_based_protection_question": "route to Compo7.04",
    "dynamic_platform_safe_geometry": "route to Compo7.05",
    "bleed_permission_question": "route to Compo7.02",
    "continuous_edge_clearance_question": "route to Compo7.03",
    "breach_violation_or_repair": "route to Compo7.06"
  },
  "deferred_inputs": [
    "Compo7.02 bleed/edge-exit permission",
    "Compo7.03 edge clearance/tension metrics",
    "Compo7.04 role-dependent binding generation",
    "Compo7.05 dynamic platform safe zones",
    "Compo7.06 violations/repair/scoring/tests",
    "future semantic-role owners supplying ProtectedSemanticContentSet"
  ],
  "recompute_when": [
    "7.00 safe-zone geometry changes",
    "HardSafePolicy changes",
    "ProtectedSemanticContentSet membership/version changes",
    "protected geometry/support/bbox/anchors change",
    "upstream role/platform policy changes the explicit binding set",
    "coordinate-space adapter changes"
  ],
  "finality": "HARD_SAFE_CONSTRAINT_BINDING_AND_CONTAINMENT_ONLY",
  "hard_rules": [
    "one metric = one owner",
    "7.01 owns no design-quality MetricResult; it owns hard-safe applicability and containment state only",
    "only a 7.00 SAFE_ZONE_SHELL may be bound as HardSafePolicy.zoneRef",
    "protected semantic content must be explicit through owner-qualified bindings; 7.01 must not infer importance from content names, text roles or visual appearance",
    "protectionMode must match supplied geometry representation",
    "ALLOW_TOUCH and STRICT_INTERIOR boundary semantics must be explicit; no hidden epsilon margin may change policy meaning",
    "missing protected geometry is N_A or INVALID according explicit policy; never automatically SATISFIED",
    "empty safe-zone geometry cannot satisfy a nonempty protected geometry",
    "BOUNDING_BOX mode must identify itself as approximation evidence and may not be silently treated as exact support containment",
    "ANCHOR_SET checks only declared protected anchors and must not claim full-shape containment",
    "BREACHED is not a canonical Violation object; 7.06 owns violation construction/aggregation",
    "7.01 does not generate role-dependent protection rules; 7.04 owns role policy",
    "7.01 does not own platform overlay geometry lifecycle; 7.05 owns dynamic platform sources",
    "7.01 does not own continuous edge clearance/tension metrics; 7.03 owns them",
    "7.01 does not grant bleed/edge-exit permission; 7.02 owns it",
    "7.01 does not mutate content geometry to repair a breach",
    "safe containment is not Topic5 free-space geometry",
    "safe containment is not 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",
    "repair_candidates": "NONE",
    "reason": "hard-safe evaluator only; repairs belong to 7.06"
  }
}
ARCHITECTURE CHECKPOINT · 7.01 OWNS HARD-SAFE APPLICABILITY, EXPLICIT PROTECTED-CONTENT BINDINGS AND CONTAINMENT STATE ONLY — NO DESIGN SCORE. PROTECTED CONTENT MUST BE EXPLICIT; ROLE NAMES DO NOT AUTO-PROTECT OBJECTS. ALLOW_TOUCH / STRICT_INTERIOR ARE POLICY SEMANTICS, NOT HIDDEN MARGINS. BOUNDING_BOX IS APPROXIMATION; ANCHOR_SET DOES NOT CLAIM FULL-SHAPE CONTAINMENT. BREACHED IS CONSTRAINT EVIDENCE, NOT YET A 7.06 VIOLATION OBJECT. 7.02 OWNS BLEED PERMISSION, 7.03 CLEARANCE/TENSION, 7.04 ROLE POLICY, 7.05 PLATFORM OVERLAYS, 7.06 VIOLATIONS/REPAIR/SCORING. NO BEAUTYSCORE.
VISITS / ...