firecube 0.1.4__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.
- firecube-0.1.4/.github/ISSUE_TEMPLATE/1-bug_report.yml +101 -0
- firecube-0.1.4/.github/ISSUE_TEMPLATE/2-feature_request.yml +73 -0
- firecube-0.1.4/.github/ISSUE_TEMPLATE/config.yml +8 -0
- firecube-0.1.4/.github/PULL_REQUEST_TEMPLATE.md +50 -0
- firecube-0.1.4/.github/dependabot.yml +11 -0
- firecube-0.1.4/.github/workflows/ci.yml +60 -0
- firecube-0.1.4/.github/workflows/publish.yml +62 -0
- firecube-0.1.4/.gitignore +54 -0
- firecube-0.1.4/.prompts/address-pr-comments.md +84 -0
- firecube-0.1.4/.prompts/doc-fact-check.md +97 -0
- firecube-0.1.4/.prompts/docs-policy.md +101 -0
- firecube-0.1.4/.prompts/improve-code-coverage.md +92 -0
- firecube-0.1.4/.prompts/improve-edge-cases.md +76 -0
- firecube-0.1.4/.prompts/improve-error-handling.md +74 -0
- firecube-0.1.4/.prompts/make-further-pass.md +74 -0
- firecube-0.1.4/.prompts/make-release.md +249 -0
- firecube-0.1.4/.prompts/prepare-make-pr.md +101 -0
- firecube-0.1.4/.prompts/write-internal-doc.md +69 -0
- firecube-0.1.4/.prompts/write-operator-doc.md +82 -0
- firecube-0.1.4/.prompts/write-plugin-doc.md +87 -0
- firecube-0.1.4/.prompts/write-user-doc.md +76 -0
- firecube-0.1.4/AGENTS.md +137 -0
- firecube-0.1.4/AUTHORS.md +5 -0
- firecube-0.1.4/CHANGELOG.md +219 -0
- firecube-0.1.4/CODE_OF_CONDUCT.md +75 -0
- firecube-0.1.4/CONTRIBUTING.md +256 -0
- firecube-0.1.4/LICENSE +201 -0
- firecube-0.1.4/Makefile +89 -0
- firecube-0.1.4/PKG-INFO +242 -0
- firecube-0.1.4/README.md +197 -0
- firecube-0.1.4/dist/.gitignore +1 -0
- firecube-0.1.4/docs/_macros.py +236 -0
- firecube-0.1.4/docs/assets/firecube-amblem-white.png +0 -0
- firecube-0.1.4/docs/assets/firecube-amblem-white.png.ABOUT +11 -0
- firecube-0.1.4/docs/assets/firecube-favicon.png +0 -0
- firecube-0.1.4/docs/assets/firecube-favicon.png.ABOUT +11 -0
- firecube-0.1.4/docs/assets/firecube-logo-title-2x.png +0 -0
- firecube-0.1.4/docs/assets/firecube-logo-title-2x.png.ABOUT +11 -0
- firecube-0.1.4/docs/assets/firecube-logo-title.png +0 -0
- firecube-0.1.4/docs/assets/firecube-logo-title.png.ABOUT +11 -0
- firecube-0.1.4/docs/assets/images/firecube-chunkmanager-records.svg +68 -0
- firecube-0.1.4/docs/assets/images/firecube-chunkmanager-records.svg.ABOUT +11 -0
- firecube-0.1.4/docs/assets/images/firecube-concepts-flow.svg +76 -0
- firecube-0.1.4/docs/assets/images/firecube-concepts-flow.svg.ABOUT +11 -0
- firecube-0.1.4/docs/assets/images/firecube-direct-zarr-region.svg +59 -0
- firecube-0.1.4/docs/assets/images/firecube-direct-zarr-region.svg.ABOUT +11 -0
- firecube-0.1.4/docs/assets/images/firecube-execution-shapes.svg +50 -0
- firecube-0.1.4/docs/assets/images/firecube-execution-shapes.svg.ABOUT +11 -0
- firecube-0.1.4/docs/assets/images/firecube-external-orchestrator-contract.svg +64 -0
- firecube-0.1.4/docs/assets/images/firecube-external-orchestrator-contract.svg.ABOUT +11 -0
- firecube-0.1.4/docs/assets/images/firecube-generic-zarr-append.svg +51 -0
- firecube-0.1.4/docs/assets/images/firecube-generic-zarr-append.svg.ABOUT +11 -0
- firecube-0.1.4/docs/assets/images/firecube-generic-zarr-parallel-groups.svg +65 -0
- firecube-0.1.4/docs/assets/images/firecube-generic-zarr-parallel-groups.svg.ABOUT +11 -0
- firecube-0.1.4/docs/assets/images/firecube-observability-signals.svg +64 -0
- firecube-0.1.4/docs/assets/images/firecube-observability-signals.svg.ABOUT +11 -0
- firecube-0.1.4/docs/assets/images/firecube-orchestration-overview.svg +66 -0
- firecube-0.1.4/docs/assets/images/firecube-orchestration-overview.svg.ABOUT +11 -0
- firecube-0.1.4/docs/assets/images/firecube-orchestration-write-safety.svg +52 -0
- firecube-0.1.4/docs/assets/images/firecube-orchestration-write-safety.svg.ABOUT +11 -0
- firecube-0.1.4/docs/assets/images/firecube-output-format-choice.svg +48 -0
- firecube-0.1.4/docs/assets/images/firecube-output-format-choice.svg.ABOUT +11 -0
- firecube-0.1.4/docs/assets/images/firecube-parallel-zarr-slots.svg +57 -0
- firecube-0.1.4/docs/assets/images/firecube-parallel-zarr-slots.svg.ABOUT +11 -0
- firecube-0.1.4/docs/assets/images/firecube-parallelism-models.svg +79 -0
- firecube-0.1.4/docs/assets/images/firecube-parallelism-models.svg.ABOUT +11 -0
- firecube-0.1.4/docs/assets/images/firecube-parquet-file-layout.svg +60 -0
- firecube-0.1.4/docs/assets/images/firecube-parquet-file-layout.svg.ABOUT +11 -0
- firecube-0.1.4/docs/assets/images/firecube-performance-bottlenecks.svg +58 -0
- firecube-0.1.4/docs/assets/images/firecube-performance-bottlenecks.svg.ABOUT +11 -0
- firecube-0.1.4/docs/assets/images/firecube-storage-chunkmanager-flow.svg +57 -0
- firecube-0.1.4/docs/assets/images/firecube-storage-chunkmanager-flow.svg.ABOUT +11 -0
- firecube-0.1.4/docs/assets/images/firecube-tensogram-flow.svg +51 -0
- firecube-0.1.4/docs/assets/images/firecube-tensogram-flow.svg.ABOUT +11 -0
- firecube-0.1.4/docs/assets/images/firecube-zarr-store-layout.svg +70 -0
- firecube-0.1.4/docs/assets/images/firecube-zarr-store-layout.svg.ABOUT +11 -0
- firecube-0.1.4/docs/concepts/benchmarks.md +81 -0
- firecube-0.1.4/docs/concepts/best-practices.md +44 -0
- firecube-0.1.4/docs/concepts/chunk-management.md +65 -0
- firecube-0.1.4/docs/concepts/chunkmanager.md +47 -0
- firecube-0.1.4/docs/concepts/configuration.md +158 -0
- firecube-0.1.4/docs/concepts/glossary.md +65 -0
- firecube-0.1.4/docs/concepts/index.md +66 -0
- firecube-0.1.4/docs/concepts/observability/index.md +52 -0
- firecube-0.1.4/docs/concepts/observability/logs.md +73 -0
- firecube-0.1.4/docs/concepts/observability/metrics.md +112 -0
- firecube-0.1.4/docs/concepts/observability/traces.md +86 -0
- firecube-0.1.4/docs/concepts/orchestration/execution-shapes.md +55 -0
- firecube-0.1.4/docs/concepts/orchestration/external-orchestrator.md +55 -0
- firecube-0.1.4/docs/concepts/orchestration/retries.md +73 -0
- firecube-0.1.4/docs/concepts/orchestration/write-safety.md +50 -0
- firecube-0.1.4/docs/concepts/orchestration.md +51 -0
- firecube-0.1.4/docs/concepts/output-formats/archive.md +56 -0
- firecube-0.1.4/docs/concepts/output-formats/index.md +42 -0
- firecube-0.1.4/docs/concepts/output-formats/parquet.md +72 -0
- firecube-0.1.4/docs/concepts/output-formats/zarr/direct-region.md +66 -0
- firecube-0.1.4/docs/concepts/output-formats/zarr/generic-append.md +67 -0
- firecube-0.1.4/docs/concepts/output-formats/zarr/index.md +49 -0
- firecube-0.1.4/docs/concepts/output-formats/zarr/parallel-writes.md +232 -0
- firecube-0.1.4/docs/concepts/parallelism.md +89 -0
- firecube-0.1.4/docs/concepts/performance.md +163 -0
- firecube-0.1.4/docs/concepts/plugins/base-ingestor.md +134 -0
- firecube-0.1.4/docs/concepts/plugins/cli-and-config.md +177 -0
- firecube-0.1.4/docs/concepts/plugins/contract.md +232 -0
- firecube-0.1.4/docs/concepts/plugins/create-a-plugin.md +83 -0
- firecube-0.1.4/docs/concepts/plugins/direct-zarr.md +119 -0
- firecube-0.1.4/docs/concepts/plugins/generic-parquet.md +69 -0
- firecube-0.1.4/docs/concepts/plugins/generic-zarr.md +79 -0
- firecube-0.1.4/docs/concepts/plugins/index.md +46 -0
- firecube-0.1.4/docs/concepts/plugins/mixins.md +52 -0
- firecube-0.1.4/docs/concepts/plugins/observability.md +185 -0
- firecube-0.1.4/docs/concepts/plugins/storage-access.md +115 -0
- firecube-0.1.4/docs/concepts/production-guide.md +161 -0
- firecube-0.1.4/docs/concepts/storage.md +101 -0
- firecube-0.1.4/docs/contributing/firecube-contributors.md +159 -0
- firecube-0.1.4/docs/contributing/index.md +34 -0
- firecube-0.1.4/docs/contributing/plugin-authors.md +104 -0
- firecube-0.1.4/docs/index.md +65 -0
- firecube-0.1.4/docs/operations/archive/create.md +92 -0
- firecube-0.1.4/docs/operations/archive/index.md +43 -0
- firecube-0.1.4/docs/operations/archive/inspect.md +106 -0
- firecube-0.1.4/docs/operations/archive/restore.md +86 -0
- firecube-0.1.4/docs/operations/chunk-manager/delete.md +204 -0
- firecube-0.1.4/docs/operations/chunk-manager/index.md +63 -0
- firecube-0.1.4/docs/operations/chunk-manager/inspect.md +182 -0
- firecube-0.1.4/docs/operations/chunk-manager/post-crash-recovery.md +194 -0
- firecube-0.1.4/docs/operations/chunk-manager/recover.md +163 -0
- firecube-0.1.4/docs/operations/chunk-manager/snapshots.md +96 -0
- firecube-0.1.4/docs/operations/index.md +65 -0
- firecube-0.1.4/docs/quickstart/catalogs.md +85 -0
- firecube-0.1.4/docs/quickstart/configuration.md +56 -0
- firecube-0.1.4/docs/quickstart/index.md +34 -0
- firecube-0.1.4/docs/quickstart/ingestion.md +168 -0
- firecube-0.1.4/docs/quickstart/installation.md +38 -0
- firecube-0.1.4/docs/quickstart/plugins.md +105 -0
- firecube-0.1.4/docs/reference/api.md +487 -0
- firecube-0.1.4/docs/reference/cli.md +152 -0
- firecube-0.1.4/docs/reference/config.md +157 -0
- firecube-0.1.4/docs/reference/observability.md +136 -0
- firecube-0.1.4/docs/reference/storage-drivers.md +69 -0
- firecube-0.1.4/docs/tutorials/direct-zarr-parallel.md +386 -0
- firecube-0.1.4/docs/tutorials/index.md +36 -0
- firecube-0.1.4/docs/tutorials/observability.md +118 -0
- firecube-0.1.4/docs/tutorials/sentinel3-frp.md +241 -0
- firecube-0.1.4/docs/tutorials/source-discovery.md +148 -0
- firecube-0.1.4/docs/tutorials/weather-csv.md +278 -0
- firecube-0.1.4/mkdocs.yml +161 -0
- firecube-0.1.4/plans/DESIGN.md +128 -0
- firecube-0.1.4/plans/DONE.md +1385 -0
- firecube-0.1.4/plans/IDEAS.md +263 -0
- firecube-0.1.4/plans/RELEASE.md +138 -0
- firecube-0.1.4/plans/STYLE.md +63 -0
- firecube-0.1.4/plans/TEST.md +144 -0
- firecube-0.1.4/plans/TESTING_STANDARDS.md +269 -0
- firecube-0.1.4/plans/TEST_GAPS.md +99 -0
- firecube-0.1.4/plans/TODO.md +376 -0
- firecube-0.1.4/pyproject.toml +132 -0
- firecube-0.1.4/src/firecube/__init__.py +23 -0
- firecube-0.1.4/src/firecube/__main__.py +20 -0
- firecube-0.1.4/src/firecube/_version.py +46 -0
- firecube-0.1.4/src/firecube/cli/_audience.py +135 -0
- firecube-0.1.4/src/firecube/cli/_command_schemas.py +112 -0
- firecube-0.1.4/src/firecube/cli/_ctx.py +85 -0
- firecube-0.1.4/src/firecube/cli/_errors.py +115 -0
- firecube-0.1.4/src/firecube/cli/_formatter.py +195 -0
- firecube-0.1.4/src/firecube/cli/_product.py +47 -0
- firecube-0.1.4/src/firecube/cli/_rename_hints.py +123 -0
- firecube-0.1.4/src/firecube/cli/_shared_options.py +247 -0
- firecube-0.1.4/src/firecube/cli/_slot_env.py +102 -0
- firecube-0.1.4/src/firecube/cli/_slot_planning.py +95 -0
- firecube-0.1.4/src/firecube/cli/_typed_options.py +181 -0
- firecube-0.1.4/src/firecube/cli/_uri_policy.py +110 -0
- firecube-0.1.4/src/firecube/cli/advise.py +321 -0
- firecube-0.1.4/src/firecube/cli/archive.py +870 -0
- firecube-0.1.4/src/firecube/cli/catalog.py +196 -0
- firecube-0.1.4/src/firecube/cli/chunks/__init__.py +74 -0
- firecube-0.1.4/src/firecube/cli/chunks/_claims.py +229 -0
- firecube-0.1.4/src/firecube/cli/chunks/_common.py +84 -0
- firecube-0.1.4/src/firecube/cli/chunks/_delete.py +376 -0
- firecube-0.1.4/src/firecube/cli/chunks/_list.py +334 -0
- firecube-0.1.4/src/firecube/cli/chunks/_manager.py +161 -0
- firecube-0.1.4/src/firecube/cli/chunks/_runs.py +294 -0
- firecube-0.1.4/src/firecube/cli/chunks/_snapshots.py +165 -0
- firecube-0.1.4/src/firecube/cli/completion.py +73 -0
- firecube-0.1.4/src/firecube/cli/main.py +866 -0
- firecube-0.1.4/src/firecube/cli/parquet.py +289 -0
- firecube-0.1.4/src/firecube/cli/plugins/__init__.py +28 -0
- firecube-0.1.4/src/firecube/cli/plugins/commands.py +262 -0
- firecube-0.1.4/src/firecube/cli/plugins/introspect.py +304 -0
- firecube-0.1.4/src/firecube/cli/plugins/mgmt.py +198 -0
- firecube-0.1.4/src/firecube/cli/plugins/registry.py +132 -0
- firecube-0.1.4/src/firecube/cli/zarr.py +1043 -0
- firecube-0.1.4/src/firecube/core/__init__.py +14 -0
- firecube-0.1.4/src/firecube/core/api.py +88 -0
- firecube-0.1.4/src/firecube/core/cf/__init__.py +23 -0
- firecube-0.1.4/src/firecube/core/cf/check_ids.py +126 -0
- firecube-0.1.4/src/firecube/core/cf/report.py +57 -0
- firecube-0.1.4/src/firecube/core/cf/validator.py +313 -0
- firecube-0.1.4/src/firecube/core/config.py +307 -0
- firecube-0.1.4/src/firecube/core/controlplane/__init__.py +47 -0
- firecube-0.1.4/src/firecube/core/controlplane/_event_processor.py +136 -0
- firecube-0.1.4/src/firecube/core/controlplane/_helpers.py +114 -0
- firecube-0.1.4/src/firecube/core/controlplane/_projection.py +253 -0
- firecube-0.1.4/src/firecube/core/controlplane/_snapshot.py +215 -0
- firecube-0.1.4/src/firecube/core/controlplane/_wal_reader.py +402 -0
- firecube-0.1.4/src/firecube/core/controlplane/_wal_writer.py +589 -0
- firecube-0.1.4/src/firecube/core/controlplane/claims.py +294 -0
- firecube-0.1.4/src/firecube/core/controlplane/deletion.py +704 -0
- firecube-0.1.4/src/firecube/core/controlplane/events.py +219 -0
- firecube-0.1.4/src/firecube/core/controlplane/manager.py +990 -0
- firecube-0.1.4/src/firecube/core/controlplane/metrics.py +97 -0
- firecube-0.1.4/src/firecube/core/controlplane/repo.py +804 -0
- firecube-0.1.4/src/firecube/core/controlplane/repo_utils.py +73 -0
- firecube-0.1.4/src/firecube/core/controlplane/time_dim.py +111 -0
- firecube-0.1.4/src/firecube/core/controlplane/types.py +445 -0
- firecube-0.1.4/src/firecube/core/credentials.py +36 -0
- firecube-0.1.4/src/firecube/core/duckdb/__init__.py +27 -0
- firecube-0.1.4/src/firecube/core/duckdb/bridge.py +82 -0
- firecube-0.1.4/src/firecube/core/duckdb/io.py +30 -0
- firecube-0.1.4/src/firecube/core/errors.py +74 -0
- firecube-0.1.4/src/firecube/core/filesystem/__init__.py +60 -0
- firecube-0.1.4/src/firecube/core/filesystem/_obstore_compat.py +60 -0
- firecube-0.1.4/src/firecube/core/filesystem/fsspec_backend.py +308 -0
- firecube-0.1.4/src/firecube/core/filesystem/instrumentation.py +260 -0
- firecube-0.1.4/src/firecube/core/filesystem/obstore_backend.py +406 -0
- firecube-0.1.4/src/firecube/core/filesystem/ops.py +412 -0
- firecube-0.1.4/src/firecube/core/filesystem/protocol.py +130 -0
- firecube-0.1.4/src/firecube/core/filesystem/store_factory.py +149 -0
- firecube-0.1.4/src/firecube/core/formats/__init__.py +46 -0
- firecube-0.1.4/src/firecube/core/formats/_iso.py +84 -0
- firecube-0.1.4/src/firecube/core/formats/discovery.py +165 -0
- firecube-0.1.4/src/firecube/core/formats/hdf5.py +137 -0
- firecube-0.1.4/src/firecube/core/formats/netcdf.py +226 -0
- firecube-0.1.4/src/firecube/core/formats/zip.py +192 -0
- firecube-0.1.4/src/firecube/core/intake.py +530 -0
- firecube-0.1.4/src/firecube/core/observability/__init__.py +72 -0
- firecube-0.1.4/src/firecube/core/observability/_state.py +24 -0
- firecube-0.1.4/src/firecube/core/observability/logging.py +147 -0
- firecube-0.1.4/src/firecube/core/observability/metrics.py +230 -0
- firecube-0.1.4/src/firecube/core/observability/telemetry/__init__.py +87 -0
- firecube-0.1.4/src/firecube/core/observability/telemetry/pushgateway.py +339 -0
- firecube-0.1.4/src/firecube/core/observability/telemetry/sinks.py +155 -0
- firecube-0.1.4/src/firecube/core/observability/tracing.py +126 -0
- firecube-0.1.4/src/firecube/core/product/__init__.py +45 -0
- firecube-0.1.4/src/firecube/core/product/identity.py +76 -0
- firecube-0.1.4/src/firecube/core/product/resolver.py +121 -0
- firecube-0.1.4/src/firecube/core/product/target.py +120 -0
- firecube-0.1.4/src/firecube/core/runtime.py +187 -0
- firecube-0.1.4/src/firecube/core/slot_index.py +205 -0
- firecube-0.1.4/src/firecube/core/storage/__init__.py +45 -0
- firecube-0.1.4/src/firecube/core/storage/binding.py +39 -0
- firecube-0.1.4/src/firecube/core/storage/cache_key.py +40 -0
- firecube-0.1.4/src/firecube/core/storage/completion.py +245 -0
- firecube-0.1.4/src/firecube/core/storage/driver_config.py +125 -0
- firecube-0.1.4/src/firecube/core/storage/results.py +30 -0
- firecube-0.1.4/src/firecube/core/storage/session.py +431 -0
- firecube-0.1.4/src/firecube/core/storage/transfer.py +142 -0
- firecube-0.1.4/src/firecube/core/storage/uri.py +173 -0
- firecube-0.1.4/src/firecube/core/tensogram/__init__.py +37 -0
- firecube-0.1.4/src/firecube/core/tensogram/_compat.py +36 -0
- firecube-0.1.4/src/firecube/core/tensogram/controlplane_codec.py +230 -0
- firecube-0.1.4/src/firecube/core/tensogram/converter.py +390 -0
- firecube-0.1.4/src/firecube/core/tensogram/metadata.py +274 -0
- firecube-0.1.4/src/firecube/core/tensogram/restore.py +303 -0
- firecube-0.1.4/src/firecube/core/tensogram/schema.py +93 -0
- firecube-0.1.4/src/firecube/core/uris.py +182 -0
- firecube-0.1.4/src/firecube/core/workspaces.py +68 -0
- firecube-0.1.4/src/firecube/core/zarr/__init__.py +69 -0
- firecube-0.1.4/src/firecube/core/zarr/_reserved_attrs.py +47 -0
- firecube-0.1.4/src/firecube/core/zarr/_reserved_root_attrs.py +74 -0
- firecube-0.1.4/src/firecube/core/zarr/io.py +88 -0
- firecube-0.1.4/src/firecube/core/zarr/layers.py +184 -0
- firecube-0.1.4/src/firecube/core/zarr/multires.py +178 -0
- firecube-0.1.4/src/firecube/core/zarr/region_writer.py +782 -0
- firecube-0.1.4/src/firecube/core/zarr/scrub.py +200 -0
- firecube-0.1.4/src/firecube/core/zarr/state.py +258 -0
- firecube-0.1.4/src/firecube/core/zarr/time_decode.py +71 -0
- firecube-0.1.4/src/firecube/core/zarr/validation.py +622 -0
- firecube-0.1.4/src/firecube/ingestor/__init__.py +27 -0
- firecube-0.1.4/src/firecube/ingestor/api.py +215 -0
- firecube-0.1.4/src/firecube/ingestor/config/__init__.py +19 -0
- firecube-0.1.4/src/firecube/ingestor/config/coercion.py +157 -0
- firecube-0.1.4/src/firecube/ingestor/config/engine.py +188 -0
- firecube-0.1.4/src/firecube/ingestor/contracts/__init__.py +14 -0
- firecube-0.1.4/src/firecube/ingestor/contracts/interfaces.py +235 -0
- firecube-0.1.4/src/firecube/ingestor/devtools/_templates/__init__.py +14 -0
- firecube-0.1.4/src/firecube/ingestor/devtools/_templates/ingestor_base.py.tpl +72 -0
- firecube-0.1.4/src/firecube/ingestor/devtools/_templates/ingestor_direct_zarr.py.tpl +66 -0
- firecube-0.1.4/src/firecube/ingestor/devtools/_templates/ingestor_parquet.py.tpl +59 -0
- firecube-0.1.4/src/firecube/ingestor/devtools/_templates/ingestor_zarr.py.tpl +55 -0
- firecube-0.1.4/src/firecube/ingestor/devtools/_templates/readme.md.tpl +40 -0
- firecube-0.1.4/src/firecube/ingestor/devtools/scaffolding.py +229 -0
- firecube-0.1.4/src/firecube/ingestor/errors.py +79 -0
- firecube-0.1.4/src/firecube/ingestor/extensions/_binning.py +152 -0
- firecube-0.1.4/src/firecube/ingestor/extensions/duck.py +153 -0
- firecube-0.1.4/src/firecube/ingestor/extensions/grid.py +287 -0
- firecube-0.1.4/src/firecube/ingestor/extensions/healpix.py +330 -0
- firecube-0.1.4/src/firecube/ingestor/registry/__init__.py +14 -0
- firecube-0.1.4/src/firecube/ingestor/registry/loader.py +144 -0
- firecube-0.1.4/src/firecube/ingestor/registry/metadata.py +97 -0
- firecube-0.1.4/src/firecube/ingestor/registry/version_compat.py +95 -0
- firecube-0.1.4/src/firecube/ingestor/runtime/__init__.py +14 -0
- firecube-0.1.4/src/firecube/ingestor/runtime/aggregation.py +112 -0
- firecube-0.1.4/src/firecube/ingestor/runtime/base.py +836 -0
- firecube-0.1.4/src/firecube/ingestor/runtime/base_hooks.py +129 -0
- firecube-0.1.4/src/firecube/ingestor/runtime/batching.py +161 -0
- firecube-0.1.4/src/firecube/ingestor/runtime/configure.py +195 -0
- firecube-0.1.4/src/firecube/ingestor/runtime/coverage.py +177 -0
- firecube-0.1.4/src/firecube/ingestor/runtime/engine.py +793 -0
- firecube-0.1.4/src/firecube/ingestor/runtime/parallel_evidence.py +75 -0
- firecube-0.1.4/src/firecube/ingestor/runtime/parallel_execution_state.py +28 -0
- firecube-0.1.4/src/firecube/ingestor/runtime/parallel_gate.py +164 -0
- firecube-0.1.4/src/firecube/ingestor/runtime/parallel_run_id.py +48 -0
- firecube-0.1.4/src/firecube/ingestor/runtime/preflight.py +40 -0
- firecube-0.1.4/src/firecube/ingestor/runtime/recording.py +425 -0
- firecube-0.1.4/src/firecube/ingestor/runtime/resume_guard.py +556 -0
- firecube-0.1.4/src/firecube/ingestor/runtime/resume_types.py +65 -0
- firecube-0.1.4/src/firecube/ingestor/runtime/telemetry.py +171 -0
- firecube-0.1.4/src/firecube/ingestor/runtime/tensogram/__init__.py +14 -0
- firecube-0.1.4/src/firecube/ingestor/runtime/tensogram/strategy.py +164 -0
- firecube-0.1.4/src/firecube/ingestor/runtime/workspace.py +220 -0
- firecube-0.1.4/src/firecube/ingestor/runtime/zarr/__init__.py +34 -0
- firecube-0.1.4/src/firecube/ingestor/runtime/zarr/append.py +466 -0
- firecube-0.1.4/src/firecube/ingestor/runtime/zarr/append_services.py +650 -0
- firecube-0.1.4/src/firecube/ingestor/runtime/zarr/batch_runner.py +190 -0
- firecube-0.1.4/src/firecube/ingestor/runtime/zarr/contracts.py +58 -0
- firecube-0.1.4/src/firecube/ingestor/runtime/zarr/existing_cube_check.py +282 -0
- firecube-0.1.4/src/firecube/ingestor/runtime/zarr/resume_cache.py +92 -0
- firecube-0.1.4/src/firecube/ingestor/runtime/zarr/staged_metadata.py +249 -0
- firecube-0.1.4/src/firecube/ingestor/runtime/zarr/strategies/__init__.py +15 -0
- firecube-0.1.4/src/firecube/ingestor/runtime/zarr/strategies/append.py +172 -0
- firecube-0.1.4/src/firecube/ingestor/runtime/zarr/strategies/indexed_region.py +426 -0
- firecube-0.1.4/src/firecube/ingestor/runtime/zarr/write.py +212 -0
- firecube-0.1.4/src/firecube/ingestor/runtime/zarr/write_context.py +139 -0
- firecube-0.1.4/src/firecube/ingestor/templates/__init__.py +19 -0
- firecube-0.1.4/src/firecube/ingestor/templates/config.py +118 -0
- firecube-0.1.4/src/firecube/ingestor/templates/direct_zarr.py +790 -0
- firecube-0.1.4/src/firecube/ingestor/templates/generic.py +462 -0
- firecube-0.1.4/src/firecube/ingestor/templates/generic_tensogram.py +170 -0
- firecube-0.1.4/src/firecube/ingestor/types/__init__.py +19 -0
- firecube-0.1.4/src/firecube/ingestor/types/config.py +89 -0
- firecube-0.1.4/src/firecube/ingestor/types/context.py +409 -0
- firecube-0.1.4/src/firecube/ingestor/types/manifest.py +53 -0
- firecube-0.1.4/src/firecube/ingestor/types/planned_range.py +152 -0
- firecube-0.1.4/src/firecube/ingestor/types/result_metrics.py +386 -0
- firecube-0.1.4/src/firecube/ingestor/utils/__init__.py +14 -0
- firecube-0.1.4/src/firecube/ingestor/utils/duckdb_utils.py +235 -0
- firecube-0.1.4/src/firecube/ingestor/validation.py +55 -0
- firecube-0.1.4/tests/README.md +93 -0
- firecube-0.1.4/tests/__init__.py +15 -0
- firecube-0.1.4/tests/architecture/conftest.py +22 -0
- firecube-0.1.4/tests/architecture/test_chunks_manager_no_parent_reconstruction.py +30 -0
- firecube-0.1.4/tests/architecture/test_core_independence.py +70 -0
- firecube-0.1.4/tests/architecture/test_import_boundaries.py +114 -0
- firecube-0.1.4/tests/architecture/test_no_cli_inference.py +140 -0
- firecube-0.1.4/tests/architecture/test_no_internal_output_path_reads.py +49 -0
- firecube-0.1.4/tests/architecture/test_no_naked_fill_value_comparison.py +139 -0
- firecube-0.1.4/tests/architecture/test_no_raw_pd_timestamp_numeric.py +136 -0
- firecube-0.1.4/tests/architecture/test_no_storage_config_subclasses.py +92 -0
- firecube-0.1.4/tests/architecture/test_no_unguarded_time_count_substitution.py +167 -0
- firecube-0.1.4/tests/architecture/test_plugin_isolation.py +97 -0
- firecube-0.1.4/tests/architecture/test_product_name_required.py +44 -0
- firecube-0.1.4/tests/architecture/test_storage_driver_config_boundary.py +112 -0
- firecube-0.1.4/tests/architecture/test_storage_flows.py +881 -0
- firecube-0.1.4/tests/architecture/test_storage_redaction.py +335 -0
- firecube-0.1.4/tests/architecture/test_storage_type_coherence.py +199 -0
- firecube-0.1.4/tests/architecture/test_typed_pipeline_result.py +53 -0
- firecube-0.1.4/tests/benchmarks/__init__.py +14 -0
- firecube-0.1.4/tests/benchmarks/bench_resume_queries.py +214 -0
- firecube-0.1.4/tests/cli/__init__.py +14 -0
- firecube-0.1.4/tests/cli/_cli_introspection.py +201 -0
- firecube-0.1.4/tests/cli/_command_contracts.py +366 -0
- firecube-0.1.4/tests/cli/conftest.py +30 -0
- firecube-0.1.4/tests/cli/test_advise_batch_size_contract.py +77 -0
- firecube-0.1.4/tests/cli/test_advise_compliance_contract.py +150 -0
- firecube-0.1.4/tests/cli/test_archive_artifact_uri_contract.py +73 -0
- firecube-0.1.4/tests/cli/test_archive_create_contract.py +99 -0
- firecube-0.1.4/tests/cli/test_archive_no_double_pass.py +74 -0
- firecube-0.1.4/tests/cli/test_archive_restore_contract.py +61 -0
- firecube-0.1.4/tests/cli/test_audience_groups.py +80 -0
- firecube-0.1.4/tests/cli/test_catalog_intake_contract.py +182 -0
- firecube-0.1.4/tests/cli/test_chunks_manager_typed.py +165 -0
- firecube-0.1.4/tests/cli/test_chunks_storage_banner.py +155 -0
- firecube-0.1.4/tests/cli/test_cli_contract_matrix.py +110 -0
- firecube-0.1.4/tests/cli/test_cli_introspection_drift.py +42 -0
- firecube-0.1.4/tests/cli/test_click_error_boundary.py +80 -0
- firecube-0.1.4/tests/cli/test_help_conformance.py +93 -0
- firecube-0.1.4/tests/cli/test_ingest_decorator_consistency.py +113 -0
- firecube-0.1.4/tests/cli/test_parquet_consolidate_output_artifact.py +56 -0
- firecube-0.1.4/tests/cli/test_parquet_validate_contract.py +118 -0
- firecube-0.1.4/tests/cli/test_per_command_contracts.py +269 -0
- firecube-0.1.4/tests/cli/test_rename_hints.py +138 -0
- firecube-0.1.4/tests/cli/test_runs_list_slot_fields.py +100 -0
- firecube-0.1.4/tests/cli/test_shared_options.py +75 -0
- firecube-0.1.4/tests/cli/test_uri_scheme_policy.py +177 -0
- firecube-0.1.4/tests/cli/test_zarr_multires_contract.py +65 -0
- firecube-0.1.4/tests/cli/test_zarr_validate_contract.py +125 -0
- firecube-0.1.4/tests/conftest.py +269 -0
- firecube-0.1.4/tests/fixtures/cf_dataset_fixtures.py +114 -0
- firecube-0.1.4/tests/fixtures/cf_time_dim_test_plugin/pyproject.toml +15 -0
- firecube-0.1.4/tests/fixtures/cf_time_dim_test_plugin/src/cf_time_dim_test_plugin/__init__.py +17 -0
- firecube-0.1.4/tests/fixtures/cf_time_dim_test_plugin/src/cf_time_dim_test_plugin/ingestor.py +180 -0
- firecube-0.1.4/tests/fixtures/cli_test_plugin/pyproject.toml +11 -0
- firecube-0.1.4/tests/fixtures/cli_test_plugin/src/cli_test_plugin/__init__.py +57 -0
- firecube-0.1.4/tests/fixtures/demo_plugin/pyproject.toml +22 -0
- firecube-0.1.4/tests/fixtures/demo_plugin/src/demo_plugin/__init__.py +14 -0
- firecube-0.1.4/tests/fixtures/demo_plugin/src/demo_plugin/plugin.py +46 -0
- firecube-0.1.4/tests/fixtures/demo_plugin/src/demo_plugin/plugin_cli.py +28 -0
- firecube-0.1.4/tests/fixtures/direct_zarr_capable_test_plugin/pyproject.toml +11 -0
- firecube-0.1.4/tests/fixtures/direct_zarr_capable_test_plugin/src/direct_zarr_capable_test_plugin/__init__.py +106 -0
- firecube-0.1.4/tests/fixtures/direct_zarr_non_capable_test_plugin/pyproject.toml +11 -0
- firecube-0.1.4/tests/fixtures/direct_zarr_non_capable_test_plugin/src/direct_zarr_non_capable_test_plugin/__init__.py +62 -0
- firecube-0.1.4/tests/fixtures/multi_group_capable_test_plugin/pyproject.toml +14 -0
- firecube-0.1.4/tests/fixtures/multi_group_capable_test_plugin/src/multi_group_capable_test_plugin/__init__.py +183 -0
- firecube-0.1.4/tests/fixtures/slot_shape_test_plugin/pyproject.toml +12 -0
- firecube-0.1.4/tests/fixtures/slot_shape_test_plugin/src/slot_shape_test_plugin/__init__.py +135 -0
- firecube-0.1.4/tests/fixtures/test_stub_ingestor/__init__.py +17 -0
- firecube-0.1.4/tests/fixtures/test_stub_ingestor/plugin.py +43 -0
- firecube-0.1.4/tests/fixtures/test_stub_ingestor/run_firecube.py +30 -0
- firecube-0.1.4/tests/helpers/__init__.py +14 -0
- firecube-0.1.4/tests/helpers/storage.py +200 -0
- firecube-0.1.4/tests/helpers/test_storage_helpers.py +155 -0
- firecube-0.1.4/tests/ingestor/test_config_architecture.py +195 -0
- firecube-0.1.4/tests/ingestor/test_refactor_safeties.py +57 -0
- firecube-0.1.4/tests/integration/__init__.py +15 -0
- firecube-0.1.4/tests/integration/_bt_helpers.py +281 -0
- firecube-0.1.4/tests/integration/test_append_strategy_behavior.py +168 -0
- firecube-0.1.4/tests/integration/test_architecture_invariants.py +520 -0
- firecube-0.1.4/tests/integration/test_archive_drivers.py +98 -0
- firecube-0.1.4/tests/integration/test_archive_remote.py +90 -0
- firecube-0.1.4/tests/integration/test_archive_restore_audit.py +292 -0
- firecube-0.1.4/tests/integration/test_cf_time_dim_telemetry.py +180 -0
- firecube-0.1.4/tests/integration/test_cf_time_dim_value_dedup.py +125 -0
- firecube-0.1.4/tests/integration/test_cli_advise_compliance.py +222 -0
- firecube-0.1.4/tests/integration/test_cli_chunks_fallback_unchanged.py +276 -0
- firecube-0.1.4/tests/integration/test_cli_chunks_runs_target.py +353 -0
- firecube-0.1.4/tests/integration/test_cli_chunks_s3_basename_mismatch.py +139 -0
- firecube-0.1.4/tests/integration/test_cli_chunks_storage_config_fallback.py +120 -0
- firecube-0.1.4/tests/integration/test_cli_fresh_target_ingest.py +149 -0
- firecube-0.1.4/tests/integration/test_cli_inference_baseline.py +79 -0
- firecube-0.1.4/tests/integration/test_cli_input_data_presence.py +247 -0
- firecube-0.1.4/tests/integration/test_cli_plugin_shims.py +42 -0
- firecube-0.1.4/tests/integration/test_cli_zarr_preallocate_lifecycle.py +191 -0
- firecube-0.1.4/tests/integration/test_cli_zarr_preallocate_slot_index.py +259 -0
- firecube-0.1.4/tests/integration/test_cli_zarr_preallocate_spec_attrs.py +165 -0
- firecube-0.1.4/tests/integration/test_cli_zarr_preallocate_typed_config.py +179 -0
- firecube-0.1.4/tests/integration/test_compat_matrix.py +131 -0
- firecube-0.1.4/tests/integration/test_concurrent_same_product.py +319 -0
- firecube-0.1.4/tests/integration/test_crash_recovery_bulk_sweep.py +415 -0
- firecube-0.1.4/tests/integration/test_direct_zarr_parity_slot_range.py +244 -0
- firecube-0.1.4/tests/integration/test_direct_zarr_schema_claim_retry.py +209 -0
- firecube-0.1.4/tests/integration/test_direct_zarr_startup_slot_index.py +379 -0
- firecube-0.1.4/tests/integration/test_direct_zarr_xr_open_roundtrip.py +228 -0
- firecube-0.1.4/tests/integration/test_driver_compliance_vertical_slice.py +139 -0
- firecube-0.1.4/tests/integration/test_e2e_time_dim_plugin.py +232 -0
- firecube-0.1.4/tests/integration/test_engine_failed_batch_wal.py +97 -0
- firecube-0.1.4/tests/integration/test_existing_cube_check_directzarr.py +84 -0
- firecube-0.1.4/tests/integration/test_existing_cube_check_multigroup_plugin.py +65 -0
- firecube-0.1.4/tests/integration/test_existing_cube_check_parallel_path.py +128 -0
- firecube-0.1.4/tests/integration/test_existing_cube_check_static_arrays.py +75 -0
- firecube-0.1.4/tests/integration/test_existing_cube_mismatch.py +218 -0
- firecube-0.1.4/tests/integration/test_force_reingest_state.py +695 -0
- firecube-0.1.4/tests/integration/test_indexed_region_behavior.py +187 -0
- firecube-0.1.4/tests/integration/test_ingest_command_typed.py +230 -0
- firecube-0.1.4/tests/integration/test_maintenance_audit.py +359 -0
- firecube-0.1.4/tests/integration/test_maintenance_claims.py +219 -0
- firecube-0.1.4/tests/integration/test_obstore_claim_atomicity.py +207 -0
- firecube-0.1.4/tests/integration/test_obstore_s3_keys.py +221 -0
- firecube-0.1.4/tests/integration/test_obstore_streaming_upload.py +344 -0
- firecube-0.1.4/tests/integration/test_one_driver_invariant.py +295 -0
- firecube-0.1.4/tests/integration/test_ordering_pollution_regression.py +145 -0
- firecube-0.1.4/tests/integration/test_otel_context_concurrency.py +435 -0
- firecube-0.1.4/tests/integration/test_parquet_drivers.py +229 -0
- firecube-0.1.4/tests/integration/test_phase2_behavior_preserved.py +270 -0
- firecube-0.1.4/tests/integration/test_phase3_2_multi_group_run_isolation.py +94 -0
- firecube-0.1.4/tests/integration/test_phase3_3_encoded_run_id_lifecycle.py +184 -0
- firecube-0.1.4/tests/integration/test_phase3_3_phantom_group_e2e.py +164 -0
- firecube-0.1.4/tests/integration/test_phase3_3_plan_to_ingest_contract.py +270 -0
- firecube-0.1.4/tests/integration/test_phase3_3_sequential_slot_filter.py +108 -0
- firecube-0.1.4/tests/integration/test_phase3_4_cli_phantom_group.py +287 -0
- firecube-0.1.4/tests/integration/test_phase3_5_blocked_ranges.py +124 -0
- firecube-0.1.4/tests/integration/test_phase3_single_group_preserved.py +137 -0
- firecube-0.1.4/tests/integration/test_pipeline_manifest_creation.py +90 -0
- firecube-0.1.4/tests/integration/test_plugin_lifecycle.py +137 -0
- firecube-0.1.4/tests/integration/test_run_terminal_slot_preservation.py +240 -0
- firecube-0.1.4/tests/integration/test_slot_index_concurrency.py +382 -0
- firecube-0.1.4/tests/integration/test_slot_index_fixture_plugins.py +246 -0
- firecube-0.1.4/tests/integration/test_slot_index_non_parallel.py +187 -0
- firecube-0.1.4/tests/integration/test_slot_index_precedence_matrix.py +295 -0
- firecube-0.1.4/tests/integration/test_slot_index_s3_precondition_retry.py +132 -0
- firecube-0.1.4/tests/integration/test_staged_mode_template_parity.py +654 -0
- firecube-0.1.4/tests/integration/test_staged_write_resume.py +88 -0
- firecube-0.1.4/tests/integration/test_static_intent_nan_fill.py +115 -0
- firecube-0.1.4/tests/integration/test_static_spec_shape_preservation.py +166 -0
- firecube-0.1.4/tests/integration/test_storage_driver_integration.py +278 -0
- firecube-0.1.4/tests/integration/test_tensogram_archive.py +457 -0
- firecube-0.1.4/tests/integration/test_upload_tree_hard_fail.py +251 -0
- firecube-0.1.4/tests/integration/test_version_compat.py +91 -0
- firecube-0.1.4/tests/integration/test_wal_concurrent_ordering.py +547 -0
- firecube-0.1.4/tests/integration/test_workspace_materialization_race.py +350 -0
- firecube-0.1.4/tests/sdk/test_plugin_contract.py +101 -0
- firecube-0.1.4/tests/sdk/test_public_api_surface.py +100 -0
- firecube-0.1.4/tests/sdk/test_scratch_module_deleted.py +24 -0
- firecube-0.1.4/tests/test_zarr_sharding.py +335 -0
- firecube-0.1.4/tests/unit/__init__.py +15 -0
- firecube-0.1.4/tests/unit/_helpers/__init__.py +15 -0
- firecube-0.1.4/tests/unit/_helpers/conftest.py +28 -0
- firecube-0.1.4/tests/unit/_helpers/counting_fs.py +124 -0
- firecube-0.1.4/tests/unit/_helpers/test_counting_fs.py +64 -0
- firecube-0.1.4/tests/unit/ingestor/extensions/test_grid.py +79 -0
- firecube-0.1.4/tests/unit/ingestor/extensions/test_healpix.py +155 -0
- firecube-0.1.4/tests/unit/ingestor/extensions/test_lazy_duckdb.py +44 -0
- firecube-0.1.4/tests/unit/ingestor/runtime/test_output_resolution.py +68 -0
- firecube-0.1.4/tests/unit/ingestor/types/test_ingest_context.py +91 -0
- firecube-0.1.4/tests/unit/ingestor/types/test_ingest_context_contract.py +50 -0
- firecube-0.1.4/tests/unit/observability/test_factory.py +69 -0
- firecube-0.1.4/tests/unit/observability/test_label_sanitization.py +33 -0
- firecube-0.1.4/tests/unit/observability/test_protocol_surface.py +29 -0
- firecube-0.1.4/tests/unit/observability/test_pushgateway_emit.py +31 -0
- firecube-0.1.4/tests/unit/observability/test_pushgateway_flush.py +71 -0
- firecube-0.1.4/tests/unit/observability/test_pushgateway_labels.py +37 -0
- firecube-0.1.4/tests/unit/test_advise_cli.py +101 -0
- firecube-0.1.4/tests/unit/test_all_arrays_chunk_alignment.py +56 -0
- firecube-0.1.4/tests/unit/test_append_coverage_builder.py +149 -0
- firecube-0.1.4/tests/unit/test_append_coverage_builder_time_decode.py +127 -0
- firecube-0.1.4/tests/unit/test_append_regression.py +754 -0
- firecube-0.1.4/tests/unit/test_append_resume_service.py +261 -0
- firecube-0.1.4/tests/unit/test_append_services_custom_dim.py +117 -0
- firecube-0.1.4/tests/unit/test_append_services_require_time_dim.py +38 -0
- firecube-0.1.4/tests/unit/test_append_state_dim_propagation.py +58 -0
- firecube-0.1.4/tests/unit/test_append_strategy.py +55 -0
- firecube-0.1.4/tests/unit/test_append_strategy_custom_dim.py +64 -0
- firecube-0.1.4/tests/unit/test_append_timestamp_state.py +154 -0
- firecube-0.1.4/tests/unit/test_append_with_custom_time_dim.py +125 -0
- firecube-0.1.4/tests/unit/test_append_write_executor.py +103 -0
- firecube-0.1.4/tests/unit/test_base_aggregate_contract.py +128 -0
- firecube-0.1.4/tests/unit/test_batch_runner.py +275 -0
- firecube-0.1.4/tests/unit/test_batching_metadata.py +66 -0
- firecube-0.1.4/tests/unit/test_bulk_abandon_stale_runs.py +352 -0
- firecube-0.1.4/tests/unit/test_bulk_clear_stale_claims.py +287 -0
- firecube-0.1.4/tests/unit/test_catalog_intake.py +272 -0
- firecube-0.1.4/tests/unit/test_cf_dataset_fixtures.py +83 -0
- firecube-0.1.4/tests/unit/test_cf_report.py +55 -0
- firecube-0.1.4/tests/unit/test_cf_validator.py +369 -0
- firecube-0.1.4/tests/unit/test_chunk_event_writer.py +85 -0
- firecube-0.1.4/tests/unit/test_chunk_manager.py +799 -0
- firecube-0.1.4/tests/unit/test_chunk_manager_queries.py +228 -0
- firecube-0.1.4/tests/unit/test_chunk_manager_slot_index.py +435 -0
- firecube-0.1.4/tests/unit/test_chunks_admin_cli.py +246 -0
- firecube-0.1.4/tests/unit/test_chunks_list_cli.py +128 -0
- firecube-0.1.4/tests/unit/test_chunks_manager_factory.py +112 -0
- firecube-0.1.4/tests/unit/test_claims_stale_query.py +151 -0
- firecube-0.1.4/tests/unit/test_cli_archive_safety.py +202 -0
- firecube-0.1.4/tests/unit/test_cli_audience.py +59 -0
- firecube-0.1.4/tests/unit/test_cli_bridge_consumers.py +166 -0
- firecube-0.1.4/tests/unit/test_cli_chunks_claims.py +109 -0
- firecube-0.1.4/tests/unit/test_cli_chunks_delete.py +113 -0
- firecube-0.1.4/tests/unit/test_cli_chunks_runs.py +113 -0
- firecube-0.1.4/tests/unit/test_cli_chunks_snapshots.py +83 -0
- firecube-0.1.4/tests/unit/test_cli_claims_all_stale.py +174 -0
- firecube-0.1.4/tests/unit/test_cli_completion.py +45 -0
- firecube-0.1.4/tests/unit/test_cli_errors.py +101 -0
- firecube-0.1.4/tests/unit/test_cli_output_options.py +134 -0
- firecube-0.1.4/tests/unit/test_cli_runs_all_stale.py +192 -0
- firecube-0.1.4/tests/unit/test_cli_shared_options.py +241 -0
- firecube-0.1.4/tests/unit/test_cli_slot_group.py +118 -0
- firecube-0.1.4/tests/unit/test_cli_slot_planning.py +114 -0
- firecube-0.1.4/tests/unit/test_cli_slot_range_env_discovery.py +66 -0
- firecube-0.1.4/tests/unit/test_cli_slot_range_options.py +113 -0
- firecube-0.1.4/tests/unit/test_cli_zarr_multires.py +157 -0
- firecube-0.1.4/tests/unit/test_cli_zarr_preallocate.py +232 -0
- firecube-0.1.4/tests/unit/test_cli_zarr_preallocate_static.py +67 -0
- firecube-0.1.4/tests/unit/test_cli_zarr_slots.py +368 -0
- firecube-0.1.4/tests/unit/test_coerce_append_value.py +54 -0
- firecube-0.1.4/tests/unit/test_compute_schema_hash.py +214 -0
- firecube-0.1.4/tests/unit/test_concurrency.py +94 -0
- firecube-0.1.4/tests/unit/test_config.py +48 -0
- firecube-0.1.4/tests/unit/test_config_file_strict.py +127 -0
- firecube-0.1.4/tests/unit/test_context_hook_signature_validation.py +82 -0
- firecube-0.1.4/tests/unit/test_context_mutation_contract.py +62 -0
- firecube-0.1.4/tests/unit/test_controlplane_events.py +126 -0
- firecube-0.1.4/tests/unit/test_cooperative_batch_hooks.py +108 -0
- firecube-0.1.4/tests/unit/test_coverage_tracker.py +166 -0
- firecube-0.1.4/tests/unit/test_coverage_tracker_custom_dim.py +53 -0
- firecube-0.1.4/tests/unit/test_credentials.py +67 -0
- firecube-0.1.4/tests/unit/test_ctx_escape_removed.py +26 -0
- firecube-0.1.4/tests/unit/test_dataset_for_batch_contract.py +90 -0
- firecube-0.1.4/tests/unit/test_deletion_dim_lookup.py +37 -0
- firecube-0.1.4/tests/unit/test_deletion_engine_errors.py +63 -0
- firecube-0.1.4/tests/unit/test_deletion_time_dim_resolution.py +249 -0
- firecube-0.1.4/tests/unit/test_derive_target_uri.py +83 -0
- firecube-0.1.4/tests/unit/test_direct_zarr_contract_stability.py +42 -0
- firecube-0.1.4/tests/unit/test_direct_zarr_ingestor.py +331 -0
- firecube-0.1.4/tests/unit/test_direct_zarr_init_subclass.py +173 -0
- firecube-0.1.4/tests/unit/test_direct_zarr_parallel_capability.py +144 -0
- firecube-0.1.4/tests/unit/test_direct_zarr_parallel_contract.py +68 -0
- firecube-0.1.4/tests/unit/test_direct_zarr_per_slot_claims.py +263 -0
- firecube-0.1.4/tests/unit/test_direct_zarr_slot_index_subclass.py +116 -0
- firecube-0.1.4/tests/unit/test_direct_zarr_time_dim_wiring.py +211 -0
- firecube-0.1.4/tests/unit/test_domain_defaults_removed.py +118 -0
- firecube-0.1.4/tests/unit/test_driver_parity_append_resume.py +321 -0
- firecube-0.1.4/tests/unit/test_driver_parity_cli.py +75 -0
- firecube-0.1.4/tests/unit/test_driver_parity_deletion.py +217 -0
- firecube-0.1.4/tests/unit/test_driver_parity_storage_session.py +97 -0
- firecube-0.1.4/tests/unit/test_driver_parity_validation.py +128 -0
- firecube-0.1.4/tests/unit/test_driver_parity_write_zarr.py +153 -0
- firecube-0.1.4/tests/unit/test_driver_parity_zarr_to_tgm.py +83 -0
- firecube-0.1.4/tests/unit/test_duckdb_bridge.py +131 -0
- firecube-0.1.4/tests/unit/test_duckdb_capability_check.py +150 -0
- firecube-0.1.4/tests/unit/test_duckdb_tier_scoping.py +159 -0
- firecube-0.1.4/tests/unit/test_engine_config_slot_group_warning.py +48 -0
- firecube-0.1.4/tests/unit/test_engine_config_slot_range.py +43 -0
- firecube-0.1.4/tests/unit/test_engine_failure_handling.py +103 -0
- firecube-0.1.4/tests/unit/test_engine_prefix_preservation.py +236 -0
- firecube-0.1.4/tests/unit/test_engine_resilience.py +326 -0
- firecube-0.1.4/tests/unit/test_engine_sequential_slot_filter_call.py +154 -0
- firecube-0.1.4/tests/unit/test_engine_time_dim_hook.py +63 -0
- firecube-0.1.4/tests/unit/test_engine_typed_result_access.py +257 -0
- firecube-0.1.4/tests/unit/test_ensure_group_new_kwargs.py +101 -0
- firecube-0.1.4/tests/unit/test_env_var_compatibility.py +107 -0
- firecube-0.1.4/tests/unit/test_existing_cube_check_read_bytes.py +60 -0
- firecube-0.1.4/tests/unit/test_experimental_options.py +118 -0
- firecube-0.1.4/tests/unit/test_extensions_duck.py +61 -0
- firecube-0.1.4/tests/unit/test_filesystem_capabilities.py +133 -0
- firecube-0.1.4/tests/unit/test_filesystem_instrumentation.py +195 -0
- firecube-0.1.4/tests/unit/test_filesystem_metrics.py +102 -0
- firecube-0.1.4/tests/unit/test_from_storage_config_or_default.py +57 -0
- firecube-0.1.4/tests/unit/test_fsspec_atomic_writer.py +224 -0
- firecube-0.1.4/tests/unit/test_generic_template_logging.py +102 -0
- firecube-0.1.4/tests/unit/test_generic_zarr_claim_category.py +108 -0
- firecube-0.1.4/tests/unit/test_generic_zarr_process_batch.py +173 -0
- firecube-0.1.4/tests/unit/test_global_expected_coverage.py +292 -0
- firecube-0.1.4/tests/unit/test_indexed_region_custom_dim.py +84 -0
- firecube-0.1.4/tests/unit/test_indexed_region_schema_claim.py +92 -0
- firecube-0.1.4/tests/unit/test_indexed_region_slot_group.py +197 -0
- firecube-0.1.4/tests/unit/test_indexed_region_static_array_slot_check.py +103 -0
- firecube-0.1.4/tests/unit/test_indexed_region_static_dispatch.py +322 -0
- firecube-0.1.4/tests/unit/test_indexed_region_strategy_ordering.py +108 -0
- firecube-0.1.4/tests/unit/test_indexed_region_time_1d_coverage.py +192 -0
- firecube-0.1.4/tests/unit/test_ingest_command_config.py +163 -0
- firecube-0.1.4/tests/unit/test_ingest_result_typed_metrics.py +67 -0
- firecube-0.1.4/tests/unit/test_intake_explicit_storage.py +48 -0
- firecube-0.1.4/tests/unit/test_loader_cache.py +108 -0
- firecube-0.1.4/tests/unit/test_logging_json_formatter.py +77 -0
- firecube-0.1.4/tests/unit/test_maintenance_events.py +238 -0
- firecube-0.1.4/tests/unit/test_manifest_repo_cache.py +72 -0
- firecube-0.1.4/tests/unit/test_manifest_repo_parity.py +109 -0
- firecube-0.1.4/tests/unit/test_manifest_repository_safety.py +474 -0
- firecube-0.1.4/tests/unit/test_manifest_versioning.py +92 -0
- firecube-0.1.4/tests/unit/test_multi_group_fixture.py +65 -0
- firecube-0.1.4/tests/unit/test_netcdf_utils.py +469 -0
- firecube-0.1.4/tests/unit/test_no_raw_fsspec_usage.py +789 -0
- firecube-0.1.4/tests/unit/test_no_storage_config_view.py +66 -0
- firecube-0.1.4/tests/unit/test_observability_boundaries.py +316 -0
- firecube-0.1.4/tests/unit/test_obstore_atomic_writer.py +37 -0
- firecube-0.1.4/tests/unit/test_obstore_streaming_buffer.py +52 -0
- firecube-0.1.4/tests/unit/test_otel_lifecycle.py +159 -0
- firecube-0.1.4/tests/unit/test_output_name_rejected.py +35 -0
- firecube-0.1.4/tests/unit/test_parallel_evidence.py +95 -0
- firecube-0.1.4/tests/unit/test_parallel_execution_state.py +53 -0
- firecube-0.1.4/tests/unit/test_parallel_gate_phantom_group.py +114 -0
- firecube-0.1.4/tests/unit/test_parallel_gate_slot_group.py +156 -0
- firecube-0.1.4/tests/unit/test_parallel_gate_static_array_chunks.py +122 -0
- firecube-0.1.4/tests/unit/test_parallel_post_intent_assertion.py +116 -0
- firecube-0.1.4/tests/unit/test_parallel_run_id.py +61 -0
- firecube-0.1.4/tests/unit/test_parallel_run_id_path_safety.py +56 -0
- firecube-0.1.4/tests/unit/test_parallel_schema_sizing.py +258 -0
- firecube-0.1.4/tests/unit/test_parquet_cli.py +89 -0
- firecube-0.1.4/tests/unit/test_parquet_storage_invariant.py +64 -0
- firecube-0.1.4/tests/unit/test_pipeline_result_typed_metrics.py +92 -0
- firecube-0.1.4/tests/unit/test_pipeline_spans.py +227 -0
- firecube-0.1.4/tests/unit/test_planned_range.py +76 -0
- firecube-0.1.4/tests/unit/test_plugin_config_type_coercion.py +45 -0
- firecube-0.1.4/tests/unit/test_plugin_context_boundary.py +75 -0
- firecube-0.1.4/tests/unit/test_pod_startup_phantom_group.py +180 -0
- firecube-0.1.4/tests/unit/test_pod_startup_schema_verification.py +255 -0
- firecube-0.1.4/tests/unit/test_pre_batch_filter.py +267 -0
- firecube-0.1.4/tests/unit/test_preflight.py +69 -0
- firecube-0.1.4/tests/unit/test_prewrite_dim_check.py +44 -0
- firecube-0.1.4/tests/unit/test_product_identity.py +84 -0
- firecube-0.1.4/tests/unit/test_product_name_contract.py +84 -0
- firecube-0.1.4/tests/unit/test_product_resolver.py +59 -0
- firecube-0.1.4/tests/unit/test_product_target.py +160 -0
- firecube-0.1.4/tests/unit/test_projection_orphan_slot_fallback.py +80 -0
- firecube-0.1.4/tests/unit/test_ranges_overlap_helper.py +37 -0
- firecube-0.1.4/tests/unit/test_recording_coverage_contract.py +71 -0
- firecube-0.1.4/tests/unit/test_recording_typed_result.py +129 -0
- firecube-0.1.4/tests/unit/test_region_writer_custom_coord.py +70 -0
- firecube-0.1.4/tests/unit/test_region_writer_fill_helpers.py +80 -0
- firecube-0.1.4/tests/unit/test_region_writer_write_static.py +80 -0
- firecube-0.1.4/tests/unit/test_region_zarr_writer.py +364 -0
- firecube-0.1.4/tests/unit/test_region_zarr_writer_preallocation.py +370 -0
- firecube-0.1.4/tests/unit/test_reserved_attrs.py +41 -0
- firecube-0.1.4/tests/unit/test_reserved_root_attrs.py +65 -0
- firecube-0.1.4/tests/unit/test_result_constructor_contract.py +74 -0
- firecube-0.1.4/tests/unit/test_resume_guard.py +428 -0
- firecube-0.1.4/tests/unit/test_resume_guard_completed_spans.py +124 -0
- firecube-0.1.4/tests/unit/test_resume_guard_enforce_op_counts.py +169 -0
- firecube-0.1.4/tests/unit/test_resume_guard_group_aware.py +114 -0
- firecube-0.1.4/tests/unit/test_resume_guard_slot_ranges.py +188 -0
- firecube-0.1.4/tests/unit/test_resume_guard_telemetry.py +176 -0
- firecube-0.1.4/tests/unit/test_resume_meta_orphan_slot_fallback.py +89 -0
- firecube-0.1.4/tests/unit/test_resume_types.py +88 -0
- firecube-0.1.4/tests/unit/test_run_id_slot_parser.py +77 -0
- firecube-0.1.4/tests/unit/test_run_record_slot_group.py +153 -0
- firecube-0.1.4/tests/unit/test_run_record_slot_range.py +174 -0
- firecube-0.1.4/tests/unit/test_runs_stale_query.py +210 -0
- firecube-0.1.4/tests/unit/test_runtime.py +194 -0
- firecube-0.1.4/tests/unit/test_scaffolding_product_name.py +216 -0
- firecube-0.1.4/tests/unit/test_schema_drift_error.py +26 -0
- firecube-0.1.4/tests/unit/test_schema_verification_audit.py +103 -0
- firecube-0.1.4/tests/unit/test_seeding_ownership_invariant.py +145 -0
- firecube-0.1.4/tests/unit/test_session_upload_tree.py +476 -0
- firecube-0.1.4/tests/unit/test_setup_global_schema_static.py +165 -0
- firecube-0.1.4/tests/unit/test_setup_global_zarr_schema_concurrent.py +118 -0
- firecube-0.1.4/tests/unit/test_setup_global_zarr_schema_strict.py +123 -0
- firecube-0.1.4/tests/unit/test_slot_index_model.py +181 -0
- firecube-0.1.4/tests/unit/test_slot_index_record.py +280 -0
- firecube-0.1.4/tests/unit/test_slot_range_capability.py +193 -0
- firecube-0.1.4/tests/unit/test_slot_range_validators.py +58 -0
- firecube-0.1.4/tests/unit/test_snapshot_derivation.py +230 -0
- firecube-0.1.4/tests/unit/test_span_coverage_neutral.py +115 -0
- firecube-0.1.4/tests/unit/test_staged_metadata_error_contract.py +78 -0
- firecube-0.1.4/tests/unit/test_staged_metadata_workspace_idempotency.py +136 -0
- firecube-0.1.4/tests/unit/test_staged_metrics.py +213 -0
- firecube-0.1.4/tests/unit/test_staged_seed_strips_static_marker.py +158 -0
- firecube-0.1.4/tests/unit/test_state_dim_threading.py +62 -0
- firecube-0.1.4/tests/unit/test_storage_binding.py +68 -0
- firecube-0.1.4/tests/unit/test_storage_cache_key.py +98 -0
- firecube-0.1.4/tests/unit/test_storage_completion.py +237 -0
- firecube-0.1.4/tests/unit/test_storage_config.py +26 -0
- firecube-0.1.4/tests/unit/test_storage_driver.py +89 -0
- firecube-0.1.4/tests/unit/test_storage_driver_config.py +126 -0
- firecube-0.1.4/tests/unit/test_storage_driver_config_lockdown.py +50 -0
- firecube-0.1.4/tests/unit/test_storage_errors.py +74 -0
- firecube-0.1.4/tests/unit/test_storage_filesystem.py +170 -0
- firecube-0.1.4/tests/unit/test_storage_filesystem_protocol.py +90 -0
- firecube-0.1.4/tests/unit/test_storage_metadata.py +217 -0
- firecube-0.1.4/tests/unit/test_storage_session.py +248 -0
- firecube-0.1.4/tests/unit/test_storage_transfer.py +141 -0
- firecube-0.1.4/tests/unit/test_storage_uri.py +248 -0
- firecube-0.1.4/tests/unit/test_strategy_protocols.py +60 -0
- firecube-0.1.4/tests/unit/test_telemetry_schema.py +115 -0
- firecube-0.1.4/tests/unit/test_telemetry_schema_snapshot.py +112 -0
- firecube-0.1.4/tests/unit/test_telemetry_typed_result.py +71 -0
- firecube-0.1.4/tests/unit/test_template_hierarchy.py +117 -0
- firecube-0.1.4/tests/unit/test_template_product_name.py +101 -0
- firecube-0.1.4/tests/unit/test_template_typed_metrics_population.py +70 -0
- firecube-0.1.4/tests/unit/test_tensogram_cli.py +122 -0
- firecube-0.1.4/tests/unit/test_tensogram_core.py +485 -0
- firecube-0.1.4/tests/unit/test_tensogram_ingest.py +134 -0
- firecube-0.1.4/tests/unit/test_tensogram_input.py +77 -0
- firecube-0.1.4/tests/unit/test_tensogram_routing.py +177 -0
- firecube-0.1.4/tests/unit/test_tensogram_time_dim.py +129 -0
- firecube-0.1.4/tests/unit/test_tier_configurator.py +107 -0
- firecube-0.1.4/tests/unit/test_time_decode.py +112 -0
- firecube-0.1.4/tests/unit/test_time_dim_name_resolution.py +78 -0
- firecube-0.1.4/tests/unit/test_tracing_facade.py +181 -0
- firecube-0.1.4/tests/unit/test_typed_options_param.py +92 -0
- firecube-0.1.4/tests/unit/test_uri_handling.py +187 -0
- firecube-0.1.4/tests/unit/test_uris.py +83 -0
- firecube-0.1.4/tests/unit/test_validate_chunk_alignment_terminal.py +55 -0
- firecube-0.1.4/tests/unit/test_verify_array_spec.py +274 -0
- firecube-0.1.4/tests/unit/test_version_consistency.py +75 -0
- firecube-0.1.4/tests/unit/test_wal_metrics.py +122 -0
- firecube-0.1.4/tests/unit/test_wal_reader_run_id_safety.py +119 -0
- firecube-0.1.4/tests/unit/test_warn_if_misaligned_terminal.py +66 -0
- firecube-0.1.4/tests/unit/test_workspace_manager.py +55 -0
- firecube-0.1.4/tests/unit/test_write_intent_kinds.py +34 -0
- firecube-0.1.4/tests/unit/test_write_mode_policy.py +238 -0
- firecube-0.1.4/tests/unit/test_zarr_append_engine.py +538 -0
- firecube-0.1.4/tests/unit/test_zarr_array_spec_new_fields.py +151 -0
- firecube-0.1.4/tests/unit/test_zarr_chunk_alias_removed.py +49 -0
- firecube-0.1.4/tests/unit/test_zarr_discover_groups.py +60 -0
- firecube-0.1.4/tests/unit/test_zarr_group_attrs.py +149 -0
- firecube-0.1.4/tests/unit/test_zarr_multi_res_config_rejected.py +60 -0
- firecube-0.1.4/tests/unit/test_zarr_staged_metadata.py +449 -0
- firecube-0.1.4/tests/unit/test_zarr_store_factory.py +112 -0
- firecube-0.1.4/tests/unit/test_zarr_store_factory_contract.py +73 -0
- firecube-0.1.4/tests/unit/test_zarr_validation.py +79 -0
- firecube-0.1.4/tests/unit/test_zarr_write_context.py +152 -0
- firecube-0.1.4/uv.lock +3606 -0
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
name: Bug report
|
|
2
|
+
description: Report incorrect behavior, a crash, or corrupted output in Firecube.
|
|
3
|
+
labels: ["bug"]
|
|
4
|
+
body:
|
|
5
|
+
- type: markdown
|
|
6
|
+
attributes:
|
|
7
|
+
value: |
|
|
8
|
+
Thanks for taking the time to file a bug. Please give us enough detail to
|
|
9
|
+
reproduce it. Firecube requires **explicit product and storage flags** — include
|
|
10
|
+
the full command you ran so we can see them.
|
|
11
|
+
|
|
12
|
+
Do **not** paste credentials, tokens, or private data URIs. Redact them.
|
|
13
|
+
- type: textarea
|
|
14
|
+
id: summary
|
|
15
|
+
attributes:
|
|
16
|
+
label: Summary
|
|
17
|
+
description: A clear, one- or two-sentence description of the problem.
|
|
18
|
+
validations:
|
|
19
|
+
required: true
|
|
20
|
+
- type: textarea
|
|
21
|
+
id: reproduce
|
|
22
|
+
attributes:
|
|
23
|
+
label: Steps to reproduce
|
|
24
|
+
description: The exact command(s), including all product/storage flags. Redact secrets.
|
|
25
|
+
placeholder: |
|
|
26
|
+
1. uv run firecube <command> --product ... --storage ... <uri>
|
|
27
|
+
2. ...
|
|
28
|
+
render: shell
|
|
29
|
+
validations:
|
|
30
|
+
required: true
|
|
31
|
+
- type: textarea
|
|
32
|
+
id: expected
|
|
33
|
+
attributes:
|
|
34
|
+
label: Expected behavior
|
|
35
|
+
validations:
|
|
36
|
+
required: true
|
|
37
|
+
- type: textarea
|
|
38
|
+
id: actual
|
|
39
|
+
attributes:
|
|
40
|
+
label: Actual behavior
|
|
41
|
+
description: Include the full error message and traceback if there is one.
|
|
42
|
+
render: shell
|
|
43
|
+
validations:
|
|
44
|
+
required: true
|
|
45
|
+
- type: input
|
|
46
|
+
id: version
|
|
47
|
+
attributes:
|
|
48
|
+
label: Firecube version
|
|
49
|
+
description: Output of `uv run firecube --version`.
|
|
50
|
+
placeholder: "0.1.4"
|
|
51
|
+
validations:
|
|
52
|
+
required: true
|
|
53
|
+
- type: dropdown
|
|
54
|
+
id: install
|
|
55
|
+
attributes:
|
|
56
|
+
label: Install source
|
|
57
|
+
options:
|
|
58
|
+
- PyPI
|
|
59
|
+
- Git checkout (source)
|
|
60
|
+
- Container image
|
|
61
|
+
- Other
|
|
62
|
+
validations:
|
|
63
|
+
required: true
|
|
64
|
+
- type: textarea
|
|
65
|
+
id: environment
|
|
66
|
+
attributes:
|
|
67
|
+
label: Environment
|
|
68
|
+
description: Python version, OS, and any relevant extras installed (obstore, tensogram, healpix, virtualzarr).
|
|
69
|
+
placeholder: |
|
|
70
|
+
- Python: 3.12.x
|
|
71
|
+
- OS: Linux / macOS / Windows (+ version)
|
|
72
|
+
- Extras: e.g. obstore
|
|
73
|
+
- Storage backend: local / S3 (endpoint type)
|
|
74
|
+
validations:
|
|
75
|
+
required: true
|
|
76
|
+
- type: input
|
|
77
|
+
id: plugin
|
|
78
|
+
attributes:
|
|
79
|
+
label: Plugin involved (if any)
|
|
80
|
+
description: Package name and version of the ingest plugin, if the bug is in an ingest run.
|
|
81
|
+
placeholder: "my-firecube-plugin==1.2.0"
|
|
82
|
+
validations:
|
|
83
|
+
required: false
|
|
84
|
+
- type: textarea
|
|
85
|
+
id: data
|
|
86
|
+
attributes:
|
|
87
|
+
label: Data / state impact
|
|
88
|
+
description: >-
|
|
89
|
+
Did this affect stored output (Zarr), the `.firecube/` control plane, or resume/append
|
|
90
|
+
state? Is any output store now corrupt or partially written?
|
|
91
|
+
validations:
|
|
92
|
+
required: false
|
|
93
|
+
- type: checkboxes
|
|
94
|
+
id: checks
|
|
95
|
+
attributes:
|
|
96
|
+
label: Before submitting
|
|
97
|
+
options:
|
|
98
|
+
- label: I searched existing issues and this is not a duplicate.
|
|
99
|
+
required: true
|
|
100
|
+
- label: I removed all credentials, tokens, and private URIs from this report.
|
|
101
|
+
required: true
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
name: Feature request
|
|
2
|
+
description: Propose a new capability, integration, or improvement for Firecube.
|
|
3
|
+
labels: ["enhancement"]
|
|
4
|
+
body:
|
|
5
|
+
- type: markdown
|
|
6
|
+
attributes:
|
|
7
|
+
value: |
|
|
8
|
+
Thanks for proposing an improvement. Firecube favors small, explicit changes that
|
|
9
|
+
respect existing module boundaries (see `CONTRIBUTING.md` and `plans/DESIGN.md`).
|
|
10
|
+
Please describe the problem before the solution, and be concrete about scope.
|
|
11
|
+
- type: textarea
|
|
12
|
+
id: problem
|
|
13
|
+
attributes:
|
|
14
|
+
label: Problem / motivation
|
|
15
|
+
description: What are you trying to do, and why is it hard or impossible today?
|
|
16
|
+
validations:
|
|
17
|
+
required: true
|
|
18
|
+
- type: textarea
|
|
19
|
+
id: proposal
|
|
20
|
+
attributes:
|
|
21
|
+
label: Proposed solution
|
|
22
|
+
description: What should Firecube do? Sketch the CLI surface, config, or API if relevant.
|
|
23
|
+
validations:
|
|
24
|
+
required: true
|
|
25
|
+
- type: dropdown
|
|
26
|
+
id: area
|
|
27
|
+
attributes:
|
|
28
|
+
label: Area
|
|
29
|
+
description: Which part of Firecube does this touch?
|
|
30
|
+
multiple: true
|
|
31
|
+
options:
|
|
32
|
+
- Output Formats
|
|
33
|
+
- CLI / UX
|
|
34
|
+
- Control plane (.firecube / ChunkManager)
|
|
35
|
+
- Storage / filesystem backends
|
|
36
|
+
- Plugin contracts / API
|
|
37
|
+
- Compute / array backend
|
|
38
|
+
- Observability
|
|
39
|
+
- Packaging / extras / dependencies
|
|
40
|
+
- Documentation
|
|
41
|
+
- Other
|
|
42
|
+
validations:
|
|
43
|
+
required: true
|
|
44
|
+
- type: textarea
|
|
45
|
+
id: alternatives
|
|
46
|
+
attributes:
|
|
47
|
+
label: Alternatives considered
|
|
48
|
+
description: Other approaches, existing workarounds, or why they fall short.
|
|
49
|
+
validations:
|
|
50
|
+
required: false
|
|
51
|
+
- type: textarea
|
|
52
|
+
id: compat
|
|
53
|
+
attributes:
|
|
54
|
+
label: Compatibility & scope
|
|
55
|
+
description: >-
|
|
56
|
+
Would this change public CLI flags, plugin contracts, config, or stored formats?
|
|
57
|
+
Should it be opt-in (e.g. an optional extra) to keep the default install lean?
|
|
58
|
+
validations:
|
|
59
|
+
required: false
|
|
60
|
+
- type: checkboxes
|
|
61
|
+
id: contribution
|
|
62
|
+
attributes:
|
|
63
|
+
label: Contribution
|
|
64
|
+
options:
|
|
65
|
+
- label: I would be willing to help implement this.
|
|
66
|
+
required: false
|
|
67
|
+
- type: checkboxes
|
|
68
|
+
id: checks
|
|
69
|
+
attributes:
|
|
70
|
+
label: Before submitting
|
|
71
|
+
options:
|
|
72
|
+
- label: I searched existing issues and this is not a duplicate.
|
|
73
|
+
required: true
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
blank_issues_enabled: false
|
|
2
|
+
contact_links:
|
|
3
|
+
- name: Question or discussion
|
|
4
|
+
url: https://github.com/eumetsat/firecube/discussions
|
|
5
|
+
about: Ask usage questions, propose ideas, or discuss plugin development here.
|
|
6
|
+
- name: Documentation
|
|
7
|
+
url: https://github.com/eumetsat/firecube/tree/main/docs
|
|
8
|
+
about: Check the docs before filing — many workflows and recovery steps are covered there.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
Thanks for contributing to Firecube. Please read CONTRIBUTING.md first.
|
|
3
|
+
Keep pull requests focused: one logical change per PR.
|
|
4
|
+
-->
|
|
5
|
+
|
|
6
|
+
## What changed
|
|
7
|
+
|
|
8
|
+
<!-- A clear description of the change. -->
|
|
9
|
+
|
|
10
|
+
## Why
|
|
11
|
+
|
|
12
|
+
<!-- The motivation. Link the issue this closes, e.g. "Closes #123". -->
|
|
13
|
+
|
|
14
|
+
## Affected behavior
|
|
15
|
+
|
|
16
|
+
<!-- Which user, operator, plugin, or maintainer behavior changes? -->
|
|
17
|
+
|
|
18
|
+
- User / CLI:
|
|
19
|
+
- Plugin authors:
|
|
20
|
+
- Operators / production:
|
|
21
|
+
- Stored formats or control-plane state:
|
|
22
|
+
|
|
23
|
+
## Type of change
|
|
24
|
+
|
|
25
|
+
- [ ] Bug fix (non-breaking)
|
|
26
|
+
- [ ] New feature (non-breaking)
|
|
27
|
+
- [ ] Breaking change (CLI flags, plugin contract, config, or stored format)
|
|
28
|
+
- [ ] Documentation
|
|
29
|
+
- [ ] CI / build / chore
|
|
30
|
+
|
|
31
|
+
## Checks run
|
|
32
|
+
|
|
33
|
+
<!-- Tick what you ran; paste anything notable. -->
|
|
34
|
+
|
|
35
|
+
- [ ] `uv run ruff check .`
|
|
36
|
+
- [ ] `uv run ruff format --check .`
|
|
37
|
+
- [ ] `uv run pyright`
|
|
38
|
+
- [ ] `uv run --with bandit bandit -c pyproject.toml -r src scripts -lll`
|
|
39
|
+
- [ ] `uv run pytest --strict-deps -m "not slow and not s3" -q`
|
|
40
|
+
- [ ] Docs build (if docs changed): `uv run mkdocs build --strict`
|
|
41
|
+
|
|
42
|
+
## Follow-up work
|
|
43
|
+
|
|
44
|
+
<!-- Known gaps or planned follow-ups, or "none". -->
|
|
45
|
+
|
|
46
|
+
## Contributor certification
|
|
47
|
+
|
|
48
|
+
- [ ] Commits are signed off (`git commit -s`) with my real name and a reachable email.
|
|
49
|
+
- [ ] No credentials, generated products, caches, or virtualenvs are included in this PR.
|
|
50
|
+
- [ ] If AI assistance materially shaped this change, I disclosed it here and added an `Assisted-by` trailer.
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
lint:
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
steps:
|
|
12
|
+
- uses: actions/checkout@v5
|
|
13
|
+
- uses: astral-sh/setup-uv@v7
|
|
14
|
+
- run: uv python install 3.12
|
|
15
|
+
- run: uv sync --locked --extra test --group dev
|
|
16
|
+
- run: uv run ruff check .
|
|
17
|
+
- run: uv run ruff format --check .
|
|
18
|
+
|
|
19
|
+
typecheck:
|
|
20
|
+
runs-on: ubuntu-latest
|
|
21
|
+
steps:
|
|
22
|
+
- uses: actions/checkout@v5
|
|
23
|
+
- uses: astral-sh/setup-uv@v7
|
|
24
|
+
- run: uv python install 3.12
|
|
25
|
+
- run: uv sync --locked --extra test --group dev
|
|
26
|
+
- name: Install test fixture plugins
|
|
27
|
+
run: |
|
|
28
|
+
uv pip install -e tests/fixtures/cli_test_plugin
|
|
29
|
+
uv pip install -e tests/fixtures/direct_zarr_capable_test_plugin
|
|
30
|
+
uv pip install -e tests/fixtures/direct_zarr_non_capable_test_plugin
|
|
31
|
+
uv pip install -e tests/fixtures/multi_group_capable_test_plugin
|
|
32
|
+
uv pip install -e tests/fixtures/cf_time_dim_test_plugin
|
|
33
|
+
uv pip install -e tests/fixtures/slot_shape_test_plugin
|
|
34
|
+
- run: uv run pyright
|
|
35
|
+
|
|
36
|
+
test:
|
|
37
|
+
runs-on: ubuntu-latest
|
|
38
|
+
steps:
|
|
39
|
+
- uses: actions/checkout@v5
|
|
40
|
+
- uses: astral-sh/setup-uv@v7
|
|
41
|
+
- run: uv python install 3.12
|
|
42
|
+
- run: uv sync --locked --extra test --group dev
|
|
43
|
+
- name: Install test fixture plugins
|
|
44
|
+
run: |
|
|
45
|
+
uv pip install -e tests/fixtures/cli_test_plugin
|
|
46
|
+
uv pip install -e tests/fixtures/direct_zarr_capable_test_plugin
|
|
47
|
+
uv pip install -e tests/fixtures/direct_zarr_non_capable_test_plugin
|
|
48
|
+
uv pip install -e tests/fixtures/multi_group_capable_test_plugin
|
|
49
|
+
uv pip install -e tests/fixtures/cf_time_dim_test_plugin
|
|
50
|
+
uv pip install -e tests/fixtures/slot_shape_test_plugin
|
|
51
|
+
- run: uv run pytest --strict-deps -m "not slow and not s3" -n auto --cov=firecube --cov-report=term-missing -q
|
|
52
|
+
|
|
53
|
+
docs:
|
|
54
|
+
runs-on: ubuntu-latest
|
|
55
|
+
steps:
|
|
56
|
+
- uses: actions/checkout@v5
|
|
57
|
+
- uses: astral-sh/setup-uv@v7
|
|
58
|
+
- run: uv python install 3.12
|
|
59
|
+
- run: uv sync --locked --extra test --group docs
|
|
60
|
+
- run: uv run mkdocs build --strict --site-dir /tmp/firecube-mkdocs-check
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
name: Publish
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
release:
|
|
5
|
+
types: [published]
|
|
6
|
+
|
|
7
|
+
permissions:
|
|
8
|
+
contents: read
|
|
9
|
+
|
|
10
|
+
jobs:
|
|
11
|
+
quality-gate:
|
|
12
|
+
name: quality gate
|
|
13
|
+
runs-on: ubuntu-latest
|
|
14
|
+
steps:
|
|
15
|
+
- uses: actions/checkout@v5
|
|
16
|
+
- uses: astral-sh/setup-uv@v7
|
|
17
|
+
- run: uv python install 3.12
|
|
18
|
+
- run: uv sync --locked --extra test --group dev
|
|
19
|
+
- name: Install test fixture plugins
|
|
20
|
+
run: |
|
|
21
|
+
uv pip install -e tests/fixtures/cli_test_plugin
|
|
22
|
+
uv pip install -e tests/fixtures/direct_zarr_capable_test_plugin
|
|
23
|
+
uv pip install -e tests/fixtures/direct_zarr_non_capable_test_plugin
|
|
24
|
+
uv pip install -e tests/fixtures/multi_group_capable_test_plugin
|
|
25
|
+
uv pip install -e tests/fixtures/cf_time_dim_test_plugin
|
|
26
|
+
uv pip install -e tests/fixtures/slot_shape_test_plugin
|
|
27
|
+
- run: uv run ruff check .
|
|
28
|
+
- run: uv run ruff format --check .
|
|
29
|
+
- run: uv run pyright
|
|
30
|
+
- run: uv run pytest --strict-deps -m "not slow and not s3" -n auto --cov=firecube -q
|
|
31
|
+
|
|
32
|
+
publish:
|
|
33
|
+
name: publish to PyPI
|
|
34
|
+
runs-on: ubuntu-latest
|
|
35
|
+
needs: quality-gate
|
|
36
|
+
environment: pypi
|
|
37
|
+
permissions:
|
|
38
|
+
contents: read
|
|
39
|
+
id-token: write
|
|
40
|
+
steps:
|
|
41
|
+
- uses: actions/checkout@v5
|
|
42
|
+
- uses: astral-sh/setup-uv@v7
|
|
43
|
+
- run: uv python install 3.12
|
|
44
|
+
|
|
45
|
+
- name: Verify release tag matches pyproject version
|
|
46
|
+
env:
|
|
47
|
+
RELEASE_TAG: ${{ github.event.release.tag_name }}
|
|
48
|
+
run: |
|
|
49
|
+
version="$(python3 -c 'import pathlib, tomllib; print(tomllib.loads(pathlib.Path("pyproject.toml").read_text())["project"]["version"])')"
|
|
50
|
+
if [ "$RELEASE_TAG" != "v$version" ]; then
|
|
51
|
+
echo "Release tag $RELEASE_TAG does not match pyproject version v$version" >&2
|
|
52
|
+
exit 1
|
|
53
|
+
fi
|
|
54
|
+
|
|
55
|
+
- name: Build distributions
|
|
56
|
+
run: uv build
|
|
57
|
+
|
|
58
|
+
- name: Check distributions
|
|
59
|
+
run: uvx twine check dist/*
|
|
60
|
+
|
|
61
|
+
- name: Publish distributions
|
|
62
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Python
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.ipynb_checkpoints
|
|
4
|
+
*.py[cod]
|
|
5
|
+
*.pyo
|
|
6
|
+
*.pyd
|
|
7
|
+
*.so
|
|
8
|
+
*.egg-info/
|
|
9
|
+
.eggs/
|
|
10
|
+
.*
|
|
11
|
+
!.gitignore
|
|
12
|
+
!.prompts/
|
|
13
|
+
!.prompts/*.md
|
|
14
|
+
!.github/
|
|
15
|
+
|
|
16
|
+
# Environments
|
|
17
|
+
.venv/
|
|
18
|
+
.env/
|
|
19
|
+
|
|
20
|
+
# MkDocs
|
|
21
|
+
site/
|
|
22
|
+
|
|
23
|
+
# Plugin Development
|
|
24
|
+
plugins_dev/
|
|
25
|
+
|
|
26
|
+
# Build artifacts
|
|
27
|
+
build/
|
|
28
|
+
dist/
|
|
29
|
+
|
|
30
|
+
# Project outputs
|
|
31
|
+
artifacts/
|
|
32
|
+
outputs/
|
|
33
|
+
data/
|
|
34
|
+
*.zarr
|
|
35
|
+
*.parquet
|
|
36
|
+
|
|
37
|
+
# Logs
|
|
38
|
+
*.log
|
|
39
|
+
|
|
40
|
+
# OS / Editor
|
|
41
|
+
.DS_Store
|
|
42
|
+
.idea/
|
|
43
|
+
.vscode/
|
|
44
|
+
|
|
45
|
+
# Coverage / testing
|
|
46
|
+
.coverage
|
|
47
|
+
htmlcov/
|
|
48
|
+
.pytest_cache/
|
|
49
|
+
.mypy_cache/
|
|
50
|
+
.python-version
|
|
51
|
+
.ruff_cache
|
|
52
|
+
|
|
53
|
+
# Generated SBOM / dependency-license reports (regenerate locally)
|
|
54
|
+
reports/
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Review and resolve unresolved pull request comments
|
|
3
|
+
agent: build
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Address Review Comments
|
|
7
|
+
|
|
8
|
+
Review and resolve all actionable feedback on a pull request.
|
|
9
|
+
|
|
10
|
+
## Arguments
|
|
11
|
+
|
|
12
|
+
Provide the MR/PR number or URL as `$ARGUMENTS`. If no argument is given, detect
|
|
13
|
+
the current branch's open review if possible.
|
|
14
|
+
|
|
15
|
+
## 1. Fetch Review Feedback
|
|
16
|
+
|
|
17
|
+
Use the available hosting CLI:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
glab mr view "$ARGUMENTS" --comments
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
or:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
gh pr view "$ARGUMENTS" --comments
|
|
27
|
+
gh pr diff "$ARGUMENTS"
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
If threaded inline comments are not visible, use the host API to fetch unresolved
|
|
31
|
+
threads/comments directly. Report if authentication or network access prevents
|
|
32
|
+
fetching review comments.
|
|
33
|
+
|
|
34
|
+
## 2. Analyze Each Comment
|
|
35
|
+
|
|
36
|
+
For each unresolved comment:
|
|
37
|
+
|
|
38
|
+
- Read the full file and surrounding context, not just the commented line.
|
|
39
|
+
- Identify whether the comment is about correctness, API design, tests, docs, security, performance, or style.
|
|
40
|
+
- Check the concern against Firecube's local rules in `AGENTS.md`, `plans/STYLE.md`, `plans/TEST.md`, and `.prompts/docs-policy.md` when documentation is involved.
|
|
41
|
+
- If the requested fix conflicts with repo architecture or user intent, propose the safer alternative with concrete reasoning.
|
|
42
|
+
- If the intent is ambiguous, ask for clarification before making risky changes.
|
|
43
|
+
|
|
44
|
+
## 3. Address Actionable Issues
|
|
45
|
+
|
|
46
|
+
For each actionable comment:
|
|
47
|
+
|
|
48
|
+
- Fix the underlying issue, not only the symptom.
|
|
49
|
+
- Update tests when the feedback identifies missing coverage or changed behavior.
|
|
50
|
+
- Update public docs when behavior, flags, config, or SDK surfaces change.
|
|
51
|
+
- Keep edits scoped to the reviewed change unless a small adjacent cleanup is required.
|
|
52
|
+
|
|
53
|
+
Do not resolve comments, commit, or push unless the user explicitly asks.
|
|
54
|
+
|
|
55
|
+
## 4. Verify
|
|
56
|
+
|
|
57
|
+
Run the smallest relevant verification first, then broaden as needed:
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
uv run ruff check .
|
|
61
|
+
uv run pyright
|
|
62
|
+
uv run pytest <focused tests>
|
|
63
|
+
uv run mkdocs build --strict --site-dir /tmp/firecube-mkdocs-check
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
For broad changes, run:
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
uv run pytest --strict-deps -q --tb=short
|
|
70
|
+
uv run pytest --strict-deps -q --tb=short -W error::DeprecationWarning
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## 5. Report
|
|
74
|
+
|
|
75
|
+
Provide a mapping from each review comment to the action taken:
|
|
76
|
+
|
|
77
|
+
```text
|
|
78
|
+
Comment:
|
|
79
|
+
Action:
|
|
80
|
+
Verification:
|
|
81
|
+
Residual risk:
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
List unresolved comments separately with the blocker or question.
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Run Firecube docs code examples and verify prose claims against the codebase
|
|
3
|
+
agent: build
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Documentation Fact-Check
|
|
7
|
+
|
|
8
|
+
Run code examples in the docs and verify prose claims against the actual codebase.
|
|
9
|
+
|
|
10
|
+
## Arguments
|
|
11
|
+
|
|
12
|
+
`$ARGUMENTS` — optional file paths relative to `docs/` to narrow the scope.
|
|
13
|
+
|
|
14
|
+
Examples:
|
|
15
|
+
|
|
16
|
+
- `/doc-fact-check quickstart/ingestion.md`
|
|
17
|
+
- `/doc-fact-check concepts/`
|
|
18
|
+
- `/doc-fact-check`
|
|
19
|
+
|
|
20
|
+
If no arguments are given, check all `.md` files under `docs/`.
|
|
21
|
+
|
|
22
|
+
## Setup
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
uv sync --extra test --group docs
|
|
26
|
+
uv pip install -e tests/fixtures/cli_test_plugin
|
|
27
|
+
uv pip install -e tests/fixtures/direct_zarr_capable_test_plugin
|
|
28
|
+
uv pip install -e tests/fixtures/direct_zarr_non_capable_test_plugin
|
|
29
|
+
uv pip install -e tests/fixtures/multi_group_capable_test_plugin
|
|
30
|
+
uv pip install -e tests/fixtures/cf_time_dim_test_plugin
|
|
31
|
+
uv run firecube --help
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
If any setup step fails, report it and continue with the checks that can still run.
|
|
35
|
+
Blocks that fail because of missing credentials, missing private plugins, or missing
|
|
36
|
+
external services are setup problems, not documentation bugs.
|
|
37
|
+
|
|
38
|
+
## 1. Run Code Examples
|
|
39
|
+
|
|
40
|
+
For each fenced code block in the selected docs:
|
|
41
|
+
|
|
42
|
+
### Classify Each Block
|
|
43
|
+
|
|
44
|
+
- **Runnable**: self-contained Python or Bash with no placeholders, no ellipsis, and no user-specific files.
|
|
45
|
+
- **Continuation**: follows a runnable block on the same page and reuses its variables; concatenate with its predecessor.
|
|
46
|
+
- **Skip**: partial snippets, signatures-only snippets, output samples, unlabeled blocks, install commands, destructive commands, cloud/S3 commands without local fixtures, or commands requiring private data/plugins.
|
|
47
|
+
|
|
48
|
+
### Execute Runnable Blocks
|
|
49
|
+
|
|
50
|
+
- **Python**: write to a temp `.py` file and run with `uv run python`.
|
|
51
|
+
- **Bash**: run only commands that are safe locally and can complete without credentials.
|
|
52
|
+
- **CLI help**: run documented `firecube ... --help` commands and verify exit code 0.
|
|
53
|
+
|
|
54
|
+
Never invent missing imports, variables, files, credentials, or plugin names. Record
|
|
55
|
+
pass/fail/skip for every block.
|
|
56
|
+
|
|
57
|
+
## 2. Check Claims Against Code
|
|
58
|
+
|
|
59
|
+
Read each selected doc file and find verifiable factual claims. Focus on inline
|
|
60
|
+
code spans, command flags, config keys, table cells, defaults, feature names, and
|
|
61
|
+
numbers.
|
|
62
|
+
|
|
63
|
+
Check:
|
|
64
|
+
|
|
65
|
+
- **CLI flags and subcommands**: run `uv run firecube ... --help`.
|
|
66
|
+
- **Config keys**: verify against config parsing and documented examples.
|
|
67
|
+
- **Public SDK imports**: verify names are exported from `firecube.ingestor.api` or `firecube.core.api`.
|
|
68
|
+
- **Plugin entry points**: verify entry point group names and loading behavior.
|
|
69
|
+
- **Default values**: verify against dataclasses/config classes.
|
|
70
|
+
- **Metric names and environment variables**: verify against source.
|
|
71
|
+
- **Test counts or marker claims**: verify by running or inspecting pytest config.
|
|
72
|
+
|
|
73
|
+
Do not check subjective claims such as "fast", "simple", or "production-ready"
|
|
74
|
+
unless the doc attaches a measurable value.
|
|
75
|
+
|
|
76
|
+
## 3. Report
|
|
77
|
+
|
|
78
|
+
For each finding:
|
|
79
|
+
|
|
80
|
+
```text
|
|
81
|
+
[ERROR|STALE|DRIFT] docs/path.md:LINE — Summary
|
|
82
|
+
Docs say:
|
|
83
|
+
Code says:
|
|
84
|
+
Suggested fix:
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
- **ERROR**: code example fails, command is invalid, API does not exist, or documented behavior is wrong.
|
|
88
|
+
- **STALE**: outdated value, renamed API, removed flag, or old config.
|
|
89
|
+
- **DRIFT**: minor mismatch such as wording, count, default, or incomplete example.
|
|
90
|
+
|
|
91
|
+
End with a summary:
|
|
92
|
+
|
|
93
|
+
- files checked
|
|
94
|
+
- blocks run/passed/failed/skipped
|
|
95
|
+
- claim issues found
|
|
96
|
+
|
|
97
|
+
For findings, propose fixes but do not apply them unless the user asked for edits.
|