Topics covered in this episode:
direct_url.json captures it when you install from a repo or archive, so the fix is putting the same info in sdist/wheel metadata..dist-info/sboms/ - sdists can't, since they're a tarball plus a precalculated PKG-INFO with nowhere to hang extra metadata. Either "don't use sdists" or an sdist v2.Sponsored by Logfire from Pydantic pythonbytes.fm/logfire
This episode is brought to you by Pydantic Logfire. It's observability for AI apps from the team behind Pydantic - agents, LLMs, APIs, database, and infrastructure in a single trace, queried with Postgres-compatible SQL. Your coding agent can query it too, through their MCP server. I'll tell you more later.
Connect with the hosts
Finally, if you want an artisanal, hand-crafted digest of every week of the show notes in email form? Add your name and email to our friends of the show list, we'll never share it.
Calvin #1: Python 3.12.14, 3.11.16, 3.10.21 - security releases
https://blog.python.org/2026/08/python-31214-31116-31021/
tarfile hardening. Multiple path-traversal bypasses of the data filter closed, including a symlink escape that bypassed the CVE-2025-4330 fix; extract() now applies the filter to link targets too.SourcelessFileLoader not using io.open_code() for .pyc), CVE-2026-4224 (expat crash on deeply nested content models), CVE-2026-3644 (control chars in http.cookies.Morsel), plus the completed CVE-2021-4189 fix in ftplib.ftpcp.HTMLParser, configparser regexes, unicodedata.normalize(), csv.Sniffer.sniff(), and ElementTree XPath index predicates.HTTPConnection.set_tunnel(), control chars blocked in wsgiref.handlers status, and webbrowser now rejects leading dashes (plus a %action prefix bypass).http.client now caps chunked trailer lines and 1xx interim responses at 100 each - a hostile server could previously hang the client forever despite a socket timeout.MemoryError, a bz2 stack overflow on reuse-after-error, and bundled libexpat bumped to 2.8.3.Michael #2: Codeberg’s AI-code ban tests its role as a GitHub alternative
Sponsor: Logfire from Pydantic
Your AI agent failed at 2am. Was it the model? A tool call? The database? Most observability tools can't tell you, because they only see part of your stack.
Pydantic Logfire sees all of it. One trace across your agents, LLMs, APIs, and database. Down to the infrastructure: services, Kubernetes, and hosts.
It's built on OpenTelemetry, with SDKs for Python, TypeScript, and Rust, and it works with any OTel-compatible language.
Every prompt, token count, and cost, right next to your vector searches and API calls.
You query everything with Postgres-compatible SQL. And so can your coding agent, through the Logfire MCP server.
Stop guessing. Read the trace.
Pydantic Logfire. AI, it's still just engineering.
Visit pythonbytes.fm/logfire today and sign up today. Get 10M records free every month, no card required. You can even click “Onboard with your coding agent” to copy a prompt to have claude or codex integrate Logfire into your app.
Thanks to Pydantic for supporting the show.
Calvin #3: Brett Cannon: what's missing for reproducible builds on PyPI
direct_url.json captures it when you install from a repo or archive, so the fix is putting the same info in sdist/wheel metadata..dist-info/sboms/ - sdists can't, since they're a tarball plus a precalculated PKG-INFO with nowhere to hang extra metadata. Either "don't use sdists" or an sdist v2.[build-system] in pyproject.toml is a defined entry point, so if backends recorded their own environment, you could reinstall and re-run the build.Michael #4: Extra extra extra, hear all about it
Extras
Calvin:
Joke: Beware of dog