{"id":"course_profiler_v1","format":"crsprof","status":"current","summary":"CourseProfiler CRSProf compact interpretation profile.","schema_versions":[1,2],"rules":{"views":{"profile":"gpx.reference exists and segments is non-empty","plan":"any segment has plan","execution":"gpx.execution exists or any segment has execution","comparison":"plan and execution are available"},"segments":{"point_like":"distance == 0","range":"distance > 0","continuity":"ordered positive-distance ranges cover the course without gaps or overlaps, with point-like segments located at boundaries"},"point_like_segments":{"metadata":"name, resources, cutoff, note, and links describe the point-like course concept","split_boundary":"split_separator === true","passing_point":"split_separator is false or absent","start_finish":"boundary distance plus label/context may identify start or finish"},"movement":{"stop":"distance > 0 and execution data is available and derived speed is below options.execution.moving_threshold","moving":"distance > 0 and execution data is available and derived speed is greater than or equal to options.execution.moving_threshold","unknown":"required execution timing/distance data or threshold is missing","persisted_locomotion":"plan/execution metrics.motion.locomotion is a derived analysis output, not independent canonical truth"},"splits":{"canonical_boundaries":"point-like segments with split_separator === true","canonical_ranges":"ranges between consecutive canonical boundaries","generated_display_splits":"display splits may be generated when boundaries are absent, but they are not canonical file truth"},"overlays":{"reference":"root segment fields describe the reference course interval","plan":"segment.plan is an estimated plan overlay for the same segment","execution":"segment.execution is an observed activity overlay for the same segment/range","missing":"missing overlay means unknown/not available, not zero"},"terrain":{"classification":"up/down/flat are derived from gain, loss, distance, and segmentation options/defaults","unknown":"if required options/defaults are unavailable, leave terrain class unknown rather than guessing"},"source_stream_channels":{"availability":"lat/lon/elevation/time/hr/cad availability is determined by field presence in each source point stream","missing":"missing channel fields mean unavailable, not zero"},"derived_outputs":{"indexes":"indexes are derived summaries/caches and may be ignored or recomputed","metrics":"metrics are derived outputs scoped to the segment and overlay that contains them","annotations":"annotations.ranges target reference course distance ranges and do not change segments or splits"}}}