docs(modules): module-rust supports Carbon too, ships a Pterodactyl egg, and the rigs move to the panel #253
Reference in New Issue
Block a user
No description provided.
Delete Branch "docs/rust-carbon-and-pterodactyl"
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?
Four new decisions of record (R19–R22), a new framework reference, and §14 recording the first panel rig as built.
R19 — the plugin is framework-agnostic: Oxide and Carbon, from now
Carbon is not a fork of Oxide but a separate loader shipping an Oxide compatibility layer, so one
.csinOxide.Pluginsderiving fromRustPluginserves both — that is Carbon's own documented first example.#if CARBONis a real symbol and Oxide defines no equivalent, so#if !CARBONis the Oxide branch; it works only because we ship source rather than a DLL.Three existing decisions take an amendment and none is reversed:
Interface.Oxide.ConfigDirectory, never a literal. Carbon usescarbon/configs(plural) and lets an operator relocate all thirteen directories from the command line, so a hardcodedoxide/config/is wrong on Carbon and on a customised Oxide install alike.PermissionExistspre-check survives intact — Carbon'sGrantUserPermissionreturnsboolwhere Oxide's returnsvoid, so the framework that would tell us whether the write landed is the one we cannot listen to portably.doctorasks which framework rather than whether Oxide.R19 also writes down what it refuses: no Carbon-only hook or convar enters a catalogue without an Oxide answer first. The
OnCarbon*family is a tempting staff-audit feed and exactly how Carbon would quietly become required.R20 — a Pterodactyl egg is a Rust-Link deliverable, phase 18
Derived from the community "Rust Autowipe" egg, which already carries a
FRAMEWORKvariable offeringvanilla|carbon|oxide— the operator picks the framework at deploy time, which is R19's justification restated as a deployment fact.The sidecar runs inside the game's container, which is what lets D2 stand unchanged rather than be reopened: a container's
127.0.0.1is genuinely private, so the game link stays loopback and stays unauthenticated.R21 — both rigs move to the panel
Oxide and Carbon cannot coexist in one install, so R19 cannot be proven on a single server. Also retires the
D:\rustwipe-day routine and makes the rig Linux, where every previous finding came from Windows and Mono.R22 — the sidecar is configured from the egg's variables
Nearly free:
rust-link'sconfig.rsalready reads all five keys from the environment with env-over-file-over-defaults precedence, and Pterodactyl exposes egg variables as container environment. No second configuration mechanism. The game bind must not be operator-editable (D2), the web bind must derive from an allocation, and the db path must not be able to agree withREMOVE_FILES.New:
docs/modules/rust/CARBON.mdThe difference list and nothing else — file layout, the permission store, the
c.commands, 30 Carbon-only hooks and 13 uMod names Carbon's catalogue omits (at least two of which look like renames). Sourced from Carbon's own published metadata and source atmain, and labelled throughout as not yet proven on a live Carbon server — it is the hypothesis phase 3 tests.§14 — the rig as built, and two findings that change decisions
rust-oxide(id 17,e6758c06) exists on the panel, made with the application key and driven with the client key. The tier-2 loop was run rather than described: phase 1's realRunicGateway.cspushed from the working tree,oxide.reloadthrough the client API, the edit observed in Oxide's own log, source restored — about ten seconds end to end.Three things worked that were not certain to:
files/writecreates missing parents, a plugin placed before Oxide exists survives Oxide arriving, and the plugin compiles and loads on Linux, which no previous phase had established.Two findings with teeth:
production_buildtag, Oxide fromreleases/latest. So a restart is a framework upgrade, neither is pinnable through the egg, and R4's weaker "current enough" claim turns out not to be Carbon-specific.LD_PRELOAD=…/libdoorstop.soto the whole startup string, so./rust-link-sidecar & ./RustDedicated …puts the preload on the sidecar. The server starts cleanly, reports nothing, and is silently unmodded — on the Carbon half only. Raised as a decision (own entrypoint vs. careful composition), not settled.A correction carried in the open rather than dropped
An earlier commit on this branch recorded that the client key "authenticates and then lists zero servers" and reasoned from there to a second claim, that includes were broken on the panel. Both were wrong and wrong the same way — the servers were being deleted while the probing happened, so two calls minutes apart read two different worlds. §14.2 keeps it, because the reusable part is that a differential diagnosis across two API calls silently assumes the state did not move between them.
🤖 Generated with Claude Code
https://claude.ai/code/session_016wDDVXWMDz82WqE1i969r4