Skip to content

Approvals inbox: quick approve (inline a/r, bulk) silently drops declared decision outputs #2829

Description

@os-zhuang

Problem

The approvals inbox has two decision paths:

  1. Full drawer → DeclaredActionsBar → param dialog — renders one input per author-declared decision-output key (framework#3447 P2, feat(approvals): dynamic decision-output fields + expression approver editing (framework#3447 P2) #2827) and POSTs nested outputs.
  2. Quick paths — inline row approve/reject (a/r keyboard, hover buttons) and bulk approve: confirmation-only AlertDialogs calling approvalsApi.approve/reject directly with {actor_id}no param dialog, no outputs.

For a request whose node declares decisionOutputs (surfaced on the row as decision_outputs), a quick approve is legal (outputs are optional) but silently hands the flow nothing — the next stage's expression approver resolves an empty slate and falls into onEmptyApprovers (default: admin_rescue, i.e. a stuck request only an admin can act on). The approver never learns they skipped a field the flow author expected them to fill.

Fix

Rows with a non-empty decision_outputs should not offer the quick decision paths: disable inline a/r + hover approve/reject (tooltip: "此审批需要填写决策输出 — 打开详情审批") and exclude such rows from bulk apply (surface a per-row skip reason), steering the approver to the full drawer dialog.

Related: framework#3447 (P2), #2827 (dialog outputs), framework#3538 (decision_outputs on the row).

🤖 Generated with Claude Code

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions