feat(rust): --game rust, named instances, and schema-2 bundles (phase 18) #28
Reference in New Issue
Block a user
No description provided.
Delete Branch "feat/phase-18-rust"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Step 5 of the phase-18 build order (docs/modules/rust/PLAN.md §34.2.7), into
edge. It is walked (§34.3) against the real Rust bundle once Rust-Plugins#13 and Rust-Link#13 have cut over, and only then goes tomain, which releases the installer.Bundles (D146, D147)
v2/servuo/and lowered into the schema-1 model, so every ServUO path andinstall.jsonare unchanged.--bundlepin from before schema 2 still reproduces.v2/servuo/bundle-2026.09.15.jsonlowers to exactly what schema 1 says for the same matrix.v2/rust/and checked: the protocol agrees across bundle, sidecar and plugin, and the payload kind isplugin./raw/route answersCache-Control: public, max-age=21600.--game rust(D148, D149, D153), insrc/rustgame/:RustDedicated_Data/Managed/Oxide.Rust.dllorcarbon/managed/Carbon.dll, both read off the rigs first. Both, or neither, is refused.--server-idnames an instance, which gets its own:runicgateway-rust@<id>(a systemd template) orRunicGatewayRust-<id>;--web-port).ServerIdandPort. An existing one is never rewritten, and one naming another server refuses the run with both ids named.sidecar.tomlis written once, with its ports and an absolute database path. The sidecar then generates the token into it./etc/runicgateway/rust/<id>.toml.%ProgramData%\RunicGateway\rust\<id>\sidecar.toml. It is a directory per instance because a Windows service logs beside its config.rust/install.json, separate from ServUO's.updatemoves every instance, since they share one binary. A replaced binary restarts all of them.update --server-idis refused with the reason.doctorchecks, per instance:ServerId;/health, the protocol, and plugin connected. A stopped server is a warning, and a silent plugin on a running server is a failure, with the floors printed.uninstallremoves the service and our plugin, and keeps the plugin config.--purgealso removes the sidecar config and database. Removing the last instance also removes the binary, the template and the record. The sharedrunicgatewayuser is removed only if no ServUO record remains.service.rsnow takes the service name as a parameter internally. The ServUO public API is unchanged.For your review
carbon/config.jsonis honoured. On 2.0.259, the file on the rig has no folder keys at all, so there is nothing there to honour. The installer usescarbon/pluginsandcarbon/configs, and the source says why.sidecar.toml. It sets the ports and the database path and leaves the token blank, and the sidecar still generates the token. The plan had the template unit carry the database path. With several instances, one file per instance holding everything is the single source, and it works the same on Windows, where a per-service environment isn't available.runicgateway, which ServUO's sidecar also uses, so no single instance's removal may delete it.Tested
Checks: Windows native and Linux (Docker) both pass fmt, clippy
-D warningsand 175 tests.Against a mock Gitea serving a real Rust bundle (the real
rust-link-sidecar.exeand musl binary, and the real plugin tarball), via an uncommitted, reverted edit to the base URL.Windows, relocated:
--verify;alphaon an Oxide root andbetaon a Carbon root, getting 7799/8090 and 7800/8091;doctorwith alpha's sidecar running: reachable, protocol 12, "server not running";doctor, andupdaterestored it;uninstall --server-id betaleft alpha;uninstall --purgeremoved everything except the plugin config.Linux, relocated:
alpha.tomlat mode 600, and the template unit readsRUSTLINK_CONFIG=…/%i.toml.Not yet tested: real systemd and SCM registration. That is walk steps 2 to 4, on the published bundle.
AI-assisted: Claude Code (Claude Opus 5.5)
🤖 Generated with Claude Code
https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY