mostlyright-data 0.10.6__tar.gz → 0.10.7__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/PKG-INFO +1 -1
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/pyproject.toml +1 -1
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/hosted_run_worker.py +161 -126
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/run_execution_v4.py +26 -7
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/v4_required_controls.py +35 -20
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/.gitignore +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/README.md +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/scripts/hatch_build.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/skills/mr-data-build/SKILL.md +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/skills/mr-data-build/agents/openai.yaml +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/skills/mr-data-build/scripts/write_research_notebook.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/skills/mr-data-build/scripts/write_visual_run.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/__init__.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/LICENSE +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/PROVENANCE.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/__init__.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/__init__.pyi +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/_version.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/cal_rec_boxes/__init__.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/cal_rec_boxes/main.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/ch_ppocr_cls/__init__.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/ch_ppocr_cls/main.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/ch_ppocr_cls/utils.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/ch_ppocr_det/__init__.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/ch_ppocr_det/main.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/ch_ppocr_det/utils.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/__init__.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/main.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/typings.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/utils.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/config.yaml +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/inference_engine/__init__.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/inference_engine/base.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/inference_engine/onnxruntime/__init__.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/inference_engine/onnxruntime/main.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/inference_engine/onnxruntime/provider_config.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/main.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/models/PP-OCRv6_det_small.onnx +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/models/PP-OCRv6_rec_small.onnx +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/models/ch_ppocr_mobile_v2.0_cls_mobile.onnx +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/py.typed +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/utils/__init__.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/utils/load_image.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/utils/log.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/utils/model_resolver.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/utils/output.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/utils/parse_parameters.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/utils/process_img.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/utils/typings.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/utils/utils.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/__init__.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/acquisition/__init__.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/acquisition/http.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/acquisition/parsing.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/acquisition/ranges.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/acquisition/result_download.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/acquisition/retention_admission.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/acquisition/sandbox.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/acquisition/url_policy.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/agent_runtime.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/assets/logo-ink.svg +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/backends/__init__.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/backends/pandas_backend.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/backends/polars_backend.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/backends/protocol.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/backends/reference.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/backends/registry.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/backends/restrictions.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/bounded_query.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/canonical.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/catalog_job.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/cli.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/contracts.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/coordinator.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/crosswalks.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/declared_checks.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/deploy.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/deploy_target.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/deployment_evidence.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/documents/__init__.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/documents/_worker_capability.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/documents/agent_request.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/documents/capture.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/documents/contracts.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/documents/lane.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/documents/ocr.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/documents/pdf.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/documents/registry.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/documents/sandbox.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/documents/selections.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/documents/tables.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/documents/vendor_rapidocr.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/events.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/fast_delimited.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/formats.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/governors.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/hosted_bootstrap.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/hosted_crawler.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/hosted_crawler_container_smoke.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/hosted_crawler_fetch.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/hosted_crawler_job.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/hosted_crawler_protocol.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/hosted_dataset.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/hosted_deploy.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/hosted_handoff.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/hosted_ingestion_contract.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/hosted_ingestion_job.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/hosted_ingestion_job_smoke.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/hosted_rlimit_as_container_smoke.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/hosted_session_container_smoke.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/hosted_session_worker.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/hosted_session_worker_job_smoke.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/hosted_stream_recorder_container_smoke.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/hosted_stream_recorder_job.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/hosted_stream_subscription_container_smoke.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/hosted_stream_subscription_worker.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/hosted_worker.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ingestion/__init__.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ingestion/contracts.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ingestion/faults.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ingestion/gcs_store.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ingestion/spool.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ingestion/store.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/inprocess_acquisition.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/key_seam.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/linux_process_boundary.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/local_contracts.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/local_search/__init__.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/local_search/build_index.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/local_search/contracts.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/local_search/query_trace.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/local_search/retrieval.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/local_search/sealed.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/local_search/service.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/nbrender/CONTRACT.md +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/nbrender/__init__.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/nbrender/chrome.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/nbrender/code_body.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/nbrender/document.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/nbrender/frame.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/nbrender/interactive.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/nbrender/markdown_body.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/nbrender/mr_components.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/nbrender/outputs_data.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/nbrender/outputs_rich.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/nbrender/outputs_source.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/nbrender/outputs_stage.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/nbrender/outputs_text.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/nbrender/parse.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/nbrender/status.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/nbrender/tokens.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/notebook.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/offline.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/operation_registry.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/operator_setup.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/pipeline.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/plan_graph.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/preparation/__init__.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/preparation/contracts.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/preparation/engine.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/preparation/errors.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/preparation/gates.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/preparation/joins.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/preparation/profile.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/preparation/table.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/preparation/transforms.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/progress_events.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/__init__.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/_openpyxl.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/budgets.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/containers.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/contracts.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/delimited.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/geojson_vector.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/geopackage.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/geoparquet.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/grib2/__init__.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/grib2/admission.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/grib2/collection.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/grib2/collection_reader.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/grib2/decode.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/grib2/geometry.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/grib2/portable_math.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/grib_eccodes.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/html_tabular.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/html_web_extract.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/json_tabular.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/parquet_tabular.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/pcaxis_px.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/protobuf_tabular.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/raster/__init__.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/raster/_bytes.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/raster/decode.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/raster/family.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/raster/jpeg2000.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/raster/profiles.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/raster/rendered.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/raster/safe.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/raster/sentinel_safe.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/raster/tiff.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/registry.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/README.md +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.0.0/cities_one_stream/cities.csv.gz +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.0.0/cities_one_stream/expected.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.1.0/cities_one_stream/cities.csv.gz +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.1.0/cities_one_stream/expected.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/archive.tar/1.0.0/cities_beside_a_directory_entry/cities.tar +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/archive.tar/1.0.0/cities_beside_a_directory_entry/expected.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/archive.tar/1.1.0/cities_beside_a_directory_entry/cities.tar +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/archive.tar/1.1.0/cities_beside_a_directory_entry/expected.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/archive.zip/1.0.0/cities_beside_a_second_member/cities.zip +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/archive.zip/1.0.0/cities_beside_a_second_member/expected.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/archive.zip/1.1.0/dwd_semicolon_station_member/dwd-station.zip +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/archive.zip/1.1.0/dwd_semicolon_station_member/expected.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/archive.zip/1.2.0/dwd_semicolon_station_member/dwd-station.zip +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/archive.zip/1.2.0/dwd_semicolon_station_member/expected.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/an_ordinary_comma_separated_table/cities.csv +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/an_ordinary_comma_separated_table/expected.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/quoted_fields_holding_the_delimiter/cities.tsv +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/quoted_fields_holding_the_delimiter/expected.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/delimited_text/1.1.0/an_hourly_observation_table_served_as_plain_text/expected.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/delimited_text/1.1.0/an_hourly_observation_table_served_as_plain_text/observations.csv +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/geojson.vector/1.0.0/czech_capital/expected.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/geojson.vector/1.0.0/czech_capital/places.geojson +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/geopackage.vector/1.0.0/epsg_4326_feature/expected.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/geopackage.vector/1.0.0/epsg_4326_feature/places.gpkg +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/geoparquet.vector/1.0.0/primary_wkb_point/expected.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/geoparquet.vector/1.0.0/primary_wkb_point/places.parquet +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/html.tabular/1.0.0/sanitized_table/expected.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/html.tabular/1.0.0/sanitized_table/table.html +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/html.web_extract/1.0.0/json_ld_scorecards/expected.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/html.web_extract/1.0.0/json_ld_scorecards/scorecards.html +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/image.rendered/1.0.0/tiny_png/expected.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/image.rendered/1.0.0/tiny_png/tiny-rendered.png +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/json.tabular/1.0.0/nested_hourly_observations/expected.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/json.tabular/1.0.0/nested_hourly_observations/stations.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/json.tabular/1.1.0/an_observation_stream_served_as_plain_text/expected.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/json.tabular/1.1.0/an_observation_stream_served_as_plain_text/observations.ndjson +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/meteorology.bufr/1.0.0/eccodes_bufr4_subset/eccodes-bufr4.bufr +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/meteorology.bufr/1.0.0/eccodes_bufr4_subset/expected.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/meteorology.grib/1.0.0/eccodes_grib1_origin/expected.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/meteorology.grib/1.0.0/eccodes_grib1_origin/regular-ll-surface.grib1 +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/microdata.sas_xpt/1.0.0/two_raw_columns/expected.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/microdata.sas_xpt/1.0.0/two_raw_columns/survey.xpt +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/microdata.spss_sav/1.0.0/two_raw_columns/expected.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/microdata.spss_sav/1.0.0/two_raw_columns/survey.sav +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/microdata.stata_dta/1.0.0/two_raw_columns/expected.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/microdata.stata_dta/1.0.0/two_raw_columns/stata.dta +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/official.pcaxis_px/1.0.0/population_by_region_and_year/expected.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/official.pcaxis_px/1.0.0/population_by_region_and_year/population.px +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/official.sdmx_json/1.0.0/compact_population_series/expected.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/official.sdmx_json/1.0.0/compact_population_series/population.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/parquet.tabular/1.0.0/two_columns/expected.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/parquet.tabular/1.0.0/two_columns/prices.parquet +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/protobuf.tabular/1.0.0/gtfs_realtime_trip_updates/expected.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/protobuf.tabular/1.0.0/gtfs_realtime_trip_updates/gtfs-realtime.desc +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/protobuf.tabular/1.0.0/gtfs_realtime_trip_updates/trip-updates.pb +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/raster.geospatial/1.0.0/tiny_geotiff/expected.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/raster.geospatial/1.0.0/tiny_geotiff/tiny-geospatial.tif +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/satellite.goes_abi_l2/1.0.0/authored_cmi_window/expected.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/satellite.goes_abi_l2/1.0.0/authored_cmi_window/goes-abi-l2-cmi-window.nc +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/satellite.himawari_hsd/1.0.0/authored_b13_single_bzip2/expected.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/satellite.himawari_hsd/1.0.0/authored_b13_single_bzip2/himawari-b13-0101-bzip2.dat +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/satellite.himawari_hsd_complete/1.0.0/authored_b13_three_segment_scan/expected.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/satellite.himawari_hsd_complete/1.0.0/authored_b13_three_segment_scan/himawari-hsd-b13-complete.zip +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/satellite.msg_seviri_l15/1.0.0/authored_calibrated_complete_visir/expected.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/satellite.msg_seviri_l15/1.0.0/authored_calibrated_complete_visir/msg-seviri-l15.zip +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/satellite.sentinel_safe/1.0.0/authored_b02_scl_window/expected.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/satellite.sentinel_safe/1.0.0/authored_b02_scl_window/sentinel-safe-b02-scl.zip +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/satellite.xrit_image/1.0.0/authored_complete_raw_counts/expected.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/satellite.xrit_image/1.0.0/authored_complete_raw_counts/xrit-complete-image.zip +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/scientific.fits/1.0.0/tiny_primary_window/expected.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/scientific.fits/1.0.0/tiny_primary_window/tiny-primary.fits +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/scientific.hdf4/1.0.0/authored_temperature_window/expected.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/scientific.hdf4/1.0.0/authored_temperature_window/temperature.hdf +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/scientific.hdf5/1.0.0/authored_temperature_window/expected.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/scientific.hdf5/1.0.0/authored_temperature_window/temperature.h5 +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/scientific.hdf_eos2/1.0.0/authored_grid_temperature_window/expected.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/scientific.hdf_eos2/1.0.0/authored_grid_temperature_window/nasa-hdfeos2-grid.hdf +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/scientific.hdf_eos2/1.0.0/authored_swath_temperature_window/expected.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/scientific.hdf_eos2/1.0.0/authored_swath_temperature_window/nasa-hdfeos2-swath.hdf +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/scientific.netcdf/1.0.0/authored_classic_temperature_window/expected.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/scientific.netcdf/1.0.0/authored_classic_temperature_window/temperature-classic.nc +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/scientific.zarr/1.0.0/authored_v3_temperature_window/expected.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/scientific.zarr/1.0.0/authored_v3_temperature_window/temperature-zarr-v3.zip +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.0.0/an_ordinary_table_beside_a_second_sheet/cities.xlsx +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.0.0/an_ordinary_table_beside_a_second_sheet/expected.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.0.0/shares_the_workbook_had_already_computed/expected.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.0.0/shares_the_workbook_had_already_computed/shares.xlsx +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.1.0/shares_the_workbook_had_already_computed/expected.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.1.0/shares_the_workbook_had_already_computed/shares.xlsx +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/README.md +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/gfs_2m_temperature/expected.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/gfs_2m_temperature/gfs-2m-temperature.grib2 +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_2m_temperature/expected.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_2m_temperature/hrrr-2m-temperature.grib2 +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_categorical_rain/expected.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_categorical_rain/hrrr-categorical-rain.grib2 +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/weather.grib2/2.0.0/hrrr_2m_temperature/expected.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/weather.grib2/2.0.0/hrrr_2m_temperature/hrrr-2m-temperature.grib2 +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/weather.grib2/3.0.0/gfs_and_hrrr_categorical_rain/expected.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/weather.grib2/3.0.0/gfs_and_hrrr_categorical_rain/gfs-and-hrrr-categorical-rain.grib2 +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/plain_filing_fact/expected.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/plain_filing_fact/filing.xml +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/xml_inline_fact/expected.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/xml_inline_fact/filing.xhtml +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/pacer_rss_feed/expected.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/pacer_rss_feed/feed.xml +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/sec_form_d_filing/expected.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/sec_form_d_filing/filing.xml +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/unified_agenda_extract/agenda.xml +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/unified_agenda_extract/expected.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/samples.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/scientific.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/scientific_arrays/__init__.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/scientific_arrays/container.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/scientific_arrays/goes.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/scientific_arrays/hdf4.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/scientific_arrays/hdf4_bridge.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/scientific_arrays/hdf5.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/scientific_arrays/native.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/scientific_arrays/netcdf.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/scientific_arrays/profiles.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/scientific_arrays/raw.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/scientific_arrays/zarr.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/scientific_catalog.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/scientific_segmented/__init__.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/scientific_segmented/asset_sets.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/scientific_segmented/formats.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/scientific_segmented/hsd.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/scientific_segmented/native.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/scientific_segmented/profiles.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/scientific_segmented/reader.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/scientific_segmented/xrit.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/sdmx_json.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/spreadsheet.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/statistical_microdata.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/tabular.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/vector.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/vector_wkb.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/xbrl_facts.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/readers/xml_tabular.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/recipe.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/repair/__init__.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/repair/adapters.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/repair/contracts.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/repair/coordinator.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/repair/errors.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/review.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/rowset.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/session_probes.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/signing.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/skill_assets.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/source_discovery.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/__init__.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/_adapter_steps.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/adapters.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/authenticated_https.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/authenticated_https_v2.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/cadence.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/cadence_emission.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/cadence_history.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/__init__.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/admission.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/authoring.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/authoring_policy.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/authoring_shards.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/bounded_io.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/channel.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/channel_client.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/contracts.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/coverage.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/delta.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/embedding.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/entry_v2.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/fill.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/fill_partitions.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/fill_staging.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/gating.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/generation_receipt.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/harvest/__init__.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/harvest/ckan.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/harvest/datagov_v4.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/harvest/protocol.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/harvest/sdmx.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/harvest/stac.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/health.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/hosted_catalog.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/identity_history.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/neural.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/packed_catalog.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/packed_retrieval.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/packed_writer.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/query_trace.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/recommend.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/retrieval.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/retrieval_manifest.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/rights_decisions.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/sealed.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/search.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/streaming_delta.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/catalog/update.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/collections.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/contracts.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/dataset.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/deletion.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/document_projection.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/fitness.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/governance.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/hosted.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/integration.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/range_reader.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/registry.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/rights_rule.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/source_cadence_vectors.v1.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/sports.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/stream.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/stream_capture_session.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/stream_connector.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/stream_connectors/fixture.cursor-resume.v3.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-ed25519.v2.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-hmac.v2.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-hmac384.v2.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-hmac512.v2.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame.v2.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-header-rsa.v2.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-header.v2.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-permessage-jwt.v2.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-permessage.v2.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-prelude.v2.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-query.v2.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-subprotocol.v2.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-subscribe.v2.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-urlpath.v2.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/stream_connectors/polymarket.clob-market.v1.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/stream_credential.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/stream_prelude.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/stream_recorder.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/stream_registry.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/stream_rotation.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/stream_segment_recorder.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/stream_series.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/stream_signing.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sources/stream_transport.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/sql_transform_engine.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/stream_subscription_feed.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/stream_subscription_sealer.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/stream_subscription_worker.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/stream_venue.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/stream_venue_staging.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/studio_boundary.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/studio_subscription_control.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/thin/__init__.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/thin/acquire.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/thin/acquire_cancel.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/thin/approvals.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/thin/commands.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/thin/download.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/thin/narrative.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/thin/parity.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/thin/probe.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/thin/propose.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/thin/recipe.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/thin/research.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/thin/router.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/thin/runs.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/thin/session.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/thin/stream.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/thin/stream_venue.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/thin/transport.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/thin/v4.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/thin/v4_artifacts.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/thin/v4_dataset_covers.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/thin/v4_handoff.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/thin/v4_narrative.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/thin/v4_query.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/thin/v4_runs.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/thin/v4_secrets.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/thin/v4_stream.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/thin/v4_tables.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/thin/vocabulary.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/thin/workers.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ucum/TABLE-PIN.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ucum/ucum-subset.v1.json +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/unit_flow.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/units.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/__init__.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/approve.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/attendance.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/author_yaml.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/clarification.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/cloud_auth.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/commands/__init__.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/commands/approve.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/commands/auth.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/commands/author.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/commands/catalog_author.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/commands/catalog_fill.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/commands/catalog_harvest.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/commands/catalog_publish.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/commands/catalog_search.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/commands/catalog_update.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/commands/clarify.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/commands/deploy.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/commands/deploy_dataset.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/commands/deploy_plan.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/commands/deploy_status.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/commands/diff.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/commands/document.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/commands/index.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/commands/inventory.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/commands/list_builds.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/commands/login.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/commands/peek.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/commands/plan_check.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/commands/preflight.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/commands/record.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/commands/review_setup.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/commands/search.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/commands/show.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/commands/whoami.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/credential_native.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/credential_store.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/credentials.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/diffing.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/headline.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/hosted_acquisition.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/hosted_run_status.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/inventory.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/local_review.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/login.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/path_kind.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/peek.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/plain_file.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/plan_check.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/preflight.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/readers.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/remediation.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/render.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/ux/workload.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/v4_acquisition.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/v4_check_dialect.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/v4_document_pin.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/v4_reader_pin.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/v4_recipe.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/v4_snapshot_artifact.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/v4_stream_recording.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/v4_transform.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/visual_run/__init__.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/visual_run/authoring.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/visual_run/contracts.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/visual_run/materialize.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/visual_run/observations.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/visual_run/query.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/visual_run/reducer.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/visual_run/sdk.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/visual_run/store.py +0 -0
- {mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/visual_run/transport.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mostlyright-data
|
|
3
|
-
Version: 0.10.
|
|
3
|
+
Version: 0.10.7
|
|
4
4
|
Summary: Mostly Right CLI for reproducible, reviewed Parquet datasets
|
|
5
5
|
Project-URL: Homepage, https://mostlyright.md/
|
|
6
6
|
Project-URL: Documentation, https://mostlyright.md/docs/guides/cli/
|
|
@@ -18,8 +18,8 @@ takes it:
|
|
|
18
18
|
:func:`_raw_snapshot_tar`.
|
|
19
19
|
* **The ``cache`` field lives on the v4 ``receipt`` artifact, never on a sealed acquisition
|
|
20
20
|
receipt.** See :func:`_receipt_document`.
|
|
21
|
-
* **The
|
|
22
|
-
coordinate.** See :func:`
|
|
21
|
+
* **The authenticated predecessor receipt is the authority; the job's ``predecessor`` block is
|
|
22
|
+
only a coordinate.** See :func:`restore_predecessor_record`.
|
|
23
23
|
|
|
24
24
|
TWO SEAMS THIS REPOSITORY DOES NOT OWN, both named here so a reader does not go looking:
|
|
25
25
|
|
|
@@ -80,12 +80,10 @@ from mostlyright.data_harness.hosted_worker import (
|
|
|
80
80
|
ArtifactPayload,
|
|
81
81
|
HostedWorkerError,
|
|
82
82
|
_candidate_snapshot,
|
|
83
|
-
_decode_candidate_envelope,
|
|
84
83
|
_new_transfer_client,
|
|
85
84
|
_quiet_signed_transfer,
|
|
86
85
|
_read_fd_once,
|
|
87
86
|
_released_column_profile,
|
|
88
|
-
_restore_candidate_members,
|
|
89
87
|
_run_bounded_in_submit_order,
|
|
90
88
|
_seal_producer_artifact,
|
|
91
89
|
_strict_json,
|
|
@@ -106,7 +104,7 @@ from mostlyright.data_harness.inprocess_acquisition import (
|
|
|
106
104
|
inprocess_reader_policy_digest,
|
|
107
105
|
v4_parse_policy_digest,
|
|
108
106
|
)
|
|
109
|
-
from mostlyright.data_harness.recipe import RecipeError,
|
|
107
|
+
from mostlyright.data_harness.recipe import RecipeError, parse_recipe_execution
|
|
110
108
|
from mostlyright.data_harness.run_execution_v4 import (
|
|
111
109
|
FAILED_STAGES,
|
|
112
110
|
RunCallbacks,
|
|
@@ -150,7 +148,7 @@ from mostlyright.data_harness.v4_recipe import (
|
|
|
150
148
|
source_ceilings,
|
|
151
149
|
source_egress_origins,
|
|
152
150
|
)
|
|
153
|
-
from mostlyright.data_harness.v4_required_controls import run_required_controls
|
|
151
|
+
from mostlyright.data_harness.v4_required_controls import profile_shape, run_required_controls
|
|
154
152
|
from mostlyright.data_harness.v4_snapshot_artifact import SnapshotArtifactAdapter
|
|
155
153
|
from mostlyright.data_harness.v4_transform import (
|
|
156
154
|
SEALED_MEMBER_DIRECTORY,
|
|
@@ -675,8 +673,7 @@ def permitted_artifact_hosts(
|
|
|
675
673
|
required them to agree refused every refresh a hosted deployment dispatched.
|
|
676
674
|
|
|
677
675
|
This is defence in depth and it is not the authentication: the predecessor's bytes are still
|
|
678
|
-
authenticated end to end by ``candidate_digest``, checked
|
|
679
|
-
and again by ``pipeline.verify_candidate`` on the restored tree.
|
|
676
|
+
authenticated end to end by ``candidate_digest``, checked before the receipt is read.
|
|
680
677
|
"""
|
|
681
678
|
|
|
682
679
|
session = job.artifact_session
|
|
@@ -708,7 +705,7 @@ def _download_signed_bytes(
|
|
|
708
705
|
|
|
709
706
|
A v4 signed session carries no expected size and no expected digest: the digest that
|
|
710
707
|
authenticates these bytes is the block's ``candidate_digest``, checked by
|
|
711
|
-
|
|
708
|
+
:func:`restore_predecessor_record` before the receipt is read.
|
|
712
709
|
|
|
713
710
|
BOTH ADDRESS CHECKS RUN BEFORE THE STREAM OPENS, so a refused session costs no bytes.
|
|
714
711
|
"""
|
|
@@ -745,130 +742,165 @@ def _download_signed_bytes(
|
|
|
745
742
|
return b"".join(chunks)
|
|
746
743
|
|
|
747
744
|
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
745
|
+
@dataclass(frozen=True)
|
|
746
|
+
class PredecessorRecord:
|
|
747
|
+
"""What a refresh continues from: the predecessor's sealed receipt, read once and authenticated.
|
|
748
|
+
|
|
749
|
+
THE RECEIPT IS THE AUTHORITY AND THE BLOCK IS ONLY THE COORDINATE. Studio stamps the receipt's
|
|
750
|
+
own digest onto the run as ``candidate_digest`` (``docs/V4-WORKER-PROTOCOL.md``, *Callbacks*),
|
|
751
|
+
and the predecessor block carries that digest beside a signed session for those exact bytes.
|
|
752
|
+
So the bytes are authenticated end to end by the digest, and every fact below is read out of
|
|
753
|
+
them rather than out of the block: the table version the successor numbers itself after, the
|
|
754
|
+
sealed column shape the drift control compares against, and the committed state of every
|
|
755
|
+
source, which for a registered document is the digest of the bytes that were read.
|
|
756
|
+
|
|
757
|
+
A v4 run uploads five artifacts and never the sealed tree itself, so there is no tree to
|
|
758
|
+
restore and replay-verify here; ``candidate_digest`` on the record is the tree's digest as
|
|
759
|
+
the predecessor stated it, carried for the successor's own sealed execution.
|
|
760
|
+
"""
|
|
752
761
|
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
762
|
+
run_id: UUID
|
|
763
|
+
workspace_id: UUID
|
|
764
|
+
recipe_digest: str
|
|
765
|
+
candidate_digest: str
|
|
766
|
+
table_id: str
|
|
767
|
+
table_version_id: str
|
|
768
|
+
table_version_number: int
|
|
769
|
+
columns: tuple[tuple[str, str], ...]
|
|
770
|
+
row_count: int | None
|
|
771
|
+
source_states: Mapping[str, str]
|
|
758
772
|
|
|
759
|
-
THE RESTORED TREE IS THE AUTHORITY AND THE BLOCK IS ONLY THE COORDINATE. The block says where
|
|
760
|
-
to look; what is found there says what it is. A block whose ``candidate_digest`` disagrees with
|
|
761
|
-
the verified tree is a refusal and never a correction, and ``table_id`` and
|
|
762
|
-
``table_version_number`` are read from the tree's own sealed ``recipe-execution.json`` rather
|
|
763
|
-
than from the block -- which is what stops a spoofed block rebinding a run to a version it did
|
|
764
|
-
not come from (T-401-24).
|
|
765
773
|
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
not verify, and a digest that disagrees.
|
|
774
|
+
def _receipt_table_record(snapshot: Mapping[str, bytes]) -> dict[str, Any]:
|
|
775
|
+
"""The ``table`` member of a receipt: the sealed execution's version and the sealed shape.
|
|
769
776
|
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
document's author cannot move.
|
|
777
|
+
Both are read out of the sealed tree through the same door the artifacts are, so a receipt
|
|
778
|
+
states what was sealed and nothing the build happened to hold in memory.
|
|
773
779
|
"""
|
|
774
780
|
|
|
781
|
+
try:
|
|
782
|
+
execution = parse_recipe_execution(json.loads(snapshot["recipe-execution.json"]))
|
|
783
|
+
except (KeyError, RecipeError, ValueError) as error:
|
|
784
|
+
raise RunExecutionError(
|
|
785
|
+
"ARTIFACT_PERSIST_FAILED",
|
|
786
|
+
failure_detail("the sealed tree carries no readable execution to state in the receipt"),
|
|
787
|
+
stage="persist",
|
|
788
|
+
) from error
|
|
789
|
+
shape = profile_shape(snapshot, "this version")
|
|
790
|
+
return {
|
|
791
|
+
"table_id": execution.table_id,
|
|
792
|
+
"table_version_id": execution.table_version_id,
|
|
793
|
+
"table_version_number": execution.table_version_number,
|
|
794
|
+
"columns": [{"name": name, "logical_type": kind} for name, kind in shape.columns],
|
|
795
|
+
"row_count": shape.row_count,
|
|
796
|
+
}
|
|
797
|
+
|
|
798
|
+
|
|
799
|
+
def _decode_predecessor_receipt(raw: bytes, job: RunExecution) -> PredecessorRecord:
|
|
800
|
+
"""Read the authenticated receipt bytes into the record, or refuse by name."""
|
|
801
|
+
|
|
775
802
|
block = job.predecessor
|
|
776
|
-
|
|
777
|
-
raise _predecessor_refusal(f"a {job.mode} run carries no predecessor block")
|
|
778
|
-
raw = _download_signed_bytes(
|
|
779
|
-
transfer,
|
|
780
|
-
block.artifact_download_session,
|
|
781
|
-
maximum=MAX_CANDIDATE_ENVELOPE_BYTES,
|
|
782
|
-
permitted_hosts=permitted_artifact_hosts(job, studio_origin=studio_origin),
|
|
783
|
-
)
|
|
803
|
+
assert block is not None
|
|
784
804
|
try:
|
|
785
|
-
|
|
786
|
-
except
|
|
805
|
+
value = json.loads(raw.decode("utf-8"))
|
|
806
|
+
except (UnicodeDecodeError, ValueError) as error:
|
|
787
807
|
raise _predecessor_refusal(
|
|
788
|
-
|
|
808
|
+
"the predecessor receipt will not decode: not a JSON document"
|
|
789
809
|
) from error
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
810
|
+
if not isinstance(value, Mapping) or value.get("schema_version") != RECEIPT_DOCUMENT_SCHEMA:
|
|
811
|
+
raise _predecessor_refusal(
|
|
812
|
+
f"the predecessor receipt will not decode: not a {RECEIPT_DOCUMENT_SCHEMA} document"
|
|
813
|
+
)
|
|
814
|
+
if str(value.get("run_id")) != str(block.run_id):
|
|
815
|
+
raise _predecessor_refusal("the predecessor receipt names a different run than the block")
|
|
816
|
+
if str(value.get("workspace_id")) != str(job.workspace_id):
|
|
817
|
+
raise _predecessor_refusal("the predecessor receipt names a different workspace")
|
|
818
|
+
table = value.get("table")
|
|
819
|
+
if not isinstance(table, Mapping):
|
|
820
|
+
raise _predecessor_refusal(
|
|
821
|
+
"the predecessor receipt states no table version, so a successor cannot number "
|
|
822
|
+
"itself after it; rebuild the table with a full run on this worker first"
|
|
823
|
+
)
|
|
793
824
|
try:
|
|
794
|
-
|
|
795
|
-
|
|
825
|
+
table_id = str(table["table_id"])
|
|
826
|
+
table_version_id = str(table["table_version_id"])
|
|
827
|
+
table_version_number = int(table["table_version_number"])
|
|
828
|
+
columns = tuple(
|
|
829
|
+
(str(entry["name"]), str(entry["logical_type"])) for entry in table["columns"]
|
|
830
|
+
)
|
|
831
|
+
except (KeyError, TypeError, ValueError) as error:
|
|
796
832
|
raise _predecessor_refusal(
|
|
797
|
-
|
|
833
|
+
"the predecessor receipt's table member is not readable"
|
|
798
834
|
) from error
|
|
799
|
-
if
|
|
835
|
+
if table_version_id != block.table_version_id:
|
|
800
836
|
raise _predecessor_refusal(
|
|
801
|
-
"the
|
|
837
|
+
"the predecessor block and the sealed receipt name different table versions"
|
|
802
838
|
)
|
|
803
|
-
|
|
839
|
+
if table_version_number < 1:
|
|
840
|
+
raise _predecessor_refusal("the predecessor receipt states no positive table version")
|
|
841
|
+
row_count = table.get("row_count")
|
|
842
|
+
sources = value.get("sources")
|
|
843
|
+
states: dict[str, str] = {}
|
|
844
|
+
if isinstance(sources, list):
|
|
845
|
+
for item in sources:
|
|
846
|
+
if isinstance(item, Mapping):
|
|
847
|
+
source_id = item.get("source_id")
|
|
848
|
+
digest = item.get("digest")
|
|
849
|
+
if isinstance(source_id, str) and isinstance(digest, str):
|
|
850
|
+
states[source_id] = digest
|
|
851
|
+
candidate_digest = value.get("candidate_digest")
|
|
852
|
+
recipe_digest = value.get("recipe_digest")
|
|
853
|
+
if not isinstance(candidate_digest, str) or not isinstance(recipe_digest, str):
|
|
854
|
+
raise _predecessor_refusal("the predecessor receipt states no digests")
|
|
855
|
+
return PredecessorRecord(
|
|
856
|
+
run_id=block.run_id,
|
|
857
|
+
workspace_id=job.workspace_id,
|
|
858
|
+
recipe_digest=recipe_digest,
|
|
859
|
+
candidate_digest=candidate_digest,
|
|
860
|
+
table_id=table_id,
|
|
861
|
+
table_version_id=table_version_id,
|
|
862
|
+
table_version_number=table_version_number,
|
|
863
|
+
columns=columns,
|
|
864
|
+
row_count=row_count if isinstance(row_count, int) else None,
|
|
865
|
+
source_states=MappingProxyType(states),
|
|
866
|
+
)
|
|
804
867
|
|
|
805
868
|
|
|
806
|
-
def
|
|
807
|
-
|
|
869
|
+
def restore_predecessor_record(
|
|
870
|
+
job: RunExecution, *, transfer: Any, studio_origin: str = ""
|
|
871
|
+
) -> PredecessorRecord:
|
|
872
|
+
"""Download and authenticate the predecessor's sealed receipt, and read the record from it.
|
|
808
873
|
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
874
|
+
Studio's predecessor session names the predecessor's ``receipt`` artifact -- the
|
|
875
|
+
``candidate_evidence`` root a refresh resolves from -- and the block's ``candidate_digest`` is
|
|
876
|
+
that receipt's own digest. The bytes are authenticated by the digest BEFORE they are read, so
|
|
877
|
+
a block that disagrees with what the session serves is a refusal and never a correction, and a
|
|
878
|
+
spoofed block cannot rebind a run to a version it did not come from (T-401-24): the version
|
|
879
|
+
coordinates are read from the authenticated receipt and cross-checked against the block.
|
|
812
880
|
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
chain committed at -- and that member is where the chain is re-checked from. A tree built from
|
|
817
|
-
a registered document runs no versioned source and seals no such member; what it does seal, per
|
|
818
|
-
relation, is the digest of the exact member the relation was read from. That digest is the
|
|
819
|
-
honest answer to "what state was this source committed at", because for this lane the bytes ARE
|
|
820
|
-
the state: there is no cursor, no watermark and nothing else the predecessor advanced.
|
|
881
|
+
Six failure points, one code, and the detail names which one: an absent block, a session that
|
|
882
|
+
will not answer, a download over its bound, a digest that disagrees, a receipt that will not
|
|
883
|
+
decode, and a receipt naming another run, workspace or table version.
|
|
821
884
|
|
|
822
|
-
|
|
823
|
-
|
|
885
|
+
``studio_origin`` is the DEPLOYMENT's Studio origin, not anything the job document said, and it
|
|
886
|
+
is what lets :func:`permitted_artifact_hosts` judge the signed address against a policy the
|
|
887
|
+
document's author cannot move.
|
|
824
888
|
"""
|
|
825
889
|
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
890
|
+
block = job.predecessor
|
|
891
|
+
if block is None:
|
|
892
|
+
raise _predecessor_refusal(f"a {job.mode} run carries no predecessor block")
|
|
893
|
+
raw = _download_signed_bytes(
|
|
894
|
+
transfer,
|
|
895
|
+
block.artifact_download_session,
|
|
896
|
+
maximum=MAX_CANDIDATE_ENVELOPE_BYTES,
|
|
897
|
+
permitted_hosts=permitted_artifact_hosts(job, studio_origin=studio_origin),
|
|
898
|
+
)
|
|
899
|
+
if "sha256:" + hashlib.sha256(raw).hexdigest() != block.candidate_digest:
|
|
835
900
|
raise _predecessor_refusal(
|
|
836
|
-
"the
|
|
901
|
+
"the predecessor receipt's digest disagrees with the predecessor block"
|
|
837
902
|
)
|
|
838
|
-
return
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
#: Where one predecessor member records a source's committed state, and under which key. Written
|
|
842
|
-
#: as a table because there are exactly two sealed shapes and the difference between them is which
|
|
843
|
-
#: member exists, not how it is read.
|
|
844
|
-
_COMMITTED_STATE_MEMBERS: tuple[tuple[str, str], ...] = (
|
|
845
|
-
("evidence/recipe-acquisition.json", "committed_state_digest"),
|
|
846
|
-
("evidence/sources.json", "sha256"),
|
|
847
|
-
)
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
def _committed_source_states(snapshot: Mapping[str, bytes]) -> dict[str, str] | None:
|
|
851
|
-
"""The per-source committed state one restored tree records, or ``None`` if it records none."""
|
|
852
|
-
|
|
853
|
-
for member, key in _COMMITTED_STATE_MEMBERS:
|
|
854
|
-
raw = snapshot.get(member)
|
|
855
|
-
if raw is None:
|
|
856
|
-
continue
|
|
857
|
-
decoded = json.loads(raw)
|
|
858
|
-
sources = decoded.get("sources") if isinstance(decoded, Mapping) else decoded
|
|
859
|
-
if not isinstance(sources, list):
|
|
860
|
-
continue
|
|
861
|
-
states: dict[str, str] = {}
|
|
862
|
-
for item in sources:
|
|
863
|
-
if not isinstance(item, Mapping):
|
|
864
|
-
continue
|
|
865
|
-
source_id = item.get("source_id")
|
|
866
|
-
digest = item.get(key)
|
|
867
|
-
if isinstance(source_id, str) and isinstance(digest, str):
|
|
868
|
-
states[source_id] = digest
|
|
869
|
-
if states:
|
|
870
|
-
return states
|
|
871
|
-
return None
|
|
903
|
+
return _decode_predecessor_receipt(raw, job)
|
|
872
904
|
|
|
873
905
|
|
|
874
906
|
# ------------------------------------------------------------------------------------------------
|
|
@@ -981,6 +1013,7 @@ def _receipt_document(
|
|
|
981
1013
|
verified: pipeline.VerifiedCandidate,
|
|
982
1014
|
coverage: Sequence[V4AcquisitionCoverage],
|
|
983
1015
|
raw_members: Sequence[Mapping[str, Any]],
|
|
1016
|
+
snapshot: Mapping[str, bytes],
|
|
984
1017
|
) -> bytes:
|
|
985
1018
|
"""The composed v4 receipt: one entry per source, the coverage, and the raw tar's members.
|
|
986
1019
|
|
|
@@ -1031,6 +1064,10 @@ def _receipt_document(
|
|
|
1031
1064
|
"media_type": RAW_SNAPSHOT_MEDIA_TYPE,
|
|
1032
1065
|
"members": [dict(member) for member in raw_members],
|
|
1033
1066
|
},
|
|
1067
|
+
# THE VERSION AND THE SHAPE THIS RUN SEALED, so a later refresh can number itself
|
|
1068
|
+
# after this version and hold its columns against these, reading the authenticated
|
|
1069
|
+
# receipt alone: a v4 run uploads no sealed tree for a successor to restore.
|
|
1070
|
+
"table": _receipt_table_record(snapshot),
|
|
1034
1071
|
}
|
|
1035
1072
|
)
|
|
1036
1073
|
|
|
@@ -1040,7 +1077,7 @@ def v4_artifact_payloads(
|
|
|
1040
1077
|
candidate_run_dir: Path,
|
|
1041
1078
|
*,
|
|
1042
1079
|
coverage: Sequence[V4AcquisitionCoverage] = (),
|
|
1043
|
-
|
|
1080
|
+
predecessor: PredecessorRecord | None = None,
|
|
1044
1081
|
) -> tuple[pipeline.VerifiedCandidate, list[ArtifactPayload]]:
|
|
1045
1082
|
"""Derive all five v4 artifacts from the sealed candidate tree, in layout order.
|
|
1046
1083
|
|
|
@@ -1078,17 +1115,14 @@ def v4_artifact_payloads(
|
|
|
1078
1115
|
stage="persist",
|
|
1079
1116
|
)
|
|
1080
1117
|
verified, snapshot = _candidate_snapshot(candidate_run_dir)
|
|
1081
|
-
# The
|
|
1082
|
-
#
|
|
1083
|
-
predecessor_snapshot = (
|
|
1084
|
-
None if predecessor_run_dir is None else _candidate_snapshot(predecessor_run_dir)[1]
|
|
1085
|
-
)
|
|
1118
|
+
# The authenticated predecessor record, for the drift control a refresh is held to: the
|
|
1119
|
+
# sealed shape it states is what this version's sealed shape is compared with.
|
|
1086
1120
|
run_required_controls(
|
|
1087
1121
|
job,
|
|
1088
1122
|
verified=verified,
|
|
1089
1123
|
snapshot=snapshot,
|
|
1090
1124
|
coverage=coverage,
|
|
1091
|
-
|
|
1125
|
+
predecessor=predecessor,
|
|
1092
1126
|
)
|
|
1093
1127
|
candidate_digest = "sha256:" + verified.candidate_digest
|
|
1094
1128
|
# The tar is built BEFORE the receipt, because the receipt states the tar's members: the
|
|
@@ -1107,7 +1141,7 @@ def v4_artifact_payloads(
|
|
|
1107
1141
|
candidate_digest=candidate_digest,
|
|
1108
1142
|
),
|
|
1109
1143
|
"preview": _table_preview(snapshot["data/table.parquet"], candidate_digest),
|
|
1110
|
-
"receipt": _receipt_document(job, verified, coverage, raw_members),
|
|
1144
|
+
"receipt": _receipt_document(job, verified, coverage, raw_members, snapshot),
|
|
1111
1145
|
"raw_snapshot": _raw_snapshot_tar(snapshot, raw_paths),
|
|
1112
1146
|
}
|
|
1113
1147
|
return verified, [
|
|
@@ -2562,9 +2596,9 @@ def run_v4(
|
|
|
2562
2596
|
with ExitStack() as stack:
|
|
2563
2597
|
root = Path(stack.enter_context(tempfile.TemporaryDirectory(prefix="mr-v4-run-"))).resolve()
|
|
2564
2598
|
try:
|
|
2565
|
-
|
|
2566
|
-
predecessor_execution:
|
|
2567
|
-
source_states:
|
|
2599
|
+
predecessor: PredecessorRecord | None = None
|
|
2600
|
+
predecessor_execution: PredecessorRecord | None = None
|
|
2601
|
+
source_states: Mapping[str, str] | None = None
|
|
2568
2602
|
# THE DECLARED CHECKS ARE PARSED FIRST, BEFORE A BYTE IS FETCHED OR RESTORED.
|
|
2569
2603
|
# `parse_declared_checks` is entirely static -- it validates every check's kind, its
|
|
2570
2604
|
# exact parameter set, its domains and every column it names against the plan's own
|
|
@@ -2597,10 +2631,11 @@ def run_v4(
|
|
|
2597
2631
|
if job.mode in {"refresh", "backfill"}:
|
|
2598
2632
|
if transfer is None:
|
|
2599
2633
|
transfer = stack.enter_context(_closing(_new_transfer_client()))
|
|
2600
|
-
|
|
2601
|
-
job, transfer=transfer,
|
|
2634
|
+
predecessor = restore_predecessor_record(
|
|
2635
|
+
job, transfer=transfer, studio_origin=origin
|
|
2602
2636
|
)
|
|
2603
|
-
predecessor_execution
|
|
2637
|
+
predecessor_execution = predecessor
|
|
2638
|
+
source_states = predecessor.source_states
|
|
2604
2639
|
|
|
2605
2640
|
approval, execution = synthesize_execution_lock(
|
|
2606
2641
|
job,
|
|
@@ -2712,7 +2747,7 @@ def run_v4(
|
|
|
2712
2747
|
job,
|
|
2713
2748
|
output_dir,
|
|
2714
2749
|
coverage=coverage_log.entries(),
|
|
2715
|
-
|
|
2750
|
+
predecessor=predecessor,
|
|
2716
2751
|
)
|
|
2717
2752
|
_upload_all(
|
|
2718
2753
|
job,
|
|
@@ -3082,6 +3117,7 @@ __all__ = [
|
|
|
3082
3117
|
"RECEIPT_DOCUMENT_SCHEMA",
|
|
3083
3118
|
"V4_ARTIFACT_LAYOUT",
|
|
3084
3119
|
"ArtifactSealer",
|
|
3120
|
+
"PredecessorRecord",
|
|
3085
3121
|
"StudioArtifactSealer",
|
|
3086
3122
|
"StudioCredentialRedeemer",
|
|
3087
3123
|
"StudioRunCallbacks",
|
|
@@ -3089,9 +3125,8 @@ __all__ = [
|
|
|
3089
3125
|
"artifact_id_for",
|
|
3090
3126
|
"build_v4_candidate",
|
|
3091
3127
|
"permitted_artifact_hosts",
|
|
3092
|
-
"predecessor_lock_inputs",
|
|
3093
3128
|
"recipe_governance",
|
|
3094
|
-
"
|
|
3129
|
+
"restore_predecessor_record",
|
|
3095
3130
|
"run_v4",
|
|
3096
3131
|
"run_worker_main",
|
|
3097
3132
|
"seal_coordinate",
|
{mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/data_harness/run_execution_v4.py
RENAMED
|
@@ -1407,10 +1407,28 @@ def _refuse_unbindable_watermark(job: RunExecution) -> None:
|
|
|
1407
1407
|
)
|
|
1408
1408
|
|
|
1409
1409
|
|
|
1410
|
+
class PredecessorExecution(Protocol):
|
|
1411
|
+
"""The three facts the lock reads off a predecessor: its table, its version, its number.
|
|
1412
|
+
|
|
1413
|
+
Satisfied by the engine's own ``RecipeExecution`` and by the worker's authenticated
|
|
1414
|
+
``PredecessorRecord`` alike, so the lock is indifferent to which sealed member they were read
|
|
1415
|
+
from.
|
|
1416
|
+
"""
|
|
1417
|
+
|
|
1418
|
+
@property
|
|
1419
|
+
def table_id(self) -> str: ...
|
|
1420
|
+
|
|
1421
|
+
@property
|
|
1422
|
+
def table_version_id(self) -> str: ...
|
|
1423
|
+
|
|
1424
|
+
@property
|
|
1425
|
+
def table_version_number(self) -> int: ...
|
|
1426
|
+
|
|
1427
|
+
|
|
1410
1428
|
def synthesize_execution_lock(
|
|
1411
1429
|
job: RunExecution,
|
|
1412
1430
|
*,
|
|
1413
|
-
predecessor_execution:
|
|
1431
|
+
predecessor_execution: PredecessorExecution | None = None,
|
|
1414
1432
|
predecessor_source_states: Mapping[str, str] | None = None,
|
|
1415
1433
|
trusted_clock: str | None = None,
|
|
1416
1434
|
) -> tuple[RecipeApproval, RecipeExecution]:
|
|
@@ -1422,18 +1440,19 @@ def synthesize_execution_lock(
|
|
|
1422
1440
|
keeps ``pipeline._RECIPE_STATIC_FILES`` intact and the synthesized documents are still sealed
|
|
1423
1441
|
into the candidate as honest evidence of what ran.
|
|
1424
1442
|
|
|
1425
|
-
``predecessor_execution`` is
|
|
1426
|
-
|
|
1427
|
-
|
|
1428
|
-
and passes
|
|
1443
|
+
``predecessor_execution`` is read out of the predecessor's AUTHENTICATED sealed receipt (the
|
|
1444
|
+
``table`` member it states), not out of the job document: the sealed member is the authority
|
|
1445
|
+
and the block is only the coordinate. The driver downloads the receipt, authenticates it by
|
|
1446
|
+
the block's digest and passes the record in. A non-``initial`` call without it refuses
|
|
1447
|
+
``PREDECESSOR_UNAVAILABLE`` rather
|
|
1429
1448
|
than guessing a version number, and the one value that appears in both places --
|
|
1430
1449
|
``table_version_id`` -- is cross-checked, so a spoofed block cannot rebind a run to a tree it
|
|
1431
1450
|
did not come from. (``candidate_digest`` has no counterpart on ``RecipeExecution``: the
|
|
1432
1451
|
``predecessor_candidate_digest`` member there names the predecessor's OWN predecessor, not
|
|
1433
1452
|
itself. Authenticating the digest against the restored tree is 401-04's, where the tree is.)
|
|
1434
1453
|
|
|
1435
|
-
``predecessor_source_states`` carries the per-source
|
|
1436
|
-
|
|
1454
|
+
``predecessor_source_states`` carries the per-source committed state read from the same
|
|
1455
|
+
receipt: for a registered document, the digest of the bytes each source was read as.
|
|
1437
1456
|
``_validate_recipe_execution`` requires one for every source of a non-``initial`` execution,
|
|
1438
1457
|
and the job document carries none, so 401-04 supplies them from the same restored tree.
|
|
1439
1458
|
|
|
@@ -75,7 +75,7 @@ import json
|
|
|
75
75
|
from collections.abc import Mapping, Sequence
|
|
76
76
|
from dataclasses import dataclass
|
|
77
77
|
from types import MappingProxyType
|
|
78
|
-
from typing import Any
|
|
78
|
+
from typing import Any, Protocol
|
|
79
79
|
|
|
80
80
|
from mostlyright.data_harness import pipeline
|
|
81
81
|
from mostlyright.data_harness.canonical import sha256_bytes
|
|
@@ -210,28 +210,39 @@ def _exact_candidate_replay(
|
|
|
210
210
|
# ------------------------------------------------------------------------------------------------
|
|
211
211
|
|
|
212
212
|
|
|
213
|
+
class PredecessorShape(Protocol):
|
|
214
|
+
"""The sealed shape a predecessor stated; the authenticated receipt record reads it."""
|
|
215
|
+
|
|
216
|
+
@property
|
|
217
|
+
def columns(self) -> tuple[tuple[str, str], ...]: ...
|
|
218
|
+
|
|
219
|
+
@property
|
|
220
|
+
def row_count(self) -> int | None: ...
|
|
221
|
+
|
|
222
|
+
|
|
213
223
|
def _recipe_drift(
|
|
214
224
|
job: Any,
|
|
215
225
|
snapshot: Mapping[str, bytes],
|
|
216
|
-
predecessor:
|
|
226
|
+
predecessor: PredecessorShape | None,
|
|
217
227
|
) -> ControlOutcome:
|
|
218
|
-
"""NOT_APPLICABLE on a first version; APPLIED on a refresh, against the
|
|
228
|
+
"""NOT_APPLICABLE on a first version; APPLIED on a refresh, against the predecessor record.
|
|
219
229
|
|
|
220
230
|
Every finding the older engine's drift report can raise is a comparison against a PREDECESSOR
|
|
221
231
|
version -- a column set that lost a column, a column whose type moved, a row count outside the
|
|
222
232
|
envelope a refresh policy stated. A ``sample`` or ``full`` creates version one and has nothing
|
|
223
233
|
on the other side of any of the three, so the control does not apply and the outcome says why.
|
|
224
234
|
|
|
225
|
-
A ``refresh`` continues from a predecessor this worker
|
|
226
|
-
comparison it can honestly make is the one both sealed
|
|
227
|
-
the closed logical type of every column
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
envelope, so any bound applied here
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
+
A ``refresh`` continues from a predecessor whose sealed receipt this worker authenticated, and
|
|
236
|
+
the comparison it can honestly make is the one both sealed records state exactly: the column
|
|
237
|
+
set and the closed logical type of every column -- the receipt's ``table.columns`` on one side
|
|
238
|
+
and this tree's ``evidence/profile.json`` on the other. A column that disappeared, appeared or
|
|
239
|
+
changed type is drift and the version is refused. The row count is reported and NOT judged:
|
|
240
|
+
the registered document has no member for a row-count envelope, so any bound applied here
|
|
241
|
+
would be one nobody set.
|
|
242
|
+
|
|
243
|
+
**THE PRECONDITION IS CHECKED EVERY RUN.** A refresh that reaches the seal with no
|
|
244
|
+
authenticated predecessor in hand is a worker fault -- something moved and this control was
|
|
245
|
+
not handed the record -- and is refused rather than sealed as compared to nothing.
|
|
235
246
|
"""
|
|
236
247
|
|
|
237
248
|
mode = engine_execution_mode(job)
|
|
@@ -248,10 +259,10 @@ def _recipe_drift(
|
|
|
248
259
|
raise _void(
|
|
249
260
|
"RECIPE_DRIFT",
|
|
250
261
|
f"this run continues from a predecessor as a {job.mode}, and the seal was handed no "
|
|
251
|
-
"
|
|
262
|
+
"authenticated predecessor record to compare the successor with",
|
|
252
263
|
)
|
|
253
|
-
before =
|
|
254
|
-
after =
|
|
264
|
+
before = _ProfileShape(columns=tuple(predecessor.columns), row_count=predecessor.row_count)
|
|
265
|
+
after = profile_shape(snapshot, "this version")
|
|
255
266
|
if before.columns != after.columns:
|
|
256
267
|
lost = [name for name, _ in before.columns if name not in dict(after.columns)]
|
|
257
268
|
added = [name for name, _ in after.columns if name not in dict(before.columns)]
|
|
@@ -287,8 +298,12 @@ class _ProfileShape:
|
|
|
287
298
|
row_count: int | None
|
|
288
299
|
|
|
289
300
|
|
|
290
|
-
def
|
|
291
|
-
"""The sealed column set and row count a tree's ``evidence/profile.json`` states.
|
|
301
|
+
def profile_shape(snapshot: Mapping[str, bytes], label: str) -> _ProfileShape:
|
|
302
|
+
"""The sealed column set and row count a tree's ``evidence/profile.json`` states.
|
|
303
|
+
|
|
304
|
+
Public because the receipt states this shape for the version it seals, so a later refresh
|
|
305
|
+
can compare against it without a tree to read: one reader for both sides of the comparison.
|
|
306
|
+
"""
|
|
292
307
|
|
|
293
308
|
try:
|
|
294
309
|
profile = json.loads(snapshot["evidence/profile.json"])
|
|
@@ -574,7 +589,7 @@ def run_required_controls(
|
|
|
574
589
|
verified: pipeline.VerifiedCandidate,
|
|
575
590
|
snapshot: Mapping[str, bytes],
|
|
576
591
|
coverage: Sequence[Any],
|
|
577
|
-
|
|
592
|
+
predecessor: PredecessorShape | None = None,
|
|
578
593
|
) -> tuple[ControlOutcome, ...]:
|
|
579
594
|
"""Evaluate every required control's disposition for one sealed version, in inventory order.
|
|
580
595
|
|
|
@@ -592,7 +607,7 @@ def run_required_controls(
|
|
|
592
607
|
reader looks for them in.
|
|
593
608
|
"""
|
|
594
609
|
|
|
595
|
-
drift = _recipe_drift(job, snapshot,
|
|
610
|
+
drift = _recipe_drift(job, snapshot, predecessor)
|
|
596
611
|
temporal = _temporal_integrity(job)
|
|
597
612
|
outcomes = (
|
|
598
613
|
_exact_candidate_replay(verified, snapshot),
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/skills/mr-data-build/scripts/write_visual_run.py
RENAMED
|
File without changes
|
|
File without changes
|
{mostlyright_data-0.10.6 → mostlyright_data-0.10.7}/src/mostlyright/_vendor/rapidocr/LICENSE
RENAMED
|
File without changes
|