Геометрия превращается в format class
6.01 — stateless classifier одного состояния canvas. Он знает exact orientation и, при наличии policy, square-like behavior band.
6.00 CanvasDescriptor + explicit OrientationBehaviorPolicy.
FormatClassResult + axis affordance.
STATELESS ORIENTATION BEHAVIOR ONLY.
SQUARE / PORTRAIT / LANDSCAPE
Exact class — только человекочитаемая форма уже принадлежащего 6.00 `axisRelation`.
| 6.00 axisRelation | 6.01 exactClass |
|---|---|
WIDTH_EQ_HEIGHT | SQUARE |
WIDTH_LT_HEIGHT | PORTRAIT |
WIDTH_GT_HEIGHT | LANDSCAPE |
OrientationBehaviorPolicy
Near-square semantics зависят от явно объявленной ширины зоны вокруг `logAspectRatio=0`.
Policy
OrientationBehaviorPolicy {
policyRef,
squareLikeLogTolerance:
finite >= 0,
classificationMode:
LOG_ASPECT_DISTANCE,
source,
confidence,
provenance
}Why log-space?
Square-like band
Behavior class использует одну симметричную policy band.
Distance от square
6.01 владеет только двумя dimensionless descriptors поверх 6.00 log ratio.
Aspect distance
Excess elongation
Major axis — не eye-flow
Behavior class даёт очень узкое геометрическое следствие: какой axis предлагает больший span.
| behaviorClass | majorAxis | axisAffordance |
|---|---|---|
SQUARE_LIKE | NONE | AXES_BALANCED |
LANDSCAPE_LIKE | X | HORIZONTAL_MAJOR |
PORTRAIT_LIKE | Y | VERTICAL_MAJOR |
Scale + axis-swap invariants
Format behavior должен быть устойчив к common scale и корректно отражать обмен осей.
Hysteresis не здесь
При интерактивном resize format может часто пересекать tolerance boundary. Это уже состояние во времени, значит owner — 6.04.
Stateless
Классифицирует одно текущее значение `logAspectRatio` по policy.
Stateful
Hysteresis, debounce, reflow trigger, dirty graph и adaptation hooks.
Behavior ≠ layout preset
Square/portrait/landscape class не должен тайно создавать шаблон композиции.
Allowed
horizontal / vertical / balanced major-axis affordance.
Not owned
margins, safe area, columns, grid, typography, image/text placement.
Not global
balance, hierarchy, eye-flow, beauty.
Одна геометрия — разные policy
Near-square classification зависит от policy, а exact class остаётся неизменным.
Что остаётся дальше
6.01 не закрывает всю тему формата.
| Concept | Owner |
|---|---|
| raw extent / aspect ratio | 6.00 |
| square/portrait/landscape behavior | 6.01 |
| physical size / A-series / DPI / viewing context | 6.02 |
| normalization / scale invariance contract | 6.03 |
| transition/reflow hooks / hysteresis | 6.04 |
| safe/bleed zones | Topic 7 |
| grids | Topic 8 |
Visual Lab
Показываем exact class отдельно от behavior class.
Reference classification tests
Проверяем exact classes, explicit policy, boundary inclusivity, swap/scale invariance, missing-policy N/A и отсутствие layout/global leakage.
DATA FOR LAYOUT ENGINE
Machine-readable 6.01 contract.
{
"module": "Compo 6.01",
"name": "square_portrait_landscape_behavior",
"version": "1.1-corrective",
"canonical_main_title": "Square / portrait / landscape behavior",
"topic": "06_ФОРМАТ_ПОСТЕРА_И_СООТНОШЕНИЕ_СТОРОН",
"scope": "EXACT_ORIENTATION_CLASS_EXPLICIT_NEAR_SQUARE_BEHAVIOR_CLASS_AND_AXIS_AFFORDANCE",
"consumes": [
"Compo6.00.CanvasDescriptor",
"Compo6.00.canvas.geometry.aspectRatioWH",
"Compo6.00.canvas.geometry.logAspectRatio",
"Compo6.00.canvas.axisRelation",
"OrientationBehaviorPolicy"
],
"provides": [
"OrientationBehaviorPolicy",
"FormatClassResult",
"FormatBehaviorDescriptor",
"MetricResult[canvas.format.aspectDistanceLog]",
"MetricResult[canvas.format.behaviorExcessElongationLog]",
"MetricResult[canvas.format.confidence]",
"formatClassRef for CanvasDescriptor",
"CanvasFormatCorrectionRequest[]"
],
"owns_metrics": [
"canvas.format.aspectDistanceLog",
"canvas.format.behaviorExcessElongationLog",
"canvas.format.confidence"
],
"descriptors_only": [
"canvas.format.exactClass",
"canvas.format.behaviorClass",
"canvas.format.majorAxis",
"canvas.format.minorAxis",
"canvas.format.axisAffordance",
"canvas.format.squareLikeToleranceLog",
"canvas.format.policyRef",
"canvas.format.status"
],
"orientation_behavior_policy_schema": {
"policyRef": "string",
"squareLikeLogTolerance": "finite >=0",
"classificationMode": "LOG_ASPECT_DISTANCE",
"source": "STYLE_PRESET|EMPIRICAL|INITIAL_HEURISTIC|STANDARD",
"confidence": "0..1",
"provenance": "object",
"no_hidden_default": "if policy is absent, only exactClass is available; behaviorClass=N_A"
},
"format_class_schema": {
"canvasRef": "Compo6.00 canvas",
"exactClass": "SQUARE|PORTRAIT|LANDSCAPE",
"behaviorClass": "SQUARE_LIKE|PORTRAIT_LIKE|LANDSCAPE_LIKE|N_A",
"aspectDistanceLog": "abs(logAspectRatio)",
"behaviorExcessElongationLog": "max(0, abs(logAspectRatio)-squareLikeLogTolerance) when behavior policy exists, else N_A",
"majorAxis": "NONE|X|Y",
"minorAxis": "NONE|X|Y",
"axisAffordance": "AXES_BALANCED|HORIZONTAL_MAJOR|VERTICAL_MAJOR|N_A",
"policyRef": "optional",
"confidence": "0..1",
"status": "OK|PARTIAL|N_A|INVALID",
"provenance": "object"
},
"exact_class_semantics": {
"SQUARE": "Compo6.00.axisRelation == WIDTH_EQ_HEIGHT",
"LANDSCAPE": "Compo6.00.axisRelation == WIDTH_GT_HEIGHT",
"PORTRAIT": "Compo6.00.axisRelation == WIDTH_LT_HEIGHT",
"note": "exact class is a direct re-expression of 6.00 axisRelation; no tolerance"
},
"behavior_class_semantics": {
"distance": "d = abs(logAspectRatio)",
"SQUARE_LIKE": "d <= squareLikeLogTolerance",
"LANDSCAPE_LIKE": "logAspectRatio > squareLikeLogTolerance",
"PORTRAIT_LIKE": "logAspectRatio < -squareLikeLogTolerance",
"boundary_rule": "inclusive square-like band at ±tolerance",
"no_policy": "behaviorClass=N_A",
"important": "behavior class is a format-response category, not an aesthetic ranking"
},
"axis_affordance_semantics": {
"SQUARE_LIKE": "majorAxis=NONE, minorAxis=NONE, AXES_BALANCED",
"LANDSCAPE_LIKE": "majorAxis=X, minorAxis=Y, HORIZONTAL_MAJOR",
"PORTRAIT_LIKE": "majorAxis=Y, minorAxis=X, VERTICAL_MAJOR",
"meaning": "which canvas axis offers the longer geometric span beyond the square-like tolerance",
"forbidden_inference": "does not imply preferred reading direction, eye-flow, object alignment, hierarchy, typography direction, or composition quality"
},
"distance_metrics": {
"aspectDistanceLog": "abs(log(width/height)); dimensionless, symmetric under axis swap",
"behaviorExcessElongationLog": "max(0, aspectDistanceLog - tolerance); dimensionless; zero inside square-like band",
"scale_invariance": "both are invariant under common positive scaling of width and height",
"axis_swap": "aspectDistanceLog and behaviorExcessElongationLog unchanged; portrait-like/landscape-like swap"
},
"ownership_map": {
"6.00": "raw canvas extent/aspect ratio/axis relation",
"6.01": "exact format class, explicit near-square behavior class, major-axis affordance",
"6.02": "physical size/A-series/DPI/viewing context",
"6.03": "normalization and cross-format scale invariance",
"6.04": "adaptation/reflow hooks, hysteresis/change handling and Topic6 regression"
},
"behavior_policy": {
"what_6.01_can_say": [
"the canvas is exactly square/portrait/landscape",
"under policy P it behaves square-like/portrait-like/landscape-like",
"under policy P the format exposes horizontal/vertical/balanced axis affordance"
],
"what_6.01_cannot_say": [
"portrait composition should use centered hierarchy",
"landscape should place text left and image right",
"square is universally more balanced",
"major axis is the eye-flow axis",
"orientation change requires a specific reflow action"
]
},
"hysteresis_boundary": {
"owner": "Compo6.04",
"reason": "classification over a single canvas state belongs to 6.01; temporal/stateful transition stabilization under resize belongs to adaptation hooks",
"6.01_behavior": "stateless deterministic classification for one descriptor+policy"
},
"hard_constraints": [
"one metric = one owner",
"6.01 consumes 6.00 aspect geometry and must not recompute canvas extent from content",
"exactClass is derived only from exact 6.00 axisRelation",
"6.00 axisRelation must be consistent with aspectRatioWH/logAspectRatio; contradictory upstream geometry is INVALID rather than silently trusting one representation",
"behaviorClass requires an explicit OrientationBehaviorPolicy; absent policy means behaviorClass=N_A",
"squareLikeLogTolerance must be finite >=0 and is never silently defaulted",
"the square-like band is symmetric in log-aspect space around logAspectRatio=0",
"portrait-like and landscape-like classes swap under width/height axis exchange",
"aspectDistanceLog is symmetric under axis swap and scale invariant",
"behaviorExcessElongationLog is policy-relative and scale invariant",
"majorAxis is a canvas geometry affordance, not a reading/attention/eye-flow direction",
"no layout placement rule, margin rule, typography rule or object alignment rule is owned by 6.01",
"stateful hysteresis/reflow decisions remain 6.04",
"physical size/DPI/A-series/viewing context remain 6.02",
"normalization contract remains 6.03",
"safe/bleed/margin zones remain Topic7",
"grid occupancy remains Topic8",
"free-space remains Topic5",
"visual mass remains Topic4",
"global balance/hierarchy/eye-flow remain future owners",
"more square-like, portrait-like or landscape-like is not universally better",
"N/A != 0",
"no beautyScore"
],
"initial_heuristics": {
"reference_square_like_log_tolerance": {
"value": 0.05,
"provenance": "STYLE_PRESET",
"note": "used in Visual Lab/tests only; not a global default"
},
"numeric_epsilon": {
"value": 1e-12,
"provenance": "IMPLEMENTATION_HEURISTIC"
}
},
"correction_policy": {
"foreign_content_mutation": "FORBIDDEN",
"invalid_canvas_geometry": "route to Compo6.00",
"missing_behavior_policy": "request explicit OrientationBehaviorPolicy; do not guess near-square threshold",
"physical_context_issue": "route to Compo6.02",
"normalization_issue": "route to Compo6.03",
"transition_hysteresis_or_reflow_issue": "route to Compo6.04",
"safe_zone_issue": "route to Topic7"
},
"deferred_inputs": [
"Compo6.02 physical size/A-series/DPI/viewing context",
"Compo6.03 normalization/scale invariance contract",
"Compo6.04 adaptation hooks/hysteresis/reflow/tests",
"Topic7 safe/bleed zones",
"Topic8 grids",
"future global balance/hierarchy/eye-flow"
],
"recompute_when": [
"Compo6.00 aspectRatioWH/logAspectRatio/axisRelation changes",
"OrientationBehaviorPolicy changes",
"policy confidence/provenance changes"
],
"finality": "FORMAT_CLASS_AND_STATELESS_ORIENTATION_BEHAVIOR_ONLY",
"input_consistency": {
"rule": "6.00 aspectRatioWH/logAspectRatio/axisRelation must describe the same orientation",
"square": "aspectRatioWH == 1 requires WIDTH_EQ_HEIGHT",
"landscape": "aspectRatioWH > 1 requires WIDTH_GT_HEIGHT",
"portrait": "aspectRatioWH < 1 requires WIDTH_LT_HEIGHT",
"mismatch": "INVALID input; 6.01 does not choose which upstream field to trust"
}
}