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
[approvals] Point the account app's Approvals nav at the inbox component; contribute a Setup inbox entry; document mounting the inbox in business apps #7234
(#7231 — the objectui half, registering the approvals:inbox component-registry key — carries the repo:objectui routing label. This issue is dispatchable only after #7231's PR merges. End-to-end console behavior additionally requires the next console pin bump, which is a separate standing chore — NOT a rider on this issue.)
Facts (verified on origin/main, 2026-08-10)
Entry C of [approvals][console] 「待我审批」有三个并存入口、三套不同 UI —— 其中 sys_approval_request 原生视图是无决策动作的开发者原始表 #7213 is exactly one metadata declaration: packages/platform-objects/src/apps/account.app.ts:100-108 (nav_account_approvals, type: 'object', sys_approval_request / my_pending). The account app declares no requiredPermissions (account.app.ts:52-56), so every authenticated user sees the raw engine-owned table.
Its record page shows NO decision actions because the 8 declared actions gate on record.viewer.can_act || record.viewer.can_override (packages/plugins/plugin-approvals/src/sys-approval-request.object.ts:252-407) and the viewer block is only attached on the approvals REST path (approval-service.ts:4012-4023, attachViewers()), never on the generic data API. Converting the nav entry — not patching the data API — is the v17 fix; the data-source contract is objectui#2763 A1 (deliberately out of scope here).
plugin-approvals contributes three raw-table Setup entries (approvals-plugin.ts:85-96) into group_approvals, gated by manage_platform_settings (setup.app.ts:80-87) — correctly positioned as an admin/diagnostic surface; they stay.
zh labels for these nav items live in packages/platform-objects/src/apps/translations/zh-CN.ts (:21 待我审批, :74-78).
Scope
account.app.ts: change nav_account_approvals to { type: 'component', componentRef: 'approvals:inbox' } — label/icon/position unchanged; the entry point stays, the destination becomes the full Approvals Inbox. Suggestion (verify, optional): add requiresService: 'approvals' so the entry hides when plugin-approvals is not installed (requiresObject no longer applies to a component item).
approvals-plugin.ts navigationContributions: add an "Approvals Inbox" type: 'component' item (componentRef approvals:inbox) at the top of group_approvals, above the three raw tables, so admins reach the full UI from Setup too; keep the raw-table entries as-is.
Translations for the new/changed nav items in packages/platform-objects/src/apps/translations/* (zh 审批中心 for the Setup entry; the account entry keeps 待我审批) — respect the check:app-nav-i18n gate.
Docs (content/docs/automation/approvals.mdx): update "The approver finds it in their queue" to name the Approvals Inbox as the canonical approver surface, and add a short "Mount the approvals inbox in your app" snippet ({ type: 'component', componentRef: 'approvals:inbox', label: 'Approvals' }). Touch content/docs/ui/setup-app.mdx's group_approvals row if it names the entries.
Update packages/plugins/plugin-approvals/src/nav-contribution.test.ts and any pinned nav expectations; changeset (user-visible).
Acceptance criteria
The account app's Approvals entry renders the full inbox (component route) instead of the raw sys_approval_request grid — end users get decision actions, business vocabulary, node progress, and the drawer.
Setup → Approvals shows an "Approvals Inbox" entry above the raw tables.
The raw tables remain reachable only under Setup (admin-gated); sys_approval_request is no longer surfaced raw to end users anywhere.
Docs updated; check:app-nav-i18n, nav-contribution tests, and affected package suites green.
Out of scope
Console pin bump (separate chore); attaching viewer on the generic data API (objectui#2763 A1); vocabulary alignment (#7232).
Part of #7213.
Blocked-by: #7231
(#7231 — the objectui half, registering the
approvals:inboxcomponent-registry key — carries therepo:objectuirouting label. This issue is dispatchable only after #7231's PR merges. End-to-end console behavior additionally requires the next console pin bump, which is a separate standing chore — NOT a rider on this issue.)Facts (verified on origin/main, 2026-08-10)
packages/platform-objects/src/apps/account.app.ts:100-108(nav_account_approvals,type: 'object',sys_approval_request/my_pending). The account app declares norequiredPermissions(account.app.ts:52-56), so every authenticated user sees the raw engine-owned table.record.viewer.can_act || record.viewer.can_override(packages/plugins/plugin-approvals/src/sys-approval-request.object.ts:252-407) and theviewerblock is only attached on the approvals REST path (approval-service.ts:4012-4023,attachViewers()), never on the generic data API. Converting the nav entry — not patching the data API — is the v17 fix; the data-source contract is objectui#2763 A1 (deliberately out of scope here).approvals-plugin.ts:85-96) intogroup_approvals, gated bymanage_platform_settings(setup.app.ts:80-87) — correctly positioned as an admin/diagnostic surface; they stay.packages/platform-objects/src/apps/translations/zh-CN.ts(:21待我审批,:74-78).Scope
account.app.ts: changenav_account_approvalsto{ type: 'component', componentRef: 'approvals:inbox' }— label/icon/position unchanged; the entry point stays, the destination becomes the full Approvals Inbox. Suggestion (verify, optional): addrequiresService: 'approvals'so the entry hides when plugin-approvals is not installed (requiresObjectno longer applies to a component item).approvals-plugin.tsnavigationContributions: add an "Approvals Inbox"type: 'component'item (componentRefapprovals:inbox) at the top ofgroup_approvals, above the three raw tables, so admins reach the full UI from Setup too; keep the raw-table entries as-is.packages/platform-objects/src/apps/translations/*(zh 审批中心 for the Setup entry; the account entry keeps 待我审批) — respect thecheck:app-nav-i18ngate.content/docs/automation/approvals.mdx): update "The approver finds it in their queue" to name the Approvals Inbox as the canonical approver surface, and add a short "Mount the approvals inbox in your app" snippet ({ type: 'component', componentRef: 'approvals:inbox', label: 'Approvals' }). Touchcontent/docs/ui/setup-app.mdx's group_approvals row if it names the entries.packages/plugins/plugin-approvals/src/nav-contribution.test.tsand any pinned nav expectations; changeset (user-visible).Acceptance criteria
sys_approval_requestgrid — end users get decision actions, business vocabulary, node progress, and the drawer.sys_approval_requestis no longer surfaced raw to end users anywhere.check:app-nav-i18n, nav-contribution tests, and affected package suites green.Out of scope
Console pin bump (separate chore); attaching
vieweron the generic data API (objectui#2763 A1); vocabulary alignment (#7232).