COMPO · 6.01 · SQUARE / PORTRAIT / LANDSCAPE BEHAVIOR

Square /
portrait /
landscape.

Stateless orientation-behavior layer: exact SQUARE/PORTRAIT/LANDSCAPE class from 6.00, explicit log-aspect near-square policy, SQUARE_LIKE/PORTRAIT_LIKE/LANDSCAPE_LIKE behavior class and major-axis affordance. Без скрытого tolerance, layout presets, eye-flow или reflow logic.

ModuleCompo 6.01
Scopeorientation behavior
Policyexplicit near-square
Statestateless
Topic6 · FORMAT
Next6.02

Геометрия превращается в format class

00 / module api

6.01 — stateless classifier одного состояния canvas. Он знает exact orientation и, при наличии policy, square-like behavior band.

INPUT

6.00 CanvasDescriptor + explicit OrientationBehaviorPolicy.

OUTPUT

FormatClassResult + axis affordance.

FINALITY

STATELESS ORIENTATION BEHAVIOR ONLY.

NO POLICY → NO NEAR-SQUARE. `1000×999` нельзя объявить square-like без явного tolerance policy. Exact class при этом остаётся LANDSCAPE.

SQUARE / PORTRAIT / LANDSCAPE

01 / exact class

Exact class — только человекочитаемая форма уже принадлежащего 6.00 `axisRelation`.

6.00 axisRelation6.01 exactClass
WIDTH_EQ_HEIGHTSQUARE
WIDTH_LT_HEIGHTPORTRAIT
WIDTH_GT_HEIGHTLANDSCAPE
NO NEW METRIC VOTE. `exactClass` — descriptor, а не ещё один независимый числовой сигнал поверх aspect ratio.

OrientationBehaviorPolicy

02 / behavior policy

Near-square semantics зависят от явно объявленной ширины зоны вокруг `logAspectRatio=0`.

Policy

OrientationBehaviorPolicy {
  policyRef,

  squareLikeLogTolerance:
    finite >= 0,

  classificationMode:
    LOG_ASPECT_DISTANCE,

  source,
  confidence,
  provenance
}

Why log-space?

ℓ = ln(W/H) square: ℓ = 0 swap axes: ℓ → -ℓ distance from square: |ℓ| therefore symmetric portrait/landscape tolerance

Square-like band

03 / behavior class

Behavior class использует одну симметричную policy band.

d = | logAspectRatio | if d <= τ: SQUARE_LIKE else if logAspectRatio > τ: LANDSCAPE_LIKE else: PORTRAIT_LIKE where: τ = explicit squareLikeLogTolerance
BOUNDARY INCLUDED. Ровно `+τ` и `−τ` относятся к `SQUARE_LIKE`, чтобы classification не имела незадекларированного open interval.

Distance от square

04 / behavior metrics

6.01 владеет только двумя dimensionless descriptors поверх 6.00 log ratio.

Aspect distance

aspectDistanceLog = | ln(W/H) | policy-independent

Excess elongation

behaviorExcessElongationLog = max( 0, aspectDistanceLog - τ ) policy-relative
ZERO ≠ QUALITY. Нулевой excess означает только «format лежит внутри square-like band policy P».

Major axis — не eye-flow

05 / axis affordance

Behavior class даёт очень узкое геометрическое следствие: какой axis предлагает больший span.

behaviorClassmajorAxisaxisAffordance
SQUARE_LIKENONEAXES_BALANCED
LANDSCAPE_LIKEXHORIZONTAL_MAJOR
PORTRAIT_LIKEYVERTICAL_MAJOR
AFFORDANCE ≠ INSTRUCTION. `HORIZONTAL_MAJOR` не означает «текст слева», «взгляд идёт слева направо» или «делай горизонтальную иерархию».

Scale + axis-swap invariants

06 / invariants

Format behavior должен быть устойчив к common scale и корректно отражать обмен осей.

Common scale: W' = kW H' = kH k > 0 then: logAspectRatio unchanged aspectDistanceLog unchanged behaviorClass unchanged Axis swap: W' = H H' = W then: logAspectRatio' = -logAspectRatio aspectDistanceLog' = aspectDistanceLog PORTRAIT_LIKE ↔ LANDSCAPE_LIKE SQUARE_LIKE → SQUARE_LIKE

Hysteresis не здесь

07 / statefulness boundary

При интерактивном resize format может часто пересекать tolerance boundary. Это уже состояние во времени, значит owner — 6.04.

6.01

Stateless

Классифицирует одно текущее значение `logAspectRatio` по policy.

6.04

Stateful

Hysteresis, debounce, reflow trigger, dirty graph и adaptation hooks.

6.01: current descriptor + current policy → current class 6.04: previous class + current class + transition policy → adaptation event

Behavior ≠ layout preset

08 / no layout presets

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

09 / examples

Near-square classification зависит от policy, а exact class остаётся неизменным.

Canvas: 1000 × 960 exact: LANDSCAPE logAspectRatio ≈ 0.04082 Policy A: τ = 0.05 → SQUARE_LIKE Policy B: τ = 0.02 → LANDSCAPE_LIKE Nothing contradictory: exact geometry is same behavior policy is different.

Что остаётся дальше

10 / ownership firewall

6.01 не закрывает всю тему формата.

ConceptOwner
raw extent / aspect ratio6.00
square/portrait/landscape behavior6.01
physical size / A-series / DPI / viewing context6.02
normalization / scale invariance contract6.03
transition/reflow hooks / hysteresis6.04
safe/bleed zonesTopic 7
gridsTopic 8

Visual Lab

11 / visual lab

Показываем exact class отдельно от behavior class.

A · EXACT SQUARE exact=SQUARE behavior=SQUARE_LIKE B · NEAR-SQUARE LANDSCAPE 1000×~870-style visual exact=LANDSCAPE behavior depends on τ C · PORTRAIT-LIKE exact=PORTRAIT majorAxis=Y ≠ eye-flow direction log-aspect band is symmetric around 0 axis swap: portrait-like ↔ landscape-like common scale: class unchanged hysteresis / reflow transition handling = 6.04

Reference classification tests

12 / deterministic tests

Проверяем exact classes, explicit policy, boundary inclusivity, swap/scale invariance, missing-policy N/A и отсутствие layout/global leakage.

Tests not run yet.

DATA FOR LAYOUT ENGINE

13 / machine contract

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"
  }
}
ARCHITECTURE CHECKPOINT · 6.01 OWNS EXACT FORMAT CLASS, EXPLICIT POLICY-BASED SQUARE_LIKE/PORTRAIT_LIKE/LANDSCAPE_LIKE CLASSIFICATION, ASPECT-DISTANCE/EXCESS-ELONGATION DESCRIPTORS AND MAJOR-AXIS AFFORDANCE. ABSENT POLICY → BEHAVIORCLASS N/A; NO HIDDEN NEAR-SQUARE DEFAULT. MAJOR AXIS IS GEOMETRIC SPAN, NOT EYE-FLOW OR LAYOUT INSTRUCTION. 6.02 PHYSICAL CONTEXT, 6.03 NORMALIZATION, 6.04 HYSTERESIS/REFLOW/ADAPTATION REMAIN SEPARATE. NO BEAUTYSCORE.
VISITS / ...