You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The importer's episodes path carries a wall of refusals whose job is to fail loud on broken Hugging Face metadata. The suite covers the fps refusals (test_info_json_refuses_non_finite_or_non_positive_fps), the commit-sha refusal, the UTF-8 and JSON-decode errors (#301), and the boolean-dimension refusals (#306). Eight branches have no test at all. The receipt is a grep, the same one #393 used:
grep -rn "<message fragment>" tests/ -> 0 hits for all eight:
"not a LeRobot v3 repository" lerobot.py:462
"is not a JSON object" lerobot.py:472
"must define a non-empty data_path template" lerobot.py:550
"must define a non-empty video_path template" lerobot.py:555
"no meta/episodes parquet files found" lerobot.py:572
"is not a list of objects" lerobot.py:416
"repeated an already fetched pagination URL" lerobot.py:388
"contains an invalid pagination URL" lerobot.py:395
(The two existing "is not a JSON object" hits are the runtime client's, not the importer's.)
The sharpest two:
The pagination loop guards (:388-395).visited_urls plus the invalid-URL parse are the only protections against a Hugging Face response (or a tampered Link header) looping the fetch forever or walking it somewhere unexpected. The origin-mismatch guard next to them is tested, which makes the two untested siblings stand out: half the loop's defenses are pinned, half are not.
Current behavior
The importer's episodes path carries a wall of refusals whose job is to fail loud on broken Hugging Face metadata. The suite covers the fps refusals (
test_info_json_refuses_non_finite_or_non_positive_fps), the commit-sha refusal, the UTF-8 and JSON-decode errors (#301), and the boolean-dimension refusals (#306). Eight branches have no test at all. The receipt is a grep, the same one #393 used:(The two existing "is not a JSON object" hits are the runtime client's, not the importer's.)
The sharpest two:
visited_urlsplus the invalid-URL parse are the only protections against a Hugging Face response (or a tampered Link header) looping the fetch forever or walking it somewhere unexpected. The origin-mismatch guard next to them is tested, which makes the two untested siblings stand out: half the loop's defenses are pinned, half are not.data_pathandvideo_pathare format strings that later go through.format()with caller-provided indexes. An empty template fails at conversion time with a confusing error instead of at the boundary with the real one. Both refusals sit on lines our recent diffs (feat(lerobot): publish imports into bucket-backed data roots #377, fix(lerobot): read episode metadata from every v3 shard (fixes #293) #383, feat(lerobot): resume multi-episode imports at episode boundaries (#303) #390, The LeRobot importer ignores the source's success label and hardcodes "true" for every episode #395) have each moved, so a pin also protects the refactors.Every branch is reachable with the same stub pattern the #301 tests already use (stub
urlopen, feed fixed bytes), so none of this needs new machinery.What the tests should assert
Linkheader repeats the fetched URL raises instead of hanging.Definition of done
Non-goals
Validation