Releases the three ArcGIS import commits that have sat on master since May
unreleased. 3.11.2 is the version both rubygems and master claim, so every
host app resolving the gem from rubygems has been running without them.
Stolo's nightly `update_geometry` has failed 44 Community imports every night
since 2026-07-22, when arcgis.stoloconnect.com began advertising HTTP/2 over
ALPN and then answering `HTTP_1_1_REQUIRED`. GDAL's curl client does not
retry over HTTP/1.1, so `ogr2ogr` returned nothing and the empty stdout
surfaced as `JSON::ParserError: unexpected end of input`. 08ea8c5 downloads
through open-uri and hands OGR a local file, which sidesteps the negotiation
entirely.
The same endpoint caps responses at 2000 features and sets
`exceededTransferLimit`, so 8d9b0d5 and bda8d82 are needed for the layer to
import completely rather than silently short. Verified against the live
service: 2000 features on page one, 66 on page two, 2066 total, matching what
GDAL reports when it paginates on its own.
Minor rather than patch because pagination changes what a truncating endpoint
returns, and because bda8d82 adds the `SpatialFeatures::GDAL` module.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Cuts a release for the three ArcGIS import commits that have been on master since May without ever shipping. master and rubygems both claim 3.11.2, and the repo carries no tags, so every host app resolving the gem from rubygems has been running without them.
Why now
Stolo's nightly stolo:update_geometry has failed 44 Community imports every night since 2026-07-22. Diagnosed on the production host today:
arcgis.stoloconnect.com advertises HTTP/2 over ALPN and then kills the stream:
curl reconnects over HTTP/1.1 and gets a clean 200. GDAL's curl client does not, so ogr2ogr wrote nothing and exited 1. Released 3.11.2 passes the URL straight to ogr2ogr and reads only stdout, so the failure surfaced as JSON::ParserError: unexpected end of input at line 1 column 1 — a parse error for what was really a network error. That mismatch is most of why this took a month to spot; the task still logs Update Geometry task completed because skip_invalid: true swallows each record.
08ea8c5 downloads through open-uri and hands OGR a local file, sidestepping the negotiation. fetch_page also raises SpatialFeatures::ImportError quoting the response body instead of letting JSON.parse fail bare.
What's in the release
Verification
Run against the live endpoint from the Stolo production host, with no GDAL_HTTP_VERSION workaround in play:
The same run showed the service caps at 2000 features per response and sets exceededTransferLimit, which is what makes the pagination commits load-bearing rather than incidental — without them the layer imports silently short:
2066 matches what GDAL reports when it paginates on its own, so the walk is complete.
bundle exec rspec locally: 302 examples, 0 failures, 19 pending (all pre-existing, marked Test accidentally merged. Requires code from feature-spatial-calculation-optimization branch).
Why minor
Pagination changes what a truncating endpoint returns for an unchanged query, and bda8d82 adds the SpatialFeatures::GDAL module. The shapefile shell/SQL hardening in f49397d is already in released 3.11.2 and is not part of this delta.
After merge
The gem needs pushing to rubygems before connect_engine (spatial_features ~> 3.11) and then stolo_connect can pick it up.
🤖 Generated with Claude Code