fix: recover safely from settings load and save failures
Quality / test (push) Canceled after 0s

This commit is contained in:
2026-09-10 17:44:53 -04:00
parent 9a790ce294
commit d321d8c679
4 changed files with 129 additions and 11 deletions
+10 -2
View File
@@ -146,7 +146,7 @@ Verified locally: `npm test` passes 167 tests with no failures (23 domain, 79 ap
- Validation: 166 API tests, 11 web tests, 3 public Playwright tests, production web build, Storybook build, and 32 Storybook suites / 93 tests. No API or persistence changes.
- Screen-reader speech and native browser zoom remain manual review items; this slice verifies browser focus and title behavior.
### Latest Vertical Slice: Clear Public Contact Methods
### Clear Public Contact Methods
- Settings now sends explicit empty strings when a seller clears email or phone; help text explains removal. Omitted API fields still retain existing values.
- Validation accepts empty/whitespace-only email as removal while rejecting invalid non-empty addresses. Both public detail repositories expose absent/cleared contacts as null.
@@ -154,7 +154,15 @@ Verified locally: `npm test` passes 167 tests with no failures (23 domain, 79 ap
- Storybook covers clearing contacts while retaining the description and rendering seller information without contact links.
- Validation: 167 API tests, 23 isolated integration tests, 11 web tests, production web build, Storybook build, and 32 Storybook suites / 95 tests. No migration required.
Next bounded slice: Settings loading/error recovery. A failed settings read currently leaves editable default values visible. Hide the form until settings load successfully, provide a retry action, and preserve entered values across failed saves, with loading/error/retry Storybook coverage.
### Latest Vertical Slice: Settings Error Recovery
- Settings only exposes its form after a successful load. Failed reads offer Retry instead of editable defaults.
- Keyboard retry restores focus to the description field on success or Retry on repeated failure.
- Saving announces progress and disables fields/submission while in flight; failed saves retain edits and allow retry without reloading.
- Storybook covers loading, load errors, successful/repeated retry, save failure/retry, saving/disabled states, mobile retry and dark-theme save recovery.
- Validation: 167 API tests, 11 web tests, production web build, Storybook build, and 32 Storybook suites / 102 tests. Frontend-only change; no API or persistence changes.
Next bounded slice: Saved Views error recovery. Failed reads currently also display “No saved views yet” and provide no retry. Separate loading/error/empty states, add retry and reliable create/delete feedback, and cover recovery with Storybook interactions.
## Next Milestone
+9
View File
@@ -76,3 +76,12 @@ Dynamic actions must provide accessible status feedback, including:
- background job progress
Avoid relying on color alone.
## Settings recovery
Do not show editable defaults until Settings has loaded successfully. A failed
load offers a keyboard-accessible retry and announces the error. After retry,
focus moves to the first form field on success or back to Retry on failure.
Saving announces progress and temporarily disables the form to prevent duplicate
submissions and edits being overwritten by the save response. A failed save
keeps entered values available for correction or retry.