- driver/registry.py never actually defined register_driver_type, so
the plugin-system's 'driver plugin registered successfully' scenario
was unreachable in production (only simulated via test monkeypatch).
Added a real implementation wired into the existing driver factory
registry.
- PluginRegistry.discover() only caught PluginValidationError/
DuplicatePluginError, so a driver-kind manifest that failed wiring
(DriverRegistryUnavailableError/PluginTargetResolutionError) aborted
the whole scan, silently skipping co-located tool/skill manifests.
Now caught and skipped per manifest instead.
openspec: plugin-system capability, archived change cloud-runtime
- pooled_devices primary key changed from device_id alone to
(host_id, device_id), so two hosts reporting the same local
device_id no longer crash sync_host_devices() with an uncaught
sqlite3.IntegrityError.
- Device gained a capability_tags field so DevicePool.sync_host_devices()
can actually populate PooledDevice.capability_tags from a real host
sync instead of always falling back to an empty list.
openspec: device-pool capability, archived change cloud-runtime