COMPO · 5.00 · POSITIVE / NEGATIVE SPACE MODEL

Позитивное
и негативное
пространство.

Entry point темы 5: scene-space domain, OccupiedSpaceMap/FreeSpaceMap shells, measurement stages и ownership boundaries. 5.00 отделяет scene occupied/free-space geometry от object hullOccupancy темы 4 и от grid occupancy будущей темы 8, не вводя преждевременный whitespace score.

ModuleCompo 5.00
Scopespace schema / ownership
Owns metricsnone
Domainexternal canvas owner
Topic5 · SPACE
Next5.01

Space model до метрик

00 / module api

5.00 задаёт сцену как явный domain, внутри которого occupied support и его complement становятся измеримыми сущностями. Сам mask ещё принадлежит 5.01.

SCOPE

CompositionSpaceDomain, OccupiedSpaceMap/FreeSpaceMap shells, stages, policy refs и ownership.

OWNS METRICS

none — entrypoint не считает area/share/clearance.

FINALITY

SPACE SCHEMA / DOMAIN / OWNERSHIP ONLY.

NEGATIVE SPACE IS RELATIVE. Без явного domain и mask policy утверждение «здесь 40% пустого пространства» не имеет канонического смысла.

CompositionSpaceDomain

01 / composition domain

Negative space существует только внутри замкнутой области измерения: canvas, viewport, crop или другой явно supplied region.

Domain

CompositionSpaceDomain {
  domainRef,
  boundaryRef,
  coordinateSpace:
    WORLD | CANVAS |
    VIEWPORT | CUSTOM,

  clipPolicyRef?,
  normalizationContextRef?,

  status,
  confidence,
  provenance
}

Owner boundary

Topic5:
  consumes domain

Topic6 / canvas owner:
  defines format,
  dimensions,
  normalization,
  canonical canvas boundary

Topic5 does NOT:
  invent canvas size
  redefine aspect ratio
  own short-side normalization

Positive space = included support

02 / positive space

Позитивное пространство — не «все объекты вообще», а support тех объектов, которые включены конкретной SpaceMaskPolicy.

PositiveSpace(D, P) = union( support(object_i, P) clipped to domain D ) where: D = CompositionSpaceDomain P = SpaceMaskPolicyRef Support may be: geometric paint support visible paint support custom render support Policy decides: outlines? masks? decoration? occlusion? alpha visibility?
POLICY, NOT GUESS. Полупрозрачный объект, маска, clipping path или полностью перекрытый объект не должны автоматически трактоваться одинаково во всех задачах.

Negative/free space = complement

03 / negative space

Базовая геометрия проста, но только если occupied mask и domain определены одним и тем же policy pass.

OccupiedMask = occupied(D, P) FreeSpaceMask = D \ OccupiedMask Invariant: OccupiedMask ∪ FreeSpaceMask = D and ideally: interior(OccupiedMask) ∩ interior(FreeSpaceMask) = ∅ subject to: declared boundary tolerance
SAME POLICY. Нельзя взять occupied mask из `VISIBLE_SUPPORT`, а complement считать относительно `GEOMETRIC_SUPPORT`. Это разные spatial questions.

OccupiedSpaceMap / FreeSpaceMap

04 / canonical shells

5.00 владеет shell contracts; concrete mask construction и complement принадлежат 5.01.

OccupiedSpaceMap

{
  domainRef,
  maskPolicyRef,
  objectSupportRefs[],
  measurementStage,

  occupiedMaskRef, // 5.01
  status,
  confidence,
  provenance
}

FreeSpaceMap

{
  domainRef,
  occupiedMaskRef,
  freeMaskRef,      // 5.01

  emptyRegionRefs[], // 5.02
  figureGroundRef?,  // 5.03

  measurementStage,
  status,
  confidence,
  provenance
}

Measurement stages

05 / space stages

Stage показывает, на каком уровне spatial evidence находится pipeline.

StageMeaningOwner
GEOMETRIC_SUPPORTобъектный paint-support до occlusion interpretation5.01 consumes Topic3 support
VISIBLE_SUPPORTвидимый support после explicit visibility/occlusion policy5.01
FREE_SPACE_DERIVEDdomain complement + empty regions5.01 / 5.02
FIGURE_GROUND_INTERPRETEDотношения figure-ground / enclosure / channels5.03

Occupancy ≠ occupancy

06 / terminology firewall

COMPO уже имеет другие термины occupancy. 5.00 вводит namespace firewall.

TermMeaningOwner
visualMass.geometry.hullOccupancysilhouetteArea / convexHullArea одного объекта4.01
space.occupiedMaskscene-domain union support5.01
space.freeMaskdomain complement5.01
grid occupancyзанятость grid cells / registryTopic 8
NO ALIAS. `hullOccupancy=.62` нельзя читать как «объект занимает 62% сцены». Это совершенно другой denominator и другой owner.

Visual mass ≠ occupied space

07 / mass boundary

Topic 4 и Topic 5 используют одни и те же объекты, но отвечают на разные вопросы.

TOPIC 4

How heavy?

Alpha-weighted/calibrated/contextual visual contribution.

visualMass
contextualMass
mass ratios
mass shares
TOPIC 5

Where is space free?

Geometric/visible support union and its complement.

occupiedMask
freeMask
EmptyRegion[]
clearance
figure-ground
same occupied geometry can have different visual mass same visual mass can occupy different geometry Therefore: mass != occupied mask

Free space ≠ automatically good whitespace

08 / whitespace semantics

Геометрическое свободное пространство появляется раньше эстетической интерпретации.

Free space

Простой spatial complement внутри domain.

Breathing room

Локальный clearance descriptor — 5.02.

Whitespace fit

Target/style interpretation — 5.04.

MORE IS NOT BETTER. Большой free-space region может быть намеренным акцентом, пустотой, техническим резервом или ошибкой. 5.00 не ранжирует эти случаи.

Ownership 5.00–5.04

09 / topic map

Разделение построено так, чтобы mask, regions, figure-ground и scoring не конкурировали за одну метрику.

ModuleOwns
5.00domain/shell/stage/policy-reference contracts
5.01occupied mask, free mask, union/complement, vector/raster support representation
5.02EmptyRegion[], connected components, clearance, breathing-room/distance descriptors
5.03figure-ground boundary attribution and active/passive-space relations
5.04explicit-target scoring, correction routing and consolidated Topic5 tests

Recompute hooks

10 / dirty graph

Spatial maps должны пересчитываться только при изменении support/domain/policy, а не при любом semantic event.

SpaceRecomputeHook {
  triggerRef,
  dirtyModules[],
  reason,
  provenance
}

Examples:

Object transform changed
  → 5.01 dirty
  → 5.02 dirty
  → 5.03 dirty
  → 5.04 dirty

Only mass calibration changed
  → Topic5 geometry NOT automatically dirty

Mask policy changed
  → 5.01–5.04 dirty

Target changed
  → 5.04 dirty
  → masks/regions remain reusable

Visual Lab: один domain, разные spatial questions

11 / visual lab

Показываем positive/negative-space model без преждевременного score.

A · DOMAIN + OCCUPIED SUPPORT positive space = included support union B · FREE-SPACE COMPLEMENT cyan = free mask · white = occupied C · SAME OBJECT / DIFFERENT POLICY alpha/occlusion treatment must be explicit D · TERMINOLOGY FIREWALL 4.01 hullOccupancy object / convex hull denominator NOT scene occupancy 5.01 occupied/free mask scene domain denominator used by EmptyRegion analysis Topic8 grid occupancy grid-cell registry separate owner again free space descriptor ≠ whitespace quality score 5.01 masks → 5.02 regions/clearance → 5.03 figure-ground → 5.04 target fit

Schema / ownership tests

12 / deterministic tests

5.00 проверяет domain/policy/stage invariants и namespace barriers, не создавая mask implementation раньше 5.01.

Tests not run yet.

DATA FOR LAYOUT ENGINE

13 / machine contract

Machine-readable entrypoint Topic 5.

{
  "module": "Compo 5.00",
  "name": "positive_negative_space_model_and_ownership",
  "version": "1.1-corrective",
  "scope": "SCENE_SPACE_DOMAIN_OCCUPIED_FREE_SPACE_SCHEMA_AND_TOPIC5_OWNERSHIP",
  "topic": "05_POSITIVE_AND_NEGATIVE_SPACE",
  "planned_files": [
    "5.00",
    "5.01",
    "5.02",
    "5.03",
    "5.04"
  ],
  "consumes": [
    "Compo3.00.Shape / object geometry contracts",
    "Compo3.04 resolved paint-support topology?",
    "Compo3.05 world-space transformed geometry view",
    "Compo4.01 geometric support evidence? as validation-only, not mask ownership",
    "CompositionDomainRef from canvas/format owner (future Topic6 canonical owner)",
    "Visibility/Crop/Clip domain adapters",
    "Layer/Occlusion ordering evidence?",
    "StylePreset.spacePolicy?"
  ],
  "provides": [
    "CompositionSpaceDomain schema",
    "OccupiedSpaceMap shell",
    "FreeSpaceMap shell",
    "SpaceMaskPolicyRef",
    "SpaceMeasurementStage",
    "SpaceRecomputeHook",
    "Topic5 ownership map",
    "OccupiedSpaceMap.supportSetRef slot -> Compo5.01",
    "FreeSpaceMap.figureGroundRef slot -> Compo5.03"
  ],
  "owns_contracts": [
    "scene-space positive/negative-space domain model",
    "OccupiedSpaceMap and FreeSpaceMap contract shells",
    "space measurement-stage semantics",
    "space mask policy reference contract",
    "topic-5 module decomposition and ownership routing",
    "separation of object-internal occupancy from scene occupancy"
  ],
  "owns_metrics": [],
  "descriptors_only": [
    "space.domainRef",
    "space.measurementStage",
    "space.occupiedMaskRef",
    "space.freeMaskRef",
    "space.maskPolicyRef",
    "space.status",
    "space.confidence",
    "space.recomputeHooks"
  ],
  "space_domain_schema": {
    "domainRef": "string",
    "boundaryRef": "closed scene/canvas/viewport region supplied by owner",
    "coordinateSpace": "WORLD|CANVAS|VIEWPORT|CUSTOM",
    "clipPolicyRef": "optional",
    "normalizationContextRef": "optional external ref",
    "status": "READY|PARTIAL|N_A|INVALID",
    "confidence": "0..1",
    "provenance": "object"
  },
  "space_measurement_stages": [
    "GEOMETRIC_SUPPORT",
    "VISIBLE_SUPPORT",
    "FREE_SPACE_DERIVED",
    "FIGURE_GROUND_INTERPRETED"
  ],
  "occupied_space_shell": {
    "domainRef": "CompositionSpaceDomain ref",
    "maskPolicyRef": "SpaceMaskPolicyRef",
    "supportSetRef": "Compo5.01 ObjectSupportSet ref; preserves EXPLICIT/PARTIAL/MISSING state",
    "measurementStage": "GEOMETRIC_SUPPORT|VISIBLE_SUPPORT",
    "occupiedMaskRef": "owned by Compo5.01",
    "status": "READY|PARTIAL|N_A|INVALID",
    "confidence": "0..1",
    "provenance": "object"
  },
  "free_space_shell": {
    "domainRef": "same CompositionSpaceDomain",
    "occupiedMaskRef": "Compo5.01 ref",
    "freeMaskRef": "Compo5.01 ref",
    "emptyRegionRefs": "Compo5.02 refs[]",
    "figureGroundRef": "optional Compo5.03 ref",
    "measurementStage": "FREE_SPACE_DERIVED|FIGURE_GROUND_INTERPRETED",
    "status": "READY|PARTIAL|N_A|INVALID",
    "confidence": "0..1",
    "provenance": "object"
  },
  "space_mask_policy_ref": {
    "policyRef": "string",
    "owner": "Compo5.01 target owner",
    "supportMode": "GEOMETRIC_PAINT_SUPPORT|VISIBLE_PAINT_SUPPORT|CUSTOM_RENDER_SUPPORT",
    "alphaPolicyRef": "optional explicit visibility/support rule",
    "includeOutlines": "boolean or owner policy",
    "includeMasks": "boolean or owner policy",
    "includeDecorativeObjects": "explicit semantic filter policy",
    "occlusionPolicyRef": "optional",
    "provenance": "STYLE_PRESET|EMPIRICAL|INITIAL_HEURISTIC|STANDARD"
  },
  "topic_ownership": {
    "5.00": "CompositionSpaceDomain + Occupied/FreeSpace shells + stage/policy/ownership contracts only",
    "5.01": "ObjectSupportSet state, scene occupied mask, free-space mask, union/complement, support representation",
    "5.02": "connected empty regions, clearance, local breathing-room descriptors, distance fields",
    "5.03": "figure-ground boundary attribution + active/passive-space relation descriptors",
    "5.04": "explicit-target scoring, corrections and consolidated Topic5 regression"
  },
  "legacy_owner_boundaries": {
    "Compo4.01.hullOccupancy": "object-internal silhouetteArea/convexHullArea descriptor; retained by 4.01 and never renamed scene occupancy",
    "Compo4.visualMass": "mass magnitude is not occupied/free-space geometry",
    "Compo3.geometry": "object geometry/topology/transform remain Topic3",
    "Topic6": "canvas/format/domain normalization remains external/future owner",
    "Topic8": "grid occupancy remains separate from scene occupied/free-space masks"
  },
  "positive_negative_semantics": {
    "positive_space": "support assigned to included scene objects under explicit mask policy",
    "negative_space": "domain complement of positive/occupied support under the same policy",
    "free_space": "canonical scene-space complement used for geometric analysis; semantic usefulness is deferred",
    "whitespace": "not automatically identical to all free space; target/style interpretation deferred to 5.03/5.04",
    "background": "render/background appearance is not automatically negative-space ownership; only geometry/domain complement is Topic5 core"
  },
  "hard_constraints": [
    "one metric = one owner",
    "5.00 owns no numeric occupied/free-space metric",
    "scene occupied/free-space masks are Topic5 concepts and must not be aliased to Compo4.01 hullOccupancy",
    "grid occupancy remains Topic8 and must not be aliased to scene occupied mask",
    "object geometry/topology/transform remain Topic3",
    "visual mass remains Topic4 and must not be used as a substitute for occupied area",
    "canvas/format normalization and domain ownership remain external/future Topic6; Topic5 consumes a CompositionDomainRef",
    "positive/negative space is always relative to an explicit domain and mask policy",
    "free-space complement must use the same domain and occupancy policy as its occupied mask",
    "hidden/occluded/transparent support treatment must be explicit in SpaceMaskPolicyRef; never guessed",
    "background color/luminance is not a free-space metric",
    "free space is a descriptor domain, not a quality score",
    "more negative space is not universally better",
    "zero free space is a valid geometric result when domain is fully occupied",
    "missing domain or mask policy is N/A/PARTIAL, not zero free space",
    "global balance/hierarchy/eye-flow remain future global owners",
    "no beautyScore",
    "support-set completeness state must survive the 5.00→5.01 handoff; missing support set is not an empty scene",
    "Compo5.03 scope is the canonical MAIN Figure-ground / active-passive space relations; channel/corridor route ownership is not introduced by Topic5 without a MAIN revision",
    "Compo5.04 owns scoring/corrections/tests for canonical Topic5 evidence only",
    "5.03 owns figure-ground / active-passive relations",
    "5.04 owns target-aware scoring/corrections/tests"
  ],
  "initial_heuristics": {
    "mask_boolean_epsilon_px": {
      "value": 0.25,
      "provenance": "INITIAL_HEURISTIC",
      "note": "5.01 may replace with backend-specific exact/fallback policy"
    },
    "domain_boundary_epsilon_px": {
      "value": 1e-07,
      "provenance": "IMPLEMENTATION_HEURISTIC"
    }
  },
  "correction_policy": {
    "foreign_geometry_mutation": "FORBIDDEN",
    "missing_domain": "request canvas/format/domain owner",
    "invalid_world_geometry": "route to Topic3 owner",
    "mask_policy_issue": "route to Compo5.01",
    "empty_region_issue": "route to Compo5.02",
    "figure_ground_issue": "route to Compo5.03",
    "target_preference_issue": "route to Compo5.04",
    "mass_issue": "route to Topic4",
    "global_balance_issue": "route to future global balance owner"
  },
  "deferred_inputs": [
    "Compo5.01 occupied/free-space mask implementation",
    "Compo5.02 EmptyRegion[] / clearance / breathing room",
    "Topic6 canonical canvas/format/domain normalization",
    "Topic8 grid occupancy",
    "future global balance/hierarchy/eye-flow",
    "Compo5.03 figure-ground / active-passive space relations",
    "Compo5.04 scoring/corrections/tests",
    "any channel/corridor routing semantics require an explicit future MAIN allocation"
  ],
  "recompute_when": [
    "CompositionSpaceDomain changes",
    "included object set changes",
    "world-space object support changes",
    "mask/visibility/occlusion policy changes",
    "crop/clip domain changes",
    "space interpretation stage changes"
  ],
  "finality": "TOPIC5_SPACE_SCHEMA_DOMAIN_AND_OWNERSHIP_ONLY",
  "canonical_main_titles": {
    "5.00": "Positive/negative space model",
    "5.01": "Occupied mask и free-space mask",
    "5.02": "Connected empty regions, clearance и breathing room",
    "5.03": "Figure-ground / active-passive space relations",
    "5.04": "Scoring, corrections и tests"
  }
}
ARCHITECTURE CHECKPOINT · 5.00 OWNS ONLY COMPOSITION-SPACE DOMAIN / OCCUPIED-FREE SHELL / STAGE / POLICY-REFERENCE CONTRACTS. 5.01 OWNS SCENE OCCUPIED AND FREE MASKS; 5.02 EMPTY REGIONS / CLEARANCE; 5.03 FIGURE-GROUND / ACTIVE-PASSIVE SPACE RELATIONS; 5.04 SCORING / CORRECTIONS / TESTS. COMPO4.01 HULLOCCUPANCY REMAINS OBJECT-INTERNAL. TOPIC8 GRID OCCUPANCY REMAINS SEPARATE. TOPIC3 OWNS GEOMETRY; TOPIC4 OWNS VISUAL MASS; TOPIC6/CANVAS OWNER SUPPLIES DOMAIN/NORMALIZATION. MORE FREE SPACE ≠ BETTER. NO BEAUTYSCORE.
VISITS / ...