diff --git a/src/AcDream.App/RuntimeOptions.cs b/src/AcDream.App/RuntimeOptions.cs index 91772711..155cd8ba 100644 --- a/src/AcDream.App/RuntimeOptions.cs +++ b/src/AcDream.App/RuntimeOptions.cs @@ -245,6 +245,14 @@ public sealed record RuntimeOptions( PreparedAssetPath = NullIfEmpty(content?.PreparedAssetPath) ?? baseOptions.PreparedAssetPath, LiveMode = true, + // Campaign LA gate round 2: a session-config launch IS a product + // launch — the retail UI is the shipped UI, not a dev option. + // ACDREAM_RETAIL_UI remains the opt-in for env-var dev launches, + // but the launcher strips ACDREAM_* from children (LA11 isolation), + // so inheriting the env default here shipped a client with world + // rendering and NO interface at all — the guiSelect flow's + // character screen included. + RetailUi = true, LiveHost = session.Endpoint.Host, LivePort = session.Endpoint.Port, LiveUser = session.Account, diff --git a/tests/AcDream.App.Tests/Configuration/RuntimeOptionsSessionConfigTests.cs b/tests/AcDream.App.Tests/Configuration/RuntimeOptionsSessionConfigTests.cs index ceba50ad..7fafe02f 100644 --- a/tests/AcDream.App.Tests/Configuration/RuntimeOptionsSessionConfigTests.cs +++ b/tests/AcDream.App.Tests/Configuration/RuntimeOptionsSessionConfigTests.cs @@ -59,6 +59,11 @@ public sealed class RuntimeOptionsSessionConfigTests Assert.Equal(["PluginA", "PluginB"], options.Plugins); Assert.Equal(["/tell x, hi"], options.LoginCommands); Assert.Equal(900, options.LoginCommandDelayMs); + // Gate round 2: a session-config launch is a product launch — the + // retail UI must be ON even though the env func above returns null + // for everything (the launcher strips ACDREAM_* from children, so + // env inheritance here shipped a client with no interface at all). + Assert.True(options.RetailUi); } [Fact]