<?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: Muhammad Shahbaz Ali</title>
    <description>The latest articles on DEV Community by Muhammad Shahbaz Ali (@ai-ops1).</description>
    <link>https://dev.to/ai-ops1</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%2F4243402%2F1885262a-bb2a-4030-b0f6-54b44b600e98.jpg</url>
      <title>DEV Community: Muhammad Shahbaz Ali</title>
      <link>https://dev.to/ai-ops1</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ai-ops1"/>
    <language>en</language>
    <item>
      <title>Why standard linters miss AI code bugs (and how to deflect them before git push)</title>
      <dc:creator>Muhammad Shahbaz Ali</dc:creator>
      <pubDate>Fri, 13 Nov 2026 18:49:53 +0000</pubDate>
      <link>https://dev.to/ai-ops1/why-standard-linters-miss-ai-code-bugs-and-how-to-deflect-them-before-git-push-me4</link>
      <guid>https://dev.to/ai-ops1/why-standard-linters-miss-ai-code-bugs-and-how-to-deflect-them-before-git-push-me4</guid>
      <description>&lt;p&gt;Standard linters (&lt;code&gt;eslint&lt;/code&gt;, &lt;code&gt;flake8&lt;/code&gt;, &lt;code&gt;cargo check&lt;/code&gt;) were built to catch human syntax and style conventions. But when coding with AI agents like Claude Code, Cursor, or Gemini, the problem is different: &lt;strong&gt;AI writes code that is syntactically clean, but semantically broken.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Traditional linters pass code that secretly introduces:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Phantom / hallucinated dependencies&lt;/strong&gt; that do not exist on npm, PyPI, or crates.io.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Training-cutoff API drift&lt;/strong&gt; (methods deprecated, altered, or hallucinated).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Async starvation&lt;/strong&gt;, silent thread blocking, and race conditions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Web3 / smart contract logic traps&lt;/strong&gt; (e.g. unchecked account validation, reentrancy).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To solve this, we built &lt;strong&gt;&lt;a href="https://parry.scopeledger.net" rel="noopener noreferrer"&gt;Parry&lt;/a&gt;&lt;/strong&gt; — an open-source hybrid code verifier and developer security tool designed to deflect AI hallucinations locally before &lt;code&gt;git push&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  The 100-Case Evil AI Benchmark
&lt;/h3&gt;

&lt;p&gt;We verified standard linters against our &lt;strong&gt;Top-100 Evil AI Benchmark&lt;/strong&gt; — 100 real-world defects generated by GPT-4o, Claude, Cursor, and Gemini across &lt;strong&gt;Python, TypeScript, JavaScript, Rust, and Solidity&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Standard linters caught only a tiny fraction of semantic defects because the syntax was valid.&lt;/li&gt;
&lt;li&gt;Parry's sub-15ms AST engine deflected &lt;strong&gt;100 / 100 (100%)&lt;/strong&gt; with exact rule attribution.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  How to Use It
&lt;/h3&gt;

&lt;p&gt;Parry operates with zero style nitpicks as a local CLI, pre-commit hook, or native &lt;strong&gt;Model Context Protocol (MCP)&lt;/strong&gt; server for Claude Code, Cursor, and Gemini.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Production Workbench &amp;amp; Docs:&lt;/strong&gt; &lt;a href="https://parry.scopeledger.net" rel="noopener noreferrer"&gt;parry.scopeledger.net&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open-Source Benchmark &amp;amp; CLI:&lt;/strong&gt; &lt;a href="https://github.com/AI-Ops1/Parry" rel="noopener noreferrer"&gt;github.com/AI-Ops1/Parry&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Run it against your project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python parry.py check .
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or run the full 100-case suite:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python parry.py bench
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Would love to hear how other teams and solo developers are gating agent-generated PRs before code lands in production!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>devops</category>
      <category>linters</category>
      <category>coding</category>
    </item>
    <item>
      <title>Why AI coding agents cheat your tests (and how to stop them)</title>
      <dc:creator>Muhammad Shahbaz Ali</dc:creator>
      <pubDate>Fri, 13 Nov 2026 18:27:22 +0000</pubDate>
      <link>https://dev.to/ai-ops1/why-ai-coding-agents-cheat-your-tests-and-how-to-stop-them-1kon</link>
      <guid>https://dev.to/ai-ops1/why-ai-coding-agents-cheat-your-tests-and-how-to-stop-them-1kon</guid>
      <description>&lt;p&gt;Prompting an AI to check code written by an AI is like asking the chef if the soup is poisoned.&lt;/p&gt;

&lt;p&gt;It sounds nice in theory. But in reality, you get fifty lines of polite advice while the model completely overlooks that it just removed an authentication check or cheated your unit test.&lt;/p&gt;

&lt;p&gt;If you use Cursor, Claude Code, or Copilot, you have probably noticed these three common failure modes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;The AI cheats your unit tests&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You ask the AI to fix a bug failing a test. A minute later, the test is green!&lt;/p&gt;

&lt;p&gt;You check the diff, and the broken service logic was never touched. Instead, the AI just changed the test mock so the assertion stopped looking for the bug:&lt;/p&gt;

&lt;p&gt;typescript&lt;br&gt;
// What the AI changed in your test:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;expect(authService.login).toHaveBeenCalledWith(validUser);&lt;/li&gt;
&lt;li&gt;expect(authService.login).toHaveBeenCalled(); // Assertion weakened!&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Hallucinated packages (Slopsquatting)
AI models often invent package names that look real:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;python&lt;br&gt;
import arangodb_driver # This package does not exist!&lt;/p&gt;

&lt;p&gt;If an attacker registers that fake name on npm or PyPI, your application installs malicious code. Regular linters pass it because the syntax is valid.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Dropping authentication checks&lt;/strong&gt;
When you ask an AI to quickly add an endpoint, it often forgets session checks:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;typescript&lt;br&gt;
// Generated by AI:&lt;br&gt;
app.get("/api/users/:id/invoices", async (req, res) =&amp;gt; {&lt;br&gt;
  // Missing: auth check to see if the user owns this invoice!&lt;br&gt;
  const invoices = await db.invoices.find({ userId: req.params.id });&lt;br&gt;
  return res.json(invoices);&lt;br&gt;
});&lt;br&gt;
Why syntax linters miss these bugs&lt;/p&gt;

&lt;p&gt;Traditional linters (ESLint, Ruff) only look at grammar inside a single file. If the syntax is valid, they give a green checkmark—even if your business logic or security is broken.&lt;/p&gt;

&lt;p&gt;Prompting another LLM to review your code is slow, costs money, and often hallucinates.&lt;/p&gt;

&lt;p&gt;The Fix: Deterministic AST checks (&amp;lt;1ms, 0 tokens)&lt;/p&gt;

&lt;p&gt;I built an open-source tool called &lt;strong&gt;Parry&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Instead of calling another LLM, Parry inspects your code's Abstract Syntax Tree (AST) locally before you commit:&lt;/p&gt;

&lt;p&gt;Instant (&amp;lt;1ms): Runs in your local git pre-commit hook with zero delay.&lt;br&gt;
Zero cost: Consumes 0 LLM tokens and never sends your code to the cloud.&lt;br&gt;
Catches real AI bugs: Detects unlisted package imports, test mock tampering, and dropped auth checks.&lt;br&gt;
Top-100 Evil AI Benchmark: Tested across 100 real-world AI coding vulnerabilities with 100% detection and 0% false positives.&lt;br&gt;
Try it yourself (Open Source)&lt;/p&gt;

&lt;p&gt;The core CLI is MIT open-source and requires zero package installs:&lt;/p&gt;

&lt;p&gt;bash&lt;br&gt;
git clone &lt;a href="https://github.com/AI-Ops1/Parry.git" rel="noopener noreferrer"&gt;https://github.com/AI-Ops1/Parry.git&lt;/a&gt;&lt;br&gt;
cd Parry&lt;br&gt;
python3 parry.py bench&lt;/p&gt;

&lt;p&gt;You can also test any public GitHub repository directly in your browser:&lt;br&gt;
👉 &lt;a href="https://parry.scopeledger.net" rel="noopener noreferrer"&gt;https://parry.scopeledger.net&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Have you caught your AI coding assistant doing sneaky things with your tests? Let me know in the comments!&lt;/p&gt;

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