<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: RollNuts</title>
    <description>The latest articles on DEV Community by RollNuts (@rollnuts).</description>
    <link>https://dev.to/rollnuts</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4032918%2Fce3f9e59-b663-40da-a35a-58cc21b717ff.png</url>
      <title>DEV Community: RollNuts</title>
      <link>https://dev.to/rollnuts</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rollnuts"/>
    <language>en</language>
    <item>
      <title>Two AI agents, one repo — main kept breaking, so I built a PR traffic controller as a GitHub App</title>
      <dc:creator>RollNuts</dc:creator>
      <pubDate>Fri, 17 Jul 2026 01:45:54 +0000</pubDate>
      <link>https://dev.to/rollnuts/two-ai-agents-one-repo-main-kept-breaking-so-i-built-a-pr-traffic-controller-as-a-github-app-45ep</link>
      <guid>https://dev.to/rollnuts/two-ai-agents-one-repo-main-kept-breaking-so-i-built-a-pr-traffic-controller-as-a-github-app-45ep</guid>
      <description>&lt;h2&gt;
  
  
  What I built
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Veripsa Core&lt;/strong&gt; is a GitHub App that warns you — &lt;em&gt;before&lt;/em&gt; merge — when open PRs are about to collide on main.&lt;/p&gt;

&lt;p&gt;Install it on a repository and covered pull requests get an advisory check.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Install: &lt;a href="https://veripsa.com/go/install?source=devto:veripsa-parallel-pr-collision" rel="noopener noreferrer"&gt;https://veripsa.com/go/install?source=devto:veripsa-parallel-pr-collision&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Site: &lt;a href="https://veripsa.com" rel="noopener noreferrer"&gt;https://veripsa.com&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why this problem shows up
&lt;/h2&gt;

&lt;p&gt;When you run several AI coding agents in parallel — Claude Code, Codex, GitHub Copilot — the number of open PRs goes up.&lt;/p&gt;

&lt;p&gt;Say one agent works on auth, another on the API, another on tests. Each PR looks correct on its own. CI is green on all of them.&lt;/p&gt;

&lt;p&gt;And main can still break depending on the order they land:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PR-A and PR-B rewrote the same area, separately&lt;/li&gt;
&lt;li&gt;one landed first, the other carried a stale assumption in&lt;/li&gt;
&lt;li&gt;no line-level conflict ever appeared, but merging both broke the meaning&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Humans working in parallel hit this too. Parallel AI agents just make it much more visible, because the PR count and rebase count go up.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why existing tools don't quite see it
&lt;/h2&gt;

&lt;p&gt;Collisions aren't a new problem. What makes them hard to see is that per-PR inspection and PR-to-PR relationships are different things.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;git&lt;/strong&gt; tells you about conflicts at merge time. If the lines don't overlap, two changes can collide in meaning without ever being a git conflict.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CI&lt;/strong&gt; runs each PR in isolation. A green and B green says nothing about "what if A &lt;strong&gt;and&lt;/strong&gt; B both land?"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Review&lt;/strong&gt; happens one PR at a time. Nobody re-checks every other open PR heading toward the same surface.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Merge queues&lt;/strong&gt; stabilize the final merge of &lt;em&gt;ready&lt;/em&gt; PRs. That's a different time window from the draft / pre-review stage where parallel-agent traffic piles up.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The blind spot is not &lt;em&gt;inside&lt;/em&gt; a PR. It's &lt;strong&gt;between PRs&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it does
&lt;/h2&gt;

&lt;p&gt;Veripsa Core does not auto-resolve conflicts.&lt;/p&gt;

&lt;p&gt;Before merge, it posts decision material as a GitHub check and a PR comment:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This PR is heading for the same landing area as another open PR.&lt;br&gt;
There's a PR that should land first.&lt;br&gt;
Here's what to check before you rebase.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Three properties:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Advisory&lt;/strong&gt;: Veripsa never blocks a merge by itself. Whether it gates anything is decided by your branch protection / required status checks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Content-free&lt;/strong&gt;: it may read file bodies transiently to compute the signal, but it does not store or display source file bodies or diff contents. What it keeps is minimal operational metadata — details at &lt;a href="https://veripsa.com/trust" rel="noopener noreferrer"&gt;veripsa.com/trust&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Not a safety proof&lt;/strong&gt;: it never says "this merge is safe." It reports the PR-to-PR relationships it can see.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Turning the pause into an actual gate
&lt;/h3&gt;

&lt;p&gt;For heavy collisions, Veripsa surfaces a pause with an acknowledgement path.&lt;/p&gt;

&lt;p&gt;It only actually blocks the merge button if you mark the Veripsa check as a required status check in &lt;a href="https://docs.github.com/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches" rel="noopener noreferrer"&gt;branch protection&lt;/a&gt; or rulesets. Without that, the comment and check stay advisory.&lt;/p&gt;

&lt;p&gt;Whether required checks are available on private repositories depends on your GitHub plan. On public repositories they're free.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it actually looks like
&lt;/h2&gt;

&lt;p&gt;Here's the comment two PRs touching the same file produced (&lt;a href="https://github.com/GetVeripsa/ai-pr-collision-lab/pull/1" rel="noopener noreferrer"&gt;public PR #1&lt;/a&gt;):&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fef39fwzo353xp6hczvej.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fef39fwzo353xp6hczvej.gif" alt="Two AI-agent PRs collide; after the first merges, Veripsa's verdict updates — recorded on a real public repo" width="800" height="498"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;✓ Clear to land — nothing is blocking you&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This PR reserves: &lt;code&gt;orders/pricing.py&lt;/code&gt;, &lt;code&gt;tests/test_pricing.py&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;⏳ 1 in-flight PR is waiting behind this one&lt;/strong&gt; — &lt;strong&gt;PR-2&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That comment is traffic information at the moment both PRs were open: PR #1 in front, PR #2 queued behind. After PR #1 merged, &lt;a href="https://github.com/GetVeripsa/ai-pr-collision-lab/pull/2" rel="noopener noreferrer"&gt;PR #2&lt;/a&gt;'s final state changed to &lt;code&gt;Cleared — the earlier overlap has resolved&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pricing
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Free to install while in early access.&lt;/li&gt;
&lt;li&gt;If paid plans come later, they'll live in GitHub Marketplace-native billing.&lt;/li&gt;
&lt;li&gt;Required-check management, retention, team dashboards, audit trails, priority support are future candidates — nothing paid is being promised as of this article.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://veripsa.com/pricing" rel="noopener noreferrer"&gt;https://veripsa.com/pricing&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How to use it
&lt;/h2&gt;

&lt;p&gt;Install the GitHub App and covered PRs get the check. Nothing to add to CI.&lt;/p&gt;

&lt;p&gt;If your agents open PRs, rebase, and drive them to the edge of merge, add one rule to your &lt;code&gt;CLAUDE.md&lt;/code&gt; / &lt;code&gt;AGENTS.md&lt;/code&gt;: &lt;strong&gt;read the Veripsa check and comment before merging.&lt;/strong&gt; That's how the advice enters the loop.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Install: &lt;a href="https://veripsa.com/go/install?source=devto:veripsa-parallel-pr-collision" rel="noopener noreferrer"&gt;https://veripsa.com/go/install?source=devto:veripsa-parallel-pr-collision&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Site: &lt;a href="https://veripsa.com" rel="noopener noreferrer"&gt;https://veripsa.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Running it with agents: &lt;a href="https://veripsa.com/docs/with-agents" rel="noopener noreferrer"&gt;https://veripsa.com/docs/with-agents&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As AI agents generate more PR traffic on GitHub, the scarce thing stops being PR generation or review.&lt;/p&gt;

&lt;p&gt;It becomes: which PR, in which order, with which warnings read, gets to land on main.&lt;/p&gt;

&lt;p&gt;Veripsa Core is a GitHub App that puts that pre-merge decision material right on the PR.&lt;/p&gt;

</description>
      <category>github</category>
      <category>ai</category>
      <category>productivity</category>
      <category>programming</category>
    </item>
    <item>
      <title>Git worktrees aren't enough for parallel AI agents</title>
      <dc:creator>RollNuts</dc:creator>
      <pubDate>Fri, 17 Jul 2026 01:40:41 +0000</pubDate>
      <link>https://dev.to/rollnuts/git-worktrees-arent-enough-for-parallel-ai-agents-38b7</link>
      <guid>https://dev.to/rollnuts/git-worktrees-arent-enough-for-parallel-ai-agents-38b7</guid>
      <description>&lt;p&gt;Worktrees isolate each AI agent's working directory, but two agents in separate worktrees can still write code that only collides when both PRs merge to main.&lt;br&gt;
If you run several AI coding agents at once, you have probably reached for git worktrees. It is the standard answer, and it is a good one: give each agent its own worktree, and no agent overwrites another agent's files mid-run. Each agent gets a clean, isolated checkout on its own branch, off the same shared repo.&lt;br&gt;
Use worktrees. They solve a real problem. But they solve the execution problem, not the merge problem — and for parallel agents, the merge problem is the one that bites.&lt;br&gt;
What worktrees actually isolate&lt;br&gt;
A worktree gives each agent a separate working directory. Agent A editing files in its worktree cannot clobber the files Agent B is editing in a different one. No half-written file from one run leaks into another. No branch-switch thrash. The agents stop stepping on each other's filesystem.&lt;br&gt;
That is genuinely valuable, and if you were previously running multiple agents against a single checkout, worktrees will feel like a night-and-day upgrade.&lt;br&gt;
What worktrees don't isolate&lt;br&gt;
Here is the gap. Two agents in two isolated worktrees can still change related code — code that reads clean in each branch on its own, and only clashes when both branches land on main.&lt;br&gt;
The isolation is spatial: separate directories. It is not semantic. Nothing about a worktree knows that Agent A's change to a shared helper and Agent B's new caller of that helper assume different things about how it behaves. Each PR compiles. Each PR passes its own tests. Each PR looks correct in review. The problem lives in the relationship between the two open PRs, and no single worktree can see the other one.&lt;br&gt;
This is not a rare edge case. AgenticFlict, a large-scale study of merge conflicts in AI coding agent pull requests (arXiv, 142k+ agent PRs across 59k+ repositories), found a 27.67% merge-conflict rate — and textual git conflicts are only the visible slice. The quieter failures are the ones where git merges cleanly and the breakage shows up later, on main, after both PRs are already in.&lt;br&gt;
Why nobody catches it&lt;br&gt;
Walk the tools you already have and notice what each one looks at:&lt;br&gt;
Git compares text at merge time. If the two changes touch different lines,&lt;br&gt;
it reports no conflict — even when the logic collides.&lt;br&gt;
CI runs on one PR's branch. It exercises the interactions your tests cover,&lt;br&gt;
in isolation from the other open PR.&lt;br&gt;
Code review looks at one PR at a time. A reviewer approving PR #12 is not&lt;br&gt;
also holding PR #47 in their head.&lt;br&gt;
Merge queues serialize ready PRs and rebuild them in order — useful, but&lt;br&gt;
they engage at the end, once a PR is already ready to land.&lt;br&gt;
Every one of these is doing its job correctly. The common blind spot is the same one worktrees have: they each see a single PR. Nobody is watching the cross-PR relationship while the PRs are still open — which is exactly when a heads-up would let you order the merges, or ask one agent to rebase on the other, before anything breaks.&lt;br&gt;
The layer worktrees are missing&lt;br&gt;
Worktrees isolate agents so they can run in parallel. The missing piece is something that watches the open PRs so they can merge in parallel — a layer that looks across branches instead of within one.&lt;br&gt;
That is the gap Veripsa Core fills. It is a GitHub-native, advisory check that looks at your open pull requests and warns which ones may overlap before they reach main. It posts the signal on the PR, where authors and reviewers already are. It stays advisory — it does not hard-block your merge; a human can review the situation and proceed. And it is content-free: it never stores your source file bodies. It works within a single repository today.&lt;br&gt;
It is not a merge queue, not an AI reviewer, and not CI. It is the cross-PR heads-up those tools were never built to give.&lt;br&gt;
The short version&lt;br&gt;
Worktrees are the right first move for parallel AI agents — set them up. Just know what they cover: they keep agents from overwriting each other while they run. They do not keep two independent branches from colliding when they merge. For that, you need something looking at the relationship between open PRs, not at each one alone.&lt;br&gt;
See how the advisory check reads on a real PR in the sandbox at /try, compare it against merge queues and AI reviewers on /compare, or read the product contract in /docs.&lt;/p&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>git</category>
      <category>softwareengineering</category>
    </item>
  </channel>
</rss>
