|
1 | 1 | // SPDX-License-Identifier: PMPL-1.0-or-later |
2 | | -= Game Server Admin — Show Me The Receipts |
3 | | -:toc: |
4 | | -:icons: font |
| 2 | += EXPLAINME — Game Server Admin |
5 | 3 |
|
6 | | -The README makes claims. This file backs them up. |
| 4 | +== "Universal game server probe, configuration management, and administration" |
7 | 5 |
|
8 | | -== Claim: "Probes any game server" |
| 6 | +[quote, README] |
| 7 | +____ |
| 8 | +GSA can attach to any game server, fingerprint it via protocol probing, extract its configuration into A2ML format, and provide a rich GUI for viewing, editing, and tracking config changes with full provenance. |
| 9 | +____ |
9 | 10 |
|
10 | | -**Where the code is:** `src/interface/ffi/src/probe.zig` |
| 11 | +The probe engine uses table-driven port scanning with protocol-specific handshakes (Steam A2S_INFO, Minecraft ping, RCON, HTTP, raw TCP) to fingerprint servers against the game profile registry. |
| 12 | +Extracted configs are serialised into A2ML and stored in a dedicated VeriSimDB instance (port 8090) as octads with 8 modalities. |
| 13 | +See `src/interface/ffi/src/probe.zig` for the probe implementation and `profiles/*.a2ml` for game definitions. |
11 | 14 |
|
12 | | -**How it works:** Table-driven port scanning with protocol-specific handshakes. For each open port, the probe engine tries Steam A2S_INFO query, Minecraft server list ping, RCON handshake, HTTP probe, and raw TCP banner grab — in that order. The first successful match is looked up against the game profile registry (`profiles/*.a2ml`) by fingerprint pattern. |
| 15 | +**Caveat:** "Any" means any game with a known `.a2ml` profile -- unknown games get best-effort fingerprinting but no structured config extraction. Lua table parsing handles simple key-value patterns but not deeply nested tables. VeriSimDB normaliser regeneration is partially stubbed (5/6 strategies return `[regenerated]`). |
13 | 16 |
|
14 | | -**Caveat:** "Any" means any game with a known profile. Unknown games get a best-effort fingerprint but no structured config extraction. Adding a new game requires writing a `.a2ml` profile — there is no fully automatic config schema discovery. |
15 | | - |
16 | | -== Claim: "Extracts config into A2ML" |
17 | | - |
18 | | -**Where the code is:** `src/interface/ffi/src/config_extract.zig` and `src/interface/ffi/src/a2ml_emit.zig` |
19 | | - |
20 | | -**How it works:** Config files are fetched via SSH (`cat`), container exec, or RCON commands. The raw text is parsed according to the detected format (XML, INI, JSON, ENV, YAML, TOML, Lua). The parsed fields are then serialised into A2ML `@server/@config/@field` blocks using the game profile's field definitions as metadata overlay. |
21 | | - |
22 | | -**Caveat:** Format detection is heuristic — ambiguous files may be misclassified. Lua table parsing handles simple key-value patterns but not deeply nested tables or computed values. |
23 | | - |
24 | | -== Claim: "Rich GUI via Gossamer" |
25 | | - |
26 | | -**Where the code is:** `src/gui/` (16 files — host.html + 7 panel pairs) |
27 | | - |
28 | | -**How it works:** Gossamer creates a native webview window with Ephapax linear types enforcing resource lifecycle. The IPC bridge exposes `window.gossamer.*` functions that call through to the Zig FFI layer. Each of the 7 panels is a self-contained HTML page with JavaScript calling the bridge. |
29 | | - |
30 | | -**Caveat:** Gossamer is currently Linux-only (GTK3 + WebKitGTK). macOS and Windows support is Phase 2. The GUI requires a running VeriSimDB instance to display data. |
31 | | - |
32 | | -== Claim: "VeriSimDB underpinning" |
33 | | - |
34 | | -**Where the code is:** `src/interface/ffi/src/verisimdb_client.zig`, `container/verisimdb/` |
35 | | - |
36 | | -**How it works:** A dedicated VeriSimDB instance (port 8090) stores each managed server as an octad with all 8 modalities populated. Config changes are recorded in the temporal modality with provenance tracking. Drift detection runs every 15 seconds, comparing stored vs live config to flag divergence. |
37 | | - |
38 | | -**Caveat:** Per the VeriSimDB production readiness assessment, normaliser regeneration is partially stubbed (5/6 strategies return `[regenerated]`), and federation is unimplemented. These limitations do not affect single-instance GSA usage. |
39 | | - |
40 | | -== Claim: "Panels in the Clade system" |
41 | | - |
42 | | -**Where the code is:** `panel-clades/` (9 clade directories + game profile children) |
43 | | - |
44 | | -**How it works:** Each panel declares a clade A2ML file with `inherits-from` pointing to the parent. CladeBrowserEngine resolves traits via recursive OR-merge up the inheritance chain. New game profiles in `profiles/*.a2ml` automatically generate child clades under `gsa-game`, extending the cladogram without manual registration. |
45 | | - |
46 | | -**Caveat:** The `just generate-clades` recipe must be run after adding new profiles. The cladogram does not auto-extend at runtime — it's a build-time operation reflected in static A2ML files. |
47 | | - |
48 | | -== Technology Stack |
49 | | - |
50 | | -[cols="1,1,2"] |
| 17 | +[cols="1,2"] |
51 | 18 | |=== |
52 | | -| Layer | Language | Purpose |
53 | | - |
54 | | -| ABI | Idris2 | Formal type specs with dependent type proofs |
55 | | -| FFI | Zig | C-compatible implementation (probe, parse, emit) |
56 | | -| Core | Ephapax | Linear type enforcement for Gossamer lifecycle |
57 | | -| GUI | HTML/JS | Panel frontends in Gossamer webview |
58 | | -| Data | VeriSimDB (Rust) | 8-modality database with drift detection |
59 | | -| Orchestration | VeriSimDB (Elixir) | OTP supervision (in dedicated instance) |
| 19 | +| Path | Proves |
| 20 | + |
| 21 | +| `src/interface/ffi/src/probe.zig` | Protocol fingerprinting and game detection |
| 22 | +| `src/interface/ffi/src/config_extract.zig` | Config fetching via SSH, container exec, or RCON |
| 23 | +| `src/interface/ffi/src/a2ml_emit.zig` | A2ML serialisation from parsed configs |
| 24 | +| `src/interface/abi/` | Idris2 formal type specs for ABI |
| 25 | +| `src/gui/` | 7 Gossamer panels (HTML/JS) with IPC bridge |
| 26 | +| `src/interface/ffi/src/verisimdb_client.zig` | VeriSimDB client for octad storage and drift detection |
| 27 | +| `panel-clades/` | 9 clade directories with A2ML inheritance |
| 28 | +| `profiles/*.a2ml` | Game profile definitions (17 initial games) |
60 | 29 | |=== |
0 commit comments