diff --git a/src/runtimes/node/lifecycle.go b/src/runtimes/node/lifecycle.go index 735b569..58ad977 100644 --- a/src/runtimes/node/lifecycle.go +++ b/src/runtimes/node/lifecycle.go @@ -91,8 +91,10 @@ func (lp *lifecycleProvider) resolve(e scheduleEntry) string { if e.LTS != "" { return string(lifecycle.MaintenanceLTS) } - // Odd releases enter "maintenance" before EOL but are not LTS. - return string(lifecycle.EOL) + // Odd releases have a maintenance window before EOL but are not LTS; + // keep them labeled Current until their end date so the display + // matches nodejs.org's release schedule page. + return string(lifecycle.Current) } if lts := parseDate(e.LTS); !lts.IsZero() && !today.Before(lts) { diff --git a/src/runtimes/node/lifecycle_test.go b/src/runtimes/node/lifecycle_test.go index a14ed5f..a29eea4 100644 --- a/src/runtimes/node/lifecycle_test.go +++ b/src/runtimes/node/lifecycle_test.go @@ -55,10 +55,10 @@ func TestLifecycleProvider_VersionStatus(t *testing.T) { want: string(lifecycle.Current), }, { - name: "v23 odd version in maintenance is EOL (not LTS)", + name: "v23 odd version in maintenance window is still Current (not LTS)", now: "2025-04-15", version: "23.5.0", - want: string(lifecycle.EOL), + want: string(lifecycle.Current), }, { name: "v23 after end is EOL", @@ -66,6 +66,15 @@ func TestLifecycleProvider_VersionStatus(t *testing.T) { version: "23.5.0", want: string(lifecycle.EOL), }, + // v25: start 2025-10-15, maintenance 2026-04-01, end 2026-06-01 (no LTS) + // Regression for #241: odd version past maintenance but before end + // should show as Current, not EOL. + { + name: "v25 past maintenance but before end is Current", + now: "2026-04-20", + version: "25.9.0", + want: string(lifecycle.Current), + }, // Edge cases { name: "unknown major returns empty",