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.
Files changed (782) hide show
  1. firecube-0.1.4/.github/ISSUE_TEMPLATE/1-bug_report.yml +101 -0
  2. firecube-0.1.4/.github/ISSUE_TEMPLATE/2-feature_request.yml +73 -0
  3. firecube-0.1.4/.github/ISSUE_TEMPLATE/config.yml +8 -0
  4. firecube-0.1.4/.github/PULL_REQUEST_TEMPLATE.md +50 -0
  5. firecube-0.1.4/.github/dependabot.yml +11 -0
  6. firecube-0.1.4/.github/workflows/ci.yml +60 -0
  7. firecube-0.1.4/.github/workflows/publish.yml +62 -0
  8. firecube-0.1.4/.gitignore +54 -0
  9. firecube-0.1.4/.prompts/address-pr-comments.md +84 -0
  10. firecube-0.1.4/.prompts/doc-fact-check.md +97 -0
  11. firecube-0.1.4/.prompts/docs-policy.md +101 -0
  12. firecube-0.1.4/.prompts/improve-code-coverage.md +92 -0
  13. firecube-0.1.4/.prompts/improve-edge-cases.md +76 -0
  14. firecube-0.1.4/.prompts/improve-error-handling.md +74 -0
  15. firecube-0.1.4/.prompts/make-further-pass.md +74 -0
  16. firecube-0.1.4/.prompts/make-release.md +249 -0
  17. firecube-0.1.4/.prompts/prepare-make-pr.md +101 -0
  18. firecube-0.1.4/.prompts/write-internal-doc.md +69 -0
  19. firecube-0.1.4/.prompts/write-operator-doc.md +82 -0
  20. firecube-0.1.4/.prompts/write-plugin-doc.md +87 -0
  21. firecube-0.1.4/.prompts/write-user-doc.md +76 -0
  22. firecube-0.1.4/AGENTS.md +137 -0
  23. firecube-0.1.4/AUTHORS.md +5 -0
  24. firecube-0.1.4/CHANGELOG.md +219 -0
  25. firecube-0.1.4/CODE_OF_CONDUCT.md +75 -0
  26. firecube-0.1.4/CONTRIBUTING.md +256 -0
  27. firecube-0.1.4/LICENSE +201 -0
  28. firecube-0.1.4/Makefile +89 -0
  29. firecube-0.1.4/PKG-INFO +242 -0
  30. firecube-0.1.4/README.md +197 -0
  31. firecube-0.1.4/dist/.gitignore +1 -0
  32. firecube-0.1.4/docs/_macros.py +236 -0
  33. firecube-0.1.4/docs/assets/firecube-amblem-white.png +0 -0
  34. firecube-0.1.4/docs/assets/firecube-amblem-white.png.ABOUT +11 -0
  35. firecube-0.1.4/docs/assets/firecube-favicon.png +0 -0
  36. firecube-0.1.4/docs/assets/firecube-favicon.png.ABOUT +11 -0
  37. firecube-0.1.4/docs/assets/firecube-logo-title-2x.png +0 -0
  38. firecube-0.1.4/docs/assets/firecube-logo-title-2x.png.ABOUT +11 -0
  39. firecube-0.1.4/docs/assets/firecube-logo-title.png +0 -0
  40. firecube-0.1.4/docs/assets/firecube-logo-title.png.ABOUT +11 -0
  41. firecube-0.1.4/docs/assets/images/firecube-chunkmanager-records.svg +68 -0
  42. firecube-0.1.4/docs/assets/images/firecube-chunkmanager-records.svg.ABOUT +11 -0
  43. firecube-0.1.4/docs/assets/images/firecube-concepts-flow.svg +76 -0
  44. firecube-0.1.4/docs/assets/images/firecube-concepts-flow.svg.ABOUT +11 -0
  45. firecube-0.1.4/docs/assets/images/firecube-direct-zarr-region.svg +59 -0
  46. firecube-0.1.4/docs/assets/images/firecube-direct-zarr-region.svg.ABOUT +11 -0
  47. firecube-0.1.4/docs/assets/images/firecube-execution-shapes.svg +50 -0
  48. firecube-0.1.4/docs/assets/images/firecube-execution-shapes.svg.ABOUT +11 -0
  49. firecube-0.1.4/docs/assets/images/firecube-external-orchestrator-contract.svg +64 -0
  50. firecube-0.1.4/docs/assets/images/firecube-external-orchestrator-contract.svg.ABOUT +11 -0
  51. firecube-0.1.4/docs/assets/images/firecube-generic-zarr-append.svg +51 -0
  52. firecube-0.1.4/docs/assets/images/firecube-generic-zarr-append.svg.ABOUT +11 -0
  53. firecube-0.1.4/docs/assets/images/firecube-generic-zarr-parallel-groups.svg +65 -0
  54. firecube-0.1.4/docs/assets/images/firecube-generic-zarr-parallel-groups.svg.ABOUT +11 -0
  55. firecube-0.1.4/docs/assets/images/firecube-observability-signals.svg +64 -0
  56. firecube-0.1.4/docs/assets/images/firecube-observability-signals.svg.ABOUT +11 -0
  57. firecube-0.1.4/docs/assets/images/firecube-orchestration-overview.svg +66 -0
  58. firecube-0.1.4/docs/assets/images/firecube-orchestration-overview.svg.ABOUT +11 -0
  59. firecube-0.1.4/docs/assets/images/firecube-orchestration-write-safety.svg +52 -0
  60. firecube-0.1.4/docs/assets/images/firecube-orchestration-write-safety.svg.ABOUT +11 -0
  61. firecube-0.1.4/docs/assets/images/firecube-output-format-choice.svg +48 -0
  62. firecube-0.1.4/docs/assets/images/firecube-output-format-choice.svg.ABOUT +11 -0
  63. firecube-0.1.4/docs/assets/images/firecube-parallel-zarr-slots.svg +57 -0
  64. firecube-0.1.4/docs/assets/images/firecube-parallel-zarr-slots.svg.ABOUT +11 -0
  65. firecube-0.1.4/docs/assets/images/firecube-parallelism-models.svg +79 -0
  66. firecube-0.1.4/docs/assets/images/firecube-parallelism-models.svg.ABOUT +11 -0
  67. firecube-0.1.4/docs/assets/images/firecube-parquet-file-layout.svg +60 -0
  68. firecube-0.1.4/docs/assets/images/firecube-parquet-file-layout.svg.ABOUT +11 -0
  69. firecube-0.1.4/docs/assets/images/firecube-performance-bottlenecks.svg +58 -0
  70. firecube-0.1.4/docs/assets/images/firecube-performance-bottlenecks.svg.ABOUT +11 -0
  71. firecube-0.1.4/docs/assets/images/firecube-storage-chunkmanager-flow.svg +57 -0
  72. firecube-0.1.4/docs/assets/images/firecube-storage-chunkmanager-flow.svg.ABOUT +11 -0
  73. firecube-0.1.4/docs/assets/images/firecube-tensogram-flow.svg +51 -0
  74. firecube-0.1.4/docs/assets/images/firecube-tensogram-flow.svg.ABOUT +11 -0
  75. firecube-0.1.4/docs/assets/images/firecube-zarr-store-layout.svg +70 -0
  76. firecube-0.1.4/docs/assets/images/firecube-zarr-store-layout.svg.ABOUT +11 -0
  77. firecube-0.1.4/docs/concepts/benchmarks.md +81 -0
  78. firecube-0.1.4/docs/concepts/best-practices.md +44 -0
  79. firecube-0.1.4/docs/concepts/chunk-management.md +65 -0
  80. firecube-0.1.4/docs/concepts/chunkmanager.md +47 -0
  81. firecube-0.1.4/docs/concepts/configuration.md +158 -0
  82. firecube-0.1.4/docs/concepts/glossary.md +65 -0
  83. firecube-0.1.4/docs/concepts/index.md +66 -0
  84. firecube-0.1.4/docs/concepts/observability/index.md +52 -0
  85. firecube-0.1.4/docs/concepts/observability/logs.md +73 -0
  86. firecube-0.1.4/docs/concepts/observability/metrics.md +112 -0
  87. firecube-0.1.4/docs/concepts/observability/traces.md +86 -0
  88. firecube-0.1.4/docs/concepts/orchestration/execution-shapes.md +55 -0
  89. firecube-0.1.4/docs/concepts/orchestration/external-orchestrator.md +55 -0
  90. firecube-0.1.4/docs/concepts/orchestration/retries.md +73 -0
  91. firecube-0.1.4/docs/concepts/orchestration/write-safety.md +50 -0
  92. firecube-0.1.4/docs/concepts/orchestration.md +51 -0
  93. firecube-0.1.4/docs/concepts/output-formats/archive.md +56 -0
  94. firecube-0.1.4/docs/concepts/output-formats/index.md +42 -0
  95. firecube-0.1.4/docs/concepts/output-formats/parquet.md +72 -0
  96. firecube-0.1.4/docs/concepts/output-formats/zarr/direct-region.md +66 -0
  97. firecube-0.1.4/docs/concepts/output-formats/zarr/generic-append.md +67 -0
  98. firecube-0.1.4/docs/concepts/output-formats/zarr/index.md +49 -0
  99. firecube-0.1.4/docs/concepts/output-formats/zarr/parallel-writes.md +232 -0
  100. firecube-0.1.4/docs/concepts/parallelism.md +89 -0
  101. firecube-0.1.4/docs/concepts/performance.md +163 -0
  102. firecube-0.1.4/docs/concepts/plugins/base-ingestor.md +134 -0
  103. firecube-0.1.4/docs/concepts/plugins/cli-and-config.md +177 -0
  104. firecube-0.1.4/docs/concepts/plugins/contract.md +232 -0
  105. firecube-0.1.4/docs/concepts/plugins/create-a-plugin.md +83 -0
  106. firecube-0.1.4/docs/concepts/plugins/direct-zarr.md +119 -0
  107. firecube-0.1.4/docs/concepts/plugins/generic-parquet.md +69 -0
  108. firecube-0.1.4/docs/concepts/plugins/generic-zarr.md +79 -0
  109. firecube-0.1.4/docs/concepts/plugins/index.md +46 -0
  110. firecube-0.1.4/docs/concepts/plugins/mixins.md +52 -0
  111. firecube-0.1.4/docs/concepts/plugins/observability.md +185 -0
  112. firecube-0.1.4/docs/concepts/plugins/storage-access.md +115 -0
  113. firecube-0.1.4/docs/concepts/production-guide.md +161 -0
  114. firecube-0.1.4/docs/concepts/storage.md +101 -0
  115. firecube-0.1.4/docs/contributing/firecube-contributors.md +159 -0
  116. firecube-0.1.4/docs/contributing/index.md +34 -0
  117. firecube-0.1.4/docs/contributing/plugin-authors.md +104 -0
  118. firecube-0.1.4/docs/index.md +65 -0
  119. firecube-0.1.4/docs/operations/archive/create.md +92 -0
  120. firecube-0.1.4/docs/operations/archive/index.md +43 -0
  121. firecube-0.1.4/docs/operations/archive/inspect.md +106 -0
  122. firecube-0.1.4/docs/operations/archive/restore.md +86 -0
  123. firecube-0.1.4/docs/operations/chunk-manager/delete.md +204 -0
  124. firecube-0.1.4/docs/operations/chunk-manager/index.md +63 -0
  125. firecube-0.1.4/docs/operations/chunk-manager/inspect.md +182 -0
  126. firecube-0.1.4/docs/operations/chunk-manager/post-crash-recovery.md +194 -0
  127. firecube-0.1.4/docs/operations/chunk-manager/recover.md +163 -0
  128. firecube-0.1.4/docs/operations/chunk-manager/snapshots.md +96 -0
  129. firecube-0.1.4/docs/operations/index.md +65 -0
  130. firecube-0.1.4/docs/quickstart/catalogs.md +85 -0
  131. firecube-0.1.4/docs/quickstart/configuration.md +56 -0
  132. firecube-0.1.4/docs/quickstart/index.md +34 -0
  133. firecube-0.1.4/docs/quickstart/ingestion.md +168 -0
  134. firecube-0.1.4/docs/quickstart/installation.md +38 -0
  135. firecube-0.1.4/docs/quickstart/plugins.md +105 -0
  136. firecube-0.1.4/docs/reference/api.md +487 -0
  137. firecube-0.1.4/docs/reference/cli.md +152 -0
  138. firecube-0.1.4/docs/reference/config.md +157 -0
  139. firecube-0.1.4/docs/reference/observability.md +136 -0
  140. firecube-0.1.4/docs/reference/storage-drivers.md +69 -0
  141. firecube-0.1.4/docs/tutorials/direct-zarr-parallel.md +386 -0
  142. firecube-0.1.4/docs/tutorials/index.md +36 -0
  143. firecube-0.1.4/docs/tutorials/observability.md +118 -0
  144. firecube-0.1.4/docs/tutorials/sentinel3-frp.md +241 -0
  145. firecube-0.1.4/docs/tutorials/source-discovery.md +148 -0
  146. firecube-0.1.4/docs/tutorials/weather-csv.md +278 -0
  147. firecube-0.1.4/mkdocs.yml +161 -0
  148. firecube-0.1.4/plans/DESIGN.md +128 -0
  149. firecube-0.1.4/plans/DONE.md +1385 -0
  150. firecube-0.1.4/plans/IDEAS.md +263 -0
  151. firecube-0.1.4/plans/RELEASE.md +138 -0
  152. firecube-0.1.4/plans/STYLE.md +63 -0
  153. firecube-0.1.4/plans/TEST.md +144 -0
  154. firecube-0.1.4/plans/TESTING_STANDARDS.md +269 -0
  155. firecube-0.1.4/plans/TEST_GAPS.md +99 -0
  156. firecube-0.1.4/plans/TODO.md +376 -0
  157. firecube-0.1.4/pyproject.toml +132 -0
  158. firecube-0.1.4/src/firecube/__init__.py +23 -0
  159. firecube-0.1.4/src/firecube/__main__.py +20 -0
  160. firecube-0.1.4/src/firecube/_version.py +46 -0
  161. firecube-0.1.4/src/firecube/cli/_audience.py +135 -0
  162. firecube-0.1.4/src/firecube/cli/_command_schemas.py +112 -0
  163. firecube-0.1.4/src/firecube/cli/_ctx.py +85 -0
  164. firecube-0.1.4/src/firecube/cli/_errors.py +115 -0
  165. firecube-0.1.4/src/firecube/cli/_formatter.py +195 -0
  166. firecube-0.1.4/src/firecube/cli/_product.py +47 -0
  167. firecube-0.1.4/src/firecube/cli/_rename_hints.py +123 -0
  168. firecube-0.1.4/src/firecube/cli/_shared_options.py +247 -0
  169. firecube-0.1.4/src/firecube/cli/_slot_env.py +102 -0
  170. firecube-0.1.4/src/firecube/cli/_slot_planning.py +95 -0
  171. firecube-0.1.4/src/firecube/cli/_typed_options.py +181 -0
  172. firecube-0.1.4/src/firecube/cli/_uri_policy.py +110 -0
  173. firecube-0.1.4/src/firecube/cli/advise.py +321 -0
  174. firecube-0.1.4/src/firecube/cli/archive.py +870 -0
  175. firecube-0.1.4/src/firecube/cli/catalog.py +196 -0
  176. firecube-0.1.4/src/firecube/cli/chunks/__init__.py +74 -0
  177. firecube-0.1.4/src/firecube/cli/chunks/_claims.py +229 -0
  178. firecube-0.1.4/src/firecube/cli/chunks/_common.py +84 -0
  179. firecube-0.1.4/src/firecube/cli/chunks/_delete.py +376 -0
  180. firecube-0.1.4/src/firecube/cli/chunks/_list.py +334 -0
  181. firecube-0.1.4/src/firecube/cli/chunks/_manager.py +161 -0
  182. firecube-0.1.4/src/firecube/cli/chunks/_runs.py +294 -0
  183. firecube-0.1.4/src/firecube/cli/chunks/_snapshots.py +165 -0
  184. firecube-0.1.4/src/firecube/cli/completion.py +73 -0
  185. firecube-0.1.4/src/firecube/cli/main.py +866 -0
  186. firecube-0.1.4/src/firecube/cli/parquet.py +289 -0
  187. firecube-0.1.4/src/firecube/cli/plugins/__init__.py +28 -0
  188. firecube-0.1.4/src/firecube/cli/plugins/commands.py +262 -0
  189. firecube-0.1.4/src/firecube/cli/plugins/introspect.py +304 -0
  190. firecube-0.1.4/src/firecube/cli/plugins/mgmt.py +198 -0
  191. firecube-0.1.4/src/firecube/cli/plugins/registry.py +132 -0
  192. firecube-0.1.4/src/firecube/cli/zarr.py +1043 -0
  193. firecube-0.1.4/src/firecube/core/__init__.py +14 -0
  194. firecube-0.1.4/src/firecube/core/api.py +88 -0
  195. firecube-0.1.4/src/firecube/core/cf/__init__.py +23 -0
  196. firecube-0.1.4/src/firecube/core/cf/check_ids.py +126 -0
  197. firecube-0.1.4/src/firecube/core/cf/report.py +57 -0
  198. firecube-0.1.4/src/firecube/core/cf/validator.py +313 -0
  199. firecube-0.1.4/src/firecube/core/config.py +307 -0
  200. firecube-0.1.4/src/firecube/core/controlplane/__init__.py +47 -0
  201. firecube-0.1.4/src/firecube/core/controlplane/_event_processor.py +136 -0
  202. firecube-0.1.4/src/firecube/core/controlplane/_helpers.py +114 -0
  203. firecube-0.1.4/src/firecube/core/controlplane/_projection.py +253 -0
  204. firecube-0.1.4/src/firecube/core/controlplane/_snapshot.py +215 -0
  205. firecube-0.1.4/src/firecube/core/controlplane/_wal_reader.py +402 -0
  206. firecube-0.1.4/src/firecube/core/controlplane/_wal_writer.py +589 -0
  207. firecube-0.1.4/src/firecube/core/controlplane/claims.py +294 -0
  208. firecube-0.1.4/src/firecube/core/controlplane/deletion.py +704 -0
  209. firecube-0.1.4/src/firecube/core/controlplane/events.py +219 -0
  210. firecube-0.1.4/src/firecube/core/controlplane/manager.py +990 -0
  211. firecube-0.1.4/src/firecube/core/controlplane/metrics.py +97 -0
  212. firecube-0.1.4/src/firecube/core/controlplane/repo.py +804 -0
  213. firecube-0.1.4/src/firecube/core/controlplane/repo_utils.py +73 -0
  214. firecube-0.1.4/src/firecube/core/controlplane/time_dim.py +111 -0
  215. firecube-0.1.4/src/firecube/core/controlplane/types.py +445 -0
  216. firecube-0.1.4/src/firecube/core/credentials.py +36 -0
  217. firecube-0.1.4/src/firecube/core/duckdb/__init__.py +27 -0
  218. firecube-0.1.4/src/firecube/core/duckdb/bridge.py +82 -0
  219. firecube-0.1.4/src/firecube/core/duckdb/io.py +30 -0
  220. firecube-0.1.4/src/firecube/core/errors.py +74 -0
  221. firecube-0.1.4/src/firecube/core/filesystem/__init__.py +60 -0
  222. firecube-0.1.4/src/firecube/core/filesystem/_obstore_compat.py +60 -0
  223. firecube-0.1.4/src/firecube/core/filesystem/fsspec_backend.py +308 -0
  224. firecube-0.1.4/src/firecube/core/filesystem/instrumentation.py +260 -0
  225. firecube-0.1.4/src/firecube/core/filesystem/obstore_backend.py +406 -0
  226. firecube-0.1.4/src/firecube/core/filesystem/ops.py +412 -0
  227. firecube-0.1.4/src/firecube/core/filesystem/protocol.py +130 -0
  228. firecube-0.1.4/src/firecube/core/filesystem/store_factory.py +149 -0
  229. firecube-0.1.4/src/firecube/core/formats/__init__.py +46 -0
  230. firecube-0.1.4/src/firecube/core/formats/_iso.py +84 -0
  231. firecube-0.1.4/src/firecube/core/formats/discovery.py +165 -0
  232. firecube-0.1.4/src/firecube/core/formats/hdf5.py +137 -0
  233. firecube-0.1.4/src/firecube/core/formats/netcdf.py +226 -0
  234. firecube-0.1.4/src/firecube/core/formats/zip.py +192 -0
  235. firecube-0.1.4/src/firecube/core/intake.py +530 -0
  236. firecube-0.1.4/src/firecube/core/observability/__init__.py +72 -0
  237. firecube-0.1.4/src/firecube/core/observability/_state.py +24 -0
  238. firecube-0.1.4/src/firecube/core/observability/logging.py +147 -0
  239. firecube-0.1.4/src/firecube/core/observability/metrics.py +230 -0
  240. firecube-0.1.4/src/firecube/core/observability/telemetry/__init__.py +87 -0
  241. firecube-0.1.4/src/firecube/core/observability/telemetry/pushgateway.py +339 -0
  242. firecube-0.1.4/src/firecube/core/observability/telemetry/sinks.py +155 -0
  243. firecube-0.1.4/src/firecube/core/observability/tracing.py +126 -0
  244. firecube-0.1.4/src/firecube/core/product/__init__.py +45 -0
  245. firecube-0.1.4/src/firecube/core/product/identity.py +76 -0
  246. firecube-0.1.4/src/firecube/core/product/resolver.py +121 -0
  247. firecube-0.1.4/src/firecube/core/product/target.py +120 -0
  248. firecube-0.1.4/src/firecube/core/runtime.py +187 -0
  249. firecube-0.1.4/src/firecube/core/slot_index.py +205 -0
  250. firecube-0.1.4/src/firecube/core/storage/__init__.py +45 -0
  251. firecube-0.1.4/src/firecube/core/storage/binding.py +39 -0
  252. firecube-0.1.4/src/firecube/core/storage/cache_key.py +40 -0
  253. firecube-0.1.4/src/firecube/core/storage/completion.py +245 -0
  254. firecube-0.1.4/src/firecube/core/storage/driver_config.py +125 -0
  255. firecube-0.1.4/src/firecube/core/storage/results.py +30 -0
  256. firecube-0.1.4/src/firecube/core/storage/session.py +431 -0
  257. firecube-0.1.4/src/firecube/core/storage/transfer.py +142 -0
  258. firecube-0.1.4/src/firecube/core/storage/uri.py +173 -0
  259. firecube-0.1.4/src/firecube/core/tensogram/__init__.py +37 -0
  260. firecube-0.1.4/src/firecube/core/tensogram/_compat.py +36 -0
  261. firecube-0.1.4/src/firecube/core/tensogram/controlplane_codec.py +230 -0
  262. firecube-0.1.4/src/firecube/core/tensogram/converter.py +390 -0
  263. firecube-0.1.4/src/firecube/core/tensogram/metadata.py +274 -0
  264. firecube-0.1.4/src/firecube/core/tensogram/restore.py +303 -0
  265. firecube-0.1.4/src/firecube/core/tensogram/schema.py +93 -0
  266. firecube-0.1.4/src/firecube/core/uris.py +182 -0
  267. firecube-0.1.4/src/firecube/core/workspaces.py +68 -0
  268. firecube-0.1.4/src/firecube/core/zarr/__init__.py +69 -0
  269. firecube-0.1.4/src/firecube/core/zarr/_reserved_attrs.py +47 -0
  270. firecube-0.1.4/src/firecube/core/zarr/_reserved_root_attrs.py +74 -0
  271. firecube-0.1.4/src/firecube/core/zarr/io.py +88 -0
  272. firecube-0.1.4/src/firecube/core/zarr/layers.py +184 -0
  273. firecube-0.1.4/src/firecube/core/zarr/multires.py +178 -0
  274. firecube-0.1.4/src/firecube/core/zarr/region_writer.py +782 -0
  275. firecube-0.1.4/src/firecube/core/zarr/scrub.py +200 -0
  276. firecube-0.1.4/src/firecube/core/zarr/state.py +258 -0
  277. firecube-0.1.4/src/firecube/core/zarr/time_decode.py +71 -0
  278. firecube-0.1.4/src/firecube/core/zarr/validation.py +622 -0
  279. firecube-0.1.4/src/firecube/ingestor/__init__.py +27 -0
  280. firecube-0.1.4/src/firecube/ingestor/api.py +215 -0
  281. firecube-0.1.4/src/firecube/ingestor/config/__init__.py +19 -0
  282. firecube-0.1.4/src/firecube/ingestor/config/coercion.py +157 -0
  283. firecube-0.1.4/src/firecube/ingestor/config/engine.py +188 -0
  284. firecube-0.1.4/src/firecube/ingestor/contracts/__init__.py +14 -0
  285. firecube-0.1.4/src/firecube/ingestor/contracts/interfaces.py +235 -0
  286. firecube-0.1.4/src/firecube/ingestor/devtools/_templates/__init__.py +14 -0
  287. firecube-0.1.4/src/firecube/ingestor/devtools/_templates/ingestor_base.py.tpl +72 -0
  288. firecube-0.1.4/src/firecube/ingestor/devtools/_templates/ingestor_direct_zarr.py.tpl +66 -0
  289. firecube-0.1.4/src/firecube/ingestor/devtools/_templates/ingestor_parquet.py.tpl +59 -0
  290. firecube-0.1.4/src/firecube/ingestor/devtools/_templates/ingestor_zarr.py.tpl +55 -0
  291. firecube-0.1.4/src/firecube/ingestor/devtools/_templates/readme.md.tpl +40 -0
  292. firecube-0.1.4/src/firecube/ingestor/devtools/scaffolding.py +229 -0
  293. firecube-0.1.4/src/firecube/ingestor/errors.py +79 -0
  294. firecube-0.1.4/src/firecube/ingestor/extensions/_binning.py +152 -0
  295. firecube-0.1.4/src/firecube/ingestor/extensions/duck.py +153 -0
  296. firecube-0.1.4/src/firecube/ingestor/extensions/grid.py +287 -0
  297. firecube-0.1.4/src/firecube/ingestor/extensions/healpix.py +330 -0
  298. firecube-0.1.4/src/firecube/ingestor/registry/__init__.py +14 -0
  299. firecube-0.1.4/src/firecube/ingestor/registry/loader.py +144 -0
  300. firecube-0.1.4/src/firecube/ingestor/registry/metadata.py +97 -0
  301. firecube-0.1.4/src/firecube/ingestor/registry/version_compat.py +95 -0
  302. firecube-0.1.4/src/firecube/ingestor/runtime/__init__.py +14 -0
  303. firecube-0.1.4/src/firecube/ingestor/runtime/aggregation.py +112 -0
  304. firecube-0.1.4/src/firecube/ingestor/runtime/base.py +836 -0
  305. firecube-0.1.4/src/firecube/ingestor/runtime/base_hooks.py +129 -0
  306. firecube-0.1.4/src/firecube/ingestor/runtime/batching.py +161 -0
  307. firecube-0.1.4/src/firecube/ingestor/runtime/configure.py +195 -0
  308. firecube-0.1.4/src/firecube/ingestor/runtime/coverage.py +177 -0
  309. firecube-0.1.4/src/firecube/ingestor/runtime/engine.py +793 -0
  310. firecube-0.1.4/src/firecube/ingestor/runtime/parallel_evidence.py +75 -0
  311. firecube-0.1.4/src/firecube/ingestor/runtime/parallel_execution_state.py +28 -0
  312. firecube-0.1.4/src/firecube/ingestor/runtime/parallel_gate.py +164 -0
  313. firecube-0.1.4/src/firecube/ingestor/runtime/parallel_run_id.py +48 -0
  314. firecube-0.1.4/src/firecube/ingestor/runtime/preflight.py +40 -0
  315. firecube-0.1.4/src/firecube/ingestor/runtime/recording.py +425 -0
  316. firecube-0.1.4/src/firecube/ingestor/runtime/resume_guard.py +556 -0
  317. firecube-0.1.4/src/firecube/ingestor/runtime/resume_types.py +65 -0
  318. firecube-0.1.4/src/firecube/ingestor/runtime/telemetry.py +171 -0
  319. firecube-0.1.4/src/firecube/ingestor/runtime/tensogram/__init__.py +14 -0
  320. firecube-0.1.4/src/firecube/ingestor/runtime/tensogram/strategy.py +164 -0
  321. firecube-0.1.4/src/firecube/ingestor/runtime/workspace.py +220 -0
  322. firecube-0.1.4/src/firecube/ingestor/runtime/zarr/__init__.py +34 -0
  323. firecube-0.1.4/src/firecube/ingestor/runtime/zarr/append.py +466 -0
  324. firecube-0.1.4/src/firecube/ingestor/runtime/zarr/append_services.py +650 -0
  325. firecube-0.1.4/src/firecube/ingestor/runtime/zarr/batch_runner.py +190 -0
  326. firecube-0.1.4/src/firecube/ingestor/runtime/zarr/contracts.py +58 -0
  327. firecube-0.1.4/src/firecube/ingestor/runtime/zarr/existing_cube_check.py +282 -0
  328. firecube-0.1.4/src/firecube/ingestor/runtime/zarr/resume_cache.py +92 -0
  329. firecube-0.1.4/src/firecube/ingestor/runtime/zarr/staged_metadata.py +249 -0
  330. firecube-0.1.4/src/firecube/ingestor/runtime/zarr/strategies/__init__.py +15 -0
  331. firecube-0.1.4/src/firecube/ingestor/runtime/zarr/strategies/append.py +172 -0
  332. firecube-0.1.4/src/firecube/ingestor/runtime/zarr/strategies/indexed_region.py +426 -0
  333. firecube-0.1.4/src/firecube/ingestor/runtime/zarr/write.py +212 -0
  334. firecube-0.1.4/src/firecube/ingestor/runtime/zarr/write_context.py +139 -0
  335. firecube-0.1.4/src/firecube/ingestor/templates/__init__.py +19 -0
  336. firecube-0.1.4/src/firecube/ingestor/templates/config.py +118 -0
  337. firecube-0.1.4/src/firecube/ingestor/templates/direct_zarr.py +790 -0
  338. firecube-0.1.4/src/firecube/ingestor/templates/generic.py +462 -0
  339. firecube-0.1.4/src/firecube/ingestor/templates/generic_tensogram.py +170 -0
  340. firecube-0.1.4/src/firecube/ingestor/types/__init__.py +19 -0
  341. firecube-0.1.4/src/firecube/ingestor/types/config.py +89 -0
  342. firecube-0.1.4/src/firecube/ingestor/types/context.py +409 -0
  343. firecube-0.1.4/src/firecube/ingestor/types/manifest.py +53 -0
  344. firecube-0.1.4/src/firecube/ingestor/types/planned_range.py +152 -0
  345. firecube-0.1.4/src/firecube/ingestor/types/result_metrics.py +386 -0
  346. firecube-0.1.4/src/firecube/ingestor/utils/__init__.py +14 -0
  347. firecube-0.1.4/src/firecube/ingestor/utils/duckdb_utils.py +235 -0
  348. firecube-0.1.4/src/firecube/ingestor/validation.py +55 -0
  349. firecube-0.1.4/tests/README.md +93 -0
  350. firecube-0.1.4/tests/__init__.py +15 -0
  351. firecube-0.1.4/tests/architecture/conftest.py +22 -0
  352. firecube-0.1.4/tests/architecture/test_chunks_manager_no_parent_reconstruction.py +30 -0
  353. firecube-0.1.4/tests/architecture/test_core_independence.py +70 -0
  354. firecube-0.1.4/tests/architecture/test_import_boundaries.py +114 -0
  355. firecube-0.1.4/tests/architecture/test_no_cli_inference.py +140 -0
  356. firecube-0.1.4/tests/architecture/test_no_internal_output_path_reads.py +49 -0
  357. firecube-0.1.4/tests/architecture/test_no_naked_fill_value_comparison.py +139 -0
  358. firecube-0.1.4/tests/architecture/test_no_raw_pd_timestamp_numeric.py +136 -0
  359. firecube-0.1.4/tests/architecture/test_no_storage_config_subclasses.py +92 -0
  360. firecube-0.1.4/tests/architecture/test_no_unguarded_time_count_substitution.py +167 -0
  361. firecube-0.1.4/tests/architecture/test_plugin_isolation.py +97 -0
  362. firecube-0.1.4/tests/architecture/test_product_name_required.py +44 -0
  363. firecube-0.1.4/tests/architecture/test_storage_driver_config_boundary.py +112 -0
  364. firecube-0.1.4/tests/architecture/test_storage_flows.py +881 -0
  365. firecube-0.1.4/tests/architecture/test_storage_redaction.py +335 -0
  366. firecube-0.1.4/tests/architecture/test_storage_type_coherence.py +199 -0
  367. firecube-0.1.4/tests/architecture/test_typed_pipeline_result.py +53 -0
  368. firecube-0.1.4/tests/benchmarks/__init__.py +14 -0
  369. firecube-0.1.4/tests/benchmarks/bench_resume_queries.py +214 -0
  370. firecube-0.1.4/tests/cli/__init__.py +14 -0
  371. firecube-0.1.4/tests/cli/_cli_introspection.py +201 -0
  372. firecube-0.1.4/tests/cli/_command_contracts.py +366 -0
  373. firecube-0.1.4/tests/cli/conftest.py +30 -0
  374. firecube-0.1.4/tests/cli/test_advise_batch_size_contract.py +77 -0
  375. firecube-0.1.4/tests/cli/test_advise_compliance_contract.py +150 -0
  376. firecube-0.1.4/tests/cli/test_archive_artifact_uri_contract.py +73 -0
  377. firecube-0.1.4/tests/cli/test_archive_create_contract.py +99 -0
  378. firecube-0.1.4/tests/cli/test_archive_no_double_pass.py +74 -0
  379. firecube-0.1.4/tests/cli/test_archive_restore_contract.py +61 -0
  380. firecube-0.1.4/tests/cli/test_audience_groups.py +80 -0
  381. firecube-0.1.4/tests/cli/test_catalog_intake_contract.py +182 -0
  382. firecube-0.1.4/tests/cli/test_chunks_manager_typed.py +165 -0
  383. firecube-0.1.4/tests/cli/test_chunks_storage_banner.py +155 -0
  384. firecube-0.1.4/tests/cli/test_cli_contract_matrix.py +110 -0
  385. firecube-0.1.4/tests/cli/test_cli_introspection_drift.py +42 -0
  386. firecube-0.1.4/tests/cli/test_click_error_boundary.py +80 -0
  387. firecube-0.1.4/tests/cli/test_help_conformance.py +93 -0
  388. firecube-0.1.4/tests/cli/test_ingest_decorator_consistency.py +113 -0
  389. firecube-0.1.4/tests/cli/test_parquet_consolidate_output_artifact.py +56 -0
  390. firecube-0.1.4/tests/cli/test_parquet_validate_contract.py +118 -0
  391. firecube-0.1.4/tests/cli/test_per_command_contracts.py +269 -0
  392. firecube-0.1.4/tests/cli/test_rename_hints.py +138 -0
  393. firecube-0.1.4/tests/cli/test_runs_list_slot_fields.py +100 -0
  394. firecube-0.1.4/tests/cli/test_shared_options.py +75 -0
  395. firecube-0.1.4/tests/cli/test_uri_scheme_policy.py +177 -0
  396. firecube-0.1.4/tests/cli/test_zarr_multires_contract.py +65 -0
  397. firecube-0.1.4/tests/cli/test_zarr_validate_contract.py +125 -0
  398. firecube-0.1.4/tests/conftest.py +269 -0
  399. firecube-0.1.4/tests/fixtures/cf_dataset_fixtures.py +114 -0
  400. firecube-0.1.4/tests/fixtures/cf_time_dim_test_plugin/pyproject.toml +15 -0
  401. firecube-0.1.4/tests/fixtures/cf_time_dim_test_plugin/src/cf_time_dim_test_plugin/__init__.py +17 -0
  402. firecube-0.1.4/tests/fixtures/cf_time_dim_test_plugin/src/cf_time_dim_test_plugin/ingestor.py +180 -0
  403. firecube-0.1.4/tests/fixtures/cli_test_plugin/pyproject.toml +11 -0
  404. firecube-0.1.4/tests/fixtures/cli_test_plugin/src/cli_test_plugin/__init__.py +57 -0
  405. firecube-0.1.4/tests/fixtures/demo_plugin/pyproject.toml +22 -0
  406. firecube-0.1.4/tests/fixtures/demo_plugin/src/demo_plugin/__init__.py +14 -0
  407. firecube-0.1.4/tests/fixtures/demo_plugin/src/demo_plugin/plugin.py +46 -0
  408. firecube-0.1.4/tests/fixtures/demo_plugin/src/demo_plugin/plugin_cli.py +28 -0
  409. firecube-0.1.4/tests/fixtures/direct_zarr_capable_test_plugin/pyproject.toml +11 -0
  410. firecube-0.1.4/tests/fixtures/direct_zarr_capable_test_plugin/src/direct_zarr_capable_test_plugin/__init__.py +106 -0
  411. firecube-0.1.4/tests/fixtures/direct_zarr_non_capable_test_plugin/pyproject.toml +11 -0
  412. firecube-0.1.4/tests/fixtures/direct_zarr_non_capable_test_plugin/src/direct_zarr_non_capable_test_plugin/__init__.py +62 -0
  413. firecube-0.1.4/tests/fixtures/multi_group_capable_test_plugin/pyproject.toml +14 -0
  414. firecube-0.1.4/tests/fixtures/multi_group_capable_test_plugin/src/multi_group_capable_test_plugin/__init__.py +183 -0
  415. firecube-0.1.4/tests/fixtures/slot_shape_test_plugin/pyproject.toml +12 -0
  416. firecube-0.1.4/tests/fixtures/slot_shape_test_plugin/src/slot_shape_test_plugin/__init__.py +135 -0
  417. firecube-0.1.4/tests/fixtures/test_stub_ingestor/__init__.py +17 -0
  418. firecube-0.1.4/tests/fixtures/test_stub_ingestor/plugin.py +43 -0
  419. firecube-0.1.4/tests/fixtures/test_stub_ingestor/run_firecube.py +30 -0
  420. firecube-0.1.4/tests/helpers/__init__.py +14 -0
  421. firecube-0.1.4/tests/helpers/storage.py +200 -0
  422. firecube-0.1.4/tests/helpers/test_storage_helpers.py +155 -0
  423. firecube-0.1.4/tests/ingestor/test_config_architecture.py +195 -0
  424. firecube-0.1.4/tests/ingestor/test_refactor_safeties.py +57 -0
  425. firecube-0.1.4/tests/integration/__init__.py +15 -0
  426. firecube-0.1.4/tests/integration/_bt_helpers.py +281 -0
  427. firecube-0.1.4/tests/integration/test_append_strategy_behavior.py +168 -0
  428. firecube-0.1.4/tests/integration/test_architecture_invariants.py +520 -0
  429. firecube-0.1.4/tests/integration/test_archive_drivers.py +98 -0
  430. firecube-0.1.4/tests/integration/test_archive_remote.py +90 -0
  431. firecube-0.1.4/tests/integration/test_archive_restore_audit.py +292 -0
  432. firecube-0.1.4/tests/integration/test_cf_time_dim_telemetry.py +180 -0
  433. firecube-0.1.4/tests/integration/test_cf_time_dim_value_dedup.py +125 -0
  434. firecube-0.1.4/tests/integration/test_cli_advise_compliance.py +222 -0
  435. firecube-0.1.4/tests/integration/test_cli_chunks_fallback_unchanged.py +276 -0
  436. firecube-0.1.4/tests/integration/test_cli_chunks_runs_target.py +353 -0
  437. firecube-0.1.4/tests/integration/test_cli_chunks_s3_basename_mismatch.py +139 -0
  438. firecube-0.1.4/tests/integration/test_cli_chunks_storage_config_fallback.py +120 -0
  439. firecube-0.1.4/tests/integration/test_cli_fresh_target_ingest.py +149 -0
  440. firecube-0.1.4/tests/integration/test_cli_inference_baseline.py +79 -0
  441. firecube-0.1.4/tests/integration/test_cli_input_data_presence.py +247 -0
  442. firecube-0.1.4/tests/integration/test_cli_plugin_shims.py +42 -0
  443. firecube-0.1.4/tests/integration/test_cli_zarr_preallocate_lifecycle.py +191 -0
  444. firecube-0.1.4/tests/integration/test_cli_zarr_preallocate_slot_index.py +259 -0
  445. firecube-0.1.4/tests/integration/test_cli_zarr_preallocate_spec_attrs.py +165 -0
  446. firecube-0.1.4/tests/integration/test_cli_zarr_preallocate_typed_config.py +179 -0
  447. firecube-0.1.4/tests/integration/test_compat_matrix.py +131 -0
  448. firecube-0.1.4/tests/integration/test_concurrent_same_product.py +319 -0
  449. firecube-0.1.4/tests/integration/test_crash_recovery_bulk_sweep.py +415 -0
  450. firecube-0.1.4/tests/integration/test_direct_zarr_parity_slot_range.py +244 -0
  451. firecube-0.1.4/tests/integration/test_direct_zarr_schema_claim_retry.py +209 -0
  452. firecube-0.1.4/tests/integration/test_direct_zarr_startup_slot_index.py +379 -0
  453. firecube-0.1.4/tests/integration/test_direct_zarr_xr_open_roundtrip.py +228 -0
  454. firecube-0.1.4/tests/integration/test_driver_compliance_vertical_slice.py +139 -0
  455. firecube-0.1.4/tests/integration/test_e2e_time_dim_plugin.py +232 -0
  456. firecube-0.1.4/tests/integration/test_engine_failed_batch_wal.py +97 -0
  457. firecube-0.1.4/tests/integration/test_existing_cube_check_directzarr.py +84 -0
  458. firecube-0.1.4/tests/integration/test_existing_cube_check_multigroup_plugin.py +65 -0
  459. firecube-0.1.4/tests/integration/test_existing_cube_check_parallel_path.py +128 -0
  460. firecube-0.1.4/tests/integration/test_existing_cube_check_static_arrays.py +75 -0
  461. firecube-0.1.4/tests/integration/test_existing_cube_mismatch.py +218 -0
  462. firecube-0.1.4/tests/integration/test_force_reingest_state.py +695 -0
  463. firecube-0.1.4/tests/integration/test_indexed_region_behavior.py +187 -0
  464. firecube-0.1.4/tests/integration/test_ingest_command_typed.py +230 -0
  465. firecube-0.1.4/tests/integration/test_maintenance_audit.py +359 -0
  466. firecube-0.1.4/tests/integration/test_maintenance_claims.py +219 -0
  467. firecube-0.1.4/tests/integration/test_obstore_claim_atomicity.py +207 -0
  468. firecube-0.1.4/tests/integration/test_obstore_s3_keys.py +221 -0
  469. firecube-0.1.4/tests/integration/test_obstore_streaming_upload.py +344 -0
  470. firecube-0.1.4/tests/integration/test_one_driver_invariant.py +295 -0
  471. firecube-0.1.4/tests/integration/test_ordering_pollution_regression.py +145 -0
  472. firecube-0.1.4/tests/integration/test_otel_context_concurrency.py +435 -0
  473. firecube-0.1.4/tests/integration/test_parquet_drivers.py +229 -0
  474. firecube-0.1.4/tests/integration/test_phase2_behavior_preserved.py +270 -0
  475. firecube-0.1.4/tests/integration/test_phase3_2_multi_group_run_isolation.py +94 -0
  476. firecube-0.1.4/tests/integration/test_phase3_3_encoded_run_id_lifecycle.py +184 -0
  477. firecube-0.1.4/tests/integration/test_phase3_3_phantom_group_e2e.py +164 -0
  478. firecube-0.1.4/tests/integration/test_phase3_3_plan_to_ingest_contract.py +270 -0
  479. firecube-0.1.4/tests/integration/test_phase3_3_sequential_slot_filter.py +108 -0
  480. firecube-0.1.4/tests/integration/test_phase3_4_cli_phantom_group.py +287 -0
  481. firecube-0.1.4/tests/integration/test_phase3_5_blocked_ranges.py +124 -0
  482. firecube-0.1.4/tests/integration/test_phase3_single_group_preserved.py +137 -0
  483. firecube-0.1.4/tests/integration/test_pipeline_manifest_creation.py +90 -0
  484. firecube-0.1.4/tests/integration/test_plugin_lifecycle.py +137 -0
  485. firecube-0.1.4/tests/integration/test_run_terminal_slot_preservation.py +240 -0
  486. firecube-0.1.4/tests/integration/test_slot_index_concurrency.py +382 -0
  487. firecube-0.1.4/tests/integration/test_slot_index_fixture_plugins.py +246 -0
  488. firecube-0.1.4/tests/integration/test_slot_index_non_parallel.py +187 -0
  489. firecube-0.1.4/tests/integration/test_slot_index_precedence_matrix.py +295 -0
  490. firecube-0.1.4/tests/integration/test_slot_index_s3_precondition_retry.py +132 -0
  491. firecube-0.1.4/tests/integration/test_staged_mode_template_parity.py +654 -0
  492. firecube-0.1.4/tests/integration/test_staged_write_resume.py +88 -0
  493. firecube-0.1.4/tests/integration/test_static_intent_nan_fill.py +115 -0
  494. firecube-0.1.4/tests/integration/test_static_spec_shape_preservation.py +166 -0
  495. firecube-0.1.4/tests/integration/test_storage_driver_integration.py +278 -0
  496. firecube-0.1.4/tests/integration/test_tensogram_archive.py +457 -0
  497. firecube-0.1.4/tests/integration/test_upload_tree_hard_fail.py +251 -0
  498. firecube-0.1.4/tests/integration/test_version_compat.py +91 -0
  499. firecube-0.1.4/tests/integration/test_wal_concurrent_ordering.py +547 -0
  500. firecube-0.1.4/tests/integration/test_workspace_materialization_race.py +350 -0
  501. firecube-0.1.4/tests/sdk/test_plugin_contract.py +101 -0
  502. firecube-0.1.4/tests/sdk/test_public_api_surface.py +100 -0
  503. firecube-0.1.4/tests/sdk/test_scratch_module_deleted.py +24 -0
  504. firecube-0.1.4/tests/test_zarr_sharding.py +335 -0
  505. firecube-0.1.4/tests/unit/__init__.py +15 -0
  506. firecube-0.1.4/tests/unit/_helpers/__init__.py +15 -0
  507. firecube-0.1.4/tests/unit/_helpers/conftest.py +28 -0
  508. firecube-0.1.4/tests/unit/_helpers/counting_fs.py +124 -0
  509. firecube-0.1.4/tests/unit/_helpers/test_counting_fs.py +64 -0
  510. firecube-0.1.4/tests/unit/ingestor/extensions/test_grid.py +79 -0
  511. firecube-0.1.4/tests/unit/ingestor/extensions/test_healpix.py +155 -0
  512. firecube-0.1.4/tests/unit/ingestor/extensions/test_lazy_duckdb.py +44 -0
  513. firecube-0.1.4/tests/unit/ingestor/runtime/test_output_resolution.py +68 -0
  514. firecube-0.1.4/tests/unit/ingestor/types/test_ingest_context.py +91 -0
  515. firecube-0.1.4/tests/unit/ingestor/types/test_ingest_context_contract.py +50 -0
  516. firecube-0.1.4/tests/unit/observability/test_factory.py +69 -0
  517. firecube-0.1.4/tests/unit/observability/test_label_sanitization.py +33 -0
  518. firecube-0.1.4/tests/unit/observability/test_protocol_surface.py +29 -0
  519. firecube-0.1.4/tests/unit/observability/test_pushgateway_emit.py +31 -0
  520. firecube-0.1.4/tests/unit/observability/test_pushgateway_flush.py +71 -0
  521. firecube-0.1.4/tests/unit/observability/test_pushgateway_labels.py +37 -0
  522. firecube-0.1.4/tests/unit/test_advise_cli.py +101 -0
  523. firecube-0.1.4/tests/unit/test_all_arrays_chunk_alignment.py +56 -0
  524. firecube-0.1.4/tests/unit/test_append_coverage_builder.py +149 -0
  525. firecube-0.1.4/tests/unit/test_append_coverage_builder_time_decode.py +127 -0
  526. firecube-0.1.4/tests/unit/test_append_regression.py +754 -0
  527. firecube-0.1.4/tests/unit/test_append_resume_service.py +261 -0
  528. firecube-0.1.4/tests/unit/test_append_services_custom_dim.py +117 -0
  529. firecube-0.1.4/tests/unit/test_append_services_require_time_dim.py +38 -0
  530. firecube-0.1.4/tests/unit/test_append_state_dim_propagation.py +58 -0
  531. firecube-0.1.4/tests/unit/test_append_strategy.py +55 -0
  532. firecube-0.1.4/tests/unit/test_append_strategy_custom_dim.py +64 -0
  533. firecube-0.1.4/tests/unit/test_append_timestamp_state.py +154 -0
  534. firecube-0.1.4/tests/unit/test_append_with_custom_time_dim.py +125 -0
  535. firecube-0.1.4/tests/unit/test_append_write_executor.py +103 -0
  536. firecube-0.1.4/tests/unit/test_base_aggregate_contract.py +128 -0
  537. firecube-0.1.4/tests/unit/test_batch_runner.py +275 -0
  538. firecube-0.1.4/tests/unit/test_batching_metadata.py +66 -0
  539. firecube-0.1.4/tests/unit/test_bulk_abandon_stale_runs.py +352 -0
  540. firecube-0.1.4/tests/unit/test_bulk_clear_stale_claims.py +287 -0
  541. firecube-0.1.4/tests/unit/test_catalog_intake.py +272 -0
  542. firecube-0.1.4/tests/unit/test_cf_dataset_fixtures.py +83 -0
  543. firecube-0.1.4/tests/unit/test_cf_report.py +55 -0
  544. firecube-0.1.4/tests/unit/test_cf_validator.py +369 -0
  545. firecube-0.1.4/tests/unit/test_chunk_event_writer.py +85 -0
  546. firecube-0.1.4/tests/unit/test_chunk_manager.py +799 -0
  547. firecube-0.1.4/tests/unit/test_chunk_manager_queries.py +228 -0
  548. firecube-0.1.4/tests/unit/test_chunk_manager_slot_index.py +435 -0
  549. firecube-0.1.4/tests/unit/test_chunks_admin_cli.py +246 -0
  550. firecube-0.1.4/tests/unit/test_chunks_list_cli.py +128 -0
  551. firecube-0.1.4/tests/unit/test_chunks_manager_factory.py +112 -0
  552. firecube-0.1.4/tests/unit/test_claims_stale_query.py +151 -0
  553. firecube-0.1.4/tests/unit/test_cli_archive_safety.py +202 -0
  554. firecube-0.1.4/tests/unit/test_cli_audience.py +59 -0
  555. firecube-0.1.4/tests/unit/test_cli_bridge_consumers.py +166 -0
  556. firecube-0.1.4/tests/unit/test_cli_chunks_claims.py +109 -0
  557. firecube-0.1.4/tests/unit/test_cli_chunks_delete.py +113 -0
  558. firecube-0.1.4/tests/unit/test_cli_chunks_runs.py +113 -0
  559. firecube-0.1.4/tests/unit/test_cli_chunks_snapshots.py +83 -0
  560. firecube-0.1.4/tests/unit/test_cli_claims_all_stale.py +174 -0
  561. firecube-0.1.4/tests/unit/test_cli_completion.py +45 -0
  562. firecube-0.1.4/tests/unit/test_cli_errors.py +101 -0
  563. firecube-0.1.4/tests/unit/test_cli_output_options.py +134 -0
  564. firecube-0.1.4/tests/unit/test_cli_runs_all_stale.py +192 -0
  565. firecube-0.1.4/tests/unit/test_cli_shared_options.py +241 -0
  566. firecube-0.1.4/tests/unit/test_cli_slot_group.py +118 -0
  567. firecube-0.1.4/tests/unit/test_cli_slot_planning.py +114 -0
  568. firecube-0.1.4/tests/unit/test_cli_slot_range_env_discovery.py +66 -0
  569. firecube-0.1.4/tests/unit/test_cli_slot_range_options.py +113 -0
  570. firecube-0.1.4/tests/unit/test_cli_zarr_multires.py +157 -0
  571. firecube-0.1.4/tests/unit/test_cli_zarr_preallocate.py +232 -0
  572. firecube-0.1.4/tests/unit/test_cli_zarr_preallocate_static.py +67 -0
  573. firecube-0.1.4/tests/unit/test_cli_zarr_slots.py +368 -0
  574. firecube-0.1.4/tests/unit/test_coerce_append_value.py +54 -0
  575. firecube-0.1.4/tests/unit/test_compute_schema_hash.py +214 -0
  576. firecube-0.1.4/tests/unit/test_concurrency.py +94 -0
  577. firecube-0.1.4/tests/unit/test_config.py +48 -0
  578. firecube-0.1.4/tests/unit/test_config_file_strict.py +127 -0
  579. firecube-0.1.4/tests/unit/test_context_hook_signature_validation.py +82 -0
  580. firecube-0.1.4/tests/unit/test_context_mutation_contract.py +62 -0
  581. firecube-0.1.4/tests/unit/test_controlplane_events.py +126 -0
  582. firecube-0.1.4/tests/unit/test_cooperative_batch_hooks.py +108 -0
  583. firecube-0.1.4/tests/unit/test_coverage_tracker.py +166 -0
  584. firecube-0.1.4/tests/unit/test_coverage_tracker_custom_dim.py +53 -0
  585. firecube-0.1.4/tests/unit/test_credentials.py +67 -0
  586. firecube-0.1.4/tests/unit/test_ctx_escape_removed.py +26 -0
  587. firecube-0.1.4/tests/unit/test_dataset_for_batch_contract.py +90 -0
  588. firecube-0.1.4/tests/unit/test_deletion_dim_lookup.py +37 -0
  589. firecube-0.1.4/tests/unit/test_deletion_engine_errors.py +63 -0
  590. firecube-0.1.4/tests/unit/test_deletion_time_dim_resolution.py +249 -0
  591. firecube-0.1.4/tests/unit/test_derive_target_uri.py +83 -0
  592. firecube-0.1.4/tests/unit/test_direct_zarr_contract_stability.py +42 -0
  593. firecube-0.1.4/tests/unit/test_direct_zarr_ingestor.py +331 -0
  594. firecube-0.1.4/tests/unit/test_direct_zarr_init_subclass.py +173 -0
  595. firecube-0.1.4/tests/unit/test_direct_zarr_parallel_capability.py +144 -0
  596. firecube-0.1.4/tests/unit/test_direct_zarr_parallel_contract.py +68 -0
  597. firecube-0.1.4/tests/unit/test_direct_zarr_per_slot_claims.py +263 -0
  598. firecube-0.1.4/tests/unit/test_direct_zarr_slot_index_subclass.py +116 -0
  599. firecube-0.1.4/tests/unit/test_direct_zarr_time_dim_wiring.py +211 -0
  600. firecube-0.1.4/tests/unit/test_domain_defaults_removed.py +118 -0
  601. firecube-0.1.4/tests/unit/test_driver_parity_append_resume.py +321 -0
  602. firecube-0.1.4/tests/unit/test_driver_parity_cli.py +75 -0
  603. firecube-0.1.4/tests/unit/test_driver_parity_deletion.py +217 -0
  604. firecube-0.1.4/tests/unit/test_driver_parity_storage_session.py +97 -0
  605. firecube-0.1.4/tests/unit/test_driver_parity_validation.py +128 -0
  606. firecube-0.1.4/tests/unit/test_driver_parity_write_zarr.py +153 -0
  607. firecube-0.1.4/tests/unit/test_driver_parity_zarr_to_tgm.py +83 -0
  608. firecube-0.1.4/tests/unit/test_duckdb_bridge.py +131 -0
  609. firecube-0.1.4/tests/unit/test_duckdb_capability_check.py +150 -0
  610. firecube-0.1.4/tests/unit/test_duckdb_tier_scoping.py +159 -0
  611. firecube-0.1.4/tests/unit/test_engine_config_slot_group_warning.py +48 -0
  612. firecube-0.1.4/tests/unit/test_engine_config_slot_range.py +43 -0
  613. firecube-0.1.4/tests/unit/test_engine_failure_handling.py +103 -0
  614. firecube-0.1.4/tests/unit/test_engine_prefix_preservation.py +236 -0
  615. firecube-0.1.4/tests/unit/test_engine_resilience.py +326 -0
  616. firecube-0.1.4/tests/unit/test_engine_sequential_slot_filter_call.py +154 -0
  617. firecube-0.1.4/tests/unit/test_engine_time_dim_hook.py +63 -0
  618. firecube-0.1.4/tests/unit/test_engine_typed_result_access.py +257 -0
  619. firecube-0.1.4/tests/unit/test_ensure_group_new_kwargs.py +101 -0
  620. firecube-0.1.4/tests/unit/test_env_var_compatibility.py +107 -0
  621. firecube-0.1.4/tests/unit/test_existing_cube_check_read_bytes.py +60 -0
  622. firecube-0.1.4/tests/unit/test_experimental_options.py +118 -0
  623. firecube-0.1.4/tests/unit/test_extensions_duck.py +61 -0
  624. firecube-0.1.4/tests/unit/test_filesystem_capabilities.py +133 -0
  625. firecube-0.1.4/tests/unit/test_filesystem_instrumentation.py +195 -0
  626. firecube-0.1.4/tests/unit/test_filesystem_metrics.py +102 -0
  627. firecube-0.1.4/tests/unit/test_from_storage_config_or_default.py +57 -0
  628. firecube-0.1.4/tests/unit/test_fsspec_atomic_writer.py +224 -0
  629. firecube-0.1.4/tests/unit/test_generic_template_logging.py +102 -0
  630. firecube-0.1.4/tests/unit/test_generic_zarr_claim_category.py +108 -0
  631. firecube-0.1.4/tests/unit/test_generic_zarr_process_batch.py +173 -0
  632. firecube-0.1.4/tests/unit/test_global_expected_coverage.py +292 -0
  633. firecube-0.1.4/tests/unit/test_indexed_region_custom_dim.py +84 -0
  634. firecube-0.1.4/tests/unit/test_indexed_region_schema_claim.py +92 -0
  635. firecube-0.1.4/tests/unit/test_indexed_region_slot_group.py +197 -0
  636. firecube-0.1.4/tests/unit/test_indexed_region_static_array_slot_check.py +103 -0
  637. firecube-0.1.4/tests/unit/test_indexed_region_static_dispatch.py +322 -0
  638. firecube-0.1.4/tests/unit/test_indexed_region_strategy_ordering.py +108 -0
  639. firecube-0.1.4/tests/unit/test_indexed_region_time_1d_coverage.py +192 -0
  640. firecube-0.1.4/tests/unit/test_ingest_command_config.py +163 -0
  641. firecube-0.1.4/tests/unit/test_ingest_result_typed_metrics.py +67 -0
  642. firecube-0.1.4/tests/unit/test_intake_explicit_storage.py +48 -0
  643. firecube-0.1.4/tests/unit/test_loader_cache.py +108 -0
  644. firecube-0.1.4/tests/unit/test_logging_json_formatter.py +77 -0
  645. firecube-0.1.4/tests/unit/test_maintenance_events.py +238 -0
  646. firecube-0.1.4/tests/unit/test_manifest_repo_cache.py +72 -0
  647. firecube-0.1.4/tests/unit/test_manifest_repo_parity.py +109 -0
  648. firecube-0.1.4/tests/unit/test_manifest_repository_safety.py +474 -0
  649. firecube-0.1.4/tests/unit/test_manifest_versioning.py +92 -0
  650. firecube-0.1.4/tests/unit/test_multi_group_fixture.py +65 -0
  651. firecube-0.1.4/tests/unit/test_netcdf_utils.py +469 -0
  652. firecube-0.1.4/tests/unit/test_no_raw_fsspec_usage.py +789 -0
  653. firecube-0.1.4/tests/unit/test_no_storage_config_view.py +66 -0
  654. firecube-0.1.4/tests/unit/test_observability_boundaries.py +316 -0
  655. firecube-0.1.4/tests/unit/test_obstore_atomic_writer.py +37 -0
  656. firecube-0.1.4/tests/unit/test_obstore_streaming_buffer.py +52 -0
  657. firecube-0.1.4/tests/unit/test_otel_lifecycle.py +159 -0
  658. firecube-0.1.4/tests/unit/test_output_name_rejected.py +35 -0
  659. firecube-0.1.4/tests/unit/test_parallel_evidence.py +95 -0
  660. firecube-0.1.4/tests/unit/test_parallel_execution_state.py +53 -0
  661. firecube-0.1.4/tests/unit/test_parallel_gate_phantom_group.py +114 -0
  662. firecube-0.1.4/tests/unit/test_parallel_gate_slot_group.py +156 -0
  663. firecube-0.1.4/tests/unit/test_parallel_gate_static_array_chunks.py +122 -0
  664. firecube-0.1.4/tests/unit/test_parallel_post_intent_assertion.py +116 -0
  665. firecube-0.1.4/tests/unit/test_parallel_run_id.py +61 -0
  666. firecube-0.1.4/tests/unit/test_parallel_run_id_path_safety.py +56 -0
  667. firecube-0.1.4/tests/unit/test_parallel_schema_sizing.py +258 -0
  668. firecube-0.1.4/tests/unit/test_parquet_cli.py +89 -0
  669. firecube-0.1.4/tests/unit/test_parquet_storage_invariant.py +64 -0
  670. firecube-0.1.4/tests/unit/test_pipeline_result_typed_metrics.py +92 -0
  671. firecube-0.1.4/tests/unit/test_pipeline_spans.py +227 -0
  672. firecube-0.1.4/tests/unit/test_planned_range.py +76 -0
  673. firecube-0.1.4/tests/unit/test_plugin_config_type_coercion.py +45 -0
  674. firecube-0.1.4/tests/unit/test_plugin_context_boundary.py +75 -0
  675. firecube-0.1.4/tests/unit/test_pod_startup_phantom_group.py +180 -0
  676. firecube-0.1.4/tests/unit/test_pod_startup_schema_verification.py +255 -0
  677. firecube-0.1.4/tests/unit/test_pre_batch_filter.py +267 -0
  678. firecube-0.1.4/tests/unit/test_preflight.py +69 -0
  679. firecube-0.1.4/tests/unit/test_prewrite_dim_check.py +44 -0
  680. firecube-0.1.4/tests/unit/test_product_identity.py +84 -0
  681. firecube-0.1.4/tests/unit/test_product_name_contract.py +84 -0
  682. firecube-0.1.4/tests/unit/test_product_resolver.py +59 -0
  683. firecube-0.1.4/tests/unit/test_product_target.py +160 -0
  684. firecube-0.1.4/tests/unit/test_projection_orphan_slot_fallback.py +80 -0
  685. firecube-0.1.4/tests/unit/test_ranges_overlap_helper.py +37 -0
  686. firecube-0.1.4/tests/unit/test_recording_coverage_contract.py +71 -0
  687. firecube-0.1.4/tests/unit/test_recording_typed_result.py +129 -0
  688. firecube-0.1.4/tests/unit/test_region_writer_custom_coord.py +70 -0
  689. firecube-0.1.4/tests/unit/test_region_writer_fill_helpers.py +80 -0
  690. firecube-0.1.4/tests/unit/test_region_writer_write_static.py +80 -0
  691. firecube-0.1.4/tests/unit/test_region_zarr_writer.py +364 -0
  692. firecube-0.1.4/tests/unit/test_region_zarr_writer_preallocation.py +370 -0
  693. firecube-0.1.4/tests/unit/test_reserved_attrs.py +41 -0
  694. firecube-0.1.4/tests/unit/test_reserved_root_attrs.py +65 -0
  695. firecube-0.1.4/tests/unit/test_result_constructor_contract.py +74 -0
  696. firecube-0.1.4/tests/unit/test_resume_guard.py +428 -0
  697. firecube-0.1.4/tests/unit/test_resume_guard_completed_spans.py +124 -0
  698. firecube-0.1.4/tests/unit/test_resume_guard_enforce_op_counts.py +169 -0
  699. firecube-0.1.4/tests/unit/test_resume_guard_group_aware.py +114 -0
  700. firecube-0.1.4/tests/unit/test_resume_guard_slot_ranges.py +188 -0
  701. firecube-0.1.4/tests/unit/test_resume_guard_telemetry.py +176 -0
  702. firecube-0.1.4/tests/unit/test_resume_meta_orphan_slot_fallback.py +89 -0
  703. firecube-0.1.4/tests/unit/test_resume_types.py +88 -0
  704. firecube-0.1.4/tests/unit/test_run_id_slot_parser.py +77 -0
  705. firecube-0.1.4/tests/unit/test_run_record_slot_group.py +153 -0
  706. firecube-0.1.4/tests/unit/test_run_record_slot_range.py +174 -0
  707. firecube-0.1.4/tests/unit/test_runs_stale_query.py +210 -0
  708. firecube-0.1.4/tests/unit/test_runtime.py +194 -0
  709. firecube-0.1.4/tests/unit/test_scaffolding_product_name.py +216 -0
  710. firecube-0.1.4/tests/unit/test_schema_drift_error.py +26 -0
  711. firecube-0.1.4/tests/unit/test_schema_verification_audit.py +103 -0
  712. firecube-0.1.4/tests/unit/test_seeding_ownership_invariant.py +145 -0
  713. firecube-0.1.4/tests/unit/test_session_upload_tree.py +476 -0
  714. firecube-0.1.4/tests/unit/test_setup_global_schema_static.py +165 -0
  715. firecube-0.1.4/tests/unit/test_setup_global_zarr_schema_concurrent.py +118 -0
  716. firecube-0.1.4/tests/unit/test_setup_global_zarr_schema_strict.py +123 -0
  717. firecube-0.1.4/tests/unit/test_slot_index_model.py +181 -0
  718. firecube-0.1.4/tests/unit/test_slot_index_record.py +280 -0
  719. firecube-0.1.4/tests/unit/test_slot_range_capability.py +193 -0
  720. firecube-0.1.4/tests/unit/test_slot_range_validators.py +58 -0
  721. firecube-0.1.4/tests/unit/test_snapshot_derivation.py +230 -0
  722. firecube-0.1.4/tests/unit/test_span_coverage_neutral.py +115 -0
  723. firecube-0.1.4/tests/unit/test_staged_metadata_error_contract.py +78 -0
  724. firecube-0.1.4/tests/unit/test_staged_metadata_workspace_idempotency.py +136 -0
  725. firecube-0.1.4/tests/unit/test_staged_metrics.py +213 -0
  726. firecube-0.1.4/tests/unit/test_staged_seed_strips_static_marker.py +158 -0
  727. firecube-0.1.4/tests/unit/test_state_dim_threading.py +62 -0
  728. firecube-0.1.4/tests/unit/test_storage_binding.py +68 -0
  729. firecube-0.1.4/tests/unit/test_storage_cache_key.py +98 -0
  730. firecube-0.1.4/tests/unit/test_storage_completion.py +237 -0
  731. firecube-0.1.4/tests/unit/test_storage_config.py +26 -0
  732. firecube-0.1.4/tests/unit/test_storage_driver.py +89 -0
  733. firecube-0.1.4/tests/unit/test_storage_driver_config.py +126 -0
  734. firecube-0.1.4/tests/unit/test_storage_driver_config_lockdown.py +50 -0
  735. firecube-0.1.4/tests/unit/test_storage_errors.py +74 -0
  736. firecube-0.1.4/tests/unit/test_storage_filesystem.py +170 -0
  737. firecube-0.1.4/tests/unit/test_storage_filesystem_protocol.py +90 -0
  738. firecube-0.1.4/tests/unit/test_storage_metadata.py +217 -0
  739. firecube-0.1.4/tests/unit/test_storage_session.py +248 -0
  740. firecube-0.1.4/tests/unit/test_storage_transfer.py +141 -0
  741. firecube-0.1.4/tests/unit/test_storage_uri.py +248 -0
  742. firecube-0.1.4/tests/unit/test_strategy_protocols.py +60 -0
  743. firecube-0.1.4/tests/unit/test_telemetry_schema.py +115 -0
  744. firecube-0.1.4/tests/unit/test_telemetry_schema_snapshot.py +112 -0
  745. firecube-0.1.4/tests/unit/test_telemetry_typed_result.py +71 -0
  746. firecube-0.1.4/tests/unit/test_template_hierarchy.py +117 -0
  747. firecube-0.1.4/tests/unit/test_template_product_name.py +101 -0
  748. firecube-0.1.4/tests/unit/test_template_typed_metrics_population.py +70 -0
  749. firecube-0.1.4/tests/unit/test_tensogram_cli.py +122 -0
  750. firecube-0.1.4/tests/unit/test_tensogram_core.py +485 -0
  751. firecube-0.1.4/tests/unit/test_tensogram_ingest.py +134 -0
  752. firecube-0.1.4/tests/unit/test_tensogram_input.py +77 -0
  753. firecube-0.1.4/tests/unit/test_tensogram_routing.py +177 -0
  754. firecube-0.1.4/tests/unit/test_tensogram_time_dim.py +129 -0
  755. firecube-0.1.4/tests/unit/test_tier_configurator.py +107 -0
  756. firecube-0.1.4/tests/unit/test_time_decode.py +112 -0
  757. firecube-0.1.4/tests/unit/test_time_dim_name_resolution.py +78 -0
  758. firecube-0.1.4/tests/unit/test_tracing_facade.py +181 -0
  759. firecube-0.1.4/tests/unit/test_typed_options_param.py +92 -0
  760. firecube-0.1.4/tests/unit/test_uri_handling.py +187 -0
  761. firecube-0.1.4/tests/unit/test_uris.py +83 -0
  762. firecube-0.1.4/tests/unit/test_validate_chunk_alignment_terminal.py +55 -0
  763. firecube-0.1.4/tests/unit/test_verify_array_spec.py +274 -0
  764. firecube-0.1.4/tests/unit/test_version_consistency.py +75 -0
  765. firecube-0.1.4/tests/unit/test_wal_metrics.py +122 -0
  766. firecube-0.1.4/tests/unit/test_wal_reader_run_id_safety.py +119 -0
  767. firecube-0.1.4/tests/unit/test_warn_if_misaligned_terminal.py +66 -0
  768. firecube-0.1.4/tests/unit/test_workspace_manager.py +55 -0
  769. firecube-0.1.4/tests/unit/test_write_intent_kinds.py +34 -0
  770. firecube-0.1.4/tests/unit/test_write_mode_policy.py +238 -0
  771. firecube-0.1.4/tests/unit/test_zarr_append_engine.py +538 -0
  772. firecube-0.1.4/tests/unit/test_zarr_array_spec_new_fields.py +151 -0
  773. firecube-0.1.4/tests/unit/test_zarr_chunk_alias_removed.py +49 -0
  774. firecube-0.1.4/tests/unit/test_zarr_discover_groups.py +60 -0
  775. firecube-0.1.4/tests/unit/test_zarr_group_attrs.py +149 -0
  776. firecube-0.1.4/tests/unit/test_zarr_multi_res_config_rejected.py +60 -0
  777. firecube-0.1.4/tests/unit/test_zarr_staged_metadata.py +449 -0
  778. firecube-0.1.4/tests/unit/test_zarr_store_factory.py +112 -0
  779. firecube-0.1.4/tests/unit/test_zarr_store_factory_contract.py +73 -0
  780. firecube-0.1.4/tests/unit/test_zarr_validation.py +79 -0
  781. firecube-0.1.4/tests/unit/test_zarr_write_context.py +152 -0
  782. 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,11 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: uv
4
+ directory: "/"
5
+ schedule:
6
+ interval: weekly
7
+
8
+ - package-ecosystem: github-actions
9
+ directory: "/"
10
+ schedule:
11
+ interval: weekly
@@ -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.