# Conduit Linux GameEvents Re-run - 2026-06-14 ## Scope - Pulled latest Conduit commits from `origin/main`. - Inspected the new Phase 2 dispatch/GameEvents diff. - Rebuilt clean on Linux with GCC 12. - Deployed the resulting package to CS2 server `Test Sunucusu`. - Verified Linux RTTI vtable lookup, GameEvent manager connection, pre/post dispatch, cancellation, profiler accounting, and cleanup. - Did not touch the Satisfactory server files/container. ## Git Latest commits after pull: ```text a5c1c13 (HEAD -> main, origin/main, origin/HEAD) docs: Linux re-test steps for the Phase 2 GameEvents slice ffb57f3 Phase 2 start: dispatch core + GameEvents, with an RTTI vtable finder 4078ab7 PLAN: close the Linux memscan question - M1 fully done on both platforms ``` Diff summary inspected: ```text PLAN.md | 4 +- core/CMakeLists.txt | 1 + core/src/conduit/commands.cpp | 85 ++++++++++++ core/src/conduit/gameevents.cpp | 294 ++++++++++++++++++++++++++++++++++++++++ core/src/conduit/gameevents.h | 73 ++++++++++ core/src/conduit/memscan.cpp | 237 ++++++++++++++++++++++++++++++-- core/src/conduit/memscan.h | 7 + core/src/plugin.cpp | 5 + docs/linux-bringup.md | 24 ++++ ``` Working tree after the run: ```text ## main...origin/main ``` ## Build Build command used: ```sh 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 succeeded. Final build line: ```text [30/30] Linking CXX shared library package/addons/conduit/bin/conduit.so ``` Warnings only: ```text - protobuf syntax warnings - paths.cpp snprintf truncation warnings - commands.cpp volatile compound assignment deprecated - log.cpp snprintf truncation warning - C-only warning for C++ flags on Zydis.c ``` No full cmake/ninja failure output exists because the build did not fail. ## Deploy Deployed package: ```text /root/codex/Conduit/build/linux-rerun/package/. ``` Destination: ```text /var/lib/gamepanel/servers/c2b47a90/game/csgo/ ``` Server restarted: ```text gp_c2b47a90 ``` Satisfactory server was not modified. ## Initial Load `meta list` and `conduit_status` after deploy: ```text rcon: authenticated --- meta list --- Listing 1 plugin: [01] Conduit (0.1.0-dev) by Conduit Contributors --- conduit_status --- Conduit 0.1.0-dev uptime : 88.9 s game frames : 5066 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 lines: ```text 2026-06-14 11:34:50 [INFO] gamedata: 1 files loaded: 0 signatures, 0 offsets, all valid 2026-06-14 11:34:50 [INFO] gameevents: armed via CGameEventManager vtable 0x7f47c7ae2f50 — instance captured on next LoadEventsFromFile 2026-06-14 11:34:50 [INFO] core: Conduit 0.1.0-dev loaded — crash reporter armed, profiler on 2026-06-14 11:34:50 [INFO] gameevents: game event manager connected (0x7f47c7e62460) — event listening live 2026-06-14 11:35:00 [INFO] core: first GameFrame observed — hook dispatch confirmed ``` ## RTTI Vtable Checks Commands: ```text conduit_vtable server CGameEventManager conduit_vtable server CCSPlayerController ``` Output: ```text rcon: authenticated --- conduit_vtable server CGameEventManager --- [Conduit] CGameEventManager vtable @ 0x7f47c7ae2f50 first method -> 0x7f47c6d0aa80 --- conduit_vtable server CCSPlayerController --- [Conduit] CCSPlayerController vtable @ 0x7f47c7ace5a8 first method -> 0x7f47c6b169a0 ``` Result: Linux Itanium RTTI lookup passed for both classes. ## Listen Test Commands: ```text conduit_event_stop conduit_event_listen player_spawn mp_restartgame 1 ``` RCON output: ```text rcon: authenticated --- conduit_event_stop --- [Conduit] removed 0 test subscription(s) --- conduit_event_listen player_spawn --- [Conduit] [INFO] gameevents: 'event_test' subscribed to 'player_spawn' (pre) [Conduit] [INFO] gameevents: 'event_test' subscribed to 'player_spawn' (post) [Conduit] listening to 'player_spawn' (pre+post) — watch the log --- mp_restartgame 1 --- ``` Log evidence: ```text 2026-06-14 11:55:18 [INFO] gameevents: 'event_test' subscribed to 'player_spawn' (pre) 2026-06-14 11:55:18 [INFO] gameevents: 'event_test' subscribed to 'player_spawn' (post) 2026-06-14 11:55:20 [INFO] event_test: [pre] player_spawn userid=0 attacker=-1 2026-06-14 11:55:20 [INFO] event_test: [post] player_spawn userid=0 attacker=-1 2026-06-14 11:55:20 [INFO] event_test: [pre] player_spawn userid=1 attacker=-1 2026-06-14 11:55:20 [INFO] event_test: [post] player_spawn userid=1 attacker=-1 ``` `conduit_events` and `conduit_prof` after listen: ```text rcon: authenticated --- conduit_events --- game events: manager connected, 2 subscription(s), 1 event(s) registered, FireEvent detour on event_test player_spawn pre hits=2 event_test player_spawn post hits=2 --- conduit_prof --- owner callsite calls avg p50 p99 max total engine GameFrame 80323 2.28ms 4.19ms 4.19ms 27.49ms 183.11s event_test player_spawn 4 38.1us 65.5us 65.5us 54.9us 152.6us ``` Result: pre and post dispatch both fired. ## Cancel Test Commands: ```text conduit_event_cancel player_spawn mp_restartgame 1 ``` RCON output: ```text rcon: authenticated --- conduit_event_cancel player_spawn --- [Conduit] [INFO] gameevents: 'event_cancel_test' subscribed to 'player_spawn' (pre) [Conduit] will cancel every 'player_spawn' until conduit_event_stop --- mp_restartgame 1 --- ``` Log evidence: ```text 2026-06-14 12:02:21 [INFO] gameevents: 'event_cancel_test' subscribed to 'player_spawn' (pre) 2026-06-14 12:02:22 [INFO] event_test: [pre] player_spawn userid=0 attacker=-1 2026-06-14 12:02:22 [WARN] event_test: cancelling 'player_spawn' (pre) 2026-06-14 12:02:22 [INFO] event_test: [pre] player_spawn userid=1 attacker=-1 2026-06-14 12:02:22 [WARN] event_test: cancelling 'player_spawn' (pre) ``` There were no new `[post] player_spawn` lines after cancellation. `conduit_events` and `conduit_prof` after cancel: ```text rcon: authenticated --- conduit_events --- game events: manager connected, 3 subscription(s), 1 event(s) registered, FireEvent detour on event_test player_spawn pre hits=4 event_test player_spawn post hits=2 event_cancel_test player_spawn pre hits=2 --- conduit_prof --- owner callsite calls avg p50 p99 max total engine GameFrame 107531 2.25ms 4.19ms 4.19ms 32.27ms 242.28s event_test player_spawn 6 47.1us 65.5us 131.1us 76.9us 282.5us event_cancel_test player_spawn 2 14.5us 16.4us 16.4us 14.9us 28.9us ``` Result: cancel path passed; post stayed at `hits=2` while pre advanced. ## Cleanup Commands: ```text conduit_event_stop conduit_events ``` Output: ```text rcon: authenticated --- conduit_event_stop --- [Conduit] removed 3 test subscription(s) --- conduit_events --- game events: manager connected, 0 subscription(s), 1 event(s) registered, FireEvent detour off ``` Final status: ```text rcon: authenticated --- conduit_status --- Conduit 0.1.0-dev uptime : 2228.6 s game frames : 141868 log file : /home/steam/cs2-dedicated/game/csgo/addons/conduit/logs/conduit-20260614.log crash report: armed (use conduit_crash_test to verify) --- conduit_events --- game events: manager connected, 0 subscription(s), 1 event(s) registered, FireEvent detour off ``` ## Container and Panel State Docker: ```text /gp_c2b47a90 running running=true exit=0 oom=false /gp_d8f13411 exited running=false exit=130 oom=false ``` Panel DB: ```text uuid | name | status | slug | port ----------+----------------+---------+--------------+------- c2b47a90 | Test Sunucusu | running | cs2 | 27015 d8f13411 | MukemmelSunucu | stopped | satisfactory | 7777 (2 rows) ``` ## Odd Warnings During the RTTI/vtable/memscan command window, the log briefly reported watchdog stalls outside Conduit context: ```text 2026-06-14 11:50:54 [WARN] watchdog: game thread has not advanced a frame for 509 ms (outside GameFrame) 2026-06-14 11:50:54 [WARN] watchdog: no Conduit context on the game thread — the stall is in engine/game code or an untracked path 2026-06-14 11:51:04 [WARN] watchdog: game thread has not advanced a frame for 585 ms (outside GameFrame) 2026-06-14 11:51:04 [WARN] watchdog: no Conduit context on the game thread — the stall is in engine/game code or an untracked path ``` The server recovered and continued through 141k+ frames. I did not see Conduit/Metamod/signal load failures or crashes in this run.