mostlyright-data 0.17.6__tar.gz → 0.17.8__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 (560) hide show
  1. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/PKG-INFO +5 -2
  2. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/README.md +4 -1
  3. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/pyproject.toml +1 -1
  4. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/skills/mr-data-build/SKILL.md +87 -29
  5. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/catalog/channel.py +4 -2
  6. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/catalog/search.py +11 -3
  7. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/studio_boundary.py +2 -2
  8. mostlyright_data-0.17.8/src/mostlyright/data_harness/thin/categories.py +9 -0
  9. mostlyright_data-0.17.8/src/mostlyright/data_harness/thin/dataset-categories-v1.json +132 -0
  10. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/thin/recipe.py +4 -7
  11. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/thin/router.py +13 -0
  12. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/thin/v4.py +107 -21
  13. mostlyright_data-0.17.8/src/mostlyright/data_harness/thin/v4_catalog.py +416 -0
  14. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/thin/v4_datasets.py +31 -3
  15. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/thin/vocabulary.py +6 -0
  16. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/ux/render.py +107 -6
  17. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/.gitignore +0 -0
  18. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/scripts/hatch_build.py +0 -0
  19. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/skills/mr-data-build/agents/openai.yaml +0 -0
  20. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/skills/mr-data-build/scripts/write_research_notebook.py +0 -0
  21. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/skills/mr-data-build/scripts/write_visual_run.py +0 -0
  22. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/_vendor/__init__.py +0 -0
  23. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/_vendor/rapidocr/LICENSE +0 -0
  24. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/_vendor/rapidocr/PROVENANCE.json +0 -0
  25. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/_vendor/rapidocr/__init__.py +0 -0
  26. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/_vendor/rapidocr/__init__.pyi +0 -0
  27. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/_vendor/rapidocr/_version.py +0 -0
  28. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/_vendor/rapidocr/cal_rec_boxes/__init__.py +0 -0
  29. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/_vendor/rapidocr/cal_rec_boxes/main.py +0 -0
  30. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/_vendor/rapidocr/ch_ppocr_cls/__init__.py +0 -0
  31. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/_vendor/rapidocr/ch_ppocr_cls/main.py +0 -0
  32. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/_vendor/rapidocr/ch_ppocr_cls/utils.py +0 -0
  33. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/_vendor/rapidocr/ch_ppocr_det/__init__.py +0 -0
  34. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/_vendor/rapidocr/ch_ppocr_det/main.py +0 -0
  35. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/_vendor/rapidocr/ch_ppocr_det/utils.py +0 -0
  36. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/__init__.py +0 -0
  37. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/main.py +0 -0
  38. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/typings.py +0 -0
  39. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/utils.py +0 -0
  40. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/_vendor/rapidocr/config.yaml +0 -0
  41. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/_vendor/rapidocr/inference_engine/__init__.py +0 -0
  42. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/_vendor/rapidocr/inference_engine/base.py +0 -0
  43. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/_vendor/rapidocr/inference_engine/onnxruntime/__init__.py +0 -0
  44. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/_vendor/rapidocr/inference_engine/onnxruntime/main.py +0 -0
  45. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/_vendor/rapidocr/inference_engine/onnxruntime/provider_config.py +0 -0
  46. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/_vendor/rapidocr/main.py +0 -0
  47. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/_vendor/rapidocr/models/PP-OCRv6_det_small.onnx +0 -0
  48. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/_vendor/rapidocr/models/PP-OCRv6_rec_small.onnx +0 -0
  49. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/_vendor/rapidocr/models/ch_ppocr_mobile_v2.0_cls_mobile.onnx +0 -0
  50. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/_vendor/rapidocr/py.typed +0 -0
  51. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/_vendor/rapidocr/utils/__init__.py +0 -0
  52. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/_vendor/rapidocr/utils/load_image.py +0 -0
  53. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/_vendor/rapidocr/utils/log.py +0 -0
  54. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/_vendor/rapidocr/utils/model_resolver.py +0 -0
  55. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/_vendor/rapidocr/utils/output.py +0 -0
  56. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/_vendor/rapidocr/utils/parse_parameters.py +0 -0
  57. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/_vendor/rapidocr/utils/process_img.py +0 -0
  58. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/_vendor/rapidocr/utils/typings.py +0 -0
  59. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/_vendor/rapidocr/utils/utils.py +0 -0
  60. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/__init__.py +0 -0
  61. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/acquisition/__init__.py +0 -0
  62. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/acquisition/derived_credentials.py +0 -0
  63. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/acquisition/http.py +0 -0
  64. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/acquisition/parsing.py +0 -0
  65. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/acquisition/ranges.py +0 -0
  66. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/acquisition/result_download.py +0 -0
  67. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/acquisition/retention_admission.py +0 -0
  68. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/acquisition/sandbox.py +0 -0
  69. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/acquisition/sandbox_bootstrap.py +0 -0
  70. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/acquisition/url_policy.py +0 -0
  71. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/agent_runtime.py +0 -0
  72. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/assets/logo-ink.svg +0 -0
  73. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/backends/__init__.py +0 -0
  74. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/backends/pandas_backend.py +0 -0
  75. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/backends/polars_backend.py +0 -0
  76. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/backends/protocol.py +0 -0
  77. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/backends/reference.py +0 -0
  78. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/backends/registry.py +0 -0
  79. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/backends/restrictions.py +0 -0
  80. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/bounded_query.py +0 -0
  81. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/bounded_scratch_sink.py +0 -0
  82. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/canonical.py +0 -0
  83. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/catalog_job.py +0 -0
  84. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/cli.py +0 -0
  85. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/compact_worker.py +0 -0
  86. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/contracts.py +0 -0
  87. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/coordinator.py +0 -0
  88. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/crosswalks.py +0 -0
  89. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/declared_checks.py +0 -0
  90. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/delta.py +0 -0
  91. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/delta_checks.py +0 -0
  92. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/delta_classifier.py +0 -0
  93. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/delta_persist.py +0 -0
  94. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/delta_recompute.py +0 -0
  95. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/delta_rows.py +0 -0
  96. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/deploy.py +0 -0
  97. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/deploy_target.py +0 -0
  98. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/deployment_evidence.py +0 -0
  99. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/documents/__init__.py +0 -0
  100. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/documents/_worker_capability.py +0 -0
  101. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/documents/capture.py +0 -0
  102. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/documents/contracts.py +0 -0
  103. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/documents/lane.py +0 -0
  104. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/documents/ocr.py +0 -0
  105. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/documents/pdf.py +0 -0
  106. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/documents/registry.py +0 -0
  107. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/documents/sandbox.py +0 -0
  108. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/documents/selections.py +0 -0
  109. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/documents/tables.py +0 -0
  110. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/documents/vendor_rapidocr.py +0 -0
  111. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/events.py +0 -0
  112. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/fast_delimited.py +0 -0
  113. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/fetch_egress_smoke.py +0 -0
  114. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/formats.py +0 -0
  115. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/governors.py +0 -0
  116. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/hosted_bootstrap.py +0 -0
  117. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/hosted_crawler.py +0 -0
  118. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/hosted_crawler_container_smoke.py +0 -0
  119. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/hosted_crawler_fetch.py +0 -0
  120. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/hosted_crawler_job.py +0 -0
  121. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/hosted_crawler_protocol.py +0 -0
  122. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/hosted_deploy.py +0 -0
  123. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/hosted_ingestion_contract.py +0 -0
  124. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/hosted_ingestion_job.py +0 -0
  125. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/hosted_ingestion_job_smoke.py +0 -0
  126. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/hosted_ingestion_worker.py +0 -0
  127. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/hosted_rlimit_as_container_smoke.py +0 -0
  128. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/hosted_run_worker.py +0 -0
  129. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/hosted_session_container_smoke.py +0 -0
  130. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/hosted_session_worker.py +0 -0
  131. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/hosted_session_worker_job_smoke.py +0 -0
  132. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/hosted_stream_recorder_container_smoke.py +0 -0
  133. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/hosted_stream_recorder_job.py +0 -0
  134. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/hosted_stream_subscription_container_smoke.py +0 -0
  135. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/hosted_stream_subscription_worker.py +0 -0
  136. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/hosted_worker.py +0 -0
  137. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/incremental_slice_executor.py +0 -0
  138. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/incremental_worker.py +0 -0
  139. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/ingestion/__init__.py +0 -0
  140. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/ingestion/contracts.py +0 -0
  141. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/ingestion/faults.py +0 -0
  142. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/ingestion/gcs_store.py +0 -0
  143. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/ingestion/spool.py +0 -0
  144. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/ingestion/store.py +0 -0
  145. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/inprocess_acquisition.py +0 -0
  146. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/key_seam.py +0 -0
  147. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/legacy_table_recovery.py +0 -0
  148. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/legacy_table_recovery_contract.py +0 -0
  149. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/linux_process_boundary.py +0 -0
  150. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/local_contracts.py +0 -0
  151. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/nbrender/CONTRACT.md +0 -0
  152. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/nbrender/__init__.py +0 -0
  153. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/nbrender/chrome.py +0 -0
  154. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/nbrender/code_body.py +0 -0
  155. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/nbrender/document.py +0 -0
  156. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/nbrender/frame.py +0 -0
  157. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/nbrender/interactive.py +0 -0
  158. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/nbrender/markdown_body.py +0 -0
  159. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/nbrender/mr_components.py +0 -0
  160. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/nbrender/outputs_data.py +0 -0
  161. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/nbrender/outputs_rich.py +0 -0
  162. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/nbrender/outputs_source.py +0 -0
  163. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/nbrender/outputs_stage.py +0 -0
  164. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/nbrender/outputs_text.py +0 -0
  165. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/nbrender/parse.py +0 -0
  166. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/nbrender/status.py +0 -0
  167. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/nbrender/tokens.py +0 -0
  168. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/notebook.py +0 -0
  169. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/offline.py +0 -0
  170. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/operation_registry.py +0 -0
  171. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/operator_setup.py +0 -0
  172. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/page_coverage.py +0 -0
  173. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/part_check_evidence.py +0 -0
  174. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/pipeline.py +0 -0
  175. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/plan_graph.py +0 -0
  176. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/preparation/__init__.py +0 -0
  177. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/preparation/contracts.py +0 -0
  178. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/preparation/engine.py +0 -0
  179. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/preparation/errors.py +0 -0
  180. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/preparation/gates.py +0 -0
  181. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/preparation/joins.py +0 -0
  182. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/preparation/profile.py +0 -0
  183. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/preparation/table.py +0 -0
  184. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/preparation/transforms.py +0 -0
  185. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/progress_events.py +0 -0
  186. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/__init__.py +0 -0
  187. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/_openpyxl.py +0 -0
  188. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/budgets.py +0 -0
  189. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/configurable_delimited.py +0 -0
  190. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/containers.py +0 -0
  191. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/contracts.py +0 -0
  192. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/delimited.py +0 -0
  193. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/geojson_vector.py +0 -0
  194. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/geopackage.py +0 -0
  195. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/geoparquet.py +0 -0
  196. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/grib2/__init__.py +0 -0
  197. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/grib2/admission.py +0 -0
  198. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/grib2/collection.py +0 -0
  199. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/grib2/collection_reader.py +0 -0
  200. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/grib2/decode.py +0 -0
  201. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/grib2/geometry.py +0 -0
  202. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/grib2/portable_math.py +0 -0
  203. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/grib_eccodes.py +0 -0
  204. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/html_tabular.py +0 -0
  205. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/html_web_extract.py +0 -0
  206. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/json_tabular.py +0 -0
  207. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/parquet_tabular.py +0 -0
  208. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/pcaxis_px.py +0 -0
  209. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/protobuf_tabular.py +0 -0
  210. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/raster/__init__.py +0 -0
  211. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/raster/_bytes.py +0 -0
  212. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/raster/decode.py +0 -0
  213. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/raster/family.py +0 -0
  214. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/raster/jpeg2000.py +0 -0
  215. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/raster/profiles.py +0 -0
  216. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/raster/rendered.py +0 -0
  217. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/raster/safe.py +0 -0
  218. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/raster/sentinel_safe.py +0 -0
  219. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/raster/tiff.py +0 -0
  220. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/registry.py +0 -0
  221. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/README.md +0 -0
  222. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.0.0/cities_one_stream/cities.csv.gz +0 -0
  223. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.0.0/cities_one_stream/expected.json +0 -0
  224. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.1.0/cities_one_stream/cities.csv.gz +0 -0
  225. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.1.0/cities_one_stream/expected.json +0 -0
  226. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/archive.tar/1.0.0/cities_beside_a_directory_entry/cities.tar +0 -0
  227. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/archive.tar/1.0.0/cities_beside_a_directory_entry/expected.json +0 -0
  228. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/archive.tar/1.1.0/cities_beside_a_directory_entry/cities.tar +0 -0
  229. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/archive.tar/1.1.0/cities_beside_a_directory_entry/expected.json +0 -0
  230. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/archive.zip/1.0.0/cities_beside_a_second_member/cities.zip +0 -0
  231. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/archive.zip/1.0.0/cities_beside_a_second_member/expected.json +0 -0
  232. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/archive.zip/1.1.0/dwd_semicolon_station_member/dwd-station.zip +0 -0
  233. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/archive.zip/1.1.0/dwd_semicolon_station_member/expected.json +0 -0
  234. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/archive.zip/1.2.0/dwd_semicolon_station_member/dwd-station.zip +0 -0
  235. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/archive.zip/1.2.0/dwd_semicolon_station_member/expected.json +0 -0
  236. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/an_ordinary_comma_separated_table/cities.csv +0 -0
  237. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/an_ordinary_comma_separated_table/expected.json +0 -0
  238. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/quoted_fields_holding_the_delimiter/cities.tsv +0 -0
  239. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/quoted_fields_holding_the_delimiter/expected.json +0 -0
  240. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/delimited_text/1.1.0/an_hourly_observation_table_served_as_plain_text/expected.json +0 -0
  241. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/delimited_text/1.1.0/an_hourly_observation_table_served_as_plain_text/observations.csv +0 -0
  242. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/delimited_text/2.0.0/publisher_preamble/expected.json +0 -0
  243. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/delimited_text/2.0.0/publisher_preamble/indices.csv +0 -0
  244. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/geojson.vector/1.0.0/czech_capital/expected.json +0 -0
  245. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/geojson.vector/1.0.0/czech_capital/places.geojson +0 -0
  246. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/geopackage.vector/1.0.0/epsg_4326_feature/expected.json +0 -0
  247. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/geopackage.vector/1.0.0/epsg_4326_feature/places.gpkg +0 -0
  248. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/geoparquet.vector/1.0.0/primary_wkb_point/expected.json +0 -0
  249. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/geoparquet.vector/1.0.0/primary_wkb_point/places.parquet +0 -0
  250. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/html.tabular/1.0.0/sanitized_table/expected.json +0 -0
  251. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/html.tabular/1.0.0/sanitized_table/table.html +0 -0
  252. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/html.web_extract/1.0.0/json_ld_scorecards/expected.json +0 -0
  253. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/html.web_extract/1.0.0/json_ld_scorecards/scorecards.html +0 -0
  254. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/html.web_extract/1.1.0/article_text_order/article.html +0 -0
  255. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/html.web_extract/1.1.0/article_text_order/expected.json +0 -0
  256. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/image.rendered/1.0.0/tiny_png/expected.json +0 -0
  257. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/image.rendered/1.0.0/tiny_png/tiny-rendered.png +0 -0
  258. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/json.tabular/1.0.0/nested_hourly_observations/expected.json +0 -0
  259. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/json.tabular/1.0.0/nested_hourly_observations/stations.json +0 -0
  260. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/json.tabular/1.1.0/an_observation_stream_served_as_plain_text/expected.json +0 -0
  261. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/json.tabular/1.1.0/an_observation_stream_served_as_plain_text/observations.ndjson +0 -0
  262. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/meteorology.bufr/1.0.0/eccodes_bufr4_subset/eccodes-bufr4.bufr +0 -0
  263. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/meteorology.bufr/1.0.0/eccodes_bufr4_subset/expected.json +0 -0
  264. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/meteorology.grib/1.0.0/eccodes_grib1_origin/expected.json +0 -0
  265. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/meteorology.grib/1.0.0/eccodes_grib1_origin/regular-ll-surface.grib1 +0 -0
  266. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/microdata.sas_xpt/1.0.0/two_raw_columns/expected.json +0 -0
  267. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/microdata.sas_xpt/1.0.0/two_raw_columns/survey.xpt +0 -0
  268. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/microdata.spss_sav/1.0.0/two_raw_columns/expected.json +0 -0
  269. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/microdata.spss_sav/1.0.0/two_raw_columns/survey.sav +0 -0
  270. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/microdata.stata_dta/1.0.0/two_raw_columns/expected.json +0 -0
  271. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/microdata.stata_dta/1.0.0/two_raw_columns/stata.dta +0 -0
  272. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/official.pcaxis_px/1.0.0/population_by_region_and_year/expected.json +0 -0
  273. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/official.pcaxis_px/1.0.0/population_by_region_and_year/population.px +0 -0
  274. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/official.sdmx_json/1.0.0/compact_population_series/expected.json +0 -0
  275. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/official.sdmx_json/1.0.0/compact_population_series/population.json +0 -0
  276. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/parquet.tabular/1.0.0/two_columns/expected.json +0 -0
  277. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/parquet.tabular/1.0.0/two_columns/prices.parquet +0 -0
  278. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/protobuf.tabular/1.0.0/gtfs_realtime_trip_updates/expected.json +0 -0
  279. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/protobuf.tabular/1.0.0/gtfs_realtime_trip_updates/gtfs-realtime.desc +0 -0
  280. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/protobuf.tabular/1.0.0/gtfs_realtime_trip_updates/trip-updates.pb +0 -0
  281. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/raster.geospatial/1.0.0/tiny_geotiff/expected.json +0 -0
  282. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/raster.geospatial/1.0.0/tiny_geotiff/tiny-geospatial.tif +0 -0
  283. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/satellite.goes_abi_l2/1.0.0/authored_cmi_window/expected.json +0 -0
  284. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/satellite.goes_abi_l2/1.0.0/authored_cmi_window/goes-abi-l2-cmi-window.nc +0 -0
  285. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/satellite.himawari_hsd/1.0.0/authored_b13_single_bzip2/expected.json +0 -0
  286. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/satellite.himawari_hsd/1.0.0/authored_b13_single_bzip2/himawari-b13-0101-bzip2.dat +0 -0
  287. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/satellite.himawari_hsd_complete/1.0.0/authored_b13_three_segment_scan/expected.json +0 -0
  288. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/satellite.himawari_hsd_complete/1.0.0/authored_b13_three_segment_scan/himawari-hsd-b13-complete.zip +0 -0
  289. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/satellite.msg_seviri_l15/1.0.0/authored_calibrated_complete_visir/expected.json +0 -0
  290. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/satellite.msg_seviri_l15/1.0.0/authored_calibrated_complete_visir/msg-seviri-l15.zip +0 -0
  291. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/satellite.sentinel_safe/1.0.0/authored_b02_scl_window/expected.json +0 -0
  292. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/satellite.sentinel_safe/1.0.0/authored_b02_scl_window/sentinel-safe-b02-scl.zip +0 -0
  293. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/satellite.xrit_image/1.0.0/authored_complete_raw_counts/expected.json +0 -0
  294. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/satellite.xrit_image/1.0.0/authored_complete_raw_counts/xrit-complete-image.zip +0 -0
  295. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/scientific.fits/1.0.0/tiny_primary_window/expected.json +0 -0
  296. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/scientific.fits/1.0.0/tiny_primary_window/tiny-primary.fits +0 -0
  297. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/scientific.hdf4/1.0.0/authored_temperature_window/expected.json +0 -0
  298. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/scientific.hdf4/1.0.0/authored_temperature_window/temperature.hdf +0 -0
  299. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/scientific.hdf5/1.0.0/authored_temperature_window/expected.json +0 -0
  300. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/scientific.hdf5/1.0.0/authored_temperature_window/temperature.h5 +0 -0
  301. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/scientific.hdf_eos2/1.0.0/authored_grid_temperature_window/expected.json +0 -0
  302. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/scientific.hdf_eos2/1.0.0/authored_grid_temperature_window/nasa-hdfeos2-grid.hdf +0 -0
  303. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/scientific.hdf_eos2/1.0.0/authored_swath_temperature_window/expected.json +0 -0
  304. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/scientific.hdf_eos2/1.0.0/authored_swath_temperature_window/nasa-hdfeos2-swath.hdf +0 -0
  305. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/scientific.netcdf/1.0.0/authored_classic_temperature_window/expected.json +0 -0
  306. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/scientific.netcdf/1.0.0/authored_classic_temperature_window/temperature-classic.nc +0 -0
  307. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/scientific.zarr/1.0.0/authored_v3_temperature_window/expected.json +0 -0
  308. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/scientific.zarr/1.0.0/authored_v3_temperature_window/temperature-zarr-v3.zip +0 -0
  309. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.0.0/an_ordinary_table_beside_a_second_sheet/cities.xlsx +0 -0
  310. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.0.0/an_ordinary_table_beside_a_second_sheet/expected.json +0 -0
  311. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.0.0/shares_the_workbook_had_already_computed/expected.json +0 -0
  312. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.0.0/shares_the_workbook_had_already_computed/shares.xlsx +0 -0
  313. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.1.0/shares_the_workbook_had_already_computed/expected.json +0 -0
  314. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.1.0/shares_the_workbook_had_already_computed/shares.xlsx +0 -0
  315. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/README.md +0 -0
  316. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/gfs_2m_temperature/expected.json +0 -0
  317. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/gfs_2m_temperature/gfs-2m-temperature.grib2 +0 -0
  318. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_2m_temperature/expected.json +0 -0
  319. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_2m_temperature/hrrr-2m-temperature.grib2 +0 -0
  320. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_categorical_rain/expected.json +0 -0
  321. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_categorical_rain/hrrr-categorical-rain.grib2 +0 -0
  322. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/weather.grib2/2.0.0/hrrr_2m_temperature/expected.json +0 -0
  323. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/weather.grib2/2.0.0/hrrr_2m_temperature/hrrr-2m-temperature.grib2 +0 -0
  324. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/weather.grib2/3.0.0/gfs_and_hrrr_categorical_rain/expected.json +0 -0
  325. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/weather.grib2/3.0.0/gfs_and_hrrr_categorical_rain/gfs-and-hrrr-categorical-rain.grib2 +0 -0
  326. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/plain_filing_fact/expected.json +0 -0
  327. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/plain_filing_fact/filing.xml +0 -0
  328. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/xml_inline_fact/expected.json +0 -0
  329. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/xml_inline_fact/filing.xhtml +0 -0
  330. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/pacer_rss_feed/expected.json +0 -0
  331. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/pacer_rss_feed/feed.xml +0 -0
  332. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/sec_form_d_filing/expected.json +0 -0
  333. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/sec_form_d_filing/filing.xml +0 -0
  334. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/unified_agenda_extract/agenda.xml +0 -0
  335. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/unified_agenda_extract/expected.json +0 -0
  336. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/samples.py +0 -0
  337. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/scientific.py +0 -0
  338. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/scientific_arrays/__init__.py +0 -0
  339. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/scientific_arrays/container.py +0 -0
  340. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/scientific_arrays/goes.py +0 -0
  341. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/scientific_arrays/hdf4.py +0 -0
  342. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/scientific_arrays/hdf4_bridge.py +0 -0
  343. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/scientific_arrays/hdf5.py +0 -0
  344. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/scientific_arrays/native.py +0 -0
  345. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/scientific_arrays/netcdf.py +0 -0
  346. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/scientific_arrays/profiles.py +0 -0
  347. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/scientific_arrays/raw.py +0 -0
  348. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/scientific_arrays/zarr.py +0 -0
  349. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/scientific_catalog.py +0 -0
  350. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/scientific_segmented/__init__.py +0 -0
  351. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/scientific_segmented/asset_sets.py +0 -0
  352. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/scientific_segmented/formats.py +0 -0
  353. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/scientific_segmented/hsd.py +0 -0
  354. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/scientific_segmented/native.py +0 -0
  355. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/scientific_segmented/profiles.py +0 -0
  356. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/scientific_segmented/reader.py +0 -0
  357. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/scientific_segmented/xrit.py +0 -0
  358. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/sdmx_json.py +0 -0
  359. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/spreadsheet.py +0 -0
  360. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/statistical_microdata.py +0 -0
  361. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/tabular.py +0 -0
  362. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/vector.py +0 -0
  363. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/vector_wkb.py +0 -0
  364. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/xbrl_facts.py +0 -0
  365. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/readers/xml_tabular.py +0 -0
  366. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/recipe.py +0 -0
  367. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/review.py +0 -0
  368. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/rowset.py +0 -0
  369. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/run_execution_v4.py +0 -0
  370. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/run_phase_timing.py +0 -0
  371. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/session_probes.py +0 -0
  372. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/signing.py +0 -0
  373. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/skill_assets.py +0 -0
  374. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/source_bootstrap.py +0 -0
  375. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/source_bundle_writer.py +0 -0
  376. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/source_discovery.py +0 -0
  377. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/source_history_candidate_child.py +0 -0
  378. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/source_history_transform_child.py +0 -0
  379. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/source_inventory.py +0 -0
  380. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/source_partition.py +0 -0
  381. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/source_raw_inventory.py +0 -0
  382. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/source_state_index.py +0 -0
  383. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/__init__.py +0 -0
  384. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/_adapter_steps.py +0 -0
  385. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/adapters.py +0 -0
  386. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/authenticated_https.py +0 -0
  387. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/authenticated_https_v2.py +0 -0
  388. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/authenticated_https_v3.py +0 -0
  389. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/cadence.py +0 -0
  390. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/cadence_emission.py +0 -0
  391. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/cadence_history.py +0 -0
  392. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/catalog/__init__.py +0 -0
  393. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/catalog/admission.py +0 -0
  394. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/catalog/authoring.py +0 -0
  395. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/catalog/authoring_policy.py +0 -0
  396. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/catalog/authoring_shards.py +0 -0
  397. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/catalog/bounded_io.py +0 -0
  398. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/catalog/channel_client.py +0 -0
  399. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/catalog/contracts.py +0 -0
  400. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/catalog/coverage.py +0 -0
  401. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/catalog/embedding.py +0 -0
  402. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/catalog/entry_v2.py +0 -0
  403. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/catalog/fill.py +0 -0
  404. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/catalog/fill_partitions.py +0 -0
  405. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/catalog/fill_staging.py +0 -0
  406. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/catalog/gating.py +0 -0
  407. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/catalog/generation_receipt.py +0 -0
  408. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/catalog/harvest/__init__.py +0 -0
  409. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/catalog/harvest/ckan.py +0 -0
  410. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/catalog/harvest/datagov_v4.py +0 -0
  411. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/catalog/harvest/protocol.py +0 -0
  412. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/catalog/harvest/sdmx.py +0 -0
  413. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/catalog/harvest/stac.py +0 -0
  414. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/catalog/hosted_catalog.py +0 -0
  415. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/catalog/identity_history.py +0 -0
  416. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/catalog/neural.py +0 -0
  417. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/catalog/packed_catalog.py +0 -0
  418. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/catalog/packed_retrieval.py +0 -0
  419. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/catalog/packed_writer.py +0 -0
  420. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/catalog/query_trace.py +0 -0
  421. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/catalog/recommend.py +0 -0
  422. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/catalog/retrieval.py +0 -0
  423. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/catalog/retrieval_manifest.py +0 -0
  424. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/catalog/sealed.py +0 -0
  425. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/catalog/streaming_delta.py +0 -0
  426. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/catalog/update.py +0 -0
  427. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/collections.py +0 -0
  428. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/contracts.py +0 -0
  429. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/dataset.py +0 -0
  430. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/deletion.py +0 -0
  431. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/document_projection.py +0 -0
  432. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/fitness.py +0 -0
  433. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/governance.py +0 -0
  434. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/hosted.py +0 -0
  435. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/integration.py +0 -0
  436. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/page_collections.py +0 -0
  437. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/range_reader.py +0 -0
  438. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/registry.py +0 -0
  439. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/rights_rule.py +0 -0
  440. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/source_cadence_vectors.v1.json +0 -0
  441. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/sports.py +0 -0
  442. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/stream.py +0 -0
  443. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/stream_capture_session.py +0 -0
  444. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/stream_connector.py +0 -0
  445. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/stream_connectors/fixture.cursor-resume.v3.json +0 -0
  446. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-ed25519.v2.json +0 -0
  447. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-hmac.v2.json +0 -0
  448. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-hmac384.v2.json +0 -0
  449. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-hmac512.v2.json +0 -0
  450. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame.v2.json +0 -0
  451. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-header-rsa.v2.json +0 -0
  452. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-header.v2.json +0 -0
  453. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-permessage-jwt.v2.json +0 -0
  454. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-permessage.v2.json +0 -0
  455. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-prelude.v2.json +0 -0
  456. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-query.v2.json +0 -0
  457. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-subprotocol.v2.json +0 -0
  458. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-subscribe.v2.json +0 -0
  459. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-urlpath.v2.json +0 -0
  460. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/stream_connectors/polymarket.clob-market.v1.json +0 -0
  461. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/stream_credential.py +0 -0
  462. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/stream_prelude.py +0 -0
  463. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/stream_recorder.py +0 -0
  464. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/stream_registry.py +0 -0
  465. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/stream_rotation.py +0 -0
  466. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/stream_segment_recorder.py +0 -0
  467. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/stream_series.py +0 -0
  468. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/stream_signing.py +0 -0
  469. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sources/stream_transport.py +0 -0
  470. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/sql_transform_engine.py +0 -0
  471. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/stream_order_vector.py +0 -0
  472. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/stream_recovery_objects.py +0 -0
  473. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/stream_segment_spill.py +0 -0
  474. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/stream_subscription_feed.py +0 -0
  475. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/stream_subscription_sealer.py +0 -0
  476. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/stream_subscription_worker.py +0 -0
  477. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/stream_venue.py +0 -0
  478. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/stream_venue_staging.py +0 -0
  479. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/studio_subscription_control.py +0 -0
  480. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/table_manifest.py +0 -0
  481. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/table_parts.py +0 -0
  482. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/table_profile.py +0 -0
  483. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/thin/__init__.py +0 -0
  484. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/thin/acquire.py +0 -0
  485. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/thin/acquire_cancel.py +0 -0
  486. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/thin/activity.py +0 -0
  487. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/thin/approvals.py +0 -0
  488. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/thin/collection_plan.py +0 -0
  489. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/thin/commands.py +0 -0
  490. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/thin/download.py +0 -0
  491. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/thin/narrative.py +0 -0
  492. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/thin/parity.py +0 -0
  493. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/thin/probe.py +0 -0
  494. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/thin/propose.py +0 -0
  495. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/thin/research.py +0 -0
  496. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/thin/runs.py +0 -0
  497. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/thin/session.py +0 -0
  498. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/thin/stream.py +0 -0
  499. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/thin/stream_venue.py +0 -0
  500. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/thin/transport.py +0 -0
  501. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/thin/user_agent.py +0 -0
  502. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/thin/v4_artifacts.py +0 -0
  503. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/thin/v4_connections.py +0 -0
  504. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/thin/v4_dataset_covers.py +0 -0
  505. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/thin/v4_handoff.py +0 -0
  506. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/thin/v4_narrative.py +0 -0
  507. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/thin/v4_query.py +0 -0
  508. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/thin/v4_runs.py +0 -0
  509. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/thin/v4_secrets.py +0 -0
  510. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/thin/v4_stream.py +0 -0
  511. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/thin/v4_tables.py +0 -0
  512. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/thin/workers.py +0 -0
  513. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/ucum/TABLE-PIN.json +0 -0
  514. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/ucum/ucum-subset.v1.json +0 -0
  515. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/unit_flow.py +0 -0
  516. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/units.py +0 -0
  517. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/ux/__init__.py +0 -0
  518. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/ux/attendance.py +0 -0
  519. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/ux/clarification.py +0 -0
  520. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/ux/cloud_auth.py +0 -0
  521. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/ux/commands/__init__.py +0 -0
  522. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/ux/commands/auth.py +0 -0
  523. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/ux/commands/catalog_author.py +0 -0
  524. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/ux/commands/catalog_harvest.py +0 -0
  525. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/ux/commands/catalog_publish.py +0 -0
  526. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/ux/commands/clarify.py +0 -0
  527. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/ux/commands/login.py +0 -0
  528. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/ux/commands/record.py +0 -0
  529. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/ux/commands/whoami.py +0 -0
  530. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/ux/credential_native.py +0 -0
  531. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/ux/credential_store.py +0 -0
  532. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/ux/credentials.py +0 -0
  533. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/ux/headline.py +0 -0
  534. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/ux/hosted_acquisition.py +0 -0
  535. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/ux/local_review.py +0 -0
  536. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/ux/login.py +0 -0
  537. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/ux/path_kind.py +0 -0
  538. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/ux/plain_file.py +0 -0
  539. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/ux/readers.py +0 -0
  540. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/ux/remediation.py +0 -0
  541. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/v4_acquisition.py +0 -0
  542. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/v4_check_dialect.py +0 -0
  543. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/v4_closed_source.py +0 -0
  544. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/v4_document_pin.py +0 -0
  545. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/v4_reader_pin.py +0 -0
  546. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/v4_recipe.py +0 -0
  547. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/v4_required_controls.py +0 -0
  548. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/v4_snapshot_artifact.py +0 -0
  549. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/v4_stream_recording.py +0 -0
  550. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/v4_transform.py +0 -0
  551. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/v4_window.py +0 -0
  552. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/visual_run/__init__.py +0 -0
  553. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/visual_run/authoring.py +0 -0
  554. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/visual_run/contracts.py +0 -0
  555. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/visual_run/materialize.py +0 -0
  556. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/visual_run/observations.py +0 -0
  557. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/visual_run/reducer.py +0 -0
  558. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/visual_run/sdk.py +0 -0
  559. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/visual_run/store.py +0 -0
  560. {mostlyright_data-0.17.6 → mostlyright_data-0.17.8}/src/mostlyright/data_harness/visual_run/transport.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mostlyright-data
3
- Version: 0.17.6
3
+ Version: 0.17.8
4
4
  Summary: Mostly Right CLI for reproducible, reviewed Parquet datasets
5
5
  Project-URL: Homepage, https://mostlyright.md/
6
6
  Project-URL: Documentation, https://mostlyright.md/docs/guides/cli/
@@ -208,9 +208,12 @@ mr-data --help
208
208
 
209
209
  ## Build a dataset
210
210
 
211
- Register a recipe document with the sources, table schema, transformations and checks:
211
+ Create the dataset, choose its primary category from the fixed vocabulary, then register a recipe document with the sources, table schema, transformations and checks. Use the created dataset ID in the recipe:
212
212
 
213
213
  ```bash
214
+ mr-data dataset create --name "Dataset title" --json
215
+ mr-data dataset categories --json
216
+ mr-data dataset set DATASET_ID --category climate-environment
214
217
  mr-data recipe recipe.json --json
215
218
  mr-data run --recipe RECIPE_ID --digest RECIPE_DIGEST --full
216
219
  mr-data status RUN_ID
@@ -45,9 +45,12 @@ mr-data --help
45
45
 
46
46
  ## Build a dataset
47
47
 
48
- Register a recipe document with the sources, table schema, transformations and checks:
48
+ Create the dataset, choose its primary category from the fixed vocabulary, then register a recipe document with the sources, table schema, transformations and checks. Use the created dataset ID in the recipe:
49
49
 
50
50
  ```bash
51
+ mr-data dataset create --name "Dataset title" --json
52
+ mr-data dataset categories --json
53
+ mr-data dataset set DATASET_ID --category climate-environment
51
54
  mr-data recipe recipe.json --json
52
55
  mr-data run --recipe RECIPE_ID --digest RECIPE_DIGEST --full
53
56
  mr-data status RUN_ID
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "mostlyright-data"
3
- version = "0.17.6"
3
+ version = "0.17.8"
4
4
  description = "Mostly Right CLI for reproducible, reviewed Parquet datasets"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.13,<3.14"
@@ -101,14 +101,14 @@ longer reference behind one section of it.
101
101
  There is no second profile and no lane to choose. `--hosted` is accepted and does nothing, because
102
102
  the lane it names is the only one; a script that already carries it keeps working.
103
103
 
104
- `mr-data --help` lists every command this product has — twenty-eight of them, and the page is the
104
+ `mr-data --help` lists every command this product has — thirty-four of them, and the page is the
105
105
  whole list. A name that is not on it is not a command: typing one answers `THIN_UNKNOWN_COMMAND`,
106
106
  exactly as a misspelling does. Do not retry it under a different install, and do not report its
107
107
  absence as a defect.
108
108
 
109
109
  ## Commands
110
110
 
111
- These thirty-one are the whole surface, alongside `acquire-slices`, which names a capability
111
+ These thirty-two are the whole surface, alongside `acquire-slices`, which names a capability
112
112
  gap rather than doing anything, and `export-hosted-candidate`, which is a backend operator step.
113
113
 
114
114
  | Command | What it does |
@@ -118,7 +118,8 @@ gap rather than doing anything, and `export-hosted-candidate`, which is a backen
118
118
  | `mr-data whoami` | Use the compatibility alias for the remotely validated `auth status` answer. |
119
119
  | `mr-data clarify` | Say whether one clarifying question may be put to the user right now, and compose the record of their answer. It reaches nothing, asks nobody and waits for nothing. Exits non-zero when no person can answer or when a recipe is already registered. |
120
120
  | `mr-data probe` | Ask one registered source one question and print the answer. **Currently unusable:** it reaches `/v3/sessions`, which Studio refuses, and it takes a question identifier that no v4 receipt returns. Do not plan a source inspection around it. |
121
- | `mr-data dataset` | Bring the dataset page into existence before there is anything on it, then fill it in while somebody watches. `dataset create --name TEXT` mints it and prints the `dataset_id`; `dataset show ID` reads it back; `dataset set ID --name TEXT --topics "a,b,c" --license ID --description-file F` writes the title, the categories, the SPDX licence and the description under the version it was read at, retrying once if somebody else wrote first, and an empty `--topics` or `--license` takes that value off the page; `dataset note ID --heading H --blocks-file B` writes one cell of the decision record that OUTLIVES every run, and `--list` reads it back; `dataset watch ID` follows the page's own event stream; `dataset activity ID --phase P --message TEXT` says what is happening right now, silently, and is never a chat message and never a cell; `dataset publish ID [--mode public|link|private]` says who can read the dataset — `public` lists it in the public directory and serves it at an address anybody can read, `link` serves it at an unlisted address, `private` takes it back to the workspace — and `dataset publish ID --show` reads that back without changing it; `dataset archive ID --confirm-name TITLE` retires the page and frees its title, deleting nothing. |
121
+ | `mr-data catalog` | `catalog search "QUESTION"` asks the sealed public-source catalogue which of its entries might answer a question and ranks them best first. Every ranked entry comes back with the disposition its own facts earned — `admitted`, `human_escalation_required` or `refused` — because an entry the catalogue could not vouch for is still a finding. `--format csv` states the one data format the question requires — one token per question, never repeated — and it is not a filter: an entry that does not declare that format still comes back ranked, with disposition `refused` and `filters_match` false, so nothing is held back; `--limit N` ranks at most N, up to 25. It fetches nothing and registers nothing. The catalogue holds one provider (Data.gov) and only part of it, so it is never exhaustive and an empty answer is not evidence that no such source exists. When the answer is `catalog_unavailable`, this deployment has no catalogue to search: record the lane and carry on. |
122
+ | `mr-data dataset` | Bring the dataset page into existence before there is anything on it, then fill it in while somebody watches. `dataset create --name TEXT` mints it and prints the `dataset_id`; `dataset show ID` reads it back; `dataset set ID --name TEXT --topics "a,b,c" --license ID --description-file F` writes the title, the descriptive tags, the SPDX licence and the description under the version it was read at, retrying once if somebody else wrote first, and an empty `--topics` or `--license` takes that value off the page; `dataset note ID --heading H --blocks-file B` writes one cell of the decision record that OUTLIVES every run, and `--list` reads it back; `dataset watch ID` follows the page's own event stream; `dataset activity ID --phase P --message TEXT` says what is happening right now, silently, and is never a chat message and never a cell; `dataset publish ID [--mode public|link|private]` says who can read the dataset — `public` lists it in the public directory and serves it at an address anybody can read, `link` serves it at an unlisted address, `private` takes it back to the workspace — and `dataset publish ID --show` reads that back without changing it; `dataset archive ID --confirm-name TITLE` retires the page and frees its title, deleting nothing. |
122
123
  | `mr-data recipe` | Register one recipe document — dataset, question, table plan, sources, transform, checks and units — in one call, and print the identifiers the server derived. `mr-data recipe show ID` reads one back. |
123
124
  | `mr-data cover` | Generate and attach one branded 1200×630 dataset cover. Give it the dataset ID and what the image should depict; Studio fixes the model, single-color style, curated random palette, dimensions and storage. |
124
125
  | `mr-data run` | Start one run against a registered recipe, named as `--recipe RECIPE_ID --digest RECIPE_DIGEST` — both required, neither positional, and the digest is the bare hex the registration receipt printed. The command accepts `--sample`, `--full`, `--refresh`, `--backfill` and `--window`, and the worker executes `--sample`, `--full` and `--refresh`. A refresh narrows each source that declares a supported address window and merges its returned relation into retained source state; unwindowed sources are conditionally revalidated or re-acquired whole, then the full declared transform runs. `--backfill` and a `--window` on a sample or full are refused before acquisition. `--max-rows` and `--max-source-bytes` remain supported, and each bounds ONE SOURCE rather than the finished table. A large run is held for a spend confirmation, which `--confirm` settles; a sample-first held full requires Studio's interactive human approval instead. `--cancel RUN` stops one. |
@@ -146,9 +147,9 @@ gap rather than doing anything, and `export-hosted-candidate`, which is a backen
146
147
  | `mr-data demote` | Ask Studio to withdraw the pointer and any schedule it owns, for one table or for as many as you name: `demote TABLE [TABLE ...]` withdraws them one after another, attempts every one of them whatever the one before it answered, prints a line for each, and exits non-zero if any is still live. Pair it with `table archive` when you are retiring a set: a live table cannot be archived, so it is withdraw-then-archive, two commands rather than a loop. |
147
148
 
148
149
  `auth`, `login`, `whoami` and `clarify` are the same implementation in both profiles, and
149
- `clarify` alone reaches nothing at all. The other twenty-six answer from Studio. Ten only
150
- read: `status`, `runs`, `watch`, `peek`, `receipt`, `checks`, `download`, `verify`, `parts` and
151
- `diff`.
150
+ `clarify` alone reaches nothing at all. The other twenty-eight answer from Studio. Twelve only
151
+ read: `status`, `runs`, `watch`, `peek`, `receipt`, `checks`, `download`, `verify`, `parts`,
152
+ `diff`, `connections` and `catalog`.
152
153
  Sixteen start or change something: `dataset`, `recipe`, `cover`, `run`, `query`, `probe`, `keys`,
153
154
  `stream`, `open`, `note`, `promote`, `reschedule`, `table`, `pin`, `unpin` and `demote`. The split
154
155
  is over names, not over invocations: `table TABLE` reads and `table rename` writes, and the name
@@ -340,11 +341,36 @@ promoting a table each move the page on their own. Stage 2 is the one stretch of
340
341
  nothing has been submitted yet, which is why it is the one stretch that has to say so.
341
342
 
342
343
  **Judge the sources.** This stays with the external agent and is the substance of the task. Search
343
- every available discovery lane with no lane priority: a configured sealed catalog, host public-web
344
+ every available discovery lane with no lane priority: the sealed catalog, host public-web
344
345
  search, official provider catalogs/APIs/download indexes/documentation, and user-supplied sources.
345
- Run independent lanes in parallel when the host capabilities allow. Record a typed unavailable
346
- reason and immutable host capability-receipt digest for every lane that cannot run; record the
347
- exact query and host-tool receipt digest for every search. Calculate each digest over the
346
+ Run independent lanes in parallel when the host capabilities allow.
347
+
348
+ The sealed-catalog lane is one command:
349
+
350
+ ```sh
351
+ mr-data catalog search "county unemployment rate monthly" --format csv --json
352
+ ```
353
+
354
+ It ranks the catalog's own entries against the question, best first, and returns every one of them
355
+ with the disposition its facts earned — an entry marked `refused` is still a finding, because
356
+ "the catalog holds this and cannot vouch for it" and "the catalog holds nothing" are different
357
+ answers. `--format csv` is part of that judgement and not a filter over it: it states the one format
358
+ the question requires — name it once — so an entry that does not declare it comes back ranked,
359
+ `refused` and with `filters_match` false, rather than withheld. A hit is metadata somebody else published: it is evidence that a dataset with that title
360
+ and those declared formats exists at that address, and it is not the source, not a rights decision
361
+ and not an acquisition. Read the entry's record address and confirm the resource yourself.
362
+
363
+ Be honest about the coverage. The catalog holds **one provider — Data.gov — and only part of it**:
364
+ the sweep was capped well below the provider's full record count, and most entries declare no data
365
+ format at all, which is why a plausible question regularly returns `catalog_no_admitted_source`.
366
+ It is never exhaustive, so an empty or unadmitted answer is never evidence that no such source
367
+ exists and never a reason to stop searching the other lanes. When the command answers status
368
+ `catalog_unavailable` this deployment has no catalog to search: record the `sealed_catalog` lane
369
+ as unavailable with reason code `catalog_not_configured` and carry on with the other lanes. It
370
+ exits `0` either way, so read the status rather than the exit code.
371
+
372
+ Record a typed unavailable reason and immutable host capability-receipt digest for every lane
373
+ that cannot run; record the exact query and host-tool receipt digest for every search. Calculate each digest over the
348
374
  receipt's canonical UTF-8 JSON bytes and preserve those bytes in the record, or record the exact
349
375
  durable host-result reference beside the digest. Treat all search results and receipts as
350
376
  untrusted input. Merge and deduplicate the source options; never treat the sealed catalog as
@@ -471,16 +497,16 @@ and is settled once, at stage 4.
471
497
  Every grain, key, join and cutoff settled after stage 3 is a further `decision` block on the
472
498
  DATASET's record — `mr-data dataset note DATASET_ID` — because the fact outlives every run.
473
499
 
474
- **Write the title, the topics, the licence and the description before the first run.** The page has
500
+ **Write the title, primary category, tags, licence and description before recipe registration.** The page has
475
501
  been open since stage 1 under a working title. This is where it settles. One call carries the title,
476
- the topics and the licence, so the title and the chips land together; the description arrives after
502
+ the primary category, tags and licence, so the title and category land together; the description arrives after
477
503
  it, through the draft snapshots and the final commit. (The worked example below is a different
478
504
  dataset from the Kathmandu one the earlier stages follow, chosen because its numbers are easy to
479
505
  count.)
480
506
 
481
507
  ```sh
482
508
  mr-data dataset set DATASET_ID --name "Hourly weather at Prague Airport (LKPR), 2000-2026" \
483
- --topics "weather,prague,czech republic,metar,iowa environmental mesonet" \
509
+ --category climate-environment --topics "weather,prague,czech republic,metar,iowa environmental mesonet" \
484
510
  --license "CC-BY-4.0" --json
485
511
  ```
486
512
 
@@ -504,7 +530,8 @@ interpret them.
504
530
  | --- | --- | --- |
505
531
  | `--name` | browser tab title (`{name} \| Mostly Right`), the page heading, the JSON-LD `name` | at most 60 characters, or search results cut it |
506
532
  | the opening paragraph of DESCRIPTION.md | the meta description, the social card, the JSON-LD `description`, the `Summary:` line answer engines fetch | search engines cut at 300 characters; answer engines cut at 240 |
507
- | `--topics` | category chips and the category filter on the /datasets directory, JSON-LD `keywords`, the `Topics:` line answer engines fetch, the `topic` filter in the public API and MCP | 3 to 8 topics, each at most 40 characters |
533
+ | `--category` | the primary category and category filter on Community | exactly one fixed category ID |
534
+ | `--topics` | JSON-LD `keywords`, the `Topics:` line answer engines fetch, the `topic` filter in the public API and MCP | 3 to 8 topics, each at most 40 characters |
508
535
 
509
536
  **Title rules**
510
537
  1. Shape: subject, place, period. `Hourly weather at Prague Airport (LKPR), 2000-2026`.
@@ -515,19 +542,51 @@ interpret them.
515
542
  number, a run date.
516
543
  5. Sentence case. No trailing full stop.
517
544
 
545
+ **Primary category — required before recipe registration**
546
+ Run `mr-data dataset categories --json` to read the fixed vocabulary and its definitions,
547
+ exclusions and examples. Choose exactly one primary category by interpreting the dataset purpose,
548
+ tables and measured entities. Save it with `mr-data dataset set DATASET_ID --category CATEGORY_ID`
549
+ and verify `category_id` in `dataset show`. Put this dataset’s stable ID in
550
+ `dataset.id` in the recipe file (the HTTP command wraps it under `document`) when registering; enforced builds cannot bind by name alone. The updated recipe client requests server enforcement
551
+ of this saved category; it never guesses from tags. Draft pages may remain unassigned during research.
552
+
553
+ The allowed IDs and labels are:
554
+
555
+ | ID | Category |
556
+ | --- | --- |
557
+ | `climate-environment` | Climate & Environment |
558
+ | `crypto` | Crypto |
559
+ | `finance` | Finance |
560
+ | `economics-business` | Economics & Business |
561
+ | `government-politics` | Government & Politics |
562
+ | `people-society` | People & Society |
563
+ | `health-medicine` | Health & Medicine |
564
+ | `science-research` | Science & Research |
565
+ | `technology` | Technology |
566
+ | `energy` | Energy |
567
+ | `agriculture-food` | Agriculture & Food |
568
+ | `transport-mobility` | Transport & Mobility |
569
+ | `places-infrastructure` | Places & Infrastructure |
570
+ | `education` | Education |
571
+ | `sports` | Sports |
572
+ | `arts-media-entertainment` | Arts, Media & Entertainment |
573
+ | `law-public-safety` | Law & Public Safety |
574
+ | `other` | Other |
575
+
576
+ Classify the main subject, not the source, cadence, file format or secondary variables. Bitcoin
577
+ price markets are Crypto; airport weather observations are Climate & Environment; crop yields
578
+ with weather covariates are Agriculture & Food; Steam player counts are Arts, Media & Entertainment.
579
+ For mixed datasets, use their principal analytical purpose. If none fits, choose Other and record
580
+ why the listed definitions exclude the subject. Uncertainty alone is not a reason to use Other.
581
+ Preserve the saved category on routine refreshes and recipe revisions. Reconsider it only when
582
+ the dataset's principal subject changes. Never invent, combine or subdivide category IDs.
583
+
518
584
  **Topic rules**
519
- 1. 3 to 8 topics, comma-separated, no duplicates.
520
- 2. Topic one is the category, chosen from this list and no other:
521
- `weather, climate, air quality, hydrology, energy, transport, aviation, public health,
522
- economics, finance, elections, sports, prediction markets, demographics, geospatial,
523
- agriculture`.
524
- 3. Then, in this order, one each where it applies: the city or region, the country, the
525
- phenomenon or instrument, the publisher or programme. After those, up to three more, each a
526
- distinct thing a person would type that none of the earlier topics already names.
527
- 4. Form: lowercase; ASCII letters, digits, spaces and hyphens only; one to three words; at most
528
- 40 characters.
529
- 5. Never: a column name, a unit, a bare year, a second word from the category list, a market or
530
- venue name unless the dataset is about that market.
585
+ 1. Write 3 to 8 useful descriptive tags, comma-separated, without duplicates.
586
+ 2. Tags are search keywords, not categories. No tag position determines the primary category.
587
+ 3. Use relevant subject, place, phenomenon, instrument or programme names.
588
+ 4. Use lowercase ASCII letters, digits, spaces and hyphens; at most 40 characters per tag.
589
+ 5. Omit column names, units, bare years and redundant terms.
531
590
 
532
591
  **The dataset description is the documentation, and it is read by people and by search engines.**
533
592
  `dataset.description` is Markdown, rendered on the dataset page with headings and lists, and it
@@ -592,9 +651,8 @@ choice. Give `table.description` the grain and the window.
592
651
  - title: at most 60 characters, contains the place, contains no colon, pipe or exclamation mark,
593
652
  no brand, no "dataset" or "data", no version number, no run date
594
653
  - opening paragraph: 150 to 240 characters, first full stop before character 200, no Markdown
595
- - topics: 3 to 8, no duplicates, first one is on the category list, all lowercase, each at most
596
- 40 characters, none is a column name, a unit, a year, a second word from the category list, or
597
- a market or venue name unless the dataset is about that market
654
+ - category: exactly one fixed ID saved and verified before recipe registration
655
+ - topics: 3 to 8 descriptive tags, no duplicates, lowercase, at most 40 characters each
598
656
  - licence: an SPDX identifier the sources actually grant, or `--license` left off
599
657
  - every `##` heading in DESCRIPTION.md is one of the five, in that relative order, none repeated
600
658
 
@@ -87,8 +87,10 @@ MAX_CHANNEL_MANIFEST_BYTES = 8_192
87
87
  #: A channel name is an operator's label for one line of successors ("public", "staging").
88
88
  MAX_CHANNEL_NAME = 64
89
89
 
90
- #: The largest archive a channel may name. Equal to ``update.MAX_RELEASE_ARCHIVE_BYTES``: the
91
- #: manifest cannot promise bytes the installer would refuse to read.
90
+ #: The largest archive a channel may name. Equal to ``update.MAX_RELEASE_MEMORY_BYTES`` and NOT to
91
+ #: ``update.MAX_RELEASE_ARCHIVE_BYTES``, which is four times larger: the manifest cannot promise
92
+ #: bytes the installer would refuse to read, and the installer this channel feeds hands the archive
93
+ #: over as one ``bytes`` object, so the ceiling that binds is the in-memory one.
92
94
  MAX_CHANNEL_ARCHIVE_BYTES = 1_073_741_824
93
95
 
94
96
  _CHANNEL_NAME = re.compile(r"[a-z0-9][a-z0-9-]{0,62}[a-z0-9]|[a-z0-9]")
@@ -2,9 +2,17 @@
2
2
 
3
3
  Three public stores exist, and dispatch between them is by exact name and exact schema rather than
4
4
  by discovery: a v1 sealed catalog, a v2 retrieval manifest, and a range-local packed head. The two
5
- legacy paths below are byte-for-byte what they were -- ``search_catalog`` is the shipped
6
- ``mr-data catalog-search`` entry point and its payload is a published shape -- and the packed path
7
- is a separate capture that never touches them.
5
+ legacy paths below are byte-for-byte what they were -- ``search_catalog``'s payload is a published
6
+ shape and is left alone -- and the packed path is a separate capture that never touches them.
7
+
8
+ ⚠ NO COMMAND LINE REACHES ANY OF THIS, AND THE ONE THAT NAMES IT DOES NOT RUN HERE.
9
+ ``mr-data catalog-search`` was deleted with the local lane; what a person types now is
10
+ ``mr-data catalog search``, which is a hosted command that sends the question over the V4 wire and
11
+ never loads a store on the machine it was typed on. The reason is measured rather than stylistic:
12
+ one question against the production generation costs seconds of CPU and hundreds of megabytes of
13
+ reads, which is not work a client whose whole contract is "installs with no third-party
14
+ distribution" can do. So the caller of :func:`capture_packed_catalog_search` is Studio's own
15
+ catalogue service, and this module is the engine it runs, not a front door.
8
16
  """
9
17
 
10
18
  from __future__ import annotations
@@ -66,7 +66,7 @@ PINNED_CONTRACT_SET = "mostlyright-studio-v3"
66
66
  PINNED_CONTRACT_VERSION = "3.0.0"
67
67
  PINNED_GENERATOR = "openapi-python-client"
68
68
  PINNED_GENERATOR_VERSION = "0.27.1"
69
- PINNED_OPENAPI_SOURCE_SHA256 = "f2164517534e299f96449659332fc5bc0552fa7f94539c3d829fa948923e9a2e"
69
+ PINNED_OPENAPI_SOURCE_SHA256 = "9cf67046fc85f504e5be2fc73a572d65c0e71cfdbcf338eff811ce8d065f7a41"
70
70
 
71
71
  #: The bytes of Studio's V4 OpenAPI document, ``contracts/openapi/studio-v4.yaml``, at the same
72
72
  #: commit :data:`PINNED_OPENAPI_SOURCE_SHA256` was taken from. Both are written by
@@ -85,7 +85,7 @@ PINNED_OPENAPI_SOURCE_SHA256 = "f2164517534e299f96449659332fc5bc0552fa7f94539c3d
85
85
  #: One line, and it stays one line: ``_replace_exactly`` in the repin matches the whole assignment
86
86
  #: as a literal and refuses on any count but one, so a wrapped constant is a constant the repin can
87
87
  #: no longer rewrite.
88
- PINNED_V4_OPENAPI_SOURCE_SHA256 = "bfca3117be3e69838b570d8c40937656151d2c25534c3b536a6828257775ba8e"
88
+ PINNED_V4_OPENAPI_SOURCE_SHA256 = "f61d0d3b117c0934b9270d5992a122b352971d5bb4297cbd69f189b5f5dc6341"
89
89
 
90
90
  _DIGEST = re.compile(r"^sha256:[0-9a-f]{64}$")
91
91
  _IMAGE_DIGEST = re.compile(r"^[a-z0-9][a-z0-9._/-]{0,254}@sha256:[0-9a-f]{64}$")
@@ -0,0 +1,9 @@
1
+ """Closed primary-category vocabulary mirrored from Studio's versioned contract."""
2
+
3
+ import json
4
+ from pathlib import Path
5
+
6
+ TAXONOMY = json.loads(
7
+ Path(__file__).with_name("dataset-categories-v1.json").read_text(encoding="utf-8")
8
+ )
9
+ CATEGORY_IDS = tuple(entry["id"] for entry in TAXONOMY["categories"])
@@ -0,0 +1,132 @@
1
+ {
2
+ "version": 1,
3
+ "assignment_policy": "Exactly one primary category, chosen from the dataset purpose, tables and measured entities. Prefer the principal subject over its source, cadence, format or secondary variables. Preserve the assignment on refresh. Other requires a recorded reason.",
4
+ "categories": [
5
+ {
6
+ "id": "climate-environment",
7
+ "label": "Climate & Environment",
8
+ "definition": "Weather, climate, pollution, ecosystems and environmental measurements.",
9
+ "exclusions": "Agricultural output belongs to Agriculture & Food; energy supply belongs to Energy.",
10
+ "examples": "Hourly weather observations; air quality; ocean temperatures"
11
+ },
12
+ {
13
+ "id": "crypto",
14
+ "label": "Crypto",
15
+ "definition": "Cryptocurrencies, blockchain networks, DeFi and digital-asset markets.",
16
+ "exclusions": "Use Finance for conventional securities, banking and non-crypto prediction markets.",
17
+ "examples": "Bitcoin prices; Ethereum transactions; DeFi lending"
18
+ },
19
+ {
20
+ "id": "finance",
21
+ "label": "Finance",
22
+ "definition": "Banking, securities, investment, insurance and financial-market activity.",
23
+ "exclusions": "Crypto assets belong to Crypto; economy-wide indicators belong to Economics & Business.",
24
+ "examples": "Stock prices; interest-rate products; prediction-market order books"
25
+ },
26
+ {
27
+ "id": "economics-business",
28
+ "label": "Economics & Business",
29
+ "definition": "Economic indicators, businesses, commerce, industry and consumer activity.",
30
+ "exclusions": "Financial instruments belong to Finance; individual population characteristics belong to People & Society.",
31
+ "examples": "GDP; inflation; company directories; retail sales"
32
+ },
33
+ {
34
+ "id": "government-politics",
35
+ "label": "Government & Politics",
36
+ "definition": "Elections, public policy, government institutions and administration.",
37
+ "exclusions": "Courts and crime belong to Law & Public Safety; economic outcomes belong to Economics & Business.",
38
+ "examples": "Election results; legislative votes; public budgets"
39
+ },
40
+ {
41
+ "id": "people-society",
42
+ "label": "People & Society",
43
+ "definition": "Population, demographics, communities, social conditions and human behavior.",
44
+ "exclusions": "Clinical outcomes belong to Health & Medicine; formal learning belongs to Education.",
45
+ "examples": "Census; migration; public opinion; household surveys"
46
+ },
47
+ {
48
+ "id": "health-medicine",
49
+ "label": "Health & Medicine",
50
+ "definition": "Clinical medicine, healthcare, diseases and public health.",
51
+ "exclusions": "Non-health scientific experiments belong to Science & Research.",
52
+ "examples": "Disease surveillance; hospitals; clinical trials"
53
+ },
54
+ {
55
+ "id": "science-research",
56
+ "label": "Science & Research",
57
+ "definition": "Physical and natural sciences, experiments, astronomy and general research metadata.",
58
+ "exclusions": "Use the subject-specific category for weather, health, technology or other covered research.",
59
+ "examples": "Astronomical observations; particle experiments; research publications"
60
+ },
61
+ {
62
+ "id": "technology",
63
+ "label": "Technology",
64
+ "definition": "Software, computing, AI, internet and telecommunications.",
65
+ "exclusions": "Blockchain belongs to Crypto; media consumption and gaming belong to Arts, Media & Entertainment.",
66
+ "examples": "Software packages; internet performance; AI benchmarks"
67
+ },
68
+ {
69
+ "id": "energy",
70
+ "label": "Energy",
71
+ "definition": "Electricity, fuels, energy production, consumption and supply infrastructure.",
72
+ "exclusions": "Weather measurements belong to Climate & Environment even when used for energy analysis.",
73
+ "examples": "Power generation; electricity demand; oil production"
74
+ },
75
+ {
76
+ "id": "agriculture-food",
77
+ "label": "Agriculture & Food",
78
+ "definition": "Farming, livestock, fisheries, food production and food systems.",
79
+ "exclusions": "Weather alone belongs to Climate & Environment; clinical nutrition outcomes belong to Health & Medicine.",
80
+ "examples": "Crop yields with weather covariates; livestock counts; fisheries"
81
+ },
82
+ {
83
+ "id": "transport-mobility",
84
+ "label": "Transport & Mobility",
85
+ "definition": "Movement of people and goods by road, rail, air and sea.",
86
+ "exclusions": "Airport weather observations belong to Climate & Environment.",
87
+ "examples": "Transit ridership; flight movements; shipping routes"
88
+ },
89
+ {
90
+ "id": "places-infrastructure",
91
+ "label": "Places & Infrastructure",
92
+ "definition": "Geography, maps, property, buildings, housing and non-energy infrastructure.",
93
+ "exclusions": "Movement belongs to Transport & Mobility; electricity systems belong to Energy.",
94
+ "examples": "Building footprints; property listings; water networks"
95
+ },
96
+ {
97
+ "id": "education",
98
+ "label": "Education",
99
+ "definition": "Schools, universities, learning, students and educational outcomes.",
100
+ "exclusions": "Research datasets use their subject category rather than the institution that produced them.",
101
+ "examples": "School enrollment; exam results; course catalogs"
102
+ },
103
+ {
104
+ "id": "sports",
105
+ "label": "Sports",
106
+ "definition": "Sports competitions, athletes, teams and athletic performance.",
107
+ "exclusions": "Video-game activity and esports belong to Arts, Media & Entertainment.",
108
+ "examples": "Match results; player statistics; athletic records"
109
+ },
110
+ {
111
+ "id": "arts-media-entertainment",
112
+ "label": "Arts, Media & Entertainment",
113
+ "definition": "Culture, arts, news media, music, film, gaming, esports and audience activity.",
114
+ "exclusions": "A news dataset about a specific subject belongs to that subject when the observations measure that subject.",
115
+ "examples": "Film releases; Steam players; game-related pageviews; music charts"
116
+ },
117
+ {
118
+ "id": "law-public-safety",
119
+ "label": "Law & Public Safety",
120
+ "definition": "Legal systems, courts, crime, policing and emergency response.",
121
+ "exclusions": "Election and legislative activity belongs to Government & Politics.",
122
+ "examples": "Court decisions; crime reports; emergency incidents"
123
+ },
124
+ {
125
+ "id": "other",
126
+ "label": "Other",
127
+ "definition": "A meaningful subject not covered by any category after reviewing its definitions.",
128
+ "exclusions": "Never use for missing research, uncertainty, mixed subjects, test status, cadence or file format. Record why none fits.",
129
+ "examples": "A documented subject outside the defined taxonomy"
130
+ }
131
+ ]
132
+ }
@@ -323,11 +323,9 @@ def column_description_warnings(absent: list[str]) -> list[str]:
323
323
  def check_dataset_binding(dataset: Any) -> None:
324
324
  """Refuse a ``dataset.id`` that could not name a dataset, before anything is sent.
325
325
 
326
- ⚠ THE MEMBER IS OPTIONAL, AND ITS ABSENCE IS NOT A MISTAKE. A document with no ``dataset.id``
327
- registers exactly as it always did: Studio resolves the container from ``(workspace_id, name)``.
328
- What the member buys is the live-authoring order -- ``mr-data dataset create`` mints the page
329
- BEFORE the research starts, so somebody watching sees it fill in, and the registration binds to
330
- the page they are already looking at instead of minting a second one behind them.
326
+ The legacy server contract admits name-only registration, but this CLI requests category
327
+ enforcement, which requires a saved category and stable dataset.id. The build creates the
328
+ page before research and binds the recipe to that same page. Studio checks the saved category.
331
329
 
332
330
  ⚠ AND A MISTYPED ONE IS THE EXPENSIVE MISTAKE, WHICH IS WHY IT IS CHECKED HERE. An identifier
333
331
  that is not a UUID is a 422 after a token exchange; an identifier that is a UUID and names
@@ -354,8 +352,7 @@ def check_dataset_binding(dataset: Any) -> None:
354
352
  raise ThinLaneError(
355
353
  "THIN_RECIPE_DOCUMENT_INVALID",
356
354
  "the recipe document's dataset.id is not a dataset identifier; it is the identifier "
357
- "mr-data dataset create printed, or the member is left out and Studio resolves the "
358
- "dataset from its name",
355
+ "mr-data dataset create printed. Save its category before registering the recipe",
359
356
  ) from None
360
357
  if stated != canonical:
361
358
  raise ThinLaneError(
@@ -131,6 +131,7 @@ HOSTED_SUMMARY = dict(
131
131
  "list one table version's parts, so a training loader can shard them across workers",
132
132
  ),
133
133
  ("probe", "ask one source one question and print what it answered"),
134
+ ("catalog", "ask the sealed public-source catalogue what might answer a question"),
134
135
  ("stream", "record a public wss venue and name the recording a build reads"),
135
136
  ("keys", "store a source credential by name, name the stored ones, and withdraw one"),
136
137
  ("open", "hand this terminal's session to the browser as a single-use address"),
@@ -285,6 +286,13 @@ def _hosted_parser() -> argparse.ArgumentParser:
285
286
  v4_query.declare_arguments(_add("query"))
286
287
  probe_module.declare_arguments(_add("probe"))
287
288
 
289
+ # ------------------------------------------------------------------------------------
290
+ # The sources that do not exist here yet, named by somebody else's public metadata
291
+ # ------------------------------------------------------------------------------------
292
+ from mostlyright.data_harness.thin import v4_catalog
293
+
294
+ v4_catalog.declare_arguments(_add("catalog"))
295
+
288
296
  # ------------------------------------------------------------------------------------
289
297
  # The source whose bytes do not exist until somebody records them
290
298
  # ------------------------------------------------------------------------------------
@@ -389,6 +397,7 @@ def _handlers() -> dict[str, Callable[[argparse.Namespace], dict[str, Any]]]:
389
397
  recipe,
390
398
  stream_venue,
391
399
  v4_artifacts,
400
+ v4_catalog,
392
401
  v4_connections,
393
402
  v4_dataset_covers,
394
403
  v4_datasets,
@@ -420,6 +429,10 @@ def _handlers() -> dict[str, Callable[[argparse.Namespace], dict[str, Any]]]:
420
429
  # surface; the owner ruling keeps the v3 session routes mounted-but-frozen and makes
421
430
  # `probe` one command over them, with the migration scheduled after this milestone.
422
431
  "probe": probe_module.probe,
432
+ # ⚠ `catalog`, NOT `catalog_search`. The COMMAND is `catalog`; the function is named
433
+ # around the command rather than around its one verb, because the verb is a
434
+ # positional and the module is where a second one would land.
435
+ "catalog": v4_catalog.catalog,
423
436
  # The venue lane. One name over eight verbs, because registering a document,
424
437
  # admitting it, probing it, capturing it, subscribing to it and reading back what
425
438
  # any of those produced are steps of one act -- and eight top-level names would be