feat(checks): add required topic inventory - #136
Conversation
required_topics makes sixteen; the cross-reference in PORTING.md still said fifteen.
kstonekuan
left a comment
There was a problem hiding this comment.
LGTM. Validated locally on current main: ruff, format, ty clean, 759 passed, 3 skipped.
Two details I checked because they are the ones that bite a new built-in: test_no_two_builtin_checks_claim_the_same_measurement_key now includes required_topics, so missing_topic_count is proven unique, and the docs table lists all sixteen rows. Aggregating over Episode.channels instead of Episode.channel(topic) is the right call, and the multi-channel test earns it.
I pushed one fixup to your branch (bb20ad8): PORTING.md:291 still said "the fifteen packaged checks".
One thing, and it is an invitation rather than a rule: the good first issue pool is best left for newcomers, and you are past that now. Higher-leverage work if you want it is running HFlow against a real corpus (Egocentric-10K or Egocentric-100K on Hugging Face are the ones we care about) and reporting what breaks, what is slow, or what is awkward. That kind of report is worth more to us than anything on the starter list.
The MediaPipe how-to and its pointer both said "fifteen", written while required_topics (#136) was making it sixteen. Both merges were textually clean, so nothing caught it. The count carries no meaning in either sentence, so neither states one now; the one place that does say sixteen sits directly above the table a reader can count.
Summary
required_topicsbuilt-in check that records each requested topic's presence and message count plusmissing_topic_count.Why
HFlow could measure timing, motion, camera integrity, and content, but had no built-in answer to whether a recording contained every topic its rig was expected to produce. This adds the missing inventory evidence while leaving pass/fail policy in curation SQL.
Closes #6
Validation
uv run pytest tests/test_checks.py -qfailed during collection becauserequired_topicsdid not exist.uv run pytest tests/test_checks.py -q— 32 passed.uv sync --locked --all-extras— passed.uv run ruff check --fix— passed; finaluv run ruff checkpassed after rebasing onto currentmain.uv run ruff format— passed; finaluv run ruff format --checkreports 148 files formatted.uv run ty check— passed.uv run pytest -q— 756 passed, 6 skipped on currentmain.lychee --no-progress --include-fragments --exclude '^https://github\.com/Hebbian-Robotics/hflow/(issues|security/advisories/new)$' --exclude-path references/mcap-spec.md --exclude-path references/foxglove-CompressedVideo.proto .— 286 links checked, 0 errors.Checklist
uv run ruff check --fix,uv run ruff format, anduv run ty check.AI assistance
OpenAI Codex assisted with implementation and PR preparation. I reviewed the final diff and ran every validation command listed above locally.