Problem
export_to_csv has two largely independent code paths depending on the use_display_names flag:
use_display_names=False (default): hardcodes a fixed set of columns (t, coordinate axes, id, parent_id, tracklet_id) and does not export any other features.
use_display_names=True: dynamically iterates tracks.features.node_features and exports all eligible features (skipping masks, derived features, and solution).
This means the two modes can produce CSVs with different columns — the raw-key mode silently drops features like area, lineage_id, or any user-added features, while the display-name mode includes them.
Desired behavior
Both modes should export the same set of columns. The only difference should be the column header names (raw keys vs. display names), not which columns are included.
Context
Came up during review of PR #223 (solution-as-feature refactor) where we noticed the divergence between the two paths.
Problem
export_to_csvhas two largely independent code paths depending on theuse_display_namesflag:use_display_names=False(default): hardcodes a fixed set of columns (t, coordinate axes,id,parent_id,tracklet_id) and does not export any other features.use_display_names=True: dynamically iteratestracks.features.node_featuresand exports all eligible features (skipping masks, derived features, and solution).This means the two modes can produce CSVs with different columns — the raw-key mode silently drops features like
area,lineage_id, or any user-added features, while the display-name mode includes them.Desired behavior
Both modes should export the same set of columns. The only difference should be the column header names (raw keys vs. display names), not which columns are included.
Context
Came up during review of PR #223 (solution-as-feature refactor) where we noticed the divergence between the two paths.