{"slug": "property-testing-with-ai-agents-the-swarm-run-behind-13-merged-fixes-in-uv-and", "title": "Property testing with AI agents: the swarm run behind 13 merged fixes in uv, Prometheus and rv", "summary": "Inanna Malick ran an AI agent swarm on six open source projects between 5 and 8 October 2026 that produced more than 100 correctness findings, and by 28 October 13 of her fix pull requests from that run had merged — 4 in uv, 3 in Prometheus and 6 in rv — according to her post and GitHub merge timestamps. The agents wrote reference models, random operation generators and assertions that a property-testing library such as proptest then ran for CPU time rather than tokens; the discovery suite behind rv PR #808 passed 600,000 generated cases before the fix went up. Most filed work remains open for lack of review: uv had 8 open items, Prometheus 21, Jujutsu 4 and OpenAI Codex 13 issues, while Babel closed 8 of 9 PRs unmerged.", "body_md": "# Property testing with AI agents: the swarm run behind 13 merged fixes in uv, Prometheus and rv\n\nProperty testing with AI agents means the agents write the test machinery, not the test cases: a simple reference implementation, generators of random operation sequences and assertions comparing the two, which a property-testing library then runs for CPU time instead of tokens. [Inanna Malick](https://recursion.wtf/posts/agents-and-property-tests/) ran this on six open source projects between 5 and 8 October 2026. By her count that run, plus an earlier one on Apollo Router, produced more than 100 correctness findings. By 28 October, 13 of her fix PRs from the six-repo run had merged: 4 in [uv](https://stackness.dev/tools/uv), 3 in [Prometheus](https://stackness.dev/tools/prometheus) and 6 in [rv](https://stackness.dev/tools/rv). She published no token or dollar figures. This is her run, not mine; I rebuilt the record from her post and the GitHub threads.\n\n## What is property testing with an agent swarm?\n\nProperty testing with an agent swarm splits the work in two. Coding agents write the slow, careful part: a reference model, generators and assertions for each complicated data structure or algorithm. A property-testing library such as [proptest](https://stackness.dev/tools/proptest) then generates and checks cases, and shrinks each failure to a small reproduction. Malick's one-line version: \"Have agents build the machinery to find bugs in your repo, then let that machinery generate and check cases without spending tokens on each one.\"\n\nThe reference model can be crude. In her words: \"A Vec and some O(n²) loops may be enough to check a heavily optimized implementation.\" Once the suite exists, it \"can check as many histories as you’re willing to run\". One data point on scale: the discovery suite behind [rv PR #808](https://github.com/spinel-coop/rv/pull/808) \"passed 600,000 generated cases\" before the fix went up.\n\nThe swarm part is the division of labour: a planner picks targets, an orchestrator hands out work, and workers write property tests in their own git worktrees. Only a regression test and a minimal fix per bug go upstream.\n\n## The result: 13 merged fixes, and a lot still open\n\nThe run touched [OpenAI Codex](https://stackness.dev/tools/codex-cli), [Jujutsu](https://stackness.dev/tools/jujutsu), uv, Prometheus, [Babel](https://stackness.dev/tools/babel) and rv. Her post says twelve fixes had merged as of 13 October. That count matches the merge timestamps on GitHub, and a 13th, rv #808, merged on 27 October. Most of what she filed is still open, mainly because nobody has reviewed it yet.\n\n| Repo | Filed | Merged by 28 Oct | Closed unmerged | Open | \n|---|---|---|---|---|\n| uv | 11 PRs, 1 issue | 4 | 0 | 8 | \n| Prometheus | 25 PRs, 1 issue | 3 | 1 | 21 | \n| rv | 11 PRs | 6 | 4 | 1 | \n| Babel | 9 PRs | 0 | 8 | 1 | \n| Jujutsu | 4 PRs | 0 | 0 | 4 | \n| OpenAI Codex | 14 issues | 0 PRs; 1 issue fixed by OpenAI | n/a | 13 issues | \n\n*Counted from the GitHub API on 28 October 2026. The Prometheus issue was fixed by another contributor, and the uv issue is still open.*\n\nThe merged fixes are real but small. In uv, overriding `leaf==1; extra == 'a' or extra == 'b'` with `leaf==2` could install `leaf` when neither extra was requested ([#22237](https://github.com/astral-sh/uv/pull/22237)). In rv, `~> 1.0` accepted the prerelease `2.0.a`, unlike RubyGems ([#814](https://github.com/spinel-coop/rv/pull/814)). In Prometheus, `BucketQuantile` panicked on empty input where its docs promise `NaN` ([#19927](https://github.com/prometheus/prometheus/pull/19927)), though the PR itself says current PromQL call sites guard against that. For Codex, OpenAI closed [issue #51878](https://github.com/openai/codex/issues/51878) and wrote that the fix will ship in \"either 0.163.0 or 0.164.0\".\n\n## The stack: OpenAI models, proptest and a skill file\n\nThe stack behind Malick's agent swarm is three OpenAI models in the OpenAI Codex harness, a property-testing library per language and one long skill file of instructions. The post names the models and the Rust library. The pull requests name the harness and the JavaScript library. How many agents ran at once is not published anywhere.\n\n- **Planner:** GPT-6 Astra (\"Astra for planning\").\n- **Orchestrator and workers:** GPT-6.1 Sol, plus \"Lunas\", in parallel git worktrees. The uv, Jujutsu and Babel PRs carry`Assisted-by: GPT-6.1 Sol` lines; the Prometheus and rv PRs name no model. That \"Lunas\" means GPT-6 Luna is my reading; no PR names it. All three are[OpenAI GPT](https://stackness.dev/tools/gpt) models.\n- **Harness:**[OpenAI Codex](https://stackness.dev/tools/codex-cli) . The post does not say so, but her Prometheus PRs read \"Developed with AI assistance by OpenAI Codex\", and her skill installs into`~/.codex/skills/` .\n- **Property-testing library:** proptest and`proptest-state-machine` for Rust, and[fast-check](https://stackness.dev/tools/fast-check) for Babel, whose PRs say \"The discovery generators and fast-check dependency remain off this PR branch.\" The skill says to use \"the repository's equivalent framework for other languages\", which in Python means[Hypothesis](https://stackness.dev/tools/hypothesis) . The Go library for Prometheus is not named.\n- **Instructions:**[proptest-praxis](https://github.com/inanna-malick/agent-skills/blob/main/skills/proptest-praxis/SKILL.md) , an MIT-licensed skill of about 20 KB.\n\n## The run, stage by stage\n\nThe run follows four stages that Malick's post and the proptest-praxis skill describe: ask the maintainers where bugs hide, let a planner pick targets with a simple model, have workers build generators that are checked against a planted bug, and turn each confirmed bug into one small pull request. Only the last stage produces anything a maintainer sees.\n\n### Ask the maintainers what worries them\n\nThe run starts with people, not agents. \"Pick a complex repo at work. Ask the people who know it well which parts worry them.\" The rv run was requested by one of its maintainers, according to her comment on [rv #805](https://github.com/spinel-coop/rv/pull/805). The planner gets those leads and is told to audit beyond them.\n\n### The planner picks targets with a simple way to check them\n\nGood targets are \"custom data structures, query planners, graph algorithms: complicated behavior with a simple way to check correctness\". The skill lists the matching checks: a Vec and linear scans for an optimized collection, full recomputation for a cache or incremental summary, a fresh traversal for an incremental graph algorithm, a small interpreter for a query planner, round trips for parsers and serializers. My reading of the skill is that code with no simpler model to compare against is a poor target, and so is behaviour nobody can state as a contract; the skill tells agents to \"Surface genuine ambiguity for discussion\" instead of inventing a specification.\n\n### Workers build generators, and the run checks they can fail\n\nGenerators decide whether the suite finds anything. \"Use a small key pool: fresh random keys mostly produce unrelated inserts and missing-key lookups.\" And: \"Inspect sample traces: a million sequences that barely touch the same key aren’t buying you much.\" When a target produces nothing, the suite gets a planted bug first: \"Temporarily remove a cache invalidation: the tests should catch stale results. If they pass, improve the generators or assertions.\"\n\n### Each confirmed bug becomes one small pull request\n\nEach confirmed bug gets a branch from main with only a regression test and the fix, checked to fail before and pass after. \"Nobody wants a giant agent-generated PR full of test machinery.\" The reviewer reads a plain unit test and never has to trust the generator or the reference model.\n\n## What one run costs is unpublished\n\nNo token count, dollar figure, number of parallel agents or hardware spec tied to this run has been published, in the post, the skill, the PRs or the author's Bluesky posts. The time figures are loose and self-reported: \"about three days of agents running in the background\" for Apollo Router, an afternoon for Codex, two hours for five bugs in the Swift library Boutique. The PR dates show the six-repo filings took about two days, from the evening of 5 October to the start of 8 October UTC, with the agents running \"mostly in the background alongside regular work\".\n\nTwo published studies of agents writing property tests do give costs, for a different method:\n\n| Run | Model and harness | Scope | Cost and time | \n|---|---|---|---|\n| Malick, October 2026 | GPT-6 Astra, GPT-6.1 Sol, OpenAI Codex | 6 repos, 13 merged fixes | Not published | \n| [Maaz et al.](https://arxiv.org/abs/2510.09907) , October 2025 | Claude Opus 4.1, custom [Claude Code](https://stackness.dev/tools/claude-code) command, Hypothesis | 100 Python packages, 984 bug reports | $5,474.20 in total, $9.93 per valid bug, 136.6 agent-hours, 2.21 billion tokens | \n| [PBT-Bench](https://arxiv.org/abs/2605.15229) , 2026 | Eight models on OpenHands | 100 problems, 365 injected bugs | $2,288 across eight models, about 200 node-hours | \n\nThe difference in method is what makes the machinery cheaper. In the Maaz study, every module gets its own agent run of about 110 turns, which cost $5.81 at the median whether or not it found anything. In Malick's method the tokens go into building a suite once, and every case after that costs CPU only. No source measures the two side by side, so there is no break-even number to give. Nothing shows what she paid, since Sol also runs inside Codex on ChatGPT plans. The API list prices are $10 in and $50 out per million tokens for Astra, and $2 in and $10 out for Sol.\n\n## Where the run broke\n\nMalick's run broke mostly at review, after the generators had done their part. [Babel](https://github.com/babel/babel/pull/18302) closed all eight fix PRs within about two hours under its [AI policy](https://github.com/babel/babel/blob/main/AI_POLICY.md), which says \"You are not allowed to post LLM-generated PR descriptions\". The rejection was about the descriptions, not whether the bugs were real. A PR with 17 failing tests is still open. The post does not mention it.\n\nMaintainers also judged some findings not worth fixing. In rv, one fix was \"incorrect (at least incompatible with RubyGems)\", another \"complicates version comparison just to support a very rare edge case\". A Prometheus maintainer [asked](https://github.com/prometheus/prometheus/pull/19942) \"have you run into this in practice?\", and the PR was closed when the answer was no. Many of the findings are library-contract violations with no user-visible failure, and maintainers split on whether those are worth a merge. Volume was its own problem: \"you seem to have opened ~25 PRs in quick succession,\" a Prometheus maintainer wrote on [#19917](https://github.com/prometheus/prometheus/pull/19917).\n\nOpenAI's cybersecurity filter also got in the way: an occasional \"This content can’t be shown\" notice, which Malick got past by talking the agent down or compacting the context.\n\n## A property suite catches what an AI reviewer cannot, and the reverse\n\nA property suite and an AI code reviewer check different things, and uv #22237 shows both. The swarm found the extras bug and wrote the fix. [GitHub Copilot](https://stackness.dev/tools/github-copilot)'s review bot then flagged that the same guard had to apply in `Constraints::apply`, or the constraint would still request the package. uv maintainer Charlie Marsh wrote that change himself, pushed it to her branch and merged the PR the same day. On rv, Copilot recommended approving every PR it reviewed, including two the maintainer objected to: he closed one, and Malick withdrew the other.\n\n*Screenshot of [astral-sh/uv pull request #22237](https://github.com/astral-sh/uv/pull/22237) by Inanna Malick, with a review by GitHub Copilot, 28 October 2026.*\n\nEvery fix lands as an ordinary unit test, so the suite adds a layer next to the unit tests rather than replacing them. Apollo Router was \"already backed by thousands of unit and integration tests plus extensive snapshot testing\" before this method found more than 30 bugs in it, by Malick's count. That layer sits next to the [six verification layers for agent-written pull requests](https://stackness.dev/blog/alternatives-to-line-by-line-code-review-six-verification-layers-for-agent-written-pull-requests-and) I compared earlier, and its evidence is merged upstream fixes, not a benchmark score.\n\nOn Stackness, as of 28 October 2026, no public stack lists proptest, Hypothesis or fast-check, and uv sits on one, mine ([how I count](https://stackness.dev/about/data-sources)). The agents sit among the [AI tools developers list](https://stackness.dev/categories/ai-tools).\n\n## Run it yourself\n\nRunning Malick's method yourself starts from the one piece she published: the proptest-praxis skill, MIT-licensed, in her agent-skills repository. No orchestration scripts or discovery suites for the six repos are public, so the swarm setup, the number of agents and the model mix are yours to choose. The install below is for OpenAI Codex, the harness her README names.\n\n```\ngit clone https://github.com/inanna-malick/agent-skills\nmkdir -p ~/.codex/skills\nln -s \"$PWD/agent-skills/skills/proptest-praxis\" ~/.codex/skills/proptest-praxis\n```\n\nThen, in the agent, invoke `$proptest-praxis` and point it at the repository with the maintainers' list of worries. For other harnesses, give the agent the `SKILL.md` directly. Before trusting a quiet run, plant a bug and check the suite catches it. Each pull request carries one regression test and one fix, with the description in your own words.\n\n## New posts by email\n\nAbout one email a week with what we published. No account needed.\n\n## Which of these do you use?\n\nNobody on Stackness runs rv yet. Tick what you use and be the first.\n\n[Play Lonny Eagle Amateur Skater 4A pixel art skateboarding game. Signing up opens it straight away.Sign up to play](https://stackness.dev/games/lonny-eagle)", "url": "https://wpnews.pro/news/property-testing-with-ai-agents-the-swarm-run-behind-13-merged-fixes-in-uv-and", "canonical_source": "https://stackness.dev/blog/property-testing-with-ai-agents-swarm-merged-fixes-uv-prometheus-rv", "published_at": "2026-10-28 08:18:32+00:00", "updated_at": "2026-10-28 09:12:48.822009+00:00", "lang": "en", "topics": ["ai-agents", "ai-tools", "developer-tools", "ai-research"], "entities": ["Inanna Malick", "uv", "Prometheus", "rv", "proptest", "OpenAI Codex", "Jujutsu", "Babel"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/property-testing-with-ai-agents-the-swarm-run-behind-13-merged-fixes-in-uv-and", "markdown": "https://wpnews.pro/news/property-testing-with-ai-agents-the-swarm-run-behind-13-merged-fixes-in-uv-and.md", "text": "https://wpnews.pro/news/property-testing-with-ai-agents-the-swarm-run-behind-13-merged-fixes-in-uv-and.txt", "jsonld": "https://wpnews.pro/news/property-testing-with-ai-agents-the-swarm-run-behind-13-merged-fixes-in-uv-and.jsonld"}}