mostlyright-data 0.9.4__tar.gz → 0.9.5__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 (327) hide show
  1. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/PKG-INFO +1 -1
  2. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/pyproject.toml +1 -1
  3. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/acquisition/url_policy.py +57 -28
  4. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/cli.py +44 -3
  5. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/hosted_crawler_job.py +54 -5
  6. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/hosted_worker.py +809 -388
  7. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/recipe.py +44 -0
  8. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/sources/__init__.py +12 -6
  9. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/sources/stream.py +289 -33
  10. mostlyright_data-0.9.5/src/mostlyright/data_harness/sources/stream_capture_session.py +1347 -0
  11. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/sources/stream_connector.py +81 -51
  12. mostlyright_data-0.9.5/src/mostlyright/data_harness/sources/stream_connectors/polymarket.clob-market.v1.json +39 -0
  13. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/sources/stream_recorder.py +291 -42
  14. mostlyright_data-0.9.5/src/mostlyright/data_harness/sources/stream_registry.py +565 -0
  15. mostlyright_data-0.9.5/src/mostlyright/data_harness/sources/stream_rotation.py +727 -0
  16. mostlyright_data-0.9.5/src/mostlyright/data_harness/sources/stream_series.py +1320 -0
  17. mostlyright_data-0.9.5/src/mostlyright/data_harness/sources/stream_transport.py +943 -0
  18. mostlyright_data-0.9.5/src/mostlyright/data_harness/ux/commands/record.py +1039 -0
  19. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/ux/headline.py +2 -0
  20. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/ux/remediation.py +1 -1
  21. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/ux/render.py +38 -0
  22. mostlyright_data-0.9.4/src/mostlyright/data_harness/ux/commands/record.py +0 -107
  23. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/.gitignore +0 -0
  24. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/README.md +0 -0
  25. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/scripts/hatch_build.py +0 -0
  26. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/__init__.py +0 -0
  27. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/acquisition/__init__.py +0 -0
  28. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/acquisition/http.py +0 -0
  29. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/acquisition/parsing.py +0 -0
  30. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/acquisition/ranges.py +0 -0
  31. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/acquisition/result_download.py +0 -0
  32. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/acquisition/retention_admission.py +0 -0
  33. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/acquisition/sandbox.py +0 -0
  34. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/agent_runtime.py +0 -0
  35. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/assets/logo-ink.svg +0 -0
  36. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/backends/__init__.py +0 -0
  37. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/backends/pandas_backend.py +0 -0
  38. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/backends/polars_backend.py +0 -0
  39. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/backends/protocol.py +0 -0
  40. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/backends/reference.py +0 -0
  41. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/backends/registry.py +0 -0
  42. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/backends/restrictions.py +0 -0
  43. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/canonical.py +0 -0
  44. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/catalog_job.py +0 -0
  45. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/contracts.py +0 -0
  46. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/coordinator.py +0 -0
  47. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/deploy.py +0 -0
  48. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/deploy_target.py +0 -0
  49. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/deployment_evidence.py +0 -0
  50. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/event_presentation.py +0 -0
  51. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/events.py +0 -0
  52. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/fast_delimited.py +0 -0
  53. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/fleet.py +0 -0
  54. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/formats.py +0 -0
  55. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/governors.py +0 -0
  56. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/hosted_bootstrap.py +0 -0
  57. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/hosted_crawler.py +0 -0
  58. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/hosted_crawler_container_smoke.py +0 -0
  59. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/hosted_crawler_fetch.py +0 -0
  60. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/hosted_crawler_protocol.py +0 -0
  61. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/hosted_dataset.py +0 -0
  62. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/hosted_deploy.py +0 -0
  63. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/hosted_handoff.py +0 -0
  64. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/hosted_ingestion_contract.py +0 -0
  65. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/hosted_ingestion_job.py +0 -0
  66. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/hosted_ingestion_job_smoke.py +0 -0
  67. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/hosted_session_container_smoke.py +0 -0
  68. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/hosted_session_worker.py +0 -0
  69. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/hosted_session_worker_job_smoke.py +0 -0
  70. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/ingestion/__init__.py +0 -0
  71. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/ingestion/contracts.py +0 -0
  72. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/ingestion/faults.py +0 -0
  73. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/ingestion/gcs_store.py +0 -0
  74. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/ingestion/spool.py +0 -0
  75. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/ingestion/store.py +0 -0
  76. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/key_seam.py +0 -0
  77. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/linux_process_boundary.py +0 -0
  78. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/local_contracts.py +0 -0
  79. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/local_search/__init__.py +0 -0
  80. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/local_search/build_index.py +0 -0
  81. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/local_search/contracts.py +0 -0
  82. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/local_search/query_trace.py +0 -0
  83. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/local_search/retrieval.py +0 -0
  84. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/local_search/sealed.py +0 -0
  85. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/local_search/service.py +0 -0
  86. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/nbrender/CONTRACT.md +0 -0
  87. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/nbrender/__init__.py +0 -0
  88. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/nbrender/chrome.py +0 -0
  89. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/nbrender/code_body.py +0 -0
  90. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/nbrender/document.py +0 -0
  91. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/nbrender/frame.py +0 -0
  92. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/nbrender/interactive.py +0 -0
  93. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/nbrender/markdown_body.py +0 -0
  94. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/nbrender/mr_components.py +0 -0
  95. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/nbrender/outputs_data.py +0 -0
  96. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/nbrender/outputs_rich.py +0 -0
  97. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/nbrender/outputs_source.py +0 -0
  98. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/nbrender/outputs_stage.py +0 -0
  99. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/nbrender/outputs_text.py +0 -0
  100. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/nbrender/parse.py +0 -0
  101. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/nbrender/status.py +0 -0
  102. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/nbrender/tokens.py +0 -0
  103. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/notebook.py +0 -0
  104. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/offline.py +0 -0
  105. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/operation_registry.py +0 -0
  106. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/operator_setup.py +0 -0
  107. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/pipeline.py +0 -0
  108. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/plan_graph.py +0 -0
  109. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/preparation/__init__.py +0 -0
  110. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/preparation/contracts.py +0 -0
  111. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/preparation/engine.py +0 -0
  112. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/preparation/errors.py +0 -0
  113. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/preparation/gates.py +0 -0
  114. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/preparation/joins.py +0 -0
  115. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/preparation/profile.py +0 -0
  116. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/preparation/table.py +0 -0
  117. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/preparation/transforms.py +0 -0
  118. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/progress_events.py +0 -0
  119. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/readers/__init__.py +0 -0
  120. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/readers/containers.py +0 -0
  121. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/readers/contracts.py +0 -0
  122. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/readers/delimited.py +0 -0
  123. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/readers/grib2/__init__.py +0 -0
  124. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/readers/grib2/admission.py +0 -0
  125. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/readers/grib2/decode.py +0 -0
  126. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/readers/grib2/geometry.py +0 -0
  127. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/readers/grib2/portable_math.py +0 -0
  128. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/readers/json_tabular.py +0 -0
  129. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/readers/parquet_tabular.py +0 -0
  130. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/readers/registry.py +0 -0
  131. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/readers/samples/README.md +0 -0
  132. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.0.0/cities_one_stream/cities.csv.gz +0 -0
  133. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.0.0/cities_one_stream/expected.json +0 -0
  134. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.1.0/cities_one_stream/cities.csv.gz +0 -0
  135. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.1.0/cities_one_stream/expected.json +0 -0
  136. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/readers/samples/archive.tar/1.0.0/cities_beside_a_directory_entry/cities.tar +0 -0
  137. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/readers/samples/archive.tar/1.0.0/cities_beside_a_directory_entry/expected.json +0 -0
  138. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/readers/samples/archive.tar/1.1.0/cities_beside_a_directory_entry/cities.tar +0 -0
  139. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/readers/samples/archive.tar/1.1.0/cities_beside_a_directory_entry/expected.json +0 -0
  140. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/readers/samples/archive.zip/1.0.0/cities_beside_a_second_member/cities.zip +0 -0
  141. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/readers/samples/archive.zip/1.0.0/cities_beside_a_second_member/expected.json +0 -0
  142. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/readers/samples/archive.zip/1.1.0/dwd_semicolon_station_member/dwd-station.zip +0 -0
  143. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/readers/samples/archive.zip/1.1.0/dwd_semicolon_station_member/expected.json +0 -0
  144. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/readers/samples/archive.zip/1.2.0/dwd_semicolon_station_member/dwd-station.zip +0 -0
  145. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/readers/samples/archive.zip/1.2.0/dwd_semicolon_station_member/expected.json +0 -0
  146. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/an_ordinary_comma_separated_table/cities.csv +0 -0
  147. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/an_ordinary_comma_separated_table/expected.json +0 -0
  148. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/quoted_fields_holding_the_delimiter/cities.tsv +0 -0
  149. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/quoted_fields_holding_the_delimiter/expected.json +0 -0
  150. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/readers/samples/delimited_text/1.1.0/an_hourly_observation_table_served_as_plain_text/expected.json +0 -0
  151. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/readers/samples/delimited_text/1.1.0/an_hourly_observation_table_served_as_plain_text/observations.csv +0 -0
  152. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/readers/samples/json.tabular/1.0.0/nested_hourly_observations/expected.json +0 -0
  153. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/readers/samples/json.tabular/1.0.0/nested_hourly_observations/stations.json +0 -0
  154. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/readers/samples/json.tabular/1.1.0/an_observation_stream_served_as_plain_text/expected.json +0 -0
  155. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/readers/samples/json.tabular/1.1.0/an_observation_stream_served_as_plain_text/observations.ndjson +0 -0
  156. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/readers/samples/parquet.tabular/1.0.0/two_columns/expected.json +0 -0
  157. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/readers/samples/parquet.tabular/1.0.0/two_columns/prices.parquet +0 -0
  158. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.0.0/an_ordinary_table_beside_a_second_sheet/cities.xlsx +0 -0
  159. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.0.0/an_ordinary_table_beside_a_second_sheet/expected.json +0 -0
  160. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.0.0/shares_the_workbook_had_already_computed/expected.json +0 -0
  161. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.0.0/shares_the_workbook_had_already_computed/shares.xlsx +0 -0
  162. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.1.0/shares_the_workbook_had_already_computed/expected.json +0 -0
  163. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.1.0/shares_the_workbook_had_already_computed/shares.xlsx +0 -0
  164. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/README.md +0 -0
  165. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/gfs_2m_temperature/expected.json +0 -0
  166. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/gfs_2m_temperature/gfs-2m-temperature.grib2 +0 -0
  167. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_2m_temperature/expected.json +0 -0
  168. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_2m_temperature/hrrr-2m-temperature.grib2 +0 -0
  169. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_categorical_rain/expected.json +0 -0
  170. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_categorical_rain/hrrr-categorical-rain.grib2 +0 -0
  171. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/readers/samples/weather.grib2/2.0.0/hrrr_2m_temperature/expected.json +0 -0
  172. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/readers/samples/weather.grib2/2.0.0/hrrr_2m_temperature/hrrr-2m-temperature.grib2 +0 -0
  173. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/readers/samples.py +0 -0
  174. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/readers/spreadsheet.py +0 -0
  175. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/readers/tabular.py +0 -0
  176. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/repair/__init__.py +0 -0
  177. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/repair/adapters.py +0 -0
  178. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/repair/contracts.py +0 -0
  179. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/repair/coordinator.py +0 -0
  180. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/repair/errors.py +0 -0
  181. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/review.py +0 -0
  182. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/rowset.py +0 -0
  183. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/serving.py +0 -0
  184. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/serving_edge.py +0 -0
  185. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/serving_http.py +0 -0
  186. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/session_probes.py +0 -0
  187. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/signing.py +0 -0
  188. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/source_discovery.py +0 -0
  189. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/sources/_adapter_steps.py +0 -0
  190. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/sources/adapters.py +0 -0
  191. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/sources/authenticated_https.py +0 -0
  192. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/sources/authenticated_https_v2.py +0 -0
  193. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/sources/cadence.py +0 -0
  194. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/sources/cadence_emission.py +0 -0
  195. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/sources/cadence_history.py +0 -0
  196. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/sources/catalog/__init__.py +0 -0
  197. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/sources/catalog/admission.py +0 -0
  198. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/sources/catalog/authoring.py +0 -0
  199. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/sources/catalog/authoring_policy.py +0 -0
  200. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/sources/catalog/authoring_shards.py +0 -0
  201. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/sources/catalog/bounded_io.py +0 -0
  202. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/sources/catalog/channel.py +0 -0
  203. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/sources/catalog/channel_client.py +0 -0
  204. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/sources/catalog/contracts.py +0 -0
  205. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/sources/catalog/coverage.py +0 -0
  206. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/sources/catalog/delta.py +0 -0
  207. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/sources/catalog/embedding.py +0 -0
  208. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/sources/catalog/entry_v2.py +0 -0
  209. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/sources/catalog/fill.py +0 -0
  210. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/sources/catalog/fill_partitions.py +0 -0
  211. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/sources/catalog/fill_staging.py +0 -0
  212. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/sources/catalog/gating.py +0 -0
  213. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/sources/catalog/generation_receipt.py +0 -0
  214. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/sources/catalog/harvest/__init__.py +0 -0
  215. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/sources/catalog/harvest/ckan.py +0 -0
  216. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/sources/catalog/harvest/datagov_v4.py +0 -0
  217. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/sources/catalog/harvest/protocol.py +0 -0
  218. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/sources/catalog/harvest/sdmx.py +0 -0
  219. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/sources/catalog/harvest/stac.py +0 -0
  220. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/sources/catalog/health.py +0 -0
  221. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/sources/catalog/hosted_catalog.py +0 -0
  222. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/sources/catalog/identity_history.py +0 -0
  223. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/sources/catalog/neural.py +0 -0
  224. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/sources/catalog/packed_catalog.py +0 -0
  225. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/sources/catalog/packed_retrieval.py +0 -0
  226. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/sources/catalog/packed_writer.py +0 -0
  227. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/sources/catalog/query_trace.py +0 -0
  228. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/sources/catalog/recommend.py +0 -0
  229. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/sources/catalog/retrieval.py +0 -0
  230. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/sources/catalog/retrieval_manifest.py +0 -0
  231. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/sources/catalog/rights_decisions.py +0 -0
  232. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/sources/catalog/sealed.py +0 -0
  233. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/sources/catalog/search.py +0 -0
  234. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/sources/catalog/streaming_delta.py +0 -0
  235. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/sources/catalog/update.py +0 -0
  236. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/sources/collections.py +0 -0
  237. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/sources/contracts.py +0 -0
  238. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/sources/deletion.py +0 -0
  239. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/sources/fitness.py +0 -0
  240. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/sources/governance.py +0 -0
  241. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/sources/hosted.py +0 -0
  242. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/sources/integration.py +0 -0
  243. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/sources/range_reader.py +0 -0
  244. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/sources/registry.py +0 -0
  245. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/sources/rights_rule.py +0 -0
  246. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/sources/source_cadence_vectors.v1.json +0 -0
  247. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/sources/sports.py +0 -0
  248. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/studio_boundary.py +0 -0
  249. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/thin/__init__.py +0 -0
  250. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/thin/acquire.py +0 -0
  251. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/thin/acquire_cancel.py +0 -0
  252. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/thin/approvals.py +0 -0
  253. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/thin/commands.py +0 -0
  254. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/thin/download.py +0 -0
  255. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/thin/narrative.py +0 -0
  256. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/thin/parity.py +0 -0
  257. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/thin/propose.py +0 -0
  258. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/thin/research.py +0 -0
  259. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/thin/router.py +0 -0
  260. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/thin/runs.py +0 -0
  261. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/thin/session.py +0 -0
  262. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/thin/stream.py +0 -0
  263. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/thin/transport.py +0 -0
  264. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/thin/vocabulary.py +0 -0
  265. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/thin/workers.py +0 -0
  266. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/ucum/TABLE-PIN.json +0 -0
  267. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/ucum/ucum-subset.v1.json +0 -0
  268. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/unit_flow.py +0 -0
  269. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/units.py +0 -0
  270. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/ux/__init__.py +0 -0
  271. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/ux/approve.py +0 -0
  272. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/ux/author_yaml.py +0 -0
  273. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/ux/cloud_auth.py +0 -0
  274. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/ux/commands/__init__.py +0 -0
  275. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/ux/commands/approve.py +0 -0
  276. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/ux/commands/auth.py +0 -0
  277. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/ux/commands/author.py +0 -0
  278. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/ux/commands/catalog_author.py +0 -0
  279. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/ux/commands/catalog_fill.py +0 -0
  280. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/ux/commands/catalog_harvest.py +0 -0
  281. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/ux/commands/catalog_publish.py +0 -0
  282. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/ux/commands/catalog_search.py +0 -0
  283. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/ux/commands/catalog_update.py +0 -0
  284. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/ux/commands/deploy.py +0 -0
  285. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/ux/commands/deploy_dataset.py +0 -0
  286. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/ux/commands/deploy_plan.py +0 -0
  287. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/ux/commands/deploy_status.py +0 -0
  288. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/ux/commands/diff.py +0 -0
  289. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/ux/commands/index.py +0 -0
  290. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/ux/commands/inventory.py +0 -0
  291. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/ux/commands/list_builds.py +0 -0
  292. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/ux/commands/login.py +0 -0
  293. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/ux/commands/peek.py +0 -0
  294. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/ux/commands/plan_check.py +0 -0
  295. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/ux/commands/preflight.py +0 -0
  296. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/ux/commands/review_setup.py +0 -0
  297. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/ux/commands/search.py +0 -0
  298. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/ux/commands/show.py +0 -0
  299. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/ux/commands/whoami.py +0 -0
  300. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/ux/credential_native.py +0 -0
  301. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/ux/credential_store.py +0 -0
  302. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/ux/credentials.py +0 -0
  303. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/ux/diffing.py +0 -0
  304. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/ux/hosted_acquisition.py +0 -0
  305. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/ux/hosted_run_status.py +0 -0
  306. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/ux/inventory.py +0 -0
  307. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/ux/local_review.py +0 -0
  308. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/ux/login.py +0 -0
  309. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/ux/path_kind.py +0 -0
  310. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/ux/peek.py +0 -0
  311. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/ux/plain_file.py +0 -0
  312. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/ux/plan_check.py +0 -0
  313. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/ux/preflight.py +0 -0
  314. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/ux/readers.py +0 -0
  315. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/ux/workload.py +0 -0
  316. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/viewer.py +0 -0
  317. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/visual_run/__init__.py +0 -0
  318. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/visual_run/authoring.py +0 -0
  319. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/visual_run/contracts.py +0 -0
  320. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/visual_run/materialize.py +0 -0
  321. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/visual_run/observations.py +0 -0
  322. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/visual_run/query.py +0 -0
  323. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/visual_run/reducer.py +0 -0
  324. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/visual_run/sdk.py +0 -0
  325. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/visual_run/store.py +0 -0
  326. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/visual_run/transport.py +0 -0
  327. {mostlyright_data-0.9.4 → mostlyright_data-0.9.5}/src/mostlyright/data_harness/watch.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mostlyright-data
3
- Version: 0.9.4
3
+ Version: 0.9.5
4
4
  Summary: Mostly Right CLI for reproducible, reviewed Parquet datasets
5
5
  Project-URL: Homepage, https://mostlyright.md/
6
6
  Project-URL: Documentation, https://mostlyright.md/docs/guides/cli/
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "mostlyright-data"
3
- version = "0.9.4"
3
+ version = "0.9.5"
4
4
  description = "Mostly Right CLI for reproducible, reviewed Parquet datasets"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.13,<3.14"
@@ -188,6 +188,62 @@ class ValidatedTarget:
188
188
  return urlunsplit(("", "", parsed.path or "/", parsed.query, ""))
189
189
 
190
190
 
191
+ def approved_public_addresses(
192
+ hostname: str,
193
+ port: int,
194
+ *,
195
+ resolver: Resolver | None = None,
196
+ ) -> tuple[str, ...]:
197
+ """Return every address a hostname answers with, once each has been proved publicly routable.
198
+
199
+ The part of :func:`validate_public_https_url` that is about *where a name leads* rather than
200
+ about a URL or an allowlist, so that a transport which is not fetching a URL can hold the same
201
+ rule without holding a second copy of it. A client that hands a hostname to the operating
202
+ system and lets it connect has delegated the decision to DNS: a document naming
203
+ ``stream.example.test`` reaches whatever that name resolves to, and inside a network that is
204
+ an internal service that never expected a stranger.
205
+
206
+ Every answer is checked, and one bad answer refuses the whole resolution. Approving the public
207
+ members of a mixed set would be deciding *after* a resolver has already demonstrated that it
208
+ can put an address of its choosing in front of the caller.
209
+
210
+ A caller that connects to one of these addresses -- rather than handing the name back to the
211
+ operating system, which would resolve it a second time and need not agree -- has the answer it
212
+ checked.
213
+ """
214
+
215
+ if _looks_like_obfuscated_ip(hostname):
216
+ raise AcquisitionSecurityError(
217
+ "OBFUSCATED_IP",
218
+ "non-canonical numeric IP hostnames are denied",
219
+ )
220
+ literal = _parse_ip_literal(hostname)
221
+ if literal is not None:
222
+ addresses: tuple[str, ...] = (literal.compressed,)
223
+ else:
224
+ addresses = (SystemResolver() if resolver is None else resolver).resolve(hostname, port)
225
+ approved: list[str] = []
226
+ for raw in addresses:
227
+ try:
228
+ address = ipaddress.ip_address(raw)
229
+ except ValueError:
230
+ raise AcquisitionSecurityError(
231
+ "DNS_ADDRESS",
232
+ "resolver returned a non-IP address",
233
+ ) from None
234
+ _require_globally_routable(address)
235
+ approved.append(address.compressed)
236
+ approved_ips = tuple(sorted(dict.fromkeys(approved)))
237
+ if not approved_ips:
238
+ raise AcquisitionSecurityError("DNS_EMPTY", "target has no approved public addresses")
239
+ if len(approved_ips) > MAX_DNS_ANSWERS:
240
+ raise AcquisitionSecurityError(
241
+ "DNS_ANSWER_LIMIT",
242
+ f"target has more than {MAX_DNS_ANSWERS} approved addresses",
243
+ )
244
+ return approved_ips
245
+
246
+
191
247
  def validate_public_https_url(
192
248
  url: str,
193
249
  *,
@@ -222,34 +278,7 @@ def validate_public_https_url(
222
278
  raise AcquisitionSecurityError("METADATA_DESTINATION", "metadata/internal hosts are denied")
223
279
 
224
280
  literal = _parse_ip_literal(hostname)
225
- if literal is not None:
226
- addresses = (literal.compressed,)
227
- else:
228
- if _looks_like_obfuscated_ip(hostname):
229
- raise AcquisitionSecurityError(
230
- "OBFUSCATED_IP",
231
- "non-canonical numeric IP hostnames are denied",
232
- )
233
- addresses = resolver.resolve(hostname, effective_port)
234
- approved: list[str] = []
235
- for raw in addresses:
236
- try:
237
- address = ipaddress.ip_address(raw)
238
- except ValueError:
239
- raise AcquisitionSecurityError(
240
- "DNS_ADDRESS",
241
- "resolver returned a non-IP address",
242
- ) from None
243
- _require_globally_routable(address)
244
- approved.append(address.compressed)
245
- approved_ips = tuple(sorted(dict.fromkeys(approved)))
246
- if not approved_ips:
247
- raise AcquisitionSecurityError("DNS_EMPTY", "target has no approved public addresses")
248
- if len(approved_ips) > MAX_DNS_ANSWERS:
249
- raise AcquisitionSecurityError(
250
- "DNS_ANSWER_LIMIT",
251
- f"target has more than {MAX_DNS_ANSWERS} approved addresses",
252
- )
281
+ approved_ips = approved_public_addresses(hostname, effective_port, resolver=resolver)
253
282
 
254
283
  netloc = hostname
255
284
  if ":" in hostname and literal is not None:
@@ -23,7 +23,7 @@ import sys
23
23
  import tempfile
24
24
  import time
25
25
  from collections.abc import Callable, Iterator, Mapping, Sequence
26
- from dataclasses import dataclass
26
+ from dataclasses import dataclass, replace
27
27
  from datetime import datetime
28
28
  from pathlib import Path
29
29
  from typing import Any
@@ -209,6 +209,9 @@ from mostlyright.data_harness.sources.stream_recorder import (
209
209
  from mostlyright.data_harness.sources.stream_recorder import (
210
210
  ledger_root as stream_ledger_root,
211
211
  )
212
+ from mostlyright.data_harness.sources.stream_registry import (
213
+ load_stream_connector_registry,
214
+ )
212
215
  from mostlyright.data_harness.ux.commands import discovered_commands
213
216
  from mostlyright.data_harness.ux.credentials import LoginError, resolve_cloud_credentials
214
217
  from mostlyright.data_harness.ux.headline import (
@@ -1014,6 +1017,7 @@ def _dispatch(
1014
1017
  producer_principal=args.producer_principal,
1015
1018
  producer_attempt=args.producer_attempt,
1016
1019
  previous_run_dir=args.previous_run_dir,
1020
+ connector_registry=args.connector_registry,
1017
1021
  visual_store=visual_store,
1018
1022
  )
1019
1023
  payload = result.to_dict()
@@ -1979,6 +1983,14 @@ def _parser(
1979
1983
  help="the run settings: which recipe fingerprint and engine versions this run is pinned to",
1980
1984
  )
1981
1985
  recipe_run.add_argument("--input-root", type=Path, required=True, help=_INPUT_ROOT)
1986
+ recipe_run.add_argument(
1987
+ "--connector-registry",
1988
+ type=Path,
1989
+ help=(
1990
+ "the folder of stream source documents the captures under the input folder were "
1991
+ "recorded under; without it, only the ones this build ships are held"
1992
+ ),
1993
+ )
1982
1994
  recipe_run.add_argument("--output", type=Path, required=True, help=_OUTPUT_NEW)
1983
1995
  recipe_run.add_argument("--previous-run-dir", type=Path, help=_PREVIOUS_BUILD)
1984
1996
  recipe_run.add_argument("--producer-principal", required=True, help=_BUILT_BY)
@@ -3058,6 +3070,7 @@ def _local_recipe_registry(
3058
3070
  sandbox: CrawlerSandbox,
3059
3071
  stock_sources: tuple[Any, ...],
3060
3072
  stream_sources: tuple[Any, ...],
3073
+ connector_registry: Path | None = None,
3061
3074
  ) -> AdapterRegistry:
3062
3075
  """Build the exact allowlist this local run is permitted to use.
3063
3076
 
@@ -3069,6 +3082,14 @@ def _local_recipe_registry(
3069
3082
  host allowlist against the address in the query and the other hands the fetch to Studio's
3070
3083
  hosted clean room. A recorded capture has no address and no hosted home yet, so an adapter
3071
3084
  registered in either of those would claim a capability it cannot honestly provide.
3085
+
3086
+ ``connector_registry`` is the folder of source documents an operator wrote, the same one they
3087
+ recorded the capture under. ``None`` means the versions this build ships. It has to be
3088
+ sayable here: a sealed capture pins the digest of the source document it was recorded under,
3089
+ and a build that could only look in the documents it ships would refuse every capture taken
3090
+ from a source somebody wrote -- which is every live capture, because the one source this build
3091
+ ships may not be captured live at all. It is not a way to reinterpret a capture: the manifest
3092
+ still names its own digest, and this only says where that version may be looked up.
3072
3093
  """
3073
3094
 
3074
3095
  adapters: list[Any] = []
@@ -3082,19 +3103,37 @@ def _local_recipe_registry(
3082
3103
  )
3083
3104
  if stream_sources:
3084
3105
  captures_root = input_root / _CAPTURES_DIRECTORY_NAME
3085
- gateway = RecordedStreamGateway(
3106
+ # Read once, here, before any Build work: a folder that is not there, or is a link to
3107
+ # one, is refused with STREAM_CONNECTOR_REGISTRY_ROOT at the start of the run rather
3108
+ # than found missing halfway through it. With no folder named, this is the registry of
3109
+ # documents the build ships, which is what every run did before the folder could be said.
3110
+ held = load_stream_connector_registry(
3111
+ None if connector_registry is None else connector_registry.absolute()
3112
+ )
3113
+ reader = RecordedStreamGateway(
3086
3114
  captures_root=captures_root,
3087
3115
  # Coordinator times, not capture times. The adapter checks the batch it gets back
3088
3116
  # against the observation evidence recorded here, and a gateway that answered with
3089
3117
  # times it read out of a file would make that check a tautology.
3090
3118
  observed_at=execution.requested_at,
3091
3119
  available_at=execution.requested_at,
3120
+ registry=held,
3092
3121
  )
3122
+ governance = _recorded_stream_governance(execution, stream_sources, reader)
3123
+ # The same gateway, stamping a batch with the availability this coordinator just wrote
3124
+ # down rather than with the moment the run started. The two are not the same fact: a
3125
+ # capture stops being extended when its Recorder stops, and the observation above says
3126
+ # so deliberately, so a gateway still stamping "now" would hand the adapter a batch its
3127
+ # own evidence contradicts and every build over a capture older than an instant would
3128
+ # be refused with STREAM_TEMPORAL_BINDING. This is still a coordinator input -- the
3129
+ # value is read once, into the evidence, and handed on -- and not the gateway reading a
3130
+ # time out of the file it is serving.
3131
+ gateway = replace(reader, available_at=governance.observation.available_at)
3093
3132
  adapters.append(
3094
3133
  StreamBatchAdapter(
3095
3134
  gateway=gateway,
3096
3135
  sandbox=sandbox,
3097
- governance=_recorded_stream_governance(execution, stream_sources, gateway),
3136
+ governance=governance,
3098
3137
  watermark_store=StreamWatermarkStore(stream_ledger_root(captures_root)),
3099
3138
  )
3100
3139
  )
@@ -3111,6 +3150,7 @@ def _execute_public_recipe_run(
3111
3150
  producer_principal: str,
3112
3151
  producer_attempt: str,
3113
3152
  previous_run_dir: Path | None,
3153
+ connector_registry: Path | None = None,
3114
3154
  visual_store: VisualRunStore | None = None,
3115
3155
  ) -> Any:
3116
3156
  stock_sources = _stock_local_reader_sources(recipe, execution)
@@ -3147,6 +3187,7 @@ def _execute_public_recipe_run(
3147
3187
  sandbox=sandbox,
3148
3188
  stock_sources=stock_sources,
3149
3189
  stream_sources=stream_sources,
3190
+ connector_registry=connector_registry,
3150
3191
  )
3151
3192
 
3152
3193
  def _context(source: Any, operation: str) -> AcquisitionContext:
@@ -35,6 +35,7 @@ from mostlyright.data_harness.canonical import (
35
35
  from mostlyright.data_harness.hosted_crawler import (
36
36
  CRAWLER_EGRESS_POLICY_ENV,
37
37
  WARM_UP_RESULT_SCHEMA,
38
+ HostedCrawlerError,
38
39
  encode_normalization_input,
39
40
  )
40
41
  from mostlyright.data_harness.hosted_crawler_fetch import fetch_crawler_source
@@ -80,6 +81,24 @@ PRE_BOOTSTRAP_FAILURE_CODES = frozenset(
80
81
  "CRAWLER_BOOTSTRAP_RESPONSE_TOO_LARGE",
81
82
  }
82
83
  )
84
+ # Wrapper deaths after bootstrap: the fetch may have succeeded, so these must
85
+ # never become sealed refusals (a refusal is the source's answer, and the
86
+ # source never answered "no"). Without a control-plane report the session
87
+ # dangles until the producer's poll deadline expires and the run dies blind
88
+ # (harness#400). Keep this closed in lock-step with Studio's
89
+ # ``WRAPPER_FAILURE_CODES``; a Studio that predates that set refuses the
90
+ # report with 400 and the job still exits non-zero, so deploy order is free.
91
+ WRAPPER_FAILURE_CODES = frozenset(
92
+ {
93
+ "CRAWLER_CHILD_FAILED",
94
+ "CRAWLER_CHILD_INVALID",
95
+ "CRAWLER_EXECUTABLE_UNAVAILABLE",
96
+ "CRAWLER_JOB_FAILED",
97
+ "CRAWLER_RESULTS_BUCKET_REQUIRED",
98
+ "CRAWLER_UPLOAD_FAILED",
99
+ "CRAWLER_WORKLOAD_IDENTITY_UNAVAILABLE",
100
+ }
101
+ )
83
102
  # Sized for an EPA-scale year: the streamed decode, the streamed verification pass, and
84
103
  # the chunked result encode are each one pure-Python walk over ~200M cells, which a live
85
104
  # run spends 12-15 minutes on. The old 600 was calibrated to decode alone and killed a
@@ -474,7 +493,7 @@ def _report_crawler_bootstrap_failure(
474
493
  can cross back into the crawler through this path.
475
494
  """
476
495
 
477
- if failure_code not in PRE_BOOTSTRAP_FAILURE_CODES:
496
+ if failure_code not in PRE_BOOTSTRAP_FAILURE_CODES | WRAPPER_FAILURE_CODES:
478
497
  return False
479
498
  token: bytearray | None = None
480
499
  response: bytearray | None = None
@@ -1028,19 +1047,23 @@ def _validate_public_https_result(
1028
1047
  from mostlyright.data_harness.readers.contracts import ReaderPin
1029
1048
 
1030
1049
  try:
1050
+ from mostlyright.data_harness.readers.registry import TOOLBOX
1051
+
1052
+ family = TOOLBOX.resolve(reader["family_id"], reader["family_version"])
1053
+ # The child digests the ADMITTED options -- ``validate_options``
1054
+ # fills family defaults -- so the expected identity must digest the
1055
+ # same bytes. Digesting the sealed pin raw made every recipe that
1056
+ # omitted a defaulted key fail ``reader_identity`` on every crawl.
1031
1057
  pin = ReaderPin(
1032
1058
  reader["family_id"],
1033
1059
  reader["family_version"],
1034
- reader["decode_options"],
1060
+ dict(family.validate_options(reader["decode_options"])),
1035
1061
  )
1036
1062
  except (KeyError, TypeError, ValueError):
1037
1063
  _fail("CRAWLER_CHILD_INVALID", "public HTTPS Reader identity is invalid")
1038
1064
  reader_identity = (pin.family_id, pin.family_version, pin.options_digest)
1039
1065
  resource_caps = query.get("resource_caps")
1040
1066
  try:
1041
- from mostlyright.data_harness.readers.registry import TOOLBOX
1042
-
1043
- family = TOOLBOX.resolve(pin.family_id, pin.family_version)
1044
1067
  expected_reader_budgets = asdict(
1045
1068
  family.default_budgets.narrowed_by(
1046
1069
  {
@@ -1324,6 +1347,10 @@ def crawler_job_main(argv: list[str] | None = None) -> int:
1324
1347
  return 0
1325
1348
  except (
1326
1349
  CanonicalJSONError,
1350
+ # HostedCrawlerError is a RuntimeError, not a ValueError; leaving it out
1351
+ # let every request/normalization refusal escape as a raw traceback with
1352
+ # no sealed failure and no session report (harness#400).
1353
+ HostedCrawlerError,
1327
1354
  HostedCrawlerJobError,
1328
1355
  HostedCrawlerProtocolError,
1329
1356
  TypeError,
@@ -1366,6 +1393,28 @@ def crawler_job_main(argv: list[str] | None = None) -> int:
1366
1393
  )
1367
1394
  sys.stderr.write("\n")
1368
1395
  return 0
1396
+ if code in WRAPPER_FAILURE_CODES:
1397
+ # A post-bootstrap wrapper death has no sealed-refusal lane (the
1398
+ # source never refused), so terminalize the session through the
1399
+ # ``:fail`` control-plane route instead of leaving it to dangle
1400
+ # into the producer's poll deadline. Best-effort: the job exits
1401
+ # non-zero either way, and an older Studio refuses the code.
1402
+ reported = _report_crawler_bootstrap_failure(
1403
+ crawler_session_id=crawler_session_id,
1404
+ failure_code=code,
1405
+ )
1406
+ sys.stderr.write(
1407
+ canonical_json_bytes(
1408
+ {
1409
+ "status": "failed",
1410
+ "code": code,
1411
+ "detail": detail,
1412
+ "session_failure_reported": reported,
1413
+ }
1414
+ ).decode()
1415
+ )
1416
+ sys.stderr.write("\n")
1417
+ return 1
1369
1418
  sys.stderr.write(
1370
1419
  canonical_json_bytes({"status": "failed", "code": code, "detail": detail}).decode()
1371
1420
  )