Previously the plugin-platform boot loop did self.adapters[plugin_name]
= adapter (string key), while built-in adapters use a Platform enum
key. The mismatch escaped review because the in-process unit + E2E
tests don't exercise GatewayRunner.start() — they only call
_create_plugin_adapter directly.
Caught by a real `hermes gateway run` subprocess test:
File "gateway/run.py", line 2027, in <listcomp>
"platforms": [p.value for p in self.adapters.keys()],
AttributeError: 'str' object has no attribute 'value'
Switching to self.adapters[adapter.platform] = adapter — adapter.platform
is the PluginPlatformIdentifier passed to BasePlatformAdapter.__init__,
which has the .value attribute every downstream consumer needs.
After the fix the same subprocess test passes 4/4 checkpoints (config
parse → plugin boot → /a2a/health 200 → /a2a/inbound 200).