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