mostlyright-data 0.14.0__tar.gz → 0.14.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.
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/PKG-INFO +1 -1
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/pyproject.toml +1 -1
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/skills/mr-data-build/SKILL.md +31 -2
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/hosted_stream_subscription_worker.py +50 -21
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/stream_subscription_sealer.py +14 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/stream_subscription_worker.py +35 -10
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/studio_subscription_control.py +118 -3
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/thin/router.py +15 -6
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/thin/v4_tables.py +515 -81
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/ux/render.py +30 -6
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/v4_recipe.py +35 -11
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/.gitignore +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/README.md +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/scripts/hatch_build.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/skills/mr-data-build/agents/openai.yaml +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/skills/mr-data-build/scripts/write_research_notebook.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/skills/mr-data-build/scripts/write_visual_run.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/_vendor/__init__.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/_vendor/rapidocr/LICENSE +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/_vendor/rapidocr/PROVENANCE.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/_vendor/rapidocr/__init__.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/_vendor/rapidocr/__init__.pyi +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/_vendor/rapidocr/_version.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/_vendor/rapidocr/cal_rec_boxes/__init__.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/_vendor/rapidocr/cal_rec_boxes/main.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_cls/__init__.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_cls/main.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_cls/utils.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_det/__init__.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_det/main.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_det/utils.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/__init__.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/main.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/typings.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/utils.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/_vendor/rapidocr/config.yaml +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/_vendor/rapidocr/inference_engine/__init__.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/_vendor/rapidocr/inference_engine/base.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/_vendor/rapidocr/inference_engine/onnxruntime/__init__.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/_vendor/rapidocr/inference_engine/onnxruntime/main.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/_vendor/rapidocr/inference_engine/onnxruntime/provider_config.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/_vendor/rapidocr/main.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/_vendor/rapidocr/models/PP-OCRv6_det_small.onnx +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/_vendor/rapidocr/models/PP-OCRv6_rec_small.onnx +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/_vendor/rapidocr/models/ch_ppocr_mobile_v2.0_cls_mobile.onnx +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/_vendor/rapidocr/py.typed +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/_vendor/rapidocr/utils/__init__.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/_vendor/rapidocr/utils/load_image.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/_vendor/rapidocr/utils/log.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/_vendor/rapidocr/utils/model_resolver.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/_vendor/rapidocr/utils/output.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/_vendor/rapidocr/utils/parse_parameters.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/_vendor/rapidocr/utils/process_img.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/_vendor/rapidocr/utils/typings.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/_vendor/rapidocr/utils/utils.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/__init__.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/acquisition/__init__.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/acquisition/derived_credentials.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/acquisition/http.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/acquisition/parsing.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/acquisition/ranges.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/acquisition/result_download.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/acquisition/retention_admission.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/acquisition/sandbox.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/acquisition/url_policy.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/agent_runtime.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/assets/logo-ink.svg +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/backends/__init__.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/backends/pandas_backend.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/backends/polars_backend.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/backends/protocol.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/backends/reference.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/backends/registry.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/backends/restrictions.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/bounded_query.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/canonical.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/catalog_job.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/cli.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/contracts.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/coordinator.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/crosswalks.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/declared_checks.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/deploy.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/deploy_target.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/deployment_evidence.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/documents/__init__.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/documents/_worker_capability.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/documents/agent_request.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/documents/capture.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/documents/contracts.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/documents/lane.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/documents/ocr.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/documents/pdf.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/documents/registry.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/documents/sandbox.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/documents/selections.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/documents/tables.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/documents/vendor_rapidocr.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/events.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/fast_delimited.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/formats.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/governors.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/hosted_bootstrap.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/hosted_crawler.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/hosted_crawler_container_smoke.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/hosted_crawler_fetch.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/hosted_crawler_job.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/hosted_crawler_protocol.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/hosted_dataset.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/hosted_deploy.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/hosted_handoff.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/hosted_ingestion_contract.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/hosted_ingestion_job.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/hosted_ingestion_job_smoke.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/hosted_rlimit_as_container_smoke.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/hosted_run_worker.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/hosted_session_container_smoke.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/hosted_session_worker.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/hosted_session_worker_job_smoke.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/hosted_stream_recorder_container_smoke.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/hosted_stream_recorder_job.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/hosted_stream_subscription_container_smoke.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/hosted_worker.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/ingestion/__init__.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/ingestion/contracts.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/ingestion/faults.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/ingestion/gcs_store.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/ingestion/spool.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/ingestion/store.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/inprocess_acquisition.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/key_seam.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/linux_process_boundary.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/local_contracts.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/local_search/__init__.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/local_search/build_index.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/local_search/contracts.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/local_search/query_trace.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/local_search/retrieval.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/local_search/sealed.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/local_search/service.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/nbrender/CONTRACT.md +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/nbrender/__init__.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/nbrender/chrome.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/nbrender/code_body.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/nbrender/document.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/nbrender/frame.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/nbrender/interactive.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/nbrender/markdown_body.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/nbrender/mr_components.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/nbrender/outputs_data.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/nbrender/outputs_rich.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/nbrender/outputs_source.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/nbrender/outputs_stage.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/nbrender/outputs_text.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/nbrender/parse.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/nbrender/status.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/nbrender/tokens.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/notebook.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/offline.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/operation_registry.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/operator_setup.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/pipeline.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/plan_graph.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/preparation/__init__.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/preparation/contracts.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/preparation/engine.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/preparation/errors.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/preparation/gates.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/preparation/joins.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/preparation/profile.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/preparation/table.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/preparation/transforms.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/progress_events.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/__init__.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/_openpyxl.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/budgets.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/containers.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/contracts.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/delimited.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/geojson_vector.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/geopackage.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/geoparquet.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/grib2/__init__.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/grib2/admission.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/grib2/collection.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/grib2/collection_reader.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/grib2/decode.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/grib2/geometry.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/grib2/portable_math.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/grib_eccodes.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/html_tabular.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/html_web_extract.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/json_tabular.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/parquet_tabular.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/pcaxis_px.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/protobuf_tabular.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/raster/__init__.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/raster/_bytes.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/raster/decode.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/raster/family.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/raster/jpeg2000.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/raster/profiles.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/raster/rendered.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/raster/safe.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/raster/sentinel_safe.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/raster/tiff.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/registry.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/README.md +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.0.0/cities_one_stream/cities.csv.gz +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.0.0/cities_one_stream/expected.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.1.0/cities_one_stream/cities.csv.gz +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.1.0/cities_one_stream/expected.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/archive.tar/1.0.0/cities_beside_a_directory_entry/cities.tar +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/archive.tar/1.0.0/cities_beside_a_directory_entry/expected.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/archive.tar/1.1.0/cities_beside_a_directory_entry/cities.tar +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/archive.tar/1.1.0/cities_beside_a_directory_entry/expected.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/archive.zip/1.0.0/cities_beside_a_second_member/cities.zip +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/archive.zip/1.0.0/cities_beside_a_second_member/expected.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/archive.zip/1.1.0/dwd_semicolon_station_member/dwd-station.zip +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/archive.zip/1.1.0/dwd_semicolon_station_member/expected.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/archive.zip/1.2.0/dwd_semicolon_station_member/dwd-station.zip +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/archive.zip/1.2.0/dwd_semicolon_station_member/expected.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/an_ordinary_comma_separated_table/cities.csv +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/an_ordinary_comma_separated_table/expected.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/quoted_fields_holding_the_delimiter/cities.tsv +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/quoted_fields_holding_the_delimiter/expected.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/delimited_text/1.1.0/an_hourly_observation_table_served_as_plain_text/expected.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/delimited_text/1.1.0/an_hourly_observation_table_served_as_plain_text/observations.csv +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/geojson.vector/1.0.0/czech_capital/expected.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/geojson.vector/1.0.0/czech_capital/places.geojson +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/geopackage.vector/1.0.0/epsg_4326_feature/expected.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/geopackage.vector/1.0.0/epsg_4326_feature/places.gpkg +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/geoparquet.vector/1.0.0/primary_wkb_point/expected.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/geoparquet.vector/1.0.0/primary_wkb_point/places.parquet +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/html.tabular/1.0.0/sanitized_table/expected.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/html.tabular/1.0.0/sanitized_table/table.html +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/html.web_extract/1.0.0/json_ld_scorecards/expected.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/html.web_extract/1.0.0/json_ld_scorecards/scorecards.html +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/image.rendered/1.0.0/tiny_png/expected.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/image.rendered/1.0.0/tiny_png/tiny-rendered.png +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/json.tabular/1.0.0/nested_hourly_observations/expected.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/json.tabular/1.0.0/nested_hourly_observations/stations.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/json.tabular/1.1.0/an_observation_stream_served_as_plain_text/expected.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/json.tabular/1.1.0/an_observation_stream_served_as_plain_text/observations.ndjson +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/meteorology.bufr/1.0.0/eccodes_bufr4_subset/eccodes-bufr4.bufr +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/meteorology.bufr/1.0.0/eccodes_bufr4_subset/expected.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/meteorology.grib/1.0.0/eccodes_grib1_origin/expected.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/meteorology.grib/1.0.0/eccodes_grib1_origin/regular-ll-surface.grib1 +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/microdata.sas_xpt/1.0.0/two_raw_columns/expected.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/microdata.sas_xpt/1.0.0/two_raw_columns/survey.xpt +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/microdata.spss_sav/1.0.0/two_raw_columns/expected.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/microdata.spss_sav/1.0.0/two_raw_columns/survey.sav +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/microdata.stata_dta/1.0.0/two_raw_columns/expected.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/microdata.stata_dta/1.0.0/two_raw_columns/stata.dta +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/official.pcaxis_px/1.0.0/population_by_region_and_year/expected.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/official.pcaxis_px/1.0.0/population_by_region_and_year/population.px +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/official.sdmx_json/1.0.0/compact_population_series/expected.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/official.sdmx_json/1.0.0/compact_population_series/population.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/parquet.tabular/1.0.0/two_columns/expected.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/parquet.tabular/1.0.0/two_columns/prices.parquet +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/protobuf.tabular/1.0.0/gtfs_realtime_trip_updates/expected.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/protobuf.tabular/1.0.0/gtfs_realtime_trip_updates/gtfs-realtime.desc +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/protobuf.tabular/1.0.0/gtfs_realtime_trip_updates/trip-updates.pb +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/raster.geospatial/1.0.0/tiny_geotiff/expected.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/raster.geospatial/1.0.0/tiny_geotiff/tiny-geospatial.tif +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/satellite.goes_abi_l2/1.0.0/authored_cmi_window/expected.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.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
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/satellite.himawari_hsd/1.0.0/authored_b13_single_bzip2/expected.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/satellite.himawari_hsd/1.0.0/authored_b13_single_bzip2/himawari-b13-0101-bzip2.dat +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/satellite.himawari_hsd_complete/1.0.0/authored_b13_three_segment_scan/expected.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.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
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/satellite.msg_seviri_l15/1.0.0/authored_calibrated_complete_visir/expected.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/satellite.msg_seviri_l15/1.0.0/authored_calibrated_complete_visir/msg-seviri-l15.zip +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/satellite.sentinel_safe/1.0.0/authored_b02_scl_window/expected.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/satellite.sentinel_safe/1.0.0/authored_b02_scl_window/sentinel-safe-b02-scl.zip +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/satellite.xrit_image/1.0.0/authored_complete_raw_counts/expected.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/satellite.xrit_image/1.0.0/authored_complete_raw_counts/xrit-complete-image.zip +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/scientific.fits/1.0.0/tiny_primary_window/expected.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/scientific.fits/1.0.0/tiny_primary_window/tiny-primary.fits +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/scientific.hdf4/1.0.0/authored_temperature_window/expected.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/scientific.hdf4/1.0.0/authored_temperature_window/temperature.hdf +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/scientific.hdf5/1.0.0/authored_temperature_window/expected.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/scientific.hdf5/1.0.0/authored_temperature_window/temperature.h5 +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/scientific.hdf_eos2/1.0.0/authored_grid_temperature_window/expected.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/scientific.hdf_eos2/1.0.0/authored_grid_temperature_window/nasa-hdfeos2-grid.hdf +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/scientific.hdf_eos2/1.0.0/authored_swath_temperature_window/expected.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/scientific.hdf_eos2/1.0.0/authored_swath_temperature_window/nasa-hdfeos2-swath.hdf +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/scientific.netcdf/1.0.0/authored_classic_temperature_window/expected.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/scientific.netcdf/1.0.0/authored_classic_temperature_window/temperature-classic.nc +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/scientific.zarr/1.0.0/authored_v3_temperature_window/expected.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/scientific.zarr/1.0.0/authored_v3_temperature_window/temperature-zarr-v3.zip +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.0.0/an_ordinary_table_beside_a_second_sheet/cities.xlsx +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.0.0/an_ordinary_table_beside_a_second_sheet/expected.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.0.0/shares_the_workbook_had_already_computed/expected.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.0.0/shares_the_workbook_had_already_computed/shares.xlsx +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.1.0/shares_the_workbook_had_already_computed/expected.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.1.0/shares_the_workbook_had_already_computed/shares.xlsx +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/README.md +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/gfs_2m_temperature/expected.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/gfs_2m_temperature/gfs-2m-temperature.grib2 +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_2m_temperature/expected.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_2m_temperature/hrrr-2m-temperature.grib2 +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_categorical_rain/expected.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_categorical_rain/hrrr-categorical-rain.grib2 +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/2.0.0/hrrr_2m_temperature/expected.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/2.0.0/hrrr_2m_temperature/hrrr-2m-temperature.grib2 +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/3.0.0/gfs_and_hrrr_categorical_rain/expected.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.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
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/plain_filing_fact/expected.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/plain_filing_fact/filing.xml +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/xml_inline_fact/expected.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/xml_inline_fact/filing.xhtml +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/pacer_rss_feed/expected.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/pacer_rss_feed/feed.xml +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/sec_form_d_filing/expected.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/sec_form_d_filing/filing.xml +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/unified_agenda_extract/agenda.xml +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/unified_agenda_extract/expected.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/samples.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/scientific.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/scientific_arrays/__init__.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/scientific_arrays/container.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/scientific_arrays/goes.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/scientific_arrays/hdf4.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/scientific_arrays/hdf4_bridge.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/scientific_arrays/hdf5.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/scientific_arrays/native.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/scientific_arrays/netcdf.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/scientific_arrays/profiles.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/scientific_arrays/raw.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/scientific_arrays/zarr.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/scientific_catalog.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/scientific_segmented/__init__.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/scientific_segmented/asset_sets.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/scientific_segmented/formats.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/scientific_segmented/hsd.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/scientific_segmented/native.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/scientific_segmented/profiles.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/scientific_segmented/reader.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/scientific_segmented/xrit.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/sdmx_json.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/spreadsheet.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/statistical_microdata.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/tabular.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/vector.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/vector_wkb.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/xbrl_facts.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/readers/xml_tabular.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/recipe.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/repair/__init__.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/repair/adapters.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/repair/contracts.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/repair/coordinator.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/repair/errors.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/review.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/rowset.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/run_execution_v4.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/session_probes.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/signing.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/skill_assets.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/source_discovery.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/__init__.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/_adapter_steps.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/adapters.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/authenticated_https.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/authenticated_https_v2.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/authenticated_https_v3.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/cadence.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/cadence_emission.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/cadence_history.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/catalog/__init__.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/catalog/admission.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/catalog/authoring.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/catalog/authoring_policy.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/catalog/authoring_shards.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/catalog/bounded_io.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/catalog/channel.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/catalog/channel_client.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/catalog/contracts.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/catalog/coverage.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/catalog/delta.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/catalog/embedding.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/catalog/entry_v2.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/catalog/fill.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/catalog/fill_partitions.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/catalog/fill_staging.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/catalog/gating.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/catalog/generation_receipt.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/catalog/harvest/__init__.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/catalog/harvest/ckan.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/catalog/harvest/datagov_v4.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/catalog/harvest/protocol.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/catalog/harvest/sdmx.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/catalog/harvest/stac.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/catalog/health.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/catalog/hosted_catalog.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/catalog/identity_history.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/catalog/neural.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/catalog/packed_catalog.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/catalog/packed_retrieval.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/catalog/packed_writer.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/catalog/query_trace.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/catalog/recommend.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/catalog/retrieval.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/catalog/retrieval_manifest.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/catalog/rights_decisions.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/catalog/sealed.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/catalog/search.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/catalog/streaming_delta.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/catalog/update.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/collections.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/contracts.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/dataset.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/deletion.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/document_projection.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/fitness.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/governance.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/hosted.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/integration.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/range_reader.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/registry.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/rights_rule.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/source_cadence_vectors.v1.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/sports.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/stream.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/stream_capture_session.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/stream_connector.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.cursor-resume.v3.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-ed25519.v2.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-hmac.v2.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-hmac384.v2.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-hmac512.v2.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame.v2.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-header-rsa.v2.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-header.v2.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-permessage-jwt.v2.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-permessage.v2.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-prelude.v2.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-query.v2.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-subprotocol.v2.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-subscribe.v2.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-urlpath.v2.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/stream_connectors/polymarket.clob-market.v1.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/stream_credential.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/stream_prelude.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/stream_recorder.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/stream_registry.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/stream_rotation.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/stream_segment_recorder.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/stream_series.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/stream_signing.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sources/stream_transport.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/sql_transform_engine.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/stream_subscription_feed.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/stream_venue.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/stream_venue_staging.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/studio_boundary.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/thin/__init__.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/thin/acquire.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/thin/acquire_cancel.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/thin/activity.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/thin/approvals.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/thin/commands.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/thin/download.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/thin/narrative.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/thin/parity.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/thin/probe.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/thin/propose.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/thin/recipe.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/thin/research.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/thin/runs.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/thin/session.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/thin/stream.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/thin/stream_venue.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/thin/transport.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/thin/v4.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/thin/v4_artifacts.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/thin/v4_dataset_covers.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/thin/v4_datasets.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/thin/v4_handoff.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/thin/v4_narrative.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/thin/v4_query.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/thin/v4_runs.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/thin/v4_secrets.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/thin/v4_stream.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/thin/vocabulary.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/thin/workers.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/ucum/TABLE-PIN.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/ucum/ucum-subset.v1.json +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/unit_flow.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/units.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/ux/__init__.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/ux/approve.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/ux/attendance.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/ux/author_yaml.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/ux/clarification.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/ux/cloud_auth.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/ux/commands/__init__.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/ux/commands/approve.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/ux/commands/auth.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/ux/commands/author.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/ux/commands/catalog_author.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/ux/commands/catalog_fill.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/ux/commands/catalog_harvest.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/ux/commands/catalog_publish.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/ux/commands/catalog_search.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/ux/commands/catalog_update.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/ux/commands/clarify.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/ux/commands/deploy.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/ux/commands/deploy_dataset.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/ux/commands/deploy_plan.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/ux/commands/deploy_status.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/ux/commands/diff.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/ux/commands/document.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/ux/commands/index.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/ux/commands/inventory.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/ux/commands/list_builds.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/ux/commands/login.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/ux/commands/peek.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/ux/commands/plan_check.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/ux/commands/preflight.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/ux/commands/record.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/ux/commands/review_setup.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/ux/commands/search.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/ux/commands/show.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/ux/commands/whoami.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/ux/credential_native.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/ux/credential_store.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/ux/credentials.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/ux/diffing.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/ux/headline.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/ux/hosted_acquisition.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/ux/hosted_run_status.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/ux/inventory.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/ux/local_review.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/ux/login.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/ux/path_kind.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/ux/peek.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/ux/plain_file.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/ux/plan_check.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/ux/preflight.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/ux/readers.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/ux/remediation.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/ux/workload.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/v4_acquisition.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/v4_check_dialect.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/v4_document_pin.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/v4_reader_pin.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/v4_required_controls.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/v4_snapshot_artifact.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/v4_stream_recording.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/v4_transform.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/visual_run/__init__.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/visual_run/authoring.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/visual_run/contracts.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/visual_run/materialize.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/visual_run/observations.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/visual_run/query.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/visual_run/reducer.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/visual_run/sdk.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/visual_run/store.py +0 -0
- {mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/visual_run/transport.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mostlyright-data
|
|
3
|
-
Version: 0.14.
|
|
3
|
+
Version: 0.14.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/
|
|
@@ -131,10 +131,10 @@ gap rather than doing anything, and `export-hosted-candidate`, which is a backen
|
|
|
131
131
|
| `mr-data open` | Mint a single-use, short-lived address that continues this session in a browser at one dashboard path, and print it. `--open` hands it to the platform opener. The credential decides who mints: a device credential — what `mr-data login` stores — mints at Cloud, and a personal access token mints at Studio. |
|
|
132
132
|
| `mr-data promote` | Ask Studio to publish one table after a person's decision. The Harness worker does not perform the catch-up or scheduled refresh; report those only when another deployed component returns durable evidence that it did. |
|
|
133
133
|
| `mr-data reschedule` | Change how often one live table refreshes, without the demote and promote that would reset its bookkeeping and buy a catch-up run. `--cadence` takes a cron expression or an interval such as `every 6h`; `--why` records the reasoning. It starts no run. `--lock` freezes the schedule so Studio stops adjusting it; `--unlock` lets it follow the source again. |
|
|
134
|
-
| `mr-data table` | Report what one table is serving and how its refresh schedule is going: the state in plain words, the schedule in force, the next refresh, the schedule that was asked for and the reason given for it, and — once Studio has settled on one — the interval it measured and how many source updates that rests on. `table rename TABLE --name NAME` writes a new name, lowercase snake_case and unique within its dataset, fenced on that dataset's version and retried once if somebody else wrote first; nothing is rebuilt, because every run, version and schedule hangs off the identifier, which does not move. `table archive TABLE --confirm-name NAME` retires
|
|
134
|
+
| `mr-data table` | Report what one table is serving and how its refresh schedule is going: the state in plain words, the schedule in force, the next refresh, the schedule that was asked for and the reason given for it, and — once Studio has settled on one — the interval it measured and how many source updates that rests on. `table rename TABLE --name NAME` writes a new name, lowercase snake_case and unique within its dataset, fenced on that dataset's version and retried once if somebody else wrote first; nothing is rebuilt, because every run, version and schedule hangs off the identifier, which does not move. `table archive TABLE --confirm-name NAME` retires one table you name by the name it is called, and frees that name; a live table is refused until you `demote` it, and nothing built is deleted. `table archive TABLE [TABLE ...] --confirm DELETE` retires as many tables as you name at once: `DELETE` is the literal word, typed exactly, and it confirms the identifiers you typed rather than a name, so each table is retired under the name Studio is holding for it. Every table is attempted whatever the one before it answered, one line is printed for each, and the command exits non-zero if any was not retired — so read the outcome of each rather than the exit code alone. `--confirm-name` is refused when you name more than one table. |
|
|
135
135
|
| `mr-data pin` | Ask Studio to freeze one table pointer on an exact version, for a rollback or a hold. |
|
|
136
136
|
| `mr-data unpin` | Ask Studio to resume pointer tracking; read the returned state before claiming it resumed. |
|
|
137
|
-
| `mr-data demote` | Ask Studio to withdraw the pointer and any schedule it owns. |
|
|
137
|
+
| `mr-data demote` | Ask Studio to withdraw the pointer and any schedule it owns, for one table or for as many as you name: `demote TABLE [TABLE ...]` withdraws them one after another, attempts every one of them whatever the one before it answered, prints a line for each, and exits non-zero if any is still live. Pair it with `table archive` when you are retiring a set: a live table cannot be archived, so it is withdraw-then-archive, two commands rather than a loop. |
|
|
138
138
|
|
|
139
139
|
`auth`, `login`, `whoami` and `clarify` are the same implementation in both profiles, and
|
|
140
140
|
`clarify` alone reaches nothing at all. The other twenty-four answer from Studio. Eight only
|
|
@@ -525,6 +525,24 @@ which Studio fixes. Do it once per dataset, silently, and do not repeat it for a
|
|
|
525
525
|
subject changed. A dataset presented without a cover is a defect, the same as a one-line
|
|
526
526
|
description.
|
|
527
527
|
|
|
528
|
+
### Say what each source is
|
|
529
|
+
|
|
530
|
+
Every entry in `sources` takes an optional `description`, and every one you write gets one. It is
|
|
531
|
+
a single sentence saying what that source **is** — `Daily climatological reports, the official
|
|
532
|
+
highs and lows.` — and the dataset page draws it beside the endpoint, under the publisher it came
|
|
533
|
+
from. That line is the only place a reader ever learns what a URL full of query parameters
|
|
534
|
+
actually returned, so it is written for somebody who has never seen the recipe.
|
|
535
|
+
|
|
536
|
+
Write it about the DATA, never about the run: `Hourly airport surface observations` and not `the
|
|
537
|
+
2024 half of the window`, `fetched as CSV` or `unioned in step one`. Do not restate the address in
|
|
538
|
+
words, and do not repeat the publisher's product code where it says nothing a reader can use. Up
|
|
539
|
+
to 240 characters, which is one sentence rather than two. Where one window is split across several
|
|
540
|
+
sources on the same endpoint, all of them describe the same thing and get the same sentence — the
|
|
541
|
+
years are already in their names.
|
|
542
|
+
|
|
543
|
+
Leaving it out is a defect in the same way a one-line dataset description is: the source is then
|
|
544
|
+
drawn with its endpoint alone, and a reader is left to guess from a query string.
|
|
545
|
+
|
|
528
546
|
### Say what each column shows
|
|
529
547
|
|
|
530
548
|
Decide, per column, what a reader should see, and write it on the column as `presentation`. This is
|
|
@@ -1241,6 +1259,17 @@ or a hold, `mr-data unpin TABLE_ID` resumes tracking, and `mr-data demote TABLE_
|
|
|
1241
1259
|
schedule and withdraws the live pointer. Read the resulting table state, but do not infer a
|
|
1242
1260
|
schedule, catch-up, or current bytes from the command name or from route acceptance.
|
|
1243
1261
|
|
|
1262
|
+
To retire several tables, do it in two commands rather than a loop: `mr-data demote TABLE_ID
|
|
1263
|
+
TABLE_ID ...` withdraws them, then `mr-data table archive TABLE_ID TABLE_ID ... --confirm DELETE`
|
|
1264
|
+
retires them. `DELETE` is the literal word and nothing else is accepted; it confirms the
|
|
1265
|
+
identifiers you typed, and each table is then retired under the name Studio is holding for it, so
|
|
1266
|
+
you do not have to look any name up. Neither command stops at the first refusal: both attempt every
|
|
1267
|
+
table, print one outcome line for each, and exit non-zero if any did not move. Read the per-table
|
|
1268
|
+
outcomes — `--json` carries them as an array with counts beside it — and report what happened to
|
|
1269
|
+
each table rather than what the exit code said about the set. A table that is live is refused by
|
|
1270
|
+
`archive` until it is withdrawn, and a table a run is still writing to is refused by both until the
|
|
1271
|
+
run has finished; neither refusal deletes anything, and neither ends the command.
|
|
1272
|
+
|
|
1244
1273
|
## Autonomous delivery
|
|
1245
1274
|
|
|
1246
1275
|
Own the run until the requested outcome is delivered: a run that succeeded, its declared checks
|
|
@@ -17,6 +17,7 @@ its own.
|
|
|
17
17
|
from __future__ import annotations
|
|
18
18
|
|
|
19
19
|
import asyncio
|
|
20
|
+
import logging
|
|
20
21
|
import os
|
|
21
22
|
import shutil
|
|
22
23
|
import stat
|
|
@@ -281,15 +282,7 @@ def _materialized_claim_connector(
|
|
|
281
282
|
root = Path(tempfile.mkdtemp(prefix="stream-subscription-feed-", dir=work_root))
|
|
282
283
|
try:
|
|
283
284
|
os.chmod(root, 0o700)
|
|
284
|
-
registry_root =
|
|
285
|
-
registry_root.mkdir(mode=0o700)
|
|
286
|
-
materialize_connector_registry(
|
|
287
|
-
transport=objects,
|
|
288
|
-
bucket=_claim_text(claim.stream_venue_bucket, "stream venue bucket"),
|
|
289
|
-
registry_prefix=_claim_text(claim.connector_registry_prefix, "registry prefix"),
|
|
290
|
-
registry_digest=_claim_text(claim.connector_registry_digest, "registry digest"),
|
|
291
|
-
root=registry_root,
|
|
292
|
-
)
|
|
285
|
+
registry_root = _materialized_registry_root(claim, objects, root)
|
|
293
286
|
registry = load_stream_connector_registry(registry_root)
|
|
294
287
|
entry = registry.resolve(
|
|
295
288
|
_claim_text(claim.connector_id, "connector id"),
|
|
@@ -314,6 +307,33 @@ def _materialized_claim_connector(
|
|
|
314
307
|
shutil.rmtree(root, ignore_errors=True)
|
|
315
308
|
|
|
316
309
|
|
|
310
|
+
def _materialized_registry_root(
|
|
311
|
+
claim: ClaimedSubscription, objects: GCSObjectTransport, root: Path
|
|
312
|
+
) -> Path:
|
|
313
|
+
"""Materialize the pinned registry under ``root`` and file its series documents.
|
|
314
|
+
|
|
315
|
+
ONE MATERIALIZATION SHAPE FOR BOTH LOADERS. A published registry is one flat name-to-digest
|
|
316
|
+
table; the connector loader reads the documents directly beneath the root and the series
|
|
317
|
+
loader reads the ``series`` directory under it. A subscription that follows a series is
|
|
318
|
+
pinned to a registry that carries both kinds by construction, so a root left unsorted is not
|
|
319
|
+
a connector registry at all and the feed is refused before it opens.
|
|
320
|
+
"""
|
|
321
|
+
|
|
322
|
+
registry_root = root / "registry"
|
|
323
|
+
registry_root.mkdir(mode=0o700)
|
|
324
|
+
series_root = registry_root / SERIES_DIRECTORY_NAME
|
|
325
|
+
series_root.mkdir(mode=0o700)
|
|
326
|
+
materialize_connector_registry(
|
|
327
|
+
transport=objects,
|
|
328
|
+
bucket=_claim_text(claim.stream_venue_bucket, "stream venue bucket"),
|
|
329
|
+
registry_prefix=_claim_text(claim.connector_registry_prefix, "registry prefix"),
|
|
330
|
+
registry_digest=_claim_text(claim.connector_registry_digest, "registry digest"),
|
|
331
|
+
root=registry_root,
|
|
332
|
+
)
|
|
333
|
+
_sort_series_documents(registry_root, series_root)
|
|
334
|
+
return registry_root
|
|
335
|
+
|
|
336
|
+
|
|
317
337
|
def _claim_text(value: str | None, label: str) -> str:
|
|
318
338
|
if not isinstance(value, str) or not value:
|
|
319
339
|
raise StreamSubscriptionError("STREAM_SUBSCRIPTION_CONNECTOR_INVALID", label)
|
|
@@ -385,18 +405,7 @@ def _materialized_claim_series(
|
|
|
385
405
|
root = Path(tempfile.mkdtemp(prefix="stream-subscription-series-", dir=work_root))
|
|
386
406
|
try:
|
|
387
407
|
os.chmod(root, 0o700)
|
|
388
|
-
registry_root =
|
|
389
|
-
registry_root.mkdir(mode=0o700)
|
|
390
|
-
series_root = registry_root / SERIES_DIRECTORY_NAME
|
|
391
|
-
series_root.mkdir(mode=0o700)
|
|
392
|
-
materialize_connector_registry(
|
|
393
|
-
transport=objects,
|
|
394
|
-
bucket=_claim_text(claim.stream_venue_bucket, "stream venue bucket"),
|
|
395
|
-
registry_prefix=_claim_text(claim.connector_registry_prefix, "registry prefix"),
|
|
396
|
-
registry_digest=_claim_text(claim.connector_registry_digest, "registry digest"),
|
|
397
|
-
root=registry_root,
|
|
398
|
-
)
|
|
399
|
-
_sort_series_documents(registry_root, series_root)
|
|
408
|
+
registry_root = _materialized_registry_root(claim, objects, root)
|
|
400
409
|
documents = load_stream_series_documents(registry_root)
|
|
401
410
|
held = documents.get(series.series_id)
|
|
402
411
|
if held is None:
|
|
@@ -625,6 +634,7 @@ async def run_subscription_worker(
|
|
|
625
634
|
def stream_subscription_worker_main(argv: Sequence[str] | None = None) -> int:
|
|
626
635
|
"""Cloud Run Worker Pool executable; it intentionally accepts no mutable CLI authority."""
|
|
627
636
|
|
|
637
|
+
_configure_worker_logging()
|
|
628
638
|
arguments = tuple(sys.argv[1:] if argv is None else argv)
|
|
629
639
|
if arguments:
|
|
630
640
|
raise HostedStreamSubscriptionWorkerError(
|
|
@@ -636,6 +646,25 @@ def stream_subscription_worker_main(argv: Sequence[str] | None = None) -> int:
|
|
|
636
646
|
return 0
|
|
637
647
|
|
|
638
648
|
|
|
649
|
+
def _configure_worker_logging() -> None:
|
|
650
|
+
"""Configure the root logger for the pool executable, on a stream its host collects.
|
|
651
|
+
|
|
652
|
+
A library module configures nothing; an executable must. Unconfigured, this process fell
|
|
653
|
+
through to the last-resort handler, which emits a bare message with no level and no logger
|
|
654
|
+
name, so the pool's own refusals arrived unattributable.
|
|
655
|
+
|
|
656
|
+
Plain text on either stream is collected at DEFAULT severity, so the level is carried in the
|
|
657
|
+
line rather than in the record -- which is why the format names it. Stdout is chosen over the
|
|
658
|
+
sibling executables' stderr for the same reason it is chosen anywhere: a stream that carries
|
|
659
|
+
ordinary progress as well as refusals is not the error stream. An already-configured root is
|
|
660
|
+
left alone, which is what lets a smoke or a test harness own it instead.
|
|
661
|
+
"""
|
|
662
|
+
|
|
663
|
+
logging.basicConfig(
|
|
664
|
+
level=logging.INFO, stream=sys.stdout, format="%(levelname)s %(name)s %(message)s"
|
|
665
|
+
)
|
|
666
|
+
|
|
667
|
+
|
|
639
668
|
def _studio_origin(value: str | None) -> str:
|
|
640
669
|
if not isinstance(value, str) or not 1 <= len(value) <= 2048 or value.endswith("/"):
|
|
641
670
|
raise HostedStreamSubscriptionWorkerError(
|
|
@@ -27,6 +27,7 @@ from mostlyright.data_harness.canonical import (
|
|
|
27
27
|
parse_json,
|
|
28
28
|
sha256_bytes,
|
|
29
29
|
)
|
|
30
|
+
from mostlyright.data_harness.hosted_stream_recorder_job import _sort_series_documents
|
|
30
31
|
from mostlyright.data_harness.ingestion.gcs_store import (
|
|
31
32
|
GCSObjectTransport,
|
|
32
33
|
GCSPreconditionFailed,
|
|
@@ -40,6 +41,7 @@ from mostlyright.data_harness.sources.stream_registry import (
|
|
|
40
41
|
load_stream_connector_registry,
|
|
41
42
|
)
|
|
42
43
|
from mostlyright.data_harness.sources.stream_segment_recorder import StreamSegmentRecorder
|
|
44
|
+
from mostlyright.data_harness.sources.stream_series import SERIES_DIRECTORY_NAME
|
|
43
45
|
from mostlyright.data_harness.stream_subscription_worker import (
|
|
44
46
|
MAX_DISCOVERY_EVIDENCE_BYTES,
|
|
45
47
|
CheckpointReservation,
|
|
@@ -435,6 +437,18 @@ def _materialize_registry(
|
|
|
435
437
|
registry_digest=_required_claim_value(claim.connector_registry_digest, "registry digest"),
|
|
436
438
|
root=registry_root,
|
|
437
439
|
)
|
|
440
|
+
# THE REGISTRY A SERIES SUBSCRIPTION PINS HOLDS TWO GRAMMARS. A published registry is one
|
|
441
|
+
# flat name-to-digest table, and a subscription that follows a series pins a registry that
|
|
442
|
+
# carries the series document beside the connector it rotates. The connector loader reads
|
|
443
|
+
# every document directly beneath the root and refuses one written in the series grammar,
|
|
444
|
+
# so the series documents are filed under the series directory first -- exactly as the
|
|
445
|
+
# claim path (`hosted_stream_subscription_worker._materialized_claim_connector`) and the
|
|
446
|
+
# bounded recorder job already do. Without this, sealing died on the first checkpoint of
|
|
447
|
+
# every series-following subscription with STREAM_CONNECTOR_DOCUMENT, the lease was lost
|
|
448
|
+
# before any segment landed, and the subscription terminalized after five lost leases.
|
|
449
|
+
series_root = root / SERIES_DIRECTORY_NAME
|
|
450
|
+
series_root.mkdir(mode=0o700, exist_ok=True)
|
|
451
|
+
_sort_series_documents(root, series_root)
|
|
438
452
|
return load_stream_connector_registry(root)
|
|
439
453
|
|
|
440
454
|
|
|
@@ -132,6 +132,22 @@ class _SubscriptionCancelled(RuntimeError):
|
|
|
132
132
|
self.desired_state = desired_state
|
|
133
133
|
|
|
134
134
|
|
|
135
|
+
#: The largest ``volume_policy.max_bytes`` any worker in this pool can serve.
|
|
136
|
+
#:
|
|
137
|
+
#: A hot subscription gets two bounded buffers: one immutable segment may be sealing while its
|
|
138
|
+
#: successor is being read. Each is capped at half the per-claim budget so the queue does not
|
|
139
|
+
#: turn a 16 MiB promise into 32 MiB during a slow upload/CAS.
|
|
140
|
+
#:
|
|
141
|
+
#: It is exported because it is a PROTOCOL CONSTANT, not a private detail: the control plane
|
|
142
|
+
#: writes the policy a subscription starts with, so it needs the number to validate against at
|
|
143
|
+
#: start rather than discovering it one lease at a time.
|
|
144
|
+
MAX_VOLUME_POLICY_BYTES = MAX_BUFFERED_BYTES // 2
|
|
145
|
+
|
|
146
|
+
#: The largest ``volume_policy.max_duration_seconds`` any worker in this pool can serve, equal to
|
|
147
|
+
#: the longest a subscription may sit without data before its lease ends on its own.
|
|
148
|
+
MAX_VOLUME_POLICY_DURATION_SECONDS = DEFAULT_NO_DATA_TIMEOUT_SECONDS
|
|
149
|
+
|
|
150
|
+
|
|
135
151
|
@dataclass(frozen=True)
|
|
136
152
|
class VolumePolicy:
|
|
137
153
|
"""One subscription's bounded rotation policy, set by Studio rather than a worker flag."""
|
|
@@ -140,17 +156,21 @@ class VolumePolicy:
|
|
|
140
156
|
max_duration_seconds: int
|
|
141
157
|
|
|
142
158
|
def __post_init__(self) -> None:
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
159
|
+
# The refusal names the bound and the offered value, because the party that has to change
|
|
160
|
+
# the policy is the one that wrote it and it cannot act on "outside worker bounds".
|
|
161
|
+
if isinstance(self.max_bytes, bool) or not 1 <= self.max_bytes <= MAX_VOLUME_POLICY_BYTES:
|
|
162
|
+
raise StreamSubscriptionError(
|
|
163
|
+
"STREAM_SUBSCRIPTION_POLICY_INVALID",
|
|
164
|
+
f"volume policy max_bytes {self.max_bytes} is outside the worker bound "
|
|
165
|
+
f"1..{MAX_VOLUME_POLICY_BYTES}",
|
|
166
|
+
)
|
|
167
|
+
if isinstance(self.max_duration_seconds, bool) or not (
|
|
168
|
+
1 <= self.max_duration_seconds <= MAX_VOLUME_POLICY_DURATION_SECONDS
|
|
151
169
|
):
|
|
152
170
|
raise StreamSubscriptionError(
|
|
153
|
-
"STREAM_SUBSCRIPTION_POLICY_INVALID",
|
|
171
|
+
"STREAM_SUBSCRIPTION_POLICY_INVALID",
|
|
172
|
+
f"volume policy max_duration_seconds {self.max_duration_seconds} is outside the "
|
|
173
|
+
f"worker bound 1..{MAX_VOLUME_POLICY_DURATION_SECONDS}",
|
|
154
174
|
)
|
|
155
175
|
|
|
156
176
|
|
|
@@ -862,9 +882,12 @@ class RecoveryArtifact:
|
|
|
862
882
|
)
|
|
863
883
|
|
|
864
884
|
def to_dict(self) -> dict[str, object]:
|
|
885
|
+
# An object generation is a decimal STRING on the wire, the spelling the control plane's
|
|
886
|
+
# recovery-artifact schema contracts for. It stays an int in the dataclass because that
|
|
887
|
+
# is what compares and orders; only the serialized form is text.
|
|
865
888
|
return {
|
|
866
889
|
"object_name": self.object_name,
|
|
867
|
-
"generation": self.generation,
|
|
890
|
+
"generation": str(self.generation),
|
|
868
891
|
"sha256": self.sha256,
|
|
869
892
|
"byte_length": self.byte_length,
|
|
870
893
|
"media_type": self.media_type,
|
|
@@ -2083,6 +2106,8 @@ __all__ = [
|
|
|
2083
2106
|
"MAX_DISCOVERY_EVIDENCE_BYTES",
|
|
2084
2107
|
"MAX_ROSTER_MEMBERS",
|
|
2085
2108
|
"MAX_SEGMENT_GAPS",
|
|
2109
|
+
"MAX_VOLUME_POLICY_BYTES",
|
|
2110
|
+
"MAX_VOLUME_POLICY_DURATION_SECONDS",
|
|
2086
2111
|
"ROSTER_TICK_SECONDS",
|
|
2087
2112
|
"ROTATION_SCHEMA_VERSION",
|
|
2088
2113
|
"SEGMENT_ROTATION_SCHEMA_VERSION",
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
+
import logging
|
|
6
|
+
import re
|
|
5
7
|
from collections.abc import Callable, Mapping, Sequence
|
|
6
8
|
from dataclasses import dataclass, replace
|
|
7
9
|
from typing import Any
|
|
@@ -37,7 +39,15 @@ from mostlyright.data_harness.stream_subscription_worker import (
|
|
|
37
39
|
)
|
|
38
40
|
from mostlyright.data_harness.stream_venue_staging import MAX_EVIDENCE_BYTES
|
|
39
41
|
|
|
42
|
+
LOGGER = logging.getLogger(__name__)
|
|
43
|
+
|
|
40
44
|
CLAIM_PATH = "/_internal/stream-subscriptions:claim"
|
|
45
|
+
|
|
46
|
+
#: The largest object generation either spelling may carry, from the control plane's own
|
|
47
|
+
#: nineteen-digit delivery grammar. A generation is a storage coordinate, not arithmetic, so a
|
|
48
|
+
#: number outside the grammar is a claim about an object no bucket issued.
|
|
49
|
+
MAX_OBJECT_GENERATION = 10**19 - 1
|
|
50
|
+
_OBJECT_GENERATION_TEXT = re.compile(r"[1-9][0-9]{0,18}")
|
|
41
51
|
CREDENTIAL_RESOLUTION_SCHEMA_VERSION = "mostlyright-stream-subscription-credential-resolution.v1"
|
|
42
52
|
_STAGING_ROLES = ("source_data", "acquisition_receipt", "source_observation")
|
|
43
53
|
_STAGING_MEDIA_TYPES = {
|
|
@@ -72,6 +82,18 @@ class StudioSubscriptionControl:
|
|
|
72
82
|
# The number was already parsed and checked here before it was carried; the only
|
|
73
83
|
# change is that it now reaches the caller instead of being validated and dropped.
|
|
74
84
|
return IdlePoll(poll_after_seconds=_integer(value, "poll_after_seconds", 1))
|
|
85
|
+
try:
|
|
86
|
+
return self._claimed(value)
|
|
87
|
+
except StreamSubscriptionError as error:
|
|
88
|
+
# A LEASE THIS WORKER CANNOT SERVE IS STILL A LEASE. Studio persists the lease before
|
|
89
|
+
# it answers, so a refusal that only raised would leave that lease to expire and be
|
|
90
|
+
# handed back on the next claim, forever, with nothing on the record saying why.
|
|
91
|
+
self._dispose_of_refused_claim(value, error)
|
|
92
|
+
raise
|
|
93
|
+
|
|
94
|
+
def _claimed(self, value: Mapping[str, Any]) -> ClaimedSubscription:
|
|
95
|
+
"""The full claim, or a refusal naming the first member this worker cannot serve."""
|
|
96
|
+
|
|
75
97
|
policy = _mapping(value, "volume_policy")
|
|
76
98
|
claim_series = _series_claim(value.get("series"))
|
|
77
99
|
claim = ClaimedSubscription(
|
|
@@ -120,6 +142,62 @@ class StudioSubscriptionControl:
|
|
|
120
142
|
claim = replace(claim, resume_checkpoint=_resume_checkpoint(resume, claim))
|
|
121
143
|
return claim
|
|
122
144
|
|
|
145
|
+
def _dispose_of_refused_claim(
|
|
146
|
+
self, value: Mapping[str, Any], error: StreamSubscriptionError
|
|
147
|
+
) -> None:
|
|
148
|
+
"""Dispose of a persisted lease this worker refused, on a best effort, and never raise.
|
|
149
|
+
|
|
150
|
+
TWO DISPOSITIONS, BECAUSE TWO DIFFERENT THINGS BOUND THEM.
|
|
151
|
+
|
|
152
|
+
A claim carrying no pending checkpoint is COMPLETED as failed. That charges the control
|
|
153
|
+
plane's failure budget, which spaces the retries and terminalizes the subscription once
|
|
154
|
+
the budget runs out, and it is the bound on a subscription this fleet cannot serve.
|
|
155
|
+
|
|
156
|
+
A claim carrying a ``resume_checkpoint`` is LEFT ALONE, and its lease runs out instead.
|
|
157
|
+
The control plane exempts a lease with a pending checkpoint from that budget -- a resume
|
|
158
|
+
is meant to survive a worker dying mid-segment -- and re-leases it as soon as it is free.
|
|
159
|
+
Completing one would therefore trade a lease expiry for an immediate reclaim, which is a
|
|
160
|
+
tighter loop than the one this method exists to end. Expiry is the slower of the two, so
|
|
161
|
+
expiry is what bounds this case.
|
|
162
|
+
|
|
163
|
+
The discriminator is the pending checkpoint rather than which member refused, because the
|
|
164
|
+
exemption is the control plane's and it is keyed on the same fact.
|
|
165
|
+
"""
|
|
166
|
+
|
|
167
|
+
resuming = "resume_checkpoint" in value
|
|
168
|
+
LOGGER.warning(
|
|
169
|
+
"stream_subscription_claim_refused subscription_id=%s failure_code=%s disposition=%s",
|
|
170
|
+
_safe_subscription_id(value),
|
|
171
|
+
error.code,
|
|
172
|
+
"lease_expiry" if resuming else "completed_failed",
|
|
173
|
+
)
|
|
174
|
+
if resuming:
|
|
175
|
+
return
|
|
176
|
+
try:
|
|
177
|
+
url = _callback_url(value.get("complete_url"), origin=self.origin, label="complete")
|
|
178
|
+
body: dict[str, Any] = {
|
|
179
|
+
"schema_version": COMPLETE_SCHEMA_VERSION,
|
|
180
|
+
"lease_generation": _integer(value, "lease_generation", 1),
|
|
181
|
+
"terminal_reason": "failed",
|
|
182
|
+
}
|
|
183
|
+
self._post(url, body)
|
|
184
|
+
except SubscriptionFenceStale:
|
|
185
|
+
# The lease is already terminal, which is the outcome this was reaching for. A replay
|
|
186
|
+
# of a lost 5xx whose first attempt landed arrives here, so it is reported as done
|
|
187
|
+
# rather than as a completion that failed.
|
|
188
|
+
return
|
|
189
|
+
except Exception as unreported:
|
|
190
|
+
# Broad on purpose: whatever went wrong here, the refusal the caller is waiting on is
|
|
191
|
+
# the one that must reach it, so a second failure is logged and dropped rather than
|
|
192
|
+
# raised over the first.
|
|
193
|
+
LOGGER.warning(
|
|
194
|
+
"stream_subscription_claim_refusal_unreported subscription_id=%s failure_code=%s",
|
|
195
|
+
_safe_subscription_id(value),
|
|
196
|
+
unreported.code
|
|
197
|
+
if isinstance(unreported, StreamSubscriptionError)
|
|
198
|
+
else type(unreported).__name__,
|
|
199
|
+
)
|
|
200
|
+
|
|
123
201
|
def resolve_credential(
|
|
124
202
|
self, claim: ClaimedSubscription, *, credential_shape: str
|
|
125
203
|
) -> StreamCredential:
|
|
@@ -213,7 +291,8 @@ class StudioSubscriptionControl:
|
|
|
213
291
|
"next_cursor": next_cursor,
|
|
214
292
|
"segment_stream_id": capture.segment_stream_id,
|
|
215
293
|
"manifest_object_name": capture.manifest_object_name,
|
|
216
|
-
|
|
294
|
+
# Every object generation on the wire is text; the number stays an int in the capture.
|
|
295
|
+
"manifest_generation": str(capture.manifest_generation),
|
|
217
296
|
"manifest_sha256": capture.manifest_sha256,
|
|
218
297
|
"byte_length": capture.byte_length,
|
|
219
298
|
"capture_digest": capture.capture_digest,
|
|
@@ -412,6 +491,42 @@ class StudioSubscriptionControl:
|
|
|
412
491
|
raise AssertionError("unreachable")
|
|
413
492
|
|
|
414
493
|
|
|
494
|
+
def _object_generation(value: Mapping[str, Any], name: str) -> int:
|
|
495
|
+
"""One object generation, read from either spelling of the same bounded number.
|
|
496
|
+
|
|
497
|
+
EVERY OBJECT GENERATION ON THE WIRE IS TEXT, and an integer is admitted because a control
|
|
498
|
+
plane that echoes a stored coordinate back is not the place to relitigate a spelling.
|
|
499
|
+
|
|
500
|
+
The grammar is matched BEFORE the text is converted, and it is the control plane's own
|
|
501
|
+
nineteen-digit one. An unbounded digit string is a refusal here: converting one crosses the
|
|
502
|
+
interpreter's own conversion limit and raises an untyped error out of a parser whose whole
|
|
503
|
+
contract is that it refuses in one vocabulary.
|
|
504
|
+
"""
|
|
505
|
+
|
|
506
|
+
item = value.get(name)
|
|
507
|
+
if isinstance(item, str):
|
|
508
|
+
if not _OBJECT_GENERATION_TEXT.fullmatch(item):
|
|
509
|
+
raise StreamSubscriptionError("STREAM_SUBSCRIPTION_CLAIM_INVALID", name)
|
|
510
|
+
return int(item)
|
|
511
|
+
generation = _integer(value, name, 1)
|
|
512
|
+
if generation > MAX_OBJECT_GENERATION:
|
|
513
|
+
raise StreamSubscriptionError("STREAM_SUBSCRIPTION_CLAIM_INVALID", name)
|
|
514
|
+
return generation
|
|
515
|
+
|
|
516
|
+
|
|
517
|
+
def _safe_subscription_id(value: Mapping[str, Any]) -> str:
|
|
518
|
+
"""The claimed subscription id when it is a canonical UUID, and ``unknown`` otherwise.
|
|
519
|
+
|
|
520
|
+
A refusal log line must never repeat an unvalidated control-plane string, because the string
|
|
521
|
+
that failed to parse is exactly the one nothing has checked the shape of.
|
|
522
|
+
"""
|
|
523
|
+
|
|
524
|
+
try:
|
|
525
|
+
return _uuid_text(value.get("stream_subscription_id"), "stream_subscription_id")
|
|
526
|
+
except StreamSubscriptionError:
|
|
527
|
+
return "unknown"
|
|
528
|
+
|
|
529
|
+
|
|
415
530
|
def _code(raw: bytes) -> str | None:
|
|
416
531
|
try:
|
|
417
532
|
value = parse_json(raw)
|
|
@@ -541,7 +656,7 @@ def _resume_checkpoint(value: object, claim: ClaimedSubscription) -> ResumeCheck
|
|
|
541
656
|
)
|
|
542
657
|
capture = SealedCapture(
|
|
543
658
|
manifest_object_name=_text(checkpoint, "manifest_object_name"),
|
|
544
|
-
manifest_generation=
|
|
659
|
+
manifest_generation=_object_generation(checkpoint, "manifest_generation"),
|
|
545
660
|
manifest_sha256=_digest(checkpoint.get("manifest_sha256"), "manifest sha256"),
|
|
546
661
|
byte_length=_integer(checkpoint, "byte_length", 0),
|
|
547
662
|
capture_digest=capture_digest,
|
|
@@ -622,7 +737,7 @@ def _recovery_inventory(
|
|
|
622
737
|
)
|
|
623
738
|
artifacts[role] = RecoveryArtifact(
|
|
624
739
|
object_name=expected,
|
|
625
|
-
generation=
|
|
740
|
+
generation=_object_generation(artifact, "generation"),
|
|
626
741
|
sha256=_digest(artifact.get("sha256"), f"{role} sha256"),
|
|
627
742
|
byte_length=_integer(artifact, "byte_length", 0),
|
|
628
743
|
media_type=_text(artifact, "media_type"),
|
{mostlyright_data-0.14.0 → mostlyright_data-0.14.2}/src/mostlyright/data_harness/thin/router.py
RENAMED
|
@@ -135,10 +135,10 @@ HOSTED_SUMMARY = dict(
|
|
|
135
135
|
"ask Studio to publish one table and report only returned continuation evidence",
|
|
136
136
|
),
|
|
137
137
|
("reschedule", "change how often one table refreshes, without starting a run"),
|
|
138
|
-
("table", "report what one table is serving, rename it, or retire
|
|
138
|
+
("table", "report what one table is serving, rename it, or retire one or many"),
|
|
139
139
|
("pin", "ask Studio to pin the live pointer and report the returned state"),
|
|
140
140
|
("unpin", "ask Studio to remove a pin and report the returned pointer state"),
|
|
141
|
-
("demote", "ask Studio to withdraw the live pointer
|
|
141
|
+
("demote", "ask Studio to withdraw the live pointer from one table or many"),
|
|
142
142
|
("watch", "stream one run's live progress, resuming across stream cuts"),
|
|
143
143
|
("download", "bring one run's artifacts back here, each one's digest checked"),
|
|
144
144
|
("receipt", "print the record one run sealed about how it was built"),
|
|
@@ -439,15 +439,22 @@ def _exit_codes() -> dict[str, Callable[[dict[str, Any]], int]]:
|
|
|
439
439
|
``ux.commands.CommandSpec`` gives: an exit code that can disagree with the printed answer is
|
|
440
440
|
an exit code somebody will trust over the answer.
|
|
441
441
|
|
|
442
|
-
|
|
443
|
-
at the spend gate has not started, a run that failed is not a build whichever surface it
|
|
444
|
-
learned from, a table whose declared checks did not all pass is not one to go on with, a
|
|
442
|
+
Eight entries, and all eight are answers a script acts on rather than reports it reads: a run
|
|
443
|
+
held at the spend gate has not started, a run that failed is not a build whichever surface it
|
|
444
|
+
was learned from, a table whose declared checks did not all pass is not one to go on with, a
|
|
445
445
|
question this command stopped waiting on has not been answered, and a probe that settled
|
|
446
446
|
without an answer is not a yes. Everything else in the lane reports.
|
|
447
|
+
|
|
448
|
+
⚠ THE LAST TWO ARE MOUNTED FOR THE NAME AND NOT FOR THE ACT, which is why one function serves
|
|
449
|
+
both. ``mr-data table archive`` and ``mr-data demote`` each take a LIST and never stop at the
|
|
450
|
+
first refusal, so "did it work" is a question about the whole list and only the counts can
|
|
451
|
+
answer it. ``mr-data table TABLE`` and ``mr-data table rename`` reach the same entry, carry no
|
|
452
|
+
counts, and exit ``0``: a report is not a gate, and the derivation says so rather than the
|
|
453
|
+
router keeping a second table of which halves of a name are which.
|
|
447
454
|
"""
|
|
448
455
|
|
|
449
456
|
from mostlyright.data_harness.thin import probe as probe_module
|
|
450
|
-
from mostlyright.data_harness.thin import v4_artifacts, v4_query, v4_runs, v4_stream
|
|
457
|
+
from mostlyright.data_harness.thin import v4_artifacts, v4_query, v4_runs, v4_stream, v4_tables
|
|
451
458
|
|
|
452
459
|
return {
|
|
453
460
|
"run": v4_runs.run_exit_code,
|
|
@@ -456,6 +463,8 @@ def _exit_codes() -> dict[str, Callable[[dict[str, Any]], int]]:
|
|
|
456
463
|
"checks": v4_artifacts.checks_exit_code,
|
|
457
464
|
"query": v4_query.query_exit_code,
|
|
458
465
|
"probe": probe_module.probe_exit_code,
|
|
466
|
+
"table": v4_tables.lifecycle_exit_code,
|
|
467
|
+
"demote": v4_tables.lifecycle_exit_code,
|
|
459
468
|
}
|
|
460
469
|
|
|
461
470
|
|