Repository navigation
v0.2.0-beta.7
Pre-release
Pre-release
A stabilization release: a full audit of code, the live dashboard, the API, and
the docs ahead of wider external testing. Highlights below.
Security
- api: the WebSocket console/logs/files/players/actions/status/mods routes
and the mod-id / mod-update handlers now reject a?cluster=selector that
isn't the local cluster (404). These handlers only ever act on the control
plane's own cluster, but RBAC authorized the namespaced permission against the
caller-supplied?cluster=— so a user bound only to a registered remote
cluster could pass?cluster=<remote>to satisfy RBAC and reach same-named
local servers (RCON/PTY console, mod writes, log/file reads).
Single-cluster installs were unaffected. - operator:
Expose: Hostportnow binds only advertised template ports to
the node — non-advertised admin ports (RCON/query/telnet consoles) are no
longer exposed on the node IP, matching the Service and NetworkPolicy filters.
Fixed
- api: the long-lived SSE
/eventsstream and the WebSocket routes are no
longer force-closed after 60 s by the global request-timeout middleware (which
also spammedsuperfluous response.WriteHeaderinto the API log every
minute). The 60 s deadline still applies to every normal request/response
route. - api:
/modules/catalognever emits"sources": nullfor an
installed-but-uncatalogued module (it serializes[]), which previously
crashed the entire Modules page at render. - web: a
Failedmodule can now be uninstalled — its Uninstall button was
disabled, trapping the user with a broken install and no way to remove it. - agent: the Source-RCON and telnet console clients gained the auth-failure
cooldown the other protocol clients already had — a wrong RCON password is no
longer re-sent on every poller tick (which could self-inflict a Source-engine
sv_rcon_maxfailuresban). Both now wrap the sharedErrAuthsentinel, and
ban/kick reasons reject all control characters, not just CR/LF. - operator:
BackupSchedule.status.lastSuccessfulTimeis now populated from
the newest successful backup (the dashboard "Last run" andkubectl"Last"
columns were always blank); theModulePending path clears a stalePulling
condition;GameServersetPhasestampsobservedGeneration; and the
ModuleSource "indexed N of M" status message no longer goes negative for
git/http/local/upload sources. - chart: the operator (and API) metrics
ServiceMonitors now select a
Service that actually exists and carries the matching
app.kubernetes.io/namelabel — operator metrics, the PrometheusRule alerts,
and the Grafana dashboard were never scraped before. - web: per-node pod counts show
—instead of a fake0/<cap>when the
count is unavailable (matching CPU/memory), plus assorted accessibility labels
and a fix to the cluster page's developer-facing empty-state copy.
Changed
- chart: the
defaultModuleSourcetemplate fallback is nowoci(matching
the shippedvalues.yamldefault) rather thangit.
Docs
- Refreshed stale references: the current version, the 8th (
Cluster) CRD, the
RBAC database tables, the OCI default module source, thetelemetry-receiver
andmcp-servercomponents, the fullModuleSourcetype list, the
architecture diagram's reconcilers, and the changelog link footer. Clarified
that SQLite is the production-tested database driver and Postgres is
experimental (build-tag-gated, work-in-progress).