Skip to content

feat(console): org join-link UI — manage/copy dialog on the Team surface + /join/:token self-serve landing route #5961

Description

@os-zhuang

Part of objectstack-ai/objectstack#11586 (epic — ruling and V1 scope live there).
Blocked-by: objectstack-ai/objectstack#11587

Deliverable (console UI half of the universal org join link)

  1. Link management dialog on the org Team surface (the sys_organization record page toolbar and/or the platform org console's Members/Invitations pages — pick the entry that coexists with the just-landed invite_user toolbar mirror, objectstack#11544): owner/admin-only "Invite via link" — shows the active link (full URL), Copy, Rotate (with confirm — old link dies), Revoke, expiry display. No active link ⇒ Create.
  2. /join/:token console route: fetch token info (org display name + validity). Unauthenticated ⇒ login/signup with return-to back to the join page. Authenticated ⇒ confirmation ("Join ?") → POST join → set active organization → land in the org shell. Distinct UI states for expired / revoked / exhausted / invalid / already-a-member (the backend card publishes the error codes in its PR body).
  3. i18n: en / zh-CN / ja-JP / es-ES for all new strings (follow the console's existing org-surface i18n patterns; aria-labels included — see the objectui#8094 class).

Constraints

  • URL shape mirrors the existing invitation route family (/_console/accept-invitation/<id> ⇒ /_console/join/<token>); build URLs through the same single-source console-URL helper the accept-invitation flow uses.
  • The link is a bearer credential: never log it, never put it in analytics payloads.
  • Do not start until the Blocked-by lands: endpoint paths + error codes come from that PR's body.

Activity

  1. added
    domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seat
    on Aug 24, 2026
  2. os-zhuang commented on Aug 24, 2026

    @os-zhuang
    ContributorAuthor

    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-v1 exists 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, and reconcileMembership (policy default auto) auto-binds each new user into the env's single org — that is the surface the business-user design must address.

  3. os-zhuang commented on Aug 24, 2026

    @os-zhuang
    ContributorAuthor

    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 objectstack-ai/objectstack#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 governed addMember path, verified-email posture per better-auth GHSA-fmh4-wcc4-5jm3) is directly reusable if a link value is ever added to the audience-posture vocabulary in #11723. Branch claude/issue-11587-org-join-link-v1 holds partial work; no PR was opened.

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatpm:on-hold

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions