feat(approvals-inbox): retire hardcoded secondary buttons for server-declared actions (#2678 P2-4)#2697
Merged
Conversation
…declared actions Completes objectui#2678 P2-4: the approvals inbox no longer hand-wires a button per decision capability. With the full declared action set now on sys_approval_request (framework#3300), DeclaredActionsBar renders and executes them, so the inbox drops its bespoke send-back / request-info / reassign / remind / recall / resubmit buttons — plus the three AlertDialogs, five action handlers, and the lazy user-directory loader that backed them. - DeclaredActionsBar gains an `exclude` prop. The inbox keeps approve/reject in its richer composer (it stages file attachments the generic param dialog can't yet collect) and `exclude`s them from the bar, so the two never render duplicate buttons. - Pending drawer: the "More actions" bar covers reassign/send-back/request-info (approver) and remind/recall (submitter, gated by the declared `visible` CEL). - Returned drawer: keeps the Edit-record link; resubmit and recall-abandon come from the bar (gated to the submitter on a returned request). Net: ~230 fewer lines of inbox-specific action code; new decision capabilities now ship as backend metadata (enterprise act-as, cloud#861, included). Verified in-browser against the live backend: the drawer shows approve/reject in the composer and send-back/request-info/reassign/remind/recall in "More actions" with zero duplicates; resubmit correctly hidden on a pending request; Reassign opens a real sys_user picker; clicking declared "Send reminder" executed /remind and appended a `remind` audit row. app-shell suite green (7 DeclaredActionsBar tests incl. exclude); console typecheck clean. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016ypkQikZ55oWUHUnMebwXA
|
The latest updates on your projects. Learn more about Vercel for GitHub. |
Contributor
✅ Console Performance Budget
📦 Bundle Size Report
Size Limits
|
os-zhuang
marked this pull request as ready for review
July 19, 2026 16:58
This was referenced Jul 20, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Completes #2678 P2-4. Pairs with framework#3300 (declared action set +
/revise,/resubmitroutes).What
The approvals inbox no longer hand-wires a button per decision capability. With the full declared action set now on
sys_approval_request(framework#3300),DeclaredActionsBarrenders + executes them, so the inbox drops its bespoke send-back / request-info / reassign / remind / recall / resubmit buttons — along with the threeAlertDialogs, five action handlers (doReassign/doRemind/doRequestInfo/doSendBack/doResubmit), and the lazy user-directory loader (loadUserOptions) that backed them.DeclaredActionsBargains anexcludeprop. The inbox keeps approve/reject in its richer composer — it stages file attachments the generic param dialog can't yet collect — andexcludes them from the bar, so the two never render duplicate buttons.visibleCEL.returnedrequest).Net: ~230 fewer lines of inbox-specific action code. New decision capabilities now ship as backend metadata — enterprise act-as (cloud#861) included — and render on any surface that mounts the bar.
The one thing kept hardcoded — and why
approve/rejectstay in the composer because they collect file attachments (CommentAttachment+ presigned upload) with an inline comment.ActionParamDialoghas no file-upload param rendering yet, so a declaredapprove/rejectcouldn't carry attachments. Closing that gap (afile-type param in the shared dialog) is a reusable follow-up that would let the composer retire too — filed as the next step, not stretched into this PR.Verification
In-browser against the live backend (framework main + framework#3300):
approval_approve/approval_rejectcount 0 in the bar).returned).sys_userpicker (field-backed combobox), not a free-text box./remind, and appended aremindaudit row — end-to-end through the shared runtime with zero inbox-specific code.DeclaredActionsBartests incl. the newexcludecases); console typecheck clean; lint delta zero (pre-existing React-Compiler advisories unchanged).Refs
#2678 (P2-4) · framework#3300 (backend half) · cloud#861 (enterprise act-as)
🤖 Generated with Claude Code
Generated by Claude Code