Skip to content

feat(spec)!: HFX v0.3.0 — GeoParquet bbox covering struct (s05+s06+s07)#6

Merged
CooperBigFoot merged 3 commits into
mainfrom
alden-feedback/p5-covering-stack
Jun 27, 2026
Merged

feat(spec)!: HFX v0.3.0 — GeoParquet bbox covering struct (s05+s06+s07)#6
CooperBigFoot merged 3 commits into
mainfrom
alden-feedback/p5-covering-stack

Conversation

@CooperBigFoot

Copy link
Copy Markdown
Owner

Milestone alden-feedback Point 5 (HFX spec break). Adopts the GeoParquet 1.1 bbox covering: the four flat float32 bbox columns on catchments.parquet (and snap) become a single bbox struct {xmin,ymin,xmax,ymax} whose leaves carry row-group statistics, declared at geo.columns.geometry.covering.bbox.* so standard tools (DuckDB/GeoPandas/geoarrow-rs) get automatic spatial pushdown. format_version 0.2.1 → 0.3.0 (clean break); snap aux → hfx.aux.snap.v2. graph.parquet stays flat (no geometry).

This is a CI-coupled unit — three stacked commits that must land together (s05 schema-const, s06 fixtures, s07 validator interlock; any subset is conformance-CI-red by design):

  • s05 feat(spec)! — HFX_SPEC.md + manifest schema const + snap v2 spec/schema + CHANGELOG. graph untouched.
  • s06 test(conformance) — regenerate all fixtures to 0.3.0 struct covering + snap v2; 5 hand-authored D8-raster fixtures migrated in place (rasters preserved, SHA-256 identical); new invalid fixtures covering-metadata-missing + leaf-stats-missing; verify_covering_metadata.py. write_graph byte-unchanged.
  • s07 feat(validator)!FormatVersion::V0_3_0 (accept only 0.3.0); read struct leaves; new row_group_has_struct_bbox_stats matching leaf stats by full dotted path bbox.xmin; covering-metadata validation; snap v1→v2 dispatch. graph reader untouched; no toolkit version bump.

Local verification: cargo fmt/clippy/test green (135 tests); validator loops valid 8/8 accept, invalid 23/23 reject; gate-1 leaf-stats proven (s04).

Deferred (tracked): s08 adapters, s09 shed reader (separate repos, follow this merge); toolkit 0.3.0→0.4.0 + docs/VERSIONING + crate READMEs = s12. Plans: planning/milestone-alden-feedback/s0{5,6,7}/plan.md.

Replace the four flat float32 bbox columns on catchments.parquet with a single non-nullable bbox struct {xmin,ymin,xmax,ymax} declared as a GeoParquet 1.1 covering at geo.columns.geometry.covering.bbox.*; retarget the row-group-statistics MUST clause to the struct leaves. Bump format_version 0.2.1 -> 0.3.0 across HFX_SPEC.md and the manifest JSON Schema const. Add hfx.aux.snap.v2 (nullable bbox struct, same covering convention); retain snap v1 as historical. graph.parquet stays flat.

BREAKING CHANGE: format_version 0.3.0 retypes the catchments bbox columns into a struct and moves snap features to hfx.aux.snap.v2.
…box covering struct + snap v2

Catchments + snap bbox become a struct {xmin,ymin,xmax,ymax} with leaf row-group stats and GeoParquet 1.1 covering metadata; snap aux -> hfx.aux.snap.v2. Five hand-authored D8-raster fixtures migrated in place (catchments struct + format_version only; rasters preserved). graph stays flat. Adds verify_covering_metadata.py + covering-metadata-missing/leaf-stats-missing invalid fixtures.
….3.0

Add FormatVersion::V0_3_0 (clean break, reject 0.2.1); read the catchments/snap bbox struct leaves; new row_group_has_struct_bbox_stats matches leaf stats by full dotted path bbox.xmin etc; validate GeoParquet covering metadata (schema.catchments.covering_missing) and struct leaf stats (schema.catchments.bbox_stats_missing); move snap aux to v2. graph stays flat. No toolkit version bump.

BREAKING CHANGE: hfx-validator accepts only format_version 0.3.0 and the struct bbox covering layout.
@CooperBigFoot CooperBigFoot merged commit 5c6776d into main Jun 27, 2026
4 checks passed
@CooperBigFoot CooperBigFoot deleted the alden-feedback/p5-covering-stack branch June 27, 2026 22:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant