Projection + interval algebra, no preference
25.03 starts only after a valid 25.00 template and an exact realized path descriptor from 25.01 or 25.02 exist.
What “projection” means here
The visual explains the data contract. 25.03 resolves supplied projection evidence; it does not secretly re-extract pixels or invent a nearest point from foreign geometry.
Object → exact path coordinate
Each object carries a normalized path position t ∈ [0,1], a perpendicular distance, and a projected footprint interval.
Evidence, not hidden geometry
The module can accept exact projection evidence from an owner-qualified geometry adapter. Missing or conflicting evidence becomes N_A.
One owner for projection/coverage descriptors
Projection geometry and coverage algebra live here; template desirability remains downstream.
Projection descriptors
Exact object/path lineage, normalized path position, projected distance and footprint interval.
Coverage + gaps
Interval union, overlap excess, complement gaps, edge/interior gap classification.
Fit / score
No preference for full coverage, short distance, small gaps, specific route family or visual style.
Projection evidence is exact and owner-qualified
Object, template, realized path descriptor and coordinate frame must all match. Confidence is diagnostic only.
FlowObjectProjectionEvidence {
scopeRef, snapshotRef,
templateRef,
pathDescriptorRef,
pathOwnerRef,
coordinateFrameRef,
objectRef, objectOwnerRef,
projectionMode: ANCHOR_AND_INTERVAL,
pathPositionNormalized, // 0..1
perpendicularDistance, // >= 0
distanceUnitRef,
coverageStartNormalized, // 0..1
coverageEndNormalized, // 0..1
sourceRef, sourceOwnerRef,
confidence, provenance,
status,
mutationAllowed: false
}Conflicts stay visible
Same exact object+path lineage with incompatible projection values produces N_A. Confidence never elects a winner.
Consensus → OK
Repeated evidence with identical projected values can resolve to one immutable descriptor.
Conflict → N_A
Two incompatible positions for the same exact evidence identity are preserved as unresolved.
Path-coordinate order keeps ties
Sorting by normalized path position is geometry bookkeeping. Exact ties become groups; they are never broken by object name, confidence, size or hierarchy.
Strict coordinate sequence
Distinct t values can form an exact geometric sequence. DIRECTED traversal may expose this as traversal-coordinate order only.
Exact tie remains a group
Two objects at the same normalized coordinate do not receive a fabricated strict order.
Coverage is interval union
Each projected object contributes a closed normalized interval. The route coverage descriptor uses set union, so overlap is not counted twice.
Union removes double counting
Raw interval lengths may overlap. unionCoverageFraction measures covered path extent once.
Full, partial, zero are descriptors
Coverage classes describe geometry only. FULL is not automatically good; ZERO can be valid for point-like projections.
Gaps are the complement of coverage
Gaps are computed inside [0,1] after interval union. Edge gaps and interior gaps have distinct geometric labels, without quality semantics.
Start / interior / end gaps
N_A is not an empty route
Missing projection evidence prevents coverage computation. It must not collapse to uncoveredFraction = 1 or coverage = 0.
Bounded explicit-only projection set
No Cartesian product over every scene object × every flow template. The caller supplies exact object refs for one exact realized path.
| Policy field | Canonical behavior |
|---|---|
| selectionMode | EXPLICIT_OBJECT_REFS_ONLY |
| maxObjects | 1..4096; overflow → N_A, no truncation |
| maxEvidencePerObject | 1..64; overflow → N_A, no sampling |
| conflicts | N_A, no confidence winner and no averaging |
| autoObjectDiscovery | false |
| autoNearestPointComputation | false |
| autoTemplateSelection | false |
| autoAttentionOrdering | false |
| autoScoring | false |
Immutable downstream attachment
25.03 attaches its own set to the 25.00 seed by reference. The seed itself remains unchanged.
FlowProjectionCoverageAttachment {
flowSystemSeedRef,
projectionCoverageSetRef,
pathDescriptorRef,
status,
mutationAllowed: false
}Geometry does not become aesthetic law
These firewalls are critical because coverage and gaps look score-like. In 25.03 they are only observed descriptors.
1.0 coverage is not universally better than 0.7.
Perpendicular distance is evidence, not a negative vote.
Large negative space along a route may be intentional.
Geometric coordinate order is not eye tracking or reading order.
Coverage overlap does not prove semantic duplication.
Template traversal direction remains declared semantics.
Missing/conflicting evidence does not become empty coverage.
Everything is bound to one scope/snapshot/path lineage.
25.03 data pipeline
The pipeline deliberately stops before selection and scoring.
Valid descriptor from 25.01 or 25.02, bound to one 25.00 template.
Explicit, unique, bounded selected objects. No scene-wide discovery.
Resolve owner-qualified t, distance and projected footprint interval.
Union intervals, preserve overlaps as diagnostics, compute complement gaps.
Attach descriptors. 25.04 owns target fit, selection, MetricResult and candidates.
CANON → LAB → DATA → IDEAS
Canonical descriptors stay separate from experiments about perceived flow continuity.
25.03 regression suite
Tests cover exact lineage, value domains, zero semantics, conflicts, tie groups, interval union, overlaps, edge/interior gaps, attachment immutability and strict 25.04/Topic26/27 firewalls.
DATA FOR LAYOUT ENGINE
Machine-readable contract. No hidden score fields.
{
"module": "Compo 25.03",
"name": "object_projection_coverage_and_gaps",
"version": "1.0-canonical",
"canonical_main_title": "Object projection, coverage and gaps",
"topic": "25_S_КРИВАЯ_L_СТРУКТУРА_И_ДРУГИЕ_МАРШРУТЫ",
"scope": "EXPLICIT_OWNER_QUALIFIED_OBJECT_TO_FLOW_PATH_PROJECTION_EVIDENCE_NORMALIZED_PATH_COORDINATES_COVERAGE_INTERVAL_UNION_GAP_DESCRIPTORS_AND_GEOMETRIC_PATH_COORDINATE_ORDER_ONLY_WITHOUT_TEMPLATE_SELECTION_TARGET_FIT_SCORING_METRICRESULT_OR_ATTENTION_INFERENCE",
"main_topic_contract": {
"topic_title": "S-кривая, L-структура и другие маршруты",
"topic_goal": "Хранит типовые маршруты S/C/L/Z и другие flow templates, чтобы сравнивать arrangement объектов с конкретной траекторией, а не оценивать движение абстрактно.",
"expected_output": "FlowTemplate, route-fit descriptors, ordered objects",
"planned_files": [
"25.00 Flow-template schema",
"25.01 S/C/serpentine paths",
"25.02 L/Z/vertical/diagonal paths",
"25.03 Object projection, coverage and gaps",
"25.04 Template selection, scoring and tests"
]
},
"ownership": {
"owner": "Compo25.03",
"owns": [
"FlowProjectionMode taxonomy",
"FlowGapKind taxonomy",
"FlowObjectProjectionEvidence",
"FlowObjectProjectionResolution",
"ObjectFlowProjectionDescriptor",
"FlowPathCoordinateOrderDescriptor",
"FlowCoverageIntervalDescriptor",
"FlowGapDescriptor",
"FlowCoverageDescriptor",
"FlowProjectionCoveragePolicy",
"FlowProjectionCoverageSet",
"FlowProjectionCoverageAttachment",
"exact owner-qualified object-to-path projection evidence resolution",
"normalized path-coordinate ordering with exact-tie groups",
"coverage interval union and complement gap computation",
"identity/status/provenance rules for Topic25 projection/coverage layer",
"non-mutating correction request for projection/coverage evidence"
],
"does_not_own": [
"FlowTemplate identity/path binding/traversal declaration — Compo25.00",
"S/C/serpentine geometry realization — Compo25.01",
"L/Z/vertical/diagonal geometry realization — Compo25.02",
"raw image-to-object detection or raw path extraction — upstream owners",
"automatic nearest-point computation from foreign geometry not supplied as evidence",
"template selection / target profile / route-fit quality — Compo25.04",
"MetricResult / independent numeric vote — Compo25.04",
"attention order / eye tracking / reading order — Topic27 or semantic owner",
"rhythm interval semantics — Topic26",
"beauty / final-layout quality"
]
},
"semantics": {
"normalized_path_position": "0..1 coordinate on the exact realized path representation; it is geometry lineage, not quality.",
"coverage_interval": "closed normalized interval [start,end] contributed by one projected object footprint; degenerate zero-length interval is valid.",
"coverage_union": "set union of valid object coverage intervals; overlaps are not double-counted.",
"gap": "complement of the coverage union inside [0,1]; exact zero gap is valid and distinct from N_A.",
"path_coordinate_order": "geometric ordering by normalized path position; ties remain groups and are not silently broken.",
"directed_traversal": "may expose traversal-coordinate order, but still does not prove observed attention order.",
"undirected_traversal": "path-coordinate order is representation-relative and never promoted to directional attention order."
},
"status_semantics": {
"OK": "required exact lineage is present and internally consistent",
"N_A": "projection evidence is missing/conflicting or root lineage does not bind; no zero substitution",
"INVALID": "malformed evidence/policy/value/domain violation",
"zero": "a valid numeric observation, including zero perpendicular distance, zero interval length, zero uncovered fraction or zero gap length"
},
"policy": {
"selectionMode": "EXPLICIT_OBJECT_REFS_ONLY",
"projectionEvidenceMode": "EXACT_OBJECT_TEMPLATE_PATH_DESCRIPTOR_FRAME_LINEAGE_ONLY",
"conflictMode": "N_A_NO_WINNER",
"maxObjects": "1..4096",
"maxEvidencePerObject": "1..64",
"overflow": "N_A_NO_TRUNCATION",
"autoObjectDiscovery": false,
"autoPathInference": false,
"autoNearestPointComputation": false,
"autoTemplateSelection": false,
"autoAttentionOrdering": false,
"autoScoring": false
},
"firewalls": [
"projection distance != penalty",
"coverage fraction != quality score",
"full coverage != automatically better",
"large gap != automatically bad",
"geometric path-coordinate order != attention order",
"DIRECTED traversal != observed eye movement",
"UNDIRECTED path != bidirectional attention",
"overlap != redundancy",
"zero gap != N_A",
"N_A != 0",
"descriptor != score",
"local != global",
"geometry != interpretation"
],
"outputs": [
"ObjectFlowProjectionDescriptor[]",
"FlowPathCoordinateOrderDescriptor",
"FlowCoverageDescriptor",
"FlowGapDescriptor[]",
"FlowProjectionCoverageAttachment"
],
"metric_discipline": {
"owns_metrics": [],
"independent_numeric_votes": 0,
"MetricResult": "FORBIDDEN_IN_25.03",
"scoringGroup": null,
"beautyScore": false
},
"topic25ProgressAfterThisModule": "4/5 local",
"next_module": "Compo 25.04 — Template selection, scoring and tests",
"hard_stop": "NO_25.04_IMPLEMENTATION_IN_THIS_FILE",
"publication": "NOT_VERIFIED"
}