feat(FN-1862): add completion state tracking for onboarding

- Add markOnboardingCompleted() to set completedAt timestamp when user finishes onboarding
- Add isOnboardingCompleted() to check if onboarding was completed (vs dismissed)
- Update ModelOnboardingModal to call markOnboardingCompleted on successful completion
- Skip onboarding auto-open when already completed locally
- Add completion state tracking tests in ModelOnboardingModal.test.tsx
- Add model-onboarding-state unit tests
- Update useAuthOnboarding to check local completion state before auto-opening
- Document localStorage completion state tracking pattern in .fusion/memory.md
This commit is contained in:
Fusion
2026-04-14 23:44:40 -07:00
committed by gsxdsm
parent 6d685a542b
commit a51e75941c
49 changed files with 572 additions and 196 deletions

View File

@@ -63,10 +63,9 @@ export function useProjectFileEditor(
setOriginalContent(response.content);
setMtime(response.mtime);
}
} catch (err: unknown) {
} catch (err: any) {
if (!cancelled) {
const message = err instanceof Error ? err.message : String(err);
setError(message || "Failed to load file");
setError(err.message || "Failed to load file");
setContentState("");
setOriginalContent("");
setMtime(null);
@@ -99,9 +98,8 @@ export function useProjectFileEditor(
const response: SaveFileResponse = await saveWorkspaceFileContent("project", filePath, content);
setOriginalContent(content);
setMtime(response.mtime);
} catch (err: unknown) {
const message = err instanceof Error ? err.message : String(err);
setError(message || "Failed to save file");
} catch (err: any) {
setError(err.message || "Failed to save file");
throw err;
} finally {
setSaving(false);