feat: v0.14.0 — ISS-006 time-scale slider values up to 1000x; tests use fastest time
CI / build + unit + e2e (pull_request) Failing after 4m52s

This commit is contained in:
2026-09-19 08:49:30 +00:00
parent 0c9279818a
commit bd00b2b4c4
18 changed files with 141 additions and 80 deletions
+3 -3
View File
@@ -22,12 +22,12 @@ import { arrivalTimeFor, fuelAt } from './movement';
// Clamp constant: max real-time gap counted by a single tick. Chosen at 2000 ms —
// comfortably above a normal client poll interval (~1 s), so active play advances
// ~real time × scale; small enough that one stale read after an absence moves game
// time by at most 2 s × scale (≈ 2 min even at max scale 64). The sim therefore
// time by at most 2 s × scale (≈ 33 min even at max scale 1000). The sim therefore
// only meaningfully progresses while actively polled.
export const MAX_TICK_ELAPSED_MS = 2_000;
export const MIN_TIME_SCALE = 1;
export const MAX_TIME_SCALE = 64; // top of the power-of-two ladder (v0.9.2)
export const MAX_TIME_SCALE = 1000; // top of the slider ladder (v0.14.0)
// Reputation gain per delivered package: BASE + PER_KM × great-circle km, rounded
// to 2 decimals (reputation is REAL). A short hop (~300 km) earns ~1.15 rep, a
@@ -264,7 +264,7 @@ export function runAction<T>(fn: (inst: GameDb) => Promise<T>): Promise<T> {
}
// Tick first so the returned state reflects current time, then apply the new
// controls. timeScale is clamped to [1, 64]; validation of raw input happens in
// controls. timeScale is clamped to [1, 1000]; validation of raw input happens in
// the route handler (400 on non-number / non-boolean).
export function applyTimeControls(input: SimControlsInput): Promise<schema.SimStateRow> {
return withLock(async () => {