Skip to content

Fix feature deep link with project path handling#834

Merged
gsxdsm merged 2 commits intoAutoMaker-Org:v1.0.0rcfrom
gsxdsm:fix/feature-deeplink-worktree
Mar 4, 2026
Merged

Fix feature deep link with project path handling#834
gsxdsm merged 2 commits intoAutoMaker-Org:v1.0.0rcfrom
gsxdsm:fix/feature-deeplink-worktree

Conversation

@gsxdsm
Copy link
Collaborator

@gsxdsm gsxdsm commented Mar 4, 2026

Summary

  • Cross-project deep links: Notification clicks (bell, notifications view, ntfy push) now pass projectPath as a URL param so clicking a link from a different project automatically switches to the correct project before opening the feature modal
  • Server-side deep link fix: event-hook-service.ts now always includes projectPath in ntfy click URLs (previously only set the path when featureId was present, silently dropping it for non-feature notifications)
  • Route schema: Added projectPath as an optional search param to the board route (board.tsx / board.lazy.tsx)
  • Deep link resilience: Worktree-switch effect now falls back to the React Query cache when the Zustand store hasn't been populated yet (avoids indefinite loading hangs on cold-start deep links), plus a 10-retry limit to prevent permanently stuck modals
  • startTransition wrapping: All setCurrentWorktree calls (deep link switching, board error recovery) are now wrapped in startTransition to batch Zustand store mutations with concurrent React updates — fixes React error fixing worktree style #185 cascades on mobile Safari/PWA
  • Mobile query storm prevention: AgentInfoPanel gains a two-layer mobile stagger system — random 0–6 s delay + a global concurrency slot limiter (max 4 simultaneous queries) — preventing the 60–100+ concurrent API calls that crash mobile Safari when switching to a worktree with many cards
  • Smart invalidation on mount: Mount-time invalidateQueries in AgentInfoPanel now only fires when cached data exists AND is stale (>10 s); on mobile it is skipped entirely since the staggered queries already fetch fresh data

Test plan

  • Click an ntfy/bell notification from a different project — confirm the app switches projects and opens the correct feature modal
  • Click an ntfy notification that has no featureId — confirm it still navigates to /board with the correct project
  • Cold-start deep link (navigate directly to ?featureId=xxx&projectPath=yyy in a fresh tab) — confirm it loads without hanging on the loading screen
  • Switch to a worktree with 50+ features on mobile — confirm no crash and cards load staggered
  • Switch worktrees rapidly — confirm no React error fixing worktree style #185 or white-screen crash
  • Board error boundary recovery (handleBoardRecover) — confirm board reloads cleanly without a secondary crash

Summary by CodeRabbit

  • New Features

    • Project-aware deep links: notifications, activity links, and board routes now include project context for accurate navigation.
    • Automatic project switching when opening board links with a project specified.
  • Improvements

    • Mobile performance: staggered, limited concurrent data fetching to reduce load and unnecessary reloads.
    • More robust deep-link handling and smoother UI updates when switching projects or worktrees.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Mar 4, 2026

Caution

Review failed

Pull request was closed or merged during review

📝 Walkthrough

Walkthrough

Deep-linking now consistently carries projectPath into board navigation and server ntfy hooks; BoardView accepts initialProjectPath and may initialize/switch projects before feature/worktree switching. AgentInfoPanel adds mobile mount-staggering and slot-based query gating to reduce concurrent mobile queries.

Changes

Cohort / File(s) Summary
Server deep-link handling
apps/server/src/services/event-hook-service.ts
Always set ntfy click URL pathname to /board and consistently append projectPath as a query parameter (still include featureId when present).
Notification & activity navigation
apps/ui/src/components/layout/project-switcher/components/notification-bell.tsx, apps/ui/src/components/views/notifications-view.tsx, apps/ui/src/components/views/overview/recent-activity-feed.tsx
Click handlers updated to include projectPath in the /board search params alongside featureId when present.
Board route & props
apps/ui/src/routes/board.tsx, apps/ui/src/routes/board.lazy.tsx
Board route schema accepts optional projectPath; board.lazy reads projectPath and passes it as initialProjectPath to BoardView.
BoardView deep-link/project switching
apps/ui/src/components/views/board-view.tsx
Added initialProjectPath prop; effect to initialize/upsert-and-set project (calls initializeProject and upsertAndSetCurrentProject) before feature/worktree switching; retry logic for resolving worktrees; use of startTransition to batch updates.
Mobile concurrency & query gating
apps/ui/src/components/views/board-view/components/kanban-card/agent-info-panel.tsx
Introduced mobile mount staggering (0–6s random delay), per-slot concurrency limit with acquire/release queue, mountReady/queryEnabled gating for queries, and adjusted invalidation behavior to avoid unnecessary reloads on mobile.

Sequence Diagram(s)

sequenceDiagram
    actor User
    participant Notification as Notification Bell
    participant Router as Router (/board)
    participant BoardView
    participant ProjectInit as initializeProject
    participant ProjectStore as Project Store
    participant BoardLogic as Worktree/Board Logic

    User->>Notification: Click (featureId + projectPath)
    Notification->>Router: Navigate to /board?featureId=...&projectPath=...
    Router->>BoardView: Render with initialFeatureId + initialProjectPath

    alt initialProjectPath differs from current
        BoardView->>ProjectInit: initializeProject(initialProjectPath)
        ProjectInit-->>BoardView: project data
        BoardView->>ProjectStore: upsertAndSetCurrentProject(path, name)
        ProjectStore-->>BoardView: currentProject updated
    end

    BoardView->>BoardLogic: Resolve worktrees (retry loop)
    BoardLogic->>BoardLogic: Select targetWorktree
    BoardView->>BoardLogic: Switch worktree (wrapped in startTransition)
    BoardLogic-->>User: Board shows feature in target project
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

  • PR #825: Modifies ntfy deep-link click-URL handling in event-hook-service.ts (server-side) and aligns with this PR's URL/query changes.
  • PR #795: Touches BoardView and introduces startTransition-based batching/worktree switching improvements related to this PR.
  • PR #644: Addresses deep-link project-open flow and project initialization/upsert behavior referenced by BoardView changes.

Suggested labels

Testers-Requested

Poem

🐰 I hopped through links and found a lane,
Project paths carried like morning rain,
Mobile cards wait their gentle turn,
Worktrees swap smooth — no need to burn,
Happy hops — the board's awake again! 🌿

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and specifically describes the main change: fixing feature deep linking with project path handling, which is the core objective across all modified files.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Warning

Review ran into problems

🔥 Problems

Git: Failed to clone repository. Please run the @coderabbitai full review command to re-trigger a full review. If the issue persists, set path_filters to include or exclude specific files.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request significantly improves the application's stability, performance, and user experience, particularly for deep linking and mobile usage. It introduces robust handling for deep links, ensuring seamless navigation across projects and features, even in cold-start scenarios. Critical performance bottlenecks on mobile devices, especially during worktree switches, have been addressed through query staggering and React concurrency optimizations. Furthermore, the PR enhances Git integration with better worktree management, including detection and resolution of orphaned features, and introduces server-side persistence for development server states. The agent output display is also upgraded to provide a comprehensive, accumulated summary for multi-step pipelines.

Highlights

  • Enhanced Deep Linking: Notification clicks now correctly switch projects and open feature modals, with server-side fixes ensuring projectPath is always included in ntfy URLs. Deep link resilience is improved with React Query cache fallback and a retry limit to prevent indefinite loading hangs.
  • Mobile Performance Optimizations: Implemented a two-layer staggering system for AgentInfoPanel queries on mobile (random delay + concurrency slot limiter) to prevent crashes from excessive API calls during worktree switches. React concurrency issues on mobile Safari/PWA are resolved by wrapping setCurrentWorktree calls in startTransition.
  • Orphaned Feature Management: New API endpoints and UI logic have been added for detecting and resolving features with missing Git branches, allowing users to delete, recreate worktrees, or move features to existing branches.
  • Pipeline Summary Accumulation: The server now accumulates summaries for each pipeline step, providing a complete chronological history in the UI. UI components are updated to display these multi-phase summaries with navigation between steps.
  • Improved Git Integration & Robustness: Extended the PATH environment variable for Git commands on the server to improve reliability. Worktree listing now includes logic to recover branch names for detached HEAD states (e.g., during rebase) and PR information handling is more robust.
  • Dev Server Persistence: Running development server states are now persisted across server restarts, allowing the application to re-attach to existing servers. Output throttling for dev server logs has also been improved.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Changelog
  • .geminiignore
    • Added new ignore patterns for Gemini CLI startup optimization.
  • .gitignore
    • Added new ignore patterns for test project directories.
  • apps/server/package.json
    • Updated the server version to 1.0.0.
  • apps/server/src/index.ts
    • Excluded the /api/auto-mode/context-exists endpoint from request logging.
    • Updated DevServerService initialization to be asynchronous and handle errors.
    • Passed featureLoader to createWorktreeRoutes.
  • apps/server/src/lib/git.ts
    • Extended the PATH environment variable for Git commands to improve discoverability in various environments.
  • apps/server/src/lib/settings-helpers.ts
    • Introduced resolveProviderContext for unified resolution of Claude-compatible providers and models, supporting explicit provider IDs and fallback lookups.
    • Added ProviderContextResult interface.
  • apps/server/src/providers/claude-provider.ts
    • Added a comment clarifying Claude models do not use provider prefixes.
  • apps/server/src/providers/codex-provider.ts
    • Updated validateBareModelId to allow codex- prefixed models.
  • apps/server/src/providers/copilot-provider.ts
    • Updated SdkToolExecutionEndEvent to SdkToolExecutionCompleteEvent with more detailed success/error data.
    • Added TOOL_ERROR_PREFIX constant for consistent error formatting.
  • apps/server/src/providers/cursor-provider.ts
    • Updated validateBareModelId to allow cursor- prefixed models and gemini- models for Cursor provider.
  • apps/server/src/providers/gemini-provider.ts
    • Updated validateBareModelId to allow gemini- prefixed models for Gemini provider.
  • apps/server/src/providers/mock-provider.ts
    • Added a new MockProvider for E2E and CI testing, providing no-op AI responses.
  • apps/server/src/providers/opencode-provider.ts
    • Improved formatModelDisplayName to handle nested model IDs and strip tier/pricing suffixes.
  • apps/server/src/providers/provider-factory.ts
    • Integrated MockProvider for E2E/CI testing when AUTOMAKER_MOCK_AGENT is enabled.
  • apps/server/src/routes/app-spec/generate-features-from-spec.ts
    • Passed settingsService to parseAndCreateFeatures to enable default model/planning settings.
  • apps/server/src/routes/app-spec/parse-and-create-features.ts
    • Implemented logic to load and apply default model, planning mode, and plan approval settings to newly created features.
  • apps/server/src/routes/backlog-plan/index.ts
    • Passed settingsService to createApplyHandler.
  • apps/server/src/routes/backlog-plan/routes/apply.ts
    • Applied default feature model and planning settings to features created from a backlog plan.
  • apps/server/src/routes/features/index.ts
    • Added new routes for listing, resolving, and bulk resolving orphaned features.
  • apps/server/src/routes/features/routes/list.ts
    • Passed features array to autoModeService.detectOrphanedFeatures to optimize orphaned feature detection.
  • apps/server/src/routes/features/routes/orphaned.ts
    • Added new file with handlers for detecting, resolving, and bulk resolving orphaned features.
  • apps/server/src/routes/features/routes/update.ts
    • Added a null check for currentFeature and returned 404 if not found.
  • apps/server/src/routes/fs/routes/read.ts
    • Expanded the list of OPTIONAL_FILES to include context-metadata.json and memory/context files.
    • Returned 404 status for missing optional files instead of 500.
  • apps/server/src/routes/fs/routes/stat.ts
    • Returned 404 status for ENOENT (file not found) errors.
  • apps/server/src/routes/github/routes/validate-issue.ts
    • Switched from getProviderByModelId to resolveProviderContext for model resolution.
    • Added providerId to ValidateIssueRequestBody and runValidation parameters.
  • apps/server/src/routes/setup/routes/verify-claude-auth.ts
    • Added a check for AUTOMAKER_MOCK_AGENT to skip real API calls in E2E/CI mock mode.
  • apps/server/src/routes/setup/routes/verify-codex-auth.ts
    • Added a check for AUTOMAKER_MOCK_AGENT to skip real API calls in E2E/CI mock mode.
  • apps/server/src/routes/worktree/index.ts
    • Passed featureLoader to createWorktreeRoutes and createDeleteHandler.
  • apps/server/src/routes/worktree/routes/delete.ts
    • Emitted worktree:deleted event after successful deletion.
    • Migrated features associated with the deleted branch to the main worktree to prevent them from becoming orphaned.
  • apps/server/src/routes/worktree/routes/init-git.ts
    • Improved Git repository initialization robustness by handling partial states and ensuring user config is set.
  • apps/server/src/routes/worktree/routes/list-branches.ts
    • Switched to execGitCommand for Git operations to improve sandboxed CI compatibility.
    • Improved remote branch fetching logic.
  • apps/server/src/routes/worktree/routes/list.ts
    • Enhanced worktree listing to recover branch names for detached HEAD states (e.g., during rebase).
    • Improved PR tracking precedence to respect manual overrides and sync GitHub data.
    • Added isSpawnENOENT check for graceful handling when Git is unavailable.
  • apps/server/src/routes/worktree/routes/pull.ts
    • Added remoteBranch option to performPull to allow pulling a specific remote branch regardless of tracking configuration.
  • apps/server/src/services/agent-executor-types.ts
    • Added status field to AgentExecutionOptions for pipeline summary extraction.
  • apps/server/src/services/agent-executor.ts
    • Implemented extractAndSaveSessionSummary to extract summaries from new session content, with a fallback for pipeline statuses.
    • Added stripFollowUpScaffold to remove follow-up session markers from content.
  • apps/server/src/services/auto-loop-coordinator.ts
    • Adjusted sleep intervals for better responsiveness and reduced CPU usage.
    • Added hasInProgressFeaturesForWorktree check to prevent premature auto_mode_idle events.
  • apps/server/src/services/auto-mode/compat.ts
    • Passed preloadedFeatures to detectOrphanedFeatures to avoid redundant disk reads.
  • apps/server/src/services/auto-mode/facade.ts
    • Added isFeatureEligibleForAutoMode helper function.
    • Updated createRunAgentFn to use resolveProviderContext and pass status and providerId to AgentExecutor.
  • apps/server/src/services/codex-model-cache-service.ts
    • Updated inferTier to include gpt-5.3-codex as a premium model.
  • apps/server/src/services/dev-server-service.ts
    • Implemented state persistence for running dev servers to dev-servers.json.
    • Improved output throttling from 4ms to 100ms to reduce browser slowdown.
    • Added startingServers set to prevent concurrent starts.
    • Gracefully re-attached to persisted servers on startup.
  • apps/server/src/services/event-hook-service.ts
    • Added ntfy action type for event hooks.
    • Implemented deep link handling for ntfy click URLs, ensuring projectPath and featureId are correctly appended.
  • apps/server/src/services/execution-service.ts
    • Updated buildFeaturePrompt to use buildFeatureDescription when planning mode is active.
    • Enforced worktree existence in worktree mode, throwing an error if not found.
    • Refined summary saving logic to prevent overwriting accumulated pipeline summaries.
  • apps/server/src/services/execution-types.ts
    • Added providerId to RunAgentFn options.
  • apps/server/src/services/feature-loader.ts
    • Ensured createdAt is set for new features, falling back to current timestamp if missing.
  • apps/server/src/services/feature-state-manager.ts
    • Refined task finalization logic for waiting_approval and verified statuses.
    • Implemented pipeline summary accumulation, normalizing existing summaries and appending new step summaries.
    • Added error notification handling for auto_mode_error and failed auto_mode_feature_complete events.
  • apps/server/src/services/ntfy-service.ts
    • Added new file implementing a service for sending push notifications via ntfy.sh, including variable substitution and authentication.
  • apps/server/src/services/pipeline-orchestrator.ts
    • Added mandatory summary requirement to pipeline step prompts.
    • Passed status and providerId to runAgentFn for pipeline step execution and test fixes.
  • apps/server/src/services/pull-service.ts
    • Added remoteBranch option to performPull to allow pulling a specific remote branch.
    • Adjusted upstream status check to be skipped when remoteBranch is provided.
  • apps/server/src/services/settings-service.ts
    • Added wipe protection for ntfyEndpoints to prevent accidental deletion.
    • Implemented migration logic for ntfyEndpoints from local storage.
  • apps/server/src/services/spec-parser.ts
    • Enhanced detectTaskCompleteMarker to extract task summary in addition to ID.
    • Improved extractSummary to include ### subsections within the summary and correctly handle ## headers.
  • apps/server/src/services/worktree-resolver.ts
    • Added normalizeBranchName helper to handle various branch name formats.
  • apps/server/tests/unit/lib/file-editor-store-logic.test.ts
    • Added new file with unit tests for file editor dirty state logic.
  • apps/server/tests/unit/lib/settings-helpers.test.ts
    • Added comprehensive unit tests for resolveProviderContext, getProviderById, getProviderByModelId, and getAllProviderModels.
  • apps/server/tests/unit/providers/codex-provider.test.ts
    • Added unit tests for validateBareModelId integration with Codex provider.
  • apps/server/tests/unit/providers/copilot-provider.test.ts
    • Updated unit tests to reflect changes in SdkToolExecutionCompleteEvent and error formatting.
  • apps/server/tests/unit/providers/cursor-provider.test.ts
    • Added unit tests for Cursor Gemini models support and validateBareModelId integration.
  • apps/server/tests/unit/providers/gemini-provider.test.ts
    • Added unit tests for validateBareModelId integration with Gemini provider.
  • apps/server/tests/unit/routes/app-spec/parse-and-create-features-defaults.test.ts
    • Added new file with unit tests for default fields in parseAndCreateFeatures.
  • apps/server/tests/unit/routes/backlog-plan/apply.test.ts
    • Added new file with unit tests for createApplyHandler applying default model and planning settings.
  • apps/server/tests/unit/routes/running-agents.test.ts
    • Updated unit tests to include model and provider information for running agents.
  • apps/server/tests/unit/routes/worktree/list-detached-head.test.ts
    • Added new file with unit tests for worktree list endpoint handling of detached HEAD state and PR tracking precedence.
  • apps/server/tests/unit/services/agent-executor-summary.test.ts
    • Added new file with unit tests for AgentExecutor summary extraction and pipeline summary fallback.
  • apps/server/tests/unit/services/agent-executor.test.ts
    • Added unit tests for passing claudeCompatibleProvider to executeQuery options.
    • Added unit tests for pipeline summary fallback with scaffold stripping.
  • apps/server/tests/unit/services/auto-loop-coordinator.test.ts
    • Added unit tests for auto_mode_idle emission timing, including handling of in_progress features.
  • apps/server/tests/unit/services/auto-mode-facade.test.ts
    • Added new file with unit tests for AutoModeServiceFacade agent runner, focusing on provider resolution and passthrough.
  • apps/server/tests/unit/services/dev-server-event-types.test.ts
    • Added new file with unit tests for DevServerService event types.
  • apps/server/tests/unit/services/dev-server-persistence.test.ts
    • Added new file with unit tests for DevServerService persistence and state synchronization.
  • apps/server/tests/unit/services/event-hook-service.test.ts
    • Added comprehensive unit tests for ntfy hook execution, including variable substitution, authentication, and deep link handling.
  • apps/server/tests/unit/services/execution-service.test.ts
    • Added unit tests for passing providerId to runAgentFn.
    • Updated unit tests for worktree resolution in worktree mode.
    • Added unit tests for summary saving logic, ensuring accumulated summaries are preserved.
  • apps/server/tests/unit/services/feature-state-manager.test.ts
    • Added unit tests for feature title as notification title.
    • Updated unit tests for markFeatureInterrupted to preserve pipeline statuses.
    • Added extensive unit tests for pipeline summary accumulation, including normalization, replacement, and fallback scenarios.
    • Added unit tests for handleAutoModeEventError and destroy method.
  • apps/server/tests/unit/services/ntfy-service.test.ts
    • Added new file with comprehensive unit tests for NtfyService functionality.
  • apps/server/tests/unit/services/pipeline-orchestrator-prompts.test.ts
    • Added new file with unit tests for pipeline orchestrator prompts, ensuring mandatory summary requirements.
  • apps/server/tests/unit/services/pipeline-orchestrator-provider-id.test.ts
    • Added new file with unit tests for PipelineOrchestrator providerId passthrough.
  • apps/server/tests/unit/services/pipeline-orchestrator-status-provider.test.ts
    • Added new file with unit tests for PipelineOrchestrator status and providerId coexistence.
  • apps/server/tests/unit/services/pipeline-summary-accumulation.test.ts
    • Added new file with integration tests for pipeline summary accumulation.
  • apps/server/tests/unit/services/settings-service.test.ts
    • Added unit tests for ntfyEndpoints wipe protection and migration from local storage.
  • apps/server/tests/unit/services/spec-parser.test.ts
    • Updated unit tests for detectTaskCompleteMarker to include summary extraction and handle various text formats.
    • Added unit tests for extractSummary to include ### subsections.
  • apps/server/tests/unit/services/worktree-resolver.test.ts
    • Added unit tests for branch name normalization in findWorktreeForBranch.
  • apps/server/tests/unit/types/pipeline-types.test.ts
    • Added new file with unit tests for isPipelineStatus helper function.
  • apps/server/tests/unit/ui/agent-output-summary-e2e.test.ts
    • Added new file with end-to-end integration tests for agent output summary display flow.
  • apps/server/tests/unit/ui/agent-output-summary-priority.test.ts
    • Added new file with unit tests for agent output summary priority logic.
  • apps/server/tests/unit/ui/log-parser-mixed-format.test.ts
    • Added new file with unit tests for log-parser mixed summary format compatibility.
  • apps/server/tests/unit/ui/log-parser-phase-summary.test.ts
    • Added new file with unit tests for log-parser phase summary parsing functions.
  • apps/server/tests/unit/ui/log-parser-summary.test.ts
    • Added new file with unit tests for UI's extractSummary function.
  • apps/server/tests/unit/ui/summary-auto-scroll.test.ts
    • Added new file with unit tests for summary auto-scroll detection logic.
  • apps/server/tests/unit/ui/summary-normalization.test.ts
    • Added new file with unit tests for summary normalization between UI components and parser functions.
  • apps/server/tests/unit/ui/summary-source-flow.integration.test.ts
    • Added new file with integration tests for summary source flow.
  • apps/ui/.gitignore
    • Added /tests/.auth/ to .gitignore.
  • apps/ui/package.json
    • Updated UI version to 1.0.0.
    • Added desktopName field.
    • Added @testing-library/* and jsdom dev dependencies.
  • apps/ui/playwright.config.ts
    • Updated Playwright configuration for parallelism (multiple workers).
    • Configured global setup/teardown for authentication state reuse.
    • Extended PATH for E2E server to find Git.
    • Increased Node.js memory limit for server.
    • Cleared VITE_SERVER_URL to ensure Vite proxy usage.
  • apps/ui/scripts/kill-test-servers.mjs
    • Updated USE_EXTERNAL_SERVER logic to match Playwright config semantics.
  • apps/ui/scripts/rpm-after-install.sh
    • Added new script for RPM post-install actions (chmod chrome-sandbox, update icon cache, update desktop database).
  • apps/ui/scripts/setup-e2e-fixtures.mjs
    • Added creation of .automaker/context directory and context-metadata.json for E2E tests.
  • apps/ui/src/components/dialogs/board-background-modal.tsx
    • Adjusted padding for safe area in SheetHeader.
  • apps/ui/src/components/dialogs/file-browser-dialog.tsx
    • Added addRecentFolder to the dependency array of useEffect.
  • apps/ui/src/components/dialogs/pr-comment-resolution-dialog.tsx
    • Added url to PRCommentResolutionPRInfo interface.
    • Normalized model entry before feature creation.
    • Added providerId, planningMode, requirePlanApproval, dependencies, and prUrl to feature creation data.
  • apps/ui/src/components/layout/project-switcher/components/notification-bell.tsx
    • Implemented deep link navigation for notifications, including featureId and projectPath query parameters.
    • Added AlertCircle icon for error notifications.
  • apps/ui/src/components/layout/sidebar/components/project-selector-with-options.tsx
    • Changed project initialization to a fire-and-forget background task wrapped in startTransition to avoid blocking UI and prevent synchronous render cascades.
  • apps/ui/src/components/layout/sidebar/hooks/use-navigation.ts
    • Removed projects.length from the dependency array of useNavigation.
  • apps/ui/src/components/session-manager.tsx
    • Fixed a race condition in session selection by selecting the new session immediately before invalidating the cache.
  • apps/ui/src/components/shared/model-override-trigger.tsx
    • Added providerId to the model comparison logic to correctly detect overrides.
  • apps/ui/src/components/ui/description-image-dropzone.tsx
    • Added setPreviewImages to the dependency array of removeImage.
  • apps/ui/src/components/ui/git-diff-panel.tsx
    • Memoized the files array to prevent unnecessary re-renders.
    • Removed projectPath from the dependency arrays of handleStageAll and handleUnstageAll.
  • apps/ui/src/components/ui/header-actions-panel.tsx
    • Added data-testid to the header actions panel trigger.
  • apps/ui/src/components/ui/sheet.tsx
    • Adjusted close button position for safe area insets.
  • apps/ui/src/components/ui/spinner.tsx
    • Added data-testid to the spinner component.
  • apps/ui/src/components/ui/xterm-log-viewer.tsx
    • Added eslint-disable-next-line for useEffect dependencies to prevent re-initialization.
  • apps/ui/src/components/views/agent-view/components/agent-header.tsx
    • Adjusted layout and styling for better responsiveness on mobile devices.
  • apps/ui/src/components/views/board-view.tsx
    • Implemented deep link handling for initialProjectPath and initialFeatureId, including project switching and worktree resolution.
    • Used startTransition for setCurrentWorktree calls to prevent React error fixing worktree style #185 cascades.
    • Optimized runningAutoTasksAllWorktrees selector for better performance.
    • Updated handleAddAndStartFeature to return the created feature ID.
    • Added stopFeature to useBoardActions and useBoardColumnFeatures.
    • Updated handleBoardRecover to use startTransition.
    • Added prUrl handling for features created from PR comments.
  • apps/ui/src/components/views/board-view/components/kanban-card/agent-info-panel.tsx
    • Implemented a two-layer mobile query staggering system (random delay + concurrency slot limiter) to prevent crashes.
    • Optimized mount-time query invalidation to prevent query storms.
    • Updated summary display logic to prefer fresh feature summary.
    • Added claudeCompatibleProviders to model format options.
    • Added task summary display to effective todos.
  • apps/ui/src/components/views/board-view/components/kanban-card/card-actions.tsx
    • Added merge conflict status handling for 'Make' button to show 'Restart'.
    • Added a 'View Logs' button for backlog and merge conflict cards when context is available.
  • apps/ui/src/components/views/board-view/components/kanban-card/card-badges.tsx
    • Added a merge conflict badge (AlertTriangle) and a plan approval badge (FileCheck).
  • apps/ui/src/components/views/board-view/components/kanban-card/card-header.tsx
    • Added hasContext prop.
    • Added claudeCompatibleProviders to model format options.
    • Added a 'Logs' button for backlog and merge conflict cards.
  • apps/ui/src/components/views/board-view/components/kanban-card/kanban-card.tsx
    • Updated logic to include merge_conflict status for running tasks and selectable cards.
  • apps/ui/src/components/views/board-view/components/kanban-card/summary-dialog.tsx
    • Refactored SummaryDialog to support multi-phase summaries with a step navigator.
    • Added a view mode toggle for 'Summary' and 'Output' (raw logs).
    • Integrated LogViewer for raw output display.
    • Added projectPath prop.
  • apps/ui/src/components/views/board-view/components/list-view/list-row.tsx
    • Added a plan approval badge (FileCheck).
    • Improved createdAt sorting to fallback to timestamp in feature ID if createdAt is missing.
  • apps/ui/src/components/views/board-view/components/list-view/list-view.tsx
    • Added sortNewestCardOnTop prop to override sorting and display newest cards first.
Ignored Files
  • Ignored by pattern: .github/workflows/** (1)
    • .github/workflows/e2e-tests.yml
Activity
  • The pull request was created by gsxdsm. The description provides a detailed summary of the changes and a test plan, indicating a thorough approach to development and testing. There is no human activity (comments, reviews) mentioned in the provided context.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This is an impressive and substantial pull request that delivers significant improvements across the board. The core goal of fixing cross-project deep linking is well-executed, with robust server-side logic for ntfy URLs and resilient client-side handling that accounts for project switching and potential race conditions. The performance enhancements, particularly the clever query staggering on mobile to prevent crashes, are excellent. Furthermore, the backend has been considerably hardened with more reliable git command execution, persistent state for dev servers, and better error handling. The addition of features like orphaned worktree management and accumulated pipeline summaries demonstrates a deep consideration for user experience and data integrity. The code quality is high, and the extensive new tests provide confidence in these complex changes.

Note: Security Review did not run due to the size of the PR.

@gsxdsm gsxdsm changed the base branch from v1.0.0 to v1.0.0rc March 4, 2026 17:41
@gsxdsm
Copy link
Collaborator Author

gsxdsm commented Mar 4, 2026

@coderabbitai review

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Mar 4, 2026

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@apps/ui/src/components/views/board-view.tsx`:
- Around line 345-346: The current projectName extraction uses
initialProjectPath.split('/') which fails on Windows paths; update the
assignment for projectName to split on both forward and backward slashes (e.g.
use initialProjectPath.split(/[\\/]/).filter(Boolean).pop() ||
initialProjectPath) so it correctly returns the basename on all platforms,
keeping the existing fallback; locate the assignment of projectName in
board-view.tsx and replace the '/' split logic accordingly.

In
`@apps/ui/src/components/views/board-view/components/kanban-card/agent-info-panel.tsx`:
- Around line 167-189: The effect uses mountReady initialized with
isActivelyRunning but doesn’t react to later changes of isActivelyRunning, so
add isActivelyRunning to the useEffect dependency list and handle the case where
isActivelyRunning turns true: if isActivelyRunning becomes true, cancel any
pending timeout/timer and immediately call setMountReady(true), ensuring any
acquired slot is released (use releaseMobileQuerySlot if a slot was held or
avoid acquiring one). Update logic around
acquireMobileQuerySlot/releaseMobileQuerySlot and the timer so changing
isActivelyRunning mid-stagger bypasses the delay and cleans up resources.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: b1cb3871-3997-4fce-b6b7-497425488ea1

📥 Commits

Reviewing files that changed from the base of the PR and between 20e7c74 and ceee391.

📒 Files selected for processing (8)
  • apps/server/src/services/event-hook-service.ts
  • apps/ui/src/components/layout/project-switcher/components/notification-bell.tsx
  • apps/ui/src/components/views/board-view.tsx
  • apps/ui/src/components/views/board-view/components/kanban-card/agent-info-panel.tsx
  • apps/ui/src/components/views/notifications-view.tsx
  • apps/ui/src/components/views/overview/recent-activity-feed.tsx
  • apps/ui/src/routes/board.lazy.tsx
  • apps/ui/src/routes/board.tsx

Comment on lines +167 to +189
const [mountReady, setMountReady] = useState(!isMobileDevice || !!isActivelyRunning);
useEffect(() => {
if (mountReady) return;
let cancelled = false;
const delay = Math.random() * MOBILE_STAGGER_WINDOW_MS;
const timer = setTimeout(() => {
// After the random delay, also wait for a concurrency slot
acquireMobileQuerySlot().then(() => {
if (!cancelled) {
setMountReady(true);
// Release the slot after a brief window to let the initial queries fire
// and return, preventing all slots from being held indefinitely
setTimeout(releaseMobileQuerySlot, 3000);
} else {
releaseMobileQuerySlot();
}
});
}, delay);
return () => {
cancelled = true;
clearTimeout(timer);
};
}, [mountReady]);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

isActivelyRunning changes after mount won't bypass the stagger delay.

The initial mountReady state captures isActivelyRunning at mount time, but subsequent changes to this prop won't short-circuit the stagger since isActivelyRunning isn't in the effect's dependency array.

Edge case: if a feature transitions to in_progress while its panel is still waiting in the stagger queue, the user won't see real-time updates until the random delay + slot acquisition completes (up to ~9 seconds worst case).

This is likely acceptable given the rarity of this scenario and the complexity of adding reactivity, but worth documenting if users report delayed updates on actively running features after a worktree switch.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@apps/ui/src/components/views/board-view/components/kanban-card/agent-info-panel.tsx`
around lines 167 - 189, The effect uses mountReady initialized with
isActivelyRunning but doesn’t react to later changes of isActivelyRunning, so
add isActivelyRunning to the useEffect dependency list and handle the case where
isActivelyRunning turns true: if isActivelyRunning becomes true, cancel any
pending timeout/timer and immediately call setMountReady(true), ensuring any
acquired slot is released (use releaseMobileQuerySlot if a slot was held or
avoid acquiring one). Update logic around
acquireMobileQuerySlot/releaseMobileQuerySlot and the timer so changing
isActivelyRunning mid-stagger bypasses the delay and cleans up resources.

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
@gsxdsm gsxdsm merged commit 26b73df into AutoMaker-Org:v1.0.0rc Mar 4, 2026
5 of 6 checks passed
@gsxdsm gsxdsm deleted the fix/feature-deeplink-worktree branch March 4, 2026 18:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant