mostlyright-data 0.10.4__tar.gz → 0.10.6__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 (558) hide show
  1. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/PKG-INFO +1 -1
  2. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/pyproject.toml +1 -1
  3. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/skills/mr-data-build/SKILL.md +67 -10
  4. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/hosted_deploy.py +2 -2
  5. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/hosted_run_worker.py +162 -48
  6. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/run_execution_v4.py +415 -28
  7. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/stream.py +15 -0
  8. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/stream_capture_session.py +28 -6
  9. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/stream_connector.py +312 -36
  10. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/stream_recorder.py +91 -21
  11. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/stream_segment_recorder.py +5 -2
  12. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/stream_subscription_feed.py +6 -3
  13. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/studio_boundary.py +1 -1
  14. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/thin/approvals.py +3 -3
  15. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/thin/commands.py +13 -7
  16. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/thin/parity.py +22 -10
  17. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/thin/propose.py +7 -2
  18. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/thin/research.py +1 -1
  19. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/thin/router.py +14 -0
  20. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/thin/session.py +53 -24
  21. mostlyright_data-0.10.6/src/mostlyright/data_harness/thin/stream_venue.py +978 -0
  22. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/thin/v4.py +88 -9
  23. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/thin/v4_artifacts.py +17 -5
  24. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/thin/v4_query.py +2 -2
  25. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/thin/v4_runs.py +2 -2
  26. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/thin/v4_secrets.py +200 -9
  27. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/thin/v4_stream.py +19 -11
  28. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/thin/vocabulary.py +7 -0
  29. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/ux/commands/record.py +15 -6
  30. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/ux/hosted_run_status.py +1 -1
  31. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/ux/remediation.py +1 -1
  32. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/ux/render.py +33 -0
  33. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/v4_acquisition.py +61 -4
  34. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/v4_required_controls.py +88 -24
  35. mostlyright_data-0.10.6/src/mostlyright/data_harness/v4_stream_recording.py +375 -0
  36. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/.gitignore +0 -0
  37. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/README.md +0 -0
  38. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/scripts/hatch_build.py +0 -0
  39. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/skills/mr-data-build/agents/openai.yaml +0 -0
  40. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/skills/mr-data-build/scripts/write_research_notebook.py +0 -0
  41. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/skills/mr-data-build/scripts/write_visual_run.py +0 -0
  42. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/_vendor/__init__.py +0 -0
  43. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/_vendor/rapidocr/LICENSE +0 -0
  44. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/_vendor/rapidocr/PROVENANCE.json +0 -0
  45. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/_vendor/rapidocr/__init__.py +0 -0
  46. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/_vendor/rapidocr/__init__.pyi +0 -0
  47. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/_vendor/rapidocr/_version.py +0 -0
  48. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/_vendor/rapidocr/cal_rec_boxes/__init__.py +0 -0
  49. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/_vendor/rapidocr/cal_rec_boxes/main.py +0 -0
  50. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/_vendor/rapidocr/ch_ppocr_cls/__init__.py +0 -0
  51. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/_vendor/rapidocr/ch_ppocr_cls/main.py +0 -0
  52. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/_vendor/rapidocr/ch_ppocr_cls/utils.py +0 -0
  53. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/_vendor/rapidocr/ch_ppocr_det/__init__.py +0 -0
  54. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/_vendor/rapidocr/ch_ppocr_det/main.py +0 -0
  55. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/_vendor/rapidocr/ch_ppocr_det/utils.py +0 -0
  56. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/__init__.py +0 -0
  57. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/main.py +0 -0
  58. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/typings.py +0 -0
  59. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/utils.py +0 -0
  60. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/_vendor/rapidocr/config.yaml +0 -0
  61. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/_vendor/rapidocr/inference_engine/__init__.py +0 -0
  62. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/_vendor/rapidocr/inference_engine/base.py +0 -0
  63. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/_vendor/rapidocr/inference_engine/onnxruntime/__init__.py +0 -0
  64. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/_vendor/rapidocr/inference_engine/onnxruntime/main.py +0 -0
  65. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/_vendor/rapidocr/inference_engine/onnxruntime/provider_config.py +0 -0
  66. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/_vendor/rapidocr/main.py +0 -0
  67. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/_vendor/rapidocr/models/PP-OCRv6_det_small.onnx +0 -0
  68. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/_vendor/rapidocr/models/PP-OCRv6_rec_small.onnx +0 -0
  69. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/_vendor/rapidocr/models/ch_ppocr_mobile_v2.0_cls_mobile.onnx +0 -0
  70. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/_vendor/rapidocr/py.typed +0 -0
  71. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/_vendor/rapidocr/utils/__init__.py +0 -0
  72. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/_vendor/rapidocr/utils/load_image.py +0 -0
  73. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/_vendor/rapidocr/utils/log.py +0 -0
  74. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/_vendor/rapidocr/utils/model_resolver.py +0 -0
  75. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/_vendor/rapidocr/utils/output.py +0 -0
  76. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/_vendor/rapidocr/utils/parse_parameters.py +0 -0
  77. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/_vendor/rapidocr/utils/process_img.py +0 -0
  78. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/_vendor/rapidocr/utils/typings.py +0 -0
  79. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/_vendor/rapidocr/utils/utils.py +0 -0
  80. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/__init__.py +0 -0
  81. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/acquisition/__init__.py +0 -0
  82. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/acquisition/http.py +0 -0
  83. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/acquisition/parsing.py +0 -0
  84. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/acquisition/ranges.py +0 -0
  85. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/acquisition/result_download.py +0 -0
  86. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/acquisition/retention_admission.py +0 -0
  87. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/acquisition/sandbox.py +0 -0
  88. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/acquisition/url_policy.py +0 -0
  89. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/agent_runtime.py +0 -0
  90. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/assets/logo-ink.svg +0 -0
  91. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/backends/__init__.py +0 -0
  92. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/backends/pandas_backend.py +0 -0
  93. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/backends/polars_backend.py +0 -0
  94. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/backends/protocol.py +0 -0
  95. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/backends/reference.py +0 -0
  96. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/backends/registry.py +0 -0
  97. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/backends/restrictions.py +0 -0
  98. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/bounded_query.py +0 -0
  99. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/canonical.py +0 -0
  100. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/catalog_job.py +0 -0
  101. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/cli.py +0 -0
  102. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/contracts.py +0 -0
  103. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/coordinator.py +0 -0
  104. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/crosswalks.py +0 -0
  105. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/declared_checks.py +0 -0
  106. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/deploy.py +0 -0
  107. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/deploy_target.py +0 -0
  108. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/deployment_evidence.py +0 -0
  109. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/documents/__init__.py +0 -0
  110. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/documents/_worker_capability.py +0 -0
  111. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/documents/agent_request.py +0 -0
  112. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/documents/capture.py +0 -0
  113. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/documents/contracts.py +0 -0
  114. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/documents/lane.py +0 -0
  115. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/documents/ocr.py +0 -0
  116. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/documents/pdf.py +0 -0
  117. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/documents/registry.py +0 -0
  118. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/documents/sandbox.py +0 -0
  119. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/documents/selections.py +0 -0
  120. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/documents/tables.py +0 -0
  121. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/documents/vendor_rapidocr.py +0 -0
  122. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/events.py +0 -0
  123. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/fast_delimited.py +0 -0
  124. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/formats.py +0 -0
  125. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/governors.py +0 -0
  126. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/hosted_bootstrap.py +0 -0
  127. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/hosted_crawler.py +0 -0
  128. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/hosted_crawler_container_smoke.py +0 -0
  129. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/hosted_crawler_fetch.py +0 -0
  130. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/hosted_crawler_job.py +0 -0
  131. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/hosted_crawler_protocol.py +0 -0
  132. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/hosted_dataset.py +0 -0
  133. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/hosted_handoff.py +0 -0
  134. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/hosted_ingestion_contract.py +0 -0
  135. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/hosted_ingestion_job.py +0 -0
  136. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/hosted_ingestion_job_smoke.py +0 -0
  137. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/hosted_rlimit_as_container_smoke.py +0 -0
  138. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/hosted_session_container_smoke.py +0 -0
  139. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/hosted_session_worker.py +0 -0
  140. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/hosted_session_worker_job_smoke.py +0 -0
  141. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/hosted_stream_recorder_container_smoke.py +0 -0
  142. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/hosted_stream_recorder_job.py +0 -0
  143. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/hosted_stream_subscription_container_smoke.py +0 -0
  144. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/hosted_stream_subscription_worker.py +0 -0
  145. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/hosted_worker.py +0 -0
  146. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/ingestion/__init__.py +0 -0
  147. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/ingestion/contracts.py +0 -0
  148. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/ingestion/faults.py +0 -0
  149. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/ingestion/gcs_store.py +0 -0
  150. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/ingestion/spool.py +0 -0
  151. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/ingestion/store.py +0 -0
  152. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/inprocess_acquisition.py +0 -0
  153. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/key_seam.py +0 -0
  154. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/linux_process_boundary.py +0 -0
  155. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/local_contracts.py +0 -0
  156. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/local_search/__init__.py +0 -0
  157. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/local_search/build_index.py +0 -0
  158. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/local_search/contracts.py +0 -0
  159. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/local_search/query_trace.py +0 -0
  160. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/local_search/retrieval.py +0 -0
  161. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/local_search/sealed.py +0 -0
  162. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/local_search/service.py +0 -0
  163. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/nbrender/CONTRACT.md +0 -0
  164. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/nbrender/__init__.py +0 -0
  165. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/nbrender/chrome.py +0 -0
  166. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/nbrender/code_body.py +0 -0
  167. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/nbrender/document.py +0 -0
  168. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/nbrender/frame.py +0 -0
  169. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/nbrender/interactive.py +0 -0
  170. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/nbrender/markdown_body.py +0 -0
  171. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/nbrender/mr_components.py +0 -0
  172. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/nbrender/outputs_data.py +0 -0
  173. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/nbrender/outputs_rich.py +0 -0
  174. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/nbrender/outputs_source.py +0 -0
  175. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/nbrender/outputs_stage.py +0 -0
  176. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/nbrender/outputs_text.py +0 -0
  177. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/nbrender/parse.py +0 -0
  178. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/nbrender/status.py +0 -0
  179. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/nbrender/tokens.py +0 -0
  180. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/notebook.py +0 -0
  181. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/offline.py +0 -0
  182. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/operation_registry.py +0 -0
  183. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/operator_setup.py +0 -0
  184. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/pipeline.py +0 -0
  185. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/plan_graph.py +0 -0
  186. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/preparation/__init__.py +0 -0
  187. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/preparation/contracts.py +0 -0
  188. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/preparation/engine.py +0 -0
  189. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/preparation/errors.py +0 -0
  190. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/preparation/gates.py +0 -0
  191. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/preparation/joins.py +0 -0
  192. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/preparation/profile.py +0 -0
  193. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/preparation/table.py +0 -0
  194. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/preparation/transforms.py +0 -0
  195. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/progress_events.py +0 -0
  196. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/__init__.py +0 -0
  197. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/_openpyxl.py +0 -0
  198. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/budgets.py +0 -0
  199. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/containers.py +0 -0
  200. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/contracts.py +0 -0
  201. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/delimited.py +0 -0
  202. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/geojson_vector.py +0 -0
  203. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/geopackage.py +0 -0
  204. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/geoparquet.py +0 -0
  205. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/grib2/__init__.py +0 -0
  206. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/grib2/admission.py +0 -0
  207. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/grib2/collection.py +0 -0
  208. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/grib2/collection_reader.py +0 -0
  209. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/grib2/decode.py +0 -0
  210. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/grib2/geometry.py +0 -0
  211. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/grib2/portable_math.py +0 -0
  212. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/grib_eccodes.py +0 -0
  213. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/html_tabular.py +0 -0
  214. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/html_web_extract.py +0 -0
  215. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/json_tabular.py +0 -0
  216. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/parquet_tabular.py +0 -0
  217. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/pcaxis_px.py +0 -0
  218. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/protobuf_tabular.py +0 -0
  219. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/raster/__init__.py +0 -0
  220. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/raster/_bytes.py +0 -0
  221. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/raster/decode.py +0 -0
  222. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/raster/family.py +0 -0
  223. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/raster/jpeg2000.py +0 -0
  224. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/raster/profiles.py +0 -0
  225. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/raster/rendered.py +0 -0
  226. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/raster/safe.py +0 -0
  227. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/raster/sentinel_safe.py +0 -0
  228. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/raster/tiff.py +0 -0
  229. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/registry.py +0 -0
  230. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/README.md +0 -0
  231. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.0.0/cities_one_stream/cities.csv.gz +0 -0
  232. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.0.0/cities_one_stream/expected.json +0 -0
  233. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.1.0/cities_one_stream/cities.csv.gz +0 -0
  234. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.1.0/cities_one_stream/expected.json +0 -0
  235. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/archive.tar/1.0.0/cities_beside_a_directory_entry/cities.tar +0 -0
  236. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/archive.tar/1.0.0/cities_beside_a_directory_entry/expected.json +0 -0
  237. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/archive.tar/1.1.0/cities_beside_a_directory_entry/cities.tar +0 -0
  238. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/archive.tar/1.1.0/cities_beside_a_directory_entry/expected.json +0 -0
  239. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/archive.zip/1.0.0/cities_beside_a_second_member/cities.zip +0 -0
  240. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/archive.zip/1.0.0/cities_beside_a_second_member/expected.json +0 -0
  241. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/archive.zip/1.1.0/dwd_semicolon_station_member/dwd-station.zip +0 -0
  242. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/archive.zip/1.1.0/dwd_semicolon_station_member/expected.json +0 -0
  243. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/archive.zip/1.2.0/dwd_semicolon_station_member/dwd-station.zip +0 -0
  244. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/archive.zip/1.2.0/dwd_semicolon_station_member/expected.json +0 -0
  245. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/an_ordinary_comma_separated_table/cities.csv +0 -0
  246. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/an_ordinary_comma_separated_table/expected.json +0 -0
  247. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/quoted_fields_holding_the_delimiter/cities.tsv +0 -0
  248. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/quoted_fields_holding_the_delimiter/expected.json +0 -0
  249. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/delimited_text/1.1.0/an_hourly_observation_table_served_as_plain_text/expected.json +0 -0
  250. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/delimited_text/1.1.0/an_hourly_observation_table_served_as_plain_text/observations.csv +0 -0
  251. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/geojson.vector/1.0.0/czech_capital/expected.json +0 -0
  252. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/geojson.vector/1.0.0/czech_capital/places.geojson +0 -0
  253. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/geopackage.vector/1.0.0/epsg_4326_feature/expected.json +0 -0
  254. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/geopackage.vector/1.0.0/epsg_4326_feature/places.gpkg +0 -0
  255. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/geoparquet.vector/1.0.0/primary_wkb_point/expected.json +0 -0
  256. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/geoparquet.vector/1.0.0/primary_wkb_point/places.parquet +0 -0
  257. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/html.tabular/1.0.0/sanitized_table/expected.json +0 -0
  258. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/html.tabular/1.0.0/sanitized_table/table.html +0 -0
  259. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/html.web_extract/1.0.0/json_ld_scorecards/expected.json +0 -0
  260. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/html.web_extract/1.0.0/json_ld_scorecards/scorecards.html +0 -0
  261. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/image.rendered/1.0.0/tiny_png/expected.json +0 -0
  262. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/image.rendered/1.0.0/tiny_png/tiny-rendered.png +0 -0
  263. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/json.tabular/1.0.0/nested_hourly_observations/expected.json +0 -0
  264. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/json.tabular/1.0.0/nested_hourly_observations/stations.json +0 -0
  265. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/json.tabular/1.1.0/an_observation_stream_served_as_plain_text/expected.json +0 -0
  266. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/json.tabular/1.1.0/an_observation_stream_served_as_plain_text/observations.ndjson +0 -0
  267. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/meteorology.bufr/1.0.0/eccodes_bufr4_subset/eccodes-bufr4.bufr +0 -0
  268. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/meteorology.bufr/1.0.0/eccodes_bufr4_subset/expected.json +0 -0
  269. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/meteorology.grib/1.0.0/eccodes_grib1_origin/expected.json +0 -0
  270. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/meteorology.grib/1.0.0/eccodes_grib1_origin/regular-ll-surface.grib1 +0 -0
  271. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/microdata.sas_xpt/1.0.0/two_raw_columns/expected.json +0 -0
  272. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/microdata.sas_xpt/1.0.0/two_raw_columns/survey.xpt +0 -0
  273. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/microdata.spss_sav/1.0.0/two_raw_columns/expected.json +0 -0
  274. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/microdata.spss_sav/1.0.0/two_raw_columns/survey.sav +0 -0
  275. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/microdata.stata_dta/1.0.0/two_raw_columns/expected.json +0 -0
  276. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/microdata.stata_dta/1.0.0/two_raw_columns/stata.dta +0 -0
  277. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/official.pcaxis_px/1.0.0/population_by_region_and_year/expected.json +0 -0
  278. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/official.pcaxis_px/1.0.0/population_by_region_and_year/population.px +0 -0
  279. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/official.sdmx_json/1.0.0/compact_population_series/expected.json +0 -0
  280. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/official.sdmx_json/1.0.0/compact_population_series/population.json +0 -0
  281. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/parquet.tabular/1.0.0/two_columns/expected.json +0 -0
  282. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/parquet.tabular/1.0.0/two_columns/prices.parquet +0 -0
  283. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/protobuf.tabular/1.0.0/gtfs_realtime_trip_updates/expected.json +0 -0
  284. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/protobuf.tabular/1.0.0/gtfs_realtime_trip_updates/gtfs-realtime.desc +0 -0
  285. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/protobuf.tabular/1.0.0/gtfs_realtime_trip_updates/trip-updates.pb +0 -0
  286. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/raster.geospatial/1.0.0/tiny_geotiff/expected.json +0 -0
  287. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/raster.geospatial/1.0.0/tiny_geotiff/tiny-geospatial.tif +0 -0
  288. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/satellite.goes_abi_l2/1.0.0/authored_cmi_window/expected.json +0 -0
  289. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/satellite.goes_abi_l2/1.0.0/authored_cmi_window/goes-abi-l2-cmi-window.nc +0 -0
  290. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/satellite.himawari_hsd/1.0.0/authored_b13_single_bzip2/expected.json +0 -0
  291. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/satellite.himawari_hsd/1.0.0/authored_b13_single_bzip2/himawari-b13-0101-bzip2.dat +0 -0
  292. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/satellite.himawari_hsd_complete/1.0.0/authored_b13_three_segment_scan/expected.json +0 -0
  293. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/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
  294. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/satellite.msg_seviri_l15/1.0.0/authored_calibrated_complete_visir/expected.json +0 -0
  295. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/satellite.msg_seviri_l15/1.0.0/authored_calibrated_complete_visir/msg-seviri-l15.zip +0 -0
  296. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/satellite.sentinel_safe/1.0.0/authored_b02_scl_window/expected.json +0 -0
  297. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/satellite.sentinel_safe/1.0.0/authored_b02_scl_window/sentinel-safe-b02-scl.zip +0 -0
  298. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/satellite.xrit_image/1.0.0/authored_complete_raw_counts/expected.json +0 -0
  299. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/satellite.xrit_image/1.0.0/authored_complete_raw_counts/xrit-complete-image.zip +0 -0
  300. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/scientific.fits/1.0.0/tiny_primary_window/expected.json +0 -0
  301. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/scientific.fits/1.0.0/tiny_primary_window/tiny-primary.fits +0 -0
  302. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/scientific.hdf4/1.0.0/authored_temperature_window/expected.json +0 -0
  303. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/scientific.hdf4/1.0.0/authored_temperature_window/temperature.hdf +0 -0
  304. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/scientific.hdf5/1.0.0/authored_temperature_window/expected.json +0 -0
  305. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/scientific.hdf5/1.0.0/authored_temperature_window/temperature.h5 +0 -0
  306. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/scientific.hdf_eos2/1.0.0/authored_grid_temperature_window/expected.json +0 -0
  307. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/scientific.hdf_eos2/1.0.0/authored_grid_temperature_window/nasa-hdfeos2-grid.hdf +0 -0
  308. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/scientific.hdf_eos2/1.0.0/authored_swath_temperature_window/expected.json +0 -0
  309. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/scientific.hdf_eos2/1.0.0/authored_swath_temperature_window/nasa-hdfeos2-swath.hdf +0 -0
  310. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/scientific.netcdf/1.0.0/authored_classic_temperature_window/expected.json +0 -0
  311. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/scientific.netcdf/1.0.0/authored_classic_temperature_window/temperature-classic.nc +0 -0
  312. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/scientific.zarr/1.0.0/authored_v3_temperature_window/expected.json +0 -0
  313. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/scientific.zarr/1.0.0/authored_v3_temperature_window/temperature-zarr-v3.zip +0 -0
  314. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.0.0/an_ordinary_table_beside_a_second_sheet/cities.xlsx +0 -0
  315. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.0.0/an_ordinary_table_beside_a_second_sheet/expected.json +0 -0
  316. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.0.0/shares_the_workbook_had_already_computed/expected.json +0 -0
  317. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.0.0/shares_the_workbook_had_already_computed/shares.xlsx +0 -0
  318. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.1.0/shares_the_workbook_had_already_computed/expected.json +0 -0
  319. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.1.0/shares_the_workbook_had_already_computed/shares.xlsx +0 -0
  320. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/README.md +0 -0
  321. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/gfs_2m_temperature/expected.json +0 -0
  322. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/gfs_2m_temperature/gfs-2m-temperature.grib2 +0 -0
  323. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_2m_temperature/expected.json +0 -0
  324. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_2m_temperature/hrrr-2m-temperature.grib2 +0 -0
  325. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_categorical_rain/expected.json +0 -0
  326. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_categorical_rain/hrrr-categorical-rain.grib2 +0 -0
  327. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/weather.grib2/2.0.0/hrrr_2m_temperature/expected.json +0 -0
  328. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/weather.grib2/2.0.0/hrrr_2m_temperature/hrrr-2m-temperature.grib2 +0 -0
  329. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/weather.grib2/3.0.0/gfs_and_hrrr_categorical_rain/expected.json +0 -0
  330. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/weather.grib2/3.0.0/gfs_and_hrrr_categorical_rain/gfs-and-hrrr-categorical-rain.grib2 +0 -0
  331. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/plain_filing_fact/expected.json +0 -0
  332. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/plain_filing_fact/filing.xml +0 -0
  333. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/xml_inline_fact/expected.json +0 -0
  334. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/xml_inline_fact/filing.xhtml +0 -0
  335. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/pacer_rss_feed/expected.json +0 -0
  336. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/pacer_rss_feed/feed.xml +0 -0
  337. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/sec_form_d_filing/expected.json +0 -0
  338. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/sec_form_d_filing/filing.xml +0 -0
  339. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/unified_agenda_extract/agenda.xml +0 -0
  340. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/unified_agenda_extract/expected.json +0 -0
  341. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/samples.py +0 -0
  342. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/scientific.py +0 -0
  343. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/scientific_arrays/__init__.py +0 -0
  344. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/scientific_arrays/container.py +0 -0
  345. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/scientific_arrays/goes.py +0 -0
  346. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/scientific_arrays/hdf4.py +0 -0
  347. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/scientific_arrays/hdf4_bridge.py +0 -0
  348. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/scientific_arrays/hdf5.py +0 -0
  349. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/scientific_arrays/native.py +0 -0
  350. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/scientific_arrays/netcdf.py +0 -0
  351. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/scientific_arrays/profiles.py +0 -0
  352. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/scientific_arrays/raw.py +0 -0
  353. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/scientific_arrays/zarr.py +0 -0
  354. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/scientific_catalog.py +0 -0
  355. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/scientific_segmented/__init__.py +0 -0
  356. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/scientific_segmented/asset_sets.py +0 -0
  357. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/scientific_segmented/formats.py +0 -0
  358. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/scientific_segmented/hsd.py +0 -0
  359. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/scientific_segmented/native.py +0 -0
  360. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/scientific_segmented/profiles.py +0 -0
  361. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/scientific_segmented/reader.py +0 -0
  362. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/scientific_segmented/xrit.py +0 -0
  363. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/sdmx_json.py +0 -0
  364. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/spreadsheet.py +0 -0
  365. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/statistical_microdata.py +0 -0
  366. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/tabular.py +0 -0
  367. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/vector.py +0 -0
  368. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/vector_wkb.py +0 -0
  369. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/xbrl_facts.py +0 -0
  370. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/readers/xml_tabular.py +0 -0
  371. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/recipe.py +0 -0
  372. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/repair/__init__.py +0 -0
  373. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/repair/adapters.py +0 -0
  374. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/repair/contracts.py +0 -0
  375. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/repair/coordinator.py +0 -0
  376. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/repair/errors.py +0 -0
  377. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/review.py +0 -0
  378. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/rowset.py +0 -0
  379. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/session_probes.py +0 -0
  380. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/signing.py +0 -0
  381. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/skill_assets.py +0 -0
  382. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/source_discovery.py +0 -0
  383. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/__init__.py +0 -0
  384. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/_adapter_steps.py +0 -0
  385. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/adapters.py +0 -0
  386. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/authenticated_https.py +0 -0
  387. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/authenticated_https_v2.py +0 -0
  388. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/cadence.py +0 -0
  389. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/cadence_emission.py +0 -0
  390. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/cadence_history.py +0 -0
  391. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/catalog/__init__.py +0 -0
  392. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/catalog/admission.py +0 -0
  393. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/catalog/authoring.py +0 -0
  394. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/catalog/authoring_policy.py +0 -0
  395. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/catalog/authoring_shards.py +0 -0
  396. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/catalog/bounded_io.py +0 -0
  397. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/catalog/channel.py +0 -0
  398. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/catalog/channel_client.py +0 -0
  399. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/catalog/contracts.py +0 -0
  400. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/catalog/coverage.py +0 -0
  401. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/catalog/delta.py +0 -0
  402. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/catalog/embedding.py +0 -0
  403. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/catalog/entry_v2.py +0 -0
  404. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/catalog/fill.py +0 -0
  405. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/catalog/fill_partitions.py +0 -0
  406. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/catalog/fill_staging.py +0 -0
  407. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/catalog/gating.py +0 -0
  408. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/catalog/generation_receipt.py +0 -0
  409. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/catalog/harvest/__init__.py +0 -0
  410. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/catalog/harvest/ckan.py +0 -0
  411. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/catalog/harvest/datagov_v4.py +0 -0
  412. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/catalog/harvest/protocol.py +0 -0
  413. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/catalog/harvest/sdmx.py +0 -0
  414. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/catalog/harvest/stac.py +0 -0
  415. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/catalog/health.py +0 -0
  416. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/catalog/hosted_catalog.py +0 -0
  417. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/catalog/identity_history.py +0 -0
  418. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/catalog/neural.py +0 -0
  419. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/catalog/packed_catalog.py +0 -0
  420. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/catalog/packed_retrieval.py +0 -0
  421. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/catalog/packed_writer.py +0 -0
  422. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/catalog/query_trace.py +0 -0
  423. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/catalog/recommend.py +0 -0
  424. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/catalog/retrieval.py +0 -0
  425. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/catalog/retrieval_manifest.py +0 -0
  426. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/catalog/rights_decisions.py +0 -0
  427. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/catalog/sealed.py +0 -0
  428. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/catalog/search.py +0 -0
  429. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/catalog/streaming_delta.py +0 -0
  430. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/catalog/update.py +0 -0
  431. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/collections.py +0 -0
  432. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/contracts.py +0 -0
  433. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/dataset.py +0 -0
  434. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/deletion.py +0 -0
  435. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/document_projection.py +0 -0
  436. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/fitness.py +0 -0
  437. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/governance.py +0 -0
  438. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/hosted.py +0 -0
  439. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/integration.py +0 -0
  440. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/range_reader.py +0 -0
  441. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/registry.py +0 -0
  442. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/rights_rule.py +0 -0
  443. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/source_cadence_vectors.v1.json +0 -0
  444. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/sports.py +0 -0
  445. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/stream_connectors/fixture.cursor-resume.v3.json +0 -0
  446. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-ed25519.v2.json +0 -0
  447. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-hmac.v2.json +0 -0
  448. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-hmac384.v2.json +0 -0
  449. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-hmac512.v2.json +0 -0
  450. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame.v2.json +0 -0
  451. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-header-rsa.v2.json +0 -0
  452. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-header.v2.json +0 -0
  453. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-permessage-jwt.v2.json +0 -0
  454. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-permessage.v2.json +0 -0
  455. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-prelude.v2.json +0 -0
  456. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-query.v2.json +0 -0
  457. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-subprotocol.v2.json +0 -0
  458. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-subscribe.v2.json +0 -0
  459. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-urlpath.v2.json +0 -0
  460. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/stream_connectors/polymarket.clob-market.v1.json +0 -0
  461. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/stream_credential.py +0 -0
  462. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/stream_prelude.py +0 -0
  463. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/stream_registry.py +0 -0
  464. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/stream_rotation.py +0 -0
  465. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/stream_series.py +0 -0
  466. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/stream_signing.py +0 -0
  467. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sources/stream_transport.py +0 -0
  468. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/sql_transform_engine.py +0 -0
  469. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/stream_subscription_sealer.py +0 -0
  470. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/stream_subscription_worker.py +0 -0
  471. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/stream_venue.py +0 -0
  472. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/stream_venue_staging.py +0 -0
  473. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/studio_subscription_control.py +0 -0
  474. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/thin/__init__.py +0 -0
  475. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/thin/acquire.py +0 -0
  476. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/thin/acquire_cancel.py +0 -0
  477. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/thin/download.py +0 -0
  478. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/thin/narrative.py +0 -0
  479. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/thin/probe.py +0 -0
  480. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/thin/recipe.py +0 -0
  481. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/thin/runs.py +0 -0
  482. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/thin/stream.py +0 -0
  483. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/thin/transport.py +0 -0
  484. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/thin/v4_dataset_covers.py +0 -0
  485. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/thin/v4_handoff.py +0 -0
  486. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/thin/v4_narrative.py +0 -0
  487. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/thin/v4_tables.py +0 -0
  488. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/thin/workers.py +0 -0
  489. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/ucum/TABLE-PIN.json +0 -0
  490. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/ucum/ucum-subset.v1.json +0 -0
  491. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/unit_flow.py +0 -0
  492. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/units.py +0 -0
  493. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/ux/__init__.py +0 -0
  494. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/ux/approve.py +0 -0
  495. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/ux/attendance.py +0 -0
  496. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/ux/author_yaml.py +0 -0
  497. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/ux/clarification.py +0 -0
  498. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/ux/cloud_auth.py +0 -0
  499. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/ux/commands/__init__.py +0 -0
  500. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/ux/commands/approve.py +0 -0
  501. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/ux/commands/auth.py +0 -0
  502. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/ux/commands/author.py +0 -0
  503. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/ux/commands/catalog_author.py +0 -0
  504. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/ux/commands/catalog_fill.py +0 -0
  505. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/ux/commands/catalog_harvest.py +0 -0
  506. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/ux/commands/catalog_publish.py +0 -0
  507. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/ux/commands/catalog_search.py +0 -0
  508. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/ux/commands/catalog_update.py +0 -0
  509. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/ux/commands/clarify.py +0 -0
  510. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/ux/commands/deploy.py +0 -0
  511. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/ux/commands/deploy_dataset.py +0 -0
  512. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/ux/commands/deploy_plan.py +0 -0
  513. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/ux/commands/deploy_status.py +0 -0
  514. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/ux/commands/diff.py +0 -0
  515. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/ux/commands/document.py +0 -0
  516. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/ux/commands/index.py +0 -0
  517. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/ux/commands/inventory.py +0 -0
  518. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/ux/commands/list_builds.py +0 -0
  519. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/ux/commands/login.py +0 -0
  520. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/ux/commands/peek.py +0 -0
  521. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/ux/commands/plan_check.py +0 -0
  522. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/ux/commands/preflight.py +0 -0
  523. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/ux/commands/review_setup.py +0 -0
  524. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/ux/commands/search.py +0 -0
  525. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/ux/commands/show.py +0 -0
  526. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/ux/commands/whoami.py +0 -0
  527. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/ux/credential_native.py +0 -0
  528. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/ux/credential_store.py +0 -0
  529. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/ux/credentials.py +0 -0
  530. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/ux/diffing.py +0 -0
  531. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/ux/headline.py +0 -0
  532. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/ux/hosted_acquisition.py +0 -0
  533. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/ux/inventory.py +0 -0
  534. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/ux/local_review.py +0 -0
  535. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/ux/login.py +0 -0
  536. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/ux/path_kind.py +0 -0
  537. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/ux/peek.py +0 -0
  538. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/ux/plain_file.py +0 -0
  539. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/ux/plan_check.py +0 -0
  540. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/ux/preflight.py +0 -0
  541. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/ux/readers.py +0 -0
  542. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/ux/workload.py +0 -0
  543. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/v4_check_dialect.py +0 -0
  544. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/v4_document_pin.py +0 -0
  545. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/v4_reader_pin.py +0 -0
  546. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/v4_recipe.py +0 -0
  547. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/v4_snapshot_artifact.py +0 -0
  548. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/v4_transform.py +0 -0
  549. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/visual_run/__init__.py +0 -0
  550. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/visual_run/authoring.py +0 -0
  551. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/visual_run/contracts.py +0 -0
  552. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/visual_run/materialize.py +0 -0
  553. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/visual_run/observations.py +0 -0
  554. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/visual_run/query.py +0 -0
  555. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/visual_run/reducer.py +0 -0
  556. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/visual_run/sdk.py +0 -0
  557. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/src/mostlyright/data_harness/visual_run/store.py +0 -0
  558. {mostlyright_data-0.10.4 → mostlyright_data-0.10.6}/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.10.4
3
+ Version: 0.10.6
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.10.4"
3
+ version = "0.10.6"
4
4
  description = "Mostly Right CLI for reproducible, reviewed Parquet datasets"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.13,<3.14"
@@ -50,7 +50,7 @@ routine stages, predict duration or throughput, or expose raw state names. Write
50
50
  professional product language and lead with the outcome or decision.
51
51
 
52
52
  For hosted work, register the Dataset first and open its canonical page immediately in the host's
53
- in-app browser: `mr-data open /dashboard/datasets/DATASET_ID` mints a single-use address for it, and
53
+ in-app browser: `mr-data open /datasets/DATASET_ID` mints a single-use address for it, and
54
54
  when that address cannot be minted, carry on without it rather than blocking.
55
55
  Keep that one Dataset tab for research, approval, building, verification, and delivery. Do not
56
56
  replace it with a standalone Run, approval, or notebook page unless the user explicitly requests
@@ -85,7 +85,7 @@ absence as a defect.
85
85
 
86
86
  ## Commands
87
87
 
88
- These twenty-four are the whole surface, alongside `acquire-slices`, which names a capability
88
+ These twenty-five are the whole surface, alongside `acquire-slices`, which names a capability
89
89
  gap rather than doing anything, and `export-hosted-candidate`, which is a backend operator step.
90
90
 
91
91
  | Command | What it does |
@@ -97,7 +97,7 @@ gap rather than doing anything, and `export-hosted-candidate`, which is a backen
97
97
  | `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. |
98
98
  | `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. |
99
99
  | `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. |
100
- | `mr-data run` | Start one run against a registered recipe. The command accepts `--sample`, `--full`, `--refresh`, `--backfill` and `--window`, but the current worker executes only unwindowed `--sample` and `--full`; the other coordinates are refused before acquisition. `--max-rows` and `--max-source-bytes` remain supported. 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. |
100
+ | `mr-data run` | Start one run against a registered recipe. The command accepts `--sample`, `--full`, `--refresh`, `--backfill` and `--window`, and the worker executes `--sample`, `--full` and `--refresh` (a refresh re-acquires the declared addresses over the previous version and claims no window); `--backfill` and a `--window` on a sample or full are refused before acquisition. `--max-rows` and `--max-source-bytes` remain supported. 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. |
101
101
  | `mr-data status` | Report which of the seven states one run is in, what it delivered and whether a ceiling cut it short, and — on a failure — what failed and where. Exits non-zero on a failed run. |
102
102
  | `mr-data runs` | Report this workspace's own runs: identifier, mode, state and creation time, plus the failure triple of any that failed. `--status` and `--mode` narrow it and are refused for a word outside the seven or the four; `--limit` says how many, and pages are followed to reach it. |
103
103
  | `mr-data watch` | Stream one run's live progress under the durable event type of each stage, resuming across stream cuts. Exits non-zero when the run failed. |
@@ -109,6 +109,7 @@ gap rather than doing anything, and `export-hosted-candidate`, which is a backen
109
109
  | `mr-data download` | Bring one run's artifacts back to this computer, each one's bytes checked against the digest Studio sealed them under. `--kind` selects out of `table_parquet`, `column_profile`, `preview`, `receipt` and `raw_snapshot`; without it, the table and the receipt. |
110
110
  | `mr-data diff` | Compare two runs and say what changed. |
111
111
  | `mr-data keys` | Enrol a source credential by name, list the names with their created and rotated times, and delete one. `keys set` reads the value from a file or from standard input and never from the command line; no command prints a value back. |
112
+ | `mr-data stream` | Record a public `wss://` venue so a build can read it. `stream document register --file F` admits the connector document, `stream registry create --digest D` admits a set of them, `stream probe` listens briefly and seals nothing, `stream capture --seconds N` records a bounded window, `stream subscribe` keeps recording, `stream subscription {show|pause|resume|stop} ID` moves one, `stream status ID` reads a capture or a probe, and `stream recordings --document-digest D` names what a build could read and until when. `--seconds` is at most 600. `mr-data run` takes no duration: a build reads sealed batches and is bounded by them. |
112
113
  | `mr-data open` | Mint a single-use, short-lived address that continues this session in a browser at one dashboard path, and print it. `--open` hands it to the platform opener. A handoff is minted only for a personal access token; a device credential is refused with `THIN_STUDIO_HANDOFF_REQUIRES_PERSONAL_ACCESS_TOKEN`, so give the user the plain dashboard address instead. |
113
114
  | `mr-data promote` | Ask Studio to publish one table after a person's decision. The Harness worker does not perform the catch-up or scheduled refresh; report those only when another deployed component returns durable evidence that it did. |
114
115
  | `mr-data pin` | Ask Studio to freeze one table pointer on an exact version, for a rollback or a hold. |
@@ -116,9 +117,9 @@ gap rather than doing anything, and `export-hosted-candidate`, which is a backen
116
117
  | `mr-data demote` | Ask Studio to withdraw the pointer and any schedule it owns. |
117
118
 
118
119
  `auth`, `login`, `whoami` and `clarify` are the same implementation in both profiles, and
119
- `clarify` alone reaches nothing at all. The other twenty answer from Studio. Eight only
120
- read: `status`, `runs`, `watch`, `peek`, `receipt`, `checks`, `download` and `diff`. Twelve
121
- start or change something: `recipe`, `cover`, `run`, `query`, `probe`, `keys`, `open`,
120
+ `clarify` alone reaches nothing at all. The other twenty-one answer from Studio. Eight only
121
+ read: `status`, `runs`, `watch`, `peek`, `receipt`, `checks`, `download` and `diff`. Thirteen
122
+ start or change something: `recipe`, `cover`, `run`, `query`, `probe`, `keys`, `stream`, `open`,
122
123
  `note`, `promote`, `pin`, `unpin` and `demote`.
123
124
 
124
125
  **Any successful run is readable straight away.** There is no approval, no admission and no release
@@ -461,7 +462,7 @@ still going. [Narrating the run](#narrating-the-run) is the reference for what a
461
462
  protocol, on `--sample`, `max_rows` and `window` truncate: the run succeeds at the clamp boundary
462
463
  and reports the coverage it actually delivered. `max_source_bytes` refuses in every mode, sample
463
464
  included, and on `full`, `refresh` and `backfill`, hitting any clamp is a refusal with
464
- `CLAMP_EXCEEDED`. The current worker admits only unwindowed `sample` and `full` before applying
465
+ `CLAMP_EXCEEDED`. The current worker admits `sample`, `full` and `refresh` (unwindowed in effect) and refuses `backfill` before applying
465
466
  those dispositions. Therefore an executable sample may truncate on `max_rows`; an executable full
466
467
  refuses a crossed row or byte ceiling; every stated window, refresh, and backfill is refused before
467
468
  a byte is fetched.
@@ -475,9 +476,11 @@ cost, and waits; `mr-data run --confirm RUN` settles it against the number alrea
475
476
  Any authenticated surface of the paying workspace may settle it. `--cancel RUN` stops a run that
476
477
  is queued or running.
477
478
 
478
- Do not treat the accepted command vocabulary as execution evidence. `refresh` and `backfill` are
479
- defined as parameterized full runs over half-open windows, but this worker cannot apply those
480
- windows or restore the predecessor and therefore executes neither mode.
479
+ Do not treat the accepted command vocabulary as execution evidence. A `refresh` restores the
480
+ previous version, re-acquires the declared addresses in full and seals the next version, claiming
481
+ no coverage window -- it is how an enabled table's catch-up and its scheduled refresh run. A
482
+ `backfill` is defined by the exact window it covers, which this worker cannot narrow a source
483
+ request to, and is refused before acquisition.
481
484
 
482
485
  ### 4. Interrogate — ask the run what it actually delivered
483
486
 
@@ -776,6 +779,60 @@ or this command line.
776
779
  If a source refuses for want of a credential, that is a product-level fact worth one sentence to
777
780
  the user — the source needs a credential and which one — and nothing about the storage mechanism.
778
781
 
782
+ ## Recording a stream venue
783
+
784
+ Some sources have no file to fetch: a `wss://` venue emits messages only while a socket is open, so
785
+ the bytes a build reads have to be recorded first. `mr-data stream` is that recording, and it is
786
+ four steps in front of the ordinary build loop.
787
+
788
+ ```sh
789
+ mr-data stream document register --file connector.json --name coinbase --json
790
+ mr-data stream registry create --digest DOCUMENT_DIGEST --json
791
+ mr-data stream probe --document-digest DOCUMENT_DIGEST --registry REGISTRY_ID \
792
+ --member BTC-USD --json
793
+ mr-data stream capture --document-digest DOCUMENT_DIGEST --registry REGISTRY_ID \
794
+ --member BTC-USD --seconds 300 --watch --json
795
+ ```
796
+
797
+ 1. **Register the connector document.** It says where the venue is, how a message names its own
798
+ type and event time, and what a subscription frame looks like. Registration prints the
799
+ fingerprint the recipe will name; `mr-data stream document show ID` reads one back.
800
+ 2. **Admit it into a registry.** A registry is the reviewed set a recording may name. Pass every
801
+ fingerprint the recording will use.
802
+ 3. **Probe before you capture.** A probe connects briefly, reports which message types the document
803
+ classified and which it did not, and seals nothing. Read it with
804
+ `mr-data stream status ID --kind probe`. A document that classifies nothing is a document to fix
805
+ before spending a capture window on it.
806
+ 4. **Capture, or subscribe.** `capture --seconds N` records one bounded window and seals it;
807
+ `--seconds` is at most 600, and `--max-events` and `--max-bytes` bound it further. `subscribe`
808
+ keeps recording until `mr-data stream subscription stop ID`, checkpointing as it goes.
809
+ `--watch` on a capture reads the record back until it stops and prints what stopped it.
810
+
811
+ The recipe then names the venue by its fingerprint, as `stream_connector_document_digest` on the
812
+ source, and `mr-data run` builds from the sealed messages. **`run` has no duration flag and will
813
+ not grow one.** A build reads sealed batches and is bounded by them, which is what makes it
814
+ reproducible: the bytes were fixed when they were recorded, not when the build was started. If a
815
+ build refuses for want of a recording, run `mr-data stream recordings --document-digest D` — it
816
+ reports every batch a build could read for that venue, the Bookmark each one carries, and when each
817
+ expires.
818
+
819
+ **A missed window is a permanent hole.** Recordings are kept for thirty days and a refresh carries
820
+ on from the Bookmark the last build reached; neither of those goes back for messages nobody was
821
+ listening for. If a venue was not being recorded over a period the user cares about, say so as a
822
+ gap in the series rather than promising a backfill: there is nothing to fetch.
823
+
824
+ **A keyed venue needs a shaped credential.** Store it once, by part, and name it on the recording:
825
+
826
+ ```sh
827
+ mr-data keys set VENUE_KEY --part key_id=ABC123 --part private_key_pem=@signing.pem --json
828
+ mr-data stream capture --document-digest D --registry R --member M --seconds 300 \
829
+ --secret VENUE_KEY --json
830
+ ```
831
+
832
+ `--part NAME=@PATH` reads that part off disk, which is how a signing key arrives; the parts are
833
+ composed into one envelope here and the value reaches nothing but the request body. The venue's
834
+ document declares which parts its shape holds, and a set that does not match is refused by name.
835
+
779
836
  ## Promote
780
837
 
781
838
  Promotion is the one human gate in the product. Everything before it is workspace scratch: probing,
@@ -2256,7 +2256,7 @@ def _activation_receipt(
2256
2256
  "recipe_proposal_id": state["resources"]["proposal"]["recipe_proposal_id"],
2257
2257
  "state": str(store.path),
2258
2258
  "dashboard_url": (
2259
- f"{_service_url(cloud_url, 'Cloud URL', allow_loopback_http=False)}/dashboard/datasets"
2259
+ f"{_service_url(cloud_url, 'Cloud URL', allow_loopback_http=False)}/dashboard/team"
2260
2260
  ),
2261
2261
  # The queued Run is not a released version, and this receipt is where somebody learns that
2262
2262
  # for the first time. Its sibling above has always ended by naming the next command; this
@@ -2274,7 +2274,7 @@ def cloud_dashboard_url(cloud_url: str, page: str) -> str:
2274
2274
  """
2275
2275
 
2276
2276
  origin = _service_url(cloud_url, "Cloud URL", allow_loopback_http=False)
2277
- return f"{origin}/dashboard/workspace/{page}"
2277
+ return f"{origin}/dashboard/{page}"
2278
2278
 
2279
2279
 
2280
2280
  def _bind_cloud_dataset(
@@ -56,7 +56,6 @@ from dataclasses import dataclass, field, replace
56
56
  from pathlib import Path
57
57
  from types import FrameType, MappingProxyType
58
58
  from typing import Any, ClassVar, NoReturn, Protocol
59
- from urllib.parse import urlsplit
60
59
  from uuid import UUID, uuid5
61
60
 
62
61
  from mostlyright.data_harness import pipeline, progress_events
@@ -127,6 +126,7 @@ from mostlyright.data_harness.run_execution_v4 import (
127
126
  )
128
127
  from mostlyright.data_harness.sources.contracts import SourceContractError
129
128
  from mostlyright.data_harness.v4_acquisition import (
129
+ STREAM_RELATION_COLUMNS,
130
130
  RelationInput,
131
131
  bind_v4_source,
132
132
  connector_authority,
@@ -657,25 +657,22 @@ def permitted_artifact_hosts(
657
657
  studio_origin: str = "",
658
658
  environ: Mapping[str, str] | None = None,
659
659
  ) -> frozenset[str]:
660
- """The one host this run's artifact bytes -- its own and its predecessor's -- may come from.
660
+ """The hosts this run's predecessor bytes may come from: the deployment's own policy.
661
661
 
662
- TWO RULES, AND THE FIRST ONE IS THE DEPLOYMENT'S. ``hosted_worker.signed_storage_hosts`` names
663
- the places this fleet's Studio actually signs sessions: the object-storage origin
662
+ THE RULE IS THE DEPLOYMENT'S. ``hosted_worker.signed_storage_hosts`` names the places this
663
+ fleet's Studio actually signs sessions: the object-storage origin
664
664
  (:data:`~mostlyright.data_harness.hosted_worker.SIGNED_STORAGE_HOST`), the configured Studio
665
665
  origin its local backend serves ``/_signed-artifacts/`` from, and whatever
666
666
  :data:`~mostlyright.data_harness.hosted_worker.ENV_SIGNED_STORAGE_HOSTS` adds. Every one of
667
667
  those is read from the environment or from the coordinator's own configuration, so NOTHING an
668
668
  author of a job document can write moves them.
669
669
 
670
- THE SECOND RULE IS THE DOCUMENT'S OWN CONSISTENCY, and it is second on purpose. The permitted
671
- set is still exactly the host ``artifact_session`` names -- the upload session this run will PUT
672
- its five sealed artifacts to -- so a predecessor download and this run's own uploads have to
673
- agree about where this run's bytes live. That agreement used to be the WHOLE rule, and as the
674
- whole rule it was vacuous: ``artifact_session`` reaches no upload (the seal mints its own
675
- per-artifact sessions through :class:`StudioArtifactSealer`), so moving it cost an attacker
676
- nothing at all and a document naming an internal host in BOTH members passed. Anchoring the
677
- agreement inside the deployment's policy is what turns it back into a constraint: the sibling
678
- member can only be moved to somewhere Studio genuinely signs.
670
+ The document's own ``artifact_session`` has to sit inside that policy too, and it is checked
671
+ here so a document naming somewhere Studio does not sign is refused before a byte moves. It is
672
+ NOT the anchor the predecessor download is narrowed to: that member is the
673
+ ``artifacts:reserve`` route on Studio's own origin, while a predecessor's sealed bundle is
674
+ signed on the object store. The two are different hosts by design, and an earlier rule that
675
+ required them to agree refused every refresh a hosted deployment dispatched.
679
676
 
680
677
  This is defence in depth and it is not the authentication: the predecessor's bytes are still
681
678
  authenticated end to end by ``candidate_digest``, checked by ``_decode_candidate_envelope``
@@ -696,10 +693,7 @@ def permitted_artifact_hosts(
696
693
  # NEVER THE URL, for the reason `_download_signed_bytes` records: the address carries a
697
694
  # credential in its query string and `signed_storage_refusal` is written never to echo it.
698
695
  raise _host_refusal(f"this run's artifact session is not one Studio signs: {reason}")
699
- host = urlsplit(session.signed_url).hostname
700
- if not host: # pragma: no cover - `signed_storage_refusal` already required a host.
701
- raise _host_refusal("this run's artifact session names no host")
702
- return frozenset({host.lower()})
696
+ return policy
703
697
 
704
698
 
705
699
  def _download_signed_bytes(
@@ -1025,6 +1019,14 @@ def _receipt_document(
1025
1019
  for item in coverage
1026
1020
  ],
1027
1021
  "coverage": [item.to_dict() for item in coverage],
1022
+ # WHAT EACH STREAM SOURCE ACTUALLY READ, and the member Studio persists
1023
+ # `bookmark_after` from. It is `{}` for a run that declares none. No transfer
1024
+ # capability appears in it: a signed session is a short-lived bearer credential and
1025
+ # belongs in no durable record. The digest `run:succeeded.receipt_digest` names is
1026
+ # taken over these bytes, so listing the block here is what binds it.
1027
+ "recordings": {
1028
+ name: job.recordings[name].sealed_recording() for name in sorted(job.recordings)
1029
+ },
1028
1030
  "raw_snapshot": {
1029
1031
  "media_type": RAW_SNAPSHOT_MEDIA_TYPE,
1030
1032
  "members": [dict(member) for member in raw_members],
@@ -1038,6 +1040,7 @@ def v4_artifact_payloads(
1038
1040
  candidate_run_dir: Path,
1039
1041
  *,
1040
1042
  coverage: Sequence[V4AcquisitionCoverage] = (),
1043
+ predecessor_run_dir: Path | None = None,
1041
1044
  ) -> tuple[pipeline.VerifiedCandidate, list[ArtifactPayload]]:
1042
1045
  """Derive all five v4 artifacts from the sealed candidate tree, in layout order.
1043
1046
 
@@ -1075,7 +1078,18 @@ def v4_artifact_payloads(
1075
1078
  stage="persist",
1076
1079
  )
1077
1080
  verified, snapshot = _candidate_snapshot(candidate_run_dir)
1078
- run_required_controls(job, verified=verified, snapshot=snapshot, coverage=coverage)
1081
+ # The restored predecessor tree, for the drift control a refresh is held to. Read through the
1082
+ # same replay-verifying door as the candidate: what is compared is what was sealed.
1083
+ predecessor_snapshot = (
1084
+ None if predecessor_run_dir is None else _candidate_snapshot(predecessor_run_dir)[1]
1085
+ )
1086
+ run_required_controls(
1087
+ job,
1088
+ verified=verified,
1089
+ snapshot=snapshot,
1090
+ coverage=coverage,
1091
+ predecessor_snapshot=predecessor_snapshot,
1092
+ )
1079
1093
  candidate_digest = "sha256:" + verified.candidate_digest
1080
1094
  # The tar is built BEFORE the receipt, because the receipt states the tar's members: the
1081
1095
  # container is one artifact and the per-member digests are the only thing that keeps it
@@ -1349,6 +1363,7 @@ def _composed_registry(
1349
1363
  DocumentProjectionAdapter,
1350
1364
  )
1351
1365
  from mostlyright.data_harness.sources.registry import AdapterRegistry
1366
+ from mostlyright.data_harness.v4_stream_recording import RecordedStreamAdapter
1352
1367
 
1353
1368
  limits = [compose_source_limits(ceilings, job) for ceilings in source_ceilings(job.recipe)]
1354
1369
  if not limits:
@@ -1359,15 +1374,22 @@ def _composed_registry(
1359
1374
  disposition = limits[0].row_clamp_disposition
1360
1375
  origins = {item.row_limit_origin for item in limits}
1361
1376
  origin = "run_clamp" if origins == {"run_clamp"} else "registration"
1362
- window = job.clamps.window
1377
+ # A refresh's stated window is Studio's tick coordinate, not a range this lane applies:
1378
+ # no request is narrowed to it and no coverage entry claims it. See EXECUTABLE_RUN_MODES.
1379
+ window = None if job.mode == "refresh" else job.clamps.window
1363
1380
  # Structural rather than admitted, the same way the Reader pin is read: this asks only
1364
1381
  # WHETHER a source names a coordinate, and the adapter is what verifies it against the
1365
1382
  # capture store. Resolving twice would be two readings of one document that could disagree.
1366
1383
  document_sources = tuple(
1367
1384
  source for source in job.recipe.sources if document_projection_parameters(source)
1368
1385
  )
1386
+ # A source read from a recording reaches no address, so it is routed away from the network
1387
+ # loop below rather than falling through its connector filter unrouted.
1388
+ stream_sources = tuple(source for source in job.recipe.sources if source.name in job.recordings)
1369
1389
  network_sources = tuple(
1370
- source for source in job.recipe.sources if source not in document_sources
1390
+ source
1391
+ for source in job.recipe.sources
1392
+ if source not in document_sources and source not in stream_sources
1371
1393
  )
1372
1394
  if document_sources and disposition == "truncate":
1373
1395
  raise RunExecutionError(
@@ -1382,7 +1404,9 @@ def _composed_registry(
1382
1404
  for source in network_sources
1383
1405
  if source.connector.adapter_id == GENERIC_API_ADAPTER_ID
1384
1406
  }
1385
- redeemed = {source.name for source in document_sources}
1407
+ # Both lanes order exactly one confined `parse` over bytes the operator already holds, and
1408
+ # neither orders a decode, so both pin the narrow policy rather than the composed one.
1409
+ redeemed = {source.name for source in (*document_sources, *stream_sources)}
1386
1410
  adapters: list[Any] = []
1387
1411
  if network_sources:
1388
1412
  # `fetch` is the adapter's own declared seam (`InProcessPublicHttpsAdapter.fetch`),
@@ -1484,6 +1508,38 @@ def _composed_registry(
1484
1508
  adapters=MappingProxyType(document_adapters),
1485
1509
  )
1486
1510
  )
1511
+ if stream_sources:
1512
+ if transfer is None or not base_url:
1513
+ raise RunExecutionError(
1514
+ "RUN_RECIPE_INVALID",
1515
+ failure_detail(
1516
+ "reading a sealed recording requires a Studio origin and a transfer client"
1517
+ ),
1518
+ stage="acquire",
1519
+ )
1520
+ hosts = signed_storage_hosts(studio_origin=base_url, environ=os.environ)
1521
+ stream_adapters = {
1522
+ source.name: _CoveredRecordedStreamAdapter(
1523
+ adapter=RecordedStreamAdapter(
1524
+ recording=job.recordings[source.name],
1525
+ sandbox=sandbox,
1526
+ governance=recipe_governance(
1527
+ job, requested_at=trusted_clock, sources=(source,)
1528
+ ),
1529
+ transfer=transfer,
1530
+ permitted_hosts=hosts,
1531
+ ),
1532
+ coverage_log=coverage_log,
1533
+ )
1534
+ for source in stream_sources
1535
+ }
1536
+ first_stream = next(iter(stream_adapters.values()))
1537
+ adapters.append(
1538
+ _PerSourceAdapterRouter(
1539
+ descriptor=first_stream.descriptor,
1540
+ adapters=MappingProxyType(stream_adapters),
1541
+ )
1542
+ )
1487
1543
  registry = AdapterRegistry(tuple(adapters))
1488
1544
  contexts = {
1489
1545
  item.source_id: item.acquisition_context(
@@ -1599,6 +1655,51 @@ class _CoveredDocumentProjectionAdapter:
1599
1655
  return output
1600
1656
 
1601
1657
 
1658
+ @dataclass(frozen=True)
1659
+ class _CoveredRecordedStreamAdapter:
1660
+ """Add v4 receipt coverage to a replayed recording, on the projection wrapper's own terms.
1661
+
1662
+ A recording reaches no venue and uses no session cache, so ``miss`` means no cached adapter
1663
+ output was used and the byte count is the concatenated sealed batches this run actually read.
1664
+ The URL is the content URN of those bytes and never a capability address.
1665
+ """
1666
+
1667
+ adapter: Any
1668
+ coverage_log: V4CoverageLog
1669
+
1670
+ @property
1671
+ def descriptor(self) -> Any:
1672
+ return self.adapter.descriptor
1673
+
1674
+ def acquire(self, request: Any, context: Any) -> Any:
1675
+ output = self.adapter.acquire(request, context)
1676
+ rows = output.parsed_row_count
1677
+ if rows is None:
1678
+ raise RunExecutionError(
1679
+ "RUN_EXECUTION_FAILED",
1680
+ "the replayed recording did not report parsed row facts",
1681
+ stage="parse",
1682
+ )
1683
+ self.coverage_log.record(
1684
+ V4AcquisitionCoverage(
1685
+ source_id=request.source_id,
1686
+ query_digest=request.query_digest,
1687
+ window=None,
1688
+ cache=CacheDisposition.MISS,
1689
+ url=output.receipt.final_uri,
1690
+ fetched_at=output.receipt.observed_at,
1691
+ snapshot_sha256=output.receipt.snapshot.content_sha256,
1692
+ snapshot_bytes=output.receipt.snapshot.size_bytes,
1693
+ fetched_content_sha256=output.receipt.snapshot.content_sha256,
1694
+ bytes_fetched=output.receipt.snapshot.size_bytes,
1695
+ rows_kept=rows,
1696
+ rows_available=rows,
1697
+ truncated=False,
1698
+ )
1699
+ )
1700
+ return output
1701
+
1702
+
1602
1703
  def _allowed_hostnames_by_source(job: RunExecution) -> Mapping[str, tuple[str, ...]]:
1603
1704
  """The exact host allowlist this run's own recipe states, PER SOURCE and nothing wider.
1604
1705
 
@@ -2069,6 +2170,7 @@ def acquire_v4_relations(
2069
2170
  request_id=f"run.{job.run_id}.{job.attempt}.{source.name}",
2070
2171
  requested_at=requested_at,
2071
2172
  credential_handle=job.credential_handle_for(source.name),
2173
+ recording=job.recordings.get(source.name),
2072
2174
  ),
2073
2175
  )
2074
2176
  )
@@ -2091,7 +2193,15 @@ def acquire_v4_relations(
2091
2193
  relation = relation_input(
2092
2194
  output,
2093
2195
  relation_name=source.name,
2094
- columns=output.parsed_columns or (),
2196
+ # A STREAM SOURCE'S HEADER IS DERIVED AND EVERY OTHER SOURCE'S IS REPORTED. The
2197
+ # Recorder's sealed line fixes it, the same for every stream source of every recipe,
2198
+ # and the adapter has already refused a parse that reported anything else -- so
2199
+ # taking it from the constant rather than from the parse says where it comes from.
2200
+ columns=(
2201
+ STREAM_RELATION_COLUMNS
2202
+ if source.name in job.recordings
2203
+ else output.parsed_columns or ()
2204
+ ),
2095
2205
  coverage=_coverage_for(coverage_log, source.name, output),
2096
2206
  limits=limits,
2097
2207
  )
@@ -2267,25 +2377,27 @@ def _restore_termination_handlers(installed: Sequence[tuple[int, Any]]) -> None:
2267
2377
  signal.signal(number, previous)
2268
2378
 
2269
2379
 
2270
- #: The run modes this worker executes, and the two it refuses rather than half-performing.
2271
- #:
2272
- #: A ``refresh`` and a ``backfill`` are both defined AGAINST a predecessor and a window, and this
2273
- #: worker can establish neither. The window narrows nothing on this lane -- ``bind_v4_source``
2274
- #: composes the exact three members ``public.https`` admits from the address the document states,
2275
- #: and the fetch takes whatever that address returns -- so the two modes whose whole meaning is
2276
- #: "cover this range and no other" would cover whatever arrived while their sealed execution and
2277
- #: their run record said otherwise.
2380
+ #: The run modes this worker executes, and the one it refuses rather than half-performing.
2278
2381
  #:
2279
- #: THAT IS WHY THIS IS A REFUSAL RATHER THAN A GAP. ``docs/V4-WORKER-PROTOCOL.md`` has Studio fold
2280
- #: the per-source windows by intersection and compute a later refresh's resumption point from the
2281
- #: result, so a window this worker states is an input to somebody else's correctness. A mode that
2282
- #: half-works and seals a false range is strictly worse than one that refuses: the refusal is
2283
- #: visible on the run record at the moment it happens, and the false range is discovered by the
2284
- #: run that trusted it.
2382
+ #: A ``refresh`` on this lane is an unwindowed re-acquisition over the restored predecessor: every
2383
+ #: registered source is unwatermarked (``run_execution_v4._refuse_unbindable_watermark``), the
2384
+ #: fetch takes whatever the registered address returns, and the engine's ``refresh`` mode asks
2385
+ #: for exactly a predecessor and no window. So a refresh can be honest here -- it seals the rows
2386
+ #: it fetched as the next version of the same table and claims NO coverage window, so a later
2387
+ #: refresh resumes from the run's completion rather than from a range this lane never applied.
2388
+ #: Studio states ``clamps.window`` on a refresh to keep consecutive ticks distinct runs; that
2389
+ #: window is not applied to any request and is not recorded as covered.
2285
2390
  #:
2286
- #: The refusal is lifted by narrowing the fetch, not by restating the clamp. Until then a run in
2287
- #: either mode is refused before a byte is fetched or a predecessor is restored.
2288
- EXECUTABLE_RUN_MODES: tuple[str, ...] = ("sample", "full")
2391
+ #: A ``backfill`` is different in kind and stays refused: the engine defines it BY its exact
2392
+ #: window -- it refuses a partition holding an event outside that range -- and this lane cannot
2393
+ #: narrow a source request to a range, so a backfill that fetched the whole address would either
2394
+ #: refuse at the engine or seal a range it did not cover. The refusal is visible on the run record
2395
+ #: at the moment it happens; a false range is discovered by the run that trusted it.
2396
+ EXECUTABLE_RUN_MODES: tuple[str, ...] = ("sample", "full", "refresh")
2397
+
2398
+ #: The modes on which a stated ``clamps.window`` is a contradiction rather than a request: a
2399
+ #: sample or a full with a window would be a windowed run this lane cannot perform.
2400
+ _WINDOW_REFUSED_MODES: frozenset[str] = frozenset({"sample", "full"})
2289
2401
 
2290
2402
 
2291
2403
  def _admit_executable_mode(job: RunExecution) -> None:
@@ -2295,13 +2407,13 @@ def _admit_executable_mode(job: RunExecution) -> None:
2295
2407
  raise RunExecutionError(
2296
2408
  "RUN_MODE_INVALID",
2297
2409
  failure_detail(
2298
- f"this worker executes a run in {' or '.join(EXECUTABLE_RUN_MODES)} mode, and a "
2299
- f"{job.mode} run is defined against a query window it would not apply, so its "
2300
- f"sealed record would state a range it did not cover"
2410
+ f"this worker executes a run in {', '.join(EXECUTABLE_RUN_MODES[:-1])} or "
2411
+ f"{EXECUTABLE_RUN_MODES[-1]} mode, and a {job.mode} is defined by the exact "
2412
+ "window it covers, which this worker cannot narrow a source request to"
2301
2413
  ),
2302
2414
  stage="acquire",
2303
2415
  )
2304
- if job.clamps.window is not None:
2416
+ if job.clamps.window is not None and job.mode in _WINDOW_REFUSED_MODES:
2305
2417
  raise RunExecutionError(
2306
2418
  "RUN_CLAMPS_INVALID",
2307
2419
  failure_detail(
@@ -2597,7 +2709,10 @@ def run_v4(
2597
2709
 
2598
2710
  stage.set("persist")
2599
2711
  verified, payloads = v4_artifact_payloads(
2600
- job, output_dir, coverage=coverage_log.entries()
2712
+ job,
2713
+ output_dir,
2714
+ coverage=coverage_log.entries(),
2715
+ predecessor_run_dir=previous_run_dir,
2601
2716
  )
2602
2717
  _upload_all(
2603
2718
  job,
@@ -2711,12 +2826,11 @@ def _resolved_sealer(
2711
2826
  transport=stack.enter_context(_closing(_new_transfer_client())),
2712
2827
  transfer=transfer,
2713
2828
  base_url=base_url,
2714
- # THE DEPLOYMENT'S POLICY, NOT THE DOCUMENT'S OWN HOST. `permitted_artifact_hosts` narrows
2715
- # this set to the one host the job's `artifact_session` names, which is right for the
2716
- # predecessor download -- both are bytes of the same run -- and wrong here: that member is
2829
+ # THE DEPLOYMENT'S POLICY, NOT THE DOCUMENT'S OWN HOST. The job's `artifact_session` is
2717
2830
  # the `artifacts:reserve` route on Studio's own origin, while the session it answers with
2718
2831
  # is signed on the object store. The two are DIFFERENT hosts by design, and the rule the
2719
- # answer has to satisfy is the one `signed_storage_hosts` reads out of deployment facts.
2832
+ # answer has to satisfy is the one `signed_storage_hosts` reads out of deployment facts --
2833
+ # the same rule `permitted_artifact_hosts` applies to the predecessor download.
2720
2834
  permitted_hosts=signed_storage_hosts(studio_origin=base_url, environ=os.environ),
2721
2835
  )
2722
2836