6c37b2c785
The messaging extra and platform.slack pin aiohttp==3.14.0, but several lazy messaging features listed only their SDK and let aiohttp come in transitively. Each of those SDKs caps aiohttp loosely enough that a vulnerable already-installed aiohttp still satisfies the range, so the eager extras got the patched floor while the lazy paths did not: - discord.py (aiohttp>=3.7.4,<4) - mautrix / aiohttp-socks (aiohttp>=3,<4 / aiohttp>=3.10.0) [Matrix] - microsoft-teams-apps (aiohttp<4) [Teams] (Teams additionally shipped an explicit but *stale* aiohttp==3.13.4 in both the pyproject `teams` extra and platform.teams.) - tools/lazy_deps.py: add aiohttp==3.14.0 to platform.discord, platform.matrix; bump the stale platform.teams pin 3.13.4 -> 3.14.0. - pyproject.toml: add aiohttp==3.14.0 to the matrix extra; bump the teams extra 3.13.4 -> 3.14.0 (homeassistant/sms/messaging already at 3.14.0). - tests/test_packaging_metadata.py: test_security_pins_present_in_mirrored_lazy_features now covers platform.discord/slack/matrix/teams. The existing agree-guard only compares packages pinned in BOTH sources, so it can't catch a lazy feature that omits a pin entirely; this guard is an explicit coverage contract (security package -> lazy features that must carry it) and fails with 'platform.matrix: aiohttp=MISSING' if a floor is dropped again. - uv.lock: regenerated, zero drift (aiohttp 3.14.0).