Carbon: ConsoleSystem.Run cannot reach c.* or plugin commands, so the bridge's Carbon reload (D180) does nothing #34

Open
opened 2026-10-14 23:57:55 +00:00 by wtclaude · 0 comments
Member

Found during the PLAN_REDESIGNS §14.2 test phase on 2026-10-14 (docs#346, §14.2.1, Q19 → D363).

Setup: Rust 25902425 (protocol 2634.289.1), Carbon 2.0.262 (the current production build), rig rust-carbon.

What happens

A plugin calling ConsoleSystem.Run(ConsoleSystem.Option.Server, …) gets Command '<name>' not found printed to the console and a null return for:

  • Carbon's own commands: c.reload PopupNotifications, c.version.
  • Every plugin console command tried: gcrate, dtevent, tpve, zl.info.

Two other paths behave differently:

  • Rust's own commands still work through the same call, replies included (server.hostname, convars).
  • The same text typed at the panel console works.

On the Oxide rig (Oxide 2.0.7830, same Rust build), plugin commands run through ConsoleSystem.Run.

Why it matters now

ReloadPluginByName runs c.reload <name> exactly this way on Carbon (D180, RunReloadCommand). It returns true, because no exception is thrown, and nothing reloads. Every Carbon reload the bridge does today is silently a no-op. The §14 plugins will also need console commands on Carbon (dtevent, gcrate).

Likely causes, not yet pinned down

  1. The Rust update. Rust 25902425 changed ConsoleSystem: Arg.Args is now StringView[]. Carbon 2.0.262 (released 2026-10-02) predates it, so Carbon's console-command patch may no longer cover the path plugins use.
  2. Carbon's own change: CarbonCommunity/Carbon#121, Hardened command origin checks (merged 2026-09-06). Its diff still treats a null connection as the server, so it doesn't explain this on its face. D180's reload was last proven on Carbon 2.0.259.

Carbon's Components.CommandManager (Find, Execute) is reachable by reflection if a workaround is ever wanted. The org lead decided (D363) not to work around it yet. Watch Carbon's updates instead, and keep this issue open so it isn't forgotten.

To do

  • Re-test on each new Carbon production build: run c.reload and a plugin command through ConsoleSystem.Run from a plugin.
  • Once Carbon is fixed, confirm the bridge's reload works again on the Carbon rig.
  • If it stays broken, bring a workaround to the org lead (e.g. Carbon's CommandManager by reflection), plus a check that the reload really happened.

🤖 Generated with Claude Code

Found during the PLAN_REDESIGNS §14.2 test phase on 2026-10-14 (docs#346, §14.2.1, Q19 → D363). **Setup:** Rust 25902425 (protocol 2634.289.1), Carbon 2.0.262 (the current production build), rig `rust-carbon`. ## What happens A plugin calling `ConsoleSystem.Run(ConsoleSystem.Option.Server, …)` gets `Command '<name>' not found` printed to the console and a `null` return for: - **Carbon's own commands:** `c.reload PopupNotifications`, `c.version`. - **Every plugin console command tried:** `gcrate`, `dtevent`, `tpve`, `zl.info`. Two other paths behave differently: - **Rust's own commands still work** through the same call, replies included (`server.hostname`, convars). - **The same text typed at the panel console works.** On the Oxide rig (Oxide 2.0.7830, same Rust build), plugin commands run through `ConsoleSystem.Run`. ## Why it matters now `ReloadPluginByName` runs `c.reload <name>` exactly this way on Carbon (D180, `RunReloadCommand`). It returns `true`, because no exception is thrown, and nothing reloads. **Every Carbon reload the bridge does today is silently a no-op.** The §14 plugins will also need console commands on Carbon (`dtevent`, `gcrate`). ## Likely causes, not yet pinned down 1. **The Rust update.** Rust 25902425 changed `ConsoleSystem`: `Arg.Args` is now `StringView[]`. Carbon 2.0.262 (released 2026-10-02) predates it, so Carbon's console-command patch may no longer cover the path plugins use. 2. **Carbon's own change:** CarbonCommunity/Carbon#121, *Hardened command origin checks* (merged 2026-09-06). Its diff still treats a null connection as the server, so it doesn't explain this on its face. D180's reload was last proven on Carbon 2.0.259. Carbon's `Components.CommandManager` (`Find`, `Execute`) is reachable by reflection if a workaround is ever wanted. **The org lead decided (D363) not to work around it yet.** Watch Carbon's updates instead, and keep this issue open so it isn't forgotten. ## To do - [ ] Re-test on each new Carbon production build: run `c.reload` and a plugin command through `ConsoleSystem.Run` from a plugin. - [ ] Once Carbon is fixed, confirm the bridge's reload works again on the Carbon rig. - [ ] If it stays broken, bring a workaround to the org lead (e.g. Carbon's CommandManager by reflection), plus a check that the reload really happened. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: RunicGateway/Rust-Plugins#34
No description provided.