Kyle Bennison

  • Race Control — Live Blog: 2026 Indycar Grand Prix of St. Pete — Race

    Race Control — Live Blog: 2026 Indycar Grand Prix of St. Pete — Race

    🏁 Checkered Flag

    Palou wins the Grand Prix of St. Pete in dominant fashion. He makes it two years in a row winning the season-opener. McLaughlin holds on for 2nd and Lundgaard ends in 3rd, tied with Rinus Veekay for 10 overtakes.

    Lap 93/100

    McLaughlin and Lundgaard pass Kirkwood!

    It’s too late for P1, but the battle for P2 is now Chevy on Chevy.

    Lap 92/100

    McLaughlin is officially stuck behind Kirkwood, and Lundgaard behind McLaughlin. The gap is under half a second between each of them.

    Kirkwood actually has the fastest lap by six tenths with a 62.2, but Palou has been able to maintain a consistently lower lap time overall. He has taken care of the tires and made the fuel go long on the first stint.

    Lap 88/100

    Palou is actually faster than those on reds behind him now.

    Lap 85/100

    Still a stalemate on laptime. It’s like Palou knows the pace his competitors are going to run before they run it, and he does nothing more, nothing less. Just maintaining the 5.7s gap.

    Lap 82/100

    Laptimes among the top 3 stabilized on that last lap. All between 63.2-63.4.

    Lap 80/100

    The gap is down to 5.5s for Kirkwood. They’re reeling Palou in, but is Palou saving something for them when they get there?

    Palou has only made one on-track pass. The rest of the lead was down to his pace on that first stint in-lap, and then his pace on the second stint helped him maintain that lead.

    Jameis Winston’s Son

    His son has been “studying cars by drawing them.” He’s ready to join an engineering team on the grid.

    Kirkwood’s Race

    Kirkwood has moved up 11 spots with 9 overtakes.

    Push to Pass

    Palou leads the top 3 with 90 seconds of PTP. McLaughlin with 80, Kirkwood with 51.

    Lap 74/100

    McLaughlin and Kirkwood are pushing about .5s per lap faster than Palou.

    Lap 73/100

    Effective order:

    1. Palou
    2. Kirkwood (-7.2)
    3. McLaughlin (-8.6)

    Lap 69/100

    McLaughlin in.

    Looks like teams are prioritizing safety against a yellow to a short final stint. Seems the tires are holding up on the longer stints.

    Lap 67/100

    Palou is in. He’s looking at a 32 lap black stint. I’m a bit surprised he didn’t take the reds longer.

    Lap 66/100

    Armstrong made a wild attempt into Turn 1 and gave up 2 spots in the end. The field is getting racy.

    Now Lundgaard gets by as Ericsson dives into the pits.

    Lap 65/100

    McLaughlin moves into P2 with an overtake of Ericsson into Turn 1.

    We’ll see what kind of pace he has with clear air as he chases down Palou.

    Lap 59/100

    To add to the pain, Palou’s pulled out a 6 second gap on P2.

    Fuel Update

    Palou has 3 laps on McLaughlin and 2 laps on Ericsson. He’ll be able to go deepest in this stint. Quickest final stop should be in store for him.

    McLaughlin’s best hope at this point could be to pit on the early side and hope Palou gets caught out with a yellow. You’re not going to win the fuel-save battle against him at this point.

    Lap 55/100

    Last lap times:

    • Palou: 63.0
    • Ericsson: 63.9
    • McLaughlin: 64.0

    All on soft reds.

    McLaughlin’s First Stop

    Traffic and slow in laps hurt McLaughlin. He didn’t pull away from Ericsson or Palou on his in laps, and then got stuck battling on his out laps.

    🟩Green Flag – Lap 44/100

    Palou leads. He will need to take hard black tires for the final stint (presumably around lap 80). McLaughlin will have the tire advantage on a set of soft reds.

    🟨Yellow Flag #2

    McLaughlin Radio

    Their goal is track position and going “at least as long or longer” than their competitors on this stint.

    Effective Order

    Palou, Rossi, Ericsson, McLaughlin, Armstrong

    Radio

    McLaughlin’s engineer is saying “Woulda coulda shoulda” on how deep they took that first stint.

    Dixon lost his right rear. Loose wheelnut. So unfortunate.

    Stint 2

    Lap 40/100

    Pit sequence complete and the overcut was the clear winner.

    Lap 38/100

    Palou just did a 62.8. That was a much faster in lap than McLaughlin was a ble to do on the hard tire.

    Editor’s Note

    The live map is about 20-30 seconds ahead of live radio, which is about 2 minutes ahead of the broadcast. Makes it pretty hard to keep track of what’s happening when.

    Lap 36/100

    McLaughlin in.

    Lap 34/100

    McLaughlin is pushing, a 63.9 on that last lap. Now a 63.5. The soft runners behind are mostly keeping up though.

    Lap 32/100

    Rahal in 9th up 5. Dixon up to 11th with 6 overtakes and 2 pitstops in hand. Watch out for him. He’ll be able to take this stint longer, get on cycle with the others, and have a shorter final pitstop because he’ll need less fuel.

    Lap 27/100

    I spoke too soon. There’s no discernable difference between softs and hards from what I can see in the recent laptimes.

    Lap 25/100

    Will Power is out. Same spot as his previous incident.

    Radio: “12 more laps on these tires”. Looks like the target lap is 37.

    Reds appear to be falling off now, about .2-.5 slower than the blacks.

    Lap 23/100

    O’Ward is the fastest on the primaries of those yet to pit, with a 63.7 last lap.

    Lap 21/100

    Radio: “Tires starting to go” according to Louis Foster.

    However, the primary hard tires were slower last lap. The leaders did a 64.1 and the first soft runners did a 63.8.

    Lap 19/100

    This is looking to be a 2 stop race. Same start, different result. Perhaps due to the two-soft rule.

    Radio: Half tank of fuel was the call. Could put the absolute last stops around lap 37/38.

    Lap 17/100

    The hard and soft tires are both equal still at this point in terms of lap time, it appears. Both tires running around a 63.4.

    Lap 16/100

    Alexander Rossi has 1 pitstop done and 5 overtakes complete. He’s in P16 at the moment.

    Lap 13/100

    Anddddd Malukas’s left front gave out. He’s nursing it back to the pits.

    Lap 7/100

    Malukas has flatspotted his hard tires already. He’ll have to get them through the next 7 laps at least before he thinks about going to softs, but imagine he’ll be an early pitter once the window opens.

    We’re green again.

    Yellow Flag

    One notable early pitter: Scott Dixon.

    So far no takers from the lead group on pit row.

    Radio: lap 15 is the target lap for the first stint to optimize the stint length on the red tires. Per the broadcast, teams will need to do two stints on reds.

    Stint 1

    Look for early pitstops similar to last year.

    Full course yellow already after there’s commotion in the back: Schumacher, Ferrucci, Sting Ray Robb involved.

    Green Flag

    We’re green!

    Command

    There’s the command. We’re moments from the green flag.

    Strategy

    Last year, the first 6 laps were under caution and then the race went green the rest of the way.

    The winning strategy from Palou was a lap 2 stop, and then two more stops on laps 39 and 72, for 3 stops total.

    The early last stop allowed Palou to take over the lead on lap 75 and never look back.

    Look out for:

    • Taking cheap stops under yellow
    • Pitting early rather than going long

    Grid Walk

    I can’t believe I’m saying this but Jameis Winston actually crushed that grid walk assist. He’s a natural.

    Pre-Race

    Betting Odds

    If you’re a betting person, the odds for race one are intriguing. Palou (4th) is favored at +170 to win. McLaughlin (1st) is at +230, Ericsson (2nd) is at +900, and Hauger (R)(3rd) is at +1800.

    Track Stats

    To recap from yesterday:

    • the pole winner wins this race 19% of the time.
    • The top 5 win this race 71% of the time.
    • Someone in the top 10 wins this race 90% of the time.

    So we’re looking at any of McLaughlin, Ericsson, Hauger, Palou, or Malukas with the best shot to win this race. McLaughlin, Ericsson, and Palou have all won here before.

    O’Ward (8th) is the only other driver in the top 10 to have won here before.

    Starting Grid

    We’re about 15 minutes away from the start of the first Indycar race of the 2026 season. Scott McLaughlin starts on the poll, with Marcus Ericsson 2nd and rookie Dennis Hauger 3rd. Palou is starting 4th.

    Here’s the full starting grid.

  • Live Blog: 2026 Indycar Grand Prix of St. Pete — Qualifying

    Live Blog: 2026 Indycar Grand Prix of St. Pete — Qualifying

    Trying something new this season, we’ll be live-blogging the Indycar series (with a stats-focused tilt, of course).

    Fast 6

    Your fast 6:

    Fast 12

    5:40 PM

    McLaughlin fastest by four hundredths over Palou. 4 Hondas and 2 Chevys yet again. Hauger, the rookie, advances to the Fast 6 as well.

    5:37 PM

    Everyone on reds now.

    5:34 PM

    4 of the top 6 so far on reds, including the top 3.

    5:33 PM

    Getting into golden hour in St. Pete. The sun looks difficult to deal with into turn 1, and then other parts of the track look very dark.

    5:30 PM

    Here’s the lineup for the top 12. Notably, no Power or Newgarden. Rookie Dennis Hauger is the biggest surprise.

    Q1

    5:26 PM

    Racing Reference is supplying a lot of these stats. It’s a great reference.

    5:24 PM

    There have been 4 winners from pole in 21 races, so today isn’t everything.

    Only 2 winners from outside the top 10 though (both Sebastian Bourdais). And only 6 winners from outside the top 5. So you want to be top 5 to have a decent shot.

    5:21 PM

    4 more Hondas and 2 more Chevys move through, and Dixon misses out after a late-session spin.

    5:18 PM

    The updates to the drivers eye are pretty awesome: live track map is a new bonus.

    5:14 PM

    Colton Herta is another driver who liked St. Pete. He had the highest average start in the field at 3.7. His average finish is 9th, though. (His dad, Bryan, has the all-time highest average finish at 4th.)

    Highest among active drivers is Dixon at 7.3.

    5:09 PM

    Will Power has an astounding 8 poles at St. Pete. The next best is Scott Mclaughlin with 2.

    5:07 PM

    Newgarden and Power are the only two active drivers with 2 wins each at St. Pete. Newgarden is already out of qualifying and Power is still acclimating to his new car.

    5:05 PM

    4 Hondas and 2 Chevys advance in the first group. Newgarden is the biggest surprise to not make it to Q2.

    5:00 PM

    The fastest lap in practice was a 61.1 by Scott McLaughlin. Could he repeat this year?

    4:55 PM

    We’re underway! Mick Schumacher is another big name in Indycar this year. He’s a rookie on Rahal Letterman Lanigan Racing. He was 23rd and 22nd in P1 and P2, respectively.

    4:55 PM

    Scott McLaughlin was the fastest qualifier last year with a 59.462. Colton Herta was 2nd, and Felix Rosenqvist was 3rd.

    4:49 PM

    Running a bit behind schedule. One of the biggest stories of the offseason was the move of career Chevy driver Will Power to Honda-powered Andretti Global.

    Power had one win in 2025 and finished 9th in the championship. We’ll see how he does under Honda power. He was 18th fastest in P1 and binned it early in P2 on a slippery track and didn’t set a time.

    4:40 PM

    The 2026 Indycar season starts this weekend in St. Petersburg, Florida. Everyone is chasing Alex Palou, who won 8 of 17 races in 2025, including the Indy 500, and won the championship by nearly 200 points.

  • How One setuptools Release Broke Everything, and What We Can Learn From It

    How One setuptools Release Broke Everything, and What We Can Learn From It

    If you work in python package development or maintenance, then your world may have stopped for a few hours on Monday afternoon.

    To most, it probably felt like one of those “random” errors that pops up one day and is gone the next, but behind the scenes were hundreds of developers arguing back and forth on the public GitHub repository of setuptools over the best way to rectify a breaking change that broke more than anticipated.

    What Happened?

    It all started on Monday morning with a major release of setuptools which began failing build for what was previously a deprecation warning about using dashes or uppercase characters in your setup.cfg file.

    Previously, setuptools would quietly fix your file for you, but for some reason in v78 they decided to start enforcing it.

    Funny enough, the 78.0.0 release initially failed because their own tests were failing due to a dependency, requests, not complying with their new rule. Rather than viewing this as a sign to take a moment to pause and consider the potential impact, they decided to comment out the tests.

    I say “they”, but in reality this was the rash decision by one individual developer who opened and merged their own PR with no reviewers, no requests for reviewers, and no comments.

    Once this release made it onto PyPI is when the trouble for everyone else started.

    It seems innocent enough: starting with v78, you need to correct your naming. It’s a simple fix. The problem was twofold, though:

    1. If you didn’t pin a top version of setuptools in your build specification, the newest version started being used by default, potentially breaking your package.
    2. Even if you fixed your own package, if any of your dependency packages were out of compliance (and not pinning their version of setuptools), then they would also cause your build to fail, namely if their package needed to be built from source (as is the case in Linux). This is why the pain was most immediately felt in a lot of people’s CI workflows on GitHub.

    So now there was this cascading effect of having to fix your own package (no big deal, usually), but then having to ask others to fix their packages (many of which–as many in the comments of the faulty PR pointed out–were no longer being actively maintained).

    Again, all of this was apparent when the setuptools tests themselves were failing because of requests (a python software foundation package) being out of compliance.

    How Was It Resolved?

    Fairly quickly, issues started popping up in the repos of packages that were out of compliance asking them to quickly fix their setup.cfg files. It’s hard to say how many packages were out of compliance, but rest-assured it would’ve taken weeks to months to get everything resolved across all the packages out there. People quickly realized this was too big an issue to deal with in this way. In the case of one package, pyspark, the fix was opened in a PR, but the pyspark tests take several hours to run (and they failed), so it was not exactly a quick-fix and they needed to do that on several still-supported minor versions of the package.

    So, the discourse in the setuptools PR space was to revert the changes and yank the bad versions in the meantime. Thankfully this only took a matter of hours, the release succeeded, and things quickly went back to normal. However, it revealed a lot of the flaws in open-source software development and the inherent risks of relying on these tools that we take for granted on a daily basis.

    What Did We Learn?

    1. Pin a Version Range

    If every package had set a max version of setuptools to something they knew they were compatible with, then this wouldn’t have happened. Of course, we can only control what we do in our own package. In this case, pinning setuptools wouldn’t have helped us if our dependencies didn’t do the same, but generally this is not the case and pinning our requirements can save us from running into these breaking changes unexpectedly. For GitHub Actions, pin a specific, immutable commit hash.

    2. Don’t Ignore Deprecation Warnings

    While I still think this breaking change was done poorly, the fact is that this deprecation warning was out there since 2021. When you ignore deprecation warnings, you’re taking a risk. Unless you are completely pinned down.

    3. Choose Your Dependencies Wisely

    When designing your system, build around well-supported and actively maintained projects. Leveraging fringe packages with little support or below their first major version release is risky, especially at the enterprise level where reliability matters.

    4. Respect SemVer

    For all the criticism, one thing you can’t argue is that setuptools followed SemVer. Most people cannot say the same. If you are instituting a breaking change, you must increment the major version number. This indicates to your users that it is not necessarily safe to just bump the version without checking things out first. You can tell that most people do not respect SemVer because most packages, even long-standing ones like numpy and pandas, are still only on version 1 or 2. The odds that they have not incorporated at least some if not many breaking changes in all those patch and minor versions is low.

    5. Understand Why Your Tests Broke

    Writing tests can be hard. Understanding tests is even harder. Debugging odd failures, especially ones that pop up during CI/CD, can feel insurmountable. However, it’s an essential skill and, as we saw on Monday, can be the difference between catching a crucial issue and unleashing hurt on others. Had the setuptools developers actually resolved the cause of their test failure rather than commenting it out, they would’ve seen that the solve was going to cascade to hundreds of other packages and maybe would have held off on the release until they could effectively communicate the change with others.

    6. Don’t Merge Your Own PR’s

    This might be the golden rule in my opinion; it really is that important. You cannot just shoot from the hip, especially on a public repository that is such critical infrastructure to the python packaging community. Request reviewers. Get a second and third pair of eyes on your code. Had they done so, someone certainly would’ve questioned why commenting out a test was the best course of action.

    7. Deprecation Warnings Need to Come With A Timeline

    Crazily enough, a user in the discussion tab of the setuptools repo predicted this exact situation almost 3 years ago. They asked how they were supposed to determine which deprecation warnings were most urgent, noting that the one in question about naming syntax of config keys seemed “minor”.

    If you are planning to deprecate something, saying “will be deprecated in a future version” isn’t specific enough. You need to set a specific version or a specific date by which action needs to be taken.

    Additionally, you need to weigh the benefits and drawbacks of implementing these deprecations. When I told my coworker about the issue and the scope of people affected, his response was “all this over a stylistic choice?” Some things are not worth the trouble of enforcing if there’s no security, performance, or functional benefit to implementing it.

    Packages can throw out so many warnings that you become numb to them, so you really need to pick and choose your battles as a package developer.

    And the next time someone brings up the potential for something to maybe break a year or two from now, don’t roll your eyes! We just saw it happen, and it is destined to happen again soon.

    Is Open Source Actually The Holy Grail of Security?

    I’ll finish with a final thought: I tried to explain this situation to my fiancé Raychel: how one random guy in the UK brought down our and so many other packages around the world. She couldn’t believe that my company was relying on the packages of so many others outside of our control, and the contributions of random people around the world that we’ve never met. “That doesn’t sound very secure,” parroting back a phrase I often say to her in relation to her job.

    “No. Open source is the most secure because everyone can see it.” I told her this because it’s what I’ve been told. But between the setuptools issue that morning and the tj-actions security incident the week before, I was questioning this premise.

    Sure, the issues can get rectified fairly quickly once they’re noticed, but usually the damage is already done. The data was stolen, secrets exposed, or time lost. If one random guy in the UK could shut down packaging work for an afternoon, what else was possible? I think open source is for sure still better than the alternative, but it has its flaws, and some tightened guidelines around these critical packages–such as requiring PR reviewers–would be a really simple step in the right direction.