Email me
Updates
← Where the Action Actually Happens at F1 GPs

Updates

Where the Action Actually Happens at F1 GPs

Every update on this project, newest first.

4 updates

Updates are bullet-point summaries generated with AI from my commits and build notes, then checked by me. Project articles and learning notes are written by me.

  1. AI summary

    • The one-year circuit can’t fail a denominator test, since dividing by one changes nothing. Only the three-year circuit now counts as evidence for averaging checks.
    • Replaced the comparison script. It never compared race_phases, sorted lists the code deliberately orders, and keyed grandstands by the non-unique code. The new one compares every field and requires accepted differences to be declared.
    • Froze the old pipeline’s output in baseline/, pinned to a commit, so validation doesn’t end up comparing the database with itself after cutover. Widened validation from 195 to 525 keys and confirmed the checks can fail.
    • Resolved a suspected unzoned incident (zones 7/7/7 against a total of 8). The zones overlap, so nothing was wrong.
    • Added a source_incidents table: the circuit summary counts spreadsheet rows, not row and section pairs, and one 2023 row with no section could not be recovered from incidents.
    • See Five verification failures.
  2. AI summary

    • Rewrote the global rankings as three SQL queries plus a Python pass. 31 corners and 14 straights matched the old output exactly. The only grandstand differences were nine floating point artefacts the old code had been shipping, such as 14.399999999999999.
    • ORDER BY g.grandstand_id, gv.rowid reproduced the old list ordering with zero differences across 29 grandstands.
    • Grandstand lookups were keyed by code, which is only unique per circuit. Forcing a collision merged two grandstands (28 instead of 29). Now keyed by grandstand_id, changed in a single commit, because the halfway state deleted a grandstand instead.
    • The circuit page, still on the old pipeline, listed two spreadsheet typos as straights that the new rankings page correctly dropped. Fixed the typos in the source workbook rather than rushing the migration.
    • Those typos were cells showing 9-10 that held dates under a d\-m number format. Set them to strings with Text format; database validation went to 0 mismatches.
    • See Migrating by predicted diffs.
  3. AI summary

    • First run of the SQL loader: four transcription errors that each failed loudly, and one that didn’t. The incident insert sat inside a loop that skips crash sheets, so is_crash was false for every row while the load reported success. Split the loader into two passes.
  4. AI summary

    • Changed the per-corner average to divide by every race year, not only the years a corner had action. A quiet year is a result, not missing data. Singapore corner 5 went from 3.0 to 2.0.
    • avg_lap still averages only the years present, because a quiet year has no lap. The two rules are separate named functions with docstrings.
    • See A quiet year is zero.