Space model до метрик
5.00 задаёт сцену как явный domain, внутри которого occupied support и его complement становятся измеримыми сущностями. Сам mask ещё принадлежит 5.01.
CompositionSpaceDomain, OccupiedSpaceMap/FreeSpaceMap shells, stages, policy refs и ownership.
none — entrypoint не считает area/share/clearance.
SPACE SCHEMA / DOMAIN / OWNERSHIP ONLY.
CompositionSpaceDomain
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
Позитивное пространство — не «все объекты вообще», а support тех объектов, которые включены конкретной SpaceMaskPolicy.
Negative/free space = complement
Базовая геометрия проста, но только если occupied mask и domain определены одним и тем же policy pass.
OccupiedSpaceMap / FreeSpaceMap
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
Stage показывает, на каком уровне spatial evidence находится pipeline.
| Stage | Meaning | Owner |
|---|---|---|
GEOMETRIC_SUPPORT | объектный paint-support до occlusion interpretation | 5.01 consumes Topic3 support |
VISIBLE_SUPPORT | видимый support после explicit visibility/occlusion policy | 5.01 |
FREE_SPACE_DERIVED | domain complement + empty regions | 5.01 / 5.02 |
FIGURE_GROUND_INTERPRETED | отношения figure-ground / enclosure / channels | 5.03 |
Occupancy ≠ occupancy
COMPO уже имеет другие термины occupancy. 5.00 вводит namespace firewall.
| Term | Meaning | Owner |
|---|---|---|
visualMass.geometry.hullOccupancy | silhouetteArea / convexHullArea одного объекта | 4.01 |
space.occupiedMask | scene-domain union support | 5.01 |
space.freeMask | domain complement | 5.01 |
grid occupancy | занятость grid cells / registry | Topic 8 |
Visual mass ≠ occupied space
Topic 4 и Topic 5 используют одни и те же объекты, но отвечают на разные вопросы.
How heavy?
Alpha-weighted/calibrated/contextual visual contribution.
visualMass contextualMass mass ratios mass shares
Where is space free?
Geometric/visible support union and its complement.
occupiedMask freeMask EmptyRegion[] clearance figure-ground
Free space ≠ automatically good whitespace
Геометрическое свободное пространство появляется раньше эстетической интерпретации.
Free space
Простой spatial complement внутри domain.
Breathing room
Локальный clearance descriptor — 5.02.
Whitespace fit
Target/style interpretation — 5.04.
Ownership 5.00–5.04
Разделение построено так, чтобы mask, regions, figure-ground и scoring не конкурировали за одну метрику.
| Module | Owns |
|---|---|
| 5.00 | domain/shell/stage/policy-reference contracts |
| 5.01 | occupied mask, free mask, union/complement, vector/raster support representation |
| 5.02 | EmptyRegion[], connected components, clearance, breathing-room/distance descriptors |
| 5.03 | figure-ground boundary attribution and active/passive-space relations |
| 5.04 | explicit-target scoring, correction routing and consolidated Topic5 tests |
Recompute hooks
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
Показываем positive/negative-space model без преждевременного score.
Schema / ownership tests
5.00 проверяет domain/policy/stage invariants и namespace barriers, не создавая mask implementation раньше 5.01.
DATA FOR LAYOUT ENGINE
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"
}
}