Repository navigation
chore: version packages (rc) - #872
Merged
Merged
Conversation
github-actions
Bot
force-pushed
the
changeset-release/main
branch
2 times, most recently
from
November 11, 2026 22:52
fb04f6f to
92d8aac
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
November 11, 2026 23:15
92d8aac to
5dabb79
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.
mainis currently in pre mode so this branch has prereleases rather than normal releases. If you want to exit prereleases, runchangeset pre exitonmain.Releases
every-plugin@3.0.0-rc.18
Patch Changes
reqHeadersforwarding instead of generic auth-required prose, and the plugin's declared context marksreqHeadersas required so typed registries surface the omission at compile time (auth: in-process client construction is a silent footgun — credential-less clients fail far away with a misleading error #860 stage 1, auth: name the credential-less in-process client failure + fix the client-derivation docs drift (stage 1 of #860) #882).everything-dev@2.0.0-rc.44
Patch Changes
07765ba: auth: admin member management no longer depends on the admin's own organization membership (Auth plugin: admin organization routes (list/search all orgs, full org detail, org/member/team management) #876 follow-up)
adminAddMemberforwarded the caller's headers into Better Auth'saddMember, which checks thecaller's organization permissions — so a platform admin who was not a member of the target
organization (the whole point of an admin route) got FORBIDDEN. The mutation is now a direct write,
like every other mutation in
AdminOrganizationsService: it enforces the organization membershiplimit through the plugin's membership policy and refuses duplicate memberships. The integration
suite now covers adding a member to an organization the admin does not belong to — the case the
previous tests masked by creating every fixture organization owned by the admin.
Two smaller consistency fixes ride along:
adminUpdateMemberRolerefuses to demote an organization's only owner to a non-owner role,matching
adminRemoveMember's existing last-owner guard.getOrganizationForAdminguards with the standardrequireAdminmiddleware instead of ahand-rolled role check, matching the admin routes' pattern.
crossSubDomainCookies(Auth plugin: expose cross-subdomain cookie configuration (cookie domain) in the auth config schema #668) also gained config-time warnings for the two ways a shared cookiedomain fails silently at the browser: a
domainthat does not cover the app's ownbaseUrlhost(browsers drop the cookie outright, breaking sign-in) and localhost/loopback base URLs (browsers
refuse
Domainattributes there). The auth plugin README now documents the full multi-app recipe —shared cookie domain + shared
BETTER_AUTH_SECRET+ sharedpostgres://AUTH_DATABASE_URL—mirroring the ADR 0027 decomposition.
a19b559: Auth plugin surfaces cross-subdomain cookie configuration (Auth plugin: expose cross-subdomain cookie configuration (cookie domain) in the auth config schema #668). New authored variable under
auth.variables:crossSubDomainCookies: { enabled, domain }, mapped to Better Auth'sadvanced.crossSubDomainCookies. When enabled, session cookies carryDomain=<domain>so a multi-app family on sibling subdomains (app.example.com,activity.example.com) shares one session — by config alone, no local auth code.domainmust be a dot-prefixed registrable domain (.example.com) when enabled; without it Better Auth falls back to the base URL's root domain. Absent or disabled config leaves cookies host-scoped (behavior unchanged). Sharing a cookie domain requires every app on it to run the sameBETTER_AUTH_SECRET— the sealed cookie is decrypted with it — plus siblingtrustedOriginsentries.ed70afd: auth: stop creating duplicate personal organizations when metadata or slug drifts off the canonical form (Auth plugin: duplicate personal organizations get created when metadata/slug drifts off the canonical form #877)
findPersonalOrganizationmatched only the byte-exact pairslug = userId AND metadata = '{"isPersonal":true}',while the lenient
isPersonalOrganization()predicate accepted either signal. An organization whose metadatawas non-canonical JSON (pretty-printed, extra keys) or whose slug had been renamed was invisible to the finder,
so the
user.createhook silently created a second personal organization on the next signup/session — observedin production as users with multiple personal orgs plus dangling
user.last_active_organization_id/session.active_organization_idpointers.The finder now resolves the personal organization with the lenient signals:
slug = userId(unchanged), or"isPersonal": trueflag and the user holds a membership in that organization.Matches are deterministic (
created_at asc, id asc, limit 1), so historical duplicates converge on the oldest rowinstead of generating new ones.
ensurePersonalOrganizationstill writes the canonical metadata string on create;nothing about creation changes.
Two deliberate hardenings beyond the literal issue proposal:
metadata::jsonb->>'isPersonal'. The column istextand better-auth stores raw strings when callers pass non-object metadata, so a bare cast would throwon malformed rows — inside the
user.createhook, that breaks every signup on the deployment.metadata isPersonal OR slugpredicate would let any user's lookup match any other user's personal-flagged organization.
The orphan sweep keeps its strict canonical-only deletion query on purpose: widening it to the lenient signals
would delete non-canonical organizations that may hold user data.
9da8ed9: Boot the pinned host, not the parent's newest bytes (Drift shouldn't crash the app #874): the orchestrator
resolves the host slot's
digestand registers the manifest from the pin'simmutable coordinates — a root publish can no longer move the host bytes a
pinned child boots.
mf checkprobes the same pin. When a pinned host'sshared singletons still cannot resolve in the image, the boot fails with the
skew named — image version, pin, and
bos upgrade && bos deploy— instead ofa bare package error.
350beba: Revert the regression harness's file-backed pglite substitution: the dev stack
opens the auth database from two processes (the auth service and the auth-plugin
instance composed into the api/host), and a per-secret shared data dir turned
that topology into ADR 0044's silent-corruption case — the suite died on
system-catalog reads past EOF (
pg_attribute, "unexpected data beyond EOF").The harness is restored to in-memory pglite, whose per-process databases made
the dual-open harmless. App fixtures for regression specs still seed over HTTP;
a file-backed mode needs a single-writer story first (seed through the running
stack, not pre-spawn against shared files).
Updated dependencies [59cfe70]