I would expect DST in both years. The Jn form excludes February 29, so J59 is February 28 in every year, and J60 is March 1. Both implementations instead interpret J59 as February 29 in a leap year. glibc's tzset() gives DST for February 28, 2024 with the same TZ string.
The leap-year adjustment starts at d >= 59 in the pure-Python implementation and day >= 59 in the C implementation. I think both conditions need to start at 60, because February 28 does not need to move to account for the leap day. The comment immediately above the C condition already describes the intended behavior correctly.
Activity
gh-159714: Fix `ZoneInfo` Julian day 59 in leap years (#159721)
[3.14] gh-159714: Fix `ZoneInfo` Julian day 59 in leap years (GH-159721…
[3.15] gh-159714: Fix `ZoneInfo` Julian day 59 in leap years (GH-159721…