mostlyright-data 0.15.1__tar.gz → 0.15.2__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 (536) hide show
  1. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/PKG-INFO +1 -1
  2. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/pyproject.toml +1 -1
  3. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/skills/mr-data-build/SKILL.md +20 -3
  4. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/acquisition/http.py +360 -0
  5. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/acquisition/parsing.py +602 -1
  6. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/acquisition/sandbox.py +908 -65
  7. mostlyright_data-0.15.2/src/mostlyright/data_harness/bounded_scratch_sink.py +223 -0
  8. mostlyright_data-0.15.2/src/mostlyright/data_harness/compact_worker.py +371 -0
  9. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/declared_checks.py +166 -54
  10. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/formats.py +2 -0
  11. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/hosted_bootstrap.py +4 -0
  12. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/hosted_crawler.py +27 -2
  13. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/hosted_crawler_fetch.py +42 -0
  14. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/hosted_run_worker.py +3314 -136
  15. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/hosted_stream_subscription_worker.py +24 -0
  16. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/hosted_worker.py +13 -2
  17. mostlyright_data-0.15.2/src/mostlyright/data_harness/incremental_slice_executor.py +815 -0
  18. mostlyright_data-0.15.2/src/mostlyright/data_harness/incremental_worker.py +524 -0
  19. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/inprocess_acquisition.py +347 -1
  20. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/linux_process_boundary.py +168 -3
  21. mostlyright_data-0.15.2/src/mostlyright/data_harness/part_check_evidence.py +348 -0
  22. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/pipeline.py +40 -14
  23. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/plan_graph.py +53 -12
  24. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/run_execution_v4.py +807 -18
  25. mostlyright_data-0.15.2/src/mostlyright/data_harness/source_bootstrap.py +238 -0
  26. mostlyright_data-0.15.2/src/mostlyright/data_harness/source_bundle_writer.py +602 -0
  27. mostlyright_data-0.15.2/src/mostlyright/data_harness/source_history_candidate_child.py +188 -0
  28. mostlyright_data-0.15.2/src/mostlyright/data_harness/source_history_transform_child.py +151 -0
  29. mostlyright_data-0.15.2/src/mostlyright/data_harness/source_inventory.py +162 -0
  30. mostlyright_data-0.15.2/src/mostlyright/data_harness/source_raw_inventory.py +243 -0
  31. mostlyright_data-0.15.2/src/mostlyright/data_harness/source_state_index.py +543 -0
  32. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/_adapter_steps.py +19 -3
  33. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/contracts.py +3 -1
  34. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/registry.py +183 -11
  35. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/stream.py +13 -1
  36. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/stream_capture_session.py +67 -8
  37. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/stream_connector.py +119 -23
  38. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/stream_transport.py +14 -1
  39. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sql_transform_engine.py +523 -15
  40. mostlyright_data-0.15.2/src/mostlyright/data_harness/stream_order_vector.py +136 -0
  41. mostlyright_data-0.15.2/src/mostlyright/data_harness/stream_recovery_objects.py +256 -0
  42. mostlyright_data-0.15.2/src/mostlyright/data_harness/stream_segment_spill.py +275 -0
  43. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/stream_subscription_feed.py +82 -6
  44. mostlyright_data-0.15.2/src/mostlyright/data_harness/stream_subscription_sealer.py +1440 -0
  45. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/stream_subscription_worker.py +975 -94
  46. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/stream_venue_staging.py +310 -59
  47. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/studio_boundary.py +2 -2
  48. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/studio_subscription_control.py +331 -9
  49. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/table_manifest.py +203 -10
  50. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/table_parts.py +236 -26
  51. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/recipe.py +81 -0
  52. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/v4.py +39 -16
  53. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/v4_datasets.py +174 -1
  54. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/v4_runs.py +8 -3
  55. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/v4_tables.py +1 -1
  56. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ux/remediation.py +16 -1
  57. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ux/render.py +1 -0
  58. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/v4_acquisition.py +88 -4
  59. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/v4_recipe.py +307 -2
  60. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/v4_window.py +126 -0
  61. mostlyright_data-0.15.1/src/mostlyright/data_harness/stream_subscription_sealer.py +0 -689
  62. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/.gitignore +0 -0
  63. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/README.md +0 -0
  64. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/scripts/hatch_build.py +0 -0
  65. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/skills/mr-data-build/agents/openai.yaml +0 -0
  66. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/skills/mr-data-build/scripts/write_research_notebook.py +0 -0
  67. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/skills/mr-data-build/scripts/write_visual_run.py +0 -0
  68. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/__init__.py +0 -0
  69. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/LICENSE +0 -0
  70. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/PROVENANCE.json +0 -0
  71. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/__init__.py +0 -0
  72. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/__init__.pyi +0 -0
  73. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/_version.py +0 -0
  74. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/cal_rec_boxes/__init__.py +0 -0
  75. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/cal_rec_boxes/main.py +0 -0
  76. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_cls/__init__.py +0 -0
  77. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_cls/main.py +0 -0
  78. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_cls/utils.py +0 -0
  79. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_det/__init__.py +0 -0
  80. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_det/main.py +0 -0
  81. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_det/utils.py +0 -0
  82. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/__init__.py +0 -0
  83. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/main.py +0 -0
  84. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/typings.py +0 -0
  85. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/utils.py +0 -0
  86. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/config.yaml +0 -0
  87. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/inference_engine/__init__.py +0 -0
  88. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/inference_engine/base.py +0 -0
  89. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/inference_engine/onnxruntime/__init__.py +0 -0
  90. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/inference_engine/onnxruntime/main.py +0 -0
  91. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/inference_engine/onnxruntime/provider_config.py +0 -0
  92. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/main.py +0 -0
  93. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/models/PP-OCRv6_det_small.onnx +0 -0
  94. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/models/PP-OCRv6_rec_small.onnx +0 -0
  95. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/models/ch_ppocr_mobile_v2.0_cls_mobile.onnx +0 -0
  96. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/py.typed +0 -0
  97. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/utils/__init__.py +0 -0
  98. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/utils/load_image.py +0 -0
  99. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/utils/log.py +0 -0
  100. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/utils/model_resolver.py +0 -0
  101. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/utils/output.py +0 -0
  102. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/utils/parse_parameters.py +0 -0
  103. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/utils/process_img.py +0 -0
  104. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/utils/typings.py +0 -0
  105. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/utils/utils.py +0 -0
  106. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/__init__.py +0 -0
  107. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/acquisition/__init__.py +0 -0
  108. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/acquisition/derived_credentials.py +0 -0
  109. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/acquisition/ranges.py +0 -0
  110. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/acquisition/result_download.py +0 -0
  111. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/acquisition/retention_admission.py +0 -0
  112. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/acquisition/url_policy.py +0 -0
  113. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/agent_runtime.py +0 -0
  114. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/assets/logo-ink.svg +0 -0
  115. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/backends/__init__.py +0 -0
  116. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/backends/pandas_backend.py +0 -0
  117. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/backends/polars_backend.py +0 -0
  118. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/backends/protocol.py +0 -0
  119. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/backends/reference.py +0 -0
  120. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/backends/registry.py +0 -0
  121. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/backends/restrictions.py +0 -0
  122. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/bounded_query.py +0 -0
  123. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/canonical.py +0 -0
  124. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/catalog_job.py +0 -0
  125. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/cli.py +0 -0
  126. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/contracts.py +0 -0
  127. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/coordinator.py +0 -0
  128. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/crosswalks.py +0 -0
  129. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/deploy.py +0 -0
  130. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/deploy_target.py +0 -0
  131. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/deployment_evidence.py +0 -0
  132. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/documents/__init__.py +0 -0
  133. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/documents/_worker_capability.py +0 -0
  134. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/documents/capture.py +0 -0
  135. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/documents/contracts.py +0 -0
  136. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/documents/lane.py +0 -0
  137. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/documents/ocr.py +0 -0
  138. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/documents/pdf.py +0 -0
  139. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/documents/registry.py +0 -0
  140. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/documents/sandbox.py +0 -0
  141. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/documents/selections.py +0 -0
  142. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/documents/tables.py +0 -0
  143. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/documents/vendor_rapidocr.py +0 -0
  144. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/events.py +0 -0
  145. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/fast_delimited.py +0 -0
  146. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/governors.py +0 -0
  147. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/hosted_crawler_container_smoke.py +0 -0
  148. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/hosted_crawler_job.py +0 -0
  149. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/hosted_crawler_protocol.py +0 -0
  150. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/hosted_deploy.py +0 -0
  151. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/hosted_ingestion_contract.py +0 -0
  152. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/hosted_ingestion_job.py +0 -0
  153. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/hosted_ingestion_job_smoke.py +0 -0
  154. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/hosted_rlimit_as_container_smoke.py +0 -0
  155. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/hosted_session_container_smoke.py +0 -0
  156. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/hosted_session_worker.py +0 -0
  157. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/hosted_session_worker_job_smoke.py +0 -0
  158. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/hosted_stream_recorder_container_smoke.py +0 -0
  159. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/hosted_stream_recorder_job.py +0 -0
  160. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/hosted_stream_subscription_container_smoke.py +0 -0
  161. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ingestion/__init__.py +0 -0
  162. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ingestion/contracts.py +0 -0
  163. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ingestion/faults.py +0 -0
  164. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ingestion/gcs_store.py +0 -0
  165. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ingestion/spool.py +0 -0
  166. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ingestion/store.py +0 -0
  167. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/key_seam.py +0 -0
  168. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/local_contracts.py +0 -0
  169. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/nbrender/CONTRACT.md +0 -0
  170. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/nbrender/__init__.py +0 -0
  171. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/nbrender/chrome.py +0 -0
  172. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/nbrender/code_body.py +0 -0
  173. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/nbrender/document.py +0 -0
  174. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/nbrender/frame.py +0 -0
  175. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/nbrender/interactive.py +0 -0
  176. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/nbrender/markdown_body.py +0 -0
  177. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/nbrender/mr_components.py +0 -0
  178. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/nbrender/outputs_data.py +0 -0
  179. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/nbrender/outputs_rich.py +0 -0
  180. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/nbrender/outputs_source.py +0 -0
  181. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/nbrender/outputs_stage.py +0 -0
  182. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/nbrender/outputs_text.py +0 -0
  183. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/nbrender/parse.py +0 -0
  184. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/nbrender/status.py +0 -0
  185. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/nbrender/tokens.py +0 -0
  186. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/notebook.py +0 -0
  187. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/offline.py +0 -0
  188. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/operation_registry.py +0 -0
  189. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/operator_setup.py +0 -0
  190. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/preparation/__init__.py +0 -0
  191. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/preparation/contracts.py +0 -0
  192. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/preparation/engine.py +0 -0
  193. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/preparation/errors.py +0 -0
  194. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/preparation/gates.py +0 -0
  195. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/preparation/joins.py +0 -0
  196. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/preparation/profile.py +0 -0
  197. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/preparation/table.py +0 -0
  198. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/preparation/transforms.py +0 -0
  199. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/progress_events.py +0 -0
  200. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/__init__.py +0 -0
  201. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/_openpyxl.py +0 -0
  202. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/budgets.py +0 -0
  203. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/containers.py +0 -0
  204. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/contracts.py +0 -0
  205. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/delimited.py +0 -0
  206. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/geojson_vector.py +0 -0
  207. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/geopackage.py +0 -0
  208. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/geoparquet.py +0 -0
  209. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/grib2/__init__.py +0 -0
  210. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/grib2/admission.py +0 -0
  211. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/grib2/collection.py +0 -0
  212. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/grib2/collection_reader.py +0 -0
  213. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/grib2/decode.py +0 -0
  214. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/grib2/geometry.py +0 -0
  215. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/grib2/portable_math.py +0 -0
  216. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/grib_eccodes.py +0 -0
  217. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/html_tabular.py +0 -0
  218. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/html_web_extract.py +0 -0
  219. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/json_tabular.py +0 -0
  220. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/parquet_tabular.py +0 -0
  221. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/pcaxis_px.py +0 -0
  222. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/protobuf_tabular.py +0 -0
  223. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/raster/__init__.py +0 -0
  224. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/raster/_bytes.py +0 -0
  225. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/raster/decode.py +0 -0
  226. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/raster/family.py +0 -0
  227. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/raster/jpeg2000.py +0 -0
  228. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/raster/profiles.py +0 -0
  229. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/raster/rendered.py +0 -0
  230. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/raster/safe.py +0 -0
  231. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/raster/sentinel_safe.py +0 -0
  232. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/raster/tiff.py +0 -0
  233. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/registry.py +0 -0
  234. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/README.md +0 -0
  235. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.0.0/cities_one_stream/cities.csv.gz +0 -0
  236. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.0.0/cities_one_stream/expected.json +0 -0
  237. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.1.0/cities_one_stream/cities.csv.gz +0 -0
  238. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.1.0/cities_one_stream/expected.json +0 -0
  239. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/archive.tar/1.0.0/cities_beside_a_directory_entry/cities.tar +0 -0
  240. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/archive.tar/1.0.0/cities_beside_a_directory_entry/expected.json +0 -0
  241. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/archive.tar/1.1.0/cities_beside_a_directory_entry/cities.tar +0 -0
  242. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/archive.tar/1.1.0/cities_beside_a_directory_entry/expected.json +0 -0
  243. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/archive.zip/1.0.0/cities_beside_a_second_member/cities.zip +0 -0
  244. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/archive.zip/1.0.0/cities_beside_a_second_member/expected.json +0 -0
  245. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/archive.zip/1.1.0/dwd_semicolon_station_member/dwd-station.zip +0 -0
  246. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/archive.zip/1.1.0/dwd_semicolon_station_member/expected.json +0 -0
  247. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/archive.zip/1.2.0/dwd_semicolon_station_member/dwd-station.zip +0 -0
  248. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/archive.zip/1.2.0/dwd_semicolon_station_member/expected.json +0 -0
  249. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/an_ordinary_comma_separated_table/cities.csv +0 -0
  250. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/an_ordinary_comma_separated_table/expected.json +0 -0
  251. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/quoted_fields_holding_the_delimiter/cities.tsv +0 -0
  252. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/quoted_fields_holding_the_delimiter/expected.json +0 -0
  253. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/delimited_text/1.1.0/an_hourly_observation_table_served_as_plain_text/expected.json +0 -0
  254. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/delimited_text/1.1.0/an_hourly_observation_table_served_as_plain_text/observations.csv +0 -0
  255. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/geojson.vector/1.0.0/czech_capital/expected.json +0 -0
  256. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/geojson.vector/1.0.0/czech_capital/places.geojson +0 -0
  257. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/geopackage.vector/1.0.0/epsg_4326_feature/expected.json +0 -0
  258. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/geopackage.vector/1.0.0/epsg_4326_feature/places.gpkg +0 -0
  259. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/geoparquet.vector/1.0.0/primary_wkb_point/expected.json +0 -0
  260. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/geoparquet.vector/1.0.0/primary_wkb_point/places.parquet +0 -0
  261. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/html.tabular/1.0.0/sanitized_table/expected.json +0 -0
  262. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/html.tabular/1.0.0/sanitized_table/table.html +0 -0
  263. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/html.web_extract/1.0.0/json_ld_scorecards/expected.json +0 -0
  264. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/html.web_extract/1.0.0/json_ld_scorecards/scorecards.html +0 -0
  265. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/image.rendered/1.0.0/tiny_png/expected.json +0 -0
  266. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/image.rendered/1.0.0/tiny_png/tiny-rendered.png +0 -0
  267. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/json.tabular/1.0.0/nested_hourly_observations/expected.json +0 -0
  268. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/json.tabular/1.0.0/nested_hourly_observations/stations.json +0 -0
  269. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/json.tabular/1.1.0/an_observation_stream_served_as_plain_text/expected.json +0 -0
  270. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/json.tabular/1.1.0/an_observation_stream_served_as_plain_text/observations.ndjson +0 -0
  271. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/meteorology.bufr/1.0.0/eccodes_bufr4_subset/eccodes-bufr4.bufr +0 -0
  272. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/meteorology.bufr/1.0.0/eccodes_bufr4_subset/expected.json +0 -0
  273. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/meteorology.grib/1.0.0/eccodes_grib1_origin/expected.json +0 -0
  274. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/meteorology.grib/1.0.0/eccodes_grib1_origin/regular-ll-surface.grib1 +0 -0
  275. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/microdata.sas_xpt/1.0.0/two_raw_columns/expected.json +0 -0
  276. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/microdata.sas_xpt/1.0.0/two_raw_columns/survey.xpt +0 -0
  277. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/microdata.spss_sav/1.0.0/two_raw_columns/expected.json +0 -0
  278. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/microdata.spss_sav/1.0.0/two_raw_columns/survey.sav +0 -0
  279. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/microdata.stata_dta/1.0.0/two_raw_columns/expected.json +0 -0
  280. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/microdata.stata_dta/1.0.0/two_raw_columns/stata.dta +0 -0
  281. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/official.pcaxis_px/1.0.0/population_by_region_and_year/expected.json +0 -0
  282. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/official.pcaxis_px/1.0.0/population_by_region_and_year/population.px +0 -0
  283. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/official.sdmx_json/1.0.0/compact_population_series/expected.json +0 -0
  284. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/official.sdmx_json/1.0.0/compact_population_series/population.json +0 -0
  285. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/parquet.tabular/1.0.0/two_columns/expected.json +0 -0
  286. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/parquet.tabular/1.0.0/two_columns/prices.parquet +0 -0
  287. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/protobuf.tabular/1.0.0/gtfs_realtime_trip_updates/expected.json +0 -0
  288. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/protobuf.tabular/1.0.0/gtfs_realtime_trip_updates/gtfs-realtime.desc +0 -0
  289. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/protobuf.tabular/1.0.0/gtfs_realtime_trip_updates/trip-updates.pb +0 -0
  290. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/raster.geospatial/1.0.0/tiny_geotiff/expected.json +0 -0
  291. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/raster.geospatial/1.0.0/tiny_geotiff/tiny-geospatial.tif +0 -0
  292. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/satellite.goes_abi_l2/1.0.0/authored_cmi_window/expected.json +0 -0
  293. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/satellite.goes_abi_l2/1.0.0/authored_cmi_window/goes-abi-l2-cmi-window.nc +0 -0
  294. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/satellite.himawari_hsd/1.0.0/authored_b13_single_bzip2/expected.json +0 -0
  295. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/satellite.himawari_hsd/1.0.0/authored_b13_single_bzip2/himawari-b13-0101-bzip2.dat +0 -0
  296. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/satellite.himawari_hsd_complete/1.0.0/authored_b13_three_segment_scan/expected.json +0 -0
  297. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/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
  298. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/satellite.msg_seviri_l15/1.0.0/authored_calibrated_complete_visir/expected.json +0 -0
  299. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/satellite.msg_seviri_l15/1.0.0/authored_calibrated_complete_visir/msg-seviri-l15.zip +0 -0
  300. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/satellite.sentinel_safe/1.0.0/authored_b02_scl_window/expected.json +0 -0
  301. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/satellite.sentinel_safe/1.0.0/authored_b02_scl_window/sentinel-safe-b02-scl.zip +0 -0
  302. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/satellite.xrit_image/1.0.0/authored_complete_raw_counts/expected.json +0 -0
  303. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/satellite.xrit_image/1.0.0/authored_complete_raw_counts/xrit-complete-image.zip +0 -0
  304. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/scientific.fits/1.0.0/tiny_primary_window/expected.json +0 -0
  305. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/scientific.fits/1.0.0/tiny_primary_window/tiny-primary.fits +0 -0
  306. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/scientific.hdf4/1.0.0/authored_temperature_window/expected.json +0 -0
  307. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/scientific.hdf4/1.0.0/authored_temperature_window/temperature.hdf +0 -0
  308. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/scientific.hdf5/1.0.0/authored_temperature_window/expected.json +0 -0
  309. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/scientific.hdf5/1.0.0/authored_temperature_window/temperature.h5 +0 -0
  310. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/scientific.hdf_eos2/1.0.0/authored_grid_temperature_window/expected.json +0 -0
  311. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/scientific.hdf_eos2/1.0.0/authored_grid_temperature_window/nasa-hdfeos2-grid.hdf +0 -0
  312. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/scientific.hdf_eos2/1.0.0/authored_swath_temperature_window/expected.json +0 -0
  313. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/scientific.hdf_eos2/1.0.0/authored_swath_temperature_window/nasa-hdfeos2-swath.hdf +0 -0
  314. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/scientific.netcdf/1.0.0/authored_classic_temperature_window/expected.json +0 -0
  315. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/scientific.netcdf/1.0.0/authored_classic_temperature_window/temperature-classic.nc +0 -0
  316. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/scientific.zarr/1.0.0/authored_v3_temperature_window/expected.json +0 -0
  317. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/scientific.zarr/1.0.0/authored_v3_temperature_window/temperature-zarr-v3.zip +0 -0
  318. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.0.0/an_ordinary_table_beside_a_second_sheet/cities.xlsx +0 -0
  319. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.0.0/an_ordinary_table_beside_a_second_sheet/expected.json +0 -0
  320. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.0.0/shares_the_workbook_had_already_computed/expected.json +0 -0
  321. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.0.0/shares_the_workbook_had_already_computed/shares.xlsx +0 -0
  322. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.1.0/shares_the_workbook_had_already_computed/expected.json +0 -0
  323. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.1.0/shares_the_workbook_had_already_computed/shares.xlsx +0 -0
  324. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/README.md +0 -0
  325. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/gfs_2m_temperature/expected.json +0 -0
  326. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/gfs_2m_temperature/gfs-2m-temperature.grib2 +0 -0
  327. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_2m_temperature/expected.json +0 -0
  328. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_2m_temperature/hrrr-2m-temperature.grib2 +0 -0
  329. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_categorical_rain/expected.json +0 -0
  330. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_categorical_rain/hrrr-categorical-rain.grib2 +0 -0
  331. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/2.0.0/hrrr_2m_temperature/expected.json +0 -0
  332. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/2.0.0/hrrr_2m_temperature/hrrr-2m-temperature.grib2 +0 -0
  333. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/3.0.0/gfs_and_hrrr_categorical_rain/expected.json +0 -0
  334. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/3.0.0/gfs_and_hrrr_categorical_rain/gfs-and-hrrr-categorical-rain.grib2 +0 -0
  335. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/plain_filing_fact/expected.json +0 -0
  336. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/plain_filing_fact/filing.xml +0 -0
  337. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/xml_inline_fact/expected.json +0 -0
  338. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/xml_inline_fact/filing.xhtml +0 -0
  339. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/pacer_rss_feed/expected.json +0 -0
  340. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/pacer_rss_feed/feed.xml +0 -0
  341. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/sec_form_d_filing/expected.json +0 -0
  342. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/sec_form_d_filing/filing.xml +0 -0
  343. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/unified_agenda_extract/agenda.xml +0 -0
  344. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/unified_agenda_extract/expected.json +0 -0
  345. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples.py +0 -0
  346. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/scientific.py +0 -0
  347. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/scientific_arrays/__init__.py +0 -0
  348. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/scientific_arrays/container.py +0 -0
  349. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/scientific_arrays/goes.py +0 -0
  350. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/scientific_arrays/hdf4.py +0 -0
  351. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/scientific_arrays/hdf4_bridge.py +0 -0
  352. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/scientific_arrays/hdf5.py +0 -0
  353. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/scientific_arrays/native.py +0 -0
  354. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/scientific_arrays/netcdf.py +0 -0
  355. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/scientific_arrays/profiles.py +0 -0
  356. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/scientific_arrays/raw.py +0 -0
  357. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/scientific_arrays/zarr.py +0 -0
  358. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/scientific_catalog.py +0 -0
  359. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/scientific_segmented/__init__.py +0 -0
  360. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/scientific_segmented/asset_sets.py +0 -0
  361. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/scientific_segmented/formats.py +0 -0
  362. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/scientific_segmented/hsd.py +0 -0
  363. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/scientific_segmented/native.py +0 -0
  364. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/scientific_segmented/profiles.py +0 -0
  365. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/scientific_segmented/reader.py +0 -0
  366. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/scientific_segmented/xrit.py +0 -0
  367. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/sdmx_json.py +0 -0
  368. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/spreadsheet.py +0 -0
  369. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/statistical_microdata.py +0 -0
  370. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/tabular.py +0 -0
  371. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/vector.py +0 -0
  372. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/vector_wkb.py +0 -0
  373. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/xbrl_facts.py +0 -0
  374. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/xml_tabular.py +0 -0
  375. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/recipe.py +0 -0
  376. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/review.py +0 -0
  377. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/rowset.py +0 -0
  378. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/session_probes.py +0 -0
  379. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/signing.py +0 -0
  380. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/skill_assets.py +0 -0
  381. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/source_discovery.py +0 -0
  382. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/__init__.py +0 -0
  383. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/adapters.py +0 -0
  384. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/authenticated_https.py +0 -0
  385. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/authenticated_https_v2.py +0 -0
  386. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/authenticated_https_v3.py +0 -0
  387. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/cadence.py +0 -0
  388. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/cadence_emission.py +0 -0
  389. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/cadence_history.py +0 -0
  390. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/__init__.py +0 -0
  391. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/admission.py +0 -0
  392. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/authoring.py +0 -0
  393. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/authoring_policy.py +0 -0
  394. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/authoring_shards.py +0 -0
  395. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/bounded_io.py +0 -0
  396. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/channel.py +0 -0
  397. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/channel_client.py +0 -0
  398. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/contracts.py +0 -0
  399. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/coverage.py +0 -0
  400. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/embedding.py +0 -0
  401. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/entry_v2.py +0 -0
  402. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/fill.py +0 -0
  403. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/fill_partitions.py +0 -0
  404. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/fill_staging.py +0 -0
  405. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/gating.py +0 -0
  406. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/generation_receipt.py +0 -0
  407. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/harvest/__init__.py +0 -0
  408. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/harvest/ckan.py +0 -0
  409. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/harvest/datagov_v4.py +0 -0
  410. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/harvest/protocol.py +0 -0
  411. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/harvest/sdmx.py +0 -0
  412. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/harvest/stac.py +0 -0
  413. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/hosted_catalog.py +0 -0
  414. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/identity_history.py +0 -0
  415. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/neural.py +0 -0
  416. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/packed_catalog.py +0 -0
  417. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/packed_retrieval.py +0 -0
  418. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/packed_writer.py +0 -0
  419. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/query_trace.py +0 -0
  420. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/recommend.py +0 -0
  421. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/retrieval.py +0 -0
  422. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/retrieval_manifest.py +0 -0
  423. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/sealed.py +0 -0
  424. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/search.py +0 -0
  425. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/streaming_delta.py +0 -0
  426. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/update.py +0 -0
  427. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/collections.py +0 -0
  428. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/dataset.py +0 -0
  429. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/deletion.py +0 -0
  430. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/document_projection.py +0 -0
  431. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/fitness.py +0 -0
  432. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/governance.py +0 -0
  433. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/hosted.py +0 -0
  434. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/integration.py +0 -0
  435. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/range_reader.py +0 -0
  436. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/rights_rule.py +0 -0
  437. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/source_cadence_vectors.v1.json +0 -0
  438. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/sports.py +0 -0
  439. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.cursor-resume.v3.json +0 -0
  440. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-ed25519.v2.json +0 -0
  441. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-hmac.v2.json +0 -0
  442. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-hmac384.v2.json +0 -0
  443. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-hmac512.v2.json +0 -0
  444. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame.v2.json +0 -0
  445. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-header-rsa.v2.json +0 -0
  446. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-header.v2.json +0 -0
  447. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-permessage-jwt.v2.json +0 -0
  448. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-permessage.v2.json +0 -0
  449. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-prelude.v2.json +0 -0
  450. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-query.v2.json +0 -0
  451. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-subprotocol.v2.json +0 -0
  452. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-subscribe.v2.json +0 -0
  453. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-urlpath.v2.json +0 -0
  454. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/stream_connectors/polymarket.clob-market.v1.json +0 -0
  455. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/stream_credential.py +0 -0
  456. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/stream_prelude.py +0 -0
  457. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/stream_recorder.py +0 -0
  458. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/stream_registry.py +0 -0
  459. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/stream_rotation.py +0 -0
  460. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/stream_segment_recorder.py +0 -0
  461. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/stream_series.py +0 -0
  462. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/stream_signing.py +0 -0
  463. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/stream_venue.py +0 -0
  464. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/table_profile.py +0 -0
  465. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/__init__.py +0 -0
  466. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/acquire.py +0 -0
  467. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/acquire_cancel.py +0 -0
  468. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/activity.py +0 -0
  469. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/approvals.py +0 -0
  470. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/commands.py +0 -0
  471. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/download.py +0 -0
  472. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/narrative.py +0 -0
  473. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/parity.py +0 -0
  474. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/probe.py +0 -0
  475. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/propose.py +0 -0
  476. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/research.py +0 -0
  477. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/router.py +0 -0
  478. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/runs.py +0 -0
  479. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/session.py +0 -0
  480. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/stream.py +0 -0
  481. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/stream_venue.py +0 -0
  482. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/transport.py +0 -0
  483. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/v4_artifacts.py +0 -0
  484. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/v4_connections.py +0 -0
  485. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/v4_dataset_covers.py +0 -0
  486. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/v4_handoff.py +0 -0
  487. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/v4_narrative.py +0 -0
  488. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/v4_query.py +0 -0
  489. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/v4_secrets.py +0 -0
  490. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/v4_stream.py +0 -0
  491. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/vocabulary.py +0 -0
  492. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/workers.py +0 -0
  493. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ucum/TABLE-PIN.json +0 -0
  494. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ucum/ucum-subset.v1.json +0 -0
  495. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/unit_flow.py +0 -0
  496. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/units.py +0 -0
  497. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ux/__init__.py +0 -0
  498. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ux/attendance.py +0 -0
  499. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ux/clarification.py +0 -0
  500. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ux/cloud_auth.py +0 -0
  501. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ux/commands/__init__.py +0 -0
  502. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ux/commands/auth.py +0 -0
  503. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ux/commands/catalog_author.py +0 -0
  504. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ux/commands/catalog_harvest.py +0 -0
  505. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ux/commands/catalog_publish.py +0 -0
  506. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ux/commands/clarify.py +0 -0
  507. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ux/commands/login.py +0 -0
  508. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ux/commands/record.py +0 -0
  509. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ux/commands/whoami.py +0 -0
  510. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ux/credential_native.py +0 -0
  511. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ux/credential_store.py +0 -0
  512. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ux/credentials.py +0 -0
  513. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ux/headline.py +0 -0
  514. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ux/hosted_acquisition.py +0 -0
  515. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ux/local_review.py +0 -0
  516. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ux/login.py +0 -0
  517. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ux/path_kind.py +0 -0
  518. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ux/plain_file.py +0 -0
  519. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ux/readers.py +0 -0
  520. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/v4_check_dialect.py +0 -0
  521. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/v4_closed_source.py +0 -0
  522. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/v4_document_pin.py +0 -0
  523. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/v4_reader_pin.py +0 -0
  524. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/v4_required_controls.py +0 -0
  525. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/v4_snapshot_artifact.py +0 -0
  526. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/v4_stream_recording.py +0 -0
  527. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/v4_transform.py +0 -0
  528. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/visual_run/__init__.py +0 -0
  529. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/visual_run/authoring.py +0 -0
  530. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/visual_run/contracts.py +0 -0
  531. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/visual_run/materialize.py +0 -0
  532. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/visual_run/observations.py +0 -0
  533. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/visual_run/reducer.py +0 -0
  534. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/visual_run/sdk.py +0 -0
  535. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/visual_run/store.py +0 -0
  536. {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/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.15.1
3
+ Version: 0.15.2
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.15.1"
3
+ version = "0.15.2"
4
4
  description = "Mostly Right CLI for reproducible, reviewed Parquet datasets"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.13,<3.14"
@@ -516,8 +516,7 @@ the ones above. Spell out the names a reader would search for -- the place, the
516
516
  every common form, the programme and the publisher -- once each, in the opening sentences and
517
517
  never as a keyword list. The opening sentences double as the summary cards and search engines
518
518
  show, so they must stand alone. A one-line description is a defect to fix in the revision, not a
519
- style choice. Give `table.description` the grain and the window, and give every column a
520
- description a reader can act on.
519
+ style choice. Give `table.description` the grain and the window.
521
520
 
522
521
  **Every dataset gets a cover before its first run is presented.** Once the description is
523
522
  written, generate one with
@@ -545,7 +544,17 @@ years are already in their names.
545
544
  Leaving it out is a defect in the same way a one-line dataset description is: the source is then
546
545
  drawn with its endpoint alone, and a reader is left to guess from a query string.
547
546
 
548
- ### Say what each column shows
547
+ ### Say what each column is, and what it shows
548
+
549
+ **Every column carries a `description`, and every column that measures a physical quantity carries
550
+ a `units` entry.** The description is one sentence saying what the column means, written for
551
+ somebody who has never seen the source — `The highest air temperature recorded that day.` — and it
552
+ is what the dataset page, the schema and everybody reading the table downstream go on. The
553
+ units entry names the code that column's numbers are in, and a temperature, a distance, a duration
554
+ or a rate that arrives without one is a number nobody can convert or compare. Neither member is
555
+ work to leave for later: a recipe that leaves a column undescribed or a measurement unitless is not
556
+ one to start a run on, and a run already built from one is not finished, however well its checks
557
+ reported.
549
558
 
550
559
  Decide, per column, what a reader should see, and write it on the column as `presentation`. This is
551
560
  your judgement about the data and nobody else can make it: the Builder can see the values but not
@@ -808,6 +817,14 @@ required check that fails ends the run with `failure_code: CHECK_FAILED`.
808
817
  `mr-data diff RUN_A RUN_B` compares two runs — columns added, removed and retyped, row counts, the
809
818
  coverage window and the data fingerprint. `--columns-only` narrows what is compared to the schema.
810
819
 
820
+ **Then read the columns against the document, because an undescribed column is a revision rather
821
+ than a caveat.** `peek` names the columns the run sealed; the recipe is where their descriptions
822
+ and units are, so this is a reading of the document rather than a judgement about the data: every
823
+ column has a `description`, and every column that measures a physical quantity has a `units`
824
+ entry. A run whose recipe leaves either out is not finished — the table arrives with nothing
825
+ beside it to say what its numbers mean or what they are measured in — so it is a revision, which
826
+ is stage 7, and it is registered again before anything is presented.
827
+
811
828
  ### 7. Fix — revise the document and register it again
812
829
 
813
830
  Change the document and send it again. Same dataset, same table, new digest:
@@ -1088,6 +1088,34 @@ class TransportResponse:
1088
1088
  return values[0] if values else None
1089
1089
 
1090
1090
 
1091
+ @dataclass(frozen=True)
1092
+ class StreamedTransportResponse:
1093
+ """A transport response whose body was copied to a coordinator-owned sink.
1094
+
1095
+ The body deliberately has no representation here. Callers get the facts needed for the
1096
+ same pinned-peer receipt as ``TransportResponse`` without an opportunity to re-materialise
1097
+ a large source in coordinator memory.
1098
+ """
1099
+
1100
+ status: int
1101
+ headers: tuple[tuple[str, str], ...]
1102
+ body_size_bytes: int
1103
+ body_sha256: str
1104
+ connected_peer: str
1105
+ tls_verified: bool
1106
+ hostname_verified: bool
1107
+
1108
+ def header(self, name: str) -> str | None:
1109
+ return TransportResponse(
1110
+ self.status,
1111
+ self.headers,
1112
+ b"",
1113
+ self.connected_peer,
1114
+ self.tls_verified,
1115
+ self.hostname_verified,
1116
+ ).header(name)
1117
+
1118
+
1091
1119
  class PinnedTransport(Protocol):
1092
1120
  def request(
1093
1121
  self,
@@ -1109,6 +1137,17 @@ class PinnedTransport(Protocol):
1109
1137
  can influence character by character.
1110
1138
  """
1111
1139
 
1140
+ def request_to_sink(
1141
+ self,
1142
+ target: ValidatedTarget,
1143
+ *,
1144
+ approved_ip: str,
1145
+ headers: Mapping[str, str],
1146
+ limits: RetrievalLimits,
1147
+ sink: Callable[[bytes], None],
1148
+ ) -> StreamedTransportResponse:
1149
+ """Stream one response into ``sink`` while retaining only bounded receipt facts."""
1150
+
1112
1151
 
1113
1152
  class TransportFailureError(AcquisitionSecurityError):
1114
1153
  """Retryable transport failure with exact response-body bytes already consumed."""
@@ -1391,6 +1430,33 @@ class RetrievedBytes:
1391
1430
  )
1392
1431
 
1393
1432
 
1433
+ @dataclass(frozen=True)
1434
+ class RetrievedSink:
1435
+ """Receipt facts for a retrieval copied directly into a caller-owned file descriptor."""
1436
+
1437
+ source_url: str
1438
+ final_url: str
1439
+ media_type: str
1440
+ content_sha256: str
1441
+ content_size_bytes: int
1442
+ hops: tuple[RetrievalHop, ...]
1443
+ transport_evidence_digest: str
1444
+
1445
+ @property
1446
+ def total_response_body_size_bytes(self) -> int:
1447
+ """Every response byte consumed, including failed peer attempts."""
1448
+
1449
+ return sum(
1450
+ hop.response_body_size_bytes
1451
+ + sum(
1452
+ attempt.response_body_size_bytes
1453
+ for attempt in hop.peer_attempts[:-1]
1454
+ if attempt.outcome == "transport_failure"
1455
+ )
1456
+ for hop in self.hops
1457
+ )
1458
+
1459
+
1394
1460
  def probe_transport_for(retrieved: RetrievedBytes) -> ProbeTransport:
1395
1461
  """Seal what the terminal response of one retrieval stated.
1396
1462
 
@@ -1653,6 +1719,209 @@ class PinnedHttpsRetriever:
1653
1719
  validators=validators,
1654
1720
  )
1655
1721
 
1722
+ def retrieve_to_sink(
1723
+ self,
1724
+ url: str,
1725
+ *,
1726
+ sink: Callable[[bytes], None],
1727
+ reset_sink: Callable[[], None] | None = None,
1728
+ ) -> RetrievedSink:
1729
+ """Fetch a public whole CSV while streaming its terminal body to ``sink``.
1730
+
1731
+ Redirect bodies are discarded after their digest is measured. A peer retry starts a
1732
+ fresh request only after the failed attempt records its consumed bytes; the caller must
1733
+ therefore use a fresh staging file per acquisition and discard it on any exception.
1734
+ """
1735
+ if not callable(sink):
1736
+ raise AcquisitionSecurityError("STREAM_SINK", "stream sink must be callable")
1737
+ started = float(self._clock())
1738
+ current_url = url
1739
+ hops: list[RetrievalHop] = []
1740
+ aggregate = 0
1741
+ requests = 0
1742
+ for redirect_count in range(self._limits.max_redirects + 1):
1743
+ self._check_total_timeout(started)
1744
+ target = validate_public_https_url(
1745
+ current_url, resolver=self._resolver, egress_policy=self._egress_policy
1746
+ )
1747
+ headers = {
1748
+ "Accept": _accept_header(self._limits),
1749
+ "Accept-Encoding": "identity",
1750
+ "Connection": "close",
1751
+ "Host": urlsplit(target.normalized_url).netloc,
1752
+ "User-Agent": self._limits.user_agent,
1753
+ }
1754
+ response: StreamedTransportResponse | None = None
1755
+ attempts: list[PeerAttempt] = []
1756
+ for ip in target.approved_ips:
1757
+ if requests >= self._limits.max_requests:
1758
+ raise PeerAttemptError(
1759
+ "REQUEST_LIMIT",
1760
+ "retrieval exceeded its request budget",
1761
+ tuple(attempts),
1762
+ hops=tuple(hops),
1763
+ )
1764
+ requests += 1
1765
+ remaining = self._limits.max_aggregate_response_bytes - aggregate
1766
+ try:
1767
+ limits = self._remaining_attempt_limits(
1768
+ started + self._limits.total_timeout_seconds,
1769
+ remaining_aggregate_bytes=remaining,
1770
+ )
1771
+ # Only the terminal body reaches the supplied fd. Redirect bytes are still
1772
+ # fully consumed and evidenced, but are never retained.
1773
+ with self._limiter.acquire(
1774
+ target.hostname, deadline=started + self._limits.total_timeout_seconds
1775
+ ):
1776
+ response = self._transport.request_to_sink(
1777
+ target, approved_ip=ip, headers=headers, limits=limits, sink=sink
1778
+ )
1779
+ except AcquisitionSecurityError as exc:
1780
+ consumed = (
1781
+ exc.response_body_size_bytes
1782
+ if isinstance(exc, TransportFailureError)
1783
+ else 0
1784
+ )
1785
+ aggregate += consumed
1786
+ attempts.append(
1787
+ PeerAttempt(
1788
+ approved_ip=ip,
1789
+ outcome="transport_failure",
1790
+ failure_code=exc.code,
1791
+ response_body_size_bytes=consumed,
1792
+ )
1793
+ )
1794
+ if (
1795
+ exc.code == "TRANSPORT_FAILURE"
1796
+ and ip != target.approved_ips[-1]
1797
+ and aggregate < self._limits.max_aggregate_response_bytes
1798
+ ):
1799
+ # A failed peer may already have copied an unauthenticated prefix to
1800
+ # the caller-owned staging file. A second peer answers a fresh whole
1801
+ # representation, so it can proceed only after that prefix is removed.
1802
+ if reset_sink is None:
1803
+ raise PeerAttemptError(
1804
+ "STREAM_SINK",
1805
+ "retrying a streamed retrieval requires a resettable sink",
1806
+ tuple(attempts),
1807
+ hops=tuple(hops),
1808
+ ) from None
1809
+ reset_sink()
1810
+ continue
1811
+ raise PeerAttemptError(
1812
+ exc.code, exc.detail, tuple(attempts), hops=tuple(hops)
1813
+ ) from None
1814
+ attempts.append(
1815
+ PeerAttempt(
1816
+ approved_ip=ip,
1817
+ outcome="response",
1818
+ failure_code=None,
1819
+ response_body_size_bytes=response.body_size_bytes,
1820
+ )
1821
+ )
1822
+ break
1823
+ if response is None:
1824
+ raise PeerAttemptError(
1825
+ "TRANSPORT_FAILURE",
1826
+ "all resolver-approved peers failed",
1827
+ tuple(attempts),
1828
+ hops=tuple(hops),
1829
+ )
1830
+ aggregate += response.body_size_bytes
1831
+ if aggregate > self._limits.max_aggregate_response_bytes:
1832
+ raise PeerAttemptError(
1833
+ "AGGREGATE_RESPONSE_LIMIT",
1834
+ "response bodies exceeded aggregate budget",
1835
+ tuple(attempts),
1836
+ hops=tuple(hops),
1837
+ )
1838
+ if not response.tls_verified or not response.hostname_verified:
1839
+ raise PeerAttemptError(
1840
+ "TLS_VERIFICATION",
1841
+ "transport did not prove TLS verification",
1842
+ tuple(attempts),
1843
+ hops=tuple(hops),
1844
+ )
1845
+ peer = require_approved_peer(target, response.connected_peer)
1846
+ normalized = _validate_response_headers(response.headers)
1847
+ content_length = response.header("content-length")
1848
+ if content_length is not None and (
1849
+ not _DECIMAL_ONLY.fullmatch(content_length)
1850
+ or int(content_length) != response.body_size_bytes
1851
+ ):
1852
+ raise PeerAttemptError(
1853
+ "CONTENT_LENGTH",
1854
+ "response bytes do not match declared content length",
1855
+ tuple(attempts),
1856
+ hops=tuple(hops),
1857
+ )
1858
+ encoding = (response.header("content-encoding") or "").lower().strip()
1859
+ if encoding not in _ALLOWED_RESPONSE_ENCODINGS:
1860
+ raise PeerAttemptError(
1861
+ "CONTENT_ENCODING",
1862
+ "compressed network responses are disabled",
1863
+ tuple(attempts),
1864
+ hops=tuple(hops),
1865
+ )
1866
+ hop = RetrievalHop(
1867
+ url=target.normalized_url,
1868
+ resolution_digest=target.resolution_digest,
1869
+ connected_peer=peer,
1870
+ status=response.status,
1871
+ response_headers_digest=canonical_sha256(normalized),
1872
+ response_body_size_bytes=response.body_size_bytes,
1873
+ response_body_sha256=response.body_sha256,
1874
+ etag=response.header("etag"),
1875
+ last_modified=response.header("last-modified"),
1876
+ peer_attempts=tuple(attempts),
1877
+ approved_ips=target.approved_ips,
1878
+ )
1879
+ hops.append(hop)
1880
+ if response.status in REDIRECT_STATUSES:
1881
+ location = response.header(_REDIRECT_HEADER)
1882
+ if not location or redirect_count >= self._limits.max_redirects:
1883
+ raise PeerAttemptError(
1884
+ "REDIRECT_LIMIT",
1885
+ "response redirect is outside the admitted limit",
1886
+ tuple(attempts),
1887
+ hops=tuple(hops),
1888
+ )
1889
+ current_url = urljoin(target.normalized_url, location)
1890
+ # The redirect entity is evidence, never source content. A file-backed caller
1891
+ # truncates its coordinator staging descriptor here before the next hop.
1892
+ if reset_sink is None:
1893
+ raise AcquisitionSecurityError(
1894
+ "STREAM_SINK", "redirecting streamed retrieval requires a resettable sink"
1895
+ )
1896
+ reset_sink()
1897
+ continue
1898
+ if response.status == NOT_FOUND_STATUS or not 200 <= response.status <= 299:
1899
+ raise PeerAttemptError(
1900
+ "HTTP_STATUS",
1901
+ f"source returned HTTP status {response.status}",
1902
+ tuple(attempts),
1903
+ hops=tuple(hops),
1904
+ http_status=response.status,
1905
+ )
1906
+ media_type = _media_type(response.header("content-type"))
1907
+ if media_type not in self._limits.allowed_media_types:
1908
+ raise PeerAttemptError(
1909
+ "MEDIA_TYPE",
1910
+ "response media type is not allowlisted",
1911
+ tuple(attempts),
1912
+ hops=tuple(hops),
1913
+ )
1914
+ return RetrievedSink(
1915
+ source_url=url,
1916
+ final_url=target.normalized_url,
1917
+ media_type=media_type,
1918
+ content_sha256=response.body_sha256,
1919
+ content_size_bytes=response.body_size_bytes,
1920
+ hops=tuple(hops),
1921
+ transport_evidence_digest=canonical_sha256([hop.to_dict() for hop in hops]),
1922
+ )
1923
+ raise AcquisitionSecurityError("REDIRECT_LIMIT", "redirect loop did not terminate")
1924
+
1656
1925
  def retrieve_datagov_v4(
1657
1926
  self,
1658
1927
  url: str,
@@ -2613,6 +2882,97 @@ class StdlibPinnedTransport:
2613
2882
  finally:
2614
2883
  connection.close()
2615
2884
 
2885
+ def request_to_sink(
2886
+ self,
2887
+ target: ValidatedTarget,
2888
+ *,
2889
+ approved_ip: str,
2890
+ headers: Mapping[str, str],
2891
+ limits: RetrievalLimits,
2892
+ sink: Callable[[bytes], None],
2893
+ ) -> StreamedTransportResponse:
2894
+ """The production no-buffer variant of :meth:`request`.
2895
+
2896
+ The size check happens before every write. A rejected response can therefore leave a
2897
+ partial staging file, but never an admitted result; its exact consumed byte count is
2898
+ carried by ``TransportFailureError`` for retry accounting.
2899
+ """
2900
+ deadline = time.monotonic() + limits.total_timeout_seconds
2901
+ connection = _PinnedHTTPSConnection(
2902
+ hostname=target.hostname,
2903
+ approved_ip=approved_ip,
2904
+ port=target.port,
2905
+ timeout=min(limits.connect_timeout_seconds, limits.total_timeout_seconds),
2906
+ context=self._context,
2907
+ )
2908
+ total = 0
2909
+ digest = hashlib.sha256()
2910
+ try:
2911
+ connection.request("GET", target.request_target, headers=dict(headers))
2912
+ if connection.sock is not None:
2913
+ connection.sock.settimeout(
2914
+ _remaining_socket_timeout(deadline, configured=limits.read_timeout_seconds)
2915
+ )
2916
+ response = connection.getresponse()
2917
+ raw_headers = tuple(
2918
+ (key.lower(), value.strip()) for key, value in response.getheaders()
2919
+ )
2920
+ _validate_response_headers(raw_headers)
2921
+ content_length = next(
2922
+ (value for key, value in raw_headers if key == "content-length"), None
2923
+ )
2924
+ if content_length is not None:
2925
+ try:
2926
+ if int(content_length) > limits.max_response_bytes:
2927
+ raise AcquisitionSecurityError(
2928
+ "RESPONSE_LIMIT",
2929
+ "declared response length exceeds the configured limit",
2930
+ )
2931
+ except ValueError:
2932
+ raise AcquisitionSecurityError(
2933
+ "CONTENT_LENGTH", "response content length is invalid"
2934
+ ) from None
2935
+ while True:
2936
+ if connection.sock is not None:
2937
+ connection.sock.settimeout(
2938
+ _remaining_socket_timeout(deadline, configured=limits.read_timeout_seconds)
2939
+ )
2940
+ chunk = response.read(min(65_536, limits.max_response_bytes + 1 - total))
2941
+ if not chunk:
2942
+ break
2943
+ total += len(chunk)
2944
+ if total > limits.max_response_bytes:
2945
+ raise AcquisitionSecurityError(
2946
+ "RESPONSE_LIMIT", "response exceeded the configured byte limit"
2947
+ )
2948
+ digest.update(chunk)
2949
+ sink(chunk)
2950
+ peer = connection.connected_peer
2951
+ if peer is None:
2952
+ raise AcquisitionSecurityError(
2953
+ "PEER_ADDRESS", "transport did not record its connected peer"
2954
+ )
2955
+ return StreamedTransportResponse(
2956
+ response.status, raw_headers, total, digest.hexdigest(), peer, True, True
2957
+ )
2958
+ except http.client.IncompleteRead as exc:
2959
+ partial = exc.partial if isinstance(exc.partial, bytes) else bytes(exc.partial)
2960
+ raise TransportFailureError(
2961
+ f"HTTPS peer disconnected during a response: {type(exc).__name__}",
2962
+ response_body_size_bytes=total + len(partial),
2963
+ ) from None
2964
+ except http.client.RemoteDisconnected as exc:
2965
+ raise TransportFailureError(
2966
+ f"HTTPS peer disconnected before a response: {type(exc).__name__}",
2967
+ response_body_size_bytes=total,
2968
+ ) from None
2969
+ except OSError as exc:
2970
+ raise TransportFailureError(
2971
+ f"HTTPS transport failed: {type(exc).__name__}", response_body_size_bytes=total
2972
+ ) from None
2973
+ finally:
2974
+ connection.close()
2975
+
2616
2976
 
2617
2977
  def _remaining_socket_timeout(deadline: float, *, configured: float) -> float:
2618
2978
  remaining = deadline - time.monotonic()