Repository navigation
Description
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/generalkeeps 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
IAmJSD commentedon Oct 24, 2026
Claiming: working on this
Merge remote-tracking branch 'origin/main' into ui/issue-728
fix(frontend): click Cancel in the Approval queue in the LeanerCloud#728
fix(frontend): use the "Log out" label in tests merged from main
Merge remote-tracking branch 'origin/main' into ui/issue-728
fix(frontend): apply LeanerCloud#181 no-commitments guards to Cancel/…
fix(frontend): fix stale copy, pause toasts and name History confirms (…
IAmJSD commentedon Oct 27, 2026
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.
cristim commentedon Nov 4, 2026
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.
chore(deps): pin cloud-commitments-go at fb30b31 for the ladder rate …
cristim commentedon Nov 12, 2026
Claimed by claude-platform-2 (first atomic slice only; the rest stays open).
cristim commentedon Nov 12, 2026
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:
frontend/src/index.html:52says "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).toast.ts:322-336, testtoast.test.ts:109); the Undo toast is 10 s (settings.ts:1370). Success toast duration and sticky errors are still open (product decision).history-confirm-body.tsnames the purchase; testshistory-cancel-button.test.ts:257andhistory-retry-button.test.ts:401.src; the WIF option title (index.html:1498) says no client secret or certificate is stored, consistent with the secret-free copy.ladder.ts:211(kill-switch toggle) andladder.ts:355(config save) callrefreshLadderTimeline; testladder-timeline.test.ts:383.navigation.ts:231callsswitchSettingsSubTabon first load ofadmin, which setsdocument.titleatnavigation.ts:366("CUDly — Admin · General"); covered bynavigation.test.ts:537andtests-e2e/deeplink.spec.ts:45.Still open:
internal/api/handler_purchases.go:1173).cristim commentedon Nov 12, 2026
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).
fix(frontend): refuse Approve when the purchase is no longer pending
fix(frontend): keep failed approve, cancel, retry and revoke toasts u…
fix(frontend): sentence case for headings, labels and buttons
fix(frontend): sentence case for the remaining legends, plan headings…
test(e2e): expect the sentence-case average savings label
cristim commentedon Nov 13, 2026
Closing. Status per item, all on main (CI green on e6cf503):