On SteamOS and Bazzite /home is a link to /var/home; Wine keeps the path it was
given, so the resolved one alone can miss the command line. The start order is
unchanged (database up and healthy before the realm list is updated): a comment
says so.
client::launch started Ascension.exe directly, which cannot work on Linux, and
client::is_running found nothing (it reads the Windows process list). wine.rs is
the Linux counterpart, and both hand over to it on a Linux host.
It runs the command of the project's own launcher script: umu-run with a Proton
build (GAMEID=0, PROTONPATH, WINEPREFIX, started from the client folder), else
plain Wine, with WINEDLLOVERRIDES=divxtac=d (DivxTac.dll deadlocks the world
loading screen under wine-mono). The newest GE-Proton found for Steam is used, or
umu's own choice; COA_PROTONPATH, COA_WINEPREFIX and client-launch.json override
the detection; the prefix defaults to ~/Games/umu/coa-client. The game runs in its
own process group, so closing the Manager does not close it, and prints to
client.log. Whether it runs is read from /proc, where the command line holds the
Windows form of the client path. A clear message says what to install when neither
umu nor Wine is found.
Tests: detection (newest build, no build, Wine only, nothing, overrides), the
command, the /proc match, and a real spawn with a stand-in umu-run that records its
environment. Not run: the real client.
The Realm card showed "io: No such file or directory (os error 2)" on a Docker
server: the Wildcard check read Core/worldserver.exe. The card lets the owner
switch realm, so it is made to work rather than hidden.
What the repack's patched launcher did at each start is done by the Docker
backend: finish an interrupted switch (realms::before_start), name the realms in
the realm list, and give the containers the databases of the selected realm
(acore_world_wildcard, acore_characters_wildcard). The switch itself is the shared
code. prepare_launcher has nothing to patch on a Docker server, and Wildcard
support is read from Core/worldserver as it is from Core/worldserver.exe (the .exe
wins when both exist, so a repack is read as before).
Tests: the support check on both binary names, no launcher to adapt, and the
databases passed to the containers for each realm. Creating the Wildcard realm
itself needs a build and a database with the Wildcard migrations and was not run.
Found by installing a server through the new screen: the update check of a Docker
server read the Windows "stable" channel and offered "0.261003.17 (you have
0.261003.1)". Applying it would have put the repack's executables, MySQL and
launcher into a Linux server folder.
Refused in the core (update::preview, apply and rollback), so no caller can do it.
The Settings tab says that updates are not available for Docker servers yet; the
background check stays quiet, as for any failed check.
A test applies the same update package to the same folder with and without
Settings/docker.json: refused and untouched with it, committed without it.
The install commands ask coa_core::platform::flavor() once and hand a Docker
install to src-tauri/src/docker_install.rs; the repack arm of each command is
untouched (an early return and an extra optional parameter are all that changed
in lib.rs). New command install_environment tells the screen the kind of server,
the suggested folder (~/CoaServer) and why Docker cannot be used, if it cannot.
On Linux the install screen shows the game data folder (used in place, read-only)
and the server package (a folder or an address; there is no default address until
a signed Linux package is published), and disables Install until both are given
and Docker works. It shows Docker's own message with a "Check again" button when
Docker is missing, stopped or not allowed for the user. The Windows screen is
unchanged (checked side by side in the browser mock).
A debug build (tauri dev) accepts another package key named in
COA_DEV_TRUSTED_KEY, to try the installer on a package signed with a throwaway
key; a release build always uses the embedded key.
New text is English only for now (other languages fall back to it).
- Add UnsavedChangesGuard modal (Save/Discard/Cancel) when navigating between tabs
- Wire guard into ModulesPage and SettingsPage with floating action bar
- Implement crash parser and explanation engine in coa-core
- Expose list_crashes Tauri command and CrashItem API
- Add auto-restart on unexpected server crash with crash loop protection
- Add crash counter badge and CrashHistoryModal with human-readable explanations and full crashlogs
- Support all 6 locales (en, ru, de, fr, es, zh)
Only the client's own connection errors (ERROR 2003 and 2002, "Can't connect") count as a stopped
database. The SQLSTATE 22003 of an out-of-range value contains "2003" and hid the real error of a
failing release migration. The message now also carries the client's last line.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Accounts named with AiPlayerbot.RandomBotAccountPrefix (default rndbot) belong to the bot
system like the companions' accounts: they are not listed and cannot be renamed or deleted.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
The dashboard now runs through a small launcher that avoids the immediate socket shutdown that
cut answers above 64 KB on Windows, supplies the missing level-builds file, removes history
files zeroed by a crash, is addressed as 127.0.0.1 and opens in the browser through its own
command. The realm drop-down is hidden while both worlds start together.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
The Dashboard tab (shown with SQUID Playerbots) downloads the dashboard release of the
bots' release series, starts it on a free local port and shows it in the window. After an
update, a server that was stopped stays stopped unless the owner asked for it to start.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
The migration manager_repair__20261005_missing_wildcard_tables was published with two
different checksums; a server that applied one refused the update carrying the other.
Both versions have the same effect, so the Manager treats them as interchangeable.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
An update is decided by version: files the owner edited at the same version no longer
open a keep/replace decision. Repair shows which files differ or are missing.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Backups can be stored in a chosen folder (new backups go there, older ones stay listed),
and a backups folder that is a link to another drive no longer fails the update's safety
backup check. SQUID settings that declare a fixed list of choices are edited as a drop-down
and validated against it.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
- Settings: a card removes a stopped server from the Manager (no files deleted).
- The Players tab is now Accounts in all languages.
- The five-minute background check no longer starts and stops MySQL on a stopped
server; only an explicit check may start it.
- A failed install keeps its marker until the folder is complete, cleans up after a
failure that happens after the move, and reports the launcher's output; install and
update errors have a Copy button.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>