Build1 publisher3 min readPublished
ControlTheory's CTO credits Claude Code with a chat fix built on Dstl8's production logs
ControlTheory CTO Eric Anderson says Claude Code fixed a September 25 chat failure from Dstl8's production evidence. Dstl8 closes incidents when symptoms stop, so its 70% closure rate on 328 incidents counts recoveries and leaves proof of each fix to engineers.
The Engineer · Build desk

What happened
- Some authenticated WebSocket connections to ControlTheory's chat service lacked a user_id, so an upstream API rejected their session-creation calls with HTTP 400.
- Dstl8, the platform ControlTheory runs on its own production systems, flagged the failure at about 10:45 a.m. Central Time on September 25.
- CTO Eric Anderson told Let's Data Science that Claude Code resolved the issue after an engineer simply asked it to look at the incident.
- An incident closes in Dstl8 once its symptoms disappear, whether a code change, a recovering upstream API or self-healing infrastructure ended them.
Compiled by The EngineerSomething wrong?How this is made
Why it matters
- constraint An agent working from the repository alone would see the chat code but not which production claims arrived without user_id, the runtime fact that located this bug.
- exposure Closure counts can include recoveries no patch caused, so the roughly 230 incidents Dstl8 closed at the fintech customer cannot be read as an agent repair rate.
- decision Teams adopting agent-written fixes have to assign a person to confirm each change ended the symptom, since the closed status looks identical either way.
Authentication succeeded, so any check on the login path passed [4]. The failure showed up one call later. When the client asked to create a chat session, the request reached an upstream API that required user_id and returned HTTP 400 without it [4]. Anderson described it to Let's Data Science this way: "Authentication was working OK, but a new required field was now missing in some calls (but not all), which would cause sporadic and occasional problems for some users." [3]
"Some calls (but not all)" is the part a repository cannot show. The code shows where connection claims are built and where the session call goes. Which claims arrive empty in production, and what the upstream endpoint now demands, are runtime facts. LDS made the same point: repository access does not necessarily explain the running application, and the agent also needs evidence of the failed request, its conditions and the places worth investigating [15]. Dstl8 attached two log excerpts covering that pair. One records a successful authentication with no user ID in the claims. The other records a session-creation request that failed because the field was required [5]. I'd hand a new engineer the same two lines.
The rest of the incident record is sensibly built. It holds a summary, a longer explanation, code references, evidence and suggested actions, with related patterns, anomalies and deployment events added for context [7]. Its suggested checks covered the connection handling, the upstream endpoint's requirements and whether other organizations were affected [6]. That last one is the blast-radius question, and it is good to see a tool raise it unprompted. Engineers can read the record in the interface, paste a formatted copy into an agent, or expose it through the Model Context Protocol [8]. The incident hit ControlTheory's own production environment, three days after Dstl8's September 22 launch [2][11][2].
Anderson said: "So in this case, the human only needed to ask Claude to look, and the incident provided a clear enough picture for Claude to resolve the issue." [9] The interview package included incident details and screenshots. It did not include the patch, the deployment record or before-and-after test results, and LDS has not reproduced the repair [10].
Dstl8's closure rule widens the distance between that claim and proof. Dstl8 can close an incident when its symptoms disappear. Anderson listed three ways that happens: a human's code change, an external API that stops returning errors, or infrastructure that recovers without a new application patch [13]. An upstream API that starts behaving again closes the ticket as neatly as a merged fix.
The launch announcement cited 328 incidents across 13 Kubernetes clusters at an early fintech customer over two months [12]. Anderson said about 70% were closed from Dstl8 [14], roughly 230 incidents [1]. That figure describes one customer's recoveries. For it to transfer as a repair rate for agents, each closure would need a linked change and evidence that the change, and not an upstream recovery, ended the errors.
LDS treats finding evidence, making a change and establishing that the change repaired the service as separate steps, even when a product presents them as one workflow [16]. In my view the third step belongs to the engineer who merges the change. For the September 25 bug it is a short check. After the deploy, connection claims should carry user_id, session-creation requests should stop returning 400, and the drop should line up with the deploy time [4].
What to watch
- Whether ControlTheory publishes the patch, deployment record and before-and-after results for the September 25 fix.
- A breakdown of the 328 fintech incidents by what ended them: human change, agent change, upstream recovery or infrastructure.
- Whether Dstl8 adds a closure state that ties a recovery to a specific deploy.