Monthly Archives: August 2026

Example of a Claude Fable 5 error letting my payment process down

As I’m seeing many people that embraces the hype of blindly trusting IA, and not reviewing the code, I want to share with you a case, where Claude Fable 5 introduced an error in Production, in the payment process of a side project, in July 2026.

Reviewing routinely the payment transactions, I noticed a 100€ purchase from which I didn’t know.

I located the user that paid and I saw that in the database that payment was not registered.

I checked the PHP logs in that time range and I saw a 500 error, just after the user paid in the payment provider and came back to the site, just in the moment that the database is updated.

The user tried 3 times to refresh the payment page.

The error was, that Claude had introduced objects of the type DateTimeImmutable, so a date/time that cannot be changed.

But Doctrine was mapping a a mutable DateTime, and that was incompatible, and crashed.

It was a programming error introduced by Claude.

So, after a successful payment, when the user came back to the site, it would get an error, always, and the table reflecting that the plan was paid would never get updated.
I didn’t review most of the code of the new features. When I created the project I tested against the test sandbox and everything worked, and I moved to Production. But at some point, in the development of the next features, the payment process was broken.

So, Claude broke the payment, and neither me or it detected it.

After every new code change I had tried the new functionalities, checked the database changes, but I didn’t validate again the payment flow. Basically, after I moved to Production my provider disabled the Test payment sandbox, so, in order to test the full flow I had to pay 100€ for real and as I tried at the beginning, I didn’t try it again.

So, at some point, Claude introduced a bug, that I didn’t detect, that Claude didn’t detect, and that was impacting directly in the payment process, and I had a user that paid and that had no service and he never contacted me.

I reached the user and explained that I had a technical problem, and I offered a refund but the user declined, he wanted the service. What I did was to upgrade their plan for free to have 100 times more capacity, as thanks for their fidelity.

I implemented the mechanisms so an error like this cannot happen again, but as I see many decision makers trusting blindly the AI, I wanted to share this real experience, not detected, with impact in the payment process.

This is a good lesson to learn with a personal side project that it’s starting, but would be an ugly one to discover with an already running system from a system, already generating thousands of euros per hour.

That’s the explanation that Claude Fable 5 provided to me.

If you use AI for generating code you know that it makes mistakes. Claude is very good, but some times it makes mistakes. It may be a random character introduced in a Varnish config file, or a missing + sign, pointing to an inexistent line number on a file, or introducing incorrect expression in a nginx host config section or a Symfony route. Most of the times the modern models catch the errors before, but not always.

We spent decades trusting deterministic programs, which given the same input and environment, produce the same output.

But you should bear in mind that the generative AI is not deterministic, which means that given the same input it produces different outputs.

Having different agents with different roles is useful, and an improvement, although it’s expensive in tokens and may miss errors.

Asking for a Code Review to the AI is a good thing too. But some times, the AI does not follow the rules, and ignores your instructions and not everything is cached.

That’s why I recommend to use deterministic processes, to add more certainty: Automations, programs and scripts that validate, Unit Testing, Functional testing, etc…