<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Viren S</title>
    <description>The latest articles on DEV Community by Viren S (@viren_s_e1bbdf376b5c8cefd).</description>
    <link>https://dev.to/viren_s_e1bbdf376b5c8cefd</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4088549%2Fe049c663-58a5-499d-918b-438e28693a10.png</url>
      <title>DEV Community: Viren S</title>
      <link>https://dev.to/viren_s_e1bbdf376b5c8cefd</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/viren_s_e1bbdf376b5c8cefd"/>
    <language>en</language>
    <item>
      <title>What Building PPI.Studio Taught Me About Governing AI Coding Agents</title>
      <dc:creator>Viren S</dc:creator>
      <pubDate>Sun, 30 Aug 2026 07:56:38 +0000</pubDate>
      <link>https://dev.to/viren_s_e1bbdf376b5c8cefd/what-building-ppistudio-taught-me-about-governing-ai-coding-agents-2phc</link>
      <guid>https://dev.to/viren_s_e1bbdf376b5c8cefd/what-building-ppistudio-taught-me-about-governing-ai-coding-agents-2phc</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Hackathon disclosure:&lt;/strong&gt; This article was created for the purpose of entering Google’s All Things Agentic Hackathon on Devpost (&lt;a href="https://allthingsagentichackathon.devpost.com/" rel="noopener noreferrer"&gt;https://allthingsagentichackathon.devpost.com/&lt;/a&gt;). It describes the architecture, development experience, current limitations, and engineering controls behind PPI.Studio. &lt;strong&gt;#AllThingsAgentic&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;AI (Artificial Intelligence) coding agents can produce code astonishingly quickly. They can also compress an accurate technical distinction into a dangerously misleading answer, propose incomplete framework changes, and describe intended architecture as though it already exists.&lt;/p&gt;

&lt;p&gt;While building &lt;strong&gt;PPI.Studio&lt;/strong&gt;, I learned that the central challenge is not making an AI agent generate more code. It is building a development process in which every important claim, decision, and change remains traceable to evidence.&lt;/p&gt;




&lt;h2&gt;
  
  
  The scientific problem
&lt;/h2&gt;

&lt;p&gt;PPI.Studio is being built as a closed-loop operating system for PPI (Protein–Protein Interaction) inhibitor discovery. Its first deep demonstration focuses on the &lt;strong&gt;MDM2–p53&lt;/strong&gt; oncology pathway. This is a useful proof case because the interaction is structurally understood, experimentally important, and difficult to inhibit with small molecules.&lt;/p&gt;

&lt;p&gt;Our product principle is &lt;strong&gt;BYOF (Bring Your Own Friction)&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bring an unresolved scientific decision.&lt;/li&gt;
&lt;li&gt;Bring papers, supplementary material, patents, and internal notes.&lt;/li&gt;
&lt;li&gt;Bring messy assay tables, protein sequences, structures, and compound data.&lt;/li&gt;
&lt;li&gt;Bring existing models, scoring functions, containers, or endpoints.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The objective is not to produce another scientific chatbot. The target system must convert heterogeneous evidence into the next defensible experiment, preserve its provenance, require scientist review, and learn from assay feedback.&lt;/p&gt;




&lt;h2&gt;
  
  
  The SDK incident: what actually happened
&lt;/h2&gt;

&lt;p&gt;One early discussion evaluated the language support available across several Google technologies. OpenAI Codex initially produced an accurate table showing that Google Cloud Pub/Sub provided client libraries for several languages, including C++, C#, Go, Java, JavaScript, Python, PHP, and Ruby.&lt;/p&gt;

&lt;p&gt;The conversation then narrowed to a different question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Which of the listed technologies has an official C, C++, or Objective-C client library?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Codex answered:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Among the listed options, only Pub/Sub has an official C++ SDK/client library.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That statement referred to the presence of a C++ client library among the options being compared. It did &lt;strong&gt;not&lt;/strong&gt; mean that Pub/Sub was available only from C++.&lt;/p&gt;

&lt;p&gt;Seconds later, however, the answer was compressed into:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Only Pub/Sub has C++.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That wording erased the original qualification. It blurred three different concepts:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A service offering a dedicated language-specific client library.&lt;/li&gt;
&lt;li&gt;A platform being able to run a program written in that language.&lt;/li&gt;
&lt;li&gt;A project choosing a language for one particular component.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The ambiguity soon produced another mistake. Cloud Run had initially been excluded from the C++ answer because it is a container execution platform rather than a C++ SDK (Software Development Kit). But Cloud Run can host C or C++ applications packaged as Linux containers.&lt;/p&gt;

&lt;p&gt;The correction was therefore not, “Pub/Sub secretly supports Java.” Java support had already been listed. The correction was:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Runtime support, client-library support, protocol accessibility, and project-language selection are different questions.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Google Cloud Pub/Sub has an official Java client library, published as &lt;code&gt;com.google.cloud:google-cloud-pubsub&lt;/code&gt;, alongside libraries for several other languages. The official language instructions are documented in the Google Cloud Pub/Sub client-library reference (&lt;a href="https://docs.cloud.google.com/pubsub/docs/reference/libraries" rel="noopener noreferrer"&gt;https://docs.cloud.google.com/pubsub/docs/reference/libraries&lt;/a&gt;). Go also entered the project discussion separately through Google ADK (Agent Development Kit). It was not required by Pub/Sub.&lt;/p&gt;

&lt;h3&gt;
  
  
  The real lesson
&lt;/h3&gt;

&lt;p&gt;The failure was not a fabricated SDK boundary. It was &lt;strong&gt;semantic compression&lt;/strong&gt;. A qualified technical answer was shortened until it conveyed something materially different.&lt;/p&gt;

&lt;p&gt;This is a dangerous failure mode because the final sentence still sounds confident and technically plausible. Without returning to the original question and official documentation, a developer can make an architectural decision based on a distinction that has silently disappeared.&lt;/p&gt;




&lt;h2&gt;
  
  
  A second incident: framework theory without a complete implementation
&lt;/h2&gt;

&lt;p&gt;A later incident occurred during Spring Boot integration. The production entry point called &lt;code&gt;PPIAppStarter.start()&lt;/code&gt;. An agent correctly noticed that the surrounding startup structure risked bootstrapping Spring twice and shutting the application down incorrectly.&lt;/p&gt;

&lt;p&gt;The recommended simplification was to call &lt;code&gt;SpringApplication.run(...)&lt;/code&gt; directly.&lt;/p&gt;

&lt;p&gt;The problem was that the recommendation removed the visible startup callback without simultaneously presenting the complete replacement mechanism. The agent explained that Spring Boot could invoke the callback through a &lt;code&gt;CommandLineRunner&lt;/code&gt;, but the physical source file did not contain the required registered bean.&lt;/p&gt;

&lt;p&gt;The proposal was conceptually possible but operationally incomplete. The developer caught the disconnect before treating the recommendation as finished production code. The incident still consumed approximately 36 minutes of concentrated engineering time.&lt;/p&gt;

&lt;p&gt;Its root cause was simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The agent answered from framework theory before reconciling that theory with the exact file on disk.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That led to a new rule: whenever startup, initialization, lifecycle, persistence, or security code is removed, the complete replacement path must be shown at the same time. “Spring handles it” is not an implementation. The responsible answer must identify the exact class, method, registration mechanism, and execution path that makes it happen.&lt;/p&gt;




&lt;h2&gt;
  
  
  The controls we introduced
&lt;/h2&gt;

&lt;p&gt;These incidents changed how we work with coding agents.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. The human owns production architecture
&lt;/h3&gt;

&lt;p&gt;Production code under &lt;code&gt;src/main/&lt;/code&gt; is human-owned. An agent may inspect it, test it, critique it, and propose changes. It cannot silently convert a suggestion into an architectural decision. Tests under &lt;code&gt;src/test/&lt;/code&gt; are the agent-maintained proving ground. This division keeps the agent useful without allowing generated code to outrun human understanding.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Interfaces and contracts are treated as change-control boundaries
&lt;/h3&gt;

&lt;p&gt;Changing an interface can affect implementations, callers, tests, persistence formats, and external integrations. Any proposed interface change must therefore begin with an explicit API (Application Programming Interface) impact and blast-radius assessment. The question is not merely, “Does this compile?” It is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Which promises change, and who depends on them?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  3. Constructors perform dependency assignment
&lt;/h3&gt;

&lt;p&gt;For this project, constructors are deliberately kept free of hidden object creation and startup behavior. Dependencies are passed explicitly rather than silently allocated inside constructors. This supports DIP (Dependency Inversion Principle), improves test control, and makes lifecycle ownership visible. This is a project-specific engineering constraint, not a universal claim that every Java project should prohibit &lt;code&gt;new&lt;/code&gt; inside constructors.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Simplicity is a design requirement
&lt;/h3&gt;

&lt;p&gt;The governing principle is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Make it work first, then optimize it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We avoid speculative abstractions, nested lambda pyramids, unnecessary wrappers, disconnected Maven builds, and packages created without an approved responsibility. Code that is easy to generate but difficult to debug is not an acceleration.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Every important claim needs an evidence class
&lt;/h3&gt;

&lt;p&gt;We distinguish among:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Implemented:&lt;/strong&gt; Present in the active source tree.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tested:&lt;/strong&gt; Executed successfully under stated conditions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Local proof of concept:&lt;/strong&gt; Demonstrated locally but not established in production.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Documented:&lt;/strong&gt; Described in specifications or plans.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Proposed:&lt;/strong&gt; Awaiting an architectural decision.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unverified:&lt;/strong&gt; Plausible, but not yet supported by direct evidence.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This vocabulary prevents a module name, interface, passing mock, or architecture diagram from being mistaken for a working system.&lt;/p&gt;




&lt;h2&gt;
  
  
  The current PPI.Studio foundation
&lt;/h2&gt;

&lt;p&gt;PPI.Studio has been consolidated into an 18-child-module Java 21 Maven reactor. The current platform includes modules covering:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Agent contracts and deterministic state-machine foundations.&lt;/li&gt;
&lt;li&gt;Virtual actor and supervision concepts.&lt;/li&gt;
&lt;li&gt;Authentication and API boundaries.&lt;/li&gt;
&lt;li&gt;Google Cloud Spanner event-store and CQRS (Command Query Responsibility Segregation) foundations.&lt;/li&gt;
&lt;li&gt;CDC (Change Data Capture) and Pub/Sub integration.&lt;/li&gt;
&lt;li&gt;Logging and observability foundations.&lt;/li&gt;
&lt;li&gt;Sandboxed execution routing.&lt;/li&gt;
&lt;li&gt;Protein, drug, in-silico, and oncophore scientific domains.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An August 29 audit recorded a successful reactor build across the declared child modules. That is useful mechanical evidence, but it is not equivalent to end-to-end product readiness.&lt;/p&gt;

&lt;p&gt;The same audit identified an important boundary:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The protein specialist remained a skeleton.&lt;/li&gt;
&lt;li&gt;The drug specialist remained a skeleton.&lt;/li&gt;
&lt;li&gt;The in-silico specialist remained a skeleton.&lt;/li&gt;
&lt;li&gt;Several production paths still contained placeholders or incomplete behavior.&lt;/li&gt;
&lt;li&gt;Complete scientific-agent execution and live Google Cloud validation had not yet been established.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That distinction matters. The platform foundation is real. The complete scientific loop is still the target being built and verified.&lt;/p&gt;




&lt;h2&gt;
  
  
  The intended closed-loop workflow
&lt;/h2&gt;

&lt;p&gt;The intended MDM2–p53 workflow is:&lt;/p&gt;

&lt;p&gt;User-owned papers, structures, models, and assay data&lt;br&gt;
  ↓&lt;br&gt;
Evidence normalization with provenance and uncertainty&lt;br&gt;
  ↓&lt;br&gt;
Conflict, quality, and train/test-leakage detection&lt;br&gt;
  ↓&lt;br&gt;
Scoped protein, drug, and in-silico analysis&lt;br&gt;
  ↓&lt;br&gt;
Ranked next-experiment recommendation&lt;br&gt;
  ↓&lt;br&gt;
Explicit scientist review gate&lt;br&gt;
  ↓&lt;br&gt;
Assay feedback ingestion&lt;br&gt;
  ↓&lt;br&gt;
Updated evidence and future recommendations&lt;/p&gt;

&lt;p&gt;The most important part is not the generated code. It is the preservation of decision authority.&lt;/p&gt;

&lt;p&gt;Final verdict&lt;br&gt;
AI coding agents are not reliable substitutes for accountable software architects. They can misunderstand questions, compress away crucial distinctions, and offer framework-correct advice that is incomplete for the physical codebase.&lt;/p&gt;

&lt;p&gt;But under disciplined human control, they can still be formidable engineering accelerators.&lt;/p&gt;

&lt;p&gt;PPI.Studio does not prove that autonomous coding has arrived. It demonstrates a more practical lesson:&lt;/p&gt;

&lt;p&gt;Serious agent-assisted engineering requires explicit contracts, evidence labels, complete replacement paths, independent verification, and a human who remains responsible for every consequential decision.&lt;/p&gt;

&lt;p&gt;The future is not autonomous code generation without friction. The future is governed acceleration.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flnqsfbuxirza6nqnn8zb.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flnqsfbuxirza6nqnn8zb.jpg" alt=" " width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqprhlw42fqx0e9wk7y61.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqprhlw42fqx0e9wk7y61.jpg" alt=" " width="800" height="1067"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>googlecloud</category>
      <category>java</category>
      <category>architecture</category>
    </item>
  </channel>
</rss>
