{
  "format": "UTF-8 CSV, comma delimiter, LF line endings, header row",
  "join": "frames.task_id -> tasks.task_id; frames.episode_id -> episodes.episode_id",
  "frames": {
    "episode_id": "Source LeRobot episode identifier, not a person identifier. Gaps may remain after duplicate removal.",
    "frame_index": "Zero-based consecutive step within episode.",
    "timestamp_seconds": "Episode-relative float32 elapsed seconds retained without rounding; collection frequency 10 Hz.",
    "task_id": "Source LeRobot task identifier. Join tasks.csv to obtain natural-language instruction.",
    "state_0..state_7": "Eight numeric observation.state components in original converter order. Generic motor_0..motor_7 names in upstream metadata do not establish physical meaning or units. Values are preserved without rescaling.",
    "action_0..action_6": "Seven numeric action components in original converter order. Physical units and mapping to the original four-component Jaco action are not established here. Values are preserved without rescaling.",
    "reward": "Source next.reward; 1 at final skill step, 0 otherwise. This is not independently verified task success.",
    "done": "Source next.done; 1 at final episode step, 0 otherwise."
  },
  "constant_components_retained": {
    "state_6": 0,
    "action_3": 0,
    "action_4": 0,
    "action_5": 0
  },
  "splits": "Upstream LeRobot info places all 1085 episodes in train. The original TFDS train/test membership is unavailable in this conversion; no independent test split is claimed. Split by entire episode for experiments."
}
