Parity with the reference application
GeoMarmot began as a port of an existing browser ETL. Its behaviour was captured before the port as
fixture expectations (transformers/*/tests.json) and I/O and end-to-end tests, and every change
since has had to keep them passing. This page records the checklist and the places where GeoMarmot
deliberately differs.
Deliberate differences
| Where |
Reference behaviour |
GeoMarmot |
Why |
| FeatureJoiner, Joined port |
right-side attributes were never added (a hook argument was misnamed, so the right schema was always empty) |
right attributes are added, clashing names suffixed |
the documented behaviour; the reference was a bug |
| Reprojection transformer |
a vendor-specific name |
Reprojector |
independent naming |
| Rejected rows |
a vendor-specific attribute name |
rejection_code |
independent naming |
| SQL in parameters |
unrestricted |
restricted to the node's input unless unrestricted is chosen explicitly |
security (docs/security.md) |
| Saved graphs |
an unversioned format |
geomarmot-graph v1 |
docs/decisions/0007 |
.csv.gz |
accepted, but failed to read: this DuckDB-Wasm build cannot decompress gzip |
inflated in the browser before registration |
the documented behaviour |
| Runaway queries |
none; a stuck query froze the engine |
cancelled, then the engine restarted with sources restored |
docs/decisions/0004 |
Checklist
Every item of PLAN.md §1, with the test that holds it. T = fixture or I/O test, E = end to end.
Reading
|
Item |
Test |
| ✅ |
Parquet / GeoParquet, local drop (T) and remote URL with range reads (E) |
tests/browser/io.spec.js › Parquet, GeoParquet; proxy.spec.js › range requests; decision 0005 |
| ✅ |
GeoPackage, one layer per row; GeoJSON / .json; FlatGeobuf (T) |
io.spec.js › GeoPackage, GeoJSON, FlatGeobuf |
| ✅ |
CSV / TSV / .gz via DuckDB's sniffer (T) |
io.spec.js › CSV, TSV and gzipped CSV |
| ✅ |
Excel in a worker: sheet and header-row steps, per-cell types, dates, empty unnamed columns dropped (T + E) |
io.spec.js › Excel; e2e.spec.js › Excel |
| ✅ |
Zarr v2 through the picker, with a priced plan (E) |
zarr.spec.js |
| ✅ |
CRS per source, CRS override, reprojection to lon/lat on read (T) |
transformers/reader/tests.json; io.spec.js › projected GeoPackage |
| ✅ |
Bucket browser (now the Google Cloud Storage connector), type a bucket, through the local proxy (E) |
proxy.spec.js › bucket connector |
| ✅ |
Loading bar with real progress (E) |
e2e.spec.js › loading bar |
|
Item |
Test |
| ✅ |
All 44 transformers, every output port, every main option |
transformers/*/tests.json, run by fixtures.spec.js; rules by npm run check:fixtures |
Writing
|
Item |
Test |
| ✅ |
Parquet, GeoParquet (metadata self-check), GeoJSON (CRS member when projected), CSV, Excel (WKT, 64-bit integers as text, date cells, the 32,767-character limit) (T) |
transformers/writer/tests.json; io.spec.js › writers |
Workbench
|
Item |
Test |
| ✅ |
Canvas: drop a file, link ports by dragging, arrange, undo/redo (E) |
e2e.spec.js › dropping a file; workbench.spec.js › link, Arrange |
| ✅ |
Inspector generated from params; editing a value changes the output; ? help (E) |
workbench.spec.js › editing a parameter, help |
| ✅ |
Attribute grid, per-feature geometry panel (E) |
e2e.spec.js; workbench.spec.js › feature panel |
| ✅ |
Map panel: draws, reprojects a labelled stream for display, refuses non-degree coordinates (E) |
workbench.spec.js › map |
| ✅ |
H3 view with the coarsen control (E) |
workbench.spec.js › H3 index column |
| ✅ |
Save and open graph; autosave (E) |
workbench.spec.js › save graph and autosave; e2e.spec.js › open graph, export |