From 6e1c0967cbe8849b82bd3ab7cec07308feb464e2 Mon Sep 17 00:00:00 2001 From: Erik Date: Sat, 15 Aug 2026 08:42:33 +0200 Subject: [PATCH] =?UTF-8?q?fix(app):=20Campaign=20LA=20gate=20round=202=20?= =?UTF-8?q?=E2=80=94=20session-config=20launches=20force=20the=20retail=20?= =?UTF-8?q?UI=20on?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A launcher-spawned client showed the world with NO interface at all - character screen included. RetailUi rode ACDREAM_RETAIL_UI (the dev-era opt-in), FromSessionConfig inherited the env parse, and the launcher strips ACDREAM_* from children by design, so every product launch got the dev default. A session-config launch IS a product launch: RetailUi is now forced true on that path; the env flag remains the dev-launch opt-in. Pinned by the session-config options test with a null env. Co-Authored-By: Claude Fable 5 --- src/AcDream.App/RuntimeOptions.cs | 8 ++++++++ .../Configuration/RuntimeOptionsSessionConfigTests.cs | 5 +++++ 2 files changed, 13 insertions(+) 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]