mostlyright-data 0.17.2__tar.gz → 0.17.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (546) hide show
  1. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/PKG-INFO +1 -1
  2. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/pyproject.toml +1 -1
  3. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/skills/mr-data-build/SKILL.md +1 -1
  4. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/hosted_run_worker.py +108 -10
  5. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/studio_boundary.py +1 -1
  6. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/thin/router.py +1 -1
  7. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/thin/session.py +196 -0
  8. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/thin/v4_datasets.py +328 -5
  9. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/thin/v4_handoff.py +17 -99
  10. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/thin/vocabulary.py +3 -2
  11. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/ux/render.py +18 -0
  12. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/.gitignore +0 -0
  13. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/README.md +0 -0
  14. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/scripts/hatch_build.py +0 -0
  15. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/skills/mr-data-build/agents/openai.yaml +0 -0
  16. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/skills/mr-data-build/scripts/write_research_notebook.py +0 -0
  17. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/skills/mr-data-build/scripts/write_visual_run.py +0 -0
  18. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/_vendor/__init__.py +0 -0
  19. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/_vendor/rapidocr/LICENSE +0 -0
  20. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/_vendor/rapidocr/PROVENANCE.json +0 -0
  21. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/_vendor/rapidocr/__init__.py +0 -0
  22. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/_vendor/rapidocr/__init__.pyi +0 -0
  23. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/_vendor/rapidocr/_version.py +0 -0
  24. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/_vendor/rapidocr/cal_rec_boxes/__init__.py +0 -0
  25. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/_vendor/rapidocr/cal_rec_boxes/main.py +0 -0
  26. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/_vendor/rapidocr/ch_ppocr_cls/__init__.py +0 -0
  27. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/_vendor/rapidocr/ch_ppocr_cls/main.py +0 -0
  28. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/_vendor/rapidocr/ch_ppocr_cls/utils.py +0 -0
  29. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/_vendor/rapidocr/ch_ppocr_det/__init__.py +0 -0
  30. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/_vendor/rapidocr/ch_ppocr_det/main.py +0 -0
  31. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/_vendor/rapidocr/ch_ppocr_det/utils.py +0 -0
  32. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/__init__.py +0 -0
  33. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/main.py +0 -0
  34. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/typings.py +0 -0
  35. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/utils.py +0 -0
  36. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/_vendor/rapidocr/config.yaml +0 -0
  37. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/_vendor/rapidocr/inference_engine/__init__.py +0 -0
  38. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/_vendor/rapidocr/inference_engine/base.py +0 -0
  39. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/_vendor/rapidocr/inference_engine/onnxruntime/__init__.py +0 -0
  40. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/_vendor/rapidocr/inference_engine/onnxruntime/main.py +0 -0
  41. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/_vendor/rapidocr/inference_engine/onnxruntime/provider_config.py +0 -0
  42. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/_vendor/rapidocr/main.py +0 -0
  43. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/_vendor/rapidocr/models/PP-OCRv6_det_small.onnx +0 -0
  44. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/_vendor/rapidocr/models/PP-OCRv6_rec_small.onnx +0 -0
  45. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/_vendor/rapidocr/models/ch_ppocr_mobile_v2.0_cls_mobile.onnx +0 -0
  46. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/_vendor/rapidocr/py.typed +0 -0
  47. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/_vendor/rapidocr/utils/__init__.py +0 -0
  48. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/_vendor/rapidocr/utils/load_image.py +0 -0
  49. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/_vendor/rapidocr/utils/log.py +0 -0
  50. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/_vendor/rapidocr/utils/model_resolver.py +0 -0
  51. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/_vendor/rapidocr/utils/output.py +0 -0
  52. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/_vendor/rapidocr/utils/parse_parameters.py +0 -0
  53. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/_vendor/rapidocr/utils/process_img.py +0 -0
  54. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/_vendor/rapidocr/utils/typings.py +0 -0
  55. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/_vendor/rapidocr/utils/utils.py +0 -0
  56. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/__init__.py +0 -0
  57. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/acquisition/__init__.py +0 -0
  58. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/acquisition/derived_credentials.py +0 -0
  59. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/acquisition/http.py +0 -0
  60. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/acquisition/parsing.py +0 -0
  61. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/acquisition/ranges.py +0 -0
  62. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/acquisition/result_download.py +0 -0
  63. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/acquisition/retention_admission.py +0 -0
  64. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/acquisition/sandbox.py +0 -0
  65. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/acquisition/sandbox_bootstrap.py +0 -0
  66. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/acquisition/url_policy.py +0 -0
  67. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/agent_runtime.py +0 -0
  68. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/assets/logo-ink.svg +0 -0
  69. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/backends/__init__.py +0 -0
  70. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/backends/pandas_backend.py +0 -0
  71. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/backends/polars_backend.py +0 -0
  72. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/backends/protocol.py +0 -0
  73. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/backends/reference.py +0 -0
  74. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/backends/registry.py +0 -0
  75. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/backends/restrictions.py +0 -0
  76. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/bounded_query.py +0 -0
  77. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/bounded_scratch_sink.py +0 -0
  78. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/canonical.py +0 -0
  79. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/catalog_job.py +0 -0
  80. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/cli.py +0 -0
  81. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/compact_worker.py +0 -0
  82. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/contracts.py +0 -0
  83. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/coordinator.py +0 -0
  84. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/crosswalks.py +0 -0
  85. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/declared_checks.py +0 -0
  86. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/delta.py +0 -0
  87. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/delta_checks.py +0 -0
  88. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/delta_classifier.py +0 -0
  89. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/delta_persist.py +0 -0
  90. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/delta_recompute.py +0 -0
  91. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/delta_rows.py +0 -0
  92. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/deploy.py +0 -0
  93. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/deploy_target.py +0 -0
  94. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/deployment_evidence.py +0 -0
  95. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/documents/__init__.py +0 -0
  96. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/documents/_worker_capability.py +0 -0
  97. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/documents/capture.py +0 -0
  98. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/documents/contracts.py +0 -0
  99. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/documents/lane.py +0 -0
  100. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/documents/ocr.py +0 -0
  101. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/documents/pdf.py +0 -0
  102. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/documents/registry.py +0 -0
  103. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/documents/sandbox.py +0 -0
  104. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/documents/selections.py +0 -0
  105. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/documents/tables.py +0 -0
  106. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/documents/vendor_rapidocr.py +0 -0
  107. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/events.py +0 -0
  108. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/fast_delimited.py +0 -0
  109. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/fetch_egress_smoke.py +0 -0
  110. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/formats.py +0 -0
  111. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/governors.py +0 -0
  112. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/hosted_bootstrap.py +0 -0
  113. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/hosted_crawler.py +0 -0
  114. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/hosted_crawler_container_smoke.py +0 -0
  115. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/hosted_crawler_fetch.py +0 -0
  116. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/hosted_crawler_job.py +0 -0
  117. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/hosted_crawler_protocol.py +0 -0
  118. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/hosted_deploy.py +0 -0
  119. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/hosted_ingestion_contract.py +0 -0
  120. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/hosted_ingestion_job.py +0 -0
  121. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/hosted_ingestion_job_smoke.py +0 -0
  122. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/hosted_ingestion_worker.py +0 -0
  123. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/hosted_rlimit_as_container_smoke.py +0 -0
  124. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/hosted_session_container_smoke.py +0 -0
  125. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/hosted_session_worker.py +0 -0
  126. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/hosted_session_worker_job_smoke.py +0 -0
  127. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/hosted_stream_recorder_container_smoke.py +0 -0
  128. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/hosted_stream_recorder_job.py +0 -0
  129. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/hosted_stream_subscription_container_smoke.py +0 -0
  130. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/hosted_stream_subscription_worker.py +0 -0
  131. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/hosted_worker.py +0 -0
  132. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/incremental_slice_executor.py +0 -0
  133. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/incremental_worker.py +0 -0
  134. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/ingestion/__init__.py +0 -0
  135. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/ingestion/contracts.py +0 -0
  136. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/ingestion/faults.py +0 -0
  137. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/ingestion/gcs_store.py +0 -0
  138. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/ingestion/spool.py +0 -0
  139. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/ingestion/store.py +0 -0
  140. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/inprocess_acquisition.py +0 -0
  141. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/key_seam.py +0 -0
  142. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/linux_process_boundary.py +0 -0
  143. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/local_contracts.py +0 -0
  144. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/nbrender/CONTRACT.md +0 -0
  145. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/nbrender/__init__.py +0 -0
  146. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/nbrender/chrome.py +0 -0
  147. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/nbrender/code_body.py +0 -0
  148. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/nbrender/document.py +0 -0
  149. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/nbrender/frame.py +0 -0
  150. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/nbrender/interactive.py +0 -0
  151. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/nbrender/markdown_body.py +0 -0
  152. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/nbrender/mr_components.py +0 -0
  153. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/nbrender/outputs_data.py +0 -0
  154. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/nbrender/outputs_rich.py +0 -0
  155. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/nbrender/outputs_source.py +0 -0
  156. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/nbrender/outputs_stage.py +0 -0
  157. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/nbrender/outputs_text.py +0 -0
  158. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/nbrender/parse.py +0 -0
  159. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/nbrender/status.py +0 -0
  160. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/nbrender/tokens.py +0 -0
  161. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/notebook.py +0 -0
  162. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/offline.py +0 -0
  163. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/operation_registry.py +0 -0
  164. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/operator_setup.py +0 -0
  165. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/part_check_evidence.py +0 -0
  166. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/pipeline.py +0 -0
  167. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/plan_graph.py +0 -0
  168. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/preparation/__init__.py +0 -0
  169. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/preparation/contracts.py +0 -0
  170. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/preparation/engine.py +0 -0
  171. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/preparation/errors.py +0 -0
  172. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/preparation/gates.py +0 -0
  173. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/preparation/joins.py +0 -0
  174. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/preparation/profile.py +0 -0
  175. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/preparation/table.py +0 -0
  176. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/preparation/transforms.py +0 -0
  177. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/progress_events.py +0 -0
  178. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/__init__.py +0 -0
  179. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/_openpyxl.py +0 -0
  180. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/budgets.py +0 -0
  181. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/containers.py +0 -0
  182. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/contracts.py +0 -0
  183. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/delimited.py +0 -0
  184. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/geojson_vector.py +0 -0
  185. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/geopackage.py +0 -0
  186. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/geoparquet.py +0 -0
  187. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/grib2/__init__.py +0 -0
  188. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/grib2/admission.py +0 -0
  189. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/grib2/collection.py +0 -0
  190. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/grib2/collection_reader.py +0 -0
  191. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/grib2/decode.py +0 -0
  192. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/grib2/geometry.py +0 -0
  193. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/grib2/portable_math.py +0 -0
  194. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/grib_eccodes.py +0 -0
  195. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/html_tabular.py +0 -0
  196. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/html_web_extract.py +0 -0
  197. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/json_tabular.py +0 -0
  198. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/parquet_tabular.py +0 -0
  199. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/pcaxis_px.py +0 -0
  200. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/protobuf_tabular.py +0 -0
  201. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/raster/__init__.py +0 -0
  202. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/raster/_bytes.py +0 -0
  203. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/raster/decode.py +0 -0
  204. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/raster/family.py +0 -0
  205. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/raster/jpeg2000.py +0 -0
  206. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/raster/profiles.py +0 -0
  207. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/raster/rendered.py +0 -0
  208. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/raster/safe.py +0 -0
  209. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/raster/sentinel_safe.py +0 -0
  210. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/raster/tiff.py +0 -0
  211. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/registry.py +0 -0
  212. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/README.md +0 -0
  213. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.0.0/cities_one_stream/cities.csv.gz +0 -0
  214. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.0.0/cities_one_stream/expected.json +0 -0
  215. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.1.0/cities_one_stream/cities.csv.gz +0 -0
  216. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.1.0/cities_one_stream/expected.json +0 -0
  217. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/archive.tar/1.0.0/cities_beside_a_directory_entry/cities.tar +0 -0
  218. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/archive.tar/1.0.0/cities_beside_a_directory_entry/expected.json +0 -0
  219. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/archive.tar/1.1.0/cities_beside_a_directory_entry/cities.tar +0 -0
  220. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/archive.tar/1.1.0/cities_beside_a_directory_entry/expected.json +0 -0
  221. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/archive.zip/1.0.0/cities_beside_a_second_member/cities.zip +0 -0
  222. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/archive.zip/1.0.0/cities_beside_a_second_member/expected.json +0 -0
  223. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/archive.zip/1.1.0/dwd_semicolon_station_member/dwd-station.zip +0 -0
  224. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/archive.zip/1.1.0/dwd_semicolon_station_member/expected.json +0 -0
  225. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/archive.zip/1.2.0/dwd_semicolon_station_member/dwd-station.zip +0 -0
  226. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/archive.zip/1.2.0/dwd_semicolon_station_member/expected.json +0 -0
  227. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/an_ordinary_comma_separated_table/cities.csv +0 -0
  228. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/an_ordinary_comma_separated_table/expected.json +0 -0
  229. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/quoted_fields_holding_the_delimiter/cities.tsv +0 -0
  230. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/quoted_fields_holding_the_delimiter/expected.json +0 -0
  231. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/delimited_text/1.1.0/an_hourly_observation_table_served_as_plain_text/expected.json +0 -0
  232. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/delimited_text/1.1.0/an_hourly_observation_table_served_as_plain_text/observations.csv +0 -0
  233. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/geojson.vector/1.0.0/czech_capital/expected.json +0 -0
  234. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/geojson.vector/1.0.0/czech_capital/places.geojson +0 -0
  235. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/geopackage.vector/1.0.0/epsg_4326_feature/expected.json +0 -0
  236. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/geopackage.vector/1.0.0/epsg_4326_feature/places.gpkg +0 -0
  237. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/geoparquet.vector/1.0.0/primary_wkb_point/expected.json +0 -0
  238. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/geoparquet.vector/1.0.0/primary_wkb_point/places.parquet +0 -0
  239. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/html.tabular/1.0.0/sanitized_table/expected.json +0 -0
  240. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/html.tabular/1.0.0/sanitized_table/table.html +0 -0
  241. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/html.web_extract/1.0.0/json_ld_scorecards/expected.json +0 -0
  242. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/html.web_extract/1.0.0/json_ld_scorecards/scorecards.html +0 -0
  243. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/image.rendered/1.0.0/tiny_png/expected.json +0 -0
  244. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/image.rendered/1.0.0/tiny_png/tiny-rendered.png +0 -0
  245. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/json.tabular/1.0.0/nested_hourly_observations/expected.json +0 -0
  246. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/json.tabular/1.0.0/nested_hourly_observations/stations.json +0 -0
  247. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/json.tabular/1.1.0/an_observation_stream_served_as_plain_text/expected.json +0 -0
  248. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/json.tabular/1.1.0/an_observation_stream_served_as_plain_text/observations.ndjson +0 -0
  249. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/meteorology.bufr/1.0.0/eccodes_bufr4_subset/eccodes-bufr4.bufr +0 -0
  250. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/meteorology.bufr/1.0.0/eccodes_bufr4_subset/expected.json +0 -0
  251. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/meteorology.grib/1.0.0/eccodes_grib1_origin/expected.json +0 -0
  252. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/meteorology.grib/1.0.0/eccodes_grib1_origin/regular-ll-surface.grib1 +0 -0
  253. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/microdata.sas_xpt/1.0.0/two_raw_columns/expected.json +0 -0
  254. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/microdata.sas_xpt/1.0.0/two_raw_columns/survey.xpt +0 -0
  255. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/microdata.spss_sav/1.0.0/two_raw_columns/expected.json +0 -0
  256. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/microdata.spss_sav/1.0.0/two_raw_columns/survey.sav +0 -0
  257. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/microdata.stata_dta/1.0.0/two_raw_columns/expected.json +0 -0
  258. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/microdata.stata_dta/1.0.0/two_raw_columns/stata.dta +0 -0
  259. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/official.pcaxis_px/1.0.0/population_by_region_and_year/expected.json +0 -0
  260. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/official.pcaxis_px/1.0.0/population_by_region_and_year/population.px +0 -0
  261. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/official.sdmx_json/1.0.0/compact_population_series/expected.json +0 -0
  262. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/official.sdmx_json/1.0.0/compact_population_series/population.json +0 -0
  263. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/parquet.tabular/1.0.0/two_columns/expected.json +0 -0
  264. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/parquet.tabular/1.0.0/two_columns/prices.parquet +0 -0
  265. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/protobuf.tabular/1.0.0/gtfs_realtime_trip_updates/expected.json +0 -0
  266. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/protobuf.tabular/1.0.0/gtfs_realtime_trip_updates/gtfs-realtime.desc +0 -0
  267. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/protobuf.tabular/1.0.0/gtfs_realtime_trip_updates/trip-updates.pb +0 -0
  268. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/raster.geospatial/1.0.0/tiny_geotiff/expected.json +0 -0
  269. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/raster.geospatial/1.0.0/tiny_geotiff/tiny-geospatial.tif +0 -0
  270. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/satellite.goes_abi_l2/1.0.0/authored_cmi_window/expected.json +0 -0
  271. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/satellite.goes_abi_l2/1.0.0/authored_cmi_window/goes-abi-l2-cmi-window.nc +0 -0
  272. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/satellite.himawari_hsd/1.0.0/authored_b13_single_bzip2/expected.json +0 -0
  273. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/satellite.himawari_hsd/1.0.0/authored_b13_single_bzip2/himawari-b13-0101-bzip2.dat +0 -0
  274. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/satellite.himawari_hsd_complete/1.0.0/authored_b13_three_segment_scan/expected.json +0 -0
  275. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/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
  276. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/satellite.msg_seviri_l15/1.0.0/authored_calibrated_complete_visir/expected.json +0 -0
  277. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/satellite.msg_seviri_l15/1.0.0/authored_calibrated_complete_visir/msg-seviri-l15.zip +0 -0
  278. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/satellite.sentinel_safe/1.0.0/authored_b02_scl_window/expected.json +0 -0
  279. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/satellite.sentinel_safe/1.0.0/authored_b02_scl_window/sentinel-safe-b02-scl.zip +0 -0
  280. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/satellite.xrit_image/1.0.0/authored_complete_raw_counts/expected.json +0 -0
  281. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/satellite.xrit_image/1.0.0/authored_complete_raw_counts/xrit-complete-image.zip +0 -0
  282. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/scientific.fits/1.0.0/tiny_primary_window/expected.json +0 -0
  283. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/scientific.fits/1.0.0/tiny_primary_window/tiny-primary.fits +0 -0
  284. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/scientific.hdf4/1.0.0/authored_temperature_window/expected.json +0 -0
  285. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/scientific.hdf4/1.0.0/authored_temperature_window/temperature.hdf +0 -0
  286. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/scientific.hdf5/1.0.0/authored_temperature_window/expected.json +0 -0
  287. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/scientific.hdf5/1.0.0/authored_temperature_window/temperature.h5 +0 -0
  288. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/scientific.hdf_eos2/1.0.0/authored_grid_temperature_window/expected.json +0 -0
  289. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/scientific.hdf_eos2/1.0.0/authored_grid_temperature_window/nasa-hdfeos2-grid.hdf +0 -0
  290. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/scientific.hdf_eos2/1.0.0/authored_swath_temperature_window/expected.json +0 -0
  291. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/scientific.hdf_eos2/1.0.0/authored_swath_temperature_window/nasa-hdfeos2-swath.hdf +0 -0
  292. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/scientific.netcdf/1.0.0/authored_classic_temperature_window/expected.json +0 -0
  293. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/scientific.netcdf/1.0.0/authored_classic_temperature_window/temperature-classic.nc +0 -0
  294. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/scientific.zarr/1.0.0/authored_v3_temperature_window/expected.json +0 -0
  295. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/scientific.zarr/1.0.0/authored_v3_temperature_window/temperature-zarr-v3.zip +0 -0
  296. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.0.0/an_ordinary_table_beside_a_second_sheet/cities.xlsx +0 -0
  297. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.0.0/an_ordinary_table_beside_a_second_sheet/expected.json +0 -0
  298. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.0.0/shares_the_workbook_had_already_computed/expected.json +0 -0
  299. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.0.0/shares_the_workbook_had_already_computed/shares.xlsx +0 -0
  300. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.1.0/shares_the_workbook_had_already_computed/expected.json +0 -0
  301. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.1.0/shares_the_workbook_had_already_computed/shares.xlsx +0 -0
  302. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/README.md +0 -0
  303. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/gfs_2m_temperature/expected.json +0 -0
  304. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/gfs_2m_temperature/gfs-2m-temperature.grib2 +0 -0
  305. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_2m_temperature/expected.json +0 -0
  306. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_2m_temperature/hrrr-2m-temperature.grib2 +0 -0
  307. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_categorical_rain/expected.json +0 -0
  308. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_categorical_rain/hrrr-categorical-rain.grib2 +0 -0
  309. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/weather.grib2/2.0.0/hrrr_2m_temperature/expected.json +0 -0
  310. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/weather.grib2/2.0.0/hrrr_2m_temperature/hrrr-2m-temperature.grib2 +0 -0
  311. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/weather.grib2/3.0.0/gfs_and_hrrr_categorical_rain/expected.json +0 -0
  312. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/weather.grib2/3.0.0/gfs_and_hrrr_categorical_rain/gfs-and-hrrr-categorical-rain.grib2 +0 -0
  313. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/plain_filing_fact/expected.json +0 -0
  314. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/plain_filing_fact/filing.xml +0 -0
  315. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/xml_inline_fact/expected.json +0 -0
  316. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/xml_inline_fact/filing.xhtml +0 -0
  317. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/pacer_rss_feed/expected.json +0 -0
  318. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/pacer_rss_feed/feed.xml +0 -0
  319. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/sec_form_d_filing/expected.json +0 -0
  320. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/sec_form_d_filing/filing.xml +0 -0
  321. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/unified_agenda_extract/agenda.xml +0 -0
  322. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/unified_agenda_extract/expected.json +0 -0
  323. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/samples.py +0 -0
  324. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/scientific.py +0 -0
  325. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/scientific_arrays/__init__.py +0 -0
  326. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/scientific_arrays/container.py +0 -0
  327. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/scientific_arrays/goes.py +0 -0
  328. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/scientific_arrays/hdf4.py +0 -0
  329. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/scientific_arrays/hdf4_bridge.py +0 -0
  330. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/scientific_arrays/hdf5.py +0 -0
  331. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/scientific_arrays/native.py +0 -0
  332. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/scientific_arrays/netcdf.py +0 -0
  333. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/scientific_arrays/profiles.py +0 -0
  334. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/scientific_arrays/raw.py +0 -0
  335. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/scientific_arrays/zarr.py +0 -0
  336. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/scientific_catalog.py +0 -0
  337. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/scientific_segmented/__init__.py +0 -0
  338. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/scientific_segmented/asset_sets.py +0 -0
  339. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/scientific_segmented/formats.py +0 -0
  340. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/scientific_segmented/hsd.py +0 -0
  341. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/scientific_segmented/native.py +0 -0
  342. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/scientific_segmented/profiles.py +0 -0
  343. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/scientific_segmented/reader.py +0 -0
  344. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/scientific_segmented/xrit.py +0 -0
  345. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/sdmx_json.py +0 -0
  346. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/spreadsheet.py +0 -0
  347. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/statistical_microdata.py +0 -0
  348. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/tabular.py +0 -0
  349. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/vector.py +0 -0
  350. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/vector_wkb.py +0 -0
  351. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/xbrl_facts.py +0 -0
  352. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/readers/xml_tabular.py +0 -0
  353. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/recipe.py +0 -0
  354. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/review.py +0 -0
  355. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/rowset.py +0 -0
  356. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/run_execution_v4.py +0 -0
  357. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/run_phase_timing.py +0 -0
  358. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/session_probes.py +0 -0
  359. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/signing.py +0 -0
  360. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/skill_assets.py +0 -0
  361. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/source_bootstrap.py +0 -0
  362. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/source_bundle_writer.py +0 -0
  363. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/source_discovery.py +0 -0
  364. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/source_history_candidate_child.py +0 -0
  365. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/source_history_transform_child.py +0 -0
  366. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/source_inventory.py +0 -0
  367. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/source_partition.py +0 -0
  368. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/source_raw_inventory.py +0 -0
  369. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/source_state_index.py +0 -0
  370. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/__init__.py +0 -0
  371. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/_adapter_steps.py +0 -0
  372. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/adapters.py +0 -0
  373. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/authenticated_https.py +0 -0
  374. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/authenticated_https_v2.py +0 -0
  375. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/authenticated_https_v3.py +0 -0
  376. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/cadence.py +0 -0
  377. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/cadence_emission.py +0 -0
  378. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/cadence_history.py +0 -0
  379. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/catalog/__init__.py +0 -0
  380. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/catalog/admission.py +0 -0
  381. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/catalog/authoring.py +0 -0
  382. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/catalog/authoring_policy.py +0 -0
  383. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/catalog/authoring_shards.py +0 -0
  384. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/catalog/bounded_io.py +0 -0
  385. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/catalog/channel.py +0 -0
  386. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/catalog/channel_client.py +0 -0
  387. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/catalog/contracts.py +0 -0
  388. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/catalog/coverage.py +0 -0
  389. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/catalog/embedding.py +0 -0
  390. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/catalog/entry_v2.py +0 -0
  391. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/catalog/fill.py +0 -0
  392. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/catalog/fill_partitions.py +0 -0
  393. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/catalog/fill_staging.py +0 -0
  394. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/catalog/gating.py +0 -0
  395. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/catalog/generation_receipt.py +0 -0
  396. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/catalog/harvest/__init__.py +0 -0
  397. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/catalog/harvest/ckan.py +0 -0
  398. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/catalog/harvest/datagov_v4.py +0 -0
  399. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/catalog/harvest/protocol.py +0 -0
  400. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/catalog/harvest/sdmx.py +0 -0
  401. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/catalog/harvest/stac.py +0 -0
  402. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/catalog/hosted_catalog.py +0 -0
  403. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/catalog/identity_history.py +0 -0
  404. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/catalog/neural.py +0 -0
  405. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/catalog/packed_catalog.py +0 -0
  406. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/catalog/packed_retrieval.py +0 -0
  407. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/catalog/packed_writer.py +0 -0
  408. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/catalog/query_trace.py +0 -0
  409. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/catalog/recommend.py +0 -0
  410. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/catalog/retrieval.py +0 -0
  411. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/catalog/retrieval_manifest.py +0 -0
  412. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/catalog/sealed.py +0 -0
  413. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/catalog/search.py +0 -0
  414. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/catalog/streaming_delta.py +0 -0
  415. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/catalog/update.py +0 -0
  416. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/collections.py +0 -0
  417. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/contracts.py +0 -0
  418. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/dataset.py +0 -0
  419. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/deletion.py +0 -0
  420. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/document_projection.py +0 -0
  421. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/fitness.py +0 -0
  422. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/governance.py +0 -0
  423. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/hosted.py +0 -0
  424. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/integration.py +0 -0
  425. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/range_reader.py +0 -0
  426. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/registry.py +0 -0
  427. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/rights_rule.py +0 -0
  428. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/source_cadence_vectors.v1.json +0 -0
  429. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/sports.py +0 -0
  430. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/stream.py +0 -0
  431. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/stream_capture_session.py +0 -0
  432. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/stream_connector.py +0 -0
  433. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/stream_connectors/fixture.cursor-resume.v3.json +0 -0
  434. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-ed25519.v2.json +0 -0
  435. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-hmac.v2.json +0 -0
  436. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-hmac384.v2.json +0 -0
  437. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-hmac512.v2.json +0 -0
  438. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame.v2.json +0 -0
  439. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-header-rsa.v2.json +0 -0
  440. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-header.v2.json +0 -0
  441. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-permessage-jwt.v2.json +0 -0
  442. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-permessage.v2.json +0 -0
  443. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-prelude.v2.json +0 -0
  444. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-query.v2.json +0 -0
  445. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-subprotocol.v2.json +0 -0
  446. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-subscribe.v2.json +0 -0
  447. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-urlpath.v2.json +0 -0
  448. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/stream_connectors/polymarket.clob-market.v1.json +0 -0
  449. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/stream_credential.py +0 -0
  450. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/stream_prelude.py +0 -0
  451. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/stream_recorder.py +0 -0
  452. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/stream_registry.py +0 -0
  453. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/stream_rotation.py +0 -0
  454. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/stream_segment_recorder.py +0 -0
  455. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/stream_series.py +0 -0
  456. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/stream_signing.py +0 -0
  457. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sources/stream_transport.py +0 -0
  458. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/sql_transform_engine.py +0 -0
  459. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/stream_order_vector.py +0 -0
  460. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/stream_recovery_objects.py +0 -0
  461. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/stream_segment_spill.py +0 -0
  462. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/stream_subscription_feed.py +0 -0
  463. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/stream_subscription_sealer.py +0 -0
  464. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/stream_subscription_worker.py +0 -0
  465. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/stream_venue.py +0 -0
  466. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/stream_venue_staging.py +0 -0
  467. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/studio_subscription_control.py +0 -0
  468. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/table_manifest.py +0 -0
  469. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/table_parts.py +0 -0
  470. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/table_profile.py +0 -0
  471. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/thin/__init__.py +0 -0
  472. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/thin/acquire.py +0 -0
  473. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/thin/acquire_cancel.py +0 -0
  474. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/thin/activity.py +0 -0
  475. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/thin/approvals.py +0 -0
  476. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/thin/commands.py +0 -0
  477. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/thin/download.py +0 -0
  478. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/thin/narrative.py +0 -0
  479. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/thin/parity.py +0 -0
  480. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/thin/probe.py +0 -0
  481. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/thin/propose.py +0 -0
  482. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/thin/recipe.py +0 -0
  483. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/thin/research.py +0 -0
  484. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/thin/runs.py +0 -0
  485. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/thin/stream.py +0 -0
  486. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/thin/stream_venue.py +0 -0
  487. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/thin/transport.py +0 -0
  488. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/thin/v4.py +0 -0
  489. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/thin/v4_artifacts.py +0 -0
  490. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/thin/v4_connections.py +0 -0
  491. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/thin/v4_dataset_covers.py +0 -0
  492. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/thin/v4_narrative.py +0 -0
  493. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/thin/v4_query.py +0 -0
  494. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/thin/v4_runs.py +0 -0
  495. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/thin/v4_secrets.py +0 -0
  496. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/thin/v4_stream.py +0 -0
  497. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/thin/v4_tables.py +0 -0
  498. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/thin/workers.py +0 -0
  499. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/ucum/TABLE-PIN.json +0 -0
  500. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/ucum/ucum-subset.v1.json +0 -0
  501. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/unit_flow.py +0 -0
  502. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/units.py +0 -0
  503. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/ux/__init__.py +0 -0
  504. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/ux/attendance.py +0 -0
  505. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/ux/clarification.py +0 -0
  506. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/ux/cloud_auth.py +0 -0
  507. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/ux/commands/__init__.py +0 -0
  508. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/ux/commands/auth.py +0 -0
  509. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/ux/commands/catalog_author.py +0 -0
  510. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/ux/commands/catalog_harvest.py +0 -0
  511. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/ux/commands/catalog_publish.py +0 -0
  512. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/ux/commands/clarify.py +0 -0
  513. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/ux/commands/login.py +0 -0
  514. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/ux/commands/record.py +0 -0
  515. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/ux/commands/whoami.py +0 -0
  516. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/ux/credential_native.py +0 -0
  517. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/ux/credential_store.py +0 -0
  518. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/ux/credentials.py +0 -0
  519. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/ux/headline.py +0 -0
  520. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/ux/hosted_acquisition.py +0 -0
  521. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/ux/local_review.py +0 -0
  522. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/ux/login.py +0 -0
  523. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/ux/path_kind.py +0 -0
  524. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/ux/plain_file.py +0 -0
  525. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/ux/readers.py +0 -0
  526. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/ux/remediation.py +0 -0
  527. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/v4_acquisition.py +0 -0
  528. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/v4_check_dialect.py +0 -0
  529. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/v4_closed_source.py +0 -0
  530. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/v4_document_pin.py +0 -0
  531. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/v4_reader_pin.py +0 -0
  532. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/v4_recipe.py +0 -0
  533. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/v4_required_controls.py +0 -0
  534. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/v4_snapshot_artifact.py +0 -0
  535. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/v4_stream_recording.py +0 -0
  536. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/v4_transform.py +0 -0
  537. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/v4_window.py +0 -0
  538. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/visual_run/__init__.py +0 -0
  539. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/visual_run/authoring.py +0 -0
  540. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/visual_run/contracts.py +0 -0
  541. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/visual_run/materialize.py +0 -0
  542. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/visual_run/observations.py +0 -0
  543. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/visual_run/reducer.py +0 -0
  544. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/visual_run/sdk.py +0 -0
  545. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/visual_run/store.py +0 -0
  546. {mostlyright_data-0.17.2 → mostlyright_data-0.17.3}/src/mostlyright/data_harness/visual_run/transport.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mostlyright-data
3
- Version: 0.17.2
3
+ Version: 0.17.3
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.17.2"
3
+ version = "0.17.3"
4
4
  description = "Mostly Right CLI for reproducible, reviewed Parquet datasets"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.13,<3.14"
@@ -117,7 +117,7 @@ gap rather than doing anything, and `export-hosted-candidate`, which is a backen
117
117
  | `mr-data whoami` | Use the compatibility alias for the remotely validated `auth status` answer. |
118
118
  | `mr-data clarify` | Say whether one clarifying question may be put to the user right now, and compose the record of their answer. It reaches nothing, asks nobody and waits for nothing. Exits non-zero when no person can answer or when a recipe is already registered. |
119
119
  | `mr-data probe` | Ask one registered source one question and print the answer. **Currently unusable:** it reaches `/v3/sessions`, which Studio refuses, and it takes a question identifier that no v4 receipt returns. Do not plan a source inspection around it. |
120
- | `mr-data dataset` | Bring the dataset page into existence before there is anything on it, then fill it in while somebody watches. `dataset create --name TEXT` mints it and prints the `dataset_id`; `dataset show ID` reads it back; `dataset set ID --name TEXT --topics "a,b,c" --license ID --description-file F` writes the title, the categories, the SPDX licence and the description under the version it was read at, retrying once if somebody else wrote first, and an empty `--topics` or `--license` takes that value off the page; `dataset note ID --heading H --blocks-file B` writes one cell of the decision record that OUTLIVES every run, and `--list` reads it back; `dataset watch ID` follows the page's own event stream; `dataset activity ID --phase P --message TEXT` says what is happening right now, silently, and is never a chat message and never a cell; `dataset archive ID --confirm-name TITLE` retires the page and frees its title, deleting nothing. |
120
+ | `mr-data dataset` | Bring the dataset page into existence before there is anything on it, then fill it in while somebody watches. `dataset create --name TEXT` mints it and prints the `dataset_id`; `dataset show ID` reads it back; `dataset set ID --name TEXT --topics "a,b,c" --license ID --description-file F` writes the title, the categories, the SPDX licence and the description under the version it was read at, retrying once if somebody else wrote first, and an empty `--topics` or `--license` takes that value off the page; `dataset note ID --heading H --blocks-file B` writes one cell of the decision record that OUTLIVES every run, and `--list` reads it back; `dataset watch ID` follows the page's own event stream; `dataset activity ID --phase P --message TEXT` says what is happening right now, silently, and is never a chat message and never a cell; `dataset publish ID [--mode public|link|private]` says who can read the dataset — `public` lists it in the public directory and serves it at an address anybody can read, `link` serves it at an unlisted address, `private` takes it back to the workspace — and `dataset publish ID --show` reads that back without changing it; `dataset archive ID --confirm-name TITLE` retires the page and frees its title, deleting nothing. |
121
121
  | `mr-data recipe` | Register one recipe document — dataset, question, table plan, sources, transform, checks and units — in one call, and print the identifiers the server derived. `mr-data recipe show ID` reads one back. |
122
122
  | `mr-data cover` | Generate and attach one branded 1200×630 dataset cover. Give it the dataset ID and what the image should depict; Studio fixes the model, single-color style, curated random palette, dimensions and storage. |
123
123
  | `mr-data run` | Start one run against a registered recipe, named as `--recipe RECIPE_ID --digest RECIPE_DIGEST` — both required, neither positional, and the digest is the bare hex the registration receipt printed. The command accepts `--sample`, `--full`, `--refresh`, `--backfill` and `--window`, and the worker executes `--sample`, `--full` and `--refresh`. A refresh narrows each source that declares a supported address window and merges its returned relation into retained source state; unwindowed sources are conditionally revalidated or re-acquired whole, then the full declared transform runs. `--backfill` and a `--window` on a sample or full are refused before acquisition. `--max-rows` and `--max-source-bytes` remain supported, and each bounds ONE SOURCE rather than the finished table. A large run is held for a spend confirmation, which `--confirm` settles; a sample-first held full requires Studio's interactive human approval instead. `--cancel RUN` stops one. |
@@ -1765,6 +1765,15 @@ class PredecessorRecord:
1765
1765
  #: already holds. Read leniently: a receipt sealed before the member existed states none, and
1766
1766
  #: a run continuing from one is left to the guards that were already there.
1767
1767
  recording_bookmarks: Mapping[str, str] = MappingProxyType({})
1768
+ #: The sources whose committed state was DERIVED from a recording commitment because the
1769
+ #: receipt stated no digest of its own for them; see :func:`_recorded_source_state`.
1770
+ #:
1771
+ #: It is the one place a reader can tell a version a run sealed from a version composed at a
1772
+ #: recorder's checkpoint. A checkpoint acquires nothing -- its receipt states an empty source
1773
+ #: list -- so a name here says the position beside it was committed by the recorder rather
1774
+ #: than by an acquisition, which is the only lineage in which a commitment can have jumped
1775
+ #: ahead of the rows the version holds.
1776
+ recorded_source_states: frozenset[str] = frozenset()
1768
1777
 
1769
1778
  @property
1770
1779
  def layout_format_version(self) -> int:
@@ -1832,6 +1841,57 @@ def _receipt_table_record(
1832
1841
  }
1833
1842
 
1834
1843
 
1844
+ #: The commitment members a recorded source's committed state is derived from.
1845
+ #:
1846
+ #: CLOSED RATHER THAN "WHATEVER THE ENTRY CARRIES". The derived state is a digest, so every member
1847
+ #: folded into it decides what that digest is; taking the entry whole would let a member a later
1848
+ #: control plane adds silently change the state a source is recorded at. These five are the
1849
+ #: position and the identity of the recording it is a position in, which is the whole of what a
1850
+ #: recorded source's state consists of.
1851
+ _RECORDING_STATE_MEMBERS = (
1852
+ "bookmark_after",
1853
+ "connector_document_digest",
1854
+ "recording_id",
1855
+ "series_id",
1856
+ "stream_id",
1857
+ )
1858
+
1859
+
1860
+ def _recorded_source_state(commitment: Mapping[str, Any]) -> str | None:
1861
+ """The committed state of a source whose bytes a recorder sealed, or ``None`` for no position.
1862
+
1863
+ WHAT A SOURCE'S COMMITTED STATE IS, AND WHY A RECORDED ONE CANNOT BE A CONTENT DIGEST. For a
1864
+ source read from an address the state is the digest of the bytes that run read, because those
1865
+ bytes are what the version was built from and re-reading the address is how a successor tells
1866
+ whether anything moved. A recorded stream has no such reading: the version is the rows of the
1867
+ batches a recorder sealed, the successor reads the batches AFTER a position rather than the
1868
+ same ones again, and the position is therefore the entire state -- which is exactly what the
1869
+ receipt's ``recordings`` commitment states.
1870
+
1871
+ So the state is the digest of that commitment: the bookmark the version stopped at, and the
1872
+ identity of the recording the bookmark is a position in. Two versions of one table agree here
1873
+ only when they stopped at the same position of the same recording, which is the statement the
1874
+ member is read for, and the value can never collide with the digest of any source's bytes.
1875
+
1876
+ ⚠ A VERSION COMPOSED AT A RECORDER'S CHECKPOINT STATES NO SOURCE DIGESTS AT ALL. Its receipt
1877
+ carries an empty ``sources`` list -- nothing was fetched and no window was covered -- so a
1878
+ successor that required a per-source digest could not number itself after it, and a stream
1879
+ table whose live version is a checkpoint could not be continued by any run. The commitment is
1880
+ the authenticated statement of what that version committed, and deriving the state from it is
1881
+ what lets a refresh or a debt drain continue a lineage the recorder is writing.
1882
+ """
1883
+
1884
+ after = commitment.get("bookmark_after")
1885
+ if not isinstance(after, str) or RECORDING_BOOKMARK.fullmatch(after) is None:
1886
+ return None
1887
+ stated = {
1888
+ member: commitment[member]
1889
+ for member in _RECORDING_STATE_MEMBERS
1890
+ if isinstance(commitment.get(member), str) and commitment[member]
1891
+ }
1892
+ return hashlib.sha256(canonical_json_bytes(stated)).hexdigest()
1893
+
1894
+
1835
1895
  def _decode_predecessor_receipt(raw: bytes, job: RunExecution) -> PredecessorRecord:
1836
1896
  """Read the authenticated receipt bytes into the record, or refuse by name."""
1837
1897
 
@@ -1954,6 +2014,7 @@ def _decode_predecessor_receipt(raw: bytes, job: RunExecution) -> PredecessorRec
1954
2014
  # entry states no `bookmark_after`, contributes nothing rather than refusing -- the successor
1955
2015
  # then has no rewind to compare against and behaves exactly as it did before this member.
1956
2016
  bookmarks: dict[str, str] = {}
2017
+ recorded: set[str] = set()
1957
2018
  recordings = value.get("recordings")
1958
2019
  if isinstance(recordings, Mapping):
1959
2020
  for name, entry in recordings.items():
@@ -1962,6 +2023,15 @@ def _decode_predecessor_receipt(raw: bytes, job: RunExecution) -> PredecessorRec
1962
2023
  committed = entry.get("bookmark_after")
1963
2024
  if isinstance(committed, str) and RECORDING_BOOKMARK.fullmatch(committed) is not None:
1964
2025
  bookmarks[name] = committed
2026
+ # AND THE SAME COMMITMENT IS THE SOURCE'S COMMITTED STATE WHEN THE RECEIPT
2027
+ # STATES NO DIGEST FOR IT; see `_recorded_source_state`. A receipt that states
2028
+ # both keeps the digest of the bytes its own acquisition read: that reading is
2029
+ # the stronger one wherever it exists, a derived state must never displace it,
2030
+ # and the name is recorded only when the derivation is what supplied the state.
2031
+ derived = _recorded_source_state(entry)
2032
+ if derived is not None and name not in states:
2033
+ states[name] = derived
2034
+ recorded.add(name)
1965
2035
  evidence["recipe_digest"] = recipe_digest
1966
2036
  # ⚠ A CARRIED PREVIEW IS DROPPED RATHER THAN REFUSED WHEN IT IS NOT THIS WORKER'S SHAPE. The
1967
2037
  # member is a template a successor RE-STAMPS, so a document written under an older
@@ -2020,6 +2090,7 @@ def _decode_predecessor_receipt(raw: bytes, job: RunExecution) -> PredecessorRec
2020
2090
  observed_at=min(observations) if observations else None,
2021
2091
  source_validators=MappingProxyType(validators),
2022
2092
  recording_bookmarks=MappingProxyType(bookmarks),
2093
+ recorded_source_states=frozenset(recorded),
2023
2094
  )
2024
2095
 
2025
2096
 
@@ -3376,6 +3447,24 @@ def _refuse_rewound_continuation(job: RunExecution, predecessor: PredecessorReco
3376
3447
  position PAST it is a forward gap, which is the documented and benign outcome of a rotation
3377
3448
  and is left alone. Below it is a rewind and refused.
3378
3449
 
3450
+ ⚠ ONE REWIND IS NOT A RE-READ, AND IT IS THE ONE A RECORDER'S OWN LINEAGE PRODUCES. This
3451
+ guard's premise is that a version covers everything up to the position it committed at. That
3452
+ holds for every version a run sealed, and it fails for exactly one shape: a version composed
3453
+ at a recorder's checkpoint whose commitment JUMPED, because the control plane handed the
3454
+ table to the recorder at its own frontier rather than leaving a gap no run could ever close.
3455
+ Such a version's commitment names ground it does not hold, the skipped batch-counter range is
3456
+ written down as a debt, and the run that drains it is dispatched to read that range and stop
3457
+ inside it -- so its opening position is below the commitment by construction and comparing
3458
+ the two says nothing about duplication.
3459
+
3460
+ The exemption is therefore held to both halves of that shape at once, and neither alone is
3461
+ enough. The source's committed position must come from a version that ACQUIRED NOTHING (see
3462
+ ``recorded_source_states``: a checkpoint states no source digests, and only a checkpoint can
3463
+ have jumped), and this run's span must CLOSE below that position -- an interval, not a
3464
+ continuation. A span that opens below and then runs to or past the commitment is the re-read
3465
+ of a tail, which is what a stale commitment produces, and it stays refused whatever composed
3466
+ the predecessor.
3467
+
3379
3468
  ⚠ ONLY WITHIN ONE RECORDING. The epoch half of a bookmark names the recording the counter is
3380
3469
  a counter in, so two positions of different recordings are not comparable at all -- and a
3381
3470
  successor recording is started only when no active predecessor exists and can only capture
@@ -3403,16 +3492,25 @@ def _refuse_rewound_continuation(job: RunExecution, predecessor: PredecessorReco
3403
3492
  continue
3404
3493
  # Fixed-width counters, so the text order IS the numeric order -- the same comparison
3405
3494
  # `_parse_recording` makes between two batches of one run.
3406
- if position < committed:
3407
- raise RunExecutionError(
3408
- "RUN_RECORDING_INVALID",
3409
- failure_detail(
3410
- f"this refresh was dispatched to continue {name} from {position} while the "
3411
- f"version it appends to already covers {committed}, so the batches it read "
3412
- "hold rows the table already has; a re-dispatched span cannot be added"
3413
- ),
3414
- stage=_CONTINUATION_STAGE,
3415
- )
3495
+ if position >= committed:
3496
+ continue
3497
+ reaches = job.recordings[name].expected_watermark
3498
+ if (
3499
+ name in predecessor.recorded_source_states
3500
+ and _recording_epoch(reaches) == _recording_epoch(committed)
3501
+ and reaches < committed
3502
+ ):
3503
+ continue
3504
+ raise RunExecutionError(
3505
+ "RUN_RECORDING_INVALID",
3506
+ failure_detail(
3507
+ f"this refresh was dispatched to continue {name} from {position} through "
3508
+ f"{reaches} while the version it appends to already covers {committed}, so the "
3509
+ "batches it read hold rows the table already has; a re-dispatched span cannot "
3510
+ "be added"
3511
+ ),
3512
+ stage=_CONTINUATION_STAGE,
3513
+ )
3416
3514
 
3417
3515
 
3418
3516
  def _refuse_multi_source_stream_continuation(
@@ -85,7 +85,7 @@ PINNED_OPENAPI_SOURCE_SHA256 = "f2164517534e299f96449659332fc5bc0552fa7f94539c3d
85
85
  #: One line, and it stays one line: ``_replace_exactly`` in the repin matches the whole assignment
86
86
  #: as a literal and refuses on any count but one, so a wrapped constant is a constant the repin can
87
87
  #: no longer rewrite.
88
- PINNED_V4_OPENAPI_SOURCE_SHA256 = "fb4f245be1bc17cbf407be89855222ff2f37ee05e3d0596d782edef228268d4d"
88
+ PINNED_V4_OPENAPI_SOURCE_SHA256 = "fe6184bc1205c73600647f6a1ad6b5ee708fd357e2b29350be0b11c0eee24bbc"
89
89
 
90
90
  _DIGEST = re.compile(r"^sha256:[0-9a-f]{64}$")
91
91
  _IMAGE_DIGEST = re.compile(r"^[a-z0-9][a-z0-9._/-]{0,254}@sha256:[0-9a-f]{64}$")
@@ -116,7 +116,7 @@ HOSTED_SUMMARY = dict(
116
116
  # finished; every other authoring command edits something that already exists.
117
117
  (
118
118
  "dataset",
119
- "create the page, correct it, write its record, watch it fill in, and retire it",
119
+ "create the page, correct it, write its record, say who can read it, and retire it",
120
120
  ),
121
121
  ("recipe", "register one whole recipe and print the identifiers the server derived"),
122
122
  ("connections", "list saved connections available for recipes"),
@@ -16,6 +16,7 @@ recorded production failures on 2026-08-20.
16
16
 
17
17
  from __future__ import annotations
18
18
 
19
+ import json
19
20
  import re
20
21
  import time
21
22
  from collections.abc import Callable, Mapping
@@ -52,6 +53,16 @@ CLOUD_TOKEN_PATH = "/api/cli/studio-token"
52
53
  #: check and Studio cannot.
53
54
  CLOUD_SESSION_HANDOFF_PATH = "/api/cli/session-handoffs"
54
55
 
56
+ #: Cloud's own route for how one dataset is shared: read it with ``GET``, change it with ``POST``.
57
+ #:
58
+ #: ⚠ CLOUD RATHER THAN STUDIO, FOR A REASON THAT IS NOT THE HANDOFF'S. Making a dataset public is
59
+ #: not one Studio call: it initialises the dataset's publication with the organization's publisher
60
+ #: handle, flips the mode, and writes Cloud's OWN public index row and the slug that serves
61
+ #: ``/datasets/<slug>``. Only Cloud holds all three, and it already held them for the dashboard's
62
+ #: Share dialog -- so this route is that dialog's own decision behind the device credential, and
63
+ #: this client sends a mode and renders what came back rather than deciding any part of it.
64
+ CLOUD_DATASET_ACCESS_PATH = "/api/cli/datasets/{dataset_id}/access"
65
+
55
66
  #: The one Cloud address a Dataset has. ``mostlyright-cloud`` serves it at this route with
56
67
  #: section suffixes, and a run has no page of its own: its evidence lives on this page's Harness
57
68
  #: card, so a receipt names its run with :func:`run_dashboard_url` as a query member here rather
@@ -315,19 +326,203 @@ def open_studio_session(
315
326
  )
316
327
 
317
328
 
329
+ #: What a stated refusal code has to look like before it is interpolated into one.
330
+ #:
331
+ #: The shape every code in this lane's own vocabulary has, applied to somebody else's: a leading
332
+ #: letter, then letters, digits and underscores, bounded. It is not a check that the code is one
333
+ #: this build knows -- Cloud may ship a code before this client learns it, and forwarding an
334
+ #: unknown one is the point -- it is a check that what arrives is a CODE and not prose, markup or
335
+ #: a sentence with spaces in it.
336
+ CLOUD_REFUSAL_CODE = re.compile(r"[A-Z][A-Z0-9_]{0,63}")
337
+
338
+ #: The longest sentence somebody else's service composed that this lane will repeat, and the
339
+ #: shape it has to have. Cloud and Studio are this product's own services, so their sentence is
340
+ #: worth showing -- and it is still text this lane did not compose, so it is bounded, has to be
341
+ #: printable, and is quoted with its author named rather than presented as this lane's own words.
342
+ MAX_STATED_MESSAGE_CHARS = 300
343
+
344
+
345
+ def stated_sentence(value: Any) -> str | None:
346
+ """One sentence somebody else composed, admitted only when it is a sentence and not a payload.
347
+
348
+ ⚠ THE MESSAGE IS SHOWN AND THE CODE IS ACTED ON, WHICH IS THE SPLIT EVERY COMMAND IN THIS
349
+ LANE MAKES. A refusal a person cannot act on is a refusal they file a bug about, and the
350
+ useful half of a service's answer -- which capability is missing, which setting to change --
351
+ is in its sentence. So the sentence reaches the person, bounded and printable, and nothing
352
+ branches on it: what a script reads is the typed code beside it.
353
+ """
354
+
355
+ if not isinstance(value, str):
356
+ return None
357
+ stated = value.strip()
358
+ if not stated or len(stated) > MAX_STATED_MESSAGE_CHARS or not stated.isprintable():
359
+ return None
360
+ return stated
361
+
362
+
363
+ def cloud_refusal(
364
+ status: int, parsed: Any, *, act: str, absent: str | None = None
365
+ ) -> ThinLaneError:
366
+ """One Cloud refusal, folded the way ``runs._studio_refusal`` folds Studio's.
367
+
368
+ ⚠ THE TWO ISSUERS MUST REMEDIATE THE SAME SITUATION THE SAME WAY. ``ux/remediation.py``
369
+ keys on the code PREFIX, so a revoked device key arriving as ``THIN_CLOUD_...`` and a
370
+ revoked Studio token arriving as ``THIN_AUTHORIZATION_DENIED`` sent one person to two
371
+ different fixes for one problem. 401 and 403 fold onto the shared code here as they do
372
+ there, with Cloud's own code kept in the sentence so an expired key and a refused scope
373
+ stay distinguishable, and ``http_status`` rides along for the same reason it does there.
374
+
375
+ ⚠ AND THE CODE CLOUD STATED IS A CODE, NOT A STRING TO INTERPOLATE. The comment this
376
+ replaces said "the code is a closed vocabulary" and nothing checked it, so a Cloud answer
377
+ of ``{"code": "<script>"}`` composed ``THIN_CLOUD_<script>`` -- a refusal code no caller
378
+ can branch on and no vocabulary contains. A stated code that does not look like one falls
379
+ through to ``THIN_CLOUD_REFUSED``, which is the answer for "Cloud stated nothing usable".
380
+
381
+ ``act`` is what this call was trying to do, written as a verb phrase, and it is THIS lane's
382
+ words rather than Cloud's.
383
+
384
+ ⚠ AND ``absent`` IS WHY A 404 IS NOT ONE SENTENCE FOR EVERY ROUTE. On the handoff mint a 404
385
+ really is "Cloud has no such route" -- a Cloud too old to serve it. On a route whose path
386
+ carries a dataset identifier this lane has already checked is a uuid, a 404 cannot be a
387
+ missing route: it is Cloud saying it holds no such dataset for this workspace. Telling that
388
+ person to look at a deployment would send them after a problem that does not exist, so the
389
+ caller states the sentence its own 404 means and the default stays the mint's.
390
+
391
+ ⚠ AND A ROUTE THAT NAMES NO CODE STILL NAMED SOMETHING. NO Cloud CLI route sends a top-level
392
+ ``code``: every refusal on ``/api/cli/`` -- the handoff mint's 401, 429 and 503, the dataset
393
+ sharing route's 400 and 403 -- is a one-line ``error`` and nothing else. So this is the branch
394
+ the real wire takes on both routes, and dropping the sentence folded "this key may not change
395
+ dataset sharing" onto the same bare words as an expired key. Where Cloud stated no code, its
396
+ sentence is quoted -- bounded, printable, and attributed to Cloud -- so the two stay
397
+ distinguishable. The ``named`` branch above stands for a Cloud that starts sending a code, not
398
+ for one that does. Nothing branches on the sentence; the code beside it is what a script reads.
399
+ """
400
+
401
+ stated = parsed.get("code") if isinstance(parsed, dict) else None
402
+ named = stated if isinstance(stated, str) and CLOUD_REFUSAL_CODE.fullmatch(stated) else None
403
+ said = (
404
+ stated_sentence(parsed.get("error")) if named is None and isinstance(parsed, dict) else None
405
+ )
406
+ if status in {401, 403}:
407
+ if named:
408
+ suffix = f" (Cloud said {named}, HTTP {status})"
409
+ elif said:
410
+ suffix = f" (HTTP {status}; Cloud said: {said})"
411
+ else:
412
+ suffix = ""
413
+ refusal = ThinLaneError(
414
+ "THIN_AUTHORIZATION_DENIED",
415
+ f"the device key does not carry the authority this call needs{suffix}",
416
+ )
417
+ elif status == 404:
418
+ suffix = f" (Cloud said {named})" if named else ""
419
+ sentence = absent or f"Cloud has no route here to {act}"
420
+ refusal = ThinLaneError("THIN_NOT_FOUND", f"{sentence}{suffix}")
421
+ elif named is not None:
422
+ refusal = ThinLaneError(f"THIN_CLOUD_{named}", f"Cloud refused to {act} ({named})")
423
+ else:
424
+ detail = f"Cloud answered the request to {act} with HTTP {status}"
425
+ refusal = ThinLaneError(
426
+ "THIN_CLOUD_REFUSED", f"{detail}. Cloud said: {said}" if said else detail
427
+ )
428
+ refusal.http_status = status # type: ignore[attr-defined]
429
+ return refusal
430
+
431
+
432
+ class CloudClient:
433
+ """One bounded call to the Cloud origin, authenticated by the device key Cloud itself issued.
434
+
435
+ NOT a :class:`~mostlyright.data_harness.thin.v4.StudioV4Client` subclass, and that is
436
+ structural rather than stylistic: that class carries a Studio bearer and a Studio base URL,
437
+ and these calls carry the DEVICE key to the CLOUD origin. Making it look like a Studio client
438
+ would be the first step towards somebody passing it a Studio session.
439
+
440
+ ⚠ ONE CLASS FOR EVERY CLOUD ROUTE THIS LANE CALLS, for the reason
441
+ :class:`~mostlyright.data_harness.thin.v4.StudioV4Client` gives about its own single ``_call``:
442
+ a second one would be a second place for the origin check, the byte ceiling, the credential
443
+ header and the refusal folding to drift. The handoff mint was the first caller and the dataset
444
+ sharing route is the second; both are ``self.call`` and one line of route.
445
+ """
446
+
447
+ def __init__(
448
+ self, credentials: ResolvedCloudCredentials, *, transport: Transport | None = None
449
+ ) -> None:
450
+ self._credentials = credentials
451
+ self._origin = service_origin(credentials.cloud_url, "Cloud URL", allow_loopback_http=False)
452
+ self._transport = transport or UrlLibTransport()
453
+
454
+ @property
455
+ def cloud_url(self) -> str:
456
+ return self._origin
457
+
458
+ def call(
459
+ self,
460
+ method: str,
461
+ path: str,
462
+ *,
463
+ act: str,
464
+ body: Mapping[str, Any] | None = None,
465
+ expected: tuple[int, ...] = (200,),
466
+ absent: str | None = None,
467
+ ) -> dict[str, Any]:
468
+ """Make one Cloud call and return the object it answered with, or raise the refusal.
469
+
470
+ ``expected`` is stated by the caller rather than defaulted to "anything below 400",
471
+ because the difference between the statuses a route can answer is the difference between
472
+ two things having happened: a ``200`` where a ``201`` was contracted means something other
473
+ than "it was created", and this client has nothing to do with anything else.
474
+
475
+ ``absent`` is what this route's own 404 means, in the caller's words; see
476
+ :func:`cloud_refusal` for why one sentence could not serve both routes.
477
+ """
478
+
479
+ headers = {
480
+ "Accept": "application/json",
481
+ "Authorization": f"Bearer {self._credentials.raw_key}",
482
+ }
483
+ encoded: bytes | None = None
484
+ if body is not None:
485
+ headers["Content-Type"] = "application/json"
486
+ encoded = json.dumps(dict(body), separators=(",", ":")).encode("utf-8")
487
+ status, raw, _headers = self._transport.request(
488
+ method,
489
+ f"{self._origin}{path}",
490
+ headers,
491
+ encoded,
492
+ MAX_TOKEN_RESPONSE_BYTES,
493
+ )
494
+ try:
495
+ parsed = parse_json(raw)
496
+ except CanonicalJSONError:
497
+ parsed = None
498
+ if status not in expected:
499
+ raise cloud_refusal(status, parsed, act=act, absent=absent)
500
+ if not isinstance(parsed, dict):
501
+ raise ThinLaneError(
502
+ "THIN_RESPONSE_INVALID",
503
+ f"Cloud answered the request to {act} without an object to read it from",
504
+ )
505
+ return parsed
506
+
507
+
318
508
  __all__ = [
319
509
  "CLOUD_APPROVAL_DASHBOARD_PATH",
510
+ "CLOUD_DATASET_ACCESS_PATH",
320
511
  "CLOUD_DATASET_DASHBOARD_PATH",
321
512
  "CLOUD_DATASET_RUN_QUERY_KEY",
513
+ "CLOUD_REFUSAL_CODE",
322
514
  "CLOUD_SESSION_HANDOFF_PATH",
323
515
  "CLOUD_TEAM_DASHBOARD_PATH",
324
516
  "CLOUD_TOKEN_PATH",
325
517
  "MAX_JSON_RESPONSE_BYTES",
518
+ "MAX_STATED_MESSAGE_CHARS",
326
519
  "MAX_TOKEN_RESPONSE_BYTES",
327
520
  "TOKEN_EXCHANGE_MAX_RETRY_SECONDS",
328
521
  "TOKEN_EXCHANGE_RETRY_ATTEMPTS",
522
+ "CloudClient",
329
523
  "StudioSession",
330
524
  "approval_dashboard_url",
525
+ "cloud_refusal",
331
526
  "dataset_dashboard_url",
332
527
  "dataset_research_dashboard_url",
333
528
  "is_device_key",
@@ -335,5 +530,6 @@ __all__ = [
335
530
  "require_device_key",
336
531
  "run_dashboard_url",
337
532
  "run_record_dashboard_url",
533
+ "stated_sentence",
338
534
  "team_dashboard_url",
339
535
  ]