mostlyright-data 0.10.5__tar.gz → 0.10.7__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.10.5 → mostlyright_data-0.10.7}/PKG-INFO +1 -1
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/pyproject.toml +1 -1
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/skills/mr-data-build/SKILL.md +1 -1
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/hosted_deploy.py +2 -2
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/hosted_run_worker.py +174 -147
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/run_execution_v4.py +26 -7
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/thin/approvals.py +3 -3
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/thin/commands.py +13 -7
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/thin/parity.py +22 -10
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/thin/propose.py +7 -2
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/thin/research.py +1 -1
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/thin/session.py +53 -24
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/thin/v4_artifacts.py +17 -5
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/thin/v4_query.py +2 -2
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/thin/v4_runs.py +2 -2
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/thin/v4_stream.py +19 -11
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/hosted_run_status.py +1 -1
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/v4_required_controls.py +35 -20
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/.gitignore +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/README.md +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/scripts/hatch_build.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/skills/mr-data-build/agents/openai.yaml +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/skills/mr-data-build/scripts/write_research_notebook.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/skills/mr-data-build/scripts/write_visual_run.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/__init__.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/LICENSE +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/PROVENANCE.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/__init__.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/__init__.pyi +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/_version.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/cal_rec_boxes/__init__.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/cal_rec_boxes/main.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/ch_ppocr_cls/__init__.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/ch_ppocr_cls/main.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/ch_ppocr_cls/utils.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/ch_ppocr_det/__init__.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/ch_ppocr_det/main.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/ch_ppocr_det/utils.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/__init__.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/main.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/typings.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/utils.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/config.yaml +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/inference_engine/__init__.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/inference_engine/base.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/inference_engine/onnxruntime/__init__.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/inference_engine/onnxruntime/main.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/inference_engine/onnxruntime/provider_config.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/main.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/models/PP-OCRv6_det_small.onnx +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/models/PP-OCRv6_rec_small.onnx +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/models/ch_ppocr_mobile_v2.0_cls_mobile.onnx +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/py.typed +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/utils/__init__.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/utils/load_image.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/utils/log.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/utils/model_resolver.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/utils/output.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/utils/parse_parameters.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/utils/process_img.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/utils/typings.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/utils/utils.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/__init__.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/acquisition/__init__.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/acquisition/http.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/acquisition/parsing.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/acquisition/ranges.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/acquisition/result_download.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/acquisition/retention_admission.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/acquisition/sandbox.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/acquisition/url_policy.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/agent_runtime.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/assets/logo-ink.svg +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/backends/__init__.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/backends/pandas_backend.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/backends/polars_backend.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/backends/protocol.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/backends/reference.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/backends/registry.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/backends/restrictions.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/bounded_query.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/canonical.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/catalog_job.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/cli.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/contracts.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/coordinator.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/crosswalks.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/declared_checks.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/deploy.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/deploy_target.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/deployment_evidence.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/documents/__init__.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/documents/_worker_capability.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/documents/agent_request.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/documents/capture.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/documents/contracts.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/documents/lane.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/documents/ocr.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/documents/pdf.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/documents/registry.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/documents/sandbox.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/documents/selections.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/documents/tables.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/documents/vendor_rapidocr.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/events.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/fast_delimited.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/formats.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/governors.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/hosted_bootstrap.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/hosted_crawler.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/hosted_crawler_container_smoke.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/hosted_crawler_fetch.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/hosted_crawler_job.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/hosted_crawler_protocol.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/hosted_dataset.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/hosted_handoff.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/hosted_ingestion_contract.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/hosted_ingestion_job.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/hosted_ingestion_job_smoke.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/hosted_rlimit_as_container_smoke.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/hosted_session_container_smoke.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/hosted_session_worker.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/hosted_session_worker_job_smoke.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/hosted_stream_recorder_container_smoke.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/hosted_stream_recorder_job.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/hosted_stream_subscription_container_smoke.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/hosted_stream_subscription_worker.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/hosted_worker.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ingestion/__init__.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ingestion/contracts.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ingestion/faults.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ingestion/gcs_store.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ingestion/spool.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ingestion/store.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/inprocess_acquisition.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/key_seam.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/linux_process_boundary.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/local_contracts.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/local_search/__init__.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/local_search/build_index.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/local_search/contracts.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/local_search/query_trace.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/local_search/retrieval.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/local_search/sealed.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/local_search/service.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/nbrender/CONTRACT.md +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/nbrender/__init__.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/nbrender/chrome.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/nbrender/code_body.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/nbrender/document.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/nbrender/frame.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/nbrender/interactive.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/nbrender/markdown_body.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/nbrender/mr_components.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/nbrender/outputs_data.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/nbrender/outputs_rich.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/nbrender/outputs_source.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/nbrender/outputs_stage.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/nbrender/outputs_text.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/nbrender/parse.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/nbrender/status.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/nbrender/tokens.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/notebook.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/offline.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/operation_registry.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/operator_setup.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/pipeline.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/plan_graph.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/preparation/__init__.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/preparation/contracts.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/preparation/engine.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/preparation/errors.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/preparation/gates.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/preparation/joins.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/preparation/profile.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/preparation/table.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/preparation/transforms.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/progress_events.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/__init__.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/_openpyxl.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/budgets.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/containers.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/contracts.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/delimited.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/geojson_vector.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/geopackage.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/geoparquet.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/grib2/__init__.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/grib2/admission.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/grib2/collection.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/grib2/collection_reader.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/grib2/decode.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/grib2/geometry.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/grib2/portable_math.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/grib_eccodes.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/html_tabular.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/html_web_extract.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/json_tabular.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/parquet_tabular.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/pcaxis_px.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/protobuf_tabular.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/raster/__init__.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/raster/_bytes.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/raster/decode.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/raster/family.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/raster/jpeg2000.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/raster/profiles.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/raster/rendered.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/raster/safe.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/raster/sentinel_safe.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/raster/tiff.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/registry.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/README.md +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.0.0/cities_one_stream/cities.csv.gz +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.0.0/cities_one_stream/expected.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.1.0/cities_one_stream/cities.csv.gz +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.1.0/cities_one_stream/expected.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/archive.tar/1.0.0/cities_beside_a_directory_entry/cities.tar +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/archive.tar/1.0.0/cities_beside_a_directory_entry/expected.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/archive.tar/1.1.0/cities_beside_a_directory_entry/cities.tar +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/archive.tar/1.1.0/cities_beside_a_directory_entry/expected.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/archive.zip/1.0.0/cities_beside_a_second_member/cities.zip +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/archive.zip/1.0.0/cities_beside_a_second_member/expected.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/archive.zip/1.1.0/dwd_semicolon_station_member/dwd-station.zip +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/archive.zip/1.1.0/dwd_semicolon_station_member/expected.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/archive.zip/1.2.0/dwd_semicolon_station_member/dwd-station.zip +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/archive.zip/1.2.0/dwd_semicolon_station_member/expected.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/an_ordinary_comma_separated_table/cities.csv +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/an_ordinary_comma_separated_table/expected.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/quoted_fields_holding_the_delimiter/cities.tsv +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/quoted_fields_holding_the_delimiter/expected.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/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.10.5 → mostlyright_data-0.10.7}/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.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/geojson.vector/1.0.0/czech_capital/expected.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/geojson.vector/1.0.0/czech_capital/places.geojson +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/geopackage.vector/1.0.0/epsg_4326_feature/expected.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/geopackage.vector/1.0.0/epsg_4326_feature/places.gpkg +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/geoparquet.vector/1.0.0/primary_wkb_point/expected.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/geoparquet.vector/1.0.0/primary_wkb_point/places.parquet +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/html.tabular/1.0.0/sanitized_table/expected.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/html.tabular/1.0.0/sanitized_table/table.html +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/html.web_extract/1.0.0/json_ld_scorecards/expected.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/html.web_extract/1.0.0/json_ld_scorecards/scorecards.html +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/image.rendered/1.0.0/tiny_png/expected.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/image.rendered/1.0.0/tiny_png/tiny-rendered.png +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/json.tabular/1.0.0/nested_hourly_observations/expected.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/json.tabular/1.0.0/nested_hourly_observations/stations.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/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.10.5 → mostlyright_data-0.10.7}/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.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/meteorology.bufr/1.0.0/eccodes_bufr4_subset/eccodes-bufr4.bufr +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/meteorology.bufr/1.0.0/eccodes_bufr4_subset/expected.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/meteorology.grib/1.0.0/eccodes_grib1_origin/expected.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/meteorology.grib/1.0.0/eccodes_grib1_origin/regular-ll-surface.grib1 +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/microdata.sas_xpt/1.0.0/two_raw_columns/expected.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/microdata.sas_xpt/1.0.0/two_raw_columns/survey.xpt +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/microdata.spss_sav/1.0.0/two_raw_columns/expected.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/microdata.spss_sav/1.0.0/two_raw_columns/survey.sav +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/microdata.stata_dta/1.0.0/two_raw_columns/expected.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/microdata.stata_dta/1.0.0/two_raw_columns/stata.dta +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/official.pcaxis_px/1.0.0/population_by_region_and_year/expected.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/official.pcaxis_px/1.0.0/population_by_region_and_year/population.px +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/official.sdmx_json/1.0.0/compact_population_series/expected.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/official.sdmx_json/1.0.0/compact_population_series/population.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/parquet.tabular/1.0.0/two_columns/expected.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/parquet.tabular/1.0.0/two_columns/prices.parquet +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/protobuf.tabular/1.0.0/gtfs_realtime_trip_updates/expected.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/protobuf.tabular/1.0.0/gtfs_realtime_trip_updates/gtfs-realtime.desc +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/protobuf.tabular/1.0.0/gtfs_realtime_trip_updates/trip-updates.pb +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/raster.geospatial/1.0.0/tiny_geotiff/expected.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/raster.geospatial/1.0.0/tiny_geotiff/tiny-geospatial.tif +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/satellite.goes_abi_l2/1.0.0/authored_cmi_window/expected.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/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.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/satellite.himawari_hsd/1.0.0/authored_b13_single_bzip2/expected.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/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.10.5 → mostlyright_data-0.10.7}/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.10.5 → mostlyright_data-0.10.7}/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.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/satellite.msg_seviri_l15/1.0.0/authored_calibrated_complete_visir/expected.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/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.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/satellite.sentinel_safe/1.0.0/authored_b02_scl_window/expected.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/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.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/satellite.xrit_image/1.0.0/authored_complete_raw_counts/expected.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/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.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/scientific.fits/1.0.0/tiny_primary_window/expected.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/scientific.fits/1.0.0/tiny_primary_window/tiny-primary.fits +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/scientific.hdf4/1.0.0/authored_temperature_window/expected.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/scientific.hdf4/1.0.0/authored_temperature_window/temperature.hdf +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/scientific.hdf5/1.0.0/authored_temperature_window/expected.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/scientific.hdf5/1.0.0/authored_temperature_window/temperature.h5 +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/scientific.hdf_eos2/1.0.0/authored_grid_temperature_window/expected.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/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.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/scientific.hdf_eos2/1.0.0/authored_swath_temperature_window/expected.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/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.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/scientific.netcdf/1.0.0/authored_classic_temperature_window/expected.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/scientific.netcdf/1.0.0/authored_classic_temperature_window/temperature-classic.nc +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/scientific.zarr/1.0.0/authored_v3_temperature_window/expected.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/scientific.zarr/1.0.0/authored_v3_temperature_window/temperature-zarr-v3.zip +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/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.10.5 → mostlyright_data-0.10.7}/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.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.0.0/shares_the_workbook_had_already_computed/expected.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.0.0/shares_the_workbook_had_already_computed/shares.xlsx +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.1.0/shares_the_workbook_had_already_computed/expected.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.1.0/shares_the_workbook_had_already_computed/shares.xlsx +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/README.md +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/gfs_2m_temperature/expected.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/gfs_2m_temperature/gfs-2m-temperature.grib2 +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_2m_temperature/expected.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_2m_temperature/hrrr-2m-temperature.grib2 +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_categorical_rain/expected.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_categorical_rain/hrrr-categorical-rain.grib2 +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/weather.grib2/2.0.0/hrrr_2m_temperature/expected.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/weather.grib2/2.0.0/hrrr_2m_temperature/hrrr-2m-temperature.grib2 +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/weather.grib2/3.0.0/gfs_and_hrrr_categorical_rain/expected.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/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.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/plain_filing_fact/expected.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/plain_filing_fact/filing.xml +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/xml_inline_fact/expected.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/xml_inline_fact/filing.xhtml +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/pacer_rss_feed/expected.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/pacer_rss_feed/feed.xml +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/sec_form_d_filing/expected.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/sec_form_d_filing/filing.xml +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/unified_agenda_extract/agenda.xml +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/unified_agenda_extract/expected.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/scientific.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/scientific_arrays/__init__.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/scientific_arrays/container.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/scientific_arrays/goes.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/scientific_arrays/hdf4.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/scientific_arrays/hdf4_bridge.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/scientific_arrays/hdf5.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/scientific_arrays/native.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/scientific_arrays/netcdf.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/scientific_arrays/profiles.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/scientific_arrays/raw.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/scientific_arrays/zarr.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/scientific_catalog.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/scientific_segmented/__init__.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/scientific_segmented/asset_sets.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/scientific_segmented/formats.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/scientific_segmented/hsd.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/scientific_segmented/native.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/scientific_segmented/profiles.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/scientific_segmented/reader.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/scientific_segmented/xrit.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/sdmx_json.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/spreadsheet.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/statistical_microdata.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/tabular.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/vector.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/vector_wkb.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/xbrl_facts.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/xml_tabular.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/recipe.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/repair/__init__.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/repair/adapters.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/repair/contracts.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/repair/coordinator.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/repair/errors.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/review.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/rowset.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/session_probes.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/signing.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/skill_assets.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/source_discovery.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/__init__.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/_adapter_steps.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/adapters.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/authenticated_https.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/authenticated_https_v2.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/cadence.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/cadence_emission.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/cadence_history.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/__init__.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/admission.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/authoring.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/authoring_policy.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/authoring_shards.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/bounded_io.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/channel.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/channel_client.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/contracts.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/coverage.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/delta.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/embedding.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/entry_v2.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/fill.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/fill_partitions.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/fill_staging.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/gating.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/generation_receipt.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/harvest/__init__.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/harvest/ckan.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/harvest/datagov_v4.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/harvest/protocol.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/harvest/sdmx.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/harvest/stac.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/health.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/hosted_catalog.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/identity_history.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/neural.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/packed_catalog.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/packed_retrieval.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/packed_writer.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/query_trace.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/recommend.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/retrieval.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/retrieval_manifest.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/rights_decisions.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/sealed.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/search.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/streaming_delta.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/update.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/collections.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/contracts.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/dataset.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/deletion.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/document_projection.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/fitness.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/governance.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/hosted.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/integration.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/range_reader.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/registry.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/rights_rule.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/source_cadence_vectors.v1.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/sports.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/stream.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/stream_capture_session.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/stream_connector.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/stream_connectors/fixture.cursor-resume.v3.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-ed25519.v2.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-hmac.v2.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-hmac384.v2.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-hmac512.v2.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame.v2.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-header-rsa.v2.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-header.v2.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-permessage-jwt.v2.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-permessage.v2.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-prelude.v2.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-query.v2.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-subprotocol.v2.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-subscribe.v2.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-urlpath.v2.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/stream_connectors/polymarket.clob-market.v1.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/stream_credential.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/stream_prelude.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/stream_recorder.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/stream_registry.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/stream_rotation.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/stream_segment_recorder.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/stream_series.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/stream_signing.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/stream_transport.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sql_transform_engine.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/stream_subscription_feed.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/stream_subscription_sealer.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/stream_subscription_worker.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/stream_venue.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/stream_venue_staging.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/studio_boundary.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/studio_subscription_control.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/thin/__init__.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/thin/acquire.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/thin/acquire_cancel.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/thin/download.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/thin/narrative.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/thin/probe.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/thin/recipe.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/thin/router.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/thin/runs.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/thin/stream.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/thin/stream_venue.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/thin/transport.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/thin/v4.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/thin/v4_dataset_covers.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/thin/v4_handoff.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/thin/v4_narrative.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/thin/v4_secrets.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/thin/v4_tables.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/thin/vocabulary.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/thin/workers.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ucum/TABLE-PIN.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ucum/ucum-subset.v1.json +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/unit_flow.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/units.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/__init__.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/approve.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/attendance.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/author_yaml.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/clarification.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/cloud_auth.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/commands/__init__.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/commands/approve.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/commands/auth.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/commands/author.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/commands/catalog_author.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/commands/catalog_fill.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/commands/catalog_harvest.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/commands/catalog_publish.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/commands/catalog_search.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/commands/catalog_update.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/commands/clarify.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/commands/deploy.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/commands/deploy_dataset.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/commands/deploy_plan.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/commands/deploy_status.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/commands/diff.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/commands/document.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/commands/index.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/commands/inventory.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/commands/list_builds.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/commands/login.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/commands/peek.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/commands/plan_check.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/commands/preflight.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/commands/record.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/commands/review_setup.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/commands/search.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/commands/show.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/commands/whoami.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/credential_native.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/credential_store.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/credentials.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/diffing.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/headline.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/hosted_acquisition.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/inventory.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/local_review.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/login.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/path_kind.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/peek.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/plain_file.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/plan_check.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/preflight.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/readers.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/remediation.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/render.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/workload.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/v4_acquisition.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/v4_check_dialect.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/v4_document_pin.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/v4_reader_pin.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/v4_recipe.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/v4_snapshot_artifact.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/v4_stream_recording.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/v4_transform.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/visual_run/__init__.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/visual_run/authoring.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/visual_run/contracts.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/visual_run/materialize.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/visual_run/observations.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/visual_run/query.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/visual_run/reducer.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/visual_run/sdk.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/visual_run/store.py +0 -0
- {mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/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.10.
|
|
3
|
+
Version: 0.10.7
|
|
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/
|
|
@@ -50,7 +50,7 @@ routine stages, predict duration or throughput, or expose raw state names. Write
|
|
|
50
50
|
professional product language and lead with the outcome or decision.
|
|
51
51
|
|
|
52
52
|
For hosted work, register the Dataset first and open its canonical page immediately in the host's
|
|
53
|
-
in-app browser: `mr-data open /
|
|
53
|
+
in-app browser: `mr-data open /datasets/DATASET_ID` mints a single-use address for it, and
|
|
54
54
|
when that address cannot be minted, carry on without it rather than blocking.
|
|
55
55
|
Keep that one Dataset tab for research, approval, building, verification, and delivery. Do not
|
|
56
56
|
replace it with a standalone Run, approval, or notebook page unless the user explicitly requests
|
{mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/hosted_deploy.py
RENAMED
|
@@ -2256,7 +2256,7 @@ def _activation_receipt(
|
|
|
2256
2256
|
"recipe_proposal_id": state["resources"]["proposal"]["recipe_proposal_id"],
|
|
2257
2257
|
"state": str(store.path),
|
|
2258
2258
|
"dashboard_url": (
|
|
2259
|
-
f"{_service_url(cloud_url, 'Cloud URL', allow_loopback_http=False)}/dashboard/
|
|
2259
|
+
f"{_service_url(cloud_url, 'Cloud URL', allow_loopback_http=False)}/dashboard/team"
|
|
2260
2260
|
),
|
|
2261
2261
|
# The queued Run is not a released version, and this receipt is where somebody learns that
|
|
2262
2262
|
# for the first time. Its sibling above has always ended by naming the next command; this
|
|
@@ -2274,7 +2274,7 @@ def cloud_dashboard_url(cloud_url: str, page: str) -> str:
|
|
|
2274
2274
|
"""
|
|
2275
2275
|
|
|
2276
2276
|
origin = _service_url(cloud_url, "Cloud URL", allow_loopback_http=False)
|
|
2277
|
-
return f"{origin}/dashboard/
|
|
2277
|
+
return f"{origin}/dashboard/{page}"
|
|
2278
2278
|
|
|
2279
2279
|
|
|
2280
2280
|
def _bind_cloud_dataset(
|
|
@@ -18,8 +18,8 @@ takes it:
|
|
|
18
18
|
:func:`_raw_snapshot_tar`.
|
|
19
19
|
* **The ``cache`` field lives on the v4 ``receipt`` artifact, never on a sealed acquisition
|
|
20
20
|
receipt.** See :func:`_receipt_document`.
|
|
21
|
-
* **The
|
|
22
|
-
coordinate.** See :func:`
|
|
21
|
+
* **The authenticated predecessor receipt is the authority; the job's ``predecessor`` block is
|
|
22
|
+
only a coordinate.** See :func:`restore_predecessor_record`.
|
|
23
23
|
|
|
24
24
|
TWO SEAMS THIS REPOSITORY DOES NOT OWN, both named here so a reader does not go looking:
|
|
25
25
|
|
|
@@ -56,7 +56,6 @@ from dataclasses import dataclass, field, replace
|
|
|
56
56
|
from pathlib import Path
|
|
57
57
|
from types import FrameType, MappingProxyType
|
|
58
58
|
from typing import Any, ClassVar, NoReturn, Protocol
|
|
59
|
-
from urllib.parse import urlsplit
|
|
60
59
|
from uuid import UUID, uuid5
|
|
61
60
|
|
|
62
61
|
from mostlyright.data_harness import pipeline, progress_events
|
|
@@ -81,12 +80,10 @@ from mostlyright.data_harness.hosted_worker import (
|
|
|
81
80
|
ArtifactPayload,
|
|
82
81
|
HostedWorkerError,
|
|
83
82
|
_candidate_snapshot,
|
|
84
|
-
_decode_candidate_envelope,
|
|
85
83
|
_new_transfer_client,
|
|
86
84
|
_quiet_signed_transfer,
|
|
87
85
|
_read_fd_once,
|
|
88
86
|
_released_column_profile,
|
|
89
|
-
_restore_candidate_members,
|
|
90
87
|
_run_bounded_in_submit_order,
|
|
91
88
|
_seal_producer_artifact,
|
|
92
89
|
_strict_json,
|
|
@@ -107,7 +104,7 @@ from mostlyright.data_harness.inprocess_acquisition import (
|
|
|
107
104
|
inprocess_reader_policy_digest,
|
|
108
105
|
v4_parse_policy_digest,
|
|
109
106
|
)
|
|
110
|
-
from mostlyright.data_harness.recipe import RecipeError,
|
|
107
|
+
from mostlyright.data_harness.recipe import RecipeError, parse_recipe_execution
|
|
111
108
|
from mostlyright.data_harness.run_execution_v4 import (
|
|
112
109
|
FAILED_STAGES,
|
|
113
110
|
RunCallbacks,
|
|
@@ -151,7 +148,7 @@ from mostlyright.data_harness.v4_recipe import (
|
|
|
151
148
|
source_ceilings,
|
|
152
149
|
source_egress_origins,
|
|
153
150
|
)
|
|
154
|
-
from mostlyright.data_harness.v4_required_controls import run_required_controls
|
|
151
|
+
from mostlyright.data_harness.v4_required_controls import profile_shape, run_required_controls
|
|
155
152
|
from mostlyright.data_harness.v4_snapshot_artifact import SnapshotArtifactAdapter
|
|
156
153
|
from mostlyright.data_harness.v4_transform import (
|
|
157
154
|
SEALED_MEMBER_DIRECTORY,
|
|
@@ -658,29 +655,25 @@ def permitted_artifact_hosts(
|
|
|
658
655
|
studio_origin: str = "",
|
|
659
656
|
environ: Mapping[str, str] | None = None,
|
|
660
657
|
) -> frozenset[str]:
|
|
661
|
-
"""The
|
|
658
|
+
"""The hosts this run's predecessor bytes may come from: the deployment's own policy.
|
|
662
659
|
|
|
663
|
-
|
|
664
|
-
|
|
660
|
+
THE RULE IS THE DEPLOYMENT'S. ``hosted_worker.signed_storage_hosts`` names the places this
|
|
661
|
+
fleet's Studio actually signs sessions: the object-storage origin
|
|
665
662
|
(:data:`~mostlyright.data_harness.hosted_worker.SIGNED_STORAGE_HOST`), the configured Studio
|
|
666
663
|
origin its local backend serves ``/_signed-artifacts/`` from, and whatever
|
|
667
664
|
:data:`~mostlyright.data_harness.hosted_worker.ENV_SIGNED_STORAGE_HOSTS` adds. Every one of
|
|
668
665
|
those is read from the environment or from the coordinator's own configuration, so NOTHING an
|
|
669
666
|
author of a job document can write moves them.
|
|
670
667
|
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
nothing at all and a document naming an internal host in BOTH members passed. Anchoring the
|
|
678
|
-
agreement inside the deployment's policy is what turns it back into a constraint: the sibling
|
|
679
|
-
member can only be moved to somewhere Studio genuinely signs.
|
|
668
|
+
The document's own ``artifact_session`` has to sit inside that policy too, and it is checked
|
|
669
|
+
here so a document naming somewhere Studio does not sign is refused before a byte moves. It is
|
|
670
|
+
NOT the anchor the predecessor download is narrowed to: that member is the
|
|
671
|
+
``artifacts:reserve`` route on Studio's own origin, while a predecessor's sealed bundle is
|
|
672
|
+
signed on the object store. The two are different hosts by design, and an earlier rule that
|
|
673
|
+
required them to agree refused every refresh a hosted deployment dispatched.
|
|
680
674
|
|
|
681
675
|
This is defence in depth and it is not the authentication: the predecessor's bytes are still
|
|
682
|
-
authenticated end to end by ``candidate_digest``, checked
|
|
683
|
-
and again by ``pipeline.verify_candidate`` on the restored tree.
|
|
676
|
+
authenticated end to end by ``candidate_digest``, checked before the receipt is read.
|
|
684
677
|
"""
|
|
685
678
|
|
|
686
679
|
session = job.artifact_session
|
|
@@ -697,10 +690,7 @@ def permitted_artifact_hosts(
|
|
|
697
690
|
# NEVER THE URL, for the reason `_download_signed_bytes` records: the address carries a
|
|
698
691
|
# credential in its query string and `signed_storage_refusal` is written never to echo it.
|
|
699
692
|
raise _host_refusal(f"this run's artifact session is not one Studio signs: {reason}")
|
|
700
|
-
|
|
701
|
-
if not host: # pragma: no cover - `signed_storage_refusal` already required a host.
|
|
702
|
-
raise _host_refusal("this run's artifact session names no host")
|
|
703
|
-
return frozenset({host.lower()})
|
|
693
|
+
return policy
|
|
704
694
|
|
|
705
695
|
|
|
706
696
|
def _download_signed_bytes(
|
|
@@ -715,7 +705,7 @@ def _download_signed_bytes(
|
|
|
715
705
|
|
|
716
706
|
A v4 signed session carries no expected size and no expected digest: the digest that
|
|
717
707
|
authenticates these bytes is the block's ``candidate_digest``, checked by
|
|
718
|
-
|
|
708
|
+
:func:`restore_predecessor_record` before the receipt is read.
|
|
719
709
|
|
|
720
710
|
BOTH ADDRESS CHECKS RUN BEFORE THE STREAM OPENS, so a refused session costs no bytes.
|
|
721
711
|
"""
|
|
@@ -752,130 +742,165 @@ def _download_signed_bytes(
|
|
|
752
742
|
return b"".join(chunks)
|
|
753
743
|
|
|
754
744
|
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
745
|
+
@dataclass(frozen=True)
|
|
746
|
+
class PredecessorRecord:
|
|
747
|
+
"""What a refresh continues from: the predecessor's sealed receipt, read once and authenticated.
|
|
748
|
+
|
|
749
|
+
THE RECEIPT IS THE AUTHORITY AND THE BLOCK IS ONLY THE COORDINATE. Studio stamps the receipt's
|
|
750
|
+
own digest onto the run as ``candidate_digest`` (``docs/V4-WORKER-PROTOCOL.md``, *Callbacks*),
|
|
751
|
+
and the predecessor block carries that digest beside a signed session for those exact bytes.
|
|
752
|
+
So the bytes are authenticated end to end by the digest, and every fact below is read out of
|
|
753
|
+
them rather than out of the block: the table version the successor numbers itself after, the
|
|
754
|
+
sealed column shape the drift control compares against, and the committed state of every
|
|
755
|
+
source, which for a registered document is the digest of the bytes that were read.
|
|
756
|
+
|
|
757
|
+
A v4 run uploads five artifacts and never the sealed tree itself, so there is no tree to
|
|
758
|
+
restore and replay-verify here; ``candidate_digest`` on the record is the tree's digest as
|
|
759
|
+
the predecessor stated it, carried for the successor's own sealed execution.
|
|
760
|
+
"""
|
|
759
761
|
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
762
|
+
run_id: UUID
|
|
763
|
+
workspace_id: UUID
|
|
764
|
+
recipe_digest: str
|
|
765
|
+
candidate_digest: str
|
|
766
|
+
table_id: str
|
|
767
|
+
table_version_id: str
|
|
768
|
+
table_version_number: int
|
|
769
|
+
columns: tuple[tuple[str, str], ...]
|
|
770
|
+
row_count: int | None
|
|
771
|
+
source_states: Mapping[str, str]
|
|
765
772
|
|
|
766
|
-
THE RESTORED TREE IS THE AUTHORITY AND THE BLOCK IS ONLY THE COORDINATE. The block says where
|
|
767
|
-
to look; what is found there says what it is. A block whose ``candidate_digest`` disagrees with
|
|
768
|
-
the verified tree is a refusal and never a correction, and ``table_id`` and
|
|
769
|
-
``table_version_number`` are read from the tree's own sealed ``recipe-execution.json`` rather
|
|
770
|
-
than from the block -- which is what stops a spoofed block rebinding a run to a version it did
|
|
771
|
-
not come from (T-401-24).
|
|
772
773
|
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
not verify, and a digest that disagrees.
|
|
774
|
+
def _receipt_table_record(snapshot: Mapping[str, bytes]) -> dict[str, Any]:
|
|
775
|
+
"""The ``table`` member of a receipt: the sealed execution's version and the sealed shape.
|
|
776
776
|
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
document's author cannot move.
|
|
777
|
+
Both are read out of the sealed tree through the same door the artifacts are, so a receipt
|
|
778
|
+
states what was sealed and nothing the build happened to hold in memory.
|
|
780
779
|
"""
|
|
781
780
|
|
|
781
|
+
try:
|
|
782
|
+
execution = parse_recipe_execution(json.loads(snapshot["recipe-execution.json"]))
|
|
783
|
+
except (KeyError, RecipeError, ValueError) as error:
|
|
784
|
+
raise RunExecutionError(
|
|
785
|
+
"ARTIFACT_PERSIST_FAILED",
|
|
786
|
+
failure_detail("the sealed tree carries no readable execution to state in the receipt"),
|
|
787
|
+
stage="persist",
|
|
788
|
+
) from error
|
|
789
|
+
shape = profile_shape(snapshot, "this version")
|
|
790
|
+
return {
|
|
791
|
+
"table_id": execution.table_id,
|
|
792
|
+
"table_version_id": execution.table_version_id,
|
|
793
|
+
"table_version_number": execution.table_version_number,
|
|
794
|
+
"columns": [{"name": name, "logical_type": kind} for name, kind in shape.columns],
|
|
795
|
+
"row_count": shape.row_count,
|
|
796
|
+
}
|
|
797
|
+
|
|
798
|
+
|
|
799
|
+
def _decode_predecessor_receipt(raw: bytes, job: RunExecution) -> PredecessorRecord:
|
|
800
|
+
"""Read the authenticated receipt bytes into the record, or refuse by name."""
|
|
801
|
+
|
|
782
802
|
block = job.predecessor
|
|
783
|
-
|
|
784
|
-
raise _predecessor_refusal(f"a {job.mode} run carries no predecessor block")
|
|
785
|
-
raw = _download_signed_bytes(
|
|
786
|
-
transfer,
|
|
787
|
-
block.artifact_download_session,
|
|
788
|
-
maximum=MAX_CANDIDATE_ENVELOPE_BYTES,
|
|
789
|
-
permitted_hosts=permitted_artifact_hosts(job, studio_origin=studio_origin),
|
|
790
|
-
)
|
|
803
|
+
assert block is not None
|
|
791
804
|
try:
|
|
792
|
-
|
|
793
|
-
except
|
|
805
|
+
value = json.loads(raw.decode("utf-8"))
|
|
806
|
+
except (UnicodeDecodeError, ValueError) as error:
|
|
794
807
|
raise _predecessor_refusal(
|
|
795
|
-
|
|
808
|
+
"the predecessor receipt will not decode: not a JSON document"
|
|
796
809
|
) from error
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
810
|
+
if not isinstance(value, Mapping) or value.get("schema_version") != RECEIPT_DOCUMENT_SCHEMA:
|
|
811
|
+
raise _predecessor_refusal(
|
|
812
|
+
f"the predecessor receipt will not decode: not a {RECEIPT_DOCUMENT_SCHEMA} document"
|
|
813
|
+
)
|
|
814
|
+
if str(value.get("run_id")) != str(block.run_id):
|
|
815
|
+
raise _predecessor_refusal("the predecessor receipt names a different run than the block")
|
|
816
|
+
if str(value.get("workspace_id")) != str(job.workspace_id):
|
|
817
|
+
raise _predecessor_refusal("the predecessor receipt names a different workspace")
|
|
818
|
+
table = value.get("table")
|
|
819
|
+
if not isinstance(table, Mapping):
|
|
820
|
+
raise _predecessor_refusal(
|
|
821
|
+
"the predecessor receipt states no table version, so a successor cannot number "
|
|
822
|
+
"itself after it; rebuild the table with a full run on this worker first"
|
|
823
|
+
)
|
|
800
824
|
try:
|
|
801
|
-
|
|
802
|
-
|
|
825
|
+
table_id = str(table["table_id"])
|
|
826
|
+
table_version_id = str(table["table_version_id"])
|
|
827
|
+
table_version_number = int(table["table_version_number"])
|
|
828
|
+
columns = tuple(
|
|
829
|
+
(str(entry["name"]), str(entry["logical_type"])) for entry in table["columns"]
|
|
830
|
+
)
|
|
831
|
+
except (KeyError, TypeError, ValueError) as error:
|
|
803
832
|
raise _predecessor_refusal(
|
|
804
|
-
|
|
833
|
+
"the predecessor receipt's table member is not readable"
|
|
805
834
|
) from error
|
|
806
|
-
if
|
|
835
|
+
if table_version_id != block.table_version_id:
|
|
807
836
|
raise _predecessor_refusal(
|
|
808
|
-
"the
|
|
837
|
+
"the predecessor block and the sealed receipt name different table versions"
|
|
809
838
|
)
|
|
810
|
-
|
|
839
|
+
if table_version_number < 1:
|
|
840
|
+
raise _predecessor_refusal("the predecessor receipt states no positive table version")
|
|
841
|
+
row_count = table.get("row_count")
|
|
842
|
+
sources = value.get("sources")
|
|
843
|
+
states: dict[str, str] = {}
|
|
844
|
+
if isinstance(sources, list):
|
|
845
|
+
for item in sources:
|
|
846
|
+
if isinstance(item, Mapping):
|
|
847
|
+
source_id = item.get("source_id")
|
|
848
|
+
digest = item.get("digest")
|
|
849
|
+
if isinstance(source_id, str) and isinstance(digest, str):
|
|
850
|
+
states[source_id] = digest
|
|
851
|
+
candidate_digest = value.get("candidate_digest")
|
|
852
|
+
recipe_digest = value.get("recipe_digest")
|
|
853
|
+
if not isinstance(candidate_digest, str) or not isinstance(recipe_digest, str):
|
|
854
|
+
raise _predecessor_refusal("the predecessor receipt states no digests")
|
|
855
|
+
return PredecessorRecord(
|
|
856
|
+
run_id=block.run_id,
|
|
857
|
+
workspace_id=job.workspace_id,
|
|
858
|
+
recipe_digest=recipe_digest,
|
|
859
|
+
candidate_digest=candidate_digest,
|
|
860
|
+
table_id=table_id,
|
|
861
|
+
table_version_id=table_version_id,
|
|
862
|
+
table_version_number=table_version_number,
|
|
863
|
+
columns=columns,
|
|
864
|
+
row_count=row_count if isinstance(row_count, int) else None,
|
|
865
|
+
source_states=MappingProxyType(states),
|
|
866
|
+
)
|
|
811
867
|
|
|
812
868
|
|
|
813
|
-
def
|
|
814
|
-
|
|
869
|
+
def restore_predecessor_record(
|
|
870
|
+
job: RunExecution, *, transfer: Any, studio_origin: str = ""
|
|
871
|
+
) -> PredecessorRecord:
|
|
872
|
+
"""Download and authenticate the predecessor's sealed receipt, and read the record from it.
|
|
815
873
|
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
874
|
+
Studio's predecessor session names the predecessor's ``receipt`` artifact -- the
|
|
875
|
+
``candidate_evidence`` root a refresh resolves from -- and the block's ``candidate_digest`` is
|
|
876
|
+
that receipt's own digest. The bytes are authenticated by the digest BEFORE they are read, so
|
|
877
|
+
a block that disagrees with what the session serves is a refusal and never a correction, and a
|
|
878
|
+
spoofed block cannot rebind a run to a version it did not come from (T-401-24): the version
|
|
879
|
+
coordinates are read from the authenticated receipt and cross-checked against the block.
|
|
819
880
|
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
chain committed at -- and that member is where the chain is re-checked from. A tree built from
|
|
824
|
-
a registered document runs no versioned source and seals no such member; what it does seal, per
|
|
825
|
-
relation, is the digest of the exact member the relation was read from. That digest is the
|
|
826
|
-
honest answer to "what state was this source committed at", because for this lane the bytes ARE
|
|
827
|
-
the state: there is no cursor, no watermark and nothing else the predecessor advanced.
|
|
881
|
+
Six failure points, one code, and the detail names which one: an absent block, a session that
|
|
882
|
+
will not answer, a download over its bound, a digest that disagrees, a receipt that will not
|
|
883
|
+
decode, and a receipt naming another run, workspace or table version.
|
|
828
884
|
|
|
829
|
-
|
|
830
|
-
|
|
885
|
+
``studio_origin`` is the DEPLOYMENT's Studio origin, not anything the job document said, and it
|
|
886
|
+
is what lets :func:`permitted_artifact_hosts` judge the signed address against a policy the
|
|
887
|
+
document's author cannot move.
|
|
831
888
|
"""
|
|
832
889
|
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
890
|
+
block = job.predecessor
|
|
891
|
+
if block is None:
|
|
892
|
+
raise _predecessor_refusal(f"a {job.mode} run carries no predecessor block")
|
|
893
|
+
raw = _download_signed_bytes(
|
|
894
|
+
transfer,
|
|
895
|
+
block.artifact_download_session,
|
|
896
|
+
maximum=MAX_CANDIDATE_ENVELOPE_BYTES,
|
|
897
|
+
permitted_hosts=permitted_artifact_hosts(job, studio_origin=studio_origin),
|
|
898
|
+
)
|
|
899
|
+
if "sha256:" + hashlib.sha256(raw).hexdigest() != block.candidate_digest:
|
|
842
900
|
raise _predecessor_refusal(
|
|
843
|
-
"the
|
|
901
|
+
"the predecessor receipt's digest disagrees with the predecessor block"
|
|
844
902
|
)
|
|
845
|
-
return
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
#: Where one predecessor member records a source's committed state, and under which key. Written
|
|
849
|
-
#: as a table because there are exactly two sealed shapes and the difference between them is which
|
|
850
|
-
#: member exists, not how it is read.
|
|
851
|
-
_COMMITTED_STATE_MEMBERS: tuple[tuple[str, str], ...] = (
|
|
852
|
-
("evidence/recipe-acquisition.json", "committed_state_digest"),
|
|
853
|
-
("evidence/sources.json", "sha256"),
|
|
854
|
-
)
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
def _committed_source_states(snapshot: Mapping[str, bytes]) -> dict[str, str] | None:
|
|
858
|
-
"""The per-source committed state one restored tree records, or ``None`` if it records none."""
|
|
859
|
-
|
|
860
|
-
for member, key in _COMMITTED_STATE_MEMBERS:
|
|
861
|
-
raw = snapshot.get(member)
|
|
862
|
-
if raw is None:
|
|
863
|
-
continue
|
|
864
|
-
decoded = json.loads(raw)
|
|
865
|
-
sources = decoded.get("sources") if isinstance(decoded, Mapping) else decoded
|
|
866
|
-
if not isinstance(sources, list):
|
|
867
|
-
continue
|
|
868
|
-
states: dict[str, str] = {}
|
|
869
|
-
for item in sources:
|
|
870
|
-
if not isinstance(item, Mapping):
|
|
871
|
-
continue
|
|
872
|
-
source_id = item.get("source_id")
|
|
873
|
-
digest = item.get(key)
|
|
874
|
-
if isinstance(source_id, str) and isinstance(digest, str):
|
|
875
|
-
states[source_id] = digest
|
|
876
|
-
if states:
|
|
877
|
-
return states
|
|
878
|
-
return None
|
|
903
|
+
return _decode_predecessor_receipt(raw, job)
|
|
879
904
|
|
|
880
905
|
|
|
881
906
|
# ------------------------------------------------------------------------------------------------
|
|
@@ -988,6 +1013,7 @@ def _receipt_document(
|
|
|
988
1013
|
verified: pipeline.VerifiedCandidate,
|
|
989
1014
|
coverage: Sequence[V4AcquisitionCoverage],
|
|
990
1015
|
raw_members: Sequence[Mapping[str, Any]],
|
|
1016
|
+
snapshot: Mapping[str, bytes],
|
|
991
1017
|
) -> bytes:
|
|
992
1018
|
"""The composed v4 receipt: one entry per source, the coverage, and the raw tar's members.
|
|
993
1019
|
|
|
@@ -1038,6 +1064,10 @@ def _receipt_document(
|
|
|
1038
1064
|
"media_type": RAW_SNAPSHOT_MEDIA_TYPE,
|
|
1039
1065
|
"members": [dict(member) for member in raw_members],
|
|
1040
1066
|
},
|
|
1067
|
+
# THE VERSION AND THE SHAPE THIS RUN SEALED, so a later refresh can number itself
|
|
1068
|
+
# after this version and hold its columns against these, reading the authenticated
|
|
1069
|
+
# receipt alone: a v4 run uploads no sealed tree for a successor to restore.
|
|
1070
|
+
"table": _receipt_table_record(snapshot),
|
|
1041
1071
|
}
|
|
1042
1072
|
)
|
|
1043
1073
|
|
|
@@ -1047,7 +1077,7 @@ def v4_artifact_payloads(
|
|
|
1047
1077
|
candidate_run_dir: Path,
|
|
1048
1078
|
*,
|
|
1049
1079
|
coverage: Sequence[V4AcquisitionCoverage] = (),
|
|
1050
|
-
|
|
1080
|
+
predecessor: PredecessorRecord | None = None,
|
|
1051
1081
|
) -> tuple[pipeline.VerifiedCandidate, list[ArtifactPayload]]:
|
|
1052
1082
|
"""Derive all five v4 artifacts from the sealed candidate tree, in layout order.
|
|
1053
1083
|
|
|
@@ -1085,17 +1115,14 @@ def v4_artifact_payloads(
|
|
|
1085
1115
|
stage="persist",
|
|
1086
1116
|
)
|
|
1087
1117
|
verified, snapshot = _candidate_snapshot(candidate_run_dir)
|
|
1088
|
-
# The
|
|
1089
|
-
#
|
|
1090
|
-
predecessor_snapshot = (
|
|
1091
|
-
None if predecessor_run_dir is None else _candidate_snapshot(predecessor_run_dir)[1]
|
|
1092
|
-
)
|
|
1118
|
+
# The authenticated predecessor record, for the drift control a refresh is held to: the
|
|
1119
|
+
# sealed shape it states is what this version's sealed shape is compared with.
|
|
1093
1120
|
run_required_controls(
|
|
1094
1121
|
job,
|
|
1095
1122
|
verified=verified,
|
|
1096
1123
|
snapshot=snapshot,
|
|
1097
1124
|
coverage=coverage,
|
|
1098
|
-
|
|
1125
|
+
predecessor=predecessor,
|
|
1099
1126
|
)
|
|
1100
1127
|
candidate_digest = "sha256:" + verified.candidate_digest
|
|
1101
1128
|
# The tar is built BEFORE the receipt, because the receipt states the tar's members: the
|
|
@@ -1114,7 +1141,7 @@ def v4_artifact_payloads(
|
|
|
1114
1141
|
candidate_digest=candidate_digest,
|
|
1115
1142
|
),
|
|
1116
1143
|
"preview": _table_preview(snapshot["data/table.parquet"], candidate_digest),
|
|
1117
|
-
"receipt": _receipt_document(job, verified, coverage, raw_members),
|
|
1144
|
+
"receipt": _receipt_document(job, verified, coverage, raw_members, snapshot),
|
|
1118
1145
|
"raw_snapshot": _raw_snapshot_tar(snapshot, raw_paths),
|
|
1119
1146
|
}
|
|
1120
1147
|
return verified, [
|
|
@@ -2569,9 +2596,9 @@ def run_v4(
|
|
|
2569
2596
|
with ExitStack() as stack:
|
|
2570
2597
|
root = Path(stack.enter_context(tempfile.TemporaryDirectory(prefix="mr-v4-run-"))).resolve()
|
|
2571
2598
|
try:
|
|
2572
|
-
|
|
2573
|
-
predecessor_execution:
|
|
2574
|
-
source_states:
|
|
2599
|
+
predecessor: PredecessorRecord | None = None
|
|
2600
|
+
predecessor_execution: PredecessorRecord | None = None
|
|
2601
|
+
source_states: Mapping[str, str] | None = None
|
|
2575
2602
|
# THE DECLARED CHECKS ARE PARSED FIRST, BEFORE A BYTE IS FETCHED OR RESTORED.
|
|
2576
2603
|
# `parse_declared_checks` is entirely static -- it validates every check's kind, its
|
|
2577
2604
|
# exact parameter set, its domains and every column it names against the plan's own
|
|
@@ -2604,10 +2631,11 @@ def run_v4(
|
|
|
2604
2631
|
if job.mode in {"refresh", "backfill"}:
|
|
2605
2632
|
if transfer is None:
|
|
2606
2633
|
transfer = stack.enter_context(_closing(_new_transfer_client()))
|
|
2607
|
-
|
|
2608
|
-
job, transfer=transfer,
|
|
2634
|
+
predecessor = restore_predecessor_record(
|
|
2635
|
+
job, transfer=transfer, studio_origin=origin
|
|
2609
2636
|
)
|
|
2610
|
-
predecessor_execution
|
|
2637
|
+
predecessor_execution = predecessor
|
|
2638
|
+
source_states = predecessor.source_states
|
|
2611
2639
|
|
|
2612
2640
|
approval, execution = synthesize_execution_lock(
|
|
2613
2641
|
job,
|
|
@@ -2719,7 +2747,7 @@ def run_v4(
|
|
|
2719
2747
|
job,
|
|
2720
2748
|
output_dir,
|
|
2721
2749
|
coverage=coverage_log.entries(),
|
|
2722
|
-
|
|
2750
|
+
predecessor=predecessor,
|
|
2723
2751
|
)
|
|
2724
2752
|
_upload_all(
|
|
2725
2753
|
job,
|
|
@@ -2833,12 +2861,11 @@ def _resolved_sealer(
|
|
|
2833
2861
|
transport=stack.enter_context(_closing(_new_transfer_client())),
|
|
2834
2862
|
transfer=transfer,
|
|
2835
2863
|
base_url=base_url,
|
|
2836
|
-
# THE DEPLOYMENT'S POLICY, NOT THE DOCUMENT'S OWN HOST. `
|
|
2837
|
-
# this set to the one host the job's `artifact_session` names, which is right for the
|
|
2838
|
-
# predecessor download -- both are bytes of the same run -- and wrong here: that member is
|
|
2864
|
+
# THE DEPLOYMENT'S POLICY, NOT THE DOCUMENT'S OWN HOST. The job's `artifact_session` is
|
|
2839
2865
|
# the `artifacts:reserve` route on Studio's own origin, while the session it answers with
|
|
2840
2866
|
# is signed on the object store. The two are DIFFERENT hosts by design, and the rule the
|
|
2841
|
-
# answer has to satisfy is the one `signed_storage_hosts` reads out of deployment facts
|
|
2867
|
+
# answer has to satisfy is the one `signed_storage_hosts` reads out of deployment facts --
|
|
2868
|
+
# the same rule `permitted_artifact_hosts` applies to the predecessor download.
|
|
2842
2869
|
permitted_hosts=signed_storage_hosts(studio_origin=base_url, environ=os.environ),
|
|
2843
2870
|
)
|
|
2844
2871
|
|
|
@@ -3090,6 +3117,7 @@ __all__ = [
|
|
|
3090
3117
|
"RECEIPT_DOCUMENT_SCHEMA",
|
|
3091
3118
|
"V4_ARTIFACT_LAYOUT",
|
|
3092
3119
|
"ArtifactSealer",
|
|
3120
|
+
"PredecessorRecord",
|
|
3093
3121
|
"StudioArtifactSealer",
|
|
3094
3122
|
"StudioCredentialRedeemer",
|
|
3095
3123
|
"StudioRunCallbacks",
|
|
@@ -3097,9 +3125,8 @@ __all__ = [
|
|
|
3097
3125
|
"artifact_id_for",
|
|
3098
3126
|
"build_v4_candidate",
|
|
3099
3127
|
"permitted_artifact_hosts",
|
|
3100
|
-
"predecessor_lock_inputs",
|
|
3101
3128
|
"recipe_governance",
|
|
3102
|
-
"
|
|
3129
|
+
"restore_predecessor_record",
|
|
3103
3130
|
"run_v4",
|
|
3104
3131
|
"run_worker_main",
|
|
3105
3132
|
"seal_coordinate",
|
{mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/run_execution_v4.py
RENAMED
|
@@ -1407,10 +1407,28 @@ def _refuse_unbindable_watermark(job: RunExecution) -> None:
|
|
|
1407
1407
|
)
|
|
1408
1408
|
|
|
1409
1409
|
|
|
1410
|
+
class PredecessorExecution(Protocol):
|
|
1411
|
+
"""The three facts the lock reads off a predecessor: its table, its version, its number.
|
|
1412
|
+
|
|
1413
|
+
Satisfied by the engine's own ``RecipeExecution`` and by the worker's authenticated
|
|
1414
|
+
``PredecessorRecord`` alike, so the lock is indifferent to which sealed member they were read
|
|
1415
|
+
from.
|
|
1416
|
+
"""
|
|
1417
|
+
|
|
1418
|
+
@property
|
|
1419
|
+
def table_id(self) -> str: ...
|
|
1420
|
+
|
|
1421
|
+
@property
|
|
1422
|
+
def table_version_id(self) -> str: ...
|
|
1423
|
+
|
|
1424
|
+
@property
|
|
1425
|
+
def table_version_number(self) -> int: ...
|
|
1426
|
+
|
|
1427
|
+
|
|
1410
1428
|
def synthesize_execution_lock(
|
|
1411
1429
|
job: RunExecution,
|
|
1412
1430
|
*,
|
|
1413
|
-
predecessor_execution:
|
|
1431
|
+
predecessor_execution: PredecessorExecution | None = None,
|
|
1414
1432
|
predecessor_source_states: Mapping[str, str] | None = None,
|
|
1415
1433
|
trusted_clock: str | None = None,
|
|
1416
1434
|
) -> tuple[RecipeApproval, RecipeExecution]:
|
|
@@ -1422,18 +1440,19 @@ def synthesize_execution_lock(
|
|
|
1422
1440
|
keeps ``pipeline._RECIPE_STATIC_FILES`` intact and the synthesized documents are still sealed
|
|
1423
1441
|
into the candidate as honest evidence of what ran.
|
|
1424
1442
|
|
|
1425
|
-
``predecessor_execution`` is
|
|
1426
|
-
|
|
1427
|
-
|
|
1428
|
-
and passes
|
|
1443
|
+
``predecessor_execution`` is read out of the predecessor's AUTHENTICATED sealed receipt (the
|
|
1444
|
+
``table`` member it states), not out of the job document: the sealed member is the authority
|
|
1445
|
+
and the block is only the coordinate. The driver downloads the receipt, authenticates it by
|
|
1446
|
+
the block's digest and passes the record in. A non-``initial`` call without it refuses
|
|
1447
|
+
``PREDECESSOR_UNAVAILABLE`` rather
|
|
1429
1448
|
than guessing a version number, and the one value that appears in both places --
|
|
1430
1449
|
``table_version_id`` -- is cross-checked, so a spoofed block cannot rebind a run to a tree it
|
|
1431
1450
|
did not come from. (``candidate_digest`` has no counterpart on ``RecipeExecution``: the
|
|
1432
1451
|
``predecessor_candidate_digest`` member there names the predecessor's OWN predecessor, not
|
|
1433
1452
|
itself. Authenticating the digest against the restored tree is 401-04's, where the tree is.)
|
|
1434
1453
|
|
|
1435
|
-
``predecessor_source_states`` carries the per-source
|
|
1436
|
-
|
|
1454
|
+
``predecessor_source_states`` carries the per-source committed state read from the same
|
|
1455
|
+
receipt: for a registered document, the digest of the bytes each source was read as.
|
|
1437
1456
|
``_validate_recipe_execution`` requires one for every source of a non-``initial`` execution,
|
|
1438
1457
|
and the job document carries none, so 401-04 supplies them from the same restored tree.
|
|
1439
1458
|
|
{mostlyright_data-0.10.5 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/thin/approvals.py
RENAMED
|
@@ -60,7 +60,7 @@ from mostlyright.data_harness.thin.runs import StudioApiClient, new_idempotency_
|
|
|
60
60
|
from mostlyright.data_harness.thin.session import (
|
|
61
61
|
StudioSession,
|
|
62
62
|
open_studio_session,
|
|
63
|
-
|
|
63
|
+
run_record_dashboard_url,
|
|
64
64
|
)
|
|
65
65
|
from mostlyright.data_harness.thin.transport import ThinLaneError
|
|
66
66
|
from mostlyright.data_harness.ux.credentials import resolve_cloud_credentials
|
|
@@ -785,7 +785,7 @@ def _confirm_table_recipe(
|
|
|
785
785
|
payload["build"] = {
|
|
786
786
|
"state": "run_already_queued",
|
|
787
787
|
"run_id": run_id,
|
|
788
|
-
"dashboard_url":
|
|
788
|
+
"dashboard_url": run_record_dashboard_url(selected.session.cloud_url, run, run_id),
|
|
789
789
|
"watch_command": f"mr-data watch {run_id} --hosted",
|
|
790
790
|
"note": (
|
|
791
791
|
"The confirmation started the first hosted Build in the same act; there is "
|
|
@@ -823,7 +823,7 @@ def _what_follows_an_approved_recipe(
|
|
|
823
823
|
return {
|
|
824
824
|
"state": "run_already_queued",
|
|
825
825
|
"run_id": run_id,
|
|
826
|
-
"dashboard_url":
|
|
826
|
+
"dashboard_url": run_record_dashboard_url(client.session.cloud_url, run, run_id),
|
|
827
827
|
"watch_command": f"mr-data watch {run_id} --hosted",
|
|
828
828
|
"note": (
|
|
829
829
|
"The confirmation started the first hosted Build in the same act; there is "
|