Files
source-gamepanel/conduit-bringup-artifacts/linux-console-rerun-20260614.md
T
2026-07-21 22:06:10 +00:00

9.4 KiB

Conduit Linux Console/ConVar Re-run - 2026-06-14

Scope

  • Pulled latest Conduit commits from origin/main.
  • Inspected the dynamic console command / convar diff and docs/linux-bringup.md test steps.
  • Rebuilt on Linux with GCC 12.
  • Deployed to CS2 server Test Sunucusu.
  • Verified dynamic command registration, dynamic command dispatch under profiler scope, plugin convar read/write, engine convar read/write, owner cleanup, and final server state.
  • Satisfactory server was not modified.

Git

Latest commits:

bb58461 (HEAD -> main, origin/main, origin/HEAD) Phase 2: dynamic console commands + convar access
a3bd08f Close out Linux verification of the Entity + Player slice
de4bda2 Phase 2: schema-backed Entity + Player access, with event bridge
4b79d33 Close out Linux verification of the Phase 2 GameEvents slice
a5c1c13 docs: Linux re-test steps for the Phase 2 GameEvents slice
ffb57f3 Phase 2 start: dispatch core + GameEvents, with an RTTI vtable finder

Pulled range:

Updating de4bda2..bb58461
Fast-forward
 PLAN.md                       |   4 +-
 core/CMakeLists.txt           |   1 +
 core/src/conduit/commands.cpp |  52 ++++++++
 core/src/conduit/console.cpp  | 302 ++++++++++++++++++++++++++++++++++++++++++
 core/src/conduit/console.h    |  78 +++++++++++
 core/src/plugin.cpp           |   5 +
 docs/linux-bringup.md         |  58 ++++++--
 7 files changed, 491 insertions(+), 9 deletions(-)
 create mode 100644 core/src/conduit/console.cpp
 create mode 100644 core/src/conduit/console.h

Working tree after the run:

## main...origin/main

Build

Command:

cmake -S /root/codex/Conduit -B /root/codex/Conduit/build/linux-rerun -G Ninja \
  -DCMAKE_BUILD_TYPE=RelWithDebInfo \
  -DCMAKE_C_COMPILER=gcc-12 \
  -DCMAKE_CXX_COMPILER=g++-12
cmake --build /root/codex/Conduit/build/linux-rerun

Result: build and link succeeded.

-- Configuring done
-- Generating done
-- Build files have been written to: /root/codex/Conduit/build/linux-rerun
[1/4] Building CXX object core/CMakeFiles/conduit.dir/src/conduit/commands.cpp.o
[2/4] Building CXX object core/CMakeFiles/conduit.dir/src/conduit/console.cpp.o
[3/4] Building CXX object core/CMakeFiles/conduit.dir/src/plugin.cpp.o
[4/4] Linking CXX shared library package/addons/conduit/bin/conduit.so

Only warning observed: the existing volatile compound-assignment warning in commands.cpp.

No failed CMake/Ninja output exists because the build passed. The Linux link path for CConVar / ConVarRefAbstract symbols passed.

Deploy

Package source:

/root/codex/Conduit/build/linux-rerun/package/.

Destination:

/var/lib/gamepanel/servers/c2b47a90/game/csgo/

CS2 container restarted:

gp_c2b47a90

Satisfactory was not touched:

/gp_d8f13411 exited running=false exit=130 oom=false

Load Check

RCON:

rcon: authenticated
--- meta list ---
Listing 1 plugin:
  [01] Conduit (0.1.0-dev) by Conduit Contributors
--- conduit_status ---
Conduit 0.1.0-dev
  uptime      : 47.4 s
  game frames : 2251
  log file    : /home/steam/cs2-dedicated/game/csgo/addons/conduit/logs/conduit-20260614.log
  crash report: armed (use conduit_crash_test to verify)

Startup log:

2026-06-14 14:19:24 [INFO] gamedata: 1 files loaded: 0 signatures, 0 offsets, all valid
2026-06-14 14:19:25 [INFO] entity: armed via CGameEntitySystem vtable 0x7f4c8640ffd8 - entity system not created yet, will resolve on first use after map load
2026-06-14 14:19:25 [INFO] gameevents: armed via CGameEventManager vtable 0x7f4c86410f50 - instance captured on next LoadEventsFromFile
2026-06-14 14:19:25 [INFO] core: Conduit 0.1.0-dev loaded - crash reporter armed, profiler on
2026-06-14 14:19:25 [INFO] gameevents: game event manager connected (0x7f4c86790460) - event listening live
2026-06-14 14:19:36 [INFO] core: first GameFrame observed - hook dispatch confirmed

Result: plugin loaded, frames advanced, no Conduit/Metamod load failure.

Dynamic Command and Profiler

Commands:

conduit_console
conduit_demo alpha bravo charlie
conduit_prof

Output:

rcon: authenticated
--- conduit_console ---
[Conduit] [INFO] console: command 'conduit_demo' registered (owner 'console_demo')
[Conduit] [INFO] console: convar 'conduit_demo_value' created (owner 'console_demo')
console: ready, 1 command(s), 1 plugin convar(s)
  cmd  conduit_demo                 owner=console_demo
  cvar conduit_demo_value           owner=console_demo  value=7
--- conduit_demo alpha bravo charlie ---
[Conduit] [INFO] console_demo: conduit_demo invoked: argc=4 args='alpha bravo charlie' issuer=server(-1)
--- conduit_prof ---
owner                callsite                          calls       avg       p50       p99       max      total
engine               GameFrame                          3409    2.53ms    4.19ms    8.39ms   47.48ms      8.62s
console_demo         conduit_demo                          1    63.1us    65.5us    65.5us    63.1us     63.1us

Result: dynamic command dispatch works and is profiled under console_demo / conduit_demo.

ConVar Tests

Commands:

conduit_cvar conduit_demo_value
conduit_cvar conduit_demo_value 42
conduit_cvar conduit_demo_value
conduit_cvar sv_cheats
conduit_cvar sv_gravity
conduit_cvar sv_gravity 700
conduit_cvar sv_gravity

Output:

rcon: authenticated
--- conduit_cvar conduit_demo_value ---
[Conduit] conduit_demo_value = 7  (int=7 float=7.000 bool=1)
--- conduit_cvar conduit_demo_value 42 ---
[Conduit] set 'conduit_demo_value' = '42'
[Conduit] conduit_demo_value = 42  (int=42 float=42.000 bool=1)
--- conduit_cvar conduit_demo_value ---
[Conduit] conduit_demo_value = 42  (int=42 float=42.000 bool=1)
--- conduit_cvar sv_cheats ---
[Conduit] sv_cheats = false  (int=0 float=0.000 bool=0)
--- conduit_cvar sv_gravity ---
[Conduit] sv_gravity = 800.000000  (int=800 float=800.000 bool=1)
--- conduit_cvar sv_gravity 700 ---
L 06/14/2026 - 14:20:43: server_cvar: "sv_gravity" "700.000000"
[Conduit] set 'sv_gravity' = '700'
[Conduit] sv_gravity = 700.000000  (int=700 float=700.000 bool=1)
--- conduit_cvar sv_gravity ---
[Conduit] sv_gravity = 700.000000  (int=700 float=700.000 bool=1)

Result: plugin-owned convar read/write passed. Engine convar read/write passed.

sv_gravity was restored:

rcon: authenticated
--- conduit_cvar sv_gravity 800 ---
L 06/14/2026 - 14:20:56: server_cvar: "sv_gravity" "800.000000"
[Conduit] set 'sv_gravity' = '800'
[Conduit] sv_gravity = 800.000000  (int=800 float=800.000 bool=1)
--- conduit_cvar sv_gravity ---
[Conduit] sv_gravity = 800.000000  (int=800 float=800.000 bool=1)

Owner Cleanup

Commands:

conduit_concmd_stop
conduit_demo x

Output:

--- conduit_concmd_stop ---
[Conduit] removed 2 demo registration(s)
--- conduit_demo x ---

Result: conduit_demo x produced no handler line after cleanup, so the command was removed from the engine.

I then called conduit_console again to probe the persistence/adopt path:

--- conduit_console ---
[Conduit] [INFO] console: command 'conduit_demo' registered (owner 'console_demo')
[Conduit] [INFO] console: convar 'conduit_demo_value' already registered - adopting (owner 'console_demo')
console: ready, 1 command(s), 0 plugin convar(s)
  cmd  conduit_demo                 owner=console_demo

The persisted convar value remained available:

--- conduit_cvar conduit_demo_value ---
[Conduit] conduit_demo_value = 42  (int=42 float=42.000 bool=1)

Final cleanup after the re-register:

rcon: authenticated
--- conduit_cvar conduit_demo_value ---
[Conduit] conduit_demo_value = 42  (int=42 float=42.000 bool=1)
--- conduit_concmd_stop ---
[Conduit] removed 1 demo registration(s)
--- conduit_demo x ---

--- conduit_status ---
Conduit 0.1.0-dev
  uptime      : 115.6 s
  game frames : 6615
  log file    : /home/steam/cs2-dedicated/game/csgo/addons/conduit/logs/conduit-20260614.log
  crash report: armed (use conduit_crash_test to verify)
--- conduit_prof ---
owner                callsite                          calls       avg       p50       p99       max      total
engine               GameFrame                          6617    2.34ms    4.19ms    8.39ms   47.48ms     15.50s
console_demo         conduit_demo                          1    63.1us    65.5us    65.5us    63.1us     63.1us

Finding

The adopt path works for name-based access: conduit_demo_value stayed at 42 and could be read after re-registration.

Potential mismatch: after adoption, conduit_console reported 0 plugin convar(s) and did not list conduit_demo_value, despite logging already registered - adopting. That means the existing convar is not represented in g_convars, so owner cleanup removed only the command on the second cleanup (removed 1 demo registration(s)). If the intended behavior is "adopted convars are tracked and listed as plugin-owned", this needs a small fix. If "adopt" only means "treat existing engine convar as accessible by name", the runtime behavior is consistent.

Final State

Docker:

/gp_c2b47a90 running running=true exit=0 oom=false
/gp_d8f13411 exited running=false exit=130 oom=false

Panel DB:

   uuid   |      name      | status  |     slug     | port
----------+----------------+---------+--------------+-------
 c2b47a90 | Test Sunucusu  | running | cs2          | 27015
 d8f13411 | MukemmelSunucu | stopped | satisfactory |  7777
(2 rows)

No Conduit/Metamod/signal-specific load failure or crash was observed. Server console had ordinary CS2/Steam/map warnings only.