<?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: hyhmrright</title>
    <description>The latest articles on DEV Community by hyhmrright (@hyhmrright).</description>
    <link>https://dev.to/hyhmrright</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%2F3848681%2Fd65668f1-75aa-4901-a1f5-263ffe353c7a.png</url>
      <title>DEV Community: hyhmrright</title>
      <link>https://dev.to/hyhmrright</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hyhmrright"/>
    <language>en</language>
    <item>
      <title>Show DEV: brooks-lint — an AI code reviewer that cites Fowler, Martin, and Brooks</title>
      <dc:creator>hyhmrright</dc:creator>
      <pubDate>Thu, 16 Apr 2026 16:20:33 +0000</pubDate>
      <link>https://dev.to/hyhmrright/i-synthesized-12-classic-engineering-books-into-an-ai-code-reviewer-heres-what-it-caught-3ed1</link>
      <guid>https://dev.to/hyhmrright/i-synthesized-12-classic-engineering-books-into-an-ai-code-reviewer-heres-what-it-caught-3ed1</guid>
      <description>&lt;p&gt;I gave an AI code reviewer a &lt;code&gt;PaymentProcessor&lt;/code&gt; class — seven services injected, payment + fraud + inventory + notifications all in one 60-line method.&lt;/p&gt;

&lt;p&gt;Here's what it flagged:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;🔴 &lt;strong&gt;Change Propagation&lt;/strong&gt; — Seven-service constructor signals a God Class in formation&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Source:&lt;/strong&gt; Fowler — &lt;em&gt;Refactoring&lt;/em&gt; — Divergent Change; Martin — &lt;em&gt;Clean Architecture&lt;/em&gt; — SRP&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Consequence:&lt;/strong&gt; This class will change for at least four independent reasons. Each change is a merge conflict waiting to happen.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Remedy:&lt;/strong&gt; Introduce &lt;code&gt;FraudCheckService&lt;/code&gt;, &lt;code&gt;InventoryDeductionService&lt;/code&gt;, &lt;code&gt;PaymentNotifier&lt;/code&gt;. &lt;code&gt;PaymentProcessor&lt;/code&gt; then injects 3 services, not 7.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Not "this is bad." Here's which book explains why, what breaks if you ignore it, and how to fix it.&lt;/p&gt;

&lt;p&gt;That's &lt;strong&gt;brooks-lint&lt;/strong&gt; — an open-source plugin for Claude Code, Codex CLI, and Gemini CLI. &lt;a href="https://github.com/hyhmrright/brooks-lint" rel="noopener noreferrer"&gt;github.com/hyhmrright/brooks-lint&lt;/a&gt; · MIT · v1.0.0 shipped this week.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why I built it
&lt;/h2&gt;

&lt;p&gt;ESLint flags unused variables. Complexity checkers count branches. SonarQube tracks duplication percentages. All useful. None of them answer the question a senior engineer actually asks:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"What architectural principle is this violating, and what happens if we ignore it?"&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I've spent years reading the classics — Fowler, Martin, Evans, Brooks, Ousterhout, McConnell. Each book has a chapter that makes you think "I've seen this exact failure before." But the insight stays locked in the book.&lt;/p&gt;

&lt;p&gt;brooks-lint is an attempt to make that insight executable. Every finding follows the same shape:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Symptom → Source → Consequence → Remedy&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Symptom is what the linter &lt;em&gt;sees&lt;/em&gt;. Source is the book + chapter it comes from. Consequence is what breaks in six months if you ignore it. Remedy is a concrete refactor.&lt;/p&gt;




&lt;h2&gt;
  
  
  The six decay risks
&lt;/h2&gt;

&lt;p&gt;After synthesizing twelve books, six patterns kept appearing as root causes of software decay:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Code&lt;/th&gt;
&lt;th&gt;Risk&lt;/th&gt;
&lt;th&gt;Core Insight&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;R1&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Cognitive Overload&lt;/td&gt;
&lt;td&gt;Mental load exceeds working memory → mistakes and avoidance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;R2&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Change Propagation&lt;/td&gt;
&lt;td&gt;One change forces unrelated changes elsewhere&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;R3&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Knowledge Duplication&lt;/td&gt;
&lt;td&gt;Same fact in two places → they diverge&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;R4&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Responsibility Rot&lt;/td&gt;
&lt;td&gt;One module does too many things&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;R5&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Dependency Disorder&lt;/td&gt;
&lt;td&gt;Modules depend on modules that depend on modules...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;R6&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Domain Model Distortion&lt;/td&gt;
&lt;td&gt;Code doesn't speak the business's language&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;There are also six test-space variants (T1–T6) covering test brittleness, mock abuse, coverage theater, and more.&lt;/p&gt;




&lt;h2&gt;
  
  
  The twelve books
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Book&lt;/th&gt;
&lt;th&gt;Author&lt;/th&gt;
&lt;th&gt;Risks&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;The Mythical Man-Month&lt;/td&gt;
&lt;td&gt;Frederick Brooks&lt;/td&gt;
&lt;td&gt;R2, R4, R5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Code Complete&lt;/td&gt;
&lt;td&gt;Steve McConnell&lt;/td&gt;
&lt;td&gt;R1, R4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Refactoring&lt;/td&gt;
&lt;td&gt;Martin Fowler&lt;/td&gt;
&lt;td&gt;R1, R2, R3, R4, R6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Clean Architecture&lt;/td&gt;
&lt;td&gt;Robert C. Martin&lt;/td&gt;
&lt;td&gt;R2, R5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The Pragmatic Programmer&lt;/td&gt;
&lt;td&gt;Hunt &amp;amp; Thomas&lt;/td&gt;
&lt;td&gt;R2, R3, R4, R5, T2, T3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Domain-Driven Design&lt;/td&gt;
&lt;td&gt;Eric Evans&lt;/td&gt;
&lt;td&gt;R1, R3, R6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A Philosophy of Software Design&lt;/td&gt;
&lt;td&gt;Ousterhout&lt;/td&gt;
&lt;td&gt;R1, R4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Software Engineering at Google&lt;/td&gt;
&lt;td&gt;Winters et al.&lt;/td&gt;
&lt;td&gt;R2, R5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;xUnit Test Patterns&lt;/td&gt;
&lt;td&gt;Meszaros&lt;/td&gt;
&lt;td&gt;T1, T2, T4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The Art of Unit Testing&lt;/td&gt;
&lt;td&gt;Osherove&lt;/td&gt;
&lt;td&gt;T1, T2, T3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Working Effectively with Legacy Code&lt;/td&gt;
&lt;td&gt;Feathers&lt;/td&gt;
&lt;td&gt;T3, T4, T5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unit Testing: Principles, Practices, Patterns&lt;/td&gt;
&lt;td&gt;Khorikov&lt;/td&gt;
&lt;td&gt;T1, T2, T6&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The books agree more than they disagree. Fowler's &lt;em&gt;Divergent Change&lt;/em&gt; smell, Martin's &lt;em&gt;Single Responsibility Principle&lt;/em&gt;, and Evans's &lt;em&gt;Bounded Context&lt;/em&gt; are all describing the same underlying failure from different angles.&lt;/p&gt;




&lt;h2&gt;
  
  
  Five review modes
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/brooks-review  → PR code review (diff-focused)
/brooks-audit   → Architecture audit
/brooks-debt    → Tech debt assessment
/brooks-test    → Test quality review
/brooks-health  → Codebase health dashboard with score
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Works on Claude Code, Codex CLI, and Gemini CLI.&lt;/p&gt;




&lt;h2&gt;
  
  
  Install
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Claude Code (one command)&lt;/span&gt;
/plugin &lt;span class="nb"&gt;install &lt;/span&gt;brooks-lint@brooks-lint-marketplace

&lt;span class="c"&gt;# Codex CLI&lt;/span&gt;
codex plugin &lt;span class="nb"&gt;install &lt;/span&gt;hyhmrright/brooks-lint

&lt;span class="c"&gt;# Gemini CLI&lt;/span&gt;
gemini extension &lt;span class="nb"&gt;install &lt;/span&gt;hyhmrright/brooks-lint
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Source: &lt;a href="https://github.com/hyhmrright/brooks-lint" rel="noopener noreferrer"&gt;github.com/hyhmrright/brooks-lint&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The hard part wasn't the principles — it was the false positives
&lt;/h2&gt;

&lt;p&gt;A 60-line function in a data-migration script isn't the same as a 60-line function in a payment handler. The tool needed to know &lt;em&gt;when not to flag something&lt;/em&gt;, which meant reading the exception clauses in each book more carefully than I'd expected.&lt;/p&gt;

&lt;p&gt;The benchmark suite now has &lt;strong&gt;49 scenarios&lt;/strong&gt;, including explicit false-positive cases that must &lt;em&gt;not&lt;/em&gt; be flagged. That's probably the most useful artifact I built — it forces the skill to be calibrated, not just pattern-matching.&lt;/p&gt;




&lt;h2&gt;
  
  
  I'd love your help
&lt;/h2&gt;

&lt;p&gt;v1.0 is out, but a linter grounded in books is only as good as the communities that stress-test it. Three specific ways you can help:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Try it on a real repo&lt;/strong&gt; and open an issue if a finding feels wrong — false positives are the highest-priority bug class.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Propose a 13th book.&lt;/strong&gt; If there's a classic that covers a failure mode R1–R6 misses, tell me which chapter and I'll prototype the rule.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Share a code smell you see constantly&lt;/strong&gt; in the comments. I'll run brooks-lint on a representative example and post the raw output as a reply.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Star if it resonates: ⭐ &lt;a href="https://github.com/hyhmrright/brooks-lint" rel="noopener noreferrer"&gt;github.com/hyhmrright/brooks-lint&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Which of the six risks (R1–R6) do you hit most often? Drop a line below — happy to dig into specific examples.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>ai</category>
      <category>codequality</category>
      <category>tooling</category>
    </item>
    <item>
      <title>I gave Claude the same code review twice. It missed a SQL injection the second time. So I encoded 12 engineering books into it.</title>
      <dc:creator>hyhmrright</dc:creator>
      <pubDate>Wed, 15 Apr 2026 09:13:10 +0000</pubDate>
      <link>https://dev.to/hyhmrright/how-i-encoded-12-classic-engineering-books-into-a-claude-code-skill-56c</link>
      <guid>https://dev.to/hyhmrright/how-i-encoded-12-classic-engineering-books-into-a-claude-code-skill-56c</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"The bearing of a child takes nine months, no matter how many women are assigned."&lt;/em&gt;&lt;br&gt;
— Frederick Brooks, The Mythical Man-Month (1975)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Fifty years later, Brooks was still right. And so was the rest of my shelf.&lt;/p&gt;




&lt;p&gt;I ran the same code review with Claude twice.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;First time:&lt;/strong&gt; caught the SQL injection, flagged separation of concerns. Solid review.&lt;br&gt;
&lt;strong&gt;Second time:&lt;/strong&gt; focused on naming conventions. Missed the injection entirely.&lt;/p&gt;

&lt;p&gt;Same code. Same model. Completely different results.&lt;/p&gt;

&lt;p&gt;That's not a Claude problem. That's a &lt;em&gt;consistency&lt;/em&gt; problem. And it's fixable — if you give the model a framework to work from.&lt;/p&gt;

&lt;p&gt;So I encoded 12 classic engineering books into a Claude Code skill. Here's what happened.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;Most code quality tools count lines and cyclomatic complexity. That's useful, but it misses the deeper problems: architectural drift, knowledge silos, domain model distortion — the issues that slow teams down for months before anyone notices.&lt;/p&gt;

&lt;p&gt;Meanwhile, the software engineering classics have had answers to these problems for decades. Brooks, Fowler, Martin, McConnell, Evans, Ousterhout — twelve books, fifty years of hard-won wisdom. The insights haven't changed. We just stopped encoding them consistently.&lt;/p&gt;
&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;brooks-lint&lt;/strong&gt; is a Claude Code skill (also works with Gemini CLI and Codex CLI) that diagnoses code against &lt;strong&gt;twelve decay risk dimensions&lt;/strong&gt; synthesized from 12 classic engineering books, producing structured findings with book citations, severity labels, and concrete remedies every time.&lt;/p&gt;
&lt;h3&gt;
  
  
  The 12 Books
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Book&lt;/th&gt;
&lt;th&gt;Author&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;The Mythical Man-Month&lt;/td&gt;
&lt;td&gt;Frederick Brooks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Code Complete&lt;/td&gt;
&lt;td&gt;Steve McConnell&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Refactoring&lt;/td&gt;
&lt;td&gt;Martin Fowler&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Clean Architecture&lt;/td&gt;
&lt;td&gt;Robert C. Martin&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The Pragmatic Programmer&lt;/td&gt;
&lt;td&gt;Hunt &amp;amp; Thomas&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Domain-Driven Design&lt;/td&gt;
&lt;td&gt;Eric Evans&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A Philosophy of Software Design&lt;/td&gt;
&lt;td&gt;John Ousterhout&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Software Engineering at Google&lt;/td&gt;
&lt;td&gt;Winters, Manshreck &amp;amp; Wright&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;xUnit Test Patterns&lt;/td&gt;
&lt;td&gt;Gerard Meszaros&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The Art of Unit Testing&lt;/td&gt;
&lt;td&gt;Roy Osherove&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;How Google Tests Software&lt;/td&gt;
&lt;td&gt;Whittaker, Arbon &amp;amp; Carollo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Working Effectively with Legacy Code&lt;/td&gt;
&lt;td&gt;Michael Feathers&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h2&gt;
  
  
  The Six Production Code Decay Risks
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Risk&lt;/th&gt;
&lt;th&gt;Diagnostic Question&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;🧠 Cognitive Overload&lt;/td&gt;
&lt;td&gt;How much mental effort to understand this?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🔗 Change Propagation&lt;/td&gt;
&lt;td&gt;How many unrelated things break on one change?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;📋 Knowledge Duplication&lt;/td&gt;
&lt;td&gt;Is the same decision expressed in multiple places?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🌀 Accidental Complexity&lt;/td&gt;
&lt;td&gt;Is the code more complex than the problem?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🏗️ Dependency Disorder&lt;/td&gt;
&lt;td&gt;Do dependencies flow in a consistent direction?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🗺️ Domain Model Distortion&lt;/td&gt;
&lt;td&gt;Does the code faithfully represent the domain?&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Every finding follows the same chain: &lt;strong&gt;Symptom → Source (book + chapter) → Consequence → Remedy&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  The Six Test-Suite Decay Risks (New in v0.5)
&lt;/h2&gt;

&lt;p&gt;brooks-lint now also audits your test suite against six test-space decay risks sourced from xUnit Test Patterns, The Art of Unit Testing, How Google Tests Software, and Working Effectively with Legacy Code:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Risk&lt;/th&gt;
&lt;th&gt;Diagnostic Question&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;🔍 Test Obscurity&lt;/td&gt;
&lt;td&gt;Can you understand what this test verifies at a glance?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🧱 Test Brittleness&lt;/td&gt;
&lt;td&gt;Does this test break when unrelated implementation details change?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;📋 Test Duplication&lt;/td&gt;
&lt;td&gt;Are the same scenarios covered in multiple places?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🎭 Mock Abuse&lt;/td&gt;
&lt;td&gt;Are mocks hiding real design problems?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;📊 Coverage Illusion&lt;/td&gt;
&lt;td&gt;Does high coverage give false confidence?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🏗️ Architecture Mismatch&lt;/td&gt;
&lt;td&gt;Do tests reflect the production architecture?&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h2&gt;
  
  
  What It Looks Like
&lt;/h2&gt;

&lt;p&gt;Given this code:&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;class&lt;/span&gt; &lt;span class="nc"&gt;UserService&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;update_profile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;avatar_url&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;query&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;SELECT * FROM users WHERE id = &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;email&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;email&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;email&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;  &lt;span class="c1"&gt;# always False — silent bug
&lt;/span&gt;            &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;smtp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(...)&lt;/span&gt;
        &lt;span class="n"&gt;points&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;login_count&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;UPDATE loyalty SET points=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;points&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; WHERE user_id=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;brooks-lint produces:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Health Score: 28/100

🔴 Change Propagation — Single Method Changes for Four Unrelated Business Reasons
Symptom: update_profile performs profile updates, email notifications, loyalty
         points recalculation, and cache invalidation all in one method body.
Source:  Fowler — Refactoring — Divergent Change
         Hunt &amp;amp; Thomas — The Pragmatic Programmer — Orthogonality
Consequence: Any change to the loyalty formula risks breaking email notifications.
Remedy: Extract NotificationService, LoyaltyService, and UserCacheInvalidator.

🔴 Domain Model Distortion — Silent Logic Bug: Email Notification Never Fires
Symptom: user['email'] = email overwrites the old value before the comparison —
         the condition is always False. The notification is dead code.
Source:  McConnell — Code Complete — Ch. 17: Unusual Control Structures
Consequence: Users are never notified when their email address changes.
Remedy: Capture old_email = user['email'] before any mutation.

(+ 6 more findings including SQL injection, dependency disorder, magic numbers)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Architecture Audit with Dependency Graph (v0.6)
&lt;/h2&gt;

&lt;p&gt;In Mode 2, brooks-lint generates a Mermaid dependency graph color-coded by severity — red = Critical, yellow = Warning, green = clean. It renders natively in GitHub, VS Code, and Notion.&lt;/p&gt;

&lt;h2&gt;
  
  
  Four Modes
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;th&gt;Short Form&lt;/th&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/brooks-lint:brooks-review&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/brooks-review&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;PR-level code review&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/brooks-lint:brooks-audit&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/brooks-audit&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Architecture audit with Mermaid dependency graph&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/brooks-lint:brooks-debt&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/brooks-debt&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Tech debt assessment with prioritized roadmap&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/brooks-lint:brooks-test&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/brooks-test&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Test suite health review&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Benchmark Results
&lt;/h2&gt;

&lt;p&gt;Tested across 3 real-world scenarios (PR review, architecture audit, tech debt):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Criterion&lt;/th&gt;
&lt;th&gt;brooks-lint&lt;/th&gt;
&lt;th&gt;Plain Claude&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Structured findings&lt;/td&gt;
&lt;td&gt;✅ 100%&lt;/td&gt;
&lt;td&gt;❌ 0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Book citations&lt;/td&gt;
&lt;td&gt;✅ 100%&lt;/td&gt;
&lt;td&gt;❌ 0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Severity labels&lt;/td&gt;
&lt;td&gt;✅ 100%&lt;/td&gt;
&lt;td&gt;❌ 0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Health Score (0–100)&lt;/td&gt;
&lt;td&gt;✅ 100%&lt;/td&gt;
&lt;td&gt;❌ 0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Overall pass rate&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;94%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;16%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The gap isn't what Claude &lt;em&gt;can&lt;/em&gt; find — it's what it &lt;em&gt;consistently&lt;/em&gt; finds, with traceable evidence and actionable remedies every time.&lt;/p&gt;

&lt;h2&gt;
  
  
  How It Compares
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;brooks-lint&lt;/th&gt;
&lt;th&gt;ESLint/Pylint&lt;/th&gt;
&lt;th&gt;GitHub Copilot&lt;/th&gt;
&lt;th&gt;Plain Claude&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Structured diagnosis chain&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Traces findings to classic books&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Architecture-level insights&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;~&lt;/td&gt;
&lt;td&gt;~&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Domain model analysis&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;~&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Zero config, no plugins&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Works with any language&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;brooks-lint doesn't replace your linter. It catches what linters can't.&lt;/p&gt;

&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Claude Code (Recommended)&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/plugin marketplace add hyhmrright/brooks-lint
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Gemini CLI&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/extensions &lt;span class="nb"&gt;install &lt;/span&gt;https://github.com/hyhmrright/brooks-lint
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Codex CLI&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$brooks&lt;/span&gt;&lt;span class="nt"&gt;-review&lt;/span&gt;  &lt;span class="c"&gt;# skills trigger automatically on code quality discussions&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Manual Install&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cp &lt;/span&gt;commands/&lt;span class="k"&gt;*&lt;/span&gt;.md ~/.claude/commands/
&lt;span class="nb"&gt;cp&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; skills/ ~/.claude/skills/brooks-lint
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Configuration (v0.7)
&lt;/h2&gt;

&lt;p&gt;Place a &lt;code&gt;.brooks-lint.yaml&lt;/code&gt; in your project root to customize behavior:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;
&lt;span class="na"&gt;disable&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;T5&lt;/span&gt;  &lt;span class="c1"&gt;# skip coverage metrics check&lt;/span&gt;
&lt;span class="na"&gt;severity&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;R1&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;suggestion&lt;/span&gt;  &lt;span class="c1"&gt;# downgrade Cognitive Overload for this domain&lt;/span&gt;
&lt;span class="na"&gt;ignore&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;**/*.generated.*"&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;**/vendor/**"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;GitHub: &lt;a href="https://github.com/hyhmrright/brooks-lint" rel="noopener noreferrer"&gt;https://github.com/hyhmrright/brooks-lint&lt;/a&gt; — MIT licensed, free to use.&lt;/p&gt;




&lt;p&gt;AI can help you write code faster, but it can't tell you whether you're building a cathedral or a tar pit. brooks-lint bridges that gap.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;If you've used AI for code reviews, I'm curious:&lt;/strong&gt; what's your biggest frustration with consistency? Drop it in the comments — I'd love to hear what decay risks you're seeing most.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;If this was useful, a ❤️ or unicorn helps others find it.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>devtools</category>
      <category>ai</category>
      <category>codereview</category>
    </item>
    <item>
      <title>I built a Claude Code plugin that anchors code reviews to 6 classic SE books</title>
      <dc:creator>hyhmrright</dc:creator>
      <pubDate>Mon, 30 Mar 2026 12:49:28 +0000</pubDate>
      <link>https://dev.to/hyhmrright/i-built-a-claude-code-plugin-that-anchors-code-reviews-to-6-classic-se-books-4465</link>
      <guid>https://dev.to/hyhmrright/i-built-a-claude-code-plugin-that-anchors-code-reviews-to-6-classic-se-books-4465</guid>
      <description>&lt;p&gt;If you've used Claude Code for code reviews, you've probably noticed something: the feedback is smart, but it's vague. "This function is too long." "Consider breaking this up." Great — but &lt;em&gt;why&lt;/em&gt;? And what's the actual risk if you don't?&lt;/p&gt;

&lt;p&gt;I built &lt;a href="https://github.com/hyhmrright/brooks-lint" rel="noopener noreferrer"&gt;brooks-lint&lt;/a&gt; to fix this. It's a Claude Code plugin that anchors every finding to a specific chapter in one of six classic software engineering books.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem with AI Code Reviews
&lt;/h2&gt;

&lt;p&gt;Generic AI reviews are good at spotting syntax issues and surface-level smells. But they struggle to explain &lt;em&gt;consequence&lt;/em&gt; — why a particular pattern is dangerous in the long run, not just aesthetically displeasing.&lt;/p&gt;

&lt;p&gt;The result: developers nod, maybe fix the obvious stuff, and move on. The deeper structural decay continues.&lt;/p&gt;

&lt;h2&gt;
  
  
  What brooks-lint Does Differently
&lt;/h2&gt;

&lt;p&gt;Every finding follows a four-part structure I call the &lt;strong&gt;Iron Law&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Symptom   → what the code is doing
Source    → which book + chapter describes this exact pattern
Consequence → what breaks if you ignore it
Remedy    → concrete fix
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Example output:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Symptom:&lt;/strong&gt; &lt;code&gt;UserService&lt;/code&gt; has 847 lines and handles auth, billing, notifications, and user CRUD.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Source:&lt;/strong&gt; Clean Architecture, Ch. 7 — SRP violation; responsibilities should have separate reasons to change.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Consequence:&lt;/strong&gt; Any change to billing logic risks breaking auth; test isolation becomes impossible.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Remedy:&lt;/strong&gt; Extract &lt;code&gt;BillingService&lt;/code&gt; and &lt;code&gt;NotificationService&lt;/code&gt;; keep &lt;code&gt;UserService&lt;/code&gt; focused on identity only.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;No vague advice. Just: here's the book, here's the chapter, here's exactly what goes wrong.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Six Source Books
&lt;/h2&gt;

&lt;p&gt;The plugin draws from six foundational texts:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Book&lt;/th&gt;
&lt;th&gt;Focus&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;The Mythical Man-Month&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;Project complexity, conceptual integrity&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;em&gt;Clean Code&lt;/em&gt; + &lt;em&gt;Refactoring&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;Code-level smells and refactoring patterns&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;Clean Architecture&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;Dependency rules, component boundaries&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;Code Complete&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;Implementation craft, construction quality&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;The Pragmatic Programmer&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;DRY, orthogonality, adaptability&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;Domain-Driven Design&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;Ubiquitous language, bounded contexts&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Four Review Modes
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/brooks-lint:brooks-review   &lt;span class="c"&gt;# PR review — what changed and what it risks&lt;/span&gt;
/brooks-lint:brooks-audit    &lt;span class="c"&gt;# Architecture audit — structural health of the whole system&lt;/span&gt;
/brooks-lint:brooks-debt     &lt;span class="c"&gt;# Tech debt — classify and prioritize what to fix&lt;/span&gt;
/brooks-lint:brooks-test     &lt;span class="c"&gt;# Test quality — coverage gaps, fragile tests, wrong abstractions&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The test quality mode (&lt;code&gt;brooks-test&lt;/code&gt;) draws from &lt;em&gt;xUnit Test Patterns&lt;/em&gt;, &lt;em&gt;The Art of Unit Testing&lt;/em&gt;, and Google's &lt;em&gt;Software Engineering&lt;/em&gt; book — it flags things like over-mocking, test logic duplication, and tests that verify implementation instead of behavior.&lt;/p&gt;

&lt;h2&gt;
  
  
  Eval Results
&lt;/h2&gt;

&lt;p&gt;I ran an evaluation comparing reviews with and without the plugin on a set of intentionally seeded codebases:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;94%&lt;/strong&gt; of findings included a book citation and structured consequence analysis with the plugin&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;16%&lt;/strong&gt; of findings had equivalent depth without it&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The plugin doesn't make Claude smarter — it makes Claude &lt;em&gt;accountable&lt;/em&gt;. When every finding has to cite a chapter, hand-wavy feedback can't survive.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Via plugin marketplace (recommended)&lt;/span&gt;
/plugin marketplace add hyhmrright/brooks-lint
/plugin &lt;span class="nb"&gt;install &lt;/span&gt;brooks-lint@brooks-lint-marketplace

&lt;span class="c"&gt;# Manual&lt;/span&gt;
&lt;span class="nb"&gt;cp&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; skills/brooks-lint/ ~/.claude/skills/brooks-lint
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Why "Brooks"?
&lt;/h2&gt;

&lt;p&gt;Fred Brooks wrote &lt;em&gt;The Mythical Man-Month&lt;/em&gt; in 1975. Most of what he described — conceptual integrity, the second-system effect, the surgical team model — still shows up every week in production code. The plugin is named after him as a reminder that the hard problems in software aren't new, and the best answers to them are already written down.&lt;/p&gt;




&lt;p&gt;GitHub: &lt;a href="https://github.com/hyhmrright/brooks-lint" rel="noopener noreferrer"&gt;hyhmrright/brooks-lint&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Happy to answer questions about how the skill detection works or how I structured the decay risk taxonomy.&lt;/p&gt;




&lt;h2&gt;
  
  
  Update (March 2026): Now on Gemini CLI Too
&lt;/h2&gt;

&lt;p&gt;brooks-lint v0.5.2 now supports &lt;strong&gt;Gemini CLI&lt;/strong&gt; as a first-class platform, in addition to Claude Code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gemini CLI install:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/extensions &lt;span class="nb"&gt;install &lt;/span&gt;https://github.com/hyhmrright/brooks-lint
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Claude Code install:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/plugin marketplace add hyhmrright/brooks-lint
/plugin &lt;span class="nb"&gt;install &lt;/span&gt;brooks-lint@brooks-lint-marketplace
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Both platforms use the same skill files — same decay risk framework, same Iron Law diagnostics, same book citations. The only difference is the entry point configuration. If you use both tools, one install covers both.&lt;/p&gt;

&lt;p&gt;The extension is also listed on the &lt;a href="https://geminicli.com/extensions" rel="noopener noreferrer"&gt;official Gemini CLI extension gallery&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>claudecode</category>
      <category>showdev</category>
      <category>ai</category>
      <category>softwareengineering</category>
    </item>
  </channel>
</rss>
