AISeptember 4, 20269 min read

Our Own AI Automation Ran 22 Times and Published Nothing. Here Is the Teardown.

From 12 July to 9 August 2026 Avalon's AI publishing pipeline made 50 runs and delivered 230 posts without a single blank run. Then it made 22 more runs across 25 days and delivered zero, while still writing 33 drafts nobody ever saw. Every number, every bug, and the ten-minute check a Southeastern Massachusetts chiropractor should run on their own automation on Monday.

By Joshua Amado

Share
Underneath the Braga Bridge, where the city meets the highway.
Underneath the Braga Bridge, where the city meets the highway.

If you run a chiropractic practice in Southeastern Massachusetts, somebody has pitched you AI in the last six months. AI reception. AI booking. AI that answers the phone at 9pm and fills Tuesday's dead hour. The pitch is usually true in the narrow sense: these systems do work. Ours did.

That is exactly why this piece exists. This is a teardown of Avalon's own AI publishing automation, which worked beautifully for four weeks, then stopped working entirely, and did not tell anybody for 25 days. I am publishing our numbers because I would rather you learn this on my failure than on your own no-show rate.

What it did before it broke#

The system is a scheduled AI job. Twice a day it picks a subject, verifies a quote, picks a photograph from our library, writes five different posts and queues them to five channels. Every run writes a line into a log file. Here is what that log records.

50
Runs before the break
12 July to 9 August 2026
230
Individual posts delivered
Across five channels
0
Runs that published nothing
In that entire window

Thirty-six of those fifty runs hit all five channels cleanly. That is a real result and I am not going to pretend otherwise. An automation that publishes 230 pieces of scheduled content without a human touching it is worth having.

Then it stopped#

On 9 August the morning run went out on all five channels. It was the last time that happened.

WindowRunsRuns that published nothingPosts delivered
12 Jul – 9 Aug (morning)500230
9 Aug (night) – 3 Sep22220

Twenty-two consecutive runs. Twenty-five days. Zero posts. Twenty-three, if you count the run that produced this article, which also could not publish its own social posts. The root cause, written into the log by the system itself on the very first failed run and then repeated for three weeks, was that the connector it publishes through was not installed in the environment it was running in. Not a subtle bug. A missing plug.

The part that should worry you#

Here is the detail that matters more than the outage, and it is the reason I am writing this instead of quietly fixing it.

The system never looked broken. It ran on schedule, every time. It picked its subject. It verified its quote. It picked its photograph. It wrote all five posts, correctly, in the house voice. Then it saved them to disk and moved on.

There are now 33 files in our repository named DRAFT-UNPOSTED, dated 10 August through today. Thirty-three pieces of finished work, written by a machine that was doing its job perfectly, addressed to an audience that never received a word of it. The thirty-third is the set of social posts written to promote this article, which also could not be published, for the same reason, today.

The log said so plainly, every single time. Nobody was reading the log.

The mural along the Quequechan River Rail Trail — bold blues, pinks and reds.
The mural along the Quequechan River Rail Trail — bold blues, pinks and reds.Fall River, MA
If you haven't seen the code do the right thing yourself, that code doesn't work. If it does turn out to work, that's honestly just pure chance.
Simon Willison Creator of Datasette, co-creator of Django Source

Willison is writing about software engineers shipping AI-generated code. It transfers directly. Our automation had a green light in its own log format and a documented failure in its own notes at the same time, and for 25 days we took the first one on faith.

The other three bugs, since we are being honest#

The outage was the big one. It was not the only one.

The channel ID rotted, and stayed rotten for five days. On 31 July the system found that one of the social account IDs hardcoded in its instruction file no longer existed. It reported this in capital letters. It reported it again on 1, 2, 3, 4 and 5 August. A human fixed it on 5 August. In the meantime the automation had already started ignoring the hardcoded value and asking the platform for the live ID first, which is why those runs went out at all. The machine routed around the stale configuration faster than the humans updated it. As of this article, that same dead ID is sitting in the current instruction file again.

It reported failures that were successes. On 14 July, three of five publishing calls hit a ten-second API timeout. The system recorded them as failed. They had all actually published. Only a follow-up query to list the posts revealed it. An automation that lies to you in the optimistic direction is dangerous; one that lies pessimistically will have you posting twice.

Two runs are missing entirely. There are no entries at all for 29 or 30 July, in either slot. Either the scheduler did not fire or the job did not write back. We do not know which, because the only evidence a run existed was the line it wrote itself.

What we rebuilt#

Four changes, all of them boring:

  1. The failure is now the headline. If nothing published, that goes at the top of the run report in plain language, not buried at the end of a JSON note.
  2. Never trust a stored account ID. Ask the platform for the live list first, every run. This one was already proven in production between 1 and 5 August, when it was the only reason the pipeline kept working at all.
  3. Verify after a timeout, not before. A timed-out call is an unknown, not a failure. Query the actual state before recording an outcome.
  4. Confirm from the result, not the request. Every publish is checked against the returned success object per channel, not against the fact that the call was made.

Whether that rebuild holds is not something I can put a number on today. The honest "after" figure is the next 50 runs, and they have not happened yet. I will publish it either way.

Now the part about your practice#

Two things in that story apply directly to a chiropractic office in Fall River, Somerset, Swansea or Westport.

First: AI systems fail silently, and the failure looks like quiet. If you buy an AI receptionist or an automated booking flow, the failure mode is not an error message. It is a Tuesday that is a bit slow. Then another one. Nobody calls to tell you their booking confirmation never arrived; they just book with someone else.

Second: AI can only work with what it can actually read. In August we ran a controlled test on five Southeastern Massachusetts contractor websites, sending six different browser identities at each one. One major AI crawler was refused with an HTTP 403 on five sites out of five. A browser got through on all five. An invented, meaningless bot name we made up on the spot got through on four. Three of those sites explicitly permitted AI crawlers in their own robots.txt file, and their servers blocked them anyway. Their owners have no idea. The sites are anonymised here as Sites A, F, I, N and S, and none of them did anything wrong.

And when the AI does get in, this is what it finds on a local chiropractic website. From our audit of the 20 chiropractors Google returns for Fall River, run on 3 August 2026:

10 of 20
Sites with no structured data at all
Nothing for a machine to read
15 of 20
Sites with no online booking
The AI can describe you, not book you
7 of 20
Sites with no analytics
No way to know if any of this works
7.4s
Median mobile LCP
Google's threshold for "good" is 2.5s

Those 20 practices hold 744 Google reviews at a 4.79 weighted average. The care is excellent. The plumbing is not.

The free fix, and it takes ten minutes#

Do this Monday morning. It costs nothing.

Be a patient. On your phone, on cellular data, not the office wifi: go to your own website, find the booking or contact path, and book yourself a fake appointment under a fake name. Then wait. Did the confirmation arrive? Did it land in spam? Did the request actually reach the front desk, or the front desk's old email address? Did anyone notice?

Then delete the fake booking and put a recurring reminder in your calendar to do it again on the first Monday of every month.

That is it. Ten minutes, free, and it is the single check that would have caught our 25-day outage on day one. Every automated system in your practice — reminders, confirmations, review requests, the contact form, the AI receptionist — deserves one human who periodically proves it still works by being the customer.

What we could not measure#

  • Whether the rebuild works. Not measured. The result is in the next 50 runs.
  • What the outage cost. Not measured. Our social log records what was sent, never what it earned. We have no engagement or follower data, so "25 days of silence" has no dollar figure attached and I am not going to invent one.
  • Why the 29 and 30 July runs are missing. Not measured. The evidence would have been written by the run that did not happen.
  • How long any pipeline run takes. Not measured. We never recorded start and end times, which is its own small embarrassment for a company that sells measurement.
  • Whether the AI crawler test generalises. The 403 result is five sites, one afternoon, in one vertical. It is a real finding on a small sample, not a regional statistic. No chiropractic website has been tested this way yet.
The waterfront boardwalk at golden hour, lamps coming on along the rail.
The waterfront boardwalk at golden hour, lamps coming on along the rail.Fall River, MA

The reason to publish a failure like this is simple. Every vendor selling you AI will show you the 50 good runs. We had those too. What decides whether the thing is actually worth owning is what happens on run 51, when it stops, and how long it takes anybody to notice.

If you want to know whether the automation already running in your practice is publishing, confirming and booking the way you think it is, call me and I will check it with you. Ten minutes, and the answer is yours whether or not you ever hire me.


Joshua Amado, Avalon Partner. 774.559.8992 · Joshua.Amado@AvalonPartner.com

Want help putting this into practice?

Avalon Partner helps Fall River and South Coast businesses fix the gaps that cost them leads. Call 774.559.8992 or email Joshua.Amado@AvalonPartner.com.

Keep reading