Commit Graph
131 Commits
Author SHA1 Message Date
Nomads_Reach 8d776100bc ops: trigger runner fleet deployment 2026-08-18 14:15:27 -04:00
Nomads_Reach 97f69d966d ops: expose deployment run on draft PR 2026-08-18 14:14:57 -04:00
Nomads_Reach 343bc9dd49 ops: deploy runner scheduler and fleet 2026-08-18 14:13:57 -04:00
Nomads_ReachandGitHub bbd6d93e8d Merge pull request #26 from G-A-R-D-E-N/chore/harden-selfhosted-runner
Acceptance (end-to-end TCP) / End-to-end TCP acceptance (push) Canceled after 0s
Acceptance (end-to-end TCP) / End-to-end TCP acceptance (pull_request) Canceled after 0s
CSharp Server Gate / Repository policy, C# build and test (push) Canceled after 0s
GNS Transport Bridge / Linux native GNS bridge (push) Canceled after 0s
CSharp Server Gate / Repository policy, C# build and test (pull_request) Canceled after 0s
GNS Transport Bridge / Linux native GNS bridge (pull_request) Canceled after 0s
Host GUI (Avalonia) / Build Avalonia host (push) Canceled after 0s
Host GUI (Avalonia) / Build Avalonia host (pull_request) Canceled after 0s
Chore/harden selfhosted runner
2026-08-17 18:10:30 -04:00
Nomads_Reach 9c5c16caf8 Disable Git credential helpers during Gitea sync 2026-08-17 16:02:56 -04:00
Nomads_Reach 30142c9706 Move Gitea sync to isolated trusted runner and stop persisting token 2026-08-17 15:52:19 -04:00
Nomads_Reach 7b4acf61d5 Pin CO-SERVER publish actions and reduce artifact retention 2026-08-17 15:52:05 -04:00
Nomads_Reach 3353726aef Harden CO-SERVER host build runner 2026-08-17 15:51:56 -04:00
Nomads_Reach 6f1e7d8f99 Route GNS build to isolated CO-SERVER runner 2026-08-17 15:51:49 -04:00
Nomads_Reach e1d894e828 Harden CO-SERVER build runner selection 2026-08-17 15:51:40 -04:00
Nomads_Reach f8bd621f18 Route acceptance to isolated CO-SERVER runner 2026-08-17 15:51:31 -04:00
Nomads_ReachandGitHub ece634450b Acceptance: load/fault tier — 16/32/64 clients, burst, churn, handoff-under-load (#15) (#24)
* Acceptance: add the load/fault tier (16/32/64 clients, burst, churn, handoff)

Extend the end-to-end harness (issue #15), harness-only — no server change.
Uses the existing ServerTuning seam to widen the local connect budget and
capacity so many clients can run over a single loopback IP.

- 16/32/64 clients across distinct cells: unique server-owned ids and no
  cross-cell transform spam (generalized from the prior 16-client case)
- burst transform traffic engages the rate limiter without tearing sessions
  down, and the server still relays a fresh transform afterward
- reconnect churn (12 cycles): ids stay monotonic and never reused, and each
  disconnect leaves no stale active session
- authority handoff stays deterministic under churn: retiring the current
  authority repeatedly hands off to the next lowest id with strictly
  increasing epochs

Packet loss/reorder on snapshot traffic is inherently an unreliable-transport
(GNS) property and stays deferred with the GNS sections (blocked on #2).

26/26 pass on real sockets, deterministic across repeated runs.

* Strip verbose comments from the acceptance harness and ServerTuning

Remove the prose/narration comments across the end-to-end harness (keeping only
section dividers) and the ServerTuning header block, matching the repo's terse
comment style.
2026-08-16 20:24:16 -04:00
Nomads_ReachandGitHub 098cf34355 Run the Gitea sync workflow on the self-hosted runner (#23)
Acceptance (end-to-end TCP) / End-to-end TCP acceptance (push) Canceled after 0s
CSharp Server Gate / Repository policy, C# build and test (push) Canceled after 0s
GNS Transport Bridge / Linux native GNS bridge (push) Canceled after 0s
Host GUI (Avalonia) / Build Avalonia host (push) Canceled after 0s
Acceptance (end-to-end TCP) / End-to-end TCP acceptance (pull_request) Canceled after 0s
CSharp Server Gate / Repository policy, C# build and test (pull_request) Canceled after 0s
GNS Transport Bridge / Linux native GNS bridge (pull_request) Canceled after 0s
Host GUI (Avalonia) / Build Avalonia host (pull_request) Canceled after 0s
GitHub-hosted runners are billing-blocked for this org, so the hosted
open-gitea-pr job never started (empty logs, immediate failure on every push
to main). Retarget it to [self-hosted, Linux, X64] like the other workflows;
the runner has LAN access to the Gitea host, and this workflow only fires on
push to main, so it never runs untrusted fork PR code.
2026-08-16 20:07:37 -04:00
Nomads_ReachandGitHub 51d35c935b Acceptance: finish combat rejection set and add NPC authority handoff (#22)
Extend the end-to-end harness (issue #15), harness-only — no server change:

Combat validation
- replayed/out-of-order combat sequence rejected and not routed
- combat hit at a disconnected target rejected
- out-of-interest combat hit rejected and not delivered

NPC authority handoff
- disconnect deterministically hands off to a new owner with a newer epoch
- cell transition hands off scope authority and the previous owner can no longer
  submit npcState for the reassigned scope

21/21 pass on real sockets, deterministic across repeated runs.
2026-08-16 19:56:38 -04:00
Nomads_ReachandGitHub f5d8261130 Expand the acceptance matrix: movement, combat, NPC authority, timeouts, 16 clients (#21)
Add a small injected ServerTuning seam (production defaults unchanged; ServerRuntime
still constructs the server without it) so end-to-end cases can use short timeouts
and a wider local connect budget.

New real-transport acceptance cases:
- impossible movement rejected, position-corrected, and not relayed
- self-targeted combat hit rejected and not routed
- independent populated scopes receive independent NPC authorities
- a stale/wrong NPC authority epoch is rejected over transport
- idle timeout closes a stale active session
- multi-client no-cross-cell-spam scaled to 16 clients (widened local connect budget)

16/16 pass on real sockets, deterministic across repeated runs.
2026-08-16 19:44:28 -04:00
Nomads_ReachandGitHub 6edc16ed20 Add an end-to-end TCP acceptance harness (issue #15) (#20)
Stand up the real AuthoritativeServer behind the real TCP transport on a
loopback port and drive real SyntheticProtocolClient sockets through it, so the
matrix is exercised over an actual connection rather than in-memory fakes.

Covers the baseline-protocol, TCP-compatibility, and interest-management
sections: welcome->hello->sessionReady handshake, unique/non-spoofable
server-owned ids, malformed and oversized rejection before mutation, rate-limit
tripping, transform/playerState/worldState relay, action events not
replay-cached to late joiners, disconnect/reconnect leaving no stale session,
same-cell relay vs distant interest filtering, multi-client no cross-cell spam,
and handshake-timeout reaping.

The harness runs for real wherever loopback TCP can bind (dev machines, the
self-hosted runner) and skips cleanly otherwise. Wired into a self-hosted CI
job gated by the runtime-policy guard. 60s idle-timeout, 32/64-client load /
packet-loss / reconnect-churn, and GNS sections remain follow-ups.
2026-08-16 19:17:08 -04:00
Nomads_ReachandGitHub 2b5a8c4dcb Use the official Commonwealth Online emblem for the host logo (#19)
Replace the placeholder header image with the brand emblem from the mod
repo's Branding/ set (downscaled to 512px, transparency preserved), and set
it as the window/taskbar icon.
2026-08-16 18:52:46 -04:00
Nomads_ReachandGitHub ea275210cd Restyle the Avalonia server host and add a single-file publish workflow (#18)
Give the host a cohesive vault-terminal look: header wordmark with a live
status pill that glows green while running, sectioned configuration card with
per-field labels, a terminal-style server log, richer player rows (id, name,
address, packet counts), and a bold Start/Stop control bar. All existing
bindings are unchanged.

Add publish-host.yml to build self-contained, single-file win-x64 and
linux-x64 binaries on the self-hosted runner and upload them as artifacts,
and document the untrimmed publish commands in the host README.
2026-08-16 18:47:14 -04:00
Nomads_ReachandGitHub 2f6100907f Merge pull request #17 from G-A-R-D-E-N/feature/avalonia-host
Avalonia host GUI (replaces the Qt host)
2026-08-16 18:32:03 -04:00
Nomads_ReachandGitHub 88bc2baf84 Merge pull request #10 from G-A-R-D-E-N/rewrite/csharp-server
Rewrite/csharp server
2026-08-16 18:30:58 -04:00
NomadsReach 4c6f0ccd06 Skip GNS live-socket tests when the environment has no socket
The self-hosted CI runner is network-isolated, so co_gns_server_create can't
bind a UDP listen socket and the two live tests hard-failed. Treat that
specific condition as a skip (exit 0 with a SKIP notice) instead of a failure;
the bridge is still exercised in full wherever a socket can be created.
2026-08-16 18:27:36 -04:00
NomadsReach 0accc17b66 Retire the Qt/C++ host; ship the Avalonia host
Delete the Qt host (src/, cmake/, CMakeLists.txt, find-qt.bat, check-setup.bat,
build.bat, deploy.bat) now that the Avalonia host in host/ covers it on the same
dotnet toolchain. Add a self-hosted host-build CI job and a host README, and
rewrite the top-level README for the C# server + Avalonia host layout.
2026-08-16 18:24:14 -04:00
NomadsReach 16c101a4bc Launcher milestone 2: player list, kick/ban, live stats
Adds an admin-protocol client (token-authed TCP JSON on 127.0.0.1:AdminPort,
reusing the server's .admin-token) that polls connected players and status
every 3s, plus Kick/Ban on the selected player and a players/uptime readout.
2026-08-16 18:22:03 -04:00
NomadsReach 1f01e68794 Add Avalonia server-host launcher (MVP scaffold)
Cross-platform C# GUI to replace the Qt/C++ Host GUI, on the same dotnet
toolchain as the server. MVP: load/save commonwealth-server.json, Start/Stop
the CommonwealthOnline.Server process (published exe, then dll, then source
run), and stream its output to a live log. Themed to the Commonwealth Online
brand (near-black + amber). Builds clean on net8.0.

Next: player list + kick/ban via the admin port, then retire the Qt host.
2026-08-16 18:15:40 -04:00
NomadsReach 6861fa4276 Print the co_gns_server_create failure reason in the bridge test
The bare assert hid why server creation fails on the CI runner. Emit the
error buffer to stderr before asserting so the cause is visible in logs.
2026-08-16 17:51:49 -04:00
NomadsReach f1a7876770 Move DOTNET_INSTALL_DIR to step scope (runner context invalid at job env)
The job-level env used runner.tool_cache, which isn't available until a
runner is assigned, so the workflow failed to parse. Set it on the
setup-dotnet step, where the runner context is valid.
2026-08-16 17:46:35 -04:00
NomadsReach 9c4580daaf Install the pinned .NET SDK to a runner-writable dir on self-hosted CI
setup-dotnet defaulted to /usr/share/dotnet, which the runner user cannot
write to (Permission denied). Point DOTNET_INSTALL_DIR at runner.tool_cache
so the 8.0 SDK installs into a writable, cached location.
2026-08-16 17:43:16 -04:00
NomadsReach 48ee0da01f Fix C# gate: compile error, validator int handling, policy hits, GNS deps
- GnsTransport.cs: drop the illegal fixed statement on native.Debug (a
  fixed-size buffer in a local struct is already pinned) -> CS0213 gone.
- ProtocolCore.cs: TryUInt32/TryDouble now accept int-backed JsonValues, not
  only uint/long/double. Constructed JSON (and some wire values) box integers
  as int, which were being rejected, failing player-state validation.
- MainWindow.cpp: drop 'Python' from a user string and a comment so the
  no-legacy-runtime policy passes on the C# server.
- gns-transport.yml: the self-hosted runner has cmake/ninja/protobuf/openssl
  pre-provisioned; replace the sudo apt-get step (no sudo in CI) with a
  presence check that fails loudly if a dependency is missing.

Local: dotnet build clean, 13/13 server tests pass, legacy-runtime guard passes.
2026-08-16 17:40:31 -04:00
NomadsReach ff5c6d883a Run the GNS bridge job on the self-hosted runner instead of GitHub-hosted
The ubuntu-latest job cannot start while GitHub-hosted minutes are
billing-blocked. Target the self-hosted Linux x64 runner, matching the
rest of the CI (csharp-server.yml, CO-BETA/beta-ci.yml).
2026-08-16 16:51:10 -04:00
Nomads_Reach 5e8df12b70 Run runtime policy first on self-hosted gate 2026-08-16 02:58:42 -04:00
Nomads_Reach 512f8717ea Run legacy runtime guard on every push and PR 2026-08-16 02:58:01 -04:00
Nomads_Reach 7267782084 Centralize legacy runtime checks in Linux validation 2026-08-16 02:57:42 -04:00
Nomads_Reach 6282323b12 Reject prohibited artifacts during CMake staging 2026-08-16 02:57:34 -04:00
Nomads_Reach 1fbfc3a51b Strengthen packaged server artifact checks 2026-08-16 02:57:12 -04:00
Nomads_Reach a788b5c076 Remove legacy runtime wording from Windows build 2026-08-16 02:57:00 -04:00
Nomads_Reach 6eee5354ea Remove legacy runtime wording from deployment docs 2026-08-16 02:56:47 -04:00
Nomads_Reach e9e4d79e62 Remove legacy runtime references from server docs 2026-08-16 02:56:40 -04:00
Nomads_Reach 4e942dfb6f Remove legacy runtime references from root docs 2026-08-16 02:56:28 -04:00
Nomads_Reach 14e9d439e3 Add repository legacy runtime guard 2026-08-16 02:56:18 -04:00
Nomads_Reach 6e2db7934c Fix C# test restore in Linux checks 2026-08-16 02:39:01 -04:00
Nomads_Reach 55b9c178b3 Fix C# test restore in Windows build 2026-08-16 02:38:52 -04:00
Nomads_Reach 377fe2754b Fix C# test restore in CI 2026-08-16 02:38:42 -04:00
Nomads_Reach 757e614cdd Complete C# server cutover 2026-08-16 02:36:32 -04:00
Nomads_Reach ddadf87423 Add C# dedicated server replacement 2026-08-16 02:23:04 -04:00
Nomads_Reach 0024436ce8 Test GNS-aware dedicated server config handoff 2026-08-16 01:06:55 -04:00
Nomads_Reach ad18858551 Add GNS-aware dedicated server entrypoint 2026-08-16 01:06:46 -04:00
Nomads_Reach 3d73d51331 Use transport-aware server entrypoint 2026-08-16 00:58:15 -04:00
Nomads_Reach 535fd40770 Gate GNS config persistence 2026-08-16 00:50:30 -04:00
Nomads_Reach f478db83ec Document opt-in GNS server config 2026-08-16 00:49:38 -04:00
Nomads_Reach dd6f47c61b Test GNS config persistence and validation 2026-08-16 00:49:24 -04:00