@honua/mcp-server 0.1.2-beta.0 → 0.1.8-beta.0

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 (117) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +232 -9
  3. package/dist/src/certification/admin-parity.d.ts +96 -0
  4. package/dist/src/certification/admin-parity.d.ts.map +1 -0
  5. package/dist/src/certification/admin-parity.js +235 -0
  6. package/dist/src/certification/census-fixture-client.d.ts.map +1 -1
  7. package/dist/src/certification/census-fixture-client.js +5 -0
  8. package/dist/src/certification/certifier.d.ts +1 -1
  9. package/dist/src/certification/certifier.d.ts.map +1 -1
  10. package/dist/src/certification/certifier.js +28 -20
  11. package/dist/src/certification/cli.js +1 -1
  12. package/dist/src/certification/cql2.d.ts +24 -0
  13. package/dist/src/certification/cql2.d.ts.map +1 -0
  14. package/dist/src/certification/cql2.js +354 -0
  15. package/dist/src/certification/fixtures.d.ts +8 -0
  16. package/dist/src/certification/fixtures.d.ts.map +1 -1
  17. package/dist/src/certification/fixtures.js +26 -10
  18. package/dist/src/certification/ogc-data.d.ts +30 -0
  19. package/dist/src/certification/ogc-data.d.ts.map +1 -0
  20. package/dist/src/certification/ogc-data.js +726 -0
  21. package/dist/src/certification/ogc-fixture-client.d.ts +4 -0
  22. package/dist/src/certification/ogc-fixture-client.d.ts.map +1 -0
  23. package/dist/src/certification/ogc-fixture-client.js +190 -0
  24. package/dist/src/certification/target.d.ts +10 -1
  25. package/dist/src/certification/target.d.ts.map +1 -1
  26. package/dist/src/certification/target.js +63 -28
  27. package/dist/src/credential-endpoint.d.ts +3 -0
  28. package/dist/src/credential-endpoint.d.ts.map +1 -0
  29. package/dist/src/credential-endpoint.js +24 -0
  30. package/dist/src/eval/cli.js +6 -3
  31. package/dist/src/eval/corpus.d.ts +7 -0
  32. package/dist/src/eval/corpus.d.ts.map +1 -1
  33. package/dist/src/eval/corpus.js +12 -0
  34. package/dist/src/eval/ogc-corpus.d.ts +3 -0
  35. package/dist/src/eval/ogc-corpus.d.ts.map +1 -0
  36. package/dist/src/eval/ogc-corpus.js +437 -0
  37. package/dist/src/eval/runner.d.ts +6 -0
  38. package/dist/src/eval/runner.d.ts.map +1 -1
  39. package/dist/src/eval/runner.js +21 -7
  40. package/dist/src/helpers.d.ts +8 -13
  41. package/dist/src/helpers.d.ts.map +1 -1
  42. package/dist/src/helpers.js +7 -35
  43. package/dist/src/index.d.ts +36 -8
  44. package/dist/src/index.d.ts.map +1 -1
  45. package/dist/src/index.js +55 -18
  46. package/dist/src/neutral/errors.d.ts +73 -0
  47. package/dist/src/neutral/errors.d.ts.map +1 -0
  48. package/dist/src/neutral/errors.js +112 -0
  49. package/dist/src/neutral/filter.d.ts +108 -0
  50. package/dist/src/neutral/filter.d.ts.map +1 -0
  51. package/dist/src/neutral/filter.js +271 -0
  52. package/dist/src/neutral/query.d.ts +101 -0
  53. package/dist/src/neutral/query.d.ts.map +1 -0
  54. package/dist/src/neutral/query.js +180 -0
  55. package/dist/src/neutral/result.d.ts +33 -0
  56. package/dist/src/neutral/result.d.ts.map +1 -0
  57. package/dist/src/neutral/result.js +38 -0
  58. package/dist/src/neutral/source-ref.d.ts +126 -0
  59. package/dist/src/neutral/source-ref.d.ts.map +1 -0
  60. package/dist/src/neutral/source-ref.js +267 -0
  61. package/dist/src/nl-map-control.d.ts.map +1 -1
  62. package/dist/src/proxy.d.ts.map +1 -1
  63. package/dist/src/proxy.js +29 -14
  64. package/dist/src/release/zero-to-map-checkpoint.d.ts +34 -0
  65. package/dist/src/release/zero-to-map-checkpoint.d.ts.map +1 -0
  66. package/dist/src/release/zero-to-map-checkpoint.js +369 -0
  67. package/dist/src/release/zero-to-map-cli.d.ts +51 -0
  68. package/dist/src/release/zero-to-map-cli.d.ts.map +1 -0
  69. package/dist/src/release/zero-to-map-cli.js +880 -0
  70. package/dist/src/release/zero-to-map-provision.d.ts +37 -0
  71. package/dist/src/release/zero-to-map-provision.d.ts.map +1 -0
  72. package/dist/src/release/zero-to-map-provision.js +177 -0
  73. package/dist/src/release/zero-to-map.d.ts +296 -0
  74. package/dist/src/release/zero-to-map.d.ts.map +1 -0
  75. package/dist/src/release/zero-to-map.js +1069 -0
  76. package/dist/src/tools/admin-install-local.d.ts +30 -0
  77. package/dist/src/tools/admin-install-local.d.ts.map +1 -0
  78. package/dist/src/tools/admin-install-local.js +22 -0
  79. package/dist/src/tools/control-plane-command.d.ts +99 -0
  80. package/dist/src/tools/control-plane-command.d.ts.map +1 -0
  81. package/dist/src/tools/control-plane-command.js +180 -0
  82. package/dist/src/tools/count-features.d.ts +85 -11
  83. package/dist/src/tools/count-features.d.ts.map +1 -1
  84. package/dist/src/tools/count-features.js +49 -31
  85. package/dist/src/tools/describe-layer.d.ts +30 -6
  86. package/dist/src/tools/describe-layer.d.ts.map +1 -1
  87. package/dist/src/tools/describe-layer.js +99 -8
  88. package/dist/src/tools/docs-search.d.ts +100 -0
  89. package/dist/src/tools/docs-search.d.ts.map +1 -0
  90. package/dist/src/tools/docs-search.js +381 -0
  91. package/dist/src/tools/get-extent.d.ts +69 -11
  92. package/dist/src/tools/get-extent.d.ts.map +1 -1
  93. package/dist/src/tools/get-extent.js +28 -46
  94. package/dist/src/tools/list-services.d.ts +7 -0
  95. package/dist/src/tools/list-services.d.ts.map +1 -1
  96. package/dist/src/tools/list-services.js +8 -1
  97. package/dist/src/tools/list-sources.d.ts +44 -0
  98. package/dist/src/tools/list-sources.d.ts.map +1 -0
  99. package/dist/src/tools/list-sources.js +138 -0
  100. package/dist/src/tools/query-features.d.ts +99 -19
  101. package/dist/src/tools/query-features.d.ts.map +1 -1
  102. package/dist/src/tools/query-features.js +38 -45
  103. package/dist/src/tools/statistics.d.ts +80 -12
  104. package/dist/src/tools/statistics.d.ts.map +1 -1
  105. package/dist/src/tools/statistics.js +56 -23
  106. package/package.json +37 -8
  107. package/release/zero-to-map/README.md +174 -0
  108. package/release/zero-to-map/configs/claude-code.mcp.json +11 -0
  109. package/release/zero-to-map/configs/claude-desktop.json +11 -0
  110. package/release/zero-to-map/configs/cursor.json +11 -0
  111. package/release/zero-to-map/contracts/aws-ecs-provision-binding.schema.json +59 -0
  112. package/release/zero-to-map/contracts/checkpoint.schema.json +152 -0
  113. package/release/zero-to-map/contracts/console-receipt.schema.json +150 -0
  114. package/release/zero-to-map/contracts/esri-gp-mcp.v1.json +73 -0
  115. package/release/zero-to-map/fixtures/parcels.geojson +33 -0
  116. package/release/zero-to-map/fixtures/zoning.geojson +24 -0
  117. package/release/zero-to-map/journey.v1.json +1248 -0
@@ -0,0 +1,1248 @@
1
+ {
2
+ "schemaVersion": "honua.zero-to-map.plan/v1",
3
+ "journeyId": "2026.1-zero-to-map",
4
+ "releaseContract": "honua-release#123/D9.3",
5
+ "fixtures": [
6
+ "fixtures/parcels.geojson",
7
+ "fixtures/zoning.geojson"
8
+ ],
9
+ "dependencyRefs": [
10
+ "honua-sdk-js#1370-#1373 control-plane CLI and proxy integration",
11
+ "honua-server#3268 synchronous OGC process execution and GeoJSON inputs",
12
+ "honua-demo-infra#68 live geometry.buffer canary",
13
+ "honua-server#3304 publication status and stable URL",
14
+ "honua-server#3358-#3365 2026.1 admin operation catalog"
15
+ ],
16
+ "variables": {
17
+ "installDirectory": ".honua-zero-to-map",
18
+ "dbHost": "postgis",
19
+ "dbPort": 5432,
20
+ "dbName": "honua",
21
+ "dbUser": "honua",
22
+ "dbSecretReference": "env:HONUA_ZERO_TO_MAP_DB_CONNECTION",
23
+ "dbSecretType": "environment",
24
+ "serviceName": "zero-to-map",
25
+ "route": "zero-to-map",
26
+ "mapRoute": "zero-to-map-map",
27
+ "dashboardRoute": "zero-to-map-dashboard",
28
+ "parcelsTable": "zero_to_map_parcels",
29
+ "zoningTable": "zero_to_map_zoning"
30
+ },
31
+ "stages": [
32
+ {
33
+ "number": 1,
34
+ "id": "install",
35
+ "title": "Install Honua locally and verify the handoff surfaces",
36
+ "actions": [
37
+ {
38
+ "id": "install-local",
39
+ "title": "Run the control-plane Docker installer",
40
+ "kind": "cli",
41
+ "args": ["admin", "install", "local", "--profile", "gp-dev", "--yes", "--directory", "${installDirectory}"],
42
+ "captures": [
43
+ { "variable": "credentialId", "pointers": ["/accessCredential/id"] },
44
+ { "variable": "credentialRequestedGrants", "pointers": ["/accessCredential/requestedGrants"] },
45
+ { "variable": "credentialEffectiveGrants", "pointers": ["/accessCredential/effectiveGrants"] },
46
+ { "variable": "credentialReferenceDigest", "pointers": ["/accessCredential/referenceDigestSha256"] }
47
+ ],
48
+ "forbiddenPointers": [
49
+ "/accessCredential/material",
50
+ "/accessCredential/secret",
51
+ "/accessCredential/apiKey",
52
+ "/adminKey"
53
+ ]
54
+ },
55
+ {
56
+ "id": "install-status",
57
+ "title": "Verify API, MCP, and Console readiness",
58
+ "kind": "cli",
59
+ "args": ["admin", "install", "status", "--directory", "${installDirectory}"]
60
+ }
61
+ ]
62
+ },
63
+ {
64
+ "number": 2,
65
+ "id": "admin",
66
+ "title": "Configure a connection, import data, publish layers, and set access",
67
+ "actions": [
68
+ {
69
+ "id": "admin-status",
70
+ "title": "Read server status through the admin MCP catalog",
71
+ "kind": "mcp",
72
+ "tool": "honua_admin_server_status",
73
+ "arguments": {}
74
+ },
75
+ {
76
+ "id": "list-access-credentials",
77
+ "title": "List secret-safe access credential metadata through MCP",
78
+ "kind": "mcp",
79
+ "tool": "honua_admin_api_key_list",
80
+ "arguments": {},
81
+ "forbiddenPointers": [
82
+ "/structuredContent/key",
83
+ "/structuredContent/data/key",
84
+ "/structuredContent/accessToken"
85
+ ]
86
+ },
87
+ {
88
+ "id": "verify-access-credential",
89
+ "title": "Verify the provisioned credential identity and effective grants through MCP",
90
+ "kind": "mcp",
91
+ "tool": "honua_admin_api_key_effective_permissions",
92
+ "arguments": { "id": "${credentialId}" },
93
+ "captures": [
94
+ {
95
+ "variable": "verifiedCredentialId",
96
+ "pointers": ["/structuredContent/details/response"],
97
+ "parsedPointers": ["/data/id"],
98
+ "equals": "${credentialId}"
99
+ },
100
+ {
101
+ "variable": "verifiedCredentialStatus",
102
+ "pointers": ["/structuredContent/details/response"],
103
+ "parsedPointers": ["/data/status"],
104
+ "equals": "active"
105
+ },
106
+ {
107
+ "variable": "verifiedCredentialCanAuthenticate",
108
+ "pointers": ["/structuredContent/details/response"],
109
+ "parsedPointers": ["/data/canAuthenticate"],
110
+ "equals": true
111
+ },
112
+ {
113
+ "variable": "verifiedCredentialGrants",
114
+ "pointers": ["/structuredContent/details/response"],
115
+ "parsedPointers": ["/data/permissions"],
116
+ "equals": "${credentialEffectiveGrants}"
117
+ }
118
+ ],
119
+ "forbiddenPointers": [
120
+ "/structuredContent/key",
121
+ "/structuredContent/data/key",
122
+ "/structuredContent/accessToken"
123
+ ]
124
+ },
125
+ {
126
+ "id": "create-connection",
127
+ "title": "Create the fixture PostGIS connection",
128
+ "kind": "mcp",
129
+ "tool": "honua_admin_connection_create",
130
+ "arguments": {
131
+ "body": {
132
+ "name": "zero-to-map",
133
+ "description": "Deterministic 2026.1 release journey fixtures",
134
+ "host": "${dbHost}",
135
+ "port": "${dbPort}",
136
+ "databaseName": "${dbName}",
137
+ "username": "${dbUser}",
138
+ "secretReference": "${dbSecretReference}",
139
+ "secretType": "${dbSecretType}",
140
+ "sslRequired": false,
141
+ "sslMode": "Disable"
142
+ }
143
+ },
144
+ "captures": [
145
+ {
146
+ "variable": "connectionId",
147
+ "pointers": ["/structuredContent/details/response"],
148
+ "parsedPointers": ["/data/connectionId"]
149
+ }
150
+ ]
151
+ },
152
+ {
153
+ "id": "test-connection",
154
+ "title": "Test the saved connection",
155
+ "kind": "mcp",
156
+ "tool": "honua_admin_connection_test",
157
+ "arguments": { "id": "${connectionId}" }
158
+ },
159
+ {
160
+ "id": "import-parcels",
161
+ "title": "Import the parcel fixture",
162
+ "kind": "mcp",
163
+ "tool": "honua_admin_import_upload_url",
164
+ "arguments": {
165
+ "body": {
166
+ "sourceUrl": "${fixtureBaseUrl}/parcels.geojson",
167
+ "fileName": "parcels.geojson",
168
+ "tableName": "${parcelsTable}",
169
+ "targetSchema": "public",
170
+ "sourceSrid": 4326,
171
+ "targetSrid": 4326,
172
+ "overwriteExisting": true
173
+ }
174
+ }
175
+ },
176
+ {
177
+ "id": "import-zoning",
178
+ "title": "Import the zoning fixture",
179
+ "kind": "mcp",
180
+ "tool": "honua_admin_import_upload_url",
181
+ "arguments": {
182
+ "body": {
183
+ "sourceUrl": "${fixtureBaseUrl}/zoning.geojson",
184
+ "fileName": "zoning.geojson",
185
+ "tableName": "${zoningTable}",
186
+ "targetSchema": "public",
187
+ "sourceSrid": 4326,
188
+ "targetSrid": 4326,
189
+ "overwriteExisting": true
190
+ }
191
+ }
192
+ },
193
+ {
194
+ "id": "publish-parcels",
195
+ "title": "Publish the parcel layer",
196
+ "kind": "mcp",
197
+ "tool": "honua_admin_layer_publish",
198
+ "arguments": {
199
+ "id": "${connectionId}",
200
+ "body": {
201
+ "schema": "public",
202
+ "table": "${parcelsTable}",
203
+ "layerName": "Parcels",
204
+ "serviceName": "${serviceName}",
205
+ "geometryColumn": "geometry",
206
+ "geometryType": "Polygon",
207
+ "srid": 4326,
208
+ "primaryKey": "parcel_id",
209
+ "enabled": true
210
+ }
211
+ },
212
+ "captures": [
213
+ {
214
+ "variable": "parcelsLayerId",
215
+ "pointers": ["/structuredContent/details/response"],
216
+ "parsedPointers": ["/data/layerId"]
217
+ }
218
+ ]
219
+ },
220
+ {
221
+ "id": "publish-zoning",
222
+ "title": "Publish the zoning layer",
223
+ "kind": "mcp",
224
+ "tool": "honua_admin_layer_publish",
225
+ "arguments": {
226
+ "id": "${connectionId}",
227
+ "body": {
228
+ "schema": "public",
229
+ "table": "${zoningTable}",
230
+ "layerName": "Zoning",
231
+ "serviceName": "${serviceName}",
232
+ "geometryColumn": "geometry",
233
+ "geometryType": "Polygon",
234
+ "srid": 4326,
235
+ "primaryKey": "zone",
236
+ "enabled": true
237
+ }
238
+ },
239
+ "captures": [
240
+ {
241
+ "variable": "zoningLayerId",
242
+ "pointers": ["/structuredContent/details/response"],
243
+ "parsedPointers": ["/data/layerId"]
244
+ }
245
+ ]
246
+ },
247
+ {
248
+ "id": "set-public-access",
249
+ "title": "Allow anonymous read access to the journey service",
250
+ "kind": "mcp",
251
+ "tool": "honua_admin_service_set_access_policy",
252
+ "arguments": {
253
+ "serviceName": "${serviceName}",
254
+ "body": { "allowAnonymous": true, "allowAnonymousWrite": false }
255
+ }
256
+ }
257
+ ]
258
+ },
259
+ {
260
+ "number": 3,
261
+ "id": "geoprocessing",
262
+ "title": "Execute Buffer through AI-facing Esri MCP, GPServer compatibility, and direct analysis",
263
+ "actions": [
264
+ {
265
+ "id": "list-esri-gp-tasks",
266
+ "title": "Discover the Esri-compatible GP task catalog through MCP",
267
+ "kind": "mcp",
268
+ "tool": "honua_esri_gp_list_tasks",
269
+ "arguments": {},
270
+ "captures": [
271
+ { "variable": "esriGpTasks", "pointers": ["/structuredContent/tasks"] }
272
+ ]
273
+ },
274
+ {
275
+ "id": "describe-esri-buffer",
276
+ "title": "Resolve the Esri Buffer alias to the canonical process",
277
+ "kind": "mcp",
278
+ "tool": "honua_esri_gp_describe_task",
279
+ "arguments": { "taskName": "Buffer" },
280
+ "captures": [
281
+ { "variable": "esriGpTaskName", "pointers": ["/structuredContent/taskName"], "equals": "Buffer" },
282
+ { "variable": "esriGpProcessId", "pointers": ["/structuredContent/processId"], "equals": "geometry.buffer" }
283
+ ]
284
+ },
285
+ {
286
+ "id": "buffer-esri-mcp",
287
+ "title": "Execute the AI-selected Esri Buffer task through MCP",
288
+ "kind": "mcp",
289
+ "tool": "honua_esri_gp_execute_task",
290
+ "arguments": {
291
+ "serviceId": "analysis",
292
+ "taskName": "Buffer",
293
+ "parameters": {
294
+ "wkb": {
295
+ "geometryType": "esriGeometryPolygon",
296
+ "spatialReference": { "wkid": 4326 },
297
+ "features": [
298
+ {
299
+ "attributes": { "parcel_id": "P-101" },
300
+ "geometry": {
301
+ "rings": [
302
+ [
303
+ [-157.8616, 21.3067],
304
+ [-157.8608, 21.3067],
305
+ [-157.8608, 21.3073],
306
+ [-157.8616, 21.3073],
307
+ [-157.8616, 21.3067]
308
+ ]
309
+ ]
310
+ }
311
+ }
312
+ ]
313
+ },
314
+ "distance": 0.00025
315
+ },
316
+ "idempotencyKey": "2026.1-zero-to-map-esri-buffer"
317
+ },
318
+ "captures": [
319
+ { "variable": "esriMcpJobId", "pointers": ["/structuredContent/jobId"] },
320
+ { "variable": "esriMcpServiceId", "pointers": ["/structuredContent/serviceId"], "equals": "analysis" },
321
+ { "variable": "esriMcpTaskName", "pointers": ["/structuredContent/taskName"], "equals": "Buffer" },
322
+ { "variable": "esriMcpProcessId", "pointers": ["/structuredContent/processId"], "equals": "geometry.buffer" }
323
+ ]
324
+ },
325
+ {
326
+ "id": "wait-esri-mcp-buffer",
327
+ "title": "Poll the Esri MCP job to terminal success",
328
+ "kind": "mcp-resource",
329
+ "uri": "honua://jobs/${esriMcpJobId}",
330
+ "waitFor": {
331
+ "pointer": "/status",
332
+ "equals": "Succeeded",
333
+ "terminal": ["Succeeded", "Failed", "Cancelled"],
334
+ "pollIntervalMs": 500,
335
+ "deadlineMs": 120000
336
+ },
337
+ "captures": [
338
+ {
339
+ "variable": "esriMcpResultsUri",
340
+ "pointers": ["/contents/0/text"],
341
+ "parsedPointers": ["/resultsUri"]
342
+ }
343
+ ]
344
+ },
345
+ {
346
+ "id": "read-esri-mcp-buffer-results",
347
+ "title": "Join the Esri MCP job to its result package and artifact",
348
+ "kind": "mcp-resource",
349
+ "uri": "${esriMcpResultsUri}",
350
+ "captures": [
351
+ {
352
+ "variable": "esriMcpResultJobId",
353
+ "pointers": ["/contents/0/text"],
354
+ "parsedPointers": ["/jobId"],
355
+ "equals": "${esriMcpJobId}"
356
+ },
357
+ {
358
+ "variable": "esriMcpResultPackageId",
359
+ "pointers": ["/contents/0/text"],
360
+ "parsedPointers": ["/resultPackageId"]
361
+ },
362
+ {
363
+ "variable": "esriMcpArtifactId",
364
+ "pointers": ["/contents/0/text"],
365
+ "parsedPointers": ["/artifacts/0/artifactId"]
366
+ }
367
+ ]
368
+ },
369
+ {
370
+ "id": "buffer-esri-gpserver",
371
+ "title": "Prove the same Buffer task through the SDK GPServer protocol adapter",
372
+ "kind": "gpserver",
373
+ "serviceId": "geoprocessing",
374
+ "taskName": "Buffer",
375
+ "processId": "geometry.buffer",
376
+ "parameters": {
377
+ "wkb": "AQEAAABQ/Bhz15pewNDVVuwv40JA",
378
+ "srid": 4326,
379
+ "distance": 0.00025
380
+ },
381
+ "resultNames": ["outputFeatureLayer"],
382
+ "captures": [
383
+ { "variable": "gpServerJobId", "pointers": ["/jobId"] }
384
+ ]
385
+ },
386
+ {
387
+ "id": "buffer-parcels",
388
+ "title": "Run the MCP direct verb and retain its artifact for Studio",
389
+ "kind": "mcp",
390
+ "tool": "honua_buffer_features",
391
+ "arguments": {
392
+ "source": { "serviceId": "${serviceName}", "layerId": "${parcelsLayerId}" },
393
+ "distance": 25,
394
+ "unit": "meters",
395
+ "dissolve": false,
396
+ "outSrid": 4326
397
+ },
398
+ "captures": [
399
+ {
400
+ "variable": "directAnalysisJobId",
401
+ "pointers": ["/structuredContent/jobId"]
402
+ }
403
+ ]
404
+ },
405
+ {
406
+ "id": "wait-direct-buffer",
407
+ "title": "Poll the direct analysis job to terminal success",
408
+ "kind": "mcp-resource",
409
+ "uri": "honua://jobs/${directAnalysisJobId}",
410
+ "waitFor": {
411
+ "pointer": "/status",
412
+ "equals": "Succeeded",
413
+ "terminal": ["Succeeded", "Failed", "Cancelled"],
414
+ "pollIntervalMs": 500,
415
+ "deadlineMs": 120000
416
+ },
417
+ "captures": [
418
+ {
419
+ "variable": "directAnalysisResultsUri",
420
+ "pointers": ["/contents/0/text"],
421
+ "parsedPointers": ["/resultsUri"]
422
+ }
423
+ ]
424
+ },
425
+ {
426
+ "id": "read-direct-buffer-results",
427
+ "title": "Retain the direct analysis artifact for Studio",
428
+ "kind": "mcp-resource",
429
+ "uri": "${directAnalysisResultsUri}",
430
+ "captures": [
431
+ {
432
+ "variable": "directAnalysisResultJobId",
433
+ "pointers": ["/contents/0/text"],
434
+ "parsedPointers": ["/jobId"],
435
+ "equals": "${directAnalysisJobId}"
436
+ },
437
+ {
438
+ "variable": "bufferArtifactId",
439
+ "pointers": ["/contents/0/text"],
440
+ "parsedPointers": ["/artifacts/0/artifactId"]
441
+ }
442
+ ]
443
+ }
444
+ ]
445
+ },
446
+ {
447
+ "number": 4,
448
+ "id": "studio",
449
+ "title": "Compose, validate, save, read, and reopen distinct map, app, and dashboard families",
450
+ "actions": [
451
+ {
452
+ "id": "create-map-draft",
453
+ "title": "Create the Studio map draft",
454
+ "kind": "mcp",
455
+ "tool": "honua_studio_create_draft",
456
+ "arguments": {
457
+ "packageKey": "zero-to-map-map",
458
+ "family": "map",
459
+ "schemaVersion": "1.0",
460
+ "body": {
461
+ "mapPackageId": "map-zero-to-map",
462
+ "format": "honua_map_package.v1",
463
+ "status": "Draft",
464
+ "sourceBindings": [],
465
+ "styleRefs": [],
466
+ "legend": [],
467
+ "popupBindings": [],
468
+ "labelBindings": [],
469
+ "boundArtifacts": [],
470
+ "createdAt": "2026-08-20T00:00:00Z"
471
+ }
472
+ },
473
+ "captures": [
474
+ { "variable": "mapDraftId", "pointers": ["/structuredContent/draftId"] },
475
+ { "variable": "mapItemId", "pointers": ["/structuredContent/itemId"] },
476
+ { "variable": "mapGeneration", "pointers": ["/structuredContent/generation"] }
477
+ ]
478
+ },
479
+ {
480
+ "id": "add-map-parcels-layer",
481
+ "title": "Add the published parcels to the map",
482
+ "kind": "mcp",
483
+ "tool": "honua_studio_add_layer",
484
+ "arguments": {
485
+ "draftId": "${mapDraftId}",
486
+ "generation": "${mapGeneration}",
487
+ "layer": {
488
+ "id": "parcels",
489
+ "sourceId": "honua://services/${serviceName}/layers/${parcelsLayerId}",
490
+ "type": "fill",
491
+ "title": "Parcels",
492
+ "visible": true
493
+ }
494
+ },
495
+ "captures": [{ "variable": "mapGeneration", "pointers": ["/structuredContent/generation"] }]
496
+ },
497
+ {
498
+ "id": "add-map-buffer-layer",
499
+ "title": "Add the retained GP artifact",
500
+ "kind": "mcp",
501
+ "tool": "honua_studio_add_layer",
502
+ "arguments": {
503
+ "draftId": "${mapDraftId}",
504
+ "generation": "${mapGeneration}",
505
+ "layer": {
506
+ "id": "parcel-buffer",
507
+ "sourceId": "honua://artifacts/${bufferArtifactId}",
508
+ "type": "fill",
509
+ "title": "25 m parcel buffer",
510
+ "visible": true
511
+ }
512
+ },
513
+ "captures": [{ "variable": "mapGeneration", "pointers": ["/structuredContent/generation"] }]
514
+ },
515
+ {
516
+ "id": "style-map-buffer-layer",
517
+ "title": "Apply the buffer style",
518
+ "kind": "mcp",
519
+ "tool": "honua_studio_set_layer_style",
520
+ "arguments": {
521
+ "draftId": "${mapDraftId}",
522
+ "generation": "${mapGeneration}",
523
+ "layerId": "parcel-buffer",
524
+ "styleRef": "zero-to-map-buffer"
525
+ },
526
+ "captures": [{ "variable": "mapGeneration", "pointers": ["/structuredContent/generation"] }]
527
+ },
528
+ {
529
+ "id": "set-map-buffer-visibility",
530
+ "title": "Set explicit buffer visibility",
531
+ "kind": "mcp",
532
+ "tool": "honua_studio_set_layer_visibility",
533
+ "arguments": {
534
+ "draftId": "${mapDraftId}",
535
+ "generation": "${mapGeneration}",
536
+ "layerId": "parcel-buffer",
537
+ "visible": true
538
+ },
539
+ "captures": [{ "variable": "mapGeneration", "pointers": ["/structuredContent/generation"] }]
540
+ },
541
+ {
542
+ "id": "set-map-view",
543
+ "title": "Set the map view",
544
+ "kind": "mcp",
545
+ "tool": "honua_studio_set_view",
546
+ "arguments": {
547
+ "draftId": "${mapDraftId}",
548
+ "generation": "${mapGeneration}",
549
+ "view": { "bbox": [-157.862, 21.3064, -157.8595, 21.3083], "crs": "EPSG:4326" }
550
+ },
551
+ "captures": [{ "variable": "mapGeneration", "pointers": ["/structuredContent/generation"] }]
552
+ },
553
+ {
554
+ "id": "add-map-widget",
555
+ "title": "Add the assessed-value chart to the map",
556
+ "kind": "mcp",
557
+ "tool": "honua_studio_add_widget",
558
+ "arguments": {
559
+ "draftId": "${mapDraftId}",
560
+ "generation": "${mapGeneration}",
561
+ "widget": {
562
+ "id": "value-by-zone",
563
+ "kind": "chart",
564
+ "title": "Assessed value by zone",
565
+ "sourceId": "parcels",
566
+ "config": { "categoryField": "zone", "valueField": "assessed_value", "aggregate": "sum" }
567
+ }
568
+ },
569
+ "captures": [{ "variable": "mapGeneration", "pointers": ["/structuredContent/generation"] }]
570
+ },
571
+ {
572
+ "id": "add-map-control",
573
+ "title": "Add the layer-list control to the map",
574
+ "kind": "mcp",
575
+ "tool": "honua_studio_add_control",
576
+ "arguments": {
577
+ "draftId": "${mapDraftId}",
578
+ "generation": "${mapGeneration}",
579
+ "control": { "id": "layers", "kind": "layer-list", "title": "Layers", "sourceId": "parcels" }
580
+ },
581
+ "captures": [{ "variable": "mapGeneration", "pointers": ["/structuredContent/generation"] }]
582
+ },
583
+ {
584
+ "id": "validate-map-draft",
585
+ "title": "Validate the composed map draft",
586
+ "kind": "mcp",
587
+ "tool": "honua_studio_validate_draft",
588
+ "arguments": { "draftId": "${mapDraftId}" }
589
+ },
590
+ {
591
+ "id": "save-map-version",
592
+ "title": "Save the map as an immutable content version",
593
+ "kind": "mcp",
594
+ "tool": "honua_studio_save_version",
595
+ "arguments": {
596
+ "draftId": "${mapDraftId}",
597
+ "generation": "${mapGeneration}",
598
+ "changeNote": "2026.1 zero-to-map map"
599
+ },
600
+ "captures": [
601
+ { "variable": "savedMapItemId", "pointers": ["/structuredContent/itemId"], "equals": "${mapItemId}" },
602
+ { "variable": "mapVersionId", "pointers": ["/structuredContent/versionId"] },
603
+ { "variable": "mapVersionNumber", "pointers": ["/structuredContent/versionNumber"] },
604
+ { "variable": "mapContentHash", "pointers": ["/structuredContent/contentHash"] }
605
+ ]
606
+ },
607
+ {
608
+ "id": "get-map-version",
609
+ "title": "Read the exact immutable map version",
610
+ "kind": "mcp",
611
+ "tool": "honua_studio_get_version",
612
+ "arguments": { "itemId": "${mapItemId}", "versionId": "${mapVersionId}" },
613
+ "captures": [
614
+ { "variable": "loadedMapVersionId", "pointers": ["/structuredContent/versionId"], "equals": "${mapVersionId}" },
615
+ { "variable": "loadedMapContentHash", "pointers": ["/structuredContent/contentHash"], "equals": "${mapContentHash}" }
616
+ ]
617
+ },
618
+ {
619
+ "id": "reopen-map-version",
620
+ "title": "Reopen the immutable map version as a new draft",
621
+ "kind": "mcp",
622
+ "tool": "honua_studio_reopen_version",
623
+ "arguments": { "itemId": "${mapItemId}", "versionId": "${mapVersionId}" },
624
+ "captures": [
625
+ { "variable": "mapReopenedDraftId", "pointers": ["/structuredContent/draftId"] },
626
+ { "variable": "mapReopenedItemId", "pointers": ["/structuredContent/itemId"], "equals": "${mapItemId}" },
627
+ { "variable": "mapReopenedBaseVersionId", "pointers": ["/structuredContent/baseVersionId"], "equals": "${mapVersionId}" },
628
+ { "variable": "mapReopenedGeneration", "pointers": ["/structuredContent/generation"] }
629
+ ]
630
+ },
631
+ {
632
+ "id": "create-app-draft",
633
+ "title": "Create a distinct Studio app draft bound to the saved map",
634
+ "kind": "mcp",
635
+ "tool": "honua_studio_create_draft",
636
+ "arguments": {
637
+ "packageKey": "zero-to-map-app",
638
+ "family": "app",
639
+ "schemaVersion": "1.0",
640
+ "body": {
641
+ "appPackageId": "app-zero-to-map",
642
+ "targetSdk": "honua-sdk-js",
643
+ "format": "honua_app_package.v1",
644
+ "status": "Draft",
645
+ "generatedFiles": [],
646
+ "assetManifest": [],
647
+ "mapPackageId": "map-zero-to-map",
648
+ "sharePolicy": { "visibility": "private", "embed": false, "reviewed": false },
649
+ "boundArtifacts": [],
650
+ "createdAt": "2026-08-20T00:00:00Z"
651
+ }
652
+ },
653
+ "captures": [
654
+ { "variable": "appDraftId", "pointers": ["/structuredContent/draftId"] },
655
+ { "variable": "appItemId", "pointers": ["/structuredContent/itemId"] },
656
+ { "variable": "appGeneration", "pointers": ["/structuredContent/generation"] }
657
+ ]
658
+ },
659
+ {
660
+ "id": "add-app-parcels-layer",
661
+ "title": "Add the published parcels to the app map",
662
+ "kind": "mcp",
663
+ "tool": "honua_studio_add_layer",
664
+ "arguments": {
665
+ "draftId": "${appDraftId}",
666
+ "generation": "${appGeneration}",
667
+ "layer": {
668
+ "id": "parcels",
669
+ "sourceId": "honua://services/${serviceName}/layers/${parcelsLayerId}",
670
+ "type": "fill",
671
+ "title": "Parcels",
672
+ "visible": true
673
+ }
674
+ },
675
+ "captures": [{ "variable": "appGeneration", "pointers": ["/structuredContent/generation"] }]
676
+ },
677
+ {
678
+ "id": "add-app-buffer-layer",
679
+ "title": "Add the retained analysis artifact to the app",
680
+ "kind": "mcp",
681
+ "tool": "honua_studio_add_layer",
682
+ "arguments": {
683
+ "draftId": "${appDraftId}",
684
+ "generation": "${appGeneration}",
685
+ "layer": {
686
+ "id": "parcel-buffer",
687
+ "sourceId": "honua://artifacts/${bufferArtifactId}",
688
+ "type": "fill",
689
+ "title": "25 m parcel buffer",
690
+ "visible": true
691
+ }
692
+ },
693
+ "captures": [{ "variable": "appGeneration", "pointers": ["/structuredContent/generation"] }]
694
+ },
695
+ {
696
+ "id": "style-app-buffer-layer",
697
+ "title": "Apply the buffer style in the app",
698
+ "kind": "mcp",
699
+ "tool": "honua_studio_set_layer_style",
700
+ "arguments": {
701
+ "draftId": "${appDraftId}",
702
+ "generation": "${appGeneration}",
703
+ "layerId": "parcel-buffer",
704
+ "styleRef": "zero-to-map-buffer"
705
+ },
706
+ "captures": [{ "variable": "appGeneration", "pointers": ["/structuredContent/generation"] }]
707
+ },
708
+ {
709
+ "id": "set-app-view",
710
+ "title": "Set the app map view",
711
+ "kind": "mcp",
712
+ "tool": "honua_studio_set_view",
713
+ "arguments": {
714
+ "draftId": "${appDraftId}",
715
+ "generation": "${appGeneration}",
716
+ "view": { "bbox": [-157.862, 21.3064, -157.8595, 21.3083], "crs": "EPSG:4326" }
717
+ },
718
+ "captures": [{ "variable": "appGeneration", "pointers": ["/structuredContent/generation"] }]
719
+ },
720
+ {
721
+ "id": "add-app-chart",
722
+ "title": "Add the assessed-value chart",
723
+ "kind": "mcp",
724
+ "tool": "honua_studio_add_widget",
725
+ "arguments": {
726
+ "draftId": "${appDraftId}",
727
+ "generation": "${appGeneration}",
728
+ "widget": {
729
+ "id": "value-by-zone",
730
+ "kind": "chart",
731
+ "title": "Assessed value by zone",
732
+ "sourceId": "parcels",
733
+ "config": { "categoryField": "zone", "valueField": "assessed_value", "aggregate": "sum" }
734
+ }
735
+ },
736
+ "captures": [{ "variable": "appGeneration", "pointers": ["/structuredContent/generation"] }]
737
+ },
738
+ {
739
+ "id": "add-app-layer-control",
740
+ "title": "Add the layer-list control",
741
+ "kind": "mcp",
742
+ "tool": "honua_studio_add_control",
743
+ "arguments": {
744
+ "draftId": "${appDraftId}",
745
+ "generation": "${appGeneration}",
746
+ "control": { "id": "layers", "kind": "layer-list", "title": "Layers", "sourceId": "parcels" }
747
+ },
748
+ "captures": [{ "variable": "appGeneration", "pointers": ["/structuredContent/generation"] }]
749
+ },
750
+ {
751
+ "id": "bind-app-chart-interaction",
752
+ "title": "Bind chart selection to the parcel layer",
753
+ "kind": "mcp",
754
+ "tool": "honua_studio_bind_interaction",
755
+ "arguments": {
756
+ "draftId": "${appDraftId}",
757
+ "generation": "${appGeneration}",
758
+ "interaction": {
759
+ "id": "filter-parcels-by-zone",
760
+ "on": { "ref": "widget:value-by-zone", "event": "select" },
761
+ "do": { "ref": "layer:parcels", "verb": "filter", "args": { "where": "zone = '$event.value'" } }
762
+ }
763
+ },
764
+ "captures": [{ "variable": "appGeneration", "pointers": ["/structuredContent/generation"] }]
765
+ },
766
+ {
767
+ "id": "validate-app-draft",
768
+ "title": "Validate the composed app draft",
769
+ "kind": "mcp",
770
+ "tool": "honua_studio_validate_draft",
771
+ "arguments": { "draftId": "${appDraftId}" }
772
+ },
773
+ {
774
+ "id": "save-app-version",
775
+ "title": "Save the app as an immutable content version",
776
+ "kind": "mcp",
777
+ "tool": "honua_studio_save_version",
778
+ "arguments": {
779
+ "draftId": "${appDraftId}",
780
+ "generation": "${appGeneration}",
781
+ "changeNote": "2026.1 zero-to-map app"
782
+ },
783
+ "captures": [
784
+ { "variable": "savedAppItemId", "pointers": ["/structuredContent/itemId"], "equals": "${appItemId}" },
785
+ { "variable": "appVersionId", "pointers": ["/structuredContent/versionId"] },
786
+ { "variable": "appVersionNumber", "pointers": ["/structuredContent/versionNumber"] },
787
+ { "variable": "appContentHash", "pointers": ["/structuredContent/contentHash"] }
788
+ ]
789
+ },
790
+ {
791
+ "id": "get-app-version",
792
+ "title": "Read the exact immutable app version",
793
+ "kind": "mcp",
794
+ "tool": "honua_studio_get_version",
795
+ "arguments": { "itemId": "${appItemId}", "versionId": "${appVersionId}" },
796
+ "captures": [
797
+ { "variable": "loadedAppVersionId", "pointers": ["/structuredContent/versionId"], "equals": "${appVersionId}" },
798
+ { "variable": "loadedAppContentHash", "pointers": ["/structuredContent/contentHash"], "equals": "${appContentHash}" }
799
+ ]
800
+ },
801
+ {
802
+ "id": "reopen-app-version",
803
+ "title": "Reopen the immutable app version as a new draft",
804
+ "kind": "mcp",
805
+ "tool": "honua_studio_reopen_version",
806
+ "arguments": { "itemId": "${appItemId}", "versionId": "${appVersionId}" },
807
+ "captures": [
808
+ { "variable": "appReopenedDraftId", "pointers": ["/structuredContent/draftId"] },
809
+ { "variable": "appReopenedItemId", "pointers": ["/structuredContent/itemId"], "equals": "${appItemId}" },
810
+ { "variable": "appReopenedBaseVersionId", "pointers": ["/structuredContent/baseVersionId"], "equals": "${appVersionId}" },
811
+ { "variable": "appReopenedGeneration", "pointers": ["/structuredContent/generation"] }
812
+ ]
813
+ },
814
+ {
815
+ "id": "create-dashboard-draft",
816
+ "title": "Compose a distinct dashboard from the saved map and published service",
817
+ "kind": "mcp",
818
+ "tool": "honua_studio_create_draft",
819
+ "arguments": {
820
+ "packageKey": "zero-to-map-dashboard",
821
+ "family": "dashboard",
822
+ "schemaVersion": "1.0",
823
+ "body": {
824
+ "title": "Parcel assessment dashboard",
825
+ "map": { "itemId": "${mapItemId}", "versionId": "${mapVersionId}" }
826
+ }
827
+ },
828
+ "captures": [
829
+ { "variable": "dashboardDraftId", "pointers": ["/structuredContent/draftId"] },
830
+ { "variable": "dashboardItemId", "pointers": ["/structuredContent/itemId"] },
831
+ { "variable": "dashboardGeneration", "pointers": ["/structuredContent/generation"] }
832
+ ]
833
+ },
834
+ {
835
+ "id": "add-dashboard-buffer-layer",
836
+ "title": "Add the retained analysis artifact to the dashboard",
837
+ "kind": "mcp",
838
+ "tool": "honua_studio_add_layer",
839
+ "arguments": {
840
+ "draftId": "${dashboardDraftId}",
841
+ "generation": "${dashboardGeneration}",
842
+ "layer": {
843
+ "id": "parcel-buffer",
844
+ "sourceId": "honua://artifacts/${bufferArtifactId}",
845
+ "type": "fill",
846
+ "title": "25 m parcel buffer",
847
+ "visible": true
848
+ }
849
+ },
850
+ "captures": [{ "variable": "dashboardGeneration", "pointers": ["/structuredContent/generation"] }]
851
+ },
852
+ {
853
+ "id": "style-dashboard-buffer-layer",
854
+ "title": "Apply the buffer style in the dashboard",
855
+ "kind": "mcp",
856
+ "tool": "honua_studio_set_layer_style",
857
+ "arguments": {
858
+ "draftId": "${dashboardDraftId}",
859
+ "generation": "${dashboardGeneration}",
860
+ "layerId": "parcel-buffer",
861
+ "styleRef": "zero-to-map-buffer"
862
+ },
863
+ "captures": [{ "variable": "dashboardGeneration", "pointers": ["/structuredContent/generation"] }]
864
+ },
865
+ {
866
+ "id": "set-dashboard-view",
867
+ "title": "Set the dashboard map view",
868
+ "kind": "mcp",
869
+ "tool": "honua_studio_set_view",
870
+ "arguments": {
871
+ "draftId": "${dashboardDraftId}",
872
+ "generation": "${dashboardGeneration}",
873
+ "view": { "bbox": [-157.862, 21.3064, -157.8595, 21.3083], "crs": "EPSG:4326" }
874
+ },
875
+ "captures": [{ "variable": "dashboardGeneration", "pointers": ["/structuredContent/generation"] }]
876
+ },
877
+ {
878
+ "id": "add-dashboard-chart",
879
+ "title": "Add the assessed-value chart to the dashboard",
880
+ "kind": "mcp",
881
+ "tool": "honua_studio_add_widget",
882
+ "arguments": {
883
+ "draftId": "${dashboardDraftId}",
884
+ "generation": "${dashboardGeneration}",
885
+ "widget": {
886
+ "id": "value-by-zone",
887
+ "kind": "chart",
888
+ "title": "Assessed value by zone",
889
+ "sourceId": "parcels",
890
+ "config": { "categoryField": "zone", "valueField": "assessed_value", "aggregate": "sum" }
891
+ }
892
+ },
893
+ "captures": [{ "variable": "dashboardGeneration", "pointers": ["/structuredContent/generation"] }]
894
+ },
895
+ {
896
+ "id": "add-dashboard-layer-control",
897
+ "title": "Add the layer-list control to the dashboard",
898
+ "kind": "mcp",
899
+ "tool": "honua_studio_add_control",
900
+ "arguments": {
901
+ "draftId": "${dashboardDraftId}",
902
+ "generation": "${dashboardGeneration}",
903
+ "control": { "id": "layers", "kind": "layer-list", "title": "Layers", "sourceId": "parcels" }
904
+ },
905
+ "captures": [{ "variable": "dashboardGeneration", "pointers": ["/structuredContent/generation"] }]
906
+ },
907
+ {
908
+ "id": "validate-dashboard-draft",
909
+ "title": "Validate the composed dashboard envelope",
910
+ "kind": "mcp",
911
+ "tool": "honua_studio_validate_draft",
912
+ "arguments": { "draftId": "${dashboardDraftId}" }
913
+ },
914
+ {
915
+ "id": "save-dashboard-version",
916
+ "title": "Save the dashboard as an immutable content version",
917
+ "kind": "mcp",
918
+ "tool": "honua_studio_save_version",
919
+ "arguments": {
920
+ "draftId": "${dashboardDraftId}",
921
+ "generation": "${dashboardGeneration}",
922
+ "changeNote": "2026.1 zero-to-map dashboard"
923
+ },
924
+ "captures": [
925
+ { "variable": "savedDashboardItemId", "pointers": ["/structuredContent/itemId"], "equals": "${dashboardItemId}" },
926
+ { "variable": "dashboardVersionId", "pointers": ["/structuredContent/versionId"] },
927
+ { "variable": "dashboardVersionNumber", "pointers": ["/structuredContent/versionNumber"] },
928
+ { "variable": "dashboardContentHash", "pointers": ["/structuredContent/contentHash"] }
929
+ ]
930
+ },
931
+ {
932
+ "id": "get-dashboard-version",
933
+ "title": "Read the exact immutable dashboard version",
934
+ "kind": "mcp",
935
+ "tool": "honua_studio_get_version",
936
+ "arguments": { "itemId": "${dashboardItemId}", "versionId": "${dashboardVersionId}" },
937
+ "captures": [
938
+ { "variable": "loadedDashboardVersionId", "pointers": ["/structuredContent/versionId"], "equals": "${dashboardVersionId}" },
939
+ { "variable": "loadedDashboardContentHash", "pointers": ["/structuredContent/contentHash"], "equals": "${dashboardContentHash}" }
940
+ ]
941
+ },
942
+ {
943
+ "id": "reopen-dashboard-version",
944
+ "title": "Reopen the immutable dashboard version as a new draft",
945
+ "kind": "mcp",
946
+ "tool": "honua_studio_reopen_version",
947
+ "arguments": { "itemId": "${dashboardItemId}", "versionId": "${dashboardVersionId}" },
948
+ "captures": [
949
+ { "variable": "dashboardReopenedDraftId", "pointers": ["/structuredContent/draftId"] },
950
+ { "variable": "dashboardReopenedItemId", "pointers": ["/structuredContent/itemId"], "equals": "${dashboardItemId}" },
951
+ { "variable": "dashboardReopenedBaseVersionId", "pointers": ["/structuredContent/baseVersionId"], "equals": "${dashboardVersionId}" },
952
+ { "variable": "dashboardReopenedGeneration", "pointers": ["/structuredContent/generation"] }
953
+ ]
954
+ }
955
+ ]
956
+ },
957
+ {
958
+ "number": 5,
959
+ "id": "proposal",
960
+ "title": "Propose publication without bypassing human confirmation",
961
+ "actions": [
962
+ {
963
+ "id": "propose-map-publication",
964
+ "title": "Record the public map publication intent",
965
+ "kind": "mcp",
966
+ "tool": "honua_studio_propose_publication",
967
+ "arguments": {
968
+ "draftId": "${mapReopenedDraftId}",
969
+ "generation": "${mapReopenedGeneration}",
970
+ "route": "${mapRoute}",
971
+ "visibility": "public",
972
+ "embed": true,
973
+ "note": "2026.1 D9.3 zero-to-map map candidate"
974
+ },
975
+ "forbiddenPointers": [
976
+ "/structuredContent/publicationId",
977
+ "/structuredContent/publicUrl",
978
+ "/structuredContent/shareUrl"
979
+ ],
980
+ "captures": [
981
+ { "variable": "mapReopenedGeneration", "pointers": ["/structuredContent/draft/generation", "/structuredContent/generation"] },
982
+ { "variable": "mapProposalGeneration", "pointers": ["/structuredContent/draft/generation", "/structuredContent/generation"] },
983
+ { "variable": "mapPublicationIntentRecorded", "pointers": ["/structuredContent/recorded"], "equals": true },
984
+ { "variable": "mapHumanConfirmationRequired", "pointers": ["/structuredContent/humanConfirmationRequired"], "equals": true }
985
+ ]
986
+ },
987
+ {
988
+ "id": "save-map-publication-version",
989
+ "title": "Save the intent-bearing map as the governed publication version",
990
+ "kind": "mcp",
991
+ "tool": "honua_studio_save_version",
992
+ "arguments": {
993
+ "draftId": "${mapReopenedDraftId}",
994
+ "generation": "${mapProposalGeneration}",
995
+ "changeNote": "2026.1 zero-to-map map publication intent"
996
+ },
997
+ "captures": [
998
+ { "variable": "mapPublicationItemId", "pointers": ["/structuredContent/itemId"], "equals": "${mapItemId}" },
999
+ { "variable": "mapPublicationVersionId", "pointers": ["/structuredContent/versionId"] },
1000
+ { "variable": "mapPublicationContentHash", "pointers": ["/structuredContent/contentHash"] }
1001
+ ]
1002
+ },
1003
+ {
1004
+ "id": "propose-app-publication",
1005
+ "title": "Record the public app publication intent",
1006
+ "kind": "mcp",
1007
+ "tool": "honua_studio_propose_publication",
1008
+ "arguments": {
1009
+ "draftId": "${appReopenedDraftId}",
1010
+ "generation": "${appReopenedGeneration}",
1011
+ "route": "${route}",
1012
+ "visibility": "public",
1013
+ "embed": true,
1014
+ "note": "2026.1 D9.3 zero-to-map app candidate"
1015
+ },
1016
+ "forbiddenPointers": [
1017
+ "/structuredContent/publicationId",
1018
+ "/structuredContent/publicUrl",
1019
+ "/structuredContent/shareUrl"
1020
+ ],
1021
+ "captures": [
1022
+ { "variable": "appReopenedGeneration", "pointers": ["/structuredContent/draft/generation", "/structuredContent/generation"] },
1023
+ { "variable": "appProposalGeneration", "pointers": ["/structuredContent/draft/generation", "/structuredContent/generation"] },
1024
+ { "variable": "appPublicationIntentRecorded", "pointers": ["/structuredContent/recorded"], "equals": true },
1025
+ { "variable": "appHumanConfirmationRequired", "pointers": ["/structuredContent/humanConfirmationRequired"], "equals": true }
1026
+ ]
1027
+ },
1028
+ {
1029
+ "id": "save-app-publication-version",
1030
+ "title": "Save the intent-bearing app as the governed publication version",
1031
+ "kind": "mcp",
1032
+ "tool": "honua_studio_save_version",
1033
+ "arguments": {
1034
+ "draftId": "${appReopenedDraftId}",
1035
+ "generation": "${appProposalGeneration}",
1036
+ "changeNote": "2026.1 zero-to-map app publication intent"
1037
+ },
1038
+ "captures": [
1039
+ { "variable": "appPublicationItemId", "pointers": ["/structuredContent/itemId"], "equals": "${appItemId}" },
1040
+ { "variable": "appPublicationVersionId", "pointers": ["/structuredContent/versionId"] },
1041
+ { "variable": "appPublicationContentHash", "pointers": ["/structuredContent/contentHash"] }
1042
+ ]
1043
+ },
1044
+ {
1045
+ "id": "propose-dashboard-publication",
1046
+ "title": "Record the public dashboard publication intent",
1047
+ "kind": "mcp",
1048
+ "tool": "honua_studio_propose_publication",
1049
+ "arguments": {
1050
+ "draftId": "${dashboardReopenedDraftId}",
1051
+ "generation": "${dashboardReopenedGeneration}",
1052
+ "route": "${dashboardRoute}",
1053
+ "visibility": "public",
1054
+ "embed": true,
1055
+ "note": "2026.1 D9.3 zero-to-map dashboard candidate"
1056
+ },
1057
+ "forbiddenPointers": [
1058
+ "/structuredContent/publicationId",
1059
+ "/structuredContent/publicUrl",
1060
+ "/structuredContent/shareUrl"
1061
+ ],
1062
+ "captures": [
1063
+ { "variable": "dashboardReopenedGeneration", "pointers": ["/structuredContent/draft/generation", "/structuredContent/generation"] },
1064
+ { "variable": "dashboardProposalGeneration", "pointers": ["/structuredContent/draft/generation", "/structuredContent/generation"] },
1065
+ { "variable": "dashboardPublicationIntentRecorded", "pointers": ["/structuredContent/recorded"], "equals": true },
1066
+ { "variable": "dashboardHumanConfirmationRequired", "pointers": ["/structuredContent/humanConfirmationRequired"], "equals": true }
1067
+ ]
1068
+ },
1069
+ {
1070
+ "id": "save-dashboard-publication-version",
1071
+ "title": "Save the intent-bearing dashboard as the governed publication version",
1072
+ "kind": "mcp",
1073
+ "tool": "honua_studio_save_version",
1074
+ "arguments": {
1075
+ "draftId": "${dashboardReopenedDraftId}",
1076
+ "generation": "${dashboardProposalGeneration}",
1077
+ "changeNote": "2026.1 zero-to-map dashboard publication intent"
1078
+ },
1079
+ "captures": [
1080
+ { "variable": "dashboardPublicationItemId", "pointers": ["/structuredContent/itemId"], "equals": "${dashboardItemId}" },
1081
+ { "variable": "dashboardPublicationVersionId", "pointers": ["/structuredContent/versionId"] },
1082
+ { "variable": "dashboardPublicationContentHash", "pointers": ["/structuredContent/contentHash"] }
1083
+ ]
1084
+ }
1085
+ ]
1086
+ },
1087
+ {
1088
+ "number": 6,
1089
+ "id": "console",
1090
+ "title": "Inspect and approve the candidate in Console",
1091
+ "actions": [
1092
+ {
1093
+ "id": "console-approval",
1094
+ "title": "Import the Console health, release, audit, and recovery receipt",
1095
+ "kind": "receipt",
1096
+ "receiptSchema": "honua.zero-to-map.console-receipt/v1",
1097
+ "matches": {
1098
+ "/journeyId": "${journeyId}",
1099
+ "/releaseContract": "${releaseContract}",
1100
+ "/candidate/candidateId": "${candidateId}",
1101
+ "/candidate/releaseId": "${releaseId}",
1102
+ "/proposals/map/draftId": "${mapReopenedDraftId}",
1103
+ "/proposals/map/generation": "${mapProposalGeneration}",
1104
+ "/proposals/map/route": "${mapRoute}",
1105
+ "/proposals/app/draftId": "${appReopenedDraftId}",
1106
+ "/proposals/app/generation": "${appProposalGeneration}",
1107
+ "/proposals/app/route": "${route}",
1108
+ "/proposals/dashboard/draftId": "${dashboardReopenedDraftId}",
1109
+ "/proposals/dashboard/generation": "${dashboardProposalGeneration}",
1110
+ "/proposals/dashboard/route": "${dashboardRoute}",
1111
+ "/publications/map/itemId": "${mapItemId}",
1112
+ "/publications/map/versionId": "${mapPublicationVersionId}",
1113
+ "/publications/map/status": "published",
1114
+ "/publications/app/itemId": "${appItemId}",
1115
+ "/publications/app/versionId": "${appPublicationVersionId}",
1116
+ "/publications/app/status": "published",
1117
+ "/publications/dashboard/itemId": "${dashboardItemId}",
1118
+ "/publications/dashboard/versionId": "${dashboardPublicationVersionId}",
1119
+ "/publications/dashboard/status": "published",
1120
+ "/resources/connectionId": "${connectionId}",
1121
+ "/resources/serviceId": "${serviceName}",
1122
+ "/resources/layerIds/parcels": "${parcelsLayerId}",
1123
+ "/resources/layerIds/zoning": "${zoningLayerId}",
1124
+ "/resources/jobs/esriMcp": "${esriMcpJobId}",
1125
+ "/resources/jobs/gpServer": "${gpServerJobId}",
1126
+ "/resources/jobs/directAnalysis": "${directAnalysisJobId}",
1127
+ "/resources/gp/jobId": "${esriMcpJobId}",
1128
+ "/resources/gp/resultPackageId": "${esriMcpResultPackageId}",
1129
+ "/resources/gp/artifactId": "${esriMcpArtifactId}",
1130
+ "/resources/artifactId": "${bufferArtifactId}",
1131
+ "/resources/studio/map/draftId": "${mapDraftId}",
1132
+ "/resources/studio/map/itemId": "${mapItemId}",
1133
+ "/resources/studio/map/versionId": "${mapVersionId}",
1134
+ "/resources/studio/map/contentHash": "${mapContentHash}",
1135
+ "/resources/studio/map/reopenedDraftId": "${mapReopenedDraftId}",
1136
+ "/resources/studio/app/draftId": "${appDraftId}",
1137
+ "/resources/studio/app/itemId": "${appItemId}",
1138
+ "/resources/studio/app/versionId": "${appVersionId}",
1139
+ "/resources/studio/app/contentHash": "${appContentHash}",
1140
+ "/resources/studio/app/reopenedDraftId": "${appReopenedDraftId}",
1141
+ "/resources/studio/dashboard/draftId": "${dashboardDraftId}",
1142
+ "/resources/studio/dashboard/itemId": "${dashboardItemId}",
1143
+ "/resources/studio/dashboard/versionId": "${dashboardVersionId}",
1144
+ "/resources/studio/dashboard/contentHash": "${dashboardContentHash}",
1145
+ "/resources/studio/dashboard/reopenedDraftId": "${dashboardReopenedDraftId}",
1146
+ "/checks/health": "passed",
1147
+ "/checks/audit": "passed",
1148
+ "/checks/recovery": "passed"
1149
+ },
1150
+ "requiredPointers": [
1151
+ "/proposals/map/proposalId",
1152
+ "/proposals/map/executionOperationId",
1153
+ "/proposals/app/proposalId",
1154
+ "/proposals/app/executionOperationId",
1155
+ "/proposals/dashboard/proposalId",
1156
+ "/proposals/dashboard/executionOperationId",
1157
+ "/publications/map/requestId",
1158
+ "/publications/map/publicationId",
1159
+ "/publications/map/publicUrl",
1160
+ "/publications/app/requestId",
1161
+ "/publications/app/publicationId",
1162
+ "/publications/app/publicUrl",
1163
+ "/publications/dashboard/requestId",
1164
+ "/publications/dashboard/publicationId",
1165
+ "/publications/dashboard/publicUrl",
1166
+ "/audit/map/correlationId",
1167
+ "/audit/map/operationId",
1168
+ "/audit/app/correlationId",
1169
+ "/audit/app/operationId",
1170
+ "/audit/dashboard/correlationId",
1171
+ "/audit/dashboard/operationId",
1172
+ "/checks/health",
1173
+ "/checks/audit",
1174
+ "/checks/recovery",
1175
+ "/shareUrl"
1176
+ ],
1177
+ "equalPointers": [
1178
+ ["/proposals/map/proposalId", "/publications/map/requestId"],
1179
+ ["/proposals/map/executionOperationId", "/audit/map/operationId"],
1180
+ ["/proposals/map/draftId", "/resources/studio/map/reopenedDraftId"],
1181
+ ["/proposals/app/proposalId", "/publications/app/requestId"],
1182
+ ["/proposals/app/executionOperationId", "/audit/app/operationId"],
1183
+ ["/proposals/app/draftId", "/resources/studio/app/reopenedDraftId"],
1184
+ ["/proposals/dashboard/proposalId", "/publications/dashboard/requestId"],
1185
+ ["/proposals/dashboard/executionOperationId", "/audit/dashboard/operationId"],
1186
+ ["/proposals/dashboard/draftId", "/resources/studio/dashboard/reopenedDraftId"],
1187
+ ["/shareUrl", "/publications/app/publicUrl"],
1188
+ ["/resources/jobs/esriMcp", "/resources/gp/jobId"]
1189
+ ],
1190
+ "captures": [
1191
+ { "variable": "candidateId", "pointers": ["/candidate/candidateId"] },
1192
+ { "variable": "releaseId", "pointers": ["/candidate/releaseId"] },
1193
+ { "variable": "mapProposalId", "pointers": ["/proposals/map/proposalId"] },
1194
+ { "variable": "mapExecutionOperationId", "pointers": ["/proposals/map/executionOperationId"] },
1195
+ { "variable": "mapPublicationRequestId", "pointers": ["/publications/map/requestId"] },
1196
+ { "variable": "mapPublicationId", "pointers": ["/publications/map/publicationId"] },
1197
+ { "variable": "mapPublicationStatus", "pointers": ["/publications/map/status"], "equals": "published" },
1198
+ { "variable": "mapPublicUrl", "pointers": ["/publications/map/publicUrl"] },
1199
+ { "variable": "mapAuditCorrelationId", "pointers": ["/audit/map/correlationId"] },
1200
+ { "variable": "appProposalId", "pointers": ["/proposals/app/proposalId"] },
1201
+ { "variable": "appExecutionOperationId", "pointers": ["/proposals/app/executionOperationId"] },
1202
+ { "variable": "appPublicationRequestId", "pointers": ["/publications/app/requestId"] },
1203
+ { "variable": "appPublicationId", "pointers": ["/publications/app/publicationId"] },
1204
+ { "variable": "appPublicationStatus", "pointers": ["/publications/app/status"], "equals": "published" },
1205
+ { "variable": "appPublicUrl", "pointers": ["/publications/app/publicUrl"] },
1206
+ { "variable": "appAuditCorrelationId", "pointers": ["/audit/app/correlationId"] },
1207
+ { "variable": "dashboardProposalId", "pointers": ["/proposals/dashboard/proposalId"] },
1208
+ { "variable": "dashboardExecutionOperationId", "pointers": ["/proposals/dashboard/executionOperationId"] },
1209
+ { "variable": "dashboardPublicationRequestId", "pointers": ["/publications/dashboard/requestId"] },
1210
+ { "variable": "dashboardPublicationId", "pointers": ["/publications/dashboard/publicationId"] },
1211
+ { "variable": "dashboardPublicationStatus", "pointers": ["/publications/dashboard/status"], "equals": "published" },
1212
+ { "variable": "dashboardPublicUrl", "pointers": ["/publications/dashboard/publicUrl"] },
1213
+ { "variable": "dashboardAuditCorrelationId", "pointers": ["/audit/dashboard/correlationId"] },
1214
+ { "variable": "shareUrl", "pointers": ["/shareUrl"] }
1215
+ ]
1216
+ }
1217
+ ]
1218
+ },
1219
+ {
1220
+ "number": 7,
1221
+ "id": "artifact",
1222
+ "title": "Verify the stable map, app, and dashboard URLs",
1223
+ "actions": [
1224
+ {
1225
+ "id": "verify-map-public-url",
1226
+ "title": "Require an identity-bound HTTP 200 from the approved map URL",
1227
+ "kind": "http",
1228
+ "url": "${mapPublicUrl}",
1229
+ "expectedStatus": 200
1230
+ },
1231
+ {
1232
+ "id": "verify-share-url",
1233
+ "title": "Require an identity-bound HTTP 200 from the approved app share URL",
1234
+ "kind": "http",
1235
+ "url": "${shareUrl}",
1236
+ "expectedStatus": 200
1237
+ },
1238
+ {
1239
+ "id": "verify-dashboard-public-url",
1240
+ "title": "Require an identity-bound HTTP 200 from the approved dashboard URL",
1241
+ "kind": "http",
1242
+ "url": "${dashboardPublicUrl}",
1243
+ "expectedStatus": 200
1244
+ }
1245
+ ]
1246
+ }
1247
+ ]
1248
+ }