mostlyright-data 0.18.0__tar.gz → 0.18.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 (566) hide show
  1. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/PKG-INFO +5 -5
  2. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/README.md +1 -1
  3. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/pyproject.toml +4 -4
  4. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream_connector.py +14 -5
  5. mostlyright_data-0.18.2/src/mostlyright/data_harness/sources/stream_numbers.py +338 -0
  6. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/stream_segment_spill.py +27 -5
  7. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/stream_subscription_feed.py +78 -6
  8. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/stream_subscription_worker.py +99 -3
  9. mostlyright_data-0.18.0/src/mostlyright/data_harness/sources/stream_numbers.py +0 -93
  10. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/.gitignore +0 -0
  11. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/scripts/hatch_build.py +0 -0
  12. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/skills/mr-data-build/SKILL.md +0 -0
  13. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/skills/mr-data-build/agents/openai.yaml +0 -0
  14. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/skills/mr-data-build/scripts/write_research_notebook.py +0 -0
  15. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/skills/mr-data-build/scripts/write_visual_run.py +0 -0
  16. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/__init__.py +0 -0
  17. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/LICENSE +0 -0
  18. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/PROVENANCE.json +0 -0
  19. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/__init__.py +0 -0
  20. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/__init__.pyi +0 -0
  21. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/_version.py +0 -0
  22. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/cal_rec_boxes/__init__.py +0 -0
  23. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/cal_rec_boxes/main.py +0 -0
  24. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_cls/__init__.py +0 -0
  25. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_cls/main.py +0 -0
  26. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_cls/utils.py +0 -0
  27. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_det/__init__.py +0 -0
  28. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_det/main.py +0 -0
  29. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_det/utils.py +0 -0
  30. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/__init__.py +0 -0
  31. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/main.py +0 -0
  32. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/typings.py +0 -0
  33. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/utils.py +0 -0
  34. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/config.yaml +0 -0
  35. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/inference_engine/__init__.py +0 -0
  36. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/inference_engine/base.py +0 -0
  37. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/inference_engine/onnxruntime/__init__.py +0 -0
  38. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/inference_engine/onnxruntime/main.py +0 -0
  39. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/inference_engine/onnxruntime/provider_config.py +0 -0
  40. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/main.py +0 -0
  41. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/models/PP-OCRv6_det_small.onnx +0 -0
  42. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/models/PP-OCRv6_rec_small.onnx +0 -0
  43. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/models/ch_ppocr_mobile_v2.0_cls_mobile.onnx +0 -0
  44. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/py.typed +0 -0
  45. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/utils/__init__.py +0 -0
  46. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/utils/load_image.py +0 -0
  47. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/utils/log.py +0 -0
  48. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/utils/model_resolver.py +0 -0
  49. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/utils/output.py +0 -0
  50. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/utils/parse_parameters.py +0 -0
  51. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/utils/process_img.py +0 -0
  52. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/utils/typings.py +0 -0
  53. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/utils/utils.py +0 -0
  54. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/__init__.py +0 -0
  55. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/acquisition/__init__.py +0 -0
  56. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/acquisition/derived_credentials.py +0 -0
  57. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/acquisition/http.py +0 -0
  58. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/acquisition/parsing.py +0 -0
  59. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/acquisition/ranges.py +0 -0
  60. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/acquisition/result_download.py +0 -0
  61. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/acquisition/retention_admission.py +0 -0
  62. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/acquisition/sandbox.py +0 -0
  63. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/acquisition/sandbox_bootstrap.py +0 -0
  64. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/acquisition/url_policy.py +0 -0
  65. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/agent_runtime.py +0 -0
  66. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/assets/logo-ink.svg +0 -0
  67. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/backends/__init__.py +0 -0
  68. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/backends/pandas_backend.py +0 -0
  69. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/backends/polars_backend.py +0 -0
  70. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/backends/protocol.py +0 -0
  71. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/backends/reference.py +0 -0
  72. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/backends/registry.py +0 -0
  73. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/backends/restrictions.py +0 -0
  74. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/bounded_query.py +0 -0
  75. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/bounded_scratch_sink.py +0 -0
  76. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/canonical.py +0 -0
  77. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/catalog_job.py +0 -0
  78. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/cli.py +0 -0
  79. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/compact_worker.py +0 -0
  80. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/contracts.py +0 -0
  81. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/coordinator.py +0 -0
  82. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/crosswalks.py +0 -0
  83. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/declared_checks.py +0 -0
  84. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/delta.py +0 -0
  85. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/delta_checks.py +0 -0
  86. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/delta_classifier.py +0 -0
  87. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/delta_persist.py +0 -0
  88. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/delta_recompute.py +0 -0
  89. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/delta_rows.py +0 -0
  90. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/deploy.py +0 -0
  91. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/deploy_target.py +0 -0
  92. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/deployment_evidence.py +0 -0
  93. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/documents/__init__.py +0 -0
  94. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/documents/_worker_capability.py +0 -0
  95. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/documents/capture.py +0 -0
  96. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/documents/contracts.py +0 -0
  97. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/documents/lane.py +0 -0
  98. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/documents/ocr.py +0 -0
  99. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/documents/pdf.py +0 -0
  100. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/documents/registry.py +0 -0
  101. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/documents/sandbox.py +0 -0
  102. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/documents/selections.py +0 -0
  103. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/documents/tables.py +0 -0
  104. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/documents/vendor_rapidocr.py +0 -0
  105. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/events.py +0 -0
  106. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/fast_delimited.py +0 -0
  107. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/fetch_egress_smoke.py +0 -0
  108. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/formats.py +0 -0
  109. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/governors.py +0 -0
  110. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/hosted_bootstrap.py +0 -0
  111. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/hosted_crawler.py +0 -0
  112. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/hosted_crawler_container_smoke.py +0 -0
  113. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/hosted_crawler_fetch.py +0 -0
  114. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/hosted_crawler_job.py +0 -0
  115. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/hosted_crawler_protocol.py +0 -0
  116. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/hosted_deploy.py +0 -0
  117. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/hosted_ingestion_contract.py +0 -0
  118. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/hosted_ingestion_job.py +0 -0
  119. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/hosted_ingestion_job_smoke.py +0 -0
  120. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/hosted_ingestion_worker.py +0 -0
  121. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/hosted_rlimit_as_container_smoke.py +0 -0
  122. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/hosted_run_worker.py +0 -0
  123. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/hosted_session_container_smoke.py +0 -0
  124. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/hosted_session_worker.py +0 -0
  125. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/hosted_session_worker_job_smoke.py +0 -0
  126. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/hosted_stream_recorder_container_smoke.py +0 -0
  127. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/hosted_stream_recorder_job.py +0 -0
  128. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/hosted_stream_subscription_container_smoke.py +0 -0
  129. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/hosted_stream_subscription_worker.py +0 -0
  130. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/hosted_worker.py +0 -0
  131. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/incremental_slice_executor.py +0 -0
  132. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/incremental_worker.py +0 -0
  133. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ingestion/__init__.py +0 -0
  134. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ingestion/contracts.py +0 -0
  135. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ingestion/faults.py +0 -0
  136. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ingestion/gcs_store.py +0 -0
  137. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ingestion/spool.py +0 -0
  138. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ingestion/store.py +0 -0
  139. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/inprocess_acquisition.py +0 -0
  140. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/key_seam.py +0 -0
  141. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/legacy_table_recovery.py +0 -0
  142. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/legacy_table_recovery_contract.py +0 -0
  143. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/linux_process_boundary.py +0 -0
  144. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/local_contracts.py +0 -0
  145. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/nbrender/CONTRACT.md +0 -0
  146. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/nbrender/__init__.py +0 -0
  147. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/nbrender/chrome.py +0 -0
  148. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/nbrender/code_body.py +0 -0
  149. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/nbrender/document.py +0 -0
  150. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/nbrender/frame.py +0 -0
  151. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/nbrender/interactive.py +0 -0
  152. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/nbrender/markdown_body.py +0 -0
  153. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/nbrender/mr_components.py +0 -0
  154. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/nbrender/outputs_data.py +0 -0
  155. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/nbrender/outputs_rich.py +0 -0
  156. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/nbrender/outputs_source.py +0 -0
  157. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/nbrender/outputs_stage.py +0 -0
  158. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/nbrender/outputs_text.py +0 -0
  159. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/nbrender/parse.py +0 -0
  160. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/nbrender/status.py +0 -0
  161. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/nbrender/tokens.py +0 -0
  162. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/notebook.py +0 -0
  163. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/offline.py +0 -0
  164. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/operation_registry.py +0 -0
  165. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/operator_setup.py +0 -0
  166. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/page_coverage.py +0 -0
  167. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/part_check_evidence.py +0 -0
  168. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/pipeline.py +0 -0
  169. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/plan_graph.py +0 -0
  170. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/preparation/__init__.py +0 -0
  171. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/preparation/contracts.py +0 -0
  172. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/preparation/engine.py +0 -0
  173. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/preparation/errors.py +0 -0
  174. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/preparation/gates.py +0 -0
  175. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/preparation/joins.py +0 -0
  176. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/preparation/profile.py +0 -0
  177. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/preparation/table.py +0 -0
  178. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/preparation/transforms.py +0 -0
  179. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/progress_events.py +0 -0
  180. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/__init__.py +0 -0
  181. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/_openpyxl.py +0 -0
  182. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/budgets.py +0 -0
  183. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/configurable_delimited.py +0 -0
  184. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/containers.py +0 -0
  185. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/contracts.py +0 -0
  186. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/delimited.py +0 -0
  187. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/geojson_vector.py +0 -0
  188. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/geopackage.py +0 -0
  189. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/geoparquet.py +0 -0
  190. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/grib2/__init__.py +0 -0
  191. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/grib2/admission.py +0 -0
  192. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/grib2/collection.py +0 -0
  193. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/grib2/collection_reader.py +0 -0
  194. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/grib2/decode.py +0 -0
  195. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/grib2/geometry.py +0 -0
  196. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/grib2/portable_math.py +0 -0
  197. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/grib_eccodes.py +0 -0
  198. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/html_tabular.py +0 -0
  199. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/html_web_extract.py +0 -0
  200. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/json_tabular.py +0 -0
  201. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/parquet_tabular.py +0 -0
  202. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/pcaxis_px.py +0 -0
  203. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/protobuf_tabular.py +0 -0
  204. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/raster/__init__.py +0 -0
  205. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/raster/_bytes.py +0 -0
  206. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/raster/decode.py +0 -0
  207. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/raster/family.py +0 -0
  208. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/raster/jpeg2000.py +0 -0
  209. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/raster/profiles.py +0 -0
  210. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/raster/rendered.py +0 -0
  211. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/raster/safe.py +0 -0
  212. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/raster/sentinel_safe.py +0 -0
  213. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/raster/tiff.py +0 -0
  214. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/registry.py +0 -0
  215. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/README.md +0 -0
  216. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.0.0/cities_one_stream/cities.csv.gz +0 -0
  217. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.0.0/cities_one_stream/expected.json +0 -0
  218. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.1.0/cities_one_stream/cities.csv.gz +0 -0
  219. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.1.0/cities_one_stream/expected.json +0 -0
  220. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/archive.tar/1.0.0/cities_beside_a_directory_entry/cities.tar +0 -0
  221. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/archive.tar/1.0.0/cities_beside_a_directory_entry/expected.json +0 -0
  222. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/archive.tar/1.1.0/cities_beside_a_directory_entry/cities.tar +0 -0
  223. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/archive.tar/1.1.0/cities_beside_a_directory_entry/expected.json +0 -0
  224. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/archive.zip/1.0.0/cities_beside_a_second_member/cities.zip +0 -0
  225. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/archive.zip/1.0.0/cities_beside_a_second_member/expected.json +0 -0
  226. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/archive.zip/1.1.0/dwd_semicolon_station_member/dwd-station.zip +0 -0
  227. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/archive.zip/1.1.0/dwd_semicolon_station_member/expected.json +0 -0
  228. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/archive.zip/1.2.0/dwd_semicolon_station_member/dwd-station.zip +0 -0
  229. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/archive.zip/1.2.0/dwd_semicolon_station_member/expected.json +0 -0
  230. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/an_ordinary_comma_separated_table/cities.csv +0 -0
  231. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/an_ordinary_comma_separated_table/expected.json +0 -0
  232. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/quoted_fields_holding_the_delimiter/cities.tsv +0 -0
  233. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/quoted_fields_holding_the_delimiter/expected.json +0 -0
  234. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/delimited_text/1.1.0/an_hourly_observation_table_served_as_plain_text/expected.json +0 -0
  235. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/delimited_text/1.1.0/an_hourly_observation_table_served_as_plain_text/observations.csv +0 -0
  236. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/delimited_text/2.0.0/publisher_preamble/expected.json +0 -0
  237. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/delimited_text/2.0.0/publisher_preamble/indices.csv +0 -0
  238. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/geojson.vector/1.0.0/czech_capital/expected.json +0 -0
  239. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/geojson.vector/1.0.0/czech_capital/places.geojson +0 -0
  240. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/geopackage.vector/1.0.0/epsg_4326_feature/expected.json +0 -0
  241. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/geopackage.vector/1.0.0/epsg_4326_feature/places.gpkg +0 -0
  242. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/geoparquet.vector/1.0.0/primary_wkb_point/expected.json +0 -0
  243. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/geoparquet.vector/1.0.0/primary_wkb_point/places.parquet +0 -0
  244. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/html.tabular/1.0.0/sanitized_table/expected.json +0 -0
  245. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/html.tabular/1.0.0/sanitized_table/table.html +0 -0
  246. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/html.web_extract/1.0.0/json_ld_scorecards/expected.json +0 -0
  247. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/html.web_extract/1.0.0/json_ld_scorecards/scorecards.html +0 -0
  248. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/html.web_extract/1.1.0/article_text_order/article.html +0 -0
  249. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/html.web_extract/1.1.0/article_text_order/expected.json +0 -0
  250. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/image.rendered/1.0.0/tiny_png/expected.json +0 -0
  251. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/image.rendered/1.0.0/tiny_png/tiny-rendered.png +0 -0
  252. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/json.tabular/1.0.0/nested_hourly_observations/expected.json +0 -0
  253. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/json.tabular/1.0.0/nested_hourly_observations/stations.json +0 -0
  254. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/json.tabular/1.1.0/an_observation_stream_served_as_plain_text/expected.json +0 -0
  255. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/json.tabular/1.1.0/an_observation_stream_served_as_plain_text/observations.ndjson +0 -0
  256. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/meteorology.bufr/1.0.0/eccodes_bufr4_subset/eccodes-bufr4.bufr +0 -0
  257. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/meteorology.bufr/1.0.0/eccodes_bufr4_subset/expected.json +0 -0
  258. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/meteorology.grib/1.0.0/eccodes_grib1_origin/expected.json +0 -0
  259. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/meteorology.grib/1.0.0/eccodes_grib1_origin/regular-ll-surface.grib1 +0 -0
  260. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/microdata.sas_xpt/1.0.0/two_raw_columns/expected.json +0 -0
  261. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/microdata.sas_xpt/1.0.0/two_raw_columns/survey.xpt +0 -0
  262. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/microdata.spss_sav/1.0.0/two_raw_columns/expected.json +0 -0
  263. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/microdata.spss_sav/1.0.0/two_raw_columns/survey.sav +0 -0
  264. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/microdata.stata_dta/1.0.0/two_raw_columns/expected.json +0 -0
  265. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/microdata.stata_dta/1.0.0/two_raw_columns/stata.dta +0 -0
  266. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/official.pcaxis_px/1.0.0/population_by_region_and_year/expected.json +0 -0
  267. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/official.pcaxis_px/1.0.0/population_by_region_and_year/population.px +0 -0
  268. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/official.sdmx_json/1.0.0/compact_population_series/expected.json +0 -0
  269. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/official.sdmx_json/1.0.0/compact_population_series/population.json +0 -0
  270. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/parquet.tabular/1.0.0/two_columns/expected.json +0 -0
  271. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/parquet.tabular/1.0.0/two_columns/prices.parquet +0 -0
  272. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/protobuf.tabular/1.0.0/gtfs_realtime_trip_updates/expected.json +0 -0
  273. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/protobuf.tabular/1.0.0/gtfs_realtime_trip_updates/gtfs-realtime.desc +0 -0
  274. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/protobuf.tabular/1.0.0/gtfs_realtime_trip_updates/trip-updates.pb +0 -0
  275. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/raster.geospatial/1.0.0/tiny_geotiff/expected.json +0 -0
  276. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/raster.geospatial/1.0.0/tiny_geotiff/tiny-geospatial.tif +0 -0
  277. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/satellite.goes_abi_l2/1.0.0/authored_cmi_window/expected.json +0 -0
  278. {mostlyright_data-0.18.0 → mostlyright_data-0.18.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
  279. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/satellite.himawari_hsd/1.0.0/authored_b13_single_bzip2/expected.json +0 -0
  280. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/satellite.himawari_hsd/1.0.0/authored_b13_single_bzip2/himawari-b13-0101-bzip2.dat +0 -0
  281. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/satellite.himawari_hsd_complete/1.0.0/authored_b13_three_segment_scan/expected.json +0 -0
  282. {mostlyright_data-0.18.0 → mostlyright_data-0.18.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
  283. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/satellite.msg_seviri_l15/1.0.0/authored_calibrated_complete_visir/expected.json +0 -0
  284. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/satellite.msg_seviri_l15/1.0.0/authored_calibrated_complete_visir/msg-seviri-l15.zip +0 -0
  285. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/satellite.sentinel_safe/1.0.0/authored_b02_scl_window/expected.json +0 -0
  286. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/satellite.sentinel_safe/1.0.0/authored_b02_scl_window/sentinel-safe-b02-scl.zip +0 -0
  287. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/satellite.xrit_image/1.0.0/authored_complete_raw_counts/expected.json +0 -0
  288. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/satellite.xrit_image/1.0.0/authored_complete_raw_counts/xrit-complete-image.zip +0 -0
  289. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/scientific.fits/1.0.0/tiny_primary_window/expected.json +0 -0
  290. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/scientific.fits/1.0.0/tiny_primary_window/tiny-primary.fits +0 -0
  291. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/scientific.hdf4/1.0.0/authored_temperature_window/expected.json +0 -0
  292. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/scientific.hdf4/1.0.0/authored_temperature_window/temperature.hdf +0 -0
  293. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/scientific.hdf5/1.0.0/authored_temperature_window/expected.json +0 -0
  294. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/scientific.hdf5/1.0.0/authored_temperature_window/temperature.h5 +0 -0
  295. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/scientific.hdf_eos2/1.0.0/authored_grid_temperature_window/expected.json +0 -0
  296. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/scientific.hdf_eos2/1.0.0/authored_grid_temperature_window/nasa-hdfeos2-grid.hdf +0 -0
  297. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/scientific.hdf_eos2/1.0.0/authored_swath_temperature_window/expected.json +0 -0
  298. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/scientific.hdf_eos2/1.0.0/authored_swath_temperature_window/nasa-hdfeos2-swath.hdf +0 -0
  299. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/scientific.netcdf/1.0.0/authored_classic_temperature_window/expected.json +0 -0
  300. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/scientific.netcdf/1.0.0/authored_classic_temperature_window/temperature-classic.nc +0 -0
  301. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/scientific.zarr/1.0.0/authored_v3_temperature_window/expected.json +0 -0
  302. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/scientific.zarr/1.0.0/authored_v3_temperature_window/temperature-zarr-v3.zip +0 -0
  303. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.0.0/an_ordinary_table_beside_a_second_sheet/cities.xlsx +0 -0
  304. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.0.0/an_ordinary_table_beside_a_second_sheet/expected.json +0 -0
  305. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.0.0/shares_the_workbook_had_already_computed/expected.json +0 -0
  306. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.0.0/shares_the_workbook_had_already_computed/shares.xlsx +0 -0
  307. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.1.0/shares_the_workbook_had_already_computed/expected.json +0 -0
  308. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.1.0/shares_the_workbook_had_already_computed/shares.xlsx +0 -0
  309. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/README.md +0 -0
  310. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/gfs_2m_temperature/expected.json +0 -0
  311. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/gfs_2m_temperature/gfs-2m-temperature.grib2 +0 -0
  312. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_2m_temperature/expected.json +0 -0
  313. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_2m_temperature/hrrr-2m-temperature.grib2 +0 -0
  314. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_categorical_rain/expected.json +0 -0
  315. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_categorical_rain/hrrr-categorical-rain.grib2 +0 -0
  316. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/2.0.0/hrrr_2m_temperature/expected.json +0 -0
  317. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/2.0.0/hrrr_2m_temperature/hrrr-2m-temperature.grib2 +0 -0
  318. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/3.0.0/gfs_and_hrrr_categorical_rain/expected.json +0 -0
  319. {mostlyright_data-0.18.0 → mostlyright_data-0.18.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
  320. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/plain_filing_fact/expected.json +0 -0
  321. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/plain_filing_fact/filing.xml +0 -0
  322. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/xml_inline_fact/expected.json +0 -0
  323. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/xml_inline_fact/filing.xhtml +0 -0
  324. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/pacer_rss_feed/expected.json +0 -0
  325. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/pacer_rss_feed/feed.xml +0 -0
  326. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/sec_form_d_filing/expected.json +0 -0
  327. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/sec_form_d_filing/filing.xml +0 -0
  328. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/unified_agenda_extract/agenda.xml +0 -0
  329. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/unified_agenda_extract/expected.json +0 -0
  330. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples.py +0 -0
  331. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/scientific.py +0 -0
  332. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/scientific_arrays/__init__.py +0 -0
  333. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/scientific_arrays/container.py +0 -0
  334. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/scientific_arrays/goes.py +0 -0
  335. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/scientific_arrays/hdf4.py +0 -0
  336. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/scientific_arrays/hdf4_bridge.py +0 -0
  337. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/scientific_arrays/hdf5.py +0 -0
  338. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/scientific_arrays/native.py +0 -0
  339. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/scientific_arrays/netcdf.py +0 -0
  340. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/scientific_arrays/profiles.py +0 -0
  341. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/scientific_arrays/raw.py +0 -0
  342. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/scientific_arrays/zarr.py +0 -0
  343. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/scientific_catalog.py +0 -0
  344. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/scientific_segmented/__init__.py +0 -0
  345. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/scientific_segmented/asset_sets.py +0 -0
  346. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/scientific_segmented/formats.py +0 -0
  347. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/scientific_segmented/hsd.py +0 -0
  348. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/scientific_segmented/native.py +0 -0
  349. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/scientific_segmented/profiles.py +0 -0
  350. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/scientific_segmented/reader.py +0 -0
  351. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/scientific_segmented/xrit.py +0 -0
  352. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/sdmx_json.py +0 -0
  353. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/spreadsheet.py +0 -0
  354. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/statistical_microdata.py +0 -0
  355. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/tabular.py +0 -0
  356. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/vector.py +0 -0
  357. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/vector_wkb.py +0 -0
  358. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/xbrl_facts.py +0 -0
  359. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/xml_tabular.py +0 -0
  360. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/recipe.py +0 -0
  361. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/review.py +0 -0
  362. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/rowset.py +0 -0
  363. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/run_execution_v4.py +0 -0
  364. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/run_phase_timing.py +0 -0
  365. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/session_probes.py +0 -0
  366. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/signing.py +0 -0
  367. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/skill_assets.py +0 -0
  368. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/source_bootstrap.py +0 -0
  369. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/source_bundle_writer.py +0 -0
  370. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/source_discovery.py +0 -0
  371. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/source_history_candidate_child.py +0 -0
  372. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/source_history_transform_child.py +0 -0
  373. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/source_inventory.py +0 -0
  374. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/source_partition.py +0 -0
  375. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/source_raw_inventory.py +0 -0
  376. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/source_state_index.py +0 -0
  377. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/__init__.py +0 -0
  378. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/_adapter_steps.py +0 -0
  379. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/adapters.py +0 -0
  380. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/authenticated_https.py +0 -0
  381. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/authenticated_https_v2.py +0 -0
  382. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/authenticated_https_v3.py +0 -0
  383. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/cadence.py +0 -0
  384. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/cadence_emission.py +0 -0
  385. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/cadence_history.py +0 -0
  386. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/__init__.py +0 -0
  387. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/admission.py +0 -0
  388. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/authoring.py +0 -0
  389. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/authoring_policy.py +0 -0
  390. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/authoring_shards.py +0 -0
  391. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/bounded_io.py +0 -0
  392. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/channel.py +0 -0
  393. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/channel_client.py +0 -0
  394. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/contracts.py +0 -0
  395. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/coverage.py +0 -0
  396. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/embedding.py +0 -0
  397. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/entry_v2.py +0 -0
  398. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/fill.py +0 -0
  399. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/fill_partitions.py +0 -0
  400. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/fill_staging.py +0 -0
  401. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/gating.py +0 -0
  402. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/generation_receipt.py +0 -0
  403. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/harvest/__init__.py +0 -0
  404. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/harvest/ckan.py +0 -0
  405. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/harvest/datagov_v4.py +0 -0
  406. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/harvest/protocol.py +0 -0
  407. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/harvest/sdmx.py +0 -0
  408. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/harvest/stac.py +0 -0
  409. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/hosted_catalog.py +0 -0
  410. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/identity_history.py +0 -0
  411. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/neural.py +0 -0
  412. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/packed_catalog.py +0 -0
  413. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/packed_retrieval.py +0 -0
  414. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/packed_writer.py +0 -0
  415. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/query_trace.py +0 -0
  416. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/recommend.py +0 -0
  417. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/retrieval.py +0 -0
  418. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/retrieval_manifest.py +0 -0
  419. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/sealed.py +0 -0
  420. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/search.py +0 -0
  421. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/streaming_delta.py +0 -0
  422. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/update.py +0 -0
  423. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/collections.py +0 -0
  424. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/contracts.py +0 -0
  425. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/dataset.py +0 -0
  426. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/deletion.py +0 -0
  427. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/document_projection.py +0 -0
  428. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/fitness.py +0 -0
  429. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/governance.py +0 -0
  430. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/hosted.py +0 -0
  431. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/integration.py +0 -0
  432. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/page_collections.py +0 -0
  433. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/range_reader.py +0 -0
  434. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/registry.py +0 -0
  435. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/rights_rule.py +0 -0
  436. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/source_cadence_vectors.v1.json +0 -0
  437. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/sports.py +0 -0
  438. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream.py +0 -0
  439. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream_capture_session.py +0 -0
  440. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.array-frames.v4.json +0 -0
  441. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.cursor-resume.v3.json +0 -0
  442. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.json-keepalive.v4.json +0 -0
  443. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-ed25519.v2.json +0 -0
  444. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-hmac.v2.json +0 -0
  445. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-hmac384.v2.json +0 -0
  446. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-hmac512.v2.json +0 -0
  447. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame.v2.json +0 -0
  448. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-header-rsa.v2.json +0 -0
  449. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-header.v2.json +0 -0
  450. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-permessage-jwt.v2.json +0 -0
  451. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-permessage.v2.json +0 -0
  452. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-prelude.v2.json +0 -0
  453. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-query.v2.json +0 -0
  454. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-subprotocol.v2.json +0 -0
  455. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-subscribe.v2.json +0 -0
  456. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-urlpath.v2.json +0 -0
  457. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.loose-frames.v4.json +0 -0
  458. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.text-keepalive.v4.json +0 -0
  459. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream_connectors/polymarket.clob-market.v1.json +0 -0
  460. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream_credential.py +0 -0
  461. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream_prelude.py +0 -0
  462. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream_recorder.py +0 -0
  463. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream_registry.py +0 -0
  464. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream_rotation.py +0 -0
  465. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream_segment_recorder.py +0 -0
  466. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream_series.py +0 -0
  467. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream_signing.py +0 -0
  468. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream_transport.py +0 -0
  469. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sql_transform_engine.py +0 -0
  470. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/stream_order_vector.py +0 -0
  471. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/stream_recovery_objects.py +0 -0
  472. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/stream_subscription_sealer.py +0 -0
  473. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/stream_venue.py +0 -0
  474. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/stream_venue_staging.py +0 -0
  475. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/studio_boundary.py +0 -0
  476. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/studio_subscription_control.py +0 -0
  477. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/table_manifest.py +0 -0
  478. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/table_parts.py +0 -0
  479. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/table_profile.py +0 -0
  480. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/__init__.py +0 -0
  481. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/acquire.py +0 -0
  482. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/acquire_cancel.py +0 -0
  483. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/activity.py +0 -0
  484. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/approvals.py +0 -0
  485. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/categories.py +0 -0
  486. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/collection_plan.py +0 -0
  487. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/commands.py +0 -0
  488. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/dataset-categories-v1.json +0 -0
  489. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/download.py +0 -0
  490. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/narrative.py +0 -0
  491. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/parity.py +0 -0
  492. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/probe.py +0 -0
  493. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/propose.py +0 -0
  494. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/recipe.py +0 -0
  495. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/research.py +0 -0
  496. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/router.py +0 -0
  497. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/runs.py +0 -0
  498. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/session.py +0 -0
  499. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/stream.py +0 -0
  500. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/stream_venue.py +0 -0
  501. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/transport.py +0 -0
  502. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/user_agent.py +0 -0
  503. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/v4.py +0 -0
  504. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/v4_artifacts.py +0 -0
  505. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/v4_catalog.py +0 -0
  506. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/v4_connections.py +0 -0
  507. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/v4_dataset_covers.py +0 -0
  508. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/v4_datasets.py +0 -0
  509. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/v4_handoff.py +0 -0
  510. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/v4_narrative.py +0 -0
  511. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/v4_query.py +0 -0
  512. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/v4_runs.py +0 -0
  513. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/v4_secrets.py +0 -0
  514. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/v4_stream.py +0 -0
  515. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/v4_tables.py +0 -0
  516. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/vocabulary.py +0 -0
  517. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/workers.py +0 -0
  518. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ucum/TABLE-PIN.json +0 -0
  519. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ucum/ucum-subset.v1.json +0 -0
  520. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/unit_flow.py +0 -0
  521. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/units.py +0 -0
  522. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ux/__init__.py +0 -0
  523. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ux/attendance.py +0 -0
  524. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ux/clarification.py +0 -0
  525. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ux/cloud_auth.py +0 -0
  526. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ux/commands/__init__.py +0 -0
  527. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ux/commands/auth.py +0 -0
  528. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ux/commands/catalog_author.py +0 -0
  529. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ux/commands/catalog_harvest.py +0 -0
  530. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ux/commands/catalog_publish.py +0 -0
  531. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ux/commands/clarify.py +0 -0
  532. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ux/commands/login.py +0 -0
  533. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ux/commands/record.py +0 -0
  534. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ux/commands/whoami.py +0 -0
  535. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ux/credential_native.py +0 -0
  536. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ux/credential_store.py +0 -0
  537. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ux/credentials.py +0 -0
  538. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ux/headline.py +0 -0
  539. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ux/hosted_acquisition.py +0 -0
  540. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ux/local_review.py +0 -0
  541. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ux/login.py +0 -0
  542. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ux/path_kind.py +0 -0
  543. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ux/plain_file.py +0 -0
  544. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ux/readers.py +0 -0
  545. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ux/remediation.py +0 -0
  546. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ux/render.py +0 -0
  547. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/v4_acquisition.py +0 -0
  548. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/v4_check_dialect.py +0 -0
  549. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/v4_closed_source.py +0 -0
  550. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/v4_document_pin.py +0 -0
  551. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/v4_reader_pin.py +0 -0
  552. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/v4_recipe.py +0 -0
  553. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/v4_required_controls.py +0 -0
  554. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/v4_snapshot_artifact.py +0 -0
  555. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/v4_stream_recording.py +0 -0
  556. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/v4_transform.py +0 -0
  557. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/v4_window.py +0 -0
  558. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/visual_run/__init__.py +0 -0
  559. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/visual_run/authoring.py +0 -0
  560. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/visual_run/contracts.py +0 -0
  561. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/visual_run/materialize.py +0 -0
  562. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/visual_run/observations.py +0 -0
  563. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/visual_run/reducer.py +0 -0
  564. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/visual_run/sdk.py +0 -0
  565. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/visual_run/store.py +0 -0
  566. {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/visual_run/transport.py +0 -0
@@ -1,10 +1,10 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mostlyright-data
3
- Version: 0.18.0
3
+ Version: 0.18.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/
7
- Requires-Python: <3.14,>=3.13
7
+ Requires-Python: >=3.13
8
8
  Provides-Extra: build
9
9
  Requires-Dist: hatchling==1.28.0; extra == 'build'
10
10
  Requires-Dist: uv-build==0.11.3; extra == 'build'
@@ -42,7 +42,7 @@ Requires-Dist: protobuf==7.35.1; extra == 'dev'
42
42
  Requires-Dist: pyarrow==23.0.1; extra == 'dev'
43
43
  Requires-Dist: pyclipper==1.4.0; extra == 'dev'
44
44
  Requires-Dist: pycparser==3.0; extra == 'dev'
45
- Requires-Dist: pyhdf==0.11.7; ((sys_platform == 'linux' and platform_machine == 'x86_64') or (sys_platform == 'darwin' and platform_machine == 'arm64')) and extra == 'dev'
45
+ Requires-Dist: pyhdf==0.11.7; ((sys_platform == 'linux' and platform_machine == 'x86_64') or (sys_platform == 'darwin' and platform_machine == 'arm64' and python_full_version < '3.14')) and extra == 'dev'
46
46
  Requires-Dist: pypdfium2==5.13.0; extra == 'dev'
47
47
  Requires-Dist: pypublicdecompwt==2.8.1.6; extra == 'dev'
48
48
  Requires-Dist: pyreadstat==1.3.6; extra == 'dev'
@@ -155,7 +155,7 @@ Requires-Dist: eccodeslib==2.48.0.26; (sys_platform != 'win32') and extra == 'sc
155
155
  Requires-Dist: h5py==3.16.0; extra == 'scientific'
156
156
  Requires-Dist: netcdf4==1.7.4; extra == 'scientific'
157
157
  Requires-Dist: pillow==12.3.0; extra == 'scientific'
158
- Requires-Dist: pyhdf==0.11.7; ((sys_platform == 'linux' and platform_machine == 'x86_64') or (sys_platform == 'darwin' and platform_machine == 'arm64')) and extra == 'scientific'
158
+ Requires-Dist: pyhdf==0.11.7; ((sys_platform == 'linux' and platform_machine == 'x86_64') or (sys_platform == 'darwin' and platform_machine == 'arm64' and python_full_version < '3.14')) and extra == 'scientific'
159
159
  Requires-Dist: pypublicdecompwt==2.8.1.6; extra == 'scientific'
160
160
  Requires-Dist: rasterio==1.5.1; extra == 'scientific'
161
161
  Requires-Dist: zarr==3.3.0; extra == 'scientific'
@@ -173,7 +173,7 @@ they finish.
173
173
 
174
174
  ## Requirements
175
175
 
176
- Use CPython 3.13.
176
+ Use CPython 3.13 or newer. The retired local execution lane (`[local,scientific]` extras) still needs 3.13.
177
177
 
178
178
  ## Install
179
179
 
@@ -10,7 +10,7 @@ they finish.
10
10
 
11
11
  ## Requirements
12
12
 
13
- Use CPython 3.13.
13
+ Use CPython 3.13 or newer. The retired local execution lane (`[local,scientific]` extras) still needs 3.13.
14
14
 
15
15
  ## Install
16
16
 
@@ -1,9 +1,9 @@
1
1
  [project]
2
2
  name = "mostlyright-data"
3
- version = "0.18.0"
3
+ version = "0.18.2"
4
4
  description = "Mostly Right CLI for reproducible, reviewed Parquet datasets"
5
5
  readme = "README.md"
6
- requires-python = ">=3.13,<3.14"
6
+ requires-python = ">=3.13"
7
7
  # The base distribution IS the thin client (ADR 0021): pure Python, no compiled extension anywhere
8
8
  # in the install closure, and -- as it turns out -- no third-party package at all. Every runtime
9
9
  # dependency this project had was reached only from the local execution lane, so all of them moved
@@ -50,7 +50,7 @@ mostlyright-grib = [
50
50
  antlr4-python3-runtime = { path = "vendor/wheels/antlr4_python3_runtime-4.9.3-py3-none-any.whl" }
51
51
  mostlyright-studio-client-v3 = { path = "vendor/wheels/mostlyright_studio_client_v3-3.0.0-py3-none-any.whl" }
52
52
  pyhdf = [
53
- { path = "vendor/wheels/pyhdf-0.11.7-cp313-cp313-macosx_15_0_arm64.whl", marker = "sys_platform == 'darwin' and platform_machine == 'arm64'" },
53
+ { path = "vendor/wheels/pyhdf-0.11.7-cp313-cp313-macosx_15_0_arm64.whl", marker = "sys_platform == 'darwin' and platform_machine == 'arm64' and python_full_version < '3.14'" },
54
54
  ]
55
55
 
56
56
  [project.scripts]
@@ -198,7 +198,7 @@ scientific = [
198
198
  "netCDF4==1.7.4",
199
199
  # Linux resolves the exact upstream wheel. macOS arm64 uses the reviewed source build,
200
200
  # because upstream's CP313 wheel is built with an unsupported macOS 26 deployment floor.
201
- "pyhdf==0.11.7; (sys_platform == 'linux' and platform_machine == 'x86_64') or (sys_platform == 'darwin' and platform_machine == 'arm64')",
201
+ "pyhdf==0.11.7; (sys_platform == 'linux' and platform_machine == 'x86_64') or (sys_platform == 'darwin' and platform_machine == 'arm64' and python_full_version < '3.14')",
202
202
  "Pillow==12.3.0",
203
203
  "pypublicdecompwt==2.8.1.6",
204
204
  "rasterio==1.5.1",
@@ -57,7 +57,6 @@ from mostlyright.data_harness.canonical import (
57
57
  CanonicalJSONError,
58
58
  canonical_json_bytes,
59
59
  canonical_sha256,
60
- parse_json,
61
60
  )
62
61
  from mostlyright.data_harness.sources.authenticated_https import _canonical_origin
63
62
  from mostlyright.data_harness.sources.authenticated_https_v2 import (
@@ -69,7 +68,7 @@ from mostlyright.data_harness.sources.authenticated_https_v2 import (
69
68
  _parse_request,
70
69
  )
71
70
  from mostlyright.data_harness.sources.contracts import SourceContractError
72
- from mostlyright.data_harness.sources.stream_numbers import parse_json_numbers_as_text
71
+ from mostlyright.data_harness.sources.stream_numbers import parse_frame_json
73
72
 
74
73
  STREAM_CONNECTOR_VERSION = "harness-stream-connector.v1"
75
74
  STREAM_CONNECTOR_VERSION_V2 = "harness-stream-connector.v2"
@@ -860,11 +859,21 @@ class StreamConnectorConfig:
860
859
  The single reader every caller that reads a frame of this venue picks up, so a capture, a
861
860
  credential acknowledgement and a probe cannot disagree about whether ``0.5`` is a message
862
861
  or a decode error.
862
+
863
+ BOTH READINGS GO THROUGH THE FRAME READER, which differs from the document reader in one
864
+ bound and one only: how many JSON members one frame may carry. A frame is bounded by bytes
865
+ where it was assembled, and a venue asked about a large roster answers the whole roster in
866
+ one array; the canonical member ceiling was written for what this build seals, and applying
867
+ it here refused an answer this build had asked for. Whether that array IS a batch is this
868
+ document's word (``frame_shape``), and the reader is told it, because a batch is sealed
869
+ element by element and a single message is sealed whole: each is held at the read to what
870
+ its seal will hold it to. See
871
+ :func:`~mostlyright.data_harness.sources.stream_numbers.parse_frame_json`.
863
872
  """
864
873
 
865
- if self.numbers == NUMBERS_TEXT:
866
- return parse_json_numbers_as_text(text)
867
- return parse_json(text)
874
+ return parse_frame_json(
875
+ text, numbers_as_text=self.numbers == NUMBERS_TEXT, batches=self.admits_array_frames
876
+ )
868
877
 
869
878
  @property
870
879
  def ignores_untyped_messages(self) -> bool:
@@ -0,0 +1,338 @@
1
+ """Read a venue frame, in either number reading, under the bounds a frame actually has.
2
+
3
+ The text reading is a third reading beside :func:`parse_json` and :func:`parse_foreign_json`, for
4
+ a document whose numbers have to survive being sealed. A venue that writes a price as ``0.5``
5
+ writes a fractional number, and :func:`parse_json` refuses one because nothing fractional may
6
+ reach a digest;
7
+ :func:`parse_foreign_json` reads it as a float, which may be inspected but never written, so a frame
8
+ read that way could not become a recorded line. Neither answer is available to a reader whose
9
+ whole job is to keep the frame.
10
+
11
+ So the number is kept as the literal its sender wrote. ``parse_int`` and ``parse_float`` are
12
+ handed the exact text JSON's own grammar matched -- ``0.5``, ``-3``, ``1e9`` -- and that text is the
13
+ value. No precision is chosen, because none is computed: the string that comes back is the string
14
+ that went in, so ``0.10`` and ``0.1`` stay the two different things the venue said them as, and a
15
+ seventy-seven-digit integer keeps all seventy-seven digits. The result holds a string wherever a
16
+ number stood and is therefore an ordinary value of the canonical data model:
17
+ :func:`~mostlyright.data_harness.canonical.canonical_json_bytes` seals it and :func:`parse_json`
18
+ reads it back unchanged.
19
+
20
+ Everything else is exactly as strict as the canonical reader. ``NaN`` and ``Infinity`` are still
21
+ refused, and so are duplicate object keys, byte-order marks, non-strict UTF-8, unpaired surrogates,
22
+ and the depth and string-length bounds. The reader lives beside the canonical module rather than
23
+ inside it because that module's bytes are a cross-system pin.
24
+
25
+ THE MEMBER BOUND IS THE ONE THING A FRAME DOES NOT SHARE WITH A DOCUMENT, and
26
+ :func:`parse_frame_json` is the reader that says so, for BOTH number readings. A frame is already
27
+ bounded, by bytes, at the transport that assembled it; the canonical member ceiling was written for
28
+ what this build seals and digests, where a hundred thousand members is far past anything authored
29
+ here. A venue asked about a roster of sixteen hundred members answers all sixteen hundred in one
30
+ array, and a count written for a different kind of document refused the answer it had been asked
31
+ for. See :data:`MAX_FRAME_MEMBERS` for where the frame's ceiling comes from instead, and
32
+ :func:`parse_frame_json` for why nothing it admits is ever sealed as one value.
33
+ """
34
+
35
+ from __future__ import annotations
36
+
37
+ import json
38
+ import math
39
+ from collections.abc import Callable
40
+ from typing import Any
41
+
42
+ from mostlyright.data_harness.canonical import (
43
+ MAX_CANONICAL_DEPTH,
44
+ MAX_CANONICAL_INTEGER,
45
+ MAX_CANONICAL_MEMBERS,
46
+ MAX_CANONICAL_STRING_LENGTH,
47
+ CanonicalJSONError,
48
+ _parse_integer,
49
+ _reject_constant,
50
+ _reject_duplicate_pairs,
51
+ _reject_fraction,
52
+ _validate_unicode,
53
+ )
54
+
55
+ __all__ = [
56
+ "MAX_FRAME_MEMBERS",
57
+ "MAX_MESSAGE_MEMBERS",
58
+ "RECORDED_LINE_WRAPPER_MEMBERS",
59
+ "parse_frame_json",
60
+ ]
61
+
62
+ #: The largest number of JSON members one frame off a socket may be read as.
63
+ #:
64
+ #: A FRAME IS NOT A DOCUMENT THIS BUILD WRITES, and the canonical member ceiling was written for
65
+ #: one that is. :data:`~mostlyright.data_harness.canonical.MAX_CANONICAL_MEMBERS` bounds what may
66
+ #: be sealed, digested and read back, where a hundred thousand members is already far past
67
+ #: anything this repository authors. A frame is a venue's own answer to a subscription, and a
68
+ #: venue that is asked about sixteen hundred members may answer all sixteen hundred in one array,
69
+ #: each an object of a few dozen members with nested sides of its own. That frame is bounded
70
+ #: already -- by bytes, at the transport, where an assembled message past
71
+ #: ``MAX_MESSAGE_BYTES`` is refused before a reader ever sees it -- and bounding it a second time
72
+ #: by a count written for a different kind of document refuses an answer the venue was asked for.
73
+ #:
74
+ #: So the ceiling here is DERIVED FROM THE BOUND THAT ALREADY HOLDS rather than chosen: the
75
+ #: smallest JSON member is two bytes (``[]`` is one member in one pair of bytes, and every member
76
+ #: inside a container costs at least a delimiter and a character), so a frame of at most N bytes
77
+ #: cannot hold more than N // 2 members. The count therefore adds no capacity the byte bound did
78
+ #: not already grant -- it stays a real ceiling for a reader walking a value that is not bytes,
79
+ #: while never being the bound that decides a frame. The relationship is asserted against the
80
+ #: transport's own constant in the connector's tests; it is not imported, because the reader of a
81
+ #: frame's bytes has no business reaching the socket that assembled them.
82
+ MAX_FRAME_MEMBERS = (8 * 1024 * 1024) // 2
83
+
84
+ #: How many JSON members the WIDEST line this build writes adds around the message it carries.
85
+ #:
86
+ #: A venue message is written down more than once on its way to a table. The capture session
87
+ #: and the segment recorder write it as ``{"epoch": …, "message": …, "received_at": …}``, three
88
+ #: members it did not bring; the Recorder then seals it as one line of exactly the members
89
+ #: ``sources.stream.SEALED_FRAME_KEYS`` names -- the line object and seven scalar siblings
90
+ #: beside ``message`` -- which is eight. The ceiling below is derived from the widest of those,
91
+ #: because a message that fits the first line and not the last is admitted at the read and
92
+ #: refused at the seal, which is the failure this module exists to remove. The number is stated
93
+ #: here rather than imported, for the reason the frame ceiling states its own: this reader has
94
+ #: no business reaching the Recorder, and the tests hold the two equal so a key added to the
95
+ #: sealed line moves this or fails the build.
96
+ RECORDED_LINE_WRAPPER_MEMBERS = 8
97
+
98
+ #: The largest number of JSON members ONE MESSAGE may carry and still be sealed as one line.
99
+ #:
100
+ #: The frame ceiling above is about what a venue may answer with; this is about what this build
101
+ #: may write down, and it is the canonical ceiling less the widest line's wrapper. A message is
102
+ #: sealed by the canonical writer as one recorded line and read back by the strict reader as one,
103
+ #: so a message past this count is one the seal refuses whatever the read admitted. THE READ
104
+ #: THEREFORE HOLDS IT TOO: a frame that is one message is read under this ceiling exactly as it
105
+ #: always was, and a batch frame's elements are each read under it, because each becomes one
106
+ #: line. Only the batch as a whole may exceed it, up to the frame ceiling, because a batch is
107
+ #: never sealed whole. Nothing this reader admits is refused one step later for its size.
108
+ MAX_MESSAGE_MEMBERS = MAX_CANONICAL_MEMBERS - RECORDED_LINE_WRAPPER_MEMBERS
109
+
110
+
111
+ def parse_frame_json(
112
+ value: str | bytes | bytearray | memoryview, *, numbers_as_text: bool, batches: bool
113
+ ) -> Any:
114
+ """Read ONE FRAME off a socket, in either number reading, bounded the way a frame is bounded.
115
+
116
+ The two readings are the same reader here on purpose. Whether ``0.5`` is a message or a decode
117
+ error is the venue document's statement and is answered by ``numbers_as_text``; how large an
118
+ answer a venue may give is not a number-reading question at all, and a frame ceiling that
119
+ applied to only one of the two readings would be a build where a venue's answer was admitted
120
+ or refused according to how its prices are spelled.
121
+
122
+ EVERY OTHER BOUND IS THE CANONICAL ONE, UNCHANGED: duplicate object keys, byte-order marks,
123
+ non-strict UTF-8, ``NaN``/``Infinity``, out-of-range integers, unpaired surrogates, the
124
+ sixty-four-level nesting bound and the string-length bound all refuse exactly what they refuse
125
+ for a document. Only the member count differs, and it differs by what will be sealed.
126
+
127
+ ``batches`` is the document's word on whether an array frame is a batch of messages, and it
128
+ decides which ceiling holds over what. A frame that is ONE MESSAGE is read under
129
+ :data:`MAX_MESSAGE_MEMBERS`, because it becomes one recorded line and a line past the canonical
130
+ ceiling is one the seal refuses -- which is the count a frame was always read under, less the
131
+ widest line's wrapper. A frame that is a BATCH is read under :data:`MAX_FRAME_MEMBERS` as a
132
+ whole and under :data:`MAX_MESSAGE_MEMBERS` per element, because ``_admit_batch``
133
+ and the hosted feed's ``_frame_messages`` write each element as its own line with its own
134
+ sequence and the frame's arrival time, and the strict reader that reads a recording back
135
+ (``stream_recorder``) reads those LINES, one message each. So a frame carrying a venue's whole
136
+ roster becomes a thousand-odd ordinary documents, every one of them under the canonical
137
+ member ceiling, and that ceiling goes on holding over everything this build writes and
138
+ digests. A refusal for size is raised HERE, at the read every lane already guards, and
139
+ never one step later at a write no lane guards; the transport bounds the bytes, and every
140
+ place a frame is written down afterwards holds whatever the transport admitted.
141
+ """
142
+
143
+ return _read(
144
+ value,
145
+ number=_number_literal if numbers_as_text else None,
146
+ max_members=MAX_MESSAGE_MEMBERS,
147
+ batch_ceiling=MAX_FRAME_MEMBERS if batches else None,
148
+ )
149
+
150
+
151
+ def _read(
152
+ value: str | bytes | bytearray | memoryview,
153
+ *,
154
+ number: Callable[[str], str] | None,
155
+ max_members: int,
156
+ batch_ceiling: int | None = None,
157
+ ) -> Any:
158
+ """The one reading both entry points are, differing only in numbers and in member ceiling.
159
+
160
+ ``max_members`` bounds whatever is read as ONE VALUE: a document, a message, or one element
161
+ of a batch. With a ``batch_ceiling``, a top-level array is a batch -- walked one element at a
162
+ time, each under ``max_members`` with a count of its own, and the array as a whole held to
163
+ the batch ceiling beside them; anything that is not a top-level array is one value as
164
+ before. The paths and the depth are exactly what one walk over the whole array would have
165
+ named, so a refusal reads the same whichever way the array was walked.
166
+ """
167
+
168
+ if isinstance(value, str):
169
+ text = value
170
+ elif isinstance(value, (bytes, bytearray, memoryview)):
171
+ raw = bytes(value)
172
+ if raw.startswith(b"\xef\xbb\xbf"):
173
+ raise CanonicalJSONError("JSON_BOM", "$", "UTF-8 byte-order marks are not allowed")
174
+ try:
175
+ text = raw.decode("utf-8", errors="strict")
176
+ except UnicodeDecodeError as exc:
177
+ raise CanonicalJSONError(
178
+ "JSON_UTF8",
179
+ "$",
180
+ f"input is not strict UTF-8 at byte {exc.start}",
181
+ ) from None
182
+ else:
183
+ raise CanonicalJSONError(
184
+ "JSON_INPUT_TYPE",
185
+ "$",
186
+ "JSON input must be text or a bytes-like value",
187
+ )
188
+
189
+ if text.startswith("\ufeff"):
190
+ raise CanonicalJSONError("JSON_BOM", "$", "Unicode byte-order marks are not allowed")
191
+ try:
192
+ parsed = json.loads(
193
+ text,
194
+ object_pairs_hook=_reject_duplicate_pairs,
195
+ parse_int=number or _parse_integer,
196
+ parse_float=number or _reject_fraction,
197
+ parse_constant=_reject_constant,
198
+ )
199
+ except CanonicalJSONError:
200
+ raise
201
+ except json.JSONDecodeError as exc:
202
+ raise CanonicalJSONError(
203
+ "JSON_SYNTAX",
204
+ "$",
205
+ f"invalid JSON at line {exc.lineno}, column {exc.colno}",
206
+ ) from None
207
+ if batch_ceiling is None or not isinstance(parsed, list):
208
+ return _normalize(parsed, "$", depth=0, members=[0], max_members=max_members)
209
+ total = 1
210
+ for index, element in enumerate(parsed):
211
+ counted = [0]
212
+ _normalize(element, f"$[{index}]", depth=1, members=counted, max_members=max_members)
213
+ total += counted[0]
214
+ if total > batch_ceiling:
215
+ raise CanonicalJSONError("JSON_MEMBERS", "$", f"value exceeds {batch_ceiling} members")
216
+ return parsed
217
+
218
+
219
+ def _normalize(
220
+ value: Any,
221
+ path: str,
222
+ *,
223
+ depth: int,
224
+ members: list[int],
225
+ max_members: int,
226
+ ) -> Any:
227
+ """:func:`~mostlyright.data_harness.canonical._normalize_json`, with the ceiling as an argument.
228
+
229
+ Written here rather than reached for there because the canonical module's BYTES ARE A
230
+ CROSS-SYSTEM PIN and may not move to grow a parameter. Every bound below is the canonical
231
+ one, spelled the same way and raising the same code at the same path; ``max_members`` is the
232
+ only thing this walk is told rather than knows. That the two agree is not asserted by reading
233
+ them side by side -- ``tests/test_canonical.py`` walks a corpus through both and requires the
234
+ same value or the same refusal from each.
235
+
236
+ IT VALIDATES IN PLACE AND BUILDS NOTHING. The canonical walk returns a fresh tree because it
237
+ is handed arbitrary Python values -- tuples, ordered mappings, whatever a caller composed --
238
+ and has to hand back the one shape it seals. This walk is handed only what ``json.loads``
239
+ just built from a frame, which is already that shape, so a second tree of it would be the
240
+ same value at twice the cost. The cost matters because the frame is a venue's: eight
241
+ mebibytes of two-byte containers is millions of objects, and the parse that builds them is
242
+ the peak a hostile frame can reach in this process -- the same peak the canonical reader has
243
+ always reached on such a frame before its own count could trip -- and this walk does not
244
+ raise it. The parse is bounded by the transport's byte bound and by nothing else; nothing
245
+ here pretends the member count bounds memory, because it never did.
246
+
247
+ The fractional-number branch is here for the canonical module's non-finite refusal only.
248
+ A frame is read either strictly, where a fraction is refused at the scanner before this walk
249
+ ever sees it, or as text, where it never became a float; no caller of this reader admits one,
250
+ so the foreign-document allowance has nothing to correspond to, but a float that did arrive
251
+ would be refused with the same code the canonical walk gives it.
252
+ """
253
+
254
+ if depth > MAX_CANONICAL_DEPTH:
255
+ raise CanonicalJSONError(
256
+ "JSON_DEPTH",
257
+ path,
258
+ f"nesting exceeds {MAX_CANONICAL_DEPTH} levels",
259
+ )
260
+ members[0] += 1
261
+ if members[0] > max_members:
262
+ raise CanonicalJSONError(
263
+ "JSON_MEMBERS",
264
+ path,
265
+ f"value exceeds {max_members} members",
266
+ )
267
+
268
+ if value is None or type(value) is bool:
269
+ return value
270
+ if type(value) is int:
271
+ if not -MAX_CANONICAL_INTEGER - 1 <= value <= MAX_CANONICAL_INTEGER:
272
+ raise CanonicalJSONError(
273
+ "JSON_INTEGER_RANGE",
274
+ path,
275
+ "integer is outside the signed 64-bit range",
276
+ )
277
+ return value
278
+ if type(value) is float:
279
+ if not math.isfinite(value):
280
+ raise CanonicalJSONError(
281
+ "JSON_NONFINITE",
282
+ path,
283
+ "non-finite JSON numbers are unsupported",
284
+ )
285
+ raise CanonicalJSONError(
286
+ "JSON_NONINTEGER_NUMBER",
287
+ path,
288
+ "non-integer JSON numbers are unsupported",
289
+ )
290
+ if isinstance(value, str):
291
+ if len(value) > MAX_CANONICAL_STRING_LENGTH:
292
+ raise CanonicalJSONError(
293
+ "JSON_STRING_LENGTH",
294
+ path,
295
+ f"string exceeds {MAX_CANONICAL_STRING_LENGTH} code points",
296
+ )
297
+ _validate_unicode(value, path)
298
+ return value
299
+ if isinstance(value, dict):
300
+ if any(not isinstance(key, str) for key in value):
301
+ raise CanonicalJSONError(
302
+ "JSON_OBJECT_KEY",
303
+ path,
304
+ "object keys must all be strings",
305
+ )
306
+ for key, item in value.items():
307
+ _validate_unicode(key, f"{path}.<key>")
308
+ child = f"{path}.{key}" if key else f"{path}['']"
309
+ _normalize(item, child, depth=depth + 1, members=members, max_members=max_members)
310
+ return value
311
+ if isinstance(value, list):
312
+ for index, item in enumerate(value):
313
+ _normalize(
314
+ item,
315
+ f"{path}[{index}]",
316
+ depth=depth + 1,
317
+ members=members,
318
+ max_members=max_members,
319
+ )
320
+ return value
321
+ # A tuple is the one shape the canonical walk copies into a list. A walk that copies nothing
322
+ # cannot, and ``json.loads`` never produces one, so it is refused rather than half-handled.
323
+ raise CanonicalJSONError(
324
+ "JSON_VALUE_TYPE",
325
+ path,
326
+ f"unsupported value type {type(value).__name__}",
327
+ )
328
+
329
+
330
+ def _number_literal(value: str) -> str:
331
+ """Return a JSON number exactly as it was written, as text.
332
+
333
+ The hook JSON's own scanner hands the matched literal to, so this is the sender's spelling and
334
+ not a rendering of something parsed out of it. Nothing is widened, narrowed or rounded on the
335
+ way through, because nothing is converted.
336
+ """
337
+
338
+ return value
@@ -20,7 +20,11 @@ every frame to disk as it goes -- and this is what lets the pending prefix reach
20
20
  of waiting in RAM for the rest of the segment.
21
21
 
22
22
  The file is an ordinary append log, one canonical JSON object per line, raw frame bytes carried in
23
- base64 because a provider frame is bytes and a line is text. It is written with the work root's
23
+ base64 because a provider frame is bytes and a line is text -- in a LIST of pieces, because a
24
+ canonical string is bounded at ``MAX_CANONICAL_STRING_LENGTH`` code points and a frame the
25
+ transport admits may be eight mebibytes: every frame the feed accepted has to be one this file
26
+ can hold, whatever its size, or a segment fails at its high-water mark for one frame that had
27
+ nowhere else to go. It is written with the work root's
24
28
  own permissions, it is never delivered anywhere, and it is discarded the moment the segment it
25
29
  belongs to is sealed or abandoned. Nothing about it is evidence: the evidence is what the
26
30
  recorder seals from it.
@@ -40,6 +44,7 @@ from collections.abc import Iterator, Sequence
40
44
  from pathlib import Path
41
45
 
42
46
  from mostlyright.data_harness.canonical import (
47
+ MAX_CANONICAL_STRING_LENGTH,
43
48
  CanonicalJSONError,
44
49
  canonical_json_bytes,
45
50
  parse_json,
@@ -53,6 +58,10 @@ from mostlyright.data_harness.stream_subscription_worker import (
53
58
  #: The file one spilled segment lives in, beneath its own directory.
54
59
  SPILL_FILE_NAME = "frames.ndjson"
55
60
 
61
+ #: How many raw bytes one piece of a spilled frame carries: what one canonical string holds in
62
+ #: base64, which writes four characters for every three bytes. Derived so the two cannot drift.
63
+ SPILL_PIECE_BYTES = (MAX_CANONICAL_STRING_LENGTH // 4) * 3
64
+
56
65
  #: The exact members one spilled record carries. Equality in both directions, so a record written
57
66
  #: by a build that knew about one more field is refused rather than partly read.
58
67
  _RECORD_MEMBERS = frozenset(
@@ -149,7 +158,16 @@ class SegmentSpill:
149
158
  landed_bytes = 0
150
159
  try:
151
160
  for frame in frames:
152
- _write(descriptor, canonical_json_bytes(_record(frame)) + b"\n")
161
+ try:
162
+ line = canonical_json_bytes(_record(frame))
163
+ except CanonicalJSONError as error:
164
+ # Unreachable for any frame the transport admits, since the pieces are cut to
165
+ # what one canonical string holds; kept so a refusal here is this module's
166
+ # own word rather than an escaping reader error.
167
+ raise StreamSubscriptionError(
168
+ "STREAM_SUBSCRIPTION_SEGMENT_INVALID", "spilled frame could not be written"
169
+ ) from error
170
+ _write(descriptor, line + b"\n")
153
171
  landed += 1
154
172
  landed_bytes += len(frame.raw)
155
173
  # Once, after the batch rather than after every frame: the durability this needs is
@@ -204,10 +222,14 @@ _SAFE_ID_CHARACTERS = frozenset("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTU
204
222
 
205
223
 
206
224
  def _record(frame: StreamFrame) -> dict[str, object]:
225
+ pieces = [
226
+ base64.b64encode(frame.raw[start : start + SPILL_PIECE_BYTES]).decode("ascii")
227
+ for start in range(0, len(frame.raw), SPILL_PIECE_BYTES)
228
+ ]
207
229
  return {
208
230
  "provider_event_id": frame.provider_event_id,
209
231
  "cursor": frame.cursor,
210
- "raw": base64.b64encode(frame.raw).decode("ascii"),
232
+ "raw": pieces,
211
233
  "received_at": frame.received_at,
212
234
  "connection_epoch": frame.connection_epoch,
213
235
  "snapshot": frame.snapshot,
@@ -226,12 +248,12 @@ def _frame(line: bytes) -> StreamFrame:
226
248
  "STREAM_SUBSCRIPTION_SEGMENT_INVALID", "spilled frame does not carry its exact members"
227
249
  )
228
250
  raw = value["raw"]
229
- if not isinstance(raw, str):
251
+ if not isinstance(raw, list) or not all(isinstance(piece, str) for piece in raw):
230
252
  raise StreamSubscriptionError(
231
253
  "STREAM_SUBSCRIPTION_SEGMENT_INVALID", "spilled frame carries no readable payload"
232
254
  )
233
255
  try:
234
- decoded = base64.b64decode(raw, validate=True)
256
+ decoded = b"".join(base64.b64decode(piece, validate=True) for piece in raw)
235
257
  except (binascii.Error, ValueError) as error:
236
258
  raise StreamSubscriptionError(
237
259
  "STREAM_SUBSCRIPTION_SEGMENT_INVALID", "spilled frame carries no readable payload"