Bleed shell получает intent semantics
7.02 не создаёт outside-canvas band заново: он получает `BLEED_ZONE_SHELL` из 7.00 и проверяет explicit exit policy для конкретного content binding.
7.00 BLEED_ZONE_SHELL.
Explicit binding + per-edge rules.
Trim relation + local compliance.
Правило задаётся отдельно для каждого edge
Один объект может, например, быть обязан уходить в bleed справа, но не иметь права пересекать верхнюю границу.
BleedIntentPolicy {
policyRef,
bleedZoneRef,
trimBoundaryRef,
edgeRules: {
TOP:
PROHIBIT_EXIT |
ALLOW_EXIT |
REQUIRE_EXIT |
IGNORE_EDGE,
RIGHT: ...,
BOTTOM: ...,
LEFT: ...
},
minimumOutsideDepthByEdge?,
depthUnit?,
normalizationContextRef?,
outerLimitRule:
IGNORE_BEYOND_SHELL |
PROHIBIT_BEYOND_SHELL,
missingGeometryPolicy,
confidence,
provenance
}
BleedIntentBinding
7.02 не определяет intent из типа объекта. Причина выхода должна быть указана явно.
BleedIntentBinding {
bindingRef,
contentRef,
intentSourceRef,
intentKind:
PRINT_BLEED |
INTENTIONAL_CROP |
BACKGROUND_CONTINUATION |
DECORATIVE_EDGE_EXIT |
CUSTOM,
geometryMode:
FULL_SUPPORT |
BOUNDING_BOX |
CUSTOM_REGION,
geometryRef?,
customRegionRef?,
policyRef,
confidence,
provenance
}
Touch ≠ crossing
Для intentional crop/bleed критично наличие support по обе стороны trim boundary.
| Relation | Meaning |
|---|---|
INSIDE_ONLY | support остаётся со внутренней стороны edge |
TOUCHING_TRIM | support касается edge, но не выходит наружу |
CROSSES_TRIM | support существует и внутри, и снаружи edge |
OUTSIDE_ONLY | tested support целиком находится с внешней стороны edge |
N_A | geometry не разрешена |
PROHIBIT / ALLOW / REQUIRE / IGNORE
Compliance — hard local relation, а не aesthetic preference.
PROHIBIT
Inside/touch — SATISFIED. Any support outside — BREACHED.
ALLOW
Exit разрешён, но не обязателен.
REQUIRE
Нужен именно CROSSES_TRIM и, если задано, minimum depth.
IGNORE
Edge не участвует в compliance; result N/A.
Глубина выхода
Для каждого edge измеряется максимальное extension наружу от trim.
Minimum outside depth — explicit
Если export/print policy требует минимальную глубину bleed, она становится hard parameter данного policy.
Policy может быть геометрически невыполним
Declared bleed shell ограничивает область, которую вообще описывает текущий contract.
Beyond declared bleed shell
Объект может выходить дальше объявленного shell; реакция задаётся отдельным policy rule.
IGNORE_BEYOND_SHELL
Факт сохраняется как diagnostic. 7.02 не делает его breach.
PROHIBIT_BEYOND_SHELL
Любой outsideDepth больше shell depth → BREACHED.
Exact support и bbox не равны
Reference runner использует bbox для детерминированных tests, но contract сохраняет evidence strength.
FULL_SUPPORT
Owner adapter поставляет exact/declared support relation.
BOUNDING_BOX
Быстрая conservative approximation для edge crossing.
CUSTOM_REGION
Owner-qualified per-edge relation/depth.
BleedIntentResult
Один binding даёт четыре per-edge results плюс aggregate local compliance.
BleedIntentResult {
resultRef,
policyRef,
bindingRef,
contentRef,
intentKind,
edgeResults: {
TOP: {
edgeRule,
trimRelation,
outsideDepth,
shellDepth,
reachesMinimumDepth,
beyondDeclaredBleedShell,
complianceStatus
},
...
},
complianceStatus:
SATISFIED |
BREACHED |
PARTIAL |
N_A |
INVALID,
approximation,
confidence,
provenance
}
Safe и bleed policy не сливаются
Один и тот же contentRef теоретически может оказаться в противоречивых upstream policy sets.
Оставляем следующие модули следующими
Intentional edge exit не должен разрастись до универсального edge engine.
| Question | Owner |
|---|---|
| Где находится bleed shell? | 7.00 |
| Protected content обязан быть внутри safe? | 7.01 |
| Можно/нужно ли пересечь trim и насколько? | 7.02 |
| Какой реальный clearance/tension до edge? | 7.03 |
| Какие роли получают какие edge rules? | 7.04 |
| Как platform overlay меняет usable edges? | 7.05 |
| Violation / repair / score? | 7.06 |
Visual Lab
Показываем разницу между touch, crossing и required depth.
Bleed/edge-exit regression
Проверяем touch≠cross, per-edge rules, minimum depth, shell capacity, beyond-shell policy, missing geometry, deterministic sets и ownership barriers.
DATA FOR LAYOUT ENGINE
Machine-readable 7.02 contract.
{
"module": "Compo 7.02",
"name": "bleed_and_intentional_edge_exit",
"version": "1.1-final",
"canonical_main_title": "Bleed и intentional edge exit",
"topic": "07_ПОЛЯ_SAFE_ZONES_И_BLEED",
"scope": "BLEED_INTENT_BINDING_TRIM_EDGE_CROSSING_OUTSIDE_DEPTH_AND_EXIT_POLICY_COMPLIANCE",
"consumes": [
"Compo7.00.BleedZoneShell / EdgeZoneGeometryResult with zoneKind=BLEED_ZONE_SHELL and relationToCanvas=OUTSET_BAND",
"Compo6.00.CanvasDomainBoundary or explicit TrimBoundaryRef adapter",
"explicit BleedIntentBinding[] from role/style/document/content owner",
"owner-qualified content support geometry",
"optional Compo6.03 CanvasNormalizationContext for SHORT_N policy depths",
"optional crop/mask/seam evidence from owner-qualified geometry modules such as Compo2.22 without re-owning their line/mask semantics"
],
"provides": [
"BleedIntentPolicy",
"BleedIntentBinding",
"TrimEdgeRelation",
"BleedDepthEvidence",
"BleedIntentResult",
"BleedEvaluationSet",
"BleedPolicyDiagnostic[]",
"bleedPolicyRef for Compo7.00 BleedZoneShell",
"bleedEvidenceRef for downstream Compo7.06"
],
"owns_metrics": [],
"descriptors_only": [
"edge.bleed.policyRef",
"edge.bleed.bindingRef",
"edge.bleed.contentRef",
"edge.bleed.intentKind",
"edge.bleed.edgeRule",
"edge.bleed.trimRelation",
"edge.bleed.outsideDepth",
"edge.bleed.reachesMinimumDepth",
"edge.bleed.beyondDeclaredBleedShell",
"edge.bleed.complianceStatus",
"edge.bleed.status",
"edge.bleed.confidence"
],
"trim_boundary_contract": {
"baseline": "Compo6.00 full-canvas boundary acts as the trim-like boundary for baseline 7.00 OUTSET_BAND geometry",
"custom_trim": "if production/export trim differs from the canvas boundary, an explicit TrimBoundaryRef/adapter is required",
"coordinateFrame": "CANVAS_TOP_LEFT_Y_DOWN",
"edges": {
"TOP": "y=trim.y0",
"RIGHT": "x=trim.x1",
"BOTTOM": "y=trim.y1",
"LEFT": "x=trim.x0"
},
"important": "7.02 must not infer a print trim boundary from raster size, bleed shell size or content bounds"
},
"bleed_intent_policy_schema": {
"policyRef": "stable ref",
"bleedZoneRef": "must point to a 7.00 BLEED_ZONE_SHELL",
"trimBoundaryRef": "explicit trim/canvas-boundary ref",
"edgeRules": {
"TOP": "PROHIBIT_EXIT|ALLOW_EXIT|REQUIRE_EXIT|IGNORE_EDGE",
"RIGHT": "same",
"BOTTOM": "same",
"LEFT": "same"
},
"minimumOutsideDepthByEdge": "optional EdgeOffsetSet-like nonnegative values; only meaningful for REQUIRE_EXIT",
"depthUnit": "PX|CANVAS_UNIT|MM|SHORT_N when any minimum depth is declared",
"normalizationContextRef": "required for SHORT_N depth",
"outerLimitRule": "IGNORE_BEYOND_SHELL|PROHIBIT_BEYOND_SHELL",
"missingGeometryPolicy": "N_A|INVALID",
"confidence": "0..1",
"provenance": "STANDARD|EMPIRICAL|INITIAL_HEURISTIC|IMPLEMENTATION_HEURISTIC|STYLE_PRESET"
},
"bleed_intent_binding_schema": {
"bindingRef": "stable ref",
"contentRef": "owner-qualified content/object ref",
"intentSourceRef": "explicit source explaining why edge exit is allowed/required/prohibited",
"intentKind": "PRINT_BLEED|INTENTIONAL_CROP|BACKGROUND_CONTINUATION|DECORATIVE_EDGE_EXIT|CUSTOM",
"geometryMode": "FULL_SUPPORT|BOUNDING_BOX|CUSTOM_REGION",
"geometryRef": "required for FULL_SUPPORT/BOUNDING_BOX",
"customRegionRef": "required for CUSTOM_REGION",
"policyRef": "BleedIntentPolicy ref",
"confidence": "0..1",
"provenance": "object",
"no_implicit_intent": "background/image/decorative names never auto-authorize exit"
},
"trim_edge_relation_schema": {
"INSIDE_ONLY": "tested geometry remains on the inside side of the trim edge",
"TOUCHING_TRIM": "geometry touches trim edge but does not have support beyond it",
"CROSSES_TRIM": "geometry has support on both inside and outside sides of the trim edge",
"OUTSIDE_ONLY": "tested geometry lies entirely outside that trim edge",
"N_A": "geometry unresolved"
},
"per_edge_compliance": {
"PROHIBIT_EXIT": {
"SATISFIED": [
"INSIDE_ONLY",
"TOUCHING_TRIM"
],
"BREACHED": [
"CROSSES_TRIM",
"OUTSIDE_ONLY"
]
},
"ALLOW_EXIT": {
"SATISFIED": [
"INSIDE_ONLY",
"TOUCHING_TRIM",
"CROSSES_TRIM",
"OUTSIDE_ONLY"
],
"note": "permission is permissive, not a requirement"
},
"REQUIRE_EXIT": {
"SATISFIED": "CROSSES_TRIM and outsideDepth >= explicit minimum depth if one exists",
"BREACHED": "INSIDE_ONLY, TOUCHING_TRIM, OUTSIDE_ONLY, or insufficient depth"
},
"IGNORE_EDGE": "N_A"
},
"outside_depth_semantics": {
"TOP": "max(0, trim.y0 - geometry.minY)",
"RIGHT": "max(0, geometry.maxX - trim.x1)",
"BOTTOM": "max(0, geometry.maxY - trim.y1)",
"LEFT": "max(0, trim.x0 - geometry.minX)",
"meaning": "maximum tested support extension beyond one trim edge",
"important": "outsideDepth is a 7.02 bleed relation descriptor, not the 7.03 inside-edge clearance/tension metric"
},
"bleed_shell_depth_semantics": {
"TOP": "trim.y0 - bleedOuterRect.y0",
"RIGHT": "bleedOuterRect.x1 - trim.x1",
"BOTTOM": "bleedOuterRect.y1 - trim.y1",
"LEFT": "trim.x0 - bleedOuterRect.x0",
"unsatisfiable_rule": "REQUIRE_EXIT minimum depth > declared shell depth => POLICY_ZONE_UNSATISFIABLE",
"beyond_shell": "outsideDepth > declared shell depth",
"outer_limit_rule": "beyond-shell is diagnostic under IGNORE_BEYOND_SHELL and BREACHED under PROHIBIT_BEYOND_SHELL"
},
"geometry_modes": {
"FULL_SUPPORT": "owner supplies exact/declared support extrema or edge-relation evidence; baseline rect runtime requires extrema, not a generic bbox; approximation=false",
"BOUNDING_BOX": "reference implementation uses bbox; approximation=true and bbox is never silently promoted to FULL_SUPPORT",
"CUSTOM_REGION": "owner adapter provides per-edge relation/depth evidence",
"important": "7.02 does not derive image alpha masks, line crop seams or path support itself"
},
"intent_kind_semantics": {
"PRINT_BLEED": "explicit print/export bleed intent",
"INTENTIONAL_CROP": "object is intentionally clipped by trim/canvas edge",
"BACKGROUND_CONTINUATION": "background/support intentionally continues beyond one or more trim edges",
"DECORATIVE_EDGE_EXIT": "decorative/support element intentionally exits the frame",
"CUSTOM": "owner-defined intent with explicit policy source",
"no_quality_order": "intent kinds are categorical descriptors, not ranked styles"
},
"ownership_map": {
"7.00": "BLEED_ZONE_SHELL geometry and outside-canvas band",
"7.01": "hard safe containment for explicitly protected semantic content",
"7.02": "explicit exit permission/requirement, trim-crossing relation, bleed outside-depth and shell reach",
"7.03": "continuous object-to-edge clearance and edge tension",
"7.04": "role-dependent generation of edge-exit policies/bindings",
"7.05": "platform overlays/dynamic safe zones",
"7.06": "Violation objects, repair requests, target-aware scoring and consolidated Topic7 regression"
},
"semantic_firewalls": {
"touch_vs_cross": "TOUCHING_TRIM is not CROSSES_TRIM",
"bleed_shell_vs_permission": "existence of a bleed shell does not authorize crossing",
"exit_permission_vs_role": "7.02 evaluates explicit policy; 7.04 decides role-dependent policy generation",
"bleed_depth_vs_edge_clearance": "outsideDepth measures extension outside trim; 7.03 clearance measures relation to an edge/zone from object geometry",
"crop_semantics_vs_line_mask": "Compo2.22 may own a line/mask/seam geometry mechanism; 7.02 only owns whether the resulting content crossing is intended/permitted under edge policy",
"breach_vs_violation": "BREACHED is local compliance evidence; canonical violation aggregation remains 7.06"
},
"metric_policy": {
"trim_relation": "descriptor only",
"outside_depth": "constraint/compliance descriptor only",
"direct_scoring": "FORBIDDEN in 7.02",
"more_bleed_is_better": "FORBIDDEN",
"deeper_exit_is_better": "FORBIDDEN",
"cropped_object_is_more_dynamic": "FORBIDDEN"
},
"hard_constraints": [
"7.02 owns bleed/intentional-edge-exit policy and local trim-crossing relation evidence only; no design-quality score.",
"Only explicit BleedIntentBinding may authorize or require an edge exit; object role/name/appearance never implies permission.",
"A touch of the trim boundary is not a crossing.",
"REQUIRE_EXIT needs support on both sides of the target trim edge.",
"PROHIBIT_EXIT is breached by support beyond the target trim edge even if the object also remains inside.",
"ALLOW_EXIT permits crossing but does not require it.",
"IGNORE_EDGE produces N_A for that edge and no compliance vote.",
"Minimum outside depth, when declared, is a hard policy parameter and must use a compatible metric unit.",
"A required minimum depth larger than the declared bleed-shell depth is an unsatisfiable policy/zone configuration, not a content-layout breach.",
"Bounding-box evidence is an approximation and must not be silently relabeled as exact painted-support evidence.",
"Bleed-shell geometry does not itself grant exit permission.",
"Safe-zone protection from 7.01 and bleed intent from 7.02 are separate policies; conflicts are not silently resolved here.",
"7.02 does not own continuous inside-edge clearance or edge tension; 7.03 owns those metrics.",
"7.02 does not author role-dependent exit rules; 7.04 owns role policy.",
"7.02 does not own dynamic platform overlay lifecycle; 7.05 owns it.",
"7.02 does not construct canonical Violation/repair/score objects; 7.06 owns them.",
"N/A != 0.",
"No beautyScore."
],
"hard_rules": [
"7.02 owns bleed/intentional-edge-exit policy and local trim-crossing relation evidence only; no design-quality score.",
"Only explicit BleedIntentBinding may authorize or require an edge exit; object role/name/appearance never implies permission.",
"A touch of the trim boundary is not a crossing.",
"REQUIRE_EXIT needs support on both sides of the target trim edge.",
"PROHIBIT_EXIT is breached by support beyond the target trim edge even if the object also remains inside.",
"ALLOW_EXIT permits crossing but does not require it.",
"IGNORE_EDGE produces N_A for that edge and no compliance vote.",
"Minimum outside depth, when declared, is a hard policy parameter and must use a compatible metric unit.",
"A required minimum depth larger than the declared bleed-shell depth is an unsatisfiable policy/zone configuration, not a content-layout breach.",
"Bounding-box evidence is an approximation and must not be silently relabeled as exact painted-support evidence.",
"Bleed-shell geometry does not itself grant exit permission.",
"Safe-zone protection from 7.01 and bleed intent from 7.02 are separate policies; conflicts are not silently resolved here.",
"7.02 does not own continuous inside-edge clearance or edge tension; 7.03 owns those metrics.",
"7.02 does not author role-dependent exit rules; 7.04 owns role policy.",
"7.02 does not own dynamic platform overlay lifecycle; 7.05 owns it.",
"7.02 does not construct canonical Violation/repair/score objects; 7.06 owns them.",
"N/A != 0.",
"No beautyScore."
],
"soft_constraints": [],
"preferences": [],
"overrides_allowed_by": [
"explicit higher-level document/platform export policy may replace one BleedIntentPolicy with another version",
"no module may silently override a per-edge rule inside the same policy instance"
],
"initial_heuristics": {
"numeric_epsilon": {
"value": 1e-12,
"provenance": "IMPLEMENTATION_HEURISTIC",
"note": "reference numerical equality only; does not turn touch into crossing"
}
},
"correction_policy": {
"foreign_content_mutation": "FORBIDDEN",
"missing_bleed_shell": "route to Compo7.00/source owner",
"missing_intent_binding": "request explicit role/style/document owner binding; do not infer",
"safe_vs_bleed_policy_conflict": "route evidence to Compo7.06 or upstream policy owner; do not resolve silently",
"continuous_edge_clearance_question": "route to Compo7.03",
"role_dependent_exit_question": "route to Compo7.04",
"dynamic_platform_edge_question": "route to Compo7.05",
"breach_repair_or_scoring": "route to Compo7.06"
},
"deferred_inputs": [
"Compo7.03 edge clearance/tension",
"Compo7.04 role-dependent edge-exit policy generation",
"Compo7.05 platform/dynamic safe geometry",
"Compo7.06 violations/repair/scoring/tests",
"future export/print owner adapters for non-canvas trim boundaries"
],
"recompute_when": [
"7.00 bleed-shell geometry changes",
"trim boundary changes",
"BleedIntentPolicy changes",
"BleedIntentBinding membership/version changes",
"content support/bbox/custom geometry changes",
"6.03 normalization context changes for SHORT_N minimum depth"
],
"tests": [
"touch != cross",
"require exit",
"allow exit",
"prohibit exit",
"minimum depth",
"unsatisfiable policy/zone",
"beyond shell",
"bbox approximation",
"missing geometry",
"deterministic set",
"no role/scoring/repair leakage"
],
"finality": "BLEED_INTENT_TRIM_CROSSING_AND_EXIT_COMPLIANCE_ONLY",
"style_preset_values": []
}