mostlyright-data 0.16.0__tar.gz → 0.16.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (542) hide show
  1. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/PKG-INFO +1 -1
  2. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/pyproject.toml +1 -1
  3. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/acquisition/http.py +54 -12
  4. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/acquisition/parsing.py +209 -0
  5. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/acquisition/sandbox.py +34 -8
  6. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/formats.py +36 -10
  7. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/hosted_crawler_fetch.py +12 -3
  8. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/hosted_crawler_protocol.py +2 -1
  9. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/hosted_run_worker.py +1247 -111
  10. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/incremental_slice_executor.py +87 -28
  11. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/inprocess_acquisition.py +160 -44
  12. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/run_execution_v4.py +140 -14
  13. mostlyright_data-0.16.2/src/mostlyright/data_harness/run_phase_timing.py +57 -0
  14. mostlyright_data-0.16.2/src/mostlyright/data_harness/source_collection_bundle.py +154 -0
  15. mostlyright_data-0.16.2/src/mostlyright/data_harness/source_collection_contract.py +62 -0
  16. mostlyright_data-0.16.2/src/mostlyright/data_harness/source_collection_inputs.py +148 -0
  17. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/registry.py +11 -1
  18. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sql_transform_engine.py +28 -2
  19. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/studio_boundary.py +1 -1
  20. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/v4_closed_source.py +3 -0
  21. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/v4_stream_recording.py +249 -37
  22. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/.gitignore +0 -0
  23. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/README.md +0 -0
  24. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/scripts/hatch_build.py +0 -0
  25. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/skills/mr-data-build/SKILL.md +0 -0
  26. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/skills/mr-data-build/agents/openai.yaml +0 -0
  27. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/skills/mr-data-build/scripts/write_research_notebook.py +0 -0
  28. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/skills/mr-data-build/scripts/write_visual_run.py +0 -0
  29. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/__init__.py +0 -0
  30. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/LICENSE +0 -0
  31. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/PROVENANCE.json +0 -0
  32. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/__init__.py +0 -0
  33. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/__init__.pyi +0 -0
  34. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/_version.py +0 -0
  35. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/cal_rec_boxes/__init__.py +0 -0
  36. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/cal_rec_boxes/main.py +0 -0
  37. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_cls/__init__.py +0 -0
  38. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_cls/main.py +0 -0
  39. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_cls/utils.py +0 -0
  40. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_det/__init__.py +0 -0
  41. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_det/main.py +0 -0
  42. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_det/utils.py +0 -0
  43. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/__init__.py +0 -0
  44. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/main.py +0 -0
  45. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/typings.py +0 -0
  46. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/utils.py +0 -0
  47. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/config.yaml +0 -0
  48. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/inference_engine/__init__.py +0 -0
  49. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/inference_engine/base.py +0 -0
  50. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/inference_engine/onnxruntime/__init__.py +0 -0
  51. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/inference_engine/onnxruntime/main.py +0 -0
  52. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/inference_engine/onnxruntime/provider_config.py +0 -0
  53. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/main.py +0 -0
  54. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/models/PP-OCRv6_det_small.onnx +0 -0
  55. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/models/PP-OCRv6_rec_small.onnx +0 -0
  56. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/models/ch_ppocr_mobile_v2.0_cls_mobile.onnx +0 -0
  57. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/py.typed +0 -0
  58. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/utils/__init__.py +0 -0
  59. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/utils/load_image.py +0 -0
  60. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/utils/log.py +0 -0
  61. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/utils/model_resolver.py +0 -0
  62. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/utils/output.py +0 -0
  63. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/utils/parse_parameters.py +0 -0
  64. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/utils/process_img.py +0 -0
  65. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/utils/typings.py +0 -0
  66. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/utils/utils.py +0 -0
  67. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/__init__.py +0 -0
  68. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/acquisition/__init__.py +0 -0
  69. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/acquisition/derived_credentials.py +0 -0
  70. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/acquisition/ranges.py +0 -0
  71. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/acquisition/result_download.py +0 -0
  72. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/acquisition/retention_admission.py +0 -0
  73. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/acquisition/sandbox_bootstrap.py +0 -0
  74. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/acquisition/url_policy.py +0 -0
  75. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/agent_runtime.py +0 -0
  76. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/assets/logo-ink.svg +0 -0
  77. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/backends/__init__.py +0 -0
  78. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/backends/pandas_backend.py +0 -0
  79. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/backends/polars_backend.py +0 -0
  80. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/backends/protocol.py +0 -0
  81. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/backends/reference.py +0 -0
  82. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/backends/registry.py +0 -0
  83. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/backends/restrictions.py +0 -0
  84. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/bounded_query.py +0 -0
  85. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/bounded_scratch_sink.py +0 -0
  86. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/canonical.py +0 -0
  87. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/catalog_job.py +0 -0
  88. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/cli.py +0 -0
  89. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/compact_worker.py +0 -0
  90. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/contracts.py +0 -0
  91. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/coordinator.py +0 -0
  92. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/crosswalks.py +0 -0
  93. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/declared_checks.py +0 -0
  94. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/deploy.py +0 -0
  95. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/deploy_target.py +0 -0
  96. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/deployment_evidence.py +0 -0
  97. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/documents/__init__.py +0 -0
  98. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/documents/_worker_capability.py +0 -0
  99. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/documents/capture.py +0 -0
  100. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/documents/contracts.py +0 -0
  101. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/documents/lane.py +0 -0
  102. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/documents/ocr.py +0 -0
  103. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/documents/pdf.py +0 -0
  104. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/documents/registry.py +0 -0
  105. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/documents/sandbox.py +0 -0
  106. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/documents/selections.py +0 -0
  107. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/documents/tables.py +0 -0
  108. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/documents/vendor_rapidocr.py +0 -0
  109. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/events.py +0 -0
  110. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/fast_delimited.py +0 -0
  111. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/governors.py +0 -0
  112. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/hosted_bootstrap.py +0 -0
  113. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/hosted_crawler.py +0 -0
  114. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/hosted_crawler_container_smoke.py +0 -0
  115. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/hosted_crawler_job.py +0 -0
  116. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/hosted_deploy.py +0 -0
  117. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/hosted_ingestion_contract.py +0 -0
  118. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/hosted_ingestion_job.py +0 -0
  119. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/hosted_ingestion_job_smoke.py +0 -0
  120. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/hosted_ingestion_worker.py +0 -0
  121. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/hosted_rlimit_as_container_smoke.py +0 -0
  122. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/hosted_session_container_smoke.py +0 -0
  123. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/hosted_session_worker.py +0 -0
  124. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/hosted_session_worker_job_smoke.py +0 -0
  125. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/hosted_stream_recorder_container_smoke.py +0 -0
  126. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/hosted_stream_recorder_job.py +0 -0
  127. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/hosted_stream_subscription_container_smoke.py +0 -0
  128. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/hosted_stream_subscription_worker.py +0 -0
  129. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/hosted_worker.py +0 -0
  130. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/incremental_worker.py +0 -0
  131. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ingestion/__init__.py +0 -0
  132. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ingestion/contracts.py +0 -0
  133. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ingestion/faults.py +0 -0
  134. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ingestion/gcs_store.py +0 -0
  135. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ingestion/spool.py +0 -0
  136. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ingestion/store.py +0 -0
  137. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/key_seam.py +0 -0
  138. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/linux_process_boundary.py +0 -0
  139. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/local_contracts.py +0 -0
  140. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/nbrender/CONTRACT.md +0 -0
  141. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/nbrender/__init__.py +0 -0
  142. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/nbrender/chrome.py +0 -0
  143. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/nbrender/code_body.py +0 -0
  144. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/nbrender/document.py +0 -0
  145. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/nbrender/frame.py +0 -0
  146. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/nbrender/interactive.py +0 -0
  147. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/nbrender/markdown_body.py +0 -0
  148. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/nbrender/mr_components.py +0 -0
  149. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/nbrender/outputs_data.py +0 -0
  150. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/nbrender/outputs_rich.py +0 -0
  151. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/nbrender/outputs_source.py +0 -0
  152. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/nbrender/outputs_stage.py +0 -0
  153. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/nbrender/outputs_text.py +0 -0
  154. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/nbrender/parse.py +0 -0
  155. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/nbrender/status.py +0 -0
  156. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/nbrender/tokens.py +0 -0
  157. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/notebook.py +0 -0
  158. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/offline.py +0 -0
  159. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/operation_registry.py +0 -0
  160. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/operator_setup.py +0 -0
  161. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/part_check_evidence.py +0 -0
  162. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/pipeline.py +0 -0
  163. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/plan_graph.py +0 -0
  164. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/preparation/__init__.py +0 -0
  165. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/preparation/contracts.py +0 -0
  166. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/preparation/engine.py +0 -0
  167. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/preparation/errors.py +0 -0
  168. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/preparation/gates.py +0 -0
  169. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/preparation/joins.py +0 -0
  170. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/preparation/profile.py +0 -0
  171. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/preparation/table.py +0 -0
  172. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/preparation/transforms.py +0 -0
  173. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/progress_events.py +0 -0
  174. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/__init__.py +0 -0
  175. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/_openpyxl.py +0 -0
  176. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/budgets.py +0 -0
  177. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/containers.py +0 -0
  178. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/contracts.py +0 -0
  179. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/delimited.py +0 -0
  180. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/geojson_vector.py +0 -0
  181. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/geopackage.py +0 -0
  182. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/geoparquet.py +0 -0
  183. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/grib2/__init__.py +0 -0
  184. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/grib2/admission.py +0 -0
  185. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/grib2/collection.py +0 -0
  186. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/grib2/collection_reader.py +0 -0
  187. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/grib2/decode.py +0 -0
  188. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/grib2/geometry.py +0 -0
  189. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/grib2/portable_math.py +0 -0
  190. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/grib_eccodes.py +0 -0
  191. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/html_tabular.py +0 -0
  192. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/html_web_extract.py +0 -0
  193. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/json_tabular.py +0 -0
  194. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/parquet_tabular.py +0 -0
  195. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/pcaxis_px.py +0 -0
  196. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/protobuf_tabular.py +0 -0
  197. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/raster/__init__.py +0 -0
  198. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/raster/_bytes.py +0 -0
  199. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/raster/decode.py +0 -0
  200. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/raster/family.py +0 -0
  201. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/raster/jpeg2000.py +0 -0
  202. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/raster/profiles.py +0 -0
  203. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/raster/rendered.py +0 -0
  204. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/raster/safe.py +0 -0
  205. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/raster/sentinel_safe.py +0 -0
  206. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/raster/tiff.py +0 -0
  207. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/registry.py +0 -0
  208. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/README.md +0 -0
  209. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.0.0/cities_one_stream/cities.csv.gz +0 -0
  210. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.0.0/cities_one_stream/expected.json +0 -0
  211. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.1.0/cities_one_stream/cities.csv.gz +0 -0
  212. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.1.0/cities_one_stream/expected.json +0 -0
  213. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/archive.tar/1.0.0/cities_beside_a_directory_entry/cities.tar +0 -0
  214. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/archive.tar/1.0.0/cities_beside_a_directory_entry/expected.json +0 -0
  215. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/archive.tar/1.1.0/cities_beside_a_directory_entry/cities.tar +0 -0
  216. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/archive.tar/1.1.0/cities_beside_a_directory_entry/expected.json +0 -0
  217. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/archive.zip/1.0.0/cities_beside_a_second_member/cities.zip +0 -0
  218. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/archive.zip/1.0.0/cities_beside_a_second_member/expected.json +0 -0
  219. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/archive.zip/1.1.0/dwd_semicolon_station_member/dwd-station.zip +0 -0
  220. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/archive.zip/1.1.0/dwd_semicolon_station_member/expected.json +0 -0
  221. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/archive.zip/1.2.0/dwd_semicolon_station_member/dwd-station.zip +0 -0
  222. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/archive.zip/1.2.0/dwd_semicolon_station_member/expected.json +0 -0
  223. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/an_ordinary_comma_separated_table/cities.csv +0 -0
  224. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/an_ordinary_comma_separated_table/expected.json +0 -0
  225. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/quoted_fields_holding_the_delimiter/cities.tsv +0 -0
  226. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/quoted_fields_holding_the_delimiter/expected.json +0 -0
  227. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/delimited_text/1.1.0/an_hourly_observation_table_served_as_plain_text/expected.json +0 -0
  228. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/delimited_text/1.1.0/an_hourly_observation_table_served_as_plain_text/observations.csv +0 -0
  229. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/geojson.vector/1.0.0/czech_capital/expected.json +0 -0
  230. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/geojson.vector/1.0.0/czech_capital/places.geojson +0 -0
  231. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/geopackage.vector/1.0.0/epsg_4326_feature/expected.json +0 -0
  232. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/geopackage.vector/1.0.0/epsg_4326_feature/places.gpkg +0 -0
  233. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/geoparquet.vector/1.0.0/primary_wkb_point/expected.json +0 -0
  234. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/geoparquet.vector/1.0.0/primary_wkb_point/places.parquet +0 -0
  235. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/html.tabular/1.0.0/sanitized_table/expected.json +0 -0
  236. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/html.tabular/1.0.0/sanitized_table/table.html +0 -0
  237. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/html.web_extract/1.0.0/json_ld_scorecards/expected.json +0 -0
  238. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/html.web_extract/1.0.0/json_ld_scorecards/scorecards.html +0 -0
  239. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/image.rendered/1.0.0/tiny_png/expected.json +0 -0
  240. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/image.rendered/1.0.0/tiny_png/tiny-rendered.png +0 -0
  241. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/json.tabular/1.0.0/nested_hourly_observations/expected.json +0 -0
  242. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/json.tabular/1.0.0/nested_hourly_observations/stations.json +0 -0
  243. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/json.tabular/1.1.0/an_observation_stream_served_as_plain_text/expected.json +0 -0
  244. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/json.tabular/1.1.0/an_observation_stream_served_as_plain_text/observations.ndjson +0 -0
  245. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/meteorology.bufr/1.0.0/eccodes_bufr4_subset/eccodes-bufr4.bufr +0 -0
  246. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/meteorology.bufr/1.0.0/eccodes_bufr4_subset/expected.json +0 -0
  247. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/meteorology.grib/1.0.0/eccodes_grib1_origin/expected.json +0 -0
  248. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/meteorology.grib/1.0.0/eccodes_grib1_origin/regular-ll-surface.grib1 +0 -0
  249. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/microdata.sas_xpt/1.0.0/two_raw_columns/expected.json +0 -0
  250. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/microdata.sas_xpt/1.0.0/two_raw_columns/survey.xpt +0 -0
  251. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/microdata.spss_sav/1.0.0/two_raw_columns/expected.json +0 -0
  252. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/microdata.spss_sav/1.0.0/two_raw_columns/survey.sav +0 -0
  253. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/microdata.stata_dta/1.0.0/two_raw_columns/expected.json +0 -0
  254. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/microdata.stata_dta/1.0.0/two_raw_columns/stata.dta +0 -0
  255. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/official.pcaxis_px/1.0.0/population_by_region_and_year/expected.json +0 -0
  256. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/official.pcaxis_px/1.0.0/population_by_region_and_year/population.px +0 -0
  257. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/official.sdmx_json/1.0.0/compact_population_series/expected.json +0 -0
  258. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/official.sdmx_json/1.0.0/compact_population_series/population.json +0 -0
  259. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/parquet.tabular/1.0.0/two_columns/expected.json +0 -0
  260. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/parquet.tabular/1.0.0/two_columns/prices.parquet +0 -0
  261. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/protobuf.tabular/1.0.0/gtfs_realtime_trip_updates/expected.json +0 -0
  262. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/protobuf.tabular/1.0.0/gtfs_realtime_trip_updates/gtfs-realtime.desc +0 -0
  263. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/protobuf.tabular/1.0.0/gtfs_realtime_trip_updates/trip-updates.pb +0 -0
  264. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/raster.geospatial/1.0.0/tiny_geotiff/expected.json +0 -0
  265. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/raster.geospatial/1.0.0/tiny_geotiff/tiny-geospatial.tif +0 -0
  266. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/satellite.goes_abi_l2/1.0.0/authored_cmi_window/expected.json +0 -0
  267. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/satellite.goes_abi_l2/1.0.0/authored_cmi_window/goes-abi-l2-cmi-window.nc +0 -0
  268. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/satellite.himawari_hsd/1.0.0/authored_b13_single_bzip2/expected.json +0 -0
  269. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/satellite.himawari_hsd/1.0.0/authored_b13_single_bzip2/himawari-b13-0101-bzip2.dat +0 -0
  270. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/satellite.himawari_hsd_complete/1.0.0/authored_b13_three_segment_scan/expected.json +0 -0
  271. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/satellite.himawari_hsd_complete/1.0.0/authored_b13_three_segment_scan/himawari-hsd-b13-complete.zip +0 -0
  272. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/satellite.msg_seviri_l15/1.0.0/authored_calibrated_complete_visir/expected.json +0 -0
  273. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/satellite.msg_seviri_l15/1.0.0/authored_calibrated_complete_visir/msg-seviri-l15.zip +0 -0
  274. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/satellite.sentinel_safe/1.0.0/authored_b02_scl_window/expected.json +0 -0
  275. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/satellite.sentinel_safe/1.0.0/authored_b02_scl_window/sentinel-safe-b02-scl.zip +0 -0
  276. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/satellite.xrit_image/1.0.0/authored_complete_raw_counts/expected.json +0 -0
  277. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/satellite.xrit_image/1.0.0/authored_complete_raw_counts/xrit-complete-image.zip +0 -0
  278. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/scientific.fits/1.0.0/tiny_primary_window/expected.json +0 -0
  279. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/scientific.fits/1.0.0/tiny_primary_window/tiny-primary.fits +0 -0
  280. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/scientific.hdf4/1.0.0/authored_temperature_window/expected.json +0 -0
  281. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/scientific.hdf4/1.0.0/authored_temperature_window/temperature.hdf +0 -0
  282. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/scientific.hdf5/1.0.0/authored_temperature_window/expected.json +0 -0
  283. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/scientific.hdf5/1.0.0/authored_temperature_window/temperature.h5 +0 -0
  284. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/scientific.hdf_eos2/1.0.0/authored_grid_temperature_window/expected.json +0 -0
  285. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/scientific.hdf_eos2/1.0.0/authored_grid_temperature_window/nasa-hdfeos2-grid.hdf +0 -0
  286. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/scientific.hdf_eos2/1.0.0/authored_swath_temperature_window/expected.json +0 -0
  287. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/scientific.hdf_eos2/1.0.0/authored_swath_temperature_window/nasa-hdfeos2-swath.hdf +0 -0
  288. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/scientific.netcdf/1.0.0/authored_classic_temperature_window/expected.json +0 -0
  289. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/scientific.netcdf/1.0.0/authored_classic_temperature_window/temperature-classic.nc +0 -0
  290. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/scientific.zarr/1.0.0/authored_v3_temperature_window/expected.json +0 -0
  291. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/scientific.zarr/1.0.0/authored_v3_temperature_window/temperature-zarr-v3.zip +0 -0
  292. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.0.0/an_ordinary_table_beside_a_second_sheet/cities.xlsx +0 -0
  293. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.0.0/an_ordinary_table_beside_a_second_sheet/expected.json +0 -0
  294. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.0.0/shares_the_workbook_had_already_computed/expected.json +0 -0
  295. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.0.0/shares_the_workbook_had_already_computed/shares.xlsx +0 -0
  296. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.1.0/shares_the_workbook_had_already_computed/expected.json +0 -0
  297. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.1.0/shares_the_workbook_had_already_computed/shares.xlsx +0 -0
  298. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/README.md +0 -0
  299. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/gfs_2m_temperature/expected.json +0 -0
  300. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/gfs_2m_temperature/gfs-2m-temperature.grib2 +0 -0
  301. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_2m_temperature/expected.json +0 -0
  302. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_2m_temperature/hrrr-2m-temperature.grib2 +0 -0
  303. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_categorical_rain/expected.json +0 -0
  304. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_categorical_rain/hrrr-categorical-rain.grib2 +0 -0
  305. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/2.0.0/hrrr_2m_temperature/expected.json +0 -0
  306. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/2.0.0/hrrr_2m_temperature/hrrr-2m-temperature.grib2 +0 -0
  307. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/3.0.0/gfs_and_hrrr_categorical_rain/expected.json +0 -0
  308. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/3.0.0/gfs_and_hrrr_categorical_rain/gfs-and-hrrr-categorical-rain.grib2 +0 -0
  309. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/plain_filing_fact/expected.json +0 -0
  310. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/plain_filing_fact/filing.xml +0 -0
  311. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/xml_inline_fact/expected.json +0 -0
  312. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/xml_inline_fact/filing.xhtml +0 -0
  313. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/pacer_rss_feed/expected.json +0 -0
  314. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/pacer_rss_feed/feed.xml +0 -0
  315. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/sec_form_d_filing/expected.json +0 -0
  316. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/sec_form_d_filing/filing.xml +0 -0
  317. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/unified_agenda_extract/agenda.xml +0 -0
  318. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/unified_agenda_extract/expected.json +0 -0
  319. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples.py +0 -0
  320. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/scientific.py +0 -0
  321. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/scientific_arrays/__init__.py +0 -0
  322. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/scientific_arrays/container.py +0 -0
  323. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/scientific_arrays/goes.py +0 -0
  324. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/scientific_arrays/hdf4.py +0 -0
  325. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/scientific_arrays/hdf4_bridge.py +0 -0
  326. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/scientific_arrays/hdf5.py +0 -0
  327. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/scientific_arrays/native.py +0 -0
  328. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/scientific_arrays/netcdf.py +0 -0
  329. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/scientific_arrays/profiles.py +0 -0
  330. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/scientific_arrays/raw.py +0 -0
  331. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/scientific_arrays/zarr.py +0 -0
  332. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/scientific_catalog.py +0 -0
  333. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/scientific_segmented/__init__.py +0 -0
  334. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/scientific_segmented/asset_sets.py +0 -0
  335. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/scientific_segmented/formats.py +0 -0
  336. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/scientific_segmented/hsd.py +0 -0
  337. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/scientific_segmented/native.py +0 -0
  338. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/scientific_segmented/profiles.py +0 -0
  339. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/scientific_segmented/reader.py +0 -0
  340. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/scientific_segmented/xrit.py +0 -0
  341. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/sdmx_json.py +0 -0
  342. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/spreadsheet.py +0 -0
  343. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/statistical_microdata.py +0 -0
  344. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/tabular.py +0 -0
  345. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/vector.py +0 -0
  346. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/vector_wkb.py +0 -0
  347. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/xbrl_facts.py +0 -0
  348. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/xml_tabular.py +0 -0
  349. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/recipe.py +0 -0
  350. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/review.py +0 -0
  351. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/rowset.py +0 -0
  352. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/session_probes.py +0 -0
  353. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/signing.py +0 -0
  354. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/skill_assets.py +0 -0
  355. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/source_bootstrap.py +0 -0
  356. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/source_bundle_writer.py +0 -0
  357. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/source_discovery.py +0 -0
  358. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/source_history_candidate_child.py +0 -0
  359. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/source_history_transform_child.py +0 -0
  360. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/source_inventory.py +0 -0
  361. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/source_partition.py +0 -0
  362. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/source_raw_inventory.py +0 -0
  363. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/source_state_index.py +0 -0
  364. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/__init__.py +0 -0
  365. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/_adapter_steps.py +0 -0
  366. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/adapters.py +0 -0
  367. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/authenticated_https.py +0 -0
  368. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/authenticated_https_v2.py +0 -0
  369. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/authenticated_https_v3.py +0 -0
  370. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/cadence.py +0 -0
  371. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/cadence_emission.py +0 -0
  372. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/cadence_history.py +0 -0
  373. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/__init__.py +0 -0
  374. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/admission.py +0 -0
  375. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/authoring.py +0 -0
  376. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/authoring_policy.py +0 -0
  377. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/authoring_shards.py +0 -0
  378. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/bounded_io.py +0 -0
  379. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/channel.py +0 -0
  380. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/channel_client.py +0 -0
  381. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/contracts.py +0 -0
  382. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/coverage.py +0 -0
  383. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/embedding.py +0 -0
  384. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/entry_v2.py +0 -0
  385. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/fill.py +0 -0
  386. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/fill_partitions.py +0 -0
  387. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/fill_staging.py +0 -0
  388. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/gating.py +0 -0
  389. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/generation_receipt.py +0 -0
  390. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/harvest/__init__.py +0 -0
  391. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/harvest/ckan.py +0 -0
  392. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/harvest/datagov_v4.py +0 -0
  393. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/harvest/protocol.py +0 -0
  394. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/harvest/sdmx.py +0 -0
  395. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/harvest/stac.py +0 -0
  396. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/hosted_catalog.py +0 -0
  397. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/identity_history.py +0 -0
  398. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/neural.py +0 -0
  399. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/packed_catalog.py +0 -0
  400. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/packed_retrieval.py +0 -0
  401. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/packed_writer.py +0 -0
  402. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/query_trace.py +0 -0
  403. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/recommend.py +0 -0
  404. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/retrieval.py +0 -0
  405. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/retrieval_manifest.py +0 -0
  406. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/sealed.py +0 -0
  407. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/search.py +0 -0
  408. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/streaming_delta.py +0 -0
  409. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/update.py +0 -0
  410. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/collections.py +0 -0
  411. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/contracts.py +0 -0
  412. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/dataset.py +0 -0
  413. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/deletion.py +0 -0
  414. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/document_projection.py +0 -0
  415. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/fitness.py +0 -0
  416. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/governance.py +0 -0
  417. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/hosted.py +0 -0
  418. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/integration.py +0 -0
  419. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/range_reader.py +0 -0
  420. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/rights_rule.py +0 -0
  421. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/source_cadence_vectors.v1.json +0 -0
  422. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/sports.py +0 -0
  423. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/stream.py +0 -0
  424. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/stream_capture_session.py +0 -0
  425. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/stream_connector.py +0 -0
  426. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.cursor-resume.v3.json +0 -0
  427. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-ed25519.v2.json +0 -0
  428. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-hmac.v2.json +0 -0
  429. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-hmac384.v2.json +0 -0
  430. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-hmac512.v2.json +0 -0
  431. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame.v2.json +0 -0
  432. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-header-rsa.v2.json +0 -0
  433. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-header.v2.json +0 -0
  434. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-permessage-jwt.v2.json +0 -0
  435. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-permessage.v2.json +0 -0
  436. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-prelude.v2.json +0 -0
  437. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-query.v2.json +0 -0
  438. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-subprotocol.v2.json +0 -0
  439. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-subscribe.v2.json +0 -0
  440. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-urlpath.v2.json +0 -0
  441. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/stream_connectors/polymarket.clob-market.v1.json +0 -0
  442. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/stream_credential.py +0 -0
  443. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/stream_prelude.py +0 -0
  444. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/stream_recorder.py +0 -0
  445. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/stream_registry.py +0 -0
  446. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/stream_rotation.py +0 -0
  447. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/stream_segment_recorder.py +0 -0
  448. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/stream_series.py +0 -0
  449. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/stream_signing.py +0 -0
  450. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/stream_transport.py +0 -0
  451. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/stream_order_vector.py +0 -0
  452. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/stream_recovery_objects.py +0 -0
  453. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/stream_segment_spill.py +0 -0
  454. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/stream_subscription_feed.py +0 -0
  455. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/stream_subscription_sealer.py +0 -0
  456. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/stream_subscription_worker.py +0 -0
  457. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/stream_venue.py +0 -0
  458. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/stream_venue_staging.py +0 -0
  459. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/studio_subscription_control.py +0 -0
  460. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/table_manifest.py +0 -0
  461. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/table_parts.py +0 -0
  462. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/table_profile.py +0 -0
  463. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/__init__.py +0 -0
  464. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/acquire.py +0 -0
  465. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/acquire_cancel.py +0 -0
  466. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/activity.py +0 -0
  467. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/approvals.py +0 -0
  468. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/commands.py +0 -0
  469. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/download.py +0 -0
  470. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/narrative.py +0 -0
  471. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/parity.py +0 -0
  472. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/probe.py +0 -0
  473. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/propose.py +0 -0
  474. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/recipe.py +0 -0
  475. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/research.py +0 -0
  476. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/router.py +0 -0
  477. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/runs.py +0 -0
  478. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/session.py +0 -0
  479. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/stream.py +0 -0
  480. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/stream_venue.py +0 -0
  481. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/transport.py +0 -0
  482. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/v4.py +0 -0
  483. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/v4_artifacts.py +0 -0
  484. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/v4_connections.py +0 -0
  485. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/v4_dataset_covers.py +0 -0
  486. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/v4_datasets.py +0 -0
  487. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/v4_handoff.py +0 -0
  488. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/v4_narrative.py +0 -0
  489. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/v4_query.py +0 -0
  490. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/v4_runs.py +0 -0
  491. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/v4_secrets.py +0 -0
  492. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/v4_stream.py +0 -0
  493. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/v4_tables.py +0 -0
  494. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/vocabulary.py +0 -0
  495. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/workers.py +0 -0
  496. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ucum/TABLE-PIN.json +0 -0
  497. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ucum/ucum-subset.v1.json +0 -0
  498. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/unit_flow.py +0 -0
  499. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/units.py +0 -0
  500. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ux/__init__.py +0 -0
  501. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ux/attendance.py +0 -0
  502. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ux/clarification.py +0 -0
  503. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ux/cloud_auth.py +0 -0
  504. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ux/commands/__init__.py +0 -0
  505. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ux/commands/auth.py +0 -0
  506. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ux/commands/catalog_author.py +0 -0
  507. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ux/commands/catalog_harvest.py +0 -0
  508. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ux/commands/catalog_publish.py +0 -0
  509. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ux/commands/clarify.py +0 -0
  510. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ux/commands/login.py +0 -0
  511. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ux/commands/record.py +0 -0
  512. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ux/commands/whoami.py +0 -0
  513. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ux/credential_native.py +0 -0
  514. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ux/credential_store.py +0 -0
  515. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ux/credentials.py +0 -0
  516. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ux/headline.py +0 -0
  517. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ux/hosted_acquisition.py +0 -0
  518. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ux/local_review.py +0 -0
  519. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ux/login.py +0 -0
  520. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ux/path_kind.py +0 -0
  521. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ux/plain_file.py +0 -0
  522. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ux/readers.py +0 -0
  523. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ux/remediation.py +0 -0
  524. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ux/render.py +0 -0
  525. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/v4_acquisition.py +0 -0
  526. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/v4_check_dialect.py +0 -0
  527. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/v4_document_pin.py +0 -0
  528. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/v4_reader_pin.py +0 -0
  529. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/v4_recipe.py +0 -0
  530. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/v4_required_controls.py +0 -0
  531. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/v4_snapshot_artifact.py +0 -0
  532. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/v4_transform.py +0 -0
  533. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/v4_window.py +0 -0
  534. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/visual_run/__init__.py +0 -0
  535. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/visual_run/authoring.py +0 -0
  536. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/visual_run/contracts.py +0 -0
  537. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/visual_run/materialize.py +0 -0
  538. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/visual_run/observations.py +0 -0
  539. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/visual_run/reducer.py +0 -0
  540. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/visual_run/sdk.py +0 -0
  541. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/visual_run/store.py +0 -0
  542. {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/visual_run/transport.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mostlyright-data
3
- Version: 0.16.0
3
+ Version: 0.16.2
4
4
  Summary: Mostly Right CLI for reproducible, reviewed Parquet datasets
5
5
  Project-URL: Homepage, https://mostlyright.md/
6
6
  Project-URL: Documentation, https://mostlyright.md/docs/guides/cli/
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "mostlyright-data"
3
- version = "0.16.0"
3
+ version = "0.16.2"
4
4
  description = "Mostly Right CLI for reproducible, reviewed Parquet datasets"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.13,<3.14"
@@ -7,6 +7,7 @@ import errno
7
7
  import hashlib
8
8
  import http.client
9
9
  import json
10
+ import math
10
11
  import os
11
12
  import re
12
13
  import socket
@@ -1479,6 +1480,7 @@ class AcquisitionLimiter:
1479
1480
  self,
1480
1481
  *,
1481
1482
  max_concurrency: int,
1483
+ max_concurrency_per_host: int | None = None,
1482
1484
  min_interval_seconds: float,
1483
1485
  clock: Callable[[], float] = time.monotonic,
1484
1486
  sleep: Callable[[float], None] = time.sleep,
@@ -1493,11 +1495,21 @@ class AcquisitionLimiter:
1493
1495
  "min_interval_seconds must be in [0, 3600]",
1494
1496
  )
1495
1497
  self._semaphore = threading.BoundedSemaphore(max_concurrency)
1498
+ if max_concurrency_per_host is not None and (
1499
+ type(max_concurrency_per_host) is not int
1500
+ or not 1 <= max_concurrency_per_host <= max_concurrency
1501
+ ):
1502
+ raise AcquisitionSecurityError(
1503
+ "CONCURRENCY_LIMIT",
1504
+ "max_concurrency_per_host must be an integer in [1, max_concurrency]",
1505
+ )
1506
+ self._max_concurrency_per_host = max_concurrency_per_host
1496
1507
  self._min_interval_seconds = float(min_interval_seconds)
1497
1508
  self._clock = clock
1498
1509
  self._sleep = sleep
1499
1510
  self._lock = threading.Lock()
1500
1511
  self._last_request: dict[str, float] = {}
1512
+ self._active_by_host: dict[str, int] = {}
1501
1513
 
1502
1514
  @property
1503
1515
  def clock(self) -> Callable[[], float]:
@@ -1509,11 +1521,10 @@ class AcquisitionLimiter:
1509
1521
  def acquire(self, hostname: str, *, deadline: float) -> Iterator[None]:
1510
1522
  """Hold a concurrency slot, waiting out this host's minimum interval first.
1511
1523
 
1512
- Two limits, two dispositions, deliberately. An exhausted concurrency semaphore
1513
- fails fast: more work is in flight than this process admitted, which is a bug on our
1514
- side, and waiting would hide it. The per-host interval waits: it is politeness
1515
- towards a source that is behaving exactly as documented, and raising there turns a
1516
- healthy source into a failed run.
1524
+ The global concurrency semaphore fails fast: more work is in flight than this process
1525
+ admitted, which is a bug on our side. An optional per-host concurrency cap and the
1526
+ per-host interval wait: both describe a healthy source boundary, and an immediate
1527
+ refusal would turn temporary occupancy into a failed run.
1517
1528
 
1518
1529
  ``deadline`` is an absolute instant on this limiter's own clock -- the retrieval
1519
1530
  passes its start plus the ``total_timeout_seconds`` it already measures itself
@@ -1523,17 +1534,40 @@ class AcquisitionLimiter:
1523
1534
  up front as ``TOTAL_TIMEOUT`` rather than slept past and regretted afterwards.
1524
1535
  """
1525
1536
 
1526
- if type(deadline) not in {int, float} or deadline != deadline: # NaN is not a bound
1537
+ if type(deadline) not in {int, float} or not math.isfinite(float(deadline)):
1527
1538
  raise AcquisitionSecurityError(
1528
1539
  "TOTAL_TIMEOUT",
1529
1540
  "a wait must be bounded by a deadline on the retrieval's own clock",
1530
1541
  )
1531
- if not self._semaphore.acquire(blocking=False):
1532
- raise AcquisitionSecurityError(
1533
- "CONCURRENCY_LIMIT",
1534
- "acquisition concurrency limit is exhausted",
1535
- )
1542
+ host_slot = False
1543
+ global_slot = False
1536
1544
  try:
1545
+ if self._max_concurrency_per_host is not None:
1546
+ while True:
1547
+ with self._lock:
1548
+ active = self._active_by_host.get(hostname, 0)
1549
+ if active < self._max_concurrency_per_host:
1550
+ self._active_by_host[hostname] = active + 1
1551
+ host_slot = True
1552
+ break
1553
+ now = float(self._clock())
1554
+ remaining = float(deadline) - now
1555
+ if remaining <= 0:
1556
+ raise AcquisitionSecurityError(
1557
+ "TOTAL_TIMEOUT",
1558
+ "the wait for this host's concurrency slot outlived "
1559
+ "the retrieval budget",
1560
+ )
1561
+ # The caller's clock owns the deadline. Keep every individual wait short so
1562
+ # a sibling's release is observed promptly, while the loop itself remains
1563
+ # bounded by that same deadline (and test clocks can advance deterministically).
1564
+ self._sleep(min(remaining, 0.01))
1565
+ if not self._semaphore.acquire(blocking=False):
1566
+ raise AcquisitionSecurityError(
1567
+ "CONCURRENCY_LIMIT",
1568
+ "acquisition concurrency limit is exhausted",
1569
+ )
1570
+ global_slot = True
1537
1571
  now = float(self._clock())
1538
1572
  with self._lock:
1539
1573
  last = self._last_request.get(hostname)
@@ -1553,7 +1587,15 @@ class AcquisitionLimiter:
1553
1587
  self._sleep(scheduled - now)
1554
1588
  yield
1555
1589
  finally:
1556
- self._semaphore.release()
1590
+ if global_slot:
1591
+ self._semaphore.release()
1592
+ if host_slot:
1593
+ with self._lock:
1594
+ remaining = self._active_by_host[hostname] - 1
1595
+ if remaining:
1596
+ self._active_by_host[hostname] = remaining
1597
+ else:
1598
+ del self._active_by_host[hostname]
1557
1599
 
1558
1600
 
1559
1601
  class PinnedHttpsRetriever:
@@ -442,6 +442,215 @@ def parse_csv_evidence(
442
442
  )
443
443
 
444
444
 
445
+ def parse_ndjson_evidence(
446
+ content: bytes,
447
+ *,
448
+ media_type: str,
449
+ filename: str,
450
+ limits: ParseLimits,
451
+ ) -> ParsedTabularEvidence:
452
+ """Stream one NDJSON verification pass: the admissions of the drained parse, record by record.
453
+
454
+ The second streaming pass, and the reason :data:`STREAMED_EVIDENCE_FORMATS` is a table rather
455
+ than the word ``csv``. It serves NDJSON acquired over public or authenticated HTTPS, which is
456
+ the lane that reaches ``InProcessPublicHttpsAdapter._confined_read``, and a replayed WebSocket
457
+ capture, which reaches it through ``v4_stream_recording.RecordedStreamAdapter``. That second
458
+ caller still needs rows, but only one per sealed batch, so it drains each batch on its own
459
+ and reads the concatenation through this pass alone.
460
+
461
+ WHAT IT ACTUALLY BUYS, MEASURED INSIDE THIS FUNCTION WITH ``tracemalloc``, WHICH IS NOT THE
462
+ SAME QUANTITY THE BENCHMARK REPORTS. Every figure in this paragraph is the peak of the Python
463
+ objects THIS PASS allocates. It is deliberately not the number
464
+ ``evidence/acquisition-ceiling-benchmark.macos-arm64.json`` carries: that file records the
465
+ CHILD'S peak resident set (``ru_maxrss``), which also holds the interpreter, the PyArrow
466
+ import and the allocator's own slack. The two registers are reconciled at the end of this
467
+ paragraph, because reading one as the other is how a later change came to claim a memory win
468
+ twice the size of the real one.
469
+
470
+ No list of decoded records and no tuple of rows is ever built, where the drained
471
+ ``_parse_json`` holds BOTH at once. On a four-column order-book shape that is 2.87x the
472
+ source against 10.95x at 320k records, and the ratio is what moves rather than the growth:
473
+ this pass is NOT constant in the number of records and saying so would be false.
474
+ ``text.splitlines()`` materialises every line of the document, so the peak grows linearly with
475
+ the row count exactly as the drained parse's does -- 2.89x at 50k records and 2.87x at 320k,
476
+ against 11.12x and 10.95x drained. It is flat from 50k up rather than at every size: at 5k
477
+ records the pass's own constant costs are still visible and it reads 3.46x. The shape moves
478
+ it too -- the benchmark's seven-column frame reads 2.38x against 9.04x at 320k -- so the pair
479
+ is quoted together or neither number means anything.
480
+
481
+ RECONCILING THE TWO REGISTERS, ONCE, HERE. Function-level 2.87x and the child's 7.33x for the
482
+ same read are both honest: the child's reading adds a large fixed cost that no source byte
483
+ pays for. That cost is common to BOTH operations, so it raises both multipliers and
484
+ COMPRESSES the ratio between them -- this pass is worth 3.8x at the function level and 2.0x
485
+ measured as the child's peak on the order-book shape. A caller sizing a confined read wants
486
+ the child's number; a reader asking what this function holds wants this one.
487
+
488
+ THE LINE LIST IS REQUIRED, NOT AN OVERSIGHT. ``_parse_json`` numbers its records by
489
+ ``str.splitlines()``, which breaks on U+2028, U+0085 and the vertical tab as well as on the
490
+ newline. A reader that split the bytes on ``\n`` would find a different number of records in
491
+ the same document and refuse at different record numbers, which is the parity this pass exists
492
+ to hold. So the trade is deliberate: the same line list, and just over a quarter of what this
493
+ function allocates, at a fetch ceiling 2.25 times higher. Both halves of that trade are in
494
+ the ``tracemalloc`` register named above; the child-level statement of the same trade is the
495
+ one in ``sandbox.py`` beside ``STREAMING_OPERATIONS``, and it is the one to quote when the
496
+ question is what a confined read costs.
497
+
498
+ THE REFUSALS ARE ``_parse_json``'s OWN, AT THE SAME RECORDS, IN THE SAME ORDER, and preserving
499
+ that order is most of this function. The drained parse reads every line into a list before it
500
+ asks a single question about shape, so its refusals fall in four groups that do not interleave:
501
+ the per-line group (the row budget, then a line that is not JSON), then the whole-document
502
+ group (an empty document, then a member that is not an object), then the per-record group (the
503
+ nesting budget, the first-record schema, the field budget), then the table group (the cell
504
+ budget). A pass that raised each fault where it found it would report the SECOND group's
505
+ fault only when no later line carried a FIRST group's, and would report a third-group fault
506
+ that the drained parse never reaches at all.
507
+
508
+ So only the per-line group raises where it is found -- it is the group the drained parse also
509
+ resolves before anything else -- and every later group is recorded and raised after the last
510
+ line has been read, in the drained parse's own order. That is the same deferral
511
+ :func:`parse_csv_evidence` applies to the total-cell budget, applied to three more groups
512
+ because NDJSON has three more questions that are asked about the document rather than the row.
513
+
514
+ The row digest is fed to the hash incrementally, by the framing
515
+ :func:`row_digest_for` uses, for the reason stated there.
516
+ """
517
+
518
+ _admit_tabular_input(content, data_format="ndjson", media_type=media_type, filename=filename)
519
+ if not content or len(content) > limits.max_input_bytes:
520
+ raise AcquisitionSecurityError(
521
+ "PARSE_INPUT_LIMIT",
522
+ "source bytes are empty or exceed the parser input budget",
523
+ )
524
+ if any(content.startswith(magic) for magic in _ARCHIVE_OR_EXECUTABLE_MAGICS):
525
+ raise AcquisitionSecurityError(
526
+ "PARSE_FORBIDDEN_CONTAINER",
527
+ "archives, executables, documents, and nested containers are forbidden",
528
+ )
529
+ # No NUL check, deliberately. ``_parse_csv`` makes one and ``_parse_json`` does not, so a
530
+ # NUL inside an NDJSON string reaches the decoder in the drained parse and must reach it
531
+ # here; adding the CSV check would refuse a document the drained read admits.
532
+ text = _strict_utf8(content)
533
+ decoder = json.JSONDecoder(
534
+ object_pairs_hook=_unique_object,
535
+ parse_constant=lambda value: _invalid_json_number(value),
536
+ )
537
+
538
+ columns: tuple[str, ...] = ()
539
+ expected: set[str] = set()
540
+ observed_types: list[set[str]] = []
541
+ row_hash = hashlib.sha256()
542
+ row_count = 0
543
+ hashed_rows = 0
544
+ # The deferred groups, in the order the drained parse resolves them. ``not_an_object`` and
545
+ # an exhausted loop with ``row_count`` still zero are the whole-document group; the two
546
+ # ``AcquisitionSecurityError`` slots hold a refusal that is RE-RAISED rather than rebuilt, so
547
+ # the sentence a person is told is the drained parse's own down to the record number in it.
548
+ not_an_object = False
549
+ no_columns: AcquisitionSecurityError | None = None
550
+ record_refusal: AcquisitionSecurityError | None = None
551
+ over_cell_budget = False
552
+ canonical_error: CanonicalJSONError | None = None
553
+
554
+ for line_number, line in enumerate(text.splitlines(), start=1):
555
+ if not line.strip():
556
+ continue
557
+ if row_count >= limits.max_rows:
558
+ raise AcquisitionSecurityError("PARSE_ROW_LIMIT", "NDJSON exceeds the row budget")
559
+ try:
560
+ record = decoder.decode(line)
561
+ except json.JSONDecodeError:
562
+ raise AcquisitionSecurityError(
563
+ "PARSE_JSON",
564
+ f"NDJSON line {line_number} is malformed",
565
+ ) from None
566
+ row_count += 1
567
+ if not isinstance(record, dict):
568
+ not_an_object = True
569
+ # Nothing below this line can win against a fault already recorded above it, so the work
570
+ # is skipped rather than done and discarded. That is what keeps the deferral from costing
571
+ # a full validation pass over a document whose first question already has an answer.
572
+ if not_an_object or no_columns is not None or record_refusal is not None:
573
+ continue
574
+ if not columns:
575
+ try:
576
+ columns = _columns(list(record), limits)
577
+ except AcquisitionSecurityError as error:
578
+ no_columns = error
579
+ continue
580
+ expected = set(columns)
581
+ observed_types = [set() for _ in columns]
582
+ row_hash.update(b'{"columns":' + canonical_json_bytes(list(columns)) + b',"rows":[')
583
+ try:
584
+ _validate_json_value(record, depth=1, limits=limits)
585
+ if set(record) != expected:
586
+ raise AcquisitionSecurityError(
587
+ "PARSE_ROW_SCHEMA",
588
+ f"JSON row {row_count} does not match the first-row schema",
589
+ )
590
+ row = tuple(record[column] for column in columns)
591
+ _validate_row(row, limits)
592
+ except AcquisitionSecurityError as error:
593
+ record_refusal = error
594
+ continue
595
+ if row_count * len(columns) > limits.max_total_cells:
596
+ over_cell_budget = True
597
+ # A value the canonical encoder refuses keeps the position the one-shot digest gave it:
598
+ # after every parse refusal and the cell budget, never mid-loop. The hash is dead on that
599
+ # path, so it stops accumulating with the first error.
600
+ if canonical_error is None:
601
+ try:
602
+ encoded_row = canonical_json_bytes(list(row))
603
+ except CanonicalJSONError as error:
604
+ canonical_error = error
605
+ else:
606
+ if hashed_rows:
607
+ row_hash.update(b",")
608
+ row_hash.update(encoded_row)
609
+ hashed_rows += 1
610
+ for index, value in enumerate(row):
611
+ observed_types[index].add("null" if value is None else type(value).__name__)
612
+
613
+ if not_an_object:
614
+ raise AcquisitionSecurityError("PARSE_JSON_SHAPE", "every JSON row must be an object")
615
+ if not row_count:
616
+ raise AcquisitionSecurityError(
617
+ "PARSE_JSON_SHAPE",
618
+ "JSON tabular input must be a non-empty array of objects",
619
+ )
620
+ if no_columns is not None:
621
+ raise no_columns
622
+ if record_refusal is not None:
623
+ raise record_refusal
624
+ if over_cell_budget:
625
+ raise AcquisitionSecurityError("PARSE_CELL_LIMIT", "table exceeds the cell budget")
626
+ if canonical_error is not None:
627
+ # TYPED, LIKE EVERY OTHER PARSE REFUSAL HERE, and for the reason ``parse_csv_evidence``
628
+ # states at its own copy of this branch: raised bare it leaves this boundary as an
629
+ # exception nothing above can name.
630
+ raise AcquisitionSecurityError(
631
+ "PARSE_VALUE", "parsed field contains a non-canonical value"
632
+ ) from canonical_error
633
+ row_hash.update(b"]}")
634
+
635
+ return ParsedTabularEvidence(
636
+ data_format="ndjson",
637
+ input_sha256=sha256_bytes(content),
638
+ columns=columns,
639
+ row_count=row_count,
640
+ schema_digest=canonical_sha256(
641
+ {
642
+ "data_format": "ndjson",
643
+ "columns": list(columns),
644
+ "types": [
645
+ "|".join(sorted(observed)) if observed else "empty"
646
+ for observed in observed_types
647
+ ],
648
+ }
649
+ ),
650
+ row_digest=row_hash.hexdigest(),
651
+ )
652
+
653
+
445
654
  def parse_csv_evidence_to_file(
446
655
  source: BinaryIO,
447
656
  destination: BinaryIO,
@@ -53,6 +53,7 @@ from mostlyright.data_harness.acquisition.parsing import (
53
53
  ParseLimits,
54
54
  parse_csv_evidence,
55
55
  parse_csv_evidence_to_file,
56
+ parse_ndjson_evidence,
56
57
  parse_streaming_csv_window,
57
58
  parse_tabular_bytes,
58
59
  prime_parquet_support,
@@ -147,6 +148,9 @@ SANDBOX_OPERATIONS = frozenset(
147
148
  # bounded by the number of columns rather than by the size of the source. ``parse`` holds both
148
149
  # and is measured at roughly twenty-one times the source bytes for it; the streaming pass is
149
150
  # measured at roughly eight, and that difference is the entire reason this operation exists.
151
+ # ``parse_evidence`` reads two encodings, and the set is still per operation rather than per
152
+ # encoding: the budgets below bound what a CHILD may be asked for, and a child asked for the
153
+ # streaming read holds one record whichever pass reads it.
150
154
  #
151
155
  # It is a set rather than a flag because two independent budgets read it -- the per-operation
152
156
  # request ceiling below and the container-boundary admission in ``_invoke`` -- and a second
@@ -2358,14 +2362,36 @@ def _execute_worker_request(request: dict[str, Any]) -> dict[str, Any]:
2358
2362
  # The streaming pass, and the whole point of the operation: the same admissions and
2359
2363
  # the same refusals at the same rows as the drained parse, holding one row at a time.
2360
2364
  # The table is never built, so nothing here is released later -- there is nothing to
2361
- # release. ``data_format`` was already held to this operation's attested formats
2362
- # above, and only CSV is attested, so the CSV pass is the whole of what may run.
2363
- evidence = parse_csv_evidence(
2364
- content,
2365
- media_type=media_type,
2366
- filename=filename,
2367
- limits=limits,
2368
- )
2365
+ # release.
2366
+ #
2367
+ # TWO PASSES NOW, AND THE DISPATCH IS EXHAUSTIVE OVER THE ATTESTED LIST RATHER THAN A
2368
+ # DEFAULT. ``data_format`` was already held to this operation's attested formats
2369
+ # above, so the branch below can only be reached by a name
2370
+ # ``STREAMED_EVIDENCE_FORMATS`` admits; an ``else`` that fell through to one of the
2371
+ # two passes would hand a third encoding's bytes to whichever pass was written last,
2372
+ # and the evidence it returned would attest a reader that never ran. That is the same
2373
+ # refusal ``_parse_tabular`` makes for the same reason, and it is a loud failure until
2374
+ # a pass is written rather than a silent misparse.
2375
+ if data_format == "csv":
2376
+ evidence = parse_csv_evidence(
2377
+ content,
2378
+ media_type=media_type,
2379
+ filename=filename,
2380
+ limits=limits,
2381
+ )
2382
+ elif data_format == "ndjson":
2383
+ evidence = parse_ndjson_evidence(
2384
+ content,
2385
+ media_type=media_type,
2386
+ filename=filename,
2387
+ limits=limits,
2388
+ )
2389
+ else:
2390
+ raise AcquisitionSecurityError(
2391
+ "PARSE_FORMAT_UNHANDLED",
2392
+ f"data format {data_format!r} is attested for the streaming read but no "
2393
+ "streaming pass claims it",
2394
+ )
2369
2395
  base["evidence"] = _evidence_dict(evidence)
2370
2396
  return base
2371
2397
  parsed = parse_tabular_bytes(
@@ -71,17 +71,43 @@ READER_WORKER_MEMORY_BYTES = 512 * 1024 * 1024
71
71
  # families, not encodings a parser is ever handed.
72
72
  READER_OUTPUT_FORMATS: tuple[str, ...] = ("csv",)
73
73
 
74
- # Encodings a confined interpretation may read one row at a time.
74
+ # Encodings the INLINE confined interpretation may read one row at a time.
75
75
  #
76
76
  # This is a third question, and it must not be answered by either table above. ``DATA_FORMATS``
77
77
  # says what may arrive on the wire and ``READER_OUTPUT_FORMATS`` says what a decoder may emit;
78
- # this one says what the streaming verification pass in ``acquisition.parsing`` can actually
79
- # read without materialising the table. Only the CSV pass exists, so this is one value -- and
80
- # it is spelled separately from ``READER_OUTPUT_FORMATS`` because the two are equal today by
81
- # coincidence rather than by rule. Writing a streaming JSON pass would move this table alone;
82
- # adding a Reader output encoding would move that one alone. Sharing the literal would rotate
83
- # the wrong operation's attestation on either event.
84
- STREAMED_EVIDENCE_FORMATS: tuple[str, ...] = ("csv",)
78
+ # this one says what the streaming verification passes in ``acquisition.parsing`` can actually
79
+ # read without materialising the table. It is spelled separately from ``READER_OUTPUT_FORMATS``
80
+ # because the two were equal by coincidence rather than by rule, and NDJSON is the event that
81
+ # separated them.
82
+ #
83
+ # WHICH LANES THIS SERVES. NDJSON acquired over public or authenticated HTTPS -- the sources that
84
+ # reach ``InProcessPublicHttpsAdapter._confined_read`` -- and, since the recording adapter was
85
+ # taught to order both reads, a replayed WebSocket capture as well. A Recorder seals one frame to
86
+ # a line, so ``v4_stream_recording.RecordedStreamAdapter`` reads the whole concatenation through
87
+ # this table's NDJSON pass for the facts a receipt states, and drains ONE SEALED BATCH AT A TIME
88
+ # for the frame each batch's ``recorder_position`` is spelled out of. Its confined peak is
89
+ # therefore a function of the largest batch rather than of the recording, which is what moved the
90
+ # order-book memory ceiling. Both lanes order the same pair, so both pin the same composition.
91
+ #
92
+ # THIS TABLE IS DIGEST-BEARING AND ITS SCOPE IS THE INLINE READ ALONE. It is embedded in the
93
+ # policy document of ``parse_evidence`` through ``PARSER_FORMATS_BY_OPERATION`` below, so adding
94
+ # to it rotates that operation's attestation -- which is the intended cost of teaching the inline
95
+ # pass a second encoding. It used to be the value of three registry entries, and widening it
96
+ # then would have rotated three attestations to describe one new pass: the two descriptor-backed
97
+ # operations read CSV through ``csv.reader`` and gain nothing from an encoding they cannot parse.
98
+ # They now name ``STREAMED_DESCRIPTOR_FORMATS`` instead, so each table moves the operations it
99
+ # actually describes.
100
+ STREAMED_EVIDENCE_FORMATS: tuple[str, ...] = ("csv", "ndjson")
101
+
102
+ # Encodings the DESCRIPTOR-BACKED confined interpretations may read one row at a time.
103
+ #
104
+ # Split from the table above rather than shared with it, because the two answer different
105
+ # questions about different code. ``parse_evidence_file`` and ``parse_streaming_csv_window``
106
+ # take an opened descriptor and drive ``csv.reader`` over a strict-UTF-8 text wrapper; there is
107
+ # no NDJSON branch behind either, and a format list that admitted one would attest a pass that
108
+ # does not exist. Writing a descriptor-backed NDJSON pass would move this table alone, exactly
109
+ # as writing the inline one moved the table above alone.
110
+ STREAMED_DESCRIPTOR_FORMATS: tuple[str, ...] = ("csv",)
85
111
 
86
112
  # The ordered parser table. Order is digest-load-bearing: this exact sequence is
87
113
  # embedded in the sandbox policy document built by
@@ -294,8 +320,8 @@ PARSER_FORMATS_BY_OPERATION: Mapping[str, tuple[str, ...]] = MappingProxyType(
294
320
  {
295
321
  "parse": PARSER_FORMAT_ORDER,
296
322
  "parse_evidence": STREAMED_EVIDENCE_FORMATS,
297
- "parse_evidence_file": STREAMED_EVIDENCE_FORMATS,
298
- "parse_streaming_csv_window": STREAMED_EVIDENCE_FORMATS,
323
+ "parse_evidence_file": STREAMED_DESCRIPTOR_FORMATS,
324
+ "parse_streaming_csv_window": STREAMED_DESCRIPTOR_FORMATS,
299
325
  "retrieve_and_parse": PARSER_FORMAT_ORDER,
300
326
  "decode_and_parse": READER_OUTPUT_FORMATS,
301
327
  "retrieve_decode_and_parse": READER_OUTPUT_FORMATS,
@@ -39,7 +39,16 @@ _OPENLIGADB_LIMITER = AcquisitionLimiter(
39
39
  max_concurrency=2,
40
40
  min_interval_seconds=1.0,
41
41
  )
42
- _PUBLIC_HTTPS_LIMITER = AcquisitionLimiter(max_concurrency=2, min_interval_seconds=1.0)
42
+ # The worker's cgroup scheduler admits at most three public-source children, each of which can
43
+ # issue at most two ranged requests. Eight global slots leave bounded headroom; per-host slots
44
+ # are the provider-facing limit and wait within the retrieval deadline when temporarily occupied.
45
+ PUBLIC_HTTPS_MAX_CONCURRENCY = 8
46
+ PUBLIC_HTTPS_MAX_CONCURRENCY_PER_HOST = 2
47
+ _PUBLIC_HTTPS_LIMITER = AcquisitionLimiter(
48
+ max_concurrency=PUBLIC_HTTPS_MAX_CONCURRENCY,
49
+ max_concurrency_per_host=PUBLIC_HTTPS_MAX_CONCURRENCY_PER_HOST,
50
+ min_interval_seconds=1.0,
51
+ )
43
52
 
44
53
  # The ranged bulk-fetch envelope for capacity-constrained public origins (EPA AirData is
45
54
  # the motivating case: a 60-80 MB archive on a single-IP Apache origin that advertises
@@ -162,7 +171,7 @@ def _public_https_retriever(
162
171
  connect_timeout_seconds=5.0,
163
172
  read_timeout_seconds=read_timeout_seconds,
164
173
  total_timeout_seconds=total_timeout_seconds,
165
- max_concurrency=2,
174
+ max_concurrency=PUBLIC_HTTPS_MAX_CONCURRENCY,
166
175
  min_interval_seconds=1.0,
167
176
  allowed_media_types=_public_expected_media_types(request.query),
168
177
  user_agent=PUBLIC_HTTPS_USER_AGENT,
@@ -236,7 +245,7 @@ def _revalidation_retriever(hostname: str) -> PinnedHttpsRetriever:
236
245
  connect_timeout_seconds=5.0,
237
246
  read_timeout_seconds=REVALIDATION_READ_TIMEOUT_SECONDS,
238
247
  total_timeout_seconds=REVALIDATION_TOTAL_TIMEOUT_SECONDS,
239
- max_concurrency=2,
248
+ max_concurrency=PUBLIC_HTTPS_MAX_CONCURRENCY,
240
249
  min_interval_seconds=1.0,
241
250
  allowed_media_types=REVALIDATION_MEDIA_TYPES,
242
251
  user_agent=PUBLIC_HTTPS_USER_AGENT,
@@ -90,7 +90,8 @@ PUBLIC_HTTPS_EGRESS_POLICY: dict[str, Any] = {
90
90
  # is the meaningful ceiling for a bulk fetch.
91
91
  "read_timeout_milliseconds": 120_000,
92
92
  "total_timeout_milliseconds": 600_000,
93
- "max_concurrency": 2,
93
+ "max_concurrency": 8,
94
+ "max_concurrency_per_host": 2,
94
95
  "min_interval_milliseconds": 1_000,
95
96
  # A bulk object whose 0-0 probe names a total above threshold_bytes is fetched as
96
97
  # consecutive range_bytes slices, at most `parallelism` in flight, each slice under