<?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: moussaoutlook</title>
    <description>The latest articles on DEV Community by moussaoutlook (@moussaoutlook).</description>
    <link>https://dev.to/moussaoutlook</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%2F1457358%2Fa1906e23-f95b-45b0-ad19-8e18241e686f.jpeg</url>
      <title>DEV Community: moussaoutlook</title>
      <link>https://dev.to/moussaoutlook</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/moussaoutlook"/>
    <language>en</language>
    <item>
      <title>I ran my code analyzer on 9 codebases it had never seen. It found 3 real bugs, and embarrassed me first.</title>
      <dc:creator>moussaoutlook</dc:creator>
      <pubDate>Thu, 16 Jul 2026 14:31:31 +0000</pubDate>
      <link>https://dev.to/moussaoutlook/i-ran-my-code-analyzer-on-9-codebases-it-had-never-seen-it-found-3-real-bugs-and-embarrassed-me-5eo4</link>
      <guid>https://dev.to/moussaoutlook/i-ran-my-code-analyzer-on-9-codebases-it-had-never-seen-it-found-3-real-bugs-and-embarrassed-me-5eo4</guid>
      <description>&lt;p&gt;A maintainer of Apache Superset merged one of my fixes the same day I filed it. "I can verify the fix is correct… CI's green now. LGTM." It was a one-line change: a &lt;code&gt;TYPE_CHECKING&lt;/code&gt; import pointing at a module path that had quietly moved during a test-tree refactor, so every type-check of that file had been silently failing since. I didn't find it by reading Superset's code. A tool I've been building found it, and I'd never seen that repo before in my life.&lt;/p&gt;

&lt;p&gt;That tool is DACIP, and this is the honest story of how it did on nine codebases I picked precisely because I had no idea what was inside them, including the part where it made me look foolish first.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem I actually have
&lt;/h2&gt;

&lt;p&gt;I build with AI coding agents every day. The failure mode that kept burning me was never bad code, the agents write fine code, though. It was &lt;strong&gt;contract breaks&lt;/strong&gt;. The agent renames a Flask route from &lt;code&gt;/api/health&lt;/code&gt; to &lt;code&gt;/api/healthz&lt;/code&gt;, the Python tests pass, the TypeScript compiles, CI goes green, then a React call site three files away now 404s in production. Nothing caught it, because nothing was &lt;em&gt;looking at both sides at once.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Unit tests check one side. Type checkers check one language. AI reviewers have opinions about the diff in front of them, but they don't hold a model of "every place the frontend calls the backend" and check it against "every route the backend actually serves." That specific class of bug sails through green CI.&lt;/p&gt;

&lt;p&gt;So DACIP does exactly that and nothing else: it extracts the routes your backend serves and the calls your frontend makes, from source, from &lt;em&gt;both git refs&lt;/em&gt; of a pull request, and reports only what the change broke. Every finding names the orphaned caller at &lt;code&gt;file:line&lt;/code&gt; and ships a command that reproduces it: fails on the branch, passes when fixed. No language model anywhere in the pipeline. Same two commits in, byte-identical report out, every single time.&lt;/p&gt;

&lt;p&gt;That determinism is the whole pitch. But determinism is worthless if the output is wrong. So I needed to know: &lt;strong&gt;on code I'd never seen, how often does it cry wolf?&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The claim that died on contact
&lt;/h2&gt;

&lt;p&gt;My claim was "zero false positives." I'd tuned it on my own repos, where I knew every answer. Confident, I pointed it at redash (a BI platform), ~123 routes, a big React frontend, and it asserted &lt;strong&gt;8 defects.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Seven were wrong.&lt;/p&gt;

&lt;p&gt;Not subtly wrong. Wrong because redash wraps its route registration in a helper (&lt;code&gt;add_org_resource&lt;/code&gt;) my extractor didn't understand, inherits HTTP handlers from local base classes I didn't follow, and builds URLs through wrapper calls I read as opaque. My tool didn't understand redash's &lt;em&gt;dialect&lt;/em&gt; of Flask, so it hallucinated breaks that weren't there.&lt;/p&gt;

&lt;p&gt;This is the moment most tools quietly fudge. You tune the thresholds until the false positives disappear on this repo, ship it, and call it "zero false positives", until the next repo, where it lies again. I did the opposite. Every false positive was a &lt;strong&gt;gap class&lt;/strong&gt;, a specific pattern the extractor didn't model, and each one got a fix with a regression test pinning it shut. Nineteen of them, across the nine repos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Monorepo source roots (Django living under &lt;code&gt;api/&lt;/code&gt;, so dotted import paths resolve to a root that isn't the repo root)&lt;/li&gt;
&lt;li&gt;Express servers living &lt;em&gt;inside&lt;/em&gt; &lt;code&gt;frontend/&lt;/code&gt;, &lt;code&gt;app.post('/x', handler)&lt;/code&gt; is a route definition, not a frontend call&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;urlpatterns&lt;/code&gt; built by list concatenation, &lt;code&gt;i18n_patterns(*urls)&lt;/code&gt;, and non-constant mounts&lt;/li&gt;
&lt;li&gt;drf-nested-routers, Flask-AppBuilder's &lt;code&gt;@expose&lt;/code&gt; classes, PostHog's entirely custom &lt;code&gt;RouterRegistry&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;…fourteen more, each dull, each real, each now regression-tested.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The rule I held: &lt;strong&gt;when the tool can't extract enough to be sure, it must say so, not guess.&lt;/strong&gt; A repo where DACIP reports little is a repo where it &lt;em&gt;tells you&lt;/em&gt; it sees little. That "coverage" line is part of every report, and it's the product as much as the findings are.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where it landed: nine repos, zero false positives, three real bugs
&lt;/h2&gt;

&lt;p&gt;After the gap classes were fixed, here's the final scorecard, every asserted defect hand-verified against the actual source by tracing the real route table and the real call site:&lt;/p&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;Routes extracted&lt;/th&gt;
&lt;th&gt;Asserted defects&lt;/th&gt;
&lt;th&gt;False positives&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;getredash/redash&lt;/td&gt;
&lt;td&gt;149&lt;/td&gt;
&lt;td&gt;1 (real)&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;apache/superset&lt;/td&gt;
&lt;td&gt;307&lt;/td&gt;
&lt;td&gt;1 (real, &lt;strong&gt;merged&lt;/strong&gt;)&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HumanSignal/label-studio&lt;/td&gt;
&lt;td&gt;185&lt;/td&gt;
&lt;td&gt;1 (real)&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;posthog/posthog&lt;/td&gt;
&lt;td&gt;1,920&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;getsentry/sentry&lt;/td&gt;
&lt;td&gt;151&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;zulip/zulip&lt;/td&gt;
&lt;td&gt;445&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;netbox-community/netbox&lt;/td&gt;
&lt;td&gt;393&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Flagsmith/flagsmith&lt;/td&gt;
&lt;td&gt;616&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;mathesar/mathesar&lt;/td&gt;
&lt;td&gt;24&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These nine repos don't just live in this table, they're re-scanned every night at pinned commits, with every scan run twice and the artifacts byte-compared. Tonight's numbers are live on the proof dashboard. (&lt;a href="https://dacip.dev/proof/" rel="noopener noreferrer"&gt;https://dacip.dev/proof/&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;The three real bugs, all disclosed upstream before this post:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;redash&lt;/strong&gt; ships a client method calling &lt;code&gt;GET /api/dashboards/recent&lt;/code&gt; with no backend route serves it. (Latent: the method has no callers today, which the issue says plainly. &lt;a href="https://github.com/getredash/redash/issues/7769" rel="noopener noreferrer"&gt;#7769&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;superset&lt;/strong&gt;'s stale &lt;code&gt;TYPE_CHECKING&lt;/code&gt; import, above. (&lt;a href="https://github.com/apache/superset/pull/41972" rel="noopener noreferrer"&gt;#41972&lt;/a&gt;, merged same day.)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;label-studio&lt;/strong&gt; ships &lt;code&gt;io_storages/filesystem.py&lt;/code&gt; importing a &lt;code&gt;.base&lt;/code&gt; module that doesn't exist, &lt;code&gt;ModuleNotFoundError&lt;/code&gt; on first import, zero current importers. A landmine, not a live crash. (&lt;a href="https://github.com/HumanSignal/label-studio/issues/9815" rel="noopener noreferrer"&gt;#9815&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The part I want you to poke at
&lt;/h2&gt;

&lt;p&gt;"Zero false positives" is a strong claim and you should be suspicious of it. So here's exactly what it means and doesn't:&lt;/p&gt;

&lt;p&gt;It means every &lt;em&gt;asserted defect&lt;/em&gt;, the P1/P2 findings with a full evidence chain, survived hand-verification against the code. It does &lt;strong&gt;not&lt;/strong&gt; mean "found every bug." Coverage varies enormously: 99% of comparable calls matched on redash, near-zero comparable surface on mathesar and netbox. Custom frontend HTTP clients blind the linker until I teach it that idiom. There's a public gap list, Next.js Pages Router is partial, and some custom router registries each need their own extractor. (FastAPI landed after this batch, validated on the full-stack-fastapi-template.)&lt;/p&gt;

&lt;p&gt;The distinction between "asserted defect" and "observation" isn't editorial taste, it's enforced by promotion gates in the pipeline. A finding only gets asserted if extraction was trustworthy enough in that area to stand behind it. Everything below that bar is labelled an observation and surfaced separately. &lt;strong&gt;An LLM can't tell you when it's guessing. A deterministic analyzer has no excuse not to.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's the actual thesis. Not "our AI is smarter." The opposite: no AI, no temperature, no drift, and a hard rule that when it can't see, it says so. The false-positive count is zero &lt;em&gt;because&lt;/em&gt; of that rule, not in spite of it.&lt;/p&gt;

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

&lt;p&gt;DACIP runs as a GitHub App (a check on your PRs) and as a guardrail inside your coding agent (it denies contract-breaking edits before they land, with the blast radius in the denial). It's free for public repos and one private repo.&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="c"&gt;# inside any public GitHub repo clone — macOS arm64 / Linux x86_64&lt;/span&gt;
uvx dacip investigate &lt;span class="s2"&gt;"api contract audit"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you run it on your codebase and it asserts something false, that's a bug in &lt;em&gt;my&lt;/em&gt; tool and I want the report, the zero-FP claim is falsifiable on purpose. And if you maintain one of the repos above and think I got a finding wrong, tell me publicly and I'll correct the record. That's not a risk to the brand. That &lt;em&gt;is&lt;/em&gt; the brand.&lt;/p&gt;

&lt;p&gt;→ &lt;a href="https://dacip.dev" rel="noopener noreferrer"&gt;https://dacip.dev&lt;/a&gt; · the live proof dashboard (&lt;a href="https://dacip.dev/proof/" rel="noopener noreferrer"&gt;https://dacip.dev/proof/&lt;/a&gt;) · get early access to the GitHub App (&lt;a href="https://dacip.dev/#waitlist" rel="noopener noreferrer"&gt;https://dacip.dev/#waitlist&lt;/a&gt;)&lt;/p&gt;

</description>
      <category>codereview</category>
      <category>python</category>
      <category>typescript</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
