Skip to content

fix(frontend): low-severity copy, toast, confirm and stale-state fixes #728

Closed

Description

@cristim

Summary

Low-severity copy, error-feedback and stale-state items from the 2026-10-08 UI review.

Where

Reviewed commit b50ca38. All source-level unless noted.

  • VIS-23: mixed Sentence/Title Case in headings and buttons; "Logout" should be "Log out"; "Purchasing Settings" under the "Purchasing policies" tab; stale "Settings -> Purchasing" path. frontend/src/index.html:48,105-342,431,1141. Related: ux(meta): residual UX backlog from 2026-04-22 audit (~75 MEDIUM/LOW items across 8 page areas) #6 (umbrella backlog; does not itemise these strings).
  • VIS-25: toasts default to 30 s including success; error toasts do not pause on hover/focus (WCAG 2.2.1); override Undo toast lasts only 5 s. frontend/src/toast.ts:41; frontend/src/app.ts:506; frontend/src/settings.ts:1318-1321.
  • UX-29: History Cancel/Retry confirms do not name the purchase. frontend/src/history.ts:1368-1373,1400-1406.
  • UX-30: approval links ignore purchase status; approved, cancelled or expired executions still show Approve (unverified end to end). frontend/src/approval-details.ts:49-57; frontend/src/purchases-deeplink.ts:85-109. Related: fix(approval): email-link approvers without view:purchases cannot approve, and the retry toast is wrong for permanent errors #529 (that issue is about 403/404 on the details fetch, not status handling).
  • UX-32: stale copy: "Only AWS services are supported today"; Azure WIF tooltip says "RSA certificate assertion", contradicting the secret-free OIDC copy in settings.ts:2527-2530. frontend/src/index.html:1153,1296.
  • UX-35: ladder timeline stays stale ("disabled" / "no configuration") after a kill-switch toggle or config save until reload. frontend/src/ladder-timeline.ts:12,119; frontend/src/ladder.ts:342,468.
  • UX-37: direct load of /admin/general keeps the generic page title while other tabs get a specific title. frontend/src/navigation.ts:192 (verified live).

Failure scenario

Examples: a money-path error toast vanishing before it is read; confirming Cancel on the wrong History row because the dialog does not name it; the ladder showing "disabled" right after the user re-enabled it. Verification: UX-37 live; the rest source-level or unverified as marked.

User impact

All users see the casing and stale copy; approvers and operators are affected by the toast, confirm and approval-link items; screen-reader and tab-strip users cannot tell where they are on /admin/general.

Suggested fix

  • VIS-23: sentence case throughout, "Log out", fix the two stale labels.
  • VIS-25: about 4 s for success and info; sticky errors with a close button and pause on hover/focus; longer Undo.
  • UX-29: include service, account, amount and date as the Approve dialog does.
  • UX-30: check status before showing Approve; show the requester.
  • UX-32: update both strings.
  • UX-35: refresh the timeline after kill-switch and config save.
  • UX-37: set the title for the admin General sub-tab on first load.

Screenshots

In the review fleet archive (/Users/cristi/.claude/agent-comms/review-fleet-20261008/screens/), NOT uploaded: usab-admin-general.png (UX-37), ladder-crop-full-1280.png (UX-35). Others: none (source-level).

Severity

Low: polish and small feedback gaps; none blocks a task.

Reviewer IDs: VIS-23 (vis L4), VIS-25 (vis L6, usab L1), UX-29 (usab L4), UX-30 (usab L5), UX-32 (usab L10), UX-35 (usab L14), UX-37 (usab L16)
Found by the 2026-10-08 review fleet.

Activity

  1. IAmJSD commented on Oct 24, 2026

    @IAmJSD
    Collaborator

    Claiming: working on this

  2. self-assigned this
    on Oct 24, 2026
  3. IAmJSD commented on Oct 27, 2026

    @IAmJSD
    Collaborator

    Status update (2026-10-27, checked against main at 7b86e38): What is left is frontend UI work, which cristim owns, so no PR from us.

    #1369 fixed VIS-23's specific strings ("Log out", the Purchasing policies heading, the stale path), the VIS-25 toast pause on hover/focus and the 10 s Undo, UX-29, UX-32 and UX-35. UX-37 did not reproduce on main. What is left is frontend UI work: the sentence-case sweep, shorter success toasts with sticky errors, and UX-30, where approval links still show Approve for non-pending purchases. Nothing on main has changed these since 2026-10-26.

    Left / blocked on: UI (cristim): VIS-23 full sentence-case sweep of headings and buttons in frontend/src/index.html needs a style rule. VIS-25 shorter success/info toasts and sticky errors go against the documented 30 s default, so they need an owner/UI decision. UX-30: gate Approve on details.status and show the requester in frontend/src/purchases-deeplink.ts and approval-details.ts. This is display only, because the backend already refuses to approve a non-pending execution (internal/api/handler_purchases.go:1173). UX-37: optional live recheck on a permission-gated admin load.

  4. cristim commented on Nov 4, 2026

    @cristim
    MemberAuthor

    Another toast item, seen on the deployed UI on 2026-11-04: the bottom-right toast stack covers page content (on Home it overlaps the per-service chart's x-axis and the upcoming-purchases card). Moved here from #1686.

  5. cristim commented on Nov 12, 2026

    @cristim
    MemberAuthor

    Claimed by claude-platform-2 (first atomic slice only; the rest stays open).

  6. cristim commented on Nov 12, 2026

    @cristim
    MemberAuthor

    Slice check against main 028cdf6 (claude-platform-2). Every copy and tiny-logic item is already on main, so this slice changes no code.

    Done, with evidence:

    • VIS-23 specific strings: frontend/src/index.html:52 says "Log out"; the Purchasing policies heading is at index.html:535 and the stale paths now read "Admin → Purchasing policies" (index.html:389, 1337). No "Logout" button text remains. The wider sentence-case sweep is still open (needs a style rule).
    • VIS-25 partial: toasts pause on hover and focus (toast.ts:322-336, test toast.test.ts:109); the Undo toast is 10 s (settings.ts:1370). Success toast duration and sticky errors are still open (product decision).
    • UX-29: history-confirm-body.ts names the purchase; tests history-cancel-button.test.ts:257 and history-retry-button.test.ts:401.
    • UX-32: "Only AWS services are supported today" and "RSA certificate assertion" no longer exist in src; the WIF option title (index.html:1498) says no client secret or certificate is stored, consistent with the secret-free copy.
    • UX-35: ladder.ts:211 (kill-switch toggle) and ladder.ts:355 (config save) call refreshLadderTimeline; test ladder-timeline.test.ts:383.
    • UX-37: navigation.ts:231 calls switchSettingsSubTab on first load of admin, which sets document.title at navigation.ts:366 ("CUDly — Admin · General"); covered by navigation.test.ts:537 and tests-e2e/deeplink.spec.ts:45.

    Still open:

  7. cristim commented on Nov 12, 2026

    @cristim
    MemberAuthor

    Releasing my claim (claude-platform-2): everything in the checklist that is copy or small logic is already on main (see the evidence comment above). The open items are product or style decisions: a sentence-case sweep needs a style rule, success/info toast duration and sticky errors on money-path toasts are a behaviour decision, UX-30 (approval link status) needs end-to-end verification, and the toast stack covering page content moved over from #1686 (see #1736/#1945).

  8. cristim commented on Nov 13, 2026

    @cristim
    MemberAuthor

    Closing. Status per item, all on main (CI green on e6cf503):

    • VIS-23 specific strings, UX-29, UX-32, UX-35, UX-37: already fixed earlier (see 2026-11-13 evidence comment).
    • VIS-23 sentence-case sweep: rule adopted (first word, proper nouns and acronyms capitalised). index.html headings, labels, legends, buttons plus dynamic modal titles, empty-state hints, Send for approval / Execute purchase now. SHAs baa4754, f9daaf1, bb20a80, e6cf503. Chart dataset labels left unchanged.
    • VIS-25: success toasts were already 5 s on the money paths and the 30 s default stays; failed approve, cancel, retry and revoke toasts and the non-approvable refusal are now sticky (6e2e8fd, bb20a80).
    • UX-30: Approve is refused with a clear message when details status is not pending or notified, in the deep link and the history button (2b2599b, bb20a80).
    • Toast stack covering content: fixed by 1750683 (moved to ux(frontend): toasts overlap page content at 320px width #1736).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions