## agronholm/anyio — 4.14.2…4.15.0

_52 commits._

### Features
- **Add follow_symlinks argument to anyio.Path.owner() and group() (#1293)** (6d3a30d)
- **Add concurrency helper utilities: as_completed, gather, amap (#1173)** (c7096d3)
- **Updated pre-commit modules and adapted to the new Ruff default ruleset (#1252)** (28cb2f2)
- **Support free-threaded python3.14 (#1224)** (9f456ce)

### Fixes
- **Add a regression test for the send wake-up on close (#1281)** (b29a2bc)

### Backend
- **Bumped up the version** (9283662)
- **Improved the instructions for AI agents** (d137692)
- **Shield TemporaryDirectory cleanup from cancellation (#1304)** (033fc52)
- **[pre-commit.ci] pre-commit autoupdate (#1305)** (942e9a6)
- **Fixed pyproject.toml changes not triggering the test suite** (b825c3b)
- **Fixed start inconsistencies between trio and asyncio (#1198)** (9727dc5)
- **Fixed wrong type in move_on_after (#1297)** (b05fe6d)
- **Fixed asyncio task group coroutine cleanup (#1275)** (44d0c93)
- **[pre-commit.ci] pre-commit autoupdate (#1290)** (ae25044)
- **Fixed asyncio CapacityLimiter over-granting tokens when total_tokens is raised while over-subscribed (#1223)** (b4e79a8)
- **Added documentation for the Future synchronization primitive (#1287)** (a8900c2)
- **Fixed worker result race with closed event loop (#1279)** (02d7fbe)
- **Added missing keyword-only arguments to anyio.Path methods (#1286)** (660a06d)
- **[pre-commit.ci] pre-commit autoupdate (#1284)** (dab48c6)
- **Removed rsloop from the test suite** (ec0478b)
- **Disable testing with rsloop if running on free-threaded build** (b7641d5)
- **Uncapped rsloop** (5fff3a4)
- **Temporarily cap rsloop versions** (c734306)
- **Use the PEP 661 sentinel type where appropriate (#1190)** (3cc0f18)
- **Made all the top-level imports lazy (#1169)** (12d0aa7)
- **Added anyio-mode and detect the asyncio-mode CLI option (#1242)** (76efcb2)
- **The minimum Python version is 3.10, not 3.8 (#1280)** (d760fb5)
- **Make the custom thread limiter test deterministic (#1276)** (868e4ae)
- **Guard the deprecated pytest CallSpec2 import (#1272)** (f982b24)
- **Fixed UNIX socket close race with cancelled I/O (#1269)** (97827b0)
- **[pre-commit.ci] pre-commit autoupdate (#1270)** (e8ff01c)
- **Added the Future class (#1146)** (2613773)
- **[pre-commit.ci] pre-commit autoupdate (#1262)** (4043507)
- **Don't mask AttributeError in StapledObjectStream.send_nowait() (#1256)** (003e5d6)
- **Fixed timeout in test_pytest_plugin.py::test_keyboard_interrupt_does_not_resume_test (#1253)** (61af6c6)
- **Document memory stream clones for multiple workers (#1249)** (2be392e)
- **Removed unused imports (#1254)** (5c37a09)
- **Added rsloop as backend for asyncio tests. (#1199)** (caca0e0)
- **Added `StapledObjectStream.send_nowait` method (#1241)** (9f44995)
- **Fixed Path.with_stem() not validating an empty stem (#1200)** (586e3cf)
- **Break ref-cycle between loop and root_task via RunVar (#1211)** (545bd4a)
- **Fixed `TaskHandle.name` for `TaskGroup.start` on Trio (#1232)** (b1f6e40)
- **Added the "reason" parameter to explain timeouts in fail_after/fail_at (#1227)** (1a20491)
- **Added the move_on_at() and fail_at() functions (#1228)** (0e4bba7)
- **Added proper PR link for #1234** (707db1c)
- **Fixed SpooledTemporaryFile.readinto/readinto1 reading twice before rollover (#1215)** (ea546ef)
- **Removed obsolete Python 3.9 test code** (ecde050)
- **Include the module name in `create_task` task names in more situations (#1234)** (1603648)
- **Cancel obsolete test runs automatically** (bf45a82)
- **Updated pre-commit modules** (2ba69a6)
- **Use memory object streams in test_receive_invalid_max_bytes()** (8dbe5b7)

### Docs
- **docs: fix missing TASK_STATUS_IGNORED import in return_handle start() example (#1240)** (c379707)

_Recap by [Repo Wrapped](https://repowrapped.com/gh/agronholm/anyio?utm_source=github-action)._