<?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: Aashish</title>
    <description>The latest articles on DEV Community by Aashish (@aashish_1876).</description>
    <link>https://dev.to/aashish_1876</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F99mvlsfu5tfj9m7ku25d.png</url>
      <title>DEV Community: Aashish</title>
      <link>https://dev.to/aashish_1876</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/aashish_1876"/>
    <language>en</language>
    <item>
      <title>My linter reported 700 problems. Almost all of them were wrong.</title>
      <dc:creator>Aashish</dc:creator>
      <pubDate>Wed, 04 Nov 2026 09:18:09 +0000</pubDate>
      <link>https://dev.to/aashish_1876/my-linter-reported-700-problems-almost-all-of-them-were-wrong-267b</link>
      <guid>https://dev.to/aashish_1876/my-linter-reported-700-problems-almost-all-of-them-were-wrong-267b</guid>
      <description>&lt;p&gt;AI coding agents read your &lt;code&gt;AGENTS.md&lt;/code&gt; or &lt;code&gt;CLAUDE.md&lt;/code&gt; on every request. Those files rot like any other docs: a folder gets renamed, a script disappears, and the agent keeps following instructions that stopped being true months ago.&lt;/p&gt;

&lt;p&gt;I built &lt;a href="https://github.com/aashish1876/rulecheck" rel="noopener noreferrer"&gt;rulecheck&lt;/a&gt; to catch that. It reads your rules file and checks it against your repo: do the paths exist, do the &lt;code&gt;npm run&lt;/code&gt; and &lt;code&gt;make&lt;/code&gt; commands point at real scripts, are rules repeated, do two rules recommend competing tools. It runs offline, needs no API key, and never executes your commands.&lt;/p&gt;

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

&lt;p&gt;Then I ran it on real projects, and it embarrassed me.&lt;/p&gt;

&lt;h2&gt;
  
  
  The first run
&lt;/h2&gt;

&lt;p&gt;I pointed the first version at 10 popular open-source repos (Next.js, n8n, Grafana, Airflow, Deno, Codex, LangChain, Langflow, llama.cpp and Excalidraw), 92 rules files in total. It reported more than 700 problems. Airflow scored 4 out of 100 and n8n scored 0.&lt;/p&gt;

&lt;p&gt;Almost every finding was wrong.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the false positives looked like
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Code, not paths.&lt;/strong&gt; &lt;code&gt;console.log&lt;/code&gt;, &lt;code&gt;it.skip&lt;/code&gt; and &lt;code&gt;nodes.value.push&lt;/code&gt; were read as files.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Version numbers.&lt;/strong&gt; &lt;code&gt;3.11&lt;/code&gt; and &lt;code&gt;0.2.1&lt;/code&gt; were read as folders.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Placeholders.&lt;/strong&gt; &lt;code&gt;path/to/file.ts&lt;/code&gt;, &lt;code&gt;my_script.py&lt;/code&gt; and &lt;code&gt;vYYYY_MM_DD.py&lt;/code&gt; are examples, not files.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build output.&lt;/strong&gt; &lt;code&gt;./target/debug/deno&lt;/code&gt; does not exist until you build it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prose.&lt;/strong&gt; &lt;code&gt;dark/light&lt;/code&gt; and &lt;code&gt;scroll/hover&lt;/code&gt; are words separated by a slash.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Claude Code imports.&lt;/strong&gt; &lt;code&gt;@AGENTS.md&lt;/code&gt; is an include directive, not a file named &lt;code&gt;@AGENTS.md&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Repo names.&lt;/strong&gt; &lt;code&gt;vercel/next.js&lt;/code&gt; is a GitHub slug, not a folder.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Built-in commands.&lt;/strong&gt; &lt;code&gt;pnpm add&lt;/code&gt; is not a script missing from &lt;code&gt;package.json&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The same file twice.&lt;/strong&gt; Deno keeps shared rules in more than one file, and the copy was flagged as a duplicate.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The rule that fixed most of it
&lt;/h2&gt;

&lt;p&gt;A linter that cries wolf gets uninstalled, so I adopted one rule: precision beats recall.&lt;/p&gt;

&lt;p&gt;rulecheck now reports a missing path only when it can be sure. &lt;code&gt;src/utlis/&lt;/code&gt; is reported because &lt;code&gt;src/&lt;/code&gt; exists and the last piece does not. Anything that looks like an example, a placeholder, build output, a gitignored file, or something the rule itself calls optional is skipped. It will miss some real problems, and I am fine with that.&lt;/p&gt;

&lt;h2&gt;
  
  
  The results after tuning
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Repo&lt;/th&gt;
&lt;th&gt;Score&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Codex&lt;/td&gt;
&lt;td&gt;100&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;llama.cpp&lt;/td&gt;
&lt;td&gt;100&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deno&lt;/td&gt;
&lt;td&gt;100&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Excalidraw&lt;/td&gt;
&lt;td&gt;100&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Next.js&lt;/td&gt;
&lt;td&gt;96&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LangChain&lt;/td&gt;
&lt;td&gt;96&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;n8n&lt;/td&gt;
&lt;td&gt;92&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Langflow&lt;/td&gt;
&lt;td&gt;90&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Grafana&lt;/td&gt;
&lt;td&gt;84&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Airflow&lt;/td&gt;
&lt;td&gt;76&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Most of the lost points are not mistakes. Several rules files run past 5,000 tokens (Grafana's router file is about 11,000), and Airflow repeats a block of bullet points in one file.&lt;/p&gt;

&lt;h2&gt;
  
  
  The one real catch
&lt;/h2&gt;

&lt;p&gt;Langflow's &lt;code&gt;AGENTS.md&lt;/code&gt; tells agents that components live in &lt;code&gt;src/backend/base/langflow/components/&lt;/code&gt;. That folder no longer exists. The components live in &lt;code&gt;src/lfx/src/lfx/components/&lt;/code&gt;, so an agent following the file would look in the wrong place.&lt;/p&gt;

&lt;p&gt;I opened a pull request with the fix: &lt;a href="https://github.com/langflow-ai/langflow/pull/16140" rel="noopener noreferrer"&gt;langflow-ai/langflow#16140&lt;/a&gt;. At the time of writing it is still open.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I took away
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Ten well-maintained projects is a small sample, but their rules files were in better shape than I expected. Rot is real, just smaller than I feared.&lt;/li&gt;
&lt;li&gt;The hard part of a linter is not finding problems. It is refusing to invent them.&lt;/li&gt;
&lt;li&gt;Test on real repos early. The fixtures I wrote myself never contained anything as messy as &lt;code&gt;@AGENTS.md&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

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



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx rulecheck
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It also has a GitHub Action that annotates pull requests, and it can generate a README badge. The code is at &lt;a href="https://github.com/aashish1876/rulecheck" rel="noopener noreferrer"&gt;github.com/aashish1876/rulecheck&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Limits: contradiction detection is heuristic, token counts are estimates (characters divided by four), and it checks references, not whether your rules are good advice. If it flags something wrong in your repo, please open an issue. Those are bugs, and they are the ones I most want to hear about.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>coding</category>
      <category>github</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
