<?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: Prathik Arun</title>
    <description>The latest articles on DEV Community by Prathik Arun (@prathik_arun_a1b1871bbbd3).</description>
    <link>https://dev.to/prathik_arun_a1b1871bbbd3</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%2F3962727%2F414b4548-00bf-4f2b-af72-7a5cd8b97758.png</url>
      <title>DEV Community: Prathik Arun</title>
      <link>https://dev.to/prathik_arun_a1b1871bbbd3</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/prathik_arun_a1b1871bbbd3"/>
    <language>en</language>
    <item>
      <title>Archaeologist — A Codebase Intelligence Toolkit Built on Tree-Sitter and Git History</title>
      <dc:creator>Prathik Arun</dc:creator>
      <pubDate>Mon, 01 Jun 2026 12:45:02 +0000</pubDate>
      <link>https://dev.to/prathik_arun_a1b1871bbbd3/archaeologist-a-codebase-intelligence-toolkit-built-on-tree-sitter-and-git-history-6kk</link>
      <guid>https://dev.to/prathik_arun_a1b1871bbbd3/archaeologist-a-codebase-intelligence-toolkit-built-on-tree-sitter-and-git-history-6kk</guid>
      <description>&lt;p&gt;Every codebase accumulates debt over time. Dead functions nobody calls. Files so complex they're impossible to change safely. Copy-paste code scattered across 6 different files. Dependencies so tangled that touching one file breaks three others.&lt;/p&gt;

&lt;p&gt;I built Archaeologist to address all of this in one install.&lt;/p&gt;

&lt;p&gt;pip3 install archaeologist&lt;/p&gt;

&lt;p&gt;Here's how each of the 5 tools works.&lt;/p&gt;




&lt;h2&gt;
  
  
  ⬡ Codebase Graph
&lt;/h2&gt;

&lt;p&gt;archaeologist-graph ./my-project&lt;/p&gt;

&lt;p&gt;Opens an interactive browser map of your architecture. Files rendered as cards, colored by health — green (clean), gold (has dead code), red (fully unused), purple (entry point). Grouped by folder using Dagre.js layout. Click any card to see every file that depends on it.&lt;/p&gt;




&lt;h2&gt;
  
  
  ◎ Change Impact Analyzer
&lt;/h2&gt;

&lt;p&gt;archaeologist-impact ./my-project --all --html&lt;/p&gt;

&lt;p&gt;Before touching any file, see its blast radius. Builds a reverse call graph — every caller, every importer, test coverage — and produces a 0–100 risk score. The --all flag scans every file and ranks them by blast radius.&lt;/p&gt;




&lt;h2&gt;
  
  
  ◈ Complexity Scorer
&lt;/h2&gt;

&lt;p&gt;archaeologist-complexity ./my-project --html&lt;/p&gt;

&lt;p&gt;Scores every function on cyclomatic complexity — decision branches, nesting depth, line count. Ranked worst-first. Labels: Very Complex (30+), Complex (15–29), Moderate (8–14), Simple (0–7).&lt;/p&gt;




&lt;h2&gt;
  
  
  ⧉ Duplicate Detector
&lt;/h2&gt;

&lt;p&gt;archaeologist-dupes ./my-project --html&lt;/p&gt;

&lt;p&gt;Three signals: same name in different files, exact body match, near-identical bodies (85%+ similarity). Excludes common OOP names like toString/equals/hashCode to avoid false positives.&lt;/p&gt;




&lt;h2&gt;
  
  
  ☠ Dead Code Finder
&lt;/h2&gt;

&lt;p&gt;deadcode ./my-project --explain&lt;br&gt;
deadcode-clean ./my-project --dry-run --min-confidence 85&lt;br&gt;
deadcode-clean ./my-project --min-confidence 85&lt;/p&gt;

&lt;p&gt;Static analysis alone has too many false positives. So I added git history as a second signal.&lt;/p&gt;

&lt;p&gt;Each flagged function gets a 0–100 confidence score:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Signal&lt;/th&gt;
&lt;th&gt;Points&lt;/th&gt;
&lt;th&gt;How it works&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Call graph&lt;/td&gt;
&lt;td&gt;45&lt;/td&gt;
&lt;td&gt;Zero inbound calls from non-test code&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Git age&lt;/td&gt;
&lt;td&gt;20&lt;/td&gt;
&lt;td&gt;File untouched for 2+ years&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Author count&lt;/td&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;td&gt;Single author ever committed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Recursive dead&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;All callers are also flagged&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Commit count&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;Only 1–2 total commits ever&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The auto-delete pipeline: isolated git branch → AST byte-range deletion → tests run → PR opened if tests pass. Main branch never touched.&lt;/p&gt;




&lt;h2&gt;
  
  
  False positive rate
&lt;/h2&gt;

&lt;p&gt;Tested on 44 open source projects — Flask, Django, FastAPI, Rails, Gin, Vue, Zod, Actix, JUnit5, Alamofire and more. Zero false positives at 80%+ confidence on all of them.&lt;/p&gt;




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

&lt;p&gt;pip3 install archaeologist&lt;/p&gt;

&lt;p&gt;Website: &lt;a href="https://prathik-arun.github.io/archaeologist" rel="noopener noreferrer"&gt;https://prathik-arun.github.io/archaeologist&lt;/a&gt;&lt;br&gt;
GitHub: &lt;a href="https://github.com/prathik-arun/archaeologist" rel="noopener noreferrer"&gt;https://github.com/prathik-arun/archaeologist&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Would love feedback on false positive rate on your own codebases.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>python</category>
      <category>opensource</category>
      <category>tooling</category>
    </item>
  </channel>
</rss>
