Keep the Files modal focused on the selected file when users switch worktrees.
- Preserve selected file state during workspace changes and restore the sidebar to the file parent directory.\n- Keep mobile users in the editor pane when switching worktrees with an active file.\n- Cover desktop and mobile worktree-switch reload behavior in FileBrowserModal tests.\n- Add a patch changeset for the Files modal fix.\n\nFiles changed:\n .changeset/fn-7252-file-browser-worktree-reload.md | 7 +\n .../dashboard/app/components/FileBrowserModal.tsx | 21 ++-\n .../components/__tests__/FileBrowserModal.test.tsx | 153 +++++++++++++++++++++\n .../dashboard/app/hooks/useWorkspaceFileBrowser.ts | 4 +\n 4 files changed, 182 insertions(+), 3 deletions(-)
Fusion-Task-Id: FN-7252
Fusion-Task-Lineage: b791e3d7-6a68-48aa-aeb4-c826cec7f760
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
Parallel subagent pass: four typescript-pro agents on non-overlapping scopes.
Patterns applied:
- catch (err: any) { ... err.message ... } → catch (err) { ... getErrorMessage(err) ... }
using the new @fusion/core helper. Bare catch {} where the error was unused.
- SQLite row types: defined typed XxxRow interfaces per table and cast
.all()/.get() results via `as unknown as XxxRow[]` (the double cast is
required because better-sqlite3 returns Record<string, SQLOutputValue>).
- rowToX(row: any) converters: typed argument with the matching row interface.
- Dynamic settings key writes: (settings as Record<string, unknown>)[key].
- React event handlers and setState callbacks: inferred types or concrete
React.{Mouse,Change,Form}Event<...> where needed.
- pi-claude-cli: local PiMessage / PiContext duck types to avoid re-typing
pi-ai concrete shapes; typed Claude stream event message fields.
72 files changed, ~400 anys eliminated. Typecheck passes across the workspace.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- 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
- Add workspace file APIs and hooks for session-scoped file browsing
- Create WorkspaceSelector component for switching between workspaces
- Update FileBrowserModal with workspace mode and improved UX
- Add files button to header with workspace-aware file browsing
- Add session files indicator to task cards for quick file access
- Include comprehensive tests for all new components and hooks