diff --git a/openspec/changes/mobile-responsive-parity/verify-report.md b/openspec/changes/mobile-responsive-parity/verify-report.md index 3dfdf8b..8277c60 100644 --- a/openspec/changes/mobile-responsive-parity/verify-report.md +++ b/openspec/changes/mobile-responsive-parity/verify-report.md @@ -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.