Demo Capability Matrix

Status vocabulary:

This matrix tracks demo coverage for issue #70. The implementation-level protocol defaults stay in docs/protocol-capability-matrix.md; this document answers where a reviewer can see or smoke each capability.

Seeded Honua Cloud demo service promotion for issue #128 is tracked in docs/honua-cloud-demo-services.md and the shared manifest at examples/cloud-demo-services.json.

Matrix

Capability Sample app(s) Fixture/test(s) Smoke command(s) Status Gaps / notes
Service discovery examples/maplibre-quickstart, examples/realtime-incident-dashboard, examples/node-backend-quickstart, examples/service-explorer test/server-compatibility.test.ts, test/node-backend-quickstart.test.ts, test/service-explorer-workspace.test.ts, test/integration-harness.test.ts, test/integration/surfaces/*.integration.ts npm run demo:node-backend:smoke; npm run test:playwright:service-explorer; npm run test:integration demoed Service explorer now foregrounds a standards source picker across every SDK protocol identifier — Honua gRPC, FeatureServer, MapServer, ImageServer, Geometry Service, GP Service, OGC API Features/Tiles/Maps/Records, STAC, WFS, WMS, WMTS, OData, and MapLibre vector/raster/GeoJSON — grouped by protocol family with fixture fallback, while browser demos continue to consume configured endpoints.
Metadata examples/maplibre-quickstart, examples/realtime-incident-dashboard, examples/kepler-analytics, examples/service-explorer test/quickstart-data.test.ts, test/kepler-analytics-refresh-fixture.test.ts, test/service-explorer-workspace.test.ts, test/integration/surfaces/feature-server.integration.ts npm test -- test/quickstart-data.test.ts test/kepler-analytics-refresh-fixture.test.ts test/service-explorer-workspace.test.ts demoed Metadata is demoed through fixture manifests, standards source capability/cache badges, and integration probes.
FeatureServer examples/maplibre-quickstart, examples/realtime-incident-dashboard, examples/node-backend-quickstart test/feature-layer-compat.test.ts, test/query-compat.test.ts, test/node-backend-quickstart.test.ts, test/integration/surfaces/feature-server.integration.ts npm run demo:quickstart:build; npm run demo:node-backend:smoke; npm run test:integration; npm run test:cloud-demo:config demoed Feature query, counts, object ids, edits-adjacent fixtures, and metadata are represented. Issue #128 adds a seeded cloud manifest for read-only FeatureServer samples and a guarded writable service contract.
MapServer examples/service-explorer, test/fixtures/esri-map-image-layer-app, test/fixtures/esri-dynamic-map-app test/map-image-layer-compat.test.ts, test/service-explorer-workspace.test.ts, test/playwright/service-explorer.spec.mjs, test/integration/surfaces/map-server.integration.ts npm run test:playwright:service-explorer; npm test -- test/map-image-layer-compat.test.ts test/service-explorer-workspace.test.ts demoed Service explorer exposes MapServer as a render/export/find-style lane with table/query controls disabled and cache semantics documented.
ImageServer examples/imagery-cog-quickstart, examples/terrain-rgb-elevation, test/fixtures/esri-map-image-layer-app test/imagery-cog-quickstart.test.ts, test/terrain-rgb-elevation.test.ts, test/playwright/imagery-cog-quickstart.spec.mjs, test/playwright/terrain-rgb-elevation.spec.mjs, test/integration/surfaces/image-server.integration.ts, test/contract/geoservices-conformance.test.ts npm run demo:imagery-cog:build; npm run demo:terrain-elevation:build; npm run test:playwright:terrain-elevation demoed COG-backed ImageServer tile and exportImage paths are visible in the imagery quickstart; Terrain-RGB tiles plus elevation value/profile proof are visible in the terrain sample. Live seeded coverage can be promoted through #70.
Geometry Service examples/storytelling-25d-map, examples/geoprocessing-job-runner, test/fixtures/esri-geometry-primitives-app test/geometry-primitives-compat.test.ts, test/geometry-symbol-compat.test.ts, test/geoprocessing-job-runner.test.ts, test/integration/surfaces/gp-server.integration.ts npm run demo:25d:build; npm run demo:gp-runner:build; npm test -- test/geometry-primitives-compat.test.ts test/geoprocessing-job-runner.test.ts demoed The job runner builds geometry buffer/intersect steps into a geospatial-grpc execution plan and materializes linked result layers; live GeometryServer seed coverage remains #128/#66 follow-up.
GP/OGC Processes examples/geoprocessing-job-runner test/process-runner.test.ts, test/geoprocessing-job-runner.test.ts, test/contract/ogc-processes.test.ts, test/contract/geoprocessing-job-run.test.ts, test/integration/surfaces/ogc-processes.integration.ts, test/integration/surfaces/gp-server.integration.ts npm run demo:gp-runner:build; npm run test:playwright:gp-runner; npm test -- test/process-runner.test.ts test/geoprocessing-job-runner.test.ts test/contract/ogc-processes.test.ts test/contract/geoprocessing-job-run.test.ts demoed HonuaProcessRunner now normalizes OGC API Processes, GeoServices REST GPServer, and honua-io/geospatial-grpc ProcessService clients onto IJobRun; the sample covers progress, cancellation, unsupported capability, materialized output, and linked workspace sync.
OGC Features examples/maplibre-quickstart, examples/node-backend-quickstart test/contract/ogc-conformance.test.ts, test/contract/exploration.test.ts, test/node-backend-quickstart.test.ts, test/integration/surfaces/ogc-features.integration.ts npm run demo:quickstart:build; npm run demo:node-backend:smoke; npm run test:integration demoed Quickstart uses canonical feature exploration; the Node backend sample also exposes an OGC API Features items route.
OGC Tiles examples/maplibre-quickstart, examples/storytelling-25d-map test/contract/ogc-tiles.test.ts, test/integration/surfaces/ogc-tiles.integration.ts, test/tile-layer-compat.test.ts npm run demo:quickstart:build; npm run demo:25d:build demoed Tile rendering is visible through MapLibre/Cesium lanes; styled OGC tile variants remain weak and should be tracked under #60.
OGC Maps examples/maplibre-quickstart, examples/service-explorer test/contract/ogc-maps.test.ts, test/service-explorer-workspace.test.ts, test/integration/surfaces/ogc-maps.integration.ts npm run test:playwright:service-explorer; npm test -- test/contract/ogc-maps.test.ts; npm run test:integration demoed Service explorer toggles OGC Maps as a distinct render-only source with disabled table/query affordances.
WFS examples/service-explorer test/contract/wfs.test.ts, test/service-explorer-workspace.test.ts, test/playwright/service-explorer.spec.mjs npm run test:playwright:service-explorer; npm test -- test/contract/wfs.test.ts test/service-explorer-workspace.test.ts demoed Service explorer projects WFS GetFeature-style records into the same linked map/table/chart/filter/detail context as FeatureServer.
WMS examples/imagery-cog-quickstart, test/fixtures/esri-map-image-layer-app test/imagery-cog-quickstart.test.ts, test/playwright/imagery-cog-quickstart.spec.mjs, test/contract/wms.test.ts, test/wms-capabilities.test.ts, test/integration/surfaces/wms.integration.ts npm run demo:imagery-cog:build; npm run test:playwright:imagery-cog demoed WMS GetMap is rendered through the runtime raster source helper; broader standards source picking remains in #62 and #70.
WMTS examples/service-explorer, test/fixtures/esri-tile-layer-app test/contract/wmts.test.ts, test/service-explorer-workspace.test.ts, test/playwright/service-explorer.spec.mjs, test/integration/surfaces/wmts.integration.ts, test/tile-layer-compat.test.ts npm run test:playwright:service-explorer; npm test -- test/contract/wmts.test.ts test/tile-layer-compat.test.ts; npm run test:integration demoed Service explorer exposes WMTS as a render-only standards source and validates disabled feature-table/query behavior.
STAC examples/kepler-analytics test/contract/stac.test.ts, test/kepler-analytics-refresh-fixture.test.ts, test/playwright/kepler-analytics-fixture.spec.mjs npm run demo:kepler:build; npm run demo:kepler:smoke demoed Kepler fixtures represent materialized STAC-like analytics outputs; live STAC source discovery remains a #63 follow-up.
OData examples/service-explorer test/contract/odata-conformance.test.ts, test/composition.test.ts, test/service-explorer-workspace.test.ts npm run test:playwright:service-explorer; npm test -- test/contract/odata-conformance.test.ts test/composition.test.ts test/service-explorer-workspace.test.ts demoed Service explorer includes an OData entity-set lane with metadata/cache semantics and linked table exploration.
MCP None mcp/package.json, test/split-packages.test.ts npm run verify:split-packages blocked MCP packaging exists, but there is no demo harness command in the root scripts. A sample MCP workflow is a follow-up for #65 and #70.
Migration test/fixtures/esri-demo-feature-table-relates-app, test/fixtures/esri-real-sample-incident-command-app test/migration-cli-demo.test.ts, test/migration-runtime-matrix.test.ts, test/migration-real-sample-runtime.test.ts, test/playwright/migration-browser-smoke.spec.mjs npm run demo:migration:featuretable; npm run test:playwright:migration demoed FeatureTable and real-sample migration lanes are demoable; broader real-sample inventory remains under #73 and #74.
Auth/interceptors examples/node-backend-quickstart, test/fixtures/esri-request-app, test/fixtures/esri-oauth-app test/node-backend-quickstart.test.ts, test/request-interceptors.test.ts, test/oauth-identity-compat.test.ts, test/esri-request-compat.test.ts, test/esri-config-compat.test.ts npm run demo:node-backend:smoke; npm test -- test/request-interceptors.test.ts test/oauth-identity-compat.test.ts demoed Node backend quickstart keeps API key and service-account credentials in the server process and logs SDK request interceptor spans without exposing secrets.
Retries/timeouts examples/node-backend-quickstart test/node-backend-quickstart.test.ts, test/retry-jitter.test.ts, test/abort-signal.test.ts, test/response-timing.test.ts, test/integration-diagnostics.test.ts npm run demo:node-backend:smoke; npm test -- test/retry-jitter.test.ts test/abort-signal.test.ts test/response-timing.test.ts demoed Node backend quickstart configures SDK timeout and retry options, and its fixture test forces a transient upstream 503 through the retry lane.
Attachments examples/edit-workflow-demo, test/fixtures/esri-demo-feature-table-relates-app test/edit-workflow-demo.test.ts, test/playwright/edit-workflow-demo.spec.mjs, test/feature-table-compat.test.ts, test/feature-form-compat.test.ts, test/migration-feature-table-demo-runtime.test.ts npm run demo:edit-workflow:build; npm run test:playwright:edit-workflow; npm run demo:migration:featuretable demoed The edit workflow sample stages attachment add/delete mutations in the same edit session and surfaces partial attachment failures; live upload/download coverage still depends on seeded writable Honua Cloud services in #55 and #73.
Related records test/fixtures/esri-demo-feature-table-relates-app, test/fixtures/esri-related-features-app, test/fixtures/esri-feature-table-relates-app test/feature-table-compat.test.ts, test/table-list-compat.test.ts, test/migration-feature-table-demo-runtime.test.ts npm run demo:migration:featuretable; npm test -- test/table-list-compat.test.ts demoed Related-record navigation is the primary FeatureTable migration demo path; issue #74 should broaden real-sample scenarios.
Edits examples/edit-workflow-demo, test/fixtures/esri-real-sample-editing-app, test/fixtures/esri-feature-form-app test/edit-workflow-demo.test.ts, test/contract/edit-session.test.ts, test/playwright/edit-workflow-demo.spec.mjs, test/editor-compat.test.ts, test/feature-form-compat.test.ts, test/contract/wfs.test.ts npm run demo:edit-workflow:build; npm run test:playwright:edit-workflow; npm test -- test/edit-workflow-demo.test.ts test/contract/edit-session.test.ts; npm run test:cloud-demo:config demoed The edit workflow sample demonstrates metadata-backed forms, create/update/delete, sketch dirty state and undo/redo, annotation persistence hooks, optimistic UI apply/commit/rollback hooks, normalized conflict errors, version hints, unsupported capability states, and attachment lifecycle staging. Issue #128 defines the guarded writable cloud service env, write-token, and reset-token contract while live write wiring remains #73 follow-up.
Style/runtime examples/maplibre-quickstart, examples/storytelling-25d-map, examples/kepler-analytics test/style.test.ts, test/runtime/runtime.test.ts, test/storytelling-25d-map.test.ts, test/kepler-analytics-refresh-fixture.test.ts npm run demo:quickstart:build; npm run demo:25d:build; npm run demo:kepler:build demoed Runtime styles, layer projections, and app-specific theming are covered across all three first-party demos.
Generated app preview runtime None test/generated-app-runtime.test.ts, test/fixtures/generated-app/operations-dashboard-app-package.v1.json, test/fixtures/generated-app/operations-dashboard-map-package.v1.json, test/fixtures/generated-app/operations-dashboard-features.v1.json npm test -- test/generated-app-runtime.test.ts tested-only @honua/sdk-js/generated-app covers the versioned manifest/profile, BuildSpec / AppPackage / MapPackage projections, map/table/count/chart/filter render models, linked interactions, manifest-level map layerId fallback, partial-load map disposal, and structured preview diagnostics. Lifecycle telemetry events are documented in docs/generated-app-runtime.md; promotion to demoed needs a Portal or browser host harness.
Studio package contracts None test/studio/studio-contracts.test.ts npm test -- test/studio/studio-contracts.test.ts; npm run verify:split-packages tested-only @honua/sdk-js/studio projects the query/analysis/map/dashboard/report/form/app/workflow/GP/ETL package families and unifies them behind the { valid, diagnostics, pkg? } StudioPackageValidationResponse<T> envelope (fromMapPackageValidation bridges the existing ValidateMapPackageResult unchanged), a capability manifest, and publish/share/embed contracts. The barrel is MCP/QGIS-safe — a source scan asserts it never imports MapLibre/DOM or Console-coupled modules. Map/dashboard/app reuse the established SDK-native shapes; the other families are experimental stubs pending server contracts. See docs/studio-package-contracts.md; promotion to demoed needs a Console/MCP host harness.
Webmap conversion test/fixtures/esri-webmap-app test/webmap-parse.test.ts, test/webmap-convert-renderer.test.ts, test/webmap-convert-symbol.test.ts, test/webmap-convert-extent.test.ts, test/web-map-compat.test.ts npm test -- test/webmap-parse.test.ts test/web-map-compat.test.ts tested-only Conversion coverage is fixture-heavy; a before/after browser sample remains a #74 follow-up.
Geocoding examples/geocoding-quickstart, test/fixtures/esri-route-task-app test/geocoding.test.ts, test/geocoding-quickstart.test.ts, test/search-compat.test.ts, test/route-task-compat.test.ts, test/playwright/geocoding-quickstart.spec.mjs npm run demo:geocoding:build; npm run test:playwright:geocoding; npm test -- test/geocoding.test.ts test/geocoding-quickstart.test.ts test/search-compat.test.ts demoed The geocoding quickstart demonstrates forward geocoding, reverse lookup from a clicked map point, and typeahead through first-class HonuaGeocodingClient methods with a same-origin fixture lane.
Telemetry/diagnostics examples/maplibre-quickstart, examples/storytelling-25d-map, examples/realtime-incident-dashboard, examples/node-backend-quickstart test/node-backend-quickstart.test.ts, test/integration-diagnostics.test.ts, test/integration-reporter.test.ts, test/response-timing.test.ts npm run demo:node-backend:smoke; npm test -- test/integration-diagnostics.test.ts test/integration-reporter.test.ts demoed Demo apps emit local telemetry modules, the Node backend emits structured JSON request logs, and integration diagnostics persist failures for CI triage.
Metadata caching examples/maplibre-quickstart, examples/kepler-analytics, examples/imagery-cog-quickstart, examples/edit-workflow-demo, examples/service-explorer test/quickstart-config.test.ts, test/kepler-analytics-refresh-fixture.test.ts, test/imagery-cog-quickstart.test.ts, test/edit-workflow-demo.test.ts, test/service-explorer-workspace.test.ts, test/contract/odata-conformance.test.ts, test/cloud-demo-services.test.ts npm run demo:edit-workflow:build; npm run test:playwright:service-explorer; npm test -- test/quickstart-config.test.ts test/kepler-analytics-refresh-fixture.test.ts test/imagery-cog-quickstart.test.ts test/edit-workflow-demo.test.ts test/service-explorer-workspace.test.ts; npm run test:cloud-demo:config demoed Cache note: metadata should be cached per source/config version for app startup, source picking, form/domain rendering, WFS/WMTS/OGC/OData metadata negotiation, and MapServer style/legend discovery. Issue #128's cloud demo manifest preserves that metadata boundary while realtime state, edit submissions, writable resets, and ad hoc spatial requests stay uncached. Weak cross-protocol cache invalidation remains under #63, #64, and #70.
Realtime/live data examples/realtime-incident-dashboard test/realtime.test.ts, test/realtime-incident-dashboard.test.ts, test/playwright/realtime-incident-dashboard.spec.mjs, test/cloud-demo-services.test.ts npm run demo:incident:build; npm run test:playwright:incident; npm run test:cloud-demo:config demoed Realtime note: the incident operations dashboard is live-data by default and must not be treated as a static dashboard. Issue #128 records the seeded SSE stream URL env and states that the realtime stream is the feature-state authority. Follow #70 for harness-level status badges.
Unified operational workspace examples/unified-ops-workspace test/unified-ops-workspace.test.ts, test/playwright/unified-ops-workspace.spec.mjs npm run demo:unified-ops:build; npm run test:playwright:unified-ops demoed Composition note: incident command and analysis review share one app workspace, linked-view context, realtime record store, reviewable AI/MCP drafts, and saved snapshot diagnostics with fixture-backed data.
Materialized outputs examples/kepler-analytics, test/fixtures/honua-25d-demo test/kepler-analytics-refresh-fixture.test.ts, test/storytelling-25d-data.test.ts, test/quickstart-data.test.ts npm run demo:kepler:refresh-fixture; npm run demo:kepler:build demoed Materialized note: analytics and 2.5D fixtures are generated snapshots used for deterministic demos; provenance refresh belongs with #63 and #74.
Indexed spatial aggregation examples/spatial-analytics-workbench test/spatial-aggregation-contract.test.ts, test/spatial-analytics-workbench.test.ts, test/fixtures/spatial-aggregation/indexed-summary.v1.json, test/playwright/spatial-analytics-workbench.spec.mjs npm run demo:spatial-analytics:build; npm run test:playwright:spatial-analytics; npm test -- test/spatial-aggregation-contract.test.ts test/spatial-analytics-workbench.test.ts demoed Contract and browser coverage include category, histogram, count, sum, avg, grouped summaries, viewport/spatial filters, zoom/index resolution, opaque H3/Quadbin-style index metadata, widget metadata, heat/grid cells, and progressive loading. Live Honua Cloud execution remains a #66 server/platform follow-up.
Warehouse analytics sources examples/spatial-analytics-workbench test/contract/analytics-sources.test.ts, test/contract/query-tiles.test.ts, test/runtime/query-tiles.test.ts, test/fixtures/spatial-aggregation/indexed-summary.v1.json npm test -- test/contract/analytics-sources.test.ts test/contract/query-tiles.test.ts test/runtime/query-tiles.test.ts test/spatial-aggregation-contract.test.ts tested-only Provider-neutral table/query/tileset and H3/Quadbin descriptors are covered with cache keys, pushdown/degraded reasons, widget cache identity, query-tile integration, and spatial aggregation metadata. Production warehouse execution remains a server/platform follow-up under #66.
Uncached ad hoc spatial requests examples/maplibre-quickstart, examples/storytelling-25d-map test/spatial-filter.test.ts, test/query-builder.test.ts, test/query-builder-variants.test.ts, test/batch-query.test.ts npm test -- test/spatial-filter.test.ts test/query-builder.test.ts test/query-builder-variants.test.ts tested-only Ad-hoc note: bbox, intersects, and user-driven spatial filters must execute uncached because they depend on viewport and interaction state. Browser smoke expansion is tracked in #70.

Follow-up Index