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
{{ message }}
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
Repository navigation
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
console: copied invitation link is unusable — buildAcceptUrl rebuilds the trailing-dot host that resolveHomeUrl already retired #4472
Copying an invitation link from the workspace Invitations tab yields a URL that cannot be opened. The recipient of an invitation therefore has no working way in.
Repro
Multi-org runtime, zh console, sign up and create a workspace (owner).
Users → Invite user → invite lisi@acme-test.com as member.
trailing-dot host — localhost:8080. (the port is followed by .);
the console mount is missing — the console is served under /_console/, and GET /accept-invitation/ (dot removed) is answered by the server with {"error":"Not found"}.
The only URL that renders the accept page is http://localhost:8080/_console/accept-invitation/<id> — verified working, the page loads and the invitation can be accepted.
Expected
The copied link is the one the recipient can open: <console mount>accept-invitation/<id>.
Cause
buildAcceptUrl rebuilds the URL from import.meta.env.BASE_URL, which is '.' in a portable (base: './') build:
// packages/app-shell/src/console/organizations/manage/InvitationsPage.tsx:32functionbuildAcceptUrl(invitationId: string): string{constbase=(import.meta asany).env?.BASE_URL??'/';constnormalized=base.endsWith('/') ? base : `${base}/`;return`${window.location.origin}${normalized}accept-invitation/${invitationId}`;}
Duplicated verbatim in packages/app-shell/src/console/organizations/manage/InviteMemberDialog.tsx:39 (the "share link" view of the invite dialog), so the freshly-created-invitation link is broken the same way.
This is the exact failure mode resolveHomeUrl.ts was written to retire — its header documents it:
resolveConsoleUrl resolves against the deployment mount, which is what both WorkspaceSwitcher and OrganizationsPage already use for full-page navigations. A regression test asserting the copied URL contains no :. and starts with the console mount would pin it.
Environment
Local dev server http://localhost:8080, multi-org enabled, zh locale, observed 2026-08-12. The server was started by the maintainer and its exact commit is not verified; the source quoted above is the objectui main checkout at filing time.
Ruling: fix as the card proposes — delete BOTH local buildAcceptUrl copies (InvitationsPage.tsx:32, InviteMemberDialog.tsx:39) and route through the existing mount-aware resolveConsoleUrl, the exact failure mode resolveHomeUrl.ts's own header documents as retired. One resolver, one answer: no local URL-building survives in either file. Red-first: pin the copied URL contains no trailing-dot host (:8080.-style) and starts with the console mount — red against the current builder, green through the helper; cover both copy sites (Invitations tab + freshly-created-invitation dialog).
Surface (mutual exclusion): packages/app-shell/src/console/organizations/manage/InvitationsPage.tsx + InviteMemberDialog.tsx + tests + one changeset. Disjoint from in-flight #4463 (views/ObjectView), #4473 (apps/console landing), #4431, #4471. Note #4474 (untranslated strings) also touches org/invitation UI and is deliberately NOT dispatched this wave to keep this surface exclusive.
Activity
yinlianghui commentedon Aug 12, 2026
CLAIM — session
session_017Qqyix2QcnpUC9XeYVDzx3, branchclaude/issue-4472-accept-url-mount.Ruling: fix as the card proposes — delete BOTH local
buildAcceptUrlcopies (InvitationsPage.tsx:32,InviteMemberDialog.tsx:39) and route through the existing mount-awareresolveConsoleUrl, the exact failure moderesolveHomeUrl.ts's own header documents as retired. One resolver, one answer: no local URL-building survives in either file. Red-first: pin the copied URL contains no trailing-dot host (:8080.-style) and starts with the console mount — red against the current builder, green through the helper; cover both copy sites (Invitations tab + freshly-created-invitation dialog).Grading: patch
@object-ui/app-shell(runtime-only; verify emitted.d.tsunmoved).Surface (mutual exclusion):
packages/app-shell/src/console/organizations/manage/InvitationsPage.tsx+InviteMemberDialog.tsx+ tests + one changeset. Disjoint from in-flight #4463 (views/ObjectView), #4473 (apps/console landing), #4431, #4471. Note #4474 (untranslated strings) also touches org/invitation UI and is deliberately NOT dispatched this wave to keep this surface exclusive.Generated by Claude Code
Generated by Claude Code
fix(app-shell): invitation links resolve through the console mount he…
fix(app-shell): organization & invitation UI translates its six Engli…