Skip to content

v4.1.2

Choose a tag to compare

@woprrr woprrr released this 29 Jul 10:05
· 77 commits to main since this release

[4.1.2] - 2026-07-27

CI duration, which on this project is CI cost: the macOS matrix leg bills at
ten times the Linux rate and was 94% of the spend per run.

Changed

  • The portable timeout polls adaptively instead of once per second. The
    fallback added 163s to the macOS job (175s to 338s) because it slept a full
    second per call and almost every call finishes in milliseconds. It now polls
    at 50ms, backing off to 250ms after a second and 1s after ten. Measured in
    isolation over 50 fast calls: 972ms per call before, 64ms after.
  • One implementation instead of three. hooks/lib/portable-timeout.sh is
    the single source; the static-analysis dispatcher, the test helpers and the
    test runner source it. Three copies of the same fallback is three chances to
    drift, and this release exists because of a difference nobody noticed.
  • The workflow cancels superseded runs. There was no concurrency block,
    so pushing twice ran two full matrices, including two macOS jobs, for one
    answer that mattered.

Added

  • A Python floor job. The test matrix sets up 3.12 on both runners, so it
    could not see a module that only parses on 3.10+: that is exactly how
    instincts.py shipped broken for every Mac without homebrew and CI stayed
    green. A separate job imports every hook library under 3.9 in a few seconds.
    Removing the __future__ import from instincts.py fails it.
  • The runtime floor is now stated in both READMEs: Python 3.9, and no GNU
    coreutils required.