You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The override contract remains unchanged, but final acceptance must run against the corrected companion candidate from better-auth-ui#22 on the retained Better Auth 1.6.16 database cohort. @btst/db@2.2.3 and the 2.2.3 adapters remain unchanged.
This was generated by AI during triage.
Current status — 2026-08-31
The companion implementation dependency is complete: better-auth-ui#20 merged through PR #21, and @btst/better-auth-ui@2.0.0-rc.3 is published. Core #202 is also complete.
This issue remains open only for its cross-repository acceptance scope:
verify auth-plus-account and optional organization behavior across the maintained Next.js, React Router, and TanStack targets; and
link the generated/runtime evidence here before closing.
The bridge/API migration is complete, but stable-v3 acceptance must use the corrected dependency-cohort candidate from better-auth-ui#22 rather than the published RC3 package. This remains a stable-v3 acceptance gate and does not reopen the completed bridge design.
This type-checks because AccountPluginOverrides extends Partial<AuthPluginOverrides>. The released RC1 bridge, however, constructs avatar configuration only from authOverrides.avatar. It never reads accountOverrides.avatar, so the documented configuration compiles and is silently ignored. Moving the same block to auth.avatar makes it work; the retained Better Stack Web RC2 audit verified the real Vercel Blob/session flow through that undocumented location.
Avatar exposed a structural contract failure rather than a one-field typo. Account and organization publicly inherit auth options that the bridge does not read at those locations. TypeScript therefore accepts auth clients, credentials, callbacks, feature flags, page props, and route bases that may be ignored or interpreted elsewhere. Independently configurable route base paths can also make Better Auth UI links disagree with BTST's registered routes.
RC3 must make accepted configuration and consumed configuration identical across the external companion, core documentation/scaffolding, generated fixtures, and public declarations.
A public field that type-checks is read from that exact location at runtime.
Omitted override blocks are valid; empty objects are not plugin-activation signals.
Provider keys and values are inferred from the registered client stack rather than a manually assembled override map.
Cross-repository acceptance coverage
Package-level positive type fixtures cover intended auth, account, and organization overrides.
Negative type fixtures cover auth.avatar, account.authClient, organization.authClient, misplaced auth credentials/hooks/callbacks/feature flags/page props, cross-plugin page keys, and every removed basePath placement.
Runtime bridge tests prove account.avatar reaches the upstream avatar context and the configured upload/delete callbacks.
Runtime tests prove every accepted override is consumed from the location exposed by its public type.
Route tests prove a site mount such as /pages consistently yields /pages/auth, /pages/account, and /pages/organization for matching, links, redirects, metadata, and sitemap output.
Auth-plus-account works without organization; organization remains an explicit opt-in.
Core docs, CLI examples, generated code, and Better Auth UI docs use the same exact locations and contain no stale accepted-but-ignored examples.
Packed consumer fixtures compile the public declarations rather than relying on workspace-only source types.
Acceptance criteria
The original RC2 example remains captured as a regression fixture or equivalent consumer test.
account.avatar type-checks and invokes upstream upload/delete behavior.
auth.avatar fails to type-check with no compatibility alias or precedence rule.
Account and organization no longer inherit auth overrides publicly.
authClient is accepted only at the auth seam and consumed once.
Misplaced auth-only settings and cross-plugin page props fail compile-time fixtures.
Every field accepted by a public override type is consumed from the same object at runtime.
Independent route base-path overrides are absent; resolved site runtime is the sole route-base source.
Omitted override blocks work and inferred provider types reject unregistered plugin keys.
Companion package tests, public declaration fixtures, core documentation, and generated examples all encode the same contract.
Next.js, React Router, and TanStack clean consumer fixtures compile/build the minimal auth-plus-account configuration from the packed corrected companion candidate on the retained Better Auth 1.6.16 cohort.
The issue is not closed solely because the external implementation merged; cross-repository docs/generated acceptance evidence is linked here.
Out of scope
Recreating Better Auth native permissions through BTST authorization.
Stable-v3 cohort note — 2026-08-31
The override contract remains unchanged, but final acceptance must run against the corrected companion candidate from better-auth-ui#22 on the retained Better Auth 1.6.16 database cohort.
@btst/db@2.2.3and the2.2.3adapters remain unchanged.Current status — 2026-08-31
The companion implementation dependency is complete: better-auth-ui#20 merged through PR #21, and
@btst/better-auth-ui@2.0.0-rc.3is published. Core #202 is also complete.This issue remains open only for its cross-repository acceptance scope:
The bridge/API migration is complete, but stable-v3 acceptance must use the corrected dependency-cohort candidate from better-auth-ui#22 rather than the published RC3 package. This remains a stable-v3 acceptance gate and does not reopen the completed bridge design.
Parent
Original RC2 reproduction — preserve this regression
Environment:
@btst/stack@3.0.0-rc.2@btst/better-auth-ui@2.0.0-rc.1@btst/yar@1.3.2Following the RC2 Better Auth UI guide, both the primary provider example and Avatar Upload recipe put avatar configuration under account:
This type-checks because
AccountPluginOverrides extends Partial<AuthPluginOverrides>. The released RC1 bridge, however, constructs avatar configuration only fromauthOverrides.avatar. It never readsaccountOverrides.avatar, so the documented configuration compiles and is silently ignored. Moving the same block toauth.avatarmakes it work; the retained Better Stack Web RC2 audit verified the real Vercel Blob/session flow through that undocumented location.Evidence: RC2 report section.
Broader defect
Avatar exposed a structural contract failure rather than a one-field typo. Account and organization publicly inherit auth options that the bridge does not read at those locations. TypeScript therefore accepts auth clients, credentials, callbacks, feature flags, page props, and route bases that may be ignored or interpreted elsewhere. Independently configurable route base paths can also make Better Auth UI links disagree with BTST's registered routes.
RC3 must make accepted configuration and consumed configuration identical across the external companion, core documentation/scaffolding, generated fixtures, and public declarations.
Final contract to validate
The implementation belongs to
better-stack-ai/better-auth-ui#20. This issue owns cross-repository acceptance of that contract after #202.The decision-rich shape is:
Exact names may follow the final #202 API, but these semantics are fixed:
authClientis configured once under auth.account.avataris the only wrapper-facing avatar location;auth.avataris rejected.basePath./auth,/account, and/organizationare relative plugin routes derived from [v3 RC3 DX] Centralize client runtime configuration and normalize all plugin interfaces #202's resolved site runtime.Cross-repository acceptance coverage
auth.avatar,account.authClient,organization.authClient, misplaced auth credentials/hooks/callbacks/feature flags/page props, cross-plugin page keys, and every removedbasePathplacement.account.avatarreaches the upstream avatar context and the configured upload/delete callbacks./pagesconsistently yields/pages/auth,/pages/account, and/pages/organizationfor matching, links, redirects, metadata, and sitemap output.Acceptance criteria
account.avatartype-checks and invokes upstream upload/delete behavior.auth.avatarfails to type-check with no compatibility alias or precedence rule.authClientis accepted only at the auth seam and consumed once.Out of scope
Blocked by
better-stack-ai/better-auth-ui#20— completed companion implementation and declarations.better-stack-ai/better-auth-ui#22— corrected dependency-cohort candidate used by final packed acceptance.Related