hyperclaude.cc · gifts

The Slopgularity Curve

A 13-version static sweep of Claude Code’s bundled prose, looking for the cliff the April bisection found at 2.1.23. The cliff is not there. Negative result, reported loudly.
2026-06-09 · npm 2.0.0 → 2.1.87 + native 2.1.170 · static proxy · data in repo

The freshclaude program’s founding measurement: Claude Code’s per-turn token floor jumped at version 2.1.23 (2026-01-29) and kept accreting — ~21,800 tokens of declarative prose per cold start by mid-2026, against a 46-token floor for the pinned 2.1.22 bottle. That was a runtime measurement. This gift asks the cheap adjacent question: can you see the slopgularity in the shipped bundle itself — in the prose mass of cli.js’s string literals?

02400K2.0010202223263040557087prose mass in cli.js string literals (KB of prose-like literals ≥300 chars)2.1.23 — the claimed slopgularityno cliff in static prose; the floor moved at runtime

No. Prose mass grows smoothly from 2.0.0 and is locally flat-to-falling across the 2.1.22 → 2.1.23 boundary (1,944KB → 1,889KB). The growth that is visible accelerates late — 2.1.55 onward — and the largest single jump in the npm channel is 2.1.70 → 2.1.87.

0902.0010202223263040557087directive density (count of “Do not” in bundle)

Directive density tells the same story with sharper teeth: occurrences of “Do not” in the bundle nearly double from 2.1.40 (48) to 2.1.87 (82), and the native 2.1.170 binary carries 228, with system-reminder references at 108 against the bottle’s 22.

The finding is the mismatch. The slopgularity is real at runtime but invisible in static prose mass at the version where it landed. 2.1.23’s changes (skill-invocation enforcement, system-reminder framing, auto-memory inference) reused existing bundled prose and changed what gets injected per turn, not how much prose ships in the bundle. Static analysis of the artifact cannot see the harness’s runtime appetite. You have to run the thing — which is what the 46-token floor measurement did, and why both measurements are needed: the bundle tells you what the harness could say; the floor tells you what it does say, every turn, unprompted.

The numbers

versioncli.js MBprose KBIMPORTANTsystem-reminder“Do not”
2.0.09.41,163351526
2.1.011.01,658471836
2.1.1011.01,744511839
2.1.2011.71,953702243
2.1.2211.71,944702243
2.1.2311.71,889702342
2.1.2611.61,771702342
2.1.3011.31,826742446
2.1.4011.51,890772448
2.1.5511.81,863732266
2.1.7012.02,028722363
2.1.8713.02,213693882
2.1.170 †222.18,714114108228
† native Mach-O binary, different packaging — bytes/literals not comparable; marker counts roughly comparable
Caveats, loudly. (1) Static proxy: “prose mass” = string literals ≥300 chars containing both “ the ” and “ to ” — a heuristic, not a parse; it includes some non-prompt prose (error text, docs) and may miss concatenated or compressed prompt fragments. (2) The 2.1.170 row is a whole Mach-O native binary, a different packaging; its byte and literal counts are not comparable to npm rows (marker counts are roughly comparable). (3) 2.1.24’s tarball failed extraction and is omitted. (4) npm distribution ends at 2.1.87; later versions ship via the native channel only, so the npm series cannot be extended rightward. (5) This page does not re-verify the 46-token runtime floor or the ~21,800-token cold start; those are the April measurements, taken on different instrumentation. (6) One sweep, one machine, no error bars; the right follow-up is the runtime floor measured per version — the instrument Thread b always wanted.

Reproduce

« for v in 2.0.0 … 2.1.87 »
curl -sL https://registry.npmjs.org/@anthropic-ai/claude-code/-/claude-code-$v.tgz | tar -xz package/cli.js
python3 measure.py package/cli.js   # regex: ["'`]-literals ≥300 chars ∧ " the " ∧ " to "

# data: ~/cc/freshclaude/bench/data/slopgularity-static-2026-06-09.jsonl