mostlyright-data 0.14.0__tar.gz → 0.14.1__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 (562) hide show
  1. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/PKG-INFO +1 -1
  2. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/pyproject.toml +1 -1
  3. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/skills/mr-data-build/SKILL.md +18 -0
  4. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/hosted_stream_subscription_worker.py +50 -21
  5. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/stream_subscription_worker.py +35 -10
  6. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/studio_subscription_control.py +118 -3
  7. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/v4_recipe.py +35 -11
  8. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/.gitignore +0 -0
  9. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/README.md +0 -0
  10. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/scripts/hatch_build.py +0 -0
  11. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/skills/mr-data-build/agents/openai.yaml +0 -0
  12. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/skills/mr-data-build/scripts/write_research_notebook.py +0 -0
  13. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/skills/mr-data-build/scripts/write_visual_run.py +0 -0
  14. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/_vendor/__init__.py +0 -0
  15. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/_vendor/rapidocr/LICENSE +0 -0
  16. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/_vendor/rapidocr/PROVENANCE.json +0 -0
  17. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/_vendor/rapidocr/__init__.py +0 -0
  18. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/_vendor/rapidocr/__init__.pyi +0 -0
  19. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/_vendor/rapidocr/_version.py +0 -0
  20. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/_vendor/rapidocr/cal_rec_boxes/__init__.py +0 -0
  21. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/_vendor/rapidocr/cal_rec_boxes/main.py +0 -0
  22. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/_vendor/rapidocr/ch_ppocr_cls/__init__.py +0 -0
  23. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/_vendor/rapidocr/ch_ppocr_cls/main.py +0 -0
  24. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/_vendor/rapidocr/ch_ppocr_cls/utils.py +0 -0
  25. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/_vendor/rapidocr/ch_ppocr_det/__init__.py +0 -0
  26. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/_vendor/rapidocr/ch_ppocr_det/main.py +0 -0
  27. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/_vendor/rapidocr/ch_ppocr_det/utils.py +0 -0
  28. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/__init__.py +0 -0
  29. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/main.py +0 -0
  30. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/typings.py +0 -0
  31. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/utils.py +0 -0
  32. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/_vendor/rapidocr/config.yaml +0 -0
  33. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/_vendor/rapidocr/inference_engine/__init__.py +0 -0
  34. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/_vendor/rapidocr/inference_engine/base.py +0 -0
  35. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/_vendor/rapidocr/inference_engine/onnxruntime/__init__.py +0 -0
  36. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/_vendor/rapidocr/inference_engine/onnxruntime/main.py +0 -0
  37. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/_vendor/rapidocr/inference_engine/onnxruntime/provider_config.py +0 -0
  38. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/_vendor/rapidocr/main.py +0 -0
  39. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/_vendor/rapidocr/models/PP-OCRv6_det_small.onnx +0 -0
  40. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/_vendor/rapidocr/models/PP-OCRv6_rec_small.onnx +0 -0
  41. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/_vendor/rapidocr/models/ch_ppocr_mobile_v2.0_cls_mobile.onnx +0 -0
  42. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/_vendor/rapidocr/py.typed +0 -0
  43. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/_vendor/rapidocr/utils/__init__.py +0 -0
  44. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/_vendor/rapidocr/utils/load_image.py +0 -0
  45. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/_vendor/rapidocr/utils/log.py +0 -0
  46. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/_vendor/rapidocr/utils/model_resolver.py +0 -0
  47. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/_vendor/rapidocr/utils/output.py +0 -0
  48. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/_vendor/rapidocr/utils/parse_parameters.py +0 -0
  49. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/_vendor/rapidocr/utils/process_img.py +0 -0
  50. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/_vendor/rapidocr/utils/typings.py +0 -0
  51. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/_vendor/rapidocr/utils/utils.py +0 -0
  52. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/__init__.py +0 -0
  53. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/acquisition/__init__.py +0 -0
  54. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/acquisition/derived_credentials.py +0 -0
  55. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/acquisition/http.py +0 -0
  56. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/acquisition/parsing.py +0 -0
  57. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/acquisition/ranges.py +0 -0
  58. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/acquisition/result_download.py +0 -0
  59. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/acquisition/retention_admission.py +0 -0
  60. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/acquisition/sandbox.py +0 -0
  61. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/acquisition/url_policy.py +0 -0
  62. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/agent_runtime.py +0 -0
  63. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/assets/logo-ink.svg +0 -0
  64. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/backends/__init__.py +0 -0
  65. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/backends/pandas_backend.py +0 -0
  66. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/backends/polars_backend.py +0 -0
  67. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/backends/protocol.py +0 -0
  68. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/backends/reference.py +0 -0
  69. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/backends/registry.py +0 -0
  70. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/backends/restrictions.py +0 -0
  71. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/bounded_query.py +0 -0
  72. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/canonical.py +0 -0
  73. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/catalog_job.py +0 -0
  74. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/cli.py +0 -0
  75. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/contracts.py +0 -0
  76. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/coordinator.py +0 -0
  77. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/crosswalks.py +0 -0
  78. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/declared_checks.py +0 -0
  79. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/deploy.py +0 -0
  80. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/deploy_target.py +0 -0
  81. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/deployment_evidence.py +0 -0
  82. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/documents/__init__.py +0 -0
  83. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/documents/_worker_capability.py +0 -0
  84. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/documents/agent_request.py +0 -0
  85. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/documents/capture.py +0 -0
  86. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/documents/contracts.py +0 -0
  87. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/documents/lane.py +0 -0
  88. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/documents/ocr.py +0 -0
  89. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/documents/pdf.py +0 -0
  90. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/documents/registry.py +0 -0
  91. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/documents/sandbox.py +0 -0
  92. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/documents/selections.py +0 -0
  93. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/documents/tables.py +0 -0
  94. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/documents/vendor_rapidocr.py +0 -0
  95. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/events.py +0 -0
  96. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/fast_delimited.py +0 -0
  97. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/formats.py +0 -0
  98. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/governors.py +0 -0
  99. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/hosted_bootstrap.py +0 -0
  100. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/hosted_crawler.py +0 -0
  101. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/hosted_crawler_container_smoke.py +0 -0
  102. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/hosted_crawler_fetch.py +0 -0
  103. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/hosted_crawler_job.py +0 -0
  104. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/hosted_crawler_protocol.py +0 -0
  105. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/hosted_dataset.py +0 -0
  106. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/hosted_deploy.py +0 -0
  107. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/hosted_handoff.py +0 -0
  108. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/hosted_ingestion_contract.py +0 -0
  109. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/hosted_ingestion_job.py +0 -0
  110. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/hosted_ingestion_job_smoke.py +0 -0
  111. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/hosted_rlimit_as_container_smoke.py +0 -0
  112. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/hosted_run_worker.py +0 -0
  113. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/hosted_session_container_smoke.py +0 -0
  114. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/hosted_session_worker.py +0 -0
  115. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/hosted_session_worker_job_smoke.py +0 -0
  116. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/hosted_stream_recorder_container_smoke.py +0 -0
  117. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/hosted_stream_recorder_job.py +0 -0
  118. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/hosted_stream_subscription_container_smoke.py +0 -0
  119. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/hosted_worker.py +0 -0
  120. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/ingestion/__init__.py +0 -0
  121. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/ingestion/contracts.py +0 -0
  122. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/ingestion/faults.py +0 -0
  123. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/ingestion/gcs_store.py +0 -0
  124. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/ingestion/spool.py +0 -0
  125. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/ingestion/store.py +0 -0
  126. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/inprocess_acquisition.py +0 -0
  127. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/key_seam.py +0 -0
  128. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/linux_process_boundary.py +0 -0
  129. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/local_contracts.py +0 -0
  130. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/local_search/__init__.py +0 -0
  131. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/local_search/build_index.py +0 -0
  132. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/local_search/contracts.py +0 -0
  133. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/local_search/query_trace.py +0 -0
  134. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/local_search/retrieval.py +0 -0
  135. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/local_search/sealed.py +0 -0
  136. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/local_search/service.py +0 -0
  137. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/nbrender/CONTRACT.md +0 -0
  138. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/nbrender/__init__.py +0 -0
  139. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/nbrender/chrome.py +0 -0
  140. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/nbrender/code_body.py +0 -0
  141. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/nbrender/document.py +0 -0
  142. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/nbrender/frame.py +0 -0
  143. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/nbrender/interactive.py +0 -0
  144. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/nbrender/markdown_body.py +0 -0
  145. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/nbrender/mr_components.py +0 -0
  146. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/nbrender/outputs_data.py +0 -0
  147. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/nbrender/outputs_rich.py +0 -0
  148. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/nbrender/outputs_source.py +0 -0
  149. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/nbrender/outputs_stage.py +0 -0
  150. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/nbrender/outputs_text.py +0 -0
  151. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/nbrender/parse.py +0 -0
  152. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/nbrender/status.py +0 -0
  153. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/nbrender/tokens.py +0 -0
  154. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/notebook.py +0 -0
  155. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/offline.py +0 -0
  156. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/operation_registry.py +0 -0
  157. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/operator_setup.py +0 -0
  158. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/pipeline.py +0 -0
  159. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/plan_graph.py +0 -0
  160. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/preparation/__init__.py +0 -0
  161. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/preparation/contracts.py +0 -0
  162. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/preparation/engine.py +0 -0
  163. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/preparation/errors.py +0 -0
  164. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/preparation/gates.py +0 -0
  165. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/preparation/joins.py +0 -0
  166. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/preparation/profile.py +0 -0
  167. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/preparation/table.py +0 -0
  168. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/preparation/transforms.py +0 -0
  169. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/progress_events.py +0 -0
  170. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/__init__.py +0 -0
  171. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/_openpyxl.py +0 -0
  172. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/budgets.py +0 -0
  173. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/containers.py +0 -0
  174. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/contracts.py +0 -0
  175. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/delimited.py +0 -0
  176. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/geojson_vector.py +0 -0
  177. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/geopackage.py +0 -0
  178. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/geoparquet.py +0 -0
  179. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/grib2/__init__.py +0 -0
  180. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/grib2/admission.py +0 -0
  181. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/grib2/collection.py +0 -0
  182. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/grib2/collection_reader.py +0 -0
  183. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/grib2/decode.py +0 -0
  184. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/grib2/geometry.py +0 -0
  185. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/grib2/portable_math.py +0 -0
  186. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/grib_eccodes.py +0 -0
  187. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/html_tabular.py +0 -0
  188. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/html_web_extract.py +0 -0
  189. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/json_tabular.py +0 -0
  190. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/parquet_tabular.py +0 -0
  191. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/pcaxis_px.py +0 -0
  192. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/protobuf_tabular.py +0 -0
  193. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/raster/__init__.py +0 -0
  194. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/raster/_bytes.py +0 -0
  195. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/raster/decode.py +0 -0
  196. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/raster/family.py +0 -0
  197. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/raster/jpeg2000.py +0 -0
  198. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/raster/profiles.py +0 -0
  199. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/raster/rendered.py +0 -0
  200. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/raster/safe.py +0 -0
  201. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/raster/sentinel_safe.py +0 -0
  202. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/raster/tiff.py +0 -0
  203. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/registry.py +0 -0
  204. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/README.md +0 -0
  205. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.0.0/cities_one_stream/cities.csv.gz +0 -0
  206. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.0.0/cities_one_stream/expected.json +0 -0
  207. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.1.0/cities_one_stream/cities.csv.gz +0 -0
  208. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.1.0/cities_one_stream/expected.json +0 -0
  209. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/archive.tar/1.0.0/cities_beside_a_directory_entry/cities.tar +0 -0
  210. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/archive.tar/1.0.0/cities_beside_a_directory_entry/expected.json +0 -0
  211. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/archive.tar/1.1.0/cities_beside_a_directory_entry/cities.tar +0 -0
  212. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/archive.tar/1.1.0/cities_beside_a_directory_entry/expected.json +0 -0
  213. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/archive.zip/1.0.0/cities_beside_a_second_member/cities.zip +0 -0
  214. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/archive.zip/1.0.0/cities_beside_a_second_member/expected.json +0 -0
  215. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/archive.zip/1.1.0/dwd_semicolon_station_member/dwd-station.zip +0 -0
  216. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/archive.zip/1.1.0/dwd_semicolon_station_member/expected.json +0 -0
  217. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/archive.zip/1.2.0/dwd_semicolon_station_member/dwd-station.zip +0 -0
  218. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/archive.zip/1.2.0/dwd_semicolon_station_member/expected.json +0 -0
  219. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/an_ordinary_comma_separated_table/cities.csv +0 -0
  220. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/an_ordinary_comma_separated_table/expected.json +0 -0
  221. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/quoted_fields_holding_the_delimiter/cities.tsv +0 -0
  222. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/quoted_fields_holding_the_delimiter/expected.json +0 -0
  223. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/delimited_text/1.1.0/an_hourly_observation_table_served_as_plain_text/expected.json +0 -0
  224. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/delimited_text/1.1.0/an_hourly_observation_table_served_as_plain_text/observations.csv +0 -0
  225. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/geojson.vector/1.0.0/czech_capital/expected.json +0 -0
  226. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/geojson.vector/1.0.0/czech_capital/places.geojson +0 -0
  227. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/geopackage.vector/1.0.0/epsg_4326_feature/expected.json +0 -0
  228. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/geopackage.vector/1.0.0/epsg_4326_feature/places.gpkg +0 -0
  229. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/geoparquet.vector/1.0.0/primary_wkb_point/expected.json +0 -0
  230. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/geoparquet.vector/1.0.0/primary_wkb_point/places.parquet +0 -0
  231. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/html.tabular/1.0.0/sanitized_table/expected.json +0 -0
  232. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/html.tabular/1.0.0/sanitized_table/table.html +0 -0
  233. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/html.web_extract/1.0.0/json_ld_scorecards/expected.json +0 -0
  234. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/html.web_extract/1.0.0/json_ld_scorecards/scorecards.html +0 -0
  235. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/image.rendered/1.0.0/tiny_png/expected.json +0 -0
  236. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/image.rendered/1.0.0/tiny_png/tiny-rendered.png +0 -0
  237. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/json.tabular/1.0.0/nested_hourly_observations/expected.json +0 -0
  238. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/json.tabular/1.0.0/nested_hourly_observations/stations.json +0 -0
  239. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/json.tabular/1.1.0/an_observation_stream_served_as_plain_text/expected.json +0 -0
  240. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/json.tabular/1.1.0/an_observation_stream_served_as_plain_text/observations.ndjson +0 -0
  241. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/meteorology.bufr/1.0.0/eccodes_bufr4_subset/eccodes-bufr4.bufr +0 -0
  242. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/meteorology.bufr/1.0.0/eccodes_bufr4_subset/expected.json +0 -0
  243. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/meteorology.grib/1.0.0/eccodes_grib1_origin/expected.json +0 -0
  244. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/meteorology.grib/1.0.0/eccodes_grib1_origin/regular-ll-surface.grib1 +0 -0
  245. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/microdata.sas_xpt/1.0.0/two_raw_columns/expected.json +0 -0
  246. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/microdata.sas_xpt/1.0.0/two_raw_columns/survey.xpt +0 -0
  247. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/microdata.spss_sav/1.0.0/two_raw_columns/expected.json +0 -0
  248. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/microdata.spss_sav/1.0.0/two_raw_columns/survey.sav +0 -0
  249. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/microdata.stata_dta/1.0.0/two_raw_columns/expected.json +0 -0
  250. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/microdata.stata_dta/1.0.0/two_raw_columns/stata.dta +0 -0
  251. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/official.pcaxis_px/1.0.0/population_by_region_and_year/expected.json +0 -0
  252. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/official.pcaxis_px/1.0.0/population_by_region_and_year/population.px +0 -0
  253. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/official.sdmx_json/1.0.0/compact_population_series/expected.json +0 -0
  254. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/official.sdmx_json/1.0.0/compact_population_series/population.json +0 -0
  255. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/parquet.tabular/1.0.0/two_columns/expected.json +0 -0
  256. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/parquet.tabular/1.0.0/two_columns/prices.parquet +0 -0
  257. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/protobuf.tabular/1.0.0/gtfs_realtime_trip_updates/expected.json +0 -0
  258. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/protobuf.tabular/1.0.0/gtfs_realtime_trip_updates/gtfs-realtime.desc +0 -0
  259. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/protobuf.tabular/1.0.0/gtfs_realtime_trip_updates/trip-updates.pb +0 -0
  260. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/raster.geospatial/1.0.0/tiny_geotiff/expected.json +0 -0
  261. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/raster.geospatial/1.0.0/tiny_geotiff/tiny-geospatial.tif +0 -0
  262. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/satellite.goes_abi_l2/1.0.0/authored_cmi_window/expected.json +0 -0
  263. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/satellite.goes_abi_l2/1.0.0/authored_cmi_window/goes-abi-l2-cmi-window.nc +0 -0
  264. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/satellite.himawari_hsd/1.0.0/authored_b13_single_bzip2/expected.json +0 -0
  265. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/satellite.himawari_hsd/1.0.0/authored_b13_single_bzip2/himawari-b13-0101-bzip2.dat +0 -0
  266. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/satellite.himawari_hsd_complete/1.0.0/authored_b13_three_segment_scan/expected.json +0 -0
  267. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/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
  268. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/satellite.msg_seviri_l15/1.0.0/authored_calibrated_complete_visir/expected.json +0 -0
  269. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/satellite.msg_seviri_l15/1.0.0/authored_calibrated_complete_visir/msg-seviri-l15.zip +0 -0
  270. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/satellite.sentinel_safe/1.0.0/authored_b02_scl_window/expected.json +0 -0
  271. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/satellite.sentinel_safe/1.0.0/authored_b02_scl_window/sentinel-safe-b02-scl.zip +0 -0
  272. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/satellite.xrit_image/1.0.0/authored_complete_raw_counts/expected.json +0 -0
  273. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/satellite.xrit_image/1.0.0/authored_complete_raw_counts/xrit-complete-image.zip +0 -0
  274. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/scientific.fits/1.0.0/tiny_primary_window/expected.json +0 -0
  275. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/scientific.fits/1.0.0/tiny_primary_window/tiny-primary.fits +0 -0
  276. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/scientific.hdf4/1.0.0/authored_temperature_window/expected.json +0 -0
  277. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/scientific.hdf4/1.0.0/authored_temperature_window/temperature.hdf +0 -0
  278. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/scientific.hdf5/1.0.0/authored_temperature_window/expected.json +0 -0
  279. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/scientific.hdf5/1.0.0/authored_temperature_window/temperature.h5 +0 -0
  280. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/scientific.hdf_eos2/1.0.0/authored_grid_temperature_window/expected.json +0 -0
  281. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/scientific.hdf_eos2/1.0.0/authored_grid_temperature_window/nasa-hdfeos2-grid.hdf +0 -0
  282. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/scientific.hdf_eos2/1.0.0/authored_swath_temperature_window/expected.json +0 -0
  283. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/scientific.hdf_eos2/1.0.0/authored_swath_temperature_window/nasa-hdfeos2-swath.hdf +0 -0
  284. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/scientific.netcdf/1.0.0/authored_classic_temperature_window/expected.json +0 -0
  285. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/scientific.netcdf/1.0.0/authored_classic_temperature_window/temperature-classic.nc +0 -0
  286. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/scientific.zarr/1.0.0/authored_v3_temperature_window/expected.json +0 -0
  287. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/scientific.zarr/1.0.0/authored_v3_temperature_window/temperature-zarr-v3.zip +0 -0
  288. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.0.0/an_ordinary_table_beside_a_second_sheet/cities.xlsx +0 -0
  289. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.0.0/an_ordinary_table_beside_a_second_sheet/expected.json +0 -0
  290. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.0.0/shares_the_workbook_had_already_computed/expected.json +0 -0
  291. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.0.0/shares_the_workbook_had_already_computed/shares.xlsx +0 -0
  292. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.1.0/shares_the_workbook_had_already_computed/expected.json +0 -0
  293. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.1.0/shares_the_workbook_had_already_computed/shares.xlsx +0 -0
  294. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/README.md +0 -0
  295. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/gfs_2m_temperature/expected.json +0 -0
  296. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/gfs_2m_temperature/gfs-2m-temperature.grib2 +0 -0
  297. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_2m_temperature/expected.json +0 -0
  298. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_2m_temperature/hrrr-2m-temperature.grib2 +0 -0
  299. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_categorical_rain/expected.json +0 -0
  300. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_categorical_rain/hrrr-categorical-rain.grib2 +0 -0
  301. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/weather.grib2/2.0.0/hrrr_2m_temperature/expected.json +0 -0
  302. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/weather.grib2/2.0.0/hrrr_2m_temperature/hrrr-2m-temperature.grib2 +0 -0
  303. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/weather.grib2/3.0.0/gfs_and_hrrr_categorical_rain/expected.json +0 -0
  304. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/weather.grib2/3.0.0/gfs_and_hrrr_categorical_rain/gfs-and-hrrr-categorical-rain.grib2 +0 -0
  305. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/plain_filing_fact/expected.json +0 -0
  306. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/plain_filing_fact/filing.xml +0 -0
  307. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/xml_inline_fact/expected.json +0 -0
  308. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/xml_inline_fact/filing.xhtml +0 -0
  309. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/pacer_rss_feed/expected.json +0 -0
  310. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/pacer_rss_feed/feed.xml +0 -0
  311. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/sec_form_d_filing/expected.json +0 -0
  312. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/sec_form_d_filing/filing.xml +0 -0
  313. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/unified_agenda_extract/agenda.xml +0 -0
  314. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/unified_agenda_extract/expected.json +0 -0
  315. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/samples.py +0 -0
  316. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/scientific.py +0 -0
  317. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/scientific_arrays/__init__.py +0 -0
  318. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/scientific_arrays/container.py +0 -0
  319. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/scientific_arrays/goes.py +0 -0
  320. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/scientific_arrays/hdf4.py +0 -0
  321. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/scientific_arrays/hdf4_bridge.py +0 -0
  322. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/scientific_arrays/hdf5.py +0 -0
  323. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/scientific_arrays/native.py +0 -0
  324. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/scientific_arrays/netcdf.py +0 -0
  325. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/scientific_arrays/profiles.py +0 -0
  326. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/scientific_arrays/raw.py +0 -0
  327. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/scientific_arrays/zarr.py +0 -0
  328. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/scientific_catalog.py +0 -0
  329. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/scientific_segmented/__init__.py +0 -0
  330. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/scientific_segmented/asset_sets.py +0 -0
  331. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/scientific_segmented/formats.py +0 -0
  332. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/scientific_segmented/hsd.py +0 -0
  333. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/scientific_segmented/native.py +0 -0
  334. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/scientific_segmented/profiles.py +0 -0
  335. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/scientific_segmented/reader.py +0 -0
  336. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/scientific_segmented/xrit.py +0 -0
  337. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/sdmx_json.py +0 -0
  338. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/spreadsheet.py +0 -0
  339. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/statistical_microdata.py +0 -0
  340. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/tabular.py +0 -0
  341. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/vector.py +0 -0
  342. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/vector_wkb.py +0 -0
  343. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/xbrl_facts.py +0 -0
  344. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/readers/xml_tabular.py +0 -0
  345. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/recipe.py +0 -0
  346. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/repair/__init__.py +0 -0
  347. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/repair/adapters.py +0 -0
  348. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/repair/contracts.py +0 -0
  349. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/repair/coordinator.py +0 -0
  350. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/repair/errors.py +0 -0
  351. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/review.py +0 -0
  352. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/rowset.py +0 -0
  353. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/run_execution_v4.py +0 -0
  354. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/session_probes.py +0 -0
  355. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/signing.py +0 -0
  356. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/skill_assets.py +0 -0
  357. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/source_discovery.py +0 -0
  358. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/__init__.py +0 -0
  359. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/_adapter_steps.py +0 -0
  360. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/adapters.py +0 -0
  361. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/authenticated_https.py +0 -0
  362. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/authenticated_https_v2.py +0 -0
  363. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/authenticated_https_v3.py +0 -0
  364. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/cadence.py +0 -0
  365. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/cadence_emission.py +0 -0
  366. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/cadence_history.py +0 -0
  367. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/catalog/__init__.py +0 -0
  368. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/catalog/admission.py +0 -0
  369. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/catalog/authoring.py +0 -0
  370. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/catalog/authoring_policy.py +0 -0
  371. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/catalog/authoring_shards.py +0 -0
  372. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/catalog/bounded_io.py +0 -0
  373. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/catalog/channel.py +0 -0
  374. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/catalog/channel_client.py +0 -0
  375. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/catalog/contracts.py +0 -0
  376. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/catalog/coverage.py +0 -0
  377. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/catalog/delta.py +0 -0
  378. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/catalog/embedding.py +0 -0
  379. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/catalog/entry_v2.py +0 -0
  380. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/catalog/fill.py +0 -0
  381. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/catalog/fill_partitions.py +0 -0
  382. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/catalog/fill_staging.py +0 -0
  383. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/catalog/gating.py +0 -0
  384. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/catalog/generation_receipt.py +0 -0
  385. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/catalog/harvest/__init__.py +0 -0
  386. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/catalog/harvest/ckan.py +0 -0
  387. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/catalog/harvest/datagov_v4.py +0 -0
  388. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/catalog/harvest/protocol.py +0 -0
  389. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/catalog/harvest/sdmx.py +0 -0
  390. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/catalog/harvest/stac.py +0 -0
  391. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/catalog/health.py +0 -0
  392. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/catalog/hosted_catalog.py +0 -0
  393. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/catalog/identity_history.py +0 -0
  394. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/catalog/neural.py +0 -0
  395. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/catalog/packed_catalog.py +0 -0
  396. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/catalog/packed_retrieval.py +0 -0
  397. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/catalog/packed_writer.py +0 -0
  398. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/catalog/query_trace.py +0 -0
  399. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/catalog/recommend.py +0 -0
  400. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/catalog/retrieval.py +0 -0
  401. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/catalog/retrieval_manifest.py +0 -0
  402. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/catalog/rights_decisions.py +0 -0
  403. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/catalog/sealed.py +0 -0
  404. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/catalog/search.py +0 -0
  405. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/catalog/streaming_delta.py +0 -0
  406. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/catalog/update.py +0 -0
  407. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/collections.py +0 -0
  408. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/contracts.py +0 -0
  409. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/dataset.py +0 -0
  410. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/deletion.py +0 -0
  411. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/document_projection.py +0 -0
  412. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/fitness.py +0 -0
  413. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/governance.py +0 -0
  414. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/hosted.py +0 -0
  415. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/integration.py +0 -0
  416. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/range_reader.py +0 -0
  417. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/registry.py +0 -0
  418. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/rights_rule.py +0 -0
  419. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/source_cadence_vectors.v1.json +0 -0
  420. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/sports.py +0 -0
  421. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/stream.py +0 -0
  422. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/stream_capture_session.py +0 -0
  423. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/stream_connector.py +0 -0
  424. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/stream_connectors/fixture.cursor-resume.v3.json +0 -0
  425. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-ed25519.v2.json +0 -0
  426. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-hmac.v2.json +0 -0
  427. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-hmac384.v2.json +0 -0
  428. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-hmac512.v2.json +0 -0
  429. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame.v2.json +0 -0
  430. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-header-rsa.v2.json +0 -0
  431. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-header.v2.json +0 -0
  432. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-permessage-jwt.v2.json +0 -0
  433. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-permessage.v2.json +0 -0
  434. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-prelude.v2.json +0 -0
  435. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-query.v2.json +0 -0
  436. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-subprotocol.v2.json +0 -0
  437. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-subscribe.v2.json +0 -0
  438. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-urlpath.v2.json +0 -0
  439. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/stream_connectors/polymarket.clob-market.v1.json +0 -0
  440. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/stream_credential.py +0 -0
  441. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/stream_prelude.py +0 -0
  442. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/stream_recorder.py +0 -0
  443. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/stream_registry.py +0 -0
  444. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/stream_rotation.py +0 -0
  445. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/stream_segment_recorder.py +0 -0
  446. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/stream_series.py +0 -0
  447. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/stream_signing.py +0 -0
  448. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sources/stream_transport.py +0 -0
  449. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/sql_transform_engine.py +0 -0
  450. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/stream_subscription_feed.py +0 -0
  451. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/stream_subscription_sealer.py +0 -0
  452. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/stream_venue.py +0 -0
  453. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/stream_venue_staging.py +0 -0
  454. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/studio_boundary.py +0 -0
  455. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/thin/__init__.py +0 -0
  456. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/thin/acquire.py +0 -0
  457. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/thin/acquire_cancel.py +0 -0
  458. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/thin/activity.py +0 -0
  459. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/thin/approvals.py +0 -0
  460. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/thin/commands.py +0 -0
  461. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/thin/download.py +0 -0
  462. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/thin/narrative.py +0 -0
  463. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/thin/parity.py +0 -0
  464. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/thin/probe.py +0 -0
  465. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/thin/propose.py +0 -0
  466. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/thin/recipe.py +0 -0
  467. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/thin/research.py +0 -0
  468. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/thin/router.py +0 -0
  469. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/thin/runs.py +0 -0
  470. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/thin/session.py +0 -0
  471. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/thin/stream.py +0 -0
  472. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/thin/stream_venue.py +0 -0
  473. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/thin/transport.py +0 -0
  474. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/thin/v4.py +0 -0
  475. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/thin/v4_artifacts.py +0 -0
  476. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/thin/v4_dataset_covers.py +0 -0
  477. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/thin/v4_datasets.py +0 -0
  478. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/thin/v4_handoff.py +0 -0
  479. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/thin/v4_narrative.py +0 -0
  480. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/thin/v4_query.py +0 -0
  481. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/thin/v4_runs.py +0 -0
  482. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/thin/v4_secrets.py +0 -0
  483. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/thin/v4_stream.py +0 -0
  484. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/thin/v4_tables.py +0 -0
  485. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/thin/vocabulary.py +0 -0
  486. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/thin/workers.py +0 -0
  487. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/ucum/TABLE-PIN.json +0 -0
  488. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/ucum/ucum-subset.v1.json +0 -0
  489. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/unit_flow.py +0 -0
  490. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/units.py +0 -0
  491. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/ux/__init__.py +0 -0
  492. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/ux/approve.py +0 -0
  493. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/ux/attendance.py +0 -0
  494. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/ux/author_yaml.py +0 -0
  495. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/ux/clarification.py +0 -0
  496. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/ux/cloud_auth.py +0 -0
  497. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/ux/commands/__init__.py +0 -0
  498. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/ux/commands/approve.py +0 -0
  499. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/ux/commands/auth.py +0 -0
  500. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/ux/commands/author.py +0 -0
  501. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/ux/commands/catalog_author.py +0 -0
  502. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/ux/commands/catalog_fill.py +0 -0
  503. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/ux/commands/catalog_harvest.py +0 -0
  504. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/ux/commands/catalog_publish.py +0 -0
  505. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/ux/commands/catalog_search.py +0 -0
  506. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/ux/commands/catalog_update.py +0 -0
  507. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/ux/commands/clarify.py +0 -0
  508. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/ux/commands/deploy.py +0 -0
  509. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/ux/commands/deploy_dataset.py +0 -0
  510. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/ux/commands/deploy_plan.py +0 -0
  511. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/ux/commands/deploy_status.py +0 -0
  512. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/ux/commands/diff.py +0 -0
  513. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/ux/commands/document.py +0 -0
  514. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/ux/commands/index.py +0 -0
  515. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/ux/commands/inventory.py +0 -0
  516. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/ux/commands/list_builds.py +0 -0
  517. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/ux/commands/login.py +0 -0
  518. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/ux/commands/peek.py +0 -0
  519. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/ux/commands/plan_check.py +0 -0
  520. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/ux/commands/preflight.py +0 -0
  521. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/ux/commands/record.py +0 -0
  522. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/ux/commands/review_setup.py +0 -0
  523. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/ux/commands/search.py +0 -0
  524. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/ux/commands/show.py +0 -0
  525. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/ux/commands/whoami.py +0 -0
  526. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/ux/credential_native.py +0 -0
  527. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/ux/credential_store.py +0 -0
  528. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/ux/credentials.py +0 -0
  529. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/ux/diffing.py +0 -0
  530. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/ux/headline.py +0 -0
  531. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/ux/hosted_acquisition.py +0 -0
  532. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/ux/hosted_run_status.py +0 -0
  533. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/ux/inventory.py +0 -0
  534. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/ux/local_review.py +0 -0
  535. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/ux/login.py +0 -0
  536. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/ux/path_kind.py +0 -0
  537. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/ux/peek.py +0 -0
  538. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/ux/plain_file.py +0 -0
  539. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/ux/plan_check.py +0 -0
  540. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/ux/preflight.py +0 -0
  541. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/ux/readers.py +0 -0
  542. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/ux/remediation.py +0 -0
  543. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/ux/render.py +0 -0
  544. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/ux/workload.py +0 -0
  545. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/v4_acquisition.py +0 -0
  546. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/v4_check_dialect.py +0 -0
  547. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/v4_document_pin.py +0 -0
  548. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/v4_reader_pin.py +0 -0
  549. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/v4_required_controls.py +0 -0
  550. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/v4_snapshot_artifact.py +0 -0
  551. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/v4_stream_recording.py +0 -0
  552. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/v4_transform.py +0 -0
  553. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/visual_run/__init__.py +0 -0
  554. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/visual_run/authoring.py +0 -0
  555. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/visual_run/contracts.py +0 -0
  556. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/visual_run/materialize.py +0 -0
  557. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/visual_run/observations.py +0 -0
  558. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/visual_run/query.py +0 -0
  559. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/visual_run/reducer.py +0 -0
  560. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/visual_run/sdk.py +0 -0
  561. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/src/mostlyright/data_harness/visual_run/store.py +0 -0
  562. {mostlyright_data-0.14.0 → mostlyright_data-0.14.1}/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.14.0
3
+ Version: 0.14.1
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/
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "mostlyright-data"
3
- version = "0.14.0"
3
+ version = "0.14.1"
4
4
  description = "Mostly Right CLI for reproducible, reviewed Parquet datasets"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.13,<3.14"
@@ -525,6 +525,24 @@ which Studio fixes. Do it once per dataset, silently, and do not repeat it for a
525
525
  subject changed. A dataset presented without a cover is a defect, the same as a one-line
526
526
  description.
527
527
 
528
+ ### Say what each source is
529
+
530
+ Every entry in `sources` takes an optional `description`, and every one you write gets one. It is
531
+ a single sentence saying what that source **is** — `Daily climatological reports, the official
532
+ highs and lows.` — and the dataset page draws it beside the endpoint, under the publisher it came
533
+ from. That line is the only place a reader ever learns what a URL full of query parameters
534
+ actually returned, so it is written for somebody who has never seen the recipe.
535
+
536
+ Write it about the DATA, never about the run: `Hourly airport surface observations` and not `the
537
+ 2024 half of the window`, `fetched as CSV` or `unioned in step one`. Do not restate the address in
538
+ words, and do not repeat the publisher's product code where it says nothing a reader can use. Up
539
+ to 240 characters, which is one sentence rather than two. Where one window is split across several
540
+ sources on the same endpoint, all of them describe the same thing and get the same sentence — the
541
+ years are already in their names.
542
+
543
+ Leaving it out is a defect in the same way a one-line dataset description is: the source is then
544
+ drawn with its endpoint alone, and a reader is left to guess from a query string.
545
+
528
546
  ### Say what each column shows
529
547
 
530
548
  Decide, per column, what a reader should see, and write it on the column as `presentation`. This is
@@ -17,6 +17,7 @@ its own.
17
17
  from __future__ import annotations
18
18
 
19
19
  import asyncio
20
+ import logging
20
21
  import os
21
22
  import shutil
22
23
  import stat
@@ -281,15 +282,7 @@ def _materialized_claim_connector(
281
282
  root = Path(tempfile.mkdtemp(prefix="stream-subscription-feed-", dir=work_root))
282
283
  try:
283
284
  os.chmod(root, 0o700)
284
- registry_root = root / "registry"
285
- registry_root.mkdir(mode=0o700)
286
- materialize_connector_registry(
287
- transport=objects,
288
- bucket=_claim_text(claim.stream_venue_bucket, "stream venue bucket"),
289
- registry_prefix=_claim_text(claim.connector_registry_prefix, "registry prefix"),
290
- registry_digest=_claim_text(claim.connector_registry_digest, "registry digest"),
291
- root=registry_root,
292
- )
285
+ registry_root = _materialized_registry_root(claim, objects, root)
293
286
  registry = load_stream_connector_registry(registry_root)
294
287
  entry = registry.resolve(
295
288
  _claim_text(claim.connector_id, "connector id"),
@@ -314,6 +307,33 @@ def _materialized_claim_connector(
314
307
  shutil.rmtree(root, ignore_errors=True)
315
308
 
316
309
 
310
+ def _materialized_registry_root(
311
+ claim: ClaimedSubscription, objects: GCSObjectTransport, root: Path
312
+ ) -> Path:
313
+ """Materialize the pinned registry under ``root`` and file its series documents.
314
+
315
+ ONE MATERIALIZATION SHAPE FOR BOTH LOADERS. A published registry is one flat name-to-digest
316
+ table; the connector loader reads the documents directly beneath the root and the series
317
+ loader reads the ``series`` directory under it. A subscription that follows a series is
318
+ pinned to a registry that carries both kinds by construction, so a root left unsorted is not
319
+ a connector registry at all and the feed is refused before it opens.
320
+ """
321
+
322
+ registry_root = root / "registry"
323
+ registry_root.mkdir(mode=0o700)
324
+ series_root = registry_root / SERIES_DIRECTORY_NAME
325
+ series_root.mkdir(mode=0o700)
326
+ materialize_connector_registry(
327
+ transport=objects,
328
+ bucket=_claim_text(claim.stream_venue_bucket, "stream venue bucket"),
329
+ registry_prefix=_claim_text(claim.connector_registry_prefix, "registry prefix"),
330
+ registry_digest=_claim_text(claim.connector_registry_digest, "registry digest"),
331
+ root=registry_root,
332
+ )
333
+ _sort_series_documents(registry_root, series_root)
334
+ return registry_root
335
+
336
+
317
337
  def _claim_text(value: str | None, label: str) -> str:
318
338
  if not isinstance(value, str) or not value:
319
339
  raise StreamSubscriptionError("STREAM_SUBSCRIPTION_CONNECTOR_INVALID", label)
@@ -385,18 +405,7 @@ def _materialized_claim_series(
385
405
  root = Path(tempfile.mkdtemp(prefix="stream-subscription-series-", dir=work_root))
386
406
  try:
387
407
  os.chmod(root, 0o700)
388
- registry_root = root / "registry"
389
- registry_root.mkdir(mode=0o700)
390
- series_root = registry_root / SERIES_DIRECTORY_NAME
391
- series_root.mkdir(mode=0o700)
392
- materialize_connector_registry(
393
- transport=objects,
394
- bucket=_claim_text(claim.stream_venue_bucket, "stream venue bucket"),
395
- registry_prefix=_claim_text(claim.connector_registry_prefix, "registry prefix"),
396
- registry_digest=_claim_text(claim.connector_registry_digest, "registry digest"),
397
- root=registry_root,
398
- )
399
- _sort_series_documents(registry_root, series_root)
408
+ registry_root = _materialized_registry_root(claim, objects, root)
400
409
  documents = load_stream_series_documents(registry_root)
401
410
  held = documents.get(series.series_id)
402
411
  if held is None:
@@ -625,6 +634,7 @@ async def run_subscription_worker(
625
634
  def stream_subscription_worker_main(argv: Sequence[str] | None = None) -> int:
626
635
  """Cloud Run Worker Pool executable; it intentionally accepts no mutable CLI authority."""
627
636
 
637
+ _configure_worker_logging()
628
638
  arguments = tuple(sys.argv[1:] if argv is None else argv)
629
639
  if arguments:
630
640
  raise HostedStreamSubscriptionWorkerError(
@@ -636,6 +646,25 @@ def stream_subscription_worker_main(argv: Sequence[str] | None = None) -> int:
636
646
  return 0
637
647
 
638
648
 
649
+ def _configure_worker_logging() -> None:
650
+ """Configure the root logger for the pool executable, on a stream its host collects.
651
+
652
+ A library module configures nothing; an executable must. Unconfigured, this process fell
653
+ through to the last-resort handler, which emits a bare message with no level and no logger
654
+ name, so the pool's own refusals arrived unattributable.
655
+
656
+ Plain text on either stream is collected at DEFAULT severity, so the level is carried in the
657
+ line rather than in the record -- which is why the format names it. Stdout is chosen over the
658
+ sibling executables' stderr for the same reason it is chosen anywhere: a stream that carries
659
+ ordinary progress as well as refusals is not the error stream. An already-configured root is
660
+ left alone, which is what lets a smoke or a test harness own it instead.
661
+ """
662
+
663
+ logging.basicConfig(
664
+ level=logging.INFO, stream=sys.stdout, format="%(levelname)s %(name)s %(message)s"
665
+ )
666
+
667
+
639
668
  def _studio_origin(value: str | None) -> str:
640
669
  if not isinstance(value, str) or not 1 <= len(value) <= 2048 or value.endswith("/"):
641
670
  raise HostedStreamSubscriptionWorkerError(
@@ -132,6 +132,22 @@ class _SubscriptionCancelled(RuntimeError):
132
132
  self.desired_state = desired_state
133
133
 
134
134
 
135
+ #: The largest ``volume_policy.max_bytes`` any worker in this pool can serve.
136
+ #:
137
+ #: A hot subscription gets two bounded buffers: one immutable segment may be sealing while its
138
+ #: successor is being read. Each is capped at half the per-claim budget so the queue does not
139
+ #: turn a 16 MiB promise into 32 MiB during a slow upload/CAS.
140
+ #:
141
+ #: It is exported because it is a PROTOCOL CONSTANT, not a private detail: the control plane
142
+ #: writes the policy a subscription starts with, so it needs the number to validate against at
143
+ #: start rather than discovering it one lease at a time.
144
+ MAX_VOLUME_POLICY_BYTES = MAX_BUFFERED_BYTES // 2
145
+
146
+ #: The largest ``volume_policy.max_duration_seconds`` any worker in this pool can serve, equal to
147
+ #: the longest a subscription may sit without data before its lease ends on its own.
148
+ MAX_VOLUME_POLICY_DURATION_SECONDS = DEFAULT_NO_DATA_TIMEOUT_SECONDS
149
+
150
+
135
151
  @dataclass(frozen=True)
136
152
  class VolumePolicy:
137
153
  """One subscription's bounded rotation policy, set by Studio rather than a worker flag."""
@@ -140,17 +156,21 @@ class VolumePolicy:
140
156
  max_duration_seconds: int
141
157
 
142
158
  def __post_init__(self) -> None:
143
- if (
144
- isinstance(self.max_bytes, bool)
145
- or isinstance(self.max_duration_seconds, bool)
146
- # A hot subscription gets two bounded buffers: one immutable segment may be sealing
147
- # while its successor is being read. Cap each at half the per-claim budget so the
148
- # queue does not turn a 16 MiB promise into 32 MiB during a slow upload/CAS.
149
- or not 1 <= self.max_bytes <= MAX_BUFFERED_BYTES // 2
150
- or not 1 <= self.max_duration_seconds <= DEFAULT_NO_DATA_TIMEOUT_SECONDS
159
+ # The refusal names the bound and the offered value, because the party that has to change
160
+ # the policy is the one that wrote it and it cannot act on "outside worker bounds".
161
+ if isinstance(self.max_bytes, bool) or not 1 <= self.max_bytes <= MAX_VOLUME_POLICY_BYTES:
162
+ raise StreamSubscriptionError(
163
+ "STREAM_SUBSCRIPTION_POLICY_INVALID",
164
+ f"volume policy max_bytes {self.max_bytes} is outside the worker bound "
165
+ f"1..{MAX_VOLUME_POLICY_BYTES}",
166
+ )
167
+ if isinstance(self.max_duration_seconds, bool) or not (
168
+ 1 <= self.max_duration_seconds <= MAX_VOLUME_POLICY_DURATION_SECONDS
151
169
  ):
152
170
  raise StreamSubscriptionError(
153
- "STREAM_SUBSCRIPTION_POLICY_INVALID", "volume policy is outside worker bounds"
171
+ "STREAM_SUBSCRIPTION_POLICY_INVALID",
172
+ f"volume policy max_duration_seconds {self.max_duration_seconds} is outside the "
173
+ f"worker bound 1..{MAX_VOLUME_POLICY_DURATION_SECONDS}",
154
174
  )
155
175
 
156
176
 
@@ -862,9 +882,12 @@ class RecoveryArtifact:
862
882
  )
863
883
 
864
884
  def to_dict(self) -> dict[str, object]:
885
+ # An object generation is a decimal STRING on the wire, the spelling the control plane's
886
+ # recovery-artifact schema contracts for. It stays an int in the dataclass because that
887
+ # is what compares and orders; only the serialized form is text.
865
888
  return {
866
889
  "object_name": self.object_name,
867
- "generation": self.generation,
890
+ "generation": str(self.generation),
868
891
  "sha256": self.sha256,
869
892
  "byte_length": self.byte_length,
870
893
  "media_type": self.media_type,
@@ -2083,6 +2106,8 @@ __all__ = [
2083
2106
  "MAX_DISCOVERY_EVIDENCE_BYTES",
2084
2107
  "MAX_ROSTER_MEMBERS",
2085
2108
  "MAX_SEGMENT_GAPS",
2109
+ "MAX_VOLUME_POLICY_BYTES",
2110
+ "MAX_VOLUME_POLICY_DURATION_SECONDS",
2086
2111
  "ROSTER_TICK_SECONDS",
2087
2112
  "ROTATION_SCHEMA_VERSION",
2088
2113
  "SEGMENT_ROTATION_SCHEMA_VERSION",
@@ -2,6 +2,8 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
+ import logging
6
+ import re
5
7
  from collections.abc import Callable, Mapping, Sequence
6
8
  from dataclasses import dataclass, replace
7
9
  from typing import Any
@@ -37,7 +39,15 @@ from mostlyright.data_harness.stream_subscription_worker import (
37
39
  )
38
40
  from mostlyright.data_harness.stream_venue_staging import MAX_EVIDENCE_BYTES
39
41
 
42
+ LOGGER = logging.getLogger(__name__)
43
+
40
44
  CLAIM_PATH = "/_internal/stream-subscriptions:claim"
45
+
46
+ #: The largest object generation either spelling may carry, from the control plane's own
47
+ #: nineteen-digit delivery grammar. A generation is a storage coordinate, not arithmetic, so a
48
+ #: number outside the grammar is a claim about an object no bucket issued.
49
+ MAX_OBJECT_GENERATION = 10**19 - 1
50
+ _OBJECT_GENERATION_TEXT = re.compile(r"[1-9][0-9]{0,18}")
41
51
  CREDENTIAL_RESOLUTION_SCHEMA_VERSION = "mostlyright-stream-subscription-credential-resolution.v1"
42
52
  _STAGING_ROLES = ("source_data", "acquisition_receipt", "source_observation")
43
53
  _STAGING_MEDIA_TYPES = {
@@ -72,6 +82,18 @@ class StudioSubscriptionControl:
72
82
  # The number was already parsed and checked here before it was carried; the only
73
83
  # change is that it now reaches the caller instead of being validated and dropped.
74
84
  return IdlePoll(poll_after_seconds=_integer(value, "poll_after_seconds", 1))
85
+ try:
86
+ return self._claimed(value)
87
+ except StreamSubscriptionError as error:
88
+ # A LEASE THIS WORKER CANNOT SERVE IS STILL A LEASE. Studio persists the lease before
89
+ # it answers, so a refusal that only raised would leave that lease to expire and be
90
+ # handed back on the next claim, forever, with nothing on the record saying why.
91
+ self._dispose_of_refused_claim(value, error)
92
+ raise
93
+
94
+ def _claimed(self, value: Mapping[str, Any]) -> ClaimedSubscription:
95
+ """The full claim, or a refusal naming the first member this worker cannot serve."""
96
+
75
97
  policy = _mapping(value, "volume_policy")
76
98
  claim_series = _series_claim(value.get("series"))
77
99
  claim = ClaimedSubscription(
@@ -120,6 +142,62 @@ class StudioSubscriptionControl:
120
142
  claim = replace(claim, resume_checkpoint=_resume_checkpoint(resume, claim))
121
143
  return claim
122
144
 
145
+ def _dispose_of_refused_claim(
146
+ self, value: Mapping[str, Any], error: StreamSubscriptionError
147
+ ) -> None:
148
+ """Dispose of a persisted lease this worker refused, on a best effort, and never raise.
149
+
150
+ TWO DISPOSITIONS, BECAUSE TWO DIFFERENT THINGS BOUND THEM.
151
+
152
+ A claim carrying no pending checkpoint is COMPLETED as failed. That charges the control
153
+ plane's failure budget, which spaces the retries and terminalizes the subscription once
154
+ the budget runs out, and it is the bound on a subscription this fleet cannot serve.
155
+
156
+ A claim carrying a ``resume_checkpoint`` is LEFT ALONE, and its lease runs out instead.
157
+ The control plane exempts a lease with a pending checkpoint from that budget -- a resume
158
+ is meant to survive a worker dying mid-segment -- and re-leases it as soon as it is free.
159
+ Completing one would therefore trade a lease expiry for an immediate reclaim, which is a
160
+ tighter loop than the one this method exists to end. Expiry is the slower of the two, so
161
+ expiry is what bounds this case.
162
+
163
+ The discriminator is the pending checkpoint rather than which member refused, because the
164
+ exemption is the control plane's and it is keyed on the same fact.
165
+ """
166
+
167
+ resuming = "resume_checkpoint" in value
168
+ LOGGER.warning(
169
+ "stream_subscription_claim_refused subscription_id=%s failure_code=%s disposition=%s",
170
+ _safe_subscription_id(value),
171
+ error.code,
172
+ "lease_expiry" if resuming else "completed_failed",
173
+ )
174
+ if resuming:
175
+ return
176
+ try:
177
+ url = _callback_url(value.get("complete_url"), origin=self.origin, label="complete")
178
+ body: dict[str, Any] = {
179
+ "schema_version": COMPLETE_SCHEMA_VERSION,
180
+ "lease_generation": _integer(value, "lease_generation", 1),
181
+ "terminal_reason": "failed",
182
+ }
183
+ self._post(url, body)
184
+ except SubscriptionFenceStale:
185
+ # The lease is already terminal, which is the outcome this was reaching for. A replay
186
+ # of a lost 5xx whose first attempt landed arrives here, so it is reported as done
187
+ # rather than as a completion that failed.
188
+ return
189
+ except Exception as unreported:
190
+ # Broad on purpose: whatever went wrong here, the refusal the caller is waiting on is
191
+ # the one that must reach it, so a second failure is logged and dropped rather than
192
+ # raised over the first.
193
+ LOGGER.warning(
194
+ "stream_subscription_claim_refusal_unreported subscription_id=%s failure_code=%s",
195
+ _safe_subscription_id(value),
196
+ unreported.code
197
+ if isinstance(unreported, StreamSubscriptionError)
198
+ else type(unreported).__name__,
199
+ )
200
+
123
201
  def resolve_credential(
124
202
  self, claim: ClaimedSubscription, *, credential_shape: str
125
203
  ) -> StreamCredential:
@@ -213,7 +291,8 @@ class StudioSubscriptionControl:
213
291
  "next_cursor": next_cursor,
214
292
  "segment_stream_id": capture.segment_stream_id,
215
293
  "manifest_object_name": capture.manifest_object_name,
216
- "manifest_generation": capture.manifest_generation,
294
+ # Every object generation on the wire is text; the number stays an int in the capture.
295
+ "manifest_generation": str(capture.manifest_generation),
217
296
  "manifest_sha256": capture.manifest_sha256,
218
297
  "byte_length": capture.byte_length,
219
298
  "capture_digest": capture.capture_digest,
@@ -412,6 +491,42 @@ class StudioSubscriptionControl:
412
491
  raise AssertionError("unreachable")
413
492
 
414
493
 
494
+ def _object_generation(value: Mapping[str, Any], name: str) -> int:
495
+ """One object generation, read from either spelling of the same bounded number.
496
+
497
+ EVERY OBJECT GENERATION ON THE WIRE IS TEXT, and an integer is admitted because a control
498
+ plane that echoes a stored coordinate back is not the place to relitigate a spelling.
499
+
500
+ The grammar is matched BEFORE the text is converted, and it is the control plane's own
501
+ nineteen-digit one. An unbounded digit string is a refusal here: converting one crosses the
502
+ interpreter's own conversion limit and raises an untyped error out of a parser whose whole
503
+ contract is that it refuses in one vocabulary.
504
+ """
505
+
506
+ item = value.get(name)
507
+ if isinstance(item, str):
508
+ if not _OBJECT_GENERATION_TEXT.fullmatch(item):
509
+ raise StreamSubscriptionError("STREAM_SUBSCRIPTION_CLAIM_INVALID", name)
510
+ return int(item)
511
+ generation = _integer(value, name, 1)
512
+ if generation > MAX_OBJECT_GENERATION:
513
+ raise StreamSubscriptionError("STREAM_SUBSCRIPTION_CLAIM_INVALID", name)
514
+ return generation
515
+
516
+
517
+ def _safe_subscription_id(value: Mapping[str, Any]) -> str:
518
+ """The claimed subscription id when it is a canonical UUID, and ``unknown`` otherwise.
519
+
520
+ A refusal log line must never repeat an unvalidated control-plane string, because the string
521
+ that failed to parse is exactly the one nothing has checked the shape of.
522
+ """
523
+
524
+ try:
525
+ return _uuid_text(value.get("stream_subscription_id"), "stream_subscription_id")
526
+ except StreamSubscriptionError:
527
+ return "unknown"
528
+
529
+
415
530
  def _code(raw: bytes) -> str | None:
416
531
  try:
417
532
  value = parse_json(raw)
@@ -541,7 +656,7 @@ def _resume_checkpoint(value: object, claim: ClaimedSubscription) -> ResumeCheck
541
656
  )
542
657
  capture = SealedCapture(
543
658
  manifest_object_name=_text(checkpoint, "manifest_object_name"),
544
- manifest_generation=_integer(checkpoint, "manifest_generation", 1),
659
+ manifest_generation=_object_generation(checkpoint, "manifest_generation"),
545
660
  manifest_sha256=_digest(checkpoint.get("manifest_sha256"), "manifest sha256"),
546
661
  byte_length=_integer(checkpoint, "byte_length", 0),
547
662
  capture_digest=capture_digest,
@@ -622,7 +737,7 @@ def _recovery_inventory(
622
737
  )
623
738
  artifacts[role] = RecoveryArtifact(
624
739
  object_name=expected,
625
- generation=_integer(artifact, "generation", 1),
740
+ generation=_object_generation(artifact, "generation"),
626
741
  sha256=_digest(artifact.get("sha256"), f"{role} sha256"),
627
742
  byte_length=_integer(artifact, "byte_length", 0),
628
743
  media_type=_text(artifact, "media_type"),
@@ -108,16 +108,17 @@ MAX_DESCRIPTION_CHARS = 2_000
108
108
  #: that does not share :data:`MAX_DESCRIPTION_CHARS`.
109
109
  #:
110
110
  #: ⚠ A SECOND CONSTANT RATHER THAN A WIDER FIRST ONE, AND THE DIFFERENCE IS WHICH WAY IT FAILS.
111
- #: Six members of this document are called ``description`` or ``claim_note``; five of them are
112
- #: bounded at 2000 by Studio's schema and exactly one -- the DATASET's -- at 4000. While this
113
- #: parser read 2000 for all six, a dataset description between 2001 and 4000 characters was
114
- #: ACCEPTED at registration and refused at the worker, half an hour later, on a document Studio had
115
- #: already agreed to: the one failure shape `docs/V4-ONE-GATE-CONTRACT.md` exists to remove.
116
- #: Widening the shared constant instead would have fixed that and broken the other five in the
117
- #: opposite direction -- the worker admitting a table description registration refuses -- so the
118
- #: bound that differs gets a constant that says so. ``tests/test_v4_recipe.py`` holds both against
119
- #: the pinned schema, and ``tests/test_thin_v4_datasets.py`` holds this one against the ceiling
120
- #: ``mr-data dataset set`` refuses at, so the client, the contract and the worker are one number.
111
+ #: Seven members of this document are called ``description`` or ``claim_note`` and Studio bounds
112
+ #: them at three different numbers: five at 2000, the DATASET's at 4000, and the SOURCE's at 240
113
+ #: under :data:`MAX_SOURCE_DESCRIPTION_CHARS`. While this parser read 2000 for all of them, a
114
+ #: dataset description between 2001 and 4000 characters was ACCEPTED at registration and refused
115
+ #: at the worker, half an hour later, on a document Studio had already agreed to: the one failure
116
+ #: shape `docs/V4-ONE-GATE-CONTRACT.md` exists to remove. Widening the shared constant instead
117
+ #: would have fixed that and broken the others in the opposite direction -- the worker admitting a
118
+ #: table description registration refuses -- so every bound that differs gets a constant that says
119
+ #: so. ``tests/test_v4_recipe.py`` holds all three against the pinned schema, and
120
+ #: ``tests/test_thin_v4_datasets.py`` holds this one against the ceiling ``mr-data dataset set``
121
+ #: refuses at, so the client, the contract and the worker are one number.
121
122
  MAX_DATASET_DESCRIPTION_CHARS = 4_000
122
123
  MAX_QUESTION_CHARS = 4_000
123
124
  MAX_DISPLAY_LOCATOR_CHARS = 2_048
@@ -132,6 +133,12 @@ MAX_SQL_CHARS = 65_536
132
133
  MAX_NULL_PPM = 1_000_000
133
134
  MAX_STORY_CHARS = 240
134
135
 
136
+ #: What a SOURCE's sentence may run to: a third ceiling rather than a wider share of one of the
137
+ #: other two, for the reason :data:`MAX_DATASET_DESCRIPTION_CHARS` records at length. It equals
138
+ #: :data:`MAX_STORY_CHARS` today because both are a sentence drawn on one line of the dataset
139
+ #: page, not because the two members are one contract, so neither may be spelled as the other.
140
+ MAX_SOURCE_DESCRIPTION_CHARS = 240
141
+
135
142
  #: How many bins a column may ask its chart to be drawn in. The ceiling is the same twelve the
136
143
  #: released distribution bounds its items at, so a document can never ask for a chart with more
137
144
  #: marks than the profile that carries it is allowed to hold.
@@ -342,7 +349,7 @@ _SOURCE = (
342
349
  "source_class",
343
350
  }
344
351
  ),
345
- frozenset({"binding", "credential"}),
352
+ frozenset({"binding", "credential", "description"}),
346
353
  )
347
354
  _LOCATOR = (
348
355
  frozenset({"display_locator", "kind"}),
@@ -668,6 +675,12 @@ class V4Source:
668
675
  """
669
676
 
670
677
  name: str
678
+ #: One sentence saying what this source is, for a reader of the dataset page rather than for
679
+ #: this parser: the page draws it under the endpoint the locator names. Nothing this module
680
+ #: computes reads it, and no run behaves differently for its presence -- which is exactly why
681
+ #: it is parsed here rather than left to travel unchecked: an absent bound is how a member
682
+ #: that only a page reads arrives at the page as four kilobytes of somebody's notes.
683
+ description: str | None
671
684
  source_class: str
672
685
  data_classification: str
673
686
  locator: V4SourceLocator
@@ -1193,8 +1206,19 @@ def _parse_source(value: Any, label: str) -> V4Source:
1193
1206
  members = _members(value, label, _SOURCE)
1194
1207
  credential = _optional(members, "credential", label)
1195
1208
  binding = _optional(members, "binding", label)
1209
+ description = _optional(members, "description", label)
1196
1210
  return V4Source(
1197
1211
  name=_identifier(members["name"], f"{label}.name"),
1212
+ description=(
1213
+ None
1214
+ if description is None
1215
+ else _text(
1216
+ description,
1217
+ f"{label}.description",
1218
+ minimum=1,
1219
+ maximum=MAX_SOURCE_DESCRIPTION_CHARS,
1220
+ )
1221
+ ),
1198
1222
  source_class=_one_of(members["source_class"], f"{label}.source_class", SOURCE_CLASSES),
1199
1223
  data_classification=_one_of(
1200
1224
  members["data_classification"], f"{label}.data_classification", DATA_CLASSIFICATIONS