diff --git a/Console/RedPlanet/Apps.xml b/Console/RedPlanet/Apps.xml
index 206ed18..edf6281 100644
--- a/Console/RedPlanet/Apps.xml
+++ b/Console/RedPlanet/Apps.xml
@@ -113,10 +113,10 @@
+ (vPOD\ at the repo root). Speaks Munga on 1501 like a real
+ rpl4opt.exe/btl4.exe and reports either ApplicationID (toggled live in
+ its window). Deploy it to a pod exactly like a real client; the package
+ (vPOD\dist\vPOD.zip, built by pack.ps1) extracts to C:\Games\vPOD. -->
-
-
-
-
diff --git a/Console/tests/TeslaConsole.DiffTests/TeslaConsole.DiffTests.csproj b/Console/tests/TeslaConsole.DiffTests/TeslaConsole.DiffTests.csproj
index ee40fc5..3f7f82a 100644
--- a/Console/tests/TeslaConsole.DiffTests/TeslaConsole.DiffTests.csproj
+++ b/Console/tests/TeslaConsole.DiffTests/TeslaConsole.DiffTests.csproj
@@ -57,7 +57,7 @@
-
+
diff --git a/README.md b/README.md
index ecdae3b..79e226c 100644
--- a/README.md
+++ b/README.md
@@ -8,6 +8,7 @@ The Tesla cockpit-pod software, in one repository:
| [`Launcher/`](Launcher/) | **TeslaLauncher** — the pod-side Service (Session 0 RPC listener) + Agent (user-session app launcher). A clean rewrite of the original launcher. | .NET Framework 4.8 |
| [`Contract/`](Contract/) | **Tesla.Contract** — the shared Console↔Launcher RPC contract: wire types, the client, and the framed-JSON protocol. Emits assembly `TeslaConsoleLaunchLib`. | .NET Framework 4.8 |
| [`SecureConfig/`](SecureConfig/) | **Tesla.SecureConfig** — the first-boot pod provisioning protocol (UDP beacons, OFB crypto, RSA key exchange). Emits assembly `TeslaSecureConfiguration`. | .NET Framework 4.8 |
+| [`vPOD/`](vPOD/) | **vPOD** — a virtual pod for testing the consoles without cockpit hardware: impersonates both the game client (Munga, TCP 1501) and the pod's TeslaLauncher service (provisioning + Site Management / Install Product on TCP 53290). | .NET Framework 4.8 |
The console and launcher talk over **TCP 53290** using **length-prefixed
`System.Text.Json` frames over an OFB-encrypted stream** ([`Contract/PodRpcProtocol.cs`](Contract/PodRpcProtocol.cs)),
@@ -32,7 +33,9 @@ install, since .NET Framework 4.8 ships in Windows 10/11), and
[`Launcher/install.bat`](Launcher/install.bat) deploys it on a cockpit PC (registers the
Service, sets up the Agent for auto-login, hardens the box). The operator console packages
the same way: [`Console/build-package.bat`](Console/build-package.bat) → `Console/dist/`,
-installed with [`Console/install.bat`](Console/install.bat).
+installed with [`Console/install.bat`](Console/install.bat). vPOD packages with
+[`vPOD/pack.ps1`](vPOD/pack.ps1) → `vPOD/dist/vPOD.zip`, deployable to a pod via the
+console's Install Product (or run directly on any machine).
## Layout notes
diff --git a/TeslaSuite.sln b/TeslaSuite.sln
index 0ac4d94..9313102 100644
--- a/TeslaSuite.sln
+++ b/TeslaSuite.sln
@@ -19,16 +19,13 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tesla.Contract", "Contract\
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tesla.SecureConfig", "SecureConfig\Tesla.SecureConfig.csproj", "{070A6093-6C46-4A5B-A119-47ED195530E1}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "vPOD", "Console\vPOD\vPOD.csproj", "{9EAC97A1-D71A-4AAB-9957-A79A1587D406}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "vPOD", "vPOD\vPOD.csproj", "{9EAC97A1-D71A-4AAB-9957-A79A1587D406}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{27285664-95C3-49FB-95BA-A34721060BF1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{27285664-95C3-49FB-95BA-A34721060BF1}.Debug|Any CPU.Build.0 = Debug|Any CPU
@@ -59,9 +56,11 @@ Global
{9EAC97A1-D71A-4AAB-9957-A79A1587D406}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9EAC97A1-D71A-4AAB-9957-A79A1587D406}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{27C769F3-F07F-456E-ACB7-F4A4A21AB6D1} = {91E92ADD-9F67-41E4-B43C-CCB7B2D95F15}
{467AA87A-FBD4-45D7-B8F8-9336C95884D2} = {27C769F3-F07F-456E-ACB7-F4A4A21AB6D1}
- {9EAC97A1-D71A-4AAB-9957-A79A1587D406} = {91E92ADD-9F67-41E4-B43C-CCB7B2D95F15}
EndGlobalSection
EndGlobal
diff --git a/Console/vPOD/.gitignore b/vPOD/.gitignore
similarity index 100%
rename from Console/vPOD/.gitignore
rename to vPOD/.gitignore
diff --git a/Console/vPOD/LauncherRpcServer.cs b/vPOD/LauncherRpcServer.cs
similarity index 100%
rename from Console/vPOD/LauncherRpcServer.cs
rename to vPOD/LauncherRpcServer.cs
diff --git a/Console/vPOD/MungaPodServer.cs b/vPOD/MungaPodServer.cs
similarity index 100%
rename from Console/vPOD/MungaPodServer.cs
rename to vPOD/MungaPodServer.cs
diff --git a/Console/vPOD/PodArguments.cs b/vPOD/PodArguments.cs
similarity index 100%
rename from Console/vPOD/PodArguments.cs
rename to vPOD/PodArguments.cs
diff --git a/Console/vPOD/PodProvisioning.cs b/vPOD/PodProvisioning.cs
similarity index 100%
rename from Console/vPOD/PodProvisioning.cs
rename to vPOD/PodProvisioning.cs
diff --git a/Console/vPOD/PodSimulator.cs b/vPOD/PodSimulator.cs
similarity index 100%
rename from Console/vPOD/PodSimulator.cs
rename to vPOD/PodSimulator.cs
diff --git a/Console/vPOD/Program.cs b/vPOD/Program.cs
similarity index 100%
rename from Console/vPOD/Program.cs
rename to vPOD/Program.cs
diff --git a/Console/vPOD/README.md b/vPOD/README.md
similarity index 98%
rename from Console/vPOD/README.md
rename to vPOD/README.md
index 90fd0eb..b7691e8 100644
--- a/Console/vPOD/README.md
+++ b/vPOD/README.md
@@ -136,7 +136,7 @@ An end-to-end loopback test of this server against the console's real
## Deploying from the console (Manage Site → Install Product)
-vPOD is a catalog product (`RedPlanet\Apps.xml`, id `0041C870-…`) with Game
+vPOD is a catalog product (`Console\RedPlanet\Apps.xml`, id `0041C870-…`) with Game
Client / Live Camera / Mission Review entries, so it appears in **Manage Site →
Install Product** like any game. Build the deployable package first:
diff --git a/Console/vPOD/VPodForm.cs b/vPOD/VPodForm.cs
similarity index 100%
rename from Console/vPOD/VPodForm.cs
rename to vPOD/VPodForm.cs
diff --git a/Console/vPOD/VirtualLauncher.cs b/vPOD/VirtualLauncher.cs
similarity index 100%
rename from Console/vPOD/VirtualLauncher.cs
rename to vPOD/VirtualLauncher.cs
diff --git a/Console/vPOD/pack.ps1 b/vPOD/pack.ps1
similarity index 100%
rename from Console/vPOD/pack.ps1
rename to vPOD/pack.ps1
diff --git a/Console/vPOD/vPOD.csproj b/vPOD/vPOD.csproj
similarity index 83%
rename from Console/vPOD/vPOD.csproj
rename to vPOD/vPOD.csproj
index 6efa382..0e0d237 100644
--- a/Console/vPOD/vPOD.csproj
+++ b/vPOD/vPOD.csproj
@@ -8,7 +8,7 @@
console connects to it exactly as it would a real rpl4opt.exe / btl4.exe),
emulates the pod ApplicationState machine, reassembles the streamed egg,
and shows both on a live display. Deployable to a pod machine via the
- console's Manage Site -> Install Product (see dist\ + RedPlanet\Apps.xml).
+ console's Manage Site -> Install Product (see dist\ + Console\RedPlanet\Apps.xml).
net48 to match the rest of the suite and the vendored Munga Net.dll.
-->
@@ -45,10 +45,11 @@
-
+
- ..\lib\Munga Net.dll
+ ..\Console\lib\Munga Net.dll
true
@@ -59,8 +60,8 @@
PodRpc framing + ILauncherService wire types, and the SecureConfig
provisioning protocol + OFB crypto-stream handshake. vPOD implements the
SERVER side of the existing contract only - no new RPCs. -->
-
-
+
+