Dynamic safe zone = stateful geometry snapshot
7.05 отвечает за то, какие platform overlays сейчас активны и какую exclusion geometry они создают. Enforcement остаётся downstream.
Platform overlays + state snapshot + geometry snapshots.
Versioned DynamicSafeZoneSnapshot.
None.
От чего вычитаются overlays
Dynamic safe geometry всегда строится относительно explicit base region, а не content occupancy.
BaseSafeRegionSnapshot {
baseSafeRef,
canvasRef,
platformRef,
surfaceRef,
geometryType:
RECT |
REGION_REF,
rect? | regionRef?,
unit,
coordinateFrame,
sourceOwner,
confidence,
provenance
}
OverlayDescriptor не содержит текущего state
Descriptor описывает тип и safe-effect, но activation хранится отдельно.
PlatformOverlayDescriptor {
overlayRef,
platformRef,
surfaceRef,
canvasRef,
overlayKind:
SYSTEM_CHROME |
NAVIGATION |
COMPOSER |
CAPTION_AREA |
ACTION_CLUSTER |
KEYBOARD |
NOTCH_OR_CUTOUT |
CUSTOM,
lifecycleMode:
ALWAYS_ACTIVE |
STATE_DRIVEN,
safeEffect:
EXCLUDE_FROM_SAFE |
NO_SAFE_EFFECT,
geometryRef?,
confidence,
provenance
}
ACTIVE / INACTIVE / UNKNOWN
State — versioned evidence текущего platform/application context.
PlatformOverlayStateSnapshot {
snapshotRef,
platformRef,
surfaceRef,
canvasRef,
evaluationContextRef,
stateRecords: [{
overlayRef,
state:
ACTIVE |
INACTIVE |
UNKNOWN,
stateVersion,
sourceRef,
confidence,
provenance
}],
confidence,
provenance
}
UNKNOWN нельзя молча считать INACTIVE
Поведение при неполном platform state задаётся отдельным explicit resolution policy.
RETURN_PARTIAL
Overlay остаётся unresolved; dynamic safe snapshot получает PARTIAL.
CONSERVATIVE ACTIVE
UNKNOWN исключается из safe region, если geometry уже разрешена.
EXPLICIT IGNORE
UNKNOWN не вычитается, но его ref сохраняется в ignoredUnknownOverlayRefs.
ALWAYS_ACTIVE — отдельная семантика
Отсутствие state record у ALWAYS_ACTIVE не делает overlay неизвестным.
State и geometry версионируются независимо
Geometry snapshot обязан совпадать с overlay/canvas coordinate context.
OverlayGeometrySnapshot {
geometrySnapshotRef,
overlayRef,
canvasRef,
geometryType:
RECT |
POLYGON_REF |
MASK_REF |
CUSTOM_REGION,
rect? | geometryRef?,
unit,
coordinateFrame,
confidence,
provenance
}
NO_SAFE_EFFECT не вычитается
Overlay может быть активен и визуально занимать место, но policy может явно сказать, что он не ограничивает композиционный safe region.
EXCLUDE_FROM_SAFE
Active geometry включается в exclusion set.
NO_SAFE_EFFECT
State сохраняется для provenance, но geometry не участвует в safe-region difference.
BASE − UNION(overlays)
Для axis-aligned rect overlays 7.05 даёт exact baseline materialization без зависимости от порядка входов.
Safe region может распасться или исчезнуть
Это допустимые geometry states, а не автоматические violations.
DISCONNECTED
safeRectCells[] может содержать несколько непересекающихся fragments/cells.
EMPTY
Если union exclusions покрывает весь base region, snapshot получает EMPTY.
Immutable resolved snapshot
Любое изменение state/geometry создаёт новую lineage, а не переписывает старый результат.
DynamicSafeZoneSnapshot {
dynamicSafeZoneRef,
baseSafeRef,
platformRef,
surfaceRef,
canvasRef,
overlaySetRef,
stateSnapshotRef,
resolutionPolicyRef,
activeOverlayRefs[],
inactiveOverlayRefs[],
unresolvedOverlayRefs[],
ignoredUnknownOverlayRefs[],
effectiveExclusionRefs[],
externalExclusionRefs[],
safeRegionExpression:
BASE_MINUS_UNION,
safeRectCells[]?,
status:
OK |
PARTIAL |
EMPTY |
INVALID,
confidence,
provenance
}
Geometry source, не enforcement owner
Один resolved snapshot может кормить несколько downstream owners.
7.01
Использует dynamic safe region для protected-content containment.
7.03
Использует resolved reference geometry для clearance adapter.
7.04
Может выбирать dynamic ref по role policy, но не меняет active state.
7.06
Строит violations/repair/scoring из downstream evidence.
Dynamic update = invalidation, не reflow
7.05 может сообщить, что safe geometry изменилась, но не двигает content.
Platform-aware, но не universal edge engine
Dynamic UI-state не меняет границы ownership Topic 7.
| Question | Owner |
|---|---|
| Neutral zone shells? | 7.00 |
| Hard protected-content containment? | 7.01 |
| Bleed/intentional exit? | 7.02 |
| Signed clearance/tension? | 7.03 |
| Role → edge policy? | 7.04 |
| Overlay lifecycle + dynamic safe geometry? | 7.05 |
| Violation / repair / score? | 7.06 |
Visual Lab
Один base safe region меняется только из-за explicit platform-state snapshot.
Platform/dynamic-safe regression
Проверяем lifecycle, UNKNOWN policies, safeEffect, identity consistency, rectangle-union materialization, disconnected/empty states, non-rect partials, diff/invalidation и ownership barriers.
DATA FOR LAYOUT ENGINE
Machine-readable 7.05 contract.
{
"module": "Compo 7.05",
"name": "platform_overlays_and_dynamic_safe_zones",
"version": "1.1-final",
"canonical_main_title": "Platform overlays и динамические safe zones",
"topic": "07_ПОЛЯ_SAFE_ZONES_И_BLEED",
"scope": "PLATFORM_OVERLAY_LIFECYCLE_ACTIVE_EXCLUSION_RESOLUTION_DYNAMIC_SAFE_REGION_SNAPSHOTS_AND_INVALIDATION",
"consumes": [
"Compo7.00 PLATFORM_RESERVED_SHELL / SAFE_ZONE_SHELL geometry refs as optional source geometry",
"explicit BaseSafeRegionSnapshot",
"PlatformOverlaySet",
"PlatformOverlayStateSnapshot",
"owner-qualified OverlayGeometrySnapshot[]",
"explicit PlatformSafeResolutionPolicy",
"optional Compo6.00 CanvasDescriptor for identity/frame checks"
],
"provides": [
"PlatformOverlayDescriptor",
"PlatformOverlaySet",
"PlatformOverlayStateRecord",
"PlatformOverlayStateSnapshot",
"OverlayGeometrySnapshot",
"PlatformSafeResolutionPolicy",
"ResolvedPlatformOverlay",
"DynamicSafeZoneSnapshot",
"DynamicSafeZoneChangeSet",
"PlatformSafeInvalidationRequest[]",
"dynamicSafeZoneRef for Compo7.01 / Compo7.03 / Compo7.04 / Compo7.06"
],
"owns_metrics": [],
"descriptors_only": [
"edge.platform.platformRef",
"edge.platform.surfaceRef",
"edge.platform.overlayRef",
"edge.platform.overlayKind",
"edge.platform.lifecycleMode",
"edge.platform.state",
"edge.platform.safeEffect",
"edge.platform.geometryRef",
"edge.platform.dynamicSafeZoneRef",
"edge.platform.activeOverlayRefs",
"edge.platform.unresolvedOverlayRefs",
"edge.platform.ignoredUnknownOverlayRefs",
"edge.platform.safeRectCells",
"edge.platform.status",
"edge.platform.confidence"
],
"base_safe_region_schema": {
"baseSafeRef": "stable versioned ref",
"canvasRef": "canvas identity",
"platformRef": "platform identity",
"surfaceRef": "surface/layout context identity",
"geometryType": "RECT|REGION_REF",
"rect": "required for RECT; x1>x0, y1>y0",
"regionRef": "required for REGION_REF",
"unit": "PX|CANVAS_UNIT|MM",
"coordinateFrame": "CANVAS_TOP_LEFT_Y_DOWN",
"sourceOwner": "Compo7.00 / Compo6.00 / explicit external owner",
"confidence": "0..1",
"provenance": "object",
"important": "7.05 never infers the base safe region from content occupancy"
},
"platform_overlay_descriptor_schema": {
"overlayRef": "stable unique ref",
"platformRef": "platform identity",
"surfaceRef": "surface identity",
"canvasRef": "canvas identity",
"overlayKind": "SYSTEM_CHROME|NAVIGATION|COMPOSER|CAPTION_AREA|ACTION_CLUSTER|KEYBOARD|NOTCH_OR_CUTOUT|CUSTOM",
"lifecycleMode": "ALWAYS_ACTIVE|STATE_DRIVEN",
"safeEffect": "EXCLUDE_FROM_SAFE|NO_SAFE_EFFECT",
"geometryRef": "required when safeEffect=EXCLUDE_FROM_SAFE",
"confidence": "0..1",
"provenance": "STANDARD|EMPIRICAL|STYLE_PRESET|IMPLEMENTATION_HEURISTIC|INITIAL_HEURISTIC",
"important": "overlayKind and visual appearance do not imply safeEffect",
"sourceRef": "optional explicit custom/external platform source; provenance class remains canonical"
},
"platform_overlay_state_record_schema": {
"overlayRef": "descriptor ref",
"state": "ACTIVE|INACTIVE|UNKNOWN",
"stateVersion": "version token",
"sourceRef": "state provider / platform snapshot source",
"confidence": "0..1",
"provenance": "object"
},
"platform_overlay_state_snapshot_schema": {
"snapshotRef": "stable versioned ref",
"platformRef": "must match overlay set",
"surfaceRef": "must match overlay set",
"canvasRef": "must match overlay set",
"stateRecords": "PlatformOverlayStateRecord[]",
"evaluationContextRef": "explicit UI/application state context ref",
"confidence": "0..1",
"provenance": "object",
"duplicateOverlayState": "INVALID"
},
"overlay_geometry_snapshot_schema": {
"geometrySnapshotRef": "stable versioned ref",
"overlayRef": "descriptor ref",
"canvasRef": "same canvas",
"geometryType": "RECT|POLYGON_REF|MASK_REF|CUSTOM_REGION",
"rect": "required for RECT; finite positive-area rectangle",
"geometryRef": "required for non-RECT",
"unit": "must match base region unit unless explicit adapter is supplied",
"coordinateFrame": "CANVAS_TOP_LEFT_Y_DOWN for baseline rect resolution",
"confidence": "0..1",
"provenance": "object"
},
"platform_safe_resolution_policy_schema": {
"policyRef": "stable explicit ref",
"unknownStatePolicy": "RETURN_PARTIAL|CONSERVATIVE_ACTIVE_IF_GEOMETRY_KNOWN|EXPLICIT_IGNORE_UNKNOWN",
"geometryFailurePolicy": "RETURN_PARTIAL|INVALID",
"materializeRectCells": "boolean",
"confidence": "0..1",
"provenance": "STANDARD|STYLE_PRESET|EMPIRICAL|IMPLEMENTATION_HEURISTIC",
"no_hidden_default": "resolver must not invent a policy when this object is absent"
},
"state_resolution": {
"ALWAYS_ACTIVE + no state record": "ACTIVE",
"ALWAYS_ACTIVE + ACTIVE": "ACTIVE",
"ALWAYS_ACTIVE + INACTIVE": "INVALID_STATE_CONFLICT",
"ALWAYS_ACTIVE + UNKNOWN": "ACTIVE_WITH_STATE_DIAGNOSTIC",
"STATE_DRIVEN + ACTIVE": "ACTIVE",
"STATE_DRIVEN + INACTIVE": "INACTIVE",
"STATE_DRIVEN + UNKNOWN or missing": "follow unknownStatePolicy",
"NO_SAFE_EFFECT": "state may still be resolved for provenance, but geometry is never subtracted"
},
"unknown_state_policy": {
"RETURN_PARTIAL": "leave overlay unresolved; safe snapshot status PARTIAL",
"CONSERVATIVE_ACTIVE_IF_GEOMETRY_KNOWN": "treat UNKNOWN as active only when exclusion geometry is resolved; otherwise PARTIAL",
"EXPLICIT_IGNORE_UNKNOWN": "do not subtract unknown overlay; record it in ignoredUnknownOverlayRefs",
"important": "none of these is a universal default"
},
"rect_exclusion_materialization": {
"base": "one explicit rectangular base safe region",
"overlay_rect": "active EXCLUDE_FROM_SAFE rectangle clipped to base rect",
"operation": "BASE_RECT minus UNION(active clipped exclusion rects)",
"algorithm": "canonical x/y arrangement: collect base/exclusion x/y boundaries, partition into non-overlapping cells, retain cells whose midpoint is not inside any exclusion",
"order_independence": "output safeRectCells sorted canonically; overlay input order cannot change the represented safe set",
"disconnected": "allowed",
"empty": "safeRectCells=[] and status EMPTY when all baseline area is excluded",
"no_bbox_collapse": "multiple cells/fragments must not be replaced by one enclosing bbox"
},
"dynamic_safe_zone_snapshot_schema": {
"dynamicSafeZoneRef": "stable ref derived from baseSafeRef + overlaySetRef + stateSnapshotRef + resolutionPolicyRef",
"baseSafeRef": "source base safe region",
"platformRef": "string",
"surfaceRef": "string",
"canvasRef": "string",
"overlaySetRef": "string",
"stateSnapshotRef": "string",
"resolutionPolicyRef": "string",
"activeOverlayRefs": "sorted refs",
"inactiveOverlayRefs": "sorted refs",
"unresolvedOverlayRefs": "sorted refs",
"ignoredUnknownOverlayRefs": "sorted refs",
"effectiveExclusionRefs": "sorted refs",
"safeRegionExpression": "BASE_MINUS_UNION(EXCLUSIONS)",
"safeRectCells": "exact baseline materialization when all effective exclusions are RECT and base is RECT",
"externalExclusionRefs": "non-rect geometry refs requiring owner adapter",
"status": "OK|PARTIAL|EMPTY|N_A|INVALID",
"confidence": "minimum relevant evidence confidence",
"provenance": "DERIVED"
},
"dynamic_change_semantics": {
"changeSet": "compare two resolved snapshots for the same platform/surface/canvas/base policy lineage",
"changedFamilies": "ACTIVE_OVERLAY_SET|OVERLAY_GEOMETRY|UNRESOLVED_STATE|BASE_SAFE_REGION|RESOLUTION_POLICY",
"safeRegionChanged": "true when active/effective exclusions or base geometry/version changed",
"recomputeHints": [
"Compo7.01 hard-safe containment consumers",
"Compo7.03 clearance/reference consumers",
"Compo7.06 violation/scoring consumers",
"integration/layout owner may decide whether to request adaptation"
],
"mutationAllowed": false,
"important": "7.05 emits invalidation/recompute evidence, not a reflow"
},
"ownership_map": {
"7.00": "neutral margin/safe/bleed/platform-reserved shells",
"7.01": "hard-safe protected-content containment",
"7.02": "bleed and intentional edge exit",
"7.03": "continuous edge clearance/tension",
"7.04": "role-dependent edge policy routing",
"7.05": "platform overlay lifecycle/state and resolved dynamic safe geometry",
"7.06": "violations, repair, target-aware scoring and Topic7 regression"
},
"semantic_firewalls": {
"overlay_exists_vs_active": "descriptor existence does not imply current activation",
"unknown_vs_inactive": "UNKNOWN is not INACTIVE",
"visual_overlay_vs_safe_effect": "opacity/z-order/overlay kind do not imply exclusion",
"dynamic_geometry_vs_hard_safe": "7.05 supplies geometry; 7.01 enforces protected-content containment",
"dynamic_geometry_vs_clearance": "7.05 supplies reference snapshot; 7.03 owns numeric clearance",
"role_policy_vs_lifecycle": "7.04 can choose refs but cannot toggle overlay state",
"empty_safe_region_vs_violation": "EMPTY is geometry state; violation construction remains 7.06",
"recompute_vs_reflow": "change event can invalidate downstream evidence but cannot mutate layout"
},
"metric_policy": {
"overlay_count": "descriptor only",
"safe_cell_count": "implementation/geometry descriptor only",
"direct_scoring": "FORBIDDEN in 7.05",
"fewer_overlays_is_better": "FORBIDDEN",
"larger_dynamic_safe_region_is_better": "FORBIDDEN",
"platform_without_overlays_is_better": "FORBIDDEN"
},
"hard_constraints": [
"7.05 owns platform-overlay lifecycle snapshots, active exclusion geometry resolution and dynamic safe-region snapshots only; no design-quality score.",
"Platform/surface/canvas identity must be explicit and consistent across overlay set, state snapshot, geometry snapshot and base safe region.",
"Overlay existence is not the same as overlay active state.",
"UNKNOWN state is not INACTIVE; handling UNKNOWN requires an explicit PlatformSafeResolutionPolicy.",
"ALWAYS_ACTIVE descriptors resolve active regardless of absent state records; a contradictory explicit INACTIVE state record is INVALID.",
"STATE_DRIVEN overlays without a state record resolve UNKNOWN and follow the explicit unknownStatePolicy.",
"NO_SAFE_EFFECT overlays never subtract geometry from the dynamic safe region even when active.",
"EXCLUDE_FROM_SAFE overlays require owner-qualified geometry; missing geometry is PARTIAL or INVALID according explicit geometryFailurePolicy.",
"Overlay visual opacity, z-order, label, role or size must not be used to infer safe effect.",
"Baseline rectangular exclusion materialization clips exclusion rectangles to the base safe rectangle and subtracts their union exactly.",
"Dynamic safe geometry may be disconnected; 7.05 must not collapse multiple safe fragments into one bounding box.",
"An empty resolved safe region is a geometry state, not yet a content violation.",
"Non-rect polygon/mask/custom regions remain owner-qualified external geometry unless an explicit adapter resolves them.",
"A dynamic safe-region snapshot may be consumed by 7.01 for hard containment, but 7.05 does not enforce protected content.",
"A dynamic reference may be consumed by 7.03 for clearance, but 7.05 does not own clearance metrics or tension classification.",
"7.04 may reference a 7.05 dynamic region/ref, but 7.04 cannot activate/deactivate overlays.",
"Dynamic safe-region changes emit invalidation/recompute hints only; no content/layout mutation is permitted.",
"7.05 does not construct canonical Violation, repair or scoring objects; 7.06 owns them.",
"Unknown/partial geometry must not be silently treated as a fully resolved safe region.",
"N/A != 0.",
"No beautyScore."
],
"hard_rules": [
"7.05 owns platform-overlay lifecycle snapshots, active exclusion geometry resolution and dynamic safe-region snapshots only; no design-quality score.",
"Platform/surface/canvas identity must be explicit and consistent across overlay set, state snapshot, geometry snapshot and base safe region.",
"Overlay existence is not the same as overlay active state.",
"UNKNOWN state is not INACTIVE; handling UNKNOWN requires an explicit PlatformSafeResolutionPolicy.",
"ALWAYS_ACTIVE descriptors resolve active regardless of absent state records; a contradictory explicit INACTIVE state record is INVALID.",
"STATE_DRIVEN overlays without a state record resolve UNKNOWN and follow the explicit unknownStatePolicy.",
"NO_SAFE_EFFECT overlays never subtract geometry from the dynamic safe region even when active.",
"EXCLUDE_FROM_SAFE overlays require owner-qualified geometry; missing geometry is PARTIAL or INVALID according explicit geometryFailurePolicy.",
"Overlay visual opacity, z-order, label, role or size must not be used to infer safe effect.",
"Baseline rectangular exclusion materialization clips exclusion rectangles to the base safe rectangle and subtracts their union exactly.",
"Dynamic safe geometry may be disconnected; 7.05 must not collapse multiple safe fragments into one bounding box.",
"An empty resolved safe region is a geometry state, not yet a content violation.",
"Non-rect polygon/mask/custom regions remain owner-qualified external geometry unless an explicit adapter resolves them.",
"A dynamic safe-region snapshot may be consumed by 7.01 for hard containment, but 7.05 does not enforce protected content.",
"A dynamic reference may be consumed by 7.03 for clearance, but 7.05 does not own clearance metrics or tension classification.",
"7.04 may reference a 7.05 dynamic region/ref, but 7.04 cannot activate/deactivate overlays.",
"Dynamic safe-region changes emit invalidation/recompute hints only; no content/layout mutation is permitted.",
"7.05 does not construct canonical Violation, repair or scoring objects; 7.06 owns them.",
"Unknown/partial geometry must not be silently treated as a fully resolved safe region.",
"N/A != 0.",
"No beautyScore."
],
"soft_constraints": [],
"preferences": [],
"overrides_allowed_by": [
"a newer explicit platform state snapshot may supersede an older snapshot for future resolutions",
"a newer geometry snapshot may supersede prior geometry for the same overlayRef",
"historical DynamicSafeZoneSnapshot remains immutable and tied to original refs"
],
"initial_heuristics": {},
"style_preset_values": [],
"candidate_generation": {
"layout_candidates": "NONE",
"region_candidates": "NONE",
"reason": "7.05 resolves explicit overlay state/geometry deterministically; uncertain states become PARTIAL or follow explicit policy rather than branching hidden candidates"
},
"correction_policy": {
"foreign_content_mutation": "FORBIDDEN",
"missing_base_safe_region": "route to Compo7.00/Compo6.00/platform source owner",
"missing_overlay_state": "apply explicit unknownStatePolicy or request state source",
"missing_overlay_geometry": "apply explicit geometryFailurePolicy or request geometry owner",
"platform_surface_canvas_mismatch": "request source correction; do not coerce refs",
"hard_safe_evaluation": "route to Compo7.01",
"clearance_evaluation": "route to Compo7.03",
"role_policy": "route to Compo7.04",
"violation_repair_scoring": "route to Compo7.06"
},
"deferred_inputs": [
"Compo7.06 violations/repair/scoring/tests",
"future platform adapters producing polygon/mask/custom overlay geometry",
"future layout solver deciding adaptation after dynamic safe-zone change"
],
"recompute_when": [
"base safe region geometry/version changes",
"overlay set membership/descriptor changes",
"overlay state snapshot changes",
"overlay geometry snapshot changes",
"resolution policy changes",
"platform/surface/canvas context changes"
],
"tests": [
"always active",
"state driven active/inactive/unknown",
"unknown policies",
"NO_SAFE_EFFECT",
"identity mismatch",
"rect clipping",
"overlap union/order invariance",
"disconnected safe region",
"empty safe region",
"non-rect partial",
"deterministic snapshot",
"snapshot diff/invalidation",
"no hard-safe/clearance/scoring/reflow leakage"
],
"finality": "PLATFORM_OVERLAY_LIFECYCLE_AND_DYNAMIC_SAFE_GEOMETRY_ONLY"
}