<?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: Codequal</title>
    <description>The latest articles on DEV Community by Codequal (@codequal).</description>
    <link>https://dev.to/codequal</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%2F3810804%2F83680236-7fb5-453c-ba02-ecad05450212.png</url>
      <title>DEV Community: Codequal</title>
      <link>https://dev.to/codequal</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/codequal"/>
    <language>en</language>
    <item>
      <title>What 38 months of commits did to LangChain's architecture — measured</title>
      <dc:creator>Codequal</dc:creator>
      <pubDate>Mon, 20 Jul 2026 01:09:43 +0000</pubDate>
      <link>https://dev.to/codequal/what-38-months-of-commits-did-to-langchains-architecture-measured-2827</link>
      <guid>https://dev.to/codequal/what-38-months-of-commits-did-to-langchains-architecture-measured-2827</guid>
      <description>&lt;p&gt;For most of its history, LangChain shipped a new release roughly every 30 minutes. By the end of the window I analyzed, releases were coming once every six days, and a CI build that historically took about 10 seconds was taking 55 minutes — 889 times the repo's own baseline, and still 27 standard deviations above normal at the last measurement.&lt;/p&gt;

&lt;p&gt;None of this is judged against an external standard, a linter rule, or anyone's opinion of what a "healthy" repo looks like. It's LangChain measured against LangChain: 38 months of its own commit history (January 27, 2023 to March 14, 2026), with every number below tied to a specific commit you can look up.&lt;/p&gt;

&lt;p&gt;I picked LangChain deliberately. It's one of the few major codebases whose &lt;em&gt;entire&lt;/em&gt; git history sits inside the AI-assisted era — it was born the same quarter the world started pair-programming with LLMs. To be clear about what that means: I cannot tell you which of its commits were written by humans and which by AI tools. Nobody can, from the outside. What I &lt;em&gt;can&lt;/em&gt; measure is what happened to the repository's structural rhythms over those 38 months — how big commits got, how builds behaved, how releases moved, which files changed together. Here is what the data says.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Builds: 10 seconds → 55 minutes, and still elevated
&lt;/h2&gt;

&lt;p&gt;The headline number, because it's the one that hasn't gone away.&lt;/p&gt;

&lt;p&gt;LangChain's typical build duration across its history: &lt;strong&gt;9.5 seconds&lt;/strong&gt;. Observed at the end of the window: &lt;strong&gt;3,306 seconds&lt;/strong&gt; — about 55 minutes. That is &lt;strong&gt;889x the repo's own baseline&lt;/strong&gt;, and unlike most deviations in this analysis, it did not settle back down: at the last measurement it was still &lt;strong&gt;27.6 standard deviations&lt;/strong&gt; above normal.&lt;/p&gt;

&lt;p&gt;Some of this is the honest cost of growth — LangChain became a large monorepo with many packages, and monorepos pay CI taxes. But the &lt;em&gt;shape&lt;/em&gt; matters: the analysis found build-time growth statistically entangled with two other signals (commit size and file-pairing novelty — see below), escalated because independent measurements kept converging on the same story. Slow builds weren't an isolated infrastructure problem. They moved together with how the code itself was changing.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Releases: every 30 minutes → every 6 days
&lt;/h2&gt;

&lt;p&gt;Historical norm between releases: &lt;strong&gt;0.5 hours&lt;/strong&gt;. Observed: &lt;strong&gt;145.8 hours&lt;/strong&gt; — a bit over six days. That's &lt;strong&gt;220x&lt;/strong&gt; the baseline.&lt;/p&gt;

&lt;p&gt;If you followed LangChain in 2023, you remember the joke that it released faster than you could &lt;code&gt;pip install&lt;/code&gt; it. The data confirms the joke, then shows it ending. One honest caveat, and it's important: unlike the build-time finding, this deviation later &lt;strong&gt;returned to baseline&lt;/strong&gt; — the release rhythm recovered. Whether the slowdown was a bottleneck, a deliberate maturation of the release process, or a stabilization push is a question the maintainers could answer in one sentence and I can't. The measurement only says: for a while, the repo's release heartbeat ran 220x slower than its own normal, and the change correlated with commits touching more files than usual.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Commit size: 2 files → 131 files
&lt;/h2&gt;

&lt;p&gt;Typical files changed per commit, across 38 months of history: &lt;strong&gt;2&lt;/strong&gt;. Observed: &lt;strong&gt;131&lt;/strong&gt; — &lt;strong&gt;87x&lt;/strong&gt; the baseline.&lt;/p&gt;

&lt;p&gt;The trigger commit is public and you can check it yourself: &lt;a href="https://github.com/langchain-ai/langchain/commit/4e9a1eb2" rel="noopener noreferrer"&gt;&lt;code&gt;4e9a1eb2&lt;/code&gt;&lt;/a&gt; — &lt;em&gt;"chore: delete CLI (#34855)"&lt;/em&gt;, 131 files in one commit. Deleting a whole CLI is a legitimate thing to do; the point is not that this commit was bad. The point is that a repo whose median commit touches two files developed a recent window where hundred-file commits stopped being exceptional. Large commits are where review quality goes to die quietly — not because reviewers are lazy, but because no human meaningfully reviews 131 files.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Novelty of file pairings: 0.99 → 0.00
&lt;/h2&gt;

&lt;p&gt;This is the strangest one, and I want to present it carefully, because the honest reading is less dramatic than the number.&lt;/p&gt;

&lt;p&gt;"Co-change novelty" asks: of the file combinations changed together in a commit, what fraction has never been seen together before? LangChain's historical norm is &lt;strong&gt;0.99&lt;/strong&gt; — nearly every commit combined files in some new way, which is what a rapidly evolving codebase looks like. In the recent window it hit &lt;strong&gt;0.0000&lt;/strong&gt;: commits touching &lt;em&gt;only&lt;/em&gt; file combinations the repo had seen many times before.&lt;/p&gt;

&lt;p&gt;The trigger commit is &lt;a href="https://github.com/langchain-ai/langchain/commit/cdf140e7" rel="noopener noreferrer"&gt;&lt;code&gt;cdf140e7&lt;/code&gt;&lt;/a&gt; — &lt;em&gt;"release(core): 1.2.17 (#35527)"&lt;/em&gt;, a two-file version bump. So a big driver here is release automation: bots bumping the same two files over and over. That's the honest explanation, and I'm giving it to you rather than hiding it. But it's worth sitting with what it means in aggregate: an increasing share of this codebase's commit stream is &lt;em&gt;repetition&lt;/em&gt; — the same well-worn file pairs, again and again. If that sounds familiar, it should: GitClear's research on AI-era code found the same directional story in a different metric — copy-pasted and duplicated code rising while refactoring (moved code) falls. Two independent measurement approaches, same rhyme: more repetition, less novel restructuring. I'd call that a trend worth watching rather than a verdict.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. The signals converge
&lt;/h2&gt;

&lt;p&gt;Any one of these numbers alone is a curiosity. What made me write this up is the convergence: the analysis matched &lt;strong&gt;23 known cross-signal patterns&lt;/strong&gt; (from a library of 44 validated across 200+ open-source repos), and several were escalated specifically because independent signals kept moving together — file-pairing novelty with build time, commit size with release frequency, change focus with both. When one metric drifts, it's noise. When five drift in a correlated way, the repository's development rhythm has genuinely changed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Methodology, honestly
&lt;/h2&gt;

&lt;p&gt;Because this kind of analysis is easy to do badly, here's exactly what was and wasn't done:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Baselines are per-repo.&lt;/strong&gt; Every "typical" value is computed from LangChain's own history using robust statistics (median-based measures — MAD and IQR — which resist being skewed by outliers). No comparisons to other repos, no universal thresholds.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The deviation window is compared against a baseline of 20 prior commits.&lt;/strong&gt; That's short by design — it answers "is this abnormal for this repo right now," not "is this a bad codebase."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Some deviations later returned to baseline&lt;/strong&gt; (release cadence; commit size at its trigger). Build duration did not — it was still 27.6σ elevated at last measurement. I've marked which is which above.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Units:&lt;/strong&gt; build duration in seconds; release cadence in hours between releases.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Every finding names its trigger commit&lt;/strong&gt; by hash and PR number. Please check them — that's why they're included.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;All data is public.&lt;/strong&gt; The analysis ran locally against the public git history, GitHub Actions, and GitHub Releases data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What this can't tell you:&lt;/strong&gt; which commits were AI-written, whether any individual change was a mistake, or anything about the correctness of individual lines. It measures structural rhythm, not code quality line-by-line.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The full interactive report — every metric, every trigger commit, all 23 matched patterns — is here: &lt;strong&gt;&lt;a href="https://codequal.dev/reports/langchain" rel="noopener noreferrer"&gt;codequal.dev/reports/langchain&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Measured with &lt;a href="https://codequal.dev" rel="noopener noreferrer"&gt;Evolution Engine&lt;/a&gt;, a drift detector I built.&lt;/p&gt;

&lt;p&gt;I'm Rostislav Alpin, owner of CodeQual. I spent 20 years in QA before building measurement tools, so my bias is exactly what you'd expect: I trust instruments over vibes, and I distrust my own instruments until someone else has kicked them.&lt;/p&gt;

&lt;p&gt;Which is the real reason this post exists. One repo is an anecdote. If you want to know what &lt;em&gt;your&lt;/em&gt; repository's baseline looks like — and whether the last few months broke it:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Want this run on your repo? Reply.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>softwaredevelopment</category>
      <category>codequality</category>
      <category>langchain</category>
    </item>
    <item>
      <title>I Analyzed 10 Major Open-Source Repos, and Every Single One Had Significant Drift</title>
      <dc:creator>Codequal</dc:creator>
      <pubDate>Tue, 24 Mar 2026 00:57:06 +0000</pubDate>
      <link>https://dev.to/codequal/i-analyzed-10-major-open-source-repos-and-every-single-one-had-significant-drift-15o5</link>
      <guid>https://dev.to/codequal/i-analyzed-10-major-open-source-repos-and-every-single-one-had-significant-drift-15o5</guid>
      <description>&lt;p&gt;Google's own DORA research shows a paradox: AI tools increase developer throughput while &lt;em&gt;decreasing&lt;/em&gt; delivery stability.&lt;/p&gt;

&lt;p&gt;I wanted to understand why. So I built an open-source CLI that detects development process drift, and ran it against 10 of the most widely-used repos in the industry: &lt;strong&gt;&lt;a href="https://codequal.dev/reports/react" rel="noopener noreferrer"&gt;React&lt;/a&gt;, &lt;a href="https://codequal.dev/reports/nextjs" rel="noopener noreferrer"&gt;Next.js&lt;/a&gt;, &lt;a href="https://codequal.dev/reports/vscode" rel="noopener noreferrer"&gt;VS Code&lt;/a&gt;, &lt;a href="https://codequal.dev/reports/aws-cdk" rel="noopener noreferrer"&gt;AWS CDK&lt;/a&gt;, &lt;a href="https://codequal.dev/reports/google-cloud-python" rel="noopener noreferrer"&gt;Google Cloud Python&lt;/a&gt;, &lt;a href="https://codequal.dev/reports/supabase" rel="noopener noreferrer"&gt;Supabase&lt;/a&gt;, &lt;a href="https://codequal.dev/reports/langchain" rel="noopener noreferrer"&gt;LangChain&lt;/a&gt;, &lt;a href="https://codequal.dev/reports/stripe-node" rel="noopener noreferrer"&gt;Stripe Node&lt;/a&gt;, &lt;a href="https://codequal.dev/reports/workers-sdk" rel="noopener noreferrer"&gt;Cloudflare Workers SDK&lt;/a&gt;, and &lt;a href="https://codequal.dev/reports/plaid-node" rel="noopener noreferrer"&gt;Plaid&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Every single one had significant drift signals across multiple dimensions. Here's what I found.&lt;/p&gt;

&lt;h3&gt;
  
  
  CI Builds Are Silently Exploding
&lt;/h3&gt;

&lt;p&gt;Every project showed elevated CI/build times. Not failures — the builds still pass. They just take dramatically longer than baseline, and nobody notices because there's no alarm for "your CI is 100x slower than it was 3 months ago."&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Project&lt;/th&gt;
&lt;th&gt;Build Duration vs Baseline&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://codequal.dev/reports/google-cloud-python" rel="noopener noreferrer"&gt;Google Cloud Python&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;1,552x&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://codequal.dev/reports/stripe-node" rel="noopener noreferrer"&gt;Stripe Node&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;1,361x&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://codequal.dev/reports/vscode" rel="noopener noreferrer"&gt;VS Code&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;946x&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://codequal.dev/reports/langchain" rel="noopener noreferrer"&gt;LangChain&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;889x&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://codequal.dev/reports/supabase" rel="noopener noreferrer"&gt;Supabase&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;611x&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://codequal.dev/reports/aws-cdk" rel="noopener noreferrer"&gt;AWS CDK&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;112x&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://codequal.dev/reports/nextjs" rel="noopener noreferrer"&gt;Next.js&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;104x&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://codequal.dev/reports/workers-sdk" rel="noopener noreferrer"&gt;Cloudflare Workers&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;75x&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://codequal.dev/reports/react" rel="noopener noreferrer"&gt;React&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;13x&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://codequal.dev/reports/plaid-node" rel="noopener noreferrer"&gt;Plaid&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;3.2x&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The median spike across all 10 repos is &lt;strong&gt;~100x baseline&lt;/strong&gt;. These aren't flaky tests or broken builds — they're passing builds that silently consume 100x more compute than they used to.&lt;/p&gt;

&lt;h3&gt;
  
  
  File Change Explosions Reveal Architectural Drift
&lt;/h3&gt;

&lt;p&gt;When a single commit touches thousands of files across unrelated directories, something structural has shifted. This metric — file dispersion combined with files changed — was elevated in all 10 projects.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Project&lt;/th&gt;
&lt;th&gt;Files Changed vs Baseline&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://codequal.dev/reports/aws-cdk" rel="noopener noreferrer"&gt;AWS CDK&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;14,464x&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://codequal.dev/reports/vscode" rel="noopener noreferrer"&gt;VS Code&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;13,593x&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://codequal.dev/reports/google-cloud-python" rel="noopener noreferrer"&gt;Google Cloud Python&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;9,113x&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://codequal.dev/reports/nextjs" rel="noopener noreferrer"&gt;Next.js&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;215x&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://codequal.dev/reports/react" rel="noopener noreferrer"&gt;React&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;208x&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://codequal.dev/reports/stripe-node" rel="noopener noreferrer"&gt;Stripe Node&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;150x&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://codequal.dev/reports/langchain" rel="noopener noreferrer"&gt;LangChain&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;87x&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://codequal.dev/reports/supabase" rel="noopener noreferrer"&gt;Supabase&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;67x&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://codequal.dev/reports/plaid-node" rel="noopener noreferrer"&gt;Plaid&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;65x&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://codequal.dev/reports/workers-sdk" rel="noopener noreferrer"&gt;Cloudflare Workers&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;52x&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The root causes vary — Google Cloud Python has Librarian bots mass-updating image dependencies, Next.js has Turbopack switching chunk hashes from hex to base40, Plaid has OpenAPI code generation. But the pattern is universal: large automated changes that no human reviews file by file.&lt;/p&gt;

&lt;h3&gt;
  
  
  Co-Change Novelty Drops to Zero
&lt;/h3&gt;

&lt;p&gt;This is the most subtle and arguably most important signal. "Co-change novelty" measures whether new combinations of files are changing together, or whether the same files keep getting modified as a group.&lt;/p&gt;

&lt;p&gt;When novelty drops, it means development has become pattern-locked — the same templates, the same file groups, the same automated workflows touching the same paths. It's the fingerprint of bot-driven or template-driven development.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;9 out of 10 repos&lt;/strong&gt; showed depressed co-change novelty:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Project&lt;/th&gt;
&lt;th&gt;Co-change Novelty vs Baseline&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://codequal.dev/reports/aws-cdk" rel="noopener noreferrer"&gt;AWS CDK&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;587x below&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://codequal.dev/reports/supabase" rel="noopener noreferrer"&gt;Supabase&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;587x below&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://codequal.dev/reports/vscode" rel="noopener noreferrer"&gt;VS Code&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;547x below&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://codequal.dev/reports/nextjs" rel="noopener noreferrer"&gt;Next.js&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;509x below&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://codequal.dev/reports/google-cloud-python" rel="noopener noreferrer"&gt;Google Cloud Python&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;439x below&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://codequal.dev/reports/react" rel="noopener noreferrer"&gt;React&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;109x below&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://codequal.dev/reports/workers-sdk" rel="noopener noreferrer"&gt;Cloudflare Workers&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;105x below&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://codequal.dev/reports/langchain" rel="noopener noreferrer"&gt;LangChain&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;88x below&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://codequal.dev/reports/plaid-node" rel="noopener noreferrer"&gt;Plaid&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;29.8x &lt;em&gt;above&lt;/em&gt; (OpenAPI generates novel pairings)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Release Cadence Is All Over the Map
&lt;/h3&gt;

&lt;p&gt;Deployment frequency — one of the four DORA metrics — showed extreme variance:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Project&lt;/th&gt;
&lt;th&gt;Release Cadence Deviation&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://codequal.dev/reports/google-cloud-python" rel="noopener noreferrer"&gt;Google Cloud Python&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;2,548,259x&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://codequal.dev/reports/workers-sdk" rel="noopener noreferrer"&gt;Cloudflare Workers&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;694,167x&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://codequal.dev/reports/react" rel="noopener noreferrer"&gt;React&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;69,548x&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://codequal.dev/reports/supabase" rel="noopener noreferrer"&gt;Supabase&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;229x&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://codequal.dev/reports/langchain" rel="noopener noreferrer"&gt;LangChain&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;220x&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://codequal.dev/reports/vscode" rel="noopener noreferrer"&gt;VS Code&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;104x&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://codequal.dev/reports/nextjs" rel="noopener noreferrer"&gt;Next.js&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;68x&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://codequal.dev/reports/aws-cdk" rel="noopener noreferrer"&gt;AWS CDK&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;13x&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://codequal.dev/reports/stripe-node" rel="noopener noreferrer"&gt;Stripe Node&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;11x&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://codequal.dev/reports/plaid-node" rel="noopener noreferrer"&gt;Plaid&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These numbers look absurd, but they reflect real gaps between releases — periods where code accumulates without shipping, then gets batch-released. That accumulation is where drift compounds.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cross-Family Correlations: The Hidden Connections
&lt;/h3&gt;

&lt;p&gt;The most interesting findings come from &lt;em&gt;correlating&lt;/em&gt; signals across different dimensions. These patterns are invisible if you only monitor one signal at a time:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;CI duration correlates with files touched&lt;/strong&gt; — found in all 10 repos. More scattered commits = longer builds. Obvious in retrospect, but nobody tracks it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Release cadence correlates with code dispersion&lt;/strong&gt; — found in 8/10 repos. When releases slow down, code changes spread across unrelated areas.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dependency growth correlates with build time&lt;/strong&gt; — VS Code (283x dependency growth + 946x build growth), Cloudflare (30x + 75x).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What This Means
&lt;/h3&gt;

&lt;p&gt;No single commit in any of these projects looks wrong. Tests pass. Reviews approve. The code is correct.&lt;/p&gt;

&lt;p&gt;But the &lt;em&gt;aggregate pattern&lt;/em&gt; drifts. Files spread. Builds slow. Releases stall. Dependencies grow. And because each change is individually fine, nobody raises an alarm.&lt;/p&gt;

&lt;p&gt;This is the drift problem. And it affects every project at scale — even the ones built by the best engineering organizations in the world.&lt;/p&gt;

&lt;h3&gt;
  
  
  It Pinpoints the Exact Commit
&lt;/h3&gt;

&lt;p&gt;EE doesn't just say "your builds drifted." It identifies the specific commit where the deviation started — with a clickable link to the PR. For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React's file explosion? Triggered by &lt;a href="https://codequal.dev/reports/react" rel="noopener noreferrer"&gt;&lt;code&gt;b16b768f&lt;/code&gt; — [compiler] Feature flag cleanup (#35825)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;React's co-change novelty drop? Started at &lt;a href="https://codequal.dev/reports/react" rel="noopener noreferrer"&gt;&lt;code&gt;6853d7ab&lt;/code&gt; — [Perf Tracks] Prevent crash when accessing &lt;code&gt;$$typeof&lt;/code&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every finding in the report links back to the trigger commit, so you're not hunting through &lt;code&gt;git log&lt;/code&gt; trying to figure out when things changed. You see the drift, click Commit, and understand the root cause.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Tool
&lt;/h3&gt;

&lt;p&gt;I built &lt;a href="https://github.com/alpsla/evolution-engine" rel="noopener noreferrer"&gt;Evolution Engine&lt;/a&gt; to detect this automatically. It's open source, runs locally (your code never leaves your machine), and works on any git repo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;evolution-engine
evo analyze &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The analysis is pure statistics — no AI APIs called. When you want deeper investigation, EE generates a structured prompt you paste into your own AI tool.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Full interactive reports:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://codequal.dev/reports/react" rel="noopener noreferrer"&gt;React&lt;/a&gt; | &lt;a href="https://codequal.dev/reports/nextjs" rel="noopener noreferrer"&gt;Next.js&lt;/a&gt; | &lt;a href="https://codequal.dev/reports/vscode" rel="noopener noreferrer"&gt;VS Code&lt;/a&gt; | &lt;a href="https://codequal.dev/reports/aws-cdk" rel="noopener noreferrer"&gt;AWS CDK&lt;/a&gt; | &lt;a href="https://codequal.dev/reports/google-cloud-python" rel="noopener noreferrer"&gt;Google Cloud Python&lt;/a&gt; | &lt;a href="https://codequal.dev/reports/supabase" rel="noopener noreferrer"&gt;Supabase&lt;/a&gt; | &lt;a href="https://codequal.dev/reports/langchain" rel="noopener noreferrer"&gt;LangChain&lt;/a&gt; | &lt;a href="https://codequal.dev/reports/stripe-node" rel="noopener noreferrer"&gt;Stripe Node&lt;/a&gt; | &lt;a href="https://codequal.dev/reports/workers-sdk" rel="noopener noreferrer"&gt;Cloudflare Workers&lt;/a&gt; | &lt;a href="https://codequal.dev/reports/plaid-node" rel="noopener noreferrer"&gt;Plaid&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/alpsla/evolution-engine" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://pypi.org/project/evolution-engine/" rel="noopener noreferrer"&gt;PyPI&lt;/a&gt; | &lt;a href="https://codequal.dev" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devops</category>
      <category>opensource</category>
      <category>vibecoding</category>
      <category>programming</category>
    </item>
    <item>
      <title>What 10 Open Source Repos Reveal About Development Drift in the AI Era</title>
      <dc:creator>Codequal</dc:creator>
      <pubDate>Tue, 17 Mar 2026 23:58:57 +0000</pubDate>
      <link>https://dev.to/codequal/what-10-open-source-repos-reveal-about-development-drift-in-the-ai-era-10e2</link>
      <guid>https://dev.to/codequal/what-10-open-source-repos-reveal-about-development-drift-in-the-ai-era-10e2</guid>
      <description>&lt;p&gt;Every major tech company is pushing AI-generated code. Microsoft says 30% (targeting 80%). Google says 30%. Uber reports 65-72%. Amazon mandated 80% AI tool usage. Shopify made AI "mandatory."&lt;/p&gt;

&lt;p&gt;But Google's own DORA research shows a paradox: AI increases throughput while &lt;em&gt;decreasing&lt;/em&gt; delivery stability. Teams ship faster, but the code breaks more often.&lt;/p&gt;

&lt;p&gt;I wanted to understand &lt;em&gt;why&lt;/em&gt;. So I built &lt;a href="https://github.com/alpsla/evolution-engine" rel="noopener noreferrer"&gt;Evolution Engine&lt;/a&gt;, an open source CLI that detects development process drift — when patterns in commit history, CI builds, deployments, and dependency signals shift in ways that often precede production issues. Then I ran it on 10 major open source repos across cloud infrastructure, frontend frameworks, AI tooling, and developer platforms.&lt;/p&gt;

&lt;p&gt;No AI APIs are called during analysis. All pattern detection is deterministic and statistical. The tool runs entirely locally — your code never leaves your machine.&lt;/p&gt;

&lt;p&gt;Here's what I found.&lt;/p&gt;

&lt;h2&gt;
  
  
  The scale
&lt;/h2&gt;

&lt;p&gt;Across 10 repos, the tool analyzed over 130,000 commits, generating 250,000+ events across git, CI, deployment, and dependency signal families. It matched patterns from a knowledge base calibrated across 200+ open source repositories.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Repos analyzed&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Total commits&lt;/td&gt;
&lt;td&gt;130,000+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Total events&lt;/td&gt;
&lt;td&gt;250,000+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Signal families&lt;/td&gt;
&lt;td&gt;4 (git, CI, deployment, dependency)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Repos with significant drift&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;10 out of 10&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Average drift signals per repo&lt;/td&gt;
&lt;td&gt;6.6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Average correlation patterns per repo&lt;/td&gt;
&lt;td&gt;24.3&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Every single repo had significant drift signals. Every one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding 1: CI build times spike dramatically — and nobody notices
&lt;/h2&gt;

&lt;p&gt;The most consistent pattern across all 10 repos: CI build duration spikes that dwarf historical baselines.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Repo type&lt;/th&gt;
&lt;th&gt;Normal CI time&lt;/th&gt;
&lt;th&gt;Spike&lt;/th&gt;
&lt;th&gt;Deviation&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Cloud SDK (monorepo)&lt;/td&gt;
&lt;td&gt;~45 seconds&lt;/td&gt;
&lt;td&gt;6+ hours&lt;/td&gt;
&lt;td&gt;1,552x&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI framework&lt;/td&gt;
&lt;td&gt;~95 seconds&lt;/td&gt;
&lt;td&gt;55 minutes&lt;/td&gt;
&lt;td&gt;889x&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cloud infrastructure toolkit&lt;/td&gt;
&lt;td&gt;~26 seconds&lt;/td&gt;
&lt;td&gt;70+ minutes&lt;/td&gt;
&lt;td&gt;111x&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Edge platform SDK&lt;/td&gt;
&lt;td&gt;~33 seconds&lt;/td&gt;
&lt;td&gt;60+ minutes&lt;/td&gt;
&lt;td&gt;74x&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Commerce framework&lt;/td&gt;
&lt;td&gt;~64 seconds&lt;/td&gt;
&lt;td&gt;8+ minutes&lt;/td&gt;
&lt;td&gt;43x&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Code editor&lt;/td&gt;
&lt;td&gt;~41 seconds&lt;/td&gt;
&lt;td&gt;23+ minutes&lt;/td&gt;
&lt;td&gt;34x&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Frontend framework&lt;/td&gt;
&lt;td&gt;~45 seconds&lt;/td&gt;
&lt;td&gt;6 minutes&lt;/td&gt;
&lt;td&gt;13x&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fullstack framework&lt;/td&gt;
&lt;td&gt;~6 minutes&lt;/td&gt;
&lt;td&gt;32 minutes&lt;/td&gt;
&lt;td&gt;5x&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These aren't gradual slowdowns — they're sudden spikes, often tied to a single commit or dependency change. The problem? Most teams don't track CI duration as a &lt;em&gt;process signal&lt;/em&gt;. They notice when builds fail, but a 34x slowdown that still passes? That drifts silently.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;8 out of 10 repos&lt;/strong&gt; had CI spikes exceeding 10x their baseline. The median spike was 53x.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding 2: Release cadence gaps correlate with code spread
&lt;/h2&gt;

&lt;p&gt;When a repo's release cadence suddenly lengthens, it's almost always accompanied by increased code dispersion — changes spread across unrelated parts of the codebase.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Repo type&lt;/th&gt;
&lt;th&gt;Normal cadence&lt;/th&gt;
&lt;th&gt;Gap&lt;/th&gt;
&lt;th&gt;Slowdown&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Cloud SDK (monorepo)&lt;/td&gt;
&lt;td&gt;~2.9 hours&lt;/td&gt;
&lt;td&gt;22 days&lt;/td&gt;
&lt;td&gt;182x&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Commerce framework&lt;/td&gt;
&lt;td&gt;~1.5 days&lt;/td&gt;
&lt;td&gt;37 days&lt;/td&gt;
&lt;td&gt;24x&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cloud infrastructure toolkit&lt;/td&gt;
&lt;td&gt;~21 hours&lt;/td&gt;
&lt;td&gt;16.5 days&lt;/td&gt;
&lt;td&gt;18x&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fullstack framework&lt;/td&gt;
&lt;td&gt;~6 days&lt;/td&gt;
&lt;td&gt;96 days&lt;/td&gt;
&lt;td&gt;16x&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Logging library&lt;/td&gt;
&lt;td&gt;~13 days&lt;/td&gt;
&lt;td&gt;200 days&lt;/td&gt;
&lt;td&gt;15x&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Frontend framework&lt;/td&gt;
&lt;td&gt;~28 days&lt;/td&gt;
&lt;td&gt;113 days&lt;/td&gt;
&lt;td&gt;4x&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This correlation showed up as a known pattern in 8 out of 10 repos. When engineers touch more unrelated files per commit &lt;em&gt;and&lt;/em&gt; releases slow down, something structural has shifted — often a large refactoring, a dependency migration, or (increasingly) an AI-assisted batch change that touches more files than a human would.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding 3: Co-change novelty drops to zero
&lt;/h2&gt;

&lt;p&gt;"Co-change novelty" measures how often files that change together in a commit have changed together before. A score of 1.0 means entirely novel pairings. A score of 0.0 means the exact same files are changing together repeatedly.&lt;/p&gt;

&lt;p&gt;In &lt;strong&gt;9 out of 10 repos&lt;/strong&gt;, we found commits where co-change novelty dropped to zero — indicating repetitive, pattern-locked changes rather than organic development. This is a hallmark of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Automated dependency bumps (bots touching the same lockfiles repeatedly)&lt;/li&gt;
&lt;li&gt;Code generation tools producing similar diffs&lt;/li&gt;
&lt;li&gt;AI-assisted changes that follow templates rather than addressing unique problems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The interesting question: is this a problem? Sometimes repetitive changes are exactly right (automated security patches). But when novelty drops to zero &lt;em&gt;and&lt;/em&gt; CI times spike &lt;em&gt;and&lt;/em&gt; release cadence gaps appear, the correlation suggests something has gone wrong.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding 4: Merge-back commits create statistical blind spots
&lt;/h2&gt;

&lt;p&gt;Three repos had single commits touching 10,000-21,000+ files. These are merge-back commits in monorepos — technically expected, but they create extreme statistical outliers that mask real drift signals underneath.&lt;/p&gt;

&lt;p&gt;If your drift detection (or any metrics tool) doesn't account for these outliers, the signal-to-noise ratio collapses. A legitimate 34x CI spike looks insignificant next to a 14,000x files_touched outlier.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding 5: Cross-family correlations reveal systemic patterns
&lt;/h2&gt;

&lt;p&gt;The most interesting findings weren't individual metrics — they were correlations &lt;em&gt;between&lt;/em&gt; signal families:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;CI duration &amp;lt;-&amp;gt; files touched&lt;/strong&gt;: When commit size increases, build times increase non-linearly. This correlation appeared in &lt;strong&gt;all 10 repos&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deployment cadence &amp;lt;-&amp;gt; code dispersion&lt;/strong&gt;: When releases slow down, changes spread wider. Found in &lt;strong&gt;8/10 repos&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dependency changes &amp;lt;-&amp;gt; change locality&lt;/strong&gt;: When dependencies change, subsequent code changes tend to be less focused. Found in &lt;strong&gt;7/10 repos&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These cross-family patterns are invisible if you only monitor one signal family (just CI, or just git). You need the full picture.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this means for AI-assisted development
&lt;/h2&gt;

&lt;p&gt;Google's DORA research found that AI increases throughput but decreases stability. Our findings suggest &lt;em&gt;why&lt;/em&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;AI generates larger commits&lt;/strong&gt; — more files touched per change, increasing CI load&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI follows templates&lt;/strong&gt; — co-change novelty drops, creating repetitive patterns&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI doesn't respect cadence&lt;/strong&gt; — large batch changes break release rhythm&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The drift is gradual&lt;/strong&gt; — no single commit looks wrong, but the aggregate pattern shifts&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The fix isn't to stop using AI tools. It's to monitor the process signals they affect. The same way you'd monitor application performance after a deployment, you should monitor development process patterns after adopting AI coding tools.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;This is the first in a series. In upcoming posts, I'll publish detailed case studies of individual repos (with permission from maintainers where applicable) and dive deeper into specific patterns — like how dependency drift predicts deployment instability, and what "healthy" drift patterns look like versus problematic ones.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it yourself
&lt;/h2&gt;

&lt;p&gt;Evolution Engine is open source. Install it and run on any repo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;evolution-engine
evo analyze /path/to/your/repo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The tool generates an interactive HTML report with all findings, plus an investigation prompt you can paste into any AI assistant for root cause analysis — so your AI tools can help diagnose the drift patterns they create.&lt;/p&gt;

&lt;p&gt;All analysis is local and statistical. No code leaves your machine. No AI APIs are called.&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/alpsla/evolution-engine" rel="noopener noreferrer"&gt;github.com/alpsla/evolution-engine&lt;/a&gt;&lt;br&gt;
Website: &lt;a href="https://codequal.dev" rel="noopener noreferrer"&gt;codequal.dev&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;I built this. &lt;a href="https://github.com/alpsla/evolution-engine" rel="noopener noreferrer"&gt;Evolution Engine&lt;/a&gt; is open source — dual-licensed: CLI and adapters are MIT, core engine is BSL 1.1 (converts to MIT in 2029). Happy to answer questions in the comments.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>devops</category>
      <category>opensource</category>
      <category>productivity</category>
    </item>
    <item>
      <title>AI Writes Your Code. Who Watches for Drift?</title>
      <dc:creator>Codequal</dc:creator>
      <pubDate>Tue, 10 Mar 2026 13:31:22 +0000</pubDate>
      <link>https://dev.to/codequal/we-built-a-drift-detector-for-ai-assisted-development-591j</link>
      <guid>https://dev.to/codequal/we-built-a-drift-detector-for-ai-assisted-development-591j</guid>
      <description>&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;AI coding tools are incredible — until they quietly drift off course.&lt;/p&gt;

&lt;p&gt;You're using Cursor, Copilot, or Claude Code. The code looks fine. Tests pass. But over a few commits, subtle shifts accumulate: more files touched per commit than usual, dependency trees growing unexpectedly, CI times creeping up.&lt;/p&gt;

&lt;p&gt;By the time you notice, the damage has compounded across dozens of commits.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Evolution Engine does
&lt;/h2&gt;

&lt;p&gt;Evolution Engine is a local-first CLI that monitors your SDLC signals and flags statistical anomalies:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Git patterns&lt;/strong&gt; — file dispersion, change locality, co-change novelty&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CI pipelines&lt;/strong&gt; — duration trends, failure patterns&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dependencies&lt;/strong&gt; — count changes, depth shifts&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deployments&lt;/strong&gt; — release cadence, prerelease patterns&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Testing&lt;/strong&gt; — failure rates, skip rates, suite duration&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Coverage&lt;/strong&gt; — line and branch rate changes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When a metric deviates significantly from your project's baseline, EE raises an advisory — not a bug report, a &lt;em&gt;drift alarm&lt;/em&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  No AI APIs required
&lt;/h2&gt;

&lt;p&gt;This was a deliberate design choice. Your code never leaves your machine. EE does pure statistical analysis locally.&lt;/p&gt;

&lt;p&gt;When you want deeper investigation, EE generates a structured prompt you can paste into &lt;em&gt;your own&lt;/em&gt; AI tool — ChatGPT, Claude, Cursor, whatever you trust. You control what leaves your machine.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to use it
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;evolution-engine
&lt;span class="nb"&gt;cd &lt;/span&gt;your-project
evo analyze &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. EE builds a baseline from your git history and flags deviations.&lt;/p&gt;

&lt;h3&gt;
  
  
  As a GitHub Action
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;alpsla/evolution-engine@v1&lt;/span&gt;
  &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;github-token&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ secrets.GITHUB_TOKEN }}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  As a git hook
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;evo init &lt;span class="nt"&gt;--hooks&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Open source
&lt;/h2&gt;

&lt;p&gt;Evolution Engine is available on &lt;a href="https://pypi.org/project/evolution-engine/" rel="noopener noreferrer"&gt;PyPI&lt;/a&gt; and &lt;a href="https://github.com/alpsla/evolution-engine" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;. Git analysis is free — no account, no license key needed.&lt;/p&gt;

&lt;p&gt;Would love feedback from the community. What signals matter most in your workflow?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://codequal.dev/?utm_source=devto" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/alpsla/evolution-engine" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/marketplace/actions/evolution-engine-analyze" rel="noopener noreferrer"&gt;GitHub Marketplace&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devops</category>
      <category>vibecoding</category>
      <category>aiops</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
