GISPulse v1.6.1
[1.6.1] - 2026-05-07
Same-day follow-up to v1.6.0. Closes the 3 deferred items from the v1.6.0 sprint kickoff in a single PR (#138) so the v1.6.x line ships its full promised surface — cross-source push-down, scalar lookup, and zero-config validate auto-wire — instead of trickling them across point releases.
Added
layer_lookup(layer, match, take, layer_geom)DSL fct. Scalar attribute lookup against a (cross-source) layer with three match modes:spatial_within(default),spatial_intersects, or any column identifier as attribute-equality shorthand (consistent withgeom_within(match='code_insee')). Compiles to(SELECT _L."<take>" FROM "<layer>" AS _L WHERE <pred> LIMIT 1). (#124, PR #138)- Cross-source layer registry. New
gispulse.runtime.layer_registry.LayerRegistryATTACHes external GeoPackage / Parquet / PostgreSQL sources read-only and creates a DuckDB view per declared layer in the in-memory catalog. The DSL emits bare-nameFROM "communes"; DuckDB's optimiser pushes spatial and attribute predicates down to the underlying scanner — no SQL rewriting downstream. (#122, PR #138) - Top-level
layers:block intriggers.yaml. Declarative cross-source layer references viaLayerSourceConfigModel. Duplicate-name guard at config-load time. (#122, PR #138) build_runtimevalidate auto-wire. Newvalidate_rules,default_table,layer_sources,source_epsgkwargs wire aValidationRunnerdirectly onto the change-log watcher. The DuckDB session ATTACHes the project GPKG read-only and mirrors each user table as a view in the in-memory catalog so bare-name SQL resolves while cross-sourceCREATE VIEWstatements remain legal. (PR #138)- Per-rule
table:and top-leveldefault_table:.ValidateRuleConfigModel.tablelets eachvalidate:rule pin its target table;GISPulseConfig.default_tableprovides a config-level fallback. (PR #138)
Changed
compile_validate_rulesaccepts atable_resolvercallable. The signature now supports per-rule resolution via arule -> tablecallable. The legacytable=parameter is preserved for v1.6.0 callers (single-table use). (PR #138)
Decision log
- "Quelle table" question for
validate:rules — closed.build_runtimeresolves the target table per rule in priority order:rule.table(operator pin) >default_table(config fallback) > GPKG single-table autodetect >ValidationTableResolutionErrorlisting the candidate tables. Single-table GPKGs (the dominant case) get zero-config UX; multi-table GPKGs surface a clear actionable error. (PR #138)