Phase3
Some checks failed
CI / Node — lint, typecheck, test, build (push) Failing after 9s
CI / Go — node-agent tests (push) Failing after 9s
CI / Go — edge-gateway build (push) Successful in 13s

This commit is contained in:
smueller
2026-06-26 12:17:26 +02:00
parent c4077d4673
commit 9b061c3ee7
92 changed files with 4128 additions and 146 deletions

View File

@@ -2,33 +2,32 @@
Last updated: 2026-06-26
## Current phase: Phase 2Single-Node Vertical Slice
## Current phase: Phase 3Console, files, settings
### Phase 2 completed
### Phase 3 completed
| Area | Status | Notes |
|------|--------|-------|
| Prisma lifecycle models | Done | Allocations, server fields, node enrollment |
| `@hexahost/contracts` servers | Done | Zod schemas for create/list/action |
| API ServersModule | Done | CRUD, start/stop, BullMQ jobs |
| API NodesModule | Done | WebSocket `/api/v1/nodes/ws`, Redis command bridge |
| API Plans | Done | `GET /api/v1/plans` |
| Admin nodes | Done | `POST /api/v1/admin/nodes` with enrollment token |
| Worker provisioning | Done | Port allocation, Redis commands, response wait |
| Worker lifecycle | Done | start-server, stop-server jobs |
| Go node-agent | Done | WebSocket, Docker (`itzg/minecraft-server:java21`) |
| Web server UI | Done | Create, list, detail, start/stop |
| Dev seed | Done | `pnpm db:seed` — Free plan + local dev node |
| Migrations | Done | `20260626140000_phase2_game_servers` |
| Go agent v0.3 | Done | Log stream, RCON commands, safe file I/O |
| `@hexahost/contracts` phase 3 | Done | console, files, properties, players |
| API NodeBridge | Done | Sync request/response over Redis |
| API Console | Done | Token + WS `/api/v1/servers/:id/console/ws` |
| API Files | Done | List, read, write with path validation |
| API Properties | Done | GET/PATCH `server.properties` |
| API Players | Done | Online list + whitelist |
| API Restart | Done | `POST /servers/:id/restart?skip=true` |
| Audit events | Done | console.command, file.write, properties.update |
| Web server tabs | Done | Console, files, properties, players |
| Unit tests | Done | Properties parser, path validation, route contracts |
### Abnahmekriterium Phase 2
### Abnahmekriterium Phase 3
- [x] User creates server in web panel
- [x] Provisioning pipeline (API → Worker → Agent)
- [x] Start/stop lifecycle
- [x] Node enrollment + heartbeat
- [x] Connection address shown (`localhost:port`)
- [ ] Manual Minecraft join validation (requires Docker + agent running locally)
- [x] Live console WebSocket (logs + commands when RUNNING)
- [x] File manager (list/read/write, path sandbox)
- [x] `server.properties` editor with restart option
- [x] Player list + whitelist view
- [x] Server management fully via web panel (no direct host access required)
- [ ] Manual E2E validation (requires Docker + agent running locally)
### Local vertical slice
@@ -46,17 +45,49 @@ set NODE_AGENT_PUBLIC_URL=ws://localhost:3001/api/v1/nodes/ws
make run
```
1. Create and start a server under `/servers/new`
2. Open **Console** tab — live logs, send commands via RCON
3. Open **Files** — browse server directory, edit files
4. Open **Properties** — change `server.properties`, optional restart
5. Open **Players** — online players and whitelist
### Known limitations
- Single-node only (no scheduler/queue fairness yet).
- Minecraft image pull on first provision can take several minutes.
- Node agent on Windows needs Docker Desktop; run agent on host, not in Compose.
- mTLS for agent deferred; token-based enrollment only.
- Metrics are basic heartbeat payload only.
- Console only when server status is `RUNNING`; files readable when `RUNNING` or `STOPPED`.
- RCON via `rcon-cli` inside Minecraft container (itzg image).
- File writes limited to server data directory; no upload/download archives yet (Phase 4).
- Player management read-only (whitelist view); add/remove deferred.
- Single-node only; no scheduler fairness yet.
### Next phase: Phase 3 — Console, files, settings
---
- Live console WebSocket
- File manager
- server.properties editor
- Player lists
## Phase 2 — Single-Node Vertical Slice ✅
| Area | Status | Notes |
|------|--------|-------|
| Prisma lifecycle models | Done | Allocations, server fields, node enrollment |
| `@hexahost/contracts` servers | Done | Zod schemas for create/list/action |
| API ServersModule | Done | CRUD, start/stop, BullMQ jobs |
| API NodesModule | Done | WebSocket `/api/v1/nodes/ws`, Redis command bridge |
| Worker provisioning | Done | Port allocation, Redis commands, response wait |
| Go node-agent v0.2 | Done | WebSocket, Docker (`itzg/minecraft-server:java21`) |
| Web server UI | Done | Create, list, detail, start/stop |
| Migration | Done | `20260626140000_phase2_game_servers` |
---
## Phase 1 — Authentication ✅
Session cookies, register/login/logout, email verify, password reset, TOTP 2FA, recovery codes, audit baseline. See `docs/adr/0002-session-authentication.md`.
---
## Phase 0 — Monorepo foundation ✅
pnpm + Turborepo monorepo, PostgreSQL/Redis/MinIO/Mailpit compose, CI, ADRs.
### Next phase: Phase 4 — Worlds & backups
- S3-compatible storage (MinIO)
- World upload/download
- Backup jobs and restore