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

This commit is contained in:
smueller
2026-06-26 13:11:28 +02:00
parent d29a02f2a4
commit 49a98ee31d
81 changed files with 1462 additions and 53 deletions

View File

@@ -2,51 +2,57 @@
Last updated: 2026-06-26
## Current phase: Phase 5Software & add-ons
## Current phase: Phase 6Multi-Node and queue
### Phase 5 completed
### Phase 6 completed
| Area | Status | Notes |
|------|--------|-------|
| Prisma InstalledAddon | Done | Plugin/mod install tracking |
| `@hexahost/catalog` | Done | Modrinth API + compatibility checks |
| `@hexahost/contracts` phase 5 | Done | catalog, addons schemas |
| Go agent v0.5 | Done | addon.install/remove with SHA512 verify |
| Worker server-addons queue | Done | install-addon, remove-addon jobs |
| API CatalogModule | Done | Modrinth search + versions |
| API AddonsModule | Done | Install/remove with audit |
| Web add-ons tab | Done | Search, install, list, remove |
| Docker FABRIC/PURPUR | Done | Extended TYPE mapping for itzg image |
| `@hexahost/scheduler` | Done | Node scoring, RAM/slot capacity, least-loaded placement |
| Prisma start queue + node capacity | Done | `ServerStartQueueEntry`, `maxRamMb`, `platformRamMb`, `QUEUED`/`UNKNOWN` |
| `@hexahost/contracts` phase 6 | Done | `nodes.ts`, queue schemas, extended server status |
| Worker scheduler integration | Done | Provisioning uses `selectNodeForAllocation` |
| Start queue | Done | API enqueue + worker tick dispatch |
| Node health tick | Done | Heartbeat timeout → `UNREACHABLE`, servers → `UNKNOWN` |
| Drain / maintenance | Done | Admin `POST /admin/nodes/:id/drain` and `/maintenance` |
| Allocation release | Done | Released on provision failure |
| Dev seed | Done | Second node `local-dev-2` for multi-node tests |
### Abnahmekriterium Phase 5
### Abnahmekriterium Phase 6
- [x] Modrinth catalog search with loader + game version facets
- [x] Compatibility check before install
- [x] Paper plugin → `plugins/` directory
- [x] Fabric mod → `mods/` directory
- [x] SHA512 verification on agent
- [x] Install/remove only when server STOPPED
- [ ] Manual E2E (Paper + Fabric server with agent)
- [x] Scheduler distributes servers across eligible nodes (least loaded RAM)
- [x] Resource reservation via `GameServerAllocation` + node RAM budget
- [x] Start queue when node lacks capacity
- [x] Drain excludes node from new allocations
- [x] Maintenance mode blocks scheduling
- [x] Node heartbeat loss marks servers `UNKNOWN`
- [ ] Manual E2E with two agents on different nodes
### Local test
### Local test (two nodes)
1. Create **Paper** server → stop → **Add-ons** → search plugin (e.g. LuckPerms) → install
2. Create **Fabric** server → stop → install compatible mod
3. Start server and verify JAR in container
1. `pnpm db:seed` — note both enrollment tokens
2. Start agent 1 with `NODE_ID=...001` and agent 2 with `NODE_ID=...002`
3. Create several servers and start them — verify different `nodeId` in API responses
4. Saturate one node RAM (`maxRamMb` low) → next server lands on other node
5. `POST /admin/nodes/:id/drain` — new provisions skip drained node
### Known limitations
- Modpacks/datapacks UI deferred
- No automatic update/rollback yet (metadata stored for future)
- CurseForge not integrated
- Server must be reprovisioned to change software family (existing flow)
- Offline migration not implemented (manual re-provision only)
- No admin UI for nodes yet (API only)
- Queue priority uses plan metadata placeholder (`priority=0`)
- CPU overcommit not configurable yet
---
## Phase 5 — Software & add-ons ✅
Modrinth catalog, addon install/remove, SHA512 verify.
---
## Phase 4 — Worlds & backups ✅
S3 backups, world upload/download, restore, retention, schedules.
---
## Phase 3 — Console, files, settings ✅
@@ -63,6 +69,6 @@ S3 backups, world upload/download, restore, retention, schedules.
## Phase 0 — Monorepo foundation ✅
### Next phase: Phase 6Multi-Node and queue
### Next phase: Phase 7Idle shutdown and free tier
- Scheduler, resource reservation, start queue, drain
- Player detection, auto-stop, quotas, credits, usage metering