Consolidated UX/design evaluation of the Approval Center (审批中心 inbox + decision drawer), found while dogfooding the v16.0 approval features. The surface is now demonstrable out of the box via objectstack-ai/objectstack#3364 (seeds two real pending requests — one M-of-N quorum, one finance∧legal 会签 — routed to the dev admin), which is what made this review possible. Part of the objectstack-ai/objectstack#3358 verification sweep.
What's already good (don't regress): metadata-driven DeclaredActionsBar (new decision capabilities need zero UI code), mobile card layout with a correct button hierarchy, keyboard flow (j/k/Enter/a/r), ?request= deep-link opens the drawer, localized chrome + toasts, server-computed progress + viewer gating.
Screens reviewed: inbox list (desktop + mobile), decision drawer, one live Approve. Components: packages/app-shell/src/views/DeclaredActionsBar.tsx + the approval-center/inbox + decision-drawer components in packages/app-shell.
P0 — defects / risk
P1 — high-impact UX
P2 — polish
Framework-side dependency: P0-3 (localized action labels) needs @objectstack/plugin-approvals to ship a translation bundle for the approval_approve / approval_reject / approval_reassign / /revise / request-info / remind / recall / resubmit action labels — tracked in objectstack-ai/framework.
Refs: objectstack-ai/objectstack#3358 (sweep), objectstack-ai/objectstack#3364 (demo seeds).
Consolidated UX/design evaluation of the Approval Center (审批中心 inbox + decision drawer), found while dogfooding the v16.0 approval features. The surface is now demonstrable out of the box via objectstack-ai/objectstack#3364 (seeds two real pending requests — one M-of-N quorum, one finance∧legal 会签 — routed to the dev admin), which is what made this review possible. Part of the objectstack-ai/objectstack#3358 verification sweep.
What's already good (don't regress): metadata-driven
DeclaredActionsBar(new decision capabilities need zero UI code), mobile card layout with a correct button hierarchy, keyboard flow (j/k/Enter/a/r),?request=deep-link opens the drawer, localized chrome + toasts, server-computed progress + viewer gating.Screens reviewed: inbox list (desktop + mobile), decision drawer, one live Approve. Components:
packages/app-shell/src/views/DeclaredActionsBar.tsx+ the approval-center/inbox + decision-drawer components inpackages/app-shell.P0 — defects / risk
待审批renders as 待/审/批 on both desktop and mobile (where there's ample room), so it's a badge-component width/clip constraint, not just a narrow column. Give the status pillwhite-space: nowrap+ a sensible min-width; widen the 状态 column.DeclaredActionsBarrenders the action'slabelverbatim; thesys_approval_requestdecision actions need a translation bundle (framework-side dependency — see below).P1 — high-impact UX
per_groupshow per-group state (Finance ✓ / Legal ○); reconcile the 0/1-vs-2/3 wording (e.g. "0/2 approvals · 1 eligible approver").P2 — polish
prefers-color-scheme: lightdid not change the theme; appears dark-only. Support light mode or document dark-only.Framework-side dependency: P0-3 (localized action labels) needs
@objectstack/plugin-approvalsto ship a translation bundle for theapproval_approve/approval_reject/approval_reassign//revise/ request-info / remind / recall / resubmit action labels — tracked in objectstack-ai/framework.Refs: objectstack-ai/objectstack#3358 (sweep), objectstack-ai/objectstack#3364 (demo seeds).