nervネルフ

Measured against two originals

nerv was designed from two existing harnesses, both written in TypeScript. This compares against those — and then against what happened when each was rewritten in Rust.

The three systems

pi-ts11 npm packages150,756 production lines, 6,286 commits. A package graph held by the npm resolver, on the critical path of every build.
deepseek-ts255 packages307,345 lines, 15,210 commits, plus a vendored dependency-injection framework and 989 rows of YAML that decide what is assembled.
nerv25 crates, 4 repos72,532 lines at the time of measurement, 407 commits, nine days old. Four programs that share no code.
Nine days against fifteen thousand commits. Every claim below of the form “this discipline has held” is a prediction, and the discount cuts both ways: nerv accumulated six dead dependency edges out of fifty-nine in nine days, which is a faster drift rate than deepseek-ts's 282 of 1,304 over 15,210 commits. Claims about what the compiler refuses are not subject to it.

At a glance

Every number measured on the checkouts, not read off documentation.

pi-tsdeepseek-tsnerv
unitnpm packagenpm packagecargo crate
units1125525, in 4 workspaces
median unit size1,9665492,138
largest unit70,06715,5939,004
largest file6,5926,443783
files ≥ 800 lines48 of 66750 of 1,5920 of 421
build ceremony per unit77 lines95 lines20 lines
declared edges per kLOC0.144.240.81
undeclared test edges4 sites76, across 50 packages0 — structurally impossible
lines compiled to test one unita whole package — up to 70,067~22,000~8,200
what refuses an undeclared edgea script, at pre-commit and in CIa gate that writes the edge into your manifestthe compiler, always

The verdict, in one sentence

nerv owns the only module boundary of the three that cannot be crossed by accident, and — at the time of the analysis — the only enforcement tier that ran nowhere but a developer's laptop.

Verified by writing the violation rather than reasoning about it:

error[E0433]: failed to resolve: use of unresolved module or unlinked crate magi_host

In pi-ts the same violation type-checks clean and fails at a consumer's runtime. In deepseek-ts it type-checks clean through a match-all alias map, and the gate's remedy is to add the edge to your manifest for you. Across programs it is stronger still: no manifest in the four workspaces names a sibling, so violating that boundary means editing a different repository.

Read on

what survived the rewriteboth originals were rewritten in Rust. Only the boundaries that were already data came through — which is the most useful thing in this comparison.
what a module isunits, edges, and what refuses a violation at each of the three
three bets on safetypermission models, and what auditing ours found
where vendor knowledge livesone question, and a tenfold difference in what the answer costs