From 858fba216df9a12c4c30fb8ff38565e9c3429437 Mon Sep 17 00:00:00 2001 From: barlind Date: Sun, 14 Jun 2026 14:41:41 +0200 Subject: [PATCH] test(capability inspector): ensure descriptive compatibility shims are not rendered as commands (cherry picked from commit 1b0e333d012ca43653c0b088bf50976aa20a421f) --- plugins/capability_inspector/screen.js | 2 +- tests/js/capability_inspector_render.test.js | 29 ++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/plugins/capability_inspector/screen.js b/plugins/capability_inspector/screen.js index c8f0250..9f553ff 100644 --- a/plugins/capability_inspector/screen.js +++ b/plugins/capability_inspector/screen.js @@ -382,7 +382,7 @@ if (attributionOnly && attributionOnly.has(String(surface || ''))) return null; const mapped = (LEGACY_SURFACE_ENDPOINTS[String(capability || '')] || {})[String(surface || '')]; if (mapped) return mapped; - return { type: 'command', label: String(surface || '').trim() }; + return null; } function shimEndpoints(shims, type, onlyHits) { diff --git a/tests/js/capability_inspector_render.test.js b/tests/js/capability_inspector_render.test.js index 0396901..d3e255f 100644 --- a/tests/js/capability_inspector_render.test.js +++ b/tests/js/capability_inspector_render.test.js @@ -542,6 +542,35 @@ test('capability inspector links library legacy command surfaces to canonical en assert.match(libraryContent, /title="2 participants"/); }); +test('capability inspector does not render descriptive compatibility shims as commands', () => { + const snapshot = { + pipelines: [ + { name: 'visualization', review: { lifecycle: 'active', label: 'Active contract', tone: 'clean', summary: 'Visualization surface.' }, participants: [ + { pluginId: 'core.visualization', roles: ['owner'], commands: ['inspect', 'list-providers', 'select-renderer', 'clear-renderer'], operations: ['renderer.create', 'renderer.destroy'], events: [], runtime: true, availability: 'available', ownership: 'multi-provider', safety: 'safe' }, + ], conflicts: [] }, + ], + participants: [{ pluginId: 'core.visualization' }], + compatibilityShims: [ + { shimId: 'visualization:window.slopsmithViz_*', source: 'core.visualization', capability: 'visualization', legacySurface: 'window.slopsmithViz_* factory globals', status: 'used', hitCount: 1 }, + { shimId: 'visualization:type-visualization-manifest', source: 'core.visualization', capability: 'visualization', legacySurface: 'plugin.json type: "visualization"', status: 'used', hitCount: 1 }, + ], + expectedCompatibilityShims: [], + }; + const { window, elements } = loadInspector(snapshot); + const filter = elements.get('capability-inspector-filter'); + + filter.value = 'visualization'; + window.__slopsmithCapabilityInspector.render(); + const content = elements.get('capability-inspector-content').innerHTML; + + assert.match(content, /data-capability-node="command:inspect"/); + assert.match(content, /data-capability-node="operation:renderer\.create"/); + assert.doesNotMatch(content, /data-capability-node="command:window\.slopsmithViz_\* factory globals"/); + assert.doesNotMatch(content, /data-capability-node="command:plugin\.json type: "visualization""/); + assert.doesNotMatch(content, /data-link-kind="shimmed"[^>]*>window\.slopsmithViz_\* factory globals<\/span>/); + assert.doesNotMatch(content, /data-link-kind="shimmed"[^>]*>plugin\.json type: "visualization"<\/span>/); +}); + test('capability inspector clears provider hover without a graph hover target', () => { const snapshot = { pipelines: [