Architecture: How should plugins declare cross-platform compatibility — st...

Documentation for Sessions

🏗️ Architecture: How should plugins declare cross-platform compatibility — st...

Date: 2026-03-23
Time: 17:01:54 UTC
Session: gspace1-258.3
Agent: angular
Confidence: 91%
Status: ✅ Documented


📋 Decision Context

Question:

How should plugins declare cross-platform compatibility — static platform lists or capability negotiation?

Task: S258: Plugin platform compatibility system


🎯 Decision Made

Chosen:

Capability negotiation with explicit platform override. Plugins declare requires: PlatformCapability[] (what they need). Platforms declare PLATFORM_CAPABILITIES (what they provide). Resolver matches at composition time. Optional platforms?: PluginPlatform[] override takes precedence for inherently platform-specific plugins.

Options Considered:

  1. Static platform declaration per plugin (simple but O(plugins*platforms) maintenance)
  2. Capability negotiation with override (chosen — O(1) per new platform)
  3. No filtering, all plugins everywhere (breaks on missing APIs)

💭 Reasoning

Static platform lists (platforms: ['web', 'vscode']) require editing every plugin when a new platform is added. With capability negotiation, adding React Native mobile means defining its capabilities once — all compatible plugins automatically work. The override escape hatch (platforms field) handles edge cases like an ide-diagnostics plugin that is conceptually meaningless outside VSCode even if mobile gained diagnostics capability. 17 plugins analyzed: 10 require [] (universal), 4 require component-rendering, 1 requires speech-api, 1 requires drag-drop, 1 requires route-context.


📁 Files Involved


🔗 Related


Auto-generated by MCP Smart Consolidation