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

12 KiB

Conduit Linux Accumulated Re-run - 2026-06-15

Scope

  • Pulled all accumulated commits from origin/main.
  • Inspected the changed files and current docs/linux-bringup.md.
  • Rebuilt Conduit on Linux with GCC 12.
  • Deployed to CS2 server Test Sunucusu.
  • Verified the new timer, chat interception, usermessage/chat-send, and console adopt paths.
  • Cleaned temporary test subscriptions/timers/commands.
  • Satisfactory server was not modified.

Git

Previous local HEAD before this run:

bb58461 Phase 2: dynamic console commands + convar access

Pulled commits:

43855ff PLAN: chat ships plain (white) via UTIL_SayTextFilter; color is a follow-up
8afbeec chat: send via UTIL_SayTextFilter again (plain text works; SayText2 shows nothing)
faded69 docs: refresh README (Phase 2 status + what works) and PLAN chat-send entry
18e7970 chat colors: prefer UTIL_SayText2Filter (renders color codes)
1743147 PLAN: chat send visually verified on Windows (msgType 0 = chat); colors pending
4b3d322 PLAN: correct the chat-send entry (native UTIL_SayTextFilter, SDK drift finding)
4ba6019 chat sending: call native UTIL_SayTextFilter instead of building the usermessage
a4af862 Phase 2: usermessages + chat sending (SayText2)
6985830 Phase 2: chat interception (say / say_team)
a375e05 Phase 2: game-thread timers driven by GameFrame
62e4ca0 Close out Linux verification of the Commands & ConVars slice
15cc25e console: track adopted convars under their owner

Diff summary:

 PLAN.md                       |   8 +-
 README.md                     |  17 +++-
 core/CMakeLists.txt           |   3 +
 core/src/conduit/chat.cpp     | 165 ++++++++++++++++++++++++++++++++++++++
 core/src/conduit/chat.h       |  46 +++++++++++
 core/src/conduit/commands.cpp | 131 ++++++++++++++++++++++++++++++
 core/src/conduit/console.cpp  |  23 +++++-
 core/src/conduit/timers.cpp   | 181 ++++++++++++++++++++++++++++++++++++++++++
 core/src/conduit/timers.h     |  47 +++++++++++
 core/src/conduit/usermsg.cpp  | 147 ++++++++++++++++++++++++++++++++++
 core/src/conduit/usermsg.h    |  23 ++++++
 core/src/plugin.cpp           |  16 ++++
 docs/linux-bringup.md         |  76 +++++++++++++++---
 gamedata/core.json            |  15 +++-

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/7] Building CXX object core/CMakeFiles/conduit.dir/src/conduit/timers.cpp.o
[2/7] Building CXX object core/CMakeFiles/conduit.dir/src/conduit/commands.cpp.o
[3/7] Building CXX object core/CMakeFiles/conduit.dir/src/conduit/usermsg.cpp.o
[4/7] Building CXX object core/CMakeFiles/conduit.dir/src/conduit/console.cpp.o
[5/7] Building CXX object core/CMakeFiles/conduit.dir/src/conduit/chat.cpp.o
[6/7] Building CXX object core/CMakeFiles/conduit.dir/src/plugin.cpp.o
[7/7] Linking CXX shared library package/addons/conduit/bin/conduit.so

Only warning observed:

/root/codex/Conduit/core/src/conduit/commands.cpp:521:13: warning: compound assignment with volatile-qualified left operand is deprecated [-Wvolatile]

No failed CMake/Ninja output exists because the build passed.

Deploy And Load

Deployed:

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

To:

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

Load checks:

--- meta list ---
Listing 1 plugin:
  [01] Conduit (0.1.0-dev) by Conduit Contributors

--- conduit_status ---
Conduit 0.1.0-dev
  uptime      : 73.6 s
  game frames : 3983
  log file    : /home/steam/cs2-dedicated/game/csgo/addons/conduit/logs/conduit-20260615.log
  crash report: armed (use conduit_crash_test to verify)

Gamedata and usermessage function resolution:

--- conduit_gamedata ---
gamedata: 1 files, 2 signatures, 0 offsets
  [ok]     UTIL_SayText2Filter              server       0x7fd2de250b30 (core.json)
  [ok]     UTIL_SayTextFilter               server       0x7fd2de2508d0 (core.json)

--- conduit_usermsg ---
[Conduit] [INFO] usermsg: chat sending live via UTIL_SayTextFilter (0x7fd2de2508d0) - plain text, no color yet
usermessages: chat sending live (SayText2 resolved, SayText resolved)

Startup log:

2026-06-15 10:50:26 [INFO] gamedata: 1 files loaded: 2 signatures, 0 offsets, all valid
2026-06-15 10:50:27 [INFO] entity: armed via CGameEntitySystem vtable 0x7fd2dec4ffd8
2026-06-15 10:50:27 [INFO] gameevents: armed via CGameEventManager vtable 0x7fd2dec50f50
2026-06-15 10:50:27 [INFO] chat: ready - hook installs on first subscriber
2026-06-15 10:50:27 [INFO] core: Conduit 0.1.0-dev loaded - crash reporter armed, profiler on
2026-06-15 10:50:27 [INFO] gameevents: game event manager connected (0x7fd2defd0460)
2026-06-15 10:50:37 [INFO] core: first GameFrame observed - hook dispatch confirmed

Entity system still resolves on Linux at GameResourceServiceServerV001+0x50:

--- conduit_entity ---
[Conduit] [INFO] entity: entity system connected (0x7fd2da446000) via GameResourceServiceServerV001+0x50 - vtable matches CGameEntitySystem
entity system: connected
  slot  0  cs_player_controller   team=2  pawn=player health=100
  slot  1  cs_player_controller   team=3  pawn=player health=100

Timer Tests

Schedule/list:

--- conduit_timer_after 2 ---
[Conduit] one-shot timer #1 scheduled in 2.00 s
--- conduit_timer_every 1 ---
[Conduit] repeating timer #2 every 1.00 s (stops after 5)
--- conduit_timers ---
timers: 2 active
  #1  owner=timer_test       once    next in 1938 ms
  #2  owner=timer_test       repeat  next in 969 ms

Log block:

2026-06-15 10:51:55 [INFO] timer_test: repeat timer tick 1
2026-06-15 10:51:56 [INFO] timer_test: one-shot timer fired
2026-06-15 10:51:56 [INFO] timer_test: repeat timer tick 2
2026-06-15 10:51:57 [INFO] timer_test: repeat timer tick 3
2026-06-15 10:51:58 [INFO] timer_test: repeat timer tick 4
2026-06-15 10:51:59 [INFO] timer_test: repeat timer tick 5
2026-06-15 10:51:59 [INFO] timer_test: repeat timer self-cancelled after 5 ticks

After firing:

--- conduit_timers ---
timers: 0 active
--- conduit_prof ---
timer_test           timer                                 6    71.5us   131.1us   131.1us   101.4us    429.0us

Group cancel:

--- conduit_timer_every 1 ---
[Conduit] repeating timer #3 every 1.00 s (stops after 5)
--- conduit_timer_after 30 ---
[Conduit] one-shot timer #4 scheduled in 30.00 s
--- conduit_timers ---
timers: 2 active
  #3  owner=timer_test       repeat  next in 937 ms
  #4  owner=timer_test       once    next in 29969 ms
--- conduit_timer_stop ---
[Conduit] cancelled 2 test timer(s)
--- conduit_timers ---
timers: 0 active

Result: timers passed, including self-cancel from inside callback and owner group cancel.

Chat Interception Tests

RCON output:

--- conduit_chat ---
chat: 0 subscriber(s), interception hook off
--- conduit_chat_listen ---
[Conduit] [INFO] chat: 'chat_test' subscribed to chat
[Conduit] listening to chat
--- conduit_chat ---
chat: 1 subscriber(s), interception hook on
  owner=chat_test        hits=0
--- say "hello from server" ---
[Conduit] [INFO] chat_test: say slot=-1: "hello from server"
[All Chat][Console (0)]: "hello from server"
L 06/15/2026 - 10:53:03: "Console<0>" say ""hello from server""
--- say "this has badword inside" ---
[Conduit] [INFO] chat_test: say slot=-1: "this has badword inside"  [SUPPRESSED]
--- say_team "x" ---
[Conduit] [INFO] chat_test: say_team slot=-1: "x"
--- conduit_prof ---
chat_test            chat                                  3    97.0us   131.1us   131.1us   127.4us    290.9us

Conduit log:

2026-06-15 10:53:03 [INFO] chat: 'chat_test' subscribed to chat
2026-06-15 10:53:03 [INFO] chat_test: say slot=-1: "hello from server"
2026-06-15 10:53:03 [INFO] chat_test: say slot=-1: "this has badword inside"  [SUPPRESSED]
2026-06-15 10:53:03 [INFO] chat_test: say_team slot=-1: "x"

The suppressed badword message did not echo as [All Chat] in the RCON output.

Cleanup:

--- conduit_chat_stop ---
[Conduit] removed 1 chat subscriber(s)
--- conduit_chat ---
chat: 0 subscriber(s), interception hook off
--- say "after stop visible" ---
[All Chat][Console (0)]: "after stop visible"
L 06/15/2026 - 10:53:20: "Console<0>" say ""after stop visible""
--- conduit_chat ---
chat: 0 subscriber(s), interception hook off

Result: chat interception, suppression, say_team distinction, profiler scope, and hook removal all passed.

Chat Sending / UserMessages

Commands:

--- conduit_usermsg ---
usermessages: chat sending live (SayText2 resolved, SayText resolved)
--- conduit_say linux broadcast test ---
[Conduit] PrintToAll sent
--- conduit_say_player 0 private_ping ---
[Conduit] PrintToPlayer(0) sent
--- conduit_usermsg ---
usermessages: chat sending live (SayText2 resolved, SayText resolved)

Result: Linux signatures resolve and native send calls return sent. This verifies the server-side path and no crash. I cannot visually confirm client rendering from this environment; per latest plan this path sends plain white text through UTIL_SayTextFilter.

Console Adopt Fix

This re-tested the previously observed adopted-convar listing issue.

--- 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_cvar conduit_demo_value 42 ---
[Conduit] set 'conduit_demo_value' = '42'
[Conduit] conduit_demo_value = 42  (int=42 float=42.000 bool=1)
--- conduit_concmd_stop ---
[Conduit] removed 2 demo registration(s)
--- 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), 1 plugin convar(s)
  cmd  conduit_demo                 owner=console_demo
  cvar conduit_demo_value           owner=console_demo  value=42

Final cleanup:

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

Result: adopt tracking is fixed. Adopted convar now appears under 1 plugin convar(s) and owner cleanup removes 2 registrations.

Final Runtime State

--- conduit_status ---
Conduit 0.1.0-dev
  uptime      : 248.6 s
  game frames : 15184
  log file    : /home/steam/cs2-dedicated/game/csgo/addons/conduit/logs/conduit-20260615.log
  crash report: armed (use conduit_crash_test to verify)
--- conduit_timers ---
timers: 0 active
--- conduit_chat ---
chat: 0 subscriber(s), interception hook off
--- conduit_events ---
game events: manager connected, 0 subscription(s), 0 event(s) registered, FireEvent detour off
--- conduit_usermsg ---
usermessages: chat sending live (SayText2 resolved, SayText resolved)

Final profiler:

engine               GameFrame                         13848    2.77ms    4.19ms    8.39ms   39.34ms     38.34s
timer_test           timer                                 6    71.5us   131.1us   131.1us   101.4us    429.0us
chat_test            chat                                  3    97.0us   131.1us   131.1us   127.4us    290.9us
core                 SchemaFindField                       3    13.2us     8.2us    32.8us    31.7us     39.5us

Final Server 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)

Notes

  • No Conduit/Metamod/signal-specific load failure or crash was observed.
  • Server console contained ordinary CS2/Steam/map warnings and warmup long-frame messages.
  • No watchdog stall block appeared during this run.
  • CS2 panel status was stopped after Docker restart; I updated only the CS2 row back to running. Satisfactory remained stopped.