Commit Graph
112 Commits
Author SHA1 Message Date
josh b9f5902945 feat: add Watchdog recovery and drift rebuild workflows 2026-09-27 15:13:38 -04:00
josh a7044f21a1 Rename blueprints to Collections and add Operations tab
Fixes #46
2026-09-27 14:50:55 -04:00
josh df265d1900 refactor: make provisioning own instance lifecycle operations 2026-09-27 14:45:00 -04:00
josh cfed584614 feat: add provisioning lifecycle actions
Rename Deployments to Provisioning with compatible redirects and APIs. Add durable Start, Restart, Stop, and Rebuild operations alongside Create and Destroy; rebuild wipes the instance and recreates it in the same slot and port.

Add lifecycle, migration, recovery, and Komodo command tests. Type checks and production build pass; the full suite retains a telemetry assertion failure reproduced on the unchanged branch.

Refs #39
2026-09-27 14:20:04 -04:00
josh 0b0e5b5bdb feat: match fleet to blueprint targets exactly
Add an optional exact blueprint mode with keep/create/remove previews, atomic queueing, cancellation of unstarted excess creations, and persistent dependencies for safe port reuse. Track removals alongside creations and preserve fill mode as the default.

Validation: type check, production build, and 103 deployment tests passed. The full suite has one telemetry assertion failure also reproduced on the previous commit.

Fixes #42
2026-09-27 13:36:08 -04:00
josh ce6861203e Use user timezone for maintenance and official Plutonium manifest 2026-09-21 19:14:40 -04:00
josh 47d6dc07b7 Add Plutonium version checks and scheduled rolling restarts 2026-09-21 18:47:24 -04:00
josh 1e6ff3abbf Add player timing and profile links to server scoreboard 2026-09-20 22:03:58 -04:00
josh 3c8b5b2e40 Add global match history and ending timestamps 2026-09-20 21:44:36 -04:00
josh fc681c56c9 Add persistent match history to server pages 2026-09-20 21:35:35 -04:00
josh 44b6415821 Show provisioning status during server creation 2026-09-19 22:53:24 -04:00
josh 68b21a83ce Restore campaign terminology across UI and docs 2026-09-19 22:41:33 -04:00
josh 8ac420fe61 Improve operational UX, recovery flows, and action safety
Implement the approved UX review across Fleet, Betas, Library, deployments, and Settings. Add reviewed promotion and reconciliation plans, atomic queued-removal cancellation, recoverable beta drafts and launch inputs, accessible controls, and mobile improvements.

Validated with 473 tests, a clean typecheck, production build, and isolated desktop/mobile browser walkthroughs. Include the review and implementation coverage notes.
2026-09-19 21:34:34 -04:00
josh 1d073779fe Fix false stale Fleet reports caused by clock skew 2026-09-19 20:17:43 -04:00
josh 41891b4209 Add per-server telemetry request diagnostics 2026-09-19 18:59:30 -04:00
josh a182aeb950 Add persistent player leaderboards from game telemetry 2026-09-18 16:43:44 -04:00
josh 5bb49a776e Simplify telemetry to three game events 2026-09-18 15:35:21 -04:00
josh f54cac8c50 Unify UI workflows and streamline fleet management 2026-09-18 14:00:28 -04:00
josh 9cf0bd87f4 Refresh Fleet with discovery, operation progress, and lobby watches 2026-09-18 11:59:14 -04:00
josh ef8ff69d17 Refresh Configs with browser editing and source inspection 2026-09-18 11:02:22 -04:00
josh ec51e38312 Refresh script library with batch uploads and beta handoff 2026-09-18 09:57:57 -04:00
josh b2ec01daf5 Fix scope restoration for promoted scripts 2026-09-18 08:08:17 -04:00
josh 3c49437bf9 Add GitHub plugin release imports and update discovery 2026-09-18 01:29:38 -04:00
josh a718efc9e7 Add publisher release versions to plugins 2026-09-18 01:16:45 -04:00
josh 453821805a Fix server deletion cleanup and allow failed cleanup to resume 2026-09-18 00:49:30 -04:00
josh 274aedb66e Add House Party Protocol for fleet-wide queued destruction 2026-09-18 00:39:19 -04:00
josh 586133c711 Conform blueprint launches to desired fleet counts 2026-09-18 00:28:17 -04:00
josh 989931a0f2 Add multi-server blueprint collections and atomic launches 2026-09-18 00:08:54 -04:00
josh 782c7c0bda Add deployment blueprints and reviewed launch recipes 2026-09-17 23:43:12 -04:00
josh a50eae9d21 Add configurable beta test plans and staged rollout 2026-09-17 21:35:28 -04:00
josh 5b5266da3a Add operation flows and activity logs for betas and campaigns 2026-09-17 19:34:26 -04:00
josh 9dcf4ac1d3 Add T6 Zombies fleet support with Plutainer configuration 2026-09-17 18:03:12 -04:00
josh 885abbdffe Use database fleet registry and gate RCON polling on container readiness 2026-09-17 17:28:38 -04:00
josh c2ad5cc95a Queue server creation and verify health and selected map before completion 2026-09-17 17:14:36 -04:00
josh a611850649 new destruction flow 2026-09-17 16:57:08 -04:00
josh 6f83700161 Separate campaigns from server deployment lifecycle tracking 2026-09-17 16:42:37 -04:00
josh e8e7332365 Automatically deploy the lowest available lobby with exact ID preview 2026-09-17 15:59:29 -04:00
josh ae173517b6 Persist Plutonium keys by server ID and add key management 2026-09-17 15:54:10 -04:00
josh bbb1639184 debug 2 2026-09-17 15:09:27 -04:00
josh 85c238fceb debug 2026-09-17 15:01:39 -04:00
josh 858704bb10 adds round telemetry support 2026-09-17 14:35:42 -04:00
joshandClaude Opus 4.7 13a29e5ace Add deploy + destroy server flow; migrate to t5_<mode>_<slug>_<n> naming
Full server lifecycle management from Electric Cherry: pick game/mode/map/pluto
key in the Fleet page, EC provisions the deployment via Komodo, allocates a
port in 28960-28980, creates the 0o777 host dir, and starts the container.
Destroy button tears everything down (Komodo Destroy+Delete, rm -rf host dir,
transactional DB cleanup) and surfaces any partial-failure warnings inline.

Same phase cuts over to the new naming scheme (t5_zombie_cosmodrome_1 etc.).
Komodo entity names now match EC server names 1:1 (no more _/- transform), and
the map catalog carries friendly/slug/canonical for each of the 11 t5 zombie
maps. Server rows gain game_mode, map_slug, host_dir, config_file, game_id,
image, created_by, and destroyed_at columns for provisioning + audit.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-09-13 18:38:42 -04:00
joshandClaude Opus 4.7 30b0d1d4da Fix delete FK exhaustively; unset-scope surfaces as drift
deleteScript: previous fix missed beta_servers.prior_version_id,
beta_server_scripts.prior_version_id, and deployments.beta_id. Cascade
from betas.script_id -> beta_servers/beta_server_scripts left dangling
prior_version_id refs, and deletions of cascaded betas dangled
deployments.beta_id. Now nulls every NO ACTION reference before the
DELETE inside a single transaction.

Scope unset no longer touches disk from the API. Instead it detaches
inventory rows for scripts/plugins so drift Pass 1 flags the on-disk
copies as untracked; configs rely on drift Pass 2's compose-diff, which
already handles scope=null naturally. The operator reconciles from
/deployments using the existing rescan + reconcile buttons — same
visible flow as any other drift, no more silent synchronous file
removal.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-09-12 23:59:43 -04:00
joshandClaude Opus 4.7 34dc2ff00f Fix delete-script FK error; trigger drift on scope change
- deleteScript: null out deployments.script_id/script_version_id/prior_version_id
  and deployment_scripts.prior_version_id inside a transaction before the
  cascade. These are historical audit FKs (NO ACTION), so the cascade from
  script_versions was blowing up any delete of a promoted script.
- Scope endpoint fires runDriftDeployment in the background after any scope
  mutation so orphan/missing files from the change get reconciled.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-09-12 23:46:56 -04:00
joshandClaude Opus 4.7 f716036d89 Small UI cleanup, auto-refresh, and per-kind artifact routes
- Remove redundant "manage scripts" button and pipeline sidebar from Fleet page
- Bump log tail default 200 -> 1000 lines
- Auto-refresh (5s) on deployments list/detail, betas list, server detail, and artifact detail
- Drift ignores dedicated.cfg (Plutonium MP config; regenerates if deleted)
- Extract ArtifactDetail component; mount under /scripts/[id], /configs/[id], /plugins/[id] so configs and plugins no longer land on /scripts URLs

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-09-12 23:30:04 -04:00
josh f10f0cefef drift update 2026-09-12 23:15:14 -04:00
josh 6ae9004ed2 Drift now covers all three destinations 2026-09-12 19:16:14 -04:00
josh 8c40bbeff1 config and plugin 2026-09-12 19:11:44 -04:00
josh 85bcb05a7d multi script beta 2026-09-12 18:23:56 -04:00
joshandClaude Opus 4.7 1afdfddc87 Promote as a real deployment; version state and scope dropdowns
Turns promotion into a first-class deployment (action='promote') so it lands
in the deployments UI with before/after content, per-server restart tracking,
and one-click rollback. Non-beta matching-scope servers get restart_state=
pending so the existing sweep drains and restarts them the same way drift does.

Also adds a per-version state (untested/tested/test-failed) so the upload
flow can visibly signal that a beta must land before promotion, and swaps
the scope-value text box for game/map dropdowns populated from the fleet.
Beta rollback at ready-promote is now labelled Reject and marks the version
test-failed.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-09-12 14:24:35 -04:00