Skip to content

[finding] 95 better-auth version stamps across 56 files still name 1.7.1 after the 1.7.2 family move — the fourth hand sweep of the same shape #13940

Description

@claude

Filed while moving the better-auth family 1.7.1 to 1.7.2 for #13715. Out of that
card's scope, recorded rather than fixed there. Not assigned.

What

95 version-stamped attestations across 56 files still name better-auth 1.7.1
(or @better-auth/scim@1.7.1, @better-auth/oauth-provider@1.7.1) as the
version they were measured against. Once #13715 lands, the installed family is
1.7.2 and none of those 95 names a version that is installed any more.

Measured on the branch, excluding CHANGELOGs and the override file itself:

$ grep -rn '1\.7\.1' --include='*.ts' --include='*.mjs' --include='*.mts' . \
    --exclude-dir=node_modules --exclude-dir=dist | grep -i better-auth | grep -v CHANGELOG | wc -l
95

Spread over five packages and three gate scripts, so it is not one carrier:

location stamps
packages/plugins/plugin-auth/src 55
packages/platform-objects/src 14
packages/cli (src + test) 12
packages/runtime/src/dispatcher-error-vocabulary.ts 4
packages/create-objectstack/src 2
scripts/check-prerelease-pin-watch.mjs, check-route-envelope.mjs, check-cli-test-child-env.mjs 4

Typical shapes: "Bound from better-auth 1.7.1's own MySQL schema", "better-auth
1.7.1's BASE_ERROR_CODES member"
, "vendor: better-auth (1.7.1) — the body is
byte-identical to that release's own handler return"
, "better-auth 1.7.1 reads
TEST directly"
.

Why it is a finding and not cosmetics

Each of these is an attestation: it claims a behaviour was measured against a
named version, and that provenance is the only thing standing behind bounds,
error vocabularies and byte-identical envelope claims that nothing else derives.
When the named version is not the installed one, the claim is no longer
verifiable by reading it — the reader cannot tell a still-true stamp from one
that upstream changed under it.

This has now recurred four times

#10073 (29 stamps naming 1.7.0-rc.2 / 1.6.20 after the ^1.7.1 bump),
#10188 (three more outside that card's two-string scope), and #11362 (two more,
in platform-objects rather than plugin-auth) were each fixed by hand, and each
time the next card found more. #13715's 1.7.2 move is the fourth round, and the
population has grown from 29 to 95. #10188's own title records the shape of the
mechanical answer that was contemplated and not built: a better-auth@-only
comment-vs-pin gate would still miss stamps written as prose.

So the interesting question is probably not "re-stamp these 95" but "why does a
hand sweep keep being the remedy". A gate that holds every version stamp equal
to the resolved pin — matching prose and specifier spellings, across all five
packages, not just plugin-auth — would make the next family bump mechanical.

What was checked, so this is not read as broader than it is

The two stamped claims that #13715 actually depends on were re-measured against
1.7.2 and are unchanged: @better-auth/scim@1.7.2 still peers better-call at
an exact 1.4.0 and @better-auth/utils at an exact 0.4.2, and
better-auth@1.7.2 still carries the stale optional better-sqlite3@^12.0.0
peer. The scaffold peerDependencyRules pins in packages/cli/test/init.test.ts
therefore stay green. The other 90-odd stamps were not re-measured — that
is the work this records, and the reason a patch bump does not make them false
so much as unverified.

Severity

Low, and deliberately filed rather than triaged from here: severity judged at
filing time has been unreliable in both directions. No behaviour is wrong today.

Generated by Claude Code


Generated by Claude Code

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions