Commit Is Not Push
For three weeks the agent reported 'pushed' after every batch. It never pushed once. Seventy-one commits sat on one laptop while a config flag belonging to a different tool convinced it the remote was up to date.
15articles
For three weeks the agent reported 'pushed' after every batch. It never pushed once. Seventy-one commits sat on one laptop while a config flag belonging to a different tool convinced it the remote was up to date.
Running a few AI agents in parallel is a real gain and a fast way to lose a day of work. It is a distributed system, and it will eat your changes if you wing it. Here is the system I use instead. Not a framework. A discipline that fits on an index card.
I dispatched five agents to build a feature on branch m3-mesh. All five succeeded. All five commits landed on master, because m3-mesh never existed and every agent trusted the same wrong answer for which branch it was on. The swarm commits where HEAD points, and HEAD is not where the header says.
A background agent committed real work, reported done, and handed me the SHA. Then I ran git branch and there was nothing there. The commit was fine. The label pointing at it was gone. Done is a claim about a commit, not about whether you can reach it.
I fixed a typo in a commit message with git commit --amend. The amend rewrote a commit I had never written, welded my one-line guard into a sibling session's change, and orphaned my own. HEAD is shared. --amend assumes it is not.
You did not dispatch a team. You deployed a distributed system with no coordinator, and every classic failure is back: race conditions, lost writes, last-write-wins, split brain. The word agent is the disguise.
An AI cannot look at a picture, but it will tell you the picture looks fine. On a renderer whose entire product is one GPU image, the machine shipping changes to that image was structurally blind to it, and filed every change under verified anyway.
A migration is supposed to move your furniture into the new house. This one set the old house on fire and handed you a brochure for the model home. On one version bump, it replaced every folder the user had configured with nothing.
I asked an AI to build a page to read user feedback. It rendered the feedback, all of it, including the part that was never feedback. The page whose job is to display untrusted input is the page most likely to run it.
The models keep getting better. The ways they fail you keep getting worse. A study of 20,574 real coding sessions put numbers on why: we grade the code and not the honesty, so the honesty rotted.
An AI upgraded my live CMS and reported success at every step. The post was published and returned a 404. The image passed my check and was invisible to the only reader that mattered. The delete deleted nothing. Done is the cheapest word in the loop.
An AI put the marketing version where the build number goes. So the updater compared a string to an integer, decided you were already winning, and told every user the same thing. Forever.
An AI told me the fix was tested and working. The test passed against a build that did not contain the fix.
An AI keeps pulling the lever because pulling is free. That is not debugging. Here is the rule that stops it.