From f73cd5935b84807a2fa0fe5efe8df0e3bf784eb5 Mon Sep 17 00:00:00 2001 From: Aditya <205600203+Rohilalala@users.noreply.github.com> Date: Wed, 28 Oct 2026 15:13:13 +0530 Subject: [PATCH 1/2] fix(missions): run the full T-10 replay countdown after the tile hold Replay Ascent schedules liftoff 15 s out: a 5 s tile-preparation hold, then a 10 s countdown. The hold ended 5 s before liftoff instead of 10, so the replay sat on the pad for 10 s and the countdown began at T-5. The hold now ends at T-10, and the countdown runs T-10 to T-1. --- src/data/rocketLaunches.test.mjs | 12 ++++++++++++ src/layers/launches/replay.js | 4 +++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/data/rocketLaunches.test.mjs b/src/data/rocketLaunches.test.mjs index b68a11db3..15b37420d 100644 --- a/src/data/rocketLaunches.test.mjs +++ b/src/data/rocketLaunches.test.mjs @@ -448,6 +448,18 @@ test('holds replay at the pad for a real-time countdown independent of replay sp assert.ok(liftoff.phaseProgress > 0); }); +test('runs the five-second tile hold before a full T-10 countdown', () => { + const launch = { launchTime: '2026-07-20T10:00:00Z', timeline: [] }; + // REPLAY ASCENT puts liftoff 5 s (tile hold) + 10 s (countdown) ahead. + const hold = replayState(launch, 115000, 12, 28, 5400, 1, 104500, 5); + assert.equal(hold.preCountdownActive, true); + assert.equal(hold.countdownActive, false); + const countdown = replayState(launch, 115000, 12, 28, 5400, 1, 105000, 5); + assert.equal(countdown.preCountdownActive, false); + assert.equal(countdown.countdownActive, true); + assert.equal(countdown.countdownSeconds, 10); +}); + test('hands replay directly from ascent into orbit', () => { const launch = { launchTime: '2026-07-20T10:00:00Z', timeline: [] }; const orbit = replayState(launch, 0, 12, 28, 5400, 1, 16_000); diff --git a/src/layers/launches/replay.js b/src/layers/launches/replay.js index 5354996bd..4317de0ab 100644 --- a/src/layers/launches/replay.js +++ b/src/layers/launches/replay.js @@ -139,8 +139,10 @@ export function createReplay({ state: layerState, services, parts, source }) { 0, Number(preCountdownDurationSec) || 0, ); + // The hold precedes the whole countdown; ending it at -hold cut T-10 to T-5. const preCountdownActive = - preCountdownDuration > 0 && realSecondsSinceStart < -preCountdownDuration; + preCountdownDuration > 0 && + realSecondsSinceStart < -REPLAY_COUNTDOWN_DURATION_SEC; const countdownActive = realSecondsSinceStart < 0 && !preCountdownActive; const countdownSeconds = countdownActive ? Math.ceil(-realSecondsSinceStart) From df71c37d27cf7027b8f72e33905a3c29da4fb81f Mon Sep 17 00:00:00 2001 From: Aditya <205600203+Rohilalala@users.noreply.github.com> Date: Wed, 28 Oct 2026 16:24:17 +0530 Subject: [PATCH 2/2] docs(changelog): add #1443 fragment --- changelog.d/1443-replay-countdown-ten.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 changelog.d/1443-replay-countdown-ten.md diff --git a/changelog.d/1443-replay-countdown-ten.md b/changelog.d/1443-replay-countdown-ten.md new file mode 100644 index 000000000..4780f26bf --- /dev/null +++ b/changelog.d/1443-replay-countdown-ten.md @@ -0,0 +1,3 @@ +- Run Space Missions' Replay Ascent countdown from T−10 after the five-second + tile hold; the hold ran 10 s and the countdown started at T−05 (Aditya, + @Rohilalala, #1443).