mostlyright-data 0.11.1__tar.gz → 0.12.0__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.11.1 → mostlyright_data-0.12.0}/PKG-INFO +1 -1
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/pyproject.toml +1 -1
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/skills/mr-data-build/SKILL.md +38 -11
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/hosted_run_worker.py +160 -19
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/run_execution_v4.py +190 -9
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/studio_boundary.py +1 -1
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/thin/router.py +2 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/thin/v4.py +20 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/thin/v4_query.py +193 -5
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/thin/v4_stream.py +37 -3
- mostlyright_data-0.12.0/src/mostlyright/data_harness/thin/v4_tables.py +922 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/thin/vocabulary.py +12 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/ux/render.py +2 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/v4_stream_recording.py +5 -2
- mostlyright_data-0.11.1/src/mostlyright/data_harness/thin/v4_tables.py +0 -488
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/.gitignore +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/README.md +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/scripts/hatch_build.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/skills/mr-data-build/agents/openai.yaml +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/skills/mr-data-build/scripts/write_research_notebook.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/skills/mr-data-build/scripts/write_visual_run.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/_vendor/__init__.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/_vendor/rapidocr/LICENSE +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/_vendor/rapidocr/PROVENANCE.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/_vendor/rapidocr/__init__.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/_vendor/rapidocr/__init__.pyi +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/_vendor/rapidocr/_version.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/_vendor/rapidocr/cal_rec_boxes/__init__.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/_vendor/rapidocr/cal_rec_boxes/main.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/_vendor/rapidocr/ch_ppocr_cls/__init__.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/_vendor/rapidocr/ch_ppocr_cls/main.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/_vendor/rapidocr/ch_ppocr_cls/utils.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/_vendor/rapidocr/ch_ppocr_det/__init__.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/_vendor/rapidocr/ch_ppocr_det/main.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/_vendor/rapidocr/ch_ppocr_det/utils.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/__init__.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/main.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/typings.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/utils.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/_vendor/rapidocr/config.yaml +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/_vendor/rapidocr/inference_engine/__init__.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/_vendor/rapidocr/inference_engine/base.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/_vendor/rapidocr/inference_engine/onnxruntime/__init__.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/_vendor/rapidocr/inference_engine/onnxruntime/main.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/_vendor/rapidocr/inference_engine/onnxruntime/provider_config.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/_vendor/rapidocr/main.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/_vendor/rapidocr/models/PP-OCRv6_det_small.onnx +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/_vendor/rapidocr/models/PP-OCRv6_rec_small.onnx +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/_vendor/rapidocr/models/ch_ppocr_mobile_v2.0_cls_mobile.onnx +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/_vendor/rapidocr/py.typed +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/_vendor/rapidocr/utils/__init__.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/_vendor/rapidocr/utils/load_image.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/_vendor/rapidocr/utils/log.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/_vendor/rapidocr/utils/model_resolver.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/_vendor/rapidocr/utils/output.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/_vendor/rapidocr/utils/parse_parameters.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/_vendor/rapidocr/utils/process_img.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/_vendor/rapidocr/utils/typings.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/_vendor/rapidocr/utils/utils.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/__init__.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/acquisition/__init__.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/acquisition/derived_credentials.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/acquisition/http.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/acquisition/parsing.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/acquisition/ranges.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/acquisition/result_download.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/acquisition/retention_admission.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/acquisition/sandbox.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/acquisition/url_policy.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/agent_runtime.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/assets/logo-ink.svg +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/backends/__init__.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/backends/pandas_backend.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/backends/polars_backend.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/backends/protocol.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/backends/reference.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/backends/registry.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/backends/restrictions.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/bounded_query.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/canonical.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/catalog_job.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/cli.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/contracts.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/coordinator.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/crosswalks.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/declared_checks.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/deploy.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/deploy_target.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/deployment_evidence.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/documents/__init__.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/documents/_worker_capability.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/documents/agent_request.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/documents/capture.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/documents/contracts.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/documents/lane.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/documents/ocr.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/documents/pdf.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/documents/registry.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/documents/sandbox.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/documents/selections.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/documents/tables.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/documents/vendor_rapidocr.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/events.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/fast_delimited.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/formats.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/governors.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/hosted_bootstrap.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/hosted_crawler.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/hosted_crawler_container_smoke.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/hosted_crawler_fetch.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/hosted_crawler_job.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/hosted_crawler_protocol.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/hosted_dataset.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/hosted_deploy.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/hosted_handoff.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/hosted_ingestion_contract.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/hosted_ingestion_job.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/hosted_ingestion_job_smoke.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/hosted_rlimit_as_container_smoke.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/hosted_session_container_smoke.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/hosted_session_worker.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/hosted_session_worker_job_smoke.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/hosted_stream_recorder_container_smoke.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/hosted_stream_recorder_job.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/hosted_stream_subscription_container_smoke.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/hosted_stream_subscription_worker.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/hosted_worker.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/ingestion/__init__.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/ingestion/contracts.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/ingestion/faults.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/ingestion/gcs_store.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/ingestion/spool.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/ingestion/store.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/inprocess_acquisition.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/key_seam.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/linux_process_boundary.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/local_contracts.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/local_search/__init__.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/local_search/build_index.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/local_search/contracts.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/local_search/query_trace.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/local_search/retrieval.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/local_search/sealed.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/local_search/service.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/nbrender/CONTRACT.md +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/nbrender/__init__.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/nbrender/chrome.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/nbrender/code_body.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/nbrender/document.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/nbrender/frame.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/nbrender/interactive.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/nbrender/markdown_body.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/nbrender/mr_components.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/nbrender/outputs_data.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/nbrender/outputs_rich.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/nbrender/outputs_source.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/nbrender/outputs_stage.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/nbrender/outputs_text.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/nbrender/parse.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/nbrender/status.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/nbrender/tokens.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/notebook.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/offline.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/operation_registry.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/operator_setup.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/pipeline.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/plan_graph.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/preparation/__init__.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/preparation/contracts.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/preparation/engine.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/preparation/errors.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/preparation/gates.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/preparation/joins.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/preparation/profile.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/preparation/table.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/preparation/transforms.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/progress_events.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/__init__.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/_openpyxl.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/budgets.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/containers.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/contracts.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/delimited.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/geojson_vector.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/geopackage.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/geoparquet.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/grib2/__init__.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/grib2/admission.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/grib2/collection.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/grib2/collection_reader.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/grib2/decode.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/grib2/geometry.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/grib2/portable_math.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/grib_eccodes.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/html_tabular.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/html_web_extract.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/json_tabular.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/parquet_tabular.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/pcaxis_px.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/protobuf_tabular.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/raster/__init__.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/raster/_bytes.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/raster/decode.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/raster/family.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/raster/jpeg2000.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/raster/profiles.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/raster/rendered.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/raster/safe.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/raster/sentinel_safe.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/raster/tiff.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/registry.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/README.md +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.0.0/cities_one_stream/cities.csv.gz +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.0.0/cities_one_stream/expected.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.1.0/cities_one_stream/cities.csv.gz +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.1.0/cities_one_stream/expected.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/archive.tar/1.0.0/cities_beside_a_directory_entry/cities.tar +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/archive.tar/1.0.0/cities_beside_a_directory_entry/expected.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/archive.tar/1.1.0/cities_beside_a_directory_entry/cities.tar +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/archive.tar/1.1.0/cities_beside_a_directory_entry/expected.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/archive.zip/1.0.0/cities_beside_a_second_member/cities.zip +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/archive.zip/1.0.0/cities_beside_a_second_member/expected.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/archive.zip/1.1.0/dwd_semicolon_station_member/dwd-station.zip +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/archive.zip/1.1.0/dwd_semicolon_station_member/expected.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/archive.zip/1.2.0/dwd_semicolon_station_member/dwd-station.zip +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/archive.zip/1.2.0/dwd_semicolon_station_member/expected.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/an_ordinary_comma_separated_table/cities.csv +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/an_ordinary_comma_separated_table/expected.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/quoted_fields_holding_the_delimiter/cities.tsv +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/quoted_fields_holding_the_delimiter/expected.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/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.11.1 → mostlyright_data-0.12.0}/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.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/geojson.vector/1.0.0/czech_capital/expected.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/geojson.vector/1.0.0/czech_capital/places.geojson +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/geopackage.vector/1.0.0/epsg_4326_feature/expected.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/geopackage.vector/1.0.0/epsg_4326_feature/places.gpkg +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/geoparquet.vector/1.0.0/primary_wkb_point/expected.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/geoparquet.vector/1.0.0/primary_wkb_point/places.parquet +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/html.tabular/1.0.0/sanitized_table/expected.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/html.tabular/1.0.0/sanitized_table/table.html +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/html.web_extract/1.0.0/json_ld_scorecards/expected.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/html.web_extract/1.0.0/json_ld_scorecards/scorecards.html +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/image.rendered/1.0.0/tiny_png/expected.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/image.rendered/1.0.0/tiny_png/tiny-rendered.png +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/json.tabular/1.0.0/nested_hourly_observations/expected.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/json.tabular/1.0.0/nested_hourly_observations/stations.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/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.11.1 → mostlyright_data-0.12.0}/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.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/meteorology.bufr/1.0.0/eccodes_bufr4_subset/eccodes-bufr4.bufr +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/meteorology.bufr/1.0.0/eccodes_bufr4_subset/expected.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/meteorology.grib/1.0.0/eccodes_grib1_origin/expected.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/meteorology.grib/1.0.0/eccodes_grib1_origin/regular-ll-surface.grib1 +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/microdata.sas_xpt/1.0.0/two_raw_columns/expected.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/microdata.sas_xpt/1.0.0/two_raw_columns/survey.xpt +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/microdata.spss_sav/1.0.0/two_raw_columns/expected.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/microdata.spss_sav/1.0.0/two_raw_columns/survey.sav +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/microdata.stata_dta/1.0.0/two_raw_columns/expected.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/microdata.stata_dta/1.0.0/two_raw_columns/stata.dta +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/official.pcaxis_px/1.0.0/population_by_region_and_year/expected.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/official.pcaxis_px/1.0.0/population_by_region_and_year/population.px +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/official.sdmx_json/1.0.0/compact_population_series/expected.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/official.sdmx_json/1.0.0/compact_population_series/population.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/parquet.tabular/1.0.0/two_columns/expected.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/parquet.tabular/1.0.0/two_columns/prices.parquet +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/protobuf.tabular/1.0.0/gtfs_realtime_trip_updates/expected.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/protobuf.tabular/1.0.0/gtfs_realtime_trip_updates/gtfs-realtime.desc +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/protobuf.tabular/1.0.0/gtfs_realtime_trip_updates/trip-updates.pb +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/raster.geospatial/1.0.0/tiny_geotiff/expected.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/raster.geospatial/1.0.0/tiny_geotiff/tiny-geospatial.tif +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/satellite.goes_abi_l2/1.0.0/authored_cmi_window/expected.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/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.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/satellite.himawari_hsd/1.0.0/authored_b13_single_bzip2/expected.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/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.11.1 → mostlyright_data-0.12.0}/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.11.1 → mostlyright_data-0.12.0}/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.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/satellite.msg_seviri_l15/1.0.0/authored_calibrated_complete_visir/expected.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/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.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/satellite.sentinel_safe/1.0.0/authored_b02_scl_window/expected.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/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.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/satellite.xrit_image/1.0.0/authored_complete_raw_counts/expected.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/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.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/scientific.fits/1.0.0/tiny_primary_window/expected.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/scientific.fits/1.0.0/tiny_primary_window/tiny-primary.fits +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/scientific.hdf4/1.0.0/authored_temperature_window/expected.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/scientific.hdf4/1.0.0/authored_temperature_window/temperature.hdf +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/scientific.hdf5/1.0.0/authored_temperature_window/expected.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/scientific.hdf5/1.0.0/authored_temperature_window/temperature.h5 +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/scientific.hdf_eos2/1.0.0/authored_grid_temperature_window/expected.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/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.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/scientific.hdf_eos2/1.0.0/authored_swath_temperature_window/expected.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/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.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/scientific.netcdf/1.0.0/authored_classic_temperature_window/expected.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/scientific.netcdf/1.0.0/authored_classic_temperature_window/temperature-classic.nc +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/scientific.zarr/1.0.0/authored_v3_temperature_window/expected.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/scientific.zarr/1.0.0/authored_v3_temperature_window/temperature-zarr-v3.zip +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/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.11.1 → mostlyright_data-0.12.0}/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.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.0.0/shares_the_workbook_had_already_computed/expected.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.0.0/shares_the_workbook_had_already_computed/shares.xlsx +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.1.0/shares_the_workbook_had_already_computed/expected.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.1.0/shares_the_workbook_had_already_computed/shares.xlsx +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/README.md +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/gfs_2m_temperature/expected.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/gfs_2m_temperature/gfs-2m-temperature.grib2 +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_2m_temperature/expected.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_2m_temperature/hrrr-2m-temperature.grib2 +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_categorical_rain/expected.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_categorical_rain/hrrr-categorical-rain.grib2 +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/weather.grib2/2.0.0/hrrr_2m_temperature/expected.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/weather.grib2/2.0.0/hrrr_2m_temperature/hrrr-2m-temperature.grib2 +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/weather.grib2/3.0.0/gfs_and_hrrr_categorical_rain/expected.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/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.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/plain_filing_fact/expected.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/plain_filing_fact/filing.xml +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/xml_inline_fact/expected.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/xml_inline_fact/filing.xhtml +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/pacer_rss_feed/expected.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/pacer_rss_feed/feed.xml +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/sec_form_d_filing/expected.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/sec_form_d_filing/filing.xml +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/unified_agenda_extract/agenda.xml +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/unified_agenda_extract/expected.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/samples.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/scientific.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/scientific_arrays/__init__.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/scientific_arrays/container.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/scientific_arrays/goes.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/scientific_arrays/hdf4.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/scientific_arrays/hdf4_bridge.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/scientific_arrays/hdf5.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/scientific_arrays/native.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/scientific_arrays/netcdf.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/scientific_arrays/profiles.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/scientific_arrays/raw.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/scientific_arrays/zarr.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/scientific_catalog.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/scientific_segmented/__init__.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/scientific_segmented/asset_sets.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/scientific_segmented/formats.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/scientific_segmented/hsd.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/scientific_segmented/native.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/scientific_segmented/profiles.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/scientific_segmented/reader.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/scientific_segmented/xrit.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/sdmx_json.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/spreadsheet.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/statistical_microdata.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/tabular.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/vector.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/vector_wkb.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/xbrl_facts.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/readers/xml_tabular.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/recipe.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/repair/__init__.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/repair/adapters.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/repair/contracts.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/repair/coordinator.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/repair/errors.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/review.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/rowset.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/session_probes.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/signing.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/skill_assets.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/source_discovery.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/__init__.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/_adapter_steps.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/adapters.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/authenticated_https.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/authenticated_https_v2.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/authenticated_https_v3.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/cadence.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/cadence_emission.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/cadence_history.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/catalog/__init__.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/catalog/admission.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/catalog/authoring.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/catalog/authoring_policy.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/catalog/authoring_shards.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/catalog/bounded_io.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/catalog/channel.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/catalog/channel_client.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/catalog/contracts.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/catalog/coverage.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/catalog/delta.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/catalog/embedding.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/catalog/entry_v2.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/catalog/fill.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/catalog/fill_partitions.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/catalog/fill_staging.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/catalog/gating.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/catalog/generation_receipt.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/catalog/harvest/__init__.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/catalog/harvest/ckan.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/catalog/harvest/datagov_v4.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/catalog/harvest/protocol.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/catalog/harvest/sdmx.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/catalog/harvest/stac.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/catalog/health.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/catalog/hosted_catalog.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/catalog/identity_history.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/catalog/neural.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/catalog/packed_catalog.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/catalog/packed_retrieval.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/catalog/packed_writer.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/catalog/query_trace.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/catalog/recommend.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/catalog/retrieval.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/catalog/retrieval_manifest.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/catalog/rights_decisions.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/catalog/sealed.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/catalog/search.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/catalog/streaming_delta.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/catalog/update.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/collections.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/contracts.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/dataset.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/deletion.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/document_projection.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/fitness.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/governance.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/hosted.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/integration.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/range_reader.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/registry.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/rights_rule.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/source_cadence_vectors.v1.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/sports.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/stream.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/stream_capture_session.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/stream_connector.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/stream_connectors/fixture.cursor-resume.v3.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-ed25519.v2.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-hmac.v2.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-hmac384.v2.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-hmac512.v2.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame.v2.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-header-rsa.v2.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-header.v2.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-permessage-jwt.v2.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-permessage.v2.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-prelude.v2.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-query.v2.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-subprotocol.v2.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-subscribe.v2.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-urlpath.v2.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/stream_connectors/polymarket.clob-market.v1.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/stream_credential.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/stream_prelude.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/stream_recorder.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/stream_registry.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/stream_rotation.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/stream_segment_recorder.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/stream_series.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/stream_signing.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sources/stream_transport.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/sql_transform_engine.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/stream_subscription_feed.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/stream_subscription_sealer.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/stream_subscription_worker.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/stream_venue.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/stream_venue_staging.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/studio_subscription_control.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/thin/__init__.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/thin/acquire.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/thin/acquire_cancel.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/thin/approvals.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/thin/commands.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/thin/download.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/thin/narrative.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/thin/parity.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/thin/probe.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/thin/propose.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/thin/recipe.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/thin/research.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/thin/runs.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/thin/session.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/thin/stream.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/thin/stream_venue.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/thin/transport.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/thin/v4_artifacts.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/thin/v4_dataset_covers.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/thin/v4_datasets.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/thin/v4_handoff.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/thin/v4_narrative.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/thin/v4_runs.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/thin/v4_secrets.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/thin/workers.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/ucum/TABLE-PIN.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/ucum/ucum-subset.v1.json +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/unit_flow.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/units.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/ux/__init__.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/ux/approve.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/ux/attendance.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/ux/author_yaml.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/ux/clarification.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/ux/cloud_auth.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/ux/commands/__init__.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/ux/commands/approve.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/ux/commands/auth.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/ux/commands/author.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/ux/commands/catalog_author.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/ux/commands/catalog_fill.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/ux/commands/catalog_harvest.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/ux/commands/catalog_publish.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/ux/commands/catalog_search.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/ux/commands/catalog_update.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/ux/commands/clarify.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/ux/commands/deploy.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/ux/commands/deploy_dataset.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/ux/commands/deploy_plan.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/ux/commands/deploy_status.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/ux/commands/diff.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/ux/commands/document.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/ux/commands/index.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/ux/commands/inventory.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/ux/commands/list_builds.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/ux/commands/login.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/ux/commands/peek.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/ux/commands/plan_check.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/ux/commands/preflight.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/ux/commands/record.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/ux/commands/review_setup.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/ux/commands/search.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/ux/commands/show.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/ux/commands/whoami.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/ux/credential_native.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/ux/credential_store.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/ux/credentials.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/ux/diffing.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/ux/headline.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/ux/hosted_acquisition.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/ux/hosted_run_status.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/ux/inventory.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/ux/local_review.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/ux/login.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/ux/path_kind.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/ux/peek.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/ux/plain_file.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/ux/plan_check.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/ux/preflight.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/ux/readers.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/ux/remediation.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/ux/workload.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/v4_acquisition.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/v4_check_dialect.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/v4_document_pin.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/v4_reader_pin.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/v4_recipe.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/v4_required_controls.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/v4_snapshot_artifact.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/v4_transform.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/visual_run/__init__.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/visual_run/authoring.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/visual_run/contracts.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/visual_run/materialize.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/visual_run/observations.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/visual_run/query.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/visual_run/reducer.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/visual_run/sdk.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/src/mostlyright/data_harness/visual_run/store.py +0 -0
- {mostlyright_data-0.11.1 → mostlyright_data-0.12.0}/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.
|
|
3
|
+
Version: 0.12.0
|
|
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/
|
|
@@ -88,14 +88,14 @@ the one command with no implementation behind it.
|
|
|
88
88
|
There is no second profile and no lane to choose. `--hosted` is accepted and does nothing, because
|
|
89
89
|
the lane it names is the only one; a script that already carries it keeps working.
|
|
90
90
|
|
|
91
|
-
`mr-data --help` lists every command this product has — twenty-
|
|
91
|
+
`mr-data --help` lists every command this product has — twenty-eight of them, and the page is the
|
|
92
92
|
whole list. A name that is not on it is not a command: typing one answers `THIN_UNKNOWN_COMMAND`,
|
|
93
93
|
exactly as a misspelling does. Do not retry it under a different install, and do not report its
|
|
94
94
|
absence as a defect.
|
|
95
95
|
|
|
96
96
|
## Commands
|
|
97
97
|
|
|
98
|
-
These twenty-
|
|
98
|
+
These twenty-eight are the whole surface, alongside `acquire-slices`, which names a capability
|
|
99
99
|
gap rather than doing anything, and `export-hosted-candidate`, which is a backend operator step.
|
|
100
100
|
|
|
101
101
|
| Command | What it does |
|
|
@@ -123,15 +123,17 @@ gap rather than doing anything, and `export-hosted-candidate`, which is a backen
|
|
|
123
123
|
| `mr-data stream` | Record a public `wss://` venue so a build can read it. `stream document register --file F` admits the connector document, `stream registry create --digest D` admits a set of them, `stream probe` listens briefly and seals nothing, `stream capture --seconds N` records a bounded window, `stream subscribe` keeps recording, `stream subscription {show|pause|resume|stop} ID` moves one, `stream status ID` reads a capture or a probe, and `stream recordings --document-digest D` names what a build could read and until when. `--seconds` is at most 600. `mr-data run` takes no duration: a build reads sealed batches and is bounded by them. |
|
|
124
124
|
| `mr-data open` | Mint a single-use, short-lived address that continues this session in a browser at one dashboard path, and print it. `--open` hands it to the platform opener. The credential decides who mints: a device credential — what `mr-data login` stores — mints at Cloud, and a personal access token mints at Studio. |
|
|
125
125
|
| `mr-data promote` | Ask Studio to publish one table after a person's decision. The Harness worker does not perform the catch-up or scheduled refresh; report those only when another deployed component returns durable evidence that it did. |
|
|
126
|
+
| `mr-data reschedule` | Change how often one live table refreshes, without the demote and promote that would reset its bookkeeping and buy a catch-up run. `--cadence` takes a cron expression or an interval such as `every 6h`; `--why` records the reasoning. It starts no run. `--lock` freezes the schedule so Studio stops adjusting it; `--unlock` lets it follow the source again. |
|
|
127
|
+
| `mr-data table` | Report what one table is serving and how its refresh schedule is going: the state in plain words, the schedule in force, the next refresh, the schedule that was asked for and the reason given for it, and — once Studio has settled on one — the interval it measured and how many source updates that rests on. |
|
|
126
128
|
| `mr-data pin` | Ask Studio to freeze one table pointer on an exact version, for a rollback or a hold. |
|
|
127
129
|
| `mr-data unpin` | Ask Studio to resume pointer tracking; read the returned state before claiming it resumed. |
|
|
128
130
|
| `mr-data demote` | Ask Studio to withdraw the pointer and any schedule it owns. |
|
|
129
131
|
|
|
130
132
|
`auth`, `login`, `whoami` and `clarify` are the same implementation in both profiles, and
|
|
131
|
-
`clarify` alone reaches nothing at all. The other twenty-
|
|
132
|
-
read: `status`, `runs`, `watch`, `peek`, `receipt`, `checks`, `download` and `
|
|
133
|
-
start or change something: `dataset`, `recipe`, `cover`, `run`, `query`, `probe`, `keys`,
|
|
134
|
-
`stream`, `open`, `note`, `promote`, `pin`, `unpin` and `demote`.
|
|
133
|
+
`clarify` alone reaches nothing at all. The other twenty-four answer from Studio. Nine only
|
|
134
|
+
read: `status`, `runs`, `watch`, `peek`, `receipt`, `checks`, `download`, `diff` and `table`.
|
|
135
|
+
Fifteen start or change something: `dataset`, `recipe`, `cover`, `run`, `query`, `probe`, `keys`,
|
|
136
|
+
`stream`, `open`, `note`, `promote`, `reschedule`, `pin`, `unpin` and `demote`.
|
|
135
137
|
|
|
136
138
|
**Any successful run is readable straight away.** There is no approval, no admission and no release
|
|
137
139
|
step between a run finishing and reading it: `download`, `receipt`, `checks`, `peek` and `query`
|
|
@@ -629,7 +631,7 @@ Four reads, and none of them waits on anything:
|
|
|
629
631
|
|
|
630
632
|
```sh
|
|
631
633
|
mr-data peek RUN --json # columns, logical types, first rows
|
|
632
|
-
mr-data query RUN "select count(*) from
|
|
634
|
+
mr-data query RUN "select count(*) from run_table" --json
|
|
633
635
|
mr-data checks RUN --json # every check the recipe declared
|
|
634
636
|
mr-data receipt RUN --json # sources, digests, coverage, snapshot members
|
|
635
637
|
```
|
|
@@ -650,11 +652,13 @@ The refusals are cheap and legible by design, so read the code rather than retry
|
|
|
650
652
|
| `QUERY_RESULT_TOO_LARGE` | The answer was over the byte ceiling. It is a refusal, never a truncation: a short answer that looked complete would be worse than none. |
|
|
651
653
|
| `QUERY_TIMEOUT` | The statement outran its deadline. |
|
|
652
654
|
| `QUERY_TABLE_UNAVAILABLE` | The run has no readable table — it did not succeed, or its artifact is not there. |
|
|
653
|
-
| `QUERY_NO_WARM_EXECUTOR` | No warm worker holds this workspace.
|
|
655
|
+
| `QUERY_NO_WARM_EXECUTOR` | No warm worker holds this workspace. `mr-data query` answers it by opening a research session for the run's dataset, asking, and closing it; with `--no-session` the refusal is printed instead, carrying a retry window. |
|
|
654
656
|
|
|
655
657
|
**Studio deliberately does not start a worker on a query.** Scale-to-session is a cost invariant,
|
|
656
|
-
so
|
|
657
|
-
|
|
658
|
+
so the cold start is spent only on a question actually asked: `mr-data query` opens a session for
|
|
659
|
+
the run's own dataset when no worker is warm, waits for its worker (the states are printed as they
|
|
660
|
+
happen), asks, and closes the session behind the answer. Pass `--no-session` to be refused instead,
|
|
661
|
+
and then wait through the window the refusal names rather than retrying in a tight loop.
|
|
658
662
|
|
|
659
663
|
**The statement gate is a word-boundary scan over a masked copy of the statement, and it does not
|
|
660
664
|
read SQL.**
|
|
@@ -1053,9 +1057,32 @@ strength of having asked.
|
|
|
1053
1057
|
Once the user has approved it:
|
|
1054
1058
|
|
|
1055
1059
|
```sh
|
|
1056
|
-
mr-data promote TABLE_ID --cadence
|
|
1060
|
+
mr-data promote TABLE_ID --cadence "every 6h from 2026-09-03T02:40:00Z" --why "..." --json
|
|
1057
1061
|
```
|
|
1058
1062
|
|
|
1063
|
+
**Reason about the refresh schedule; do not reach for a default.** You have already read the
|
|
1064
|
+
source's own documentation and watched it answer, so you are the one party who knows anything about
|
|
1065
|
+
when it publishes. Say what you know: the times of day it posts, how often it changes, and how long
|
|
1066
|
+
after the stated publication time the bytes actually appear. `--cadence` takes a five-field cron
|
|
1067
|
+
expression, an interval such as `every 6h` or `every 30m from 2026-09-03T12:20:00Z`, or the word
|
|
1068
|
+
`source` to decline the question and let Studio choose. `--why` is one paragraph recording the
|
|
1069
|
+
reasoning, and it is required unless you asked for `source`; it is kept beside the table and read by
|
|
1070
|
+
whoever looks next, so write it for them rather than for yourself.
|
|
1071
|
+
|
|
1072
|
+
**What you give is a seed, not a setting.** Studio watches what each source actually does on every
|
|
1073
|
+
refresh and moves the schedule to match, so a seed that is roughly right is worth far more than a
|
|
1074
|
+
safe guess, and one that is wrong is corrected rather than obeyed. Until the table reports its
|
|
1075
|
+
schedule as settled, the schedule is still being worked out: `mr-data table TABLE_ID` says which it
|
|
1076
|
+
is, in plain words, along with the schedule in force, the next refresh, what you asked for and why,
|
|
1077
|
+
and — once there is one — the interval Studio measured and how many source updates it rests on.
|
|
1078
|
+
**Never describe a schedule as learned, settled or confirmed while that command says otherwise.**
|
|
1079
|
+
|
|
1080
|
+
`mr-data reschedule TABLE_ID --cadence ... --why "..."` changes the schedule of a table that is
|
|
1081
|
+
already live without starting a run or spending anything. Adding `--lock` freezes the schedule so
|
|
1082
|
+
Studio stops adjusting it, which is how a person overrides the evidence; `--unlock` lets it follow
|
|
1083
|
+
the source again. Do not lock a schedule on your own judgement — it is the same kind of decision as
|
|
1084
|
+
promotion, and it belongs to the user.
|
|
1085
|
+
|
|
1059
1086
|
This call is a publication request, not proof of data continuation. The current Harness worker
|
|
1060
1087
|
cannot execute the catch-up backfill, refresh mode, or windowed acquisition needed to close the
|
|
1061
1088
|
idle interval after the last successful run. It also does not attach or execute a warehouse
|
|
@@ -39,7 +39,6 @@ TWO SEAMS THIS REPOSITORY DOES NOT OWN, both named here so a reader does not go
|
|
|
39
39
|
from __future__ import annotations
|
|
40
40
|
|
|
41
41
|
import argparse
|
|
42
|
-
import contextlib
|
|
43
42
|
import hashlib
|
|
44
43
|
import io
|
|
45
44
|
import json
|
|
@@ -57,6 +56,7 @@ from dataclasses import dataclass, field, replace
|
|
|
57
56
|
from pathlib import Path
|
|
58
57
|
from types import FrameType, MappingProxyType
|
|
59
58
|
from typing import Any, ClassVar, NoReturn, Protocol
|
|
59
|
+
from urllib.parse import urlsplit
|
|
60
60
|
from uuid import UUID, uuid5
|
|
61
61
|
|
|
62
62
|
from mostlyright.data_harness import pipeline, progress_events
|
|
@@ -109,19 +109,23 @@ from mostlyright.data_harness.recipe import RecipeError, parse_recipe_execution
|
|
|
109
109
|
from mostlyright.data_harness.run_execution_v4 import (
|
|
110
110
|
DOCUMENT_STAGE,
|
|
111
111
|
FAILED_STAGES,
|
|
112
|
+
UNCHANGED_OUTCOME_MODES,
|
|
112
113
|
RunCallbacks,
|
|
113
114
|
RunExecution,
|
|
114
115
|
RunExecutionError,
|
|
116
|
+
SourceChange,
|
|
115
117
|
artifact_uploaded_body,
|
|
116
118
|
compose_resource_limits,
|
|
117
119
|
compose_source_limits,
|
|
118
120
|
coverage_entry,
|
|
119
121
|
engine_recipe,
|
|
122
|
+
every_source_unchanged,
|
|
120
123
|
failed_body_for_unparsed,
|
|
121
124
|
failed_body_from_error,
|
|
122
125
|
failure_detail,
|
|
123
126
|
parse_run_execution_v4,
|
|
124
127
|
progress_body,
|
|
128
|
+
source_change_report,
|
|
125
129
|
succeeded_body,
|
|
126
130
|
synthesize_execution_lock,
|
|
127
131
|
)
|
|
@@ -702,7 +706,12 @@ def permitted_artifact_hosts(
|
|
|
702
706
|
|
|
703
707
|
|
|
704
708
|
def _download_signed_bytes(
|
|
705
|
-
transfer: Any,
|
|
709
|
+
transfer: Any,
|
|
710
|
+
session: Any,
|
|
711
|
+
*,
|
|
712
|
+
maximum: int,
|
|
713
|
+
permitted_hosts: frozenset[str],
|
|
714
|
+
subject: str = "the predecessor download session",
|
|
706
715
|
) -> bytes:
|
|
707
716
|
"""GET one Studio-issued signed download session, bounded, into memory.
|
|
708
717
|
|
|
@@ -716,6 +725,10 @@ def _download_signed_bytes(
|
|
|
716
725
|
:func:`restore_predecessor_record` before the receipt is read.
|
|
717
726
|
|
|
718
727
|
BOTH ADDRESS CHECKS RUN BEFORE THE STREAM OPENS, so a refused session costs no bytes.
|
|
728
|
+
|
|
729
|
+
``subject`` is how a refusal names the session. The predecessor lane wrote this helper and
|
|
730
|
+
names it as its own; a lane that restates the refusal in its own words hands over the name
|
|
731
|
+
it wants read back, so its sentence does not send a reader after a predecessor.
|
|
719
732
|
"""
|
|
720
733
|
|
|
721
734
|
# ONE POLICY FOR BOTH HALVES. `permitted_hosts` has already been proved to be a host this
|
|
@@ -728,7 +741,7 @@ def _download_signed_bytes(
|
|
|
728
741
|
# that WAS permitted -- Studio's own storage origin, which is not a secret -- and stops there.
|
|
729
742
|
reason = signed_storage_refusal(session.signed_url, permitted=permitted_hosts)
|
|
730
743
|
if reason is not None:
|
|
731
|
-
raise _host_refusal(f"
|
|
744
|
+
raise _host_refusal(f"{subject} is refused: {reason}")
|
|
732
745
|
chunks: list[bytes] = []
|
|
733
746
|
total = 0
|
|
734
747
|
# THE SIGNED URL REACHES NO LOG RECORD, which is the other half of the discipline the host
|
|
@@ -737,14 +750,12 @@ def _download_signed_bytes(
|
|
|
737
750
|
# stream because the request line is written when the response arrives, not when it is sent.
|
|
738
751
|
with _quiet_signed_transfer(), transfer.stream("GET", session.signed_url) as response:
|
|
739
752
|
if int(response.status_code) != 200:
|
|
740
|
-
raise _predecessor_refusal(
|
|
741
|
-
f"the predecessor download session answered HTTP {response.status_code}"
|
|
742
|
-
)
|
|
753
|
+
raise _predecessor_refusal(f"{subject} answered HTTP {response.status_code}")
|
|
743
754
|
for chunk in response.iter_bytes():
|
|
744
755
|
total += len(chunk)
|
|
745
756
|
if total > maximum:
|
|
746
757
|
raise _predecessor_refusal(
|
|
747
|
-
"the
|
|
758
|
+
f"the bytes behind {subject} exceed the candidate envelope byte ceiling"
|
|
748
759
|
)
|
|
749
760
|
chunks.append(chunk)
|
|
750
761
|
return b"".join(chunks)
|
|
@@ -1905,11 +1916,23 @@ def _evidence_uri(source: V4Source) -> str:
|
|
|
1905
1916
|
So the address is sealed when the source has one, and the origin is what is sealed for a source
|
|
1906
1917
|
addressed some other way, which has no requested URL to name. It is still a statement the
|
|
1907
1918
|
DOCUMENT made: neither member is learned by fetching.
|
|
1919
|
+
|
|
1920
|
+
A STREAM SOURCE NAMES A SOCKET, AND THE EVIDENCE CONTRACT ADMITS ONLY HTTPS. Its recording
|
|
1921
|
+
was made at a ``wss://`` address that no request in this run is made to, and the reference
|
|
1922
|
+
the receipt seals must be an HTTPS URI. When the document states no origin, the venue's host
|
|
1923
|
+
is sealed under ``https`` -- the same host, and still nothing learned by fetching -- rather
|
|
1924
|
+
than the socket address the contract would refuse.
|
|
1908
1925
|
"""
|
|
1909
1926
|
|
|
1910
1927
|
if source.locator.kind == "https_url":
|
|
1911
1928
|
return source.locator.display_locator
|
|
1912
|
-
|
|
1929
|
+
if source.connector.origin:
|
|
1930
|
+
return source.connector.origin
|
|
1931
|
+
if source.locator.kind == "stream":
|
|
1932
|
+
host = urlsplit(source.locator.display_locator).hostname
|
|
1933
|
+
if host:
|
|
1934
|
+
return f"https://{host}"
|
|
1935
|
+
return source.locator.display_locator
|
|
1913
1936
|
|
|
1914
1937
|
|
|
1915
1938
|
def _workspace_document_cas_root(job: RunExecution) -> Path:
|
|
@@ -2514,6 +2537,7 @@ def build_v4_candidate(
|
|
|
2514
2537
|
output_dir: Path,
|
|
2515
2538
|
cursor: _StageCursor | None = None,
|
|
2516
2539
|
narrate: _ItemNarrator | None = None,
|
|
2540
|
+
halt_before_transform: Callable[[Mapping[str, str]], bool] | None = None,
|
|
2517
2541
|
) -> Any:
|
|
2518
2542
|
"""Acquire, transform and seal one registered document into a candidate.
|
|
2519
2543
|
|
|
@@ -2527,6 +2551,15 @@ def build_v4_candidate(
|
|
|
2527
2551
|
the build and the replay are one function of the plan and the acquired bytes. That is why
|
|
2528
2552
|
nothing here runs the statements first and hands the seal a result -- a result computed twice by
|
|
2529
2553
|
two callers is a result two callers can disagree about.
|
|
2554
|
+
|
|
2555
|
+
``halt_before_transform`` IS ASKED EXACTLY ONCE, AFTER EVERY SOURCE IS ACQUIRED AND BEFORE ANY
|
|
2556
|
+
STATEMENT IS RUN, and answering true returns ``None`` instead of a candidate. It is handed the
|
|
2557
|
+
digest of the bytes each source was read as, keyed by the source's own name -- the member the
|
|
2558
|
+
sealed receipt states for that source, so a caller comparing against a predecessor compares
|
|
2559
|
+
the same member on both sides. This is the only place that decision can be taken: the
|
|
2560
|
+
acquisition is what produces the digests, and the transform is what a run with nothing new to
|
|
2561
|
+
seal must not spend. Nothing is narrated as a transform on that path, and no cursor moves off
|
|
2562
|
+
``acquire``, because neither happened.
|
|
2530
2563
|
"""
|
|
2531
2564
|
|
|
2532
2565
|
relations = acquire_v4_relations(
|
|
@@ -2538,6 +2571,13 @@ def build_v4_candidate(
|
|
|
2538
2571
|
input_root=input_root,
|
|
2539
2572
|
narrate=narrate,
|
|
2540
2573
|
)
|
|
2574
|
+
if halt_before_transform is not None and halt_before_transform(
|
|
2575
|
+
# `content_sha256` is the coverage record's own `snapshot_sha256`; `relation_input`
|
|
2576
|
+
# refuses a relation whose two spellings disagree, so reading it off the relation here
|
|
2577
|
+
# and off the receipt there is one member read twice rather than two members.
|
|
2578
|
+
{relation.relation_name: relation.content_sha256 for relation in relations}
|
|
2579
|
+
):
|
|
2580
|
+
return None
|
|
2541
2581
|
if cursor is not None:
|
|
2542
2582
|
cursor.set("transform")
|
|
2543
2583
|
# ⚠ THE STEPS ARE NARRATED FROM THE DOCUMENT, NOT FROM THE ENGINE, AND THAT IS WHY THEY ARE
|
|
@@ -2820,6 +2860,21 @@ def _as_run_failure(error: BaseException, *, stage: str) -> RunExecutionError:
|
|
|
2820
2860
|
)
|
|
2821
2861
|
|
|
2822
2862
|
|
|
2863
|
+
def _reads_signed_storage(job: RunExecution) -> bool:
|
|
2864
|
+
"""Whether acquisition redeems a Studio-signed download: a snapshot input or a sealed recording.
|
|
2865
|
+
|
|
2866
|
+
Both are read through the same unauthenticated transfer client, and the driver opens that
|
|
2867
|
+
client for itself when the caller supplied none. The predicate is the union of the two source
|
|
2868
|
+
shapes that need it, because a stream-only recipe used to reach the recording adapter with no
|
|
2869
|
+
client at all and was refused before its first progress report.
|
|
2870
|
+
"""
|
|
2871
|
+
|
|
2872
|
+
return bool(job.recordings) or any(
|
|
2873
|
+
source.connector.adapter_id.partition("@")[0] == "snapshot.artifact"
|
|
2874
|
+
for source in job.recipe.sources
|
|
2875
|
+
)
|
|
2876
|
+
|
|
2877
|
+
|
|
2823
2878
|
def run_v4(
|
|
2824
2879
|
job: RunExecution,
|
|
2825
2880
|
token: str,
|
|
@@ -2924,10 +2979,7 @@ def run_v4(
|
|
|
2924
2979
|
snapshot_root = root / "snapshots"
|
|
2925
2980
|
snapshot_root.mkdir(mode=0o700)
|
|
2926
2981
|
active_sandbox = sandbox if sandbox is not None else _default_sandbox(root)
|
|
2927
|
-
if transfer is None and
|
|
2928
|
-
source.connector.adapter_id.partition("@")[0] == "snapshot.artifact"
|
|
2929
|
-
for source in job.recipe.sources
|
|
2930
|
-
):
|
|
2982
|
+
if transfer is None and _reads_signed_storage(job):
|
|
2931
2983
|
transfer = stack.enter_context(_closing(_new_transfer_client()))
|
|
2932
2984
|
registry, contexts = _composed_registry(
|
|
2933
2985
|
job,
|
|
@@ -2972,13 +3024,42 @@ def run_v4(
|
|
|
2972
3024
|
),
|
|
2973
3025
|
stage="transform",
|
|
2974
3026
|
)
|
|
3027
|
+
# WHAT EACH SOURCE CARRIED THIS RUN, decided at the one moment every source has been
|
|
3028
|
+
# acquired and nothing has been transformed. The report is this run's own; the halt is
|
|
3029
|
+
# the question of whether the table has anything to seal.
|
|
3030
|
+
changes: tuple[SourceChange, ...] = ()
|
|
3031
|
+
|
|
3032
|
+
def _halt(acquired: Mapping[str, str]) -> bool:
|
|
3033
|
+
nonlocal changes
|
|
3034
|
+
changes = source_change_report(
|
|
3035
|
+
mode=job.mode,
|
|
3036
|
+
acquired=acquired,
|
|
3037
|
+
predecessor_source_states=source_states,
|
|
3038
|
+
)
|
|
3039
|
+
# THE REPORT IS BUILT FOR EVERY MODE AND THE EARLY STOP IS NOT. A backfill has a
|
|
3040
|
+
# predecessor to compare against, so its per-source answer is honest and worth
|
|
3041
|
+
# reporting -- but it was dispatched to fill a named window, and matching bytes are
|
|
3042
|
+
# no reason to decline that. The one mode that stops is the one that exists to ask.
|
|
3043
|
+
if job.mode not in UNCHANGED_OUTCOME_MODES:
|
|
3044
|
+
return False
|
|
3045
|
+
# ⚠ UNCHANGED BYTES ARE NOT AN UNCHANGED TABLE WHEN THE DOCUMENT ITSELF MOVED. The
|
|
3046
|
+
# predecessor is resolved as the table's latest succeeded run, not as a run of this
|
|
3047
|
+
# document, so a refresh dispatched against a REVISED recipe -- a dropped source, a
|
|
3048
|
+
# rewritten transform, a changed check -- can read byte-identical sources and still
|
|
3049
|
+
# owe a new version. Only the sources are compared above, so the revision would be
|
|
3050
|
+
# swallowed silently and never reach the table. The digests the two runs sealed are
|
|
3051
|
+
# what say whether the document is the same one.
|
|
3052
|
+
if predecessor is None or predecessor.recipe_digest != job.recipe_digest:
|
|
3053
|
+
return False
|
|
3054
|
+
return every_source_unchanged(changes)
|
|
3055
|
+
|
|
2975
3056
|
with progress_events.progress_sink(narration), progress_events.bridge_build_events():
|
|
2976
3057
|
# SERIAL by decision, and the decision is not re-taken here. The rationale
|
|
2977
3058
|
# ``hosted_worker`` records for a serial acquisition loop changes under in-process
|
|
2978
3059
|
# acquisition -- there is no job dispatch to serialize against any more -- but
|
|
2979
3060
|
# re-deciding it is a separate reviewed change, not a side effect of composing the
|
|
2980
3061
|
# primitive.
|
|
2981
|
-
build_v4_candidate(
|
|
3062
|
+
candidate = build_v4_candidate(
|
|
2982
3063
|
job,
|
|
2983
3064
|
engine,
|
|
2984
3065
|
approval,
|
|
@@ -2990,7 +3071,38 @@ def run_v4(
|
|
|
2990
3071
|
output_dir=output_dir,
|
|
2991
3072
|
cursor=stage,
|
|
2992
3073
|
narrate=narrate,
|
|
3074
|
+
halt_before_transform=_halt,
|
|
3075
|
+
)
|
|
3076
|
+
|
|
3077
|
+
if candidate is None:
|
|
3078
|
+
# NOTHING THIS TABLE HAS NOT ALREADY SEALED, so nothing after acquisition ran: no
|
|
3079
|
+
# transform, no check pass, no artifact, no upload, and no version. The run
|
|
3080
|
+
# SUCCEEDED -- it did what a refresh is for, which is to find out -- and the
|
|
3081
|
+
# per-source report below is what the schedule that dispatched it reasons from.
|
|
3082
|
+
#
|
|
3083
|
+
# Neither the checks nor the coverage are reported. The checks are evaluated over a
|
|
3084
|
+
# sealed candidate and this run sealed none, so naming them with an invented
|
|
3085
|
+
# outcome would put a result on the record that no pass produced; coverage is what
|
|
3086
|
+
# a run that DELIVERED something reports, and the contract refuses it here.
|
|
3087
|
+
reported.succeeded(
|
|
3088
|
+
succeeded_body(
|
|
3089
|
+
job,
|
|
3090
|
+
receipt_digest=None,
|
|
3091
|
+
check_results=[],
|
|
3092
|
+
coverage=[],
|
|
3093
|
+
outcome="unchanged",
|
|
3094
|
+
sources=changes,
|
|
3095
|
+
)
|
|
2993
3096
|
)
|
|
3097
|
+
return {
|
|
3098
|
+
"status": "succeeded",
|
|
3099
|
+
"run_id": str(job.run_id),
|
|
3100
|
+
"attempt": job.attempt,
|
|
3101
|
+
"mode": job.mode,
|
|
3102
|
+
"outcome": "unchanged",
|
|
3103
|
+
"sources": [item.to_wire() for item in changes],
|
|
3104
|
+
"check_results": [],
|
|
3105
|
+
}
|
|
2994
3106
|
|
|
2995
3107
|
stage.set("check")
|
|
2996
3108
|
# The checks were PARSED before acquisition; this is the half that needs rows.
|
|
@@ -3065,6 +3177,8 @@ def run_v4(
|
|
|
3065
3177
|
receipt_digest=receipt.content_digest,
|
|
3066
3178
|
check_results=[item.to_wire() for item in results],
|
|
3067
3179
|
coverage=coverage,
|
|
3180
|
+
outcome="version",
|
|
3181
|
+
sources=changes,
|
|
3068
3182
|
)
|
|
3069
3183
|
)
|
|
3070
3184
|
return {
|
|
@@ -3072,6 +3186,8 @@ def run_v4(
|
|
|
3072
3186
|
"run_id": str(job.run_id),
|
|
3073
3187
|
"attempt": job.attempt,
|
|
3074
3188
|
"mode": job.mode,
|
|
3189
|
+
"outcome": "version",
|
|
3190
|
+
"sources": [item.to_wire() for item in changes],
|
|
3075
3191
|
"candidate_digest": "sha256:" + verified.candidate_digest,
|
|
3076
3192
|
"receipt_digest": receipt.content_digest,
|
|
3077
3193
|
"artifact_ids": [str(item.artifact_id) for item in payloads],
|
|
@@ -3100,8 +3216,8 @@ def run_v4(
|
|
|
3100
3216
|
traceback.print_exc(file=sys.stderr)
|
|
3101
3217
|
try:
|
|
3102
3218
|
reported.failed(failed_body_from_error(job, refusal))
|
|
3103
|
-
except Exception:
|
|
3104
|
-
|
|
3219
|
+
except Exception as unreported:
|
|
3220
|
+
_note_unreported_failure(unreported)
|
|
3105
3221
|
raise refusal from error
|
|
3106
3222
|
|
|
3107
3223
|
|
|
@@ -3296,6 +3412,28 @@ def _fatal(error: BaseException) -> NoReturn:
|
|
|
3296
3412
|
raise SystemExit(1)
|
|
3297
3413
|
|
|
3298
3414
|
|
|
3415
|
+
def _note_unreported_failure(error: BaseException) -> None:
|
|
3416
|
+
"""One stderr line saying the ``run:failed`` report itself was refused.
|
|
3417
|
+
|
|
3418
|
+
The report is best effort and its refusal must not become a second death, but a refusal that
|
|
3419
|
+
was swallowed left a run record still saying ``running`` beside a container log that carried
|
|
3420
|
+
the cause, with nothing connecting the two. This line is that connection: it precedes the
|
|
3421
|
+
operator line :func:`_fatal` writes and names the refusal in the same three-member shape.
|
|
3422
|
+
"""
|
|
3423
|
+
|
|
3424
|
+
code, detail, _stage = _failure_triple(error)
|
|
3425
|
+
line = json.dumps(
|
|
3426
|
+
{"status": "unreported", "code": code, "detail": detail},
|
|
3427
|
+
sort_keys=True,
|
|
3428
|
+
separators=(",", ":"),
|
|
3429
|
+
)
|
|
3430
|
+
# A stderr that cannot be written must not displace the refusal the caller is about to raise.
|
|
3431
|
+
try:
|
|
3432
|
+
sys.stderr.write(line + "\n")
|
|
3433
|
+
except OSError:
|
|
3434
|
+
pass
|
|
3435
|
+
|
|
3436
|
+
|
|
3299
3437
|
def _batch_studio_origin(environ: Mapping[str, str]) -> str:
|
|
3300
3438
|
"""The Studio origin the batch shape reports through, REQUIRED and HTTPS.
|
|
3301
3439
|
|
|
@@ -3347,9 +3485,10 @@ def _report_then_fatal(
|
|
|
3347
3485
|
comes off the RAW mapping, because the reason the parse failed may be one of the three envelope
|
|
3348
3486
|
members.
|
|
3349
3487
|
|
|
3350
|
-
⚠ AND THE REPORT IS BEST EFFORT,
|
|
3351
|
-
|
|
3352
|
-
|
|
3488
|
+
⚠ AND THE REPORT IS BEST EFFORT, exactly as ``run_v4``'s own is. A report that fails must
|
|
3489
|
+
not become a second death: the caller is already dying, and the operator line :func:`_fatal`
|
|
3490
|
+
writes is what an operator reads either way. A refused report is noted on stderr first, so
|
|
3491
|
+
the two lines together say both what killed the run and that the record never learned it.
|
|
3353
3492
|
"""
|
|
3354
3493
|
|
|
3355
3494
|
if callbacks is not None:
|
|
@@ -3363,8 +3502,10 @@ def _report_then_fatal(
|
|
|
3363
3502
|
failed_stage=stage,
|
|
3364
3503
|
)
|
|
3365
3504
|
if body is not None:
|
|
3366
|
-
|
|
3505
|
+
try:
|
|
3367
3506
|
callbacks.failed(body)
|
|
3507
|
+
except Exception as unreported:
|
|
3508
|
+
_note_unreported_failure(unreported)
|
|
3368
3509
|
_fatal(error)
|
|
3369
3510
|
|
|
3370
3511
|
|