The launcher drops RPC sessions idle >30s (easily hit while the operator sits
in the install dialogs), but a dropped socket still reports Connected until an
I/O fails. InstallProductWorker then skipped its reopen, streamed the archive
on the fresh out-of-band connection, and died on the first progress poll —
and the install-completed handler registered launch entries without checking
e.Error, so AddApp's disconnected-guard exception crashed the whole console.
- PodInfo.EnsureConnectionAlive: probe an "open" connection with a Ping and
reconnect when it is dead; used by the install and uninstall workers.
- SiteManagement.PodInfo_InstallProductCompleted: register launch entries only
on success, and surface registration failures as the row's Install Failed
state instead of an unhandled exception.
- Regression test pins the premise + recovery against vPOD's launcher server
(stale socket reports open, Ping exposes it, reconnect restores service).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
vPOD now also impersonates the pod's TeslaLauncher service, so the console's
Manage Site works against it unmodified:
- LauncherRpcServer: ILauncherService over OFB + framed JSON on TCP 53290,
mirroring TeslaLauncherService (concurrent sessions, out-of-band install
zip on a second connection, the 99%-not-100 completion convention).
Packages extract to %LocalAppData%\vPOD\Games; postinstall.bat is logged
but never executed.
- PodProvisioning: pod side of SecureConfig (RQST beacon, RPLY decrypt, RSA
session-key exchange), display-only — never touches the NIC/registry. The
console's Configure flow mints the key exactly as for a real pod; console
Reconfigure (ClearStore) drops the key and re-enters beacon mode.
- VirtualLauncher: installed-app registry (persisted), simulated launch PIDs,
volume, install progress; console Shutdown/Restart power-cycles the pod.
- Form gets a Launcher/Site Management column (passcode display, RPC status,
install progress, app list, Reprovision); Power Off darkens the launcher
side too; new -nomanage flag disables it.
vPOD references the shared Tesla.Contract/Tesla.SecureConfig projects (server
side of the existing contract only, no new RPCs). Loopback tests drive the
real PodManagerConnection and PodConfigurationServer against the new code
(VPodLauncherServerTests, VPodProvisioningTests) — suite now 99 green.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>