Update verify report: 4 of 5 residual risks resolved
R1 (R4.5 dirty confirm), R2 (default-button touch targets), R3 (polling on battery), and R5 (pagination dedup) are all resolved by the follow-up commits. R4 (iOS Safari manual verification) remains -- requires a physical device pass.
This commit is contained in:
@@ -96,26 +96,30 @@ Each touched page has at least one mobile and one desktop test:
|
||||
|
||||
## Residual risks / known gaps
|
||||
|
||||
1. **R4.5 dirty-state outside-click confirm** not implemented in `SheetForm`.
|
||||
The sheet closes on any outside-click/Escape without checking if the form is
|
||||
dirty. Low impact (user loses unsaved edits, same as closing a browser tab),
|
||||
but spec R4.5 called for a confirm prompt. Deferred — the `SheetForm`
|
||||
primitive would need an `isDirty` prop to address this centrally.
|
||||
1. **R4.5 dirty-state outside-click confirm** — RESOLVED. `SheetForm` gained an
|
||||
`isDirty` prop; when true, any close path (Cancel, header X, Radix overlay
|
||||
click, Escape) opens a "Discard changes?" confirm. All four form consumers
|
||||
(ServicePage, Settings machine editor, message compose, WidgetConfigDialog)
|
||||
compute and pass `isDirty`.
|
||||
|
||||
2. **Default-size text buttons (32px)** remain below 44px height. Icon buttons,
|
||||
checkboxes, switches, and `size="sm"` buttons were upgraded. If strict
|
||||
WCAG 2.5.5 on ALL interactive elements is required, a second touch-target
|
||||
pass on `size="default"` buttons is needed.
|
||||
2. **Default-size text buttons (32px)** — RESOLVED. A second touch-target pass
|
||||
applied `.mobile-touch-target` to 32 default-size buttons across 9 files
|
||||
(Save, Cancel, Delete, Validate SSH, Run job, etc.) plus the shared
|
||||
`DialogFooter`. Combined with Slice 9, all interactive elements below `md`
|
||||
now meet the 44px minimum.
|
||||
|
||||
3. **Polling on battery** (D8 risk): intervals unchanged. Dashboard polls
|
||||
every ~30s per widget + 5s queue-status. A `document.visibilityState`
|
||||
pause-refetch effect (~10 lines) is the recommended follow-up.
|
||||
3. **Polling on battery** (D8 risk) — RESOLVED. `refetchIntervalInBackground:
|
||||
false` is now a `QueryClient` default, so all interval polls (widgets ~30s,
|
||||
queue status 5s, media build progress 1s) pause when the tab is hidden. The
|
||||
`useMedia` build-progress poll no longer overrides this. Build progress
|
||||
resumes and catches up on return.
|
||||
|
||||
4. **iOS Safari manual verification** not performed in CI. `h-[100dvh]` on
|
||||
SheetForm, `position: sticky` behavior, and attachment upload from Files
|
||||
need real-device testing. The flex-column layout (not `position: sticky`)
|
||||
avoids the known sticky-inside-transform pitfall.
|
||||
avoids the known sticky-inside-transform pitfall. UNRESOLVED — requires a
|
||||
physical device pass.
|
||||
|
||||
5. **Pagination duplication**: `MediaMobilePagination` duplicates
|
||||
`DataTablePagination` semantics. Extracting a shared `TablePagination`
|
||||
component is a follow-up refactor.
|
||||
5. **Pagination duplication** — RESOLVED. Extracted a shared `TablePagination`
|
||||
component consumed by both the desktop `DataTable` and the Media mobile
|
||||
card list. Removes ~90 lines of duplication.
|
||||
|
||||
Reference in New Issue
Block a user