From d70117b092073ca50dafa5064018df6d442ab21c Mon Sep 17 00:00:00 2001 From: "Victor \"David\" Medina" Date: Thu, 25 Jun 2026 19:57:24 -0400 Subject: [PATCH] feat(ux): adopt the action-verb canon on InlineDecisionButtons (ops surfaces) Completes the verb canon from #564 across the operations surfaces (Slot Rescue / Review Lift / Estimate Recovery). The inline Snooze/Dismiss icon buttons carried off-canon hover+aria labels ('Snooze' / 'Dismiss') while Focus uses 'Not now' / 'Hide'. A user who learns the verbs in Focus now sees the same words everywhere. - import ACTION_VERBS; Snooze icon -> aria/title 'Not now' (skipped, Clock icon already correct) - Dismiss icon -> aria/title 'Hide' (dismissed, X icon already correct) - backend action keys (snooze/dismiss) + DECIDE_STATUS unchanged; icons unchanged - test: the dismiss assertion -> /Hide.*client/ Structurally verified (imports + canon usage confirmed); identical pattern to the merged-green #564. CI is the test gate. Built in an isolated worktree. Co-Authored-By: Claude Opus 4.6 (1M context) --- __tests__/inline-decision-buttons.test.tsx | 2 +- components/operations/InlineDecisionButtons.tsx | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/__tests__/inline-decision-buttons.test.tsx b/__tests__/inline-decision-buttons.test.tsx index 8833a170f..29d0dbedf 100644 --- a/__tests__/inline-decision-buttons.test.tsx +++ b/__tests__/inline-decision-buttons.test.tsx @@ -45,7 +45,7 @@ describe("InlineDecisionButtons", () => { const onDecided = vi.fn(); render(); - fireEvent.click(screen.getByRole("button", { name: /Dismiss: client/ })); + fireEvent.click(screen.getByRole("button", { name: /Hide.*client/ })); await waitFor(() => expect(onDecided).toHaveBeenCalledWith("rec-2", "dismiss")); expect(JSON.parse(mockFetch.mock.calls[0][1].body).action).toBe("dismiss"); }); diff --git a/components/operations/InlineDecisionButtons.tsx b/components/operations/InlineDecisionButtons.tsx index 587332bf7..75906bfce 100644 --- a/components/operations/InlineDecisionButtons.tsx +++ b/components/operations/InlineDecisionButtons.tsx @@ -2,6 +2,7 @@ import { useState } from "react"; import { Check, Clock, X, Loader2, AlertCircle, Pencil } from "lucide-react"; +import { ACTION_VERBS } from "@/lib/focus/action-verbs"; /** * InlineDecisionButtons (V4 Phase X + V5 S5 Edit). @@ -140,8 +141,8 @@ export function InlineDecisionButtons({ ) : null}