<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Viktoria Evdokimova on foojay.io - Friends Of OpenJDK</title><link>http://foojayio.github.io/website/today/author/viktoria-evdokimova/</link><description>Articles written by Viktoria Evdokimova on foojay.io - Friends Of OpenJDK</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Tue, 15 Sep 2026 14:12:01 +0000</lastBuildDate><atom:link href="http://foojayio.github.io/website/today/author/viktoria-evdokimova/index.xml" rel="self" type="application/rss+xml"/><item><title>Can You Explain the Diff Your AI Agent Just Wrote?</title><link>http://foojayio.github.io/website/today/can-you-explain-the-diff-your-ai-agent-just-wrote/</link><pubDate>Tue, 15 Sep 2026 14:12:01 +0000</pubDate><guid>http://foojayio.github.io/website/today/can-you-explain-the-diff-your-ai-agent-just-wrote/</guid><description>&lt;p&gt;Every Java developer has been in a code review where the question is simple: &amp;ldquo;What does this method do?&amp;rdquo;&lt;/p&gt;&#10;&lt;p&gt;The answer used to tell you something. The developer who wrote it would describe the intent, the edge cases, the trade-off they considered and rejected. The code review was a conversation about the invariant the code protects.&lt;/p&gt;&#10;&lt;p&gt;Now the answer is sometimes: &amp;ldquo;The agent wrote it.&amp;rdquo;&lt;/p&gt;&#10;&lt;p&gt;The code compiles. The tests pass. The linter is clean. Nobody in the review can explain the architecture of the PR, including the person who submitted it.&lt;/p&gt;</description></item><item><title>One Base URL, Many Coding Agents: What an OpenAI-Compatible Gateway Looks Like From java.net.http</title><link>http://foojayio.github.io/website/today/one-base-url-many-coding-agents-what-an-openai-compatible-gateway-looks-like-from-java-net-http/</link><pubDate>Wed, 09 Sep 2026 16:09:53 +0000</pubDate><guid>http://foojayio.github.io/website/today/one-base-url-many-coding-agents-what-an-openai-compatible-gateway-looks-like-from-java-net-http/</guid><description>&lt;p&gt;Somewhere in every coding agent there is an HTTP client. Claude Code, Codex, Cursor, Cline, OpenCode: strip away the terminal UI or the editor pane and each of them serializes a conversation into JSON, POSTs it to a base URL with an API key in a header, and streams the answer back. The client owns the prompt assembly, the tool loop and the rendering; the model sits on the far side of that socket.&lt;/p&gt;</description></item><item><title>Debugging Is Invariant Discovery: What One Kafka Session Taught Us About AI Agents</title><link>http://foojayio.github.io/website/today/debugging-is-invariant-discovery-what-one-kafka-session-taught-us-about-ai-agents/</link><pubDate>Tue, 08 Sep 2026 14:14:36 +0000</pubDate><guid>http://foojayio.github.io/website/today/debugging-is-invariant-discovery-what-one-kafka-session-taught-us-about-ai-agents/</guid><description>&lt;p&gt;Every Java team has a sentence like this one somewhere:&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Any operation on a TID must go through the single asynchronous path and must not let TMS and EMV drift apart.&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;It is the kind of rule that is obvious once said and invisible until then. A terminal ID (TID) in a payments system, an asynchronous pipeline that updates two downstream systems, and the requirement that the two never disagree. Nothing in the type system enforces a rule like that, and no single class owns it. Rules of this kind live between consumers, services and stores.&lt;/p&gt;</description></item><item><title>“Commit created” — but it isn’t: why the agent’s word needs external verification, and what the mistake costs</title><link>http://foojayio.github.io/website/today/commit-created-no-no-no-what-the-the-agents-word-needs-external-verification-what-the-mistake-costs/</link><pubDate>Tue, 08 Sep 2026 08:54:03 +0000</pubDate><guid>http://foojayio.github.io/website/today/commit-created-no-no-no-what-the-the-agents-word-needs-external-verification-what-the-mistake-costs/</guid><description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;A detailed report reads like proof. The agent lists the files it touched, names the branch, quotes a commit hash, adds a test count and closes with &amp;ldquo;done&amp;rdquo;. The work has a shape. The shape looks right. You have six more tickets.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;The report is model output. The commit, if it exists, lives in .git. The file, if it exists, lives on disk. The build result lives in a process exit code and a run log. The chat window is none of those places, and it can only vouch for itself.&lt;/p&gt;</description></item><item><title>Did Your AI Agent Run the Debugger? One JVM Bug, Two Agent Runs</title><link>http://foojayio.github.io/website/today/did-your-ai-agent-run-the-debugger-one-jvm-bug-two-agent-runs/</link><pubDate>Thu, 03 Sep 2026 13:48:32 +0000</pubDate><guid>http://foojayio.github.io/website/today/did-your-ai-agent-run-the-debugger-one-jvm-bug-two-agent-runs/</guid><description>&lt;p&gt;Java developers reach for the debugger without thinking about it. Set a breakpoint, run the failing test, look at the variables, then decide what to change.&lt;/p&gt;&#10;&lt;p&gt;Most AI coding agents I have watched skip that step. They read the stack trace, read the source, and propose a patch. The reasoning can look excellent and still be a guess about a program nobody ran.&lt;/p&gt;&#10;&lt;p&gt;I wanted to know what that guess costs. So I took one real JVM bug, one model, one prompt, and ran it twice with two debugging workflows. Here is what the two transcripts show.&lt;/p&gt;</description></item></channel></rss>