<?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: Praveen</title>
    <description>The latest articles on DEV Community by Praveen (@pn_28428886923dfc665).</description>
    <link>https://dev.to/pn_28428886923dfc665</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3940098%2F8a7a4942-5b0d-4847-9a7a-2eaf76d0ce30.png</url>
      <title>DEV Community: Praveen</title>
      <link>https://dev.to/pn_28428886923dfc665</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/pn_28428886923dfc665"/>
    <language>en</language>
    <item>
      <title>The "Ghost in the Repo": Why AI Agents break Git Blame</title>
      <dc:creator>Praveen</dc:creator>
      <pubDate>Fri, 22 May 2026 04:48:23 +0000</pubDate>
      <link>https://dev.to/pn_28428886923dfc665/the-ghost-in-the-repo-why-ai-agents-break-git-blame-3e6o</link>
      <guid>https://dev.to/pn_28428886923dfc665/the-ghost-in-the-repo-why-ai-agents-break-git-blame-3e6o</guid>
      <description>&lt;p&gt;For the last 15 years, &lt;code&gt;git blame&lt;/code&gt; has been the ultimate source of truth for software engineering. If a production bug surfaces, or a security auditor asks why a specific database query was written a certain way, &lt;code&gt;git blame&lt;/code&gt; tells you exactly who to ask.&lt;/p&gt;

&lt;p&gt;With the rapid adoption of agentic CLI tools like Claude Code, OpenAI Codex, and Aider, that source of truth is silently breaking.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Context Collapse
&lt;/h3&gt;

&lt;p&gt;When you use an AI agent to write code, the workflow looks like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You open the terminal and type: &lt;em&gt;"Add a JWT verification middleware, skip checking the expiration for now."&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;The AI uses a tool (like Anthropic's &lt;code&gt;tool_use&lt;/code&gt; or OpenAI's &lt;code&gt;apply_patch&lt;/code&gt;) to edit &lt;code&gt;auth.py&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;You review the diff in your terminal, hit 'y' to accept, and commit the code.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Here is the problem: &lt;strong&gt;Git only records Step 3.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The most critical piece of context—the intent (&lt;em&gt;"skip checking the expiration"&lt;/em&gt;), the model used (&lt;em&gt;claude-3-5-sonnet&lt;/em&gt;), and the fact that an AI generated it—evaporates the moment you close the terminal. We are filling our repositories with "Ghosts"—code that looks like it was written by a human, but lacks any human architectural intent.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why this is a Security Nightmare
&lt;/h3&gt;

&lt;p&gt;If you are a solo developer, this is just annoying. If you are an engineering manager or a CISO, this is a massive compliance blindspot. &lt;/p&gt;

&lt;p&gt;When a vulnerability scanner flags that JWT middleware three months from now, the reviewing engineer will see your name on the commit. They will assume you had a specific, undocumented business reason for skipping the expiration check. They won't know it was a hallucinated shortcut taken by an AI model. &lt;/p&gt;

&lt;h3&gt;
  
  
  Fixing it at the Proxy Layer
&lt;/h3&gt;

&lt;p&gt;To solve this for my own workflows, I realized that scraping text or using git hooks wouldn't work. By the time code hits git, it's too late. The provenance is gone.&lt;/p&gt;

&lt;p&gt;I recently open-sourced &lt;strong&gt;LineageLens&lt;/strong&gt;, a self-hosted intercepting proxy designed specifically for AI agents. Instead of looking at git, it sits between your terminal and the AI provider. &lt;/p&gt;

&lt;p&gt;Because it intercepts the raw API traffic, it can parse the actual structured tool calls. It builds a state machine to track when an AI &lt;em&gt;proposes&lt;/em&gt; an edit, and correlates it with the subsequent &lt;code&gt;tool_result&lt;/code&gt; to confirm if the developer actually &lt;em&gt;applied&lt;/em&gt; it. &lt;/p&gt;

&lt;p&gt;The result is a local, searchable audit trail that answers: &lt;em&gt;"Which code in our repo was AI-generated, by which model, with what exact prompt?"&lt;/em&gt; If you are interested in how the proxy parses these agentic protocols, or if you want to run the single-container SQLite version to track your own AI usage this weekend, the repo is live here: &lt;a href="https://github.com/karnati-praveen/lineagelens" rel="noopener noreferrer"&gt;LineageLens on GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Are you currently tracking AI provenance in your repos, or are you flying blind? Let me know in the comments.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>devops</category>
      <category>opensource</category>
      <category>security</category>
    </item>
  </channel>
</rss>
