<?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: Evan Mercer</title>
    <description>The latest articles on DEV Community by Evan Mercer (@evanmercerdev_63).</description>
    <link>https://dev.to/evanmercerdev_63</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%2F4245470%2Fee90e66d-d77a-4c8a-bab8-e3dac89b64dc.jpg</url>
      <title>DEV Community: Evan Mercer</title>
      <link>https://dev.to/evanmercerdev_63</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/evanmercerdev_63"/>
    <language>en</language>
    <item>
      <title>Scanning 3.8B Lines of Code Across 7,135 GitHub Repos: Measuring Cognitive Ownership &amp; PR Review Risk</title>
      <dc:creator>Evan Mercer</dc:creator>
      <pubDate>Sun, 15 Nov 2026 07:07:41 +0000</pubDate>
      <link>https://dev.to/evanmercerdev_63/scanning-38b-lines-of-code-across-7135-github-repos-measuring-cognitive-ownership-pr-review-lgb</link>
      <guid>https://dev.to/evanmercerdev_63/scanning-38b-lines-of-code-across-7135-github-repos-measuring-cognitive-ownership-pr-review-lgb</guid>
      <description>&lt;p&gt;AI-assisted code generation is not inherently a software defect. Most high-performing engineering teams use coding assistants every day for boilerplate, migrations, and test scaffolding.&lt;/p&gt;

&lt;p&gt;For CTOs, CISOs, and Staff Reviewers, the real systems problem is &lt;strong&gt;review velocity versus generation throughput&lt;/strong&gt;: when diff volume scales faster than human review bandwidth, teams risk losing &lt;strong&gt;cognitive ownership&lt;/strong&gt;, missing &lt;strong&gt;unverified third-party dependencies&lt;/strong&gt;, and merging &lt;strong&gt;over-engineered abstractions&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;To move this conversation away from guesswork and noisy probabilistic "AI detectors," we have been tracking deterministic static-analysis heuristics across &lt;strong&gt;7,135 open-source GitHub repositories&lt;/strong&gt; (~&lt;strong&gt;3.8 billion lines of code&lt;/strong&gt; and &lt;strong&gt;16.0 million pattern hits&lt;/strong&gt;) on &lt;a href="https://slopcodemonitor.ai/" rel="noopener noreferrer"&gt;&lt;strong&gt;SlopCodeMonitor&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  4 Governance Vectors Across 7,133 Repositories
&lt;/h2&gt;

&lt;p&gt;Rather than guessing &lt;em&gt;who&lt;/em&gt; or &lt;em&gt;what&lt;/em&gt; wrote a function, the benchmark maps static findings into four operational review indices (&lt;code&gt;0–100&lt;/code&gt;):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;PR Review Velocity Impact&lt;/strong&gt; (Mean: &lt;strong&gt;&lt;code&gt;22.28 / 100&lt;/code&gt;&lt;/strong&gt;): Structural complexity, oversized functions, and branching density that slow down human pull-request triage.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cognitive Ownership Risk&lt;/strong&gt; (Mean: &lt;strong&gt;&lt;code&gt;13.93 / 100&lt;/code&gt;&lt;/strong&gt;): Silent broad exception handling, opaque control-flow nesting, and patterns that obscure runtime failure modes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent Over-Engineering Ratio&lt;/strong&gt; (Mean: &lt;strong&gt;&lt;code&gt;12.5 / 100&lt;/code&gt;&lt;/strong&gt;): Unnecessary wrapper layers, boilerplate proliferation, and premature abstraction.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hallucinated Dependency &amp;amp; Supply-Chain Risk&lt;/strong&gt; (Mean: &lt;strong&gt;&lt;code&gt;4.73 / 100&lt;/code&gt;&lt;/strong&gt;): Unverified package surfaces and dependency hygiene signals relevant to AppSec and &lt;em&gt;slopsquatting&lt;/em&gt; defense.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Important caveat: these scores are heuristic engineering prompts for human review, not proof of AI authorship or confirmed security vulnerabilities.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Language-Level Benchmarks
&lt;/h2&gt;

&lt;p&gt;Structural review signals vary significantly across ecosystems depending on type systems, standard library breadth, and packaging conventions. You can explore the per-language distributions directly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://slopcodemonitor.ai/benchmark-language-python.html" rel="noopener noreferrer"&gt;&lt;strong&gt;Python Benchmark&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://slopcodemonitor.ai/benchmark-language-typescript.html" rel="noopener noreferrer"&gt;&lt;strong&gt;TypeScript Benchmark&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://slopcodemonitor.ai/benchmark-language-rust.html" rel="noopener noreferrer"&gt;&lt;strong&gt;Rust Benchmark&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://slopcodemonitor.ai/benchmark-language-go-6cc8519b91.html" rel="noopener noreferrer"&gt;&lt;strong&gt;Go Benchmark&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Live Examples &amp;amp; Static README Badges for Maintainers
&lt;/h2&gt;

&lt;p&gt;Widely battle-tested infrastructure codebases maintain remarkably low pattern-signal density despite massive scale:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;kubernetes/kubernetes&lt;/code&gt;&lt;/strong&gt;: &lt;a href="https://slopcodemonitor.ai/reports/detail_kubernetes_kubernetes.html" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fslopcodemonitor.ai%2Fbadges%2Fkubernetes%2Fkubernetes.svg" alt="SlopCodeMonitor" width="191" height="20"&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;golang/go&lt;/code&gt;&lt;/strong&gt;: &lt;a href="https://slopcodemonitor.ai/reports/detail_golang_go.html" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fslopcodemonitor.ai%2Fbadges%2Fgolang%2Fgo.svg" alt="SlopCodeMonitor" width="191" height="20"&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;torvalds/linux&lt;/code&gt;&lt;/strong&gt;: &lt;a href="https://slopcodemonitor.ai/reports/detail_torvalds_linux.html" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fslopcodemonitor.ai%2Fbadges%2Ftorvalds%2Flinux.svg" alt="SlopCodeMonitor" width="191" height="20"&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;astral-sh/ruff&lt;/code&gt;&lt;/strong&gt;: &lt;a href="https://slopcodemonitor.ai/reports/detail_astral_sh_ruff.html" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fslopcodemonitor.ai%2Fbadges%2Fastral-sh%2Fruff.svg" alt="SlopCodeMonitor" width="191" height="20"&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If your open-source repository is among the 7,135 scanned projects, you can look it up on &lt;a href="https://slopcodemonitor.ai/#badge-search" rel="noopener noreferrer"&gt;&lt;strong&gt;slopcodemonitor.ai&lt;/strong&gt;&lt;/a&gt; and grab a zero-backend static SVG badge (or Shields.io endpoint) for your &lt;code&gt;README.md&lt;/code&gt;, or suggest a repository for the next scan cycle.&lt;/p&gt;

&lt;p&gt;Curious what static signals or diff-size guardrails your engineering org relies on to keep PR reviews sustainable—feedback on the methodology and edge cases is very welcome.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>security</category>
      <category>opensource</category>
      <category>programming</category>
    </item>
    <item>
      <title>Measuring PR Cognitive Load with Deterministic Python AST Heuristics</title>
      <dc:creator>Evan Mercer</dc:creator>
      <pubDate>Sun, 15 Nov 2026 06:16:14 +0000</pubDate>
      <link>https://dev.to/evanmercerdev_63/measuring-pr-cognitive-load-with-deterministic-python-ast-heuristics-5cbb</link>
      <guid>https://dev.to/evanmercerdev_63/measuring-pr-cognitive-load-with-deterministic-python-ast-heuristics-5cbb</guid>
      <description>&lt;p&gt;AI-assisted code generation is not inherently a software defect—most engineering teams rely on coding assistants daily to accelerate boilerplate, test scaffolding, and migrations.&lt;/p&gt;

&lt;p&gt;The real architectural bottleneck is &lt;strong&gt;review throughput versus generation velocity&lt;/strong&gt;. When pull requests grow from 150 lines to 1,200+ lines, human reviewers hit cognitive fatigue. Two failure modes tend to slip past fatigued code reviews:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Loss of Cognitive Ownership&lt;/strong&gt;: Deeply nested control flow, redundant defensive wrappers, or silent exception swallowing (&lt;code&gt;except Exception: pass&lt;/code&gt;) that compile cleanly and pass happy-path tests while obscuring failure states.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unverified Dependency Surface&lt;/strong&gt;: Unfamiliar or hallucinated package imports introduced during rapid iteration without supply-chain verification.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Rather than relying on probabilistic "AI text detectors" (which are noisy and largely irrelevant to production reliability), teams get far higher signal from &lt;strong&gt;deterministic AST heuristics&lt;/strong&gt; wired directly into PR triage.&lt;/p&gt;

&lt;h2&gt;
  
  
  Minimal AST Heuristics in Pure Python (&lt;code&gt;stdlib&lt;/code&gt;)
&lt;/h2&gt;

&lt;p&gt;Using Python's built-in &lt;code&gt;ast&lt;/code&gt; module, we can flag review-friction hotspots in milliseconds before a human reviewer even opens the diff:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ast&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ReviewFrictionVisitor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ast&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;NodeVisitor&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nb"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;max_depth&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
        &lt;span class="nb"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_depth&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
        &lt;span class="nb"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;silent_broad_excepts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;_enter_branch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nb"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_depth&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
        &lt;span class="nb"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;max_depth&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;max_depth&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_depth&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="nb"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generic_visit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="nb"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_depth&lt;/span&gt; &lt;span class="o"&gt;-=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;

    &lt;span class="n"&gt;visit_If&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;visit_For&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;visit_While&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;_enter_branch&lt;/span&gt;
    &lt;span class="n"&gt;visit_Try&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;_enter_branch&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;visit_ExceptHandler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;is_broad&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="k"&gt;is&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="nb"&gt;isinstance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kd"&gt;type&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ast&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kd"&gt;type&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;"Exception"&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;is_broad&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;body&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="nb"&gt;isinstance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;body&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ast&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Pass&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="nb"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;silent_broad_excepts&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
        &lt;span class="nb"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generic_visit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Why Deterministic Structural Signals Beat Authorship Guessing
&lt;/h3&gt;

&lt;p&gt;For Engineering Leads, CISOs, and Staff Reviewers, &lt;em&gt;who&lt;/em&gt; (or what) typed a function matters much less than &lt;em&gt;how expensive it will be to debug at 3 AM&lt;/em&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Control-flow nesting depth &amp;gt; 5&lt;/strong&gt; correlates strongly with missed edge cases during code review.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Silent broad &lt;code&gt;except&lt;/code&gt; blocks&lt;/strong&gt; mask upstream timeouts and schema drift.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dependency delta gates&lt;/strong&gt; force explicit justification whenever a PR adds a package outside the organization's verified lockfile baseline.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I put together a small zero-dependency reference snippet here if you want to experiment with custom AST checks in CI: &lt;a href="https://github.com/evan-mercer-dev/ast-review-signals" rel="noopener noreferrer"&gt;evan-mercer-dev/ast-review-signals&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;How is your team adapting PR review gates as commit volume scales up? Curious what deterministic checks have given you the highest signal-to-noise ratio.&lt;/p&gt;

</description>
      <category>python</category>
      <category>security</category>
      <category>devops</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
