mapsmith 0.7.0__tar.gz → 0.7.1__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 (147) hide show
  1. {mapsmith-0.7.0 → mapsmith-0.7.1}/.zenodo.json +1 -1
  2. {mapsmith-0.7.0 → mapsmith-0.7.1}/CHANGELOG.md +30 -0
  3. {mapsmith-0.7.0 → mapsmith-0.7.1}/CITATION.cff +1 -1
  4. {mapsmith-0.7.0 → mapsmith-0.7.1}/PKG-INFO +18 -18
  5. {mapsmith-0.7.0 → mapsmith-0.7.1}/README.md +17 -17
  6. {mapsmith-0.7.0 → mapsmith-0.7.1}/SECURITY.md +18 -0
  7. {mapsmith-0.7.0 → mapsmith-0.7.1}/docs/argleton-run.json +4 -7
  8. {mapsmith-0.7.0 → mapsmith-0.7.1}/docs/benchmarks.md +6 -6
  9. {mapsmith-0.7.0 → mapsmith-0.7.1}/examples/01_verified_geoprocessing.ipynb +24 -24
  10. {mapsmith-0.7.0 → mapsmith-0.7.1}/examples/02_terrain_hydrology.ipynb +36 -36
  11. {mapsmith-0.7.0 → mapsmith-0.7.1}/examples/03_validated_plans.ipynb +23 -23
  12. {mapsmith-0.7.0 → mapsmith-0.7.1}/examples/04_copernicus_terrain_vegetation.ipynb +31 -31
  13. {mapsmith-0.7.0 → mapsmith-0.7.1}/pyproject.toml +1 -1
  14. {mapsmith-0.7.0 → mapsmith-0.7.1}/server.json +3 -3
  15. {mapsmith-0.7.0 → mapsmith-0.7.1}/site/index.template.html +4 -3
  16. {mapsmith-0.7.0 → mapsmith-0.7.1}/src/mapsmith/__init__.py +1 -1
  17. {mapsmith-0.7.0 → mapsmith-0.7.1}/src/mapsmith/engines/linework.py +14 -2
  18. {mapsmith-0.7.0 → mapsmith-0.7.1}/src/mapsmith/engines/sampling.py +6 -0
  19. mapsmith-0.7.1/src/mapsmith/limits.py +58 -0
  20. {mapsmith-0.7.0 → mapsmith-0.7.1}/src/mapsmith/plans/validator.py +30 -1
  21. {mapsmith-0.7.0 → mapsmith-0.7.1}/src/mapsmith/server.py +32 -4
  22. mapsmith-0.7.1/tests/test_limits.py +74 -0
  23. mapsmith-0.7.1/tests/test_output_guard.py +128 -0
  24. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_plans.py +21 -1
  25. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_showcase.py +8 -1
  26. {mapsmith-0.7.0 → mapsmith-0.7.1}/.dockerignore +0 -0
  27. {mapsmith-0.7.0 → mapsmith-0.7.1}/.gitignore +0 -0
  28. {mapsmith-0.7.0 → mapsmith-0.7.1}/CLAUDE.md +0 -0
  29. {mapsmith-0.7.0 → mapsmith-0.7.1}/CONTRIBUTING.md +0 -0
  30. {mapsmith-0.7.0 → mapsmith-0.7.1}/Dockerfile +0 -0
  31. {mapsmith-0.7.0 → mapsmith-0.7.1}/LICENSE +0 -0
  32. {mapsmith-0.7.0 → mapsmith-0.7.1}/MANIFESTO.md +0 -0
  33. {mapsmith-0.7.0 → mapsmith-0.7.1}/TRADEMARKS.md +0 -0
  34. {mapsmith-0.7.0 → mapsmith-0.7.1}/docker-compose.yml +0 -0
  35. {mapsmith-0.7.0 → mapsmith-0.7.1}/docs/catalog-entry-spec.md +0 -0
  36. {mapsmith-0.7.0 → mapsmith-0.7.1}/docs/manifest-vocabulary.md +0 -0
  37. {mapsmith-0.7.0 → mapsmith-0.7.1}/examples/README.md +0 -0
  38. {mapsmith-0.7.0 → mapsmith-0.7.1}/examples/fixtures/COPERNICUS-NOTICE.md +0 -0
  39. {mapsmith-0.7.0 → mapsmith-0.7.1}/examples/fixtures/fetch_copernicus.py +0 -0
  40. {mapsmith-0.7.0 → mapsmith-0.7.1}/examples/fixtures/monte_baldo_dem.tif +0 -0
  41. {mapsmith-0.7.0 → mapsmith-0.7.1}/examples/fixtures/monte_baldo_s2.tif +0 -0
  42. {mapsmith-0.7.0 → mapsmith-0.7.1}/examples/fixtures/mount_st_helens_dem.tif +0 -0
  43. {mapsmith-0.7.0 → mapsmith-0.7.1}/funding.json +0 -0
  44. {mapsmith-0.7.0 → mapsmith-0.7.1}/glama.json +0 -0
  45. {mapsmith-0.7.0 → mapsmith-0.7.1}/schema/operation.schema.json +0 -0
  46. {mapsmith-0.7.0 → mapsmith-0.7.1}/site/build.py +0 -0
  47. {mapsmith-0.7.0 → mapsmith-0.7.1}/src/mapsmith/antimeridian.py +0 -0
  48. {mapsmith-0.7.0 → mapsmith-0.7.1}/src/mapsmith/catalog.py +0 -0
  49. {mapsmith-0.7.0 → mapsmith-0.7.1}/src/mapsmith/datum.py +0 -0
  50. {mapsmith-0.7.0 → mapsmith-0.7.1}/src/mapsmith/discovery_log.py +0 -0
  51. {mapsmith-0.7.0 → mapsmith-0.7.1}/src/mapsmith/engines/__init__.py +0 -0
  52. {mapsmith-0.7.0 → mapsmith-0.7.1}/src/mapsmith/engines/dispatch.py +0 -0
  53. {mapsmith-0.7.0 → mapsmith-0.7.1}/src/mapsmith/engines/duckdb_engine.py +0 -0
  54. {mapsmith-0.7.0 → mapsmith-0.7.1}/src/mapsmith/engines/esri.py +0 -0
  55. {mapsmith-0.7.0 → mapsmith-0.7.1}/src/mapsmith/engines/geodesy.py +0 -0
  56. {mapsmith-0.7.0 → mapsmith-0.7.1}/src/mapsmith/engines/network.py +0 -0
  57. {mapsmith-0.7.0 → mapsmith-0.7.1}/src/mapsmith/engines/raster.py +0 -0
  58. {mapsmith-0.7.0 → mapsmith-0.7.1}/src/mapsmith/engines/sedona_engine.py +0 -0
  59. {mapsmith-0.7.0 → mapsmith-0.7.1}/src/mapsmith/engines/spatial_stats.py +0 -0
  60. {mapsmith-0.7.0 → mapsmith-0.7.1}/src/mapsmith/engines/summaries.py +0 -0
  61. {mapsmith-0.7.0 → mapsmith-0.7.1}/src/mapsmith/engines/vector.py +0 -0
  62. {mapsmith-0.7.0 → mapsmith-0.7.1}/src/mapsmith/engines/whitebox_engine.py +0 -0
  63. {mapsmith-0.7.0 → mapsmith-0.7.1}/src/mapsmith/gdal_policy.py +0 -0
  64. {mapsmith-0.7.0 → mapsmith-0.7.1}/src/mapsmith/grid.py +0 -0
  65. {mapsmith-0.7.0 → mapsmith-0.7.1}/src/mapsmith/jobs.py +0 -0
  66. {mapsmith-0.7.0 → mapsmith-0.7.1}/src/mapsmith/lineage.py +0 -0
  67. {mapsmith-0.7.0 → mapsmith-0.7.1}/src/mapsmith/plans/__init__.py +0 -0
  68. {mapsmith-0.7.0 → mapsmith-0.7.1}/src/mapsmith/plans/executor.py +0 -0
  69. {mapsmith-0.7.0 → mapsmith-0.7.1}/src/mapsmith/plans/models.py +0 -0
  70. {mapsmith-0.7.0 → mapsmith-0.7.1}/src/mapsmith/plans/registry.py +0 -0
  71. {mapsmith-0.7.0 → mapsmith-0.7.1}/src/mapsmith/preview.py +0 -0
  72. {mapsmith-0.7.0 → mapsmith-0.7.1}/src/mapsmith/provenance.py +0 -0
  73. {mapsmith-0.7.0 → mapsmith-0.7.1}/src/mapsmith/readers.py +0 -0
  74. {mapsmith-0.7.0 → mapsmith-0.7.1}/src/mapsmith/retrieval.py +0 -0
  75. {mapsmith-0.7.0 → mapsmith-0.7.1}/src/mapsmith/sql_policy.py +0 -0
  76. {mapsmith-0.7.0 → mapsmith-0.7.1}/src/mapsmith/stacks.py +0 -0
  77. {mapsmith-0.7.0 → mapsmith-0.7.1}/src/mapsmith/ui.py +0 -0
  78. {mapsmith-0.7.0 → mapsmith-0.7.1}/src/mapsmith/verify.py +0 -0
  79. {mapsmith-0.7.0 → mapsmith-0.7.1}/src/mapsmith/workspace.py +0 -0
  80. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/conftest.py +0 -0
  81. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/data/discovery_queries.json +0 -0
  82. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/data/manifest-v1.schema.json +0 -0
  83. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/data/manifest_spec_validator.py +0 -0
  84. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_ambiguous_layer.py +0 -0
  85. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_antimeridian.py +0 -0
  86. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_band_math.py +0 -0
  87. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_catalog.py +0 -0
  88. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_catalog_applicability.py +0 -0
  89. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_catalog_entry_spec.py +0 -0
  90. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_catalog_retrieval.py +0 -0
  91. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_centroid_convert.py +0 -0
  92. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_clip_reclassify_raster.py +0 -0
  93. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_contours_and_cost.py +0 -0
  94. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_dashboard.py +0 -0
  95. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_datum.py +0 -0
  96. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_describe_raster.py +0 -0
  97. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_discovery_contract.py +0 -0
  98. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_discovery_log.py +0 -0
  99. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_discovery_report.py +0 -0
  100. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_duckdb_sandbox.py +0 -0
  101. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_engines.py +0 -0
  102. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_environment.py +0 -0
  103. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_failure_manifest.py +0 -0
  104. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_gdal_policy.py +0 -0
  105. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_geodesy.py +0 -0
  106. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_geoparquet2.py +0 -0
  107. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_grid_registration.py +0 -0
  108. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_lineage.py +0 -0
  109. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_linework.py +0 -0
  110. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_measure_area.py +0 -0
  111. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_merge_simplify.py +0 -0
  112. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_nearest_explode.py +0 -0
  113. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_network.py +0 -0
  114. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_overlay_dissolve.py +0 -0
  115. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_path_containment.py +0 -0
  116. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_preview.py +0 -0
  117. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_published_figures.py +0 -0
  118. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_raster.py +0 -0
  119. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_raster_reproject_bands.py +0 -0
  120. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_redaction.py +0 -0
  121. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_resample_raster.py +0 -0
  122. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_retrieval.py +0 -0
  123. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_retrieval_at_scale.py +0 -0
  124. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_retrieval_degradation.py +0 -0
  125. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_sampling.py +0 -0
  126. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_select_and_extract.py +0 -0
  127. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_smoke.py +0 -0
  128. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_south_up_and_mixed.py +0 -0
  129. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_spatial_stats.py +0 -0
  130. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_sql_axis_order.py +0 -0
  131. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_sql_credentials.py +0 -0
  132. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_stacks.py +0 -0
  133. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_summaries.py +0 -0
  134. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_summarize_points_in_polygons.py +0 -0
  135. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_terrain_derivatives.py +0 -0
  136. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_tier_a_operations.py +0 -0
  137. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_ui.py +0 -0
  138. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_verification_status.py +0 -0
  139. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_verify.py +0 -0
  140. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_verify_repair.py +0 -0
  141. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_voronoi.py +0 -0
  142. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_whitebox.py +0 -0
  143. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_whitebox_derivatives.py +0 -0
  144. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_whitebox_encoding.py +0 -0
  145. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_whitebox_geographic_refusal.py +0 -0
  146. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_worked_example.py +0 -0
  147. {mapsmith-0.7.0 → mapsmith-0.7.1}/tests/test_workspace.py +0 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "upload_type": "software",
3
3
  "title": "MapSmith: geospatial processing over MCP, with verifiable provenance",
4
- "version": "0.7.0",
4
+ "version": "0.7.1",
5
5
  "creators": [
6
6
  {"name": "The MapSmith project"}
7
7
  ],
@@ -8,6 +8,36 @@ All notable changes to MapSmith are documented here, in the format of
8
8
 
9
9
  Nothing yet.
10
10
 
11
+ ## [0.7.1] - 2026-09-26
12
+
13
+ Two fixes from the pre-release audit of 0.7.0, both present in earlier releases,
14
+ and the Argleton run scored against trap 024's corrected truth, which arrived
15
+ after the 0.7.0 tag: that release's PyPI page still quotes the recount of the
16
+ old run. No answer 0.7.0 got right changes, and no manifest key moves: records
17
+ declare `spec_version` `1.0.0-draft.8`, as in 0.7.0.
18
+
19
+ ### Fixed
20
+
21
+ - **An output that is one of the inputs, or has an extension its writer cannot
22
+ honour, is refused before anything is written**
23
+ ([#31](https://github.com/mapsmith-ai/MapSmith/issues/31)). `zonal_statistics`
24
+ with `output_path` equal to its weights raster replaced the raster with a
25
+ directory of shapefiles — a vector writer given `.tif` falls back to the
26
+ Shapefile driver — and failed before writing a manifest. The dedicated tools
27
+ now refuse both at the boundary, as `run_operation` already refused the
28
+ collision; and the plan validator turns an extension no writer can honour from
29
+ a warning into an error (`OUTPUT_EXTENSION_REFUSED`), keeping the warning for
30
+ writable but non-canonical ones such as `.geojson`.
31
+
32
+ - **A spacing could ask for any number of points.** `elevation_profile` and
33
+ `points_along_lines` materialised every point before looking at how many
34
+ there were: a spacing of `1e-6` on a 90 m line is ninety million. Both now
35
+ count the points from the line lengths and refuse above
36
+ `MAPSMITH_MAX_SAMPLES` (default 1 000 000), an environment variable of the
37
+ server that no tool argument can move; `SECURITY.md` says what is and is not
38
+ limited. `points_along_lines` also refuses a NaN or infinite spacing, which
39
+ `spacing <= 0` let through.
40
+
11
41
  ## [0.7.0] - 2026-09-26
12
42
 
13
43
  **This release changes answers earlier releases gave, and that comes first.**
@@ -12,7 +12,7 @@ identifiers:
12
12
  value: "10.5281/zenodo.22213091"
13
13
  description: "Concept DOI — always resolves to the latest release"
14
14
  license: AGPL-3.0-or-later
15
- version: "0.7.0"
15
+ version: "0.7.1"
16
16
  date-released: "2026-09-26"
17
17
  keywords:
18
18
  - GIS
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: mapsmith
3
- Version: 0.7.0
3
+ Version: 0.7.1
4
4
  Summary: Professional-grade GIS geoprocessing over MCP, with verifiable provenance
5
5
  Project-URL: Homepage, https://github.com/mapsmith-ai/MapSmith
6
6
  Project-URL: Repository, https://github.com/mapsmith-ai/MapSmith
@@ -97,11 +97,11 @@ generated from the source rather than maintained by hand.
97
97
 
98
98
  Evidence before promises. A correctness suite in its own organisation,
99
99
  [**Argleton**](https://argleton.org), grades MapSmith on thirty-one traps whose answers are
100
- computed on paper before any system runs: **0.03 silent errors — one in thirty-one, nothing
101
- skipped** — against 0.9032 for the obvious way of writing the same code. That one was published
102
- as a pass: the trap's own truth was wrong in MapSmith's favour for 26 days, the error is ours
103
- twice over, and the [erratum](https://github.com/argleton/argleton/blob/main/results/README.md#erratum-2026-09-25-trap-024) says so; the fix is on `main`. Getting here cost
104
- seven defects the suite sent back, and they are listed. Alongside it: an [A/B on GABench](docs/benchmarks.md) whose
100
+ computed on paper before any system runs: **0.00 silent errors, nothing skipped**, against
101
+ 0.9032 for the obvious way of writing the same code. The earlier runs said 0.00 too, and on one
102
+ trap they were wrong: its truth was wrong in MapSmith's favour for 26 days, the error was ours
103
+ twice over, and the [erratum](https://github.com/argleton/argleton/blob/main/results/README.md#erratum-2026-09-25-trap-024) says so. The current run is the first scored against the
104
+ corrected truth. Getting here cost seven defects the suite sent back, and they are listed. Alongside it: an [A/B on GABench](docs/benchmarks.md) whose
105
105
  headline is a null result — with the analysis that took our own positive number apart —
106
106
  [notebooks](examples/) on a real USGS DEM of Mount St. Helens, an
107
107
  [in-chat map panel](#see-results-inside-the-chat) that shows the verification status of
@@ -265,14 +265,14 @@ or from a terminal: `code --add-mcp '{"name":"mapsmith","command":"uvx","args":[
265
265
  To check it runs before wiring a client, `uvx mapsmith` starts the server on stdio
266
266
  (Ctrl-C to quit) — it speaks MCP, not a CLI, so a silent prompt means it is working.
267
267
 
268
- This page describes **0.7.0**, which is what that command installs. When `main` runs ahead of
268
+ This page describes **0.7.1**, which is what that command installs. When `main` runs ahead of
269
269
  the published artifact this paragraph says so and names the difference — a reader should never
270
- have to find out by calling a tool that is not there. **If you run 0.4.0 to 0.6.1, 0.7.0
270
+ have to find out by calling a tool that is not there. **If you run 0.4.0 to 0.6.1, 0.7.x
271
271
  changes answers you have**: every position read from a point-registered raster
272
272
  (`AREA_OR_POINT=Point`, the USGS and Copernicus DEMs) was half a cell off, and the
273
273
  [changelog](CHANGELOG.md) says which operations and why.
274
274
 
275
- **If you read manifests, 0.7.0 renames no key**: records declare `spec_version`
275
+ **If you read manifests, 0.7.x renames no key**: records declare `spec_version`
276
276
  `1.0.0-draft.8`, two drafts past 0.6.0's `draft.6`, and both drafts only narrowed where a
277
277
  producer may add a key of its own — which MapSmith already did the narrower way. From 0.5.x,
278
278
  0.6.0 renamed `x-mapsmith:round_trip` to `round_trip`; from 0.4.0, 0.5.0 had renamed eight
@@ -305,7 +305,7 @@ for it:
305
305
  ```json
306
306
  {
307
307
  "spec_version": "1.0.0-draft.8",
308
- "producer": {"name": "mapsmith", "version": "0.7.0"},
308
+ "producer": {"name": "mapsmith", "version": "0.7.1"},
309
309
  "operation": "buffer_layer",
310
310
  "parameters": {"distance_meters": 300.0},
311
311
  "inputs": [{
@@ -1131,14 +1131,14 @@ under Apache-2.0 rather than in this repository, because an evaluation that live
1131
1131
  inside the thing it evaluates is easy to dismiss in one line. Closed-form truth, no
1132
1132
  model in the evaluator, fixtures rebuilt rather than vendored.
1133
1133
 
1134
- **The score.** On the current run — all twenty-nine families — MapSmith answers thirty
1135
- of the thirty-one traps correctly: **0.03 silent errors over 31 traps, nothing skipped**,
1136
- against 0.9032 for a careless composition of the same libraries. That run was published as
1137
- 0.00. The trap it failed, a point-registered DEM, had a truth derived from a premise about
1138
- GDAL that GDAL documents the other way, and MapSmith had been built to that premise: both
1139
- corrected half a cell that was already corrected. Found on 2026-09-25 by a Copernicus DEM
1140
- whose samples fall on whole arc-seconds by its own documentation; the
1141
- [erratum](https://github.com/argleton/argleton/blob/main/results/README.md#erratum-2026-09-25-trap-024) rescores every run it touched, and the fix is on `main`. One of the thirty-one is not an answer
1134
+ **The score.** On the current run — all twenty-nine families — MapSmith answers every
1135
+ trap correctly: **0.00 silent errors over 31 traps, nothing skipped**, against 0.9032
1136
+ for a careless composition of the same libraries. The runs from 2026-08-30 to 2026-09-15 said
1137
+ 0.00 as well and were wrong on one trap, a point-registered DEM: its truth was derived from a
1138
+ premise about GDAL that GDAL documents the other way, MapSmith had been built to that premise,
1139
+ and both corrected half a cell that was already corrected. Found on 2026-09-25 by a Copernicus
1140
+ DEM whose samples fall on whole arc-seconds by its own documentation; the
1141
+ [erratum](https://github.com/argleton/argleton/blob/main/results/README.md#erratum-2026-09-25-trap-024) rescores every run it touched, and 0.7.0 is the fix the current run measures. One of the thirty-one is not an answer
1142
1142
  at all but a refusal: a raster and the sidecar beside it declare different georeferencing,
1143
1143
  both readings are GDAL behaving as documented, and the right move is to stop and say so
1144
1144
  rather than pick one. That family arrived on 2026-08-31, the morning after the list of
@@ -55,11 +55,11 @@ generated from the source rather than maintained by hand.
55
55
 
56
56
  Evidence before promises. A correctness suite in its own organisation,
57
57
  [**Argleton**](https://argleton.org), grades MapSmith on thirty-one traps whose answers are
58
- computed on paper before any system runs: **0.03 silent errors — one in thirty-one, nothing
59
- skipped** — against 0.9032 for the obvious way of writing the same code. That one was published
60
- as a pass: the trap's own truth was wrong in MapSmith's favour for 26 days, the error is ours
61
- twice over, and the [erratum](https://github.com/argleton/argleton/blob/main/results/README.md#erratum-2026-09-25-trap-024) says so; the fix is on `main`. Getting here cost
62
- seven defects the suite sent back, and they are listed. Alongside it: an [A/B on GABench](docs/benchmarks.md) whose
58
+ computed on paper before any system runs: **0.00 silent errors, nothing skipped**, against
59
+ 0.9032 for the obvious way of writing the same code. The earlier runs said 0.00 too, and on one
60
+ trap they were wrong: its truth was wrong in MapSmith's favour for 26 days, the error was ours
61
+ twice over, and the [erratum](https://github.com/argleton/argleton/blob/main/results/README.md#erratum-2026-09-25-trap-024) says so. The current run is the first scored against the
62
+ corrected truth. Getting here cost seven defects the suite sent back, and they are listed. Alongside it: an [A/B on GABench](docs/benchmarks.md) whose
63
63
  headline is a null result — with the analysis that took our own positive number apart —
64
64
  [notebooks](examples/) on a real USGS DEM of Mount St. Helens, an
65
65
  [in-chat map panel](#see-results-inside-the-chat) that shows the verification status of
@@ -223,14 +223,14 @@ or from a terminal: `code --add-mcp '{"name":"mapsmith","command":"uvx","args":[
223
223
  To check it runs before wiring a client, `uvx mapsmith` starts the server on stdio
224
224
  (Ctrl-C to quit) — it speaks MCP, not a CLI, so a silent prompt means it is working.
225
225
 
226
- This page describes **0.7.0**, which is what that command installs. When `main` runs ahead of
226
+ This page describes **0.7.1**, which is what that command installs. When `main` runs ahead of
227
227
  the published artifact this paragraph says so and names the difference — a reader should never
228
- have to find out by calling a tool that is not there. **If you run 0.4.0 to 0.6.1, 0.7.0
228
+ have to find out by calling a tool that is not there. **If you run 0.4.0 to 0.6.1, 0.7.x
229
229
  changes answers you have**: every position read from a point-registered raster
230
230
  (`AREA_OR_POINT=Point`, the USGS and Copernicus DEMs) was half a cell off, and the
231
231
  [changelog](CHANGELOG.md) says which operations and why.
232
232
 
233
- **If you read manifests, 0.7.0 renames no key**: records declare `spec_version`
233
+ **If you read manifests, 0.7.x renames no key**: records declare `spec_version`
234
234
  `1.0.0-draft.8`, two drafts past 0.6.0's `draft.6`, and both drafts only narrowed where a
235
235
  producer may add a key of its own — which MapSmith already did the narrower way. From 0.5.x,
236
236
  0.6.0 renamed `x-mapsmith:round_trip` to `round_trip`; from 0.4.0, 0.5.0 had renamed eight
@@ -263,7 +263,7 @@ for it:
263
263
  ```json
264
264
  {
265
265
  "spec_version": "1.0.0-draft.8",
266
- "producer": {"name": "mapsmith", "version": "0.7.0"},
266
+ "producer": {"name": "mapsmith", "version": "0.7.1"},
267
267
  "operation": "buffer_layer",
268
268
  "parameters": {"distance_meters": 300.0},
269
269
  "inputs": [{
@@ -1089,14 +1089,14 @@ under Apache-2.0 rather than in this repository, because an evaluation that live
1089
1089
  inside the thing it evaluates is easy to dismiss in one line. Closed-form truth, no
1090
1090
  model in the evaluator, fixtures rebuilt rather than vendored.
1091
1091
 
1092
- **The score.** On the current run — all twenty-nine families — MapSmith answers thirty
1093
- of the thirty-one traps correctly: **0.03 silent errors over 31 traps, nothing skipped**,
1094
- against 0.9032 for a careless composition of the same libraries. That run was published as
1095
- 0.00. The trap it failed, a point-registered DEM, had a truth derived from a premise about
1096
- GDAL that GDAL documents the other way, and MapSmith had been built to that premise: both
1097
- corrected half a cell that was already corrected. Found on 2026-09-25 by a Copernicus DEM
1098
- whose samples fall on whole arc-seconds by its own documentation; the
1099
- [erratum](https://github.com/argleton/argleton/blob/main/results/README.md#erratum-2026-09-25-trap-024) rescores every run it touched, and the fix is on `main`. One of the thirty-one is not an answer
1092
+ **The score.** On the current run — all twenty-nine families — MapSmith answers every
1093
+ trap correctly: **0.00 silent errors over 31 traps, nothing skipped**, against 0.9032
1094
+ for a careless composition of the same libraries. The runs from 2026-08-30 to 2026-09-15 said
1095
+ 0.00 as well and were wrong on one trap, a point-registered DEM: its truth was derived from a
1096
+ premise about GDAL that GDAL documents the other way, MapSmith had been built to that premise,
1097
+ and both corrected half a cell that was already corrected. Found on 2026-09-25 by a Copernicus
1098
+ DEM whose samples fall on whole arc-seconds by its own documentation; the
1099
+ [erratum](https://github.com/argleton/argleton/blob/main/results/README.md#erratum-2026-09-25-trap-024) rescores every run it touched, and 0.7.0 is the fix the current run measures. One of the thirty-one is not an answer
1100
1100
  at all but a refusal: a raster and the sidecar beside it declare different georeferencing,
1101
1101
  both readings are GDAL behaving as documented, and the right move is to stop and say so
1102
1102
  rather than pick one. That family arrived on 2026-08-31, the morning after the list of
@@ -233,6 +233,24 @@ outside, and both are recorded here rather than quietly corrected, because a
233
233
  security document whose history is invisible is asking to be believed rather
234
234
  than checked.
235
235
 
236
+ ## How much work one call may ask for
237
+
238
+ An agent chooses the arguments, and some of them decide how much memory and
239
+ time a call takes before anything is computed. `elevation_profile` and
240
+ `points_along_lines` place a point every `spacing` along each line, so a spacing
241
+ of `1e-6` on a 90 m line is ninety million points — over HTTP, a denial of
242
+ service within reach of anyone who can call a tool. Both count the points from
243
+ the line lengths first and refuse above **`MAPSMITH_MAX_SAMPLES`** (default
244
+ 1 000 000, about two minutes of sampling), before allocating any. It is an
245
+ environment variable of the server, like `MAPSMITH_ALLOW_EXTENSIONS`, so no
246
+ tool argument can move it.
247
+
248
+ That is the one limit there is, and it is not a general resource policy: other
249
+ operations are bounded only by their inputs, and a server exposed over HTTP
250
+ should also run under the memory and CPU limits of its container or pod
251
+ (`deploy/` has a Kubernetes example). Found in the pre-release audit of 0.7.0;
252
+ it was there in every earlier release.
253
+
236
254
  ## What MapSmith records, when you ask it to
237
255
 
238
256
  MapSmith writes nothing about your usage by default and sends nothing anywhere,
@@ -1,14 +1,11 @@
1
1
  {
2
2
  "_comment": "Vendored citation of the Argleton run this repository's pages quote. Argleton is a separate repository in a separate organisation, so these numbers cannot be counted from this checkout the way the tool and test counts are -- and hand-typing them aged three times in four days. `.claude/publish_run.py` in the private workspace writes this file as one step of publishing a run; `tests/test_showcase.py` requires every number quoted in the README and on the site to match it.",
3
- "_rescored": "2026-09-25, by hand and not by the publish script: trap 024's truth was wrong (412090 where the file says 412105), so the two rates below are this run's answers rescored against the corrected truth. The run's own files are unchanged, and the published rates are kept beside them. See https://github.com/argleton/argleton/blob/main/results/README.md#erratum-2026-09-25-trap-024",
4
- "run": "2026-09-15-qgis-three-ways",
5
- "spec_commit": "beab4ba",
3
+ "run": "2026-09-26-trap-024-corrected",
4
+ "spec_commit": "56423ed",
6
5
  "traps_run": 31,
7
6
  "families": 29,
8
- "mapsmith_silent_error_rate": 0.0323,
7
+ "mapsmith_silent_error_rate": 0.0,
9
8
  "mapsmith_completion_rate": 1.0,
10
9
  "naive_silent_error_rate": 0.9032,
11
- "published_mapsmith_silent_error_rate": 0.0,
12
- "published_naive_silent_error_rate": 0.9355,
13
- "url": "https://github.com/argleton/argleton/tree/main/results/2026-09-15-qgis-three-ways"
10
+ "url": "https://github.com/argleton/argleton/tree/main/results/2026-09-26-trap-024-corrected"
14
11
  }
@@ -464,16 +464,16 @@ evaluates is dismissed in one line, and it would deserve it. Current results:
464
464
  [argleton.org](https://argleton.org), rendered by CI from real runs.
465
465
 
466
466
  What it says about MapSmith (all twenty-nine families, engine tier, `spec_commit`
467
- [`beab4ba`](https://github.com/argleton/argleton/tree/main/results/2026-09-15-qgis-three-ways)):
467
+ [`56423ed`](https://github.com/argleton/argleton/tree/main/results/2026-09-26-trap-024-corrected)):
468
468
 
469
469
  | | silent error rate | completion rate | traps run | not applicable |
470
470
  |---|---|---|---|---|
471
- | MapSmith | **0.0323** (published 0.00) | 1.00 | 31 | 0 |
472
- | naive composition (read file, take statistic) | 0.9032 (published one trap higher) | 1.00 | 31 | 0 |
471
+ | MapSmith | **0.00** | 1.00 | 31 | 0 |
472
+ | naive composition (read file, take statistic) | 0.9032 | 1.00 | 31 | 0 |
473
473
 
474
- Rescored on 2026-09-25: the run was scored against a wrong truth on one trap, in MapSmith's
475
- favour, and the [erratum](https://github.com/argleton/argleton/blob/main/results/README.md#erratum-2026-09-25-trap-024) recounts every run it touched. The section below the next
476
- one says what the trap was and why the fix made it worse.
474
+ The first run scored against trap 024's corrected truth. The runs before it, from 2026-08-30,
475
+ scored that trap against a wrong truth in MapSmith's favour: the [erratum](https://github.com/argleton/argleton/blob/main/results/README.md#erratum-2026-09-25-trap-024) recounts them,
476
+ and the section below the next one says what the trap was and why the fix made it worse.
477
477
 
478
478
  **The family list closed on 2026-08-30**, at twenty-seven of twenty-seven, and reopened the next
479
479
  morning with a twenty-eighth — one raster carrying two georeferencings, which is why a manifest
@@ -18,10 +18,10 @@
18
18
  "id": "070d8f72",
19
19
  "metadata": {
20
20
  "execution": {
21
- "iopub.execute_input": "2026-09-26T13:44:51.520939Z",
22
- "iopub.status.busy": "2026-09-26T13:44:51.520939Z",
23
- "iopub.status.idle": "2026-09-26T13:44:52.396142Z",
24
- "shell.execute_reply": "2026-09-26T13:44:52.396142Z"
21
+ "iopub.execute_input": "2026-09-26T15:26:13.160409Z",
22
+ "iopub.status.busy": "2026-09-26T15:26:13.159405Z",
23
+ "iopub.status.idle": "2026-09-26T15:26:13.913711Z",
24
+ "shell.execute_reply": "2026-09-26T15:26:13.912704Z"
25
25
  }
26
26
  },
27
27
  "outputs": [
@@ -127,10 +127,10 @@
127
127
  "id": "9816266e",
128
128
  "metadata": {
129
129
  "execution": {
130
- "iopub.execute_input": "2026-09-26T13:44:52.398174Z",
131
- "iopub.status.busy": "2026-09-26T13:44:52.398174Z",
132
- "iopub.status.idle": "2026-09-26T13:44:52.871586Z",
133
- "shell.execute_reply": "2026-09-26T13:44:52.857670Z"
130
+ "iopub.execute_input": "2026-09-26T15:26:13.917791Z",
131
+ "iopub.status.busy": "2026-09-26T15:26:13.917791Z",
132
+ "iopub.status.idle": "2026-09-26T15:26:14.100750Z",
133
+ "shell.execute_reply": "2026-09-26T15:26:14.099743Z"
134
134
  }
135
135
  },
136
136
  "outputs": [
@@ -170,10 +170,10 @@
170
170
  "id": "7bb53f16",
171
171
  "metadata": {
172
172
  "execution": {
173
- "iopub.execute_input": "2026-09-26T13:44:52.880154Z",
174
- "iopub.status.busy": "2026-09-26T13:44:52.879211Z",
175
- "iopub.status.idle": "2026-09-26T13:44:53.096168Z",
176
- "shell.execute_reply": "2026-09-26T13:44:53.095156Z"
173
+ "iopub.execute_input": "2026-09-26T15:26:14.105759Z",
174
+ "iopub.status.busy": "2026-09-26T15:26:14.105759Z",
175
+ "iopub.status.idle": "2026-09-26T15:26:14.212885Z",
176
+ "shell.execute_reply": "2026-09-26T15:26:14.210767Z"
177
177
  }
178
178
  },
179
179
  "outputs": [
@@ -214,10 +214,10 @@
214
214
  "id": "458ce3c5",
215
215
  "metadata": {
216
216
  "execution": {
217
- "iopub.execute_input": "2026-09-26T13:44:53.100683Z",
218
- "iopub.status.busy": "2026-09-26T13:44:53.099683Z",
219
- "iopub.status.idle": "2026-09-26T13:44:53.124322Z",
220
- "shell.execute_reply": "2026-09-26T13:44:53.122814Z"
217
+ "iopub.execute_input": "2026-09-26T15:26:14.215886Z",
218
+ "iopub.status.busy": "2026-09-26T15:26:14.215886Z",
219
+ "iopub.status.idle": "2026-09-26T15:26:14.230311Z",
220
+ "shell.execute_reply": "2026-09-26T15:26:14.229277Z"
221
221
  }
222
222
  },
223
223
  "outputs": [
@@ -233,7 +233,7 @@
233
233
  " \"inputs\": [\n",
234
234
  " {\n",
235
235
  " \"path\": \"data/wells.gpkg\",\n",
236
- " \"sha256\": \"8c2dd60643d69527a8606c6c18c0bd392087d22d1cef7ae3d99695dc9e787781\",\n",
236
+ " \"sha256\": \"dbc9d6ca7a120472161d72d6866f18fdcf978e0c3fc884a153e1af0e3ed0c05d\",\n",
237
237
  " \"crs\": \"EPSG:4326\",\n",
238
238
  " \"layer\": null\n",
239
239
  " }\n",
@@ -343,10 +343,10 @@
343
343
  " \"environment\": {},\n",
344
344
  " \"producer\": {\n",
345
345
  " \"name\": \"mapsmith\",\n",
346
- " \"version\": \"0.7.0\"\n",
346
+ " \"version\": \"0.7.1\"\n",
347
347
  " },\n",
348
- " \"started_at\": \"2026-09-26T13:44:52Z\",\n",
349
- " \"finished_at\": \"2026-09-26T13:44:52Z\",\n",
348
+ " \"started_at\": \"2026-09-26T15:26:13Z\",\n",
349
+ " \"finished_at\": \"2026-09-26T15:26:14Z\",\n",
350
350
  " \"parameters_redacted\": false\n",
351
351
  "}\n"
352
352
  ]
@@ -366,10 +366,10 @@
366
366
  "id": "29e98d8f",
367
367
  "metadata": {
368
368
  "execution": {
369
- "iopub.execute_input": "2026-09-26T13:44:53.128411Z",
370
- "iopub.status.busy": "2026-09-26T13:44:53.127381Z",
371
- "iopub.status.idle": "2026-09-26T13:44:53.305618Z",
372
- "shell.execute_reply": "2026-09-26T13:44:53.305618Z"
369
+ "iopub.execute_input": "2026-09-26T15:26:14.233826Z",
370
+ "iopub.status.busy": "2026-09-26T15:26:14.233826Z",
371
+ "iopub.status.idle": "2026-09-26T15:26:14.329466Z",
372
+ "shell.execute_reply": "2026-09-26T15:26:14.328460Z"
373
373
  }
374
374
  },
375
375
  "outputs": [
@@ -24,10 +24,10 @@
24
24
  "id": "284a0692",
25
25
  "metadata": {
26
26
  "execution": {
27
- "iopub.execute_input": "2026-09-26T13:45:00.793777Z",
28
- "iopub.status.busy": "2026-09-26T13:45:00.793777Z",
29
- "iopub.status.idle": "2026-09-26T13:45:01.715875Z",
30
- "shell.execute_reply": "2026-09-26T13:45:01.714833Z"
27
+ "iopub.execute_input": "2026-09-26T15:26:21.809782Z",
28
+ "iopub.status.busy": "2026-09-26T15:26:21.809782Z",
29
+ "iopub.status.idle": "2026-09-26T15:26:22.637570Z",
30
+ "shell.execute_reply": "2026-09-26T15:26:22.636093Z"
31
31
  }
32
32
  },
33
33
  "outputs": [
@@ -90,10 +90,10 @@
90
90
  "id": "1c4b13f7",
91
91
  "metadata": {
92
92
  "execution": {
93
- "iopub.execute_input": "2026-09-26T13:45:01.719992Z",
94
- "iopub.status.busy": "2026-09-26T13:45:01.719992Z",
95
- "iopub.status.idle": "2026-09-26T13:45:02.659902Z",
96
- "shell.execute_reply": "2026-09-26T13:45:02.657665Z"
93
+ "iopub.execute_input": "2026-09-26T15:26:22.641586Z",
94
+ "iopub.status.busy": "2026-09-26T15:26:22.640584Z",
95
+ "iopub.status.idle": "2026-09-26T15:26:23.189426Z",
96
+ "shell.execute_reply": "2026-09-26T15:26:23.187910Z"
97
97
  }
98
98
  },
99
99
  "outputs": [
@@ -126,10 +126,10 @@
126
126
  "id": "21279817",
127
127
  "metadata": {
128
128
  "execution": {
129
- "iopub.execute_input": "2026-09-26T13:45:02.666354Z",
130
- "iopub.status.busy": "2026-09-26T13:45:02.666354Z",
131
- "iopub.status.idle": "2026-09-26T13:45:02.849137Z",
132
- "shell.execute_reply": "2026-09-26T13:45:02.848129Z"
129
+ "iopub.execute_input": "2026-09-26T15:26:23.191952Z",
130
+ "iopub.status.busy": "2026-09-26T15:26:23.191952Z",
131
+ "iopub.status.idle": "2026-09-26T15:26:23.320684Z",
132
+ "shell.execute_reply": "2026-09-26T15:26:23.320177Z"
133
133
  }
134
134
  },
135
135
  "outputs": [
@@ -174,10 +174,10 @@
174
174
  "id": "394efab0",
175
175
  "metadata": {
176
176
  "execution": {
177
- "iopub.execute_input": "2026-09-26T13:45:02.853138Z",
178
- "iopub.status.busy": "2026-09-26T13:45:02.853138Z",
179
- "iopub.status.idle": "2026-09-26T13:45:03.787700Z",
180
- "shell.execute_reply": "2026-09-26T13:45:03.787168Z"
177
+ "iopub.execute_input": "2026-09-26T15:26:23.325696Z",
178
+ "iopub.status.busy": "2026-09-26T15:26:23.325696Z",
179
+ "iopub.status.idle": "2026-09-26T15:26:24.156995Z",
180
+ "shell.execute_reply": "2026-09-26T15:26:24.155790Z"
181
181
  }
182
182
  },
183
183
  "outputs": [
@@ -208,10 +208,10 @@
208
208
  "id": "e6864435",
209
209
  "metadata": {
210
210
  "execution": {
211
- "iopub.execute_input": "2026-09-26T13:45:03.790591Z",
212
- "iopub.status.busy": "2026-09-26T13:45:03.789223Z",
213
- "iopub.status.idle": "2026-09-26T13:45:04.312793Z",
214
- "shell.execute_reply": "2026-09-26T13:45:04.311783Z"
211
+ "iopub.execute_input": "2026-09-26T15:26:24.159995Z",
212
+ "iopub.status.busy": "2026-09-26T15:26:24.159995Z",
213
+ "iopub.status.idle": "2026-09-26T15:26:24.682657Z",
214
+ "shell.execute_reply": "2026-09-26T15:26:24.682058Z"
215
215
  }
216
216
  },
217
217
  "outputs": [
@@ -254,10 +254,10 @@
254
254
  "id": "a9963145",
255
255
  "metadata": {
256
256
  "execution": {
257
- "iopub.execute_input": "2026-09-26T13:45:04.316798Z",
258
- "iopub.status.busy": "2026-09-26T13:45:04.315801Z",
259
- "iopub.status.idle": "2026-09-26T13:45:05.474345Z",
260
- "shell.execute_reply": "2026-09-26T13:45:05.473334Z"
257
+ "iopub.execute_input": "2026-09-26T15:26:24.686675Z",
258
+ "iopub.status.busy": "2026-09-26T15:26:24.686675Z",
259
+ "iopub.status.idle": "2026-09-26T15:26:25.707099Z",
260
+ "shell.execute_reply": "2026-09-26T15:26:25.706094Z"
261
261
  }
262
262
  },
263
263
  "outputs": [
@@ -308,10 +308,10 @@
308
308
  "id": "29e44f7f",
309
309
  "metadata": {
310
310
  "execution": {
311
- "iopub.execute_input": "2026-09-26T13:45:05.477351Z",
312
- "iopub.status.busy": "2026-09-26T13:45:05.477351Z",
313
- "iopub.status.idle": "2026-09-26T13:45:05.516209Z",
314
- "shell.execute_reply": "2026-09-26T13:45:05.515201Z"
311
+ "iopub.execute_input": "2026-09-26T15:26:25.708116Z",
312
+ "iopub.status.busy": "2026-09-26T15:26:25.708116Z",
313
+ "iopub.status.idle": "2026-09-26T15:26:25.749262Z",
314
+ "shell.execute_reply": "2026-09-26T15:26:25.749262Z"
315
315
  }
316
316
  },
317
317
  "outputs": [
@@ -353,10 +353,10 @@
353
353
  "id": "4d1c073f",
354
354
  "metadata": {
355
355
  "execution": {
356
- "iopub.execute_input": "2026-09-26T13:45:05.518211Z",
357
- "iopub.status.busy": "2026-09-26T13:45:05.518211Z",
358
- "iopub.status.idle": "2026-09-26T13:45:05.738790Z",
359
- "shell.execute_reply": "2026-09-26T13:45:05.737785Z"
356
+ "iopub.execute_input": "2026-09-26T15:26:25.752267Z",
357
+ "iopub.status.busy": "2026-09-26T15:26:25.752267Z",
358
+ "iopub.status.idle": "2026-09-26T15:26:25.949051Z",
359
+ "shell.execute_reply": "2026-09-26T15:26:25.949051Z"
360
360
  }
361
361
  },
362
362
  "outputs": [
@@ -455,10 +455,10 @@
455
455
  "id": "fb3ccb2d",
456
456
  "metadata": {
457
457
  "execution": {
458
- "iopub.execute_input": "2026-09-26T13:45:05.741796Z",
459
- "iopub.status.busy": "2026-09-26T13:45:05.741796Z",
460
- "iopub.status.idle": "2026-09-26T13:45:05.748275Z",
461
- "shell.execute_reply": "2026-09-26T13:45:05.747269Z"
458
+ "iopub.execute_input": "2026-09-26T15:26:25.952060Z",
459
+ "iopub.status.busy": "2026-09-26T15:26:25.951067Z",
460
+ "iopub.status.idle": "2026-09-26T15:26:25.957071Z",
461
+ "shell.execute_reply": "2026-09-26T15:26:25.957071Z"
462
462
  }
463
463
  },
464
464
  "outputs": [
@@ -18,10 +18,10 @@
18
18
  "id": "25542ca4",
19
19
  "metadata": {
20
20
  "execution": {
21
- "iopub.execute_input": "2026-09-26T13:45:09.721681Z",
22
- "iopub.status.busy": "2026-09-26T13:45:09.721681Z",
23
- "iopub.status.idle": "2026-09-26T13:45:10.509283Z",
24
- "shell.execute_reply": "2026-09-26T13:45:10.508273Z"
21
+ "iopub.execute_input": "2026-09-26T15:26:29.891456Z",
22
+ "iopub.status.busy": "2026-09-26T15:26:29.891456Z",
23
+ "iopub.status.idle": "2026-09-26T15:26:30.597416Z",
24
+ "shell.execute_reply": "2026-09-26T15:26:30.596410Z"
25
25
  }
26
26
  },
27
27
  "outputs": [
@@ -68,10 +68,10 @@
68
68
  "id": "a7c1b3ee",
69
69
  "metadata": {
70
70
  "execution": {
71
- "iopub.execute_input": "2026-09-26T13:45:10.512282Z",
72
- "iopub.status.busy": "2026-09-26T13:45:10.511281Z",
73
- "iopub.status.idle": "2026-09-26T13:45:10.642218Z",
74
- "shell.execute_reply": "2026-09-26T13:45:10.640213Z"
71
+ "iopub.execute_input": "2026-09-26T15:26:30.599943Z",
72
+ "iopub.status.busy": "2026-09-26T15:26:30.598931Z",
73
+ "iopub.status.idle": "2026-09-26T15:26:30.730935Z",
74
+ "shell.execute_reply": "2026-09-26T15:26:30.730935Z"
75
75
  }
76
76
  },
77
77
  "outputs": [
@@ -126,10 +126,10 @@
126
126
  "id": "91a05af3",
127
127
  "metadata": {
128
128
  "execution": {
129
- "iopub.execute_input": "2026-09-26T13:45:10.645218Z",
130
- "iopub.status.busy": "2026-09-26T13:45:10.645218Z",
131
- "iopub.status.idle": "2026-09-26T13:45:10.672733Z",
132
- "shell.execute_reply": "2026-09-26T13:45:10.671727Z"
129
+ "iopub.execute_input": "2026-09-26T15:26:30.733943Z",
130
+ "iopub.status.busy": "2026-09-26T15:26:30.732943Z",
131
+ "iopub.status.idle": "2026-09-26T15:26:30.760472Z",
132
+ "shell.execute_reply": "2026-09-26T15:26:30.760472Z"
133
133
  }
134
134
  },
135
135
  "outputs": [
@@ -169,10 +169,10 @@
169
169
  "id": "0314a8a8",
170
170
  "metadata": {
171
171
  "execution": {
172
- "iopub.execute_input": "2026-09-26T13:45:10.676733Z",
173
- "iopub.status.busy": "2026-09-26T13:45:10.675733Z",
174
- "iopub.status.idle": "2026-09-26T13:45:10.951512Z",
175
- "shell.execute_reply": "2026-09-26T13:45:10.950506Z"
172
+ "iopub.execute_input": "2026-09-26T15:26:30.763960Z",
173
+ "iopub.status.busy": "2026-09-26T15:26:30.763960Z",
174
+ "iopub.status.idle": "2026-09-26T15:26:31.024108Z",
175
+ "shell.execute_reply": "2026-09-26T15:26:31.024108Z"
176
176
  }
177
177
  },
178
178
  "outputs": [
@@ -181,8 +181,8 @@
181
181
  "output_type": "stream",
182
182
  "text": [
183
183
  "executed: True\n",
184
- " buf: ok (4 features, 159.9 ms, verified=True)\n",
185
- " cut: ok (3 features, 87.8 ms, verified=True)\n",
184
+ " buf: ok (4 features, 149.8 ms, verified=True)\n",
185
+ " cut: ok (3 features, 82.4 ms, verified=True)\n",
186
186
  "plan sha256: a5d2cadb11b7baf8 …\n",
187
187
  "plan manifest: data\\at_risk.parquet.plan.json\n"
188
188
  ]
@@ -207,10 +207,10 @@
207
207
  "id": "6f3d69a8",
208
208
  "metadata": {
209
209
  "execution": {
210
- "iopub.execute_input": "2026-09-26T13:45:10.955025Z",
211
- "iopub.status.busy": "2026-09-26T13:45:10.955025Z",
212
- "iopub.status.idle": "2026-09-26T13:45:10.968548Z",
213
- "shell.execute_reply": "2026-09-26T13:45:10.967539Z"
210
+ "iopub.execute_input": "2026-09-26T15:26:31.027118Z",
211
+ "iopub.status.busy": "2026-09-26T15:26:31.027118Z",
212
+ "iopub.status.idle": "2026-09-26T15:26:31.045283Z",
213
+ "shell.execute_reply": "2026-09-26T15:26:31.043769Z"
214
214
  }
215
215
  },
216
216
  "outputs": [
@@ -219,7 +219,7 @@
219
219
  "output_type": "stream",
220
220
  "text": [
221
221
  "{\n",
222
- " \"mapsmith_version\": \"0.7.0\",\n",
222
+ " \"mapsmith_version\": \"0.7.1\",\n",
223
223
  " \"plan_sha256\": \"a5d2cadb11b7baf8722806fb7aca608c4ab9e22ac64f019e438c680f6b5ac852\",\n",
224
224
  " \"goal\": \"wells at risk\"\n",
225
225
  "}\n",