mostlyright-data 0.17.0__tar.gz → 0.17.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (546) hide show
  1. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/PKG-INFO +1 -1
  2. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/pyproject.toml +1 -1
  3. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/acquisition/http.py +300 -32
  4. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/compact_worker.py +127 -24
  5. mostlyright_data-0.17.1/src/mostlyright/data_harness/fetch_egress_smoke.py +107 -0
  6. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/formats.py +40 -1
  7. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/hosted_crawler.py +4 -2
  8. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/hosted_crawler_fetch.py +165 -6
  9. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/hosted_run_worker.py +107 -12
  10. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/inprocess_acquisition.py +143 -28
  11. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/stream_series.py +15 -8
  12. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/stream_subscription_feed.py +12 -0
  13. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/stream_subscription_sealer.py +58 -14
  14. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/stream_subscription_worker.py +141 -38
  15. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/studio_subscription_control.py +119 -2
  16. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/table_parts.py +44 -9
  17. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/activity.py +5 -3
  18. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/stream_venue.py +10 -1
  19. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ux/remediation.py +2 -1
  20. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/.gitignore +0 -0
  21. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/README.md +0 -0
  22. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/scripts/hatch_build.py +0 -0
  23. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/skills/mr-data-build/SKILL.md +0 -0
  24. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/skills/mr-data-build/agents/openai.yaml +0 -0
  25. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/skills/mr-data-build/scripts/write_research_notebook.py +0 -0
  26. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/skills/mr-data-build/scripts/write_visual_run.py +0 -0
  27. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/__init__.py +0 -0
  28. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/LICENSE +0 -0
  29. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/PROVENANCE.json +0 -0
  30. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/__init__.py +0 -0
  31. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/__init__.pyi +0 -0
  32. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/_version.py +0 -0
  33. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/cal_rec_boxes/__init__.py +0 -0
  34. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/cal_rec_boxes/main.py +0 -0
  35. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/ch_ppocr_cls/__init__.py +0 -0
  36. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/ch_ppocr_cls/main.py +0 -0
  37. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/ch_ppocr_cls/utils.py +0 -0
  38. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/ch_ppocr_det/__init__.py +0 -0
  39. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/ch_ppocr_det/main.py +0 -0
  40. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/ch_ppocr_det/utils.py +0 -0
  41. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/__init__.py +0 -0
  42. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/main.py +0 -0
  43. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/typings.py +0 -0
  44. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/utils.py +0 -0
  45. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/config.yaml +0 -0
  46. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/inference_engine/__init__.py +0 -0
  47. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/inference_engine/base.py +0 -0
  48. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/inference_engine/onnxruntime/__init__.py +0 -0
  49. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/inference_engine/onnxruntime/main.py +0 -0
  50. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/inference_engine/onnxruntime/provider_config.py +0 -0
  51. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/main.py +0 -0
  52. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/models/PP-OCRv6_det_small.onnx +0 -0
  53. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/models/PP-OCRv6_rec_small.onnx +0 -0
  54. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/models/ch_ppocr_mobile_v2.0_cls_mobile.onnx +0 -0
  55. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/py.typed +0 -0
  56. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/utils/__init__.py +0 -0
  57. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/utils/load_image.py +0 -0
  58. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/utils/log.py +0 -0
  59. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/utils/model_resolver.py +0 -0
  60. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/utils/output.py +0 -0
  61. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/utils/parse_parameters.py +0 -0
  62. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/utils/process_img.py +0 -0
  63. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/utils/typings.py +0 -0
  64. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/utils/utils.py +0 -0
  65. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/__init__.py +0 -0
  66. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/acquisition/__init__.py +0 -0
  67. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/acquisition/derived_credentials.py +0 -0
  68. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/acquisition/parsing.py +0 -0
  69. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/acquisition/ranges.py +0 -0
  70. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/acquisition/result_download.py +0 -0
  71. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/acquisition/retention_admission.py +0 -0
  72. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/acquisition/sandbox.py +0 -0
  73. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/acquisition/sandbox_bootstrap.py +0 -0
  74. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/acquisition/url_policy.py +0 -0
  75. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/agent_runtime.py +0 -0
  76. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/assets/logo-ink.svg +0 -0
  77. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/backends/__init__.py +0 -0
  78. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/backends/pandas_backend.py +0 -0
  79. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/backends/polars_backend.py +0 -0
  80. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/backends/protocol.py +0 -0
  81. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/backends/reference.py +0 -0
  82. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/backends/registry.py +0 -0
  83. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/backends/restrictions.py +0 -0
  84. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/bounded_query.py +0 -0
  85. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/bounded_scratch_sink.py +0 -0
  86. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/canonical.py +0 -0
  87. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/catalog_job.py +0 -0
  88. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/cli.py +0 -0
  89. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/contracts.py +0 -0
  90. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/coordinator.py +0 -0
  91. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/crosswalks.py +0 -0
  92. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/declared_checks.py +0 -0
  93. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/delta.py +0 -0
  94. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/delta_checks.py +0 -0
  95. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/delta_classifier.py +0 -0
  96. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/delta_persist.py +0 -0
  97. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/delta_recompute.py +0 -0
  98. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/delta_rows.py +0 -0
  99. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/deploy.py +0 -0
  100. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/deploy_target.py +0 -0
  101. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/deployment_evidence.py +0 -0
  102. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/documents/__init__.py +0 -0
  103. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/documents/_worker_capability.py +0 -0
  104. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/documents/capture.py +0 -0
  105. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/documents/contracts.py +0 -0
  106. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/documents/lane.py +0 -0
  107. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/documents/ocr.py +0 -0
  108. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/documents/pdf.py +0 -0
  109. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/documents/registry.py +0 -0
  110. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/documents/sandbox.py +0 -0
  111. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/documents/selections.py +0 -0
  112. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/documents/tables.py +0 -0
  113. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/documents/vendor_rapidocr.py +0 -0
  114. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/events.py +0 -0
  115. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/fast_delimited.py +0 -0
  116. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/governors.py +0 -0
  117. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/hosted_bootstrap.py +0 -0
  118. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/hosted_crawler_container_smoke.py +0 -0
  119. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/hosted_crawler_job.py +0 -0
  120. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/hosted_crawler_protocol.py +0 -0
  121. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/hosted_deploy.py +0 -0
  122. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/hosted_ingestion_contract.py +0 -0
  123. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/hosted_ingestion_job.py +0 -0
  124. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/hosted_ingestion_job_smoke.py +0 -0
  125. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/hosted_ingestion_worker.py +0 -0
  126. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/hosted_rlimit_as_container_smoke.py +0 -0
  127. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/hosted_session_container_smoke.py +0 -0
  128. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/hosted_session_worker.py +0 -0
  129. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/hosted_session_worker_job_smoke.py +0 -0
  130. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/hosted_stream_recorder_container_smoke.py +0 -0
  131. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/hosted_stream_recorder_job.py +0 -0
  132. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/hosted_stream_subscription_container_smoke.py +0 -0
  133. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/hosted_stream_subscription_worker.py +0 -0
  134. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/hosted_worker.py +0 -0
  135. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/incremental_slice_executor.py +0 -0
  136. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/incremental_worker.py +0 -0
  137. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ingestion/__init__.py +0 -0
  138. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ingestion/contracts.py +0 -0
  139. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ingestion/faults.py +0 -0
  140. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ingestion/gcs_store.py +0 -0
  141. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ingestion/spool.py +0 -0
  142. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ingestion/store.py +0 -0
  143. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/key_seam.py +0 -0
  144. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/linux_process_boundary.py +0 -0
  145. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/local_contracts.py +0 -0
  146. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/nbrender/CONTRACT.md +0 -0
  147. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/nbrender/__init__.py +0 -0
  148. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/nbrender/chrome.py +0 -0
  149. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/nbrender/code_body.py +0 -0
  150. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/nbrender/document.py +0 -0
  151. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/nbrender/frame.py +0 -0
  152. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/nbrender/interactive.py +0 -0
  153. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/nbrender/markdown_body.py +0 -0
  154. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/nbrender/mr_components.py +0 -0
  155. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/nbrender/outputs_data.py +0 -0
  156. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/nbrender/outputs_rich.py +0 -0
  157. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/nbrender/outputs_source.py +0 -0
  158. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/nbrender/outputs_stage.py +0 -0
  159. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/nbrender/outputs_text.py +0 -0
  160. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/nbrender/parse.py +0 -0
  161. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/nbrender/status.py +0 -0
  162. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/nbrender/tokens.py +0 -0
  163. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/notebook.py +0 -0
  164. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/offline.py +0 -0
  165. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/operation_registry.py +0 -0
  166. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/operator_setup.py +0 -0
  167. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/part_check_evidence.py +0 -0
  168. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/pipeline.py +0 -0
  169. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/plan_graph.py +0 -0
  170. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/preparation/__init__.py +0 -0
  171. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/preparation/contracts.py +0 -0
  172. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/preparation/engine.py +0 -0
  173. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/preparation/errors.py +0 -0
  174. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/preparation/gates.py +0 -0
  175. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/preparation/joins.py +0 -0
  176. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/preparation/profile.py +0 -0
  177. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/preparation/table.py +0 -0
  178. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/preparation/transforms.py +0 -0
  179. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/progress_events.py +0 -0
  180. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/__init__.py +0 -0
  181. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/_openpyxl.py +0 -0
  182. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/budgets.py +0 -0
  183. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/containers.py +0 -0
  184. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/contracts.py +0 -0
  185. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/delimited.py +0 -0
  186. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/geojson_vector.py +0 -0
  187. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/geopackage.py +0 -0
  188. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/geoparquet.py +0 -0
  189. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/grib2/__init__.py +0 -0
  190. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/grib2/admission.py +0 -0
  191. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/grib2/collection.py +0 -0
  192. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/grib2/collection_reader.py +0 -0
  193. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/grib2/decode.py +0 -0
  194. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/grib2/geometry.py +0 -0
  195. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/grib2/portable_math.py +0 -0
  196. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/grib_eccodes.py +0 -0
  197. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/html_tabular.py +0 -0
  198. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/html_web_extract.py +0 -0
  199. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/json_tabular.py +0 -0
  200. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/parquet_tabular.py +0 -0
  201. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/pcaxis_px.py +0 -0
  202. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/protobuf_tabular.py +0 -0
  203. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/raster/__init__.py +0 -0
  204. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/raster/_bytes.py +0 -0
  205. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/raster/decode.py +0 -0
  206. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/raster/family.py +0 -0
  207. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/raster/jpeg2000.py +0 -0
  208. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/raster/profiles.py +0 -0
  209. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/raster/rendered.py +0 -0
  210. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/raster/safe.py +0 -0
  211. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/raster/sentinel_safe.py +0 -0
  212. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/raster/tiff.py +0 -0
  213. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/registry.py +0 -0
  214. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/README.md +0 -0
  215. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.0.0/cities_one_stream/cities.csv.gz +0 -0
  216. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.0.0/cities_one_stream/expected.json +0 -0
  217. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.1.0/cities_one_stream/cities.csv.gz +0 -0
  218. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.1.0/cities_one_stream/expected.json +0 -0
  219. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/archive.tar/1.0.0/cities_beside_a_directory_entry/cities.tar +0 -0
  220. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/archive.tar/1.0.0/cities_beside_a_directory_entry/expected.json +0 -0
  221. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/archive.tar/1.1.0/cities_beside_a_directory_entry/cities.tar +0 -0
  222. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/archive.tar/1.1.0/cities_beside_a_directory_entry/expected.json +0 -0
  223. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/archive.zip/1.0.0/cities_beside_a_second_member/cities.zip +0 -0
  224. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/archive.zip/1.0.0/cities_beside_a_second_member/expected.json +0 -0
  225. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/archive.zip/1.1.0/dwd_semicolon_station_member/dwd-station.zip +0 -0
  226. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/archive.zip/1.1.0/dwd_semicolon_station_member/expected.json +0 -0
  227. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/archive.zip/1.2.0/dwd_semicolon_station_member/dwd-station.zip +0 -0
  228. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/archive.zip/1.2.0/dwd_semicolon_station_member/expected.json +0 -0
  229. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/an_ordinary_comma_separated_table/cities.csv +0 -0
  230. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/an_ordinary_comma_separated_table/expected.json +0 -0
  231. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/quoted_fields_holding_the_delimiter/cities.tsv +0 -0
  232. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/quoted_fields_holding_the_delimiter/expected.json +0 -0
  233. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/delimited_text/1.1.0/an_hourly_observation_table_served_as_plain_text/expected.json +0 -0
  234. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/delimited_text/1.1.0/an_hourly_observation_table_served_as_plain_text/observations.csv +0 -0
  235. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/geojson.vector/1.0.0/czech_capital/expected.json +0 -0
  236. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/geojson.vector/1.0.0/czech_capital/places.geojson +0 -0
  237. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/geopackage.vector/1.0.0/epsg_4326_feature/expected.json +0 -0
  238. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/geopackage.vector/1.0.0/epsg_4326_feature/places.gpkg +0 -0
  239. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/geoparquet.vector/1.0.0/primary_wkb_point/expected.json +0 -0
  240. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/geoparquet.vector/1.0.0/primary_wkb_point/places.parquet +0 -0
  241. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/html.tabular/1.0.0/sanitized_table/expected.json +0 -0
  242. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/html.tabular/1.0.0/sanitized_table/table.html +0 -0
  243. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/html.web_extract/1.0.0/json_ld_scorecards/expected.json +0 -0
  244. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/html.web_extract/1.0.0/json_ld_scorecards/scorecards.html +0 -0
  245. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/image.rendered/1.0.0/tiny_png/expected.json +0 -0
  246. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/image.rendered/1.0.0/tiny_png/tiny-rendered.png +0 -0
  247. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/json.tabular/1.0.0/nested_hourly_observations/expected.json +0 -0
  248. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/json.tabular/1.0.0/nested_hourly_observations/stations.json +0 -0
  249. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/json.tabular/1.1.0/an_observation_stream_served_as_plain_text/expected.json +0 -0
  250. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/json.tabular/1.1.0/an_observation_stream_served_as_plain_text/observations.ndjson +0 -0
  251. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/meteorology.bufr/1.0.0/eccodes_bufr4_subset/eccodes-bufr4.bufr +0 -0
  252. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/meteorology.bufr/1.0.0/eccodes_bufr4_subset/expected.json +0 -0
  253. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/meteorology.grib/1.0.0/eccodes_grib1_origin/expected.json +0 -0
  254. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/meteorology.grib/1.0.0/eccodes_grib1_origin/regular-ll-surface.grib1 +0 -0
  255. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/microdata.sas_xpt/1.0.0/two_raw_columns/expected.json +0 -0
  256. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/microdata.sas_xpt/1.0.0/two_raw_columns/survey.xpt +0 -0
  257. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/microdata.spss_sav/1.0.0/two_raw_columns/expected.json +0 -0
  258. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/microdata.spss_sav/1.0.0/two_raw_columns/survey.sav +0 -0
  259. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/microdata.stata_dta/1.0.0/two_raw_columns/expected.json +0 -0
  260. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/microdata.stata_dta/1.0.0/two_raw_columns/stata.dta +0 -0
  261. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/official.pcaxis_px/1.0.0/population_by_region_and_year/expected.json +0 -0
  262. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/official.pcaxis_px/1.0.0/population_by_region_and_year/population.px +0 -0
  263. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/official.sdmx_json/1.0.0/compact_population_series/expected.json +0 -0
  264. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/official.sdmx_json/1.0.0/compact_population_series/population.json +0 -0
  265. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/parquet.tabular/1.0.0/two_columns/expected.json +0 -0
  266. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/parquet.tabular/1.0.0/two_columns/prices.parquet +0 -0
  267. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/protobuf.tabular/1.0.0/gtfs_realtime_trip_updates/expected.json +0 -0
  268. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/protobuf.tabular/1.0.0/gtfs_realtime_trip_updates/gtfs-realtime.desc +0 -0
  269. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/protobuf.tabular/1.0.0/gtfs_realtime_trip_updates/trip-updates.pb +0 -0
  270. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/raster.geospatial/1.0.0/tiny_geotiff/expected.json +0 -0
  271. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/raster.geospatial/1.0.0/tiny_geotiff/tiny-geospatial.tif +0 -0
  272. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/satellite.goes_abi_l2/1.0.0/authored_cmi_window/expected.json +0 -0
  273. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/satellite.goes_abi_l2/1.0.0/authored_cmi_window/goes-abi-l2-cmi-window.nc +0 -0
  274. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/satellite.himawari_hsd/1.0.0/authored_b13_single_bzip2/expected.json +0 -0
  275. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/satellite.himawari_hsd/1.0.0/authored_b13_single_bzip2/himawari-b13-0101-bzip2.dat +0 -0
  276. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/satellite.himawari_hsd_complete/1.0.0/authored_b13_three_segment_scan/expected.json +0 -0
  277. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/satellite.himawari_hsd_complete/1.0.0/authored_b13_three_segment_scan/himawari-hsd-b13-complete.zip +0 -0
  278. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/satellite.msg_seviri_l15/1.0.0/authored_calibrated_complete_visir/expected.json +0 -0
  279. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/satellite.msg_seviri_l15/1.0.0/authored_calibrated_complete_visir/msg-seviri-l15.zip +0 -0
  280. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/satellite.sentinel_safe/1.0.0/authored_b02_scl_window/expected.json +0 -0
  281. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/satellite.sentinel_safe/1.0.0/authored_b02_scl_window/sentinel-safe-b02-scl.zip +0 -0
  282. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/satellite.xrit_image/1.0.0/authored_complete_raw_counts/expected.json +0 -0
  283. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/satellite.xrit_image/1.0.0/authored_complete_raw_counts/xrit-complete-image.zip +0 -0
  284. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/scientific.fits/1.0.0/tiny_primary_window/expected.json +0 -0
  285. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/scientific.fits/1.0.0/tiny_primary_window/tiny-primary.fits +0 -0
  286. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/scientific.hdf4/1.0.0/authored_temperature_window/expected.json +0 -0
  287. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/scientific.hdf4/1.0.0/authored_temperature_window/temperature.hdf +0 -0
  288. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/scientific.hdf5/1.0.0/authored_temperature_window/expected.json +0 -0
  289. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/scientific.hdf5/1.0.0/authored_temperature_window/temperature.h5 +0 -0
  290. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/scientific.hdf_eos2/1.0.0/authored_grid_temperature_window/expected.json +0 -0
  291. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/scientific.hdf_eos2/1.0.0/authored_grid_temperature_window/nasa-hdfeos2-grid.hdf +0 -0
  292. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/scientific.hdf_eos2/1.0.0/authored_swath_temperature_window/expected.json +0 -0
  293. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/scientific.hdf_eos2/1.0.0/authored_swath_temperature_window/nasa-hdfeos2-swath.hdf +0 -0
  294. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/scientific.netcdf/1.0.0/authored_classic_temperature_window/expected.json +0 -0
  295. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/scientific.netcdf/1.0.0/authored_classic_temperature_window/temperature-classic.nc +0 -0
  296. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/scientific.zarr/1.0.0/authored_v3_temperature_window/expected.json +0 -0
  297. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/scientific.zarr/1.0.0/authored_v3_temperature_window/temperature-zarr-v3.zip +0 -0
  298. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.0.0/an_ordinary_table_beside_a_second_sheet/cities.xlsx +0 -0
  299. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.0.0/an_ordinary_table_beside_a_second_sheet/expected.json +0 -0
  300. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.0.0/shares_the_workbook_had_already_computed/expected.json +0 -0
  301. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.0.0/shares_the_workbook_had_already_computed/shares.xlsx +0 -0
  302. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.1.0/shares_the_workbook_had_already_computed/expected.json +0 -0
  303. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.1.0/shares_the_workbook_had_already_computed/shares.xlsx +0 -0
  304. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/README.md +0 -0
  305. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/gfs_2m_temperature/expected.json +0 -0
  306. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/gfs_2m_temperature/gfs-2m-temperature.grib2 +0 -0
  307. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_2m_temperature/expected.json +0 -0
  308. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_2m_temperature/hrrr-2m-temperature.grib2 +0 -0
  309. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_categorical_rain/expected.json +0 -0
  310. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_categorical_rain/hrrr-categorical-rain.grib2 +0 -0
  311. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/weather.grib2/2.0.0/hrrr_2m_temperature/expected.json +0 -0
  312. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/weather.grib2/2.0.0/hrrr_2m_temperature/hrrr-2m-temperature.grib2 +0 -0
  313. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/weather.grib2/3.0.0/gfs_and_hrrr_categorical_rain/expected.json +0 -0
  314. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/weather.grib2/3.0.0/gfs_and_hrrr_categorical_rain/gfs-and-hrrr-categorical-rain.grib2 +0 -0
  315. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/plain_filing_fact/expected.json +0 -0
  316. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/plain_filing_fact/filing.xml +0 -0
  317. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/xml_inline_fact/expected.json +0 -0
  318. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/xml_inline_fact/filing.xhtml +0 -0
  319. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/pacer_rss_feed/expected.json +0 -0
  320. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/pacer_rss_feed/feed.xml +0 -0
  321. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/sec_form_d_filing/expected.json +0 -0
  322. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/sec_form_d_filing/filing.xml +0 -0
  323. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/unified_agenda_extract/agenda.xml +0 -0
  324. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/unified_agenda_extract/expected.json +0 -0
  325. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples.py +0 -0
  326. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/scientific.py +0 -0
  327. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/scientific_arrays/__init__.py +0 -0
  328. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/scientific_arrays/container.py +0 -0
  329. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/scientific_arrays/goes.py +0 -0
  330. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/scientific_arrays/hdf4.py +0 -0
  331. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/scientific_arrays/hdf4_bridge.py +0 -0
  332. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/scientific_arrays/hdf5.py +0 -0
  333. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/scientific_arrays/native.py +0 -0
  334. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/scientific_arrays/netcdf.py +0 -0
  335. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/scientific_arrays/profiles.py +0 -0
  336. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/scientific_arrays/raw.py +0 -0
  337. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/scientific_arrays/zarr.py +0 -0
  338. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/scientific_catalog.py +0 -0
  339. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/scientific_segmented/__init__.py +0 -0
  340. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/scientific_segmented/asset_sets.py +0 -0
  341. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/scientific_segmented/formats.py +0 -0
  342. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/scientific_segmented/hsd.py +0 -0
  343. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/scientific_segmented/native.py +0 -0
  344. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/scientific_segmented/profiles.py +0 -0
  345. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/scientific_segmented/reader.py +0 -0
  346. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/scientific_segmented/xrit.py +0 -0
  347. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/sdmx_json.py +0 -0
  348. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/spreadsheet.py +0 -0
  349. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/statistical_microdata.py +0 -0
  350. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/tabular.py +0 -0
  351. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/vector.py +0 -0
  352. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/vector_wkb.py +0 -0
  353. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/xbrl_facts.py +0 -0
  354. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/xml_tabular.py +0 -0
  355. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/recipe.py +0 -0
  356. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/review.py +0 -0
  357. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/rowset.py +0 -0
  358. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/run_execution_v4.py +0 -0
  359. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/run_phase_timing.py +0 -0
  360. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/session_probes.py +0 -0
  361. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/signing.py +0 -0
  362. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/skill_assets.py +0 -0
  363. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/source_bootstrap.py +0 -0
  364. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/source_bundle_writer.py +0 -0
  365. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/source_discovery.py +0 -0
  366. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/source_history_candidate_child.py +0 -0
  367. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/source_history_transform_child.py +0 -0
  368. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/source_inventory.py +0 -0
  369. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/source_partition.py +0 -0
  370. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/source_raw_inventory.py +0 -0
  371. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/source_state_index.py +0 -0
  372. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/__init__.py +0 -0
  373. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/_adapter_steps.py +0 -0
  374. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/adapters.py +0 -0
  375. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/authenticated_https.py +0 -0
  376. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/authenticated_https_v2.py +0 -0
  377. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/authenticated_https_v3.py +0 -0
  378. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/cadence.py +0 -0
  379. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/cadence_emission.py +0 -0
  380. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/cadence_history.py +0 -0
  381. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/__init__.py +0 -0
  382. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/admission.py +0 -0
  383. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/authoring.py +0 -0
  384. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/authoring_policy.py +0 -0
  385. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/authoring_shards.py +0 -0
  386. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/bounded_io.py +0 -0
  387. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/channel.py +0 -0
  388. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/channel_client.py +0 -0
  389. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/contracts.py +0 -0
  390. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/coverage.py +0 -0
  391. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/embedding.py +0 -0
  392. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/entry_v2.py +0 -0
  393. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/fill.py +0 -0
  394. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/fill_partitions.py +0 -0
  395. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/fill_staging.py +0 -0
  396. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/gating.py +0 -0
  397. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/generation_receipt.py +0 -0
  398. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/harvest/__init__.py +0 -0
  399. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/harvest/ckan.py +0 -0
  400. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/harvest/datagov_v4.py +0 -0
  401. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/harvest/protocol.py +0 -0
  402. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/harvest/sdmx.py +0 -0
  403. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/harvest/stac.py +0 -0
  404. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/hosted_catalog.py +0 -0
  405. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/identity_history.py +0 -0
  406. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/neural.py +0 -0
  407. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/packed_catalog.py +0 -0
  408. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/packed_retrieval.py +0 -0
  409. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/packed_writer.py +0 -0
  410. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/query_trace.py +0 -0
  411. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/recommend.py +0 -0
  412. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/retrieval.py +0 -0
  413. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/retrieval_manifest.py +0 -0
  414. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/sealed.py +0 -0
  415. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/search.py +0 -0
  416. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/streaming_delta.py +0 -0
  417. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/update.py +0 -0
  418. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/collections.py +0 -0
  419. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/contracts.py +0 -0
  420. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/dataset.py +0 -0
  421. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/deletion.py +0 -0
  422. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/document_projection.py +0 -0
  423. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/fitness.py +0 -0
  424. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/governance.py +0 -0
  425. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/hosted.py +0 -0
  426. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/integration.py +0 -0
  427. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/range_reader.py +0 -0
  428. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/registry.py +0 -0
  429. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/rights_rule.py +0 -0
  430. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/source_cadence_vectors.v1.json +0 -0
  431. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/sports.py +0 -0
  432. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/stream.py +0 -0
  433. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/stream_capture_session.py +0 -0
  434. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/stream_connector.py +0 -0
  435. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/stream_connectors/fixture.cursor-resume.v3.json +0 -0
  436. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-ed25519.v2.json +0 -0
  437. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-hmac.v2.json +0 -0
  438. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-hmac384.v2.json +0 -0
  439. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-hmac512.v2.json +0 -0
  440. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame.v2.json +0 -0
  441. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-header-rsa.v2.json +0 -0
  442. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-header.v2.json +0 -0
  443. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-permessage-jwt.v2.json +0 -0
  444. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-permessage.v2.json +0 -0
  445. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-prelude.v2.json +0 -0
  446. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-query.v2.json +0 -0
  447. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-subprotocol.v2.json +0 -0
  448. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-subscribe.v2.json +0 -0
  449. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-urlpath.v2.json +0 -0
  450. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/stream_connectors/polymarket.clob-market.v1.json +0 -0
  451. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/stream_credential.py +0 -0
  452. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/stream_prelude.py +0 -0
  453. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/stream_recorder.py +0 -0
  454. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/stream_registry.py +0 -0
  455. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/stream_rotation.py +0 -0
  456. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/stream_segment_recorder.py +0 -0
  457. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/stream_signing.py +0 -0
  458. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/stream_transport.py +0 -0
  459. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sql_transform_engine.py +0 -0
  460. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/stream_order_vector.py +0 -0
  461. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/stream_recovery_objects.py +0 -0
  462. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/stream_segment_spill.py +0 -0
  463. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/stream_venue.py +0 -0
  464. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/stream_venue_staging.py +0 -0
  465. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/studio_boundary.py +0 -0
  466. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/table_manifest.py +0 -0
  467. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/table_profile.py +0 -0
  468. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/__init__.py +0 -0
  469. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/acquire.py +0 -0
  470. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/acquire_cancel.py +0 -0
  471. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/approvals.py +0 -0
  472. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/commands.py +0 -0
  473. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/download.py +0 -0
  474. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/narrative.py +0 -0
  475. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/parity.py +0 -0
  476. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/probe.py +0 -0
  477. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/propose.py +0 -0
  478. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/recipe.py +0 -0
  479. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/research.py +0 -0
  480. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/router.py +0 -0
  481. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/runs.py +0 -0
  482. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/session.py +0 -0
  483. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/stream.py +0 -0
  484. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/transport.py +0 -0
  485. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/v4.py +0 -0
  486. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/v4_artifacts.py +0 -0
  487. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/v4_connections.py +0 -0
  488. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/v4_dataset_covers.py +0 -0
  489. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/v4_datasets.py +0 -0
  490. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/v4_handoff.py +0 -0
  491. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/v4_narrative.py +0 -0
  492. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/v4_query.py +0 -0
  493. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/v4_runs.py +0 -0
  494. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/v4_secrets.py +0 -0
  495. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/v4_stream.py +0 -0
  496. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/v4_tables.py +0 -0
  497. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/vocabulary.py +0 -0
  498. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/workers.py +0 -0
  499. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ucum/TABLE-PIN.json +0 -0
  500. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ucum/ucum-subset.v1.json +0 -0
  501. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/unit_flow.py +0 -0
  502. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/units.py +0 -0
  503. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ux/__init__.py +0 -0
  504. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ux/attendance.py +0 -0
  505. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ux/clarification.py +0 -0
  506. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ux/cloud_auth.py +0 -0
  507. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ux/commands/__init__.py +0 -0
  508. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ux/commands/auth.py +0 -0
  509. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ux/commands/catalog_author.py +0 -0
  510. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ux/commands/catalog_harvest.py +0 -0
  511. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ux/commands/catalog_publish.py +0 -0
  512. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ux/commands/clarify.py +0 -0
  513. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ux/commands/login.py +0 -0
  514. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ux/commands/record.py +0 -0
  515. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ux/commands/whoami.py +0 -0
  516. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ux/credential_native.py +0 -0
  517. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ux/credential_store.py +0 -0
  518. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ux/credentials.py +0 -0
  519. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ux/headline.py +0 -0
  520. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ux/hosted_acquisition.py +0 -0
  521. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ux/local_review.py +0 -0
  522. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ux/login.py +0 -0
  523. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ux/path_kind.py +0 -0
  524. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ux/plain_file.py +0 -0
  525. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ux/readers.py +0 -0
  526. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ux/render.py +0 -0
  527. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/v4_acquisition.py +0 -0
  528. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/v4_check_dialect.py +0 -0
  529. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/v4_closed_source.py +0 -0
  530. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/v4_document_pin.py +0 -0
  531. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/v4_reader_pin.py +0 -0
  532. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/v4_recipe.py +0 -0
  533. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/v4_required_controls.py +0 -0
  534. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/v4_snapshot_artifact.py +0 -0
  535. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/v4_stream_recording.py +0 -0
  536. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/v4_transform.py +0 -0
  537. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/v4_window.py +0 -0
  538. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/visual_run/__init__.py +0 -0
  539. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/visual_run/authoring.py +0 -0
  540. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/visual_run/contracts.py +0 -0
  541. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/visual_run/materialize.py +0 -0
  542. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/visual_run/observations.py +0 -0
  543. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/visual_run/reducer.py +0 -0
  544. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/visual_run/sdk.py +0 -0
  545. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/visual_run/store.py +0 -0
  546. {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/visual_run/transport.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mostlyright-data
3
- Version: 0.17.0
3
+ Version: 0.17.1
4
4
  Summary: Mostly Right CLI for reproducible, reviewed Parquet datasets
5
5
  Project-URL: Homepage, https://mostlyright.md/
6
6
  Project-URL: Documentation, https://mostlyright.md/docs/guides/cli/
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "mostlyright-data"
3
- version = "0.17.0"
3
+ version = "0.17.1"
4
4
  description = "Mostly Right CLI for reproducible, reviewed Parquet datasets"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.13,<3.14"
@@ -6,6 +6,7 @@ import contextlib
6
6
  import errno
7
7
  import hashlib
8
8
  import http.client
9
+ import ipaddress
9
10
  import json
10
11
  import math
11
12
  import os
@@ -1127,6 +1128,10 @@ class TransportResponse:
1127
1128
  connected_peer: str
1128
1129
  tls_verified: bool
1129
1130
  hostname_verified: bool
1131
+ proxy_endpoint_id: str | None = None
1132
+ proxy_config_digest: str | None = None
1133
+ gateway_peer: str | None = None
1134
+ tunnel_target: str | None = None
1130
1135
 
1131
1136
  def header(self, name: str) -> str | None:
1132
1137
  wanted = name.lower()
@@ -1171,6 +1176,10 @@ class StreamedTransportResponse:
1171
1176
  connected_peer: str
1172
1177
  tls_verified: bool
1173
1178
  hostname_verified: bool
1179
+ proxy_endpoint_id: str | None = None
1180
+ proxy_config_digest: str | None = None
1181
+ gateway_peer: str | None = None
1182
+ tunnel_target: str | None = None
1174
1183
 
1175
1184
  def header(self, name: str) -> str | None:
1176
1185
  return TransportResponse(
@@ -1183,6 +1192,85 @@ class StreamedTransportResponse:
1183
1192
  ).header(name)
1184
1193
 
1185
1194
 
1195
+ @dataclass(frozen=True)
1196
+ class ConnectProxyMember:
1197
+ """One trusted internal CONNECT gateway selected for a public acquisition."""
1198
+
1199
+ endpoint_id: str
1200
+ host: str
1201
+ port: int
1202
+
1203
+ def __post_init__(self) -> None:
1204
+ if (
1205
+ not isinstance(self.endpoint_id, str)
1206
+ or re.fullmatch(r"[a-z][a-z0-9-]{0,63}", self.endpoint_id) is None
1207
+ ):
1208
+ raise AcquisitionSecurityError("CONNECT_PROXY_CONFIG", "proxy endpoint id is invalid")
1209
+ if not isinstance(self.host, str):
1210
+ raise AcquisitionSecurityError(
1211
+ "CONNECT_PROXY_CONFIG", "proxy host must be an IP literal"
1212
+ )
1213
+ try:
1214
+ address = ipaddress.ip_address(self.host)
1215
+ except ValueError:
1216
+ raise AcquisitionSecurityError(
1217
+ "CONNECT_PROXY_CONFIG", "proxy host must be an IP literal"
1218
+ ) from None
1219
+ private_networks = (
1220
+ ipaddress.ip_network("10.0.0.0/8"),
1221
+ ipaddress.ip_network("172.16.0.0/12"),
1222
+ ipaddress.ip_network("192.168.0.0/16"),
1223
+ )
1224
+ if address.version != 4 or not any(address in network for network in private_networks):
1225
+ raise AcquisitionSecurityError(
1226
+ "CONNECT_PROXY_CONFIG", "proxy host must be a private IPv4 address"
1227
+ )
1228
+ if type(self.port) is not int or self.port != 3128:
1229
+ raise AcquisitionSecurityError("CONNECT_PROXY_CONFIG", "proxy port must be 3128")
1230
+
1231
+
1232
+ @dataclass(frozen=True)
1233
+ class ConnectProxyPool:
1234
+ """Closed, trusted runtime configuration for the V4 public-fetch gateway pool."""
1235
+
1236
+ pool_id: str
1237
+ members: tuple[ConnectProxyMember, ...]
1238
+ config_digest: str
1239
+
1240
+ @classmethod
1241
+ def from_mapping(cls, value: Mapping[str, object]) -> ConnectProxyPool:
1242
+ expected = {"schema_version", "pool_id", "members", "selection"}
1243
+ if (
1244
+ set(value) != expected
1245
+ or value.get("schema_version") != "mostlyright-fetch-egress-pool.v1"
1246
+ ):
1247
+ raise AcquisitionSecurityError(
1248
+ "CONNECT_PROXY_CONFIG", "proxy pool configuration is invalid"
1249
+ )
1250
+ if (
1251
+ value.get("pool_id") != "fetch-egress-v1"
1252
+ or value.get("selection") != "per-attempt-sticky"
1253
+ ):
1254
+ raise AcquisitionSecurityError(
1255
+ "CONNECT_PROXY_CONFIG", "proxy pool identity or selection is invalid"
1256
+ )
1257
+ raw_members = value.get("members")
1258
+ if not isinstance(raw_members, list) or not 1 <= len(raw_members) <= 16:
1259
+ raise AcquisitionSecurityError("CONNECT_PROXY_CONFIG", "proxy pool members are invalid")
1260
+ members: list[ConnectProxyMember] = []
1261
+ for raw in raw_members:
1262
+ if not isinstance(raw, dict) or set(raw) != {"id", "host", "port"}:
1263
+ raise AcquisitionSecurityError("CONNECT_PROXY_CONFIG", "proxy member is invalid")
1264
+ members.append(ConnectProxyMember(raw["id"], raw["host"], raw["port"]))
1265
+ if len({member.endpoint_id for member in members}) != len(members):
1266
+ raise AcquisitionSecurityError(
1267
+ "CONNECT_PROXY_CONFIG", "proxy member ids must be unique"
1268
+ )
1269
+ if len({(member.host, member.port) for member in members}) != len(members):
1270
+ raise AcquisitionSecurityError("CONNECT_PROXY_CONFIG", "proxy endpoints must be unique")
1271
+ return cls("fetch-egress-v1", tuple(members), canonical_sha256(dict(value)))
1272
+
1273
+
1186
1274
  class PinnedTransport(Protocol):
1187
1275
  def request(
1188
1276
  self,
@@ -1191,6 +1279,8 @@ class PinnedTransport(Protocol):
1191
1279
  approved_ip: str,
1192
1280
  headers: Mapping[str, str],
1193
1281
  limits: RetrievalLimits,
1282
+ connect_proxy: ConnectProxyMember | None = None,
1283
+ connect_proxy_config_digest: str | None = None,
1194
1284
  byte_range: ByteRange | None = None,
1195
1285
  method: str = "GET",
1196
1286
  body: bytes | None = None,
@@ -1348,12 +1438,16 @@ class RetrievalHop:
1348
1438
  # set to rederive ``resolution_digest`` without either repeating the request or receiving the
1349
1439
  # credential, so the pinned retriever retains it alongside (but not inside) ``to_dict``.
1350
1440
  approved_ips: tuple[str, ...] = ()
1441
+ proxy_endpoint_id: str | None = None
1442
+ proxy_config_digest: str | None = None
1443
+ gateway_peer: str | None = None
1444
+ tunnel_target: str | None = None
1351
1445
 
1352
1446
  def to_dict(self) -> dict[str, object]:
1353
1447
  # Both range keys are always present, ``None`` when the hop ordered no slice, so a hop
1354
1448
  # has exactly one shape rather than two and the digest below covers the same fields on
1355
1449
  # every acquisition.
1356
- return {
1450
+ result: dict[str, object] = {
1357
1451
  "url": self.url,
1358
1452
  "resolution_digest": self.resolution_digest,
1359
1453
  "connected_peer": self.connected_peer,
@@ -1367,6 +1461,14 @@ class RetrievalHop:
1367
1461
  "last_modified": self.last_modified,
1368
1462
  "peer_attempts": [attempt.to_dict() for attempt in self.peer_attempts],
1369
1463
  }
1464
+ if self.proxy_endpoint_id is not None:
1465
+ result["connect_proxy"] = {
1466
+ "endpoint_id": self.proxy_endpoint_id,
1467
+ "config_digest": self.proxy_config_digest,
1468
+ "gateway_peer": self.gateway_peer,
1469
+ "tunnel_target": self.tunnel_target,
1470
+ }
1471
+ return result
1370
1472
 
1371
1473
  def authenticated_attestation_dict(self) -> dict[str, object]:
1372
1474
  """Return the complete secret-free facts proved by the pinned HTTPS boundary."""
@@ -1689,6 +1791,8 @@ class PinnedHttpsRetriever:
1689
1791
  egress_policy: EgressPolicy,
1690
1792
  transport: PinnedTransport,
1691
1793
  limits: RetrievalLimits,
1794
+ connect_proxy: ConnectProxyMember | None = None,
1795
+ connect_proxy_config_digest: str | None = None,
1692
1796
  limiter: AcquisitionLimiter | None = None,
1693
1797
  clock: Callable[[], float] = time.monotonic,
1694
1798
  sleep: Callable[[float], None] = time.sleep,
@@ -1707,6 +1811,12 @@ class PinnedHttpsRetriever:
1707
1811
  self._egress_policy = egress_policy
1708
1812
  self._transport = transport
1709
1813
  self._limits = limits
1814
+ if (connect_proxy is None) != (connect_proxy_config_digest is None):
1815
+ raise AcquisitionSecurityError(
1816
+ "CONNECT_PROXY_CONFIG", "proxy member and digest must be paired"
1817
+ )
1818
+ self._connect_proxy = connect_proxy
1819
+ self._connect_proxy_config_digest = connect_proxy_config_digest
1710
1820
  self._limiter = limiter or AcquisitionLimiter(
1711
1821
  max_concurrency=limits.max_concurrency,
1712
1822
  min_interval_seconds=limits.min_interval_seconds,
@@ -1794,6 +1904,8 @@ class PinnedHttpsRetriever:
1794
1904
  egress_policy=self._egress_policy,
1795
1905
  transport=self._transport,
1796
1906
  limits=effective,
1907
+ connect_proxy=self._connect_proxy,
1908
+ connect_proxy_config_digest=self._connect_proxy_config_digest,
1797
1909
  limiter=self._limiter,
1798
1910
  clock=self._clock,
1799
1911
  )
@@ -1877,7 +1989,8 @@ class PinnedHttpsRetriever:
1877
1989
  }
1878
1990
  response: StreamedTransportResponse | None = None
1879
1991
  attempts: list[PeerAttempt] = []
1880
- for ip in target.approved_ips:
1992
+ peer_candidates = self._peer_candidates(target)
1993
+ for ip in peer_candidates:
1881
1994
  if requests >= self._limits.max_requests:
1882
1995
  raise PeerAttemptError(
1883
1996
  "REQUEST_LIMIT",
@@ -1917,7 +2030,7 @@ class PinnedHttpsRetriever:
1917
2030
  )
1918
2031
  if (
1919
2032
  exc.code == "TRANSPORT_FAILURE"
1920
- and ip != target.approved_ips[-1]
2033
+ and ip != peer_candidates[-1]
1921
2034
  and aggregate < self._limits.max_aggregate_response_bytes
1922
2035
  ):
1923
2036
  # A failed peer may already have copied an unauthenticated prefix to
@@ -1966,7 +2079,7 @@ class PinnedHttpsRetriever:
1966
2079
  tuple(attempts),
1967
2080
  hops=tuple(hops),
1968
2081
  )
1969
- peer = require_approved_peer(target, response.connected_peer)
2082
+ peer = self._require_response_peer(target, response, ip)
1970
2083
  normalized = _validate_response_headers(response.headers)
1971
2084
  content_length = response.header("content-length")
1972
2085
  if content_length is not None and (
@@ -1999,6 +2112,10 @@ class PinnedHttpsRetriever:
1999
2112
  last_modified=response.header("last-modified"),
2000
2113
  peer_attempts=tuple(attempts),
2001
2114
  approved_ips=target.approved_ips,
2115
+ proxy_endpoint_id=response.proxy_endpoint_id,
2116
+ proxy_config_digest=response.proxy_config_digest,
2117
+ gateway_peer=response.gateway_peer,
2118
+ tunnel_target=response.tunnel_target,
2002
2119
  )
2003
2120
  hops.append(hop)
2004
2121
  if response.status in REDIRECT_STATUSES:
@@ -2264,7 +2381,8 @@ class PinnedHttpsRetriever:
2264
2381
  headers[name] = value
2265
2382
  peer_attempts: list[PeerAttempt] = []
2266
2383
  response: TransportResponse | None = None
2267
- for approved_ip in target.approved_ips:
2384
+ peer_candidates = self._peer_candidates(target)
2385
+ for approved_ip in peer_candidates:
2268
2386
  if requests >= self._limits.max_requests:
2269
2387
  raise PeerAttemptError(
2270
2388
  "REQUEST_LIMIT",
@@ -2381,7 +2499,7 @@ class PinnedHttpsRetriever:
2381
2499
  if (
2382
2500
  failure_code == "TRANSPORT_FAILURE"
2383
2501
  and not aggregate_exhausted
2384
- and approved_ip != target.approved_ips[-1]
2502
+ and approved_ip != peer_candidates[-1]
2385
2503
  ):
2386
2504
  continue
2387
2505
  if failure_code == "TRANSPORT_FAILURE" and aggregate_exhausted:
@@ -2451,7 +2569,7 @@ class PinnedHttpsRetriever:
2451
2569
  hops,
2452
2570
  )
2453
2571
  try:
2454
- peer = require_approved_peer(target, response.connected_peer)
2572
+ peer = self._require_response_peer(target, response, approved_ip)
2455
2573
  normalized_headers = _validate_response_headers(response.headers)
2456
2574
  except AcquisitionSecurityError as exc:
2457
2575
  self._raise_peer_failure(exc.code, exc.detail, peer_attempts, hops)
@@ -2543,6 +2661,10 @@ class PinnedHttpsRetriever:
2543
2661
  ),
2544
2662
  peer_attempts=tuple(peer_attempts),
2545
2663
  approved_ips=target.approved_ips,
2664
+ proxy_endpoint_id=response.proxy_endpoint_id,
2665
+ proxy_config_digest=response.proxy_config_digest,
2666
+ gateway_peer=response.gateway_peer,
2667
+ tunnel_target=response.tunnel_target,
2546
2668
  )
2547
2669
  )
2548
2670
  raise NotModified(
@@ -2609,6 +2731,10 @@ class PinnedHttpsRetriever:
2609
2731
  last_modified=self._response_header(response, "last-modified", peer_attempts, hops),
2610
2732
  peer_attempts=tuple(peer_attempts),
2611
2733
  approved_ips=target.approved_ips,
2734
+ proxy_endpoint_id=response.proxy_endpoint_id,
2735
+ proxy_config_digest=response.proxy_config_digest,
2736
+ gateway_peer=response.gateway_peer,
2737
+ tunnel_target=response.tunnel_target,
2612
2738
  )
2613
2739
  hops.append(hop)
2614
2740
  # The delivery check. A slice is delivered only when the server answered 206,
@@ -2800,6 +2926,49 @@ class PinnedHttpsRetriever:
2800
2926
  total_timeout_seconds=remaining,
2801
2927
  )
2802
2928
 
2929
+ def _require_response_peer(
2930
+ self,
2931
+ target: ValidatedTarget,
2932
+ response: TransportResponse | StreamedTransportResponse,
2933
+ approved_ip: str,
2934
+ ) -> str:
2935
+ """Bind direct peers normally and gateway tunnels to the selected trusted member."""
2936
+
2937
+ if self._connect_proxy is None:
2938
+ if response.proxy_endpoint_id is not None:
2939
+ raise AcquisitionSecurityError(
2940
+ "CONNECT_PROXY_EVIDENCE", "direct transport reported proxy evidence"
2941
+ )
2942
+ return require_approved_peer(target, response.connected_peer)
2943
+ member = self._connect_proxy
2944
+ if (
2945
+ response.proxy_endpoint_id != member.endpoint_id
2946
+ or response.proxy_config_digest != self._connect_proxy_config_digest
2947
+ or response.gateway_peer != member.host
2948
+ or response.connected_peer != member.host
2949
+ or response.tunnel_target != approved_ip
2950
+ ):
2951
+ raise AcquisitionSecurityError(
2952
+ "CONNECT_PROXY_EVIDENCE",
2953
+ "gateway tunnel evidence does not bind the selected proxy and target",
2954
+ )
2955
+ return member.host
2956
+
2957
+ def _peer_candidates(self, target: ValidatedTarget) -> tuple[str, ...]:
2958
+ """The pinned peers this concrete transport can actually tunnel to."""
2959
+
2960
+ if self._connect_proxy is None:
2961
+ return target.approved_ips
2962
+ candidates = tuple(
2963
+ address for address in target.approved_ips if ipaddress.ip_address(address).version == 4
2964
+ )
2965
+ if not candidates:
2966
+ raise AcquisitionSecurityError(
2967
+ "CONNECT_PROXY_TARGET_FAMILY",
2968
+ "the selected IPv4 gateway cannot tunnel an IPv6-only target",
2969
+ )
2970
+ return candidates
2971
+
2803
2972
  @staticmethod
2804
2973
  def _raise_peer_failure(
2805
2974
  code: str,
@@ -2885,10 +3054,60 @@ class _PinnedHTTPSConnection(http.client.HTTPSConnection):
2885
3054
  raise
2886
3055
 
2887
3056
 
3057
+ class _PinnedProxyHTTPSConnection(http.client.HTTPSConnection):
3058
+ """CONNECT through one private gateway to an exact resolver-approved IPv4 target."""
3059
+
3060
+ def __init__(
3061
+ self,
3062
+ *,
3063
+ hostname: str,
3064
+ approved_ip: str,
3065
+ proxy: ConnectProxyMember,
3066
+ timeout: float,
3067
+ context: ssl.SSLContext,
3068
+ ) -> None:
3069
+ super().__init__(host=hostname, port=443, timeout=timeout, context=context)
3070
+ self._approved_ip = approved_ip
3071
+ self._proxy = proxy
3072
+ self.gateway_peer: str | None = None
3073
+
3074
+ def connect(self) -> None:
3075
+ raw_socket = socket.create_connection(
3076
+ (self._proxy.host, self._proxy.port), timeout=self.timeout
3077
+ )
3078
+ try:
3079
+ peer = ipaddress.ip_address(raw_socket.getpeername()[0]).compressed
3080
+ if peer != self._proxy.host:
3081
+ raise AcquisitionSecurityError(
3082
+ "CONNECT_PROXY_PEER", "gateway peer did not match selected proxy"
3083
+ )
3084
+ authority = f"{self._approved_ip}:443"
3085
+ raw_socket.sendall(
3086
+ f"CONNECT {authority} HTTP/1.1\r\nHost: {authority}\r\n\r\n".encode("ascii")
3087
+ )
3088
+ response = http.client.HTTPResponse(raw_socket)
3089
+ response.begin()
3090
+ if response.status != 200:
3091
+ raise AcquisitionSecurityError(
3092
+ "CONNECT_PROXY_STATUS", "gateway refused the pinned tunnel"
3093
+ )
3094
+ self.gateway_peer = peer
3095
+ self.sock = self._context.wrap_socket(raw_socket, server_hostname=self.host)
3096
+ except BaseException:
3097
+ raw_socket.close()
3098
+ raise
3099
+
3100
+
2888
3101
  class StdlibPinnedTransport:
2889
3102
  """Production transport with no environment-proxy integration or connection pooling."""
2890
3103
 
2891
- def __init__(self, *, ssl_context: ssl.SSLContext | None = None) -> None:
3104
+ def __init__(
3105
+ self,
3106
+ *,
3107
+ ssl_context: ssl.SSLContext | None = None,
3108
+ connect_proxy: ConnectProxyMember | None = None,
3109
+ connect_proxy_config_digest: str | None = None,
3110
+ ) -> None:
2892
3111
  self._context = ssl_context or ssl.create_default_context()
2893
3112
  if (
2894
3113
  self._context.check_hostname is not True
@@ -2898,6 +3117,54 @@ class StdlibPinnedTransport:
2898
3117
  "TLS_CONTEXT",
2899
3118
  "TLS context must require certificate and hostname verification",
2900
3119
  )
3120
+ if (connect_proxy is None) != (connect_proxy_config_digest is None):
3121
+ raise AcquisitionSecurityError(
3122
+ "CONNECT_PROXY_CONFIG", "proxy member and digest must be paired"
3123
+ )
3124
+ self._connect_proxy = connect_proxy
3125
+ self._connect_proxy_config_digest = connect_proxy_config_digest
3126
+
3127
+ def _connection(
3128
+ self, target: ValidatedTarget, approved_ip: str, timeout: float
3129
+ ) -> http.client.HTTPSConnection:
3130
+ if self._connect_proxy is None:
3131
+ return _PinnedHTTPSConnection(
3132
+ hostname=target.hostname,
3133
+ approved_ip=approved_ip,
3134
+ port=target.port,
3135
+ timeout=timeout,
3136
+ context=self._context,
3137
+ )
3138
+ return _PinnedProxyHTTPSConnection(
3139
+ hostname=target.hostname,
3140
+ approved_ip=approved_ip,
3141
+ proxy=self._connect_proxy,
3142
+ timeout=timeout,
3143
+ context=self._context,
3144
+ )
3145
+
3146
+ def _evidence(
3147
+ self, connection: http.client.HTTPSConnection, approved_ip: str
3148
+ ) -> tuple[str, str | None, str | None, str | None, str | None]:
3149
+ if self._connect_proxy is None:
3150
+ peer = getattr(connection, "connected_peer", None)
3151
+ if peer is None:
3152
+ raise AcquisitionSecurityError(
3153
+ "PEER_ADDRESS", "transport did not record its connected peer"
3154
+ )
3155
+ return peer, None, None, None, None
3156
+ peer = getattr(connection, "gateway_peer", None)
3157
+ if peer is None:
3158
+ raise AcquisitionSecurityError(
3159
+ "CONNECT_PROXY_PEER", "transport did not record its gateway peer"
3160
+ )
3161
+ return (
3162
+ peer,
3163
+ self._connect_proxy.endpoint_id,
3164
+ self._connect_proxy_config_digest,
3165
+ peer,
3166
+ approved_ip,
3167
+ )
2901
3168
 
2902
3169
  def request(
2903
3170
  self,
@@ -2914,12 +3181,8 @@ class StdlibPinnedTransport:
2914
3181
  if byte_range is not None:
2915
3182
  outgoing["Range"] = byte_range.header_value
2916
3183
  attempt_deadline = time.monotonic() + limits.total_timeout_seconds
2917
- connection = _PinnedHTTPSConnection(
2918
- hostname=target.hostname,
2919
- approved_ip=approved_ip,
2920
- port=target.port,
2921
- timeout=min(limits.connect_timeout_seconds, limits.total_timeout_seconds),
2922
- context=self._context,
3184
+ connection = self._connection(
3185
+ target, approved_ip, min(limits.connect_timeout_seconds, limits.total_timeout_seconds)
2923
3186
  )
2924
3187
  total = 0
2925
3188
  try:
@@ -2971,12 +3234,9 @@ class StdlibPinnedTransport:
2971
3234
  "response exceeded the configured byte limit",
2972
3235
  )
2973
3236
  chunks.append(chunk)
2974
- peer = connection.connected_peer
2975
- if peer is None:
2976
- raise AcquisitionSecurityError(
2977
- "PEER_ADDRESS",
2978
- "transport did not record its connected peer",
2979
- )
3237
+ peer, proxy_id, proxy_digest, gateway_peer, tunnel_target = self._evidence(
3238
+ connection, approved_ip
3239
+ )
2980
3240
  return TransportResponse(
2981
3241
  status=response.status,
2982
3242
  headers=raw_headers,
@@ -2984,6 +3244,10 @@ class StdlibPinnedTransport:
2984
3244
  connected_peer=peer,
2985
3245
  tls_verified=True,
2986
3246
  hostname_verified=True,
3247
+ proxy_endpoint_id=proxy_id,
3248
+ proxy_config_digest=proxy_digest,
3249
+ gateway_peer=gateway_peer,
3250
+ tunnel_target=tunnel_target,
2987
3251
  )
2988
3252
  except ssl.SSLError as exc:
2989
3253
  raise AcquisitionSecurityError(
@@ -3030,12 +3294,8 @@ class StdlibPinnedTransport:
3030
3294
  carried by ``TransportFailureError`` for retry accounting.
3031
3295
  """
3032
3296
  deadline = time.monotonic() + limits.total_timeout_seconds
3033
- connection = _PinnedHTTPSConnection(
3034
- hostname=target.hostname,
3035
- approved_ip=approved_ip,
3036
- port=target.port,
3037
- timeout=min(limits.connect_timeout_seconds, limits.total_timeout_seconds),
3038
- context=self._context,
3297
+ connection = self._connection(
3298
+ target, approved_ip, min(limits.connect_timeout_seconds, limits.total_timeout_seconds)
3039
3299
  )
3040
3300
  total = 0
3041
3301
  digest = hashlib.sha256()
@@ -3079,13 +3339,21 @@ class StdlibPinnedTransport:
3079
3339
  )
3080
3340
  digest.update(chunk)
3081
3341
  sink(chunk)
3082
- peer = connection.connected_peer
3083
- if peer is None:
3084
- raise AcquisitionSecurityError(
3085
- "PEER_ADDRESS", "transport did not record its connected peer"
3086
- )
3342
+ peer, proxy_id, proxy_digest, gateway_peer, tunnel_target = self._evidence(
3343
+ connection, approved_ip
3344
+ )
3087
3345
  return StreamedTransportResponse(
3088
- response.status, raw_headers, total, digest.hexdigest(), peer, True, True
3346
+ response.status,
3347
+ raw_headers,
3348
+ total,
3349
+ digest.hexdigest(),
3350
+ peer,
3351
+ True,
3352
+ True,
3353
+ proxy_id,
3354
+ proxy_digest,
3355
+ gateway_peer,
3356
+ tunnel_target,
3089
3357
  )
3090
3358
  except http.client.IncompleteRead as exc:
3091
3359
  partial = exc.partial if isinstance(exc.partial, bytes) else bytes(exc.partial)