Repository navigation
[Epic] Universal org invite link — shareable self-serve join (V1) #11586
Description
Activity
- added sub-issues
on Aug 24, 2026 PAUSED by the maintainer — the audience assumption behind this epic was corrected.
Maintainer, 2026-08-24 chat, quoted verbatim: 「协作者不会多,我在云端手工加入都可以,主要是 业务用户怎么方便的注册进来,你先和我讨论方案。」
This epic builds the cloud-organization join link — membership in the control plane, i.e. the COLLABORATOR layer (env list, development, billing visibility). The maintainer states that layer is low-volume and manual invitation is acceptable, so the epic's justification is withdrawn for now. The real need is the business-user layer: convenient self-registration into a tenant ENVIRONMENT (e.g.
steedos.objectos.ai), which is a different runtime, different tables, different auth surface — the code here does not transfer.Dispatch stopped mid-run; branch
claude/issue-11587-org-join-link-v1exists with partial work and is left in place. No PR was opened.Restart-when: the business-user onboarding design (under discussion with the maintainer 2026-08-24) concludes and the maintainer rules that a cloud-org join link is still wanted.
Live readings that informed the correction (measured on
steedos.objectos.ai/api/v1/auth/config, 2026-08-24):emailPassword.disableSignUp=false,requireEmailVerification=false,socialProviders=[objectstack-cloud],features.ssoEnforced=false,tenancyPosture=single. Env-side self-registration is open and unverified today, andreconcileMembership(policy defaultauto) auto-binds each new user into the env's single org — that is the surface the business-user design must address.Closing not planned — the hold's
Restart-when:condition has fired, and the answer is "not wanted now".That condition was: the business-user onboarding design concludes and the maintainer rules whether a cloud-org join link is still wanted. The design concluded today as #11723 (audience posture, ruled and dispatched). The maintainer's ruling on the collaborator layer, quoted verbatim from the 2026-08-24 chat, is:
「协作者不会多,我在云端手工加入都可以,主要是 业务用户怎么方便的注册进来,你先和我讨论方案。」
Manual invitation covers the collaborator (cloud-organization) layer at current volume, so this epic has no pull. Per the maintainer's standing guidance (2026-08-16, verbatim: 「我建议有些暂时不准备开发的应该直接关闭。」), work with no firable restart condition is closed rather than held — the card IS the record, and reopening is free.
Preserved for whoever revives this: the V1 token shape reasoned out here (one active link per org, role pinned to
member, default 7-day expiry, revoke/rotate, optional max-uses, membership written through the governedaddMemberpath, verified-email posture per better-auth GHSA-fmh4-wcc4-5jm3) is directly reusable if alinkvalue is ever added to the audience-posture vocabulary in #11723. Branchclaude/issue-11587-org-join-link-v1holds partial work; no PR was opened.
Ruling (maintainer, 2026-08-24, chat — quoted verbatim)
The maintainer approved the V1 shape proposed in that conversation (four-axis analysis summarized below). This parent is the epic's coordination node — it is never dispatched; work happens on the sub-issues.
Outcome
An org owner/admin mints ONE shareable join link, posts it to a group chat; anyone opening it registers/logs in and becomes a member of that org. The admin never types an email address.
Verified premises (2026-08-24)
email; no link/multi-use concept exists. Upstream demand tracked at Allow users to get invited to an organization without sending emails better-auth/better-auth#3672 (open). Community plugins (bard/better-auth-invite alpha, vcode-sh/better-auth-invitation-only) gate SIGNUP, not org membership — not adoptable, and a new runtime dependency is maintainer-floor anyway.V1 scope (ruled)
member(a link NEVER grants admin/owner); default expiry 7 days; revocable/rotatable; optional max-uses.sys_memberrows.Four-axis decision record (中文,按 2026-08-20 裁定)
Sub-issues (contract-first: backend first, downstream Blocked-by)
sys_join_linkobject + create/rotate/revoke/info/join endpoints (Clause-② YES: widens the public API surface ⇒ contract-tier dispatch)/join/:tokenlanding route) — Blocked-by AEpic PM & territory
Epic PM session:
session_71836b57-5db6-459d-ae4d-c6d9d7dd2cc6(maintainer direct-dispatch; this session also dispatches the spec-adjacent sub-issue under the same instruction — deviation from the default spec-seat transfer is recorded here with the ruling quote above).Territory: objectstack
packages/plugins/plugin-auth/**,packages/platform-objects/src/identity/**,packages/spec/src/kernel/public-auth-features.ts; objectuipackages/app-shell/src/console/**(org surfaces + join route); cloudpackages/service-cloud/**(org-scope plugin / proxy policy).