kuration-sdk 0.1.0__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 (373) hide show
  1. kuration_sdk-0.1.0/CHANGELOG.md +304 -0
  2. kuration_sdk-0.1.0/CONTRIBUTING.md +422 -0
  3. kuration_sdk-0.1.0/GOVERNANCE.md +33 -0
  4. kuration_sdk-0.1.0/LICENSE +201 -0
  5. kuration_sdk-0.1.0/MANIFEST.in +12 -0
  6. kuration_sdk-0.1.0/PKG-INFO +629 -0
  7. kuration_sdk-0.1.0/README.md +467 -0
  8. kuration_sdk-0.1.0/ROADMAP.md +112 -0
  9. kuration_sdk-0.1.0/SECURITY.md +37 -0
  10. kuration_sdk-0.1.0/SUPPORT.md +27 -0
  11. kuration_sdk-0.1.0/docs/action-state-consistency.md +383 -0
  12. kuration_sdk-0.1.0/docs/adapters.md +244 -0
  13. kuration_sdk-0.1.0/docs/api.md +509 -0
  14. kuration_sdk-0.1.0/docs/architecture.md +358 -0
  15. kuration_sdk-0.1.0/docs/assets/curation-flow.svg +18 -0
  16. kuration_sdk-0.1.0/docs/assets/kuration-hero.svg +16 -0
  17. kuration_sdk-0.1.0/docs/assets/operator-composition.svg +13 -0
  18. kuration_sdk-0.1.0/docs/assets/stylesheets/extra.css +51 -0
  19. kuration_sdk-0.1.0/docs/changelog.md +1 -0
  20. kuration_sdk-0.1.0/docs/collision.md +273 -0
  21. kuration_sdk-0.1.0/docs/community.md +25 -0
  22. kuration_sdk-0.1.0/docs/compatibility.md +40 -0
  23. kuration_sdk-0.1.0/docs/contributing.md +1 -0
  24. kuration_sdk-0.1.0/docs/customization.md +201 -0
  25. kuration_sdk-0.1.0/docs/documentation-contract.md +245 -0
  26. kuration_sdk-0.1.0/docs/domains.md +133 -0
  27. kuration_sdk-0.1.0/docs/dsl.md +116 -0
  28. kuration_sdk-0.1.0/docs/governance.md +1 -0
  29. kuration_sdk-0.1.0/docs/index.md +64 -0
  30. kuration_sdk-0.1.0/docs/jobs.md +330 -0
  31. kuration_sdk-0.1.0/docs/operator-inventory.md +153 -0
  32. kuration_sdk-0.1.0/docs/operators.md +388 -0
  33. kuration_sdk-0.1.0/docs/output.md +292 -0
  34. kuration_sdk-0.1.0/docs/overview.md +152 -0
  35. kuration_sdk-0.1.0/docs/pipeline.md +455 -0
  36. kuration_sdk-0.1.0/docs/pixel-shift.md +263 -0
  37. kuration_sdk-0.1.0/docs/quickstart.md +178 -0
  38. kuration_sdk-0.1.0/docs/releases.md +85 -0
  39. kuration_sdk-0.1.0/docs/releasing.md +58 -0
  40. kuration_sdk-0.1.0/docs/roadmap.md +1 -0
  41. kuration_sdk-0.1.0/docs/schema.md +103 -0
  42. kuration_sdk-0.1.0/docs/security.md +1 -0
  43. kuration_sdk-0.1.0/docs/selection.md +117 -0
  44. kuration_sdk-0.1.0/docs/slam.md +235 -0
  45. kuration_sdk-0.1.0/docs/strategies.md +227 -0
  46. kuration_sdk-0.1.0/docs/support.md +1 -0
  47. kuration_sdk-0.1.0/docs/usage.md +575 -0
  48. kuration_sdk-0.1.0/examples/01_timeseries_to_shards.py +70 -0
  49. kuration_sdk-0.1.0/examples/02_robotics_action_aware.py +83 -0
  50. kuration_sdk-0.1.0/examples/03_compare_strategies.py +61 -0
  51. kuration_sdk-0.1.0/examples/04_operator_pipeline.py +84 -0
  52. kuration_sdk-0.1.0/examples/05_custom_operators.py +88 -0
  53. kuration_sdk-0.1.0/examples/06_gameplay_operator_methods.py +76 -0
  54. kuration_sdk-0.1.0/examples/07_action_state_consistency.py +143 -0
  55. kuration_sdk-0.1.0/examples/README.md +53 -0
  56. kuration_sdk-0.1.0/examples/notebooks/gameplay_stats.ipynb +205 -0
  57. kuration_sdk-0.1.0/examples/notebooks/slam_kurious.ipynb +119 -0
  58. kuration_sdk-0.1.0/examples/public_data/__init__.py +1 -0
  59. kuration_sdk-0.1.0/examples/public_data/adapters/__init__.py +1 -0
  60. kuration_sdk-0.1.0/examples/public_data/adapters/open_p2p.py +255 -0
  61. kuration_sdk-0.1.0/examples/public_data/adapters/teapearce.py +197 -0
  62. kuration_sdk-0.1.0/examples/public_data/ett.md +99 -0
  63. kuration_sdk-0.1.0/examples/public_data/ett.py +170 -0
  64. kuration_sdk-0.1.0/examples/public_data/open_p2p.md +105 -0
  65. kuration_sdk-0.1.0/examples/public_data/open_p2p.py +119 -0
  66. kuration_sdk-0.1.0/examples/public_data/person_activity.md +138 -0
  67. kuration_sdk-0.1.0/examples/public_data/person_activity.py +242 -0
  68. kuration_sdk-0.1.0/examples/public_data/teapearce_csgo.md +111 -0
  69. kuration_sdk-0.1.0/examples/public_data/teapearce_csgo.py +137 -0
  70. kuration_sdk-0.1.0/examples/quickstart.py +87 -0
  71. kuration_sdk-0.1.0/mkdocs.yml +100 -0
  72. kuration_sdk-0.1.0/pyproject.toml +252 -0
  73. kuration_sdk-0.1.0/scripts/execute_notebook.py +34 -0
  74. kuration_sdk-0.1.0/setup.cfg +4 -0
  75. kuration_sdk-0.1.0/src/kuration/__init__.py +16 -0
  76. kuration_sdk-0.1.0/src/kuration/core/__init__.py +180 -0
  77. kuration_sdk-0.1.0/src/kuration/core/_pipeline_support.py +182 -0
  78. kuration_sdk-0.1.0/src/kuration/core/_registration.py +15 -0
  79. kuration_sdk-0.1.0/src/kuration/core/adapters/__init__.py +18 -0
  80. kuration_sdk-0.1.0/src/kuration/core/adapters/base.py +248 -0
  81. kuration_sdk-0.1.0/src/kuration/core/adapters/curated.py +208 -0
  82. kuration_sdk-0.1.0/src/kuration/core/adapters/hdf5.py +115 -0
  83. kuration_sdk-0.1.0/src/kuration/core/adapters/huggingface.py +171 -0
  84. kuration_sdk-0.1.0/src/kuration/core/adapters/jsonl.py +47 -0
  85. kuration_sdk-0.1.0/src/kuration/core/adapters/npz.py +89 -0
  86. kuration_sdk-0.1.0/src/kuration/core/adapters/parquet_dataset.py +137 -0
  87. kuration_sdk-0.1.0/src/kuration/core/adapters/timeseries.py +220 -0
  88. kuration_sdk-0.1.0/src/kuration/core/adapters/zarr_store.py +129 -0
  89. kuration_sdk-0.1.0/src/kuration/core/analyzers.py +540 -0
  90. kuration_sdk-0.1.0/src/kuration/core/binning.py +63 -0
  91. kuration_sdk-0.1.0/src/kuration/core/bounded.py +362 -0
  92. kuration_sdk-0.1.0/src/kuration/core/buffer.py +134 -0
  93. kuration_sdk-0.1.0/src/kuration/core/builtin_operators.py +358 -0
  94. kuration_sdk-0.1.0/src/kuration/core/checkpoints.py +419 -0
  95. kuration_sdk-0.1.0/src/kuration/core/cli/__init__.py +1 -0
  96. kuration_sdk-0.1.0/src/kuration/core/cli/_common.py +277 -0
  97. kuration_sdk-0.1.0/src/kuration/core/cli/check.py +124 -0
  98. kuration_sdk-0.1.0/src/kuration/core/cli/checkpoint.py +534 -0
  99. kuration_sdk-0.1.0/src/kuration/core/cli/curate.py +147 -0
  100. kuration_sdk-0.1.0/src/kuration/core/cli/diff.py +47 -0
  101. kuration_sdk-0.1.0/src/kuration/core/cli/discovery.py +65 -0
  102. kuration_sdk-0.1.0/src/kuration/core/cli/experiment.py +100 -0
  103. kuration_sdk-0.1.0/src/kuration/core/cli/explain.py +135 -0
  104. kuration_sdk-0.1.0/src/kuration/core/cli/export.py +335 -0
  105. kuration_sdk-0.1.0/src/kuration/core/cli/import_dataset.py +103 -0
  106. kuration_sdk-0.1.0/src/kuration/core/cli/infer_schema_cli.py +122 -0
  107. kuration_sdk-0.1.0/src/kuration/core/cli/init_job.py +148 -0
  108. kuration_sdk-0.1.0/src/kuration/core/cli/inspect.py +77 -0
  109. kuration_sdk-0.1.0/src/kuration/core/cli/job.py +218 -0
  110. kuration_sdk-0.1.0/src/kuration/core/cli/main.py +179 -0
  111. kuration_sdk-0.1.0/src/kuration/core/cli/migrate.py +38 -0
  112. kuration_sdk-0.1.0/src/kuration/core/cli/plugin_check.py +39 -0
  113. kuration_sdk-0.1.0/src/kuration/core/cli/preview.py +133 -0
  114. kuration_sdk-0.1.0/src/kuration/core/cli/report.py +111 -0
  115. kuration_sdk-0.1.0/src/kuration/core/cli/stats.py +80 -0
  116. kuration_sdk-0.1.0/src/kuration/core/cli/validate.py +123 -0
  117. kuration_sdk-0.1.0/src/kuration/core/columnar.py +232 -0
  118. kuration_sdk-0.1.0/src/kuration/core/curate.py +120 -0
  119. kuration_sdk-0.1.0/src/kuration/core/dsl/__init__.py +5 -0
  120. kuration_sdk-0.1.0/src/kuration/core/dsl/grammar.py +597 -0
  121. kuration_sdk-0.1.0/src/kuration/core/dsl/registry.py +42 -0
  122. kuration_sdk-0.1.0/src/kuration/core/execution.py +119 -0
  123. kuration_sdk-0.1.0/src/kuration/core/experiment.py +246 -0
  124. kuration_sdk-0.1.0/src/kuration/core/external.py +622 -0
  125. kuration_sdk-0.1.0/src/kuration/core/features.py +86 -0
  126. kuration_sdk-0.1.0/src/kuration/core/html_report.py +46 -0
  127. kuration_sdk-0.1.0/src/kuration/core/importing.py +971 -0
  128. kuration_sdk-0.1.0/src/kuration/core/infer.py +388 -0
  129. kuration_sdk-0.1.0/src/kuration/core/inspection.py +210 -0
  130. kuration_sdk-0.1.0/src/kuration/core/io.py +589 -0
  131. kuration_sdk-0.1.0/src/kuration/core/jsonutil.py +57 -0
  132. kuration_sdk-0.1.0/src/kuration/core/loaders.py +918 -0
  133. kuration_sdk-0.1.0/src/kuration/core/manifest.py +627 -0
  134. kuration_sdk-0.1.0/src/kuration/core/media.py +447 -0
  135. kuration_sdk-0.1.0/src/kuration/core/methods.py +414 -0
  136. kuration_sdk-0.1.0/src/kuration/core/output/__init__.py +21 -0
  137. kuration_sdk-0.1.0/src/kuration/core/output/base.py +71 -0
  138. kuration_sdk-0.1.0/src/kuration/core/output/containers.py +176 -0
  139. kuration_sdk-0.1.0/src/kuration/core/output/dataset.py +694 -0
  140. kuration_sdk-0.1.0/src/kuration/core/output/external_fill.py +318 -0
  141. kuration_sdk-0.1.0/src/kuration/core/output/fill.py +217 -0
  142. kuration_sdk-0.1.0/src/kuration/core/output/presets.py +119 -0
  143. kuration_sdk-0.1.0/src/kuration/core/output/shardwriter.py +269 -0
  144. kuration_sdk-0.1.0/src/kuration/core/output/spec.py +268 -0
  145. kuration_sdk-0.1.0/src/kuration/core/output/stream.py +119 -0
  146. kuration_sdk-0.1.0/src/kuration/core/output/track.py +53 -0
  147. kuration_sdk-0.1.0/src/kuration/core/pipeline.py +2492 -0
  148. kuration_sdk-0.1.0/src/kuration/core/planning.py +410 -0
  149. kuration_sdk-0.1.0/src/kuration/core/plugin_validation.py +211 -0
  150. kuration_sdk-0.1.0/src/kuration/core/plugins.py +332 -0
  151. kuration_sdk-0.1.0/src/kuration/core/progress.py +144 -0
  152. kuration_sdk-0.1.0/src/kuration/core/provenance.py +495 -0
  153. kuration_sdk-0.1.0/src/kuration/core/quality.py +241 -0
  154. kuration_sdk-0.1.0/src/kuration/core/registry.py +623 -0
  155. kuration_sdk-0.1.0/src/kuration/core/report.py +212 -0
  156. kuration_sdk-0.1.0/src/kuration/core/results.py +363 -0
  157. kuration_sdk-0.1.0/src/kuration/core/review.py +389 -0
  158. kuration_sdk-0.1.0/src/kuration/core/schema.py +394 -0
  159. kuration_sdk-0.1.0/src/kuration/core/schemas/job.schema.json +224 -0
  160. kuration_sdk-0.1.0/src/kuration/core/scorers.py +260 -0
  161. kuration_sdk-0.1.0/src/kuration/core/scoring.py +394 -0
  162. kuration_sdk-0.1.0/src/kuration/core/segment.py +145 -0
  163. kuration_sdk-0.1.0/src/kuration/core/select.py +200 -0
  164. kuration_sdk-0.1.0/src/kuration/core/stats.py +1308 -0
  165. kuration_sdk-0.1.0/src/kuration/core/strategy.py +593 -0
  166. kuration_sdk-0.1.0/src/kuration/core/tags.py +54 -0
  167. kuration_sdk-0.1.0/src/kuration/core/torch.py +67 -0
  168. kuration_sdk-0.1.0/src/kuration/core/transforms.py +700 -0
  169. kuration_sdk-0.1.0/src/kuration/core/versioning.py +203 -0
  170. kuration_sdk-0.1.0/src/kuration/core/work_paths.py +119 -0
  171. kuration_sdk-0.1.0/src/kuration/gameplay/__init__.py +94 -0
  172. kuration_sdk-0.1.0/src/kuration/gameplay/_stats.py +486 -0
  173. kuration_sdk-0.1.0/src/kuration/gameplay/action_state_consistency/__init__.py +279 -0
  174. kuration_sdk-0.1.0/src/kuration/gameplay/action_state_consistency/action_state.py +554 -0
  175. kuration_sdk-0.1.0/src/kuration/gameplay/action_state_consistency/anomaly_checker.py +654 -0
  176. kuration_sdk-0.1.0/src/kuration/gameplay/collision/__init__.py +168 -0
  177. kuration_sdk-0.1.0/src/kuration/gameplay/collision/asg_adapter.py +129 -0
  178. kuration_sdk-0.1.0/src/kuration/gameplay/collision/collision_operator.py +400 -0
  179. kuration_sdk-0.1.0/src/kuration/gameplay/collision/directional_collision_analyzer.py +581 -0
  180. kuration_sdk-0.1.0/src/kuration/gameplay/collision/kinematics.py +85 -0
  181. kuration_sdk-0.1.0/src/kuration/gameplay/collision/mesh_cache.py +682 -0
  182. kuration_sdk-0.1.0/src/kuration/gameplay/collision/physics.py +107 -0
  183. kuration_sdk-0.1.0/src/kuration/gameplay/collision/ramp_fitting.py +148 -0
  184. kuration_sdk-0.1.0/src/kuration/gameplay/collision/teapearce_adapter.py +187 -0
  185. kuration_sdk-0.1.0/src/kuration/gameplay/convenience.py +102 -0
  186. kuration_sdk-0.1.0/src/kuration/gameplay/pixel_shift/__init__.py +87 -0
  187. kuration_sdk-0.1.0/src/kuration/gameplay/pixel_shift/diamond_action_decode.py +625 -0
  188. kuration_sdk-0.1.0/src/kuration/gameplay/pixel_shift/pixel_shift_operator.py +638 -0
  189. kuration_sdk-0.1.0/src/kuration/gameplay/slam/__init__.py +243 -0
  190. kuration_sdk-0.1.0/src/kuration/gameplay/slam/_paths.py +26 -0
  191. kuration_sdk-0.1.0/src/kuration/gameplay/slam/_runtime.py +1022 -0
  192. kuration_sdk-0.1.0/src/kuration/gameplay/slam/_vendor/__init__.py +1 -0
  193. kuration_sdk-0.1.0/src/kuration/gameplay/slam/_vendor/depth_anything_3/LICENSE +201 -0
  194. kuration_sdk-0.1.0/src/kuration/gameplay/slam/_vendor/depth_anything_3/NOTICE +20 -0
  195. kuration_sdk-0.1.0/src/kuration/gameplay/slam/_vendor/depth_anything_3/__init__.py +0 -0
  196. kuration_sdk-0.1.0/src/kuration/gameplay/slam/_vendor/depth_anything_3/api.py +455 -0
  197. kuration_sdk-0.1.0/src/kuration/gameplay/slam/_vendor/depth_anything_3/cfg.py +149 -0
  198. kuration_sdk-0.1.0/src/kuration/gameplay/slam/_vendor/depth_anything_3/configs/da3-base.yaml +45 -0
  199. kuration_sdk-0.1.0/src/kuration/gameplay/slam/_vendor/depth_anything_3/configs/da3-giant.yaml +71 -0
  200. kuration_sdk-0.1.0/src/kuration/gameplay/slam/_vendor/depth_anything_3/configs/da3-large.yaml +45 -0
  201. kuration_sdk-0.1.0/src/kuration/gameplay/slam/_vendor/depth_anything_3/configs/da3-small.yaml +45 -0
  202. kuration_sdk-0.1.0/src/kuration/gameplay/slam/_vendor/depth_anything_3/configs/da3metric-large.yaml +28 -0
  203. kuration_sdk-0.1.0/src/kuration/gameplay/slam/_vendor/depth_anything_3/configs/da3mono-large.yaml +28 -0
  204. kuration_sdk-0.1.0/src/kuration/gameplay/slam/_vendor/depth_anything_3/configs/da3nested-giant-large.yaml +10 -0
  205. kuration_sdk-0.1.0/src/kuration/gameplay/slam/_vendor/depth_anything_3/model/__init__.py +20 -0
  206. kuration_sdk-0.1.0/src/kuration/gameplay/slam/_vendor/depth_anything_3/model/cam_dec.py +45 -0
  207. kuration_sdk-0.1.0/src/kuration/gameplay/slam/_vendor/depth_anything_3/model/cam_enc.py +80 -0
  208. kuration_sdk-0.1.0/src/kuration/gameplay/slam/_vendor/depth_anything_3/model/da3.py +445 -0
  209. kuration_sdk-0.1.0/src/kuration/gameplay/slam/_vendor/depth_anything_3/model/dinov2/__init__.py +0 -0
  210. kuration_sdk-0.1.0/src/kuration/gameplay/slam/_vendor/depth_anything_3/model/dinov2/dinov2.py +64 -0
  211. kuration_sdk-0.1.0/src/kuration/gameplay/slam/_vendor/depth_anything_3/model/dinov2/layers/__init__.py +25 -0
  212. kuration_sdk-0.1.0/src/kuration/gameplay/slam/_vendor/depth_anything_3/model/dinov2/layers/attention.py +100 -0
  213. kuration_sdk-0.1.0/src/kuration/gameplay/slam/_vendor/depth_anything_3/model/dinov2/layers/block.py +143 -0
  214. kuration_sdk-0.1.0/src/kuration/gameplay/slam/_vendor/depth_anything_3/model/dinov2/layers/drop_path.py +35 -0
  215. kuration_sdk-0.1.0/src/kuration/gameplay/slam/_vendor/depth_anything_3/model/dinov2/layers/layer_scale.py +31 -0
  216. kuration_sdk-0.1.0/src/kuration/gameplay/slam/_vendor/depth_anything_3/model/dinov2/layers/mlp.py +40 -0
  217. kuration_sdk-0.1.0/src/kuration/gameplay/slam/_vendor/depth_anything_3/model/dinov2/layers/patch_embed.py +94 -0
  218. kuration_sdk-0.1.0/src/kuration/gameplay/slam/_vendor/depth_anything_3/model/dinov2/layers/rope.py +200 -0
  219. kuration_sdk-0.1.0/src/kuration/gameplay/slam/_vendor/depth_anything_3/model/dinov2/layers/swiglu_ffn.py +62 -0
  220. kuration_sdk-0.1.0/src/kuration/gameplay/slam/_vendor/depth_anything_3/model/dinov2/vision_transformer.py +458 -0
  221. kuration_sdk-0.1.0/src/kuration/gameplay/slam/_vendor/depth_anything_3/model/dpt.py +458 -0
  222. kuration_sdk-0.1.0/src/kuration/gameplay/slam/_vendor/depth_anything_3/model/dualdpt.py +488 -0
  223. kuration_sdk-0.1.0/src/kuration/gameplay/slam/_vendor/depth_anything_3/model/reference_view_selector.py +223 -0
  224. kuration_sdk-0.1.0/src/kuration/gameplay/slam/_vendor/depth_anything_3/model/utils/__init__.py +0 -0
  225. kuration_sdk-0.1.0/src/kuration/gameplay/slam/_vendor/depth_anything_3/model/utils/attention.py +109 -0
  226. kuration_sdk-0.1.0/src/kuration/gameplay/slam/_vendor/depth_anything_3/model/utils/block.py +81 -0
  227. kuration_sdk-0.1.0/src/kuration/gameplay/slam/_vendor/depth_anything_3/model/utils/head_utils.py +230 -0
  228. kuration_sdk-0.1.0/src/kuration/gameplay/slam/_vendor/depth_anything_3/model/utils/transform.py +208 -0
  229. kuration_sdk-0.1.0/src/kuration/gameplay/slam/_vendor/depth_anything_3/registry.py +49 -0
  230. kuration_sdk-0.1.0/src/kuration/gameplay/slam/_vendor/depth_anything_3/specs.py +45 -0
  231. kuration_sdk-0.1.0/src/kuration/gameplay/slam/_vendor/depth_anything_3/utils/__init__.py +0 -0
  232. kuration_sdk-0.1.0/src/kuration/gameplay/slam/_vendor/depth_anything_3/utils/alignment.py +163 -0
  233. kuration_sdk-0.1.0/src/kuration/gameplay/slam/_vendor/depth_anything_3/utils/constants.py +270 -0
  234. kuration_sdk-0.1.0/src/kuration/gameplay/slam/_vendor/depth_anything_3/utils/export.py +20 -0
  235. kuration_sdk-0.1.0/src/kuration/gameplay/slam/_vendor/depth_anything_3/utils/geometry.py +498 -0
  236. kuration_sdk-0.1.0/src/kuration/gameplay/slam/_vendor/depth_anything_3/utils/io/__init__.py +0 -0
  237. kuration_sdk-0.1.0/src/kuration/gameplay/slam/_vendor/depth_anything_3/utils/io/input_processor.py +501 -0
  238. kuration_sdk-0.1.0/src/kuration/gameplay/slam/_vendor/depth_anything_3/utils/io/output_processor.py +172 -0
  239. kuration_sdk-0.1.0/src/kuration/gameplay/slam/_vendor/depth_anything_3/utils/logger.py +82 -0
  240. kuration_sdk-0.1.0/src/kuration/gameplay/slam/_vendor/depth_anything_3/utils/parallel_utils.py +133 -0
  241. kuration_sdk-0.1.0/src/kuration/gameplay/slam/_vendor/depth_anything_3/utils/pose_align.py +347 -0
  242. kuration_sdk-0.1.0/src/kuration/gameplay/slam/_vendor/depth_anything_3/utils/ray_utils.py +524 -0
  243. kuration_sdk-0.1.0/src/kuration/gameplay/slam/adapter.py +181 -0
  244. kuration_sdk-0.1.0/src/kuration/gameplay/slam/cli.py +317 -0
  245. kuration_sdk-0.1.0/src/kuration/gameplay/slam/demo.py +84 -0
  246. kuration_sdk-0.1.0/src/kuration/gameplay/slam/export.py +420 -0
  247. kuration_sdk-0.1.0/src/kuration/gameplay/slam/motion.py +132 -0
  248. kuration_sdk-0.1.0/src/kuration/gameplay/slam/pointcloud.py +273 -0
  249. kuration_sdk-0.1.0/src/kuration/gameplay/slam/preflight.py +270 -0
  250. kuration_sdk-0.1.0/src/kuration/gameplay/slam/quality.py +227 -0
  251. kuration_sdk-0.1.0/src/kuration/gameplay/slam/runner.py +697 -0
  252. kuration_sdk-0.1.0/src/kuration/gameplay/slam/schema.py +52 -0
  253. kuration_sdk-0.1.0/src/kuration/gameplay/slam/viz.py +221 -0
  254. kuration_sdk-0.1.0/src/kuration/gameplay/slam/workflow.py +143 -0
  255. kuration_sdk-0.1.0/src/kuration/gameplay/video.py +325 -0
  256. kuration_sdk-0.1.0/src/kuration/py.typed +0 -0
  257. kuration_sdk-0.1.0/src/kuration/sample_data/__init__.py +19 -0
  258. kuration_sdk-0.1.0/src/kuration/sample_data/sessions/session-0.parquet +0 -0
  259. kuration_sdk-0.1.0/src/kuration/sample_data/sessions/session-1.parquet +0 -0
  260. kuration_sdk-0.1.0/src/kuration/sample_data/sessions/session-2.parquet +0 -0
  261. kuration_sdk-0.1.0/src/kuration/sample_data/sessions/session-3.parquet +0 -0
  262. kuration_sdk-0.1.0/src/kuration/sample_data/sessions/session-4.parquet +0 -0
  263. kuration_sdk-0.1.0/src/kuration/sample_data/sessions/session-5.parquet +0 -0
  264. kuration_sdk-0.1.0/src/kuration/selection/__init__.py +88 -0
  265. kuration_sdk-0.1.0/src/kuration/selection/operations.py +253 -0
  266. kuration_sdk-0.1.0/src/kuration/selection/operators.py +80 -0
  267. kuration_sdk-0.1.0/src/kuration/selection/plan.py +186 -0
  268. kuration_sdk-0.1.0/src/kuration_sdk.egg-info/PKG-INFO +629 -0
  269. kuration_sdk-0.1.0/src/kuration_sdk.egg-info/SOURCES.txt +371 -0
  270. kuration_sdk-0.1.0/src/kuration_sdk.egg-info/dependency_links.txt +1 -0
  271. kuration_sdk-0.1.0/src/kuration_sdk.egg-info/entry_points.txt +26 -0
  272. kuration_sdk-0.1.0/src/kuration_sdk.egg-info/requires.txt +159 -0
  273. kuration_sdk-0.1.0/src/kuration_sdk.egg-info/top_level.txt +1 -0
  274. kuration_sdk-0.1.0/tests/test_action_state_consistency.py +524 -0
  275. kuration_sdk-0.1.0/tests/test_adapters_tier1.py +145 -0
  276. kuration_sdk-0.1.0/tests/test_analyzer_registry.py +217 -0
  277. kuration_sdk-0.1.0/tests/test_anomaly_checker.py +461 -0
  278. kuration_sdk-0.1.0/tests/test_api_reference.py +224 -0
  279. kuration_sdk-0.1.0/tests/test_artifact_publication_safety.py +808 -0
  280. kuration_sdk-0.1.0/tests/test_audit_regressions.py +149 -0
  281. kuration_sdk-0.1.0/tests/test_bounded.py +147 -0
  282. kuration_sdk-0.1.0/tests/test_bounded_hours.py +100 -0
  283. kuration_sdk-0.1.0/tests/test_bounded_output.py +121 -0
  284. kuration_sdk-0.1.0/tests/test_bounded_path_safety.py +178 -0
  285. kuration_sdk-0.1.0/tests/test_breadth.py +107 -0
  286. kuration_sdk-0.1.0/tests/test_builtin_operators.py +117 -0
  287. kuration_sdk-0.1.0/tests/test_check_source.py +160 -0
  288. kuration_sdk-0.1.0/tests/test_checkpoint_cli_safety.py +219 -0
  289. kuration_sdk-0.1.0/tests/test_checkpoints.py +176 -0
  290. kuration_sdk-0.1.0/tests/test_cli.py +168 -0
  291. kuration_sdk-0.1.0/tests/test_cli_artifact_inprocess.py +217 -0
  292. kuration_sdk-0.1.0/tests/test_cli_authoring.py +550 -0
  293. kuration_sdk-0.1.0/tests/test_cli_discovery.py +44 -0
  294. kuration_sdk-0.1.0/tests/test_cli_output_hygiene.py +522 -0
  295. kuration_sdk-0.1.0/tests/test_cli_output_overlap_safety.py +310 -0
  296. kuration_sdk-0.1.0/tests/test_cli_strict_json.py +131 -0
  297. kuration_sdk-0.1.0/tests/test_collision_asg_adapter.py +67 -0
  298. kuration_sdk-0.1.0/tests/test_collision_directional.py +451 -0
  299. kuration_sdk-0.1.0/tests/test_collision_kinematics.py +91 -0
  300. kuration_sdk-0.1.0/tests/test_collision_mesh_cache.py +280 -0
  301. kuration_sdk-0.1.0/tests/test_collision_operator.py +324 -0
  302. kuration_sdk-0.1.0/tests/test_collision_physics.py +46 -0
  303. kuration_sdk-0.1.0/tests/test_collision_ramp_fitting.py +109 -0
  304. kuration_sdk-0.1.0/tests/test_collision_registration.py +112 -0
  305. kuration_sdk-0.1.0/tests/test_collision_teapearce_adapter.py +157 -0
  306. kuration_sdk-0.1.0/tests/test_columnar.py +57 -0
  307. kuration_sdk-0.1.0/tests/test_determinism_conformance.py +113 -0
  308. kuration_sdk-0.1.0/tests/test_diagnostic_privacy_and_scorer_consistency.py +325 -0
  309. kuration_sdk-0.1.0/tests/test_documentation_links.py +138 -0
  310. kuration_sdk-0.1.0/tests/test_example_open_p2p.py +52 -0
  311. kuration_sdk-0.1.0/tests/test_example_public.py +96 -0
  312. kuration_sdk-0.1.0/tests/test_example_teapearce.py +57 -0
  313. kuration_sdk-0.1.0/tests/test_execution_backpressure.py +134 -0
  314. kuration_sdk-0.1.0/tests/test_execution_parity.py +53 -0
  315. kuration_sdk-0.1.0/tests/test_external.py +467 -0
  316. kuration_sdk-0.1.0/tests/test_gameplay.py +221 -0
  317. kuration_sdk-0.1.0/tests/test_gameplay_stats.py +294 -0
  318. kuration_sdk-0.1.0/tests/test_grammar.py +179 -0
  319. kuration_sdk-0.1.0/tests/test_hours_review_quality.py +124 -0
  320. kuration_sdk-0.1.0/tests/test_import_cli.py +730 -0
  321. kuration_sdk-0.1.0/tests/test_infer.py +357 -0
  322. kuration_sdk-0.1.0/tests/test_io.py +182 -0
  323. kuration_sdk-0.1.0/tests/test_jupyter_ui.py +90 -0
  324. kuration_sdk-0.1.0/tests/test_loaders.py +215 -0
  325. kuration_sdk-0.1.0/tests/test_manifest_entity_ordering.py +53 -0
  326. kuration_sdk-0.1.0/tests/test_media_transforms_execution.py +335 -0
  327. kuration_sdk-0.1.0/tests/test_methods.py +132 -0
  328. kuration_sdk-0.1.0/tests/test_operator_registry.py +275 -0
  329. kuration_sdk-0.1.0/tests/test_package_structure.py +75 -0
  330. kuration_sdk-0.1.0/tests/test_phase_b.py +134 -0
  331. kuration_sdk-0.1.0/tests/test_phase_c.py +181 -0
  332. kuration_sdk-0.1.0/tests/test_phase_d.py +191 -0
  333. kuration_sdk-0.1.0/tests/test_phase_e.py +101 -0
  334. kuration_sdk-0.1.0/tests/test_pipeline.py +631 -0
  335. kuration_sdk-0.1.0/tests/test_pipeline_analyze.py +751 -0
  336. kuration_sdk-0.1.0/tests/test_pixel_shift.py +1010 -0
  337. kuration_sdk-0.1.0/tests/test_planning.py +106 -0
  338. kuration_sdk-0.1.0/tests/test_plugin_validation.py +123 -0
  339. kuration_sdk-0.1.0/tests/test_plugins_progress.py +254 -0
  340. kuration_sdk-0.1.0/tests/test_product_ux.py +91 -0
  341. kuration_sdk-0.1.0/tests/test_properties.py +83 -0
  342. kuration_sdk-0.1.0/tests/test_provenance_identity_safety.py +96 -0
  343. kuration_sdk-0.1.0/tests/test_provenance_privacy.py +149 -0
  344. kuration_sdk-0.1.0/tests/test_quickstart.py +37 -0
  345. kuration_sdk-0.1.0/tests/test_reader_contract_safety.py +369 -0
  346. kuration_sdk-0.1.0/tests/test_readme_pypi.py +18 -0
  347. kuration_sdk-0.1.0/tests/test_registry_architecture_fixes.py +312 -0
  348. kuration_sdk-0.1.0/tests/test_release_identity.py +38 -0
  349. kuration_sdk-0.1.0/tests/test_review_api_plugin_fixes.py +296 -0
  350. kuration_sdk-0.1.0/tests/test_review_core_fixes.py +264 -0
  351. kuration_sdk-0.1.0/tests/test_review_findings.py +217 -0
  352. kuration_sdk-0.1.0/tests/test_review_fixes.py +804 -0
  353. kuration_sdk-0.1.0/tests/test_review_integration_fixes.py +65 -0
  354. kuration_sdk-0.1.0/tests/test_review_io_fixes.py +585 -0
  355. kuration_sdk-0.1.0/tests/test_review_loop.py +75 -0
  356. kuration_sdk-0.1.0/tests/test_review_remediation.py +262 -0
  357. kuration_sdk-0.1.0/tests/test_scale.py +158 -0
  358. kuration_sdk-0.1.0/tests/test_schema.py +99 -0
  359. kuration_sdk-0.1.0/tests/test_scorers.py +133 -0
  360. kuration_sdk-0.1.0/tests/test_selection_correctness_regressions.py +477 -0
  361. kuration_sdk-0.1.0/tests/test_selection_domain.py +415 -0
  362. kuration_sdk-0.1.0/tests/test_selection_reliability.py +211 -0
  363. kuration_sdk-0.1.0/tests/test_slam.py +649 -0
  364. kuration_sdk-0.1.0/tests/test_slam_regressions.py +970 -0
  365. kuration_sdk-0.1.0/tests/test_source_reuse_safety.py +158 -0
  366. kuration_sdk-0.1.0/tests/test_sources.py +113 -0
  367. kuration_sdk-0.1.0/tests/test_stats.py +612 -0
  368. kuration_sdk-0.1.0/tests/test_streaming.py +166 -0
  369. kuration_sdk-0.1.0/tests/test_tags.py +102 -0
  370. kuration_sdk-0.1.0/tests/test_usability_customization.py +137 -0
  371. kuration_sdk-0.1.0/tests/test_validate.py +223 -0
  372. kuration_sdk-0.1.0/tests/test_validation_adapter_regressions.py +112 -0
  373. kuration_sdk-0.1.0/tests/test_versioning_semantics.py +126 -0
@@ -0,0 +1,304 @@
1
+ # Changelog
2
+
3
+ This project follows semantic versioning after `1.0`. During the `0.x` beta, minor releases may
4
+ change documented APIs with the notice and deprecation process in `docs/compatibility.md`.
5
+
6
+ ## 0.1.0
7
+
8
+ First public release. It includes everything in the earlier release candidates `0.1.0rc1`
9
+ through `0.1.0rc5`, which were not published to PyPI and are kept below as history.
10
+
11
+ - Every built-in operator is now labeled Selection, Annotation, or Aggregation in
12
+ `docs/operators.md` and `docs/operator-inventory.md`, by its primary effect on the segment
13
+ pool. No built-in operator is Aggregation yet — a confirmed gap (reducing a per-window
14
+ feature to a per-group rollup), not an oversight; see `action-state-consistency.md`.
15
+ - Renamed `gameplay.slam_pipeline` to `gameplay.slam_reconstruct` (groups with
16
+ `slam_quality`/`slam_motion_diversity` under one `slam_` prefix for discoverability). Clean
17
+ rename, no compatibility alias. Extracted `CollisionMechanics`'s per-tick velocity/turn-rate
18
+ derivation from a private, untested function into a public, directly tested
19
+ `kuration.gameplay.collision.kinematics.extract_kinematics` — the one part of its fused
20
+ per-tick scan/classify loop that is independently reusable; the gating and raycast
21
+ classification stages remain fused, as does `DirectionalCollisionAnalyzer`'s unrelated
22
+ expected-velocity-from-ramp-model computation.
23
+ - Added `Segment.records: dict[str, list]`, a non-scalar counterpart to `Segment.features` for
24
+ transforms measuring several discrete per-instance events within a window. `PixelShift` now
25
+ emits its per-press instances there instead of discarding them after collapsing to scalars.
26
+ `action_state_consistency` is rehosted as `ActionStateAnomalyScorer`, a `SegmentScorer`
27
+ reading pixel-shift's own records instead of redundantly re-deriving them from raw frames —
28
+ it scores per window, not per whole clip, since no built-in aggregation operator exists yet
29
+ to reconstruct the old per-clip verdict (see above). Dataset-mode auditing (`check_dataset`)
30
+ never shared computation with a live pixel-shift transform and is unaffected; only the
31
+ tick-stream-driven analyzer path (the actual redundant-computation bug) is retired.
32
+ - Eliminated the standalone `kuration-ai` package. Its three curation recipes
33
+ (`BalancedSelector`, `RareEventCoverage`, `DiverseSubset`) and config-driven
34
+ `run`/`plan`/`describe`/`register_operation_type` runner are now first-class SDK
35
+ components under `kuration.selection`, each also registered as a `Pipeline`
36
+ operator (`kuration/balanced-selector`, `kuration/rare-event-coverage`,
37
+ `kuration/diverse-subset`). `kuration-ai` is preserved, unmodified, on the
38
+ `feature/kuration-ai-legacy` branch.
39
+ - Development builds now use the distinct `0.1.0rc5.dev0` identity instead of reusing the
40
+ prior `0.1.0rc4` candidate identity. `ARTIFACT_FORMAT_VERSION` is `1.2` for the corrected
41
+ bounded/materialized uniform-bin ordering, experiment-arm tag isolation, and zero
42
+ tag-coverage-floor semantics described below.
43
+ - Raised the minimum versions of scikit-learn, PyArrow, protobuf, PyTorch/TorchVision, Ray,
44
+ tqdm, and Pillow past known-vulnerable historical floors; the minimum-dependency CI lane now
45
+ exercises those security-supported baselines.
46
+ - Dataset publication is no-clobber by default across pipeline, classic, job/CLI, and import
47
+ paths. `force=True` (or `kur-curate --force`) explicitly replaces a destination; `resume=True`
48
+ remains a separate, fingerprint-matched hours-run intent. Selection, source-contract,
49
+ container-dependency, and output-memory preflights finish before invalidating an old commit;
50
+ one writer lease prevents concurrent publishers from interleaving. Resume markers are now
51
+ commit-checksummed, non-resumable replacements remove stale markers, and bounded checkpoints
52
+ are namespaced by run fingerprint.
53
+ - Fixed selection correctness across execution modes: bounded uniform-bin RNG order now matches
54
+ canonical materialized order, predicates remain hard exclusions through tag coverage,
55
+ fractional tag floors round up, experiment arms no longer inherit unrelated tag vocabularies,
56
+ `min_tag_frac=0` is a true no-op, and Python-equal group/tag values have the same meaning in
57
+ memory and SQLite-backed fills.
58
+ - Persisted reuse now fails closed unless inputs have adapter, local-content, or immutable remote
59
+ version identities. Readers pin one exact commit generation for each operation, validate
60
+ manifest modality contracts against the committed output config, and reject local shard
61
+ symlinks and non-regular files. Source references and persisted skip diagnostics no longer
62
+ publish credentials or host-local paths.
63
+ - Smart imports now validate and consume one private local source snapshot: POSIX ancestry is
64
+ traversed through no-follow directory descriptors, array/tick publication never reopens the
65
+ caller pathname, and directory stores are copied descriptor-relatively. Generic remote imports
66
+ fail closed because an unconditioned fsspec read cannot be bound to a separately reported
67
+ object generation; download the exact immutable generation locally first. Smart import also
68
+ fails before source inspection on platforms without POSIX descriptor-relative open support.
69
+ - `on_error="skip"` now applies consistently to transform and scorer second-read failures as
70
+ well as the feature pass; failed sources are removed as a unit, mutable transform state is
71
+ reset before continuing, and total failure remains loud.
72
+ - Tightened validation at the boundary: `speed` requires a declared sample rate, numeric filter
73
+ literals must be finite, bitmask values must be positive exact integers, and mixed-case
74
+ `.parquet` suffixes follow one detection/preflight/read path.
75
+ - **Analyzers are pipeline operations.** New `Pipeline.analyze(name, parameters=None, *,
76
+ mode=None, inputs=None, batch_size=None, analyzer=None, **options)` terminal drives a
77
+ registered stateful analyzer with no job spec and no CLI. On any `input(...)` pipeline it
78
+ drives a new optional `add_batch(batch, ctx)` hook (`StreamAnalyzer`) over the segmented tick
79
+ stream through the *same* bounded batch/media-decode machinery batch transforms use
80
+ (`transforms.build_batch`, one decode path, per-input lookbehind/lookahead, `ctx.input_token`,
81
+ `ctx.valid_steps`) — a single pass with one batch resident, so it works under
82
+ `streaming=True`. On an artifact-backed pipeline it drives `check_dataset` and returns exactly
83
+ what `run_dataset_analyzer()` returns. Analyzers declare `field:`/`media:` inputs (plus
84
+ optional per-input boundary counts) at registration, validated there and by
85
+ `kur-plugin-check`; unknown analyzers, a missing hook for the resolved mode, and a pool that
86
+ measured zero segments all raise. `run_stream_analyzer()` and `StreamAnalyzer` are exported for
87
+ callers driving an analyzer outside the pipeline API.
88
+ - The built-in `aintropy/action-state-consistency` analyzer now runs on both modes. Its
89
+ tick-stream path declares the same input contract as `aintropy/pixel-shift` and measures in
90
+ **real source frames**, so the documented `(source_id, control, cell_key, frame)`
91
+ de-duplication of one press seen by overlapping windows holds (`cross_window_dedup: true`) —
92
+ the guarantee dataset mode has to give up (`frame_space: "shard-concatenation"`).
93
+ - New `Pipeline.check(policy=None, *, verify=False, **expectations)` — the pipeline-API
94
+ equivalent of `kur-check --policy`: it merges `.expect(...)`, a policy mapping, and keywords, then evaluates
95
+ them without raising against an artifact inspection (artifact-backed pipelines) or a bounded
96
+ input preview. `CuratedDatasetAdapter.datasets()` is the new adapter seam that lets a pipeline
97
+ reach artifact-level hooks at all.
98
+ - `Pipeline.stats(**kwargs)` now forwards every keyword `kuration.stats()` accepts (including
99
+ `progress`) instead of re-declaring a narrower subset that could drift.
100
+ - Batch-transform inputs are now roles rather than fixed batch keys. `TransformContext` carries
101
+ `inputs` (declared role → resolved token, in declaration order) and `input_token(role)`, so a
102
+ transform used with a per-use `inputs=` remapping addresses the batch it was actually given
103
+ instead of failing mid-run on a hardcoded registration token. A remapping must supply exactly
104
+ one token per role, of the same kind, and per-input `media_requirements` are matched by role;
105
+ all three are validated while the pipeline is built. The bundled `aintropy/pixel-shift`
106
+ transform now resolves its frames/actions inputs (and its media `color_space`) this way.
107
+ - `lookbehind`/`lookahead` may be declared per input (`lookbehind={"field:action": 1}`) instead
108
+ of as one count shared by every input, so a transform no longer pays to extract — or, for
109
+ media, decode — boundary context it never reads. `aintropy/pixel-shift` declares its single
110
+ lookbehind row on the action input only, removing one video-frame decode per segment.
111
+ - Every batch transform now receives per-row valid timestep counts (`ctx.valid_steps` and the
112
+ `valid_steps` batch entry). `field:` inputs are `(B,T,E,D)` arrays NaN-padded to the widest
113
+ extent in the batch — a contract change from the earlier `(B,T)` stacking, which raised on a
114
+ ragged batch instead of padding it — and the counts make that padding observable, so a
115
+ transform cannot silently average pad cells; previously only `ownership="rightmost-start"`
116
+ transforms received any length information.
117
+ - `pixel_shift` gained a `{control}_shift_measured` (0/1) feature. The transform contract admits
118
+ only finite scalars, so an untested control's `shift_min`/`max`/`mean` must report some number;
119
+ the flag makes "no instance was measured" filterable
120
+ (`.filter("w_shift_measured", ">=", 1)`) instead of indistinguishable from a real zero-shift
121
+ measurement. `pixel_shift.iter_instances()` now validates its own arrays (pass
122
+ `validated=True` for arrays already returned by `validate_segment_inputs`).
123
+ - The action-state analyzer accepts NumPy integer segment indexes (normalizing them to `int`),
124
+ and its `check_dataset` no longer presents synthetic offsets as source frames: results report
125
+ `frame_space: "shard-concatenation"`, per-shard `shard_ranges`, and `cross_shard_dedup: false`,
126
+ with the same caveat printed in the report. Manifest entries carry no source start offset, so
127
+ cross-shard de-duplication of overlapping curated spans is documented as unavailable in
128
+ dataset mode instead of silently lost.
129
+ - Gameplay video contact sheets label a frame index as `frame N` instead of formatting it as
130
+ `"{:.2f}s"` when a source exposes neither a duration nor an average frame rate.
131
+ - Bumped `ARTIFACT_FORMAT_VERSION` to `1.1` for two DSL semantic changes and recorded them in a
132
+ compat table (`ARTIFACT_SEMANTIC_CHANGES` in `kuration.core.versioning`): `dispersion` and
133
+ `min_pair_dist` now use every declared position dimension (`1.0` used only the first two), and
134
+ `scope: per_entity_mean` is now honored on categorical fields (`1.0` silently pooled them).
135
+ Both change *which segments get selected* on 3D-position or per-entity-categorical data, so
136
+ `kur-migrate` now prints the notes for the versions a document has not seen while it migrates
137
+ it. `migration_notes()`/`document_migration_notes()` expose the same table programmatically.
138
+ - Registering a compositional operator whose method name is already a real `Pipeline`
139
+ attribute (`report`, `window`, `filter`, `schema`, ...) now fails loudly at registration and in
140
+ `kur-plugin-check`, naming the collision and asking for a rename. Python resolves the attribute
141
+ before `__getattr__`, so such an operator was silently shadowed and unreachable. The reserved
142
+ set is derived from the `Pipeline` class itself.
143
+ - An un-namespaced operator now keeps its own method spelling when a plugin registers the same
144
+ local name: a spelling that is a component's complete name outranks the same spelling used as a
145
+ namespaced component's shorthand (`smooth` vs `acme/smooth`, still `acme__smooth()`). An
146
+ ambiguity error now only suggests spellings that actually resolve, falling back to
147
+ `apply("<name>")` when a component has no unique method spelling left.
148
+ - Added two pipeline-only public-data walkthroughs. `examples/public_data/ett.py` curates
149
+ real hourly electricity-transformer telemetry, and `person_activity.py` curates 25 real
150
+ wearable-sensor recordings with four tags as the entity axis, a tag-coverage floor that keeps
151
+ rare activities, and source-level splits stratified by person. Both take a local path, fetch
152
+ the data with `--download`, or run offline against synthetic stand-ins with `--demo`; each
153
+ ships a provenance/licensing note and the equivalent command-line session.
154
+ - Simplified the numbered examples. `01` is now the genuine five-minute start — `input()` over a
155
+ folder of CSVs with everything inferred — and `02`/`03` drop their hand-rolled adapter classes
156
+ in favour of passing `{source_id: ticks}` straight to `input()`.
157
+ - Fixed `dataset_report` crashing on a metric whose values differ only at float-noise scale.
158
+ NumPy widens the histogram range for exactly-constant data but raises "Too many bins for data
159
+ range" just below that, which took down `.review()` and `kur-report` for a near-flat field;
160
+ such a metric now reports as the flat distribution it is.
161
+ - `kur-init` now scaffolds `span_steps` alongside its hours budget. Without a span the budget
162
+ admits whole tracks, so a single long recording was emitted in full regardless of
163
+ `--train-hours`.
164
+ - Added a `kur` dispatcher so every command is reachable as `kur <command>` alongside its own
165
+ `kur-<command>` script, with `kur --help`/`--list` and `kur completion bash|zsh|fish`.
166
+ Subcommands contributed by installed plugin packages are discovered through their console
167
+ script entry points, so no domain is named in the core dispatcher.
168
+ - Added `kur-infer`, `kur-init`, and `kur-preview`, closing the gap before a job spec exists.
169
+ `kur-infer` emits the inferred schema (referenceable from a job by path); `kur-init`
170
+ scaffolds a whole job and resolves it before writing, so what it emits is a job
171
+ `kur-validate` accepts; `kur-preview` decodes a bounded prefix of the sources and reports
172
+ field ranges, missingness, and example ticks.
173
+ - Added `kur-stats` and `kur-export` on the artifact side. `kur-stats` exposes the existing
174
+ unified `stats()` report — including plugin-contributed sections — to the shell, and
175
+ `kur-export` writes shards as npz/npy/parquet with an `export_index.json` preserving the
176
+ manifest metadata that bare arrays lose.
177
+ - Added `kur-checkpoint list|verify|clear` for stage checkpoint directories. Verification reads
178
+ committed metadata instead of reconstructing the run's `CheckpointIdentity`, so a damaged
179
+ commit is detectable from the checkpoint tree alone; `clear` requires `--yes` and supports
180
+ `--attempts-only`.
181
+ - Added `--review`, `--review-json`, and `--review-html` to `kur-curate`, surfacing the
182
+ hours-budget admission review from the run's recorded decisions without a second scoring pass.
183
+ - Added `kur-import` and `import_dataset()` with confidence-based registered-adapter detection.
184
+ NPZ, HDF5, and Zarr use lossless tensor hooks; CSV, JSONL, and single/partitioned Parquet use
185
+ ordinary schema inference and canonical ticks. Plugin adapters can advertise detection and
186
+ raw-array import hooks. Imports default to source-aligned shards and publish the same
187
+ checksummed transactional artifacts consumed by inspection, analyzers, and loaders.
188
+ - Added artifact-level analyzer execution to `kur-check`, with separate JSON construction
189
+ parameters and dataset options, composable quality-gate output, and exit-code-2 verdicts.
190
+ Action-state consistency can now read configurable frame/action modalities from curated
191
+ shards, while split leakage can audit assignments directly from a dataset manifest.
192
+ - Added unified lifecycle stats for pipelines, curated selections, write results, and existing
193
+ dataset artifacts. Reports render directly in notebooks, can be saved as standalone HTML, and
194
+ offer optional Matplotlib plots through the `stats` extra; artifact stats inspect the actual
195
+ emitted, padding-trimmed arrays. Importing the gameplay domain now enriches the same report
196
+ with video, action, and SLAM signals and a gameplay plot; synchronized video comparison,
197
+ automatic Jupyter/terminal progress selection, and a model-free JupyterLab example complete
198
+ the end-user workflow. Reports discover their available plots and evidence modes, choose an
199
+ applicable domain plot automatically, and expose bounded selected/rejected/strongest/weakest
200
+ examples; live gameplay reports add frame strips, actions, and SLAM diagnostics without
201
+ placing media in serialized report data.
202
+ - Added `kuration.core` and `kuration.gameplay` domain surfaces. Pixel shift, action-state
203
+ consistency, and SLAM now ship together in the SDK wheel instead of separate first-party
204
+ plugin distributions; OpenCV, Torch, FAISS, and related runtimes remain extras.
205
+ - Physically moved the generic SDK implementation under `kuration.core` and made
206
+ `kuration.gameplay` the only maintained domain package. Direct implementation imports such as
207
+ `kuration.pipeline` now use `kuration.core.pipeline`; package-level imports such as
208
+ `from kuration import Pipeline` remain available. Removed the former gameplay compatibility
209
+ packages, and nested Depth Anything privately under gameplay SLAM.
210
+ - Integrated the native `kuration.gameplay.slam.SLAMReconstructor` and `slam_pipeline()`
211
+ workflow for optional video/frame reconstruction,
212
+ stable model/config provenance, resumable portable exports, trajectory quality and diversity
213
+ curation, point-cloud reduction, preflight, and `kur-slam`. Precomputed manifests remain a
214
+ lightweight NumPy-only SDK input; global model execution is intentionally separate from
215
+ bounded compositional operators.
216
+
217
+ ## 0.1.0rc4
218
+
219
+ - Added a discoverable `analyzer` registry kind for user-owned capabilities that aggregate
220
+ across segments, with `register_analyzer()`, `get_analyzer()`, and CLI discovery. The
221
+ action-state consistency plugin now registers its real clip-level analyzer instead of an
222
+ unrelated stateless compliance component. A dependency-free `kuration/split-leakage`
223
+ analyzer audits existing source and group assignments across dataset splits.
224
+ - Corrected pipeline and bounded execution around duplicate sources, exact vector widths,
225
+ registered-metric transform dependencies, cross-kind feature collisions, scorer parameters and
226
+ registry lookup, callable metric overlays, test-split validation, and checkpoint partition
227
+ identity. The same validation now applies consistently at direct public execution boundaries.
228
+ - Artifact readers now verify recorded shard size and SHA-256 by default, including
229
+ `iter_shards()`, `read_shard_arrays()`, `ShardDataset`, and curated-dataset adapters. Pass
230
+ `verify=False` only for explicitly trusted artifacts. Commit sidecars, rebased legacy paths,
231
+ split names, and shard paths are validated before reads, preventing traversal and stale or
232
+ corrupted shard reuse.
233
+ - Made shard filenames and manifest entity IDs type-preserving so values such as integer `1` and
234
+ string `"1"` cannot overwrite each other. Shard writing now rejects non-finite or extension
235
+ object IDs that have no canonical value identity instead of relying on unsafe string or pickle
236
+ representations.
237
+ - Fixed adapter and media correctness for large integer timestamps, missing categorical values,
238
+ Parquet dataset glob preflight and source fingerprints, Arrow chunk/batch ingestion, duplicate
239
+ columnar bin names, joined-media fingerprints, multi-video frame rate and shape validation, and
240
+ finite ordered timestamp alignment.
241
+ - Tightened registry and plugin contracts: malformed targets and true no-op entry points fail
242
+ transactionally with persistent diagnostics; pre-imported package-owned registrations remain
243
+ valid; nested parameter schemas are checked at registration; and `enum`, `const`, and
244
+ `uniqueItems` use JSON-type-sensitive equality rather than Python's boolean/integer aliasing.
245
+ - Corrected job-versus-artifact migration classification, strict-mode `kur-explain` policy,
246
+ vector event-reduction preflight, nested non-finite review JSON conversion, group-report identity
247
+ collisions, actionable video inference errors, and feature-schema drift detection.
248
+ - Hardened the SLAM plugin with exact timestamp coverage and explicit point-cloud format/version
249
+ validation in both manifests and NPZ artifacts.
250
+ - Added focused regression suites for the comprehensive correctness review and its independent
251
+ cross-subsystem follow-up, alongside full core, plugin, typing, lint, example, and distribution
252
+ build verification.
253
+
254
+ ## 0.1.0rc3
255
+
256
+ - Added transactional plugin loading: failed initializers roll back registry mutations, explicit
257
+ modules fail fast, and broken ambient entry points no longer hide healthy plugins; ambient
258
+ failures remain visible through discovery CLIs, `plugin_failures()`, and run provenance.
259
+ - Added `kur-plugin-check`, the public `check_plugins()` API, and a one-command isolated plugin
260
+ validation workflow covering dependencies, tests, lint, wheels, entry points, and descriptors.
261
+ - Added typed `TransformContext` boundary accessors while retaining the rc2 batch-key
262
+ compatibility form, plus deterministic lookbehind/lookahead and overlapping-window ownership.
263
+ - Bounded source scheduling, Ray submission, transform context memory, Hugging Face partition
264
+ behavior, and the pixel-shift radial cache; kept Arrow publication on the caller thread and
265
+ removed process-global reporting assumptions. Ray's `workers` now caps submitted tasks even
266
+ when `max_in_flight` is larger.
267
+ - Hardened source-ID normalization, normalized timestamp grouping, count-budget tag coverage,
268
+ remote replacement failure behavior, and unknown-total progress reporting. Direct low-level
269
+ curation calls now require non-empty string source IDs; convert `pathlib.Path` values with `str`.
270
+ - Binning now fails explicitly when any candidate lacks a requested axis feature instead of
271
+ silently treating the missing metric as zero.
272
+ - Added cross-mode determinism conformance tests spanning serial/parallel, streaming/materialized,
273
+ bounded/reference, and optional Ray execution.
274
+ - Isolated every repository plugin in CI and added exact-CI-artifact plugin publication with
275
+ metadata, hash, wheel-content, dependency, and installed-discovery checks.
276
+ - Corrected affected documentation claims and added regression coverage for realistic failure,
277
+ boundary, overlap, retry, packaging, and discovery scenarios.
278
+ - Pixel-shift radial geometry is now computed and cached as float32 (rather than float64), so
279
+ measurements may differ by normal float32 rounding; the two-entry cache deliberately bounds
280
+ global memory and may recompute when a process cycles through more than two resolutions.
281
+
282
+ ## 0.1.0rc2
283
+
284
+ - Added integrity-aware shard resume, structured execution diagnostics, Python 3.14 and
285
+ minimum-dependency CI, coverage artifacts, and real optional-backend integration tests.
286
+ - Hardened transform dispatch so implementation `TypeError`s are not mistaken for signature
287
+ mismatches, and fixed transform discovery through `kur-list`.
288
+ - Standardized CLI failures as concise one-line errors by default while retaining full
289
+ tracebacks behind `--debug`.
290
+ - Hardened release automation with pinned build tools, artifact validation, CI-gated artifact
291
+ promotion, platform and minimal-install smoke coverage, and trusted PyPI publishing.
292
+ - Added a runtime `kuration.__version__`, a security policy, and an explicit compatibility
293
+ policy.
294
+ - Reworked the README and documentation around product outcomes and user journeys, added a
295
+ searchable documentation site, editable diagrams, and compositional/transform-backed operator
296
+ examples.
297
+ - Added support and governance guidance, contribution templates, documentation link checks, and
298
+ deployment configuration for the published documentation site.
299
+ - Fixed bounded columnar execution against the declared PyArrow 15 minimum.
300
+
301
+ ## 0.1.0rc1
302
+
303
+ - Initial release candidate for the schema-driven curation SDK, pipeline, job/CLI layer,
304
+ versioned artifacts, extension registries, bounded execution, and optional integrations.