<?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: Suvraneel</title>
    <description>The latest articles on DEV Community by Suvraneel (@psuvraneelcyber).</description>
    <link>https://dev.to/psuvraneelcyber</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%2F4218007%2Febeda874-bed1-4162-b975-934eb8554b02.jpg</url>
      <title>DEV Community: Suvraneel</title>
      <link>https://dev.to/psuvraneelcyber</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/psuvraneelcyber"/>
    <language>en</language>
    <item>
      <title>We fresh-cloned the top 100 npm packages. The biggest problem we found was in our own tool.</title>
      <dc:creator>Suvraneel</dc:creator>
      <pubDate>Fri, 30 Oct 2026 22:34:50 +0000</pubDate>
      <link>https://dev.to/psuvraneelcyber/we-fresh-cloned-the-top-100-npm-packages-the-biggest-problem-we-found-was-in-our-own-tool-55i8</link>
      <guid>https://dev.to/psuvraneelcyber/we-fresh-cloned-the-top-100-npm-packages-the-biggest-problem-we-found-was-in-our-own-tool-55i8</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;We ran &lt;a href="https://github.com/psuvraneel-cyber/Clone-Proof" rel="noopener noreferrer"&gt;CloneProof&lt;/a&gt;, a static "will a fresh clone of this repository install and run?" checker, on the GitHub repositories of the 100 npm packages with the most dependents. We wrote down the method and the judging rules publicly before running a single check.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;9 of the 10 build-failing findings in the pre-registered run were false&lt;/strong&gt;, all from one check: CloneProof mistook README usage examples ("add this script to &lt;em&gt;your&lt;/em&gt; &lt;code&gt;package.json&lt;/code&gt;, then run it") for instructions about the repository itself. Only 1 of the 6 repositories it would have failed in CI deserved it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;After fixing what this study exposed, every build-failing finding is real.&lt;/strong&gt; On the same 100 repositories, CloneProof v0.2.4 fails 3, and all 3 deserve it. 60 of its 63 warnings are correct, up from 56 of 73.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;12 of 100 repositories have at least one real setup finding.&lt;/strong&gt; Six run a real browser as part of &lt;code&gt;npm test&lt;/code&gt;. Five have tests that the root &lt;code&gt;npm test&lt;/code&gt; cannot run: three workspace roots, husky's shell suite, and dart-sass's Dart suite. One commits a stale npm lockfile next to the pnpm lockfile it actually uses.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;7 of 100 repositories could not be checked at all&lt;/strong&gt; because they exceed CloneProof's clone safety limits: TypeScript, DefinitelyTyped, webpack, Babel, Rollup, and jsdom hit the 10,000-file or 25 MiB per-file limits, and Inquirer.js has 4.6 GiB of history.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The short version: these projects are in very good shape, and the most useful thing this study found was a set of bugs in CloneProof, now fixed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why fresh clones matter
&lt;/h2&gt;

&lt;p&gt;CI runs on a warm, configured machine; a new contributor, reviewer, or agent starts from &lt;code&gt;git clone&lt;/code&gt; and the README. The gaps between the two are small and annoying: a lockfile &lt;code&gt;npm ci&lt;/code&gt; rejects, a test command that quietly needs a browser, an undocumented environment variable. CloneProof looks for them without running any of the repository's code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Method
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Population.&lt;/strong&gt; We walked the npm packages with the most dependent packages, from the &lt;a href="https://packages.ecosyste.ms" rel="noopener noreferrer"&gt;ecosyste.ms&lt;/a&gt; registry API (fetched 2026-10-30), and mapped each to its GitHub repository. Archived repositories (17 packages, including &lt;code&gt;node-sass&lt;/code&gt;, &lt;code&gt;tslint&lt;/code&gt;, and &lt;code&gt;cross-env&lt;/code&gt;) were skipped. Packages that share a repository, such as 15 Babel packages and 7 &lt;code&gt;@types/*&lt;/code&gt; packages, count once. Reaching 100 unique repositories took the top 153 packages.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scope.&lt;/strong&gt; CloneProof checks the repository &lt;strong&gt;root&lt;/strong&gt;, the way a contributor sees it after &lt;code&gt;git clone&lt;/code&gt;. For monorepos, the published package lives in a sub-folder, so results describe "setting up this repository", not "installing this package". The check is static: one isolated shallow clone, no install, no repository code executed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pre-registration.&lt;/strong&gt; The selection procedure, the sample with expected findings, the procedure, and the judging rules were &lt;a href="https://github.com/psuvraneel-cyber/Clone-Proof/commit/c382a2ff5f4ac4399a5f4817ee68f8f8fa7a3534" rel="noopener noreferrer"&gt;committed and pushed&lt;/a&gt; before any check ran. The judging rules are unchanged from an earlier random-sample run.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Judging.&lt;/strong&gt; Every warning and failure was judged by reading the repository at the checked commit:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;real&lt;/strong&gt;: true, and it matters to someone setting up this repository root;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;policy&lt;/strong&gt;: true, but a choice a reasonable maintainer makes on purpose (for example, a library that does not commit a lockfile);&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;false&lt;/strong&gt;: wrong.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Disclosure.&lt;/strong&gt; All judgments were made by an AI assistant (Claude), which also helped build and fix CloneProof, and were not blind to the tool's output. Each has a one-line reason with file and line references, so anyone can re-judge. Ambiguous rules were interpreted once, in writing, and applied everywhere.&lt;/p&gt;

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

&lt;p&gt;The pre-registered run used CloneProof v0.2.0. We then fixed the bugs it exposed (see What CloneProof got wrong) and re-ran the same 100 repositories with the same judging rules (four had new commits by then; their findings did not change). Both runs are in the table:&lt;/p&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;v0.2.0 (pre-registered)&lt;/th&gt;
&lt;th&gt;v0.2.4 (after fixes)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Passed&lt;/td&gt;
&lt;td&gt;31&lt;/td&gt;
&lt;td&gt;37&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Passed with warnings&lt;/td&gt;
&lt;td&gt;56&lt;/td&gt;
&lt;td&gt;53&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Failed (exit 1, would fail a CI gate)&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Blocked by safety limits (exit 2)&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Blocking findings: real / policy / false&lt;/td&gt;
&lt;td&gt;1 / 0 / 9&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;3 / 0 / 0&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Warnings: real / policy / false&lt;/td&gt;
&lt;td&gt;10 / 46 / 17&lt;/td&gt;
&lt;td&gt;10 / 50 / &lt;strong&gt;3&lt;/strong&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1oyacotr0ndqmbqunldn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1oyacotr0ndqmbqunldn.png" alt="Stacked bars of every finding judged real, policy, or false. Blocking findings: v0.2.0 had 1 real and 9 false; v0.2.4 has 3 real. Warnings: v0.2.0 had 10 real, 46 policy, 17 false; v0.2.4 has 10 real, 50 policy, 3 false." width="800" height="386"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  What was real
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi5ad0g1kw1h10c4d069s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi5ad0g1kw1h10c4d069s.png" alt="Repositories with each kind of real setup finding: npm test starts a real browser, 6; tests the root npm test cannot run, 5; stale npm lockfile next to the pnpm one, 1." width="800" height="210"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tests that need a browser (6 repositories).&lt;/strong&gt; In &lt;code&gt;chai&lt;/code&gt;, &lt;code&gt;axios&lt;/code&gt;, &lt;code&gt;vuejs/core&lt;/code&gt;, &lt;code&gt;karma&lt;/code&gt;, &lt;code&gt;debug&lt;/code&gt;, and &lt;code&gt;karma-chrome-launcher&lt;/code&gt;, &lt;code&gt;npm test&lt;/code&gt; starts a real browser through Playwright, Karma, or web-test-runner. That is a good, deliberate choice, but a fresh machine or minimal container needs a browser installed first. For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;axios&lt;/code&gt;: &lt;code&gt;npm test&lt;/code&gt; runs &lt;code&gt;vitest run&lt;/code&gt; (&lt;a href="https://github.com/axios/axios/blob/9d11464a75ee5c644c0308d742f58755c0482594/package.json#L122-L123" rel="noopener noreferrer"&gt;package.json:122-123&lt;/a&gt;), and the Vitest config includes browser projects with &lt;code&gt;browser.enabled: true&lt;/code&gt; (&lt;a href="https://github.com/axios/axios/blob/9d11464a75ee5c644c0308d742f58755c0482594/vitest.config.js#L16-L41" rel="noopener noreferrer"&gt;vitest.config.js:16-41&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;vuejs/core&lt;/code&gt;: &lt;code&gt;npm test&lt;/code&gt; runs &lt;code&gt;vitest&lt;/code&gt; (&lt;a href="https://github.com/vuejs/core/blob/24c9d0bffb2299635b8112a978d74a38723aaa10/package.json#L19" rel="noopener noreferrer"&gt;package.json:19&lt;/a&gt;), which includes an &lt;code&gt;e2e-browser&lt;/code&gt; project using Playwright Chromium (&lt;a href="https://github.com/vuejs/core/blob/24c9d0bffb2299635b8112a978d74a38723aaa10/vitest.config.ts#L104-L116" rel="noopener noreferrer"&gt;vitest.config.ts:104-116&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;chai&lt;/code&gt;: &lt;code&gt;npm test&lt;/code&gt; ends with &lt;code&gt;test-chrome&lt;/code&gt;, which runs &lt;code&gt;web-test-runner --playwright&lt;/code&gt; (&lt;a href="https://github.com/chaijs/chai/blob/8cd999c735f025102a4294217309650f60d8cf96/package.json#L39-L41" rel="noopener noreferrer"&gt;package.json:39-41&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Workspace roots without a root test script (3 repositories).&lt;/strong&gt; &lt;code&gt;tslib&lt;/code&gt;, &lt;code&gt;rollup/plugins&lt;/code&gt;, and &lt;code&gt;rxjs&lt;/code&gt; have test suites, but &lt;code&gt;npm test&lt;/code&gt; at the root does not run them. For example, &lt;code&gt;tslib&lt;/code&gt; keeps its tests in &lt;code&gt;test/&lt;/code&gt; with a &lt;code&gt;runTests.js&lt;/code&gt; driver, and the root &lt;a href="https://github.com/microsoft/tslib/blob/8d6f9cdef0a24dc4f730815497a14cfbd79adec7/package.json" rel="noopener noreferrer"&gt;package.json&lt;/a&gt; defines no scripts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Test suites &lt;code&gt;npm test&lt;/code&gt; cannot run (2 repositories, found after a fix).&lt;/strong&gt; &lt;code&gt;husky&lt;/code&gt; tests itself with shell scripts and &lt;code&gt;dart-sass&lt;/code&gt; with Dart, and neither root &lt;code&gt;package.json&lt;/code&gt; has a test script. v0.2.0 looked only for JavaScript tests and wrongly said both had none. For dart-sass, a Dart project whose &lt;code&gt;package.json&lt;/code&gt; serves only its JavaScript tooling, the failure is correct by our rules but may feel like noise to its maintainers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A stale lockfile (1 repository).&lt;/strong&gt; &lt;code&gt;less/less.js&lt;/code&gt; uses pnpm (&lt;code&gt;packageManager&lt;/code&gt;, &lt;code&gt;postinstall: npx only-allow pnpm&lt;/code&gt;, &lt;code&gt;pnpm-lock.yaml&lt;/code&gt;), but it also still commits a &lt;code&gt;package-lock.json&lt;/code&gt; that lacks three root devDependencies declared at &lt;a href="https://github.com/less/less.js/blob/713331655e437401dfea6cd233893a69762734e1/package.json#L33-L36" rel="noopener noreferrer"&gt;package.json:33-36&lt;/a&gt;, so &lt;code&gt;npm ci&lt;/code&gt; refuses to install. pnpm users never notice; anyone whose tooling sees &lt;code&gt;package-lock.json&lt;/code&gt; and reaches for npm does.&lt;/p&gt;

&lt;h3&gt;
  
  
  What was policy, not breakage
&lt;/h3&gt;

&lt;p&gt;The most common finding by far was &lt;strong&gt;no committed lockfile: 29 repositories&lt;/strong&gt;, all of them libraries published to npm under the same name (&lt;code&gt;eslint&lt;/code&gt;, &lt;code&gt;express&lt;/code&gt;, &lt;code&gt;chalk&lt;/code&gt;, &lt;code&gt;debug&lt;/code&gt;, &lt;code&gt;semver&lt;/code&gt;, and others). Many library maintainers deliberately leave lockfiles out so their tests run against the dependency ranges users actually get. It is a reproducibility trade-off, not a mistake, and we count it as policy. So are optional switches such as &lt;code&gt;PRETTIER_DEBUG&lt;/code&gt; or &lt;code&gt;HUSKY=0&lt;/code&gt; that environment warnings point at: true, but nobody needs to set them.&lt;/p&gt;

&lt;p&gt;Of the 6 repositories that v0.2.0 would have failed in CI, 5 failed only because of false findings, so "six top packages fail a fresh-clone check" would have been a misleading headline. With v0.2.4, three fail, and each points at something a new contributor would actually hit.&lt;/p&gt;

&lt;h3&gt;
  
  
  The landscape
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz6xhe2ovens3hl2fplpd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz6xhe2ovens3hl2fplpd.png" alt="Root lockfiles in the top 100: npm only 42, pnpm 14, Yarn 13, npm and pnpm 1, none 30." width="800" height="256"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Lockfiles at the root:&lt;/strong&gt; 42 npm only, 14 pnpm, 13 Yarn, 1 npm and pnpm together, 0 Bun, 30 none.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;packageManager&lt;/code&gt;:&lt;/strong&gt; declared by 29 repositories (14 Yarn, 12 pnpm, 3 npm).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Node.js version:&lt;/strong&gt; 68 declare &lt;code&gt;engines.node&lt;/code&gt;, 8 commit &lt;code&gt;.nvmrc&lt;/code&gt;, 5 &lt;code&gt;.node-version&lt;/code&gt;; none really disagree.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What CloneProof got wrong
&lt;/h2&gt;

&lt;p&gt;This is the part we learned the most from. In the pre-registered run, &lt;strong&gt;26 of 83 findings were false.&lt;/strong&gt; All but three are fixed in v0.2.4.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;README examples for users (9 blocking findings, 5 repositories).&lt;/strong&gt; &lt;code&gt;webpack-dev-server&lt;/code&gt;, &lt;code&gt;lint-staged&lt;/code&gt;, &lt;code&gt;nyc&lt;/code&gt;, &lt;code&gt;coveralls&lt;/code&gt;, and &lt;code&gt;gh-pages&lt;/code&gt; all document how to add a script to &lt;em&gt;your&lt;/em&gt; project and run it. For example, &lt;code&gt;gh-pages&lt;/code&gt; shows a &lt;code&gt;"deploy": "gh-pages -d dist"&lt;/code&gt; script and then &lt;code&gt;npm run deploy&lt;/code&gt; (&lt;a href="https://github.com/tschaub/gh-pages/blob/48f62a750216e72c5e89058bb61dffdb8450949d/readme.md#L373-L384" rel="noopener noreferrer"&gt;readme.md:373-384&lt;/a&gt;), and &lt;code&gt;nyc&lt;/code&gt; shows a whole example &lt;code&gt;scripts&lt;/code&gt; block (&lt;a href="https://github.com/istanbuljs/nyc/blob/908620475199fa7b9ea0ea8b21d6d8ad6921e3ae/README.md#L337-L345" rel="noopener noreferrer"&gt;README.md:337-345&lt;/a&gt;). CloneProof read those as instructions for the repository itself and failed the build. &lt;strong&gt;Fixed in v0.2.1:&lt;/strong&gt; scripts defined in a README example now belong to the reader's project.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Environment variables the user never sets (14 warnings).&lt;/strong&gt; CloneProof reported &lt;code&gt;GIT_DIR&lt;/code&gt; (set by Git during hooks), &lt;code&gt;HOMEPATH&lt;/code&gt; and &lt;code&gt;PROGRAMFILES&lt;/code&gt; (set by Windows), &lt;code&gt;COMP_CWORD&lt;/code&gt; (set by the shell), CI-service variables, and keys a tool sets for itself, such as &lt;code&gt;WEBPACK_SERVE&lt;/code&gt; and &lt;code&gt;ROLLUP_WATCH&lt;/code&gt;, as undocumented configuration. Two were plain bugs: &lt;code&gt;process.env.Wimp$ScrapDir&lt;/code&gt; in shelljs (&lt;a href="https://github.com/shelljs/shelljs/blob/060e8ac15aa32b1311db15c5e12cd64016637932/src/tempdir.js#L48" rel="noopener noreferrer"&gt;src/tempdir.js:48&lt;/a&gt;) was parsed as a key named &lt;code&gt;Wimp&lt;/code&gt;, and PostCSS was flagged for a variable mentioned only in a doc comment (&lt;a href="https://github.com/postcss/postcss/blob/2455ac8212fe66bc3248aa01186a52c27c87da5a/lib/css-syntax-error.d.ts#L226" rel="noopener noreferrer"&gt;lib/css-syntax-error.d.ts:226&lt;/a&gt;). &lt;strong&gt;Fixed in v0.2.4&lt;/strong&gt;, except three that static reading cannot see: Vue's build-time feature flags, CI variables that coveralls detects, and AVA's child-process marker.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"No tests" when the tests are not JavaScript (2 warnings).&lt;/strong&gt; The shell and Dart suites above. &lt;strong&gt;Fixed in v0.2.4.&lt;/strong&gt; Only test files count; a husky or sass dependency, Git hooks, and fixture folders never do. None of the 10 repositories without tests in our earlier random sample started failing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A Node version mismatch that is not one (1 warning).&lt;/strong&gt; &lt;code&gt;semantic-release&lt;/code&gt; declares &lt;code&gt;engines.node&lt;/code&gt; as &lt;code&gt;^22.14.0 || &amp;gt;= 24.10.0&lt;/code&gt;. CloneProof could not parse &lt;code&gt;&amp;gt;= 24.10.0&lt;/code&gt; because of the space after the operator, so it compared &lt;code&gt;.nvmrc&lt;/code&gt;'s &lt;code&gt;24&lt;/code&gt; with &lt;code&gt;^22.14.0&lt;/code&gt; alone. &lt;strong&gt;Fixed in v0.2.4.&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;After each fix we re-ran this sample and our earlier random sample of 50 repositories. The README fix (v0.2.1) removed exactly the 9 false blocking findings; the rest (v0.2.4) removed 14 of the 17 false warnings. On the random sample, every blocking finding is real and all 40 warnings are correct.&lt;/p&gt;

&lt;h2&gt;
  
  
  Limitations
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Static only.&lt;/strong&gt; Nothing was installed or run, so this says nothing about whether tests pass. CloneProof's optional Docker &lt;code&gt;verify&lt;/code&gt; mode checks that; it was not used here.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Not a typical sample.&lt;/strong&gt; These are the most-depended-on, most-maintained repositories in the ecosystem.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Repositories move.&lt;/strong&gt; Results are pinned to commits from 2026-10-30; four repositories moved before the final rerun, with unchanged findings.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One AI judge, not blind, who also wrote the fixes.&lt;/strong&gt; The rules did not change and every reason is public, so treat the "after" numbers with the same skepticism as the "before" ones, and re-judge anything you disagree with.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;7 repositories were not checked&lt;/strong&gt; because of CloneProof's clone safety limits.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Check any public repository without installing anything:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx cloneproof-check check https://github.com/OWNER/REPO
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The npm package is &lt;a href="https://www.npmjs.com/package/cloneproof-check" rel="noopener noreferrer"&gt;&lt;code&gt;cloneproof-check&lt;/code&gt;&lt;/a&gt;, published from CI with provenance; the command it installs is &lt;code&gt;cloneproof&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Or add it to CI with the GitHub Action (&lt;a href="https://github.com/marketplace/actions/cloneproof-check" rel="noopener noreferrer"&gt;CloneProof Check on the Marketplace&lt;/a&gt;):&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="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;psuvraneel-cyber/Clone-Proof@v0.2.4&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How to reproduce
&lt;/h2&gt;

&lt;p&gt;Everything is in the repository:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;docs/field-test/run6-ranking.json&lt;/code&gt;: the ranking snapshot;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;docs/field-test/run6-sample.json&lt;/code&gt;: the 100 repositories, their commits, and the expected findings;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;docs/field-test/run6-results.json&lt;/code&gt;: every finding;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;docs/field-test/run6-judgments.json&lt;/code&gt;: every judgment, its reason, and the interpretations used;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;docs/field-test/run6-fix-results.json&lt;/code&gt;, &lt;code&gt;run6-fixes-results.json&lt;/code&gt;, and &lt;code&gt;run6-fixes-judgments.json&lt;/code&gt;: the reruns after the fixes, and the re-judged findings.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The full write-up, with intervals and per-code tables, is in &lt;a href="https://github.com/psuvraneel-cyber/Clone-Proof/blob/main/docs/FIELD_TEST.md#run-6-results" rel="noopener noreferrer"&gt;docs/FIELD_TEST.md&lt;/a&gt;. To rebuild the sample and rerun the checks:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;node scripts/fieldtest.js ranking &lt;span class="nt"&gt;--pages&lt;/span&gt; 5 &lt;span class="nt"&gt;--out&lt;/span&gt; ranking.json
node scripts/fieldtest.js sample-list &lt;span class="nt"&gt;--ranking&lt;/span&gt; ranking.json &lt;span class="nt"&gt;--count&lt;/span&gt; 100 &lt;span class="nt"&gt;--out&lt;/span&gt; sample.json
node scripts/fieldtest.js run &lt;span class="nt"&gt;--sample&lt;/span&gt; docs/field-test/run6-sample.json &lt;span class="nt"&gt;--out&lt;/span&gt; results.json
node scripts/fieldtest.js summary &lt;span class="nt"&gt;--results&lt;/span&gt; docs/field-test/run6-results.json &lt;span class="nt"&gt;--judgments&lt;/span&gt; docs/field-test/run6-judgments.json &lt;span class="nt"&gt;--sample&lt;/span&gt; docs/field-test/run6-sample.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A fresh &lt;code&gt;ranking&lt;/code&gt; run gives a slightly different sample; the committed files reproduce the published tables exactly.&lt;/p&gt;

&lt;p&gt;Thanks to the maintainers of all 100 projects. Nothing here is a criticism of their work. If CloneProof flagged your project and you think it is wrong, you are probably right; please &lt;a href="https://github.com/psuvraneel-cyber/Clone-Proof/issues" rel="noopener noreferrer"&gt;open an issue&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>node</category>
      <category>javascript</category>
      <category>opensource</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
