COMPO · 25.01 · S/C/SERPENTINE PATHS

Curve topology explicit.
Fit still deferred.

25.01 реализует только curved-family geometry для уже зарегистрированных 25.00 templates: S_CURVE, C_CURVE и SERPENTINE. Точки и знаки поворота поступают как owner-qualified evidence; модуль строит path descriptor и проверяет declared topology. Никакой object projection, ordering, route fit или scoring здесь не появляется.

ModuleCompo 25.01
Familycurved only
Turn signsexplicit evidence
Fitdeferred 25.03/25.04
Metricsnone
Progress2 / 5 local

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.

00 / contract
25.00 curved FlowTemplate + exact owner-qualified point evidence + exact owner-qualified turn-run evidence → CurvedFlowPathDescriptor → CurvedFlowPathSet → CurvedFlowPathAttachment NO image-to-path extraction NO implicit curvature inference NO object projection NO coverage / gaps NO ordered objects NO route fit NO MetricResult

Visual anatomy of curved route families

Diagrams explain the canonical explicit turn-run contract. They are not universal aesthetic laws.

01 / explainer

C curve = one turn run

All explicit turns share one sign. LEFT and RIGHT are mirror variants of the same topology class.

C_CURVE · LEFT RUNLEFTLEFT
same-sign run

S curve = two opposite runs

Exactly one sign change: LEFT→RIGHT or RIGHT→LEFT. Therefore inflectionCount = 1.

S_CURVE · LEFT → RIGHTLEFTRIGHTINFLECTION
left runright run

Serpentine = 3+ alternating runs

Multiple inflections. The module validates strict alternation; it does not judge whether more turns are better.

SERPENTINE · L → R → L
3 alternating runs

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.

DECLARED S_CURVE · 3 RUNS → INVALID
Important
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.

02 / ownership
Own

Point + turn evidence

Exact owner-qualified points and explicit LEFT/RIGHT turn runs for S/C/serpentine.

Own

Topology descriptor

pointCount, turnRunCount, inflectionCount, topologyClass and path lineage.

Defer

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.

03 / evidence
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
}
Conflict semanticsSame exact pointIndex with different coordinates → N_A, no averaging. Same exact runIndex with LEFT and RIGHT → N_A, no confidence winner. Duplicate identical evidence may dedupe deterministically.

Topology from explicit turn runs

No pixel-derived curvature sign and no hidden “almost straight” threshold.

04 / topology
Template kindRequired explicit turn runsInflectionsInterpretation
C_CURVEexactly 10single-sign curved route
S_CURVEexactly 2, opposite signs1single inflection
SERPENTINE3..64, strict alternation2..63multi-inflection route

Descriptor records geometry, not quality

Numeric fields are direct counts or coordinates. No local beauty/fit score is produced.

05 / descriptor
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.

06 / direction

Directed representation

Reverse traversal changes start/end and reverses the turn-sign sequence, while run count and inflection count remain invariant.

START → ENDL → R

Undirected representation

Reverse point order is a representation change, not a claim of bidirectional attention.

NO ATTENTION DIRECTION CLAIM

Bounded explicit-only realization

No full discovery over every template/path candidate.

07 / policy
RuleCanonical behavior
selectionModeEXPLICIT_CURVED_TEMPLATES_ONLY
maxTemplates1..256
maxPointsPerPath2..2048
maxTurnRunsPerPath1..64
overflowN_A_WITHOUT_TRUNCATION
auto path extraction / curvature inference / projection / ordering / selection / scoringfalse

N_A and INVALID stay distinct

Missing evidence is not zero curvature; malformed topology is not “bad score”.

08 / status
N_A

Missing point

Expected explicit point evidence unavailable.

N_A

Turn conflict

LEFT and RIGHT evidence collide at the same run index.

INVALID

Duplicate index

Malformed point/run sequence with duplicate canonical identity.

INVALID

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.

09 / attachment
CurvedFlowPathAttachment {
  flowSystemSeedRef,
  curvedFlowPathSetRef,
  status,
  mutationAllowed: false
}

Curved path pipeline

A visual summary of the module boundary.

10 / pipeline
1 · 25.00 template

Exact S/C/SERPENTINE templateRef + pathRef/pathOwnerRef + coordinateFrameRef.

→
2 · Explicit geometry evidence

Indexed points + indexed LEFT/RIGHT turn runs. Conflicts preserved.

→
3 · Descriptor

Topology class + counts + inflections + immutable attachment. No objects, fit or score.

Geometry ≠ interpretation

Critical boundaries remain explicit.

11 / firewalls
No shortcut

More turns ≠ better

Serpentine complexity is descriptive.

25.03

Point path ≠ object order

Path traversal cannot assign objects to route positions.

25.04

Topology ≠ fit

Matching S/C/serpentine topology does not score scene quality.

Topic27

Traversal ≠ gaze

Directed route is not an observed eye-flow graph.

CANON → LAB → DATA → IDEAS

Empirical questions remain external until evidence exists.

12 / hooks
IDEAS_REFS[]S/C discrimination, inflection legibility, reversal.
DATA_CAPTURE[]Points, run signs, counts, topology status.
DEFERRED_INPUTS[]Desirability, projection, coverage, gap targets.
HUMAN_FEEDBACK[]Point, turn, kind and lineage corrections.
CONFLICT_RULES[]No confidence/order winner for exact conflicts.
LAB_HOOKS[]Sampling density and topology recognition.

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.

13 / deterministic tests
Tests not run yet.

DATA FOR LAYOUT ENGINE

Machine-readable canonical contract.

14 / machine 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"
}
VISITS / ...