diff --git a/docs/guides/autoscaling.md b/docs/guides/autoscaling.md index 54fdf07..89a0d65 100644 --- a/docs/guides/autoscaling.md +++ b/docs/guides/autoscaling.md @@ -8,7 +8,7 @@ T5 game-wide policies cover the ten standard Zombies maps. Dead Ops Arcade is no ## Configure a policy -Choose **Add policy**, select the game and scope, and enter an explicit maximum. The initial editor selects Off, with a minimum of one running lobby, one empty spare, and a 20-minute empty interval. Counts must be between 1 and 20; the minimum and spare target cannot exceed the maximum. +Choose **Add policy**, select the game and scope, and enter an explicit maximum. The initial editor selects Off, with a minimum of one running lobby, one empty spare, and a 15-minute empty interval. Counts must be between 1 and 20; the minimum and spare target cannot exceed the maximum. Choose **Preview changes** to inspect the existing lobbies, game key availability, target, proposed action, and blockers. **Save reviewed policy** checks the policy revision and current fleet again. If the preview changed, review a new preview before saving. diff --git a/docs/plans/lobby-autoscaling-plan.md b/docs/plans/lobby-autoscaling-plan.md index 4791ad7..50b50c3 100644 --- a/docs/plans/lobby-autoscaling-plan.md +++ b/docs/plans/lobby-autoscaling-plan.md @@ -37,7 +37,7 @@ Use one policy per `(game, mapSlug)`, preserving configured variants such as T6 | Minimum running lobbies | Default 1; a floor for desired ready capacity, subject to available keys and host capacity. | | Maximum lobbies | Required explicit limit, at most 20. Count occupied lobbies, registered identities, reservations, and unresolved creations toward admission. | | Empty spare target | Default 1. Count empty ready lobbies, not unfilled player slots. | -| Empty duration before removal | Default 20 minutes; adjustable after the pilot. | +| Empty duration before removal | Default 15 minutes; adjustable after the pilot. | | Action cooldown | Default 5 minutes between new policy actions, measured from durable admission. Cancellation and safety checks do not wait for cooldown. | | Launch settings | Reuse normal map recipes and automatic placement on eligible active hosts. Use current promoted files when provisioning begins. | diff --git a/src/lib/autoscaling.ts b/src/lib/autoscaling.ts index 66418fe..ccfa570 100644 --- a/src/lib/autoscaling.ts +++ b/src/lib/autoscaling.ts @@ -52,5 +52,5 @@ export function scalingSettings(input: unknown): ScalingSettings { const minimum = integer('minimum', 1, 20), maximum = integer('maximum', undefined, 20), spares = integer('spares', 1, 20); if (minimum > maximum || spares > maximum) throw new Error('Minimum and spare target cannot exceed the maximum.'); return { game, mapSlug, mode: mode as AutoscalingMode, minimum, maximum, spares, - emptyMinutes: integer('emptyMinutes', 20, 1440) }; + emptyMinutes: integer('emptyMinutes', 15, 1440) }; } diff --git a/src/routes/autoscaling/+page.svelte b/src/routes/autoscaling/+page.svelte index d69e14c..ca8a572 100644 --- a/src/routes/autoscaling/+page.svelte +++ b/src/routes/autoscaling/+page.svelte @@ -12,7 +12,7 @@ let snapshot = $state(null); const report = $derived(snapshot ?? data.autoscaling); const canOperate = $derived(page.data.user?.role === 'admin' || page.data.user?.role === 'operator'); - const defaults = (): ScalingSettings => ({ game: 't5', mapSlug: 'theater', mode: 'off', minimum: 1, maximum: 3, spares: 1, emptyMinutes: 20 }); + const defaults = (): ScalingSettings => ({ game: 't5', mapSlug: 'theater', mode: 'off', minimum: 1, maximum: 3, spares: 1, emptyMinutes: 15 }); let settings = $state(defaults()); let editing = $state(null); let editorOpen = $state(false);