The remote symbol panel called adapter->SaveSymbol with
downloadedSymbol.get(), but SaveSymbol takes ownership of the
pointer. The unique_ptr destructor then freed it a second time,
corrupting the vtable and causing a crash. Changed to release()
so ownership transfers cleanly to the cache.
The webview_test server was out of sync with KiCad's actual
remote provider protocol in three places: the discovery endpoint
(/.well-known/kicad-remote-provider) was absent, REMOTE_LOGIN
used an old mock-auth scheme instead of { interactive: true },
and the NEW_SESSION response had no registered waiter so the ACK
landed in the unhandled-message path.
Provider metadata is now built from the request Host header
rather than a hard-coded port. The live test fixture binds to
port 0, and remote_symbol.json now references the discovery URL.
Adds 41 pytest tests covering provider metadata format, asset
encoding, name extraction, content-type mapping, parts loading,
and all HTTP endpoints.