Curved geometry realization, no route judgment
Only exact 25.00 curved templates participate. Turn sign is evidence, not a hidden derivative or tolerance-based guess.
Visual anatomy of curved route families
Diagrams explain the canonical explicit turn-run contract. They are not universal aesthetic laws.
C curve = one turn run
All explicit turns share one sign. LEFT and RIGHT are mirror variants of the same topology class.
S curve = two opposite runs
Exactly one sign change: LEFT→RIGHT or RIGHT→LEFT. Therefore inflectionCount = 1.
Serpentine = 3+ alternating runs
Multiple inflections. The module validates strict alternation; it does not judge whether more turns are better.
Invalid topology example
An S_CURVE declaration with LEFT→RIGHT→LEFT evidence is not silently repaired into S. It is INVALID for this declared kind.
The curves are explanatory sketches. Canonical data comes only from explicit path points and explicit turn evidence bound to the exact 25.00 template/path/frame lineage.
One owner for curved-path realization
25.01 owns only curved geometry descriptors. Downstream meaning remains separate.
Point + turn evidence
Exact owner-qualified points and explicit LEFT/RIGHT turn runs for S/C/serpentine.
Topology descriptor
pointCount, turnRunCount, inflectionCount, topologyClass and path lineage.
Fit / objects / score
Projection, coverage, gaps, ordered objects and scoring stay 25.03–25.04.
Evidence is exact and owner-qualified
Point conflicts and turn-sign conflicts are preserved as N_A; confidence never chooses a winner.
CurvedFlowPointEvidence {
scopeRef, snapshotRef,
templateRef,
pathRef, pathOwnerRef,
coordinateFrameRef,
pointIndex, x, y,
sourceRef, sourceOwnerRef,
confidence, provenance,
status,
mutationAllowed: false
}
CurvedFlowTurnEvidence {
...same exact lineage,
runIndex,
turnSign: LEFT | RIGHT,
sourceRef, sourceOwnerRef,
confidence, provenance,
status,
mutationAllowed: false
}Topology from explicit turn runs
No pixel-derived curvature sign and no hidden “almost straight” threshold.
| Template kind | Required explicit turn runs | Inflections | Interpretation |
|---|---|---|---|
| C_CURVE | exactly 1 | 0 | single-sign curved route |
| S_CURVE | exactly 2, opposite signs | 1 | single inflection |
| SERPENTINE | 3..64, strict alternation | 2..63 | multi-inflection route |
Descriptor records geometry, not quality
Numeric fields are direct counts or coordinates. No local beauty/fit score is produced.
CurvedFlowPathDescriptor {
scopeRef, snapshotRef,
templateRef,
pathRef, pathOwnerRef,
coordinateFrameRef,
templateKind,
traversalMode,
pointRefs[],
pointCount,
turnRunRefs[],
turnRunCount,
inflectionCount,
topologyClass,
startPointRef,
endPointRef,
routeFitDescriptorRef: null,
projectionAttachmentRef: null,
orderedObjectRefs: [],
scoreRef: null,
metricResultRefs: [],
status,
mutationAllowed: false
}Traversal reversal ≠ object order
A directed path may preserve a start/end direction; an undirected path can be represented in either point order. Neither statement predicts observed attention.
Directed representation
Reverse traversal changes start/end and reverses the turn-sign sequence, while run count and inflection count remain invariant.
Undirected representation
Reverse point order is a representation change, not a claim of bidirectional attention.
Bounded explicit-only realization
No full discovery over every template/path candidate.
| Rule | Canonical behavior |
|---|---|
| selectionMode | EXPLICIT_CURVED_TEMPLATES_ONLY |
| maxTemplates | 1..256 |
| maxPointsPerPath | 2..2048 |
| maxTurnRunsPerPath | 1..64 |
| overflow | N_A_WITHOUT_TRUNCATION |
| auto path extraction / curvature inference / projection / ordering / selection / scoring | false |
N_A and INVALID stay distinct
Missing evidence is not zero curvature; malformed topology is not “bad score”.
Missing point
Expected explicit point evidence unavailable.
Turn conflict
LEFT and RIGHT evidence collide at the same run index.
Duplicate index
Malformed point/run sequence with duplicate canonical identity.
Kind mismatch
Declared S with three turn runs, or C with two, violates the explicit topology contract.
Immutable downstream attachment
25.00 FlowSystemSeed remains unchanged.
CurvedFlowPathAttachment {
flowSystemSeedRef,
curvedFlowPathSetRef,
status,
mutationAllowed: false
}Curved path pipeline
A visual summary of the module boundary.
Exact S/C/SERPENTINE templateRef + pathRef/pathOwnerRef + coordinateFrameRef.
Indexed points + indexed LEFT/RIGHT turn runs. Conflicts preserved.
Topology class + counts + inflections + immutable attachment. No objects, fit or score.
Geometry ≠ interpretation
Critical boundaries remain explicit.
More turns ≠ better
Serpentine complexity is descriptive.
Point path ≠ object order
Path traversal cannot assign objects to route positions.
Topology ≠ fit
Matching S/C/serpentine topology does not score scene quality.
Traversal ≠ gaze
Directed route is not an observed eye-flow graph.
CANON → LAB → DATA → IDEAS
Empirical questions remain external until evidence exists.
25.01 regression suite
Tests cover exact 25.00 lineage, curved-kind filtering, point/turn conflict semantics, S/C/serpentine topology, reversal invariants, immutable attachment and strict 25.02–25.04 firewalls.
DATA FOR LAYOUT ENGINE
Machine-readable canonical contract.
{
"module": "Compo 25.01",
"name": "s_c_serpentine_paths",
"version": "1.0-canonical",
"canonical_main_title": "S/C/serpentine paths",
"topic": "25_S_CURVE_L_STRUCTURE_AND_OTHER_ROUTES",
"scope": "EXPLICIT_OWNER_QUALIFIED_CURVED_PATH_POINT_AND_TURN_EVIDENCE_FOR_S_C_SERPENTINE_GEOMETRY_REALIZATION_AND_TOPOLOGY_DESCRIPTORS_ONLY_WITHOUT_OBJECT_PROJECTION_COVERAGE_GAPS_ORDERING_TEMPLATE_SELECTION_OR_SCORING",
"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.01",
"owns": [
"CurvedFlowTurnSign taxonomy",
"CurvedFlowPointEvidence",
"CurvedFlowTurnEvidence",
"CurvedFlowGeometryPolicy",
"CurvedFlowPathDescriptor",
"CurvedFlowPathSet",
"CurvedFlowPathAttachment",
"exact owner-qualified curved-path point sequence realization",
"explicit turn-run topology validation for S_CURVE / C_CURVE / SERPENTINE",
"inflection-count and traversal-neutral/directed geometry descriptors",
"identity/status/provenance rules for Topic25 curved-path layer",
"non-mutating correction request for curved-path evidence"
],
"does_not_own": [
"FlowTemplate identity/path binding/traversal declaration — Compo25.00",
"raw path extraction from image — upstream/path owner",
"implicit curvature-sign inference from pixels or control points",
"L/Z/vertical/diagonal path realization — Compo25.02",
"object projection onto route — Compo25.03",
"coverage, gaps or ordered-object derivation — Compo25.03",
"template selection, target profile, MetricResult or scoring — Compo25.04",
"Topic24 diagonal-composition semantics",
"Topic26 rhythm semantics",
"Topic27 eye-flow / attention semantics",
"dominance / hierarchy / beautyScore / final-layout ranking",
"foreign geometry/style/semantic mutation"
]
},
"taxonomies": {
"CurvedFlowTurnSign": [
"LEFT",
"RIGHT"
],
"supportedTemplateKinds": [
"S_CURVE",
"C_CURVE",
"SERPENTINE"
]
},
"topology_contract": {
"C_CURVE": "exactly 1 explicit turn run",
"S_CURVE": "exactly 2 explicit turn runs with opposite signs",
"SERPENTINE": "3..64 explicit turn runs with strict sign alternation",
"inflectionCount": "turnRunCount - 1 when status=OK",
"turn_sign_is_explicit_evidence": true,
"no_hidden_curvature_tolerance": true
},
"geometry_policy": {
"selectionMode": "EXPLICIT_CURVED_TEMPLATES_ONLY",
"maxTemplates": [
1,
256
],
"maxPointsPerPath": [
2,
2048
],
"maxTurnRunsPerPath": [
1,
64
],
"overflow": "N_A_WITHOUT_TRUNCATION",
"missingPointEvidence": "N_A",
"duplicatePointIndex": "INVALID",
"conflictingPointEvidence": "N_A_NO_WINNER",
"missingTurnEvidence": "N_A",
"conflictingTurnEvidence": "N_A_NO_WINNER",
"autoPathExtraction": false,
"autoCurvatureInference": false,
"autoObjectProjection": false,
"autoObjectOrdering": false,
"autoTemplateSelection": false,
"autoScoring": false
},
"descriptor_contract": {
"pointCount": "exact explicit count",
"turnRunCount": "exact explicit run count",
"inflectionCount": "turnRunCount - 1",
"startPointRef": "first path point in declared traversal representation",
"endPointRef": "last path point in declared traversal representation",
"topologyClass": "DECLARED_C_CURVE | DECLARED_S_CURVE | DECLARED_SERPENTINE",
"routeFitDescriptorRef": null,
"projectionAttachmentRef": null,
"orderedObjectRefs": [],
"scoreRef": null,
"metricResultRefs": []
},
"status_semantics": {
"OK": "exact 25.00 lineage + valid explicit point/turn evidence + topology contract satisfied",
"N_A": "missing/conflicting/overflow evidence; never numeric zero",
"INVALID": "malformed record, duplicate index, impossible topology declaration; never numeric zero"
},
"firewalls": [
"curved path geometry != route fit",
"explicit turn sign != inferred visual preference",
"inflection count != quality",
"DIRECTED path traversal != observed attention order",
"UNDIRECTED path representation != bidirectional attention claim",
"S_CURVE != automatically better than C_CURVE or SERPENTINE",
"SERPENTINE turn count != rhythm score",
"path point order != object order",
"geometry realization != object projection",
"N_A != 0",
"INVALID != 0",
"descriptor != score",
"local != global"
],
"root_attachment": {
"flowSystemSeedRef": "exact 25.00 seed",
"curvedFlowPathSetRef": "exact 25.01 set",
"mutationAllowed": false
},
"visual_explanation": {
"diagrams": [
"C curve: one same-sign turn run",
"S curve: two opposite-sign turn runs and one inflection",
"serpentine: three or more alternating turn runs",
"directed reversal changes traversal but not run count",
"explicit points + explicit turn evidence -> descriptor pipeline",
"invalid / unresolved evidence examples"
]
},
"ideas_data_hooks": {
"IDEAS_REFS": [
"perceived S/C discrimination under sparse sampling",
"number of inflections vs route legibility",
"directed reversal and reading culture",
"path smoothing vs topology preservation",
"serpentine complexity thresholds",
"curvature continuity perception",
"route robustness under responsive scaling"
],
"DATA_CAPTURE": [
"templateRef/path binding lineage",
"point evidence and point index",
"turn evidence and sign runs",
"turnRunCount / inflectionCount",
"topology status",
"conflict and overflow status"
],
"DEFERRED_SEMANTIC_INPUTS": [
"route desirability",
"object-route fit",
"coverage target",
"gap tolerance",
"main template selection"
],
"HUMAN_FEEDBACK_HOOKS": [
"point correction",
"turn sign correction",
"topology-kind correction",
"path-owner/frame correction"
],
"CONFLICT_PRIORITY_ASSUMPTIONS": [
"confidence does not resolve coordinate conflicts",
"source order does not resolve turn-sign conflicts",
"more points do not imply better path",
"more inflections do not imply stronger flow"
],
"LAB_HOOKS": [
"curve topology recognition study",
"sparse-vs-dense point sampling",
"turn-sign labeling reliability",
"serpentine inflection perception"
]
},
"metrics": {
"owns_metrics": [],
"independent_numeric_votes": 0
},
"topic25ProgressAfterThisModule": "2/5 local",
"next_module": "Compo 25.02 — L/Z/vertical/diagonal paths",
"hard_stop": "NO_25_02_25_04_IMPLEMENTATION_IN_THIS_FILE"
}