fix(app): Campaign LA gate round 2 — session-config launches force the retail UI on

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 <noreply@anthropic.com>
This commit is contained in:
Erik 2026-08-15 08:42:33 +02:00
parent 981e168fb9
commit 6e1c0967cb
2 changed files with 13 additions and 0 deletions

View file

@ -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,

View file

@ -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]