openbot-data 0.0.2__tar.gz → 0.0.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. openbot_data-0.0.3/CHANGELOG.md +103 -0
  2. {openbot_data-0.0.2 → openbot_data-0.0.3}/PKG-INFO +104 -11
  3. {openbot_data-0.0.2 → openbot_data-0.0.3}/README.md +99 -8
  4. openbot_data-0.0.3/VERSION +1 -0
  5. openbot_data-0.0.3/docs/README.md +36 -0
  6. openbot_data-0.0.3/docs/api-reference.md +426 -0
  7. openbot_data-0.0.3/docs/audit-findings.md +99 -0
  8. openbot_data-0.0.3/docs/examples/audit.json +96 -0
  9. openbot_data-0.0.3/docs/examples/v0.0.3/README.md +23 -0
  10. openbot_data-0.0.3/docs/examples/v0.0.3/audit.json +296 -0
  11. openbot_data-0.0.3/docs/examples/v0.0.3/catalog-evidence.json +1064 -0
  12. openbot_data-0.0.3/docs/examples/v0.0.3/diff.json +32 -0
  13. openbot_data-0.0.3/docs/examples/v0.0.3/merge-plan.json +410 -0
  14. openbot_data-0.0.3/docs/examples/v0.0.3/merge-receipt.json +4780 -0
  15. openbot_data-0.0.3/docs/examples/v0.0.3/readiness.json +363 -0
  16. openbot_data-0.0.3/docs/examples/v0.0.3/repair-plan.json +1088 -0
  17. openbot_data-0.0.3/docs/examples/v0.0.3/repair-receipt.json +2158 -0
  18. openbot_data-0.0.3/docs/examples/v0.0.3/snapshot.json +604 -0
  19. openbot_data-0.0.3/docs/getting-started.md +280 -0
  20. openbot_data-0.0.3/docs/reference-libraries.md +520 -0
  21. {openbot_data-0.0.2 → openbot_data-0.0.3}/docs/version-0.0.2.md +5 -5
  22. openbot_data-0.0.3/docs/version-0.0.3.md +1143 -0
  23. openbot_data-0.0.3/openbot_data/__init__.py +102 -0
  24. openbot_data-0.0.3/openbot_data/adapters/__init__.py +381 -0
  25. openbot_data-0.0.3/openbot_data/adapters/_common.py +453 -0
  26. openbot_data-0.0.3/openbot_data/adapters/base.py +235 -0
  27. openbot_data-0.0.3/openbot_data/adapters/lerobot_v21.py +606 -0
  28. openbot_data-0.0.3/openbot_data/adapters/lerobot_v30.py +1097 -0
  29. openbot_data-0.0.3/openbot_data/audit/__init__.py +47 -0
  30. openbot_data-0.0.3/openbot_data/audit/models.py +279 -0
  31. openbot_data-0.0.3/openbot_data/audit/registry.py +939 -0
  32. openbot_data-0.0.3/openbot_data/audit/rules/__init__.py +5 -0
  33. openbot_data-0.0.3/openbot_data/audit/rules/media.py +144 -0
  34. openbot_data-0.0.3/openbot_data/audit/runner.py +664 -0
  35. openbot_data-0.0.3/openbot_data/catalog.py +137 -0
  36. openbot_data-0.0.3/openbot_data/catalog_evidence.py +580 -0
  37. openbot_data-0.0.3/openbot_data/cli.py +758 -0
  38. openbot_data-0.0.3/openbot_data/diff.py +667 -0
  39. {openbot_data-0.0.2 → openbot_data-0.0.3}/openbot_data/extract.py +18 -6
  40. openbot_data-0.0.3/openbot_data/hub.py +1612 -0
  41. openbot_data-0.0.3/openbot_data/hub_audit.py +377 -0
  42. openbot_data-0.0.3/openbot_data/merge.py +2322 -0
  43. {openbot_data-0.0.2 → openbot_data-0.0.3}/openbot_data/models.py +28 -0
  44. openbot_data-0.0.3/openbot_data/official.py +69 -0
  45. openbot_data-0.0.3/openbot_data/preflight.py +1678 -0
  46. openbot_data-0.0.3/openbot_data/profiles/__init__.py +1 -0
  47. openbot_data-0.0.3/openbot_data/profiles/hf-publication-v1.json +28 -0
  48. openbot_data-0.0.3/openbot_data/profiles/lerobot-act-v1.json +58 -0
  49. openbot_data-0.0.3/openbot_data/profiles/lerobot-core-v1.json +31 -0
  50. openbot_data-0.0.3/openbot_data/profiles/lerobot-smolvla-v1.json +65 -0
  51. openbot_data-0.0.3/openbot_data/profiles/training-common-v1.json +45 -0
  52. openbot_data-0.0.3/openbot_data/readiness.py +1824 -0
  53. openbot_data-0.0.3/openbot_data/repair.py +1788 -0
  54. {openbot_data-0.0.2 → openbot_data-0.0.3}/openbot_data/schema.py +9 -0
  55. openbot_data-0.0.3/openbot_data/schemas/catalog-evidence-v1.schema.json +241 -0
  56. openbot_data-0.0.3/openbot_data/schemas/dataset-audit-v1.schema.json +176 -0
  57. openbot_data-0.0.3/openbot_data/schemas/dataset-catalog-v1.schema.json +75 -0
  58. openbot_data-0.0.3/openbot_data/schemas/dataset-diff-v1.schema.json +78 -0
  59. openbot_data-0.0.3/openbot_data/schemas/dataset-merge-plan-v1.schema.json +156 -0
  60. openbot_data-0.0.3/openbot_data/schemas/dataset-merge-receipt-v1.schema.json +163 -0
  61. openbot_data-0.0.3/openbot_data/schemas/dataset-readiness-v1.schema.json +219 -0
  62. openbot_data-0.0.3/openbot_data/schemas/dataset-repair-plan-v1.schema.json +317 -0
  63. openbot_data-0.0.3/openbot_data/schemas/dataset-repair-receipt-v1.schema.json +255 -0
  64. openbot_data-0.0.3/openbot_data/schemas/dataset-snapshot-v1.schema.json +449 -0
  65. {openbot_data-0.0.2 → openbot_data-0.0.3}/openbot_data/serialization.py +10 -5
  66. openbot_data-0.0.3/openbot_data/snapshot.py +757 -0
  67. openbot_data-0.0.3/openbot_data/triage.py +715 -0
  68. openbot_data-0.0.3/openbot_data/validation.py +2770 -0
  69. {openbot_data-0.0.2 → openbot_data-0.0.3}/pyproject.toml +5 -2
  70. openbot_data-0.0.3/scripts/generate_v003_examples.py +256 -0
  71. {openbot_data-0.0.2 → openbot_data-0.0.3}/scripts/test_matrix.sh +5 -1
  72. openbot_data-0.0.3/tests/fixtures/competitor-outcomes-v003.json +98 -0
  73. {openbot_data-0.0.2 → openbot_data-0.0.3}/tests/test_acceptance_v002.py +185 -1
  74. openbot_data-0.0.3/tests/test_audit_rules.py +354 -0
  75. openbot_data-0.0.3/tests/test_catalog.py +142 -0
  76. openbot_data-0.0.3/tests/test_catalog_evidence.py +327 -0
  77. openbot_data-0.0.3/tests/test_cli_v003.py +585 -0
  78. openbot_data-0.0.3/tests/test_competitor_outcomes.py +144 -0
  79. openbot_data-0.0.3/tests/test_examples_v003.py +59 -0
  80. openbot_data-0.0.3/tests/test_hub.py +731 -0
  81. openbot_data-0.0.3/tests/test_hub_audit.py +294 -0
  82. openbot_data-0.0.3/tests/test_layered_validation.py +825 -0
  83. openbot_data-0.0.3/tests/test_lerobot_adapters.py +627 -0
  84. openbot_data-0.0.3/tests/test_merge.py +819 -0
  85. openbot_data-0.0.3/tests/test_official_lerobot_conformance.py +153 -0
  86. {openbot_data-0.0.2 → openbot_data-0.0.3}/tests/test_openbot_data.py +1 -0
  87. openbot_data-0.0.3/tests/test_p01_correctness.py +687 -0
  88. openbot_data-0.0.3/tests/test_readiness.py +866 -0
  89. openbot_data-0.0.3/tests/test_repair.py +587 -0
  90. openbot_data-0.0.3/tests/test_snapshot_contract_v003.py +198 -0
  91. openbot_data-0.0.3/tests/test_snapshot_diff.py +482 -0
  92. openbot_data-0.0.2/CHANGELOG.md +0 -38
  93. openbot_data-0.0.2/VERSION +0 -1
  94. openbot_data-0.0.2/docs/README.md +0 -25
  95. openbot_data-0.0.2/docs/api-reference.md +0 -203
  96. openbot_data-0.0.2/docs/audit-findings.md +0 -32
  97. openbot_data-0.0.2/docs/examples/audit.json +0 -11
  98. openbot_data-0.0.2/docs/getting-started.md +0 -161
  99. openbot_data-0.0.2/openbot_data/__init__.py +0 -51
  100. openbot_data-0.0.2/openbot_data/catalog.py +0 -92
  101. openbot_data-0.0.2/openbot_data/cli.py +0 -185
  102. openbot_data-0.0.2/openbot_data/preflight.py +0 -859
  103. openbot_data-0.0.2/openbot_data/schemas/dataset-audit-v1.schema.json +0 -37
  104. {openbot_data-0.0.2 → openbot_data-0.0.3}/.gitignore +0 -0
  105. {openbot_data-0.0.2 → openbot_data-0.0.3}/LICENSE +0 -0
  106. {openbot_data-0.0.2 → openbot_data-0.0.3}/docs/examples/manifest.json +0 -0
  107. {openbot_data-0.0.2 → openbot_data-0.0.3}/examples/local_preflight.py +0 -0
  108. {openbot_data-0.0.2 → openbot_data-0.0.3}/openbot_data/errors.py +0 -0
  109. {openbot_data-0.0.2 → openbot_data-0.0.3}/openbot_data/py.typed +0 -0
  110. {openbot_data-0.0.2 → openbot_data-0.0.3}/openbot_data/schemas/__init__.py +0 -0
  111. {openbot_data-0.0.2 → openbot_data-0.0.3}/openbot_data/schemas/dataset-manifest-v1.schema.json +0 -0
  112. {openbot_data-0.0.2 → openbot_data-0.0.3}/openbot_data/video.py +0 -0
  113. {openbot_data-0.0.2 → openbot_data-0.0.3}/scripts/check_version.py +0 -0
  114. {openbot_data-0.0.2 → openbot_data-0.0.3}/tests/fixtures/lerobot-v2/meta/episodes.jsonl +0 -0
  115. {openbot_data-0.0.2 → openbot_data-0.0.3}/tests/fixtures/lerobot-v2/meta/info.json +0 -0
  116. {openbot_data-0.0.2 → openbot_data-0.0.3}/tests/fixtures/lerobot-v3/meta/episodes/chunk-000/file-000.jsonl +0 -0
  117. {openbot_data-0.0.2 → openbot_data-0.0.3}/tests/fixtures/lerobot-v3/meta/info.json +0 -0
  118. {openbot_data-0.0.2 → openbot_data-0.0.3}/tests/test_preflight.py +0 -0
@@ -0,0 +1,103 @@
1
+ # Changelog
2
+
3
+ ## 0.0.3 - 2026-07-28
4
+
5
+ ### Added
6
+ - Explicit immutable LeRobot v2.1 and v3.0 adapters, including read-only v2.1
7
+ migration guidance and direct stable-contract validation without importing
8
+ the full LeRobot package.
9
+ - Layered collect-all metadata, schema, data, media, alignment, statistics, and
10
+ provenance validation with declared capability coverage.
11
+ - Portable `openbot.dataset_snapshot.v1` identities and strict semantic
12
+ `openbot.dataset_diff.v1` classification.
13
+ - Revision-pinned Hugging Face resolution with hard byte/shard/episode/media
14
+ budgets and explicit metadata/sample/full coverage.
15
+ - Built-in LeRobot core, common training, Hub publication, ACT, and SmolVLA
16
+ readiness profiles plus strict policy-config overrides and deterministic
17
+ JSON/Markdown gates.
18
+ - Actionable-location triage and raw advisory evidence for flatline actions,
19
+ zero-variance state, duplicate episodes, and camera/task imbalance, including
20
+ non-executing synchronized idle-trim plans and no aggregate dataset score.
21
+ - Deterministic repair plans, copy-on-write allowlisted metadata repair, and
22
+ verified receipts with stale-source and partial-destination protection.
23
+ - Four-way merge compatibility plans and post-operation verification for the
24
+ pinned official `lerobot-edit-dataset` merge.
25
+ - Optional pinned official LeRobot loader smoke tests in repair and merge CLI
26
+ verification.
27
+ - Pinned `lerobot-doctor==0.2.0` and `robovet==0.2.2` outcome-comparison
28
+ evidence for the critical stale-frame-counter workflow.
29
+ - Python 3.9–3.12 CI and local matrix coverage for the Parquet and Hub extras,
30
+ preventing optional-feature tests from being silently skipped.
31
+ - A separate Python 3.12 conformance job that creates and finalizes a real
32
+ shared-shard video dataset with `lerobot[dataset]==0.6.0`, then proves full
33
+ audit, ACT/SmolVLA readiness, quantile/unknown-field compatibility, and
34
+ official first/middle/last loader access.
35
+ - `build_catalog_evidence()` and the `catalog-evidence` CLI command for a
36
+ score-free, versioned handoff from one prepared local audit to OpenBot
37
+ Catalog.
38
+ - The packaged `catalog-evidence-v1` JSON Schema, deterministic cross-language
39
+ typed-tree fingerprint, portable source identity, coverage, evidence maturity,
40
+ facts, findings, and unresolved-check reporting.
41
+ - A versioned `openbot.dataset_catalog.v1` JSON catalog schema and shared
42
+ immutable-snapshot rendering across inspect, audit, and catalog output.
43
+ - Structured findings for malformed episode lengths, duplicate indexes, invalid
44
+ video relations and paths, segment bounds/overlap/duration, and explicit
45
+ symlink skip/broken states.
46
+
47
+ ### Changed
48
+ - V3 data-shard episode ranges are validated as dataset-global offsets, matching
49
+ the official multi-shard LeRobot 0.6.0 writer and merge tool.
50
+ - Canonical video features are no longer incorrectly required as data-Parquet
51
+ columns; LeRobot v3 stores them in `videos/**`.
52
+ - Snapshot Schema accepts the official writer's `names: null` standard-column
53
+ contract while retaining strict component and top-level fingerprints.
54
+ - `sample` integrity now probes deterministic start, middle, and end positions
55
+ while preserving the existing manifest v1 decoded-count projection and
56
+ fingerprint behavior.
57
+ - LeRobot v2.1 and v3 discovery now checks every declared camera for every
58
+ episode and validates shared-video segment bounds with a one-frame duration
59
+ tolerance.
60
+ - Caller-supplied snapshots are validated against the requested root, resolved
61
+ input format, checksum coverage, integrity coverage, and symlink policy before
62
+ any renderer writes output.
63
+
64
+ ### Documentation
65
+ - Defined the complete `0.0.3` feature and release contract, including the
66
+ canonical P0 feature map, public artifacts and commands, implementation
67
+ checkpoint, integrity/coverage semantics, uniform exit classes, scope
68
+ boundaries, implementation order, and release acceptance criteria.
69
+
70
+ ## 0.0.2
71
+
72
+ ### Added
73
+ - Single-source package versioning with CI and release-tag validation.
74
+ - Versioned, reproducible `openbot.dataset_manifest.v1` output with relative paths,
75
+ dataset fingerprints, and optional SHA-256 checksums.
76
+ - Read-only local LeRobot v2.1/v3 discovery for episodes and video streams.
77
+ - Deterministic dataset audit findings, duplicate detection, and `audit` CLI command.
78
+ - Runnable local preflight demo, developer documentation, API/CLI reference, and
79
+ shipped LeRobot acceptance fixtures.
80
+ - Acceptance scenarios for every documented finding code and a local Python
81
+ 3.9–3.12 test-matrix command.
82
+
83
+ ### Changed
84
+ - `inspect` now supports `--format auto|video|lerobot` and optional checksums.
85
+ - Unreadable media now continues through the specific FPS, duration, dimensions,
86
+ and preview-decode audit rules instead of stopping at the generic finding.
87
+
88
+ ## 0.0.1.post2
89
+
90
+ ### Added
91
+ - `export_catalog()` Python API and `openbot-data catalog` CLI command for JSON/CSV catalog export.
92
+ - SEO-optimized README and `pyproject.toml` keywords (`robot data`, `ego data`, `egocentric data`, `embodied AI`, etc.).
93
+ - GitHub Actions CI workflow for Python 3.9–3.12.
94
+ - This changelog.
95
+
96
+ ## 0.0.1.post1
97
+
98
+ ### Added
99
+ - Initial preview release.
100
+ - Video directory scanning and metadata extraction.
101
+ - Preview frame extraction.
102
+ - Manifest and report generation.
103
+ - `openbot-data` CLI with `scan`, `inspect`, and `version` commands.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: openbot-data
3
- Version: 0.0.2
3
+ Version: 0.0.3
4
4
  Summary: Inspect robot video datasets and generate manifests, previews, and catalogs.
5
5
  Project-URL: Homepage, https://openbot.ai/data
6
6
  Project-URL: Documentation, https://openbot.ai/api/docs#data-recipe
@@ -22,17 +22,19 @@ Classifier: Programming Language :: Python :: 3.12
22
22
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
23
23
  Classifier: Topic :: Scientific/Engineering :: Image Processing
24
24
  Requires-Python: >=3.9
25
+ Requires-Dist: jsonschema>=4.18.0
25
26
  Requires-Dist: numpy>=1.24.0
26
27
  Requires-Dist: opencv-python>=4.8.0
27
28
  Requires-Dist: tqdm>=4.65.0
28
29
  Requires-Dist: typer>=0.9.0
29
30
  Provides-Extra: dev
30
31
  Requires-Dist: build>=1.0.0; extra == 'dev'
31
- Requires-Dist: jsonschema>=4.18.0; extra == 'dev'
32
32
  Requires-Dist: mypy<1.19,>=1.11.0; extra == 'dev'
33
- Requires-Dist: pytest>=7.0.0; extra == 'dev'
33
+ Requires-Dist: pytest>=8.2.0; extra == 'dev'
34
34
  Requires-Dist: ruff>=0.6.0; extra == 'dev'
35
35
  Requires-Dist: twine>=6.2.0; extra == 'dev'
36
+ Provides-Extra: hub
37
+ Requires-Dist: huggingface-hub>=0.27.0; extra == 'hub'
36
38
  Provides-Extra: lerobot
37
39
  Requires-Dist: pyarrow>=17.0.0; extra == 'lerobot'
38
40
  Description-Content-Type: text/markdown
@@ -58,7 +60,9 @@ evaluation.
58
60
  pip install openbot-data
59
61
  ```
60
62
 
61
- Requires Python 3.9+.
63
+ PyPI currently installs the released `0.0.2` package. The source tree is the
64
+ `0.0.3` release candidate: its P0 interfaces and local release gates pass, but it
65
+ has not been published. Requires Python 3.9+.
62
66
 
63
67
  ## Runnable demo
64
68
 
@@ -87,6 +91,13 @@ one immutable `DatasetSnapshot` across both renderers.
87
91
  - **Export dataset catalogs** — JSON or CSV for dataset registries, documentation, and SEO-friendly catalog pages.
88
92
  - **Discover local LeRobot data** — read-only episode and video-stream discovery for v2.1/v3 layouts.
89
93
  - **Audit before training or upload** — stable error/warning codes without an uncalibrated quality score.
94
+ - **Snapshot and diff datasets** — portable component fingerprints and semantic change classes.
95
+ - **Gate ACT and SmolVLA readiness** — distinguish `READY`, `BLOCKED`, and incomplete `PARTIAL` evidence.
96
+ - **Audit pinned Hub revisions** — resolve branches/tags to immutable commits under hard download budgets.
97
+ - **Repair conservatively** — plan and apply only unambiguous derived metadata changes to a new copy.
98
+ - **Verify official merges** — check compatibility before merge, then reconcile lineage, loader, audit, and diff evidence.
99
+ - **Hand off score-free Catalog evidence** — emit versioned facts, coverage,
100
+ findings, and unresolved checks for server-side evaluation.
90
101
 
91
102
  ## CLI
92
103
 
@@ -128,11 +139,59 @@ openbot-data catalog ./robot_videos --out ./catalog.csv --format csv
128
139
  The catalog is designed to be checked into GitHub or linked from a dataset registry
129
140
  page such as [OpenBot.ai Datasets](https://openbot.ai/datasets).
130
141
 
142
+ ### Build Catalog evidence from a completed local audit
143
+
144
+ ```bash
145
+ openbot-data catalog-evidence ./robot_videos \
146
+ --dataset-id org/dataset \
147
+ --checked-at 2026-07-28T12:00:00Z \
148
+ --out ./catalog-evidence.json
149
+ ```
150
+
151
+ The artifact contains no Overall score or normalized dimension score. OpenBot
152
+ Catalog remains responsible for evaluation, review, and publication.
153
+
154
+ ### Snapshot, diff, and readiness
155
+
156
+ ```bash
157
+ openbot-data snapshot ./lerobot_dataset \
158
+ --format lerobot --integrity full --out ./dataset.snapshot.json
159
+
160
+ openbot-data diff ./baseline.snapshot.json ./dataset.snapshot.json \
161
+ --out ./dataset.diff.json --fail-on breaking
162
+
163
+ openbot-data readiness ./lerobot_dataset \
164
+ --profile lerobot-smolvla --integrity full \
165
+ --out ./readiness.json --markdown ./readiness.md
166
+ ```
167
+
168
+ ### Repair and merge verification
169
+
170
+ ```bash
171
+ openbot-data repair plan ./dataset --integrity full --out ./repair.plan.json
172
+ openbot-data repair apply ./dataset \
173
+ --plan ./repair.plan.json --output ./dataset.repaired
174
+
175
+ openbot-data merge-check ./dataset-a ./dataset-b --out ./merge.plan.json
176
+ openbot-data verify-merge ./merged \
177
+ --input ./dataset-a.snapshot.json \
178
+ --input ./dataset-b.snapshot.json \
179
+ --operation-record ./official-operation.json \
180
+ --out ./merge.receipt.json
181
+ ```
182
+
183
+ Physical merge stays with `lerobot-edit-dataset` from
184
+ `lerobot[dataset]==0.6.0`; OpenBot only plans and verifies it.
185
+
131
186
  ## Python API
132
187
 
133
188
  ```python
134
189
  from openbot_data import (
135
190
  audit_dataset,
191
+ build_catalog_evidence,
192
+ build_dataset_snapshot,
193
+ diff_dataset_snapshots,
194
+ evaluate_dataset_readiness,
136
195
  export_catalog,
137
196
  inspect_dataset,
138
197
  prepare_dataset,
@@ -168,6 +227,27 @@ audit = audit_dataset("./robot_videos", snapshot=snapshot)
168
227
  # Discover episodes and camera streams in a local LeRobot repository
169
228
  lerobot = read_lerobot("./lerobot_dataset")
170
229
 
230
+ # Produce score-free evidence for server-side Catalog evaluation
231
+ evidence = build_catalog_evidence(
232
+ "./robot_videos",
233
+ dataset_id="org/dataset",
234
+ checked_at="2026-07-28T12:00:00Z",
235
+ output_path="./catalog-evidence.json",
236
+ )
237
+
238
+ portable = build_dataset_snapshot(
239
+ "./lerobot_dataset",
240
+ input_format="lerobot",
241
+ integrity="full",
242
+ )
243
+ readiness = evaluate_dataset_readiness(
244
+ "./lerobot_dataset",
245
+ profile="lerobot-act",
246
+ integrity="full",
247
+ dataset_snapshot=portable,
248
+ )
249
+ change = diff_dataset_snapshots(portable, portable)
250
+
171
251
  # Packaged JSON Schemas are stable independently of the package version
172
252
  with schema_path("manifest") as manifest_schema:
173
253
  print(manifest_schema)
@@ -200,11 +280,14 @@ and `CHANGELOG.md`, verify locally, then publish a GitHub Release whose tag is
200
280
 
201
281
  ## Status
202
282
 
203
- OpenBot Data is an early local Python toolkit. Hosted upload, annotation, review,
204
- export, billing, Workers, and Container infrastructure belong to the main
205
- [OpenBot](https://github.com/openbotai/OpenBot) product repository. Use the
206
- separate [`openbot-sdk`](https://github.com/openbotai/openbot-sdk) package to call
207
- the hosted API.
283
+ The released PyPI package is `0.0.2`; the current source version is `0.0.3` and
284
+ its local release gate passes. No tag, GitHub Release, or PyPI publication has
285
+ been performed. OpenBot Data remains an early local Python toolkit. Hosted upload,
286
+ annotation, review, export, billing, Workers, and Container infrastructure
287
+ belong to the main [OpenBot](https://github.com/openbotai/OpenBot) product
288
+ repository. Use the separate
289
+ [`openbot-sdk`](https://github.com/openbotai/openbot-sdk) package to call the
290
+ hosted API.
208
291
 
209
292
  ## Roadmap
210
293
 
@@ -214,10 +297,20 @@ the hosted API.
214
297
  - [x] JSON/CSV catalog export
215
298
  - [x] [`0.0.2`: local dataset preflight](docs/version-0.0.2.md), including a
216
299
  versioned manifest, deterministic audit findings, and local LeRobot discovery
217
- - [ ] Later: RLDS / HDF5 ingestion helpers
218
- - [ ] Later: calibrated quality evaluation after a labeled validation set exists
300
+ - [x] [`0.0.3`: LeRobot compatibility and dataset change control](docs/version-0.0.3.md),
301
+ with correctness closure, explicit v2.1/v3 adapters, layered validation,
302
+ portable snapshots, semantic diff, revision-pinned Hub audit, readiness
303
+ profiles, evidence triage, conservative repair, and merge verification.
304
+ P0 interfaces, the package version, clean install, Python matrix,
305
+ artifacts, official conformance, and local release checks pass. Public
306
+ release remains a separate explicit action.
307
+ - [ ] Later: read-only robomimic/HDF5 and RLDS/Open X adapters
308
+ - [ ] Later: advanced episode-quality signals and any aggregate score only after
309
+ labeled downstream validation exists
219
310
 
220
311
  Audit codes are documented in [`docs/audit-findings.md`](docs/audit-findings.md).
312
+ The research and differentiation decisions behind `0.0.3` are documented in
313
+ [`docs/reference-libraries.md`](docs/reference-libraries.md).
221
314
  Canonical manifests use explicit `path_base`/`path_bases` fields; they never
222
315
  serialize private source paths. Symlinks are skipped by default, and even when
223
316
  `follow_symlinks=True` a target outside the dataset root is rejected.
@@ -19,7 +19,9 @@ evaluation.
19
19
  pip install openbot-data
20
20
  ```
21
21
 
22
- Requires Python 3.9+.
22
+ PyPI currently installs the released `0.0.2` package. The source tree is the
23
+ `0.0.3` release candidate: its P0 interfaces and local release gates pass, but it
24
+ has not been published. Requires Python 3.9+.
23
25
 
24
26
  ## Runnable demo
25
27
 
@@ -48,6 +50,13 @@ one immutable `DatasetSnapshot` across both renderers.
48
50
  - **Export dataset catalogs** — JSON or CSV for dataset registries, documentation, and SEO-friendly catalog pages.
49
51
  - **Discover local LeRobot data** — read-only episode and video-stream discovery for v2.1/v3 layouts.
50
52
  - **Audit before training or upload** — stable error/warning codes without an uncalibrated quality score.
53
+ - **Snapshot and diff datasets** — portable component fingerprints and semantic change classes.
54
+ - **Gate ACT and SmolVLA readiness** — distinguish `READY`, `BLOCKED`, and incomplete `PARTIAL` evidence.
55
+ - **Audit pinned Hub revisions** — resolve branches/tags to immutable commits under hard download budgets.
56
+ - **Repair conservatively** — plan and apply only unambiguous derived metadata changes to a new copy.
57
+ - **Verify official merges** — check compatibility before merge, then reconcile lineage, loader, audit, and diff evidence.
58
+ - **Hand off score-free Catalog evidence** — emit versioned facts, coverage,
59
+ findings, and unresolved checks for server-side evaluation.
51
60
 
52
61
  ## CLI
53
62
 
@@ -89,11 +98,59 @@ openbot-data catalog ./robot_videos --out ./catalog.csv --format csv
89
98
  The catalog is designed to be checked into GitHub or linked from a dataset registry
90
99
  page such as [OpenBot.ai Datasets](https://openbot.ai/datasets).
91
100
 
101
+ ### Build Catalog evidence from a completed local audit
102
+
103
+ ```bash
104
+ openbot-data catalog-evidence ./robot_videos \
105
+ --dataset-id org/dataset \
106
+ --checked-at 2026-07-28T12:00:00Z \
107
+ --out ./catalog-evidence.json
108
+ ```
109
+
110
+ The artifact contains no Overall score or normalized dimension score. OpenBot
111
+ Catalog remains responsible for evaluation, review, and publication.
112
+
113
+ ### Snapshot, diff, and readiness
114
+
115
+ ```bash
116
+ openbot-data snapshot ./lerobot_dataset \
117
+ --format lerobot --integrity full --out ./dataset.snapshot.json
118
+
119
+ openbot-data diff ./baseline.snapshot.json ./dataset.snapshot.json \
120
+ --out ./dataset.diff.json --fail-on breaking
121
+
122
+ openbot-data readiness ./lerobot_dataset \
123
+ --profile lerobot-smolvla --integrity full \
124
+ --out ./readiness.json --markdown ./readiness.md
125
+ ```
126
+
127
+ ### Repair and merge verification
128
+
129
+ ```bash
130
+ openbot-data repair plan ./dataset --integrity full --out ./repair.plan.json
131
+ openbot-data repair apply ./dataset \
132
+ --plan ./repair.plan.json --output ./dataset.repaired
133
+
134
+ openbot-data merge-check ./dataset-a ./dataset-b --out ./merge.plan.json
135
+ openbot-data verify-merge ./merged \
136
+ --input ./dataset-a.snapshot.json \
137
+ --input ./dataset-b.snapshot.json \
138
+ --operation-record ./official-operation.json \
139
+ --out ./merge.receipt.json
140
+ ```
141
+
142
+ Physical merge stays with `lerobot-edit-dataset` from
143
+ `lerobot[dataset]==0.6.0`; OpenBot only plans and verifies it.
144
+
92
145
  ## Python API
93
146
 
94
147
  ```python
95
148
  from openbot_data import (
96
149
  audit_dataset,
150
+ build_catalog_evidence,
151
+ build_dataset_snapshot,
152
+ diff_dataset_snapshots,
153
+ evaluate_dataset_readiness,
97
154
  export_catalog,
98
155
  inspect_dataset,
99
156
  prepare_dataset,
@@ -129,6 +186,27 @@ audit = audit_dataset("./robot_videos", snapshot=snapshot)
129
186
  # Discover episodes and camera streams in a local LeRobot repository
130
187
  lerobot = read_lerobot("./lerobot_dataset")
131
188
 
189
+ # Produce score-free evidence for server-side Catalog evaluation
190
+ evidence = build_catalog_evidence(
191
+ "./robot_videos",
192
+ dataset_id="org/dataset",
193
+ checked_at="2026-07-28T12:00:00Z",
194
+ output_path="./catalog-evidence.json",
195
+ )
196
+
197
+ portable = build_dataset_snapshot(
198
+ "./lerobot_dataset",
199
+ input_format="lerobot",
200
+ integrity="full",
201
+ )
202
+ readiness = evaluate_dataset_readiness(
203
+ "./lerobot_dataset",
204
+ profile="lerobot-act",
205
+ integrity="full",
206
+ dataset_snapshot=portable,
207
+ )
208
+ change = diff_dataset_snapshots(portable, portable)
209
+
132
210
  # Packaged JSON Schemas are stable independently of the package version
133
211
  with schema_path("manifest") as manifest_schema:
134
212
  print(manifest_schema)
@@ -161,11 +239,14 @@ and `CHANGELOG.md`, verify locally, then publish a GitHub Release whose tag is
161
239
 
162
240
  ## Status
163
241
 
164
- OpenBot Data is an early local Python toolkit. Hosted upload, annotation, review,
165
- export, billing, Workers, and Container infrastructure belong to the main
166
- [OpenBot](https://github.com/openbotai/OpenBot) product repository. Use the
167
- separate [`openbot-sdk`](https://github.com/openbotai/openbot-sdk) package to call
168
- the hosted API.
242
+ The released PyPI package is `0.0.2`; the current source version is `0.0.3` and
243
+ its local release gate passes. No tag, GitHub Release, or PyPI publication has
244
+ been performed. OpenBot Data remains an early local Python toolkit. Hosted upload,
245
+ annotation, review, export, billing, Workers, and Container infrastructure
246
+ belong to the main [OpenBot](https://github.com/openbotai/OpenBot) product
247
+ repository. Use the separate
248
+ [`openbot-sdk`](https://github.com/openbotai/openbot-sdk) package to call the
249
+ hosted API.
169
250
 
170
251
  ## Roadmap
171
252
 
@@ -175,10 +256,20 @@ the hosted API.
175
256
  - [x] JSON/CSV catalog export
176
257
  - [x] [`0.0.2`: local dataset preflight](docs/version-0.0.2.md), including a
177
258
  versioned manifest, deterministic audit findings, and local LeRobot discovery
178
- - [ ] Later: RLDS / HDF5 ingestion helpers
179
- - [ ] Later: calibrated quality evaluation after a labeled validation set exists
259
+ - [x] [`0.0.3`: LeRobot compatibility and dataset change control](docs/version-0.0.3.md),
260
+ with correctness closure, explicit v2.1/v3 adapters, layered validation,
261
+ portable snapshots, semantic diff, revision-pinned Hub audit, readiness
262
+ profiles, evidence triage, conservative repair, and merge verification.
263
+ P0 interfaces, the package version, clean install, Python matrix,
264
+ artifacts, official conformance, and local release checks pass. Public
265
+ release remains a separate explicit action.
266
+ - [ ] Later: read-only robomimic/HDF5 and RLDS/Open X adapters
267
+ - [ ] Later: advanced episode-quality signals and any aggregate score only after
268
+ labeled downstream validation exists
180
269
 
181
270
  Audit codes are documented in [`docs/audit-findings.md`](docs/audit-findings.md).
271
+ The research and differentiation decisions behind `0.0.3` are documented in
272
+ [`docs/reference-libraries.md`](docs/reference-libraries.md).
182
273
  Canonical manifests use explicit `path_base`/`path_bases` fields; they never
183
274
  serialize private source paths. Symlinks are skipped by default, and even when
184
275
  `follow_symlinks=True` a target outside the dataset root is rejected.
@@ -0,0 +1 @@
1
+ 0.0.3
@@ -0,0 +1,36 @@
1
+ # OpenBot Data documentation
2
+
3
+ OpenBot Data is a local, open-source Python library. It inspects robot-video
4
+ directories and local LeRobot v2.1/v3 repositories before training or upload. It
5
+ does not call the Hosted OpenBot API.
6
+
7
+ ## Start here
8
+
9
+ - [Getting started](getting-started.md): installation, CLI, Python workflow, and
10
+ the runnable demo.
11
+ - [API reference](api-reference.md): public Python functions, CLI commands,
12
+ parameters, return values, and failure behavior.
13
+ - [Audit finding codes](audit-findings.md): stable machine-readable validation
14
+ codes and severities.
15
+ - [0.0.2 release contract](version-0.0.2.md): scope and acceptance criteria.
16
+ - [0.0.3 feature and release contract](version-0.0.3.md): the complete required
17
+ feature map, public artifacts and commands, LeRobot compatibility, readiness,
18
+ remediation, merge safety, snapshots, semantic diff, current implementation
19
+ checkpoint, and release acceptance criteria.
20
+ - [Reference libraries and differentiation](reference-libraries.md):
21
+ LeRobot, `lerobot-doctor`, `robovet`, and adjacent-library decisions.
22
+ - [Canonical manifest](examples/manifest.json) and
23
+ [canonical audit](examples/audit.json): released v1 examples without local
24
+ machine paths.
25
+ - [0.0.3 artifact examples](examples/v0.0.3/README.md): generated snapshot,
26
+ diff, readiness, Catalog evidence, repair, and merge contracts.
27
+
28
+ ## Capability boundary
29
+
30
+ This repository owns local and revision-pinned Hub preflight, media inspection,
31
+ deterministic manifests/audits/snapshots/diffs, readiness gates, conservative
32
+ copy-on-write metadata repair, official-operation verification, catalog export,
33
+ and the score-free Catalog evidence handoff. Catalog scoring, candidate review,
34
+ publication, uploads, API keys, asynchronous processing, hosted artifacts,
35
+ retention, and billing belong to the main OpenBot service and are called through
36
+ `openbot-sdk`.