Repository navigation
Closed
objectstack-ai/objectui
#4071Labels
pm:dispatchedDispatched to a dev agent by /pm-dispatchDispatched to a dev agent by /pm-dispatchrepo:objectuiSeam card: cross-repo ordering with objectui is the substance (pure objectui fixes live in objectui)Seam card: cross-repo ordering with objectui is the substance (pure objectui fixes live in objectui)
Description
Part of #7213 (entry convergence — see the triage comment there for the full plan and the boundary with objectui#2762 / objectui#2763).
Facts (verified on objectui origin/main, 2026-08-10)
- The Approvals Inbox page is
apps/console/src/pages/system/ApprovalsInboxPage.tsx, routed as the relative routesystem/approvalsinside thesystemRoutesfragment (apps/console/src/AppContent.tsx:161-228), which is passed as BOTHextraRoutesandextraRoutesNoApp(AppContent.tsx:261). So/apps/{ANY_APP}/system/approvalsalready resolves — the page is not actually bound to thesetupapp. - No navigation metadata anywhere points at the page. All entries are hardcoded:
packages/app-shell/src/console/home/HomePage.tsx:429—onOpenApprovals={() => navigate('/apps/setup/system/approvals')}hardcodessetup; business users may lack access to the setup app;packages/app-shell/src/layout/InboxPopover.tsx:117-121already uses the current app prefix (correct);- server notification deep links use relative
/system/approvals?request={id}and get app-prefixed byInboxPopover.tsx:157-158(correct).
- The component registry (
packages/app-shell/src/services/componentRegistry.ts; registrations inapps/console/src/registerDeveloperComponents.tsx:37-68etc.) has NOapprovals:*key (grep verified).
Scope
- Register
approvals:inboxin the component registry, resolving toApprovalsInboxPage(follow theregisterDeveloperComponents.tsxpattern; lazy-load like the route does). After this, a nav item{ type: 'component', componentRef: 'approvals:inbox' }in any app renders the full inbox via thecomponent/:ns/:nameroute (packages/app-shell/src/console/AppContent.tsx:790-791). - Fix
HomePage.tsx:429to navigate to the inbox under the current app (same approach asInboxPopover.tsx:117-121) instead of the hardcodedsetuppath. - Verify (and adjust if needed) that the page behaves correctly when mounted via the component route:
useParams().appNamefor record deep links (ApprovalsInboxPage.tsx:461-464) and the?request={id}deep-link drawer. The existingsystem/approvalsroute MUST stay — notification and email deep links depend on it; the component ref is additive.
Why a component ref (not a type: 'url' shortcut)
objectui#2763 (approved epic, on hold until after v17) will rebuild the approval surface on standard SDUI renderers and delete this bespoke page (its B3). The registry key is the stable indirection: the objectstack-side nav metadata (follow-up sub-issue of #7213, blocked by this one) points at approvals:inbox, and the v18 rebuild only repoints the key — zero nav-metadata churn.
Acceptance criteria
approvals:inboxresolves in the component registry;/apps/{app}/component/approvals/inboxrenders the inbox with working tabs, drawer, decision actions, and record deep links using{app}.- The Home "pending approvals" card navigates within the current app (no hardcoded
setup). /apps/{app}/system/approvals?request={id}still deep-links into the drawer.- Tests updated/added where the touched code already has coverage.
Out of scope
Page polish (objectui#2762), SDUI rebuild (objectui#2763), bell-badge count breakdown (separate sub-issue), objectstack-side nav metadata (follow-up sub-issue).
Metadata
Metadata
Assignees
Labels
pm:dispatchedDispatched to a dev agent by /pm-dispatchDispatched to a dev agent by /pm-dispatchrepo:objectuiSeam card: cross-repo ordering with objectui is the substance (pure objectui fixes live in objectui)Seam card: cross-repo ordering with objectui is the substance (pure objectui fixes live in objectui)
Activity
os-zhuang commentedon Aug 10, 2026
Claim: PM loop round 1 (maintainer-directed dispatch for #7213)
Session:
session_01L9U1G2piXmYrhYQX96XUyvBranch:
claude/issue-7231-approvals-inbox-component-refWorktree:
objectui-issue-7231Domain:
repo:objectuiFile surface: objectui
apps/console/src/(component registration + AppContent wiring),packages/app-shell/src/console/home/HomePage.tsx,packages/app-shell/src/services/componentRegistry.tsconsumers (read-only), tests alongside touched filesContainer & model: M, mode:subagent, model: opus
Serial constraints cleared: batch mate #7232 lands in objectstack (different repo). objectui#2762 (queued polish) scopes ApprovalsInboxPage internals, not the registry/HomePage; no open objectui PR touches these files per search at claim time.
Generated by Claude Code
os-zhuang commentedon Aug 10, 2026
ACCEPT — PR objectstack-ai/objectui#4071 (review by the epic PM session, verified against GitHub, not the report):
approvals:inboxregistered in the component registry (newapps/console/src/registerApprovalsComponents.tsx, side-effect-imported frommain.tsx); Home's pending-approvals card now resolves its target app (last-open app re-checked against the live active-app list → first active app →setuponly for the degenerate no-segment case, with the zero-app unreachability pinned as a precondition test).ApprovalsInboxPageitself untouched (objectui#2763 boundary respected); the standalonesystem/approvalsroute and?request=deep links preserved and pinned./apps/:appName/*) and the fix was reshaped accordingly — with reverse verification in the predicted direction. This is the process working as intended./apps/setup/..., so a business user without setup access has no working "all notifications" or "all activity" link #7266 (four sibling/apps/setup/...hardcodes for inbox/activity), left unassigned for triage — deliberately NOT absorbed into the [approvals][console] 「待我审批」有三个并存入口、三套不同 UI —— 其中 sys_approval_request 原生视图是无决策动作的开发者原始表 #7213 epic (not required for its acceptance).Next: PR flipped ready + queued for merge. #7234 (nav metadata, blocked by this) dispatches once it lands; a console pin bump chore follows per the standing linkage process.
Generated by Claude Code
test(qa): refresh the approvals checklist's entry paths and cover the…