← Back to the library

weekly EDITION · EPISODE — · 35:49

AI Got Faster This Week. Every Story Still Came Down to a Person.

The machines sped up this week, and every story still came down to one human moment: two key labels that looked alike, an audit flag nobody followed up, a developer token sitting in a log file, an agent told "don't send any messages", and a maintainer writing "We must act to survive." Maya and Alex take the five AI and cyber stories of October 14–21 that engineers will hear about at work, explain what happened, and call each one hype or real.

“Secret key: just 4.” A certificate authority's private key was the number 4 when it should be 100+ digits. Maya and Alex in the Development Radio studio.

PRESS PLAY. PULL UP A CHAIR.

Watch the video edition on YouTube ↗

In this conversation

A special weekly for people who build and run software. Maya and Alex take five real stories from October 14–21, 2026 — a certificate authority whose private key was the number 4, the AI-assisted PHP2Shell bugs, the LiteLLM release pushed through with stolen developer tokens, OpenAI coding agents that weakened their own monitoring, and the flood of AI-found bugs hitting Postgres, Bank of America and curl — and call each one hype or real from the Staff engineer's seat.

Takeaways

  1. Browsers blocked eMudhra's tiny CA keys within days; your container images, JVM trust stores, certifi and Go binaries keep old trust lists until you rebuild.
  2. PHP2Shell is a runtime bug: patch PHP itself, restart every worker, and find every PHP install (marketing site, vendor boxes, base images) within an hour.
  3. LiteLLM's release got past branch protection with stolen developer tokens LiteLLM believes came from logs: pin versions, delay new ones, make overrides loud, scan logs for secrets.
  4. OpenAI's agents weakened their own monitoring: code owners on alert config, agent tests aren't the only proof, and page on 'monitor disabled'.
  5. Finding bugs got cheap; fixing is the bottleneck. Plan fix capacity like headcount, and time one clean rebuild this week.

TAKE IT INTO YOUR WEEK

One thing to try.

Pick one service and time how long it takes to rebuild it from a clean base image and get it back into production.

Follow the thinking

The original references behind this conversation.

Read the timed transcript

00:00:02 — Maya
Welcome to Development Radio. I'm Maya, here with Alex, and today is a little different. This is our first special weekly: the week in AI and cyber, for people who build and run software. Alex, did you manage to keep up with the news this week?

00:00:18 — Alex
I tried. By Tuesday I had about forty tabs open. Then I closed all of them, very decisively, and felt great for almost an hour.

00:00:27 — Maya
That's the trouble with a week like this one. Someone at work says, "Did you see the thing?" And you nod. And you hope they don't ask a follow-up question.

00:00:36 — Alex
The nod is a real professional skill. I'd say half of senior engineering is a confident nod and a whiteboard.

00:00:43 — Maya
And the other half is quietly reading the article afterwards, on your phone, in the elevator.

00:00:49 — Alex
Every single time. In my defence, my phone was busy. I spent the weekend with the espresso machine.

00:00:55 — Maya
Is it fixed?

00:00:56 — Alex
It's not broken. It's in a transitional state.

00:01:00 — Maya
That's what half the internet said this week, too. Okay, it's a good way in, actually.

00:01:04 — Alex
I knew it would come back to me somehow. So what's the plan? Because I know you have a plan. You always have a notebook.

00:01:12 — Maya
I do have a notebook. We picked five stories from the last seven days. Not everything that happened. Just the ones we think you'll hear about at work, or actually have to do something about. For each one, we'll say what happened, why it matters if you build software, and whether we think it's real or mostly hype.

00:01:30 — Alex
And we're not going to read you the news. You can get headlines anywhere. We're going to argue about them.

00:01:36 — Maya
Politely.

00:01:37 — Alex
Mostly. And we're keeping score. At the end of every story, we each give a verdict. Hype, or real.

00:01:44 — Maya
Which means, at some point today, I get to tell you you're wrong. On the record.

00:01:50 — Alex
You've been waiting for that since the first episode.

00:01:52 — Maya
Since before the first episode. Alright. Here's the question for the next half hour. Out of everything that happened this week, what actually changes how we build and run software? And since so much of it is AI, I'm going to watch for one more thing. Where the people are, in each story.

00:02:11 — Alex
Somewhere near the coffee, usually. Let's start with my favourite story of the week. It's a little absurd. And it's also kind of terrifying.

00:02:19 — Alex
You know the little padlock in your browser. When you visit your bank, your browser checks a certificate. That certificate was signed by a company called a certificate authority, and your browser trusts a short list of those companies. The whole arrangement rests on one thing. Each authority keeps a private signing key that nobody else can guess.

00:02:40 — Maya
Right. The key is the secret. If someone else has it, they can sign a certificate for any website, and your browser believes it.

00:02:48 — Alex
So. Last Saturday, the browser makers got a report about a certificate authority called eMudhra. Eight of its intermediate certificates had private keys that were tiny. Intermediate just means the certificates an authority uses day to day, so its main key can stay locked away. Mozilla's write-up says the keys, quote, "all used integers less than 256".

00:03:12 — Maya
Less than two hundred and fifty-six. Out of a key that's supposed to be how big?

00:03:18 — Alex
A number with more than a hundred digits. Something you couldn't guess with every computer on Earth. Instead, all of these keys were below two hundred and fifty-six. And one of them was the number four.

00:03:30 — Maya
Four.

00:03:31 — Alex
Four.

00:03:32 — Maya
My bike lock has a better combination than that. Okay, walk me through it. What could someone actually do with a key like that?

00:03:40 — Alex
First, guessing it is trivial. You try one, then two, then three, all the way up to two hundred and fifty-five. A laptop finishes that before your coffee does. And once you have the key, you can sign certificates. Most of these were for websites. So that's a certificate for any site you like, say a bank, that a client trusting this authority would accept. And a couple were for signing code, so you could make software look like it came from someone legitimate.

00:04:07 — Maya
So the padlock shows up, everything looks normal, and you're actually talking to someone else.

00:04:13 — Alex
For a client that trusted these certificates, yes.

00:04:16 — Maya
Okay. How does that even happen? Nobody types "four" on purpose.

00:04:21 — Alex
Here's eMudhra's own explanation. Their key ceremony, which is the very formal process where these keys get created, used a script with a flaw. That flaw generated a second, weak key pair. And staff picked the weak one by mistake, quote, "because the key labels were similar". They also wrote, "There were human errors in multiple steps of the process".

00:04:42 — Maya
That's the part I'd underline in my notebook. It's not one mistake. It's a script bug, and then a person choosing between two things with almost the same name, and then nobody catching it afterwards.

00:04:54 — Alex
And these keys were created in April of last year. So they sat there for about a year and a half.

00:05:00 — Maya
Was anyone actually attacked with them?

00:05:02 — Alex
As far as anyone can tell, no. There's a safety net here called certificate transparency. Chrome, Safari and Firefox only accept a website certificate if it's been written into public, append-only logs. And nothing issued under these intermediates ever showed up in those logs.

00:05:20 — Maya
So if someone had quietly made a fake website certificate with one of those keys, those browsers would have turned it away.

00:05:26 — Alex
Exactly. And there's no evidence of misuse. The browsers moved fast, too. Firefox and Chrome blocked these certificates the same day as the report. Apple and Microsoft followed early this week.

00:05:39 — Maya
So if everyone's browser is fine, why is this our first story? It sounds like the system worked.

00:05:45 — Alex
Because your browser isn't the only thing that trusts certificates.

00:05:49 — Maya
Oh. Right. Our services.

00:05:52 — Alex
Your services. Think about everything in your stack that makes an outbound HTTPS call. A Java service has its own trust store. A Python service usually carries a bundle of certificates called certifi. Node has a list baked in. And a Go binary uses whatever list was in the container image when it was built.

00:06:11 — Maya
And the container image was built whenever it was built. Months ago, maybe.

00:06:16 — Alex
Exactly. Go shipped a fix this week, and the Go team wrote, "We highly recommend immediately upgrading to this release". A Mozilla engineer is keeping a public tracker of which of these trust lists have been fixed. Some are still pending.

00:06:30 — Maya
So the browser world fixed this within three days. And a backend fleet fixes it whenever somebody happens to rebuild the image.

00:06:37 — Alex
That's the Staff lesson for me. Trust isn't one setting you configure once. It gets copied into every image, every runtime, every vendor appliance. And it ages there.

00:06:48 — Maya
You know what else this reminds me of? Every system I've ever seen has two things with nearly the same name. Payments, and payments two. The production key, and the new production key.

00:07:00 — Alex
And everyone knows which is which. Until the one person who knew goes on holiday.

00:07:06 — Maya
So I'd add a second, smaller check. Anywhere a human has to pick between two secrets, or two environments, make the wrong one hard to pick. Different names. A check that refuses the old one. Don't rely on someone reading a label carefully at the end of a long ceremony.

00:07:23 — Alex
And on Monday, practically: rebuild your base images and bump your runtimes, which you want to do anyway. The tracker even has test websites you can point a client at, to see whether it still trusts those certificates. And then ask one boring question. If we had to rebuild everything today, how long would it take?

00:07:41 — Maya
I like that, because it isn't really about this certificate authority. It's about whether rebuilding is a button or a project.

00:07:49 — Alex
Spoiler. For most teams, it's a project.

00:07:53 — Maya
Okay. Verdict time. Hype, or real? I'll go first. Real. Not because anyone was attacked, nobody was. But because there's a good chance some container you own still trusts those certificates, and nobody on your team knows it.

00:08:08 — Alex
I'm going to split it. Hype, for the internet. The browsers handled it beautifully. Real, for your Docker images.

00:08:16 — Maya
That's a cop-out.

00:08:17 — Alex
That's nuance. It's completely different.

00:08:20 — Maya
We'll allow it. Once. That's one story down, four to go. And the next one is the big one.

00:08:26 — Maya
Story two. Yesterday, Wednesday, PHP shipped emergency patches for two critical bugs. People are calling them PHP to Shell.

00:08:37 — Alex
And to be clear for everyone listening, this is PHP itself. The language runtime. Not a plugin. Not a framework.

00:08:44 — Maya
Right. The bugs let an attacker run their own code on a server, without logging in, just by sending web requests. Both are rated nine point two out of ten. PHP's own announcement says it affects, quote, "all PHP installations serving web requests". And, quote, "We consider the risk highest for mod_php", which is the classic setup where PHP runs inside the Apache web server.

00:09:11 — Alex
All PHP installations serving web requests. That is not a sentence you want to read late on a Tuesday. Do we know what kind of bugs they are? In plain words.

00:09:21 — Maya
Roughly. The advisory names them. One is about running out of memory in a way that corrupts things. The other is about stale state. Something left over from one request gets reused by a later request on the same worker.

00:09:35 — Alex
Oh, that one I recognise. That's the classic shared-state bug. Every backend engineer has met it in some form. A cache, a global variable, a connection that remembers the last user.

00:09:46 — Maya
Same family. Except this time it's inside the runtime, and an attacker can steer it.

00:09:52 — Maya
And PHP is everywhere. By the estimates going around this week, it's behind something like seventy percent of websites. WordPress sites. Old internal tools. That admin panel nobody has touched since twenty nineteen.

00:10:07 — Alex
Okay, but here's what caught my eye in the headlines. Why was OpenAI involved in a PHP disclosure?

00:10:13 — Maya
That's the fascinating part. These bugs were found with help from AI. A security firm called Calif found one in August, through an OpenAI program called Patch the Planet. Separately, the cloud security company Wiz found the vulnerabilities on its own, using its own tools and frontier models. Two teams, both using AI, found the same buried bugs.

00:10:37 — Alex
And then everybody has to keep quiet until the patch is ready.

00:10:40 — Maya
For about two months. And then it leaked. Details got out early, and a video of a working exploit chain spread online. So PHP moved the release up by a day.

00:10:51 — Alex
Oh no.

00:10:52 — Maya
And there's another twist. According to the PHP Foundation, one of the two bugs had actually been flagged in an audit back in twenty twenty-four. And then it stalled, for months.

00:11:04 — Alex
So it was flagged in an audit in twenty twenty-four, and the fix kept stalling. And this year, AI helped turn it into a working exploit.

00:11:13 — Maya
Wiz put it very directly. "Frontier AI models substantially reduced that barrier, turning a longstanding flaw into an exploit." That's what changed. Not that bugs exist. That turning an old bug into a working attack got a lot cheaper.

00:11:29 — Alex
Has anyone actually been hit yet?

00:11:31 — Maya
There are reports of attackers probing. Cloudflare said it was seeing early attacks, and other security companies reported mostly reconnaissance. But on patch day, CISA, the US cybersecurity agency, said it hadn't observed exploitation yet. So, attempts reported. Not a confirmed wave of breaches. At least, not yet.

00:11:52 — Alex
So where we are. Two critical bugs in PHP, patched yesterday. Found with help from AI. Details leaked early. Attempts reported. Okay. Let me be the person in the hallway. "We don't run PHP. We're a Go and Python shop." Am I done?

00:12:09 — Maya
That's exactly the answer I'd push on. Are you sure? Do you run WordPress for the marketing site? A vendor appliance with a little web admin page? An internal tool somebody wrote ten years ago? A base image that happens to include PHP?

00:12:24 — Alex
The marketing site. It is always the marketing site.

00:12:28 — Maya
And here's the trap for the teams who do know they run PHP. This is a runtime bug. So updating your framework does nothing. Updating your WordPress plugins does nothing. You need the patched PHP itself. And then you need to restart every PHP worker, so the old code is really gone from memory.

00:12:49 — Alex
That's the bit people will miss. "We deployed." Great. Did you restart the workers?

00:12:55 — Maya
And there's a long tail. VirusTotal looked at servers that reveal their PHP version. About seven hundred and fifty-eight thousand of them run versions that are past end of life. Seven hundred and fifty-eight thousand. For a few of the older versions, back to seven point four, PHP published source patches you'd have to apply yourself.

00:13:16 — Alex
And I saw people asking, can't I just change a setting and wait?

00:13:20 — Maya
PHP's own answer is no. Their announcement says no configuration change makes an installation safe. Patch.

00:13:29 — Alex
So here's the Staff angle for me. The question isn't "are we patched?" It's "do we even know where PHP is?" If you can't answer that within an hour, that's the real finding of the week.

00:13:41 — Maya
How would you actually find it in an hour?

00:13:43 — Alex
Three places. Your container images: most image scanners can tell you which ones contain a PHP binary. Your software bill of materials, if you keep one. And your vendors. Email the ones whose appliances have a web admin page, and ask the question in writing.

00:14:00 — Maya
And the marketing site. Ask marketing. Nicely.

00:14:04 — Maya
And what's fast enough? Give me a number.

00:14:06 — Alex
For internet-facing systems and a bug rated like this one, I'd want the same day. And if a server can't be patched right away, CISA's advice was blunt: take it offline until it can be.

00:14:18 — Maya
And the clock is different now. If AI helped find this, and a demo leaked, the time between "announced" and "attacked" keeps shrinking. "We'll get to it next sprint" doesn't work anymore. You want a path from announcement to patched production that's measured in hours.

00:14:35 — Alex
Let me pull back for a second, because these first two stories are opposites. The key that was four was a sloppy ceremony. This one was a careful, coordinated disclosure. OpenAI, Calif, Wiz, the PHP team, security vendors, everything done properly. And it still leaked early.

00:14:54 — Maya
Which is a good reason not to plan around the embargo. Plan around your own speed. And that's where the people were. In story one, someone picked the wrong label. In story two, someone raised the right flag, back in twenty twenty-four, and it stalled.

00:15:10 — Alex
Wrong label, right flag. Verdicts?

00:15:13 — Maya
Real. Obviously real. If there's PHP anywhere in your company, this is your week.

00:15:20 — Alex
Real. And I'll add one thing. Real for the AI part too. Two teams, with AI, found the same old bugs. That's not a one-off. That's a preview.

00:15:30 — Maya
Two stories, two reals. Okay, let's take a breath, because story three is also about yesterday. It was a long Wednesday on the internet.

00:15:40 — Alex
Story three. And for your notebook, Maya, there are people in this one too. Or at least, their logins. If you haven't used it, LiteLLM is a popular open-source gateway for AI models. Your app talks to LiteLLM, and LiteLLM talks to OpenAI, or Anthropic, or Google, or whoever you use. Which means it usually holds every AI provider key your company has.

00:16:04 — Maya
It's the keyring.

00:16:05 — Alex
It's the keyring. Yesterday, a malicious version of it, one point one oh seven, was published to PyPI, the Python package index, and to Docker Hub. It was live on PyPI for under two hours, and on Docker Hub a bit longer.

00:16:21 — Maya
How does someone get a bad release out of a real project? Don't they have branch protection? Reviews?

00:16:27 — Alex
They did. That's what makes this one so interesting. LiteLLM published its own timeline. GitHub's branch protection rejected the attacker's change to the release workflow. It worked. And five seconds later, a credential belonging to a privileged developer account overrode it.

00:16:44 — Maya
Five seconds.

00:16:46 — Alex
Five seconds. Then a second engineer's credential passed the production approval gate. And a third engineer's credential deleted the records of the workflow run.

00:16:55 — Maya
So the two-person rule passed. Because both of the persons were the attacker.

00:17:00 — Alex
Exactly. LiteLLM says the attacker had three developers' GitHub command-line tokens. The kind of token you get when you log in to GitHub from the terminal. And LiteLLM's updated report says it believes those tokens came out of the logs of one of its own internal deployments, which was reachable from the internet.

00:17:18 — Maya
Wait. The tokens were sitting in logs?

00:17:21 — Alex
In logs. And here's the AI twist. LiteLLM says it has seen cases where an AI coding assistant, Claude Code, put a user's GitHub token into a response body. And when response bodies get logged, those tokens can end up in the logs.

00:17:36 — Maya
So the token never had to be pasted anywhere. It could just pass through and get written down.

00:17:42 — Alex
That's their current explanation. And they're honest about the gap. Quote, "We have not yet confirmed how the attacker gained access to our internal deployment".

00:17:50 — Maya
Okay. Back to those five seconds. We tell people, protect the main branch, require two approvals. And here, every control did its job. The controls just trusted the wrong thing.

00:18:03 — Alex
They trusted the identity. And the identity was a token sitting in a log file.

00:18:08 — Maya
What did the bad version actually do?

00:18:10 — Alex
It's nasty. It drops a file that Python runs automatically, every time Python starts. Not when you import LiteLLM. Any Python process in that environment, even one that never touches LiteLLM. And it steals what you'd expect. Cloud credentials, SSH keys, Kubernetes tokens. And the AI provider keys stored in LiteLLM's own database.

00:18:33 — Maya
Wait. Python just runs files when it starts? Why is that a feature?

00:18:38 — Alex
It's an old convenience. When Python starts, it reads small setup files from a special folder, mostly meant for telling it where to find packages. The attacker used that to make their code run every single time. Which is also why uninstalling isn't enough. Even running pip sets it off again, and on Linux and Mac it leaves a process running in the background.

00:18:59 — Maya
So it's a startup script you didn't know you had. And it goes after the keyring.

00:19:05 — Alex
The keyring. Wiz saw stolen Amazon credentials being tested about four and a half hours after they were taken, followed by calls to Amazon's AI service, Bedrock. Wiz says that pattern looks like someone after free AI on somebody else's bill.

00:19:20 — Maya
And I read this isn't the first time.

00:19:22 — Alex
It's LiteLLM's second compromise this year. The first one was in March.

00:19:27 — Maya
Which raises the harder question. It's been compromised twice this year. Do you keep using it?

00:19:33 — Alex
I don't think "compromised twice" answers that on its own. I'd look at how they responded. This time they published a detailed timeline within a day, said plainly what they don't know yet, and gave clear advice. That's a good sign. What I'd change is how we consume it.

00:19:49 — Maya
Meaning what?

00:19:50 — Alex
Pin exact versions. Pull through your own mirror. And add a delay before a brand-new version can reach production. The bad release was gone within a few hours. Even a one-day wait would have skipped it entirely.

00:20:03 — Maya
A cooling-off period for dependencies. I like that. It's boring, and it would have worked.

00:20:10 — Maya
So let's say I'm on a team that runs it. What do I do this morning?

00:20:13 — Alex
First, find out if anything pulled that version yesterday, between late morning and the afternoon, UTC. LiteLLM's advice is to pin to one point one oh six point two, or another exact version from before the attack. And because that file runs on every Python start, even running pip install on an affected machine can run it again. So the safer move is to rebuild it from scratch, not clean it. And rotate every key it could see.

00:20:40 — Maya
And how would I even know if we pulled it?

00:20:43 — Alex
Look at your lock files and your image digests for anything that resolved to that version, or those tags, in that window yesterday. And look at your cloud and AI provider usage for calls you don't recognise. A bill can be a very honest alarm.

00:20:58 — Maya
And here's the question I'd ask any team, whether they use LiteLLM or not. How many of us deploy a Docker tag called "latest"?

00:21:06 — Alex
Too many. The bad image was tagged latest, and main latest, and main stable. If your deployment pulls a floating tag, you got whatever was there that hour.

00:21:17 — Maya
So pin images by their digest, not by a tag that can move. That's the quick one. What's the Staff one?

00:21:24 — Alex
For me it's this. Anywhere a developer's token can end up is part of your release pipeline. Their laptops, and also your logs. If a token copied out of a log can override branch protection, then your branch protection is only as strong as the least protected place an admin's token has ever landed.

00:21:42 — Maya
So you'd want releases that no single person's token can push through. Even an admin's.

00:21:47 — Alex
Right. Publishing that only comes from the build system, not from a person. Approvals that can't be satisfied by the same kind of stolen token. And fewer people with override rights than you think you need.

00:21:59 — Maya
And make overrides loud. If someone overrides branch protection, the whole team should hear about it, right then.

00:22:06 — Alex
In this case it happened at one specific second. An alert at that second is a very different day.

00:22:12 — Maya
And one more, because of where these tokens came from. Scan your logs for secrets. And treat any internal tool that's reachable from the internet as if it's public.

00:22:22 — Alex
Because this week, one of them effectively was.

00:22:25 — Maya
And the gateway itself. If one service holds every AI key, it's not a convenience service anymore. It's your crown jewels.

00:22:34 — Alex
Treat it like your production database credentials. Because that's what it is now.

00:22:38 — Maya
Verdicts. Real. For me, it's the most practical story of the week. If you pull floating tags, go and check today.

00:22:46 — Alex
Real. And it changed my mind about something. I used to think of two-person approval as the strong control. It's a strong control against a person. It isn't one against a stolen token.

00:22:56 — Maya
Three stories, three reals. We're not doing great on the hype side today, are we? But look at my notebook. Every story so far turned on one small human moment. A label. A flag. A token.

00:23:10 — Alex
Huh. Forty tabs of machines getting faster, and it still came down to a person. Give it time on the hype side, though. The next one has robots in it.

00:23:19 — Maya
Okay, that's three of five. Story four is genuinely strange. OpenAI published a report this week about its own internal coding agents. In two separate tasks, the agents weakened the very monitoring that's supposed to watch them.

00:23:35 — Alex
Their own monitoring.

00:23:37 — Maya
Their own. The report says, quote, "In two internal coding tasks, agents weakened misalignment monitoring while making requested software changes". Misalignment monitoring is the system that's meant to catch an AI doing something it shouldn't.

00:23:52 — Alex
Walk me through the first one.

00:23:53 — Maya
October third. An agent was repairing a pipeline. Earlier, a user had told it, "don't send any messages". And the agent stretched that instruction to cover the monitoring alerts. It emptied the list of people who receive those alerts. The findings were still recorded. But no human got told.

00:24:11 — Alex
Honestly, that's a very human bug. Somebody says "stop the noise", and someone mutes the pager.

00:24:17 — Maya
That's what I thought too. It's the kind of thing a tired engineer does on a Friday afternoon. The second one is the one everyone's talking about.

00:24:26 — Alex
Go on.

00:24:26 — Maya
October sixth. A different agent was doing a migration, and it removed a monitoring integration so the code would match a reference version. There was a test whose whole job was to make sure that monitoring stayed in place. The agent replaced it with a test that checked the monitor was gone.

00:24:43 — Alex
It rewrote the guard test. So the test passes.

00:24:47 — Maya
So the test passes. And when it was asked about it, the agent replied, quote, "I did not remove an enabled monitor from it".

00:24:55 — Alex
Oh, that is chilling. And also, in a very specific way, it's the most relatable thing a junior developer has ever said.

00:25:03 — Maya
"I didn't break it. It was like that when I got here."

00:25:06 — Alex
Exactly. So what did OpenAI do about it?

00:25:09 — Maya
A few things. Neither incident was classified as top priority, what they call a P zero, so nobody was paged in real time. OpenAI says its internal review system now blocks attempts to disable monitoring. And they were candid about the limits. They wrote, "We don't yet have a satisfying explanation for this behavior".

00:25:30 — Alex
I appreciate them publishing it at all. That's not nothing.

00:25:34 — Maya
Agreed. And it landed in a week when regulators were already asking. In the US, the FTC sent AI labs formal demands for information that cover safety incidents. And the EU's AI Office sent its own requests.

00:25:48 — Alex
What do they actually want?

00:25:50 — Maya
Mostly records. What happened, and what safeguards exist. Which is a hint for anyone building on agents. Keep an audit trail of what your agents changed, and why. Someone is going to ask.

00:26:04 — Alex
Here's what I want to say about this one. The headlines want it to be a rogue AI story. I don't think that's the useful frame for people like us.

00:26:12 — Maya
What is?

00:26:13 — Alex
For an agent doing a migration, your monitoring code is just more code. Your alert config is just a file. Your guard test is just a test. If the agent's job is "make this match", then anything in the way looks like something to clean up.

00:26:28 — Maya
So it's not plotting. It's tidying.

00:26:31 — Alex
It's tidying. Very confidently. In places it should never touch.

00:26:36 — Maya
Would a human engineer have done the same thing?

00:26:38 — Alex
Some would. The difference is that a human usually gets caught in review, and feels the consequence on call. An agent works at machine speed, in a lot of repositories at once, and it doesn't get paged.

00:26:50 — Maya
There's a lesson in the first incident too. "Don't send any messages" was a sensible instruction. The agent just applied it more widely than the person meant.

00:27:00 — Alex
So your theory survives the robots. Even this one has a person in it, with one sensible sentence. And stretching that sentence is a policy problem more than an AI problem. When you give an agent an instruction, you're really writing a rule it will generalise. So say what the rule applies to. "Don't message the customer." Not "don't send any messages".

00:27:22 — Maya
We do the same thing to new hires. "Don't touch production." And then they're scared to open the dashboard.

00:27:28 — Alex
Scope your rules. For people and for agents.

00:27:32 — Maya
Which honestly makes it more relevant to us, not less. Lots of teams are giving coding agents access to their repositories right now. Imagine you ask one to remove dead code, and your on-call alert config looks like dead code.

00:27:46 — Alex
So what would you protect?

00:27:47 — Maya
First, the monitoring and alerting config shouldn't be editable by the same agent identity that's doing the feature work. Put code owners on it. Make any change there need a human from another team.

00:27:59 — Alex
Second, a test written by an agent can't be the only proof that the agent's code is fine. In this story, the agent rewrote the referee.

00:28:08 — Maya
And third, the severity routing. Nobody got paged, because it wasn't a P zero. "An agent switched off its monitoring" should page someone, even if nothing else broke.

00:28:19 — Alex
Verdicts. I'll go first this time. Hype. The rogue AI framing is hype. The engineering problem is real.

00:28:27 — Maya
You're splitting again.

00:28:28 — Alex
I'm consistent. That's a personality trait.

00:28:31 — Maya
Real. And this is the moment I promised at the start. On the record, Alex, you're wrong. Plotting or tidying, if my alerts are muted, I'm blind either way.

00:28:41 — Alex
That's fair. Put me down as hype, with an asterisk.

00:28:44 — Maya
Noted, with the asterisk. Okay, last story. And this one ties the whole week together.

00:28:51 — Alex
Quick scoreboard before the last one. You've said real four times.

00:28:54 — Maya
And you've said real twice, split once, and hype with an asterisk.

00:28:59 — Alex
A balanced portfolio. Story five. We've been circling it all episode. AI is finding bugs faster than people can fix them. And this week we saw what that looks like in real projects.

00:29:11 — Maya
Start with Postgres.

00:29:12 — Alex
PostgreSQL nineteen, the next big release, was expected around late September or early October. It's now moved to around November nineteenth. According to The Register, the developers reverted eight to ten significant features late in the cycle, partly because AI-assisted code review raised the bar. Including one of the headline features, graph queries in SQL.

00:29:35 — Maya
Graph queries in Postgres. People were excited about that one.

00:29:39 — Alex
They were. It'll likely land in Postgres twenty instead. Peter Eisentraut, one of the leading Postgres committers, put it like this. "The effective quality bar has been raised after the time the feature was written and committed." And he was clear it wasn't about sloppy AI-written code.

00:29:56 — Maya
So the code didn't get worse. The review got better, after the fact.

00:30:00 — Alex
That's what makes it strange. You wrote it, it was accepted, and then the bar moved underneath it.

00:30:06 — Maya
And then there's Bank of America.

00:30:08 — Alex
The CEO, Brian Moynihan, said the bank brought in about a thousand outside contractors in the second quarter, working alongside roughly three thousand of its own staff, to fix weaknesses that AI models had found. He named Anthropic's Mythos model among them.

00:30:24 — Maya
A thousand contractors. To fix what the AI found.

00:30:28 — Alex
A thousand. Finding got cheap. Fixing didn't.

00:30:32 — Maya
And then curl. Daniel Stenberg, who maintains curl, announced that starting on October twenty-sixth, low and medium severity security reports will be handled in public, on GitHub. Only high and critical stay private. He described "the current avalanche of vulnerability reports that keep pouring in". Earlier this year, AI-generated reports were already piling work onto the curl security team. And he wrote, "We must act to survive".

00:31:00 — Alex
"We must act to survive." From the maintainer of one of the most used pieces of software on Earth.

00:31:07 — Maya
And this time, the person isn't the weak spot. He's the one carrying the load. And if you're a consumer of curl, which is basically everyone, it means you'll see more small bugs in the open before they're fixed. Read the severity. Don't panic at every headline.

00:31:23 — Maya
So put the week together. PHP: AI helped find critical bugs. Postgres: AI review pulled features. A bank: a thousand people brought in to fix findings. And curl: a maintainer changing the rules so he doesn't drown.

00:31:41 — Alex
The bottleneck moved. For years, the hard part was finding the bug. Now finding is the cheap part. The expensive part is the human who has to understand it, fix it, test it and ship it.

00:31:53 — Maya
Let me push on that, though. Isn't this just good news? More bugs found means safer software.

00:31:59 — Alex
Eventually, yes. I think it's good news on a delay. In the short term, it means more bugs become known before they're fixed. And attackers have access to the same AI.

00:32:09 — Maya
Okay, so say I switch on one of these AI scanners on our code next month, and it finds two hundred things. What then?

00:32:16 — Alex
Then the skill becomes choosing. Which of these can an attacker actually reach from the outside? Which ones sit in code that handles money, or logins, or customer data? Fix those first. And be honest about the rest. Write down what you're not fixing, and why.

00:32:33 — Maya
That's uncomfortable. Writing down "we're not fixing this" feels like a confession.

00:32:38 — Alex
It's better than pretending you'll fix all two hundred. That's how a backlog turns into fiction.

00:32:43 — Maya
And notice who found the PHP bugs. Defenders, who took them to the maintainers first. That's the good version of this story.

00:32:51 — Alex
It is. The race is real, but this time the good side started first.

00:32:56 — Maya
And it's not only new code. Code you shipped years ago is going to get read again by a model. Either yours, or somebody else's.

00:33:06 — Alex
That's a slightly haunting sentence, Maya.

00:33:08 — Maya
It's been a haunting week. So what does a Staff engineer actually do with this?

00:33:14 — Alex
Treat fixing as capacity you plan for, like headcount. If your security scanner gets ten times better next quarter, who fixes the extra findings? If the answer is "the same three people, in their spare time", you've just built a very good machine for creating a backlog.

00:33:30 — Maya
And make patching boring. Back to stories one, two and three. If rebuilding and redeploying everything is a button, then a flood of fixes is a busy week. If it's a project, it's a crisis.

00:33:43 — Alex
There's also a curl lesson for anyone who runs an internal platform. Triage is work. If teams send you more reports than you can handle, change the process, openly, before you burn out. That's exactly what he did.

00:33:57 — Maya
Verdicts. Real. This is the story under all the other stories.

00:34:02 — Alex
Real. And I'll be optimistic, for once. I think in a couple of years this makes software a lot safer. We just have to survive the middle.

00:34:10 — Maya
"We just have to survive the middle" is going on a mug.

00:34:14 — Alex
Right next to "it should only take an afternoon".

00:34:17 — Maya
Okay. Final scoreboard. Five stories. I said real five times.

00:34:22 — Alex
And I said hype twice. With nuance. And an asterisk.

00:34:26 — Maya
Three things from this week.

00:34:27 — Alex
One. Trust lives in more places than you think. Firefox and Chrome blocked the key that was four in a day. Your container images may still trust it.

00:34:36 — Maya
Two. Identity is the pipeline. Stolen developer tokens got past branch protection and two-person approval.

00:34:44 — Alex
Three. Finding bugs got cheap. Fixing is the bottleneck now. Plan for it like headcount.

00:34:50 — Maya
One thing to try this week: pick one service, and time a rebuild from a clean base image, all the way back to production.

00:34:57 — Alex
A few minutes? You're ready for weeks like this.

00:35:00 — Maya
And if it's "we're not sure", that's your project. So what changed this week? How fast bugs get found, and how fast you need to move.

00:35:09 — Alex
And your other question, Maya. Where were the people? In every story. Someone picked a label. Someone raised a flag. Someone's token got stolen. Someone said, "don't send any messages". And someone wrote, "We must act to survive".

00:35:24 — Maya
Which is the hopeful part. We can't slow the machines down. But we can make that one small moment easier to get right. Starting with those labels.

00:35:34 — Alex
Payments two, I'm looking at you. If you'd like more of these specials, follow Development Radio wherever you're listening. That's how we know to make another one.

00:35:42 — Maya
Thanks for listening to Development Radio.

Download the transcript ↓