Django: django-upgrade 1.32.0 out now, with 44 AI-assisted bug fixes Adam Johnson released django-upgrade 1.32.0, which fixes 44 bugs found and fixed by Claude Fable across two rounds of self-directed bug discovery using the prompt "Find and fix bugs." The fixes include correcting the django_urls fixer's handling of literal angle brackets and unescaped dots in url()-to-path() conversions, and a long-standing error where the unescape_entities fixer rewrote calls to html.escape() instead of html.unescape(). Johnson said the bottlenecks were his review capacity and GitHub Actions CI runs per commit, and concluded the bar for software quality should be raised given such LLM power. Django: django-upgrade 1.32.0 out now, with 44 AI-assisted bug fixes django-upgrade https://github.com/adamchainz/django-upgrade is my tool for automatically upgrading your project code for new Django versions. It rewrites your Python files to fix deprecations and adopt some new features, taking a chunk of the monotony out of upgrading between Django versions. Yesterday, I released version 1.32.0 https://django-upgrade.readthedocs.io/en/latest/changelog.html , which fixes 44 bugs. Some are big, some are small, and all of them were found by Claude Fable, with this simple prompt: Find and fix bugs Yup, that’s it. Across two rounds of self-directed bug discovery, Claude found and fixed these bugs, matching the coding style and changelog entries. It needed one more prompt to split the fixes into individual commits. I am pretty astounded at how well this little project worked. Claude worked “in the cloud”, while I was doing other stuff, so the bottlenecks to progress were my review capacity and CI runs on GitHub Actions for each commit. My big takeaway is that given such LLM power, the bar for software quality should be raised. Let’s review some of the bugs that it fixed, within the individual code fixers in django-upgrade. Bad url to path conversions The django urls fixer converts old url calls, with their regular expression patterns, into path https://docs.djangoproject.com/en/stable/ref/urls/ path calls with the newer route syntax, where possible. Claude found two cases where the “where possible” condition was too optimistic. First, literal angle brackets. In a regular expression, < and are literal characters, but in path route syntax they declare parameters. The fixer copied them through unchanged: - url r"^go/