Intrabar paths
Implemented: --include-path asks for finer constituent bars beneath each coarse bar; --path-interval 1m names an exact cadence and implies the request. serves_path gates adapter support. Named cadence is exact-or-refused, strictly finer than the parent interval, and a whole divisor of it. The named interval participates in cache identity.
The path represents the full bucket construction, including boundary-bucket constituents outside the narrower request window. Its first open, extrema, last close and summed volume reconstruct the parent. Paths are one level deep. Consumers validate ordering, non-overlap, temporal containment, strictly finer intervals and any named granularity. Reconstruction of OHLCV is a producer obligation, not a second aggregation in every decoder.
The engine consumes paths for bar-resolution fills and strips them before strategy delivery. Available trade prints take precedence at tick resolution. Path fills use the parent close timestamp; IOC/FOK expiry and the engine clock remain at the parent boundary. Trailing stops check then ratchet per constituent and cannot ratchet and trigger on the same observation. The parent-close ratchet still runs after the walk.
Protobuf uses Bar.path and BarSpec.include_path/path_interval. CSV uses barpath records and named get-line tail tokens. DBN support is limited to representable OHLCV intervals and integer volume; automatic engine negotiation demotes DBN when a path is wanted.
For session paths, the producer rebuilds the edge buckets under the session calendar, clamps them to honest parent instants, and proves the parent folds from the constituents. Only the parent carries session metadata. A weekly fold has no path. Refusals must not silently serve a different granularity.
Batch accounting counts 1 + len(Path) payload records per parent. Flush before adding a parent that would cross the payload budget; never split a parent across envelopes. This prevents parent-count batching from producing hundreds of megabytes against the 16 MiB frame cap. A single oversized parent still has to obey the frame writer’s cap.
Implementation anchors: sdk/data/pathinterval.go, sdk/data/pumppayload.go, engine/pathinterval.go, engine/dataclient.go, engine/sim/advance.go, engine/intrabar_path_test.go, and sdk/data/framebudget_wire_test.go.