async fn scan_inventory(
cli: &PluginCli,
) -> Result<PluginsInventorySnapshot, String>Expand description
The disk scan, off the runtime.
The scan walks the plugin tree, so it runs on a blocking thread exactly as the read path’s own does - a dispatch reached from the connection must never stall a shared worker on it. The two failures stay distinct: a scan that could not run names the join, and a scan with no root to walk says so rather than reading as an empty machine.