@honua/mcp-server 0.1.9-beta.0 → 0.1.11-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 (39) hide show
  1. package/certification/setup-parity.md +79 -0
  2. package/dist/src/certification/admin-parity.d.ts +7 -1
  3. package/dist/src/certification/admin-parity.d.ts.map +1 -1
  4. package/dist/src/certification/admin-parity.js +9 -2
  5. package/dist/src/certification/setup-parity.d.ts +86 -0
  6. package/dist/src/certification/setup-parity.d.ts.map +1 -0
  7. package/dist/src/certification/setup-parity.js +188 -0
  8. package/dist/src/eval/cli.js +2 -2
  9. package/dist/src/eval/corpus.d.ts.map +1 -1
  10. package/dist/src/eval/corpus.js +6 -5
  11. package/dist/src/eval/grade.d.ts.map +1 -1
  12. package/dist/src/eval/grade.js +25 -0
  13. package/dist/src/eval/report.d.ts +9 -0
  14. package/dist/src/eval/report.d.ts.map +1 -1
  15. package/dist/src/eval/report.js +15 -5
  16. package/dist/src/eval/runner.d.ts.map +1 -1
  17. package/dist/src/eval/runner.js +16 -1
  18. package/dist/src/eval/types.d.ts +37 -2
  19. package/dist/src/eval/types.d.ts.map +1 -1
  20. package/dist/src/eval/workflow-corpus.d.ts +9 -0
  21. package/dist/src/eval/workflow-corpus.d.ts.map +1 -0
  22. package/dist/src/eval/workflow-corpus.js +306 -0
  23. package/dist/src/proxy.d.ts.map +1 -1
  24. package/dist/src/proxy.js +7 -1
  25. package/dist/src/release/zero-to-map-checkpoint.d.ts.map +1 -1
  26. package/dist/src/release/zero-to-map-checkpoint.js +9 -1
  27. package/dist/src/release/zero-to-map-cli.d.ts +11 -1
  28. package/dist/src/release/zero-to-map-cli.d.ts.map +1 -1
  29. package/dist/src/release/zero-to-map-cli.js +52 -12
  30. package/dist/src/release/zero-to-map.d.ts +132 -59
  31. package/dist/src/release/zero-to-map.d.ts.map +1 -1
  32. package/dist/src/release/zero-to-map.js +459 -167
  33. package/package.json +7 -4
  34. package/release/zero-to-map/README.md +76 -79
  35. package/release/zero-to-map/configs/claude-code.mcp.json +1 -1
  36. package/release/zero-to-map/configs/claude-desktop.json +1 -1
  37. package/release/zero-to-map/configs/cursor.json +1 -1
  38. package/release/zero-to-map/journey.v1.json +965 -502
  39. package/release/zero-to-map/contracts/esri-gp-mcp.v1.json +0 -73
@@ -38,12 +38,41 @@
38
38
  "id": "install-local",
39
39
  "title": "Run the control-plane Docker installer",
40
40
  "kind": "cli",
41
- "args": ["admin", "install", "local", "--profile", "gp-dev", "--yes", "--directory", "${installDirectory}"],
41
+ "args": [
42
+ "admin",
43
+ "install",
44
+ "local",
45
+ "--profile",
46
+ "gp-dev",
47
+ "--yes",
48
+ "--directory",
49
+ "${installDirectory}"
50
+ ],
42
51
  "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"] }
52
+ {
53
+ "variable": "credentialId",
54
+ "pointers": [
55
+ "/accessCredential/id"
56
+ ]
57
+ },
58
+ {
59
+ "variable": "credentialRequestedGrants",
60
+ "pointers": [
61
+ "/accessCredential/requestedGrants"
62
+ ]
63
+ },
64
+ {
65
+ "variable": "credentialEffectiveGrants",
66
+ "pointers": [
67
+ "/accessCredential/effectiveGrants"
68
+ ]
69
+ },
70
+ {
71
+ "variable": "credentialReferenceDigest",
72
+ "pointers": [
73
+ "/accessCredential/referenceDigestSha256"
74
+ ]
75
+ }
47
76
  ],
48
77
  "forbiddenPointers": [
49
78
  "/accessCredential/material",
@@ -56,7 +85,13 @@
56
85
  "id": "install-status",
57
86
  "title": "Verify API, MCP, and Console readiness",
58
87
  "kind": "cli",
59
- "args": ["admin", "install", "status", "--directory", "${installDirectory}"]
88
+ "args": [
89
+ "admin",
90
+ "install",
91
+ "status",
92
+ "--directory",
93
+ "${installDirectory}"
94
+ ]
60
95
  }
61
96
  ]
62
97
  },
@@ -89,30 +124,48 @@
89
124
  "title": "Verify the provisioned credential identity and effective grants through MCP",
90
125
  "kind": "mcp",
91
126
  "tool": "honua_admin_api_key_effective_permissions",
92
- "arguments": { "id": "${credentialId}" },
127
+ "arguments": {
128
+ "id": "${credentialId}"
129
+ },
93
130
  "captures": [
94
131
  {
95
132
  "variable": "verifiedCredentialId",
96
- "pointers": ["/structuredContent/details/response"],
97
- "parsedPointers": ["/data/id"],
133
+ "pointers": [
134
+ "/structuredContent/details/response"
135
+ ],
136
+ "parsedPointers": [
137
+ "/data/id"
138
+ ],
98
139
  "equals": "${credentialId}"
99
140
  },
100
141
  {
101
142
  "variable": "verifiedCredentialStatus",
102
- "pointers": ["/structuredContent/details/response"],
103
- "parsedPointers": ["/data/status"],
143
+ "pointers": [
144
+ "/structuredContent/details/response"
145
+ ],
146
+ "parsedPointers": [
147
+ "/data/status"
148
+ ],
104
149
  "equals": "active"
105
150
  },
106
151
  {
107
152
  "variable": "verifiedCredentialCanAuthenticate",
108
- "pointers": ["/structuredContent/details/response"],
109
- "parsedPointers": ["/data/canAuthenticate"],
153
+ "pointers": [
154
+ "/structuredContent/details/response"
155
+ ],
156
+ "parsedPointers": [
157
+ "/data/canAuthenticate"
158
+ ],
110
159
  "equals": true
111
160
  },
112
161
  {
113
162
  "variable": "verifiedCredentialGrants",
114
- "pointers": ["/structuredContent/details/response"],
115
- "parsedPointers": ["/data/permissions"],
163
+ "pointers": [
164
+ "/structuredContent/details/response"
165
+ ],
166
+ "parsedPointers": [
167
+ "/data/permissions"
168
+ ],
116
169
  "equals": "${credentialEffectiveGrants}"
117
170
  }
118
171
  ],
@@ -126,26 +179,28 @@
126
179
  "id": "create-connection",
127
180
  "title": "Create the fixture PostGIS connection",
128
181
  "kind": "mcp",
129
- "tool": "honua_admin_connection_create",
182
+ "tool": "honua_admin_connections_create",
130
183
  "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
- }
184
+ "name": "zero-to-map",
185
+ "description": "Deterministic 2026.1 release journey fixtures",
186
+ "host": "${dbHost}",
187
+ "port": "${dbPort}",
188
+ "databaseName": "${dbName}",
189
+ "username": "${dbUser}",
190
+ "secretReference": "${dbSecretReference}",
191
+ "secretType": "${dbSecretType}",
192
+ "sslRequired": false,
193
+ "sslMode": "Disable"
143
194
  },
144
195
  "captures": [
145
196
  {
146
197
  "variable": "connectionId",
147
- "pointers": ["/structuredContent/details/response"],
148
- "parsedPointers": ["/data/connectionId"]
198
+ "pointers": [
199
+ "/structuredContent/details/response"
200
+ ],
201
+ "parsedPointers": [
202
+ "/data/connectionId"
203
+ ]
149
204
  }
150
205
  ]
151
206
  },
@@ -153,8 +208,10 @@
153
208
  "id": "test-connection",
154
209
  "title": "Test the saved connection",
155
210
  "kind": "mcp",
156
- "tool": "honua_admin_connection_test",
157
- "arguments": { "id": "${connectionId}" }
211
+ "tool": "honua_admin_connections_test",
212
+ "arguments": {
213
+ "id": "${connectionId}"
214
+ }
158
215
  },
159
216
  {
160
217
  "id": "import-parcels",
@@ -162,15 +219,13 @@
162
219
  "kind": "mcp",
163
220
  "tool": "honua_admin_import_upload_url",
164
221
  "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
- }
222
+ "sourceUrl": "${fixtureBaseUrl}/parcels.geojson",
223
+ "fileName": "parcels.geojson",
224
+ "tableName": "${parcelsTable}",
225
+ "targetSchema": "public",
226
+ "sourceSrid": 4326,
227
+ "targetSrid": 4326,
228
+ "overwriteExisting": true
174
229
  }
175
230
  },
176
231
  {
@@ -179,15 +234,13 @@
179
234
  "kind": "mcp",
180
235
  "tool": "honua_admin_import_upload_url",
181
236
  "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
- }
237
+ "sourceUrl": "${fixtureBaseUrl}/zoning.geojson",
238
+ "fileName": "zoning.geojson",
239
+ "tableName": "${zoningTable}",
240
+ "targetSchema": "public",
241
+ "sourceSrid": 4326,
242
+ "targetSrid": 4326,
243
+ "overwriteExisting": true
191
244
  }
192
245
  },
193
246
  {
@@ -196,24 +249,26 @@
196
249
  "kind": "mcp",
197
250
  "tool": "honua_admin_layer_publish",
198
251
  "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
- }
252
+ "connectionId": "${connectionId}",
253
+ "schema": "public",
254
+ "table": "${parcelsTable}",
255
+ "layerName": "Parcels",
256
+ "serviceName": "${serviceName}",
257
+ "geometryColumn": "geometry",
258
+ "geometryType": "Polygon",
259
+ "srid": 4326,
260
+ "primaryKey": "parcel_id",
261
+ "enabled": true
211
262
  },
212
263
  "captures": [
213
264
  {
214
265
  "variable": "parcelsLayerId",
215
- "pointers": ["/structuredContent/details/response"],
216
- "parsedPointers": ["/data/layerId"]
266
+ "pointers": [
267
+ "/structuredContent/details/response"
268
+ ],
269
+ "parsedPointers": [
270
+ "/data/layerId"
271
+ ]
217
272
  }
218
273
  ]
219
274
  },
@@ -223,24 +278,26 @@
223
278
  "kind": "mcp",
224
279
  "tool": "honua_admin_layer_publish",
225
280
  "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
- }
281
+ "connectionId": "${connectionId}",
282
+ "schema": "public",
283
+ "table": "${zoningTable}",
284
+ "layerName": "Zoning",
285
+ "serviceName": "${serviceName}",
286
+ "geometryColumn": "geometry",
287
+ "geometryType": "Polygon",
288
+ "srid": 4326,
289
+ "primaryKey": "zone",
290
+ "enabled": true
238
291
  },
239
292
  "captures": [
240
293
  {
241
294
  "variable": "zoningLayerId",
242
- "pointers": ["/structuredContent/details/response"],
243
- "parsedPointers": ["/data/layerId"]
295
+ "pointers": [
296
+ "/structuredContent/details/response"
297
+ ],
298
+ "parsedPointers": [
299
+ "/data/layerId"
300
+ ]
244
301
  }
245
302
  ]
246
303
  },
@@ -248,203 +305,315 @@
248
305
  "id": "set-public-access",
249
306
  "title": "Allow anonymous read access to the journey service",
250
307
  "kind": "mcp",
251
- "tool": "honua_admin_service_set_access_policy",
308
+ "tool": "honua_admin_services_access_policy_set",
252
309
  "arguments": {
253
310
  "serviceName": "${serviceName}",
254
- "body": { "allowAnonymous": true, "allowAnonymousWrite": false }
311
+ "allowAnonymous": true,
312
+ "allowAnonymousWrite": false
255
313
  }
256
314
  }
257
315
  ]
258
316
  },
259
317
  {
260
318
  "number": 3,
261
- "id": "geoprocessing",
262
- "title": "Execute Buffer through AI-facing Esri MCP, GPServer compatibility, and direct analysis",
319
+ "id": "style",
320
+ "title": "Apply a canonical style to the published layer and prove it reaches rendered pixels",
263
321
  "actions": [
264
322
  {
265
- "id": "list-esri-gp-tasks",
266
- "title": "Discover the Esri-compatible GP task catalog through MCP",
323
+ "id": "read-published-style",
324
+ "title": "Read the published parcel layer's primary style before any preset is applied",
267
325
  "kind": "mcp",
268
- "tool": "honua_esri_gp_list_tasks",
269
- "arguments": {},
326
+ "tool": "honua_get_style",
327
+ "arguments": {
328
+ "serviceId": "${serviceName}",
329
+ "layerId": "${parcelsLayerId}",
330
+ "includeStylesheet": true
331
+ },
270
332
  "captures": [
271
- { "variable": "esriGpTasks", "pointers": ["/structuredContent/tasks"] }
333
+ {
334
+ "variable": "baselineStyleVersion",
335
+ "pointers": [
336
+ "/structuredContent/styleVersion"
337
+ ]
338
+ }
272
339
  ]
273
340
  },
274
341
  {
275
- "id": "describe-esri-buffer",
276
- "title": "Resolve the Esri Buffer alias to the canonical process",
342
+ "id": "list-style-presets",
343
+ "title": "Discover the catalog style presets the candidate publishes",
277
344
  "kind": "mcp",
278
- "tool": "honua_esri_gp_describe_task",
279
- "arguments": { "taskName": "Buffer" },
345
+ "tool": "honua_get_style",
346
+ "arguments": {},
280
347
  "captures": [
281
- { "variable": "esriGpTaskName", "pointers": ["/structuredContent/taskName"], "equals": "Buffer" },
282
- { "variable": "esriGpProcessId", "pointers": ["/structuredContent/processId"], "equals": "geometry.buffer" }
348
+ {
349
+ "variable": "discoveredStylePresetId",
350
+ "pointers": [
351
+ "/structuredContent/styles/0/styleId"
352
+ ]
353
+ }
283
354
  ]
284
355
  },
285
356
  {
286
- "id": "buffer-esri-mcp",
287
- "title": "Execute the AI-selected Esri Buffer task through MCP",
357
+ "id": "apply-canonical-style",
358
+ "title": "Apply the canonical preset as the published layer's primary style",
288
359
  "kind": "mcp",
289
- "tool": "honua_esri_gp_execute_task",
360
+ "tool": "honua_apply_style_preset",
290
361
  "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"
362
+ "serviceId": "${serviceName}",
363
+ "layerId": "${parcelsLayerId}",
364
+ "styleId": "${discoveredStylePresetId}"
317
365
  },
318
366
  "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" }
367
+ {
368
+ "variable": "appliedStyleId",
369
+ "pointers": [
370
+ "/structuredContent/styleId"
371
+ ],
372
+ "equals": "${discoveredStylePresetId}"
373
+ },
374
+ {
375
+ "variable": "styleApplied",
376
+ "pointers": [
377
+ "/structuredContent/applied"
378
+ ],
379
+ "equals": true
380
+ },
381
+ {
382
+ "variable": "appliedStyleVersion",
383
+ "pointers": [
384
+ "/structuredContent/styleVersion"
385
+ ]
386
+ }
323
387
  ]
324
388
  },
325
389
  {
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
390
+ "id": "confirm-published-style",
391
+ "title": "Re-read the published layer and confirm the preset is now its primary style",
392
+ "kind": "mcp",
393
+ "tool": "honua_get_style",
394
+ "arguments": {
395
+ "serviceId": "${serviceName}",
396
+ "layerId": "${parcelsLayerId}"
336
397
  },
337
398
  "captures": [
338
399
  {
339
- "variable": "esriMcpResultsUri",
340
- "pointers": ["/contents/0/text"],
341
- "parsedPointers": ["/resultsUri"]
400
+ "variable": "confirmedStyleId",
401
+ "pointers": [
402
+ "/structuredContent/styleId"
403
+ ],
404
+ "equals": "${discoveredStylePresetId}"
405
+ },
406
+ {
407
+ "variable": "confirmedStyleVersion",
408
+ "pointers": [
409
+ "/structuredContent/styleVersion"
410
+ ],
411
+ "equals": "${appliedStyleVersion}"
342
412
  }
343
413
  ]
344
414
  },
345
415
  {
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}",
416
+ "id": "render-published-map",
417
+ "title": "Render the published, canonically styled layer to a PNG artifact at the fixture extent",
418
+ "kind": "mcp",
419
+ "tool": "honua_render_map",
420
+ "arguments": {
421
+ "layers": [
422
+ {
423
+ "serviceId": "${serviceName}",
424
+ "layerId": "${parcelsLayerId}"
425
+ }
426
+ ],
427
+ "bbox": [
428
+ -157.862,
429
+ 21.3064,
430
+ -157.8595,
431
+ 21.3083
432
+ ],
433
+ "bboxSrid": 4326,
434
+ "width": 512,
435
+ "height": 512
436
+ },
350
437
  "captures": [
351
438
  {
352
- "variable": "esriMcpResultJobId",
353
- "pointers": ["/contents/0/text"],
354
- "parsedPointers": ["/jobId"],
355
- "equals": "${esriMcpJobId}"
439
+ "variable": "renderedStyleId",
440
+ "pointers": [
441
+ "/structuredContent/layers/0/styleId"
442
+ ],
443
+ "equals": "${discoveredStylePresetId}"
444
+ },
445
+ {
446
+ "variable": "renderWidth",
447
+ "pointers": [
448
+ "/structuredContent/image/width"
449
+ ],
450
+ "equals": 512
356
451
  },
357
452
  {
358
- "variable": "esriMcpResultPackageId",
359
- "pointers": ["/contents/0/text"],
360
- "parsedPointers": ["/resultPackageId"]
453
+ "variable": "renderHeight",
454
+ "pointers": [
455
+ "/structuredContent/image/height"
456
+ ],
457
+ "equals": 512
361
458
  },
362
459
  {
363
- "variable": "esriMcpArtifactId",
364
- "pointers": ["/contents/0/text"],
365
- "parsedPointers": ["/artifacts/0/artifactId"]
460
+ "variable": "renderImageUri",
461
+ "pointers": [
462
+ "/structuredContent/image/uri"
463
+ ]
366
464
  }
367
465
  ]
368
466
  },
369
467
  {
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
- ]
468
+ "id": "read-rendered-map",
469
+ "title": "Fetch the rendered artifact and validate it is a non-empty PNG of the reported size",
470
+ "kind": "mcp-image",
471
+ "uri": "${renderImageUri}",
472
+ "expectedMediaType": "image/png",
473
+ "expectedWidth": "${renderWidth}",
474
+ "expectedHeight": "${renderHeight}",
475
+ "minByteLength": 1024
476
+ }
477
+ ]
478
+ },
479
+ {
480
+ "number": 4,
481
+ "id": "geoprocessing",
482
+ "title": "Buffer the published parcels, then prove geometry.buffer on GPServer",
483
+ "actions": [
484
+ {
485
+ "id": "validate-buffer-plan",
486
+ "title": "Validate analytics.buffer-aggregate against the published parcel layer",
487
+ "kind": "mcp",
488
+ "tool": "honua_validate_plan",
489
+ "arguments": {
490
+ "plan": {
491
+ "planId": "2026.1-zero-to-map-buffer",
492
+ "steps": [
493
+ {
494
+ "stepId": "buffer-parcels",
495
+ "kind": "Geoprocess",
496
+ "processId": "analytics.buffer-aggregate",
497
+ "inputs": {
498
+ "layerId": "${parcelsLayerId}",
499
+ "distance": "25",
500
+ "unit": "meters"
501
+ }
502
+ }
503
+ ],
504
+ "outputs": [
505
+ "FeatureLayer"
506
+ ]
507
+ }
508
+ }
385
509
  },
386
510
  {
387
- "id": "buffer-parcels",
388
- "title": "Run the MCP direct verb and retain its artifact for Studio",
511
+ "id": "execute-buffer-plan",
512
+ "title": "Execute the validated buffer plan",
389
513
  "kind": "mcp",
390
- "tool": "honua_buffer_features",
514
+ "tool": "honua_execute_plan",
391
515
  "arguments": {
392
- "source": { "serviceId": "${serviceName}", "layerId": "${parcelsLayerId}" },
393
- "distance": 25,
394
- "unit": "meters",
395
- "dissolve": false,
396
- "outSrid": 4326
516
+ "plan": {
517
+ "planId": "2026.1-zero-to-map-buffer",
518
+ "steps": [
519
+ {
520
+ "stepId": "buffer-parcels",
521
+ "kind": "Geoprocess",
522
+ "processId": "analytics.buffer-aggregate",
523
+ "inputs": {
524
+ "layerId": "${parcelsLayerId}",
525
+ "distance": "25",
526
+ "unit": "meters"
527
+ }
528
+ }
529
+ ],
530
+ "outputs": [
531
+ "FeatureLayer"
532
+ ]
533
+ },
534
+ "idempotencyKey": "2026.1-zero-to-map-buffer"
397
535
  },
398
536
  "captures": [
399
537
  {
400
- "variable": "directAnalysisJobId",
401
- "pointers": ["/structuredContent/jobId"]
538
+ "variable": "bufferJobId",
539
+ "pointers": [
540
+ "/structuredContent/jobId"
541
+ ]
402
542
  }
403
543
  ]
404
544
  },
405
545
  {
406
- "id": "wait-direct-buffer",
407
- "title": "Poll the direct analysis job to terminal success",
546
+ "id": "wait-buffer-job",
547
+ "title": "Poll the buffer job to terminal success",
408
548
  "kind": "mcp-resource",
409
- "uri": "honua://jobs/${directAnalysisJobId}",
549
+ "uri": "honua://jobs/${bufferJobId}",
410
550
  "waitFor": {
411
551
  "pointer": "/status",
412
552
  "equals": "Succeeded",
413
- "terminal": ["Succeeded", "Failed", "Cancelled"],
553
+ "terminal": [
554
+ "Succeeded",
555
+ "Failed",
556
+ "Cancelled"
557
+ ],
414
558
  "pollIntervalMs": 500,
415
559
  "deadlineMs": 120000
416
- },
417
- "captures": [
418
- {
419
- "variable": "directAnalysisResultsUri",
420
- "pointers": ["/contents/0/text"],
421
- "parsedPointers": ["/resultsUri"]
422
- }
423
- ]
560
+ }
424
561
  },
425
562
  {
426
- "id": "read-direct-buffer-results",
427
- "title": "Retain the direct analysis artifact for Studio",
563
+ "id": "read-buffer-results",
564
+ "title": "Read the buffer artifact for Studio",
428
565
  "kind": "mcp-resource",
429
- "uri": "${directAnalysisResultsUri}",
566
+ "uri": "honua://jobs/${bufferJobId}/results",
430
567
  "captures": [
431
568
  {
432
- "variable": "directAnalysisResultJobId",
433
- "pointers": ["/contents/0/text"],
434
- "parsedPointers": ["/jobId"],
435
- "equals": "${directAnalysisJobId}"
569
+ "variable": "bufferResultJobId",
570
+ "pointers": [
571
+ "/contents/0/text"
572
+ ],
573
+ "parsedPointers": [
574
+ "/jobId"
575
+ ],
576
+ "equals": "${bufferJobId}"
436
577
  },
437
578
  {
438
579
  "variable": "bufferArtifactId",
439
- "pointers": ["/contents/0/text"],
440
- "parsedPointers": ["/artifacts/0/artifactId"]
580
+ "pointers": [
581
+ "/contents/0/text"
582
+ ],
583
+ "parsedPointers": [
584
+ "/artifacts/0/artifactId"
585
+ ]
586
+ }
587
+ ]
588
+ },
589
+ {
590
+ "id": "buffer-esri-gpserver",
591
+ "title": "Prove geometry.buffer through the SDK GPServer runner",
592
+ "kind": "gpserver",
593
+ "serviceId": "geoprocessing",
594
+ "taskName": "Buffer",
595
+ "processId": "geometry.buffer",
596
+ "parameters": {
597
+ "wkb": "AQEAAABQ/Bhz15pewNDVVuwv40JA",
598
+ "srid": 4326,
599
+ "distance": 0.00025
600
+ },
601
+ "resultNames": [
602
+ "outputFeatureLayer"
603
+ ],
604
+ "captures": [
605
+ {
606
+ "variable": "gpServerJobId",
607
+ "pointers": [
608
+ "/jobId"
609
+ ]
441
610
  }
442
611
  ]
443
612
  }
444
613
  ]
445
614
  },
446
615
  {
447
- "number": 4,
616
+ "number": 5,
448
617
  "id": "studio",
449
618
  "title": "Compose, validate, save, read, and reopen distinct map, app, and dashboard families",
450
619
  "actions": [
@@ -471,9 +640,24 @@
471
640
  }
472
641
  },
473
642
  "captures": [
474
- { "variable": "mapDraftId", "pointers": ["/structuredContent/draftId"] },
475
- { "variable": "mapItemId", "pointers": ["/structuredContent/itemId"] },
476
- { "variable": "mapGeneration", "pointers": ["/structuredContent/generation"] }
643
+ {
644
+ "variable": "mapDraftId",
645
+ "pointers": [
646
+ "/structuredContent/draftId"
647
+ ]
648
+ },
649
+ {
650
+ "variable": "mapItemId",
651
+ "pointers": [
652
+ "/structuredContent/itemId"
653
+ ]
654
+ },
655
+ {
656
+ "variable": "mapGeneration",
657
+ "pointers": [
658
+ "/structuredContent/generation"
659
+ ]
660
+ }
477
661
  ]
478
662
  },
479
663
  {
@@ -492,7 +676,14 @@
492
676
  "visible": true
493
677
  }
494
678
  },
495
- "captures": [{ "variable": "mapGeneration", "pointers": ["/structuredContent/generation"] }]
679
+ "captures": [
680
+ {
681
+ "variable": "mapGeneration",
682
+ "pointers": [
683
+ "/structuredContent/generation"
684
+ ]
685
+ }
686
+ ]
496
687
  },
497
688
  {
498
689
  "id": "add-map-buffer-layer",
@@ -510,7 +701,14 @@
510
701
  "visible": true
511
702
  }
512
703
  },
513
- "captures": [{ "variable": "mapGeneration", "pointers": ["/structuredContent/generation"] }]
704
+ "captures": [
705
+ {
706
+ "variable": "mapGeneration",
707
+ "pointers": [
708
+ "/structuredContent/generation"
709
+ ]
710
+ }
711
+ ]
514
712
  },
515
713
  {
516
714
  "id": "style-map-buffer-layer",
@@ -523,7 +721,14 @@
523
721
  "layerId": "parcel-buffer",
524
722
  "styleRef": "zero-to-map-buffer"
525
723
  },
526
- "captures": [{ "variable": "mapGeneration", "pointers": ["/structuredContent/generation"] }]
724
+ "captures": [
725
+ {
726
+ "variable": "mapGeneration",
727
+ "pointers": [
728
+ "/structuredContent/generation"
729
+ ]
730
+ }
731
+ ]
527
732
  },
528
733
  {
529
734
  "id": "set-map-buffer-visibility",
@@ -536,7 +741,14 @@
536
741
  "layerId": "parcel-buffer",
537
742
  "visible": true
538
743
  },
539
- "captures": [{ "variable": "mapGeneration", "pointers": ["/structuredContent/generation"] }]
744
+ "captures": [
745
+ {
746
+ "variable": "mapGeneration",
747
+ "pointers": [
748
+ "/structuredContent/generation"
749
+ ]
750
+ }
751
+ ]
540
752
  },
541
753
  {
542
754
  "id": "set-map-view",
@@ -546,9 +758,24 @@
546
758
  "arguments": {
547
759
  "draftId": "${mapDraftId}",
548
760
  "generation": "${mapGeneration}",
549
- "view": { "bbox": [-157.862, 21.3064, -157.8595, 21.3083], "crs": "EPSG:4326" }
761
+ "view": {
762
+ "bbox": [
763
+ -157.862,
764
+ 21.3064,
765
+ -157.8595,
766
+ 21.3083
767
+ ],
768
+ "crs": "EPSG:4326"
769
+ }
550
770
  },
551
- "captures": [{ "variable": "mapGeneration", "pointers": ["/structuredContent/generation"] }]
771
+ "captures": [
772
+ {
773
+ "variable": "mapGeneration",
774
+ "pointers": [
775
+ "/structuredContent/generation"
776
+ ]
777
+ }
778
+ ]
552
779
  },
553
780
  {
554
781
  "id": "add-map-widget",
@@ -563,10 +790,21 @@
563
790
  "kind": "chart",
564
791
  "title": "Assessed value by zone",
565
792
  "sourceId": "parcels",
566
- "config": { "categoryField": "zone", "valueField": "assessed_value", "aggregate": "sum" }
793
+ "config": {
794
+ "categoryField": "zone",
795
+ "valueField": "assessed_value",
796
+ "aggregate": "sum"
797
+ }
567
798
  }
568
799
  },
569
- "captures": [{ "variable": "mapGeneration", "pointers": ["/structuredContent/generation"] }]
800
+ "captures": [
801
+ {
802
+ "variable": "mapGeneration",
803
+ "pointers": [
804
+ "/structuredContent/generation"
805
+ ]
806
+ }
807
+ ]
570
808
  },
571
809
  {
572
810
  "id": "add-map-control",
@@ -576,16 +814,30 @@
576
814
  "arguments": {
577
815
  "draftId": "${mapDraftId}",
578
816
  "generation": "${mapGeneration}",
579
- "control": { "id": "layers", "kind": "layer-list", "title": "Layers", "sourceId": "parcels" }
817
+ "control": {
818
+ "id": "layers",
819
+ "kind": "layer-list",
820
+ "title": "Layers",
821
+ "sourceId": "parcels"
822
+ }
580
823
  },
581
- "captures": [{ "variable": "mapGeneration", "pointers": ["/structuredContent/generation"] }]
824
+ "captures": [
825
+ {
826
+ "variable": "mapGeneration",
827
+ "pointers": [
828
+ "/structuredContent/generation"
829
+ ]
830
+ }
831
+ ]
582
832
  },
583
833
  {
584
834
  "id": "validate-map-draft",
585
835
  "title": "Validate the composed map draft",
586
836
  "kind": "mcp",
587
837
  "tool": "honua_studio_validate_draft",
588
- "arguments": { "draftId": "${mapDraftId}" }
838
+ "arguments": {
839
+ "draftId": "${mapDraftId}"
840
+ }
589
841
  },
590
842
  {
591
843
  "id": "save-map-version",
@@ -598,10 +850,31 @@
598
850
  "changeNote": "2026.1 zero-to-map map"
599
851
  },
600
852
  "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"] }
853
+ {
854
+ "variable": "savedMapItemId",
855
+ "pointers": [
856
+ "/structuredContent/version/itemId"
857
+ ],
858
+ "equals": "${mapItemId}"
859
+ },
860
+ {
861
+ "variable": "mapVersionId",
862
+ "pointers": [
863
+ "/structuredContent/version/versionId"
864
+ ]
865
+ },
866
+ {
867
+ "variable": "mapVersionNumber",
868
+ "pointers": [
869
+ "/structuredContent/version/versionNumber"
870
+ ]
871
+ },
872
+ {
873
+ "variable": "mapContentHash",
874
+ "pointers": [
875
+ "/structuredContent/version/contentHash"
876
+ ]
877
+ }
605
878
  ]
606
879
  },
607
880
  {
@@ -609,10 +882,25 @@
609
882
  "title": "Read the exact immutable map version",
610
883
  "kind": "mcp",
611
884
  "tool": "honua_studio_get_version",
612
- "arguments": { "itemId": "${mapItemId}", "versionId": "${mapVersionId}" },
885
+ "arguments": {
886
+ "itemId": "${mapItemId}",
887
+ "versionId": "${mapVersionId}"
888
+ },
613
889
  "captures": [
614
- { "variable": "loadedMapVersionId", "pointers": ["/structuredContent/versionId"], "equals": "${mapVersionId}" },
615
- { "variable": "loadedMapContentHash", "pointers": ["/structuredContent/contentHash"], "equals": "${mapContentHash}" }
890
+ {
891
+ "variable": "loadedMapVersionId",
892
+ "pointers": [
893
+ "/structuredContent/versionId"
894
+ ],
895
+ "equals": "${mapVersionId}"
896
+ },
897
+ {
898
+ "variable": "loadedMapContentHash",
899
+ "pointers": [
900
+ "/structuredContent/contentHash"
901
+ ],
902
+ "equals": "${mapContentHash}"
903
+ }
616
904
  ]
617
905
  },
618
906
  {
@@ -620,12 +908,37 @@
620
908
  "title": "Reopen the immutable map version as a new draft",
621
909
  "kind": "mcp",
622
910
  "tool": "honua_studio_reopen_version",
623
- "arguments": { "itemId": "${mapItemId}", "versionId": "${mapVersionId}" },
911
+ "arguments": {
912
+ "itemId": "${mapItemId}",
913
+ "versionId": "${mapVersionId}"
914
+ },
624
915
  "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"] }
916
+ {
917
+ "variable": "mapReopenedDraftId",
918
+ "pointers": [
919
+ "/structuredContent/draftId"
920
+ ]
921
+ },
922
+ {
923
+ "variable": "mapReopenedItemId",
924
+ "pointers": [
925
+ "/structuredContent/itemId"
926
+ ],
927
+ "equals": "${mapItemId}"
928
+ },
929
+ {
930
+ "variable": "mapReopenedBaseVersionId",
931
+ "pointers": [
932
+ "/structuredContent/baseVersionId"
933
+ ],
934
+ "equals": "${mapVersionId}"
935
+ },
936
+ {
937
+ "variable": "mapReopenedGeneration",
938
+ "pointers": [
939
+ "/structuredContent/generation"
940
+ ]
941
+ }
629
942
  ]
630
943
  },
631
944
  {
@@ -645,15 +958,34 @@
645
958
  "generatedFiles": [],
646
959
  "assetManifest": [],
647
960
  "mapPackageId": "map-zero-to-map",
648
- "sharePolicy": { "visibility": "private", "embed": false, "reviewed": false },
961
+ "sharePolicy": {
962
+ "visibility": "private",
963
+ "embed": false,
964
+ "reviewed": false
965
+ },
649
966
  "boundArtifacts": [],
650
967
  "createdAt": "2026-08-20T00:00:00Z"
651
968
  }
652
969
  },
653
970
  "captures": [
654
- { "variable": "appDraftId", "pointers": ["/structuredContent/draftId"] },
655
- { "variable": "appItemId", "pointers": ["/structuredContent/itemId"] },
656
- { "variable": "appGeneration", "pointers": ["/structuredContent/generation"] }
971
+ {
972
+ "variable": "appDraftId",
973
+ "pointers": [
974
+ "/structuredContent/draftId"
975
+ ]
976
+ },
977
+ {
978
+ "variable": "appItemId",
979
+ "pointers": [
980
+ "/structuredContent/itemId"
981
+ ]
982
+ },
983
+ {
984
+ "variable": "appGeneration",
985
+ "pointers": [
986
+ "/structuredContent/generation"
987
+ ]
988
+ }
657
989
  ]
658
990
  },
659
991
  {
@@ -672,7 +1004,14 @@
672
1004
  "visible": true
673
1005
  }
674
1006
  },
675
- "captures": [{ "variable": "appGeneration", "pointers": ["/structuredContent/generation"] }]
1007
+ "captures": [
1008
+ {
1009
+ "variable": "appGeneration",
1010
+ "pointers": [
1011
+ "/structuredContent/generation"
1012
+ ]
1013
+ }
1014
+ ]
676
1015
  },
677
1016
  {
678
1017
  "id": "add-app-buffer-layer",
@@ -690,7 +1029,14 @@
690
1029
  "visible": true
691
1030
  }
692
1031
  },
693
- "captures": [{ "variable": "appGeneration", "pointers": ["/structuredContent/generation"] }]
1032
+ "captures": [
1033
+ {
1034
+ "variable": "appGeneration",
1035
+ "pointers": [
1036
+ "/structuredContent/generation"
1037
+ ]
1038
+ }
1039
+ ]
694
1040
  },
695
1041
  {
696
1042
  "id": "style-app-buffer-layer",
@@ -703,7 +1049,14 @@
703
1049
  "layerId": "parcel-buffer",
704
1050
  "styleRef": "zero-to-map-buffer"
705
1051
  },
706
- "captures": [{ "variable": "appGeneration", "pointers": ["/structuredContent/generation"] }]
1052
+ "captures": [
1053
+ {
1054
+ "variable": "appGeneration",
1055
+ "pointers": [
1056
+ "/structuredContent/generation"
1057
+ ]
1058
+ }
1059
+ ]
707
1060
  },
708
1061
  {
709
1062
  "id": "set-app-view",
@@ -713,9 +1066,24 @@
713
1066
  "arguments": {
714
1067
  "draftId": "${appDraftId}",
715
1068
  "generation": "${appGeneration}",
716
- "view": { "bbox": [-157.862, 21.3064, -157.8595, 21.3083], "crs": "EPSG:4326" }
1069
+ "view": {
1070
+ "bbox": [
1071
+ -157.862,
1072
+ 21.3064,
1073
+ -157.8595,
1074
+ 21.3083
1075
+ ],
1076
+ "crs": "EPSG:4326"
1077
+ }
717
1078
  },
718
- "captures": [{ "variable": "appGeneration", "pointers": ["/structuredContent/generation"] }]
1079
+ "captures": [
1080
+ {
1081
+ "variable": "appGeneration",
1082
+ "pointers": [
1083
+ "/structuredContent/generation"
1084
+ ]
1085
+ }
1086
+ ]
719
1087
  },
720
1088
  {
721
1089
  "id": "add-app-chart",
@@ -730,10 +1098,21 @@
730
1098
  "kind": "chart",
731
1099
  "title": "Assessed value by zone",
732
1100
  "sourceId": "parcels",
733
- "config": { "categoryField": "zone", "valueField": "assessed_value", "aggregate": "sum" }
1101
+ "config": {
1102
+ "categoryField": "zone",
1103
+ "valueField": "assessed_value",
1104
+ "aggregate": "sum"
1105
+ }
734
1106
  }
735
1107
  },
736
- "captures": [{ "variable": "appGeneration", "pointers": ["/structuredContent/generation"] }]
1108
+ "captures": [
1109
+ {
1110
+ "variable": "appGeneration",
1111
+ "pointers": [
1112
+ "/structuredContent/generation"
1113
+ ]
1114
+ }
1115
+ ]
737
1116
  },
738
1117
  {
739
1118
  "id": "add-app-layer-control",
@@ -743,9 +1122,21 @@
743
1122
  "arguments": {
744
1123
  "draftId": "${appDraftId}",
745
1124
  "generation": "${appGeneration}",
746
- "control": { "id": "layers", "kind": "layer-list", "title": "Layers", "sourceId": "parcels" }
1125
+ "control": {
1126
+ "id": "layers",
1127
+ "kind": "layer-list",
1128
+ "title": "Layers",
1129
+ "sourceId": "parcels"
1130
+ }
747
1131
  },
748
- "captures": [{ "variable": "appGeneration", "pointers": ["/structuredContent/generation"] }]
1132
+ "captures": [
1133
+ {
1134
+ "variable": "appGeneration",
1135
+ "pointers": [
1136
+ "/structuredContent/generation"
1137
+ ]
1138
+ }
1139
+ ]
749
1140
  },
750
1141
  {
751
1142
  "id": "bind-app-chart-interaction",
@@ -757,18 +1148,36 @@
757
1148
  "generation": "${appGeneration}",
758
1149
  "interaction": {
759
1150
  "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'" } }
1151
+ "on": {
1152
+ "ref": "widget:value-by-zone",
1153
+ "event": "select"
1154
+ },
1155
+ "do": {
1156
+ "ref": "layer:parcels",
1157
+ "verb": "filter",
1158
+ "args": {
1159
+ "where": "zone = '$event.value'"
1160
+ }
1161
+ }
762
1162
  }
763
1163
  },
764
- "captures": [{ "variable": "appGeneration", "pointers": ["/structuredContent/generation"] }]
1164
+ "captures": [
1165
+ {
1166
+ "variable": "appGeneration",
1167
+ "pointers": [
1168
+ "/structuredContent/generation"
1169
+ ]
1170
+ }
1171
+ ]
765
1172
  },
766
1173
  {
767
1174
  "id": "validate-app-draft",
768
1175
  "title": "Validate the composed app draft",
769
1176
  "kind": "mcp",
770
1177
  "tool": "honua_studio_validate_draft",
771
- "arguments": { "draftId": "${appDraftId}" }
1178
+ "arguments": {
1179
+ "draftId": "${appDraftId}"
1180
+ }
772
1181
  },
773
1182
  {
774
1183
  "id": "save-app-version",
@@ -781,10 +1190,31 @@
781
1190
  "changeNote": "2026.1 zero-to-map app"
782
1191
  },
783
1192
  "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"] }
1193
+ {
1194
+ "variable": "savedAppItemId",
1195
+ "pointers": [
1196
+ "/structuredContent/version/itemId"
1197
+ ],
1198
+ "equals": "${appItemId}"
1199
+ },
1200
+ {
1201
+ "variable": "appVersionId",
1202
+ "pointers": [
1203
+ "/structuredContent/version/versionId"
1204
+ ]
1205
+ },
1206
+ {
1207
+ "variable": "appVersionNumber",
1208
+ "pointers": [
1209
+ "/structuredContent/version/versionNumber"
1210
+ ]
1211
+ },
1212
+ {
1213
+ "variable": "appContentHash",
1214
+ "pointers": [
1215
+ "/structuredContent/version/contentHash"
1216
+ ]
1217
+ }
788
1218
  ]
789
1219
  },
790
1220
  {
@@ -792,10 +1222,25 @@
792
1222
  "title": "Read the exact immutable app version",
793
1223
  "kind": "mcp",
794
1224
  "tool": "honua_studio_get_version",
795
- "arguments": { "itemId": "${appItemId}", "versionId": "${appVersionId}" },
1225
+ "arguments": {
1226
+ "itemId": "${appItemId}",
1227
+ "versionId": "${appVersionId}"
1228
+ },
796
1229
  "captures": [
797
- { "variable": "loadedAppVersionId", "pointers": ["/structuredContent/versionId"], "equals": "${appVersionId}" },
798
- { "variable": "loadedAppContentHash", "pointers": ["/structuredContent/contentHash"], "equals": "${appContentHash}" }
1230
+ {
1231
+ "variable": "loadedAppVersionId",
1232
+ "pointers": [
1233
+ "/structuredContent/versionId"
1234
+ ],
1235
+ "equals": "${appVersionId}"
1236
+ },
1237
+ {
1238
+ "variable": "loadedAppContentHash",
1239
+ "pointers": [
1240
+ "/structuredContent/contentHash"
1241
+ ],
1242
+ "equals": "${appContentHash}"
1243
+ }
799
1244
  ]
800
1245
  },
801
1246
  {
@@ -803,12 +1248,37 @@
803
1248
  "title": "Reopen the immutable app version as a new draft",
804
1249
  "kind": "mcp",
805
1250
  "tool": "honua_studio_reopen_version",
806
- "arguments": { "itemId": "${appItemId}", "versionId": "${appVersionId}" },
1251
+ "arguments": {
1252
+ "itemId": "${appItemId}",
1253
+ "versionId": "${appVersionId}"
1254
+ },
807
1255
  "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"] }
1256
+ {
1257
+ "variable": "appReopenedDraftId",
1258
+ "pointers": [
1259
+ "/structuredContent/draftId"
1260
+ ]
1261
+ },
1262
+ {
1263
+ "variable": "appReopenedItemId",
1264
+ "pointers": [
1265
+ "/structuredContent/itemId"
1266
+ ],
1267
+ "equals": "${appItemId}"
1268
+ },
1269
+ {
1270
+ "variable": "appReopenedBaseVersionId",
1271
+ "pointers": [
1272
+ "/structuredContent/baseVersionId"
1273
+ ],
1274
+ "equals": "${appVersionId}"
1275
+ },
1276
+ {
1277
+ "variable": "appReopenedGeneration",
1278
+ "pointers": [
1279
+ "/structuredContent/generation"
1280
+ ]
1281
+ }
812
1282
  ]
813
1283
  },
814
1284
  {
@@ -822,13 +1292,31 @@
822
1292
  "schemaVersion": "1.0",
823
1293
  "body": {
824
1294
  "title": "Parcel assessment dashboard",
825
- "map": { "itemId": "${mapItemId}", "versionId": "${mapVersionId}" }
1295
+ "map": {
1296
+ "itemId": "${mapItemId}",
1297
+ "versionId": "${mapVersionId}"
1298
+ }
826
1299
  }
827
1300
  },
828
1301
  "captures": [
829
- { "variable": "dashboardDraftId", "pointers": ["/structuredContent/draftId"] },
830
- { "variable": "dashboardItemId", "pointers": ["/structuredContent/itemId"] },
831
- { "variable": "dashboardGeneration", "pointers": ["/structuredContent/generation"] }
1302
+ {
1303
+ "variable": "dashboardDraftId",
1304
+ "pointers": [
1305
+ "/structuredContent/draftId"
1306
+ ]
1307
+ },
1308
+ {
1309
+ "variable": "dashboardItemId",
1310
+ "pointers": [
1311
+ "/structuredContent/itemId"
1312
+ ]
1313
+ },
1314
+ {
1315
+ "variable": "dashboardGeneration",
1316
+ "pointers": [
1317
+ "/structuredContent/generation"
1318
+ ]
1319
+ }
832
1320
  ]
833
1321
  },
834
1322
  {
@@ -847,7 +1335,14 @@
847
1335
  "visible": true
848
1336
  }
849
1337
  },
850
- "captures": [{ "variable": "dashboardGeneration", "pointers": ["/structuredContent/generation"] }]
1338
+ "captures": [
1339
+ {
1340
+ "variable": "dashboardGeneration",
1341
+ "pointers": [
1342
+ "/structuredContent/generation"
1343
+ ]
1344
+ }
1345
+ ]
851
1346
  },
852
1347
  {
853
1348
  "id": "style-dashboard-buffer-layer",
@@ -860,7 +1355,14 @@
860
1355
  "layerId": "parcel-buffer",
861
1356
  "styleRef": "zero-to-map-buffer"
862
1357
  },
863
- "captures": [{ "variable": "dashboardGeneration", "pointers": ["/structuredContent/generation"] }]
1358
+ "captures": [
1359
+ {
1360
+ "variable": "dashboardGeneration",
1361
+ "pointers": [
1362
+ "/structuredContent/generation"
1363
+ ]
1364
+ }
1365
+ ]
864
1366
  },
865
1367
  {
866
1368
  "id": "set-dashboard-view",
@@ -870,9 +1372,24 @@
870
1372
  "arguments": {
871
1373
  "draftId": "${dashboardDraftId}",
872
1374
  "generation": "${dashboardGeneration}",
873
- "view": { "bbox": [-157.862, 21.3064, -157.8595, 21.3083], "crs": "EPSG:4326" }
1375
+ "view": {
1376
+ "bbox": [
1377
+ -157.862,
1378
+ 21.3064,
1379
+ -157.8595,
1380
+ 21.3083
1381
+ ],
1382
+ "crs": "EPSG:4326"
1383
+ }
874
1384
  },
875
- "captures": [{ "variable": "dashboardGeneration", "pointers": ["/structuredContent/generation"] }]
1385
+ "captures": [
1386
+ {
1387
+ "variable": "dashboardGeneration",
1388
+ "pointers": [
1389
+ "/structuredContent/generation"
1390
+ ]
1391
+ }
1392
+ ]
876
1393
  },
877
1394
  {
878
1395
  "id": "add-dashboard-chart",
@@ -887,10 +1404,21 @@
887
1404
  "kind": "chart",
888
1405
  "title": "Assessed value by zone",
889
1406
  "sourceId": "parcels",
890
- "config": { "categoryField": "zone", "valueField": "assessed_value", "aggregate": "sum" }
1407
+ "config": {
1408
+ "categoryField": "zone",
1409
+ "valueField": "assessed_value",
1410
+ "aggregate": "sum"
1411
+ }
891
1412
  }
892
1413
  },
893
- "captures": [{ "variable": "dashboardGeneration", "pointers": ["/structuredContent/generation"] }]
1414
+ "captures": [
1415
+ {
1416
+ "variable": "dashboardGeneration",
1417
+ "pointers": [
1418
+ "/structuredContent/generation"
1419
+ ]
1420
+ }
1421
+ ]
894
1422
  },
895
1423
  {
896
1424
  "id": "add-dashboard-layer-control",
@@ -900,16 +1428,30 @@
900
1428
  "arguments": {
901
1429
  "draftId": "${dashboardDraftId}",
902
1430
  "generation": "${dashboardGeneration}",
903
- "control": { "id": "layers", "kind": "layer-list", "title": "Layers", "sourceId": "parcels" }
1431
+ "control": {
1432
+ "id": "layers",
1433
+ "kind": "layer-list",
1434
+ "title": "Layers",
1435
+ "sourceId": "parcels"
1436
+ }
904
1437
  },
905
- "captures": [{ "variable": "dashboardGeneration", "pointers": ["/structuredContent/generation"] }]
1438
+ "captures": [
1439
+ {
1440
+ "variable": "dashboardGeneration",
1441
+ "pointers": [
1442
+ "/structuredContent/generation"
1443
+ ]
1444
+ }
1445
+ ]
906
1446
  },
907
1447
  {
908
1448
  "id": "validate-dashboard-draft",
909
1449
  "title": "Validate the composed dashboard envelope",
910
1450
  "kind": "mcp",
911
1451
  "tool": "honua_studio_validate_draft",
912
- "arguments": { "draftId": "${dashboardDraftId}" }
1452
+ "arguments": {
1453
+ "draftId": "${dashboardDraftId}"
1454
+ }
913
1455
  },
914
1456
  {
915
1457
  "id": "save-dashboard-version",
@@ -922,10 +1464,31 @@
922
1464
  "changeNote": "2026.1 zero-to-map dashboard"
923
1465
  },
924
1466
  "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"] }
1467
+ {
1468
+ "variable": "savedDashboardItemId",
1469
+ "pointers": [
1470
+ "/structuredContent/version/itemId"
1471
+ ],
1472
+ "equals": "${dashboardItemId}"
1473
+ },
1474
+ {
1475
+ "variable": "dashboardVersionId",
1476
+ "pointers": [
1477
+ "/structuredContent/version/versionId"
1478
+ ]
1479
+ },
1480
+ {
1481
+ "variable": "dashboardVersionNumber",
1482
+ "pointers": [
1483
+ "/structuredContent/version/versionNumber"
1484
+ ]
1485
+ },
1486
+ {
1487
+ "variable": "dashboardContentHash",
1488
+ "pointers": [
1489
+ "/structuredContent/version/contentHash"
1490
+ ]
1491
+ }
929
1492
  ]
930
1493
  },
931
1494
  {
@@ -933,10 +1496,25 @@
933
1496
  "title": "Read the exact immutable dashboard version",
934
1497
  "kind": "mcp",
935
1498
  "tool": "honua_studio_get_version",
936
- "arguments": { "itemId": "${dashboardItemId}", "versionId": "${dashboardVersionId}" },
1499
+ "arguments": {
1500
+ "itemId": "${dashboardItemId}",
1501
+ "versionId": "${dashboardVersionId}"
1502
+ },
937
1503
  "captures": [
938
- { "variable": "loadedDashboardVersionId", "pointers": ["/structuredContent/versionId"], "equals": "${dashboardVersionId}" },
939
- { "variable": "loadedDashboardContentHash", "pointers": ["/structuredContent/contentHash"], "equals": "${dashboardContentHash}" }
1504
+ {
1505
+ "variable": "loadedDashboardVersionId",
1506
+ "pointers": [
1507
+ "/structuredContent/versionId"
1508
+ ],
1509
+ "equals": "${dashboardVersionId}"
1510
+ },
1511
+ {
1512
+ "variable": "loadedDashboardContentHash",
1513
+ "pointers": [
1514
+ "/structuredContent/contentHash"
1515
+ ],
1516
+ "equals": "${dashboardContentHash}"
1517
+ }
940
1518
  ]
941
1519
  },
942
1520
  {
@@ -944,302 +1522,187 @@
944
1522
  "title": "Reopen the immutable dashboard version as a new draft",
945
1523
  "kind": "mcp",
946
1524
  "tool": "honua_studio_reopen_version",
947
- "arguments": { "itemId": "${dashboardItemId}", "versionId": "${dashboardVersionId}" },
1525
+ "arguments": {
1526
+ "itemId": "${dashboardItemId}",
1527
+ "versionId": "${dashboardVersionId}"
1528
+ },
948
1529
  "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"] }
1530
+ {
1531
+ "variable": "dashboardReopenedDraftId",
1532
+ "pointers": [
1533
+ "/structuredContent/draftId"
1534
+ ]
1535
+ },
1536
+ {
1537
+ "variable": "dashboardReopenedItemId",
1538
+ "pointers": [
1539
+ "/structuredContent/itemId"
1540
+ ],
1541
+ "equals": "${dashboardItemId}"
1542
+ },
1543
+ {
1544
+ "variable": "dashboardReopenedBaseVersionId",
1545
+ "pointers": [
1546
+ "/structuredContent/baseVersionId"
1547
+ ],
1548
+ "equals": "${dashboardVersionId}"
1549
+ },
1550
+ {
1551
+ "variable": "dashboardReopenedGeneration",
1552
+ "pointers": [
1553
+ "/structuredContent/generation"
1554
+ ]
1555
+ }
953
1556
  ]
954
1557
  }
955
1558
  ]
956
1559
  },
957
1560
  {
958
- "number": 5,
1561
+ "number": 6,
959
1562
  "id": "proposal",
960
- "title": "Propose publication without bypassing human confirmation",
1563
+ "title": "Publish each saved version and capture its share URL",
961
1564
  "actions": [
962
1565
  {
963
1566
  "id": "propose-map-publication",
964
- "title": "Record the public map publication intent",
1567
+ "title": "Publish the saved map version",
965
1568
  "kind": "mcp",
966
1569
  "tool": "honua_studio_propose_publication",
967
1570
  "arguments": {
968
- "draftId": "${mapReopenedDraftId}",
969
- "generation": "${mapReopenedGeneration}",
1571
+ "itemId": "${mapItemId}",
1572
+ "versionId": "${mapVersionId}",
1573
+ "contentHash": "${mapContentHash}",
970
1574
  "route": "${mapRoute}",
971
1575
  "visibility": "public",
972
- "embed": true,
973
1576
  "note": "2026.1 D9.3 zero-to-map map candidate"
974
1577
  },
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
1578
  "captures": [
998
- { "variable": "mapPublicationItemId", "pointers": ["/structuredContent/itemId"], "equals": "${mapItemId}" },
999
- { "variable": "mapPublicationVersionId", "pointers": ["/structuredContent/versionId"] },
1000
- { "variable": "mapPublicationContentHash", "pointers": ["/structuredContent/contentHash"] }
1579
+ {
1580
+ "variable": "mapHumanConfirmationRequired",
1581
+ "pointers": [
1582
+ "/structuredContent/humanConfirmationRequired"
1583
+ ],
1584
+ "equals": false
1585
+ },
1586
+ {
1587
+ "variable": "mapShareUrl",
1588
+ "pointers": [
1589
+ "/structuredContent/shareUrl"
1590
+ ]
1591
+ }
1001
1592
  ]
1002
1593
  },
1003
1594
  {
1004
1595
  "id": "propose-app-publication",
1005
- "title": "Record the public app publication intent",
1596
+ "title": "Publish the saved app version",
1006
1597
  "kind": "mcp",
1007
1598
  "tool": "honua_studio_propose_publication",
1008
1599
  "arguments": {
1009
- "draftId": "${appReopenedDraftId}",
1010
- "generation": "${appReopenedGeneration}",
1600
+ "itemId": "${appItemId}",
1601
+ "versionId": "${appVersionId}",
1602
+ "contentHash": "${appContentHash}",
1011
1603
  "route": "${route}",
1012
1604
  "visibility": "public",
1013
- "embed": true,
1014
1605
  "note": "2026.1 D9.3 zero-to-map app candidate"
1015
1606
  },
1016
- "forbiddenPointers": [
1017
- "/structuredContent/publicationId",
1018
- "/structuredContent/publicUrl",
1019
- "/structuredContent/shareUrl"
1020
- ],
1021
1607
  "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"] }
1608
+ {
1609
+ "variable": "appHumanConfirmationRequired",
1610
+ "pointers": [
1611
+ "/structuredContent/humanConfirmationRequired"
1612
+ ],
1613
+ "equals": false
1614
+ },
1615
+ {
1616
+ "variable": "appShareUrl",
1617
+ "pointers": [
1618
+ "/structuredContent/shareUrl"
1619
+ ]
1620
+ }
1042
1621
  ]
1043
1622
  },
1044
1623
  {
1045
1624
  "id": "propose-dashboard-publication",
1046
- "title": "Record the public dashboard publication intent",
1625
+ "title": "Publish the saved dashboard version",
1047
1626
  "kind": "mcp",
1048
1627
  "tool": "honua_studio_propose_publication",
1049
1628
  "arguments": {
1050
- "draftId": "${dashboardReopenedDraftId}",
1051
- "generation": "${dashboardReopenedGeneration}",
1629
+ "itemId": "${dashboardItemId}",
1630
+ "versionId": "${dashboardVersionId}",
1631
+ "contentHash": "${dashboardContentHash}",
1052
1632
  "route": "${dashboardRoute}",
1053
1633
  "visibility": "public",
1054
- "embed": true,
1055
1634
  "note": "2026.1 D9.3 zero-to-map dashboard candidate"
1056
1635
  },
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
1636
  "captures": [
1080
- { "variable": "dashboardPublicationItemId", "pointers": ["/structuredContent/itemId"], "equals": "${dashboardItemId}" },
1081
- { "variable": "dashboardPublicationVersionId", "pointers": ["/structuredContent/versionId"] },
1082
- { "variable": "dashboardPublicationContentHash", "pointers": ["/structuredContent/contentHash"] }
1637
+ {
1638
+ "variable": "dashboardHumanConfirmationRequired",
1639
+ "pointers": [
1640
+ "/structuredContent/humanConfirmationRequired"
1641
+ ],
1642
+ "equals": false
1643
+ },
1644
+ {
1645
+ "variable": "dashboardShareUrl",
1646
+ "pointers": [
1647
+ "/structuredContent/shareUrl"
1648
+ ]
1649
+ }
1083
1650
  ]
1084
1651
  }
1085
1652
  ]
1086
1653
  },
1087
1654
  {
1088
- "number": 6,
1655
+ "number": 7,
1089
1656
  "id": "console",
1090
- "title": "Inspect and approve the candidate in Console",
1657
+ "title": "Fetch the admin-published share URLs",
1091
1658
  "actions": [
1092
1659
  {
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
- ]
1660
+ "id": "fetch-map-share-url",
1661
+ "title": "Require HTTP 200 from the published map share URL",
1662
+ "kind": "http",
1663
+ "url": "${mapShareUrl}",
1664
+ "expectedStatus": 200
1665
+ },
1666
+ {
1667
+ "id": "fetch-app-share-url",
1668
+ "title": "Require HTTP 200 from the published app share URL",
1669
+ "kind": "http",
1670
+ "url": "${appShareUrl}",
1671
+ "expectedStatus": 200
1672
+ },
1673
+ {
1674
+ "id": "fetch-dashboard-share-url",
1675
+ "title": "Require HTTP 200 from the published dashboard share URL",
1676
+ "kind": "http",
1677
+ "url": "${dashboardShareUrl}",
1678
+ "expectedStatus": 200
1216
1679
  }
1217
1680
  ]
1218
1681
  },
1219
1682
  {
1220
- "number": 7,
1683
+ "number": 8,
1221
1684
  "id": "artifact",
1222
- "title": "Verify the stable map, app, and dashboard URLs",
1685
+ "title": "Require HTTP 200 from the map, app, and dashboard share URLs",
1223
1686
  "actions": [
1224
1687
  {
1225
1688
  "id": "verify-map-public-url",
1226
- "title": "Require an identity-bound HTTP 200 from the approved map URL",
1689
+ "title": "Require an identity-bound HTTP 200 from the published map URL",
1227
1690
  "kind": "http",
1228
- "url": "${mapPublicUrl}",
1691
+ "url": "${mapShareUrl}",
1229
1692
  "expectedStatus": 200
1230
1693
  },
1231
1694
  {
1232
1695
  "id": "verify-share-url",
1233
- "title": "Require an identity-bound HTTP 200 from the approved app share URL",
1696
+ "title": "Require an identity-bound HTTP 200 from the published app share URL",
1234
1697
  "kind": "http",
1235
- "url": "${shareUrl}",
1698
+ "url": "${appShareUrl}",
1236
1699
  "expectedStatus": 200
1237
1700
  },
1238
1701
  {
1239
1702
  "id": "verify-dashboard-public-url",
1240
- "title": "Require an identity-bound HTTP 200 from the approved dashboard URL",
1703
+ "title": "Require an identity-bound HTTP 200 from the published dashboard URL",
1241
1704
  "kind": "http",
1242
- "url": "${dashboardPublicUrl}",
1705
+ "url": "${dashboardShareUrl}",
1243
1706
  "expectedStatus": 200
1244
1707
  }
1245
1708
  ]