RC-7
release-tag / release-image (push) Failing after 2m44s

This commit is contained in:
2026-08-11 16:58:07 +02:00
parent 185ccf1101
commit bcfbef390f
44 changed files with 4778 additions and 172 deletions
+41
View File
@@ -28,3 +28,44 @@ The USD figure is a local safety estimate based on provider-reported usage and p
## Browser headers
Responses include CSP with `script-src 'self'`, `frame-ancestors 'none'`, `X-Frame-Options: DENY`, HSTS, `nosniff`, no-referrer, restricted browser permissions, and no-store caching for auth/admin resources.
## Hosted Customer Service trust boundaries (V4.1)
The optional Customer Service is a separate control plane. Treat its listeners
as three different trust zones: 8090 public customer portal, 8091 private/VPN
admin, and 8092 Docker-network-only worker registration/lease. The game private
listener on 8081 is also required for delegation and must not be exposed to the
public Internet.
`CUSTOMER_SERVICE_SHARED_SECRET` authenticates Customer Service to the game
private API. Example/default-looking values are rejected by the Customer Service
process. Customer reward ownership uses a one-shot 10-minute `nhlink_*` proof
issued only to an already authenticated game identity. The game stores only a
SHA-256 hash of that proof and consumes it atomically, so Customer Service never
needs the main P-256 private key.
V4.1 uses three separate runtime images. The public game image contains only the
game binary, the Customer Service image contains only the commercial control
plane, and managed workers contain only the CLI agent. This reduces accidental
cross-role exposure compared with the former monolithic runtime image.
`CS_WORKER_IMAGE` is treated as an operator-controlled image reference. If
`CS_WORKER_AUTO_PULL=true`, Customer Service may ask Docker Engine to pull it.
For a private registry, use a registry-scoped read-only deploy/robot token in
`CS_WORKER_REGISTRY_USERNAME/PASSWORD`; those credentials are used only for the
Docker `X-Registry-Auth` pull request and are never injected into worker
containers. Pinning production workers to an immutable digest is recommended
when your registry/deployment workflow supports it.
Managed worker containers never receive the Docker socket. The Customer Service
process itself does require Docker Engine control; a direct docker.sock mount is
therefore a high-trust capability and should preferably be replaced with a
narrowly permissioned socket proxy in production. Global and per-customer worker
inventory/running limits are enforced even when reverse-proxy rate limits are
configured separately.
PayPal live mode is deliberately gated, manual credit grants are disabled by
default and available only from the private Customer Service admin listener,
and all credit changes are written to an idempotent ledger. These controls are
operational safeguards, not a legal classification of the commercial product.