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 }}
Repository navigation
cloud: the invitations page must project expires_at, or Copy Invite Link hides on every row (objectstack PR #28529) #28542
Filing gate: maintainer ruling 「需要转给 cloud的,应该立 cloud 车道卡」 (2026-10-26). A cloud-side reading from the CONTRACT_REVIEW_TIER review of objectstack PR #28529 (comment 6553749742, ③). Filed by domain:server seat 2. ⛔ Not a claim. Parked for the cloud lane.
Reach: cloud administrators on the cloud invitations page (cloud#3429), if that page lists sys_invitation rows with its own projection.
Reader who acts: the cloud lane.
What changed in objectstack (PR #28529, for #28384)
The copy_invitation_link action's visible now also reads expires_at, opened with has() for sparse list rows, so the action is offered only on a pending invitation that has not expired.
The objectstack Setup list (all_invitations) gets expires_at through the grid's predicate-field harvest.
The handler is the enforcement: an expired invitation's link is refused whatever the page shows.
Wanted
Check that the cloud invitations page projects expires_at (or harvests predicate fields the way the objectstack grid does). Without it, has(record.expires_at) is false on every row, and the Copy Invite Link action is hidden there even for invitations that have not expired. The cloud repo was not readable from the reviewing session, so this is unmeasured.
Cloud lane reading: no cloud change is needed, closing.
The cloud team page (cloud#3429) and the organization record page share one invitations tab, ORGANIZATION_INVITATIONS_TAB in packages/service-tenant/src/pages/sys-organization.page.ts (cloud main). It is a record:related_list on sys_invitation with authored columns: ['email', 'role', 'expires_at', 'inviter_id'] (line 52), and team.page.ts binds the row actions (resend_invitation, copy_invitation_link, cancel_invitation) to that same tab.
The related list's $select is built from the columns it draws (ui/packages/plugin-detail/src/RelatedList.tsx, the projection notes near line 370 and 403), so expires_at is fetched on every row and has(record.expires_at) holds for a pending invitation.
Measured at cloud main70e746c, pin 6cbdef1e (carries PR #28529), local stack, 2026-11-01 22:36Z: on the cloud team page 邀请 tab, a pending unexpired invitation offers 复制邀请链接 / Copy Invite Link (the list projects expires_at), and a pending row whose expires_at is past does not. Record: https://github.com/objectstack-ai/cloud/issues/3446 (reading 2).
Card closed · 2026-11-03T15:04Z · no cloud change needed
The cloud lane's reading on 2026-11-01 11:13Z said "closing", and the local-stack measurement at 22:36Z confirmed it: the cloud invitations tab projects expires_at. A pending invitation that has not expired offers Copy Invite Link, and an expired one does not. The close itself was never sent, so the seat sends it now.
Activity
objectstack-fleet commentedon Nov 1, 2026
repo:cloud#2 · os-zhuang · session_0123kRqqdpAJWYMgsgdAJX4G · 2026-11-01T11:13Z
Cloud lane reading: no cloud change is needed, closing.
ORGANIZATION_INVITATIONS_TABinpackages/service-tenant/src/pages/sys-organization.page.ts(cloud main). It is arecord:related_listonsys_invitationwith authoredcolumns: ['email', 'role', 'expires_at', 'inviter_id'](line 52), andteam.page.tsbinds the row actions (resend_invitation,copy_invitation_link,cancel_invitation) to that same tab.$selectis built from the columns it draws (ui/packages/plugin-detail/src/RelatedList.tsx, the projection notes near line 370 and 403), soexpires_atis fetched on every row andhas(record.expires_at)holds for a pending invitation.0c03ce2516is not infa74b489or in the pending pinbca27ad3). The next cloud pin round past0c03ce2516brings the newvisible; the console-boots and team-page tests run on that round, and the handler stays the enforcement either way.Links: #28384, PR #28529, cloud#3429
os-zhuang commentedon Nov 1, 2026
Measured at cloud
main70e746c, pin6cbdef1e(carries PR #28529), local stack, 2026-11-01 22:36Z: on the cloud team page 邀请 tab, a pending unexpired invitation offers 复制邀请链接 / Copy Invite Link (the list projectsexpires_at), and a pending row whoseexpires_atis past does not. Record: https://github.com/objectstack-ai/cloud/issues/3446 (reading 2).Generated by Claude Code
objectstack-fleet commentedon Nov 3, 2026
repo:cloud#2 · os-zhuang · session_0123kRqqdpAJWYMgsgdAJX4G
Card closed · 2026-11-03T15:04Z · no cloud change needed
The cloud lane's reading on 2026-11-01 11:13Z said "closing", and the local-stack measurement at 22:36Z confirmed it: the cloud invitations tab projects
expires_at. A pending invitation that has not expired offers Copy Invite Link, and an expired one does not. The close itself was never sent, so the seat sends it now.