Uh oh!
There was an error while loading. Please reload this page.
docs(platform-objects): re-measure the two better-auth 1.6.11 stamps outside #10188's plugin-auth carrier - #11468
Conversation
…outside #10188's plugin-auth carrier Both sites stamp the same upstream-gap claim as #10188's plugin-auth site 1 (the stock /admin/oauth2/update-client endpoint's Zod body schema does not accept `disabled`). Nothing was broken: both claims are still TRUE, only the stamps (and, for site 1, the anchor) were stale. Re-measured 2026-08-23 against installed @better-auth/oauth-provider@1.7.1, independently of #10188/#11446's own re-measurement. Fixes#11362 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01APWX2AwT3a4xDcjPCe8bk4
📓 Docs Drift CheckThis PR changes 1 package(s): 1 hand-written doc(s) NAME something this change touched and may need an implementation-accuracy re-verification:
What this run could not seeCoarse fallback — 2 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): Which tree this was computed onThis run read A worktree cut from an older # while this PR is open — GitHub drops the merge commit once it closes
git fetch origin 6af5ecc58b02b0f4a3c74ec892ef3fbd67a8bf3a && git checkout 6af5ecc58b02b0f4a3c74ec892ef3fbd67a8bf3a
# afterwards, rebuild it from the two parents, which stay fetchable
git fetch origin 8542bd457765444626023db6ffeb6f8105f7f83e 05bfc3eb34cb9e208d3f886e0ee17910a9c30154 && git checkout -B drift-repro 8542bd457765444626023db6ffeb6f8105f7f83e && git merge --no-ff 05bfc3eb34cb9e208d3f886e0ee17910a9c30154
node scripts/docs-audit/affected-docs.mjs --json 8542bd457765444626023db6ffeb6f8105f7f83e
|
Uh oh!
There was an error while loading. Please reload this page.
Fixes#11362
Two
better-auth 1.6.11stamps inplatform-objectscarried the same upstream-gap claimas #10188's plugin-auth site 1 (the stock
/admin/oauth2/update-clientendpoint's Zod bodyschema does not accept
disabled), but sat outside that card's carrier and were recordedseparately per its own triage note. Nothing was broken: both claims are still true at
the version installed now; only the stamps and (for site 1) the anchor were stale.
What each site now says, and how it was measured
Re-measured in this worktree, against
node_modulesas installed on the current base,independently of the card body's own re-measurement — 2026-08-23, against installed
@better-auth/oauth-provider@1.7.1(confirmed by readingpackage.jsonat the resolvedpnpm store path, not carried forward from #10188 or #11446):
adminUpdateOAuthClient(dist/authorize-Crqw4_bR.mjs:2860) declares its body schema at:2862-2889, anddisabledoccurs zero times in that block — while matching 35 otherlines of the same file (
grep -c; 38 whole-word, 42 substring), so the search reaches thetext. This agrees with #11446's independent re-measurement of the same file/version, and
with the card's own 2026-08-23 reading — but was read fresh here, not inherited.
1.
sys-oauth-application.object.ts:49(comment onSysOauthApplication'sactions)Load-bearing, same as #11446's site 1: this comment already carried its own
retirement trigger ("When upstream ships
disabledsupport, retarget the enable/disableactions and delete the bridge route") — and that retarget/delete is this file's own
disable_oauth_application/enable_oauth_applicationactions, a few lines below thecomment. If the claim had gone false, this PR would be retargeting those two actions to
the stock endpoint and deleting the plugin-auth bridge route, not re-stamping a comment.
Verified past the one block, for the same reason #11446 did:
/oauth2/update-clienthandler (updateClientEndpoint,:2379-2444) destructures itsupdatepayload fromctx.body.update, which is boundby the same Zod schema shape (no
disabledkey) — so it can't accept the flag either;resourceBodySchema(:3361), the onedisabled: z.boolean().optional()elsewhere inthe file, belongs to OAuth resources — a different, unrelated model — confirmed a
false friend;
disabledfrom the stored record(
disabled: existingClient.disabled,:1972), never from client input.Updated the comment to record the 2026-08-23 measurement, name
grep -cas theinstrument, and correct the anchor to
:2862-2889(not:2896, which is the closing});of the wholecreateAuthEndpoint(...)call — includesmetadataand the handler,not the schema).
2.
platform-objects.test.ts:185(comment inside a test)No assertion in this test pins the
better-auth 1.6.11string — it explains why thetest expects
disable?.target/enable?.targetto be the bridge route rather than thestock endpoint. Not independently load-bearing: if the claim ever goes false, the
decision is made at site 1 (retarget the actions), and that change is what would force
this test's assertions — and this comment — to move together with it. Updated to record
the 2026-08-23 re-measurement and the anchor, dropping the version-number framing that
made it a fourth stamp.
Not touched, and why
packages/plugins/plugin-auth— its three sites were already swept and merged indocs(plugin-auth): re-measure the three version-stamped vendor attestations outside #10073's two-string scope #11446; re-touching it here would be exactly the widening the triage note forbids.
better-auth@-only comment-vs-pin gate would still miss two of them #10188 sketches —that is its own card, not built here.
Changeset:
skip-changeset, judgement statedplatform-objectsis a published package, so this is a judgement call, not an automaticskip — same call #11446 made for
plugin-auth. Both sites are comment text only:sys-oauth-application.object.ts:49— a//comment block inside theactionsconfiguration passed to
ObjectSchema.create(...), not a JSDoc attached to an exportedtype or symbol.
tsup'sdtsgeneration reads type declarations, not comments sittinginside a runtime object-literal expression, so nothing here reaches
dist/*.d.ts.platform-objects.test.ts:185— a test file, not published at all.No exported symbol's documentation changes, no behaviour changes, no accept/reject
behaviour, no public surface moves.
skip-changesetapplied on that basis (label addedvia the additive endpoint per AGENTS.md and read back — see report).
Verification
Gate union derived with
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstackand no path arguments (2 paths vs merge base
8542bd457), on the final commit05bfc3eb34, clean tree, exit codes captured before any pipe.Path-matched and convention-triggered families, all green:
check:published-filescheck:slot-lookupcheck:test-source-aliascheck:type-source-resolutioncheck-ci-filter-parity.mjscheck-plugin-teardown-shape.mjsdocs-audit/check-affected-docs.mjscheck:query-options-erasurecheck:type-check-coverage(structural)check:engine-double-contractcheck:cross-package-test-inputscheck:where-matcherPackage verification (foreground, filtered):
pnpm --filter @objectstack/platform-objects test -- --maxWorkers=2— 27 test files,432 tests passed.
pnpm --filter @objectstack/platform-objects typecheck— exit 0, clean.Two gates are NOT MEASURED, reported as such rather than folded into the pass count:
check:type-check-debt --re-measurerefused:PREREQUISITE NOT MET — 50 workspace dependencies have no built type entry point on disk. It needs the full workspace closurebuilt exactly as
lint.ymldoes (turbo run build --filter='./packages/*' --filter='./packages/*/*') — a shared-lock verify contention lane ([finding] 共享 verify 锁在多席位并发下已成吞吐瓶颈,并出现两种非吞吐后果:容器上限杀掉持锁 gate、以及 agent 在排队中结束回合 —— 一个班次内三次实测 #11363) queued 5+ deepbehind this attempt; abandoned rather than parking the session on it (its structural
half,
check:type-check-coveragewithout--re-measure, is measured above and green).check:i18nrefused:PREREQUISITE NOT MET — the workspace CLI is not built(
packages/cli/dist/commands/i18n/extract.jsmissing). Same shared-lock contention.Repo-wide
pnpm lint— declared narrowing, not a gap, for the same contention reason(#11363 is live; a full-farm
pnpm lintand the closure build above were both queued 5-6deep behind other agents' work in the same window). In its place, the same three facts
#11446 used to make a narrowed run a measurement rather than an omission:
pnpm lintiseslint . --no-inline-configover the single root
eslint.config.mjs; both changed files return real result objects.--format json: 2 files linted, 0 errors, 0 warnings.eslint.config.mjsnever enablestype-aware linting for any file (no
parserOptions.project, no typed@typescript-eslintrules), so a comment-only edit inside two files cannot move anyverdict on a file it does not touch.
CI runs the full farm regardless and its conclusion is authoritative over every narrowing
above.
Scope
Comment text only, in exactly the two files this card names. No assertion, pin, schema,
route, or gate input is touched.
Generated by Claude Code