What's Changed
- π¨ style: readability cleanup across the library by @gaborbernat in #598
- π fix(api): ignore lifetime on native OS locks by @gaborbernat in #593
- π fix(unix): don't mutate lock file before acquiring flock by @gaborbernat in #594
- soft: evict a non-regular lock file without reading it by @dxbjavid in #597
- π fix(windows): bind reparse-point check to the locked handle by @gaborbernat in #596
- π fix(api): make native lock release transactional by @gaborbernat in #615
- π fix(soft): make marker writes and cleanup transactional by @gaborbernat in #614
- π fix(windows): open the lock file through NtCreateFile by @gaborbernat in #617
- β¨ feat(api): add context_error_policy for dual context failures by @gaborbernat in #618
- π docs: correct Unix lock-file cleanup and flock claims by @gaborbernat in #623
- β¨ feat(api): add close_error_policy for post-unlock close errors by @gaborbernat in #619
- π fix(api): canonicalize singleton keys without following a final symlink by @gaborbernat in #621
- β¨ feat(unix): add fallback_to_soft opt-out for native locks by @gaborbernat in #622
- β¨ feat: add lock_descriptor for a caller-owned descriptor by @gaborbernat in #620
- β¨ feat(api): add preserve_lock_file to keep the lock pathname by @gaborbernat in #624
- β¨ feat(api): add on_acquired post-acquisition hook by @gaborbernat in #625
- π§ build(release): towncrier changelog pipeline, backfill, and docs by @gaborbernat in #626
- π docs: drop bot entries and link code refs in the changelog by @gaborbernat in #638
- π fix(api): validate lifetime values by @gaborbernat in #644
- π fix(win32): capture process probe errors by @gaborbernat in #645
- π fix(api): reject dropped lock options by @gaborbernat in #646
- π fix(api): retain acquisition path identity by @gaborbernat in #647
- π fix(api): detach grouped release errors by @gaborbernat in #648
- π fix(descriptor): define unavailable behavior by @gaborbernat in #650
- π fix(ci): map absolute coverage paths by @gaborbernat in #651
- π fix(soft): relinquish fd before close by @gaborbernat in #649
- π fix(async): make cancellation atomic by @gaborbernat in #652
- π fix(sqlite): isolate forked connections by @gaborbernat in #657
- π§ͺ test(conftest): scope the close mock to one descriptor by @gaborbernat in #656
- β¨ feat(soft): add strict soft locks and leases by @gaborbernat in #658
- β¨ feat(strict): replace shared markers with owner claims by @gaborbernat in #659
- π fix(soft): detect a reused PID via process start time by @gaborbernat in #660
- π fix(soft): fail safe on transient heartbeat errors by @gaborbernat in #661
- π docs: state the lock trust boundaries once by @gaborbernat in #663
- π· ci(perf): add the performance and NFS matrix by @gaborbernat in #664
- Replace prettier with mdformat and yamlfmt by @gaborbernat in #667
- π· ci(matrix): add SMB, capability, and matrix docs by @gaborbernat in #665
Full Changelog: 3.29.7...3.30.0