Commit Graph

2149 Commits

Author SHA1 Message Date
gsxdsm
3a5a3f2035 FN-5919: restore hidden usage toggle counts
Keep the usage indicator's Show hidden action available when persisted hidden rows no longer render.

- count hidden usage rows from both rendered windows and orphaned persisted labels
- preserve Show hidden visibility on mobile modal and desktop popover surfaces
- add regression coverage for orphaned hidden labels across both UI surfaces

Files changed:
 packages/dashboard/app/components/UsageIndicator.tsx  | 22 ++++++-
 packages/dashboard/app/components/__tests__/UsageIndicator.test.tsx | 75 ++++++++++++++++++++++
 2 files changed, 96 insertions(+), 1 deletion(-)

Fusion-Task-Id: FN-5919

Fusion-Task-Lineage: 6e4827a6-0d6f-424d-a4df-ec7185adf841
2026-06-02 22:07:32 -07:00
gsxdsm
bddc876d10 Fix tests 2026-06-02 21:10:00 -07:00
gsxdsm
6d3a077539 FN-5912: separate planning summary button loading states
Keep planning summary actions responsive with operation-specific loading indicators.

- pass separate single-task and breakdown loading flags into the planning summary view
- show the Creating spinner only on Create Single Task and the Breaking down spinner only on Break into Tasks while keeping the sibling action disabled
- add regression coverage for both pending-action paths and normalize the restart integration test temp worktree root under /private/tmp

Files changed:
 .../dashboard/app/components/PlanningModeModal.tsx |  14 ++-
 .../PlanningModeModal.planning-flow.test.tsx       | 138 +++++++++++++++++++++
 .../src/__tests__/restart.integration.test.ts      |   7 +-
 3 files changed, 151 insertions(+), 8 deletions(-)

Fusion-Task-Id: FN-5912

Fusion-Task-Lineage: b93da566-0c2b-4ff8-83ea-b6e009dfd650
2026-06-02 20:47:42 -07:00
gsxdsm
a411b8a7e0 FN-5914: fix mission activity counts and chronology
Keep mission activity counts accurate before event data loads and show events in chronological order.

- add persisted mission event counts to core mission summaries and dashboard mission summary types
- use the summary event count for the Activity tab preload badge instead of the currently loaded page total
- render mission activity oldest-to-newest, keep load-more prepends stable, and scroll to the latest event on initial/live updates
- extend mission store, dashboard, and MissionManager tests for event count and ordering coverage

Files changed:
 packages/core/src/__tests__/mission-store.test.ts  |  19 ++++
 packages/core/src/mission-store.ts                 |  24 ++++-
 packages/dashboard/app/api/legacy.ts               |   2 +
 .../dashboard/app/components/MissionManager.tsx    |  19 ++--
 .../components/__tests__/MissionManager.test.tsx   | 107 ++++++++++++++++-----
 packages/dashboard/app/components/mission-types.ts |   1 +
 .../dashboard/src/__tests__/mission-e2e.test.ts    |   7 +-
 7 files changed, 143 insertions(+), 36 deletions(-)

Fusion-Task-Id: FN-5914

Fusion-Task-Lineage: b3119e94-66bd-437d-bcde-d5e4e43cb29e
2026-06-02 19:28:01 -07:00
gsxdsm
0041962309 FN-5915: show unread badge on header mailbox
Add unread mailbox status to the desktop header toggle while keeping pending approvals prioritized.

- show an unread status dot on the desktop header mailbox toggle when unread mail exists without pending approvals
- keep pending-approval indicators taking precedence and hide mailbox indicators while the mailbox view is active
- extend Header coverage for unread-only, pending-only, combined, zero-count, and active-mailbox states
- update restart integration coverage to reuse an existing worktree during orphaned resume concurrency

Files changed:
 docs/dashboard-guide.md                            |  2 +-
 packages/dashboard/app/components/Header.tsx       |  9 +++++--
 .../app/components/__tests__/Header.test.tsx       | 26 ++++++++++++++++---
 .../src/__tests__/restart.integration.test.ts      | 29 ++++++++++++++++++++--
 4 files changed, 58 insertions(+), 8 deletions(-)

Fusion-Task-Id: FN-5915

Fusion-Task-Lineage: 3a207e2c-ca58-402f-94cf-3a9e514fe263
2026-06-02 19:19:33 -07:00
gsxdsm
6d2a08d7d7 FN-5910: fix skills toggle mobile anchoring
Keep the Skills view toggle anchored correctly after skill enablement on mobile and desktop.

- add relative positioning to the Skills view toggle wrapper so the hidden input stays aligned with its label
- expand the CSS regression test to verify the hidden input anchoring contract and checked-toggle geometry selectors

Files changed:
 packages/dashboard/app/components/SkillsView.css   |  1 +
 .../components/__tests__/SkillsView.css.test.ts    | 30 +++++++++++++++++++---
 2 files changed, 28 insertions(+), 3 deletions(-)

Fusion-Task-Id: FN-5910

Fusion-Task-Lineage: d5988ddb-febe-4319-bfef-d0dbc37909ba
2026-06-02 19:10:50 -07:00
gsxdsm
38b84a36f4 FN-5908: recover planning sessions after load failures
Keep failed planning session resumes recoverable instead of dead-ending in the empty planner.

- route errored persisted planning sessions into the retryable error view during session restore
- preserve the session id and surface load/parsing errors through Retry/Dismiss recovery instead of a generic load failure reset
- add planning modal coverage for errored sidebar sessions, malformed persisted results, reopen resync, retry reuse, and missing-session fallback behavior

Files changed:
 .changeset/fair-lizards-jump.md                    |   5 +
 .../dashboard/app/components/PlanningModeModal.tsx |  27 +-
 .../PlanningModeModal.planning-flow.test.tsx       | 284 ++++++++++++++++++++-
 3 files changed, 305 insertions(+), 11 deletions(-)

Fusion-Task-Id: FN-5908

Fusion-Task-Lineage: 6904c223-562d-45c5-8965-71b5b90dcbe9
2026-06-02 18:58:48 -07:00
gsxdsm
5c4c765134 FN-5904: feat(FN-5904): add browse-and-install flow for skills.sh catalog in Skills view
Add end-to-end browse-and-install flow for skills.sh catalog entries in the dashboard Skills view, enabling users to install skills directly from the catalog UI.

- Add POST /api/skills/install route with source validation and scoped project cwd
- Add installSkill method to SkillsAdapter using supervised npx skills add spawn
- Add installSkill client API function and Install button on catalog cards
- Refresh discovered skills list automatically after successful install
- Handle install errors with structured error codes (invalid_source, install_failed, install_timeout, spawn_error)
- Add card header layout with install button, disabled state, and loading spinner
- Add comprehensive tests: adapter unit tests, route integration tests, component tests
- Add changeset for @runfusion/fusion minor bump
- Update dashboard-guide.md with install endpoint documentation

Files changed:
 .changeset/four-oranges-film.md                    |   5 +
 docs/dashboard-guide.md                            |  45 +++++++
 packages/dashboard/app/__tests__/api-skills.test.ts |  46 +++++++
 packages/dashboard/app/api/legacy.ts               |  12 ++
 packages/dashboard/app/components/SkillsView.css   |  16 +++
 packages/dashboard/app/components/SkillsView.tsx   |  83 +++++++++---
 packages/dashboard/app/components/__tests__/SkillsView.test.tsx |  72 +++++++++++
 packages/dashboard/src/__tests__/routes-skills.test.ts |  67 ++++++++++
 packages/dashboard/src/__tests__/skills-adapter.test.ts | 113 ++++++++++++++++
 packages/dashboard/src/routes/__tests__/register-agent-skills-routes.test.ts | 144 +++++++++++++++++++++
 packages/dashboard/src/routes/register-agent-skills-routes.ts |  51 ++++++++
 packages/dashboard/src/skills-adapter.ts           | 103 +++++++++++++++
 12 files changed, 736 insertions(+), 21 deletions(-)

Fusion-Task-Id: FN-5904

Fusion-Task-Lineage: 338d53e3-baba-4c6c-9173-8e214242403c
2026-06-02 18:29:53 -07:00
gsxdsm
577ce12a18 FN-5898: add unlinked mission goal indicator
Document the manual no-backfill mission-goal policy and flag active missions that still need explicit goal links.

- document the mission→goal linkage model, explicit no-backfill decision, and manual linkage workflow in missions docs
- include linkedGoalCount in mission summaries and cover single-summary/batched-summary behavior in MissionStore tests
- show an Unlinked badge for active non-interview missions with zero linked goals and add MissionManager coverage

Files changed:
 .changeset/fn-5898-mission-goal-unlinked-indicator.md     |  5 ++
 docs/missions.md                                   | 18 ++++--
 packages/core/src/__tests__/mission-store.test.ts  | 32 +++++++++-
 packages/core/src/mission-store.ts                 | 25 +++++++-
 packages/dashboard/app/components/MissionManager.css    |  6 ++
 packages/dashboard/app/components/MissionManager.tsx    | 14 ++++
 packages/dashboard/app/components/__tests__/MissionManager.test.tsx   | 74 ++++++++++++++++++++++
 packages/dashboard/app/components/mission-types.ts |  1 +
 8 files changed, 166 insertions(+), 9 deletions(-)

Fusion-Task-Id: FN-5898

Fusion-Task-Lineage: e31e9544-4e03-4b52-afbb-e372314b997e
2026-06-02 18:15:14 -07:00
gsxdsm
cc18206bc5 FN-5902: make mission validation AI-run all criteria
Route every mission feature through validator-backed completion checks.

- lazily restore a managed feature assertion before validation instead of auto-passing zero-assertion features
- thread milestone acceptance criteria into validator prompts and system instructions as enforced requirements
- update MissionManager copy/tests to present criteria as AI-validated runtime gates and remove informational-only/zero-assertion warnings
- document the all-criteria AI-run contract and add a changeset for @runfusion/fusion

Files changed:
 .changeset/fn-5902-mission-validation-ai-run.md    |   5 +
 AGENTS.md                                          |   2 +-
 docs/architecture.md                               |   2 +-
 docs/missions-completion-contract.md               | 198 ++++++---------------
 docs/missions.md                                   |   5 +-
 packages/core/src/__tests__/mission-store.test.ts  |  23 ++-
 packages/core/src/mission-store.ts                 |  10 ++
 packages/dashboard/app/components/MissionManager.css    |  31 ----
 packages/dashboard/app/components/MissionManager.tsx    |  86 +++------
 packages/dashboard/app/components/__tests__/MissionManager.test.tsx   |  60 +++++--
 packages/engine/src/__tests__/mission-execution-loop.test.ts   | 111 +++++++++---
 packages/engine/src/__tests__/reliability-interactions/mission-validation-trigger-gap.test.ts         |  57 +++---
 packages/engine/src/mission-execution-loop.ts      |  78 ++++----
 13 files changed, 318 insertions(+), 350 deletions(-)

Fusion-Task-Id: FN-5902

Fusion-Task-Lineage: 5f25caad-33c9-42ff-822b-1ea092afc29f
2026-06-02 18:11:26 -07:00
gsxdsm
abbeaec0a8 FN-5897: surface linked goals in mission read paths
Expose mission-linked goals across mission detail surfaces.

- load linked goal records into mission hierarchy reads in core and return them from the mission detail API
- show linked goals in mission detail views, add goal-chip navigation, and anchor highlighted goal cards in GoalsView
- extend CLI mission output, docs, tests, and add a published changeset for the new read-path support

Files changed:
 .changeset/fn-5897-linked-goals-read-paths.md      |  5 +++
 docs/missions.md                                   |  6 ++-
 packages/cli/src/__tests__/extension.test.ts       | 48 +++++++++++++++++++++-
 packages/cli/src/extension.ts                      | 10 +++++
 packages/core/src/__tests__/mission-store.test.ts  | 14 +++++++
 packages/core/src/mission-store.ts                 | 29 +++++++++++++
 packages/core/src/mission-types.ts                 |  4 ++
 packages/dashboard/app/App.tsx                     | 16 +++++++-
 packages/dashboard/app/components/GoalsView.css    |  6 +++
 packages/dashboard/app/components/GoalsView.tsx    | 42 +++++++++++++++++--
 packages/dashboard/app/components/MissionManager.css | 44 ++++++++++++++++++++
 packages/dashboard/app/components/MissionManager.tsx | 31 +++++++++++++-
 packages/dashboard/app/components/__tests__/GoalsView.test.tsx | 31 ++++++++++++++
 packages/dashboard/app/components/__tests__/MissionManager.test.tsx | 45 ++++++++++++++++++++
 packages/dashboard/app/components/mission-types.ts |  2 +
 packages/dashboard/src/__tests__/mission-e2e.test.ts |  4 ++
 packages/dashboard/src/mission-routes.ts           |  5 ++-
 17 files changed, 332 insertions(+), 10 deletions(-)

Fusion-Task-Id: FN-5897

Fusion-Task-Lineage: 5176270d-9885-447a-845b-4e0d69d531a0
2026-06-02 17:58:41 -07:00
gsxdsm
32f8cac284 FN-5903: fix SkillsView mobile row wrapping
Keep mobile discovered-skill rows aligned after toggles and skill enablement.

- keep .skills-view-item rows from wrapping at the mobile breakpoint
- let .skills-view-item-info flex instead of forcing full-width stacking
- add CSS regression coverage for the mobile row layout and toggle geometry
- add component coverage that preserves row structure across enabled and disabled toggle states

Files changed:
 packages/dashboard/app/components/SkillsView.css   |  5 ++-
 .../components/__tests__/SkillsView.css.test.ts    | 49 ++++++++++++++++++++++
 .../app/components/__tests__/SkillsView.test.tsx   | 47 +++++++++++++++++++++
 .../__tests__/skills-view-mobile.test.tsx          |  9 ++--
 4 files changed, 104 insertions(+), 6 deletions(-)

Fusion-Task-Id: FN-5903

Fusion-Task-Lineage: 1004a702-28e7-4e7e-af22-591cc122be01
2026-06-02 16:11:42 -07:00
gsxdsm
8d9bbc1906 FN-5895: fix MissionManager interview resume behavior
Keep MissionManager mission interview state and detail rendering in sync while stabilizing the failing test coverage.

- reload assertion-linked feature data when mission details or milestone panels load
- keep selected mission detail state synchronized after mission update events instead of forcing a full mission reload
- hide the sidebar edit form while the selected mission is already being edited in the detail pane
- add a non-destructive Send to background action for resume-launched mission interview modals
- tighten MissionManager tests to target the detail pane and slice-scoped controls that now render alongside sidebar content

Files changed:
docs/missions.md                                   |  2 +-
 .../app/components/MissionInterviewModal.tsx       | 30 ++++++++
 .../dashboard/app/components/MissionManager.tsx    | 77 +++++++++++--------
 .../components/__tests__/MissionManager.test.tsx   | 88 +++++++++++++++-------
 4 files changed, 137 insertions(+), 60 deletions(-)

Fusion-Task-Id: FN-5895

Fusion-Task-Lineage: d018a945-33a7-4471-9636-35bc36dc88a9
2026-06-02 14:30:35 -07:00
gsxdsm
b95e7f7575 FN-5894: share project data-boundary and status helpers
Centralize project loading and status-state handling across dashboard surfaces.

- add a reusable DataBoundary component for loading, empty, error, and loaded states
- extract shared project status config helpers for labels, colors, icons, and initializing detection
- update project overview, cards, badges, and selector UI to use the shared helpers
- add regression coverage for data-boundary behavior, project overview empty/loading transitions, and status config fallbacks

Files changed:
 packages/dashboard/app/components/DataBoundary.tsx | 64 ++++++++++++++++++++++
 packages/dashboard/app/components/ProjectCard.tsx  | 48 ++--------------
 .../app/components/ProjectHealthBadge.tsx          | 45 +--------------
 .../dashboard/app/components/ProjectOverview.tsx   |  4 +-
 .../dashboard/app/components/ProjectSelector.tsx   | 27 +--------
 .../app/components/__tests__/DataBoundary.test.tsx | 62 +++++++++++++++++++++
 .../components/__tests__/ProjectOverview.test.tsx  | 25 +++++++++
 .../__tests__/ProjectThemeTokens.test.tsx          | 37 ++++---------
 .../utils/__tests__/projectStatusConfig.test.ts    | 53 ++++++++++++++++++
 .../dashboard/app/utils/projectStatusConfig.ts     | 50 +++++++++++++++++
 packages/dashboard/vitest.config.ts                |  2 +
 11 files changed, 282 insertions(+), 135 deletions(-)

Fusion-Task-Id: FN-5894

Fusion-Task-Lineage: 3626a4af-b62b-456d-82d7-cf47bbf55c21
2026-06-02 14:14:24 -07:00
gsxdsm
dab1569ac3 FN-5892: dedupe planning sessions and persist history deletion
Prevent duplicate planning-history rows and keep deletions visible only after the backend confirms persistence.

- dedupe Planning Mode history by session id across initial loads, live updates, archive toggles, and draft creation
- make deleteAiSession surface backend/content-type errors instead of silently succeeding on failed deletes
- keep failed history deletions visible, refresh the list, and show an error toast when persistence fails
- add dashboard tests covering session deduplication, delete API failures, and persistence-aware Planning Mode deletion behavior
- document the history dedupe/delete semantics and add a patch changeset for @runfusion/fusion

Files changed:
 .changeset/fn-5892-planning-history-fix.md         |   5 +
 docs/dashboard-guide.md                            |   2 +-
 packages/dashboard/app/api/__tests__/deleteAiSession.test.ts      |  54 +++++
 packages/dashboard/app/api/legacy.ts               |  41 +++-
 packages/dashboard/app/components/PlanningModeModal.tsx |  70 ++++---
 packages/dashboard/app/components/__tests__/PlanningModeModal.autosize.test.tsx  |  11 +
 packages/dashboard/app/components/__tests__/PlanningModeModal.dedupeSessionsById.test.ts   |  44 ++++
 packages/dashboard/app/components/__tests__/PlanningModeModal.initial.test.tsx   |  11 +
 packages/dashboard/app/components/__tests__/PlanningModeModal.planning-flow.test.tsx       | 226 ++++++++++++++++++++-
 packages/dashboard/app/components/__tests__/PlanningModeModal.test-helpers.ts    |   1 +
 10 files changed, 439 insertions(+), 26 deletions(-)

Fusion-Task-Id: FN-5892

Fusion-Task-Lineage: 7453bc34-6d57-4d67-ac92-8fb50084fbee
2026-06-02 12:42:04 -07:00
gsxdsm
a66b128089 FN-5883: restore planning-mode single-task history
Keep completed planning sessions restorable after single-task creation.

- preserve completed planning-session rows after create-task by releasing only in-memory runtime state
- keep completed sessions in the Planning Mode history UI and add coverage for history restoration flows
- document the restored Planning Mode history behavior and add a patch changeset for @runfusion/fusion

Files changed:
 .changeset/fn-5883-planning-restore.md             |   5 +
 docs/dashboard-guide.md                            |   2 +
 .../dashboard/app/components/PlanningModeModal.tsx |  17 +--
 .../PlanningModeModal.planning-flow.test.tsx       | 118 ++++++++++++++++++++-
 .../src/__tests__/routes-planning.test.ts          |  86 +++++++++++----
 packages/dashboard/src/planning.ts                 |   7 +-
 .../src/routes/register-planning-subtask-routes.ts |  14 +--
 7 files changed, 207 insertions(+), 42 deletions(-)

Fusion-Task-Id: FN-5883

Fusion-Task-Lineage: 47824bac-3083-45a4-a0d5-b8c7540966c1
2026-06-02 10:07:08 -07:00
gsxdsm
cc5e61dbc4 FN-5882: fix mission interview draft resume handling
Keep mission interview drafts recoverable when closing and refreshing Missions.

- make MissionInterviewModal use a single non-destructive close path for header, Escape, and backdrop actions
- refresh mission interview draft/session rows on mission and ai-session SSE updates and reconnects
- open Plan New Mission as a fresh interview instead of always resuming the last session, with regression coverage and docs updates

Files changed:
 docs/missions.md                                   |   2 +-
 .../app/components/MissionInterviewModal.tsx       |  89 +++-----
 .../dashboard/app/components/MissionManager.tsx    | 156 ++++++++++----
 .../__tests__/MissionInterviewModal.test.tsx       | 100 ++++++++-
 .../components/__tests__/MissionManager.test.tsx   | 224 +++++++++++++++++++++
 5 files changed, 455 insertions(+), 116 deletions(-)

Fusion-Task-Id: FN-5882

Fusion-Task-Lineage: 75de9e94-edef-4564-a266-91782e60c2ac
2026-06-02 10:04:38 -07:00
gsxdsm
9e00a72d7d FN-5884: preserve quick chat session across reopens
Keep quick chat warm and restore the last opened conversation per project.

- persist the active quick chat session id in per-project local storage and restore it before falling back to latest activity
- retain in-memory quick chat state across close/reopen while resetting chat state correctly when the project changes
- add storage, hook, and FAB coverage for restored sessions, warm reopen behavior, and project switching; document the updated quick chat behavior

Files changed:
 docs/dashboard-guide.md                            |   3 +-
 packages/dashboard/app/components/QuickChatFAB.tsx |  29 ++++--
 .../app/components/__tests__/QuickChatFAB.test.tsx | 112 +++++++++++++++++++--
 .../__tests__/quickChatLastSessionStorage.test.ts  |  55 ++++++++++
 .../app/hooks/__tests__/useQuickChat.test.ts       |  70 +++++++++++++
 .../app/hooks/quickChatLastSessionStorage.ts       |  41 ++++++++
 packages/dashboard/app/hooks/useQuickChat.ts       |  25 +++++
 7 files changed, 319 insertions(+), 16 deletions(-)

Fusion-Task-Id: FN-5884

Fusion-Task-Lineage: 4d689611-1824-41db-8fc2-d543407316ff
2026-06-02 09:34:19 -07:00
gsxdsm
cf3b9a575e FN-5886: show empty usage state after empty fetch
Handle empty usage responses without leaving the panel in its loading skeleton.

- add a hasFetched flag to useUsageData so the UI can distinguish initial loading from an empty completed response
- update UsageIndicator to render the skeleton only before the first fetch completes and show the empty state afterward
- refresh dashboard hook and component tests to cover empty fetches, refresh behavior, and the new loading semantics

Files changed:
 .../dashboard/app/components/UsageIndicator.tsx    |  19 +-
 .../components/__tests__/UsageIndicator.test.tsx   | 395 +++++++++++----------
 .../app/hooks/__tests__/useUsageData.test.ts       |  42 ++-
 packages/dashboard/app/hooks/useUsageData.ts       |   5 +
 4 files changed, 245 insertions(+), 216 deletions(-)

Fusion-Task-Id: FN-5886

Fusion-Task-Lineage: 8fa901a9-3167-4e33-a082-e5de95f692da
2026-06-02 09:24:42 -07:00
gsxdsm
fa68edf9fa FN-5885: fix terminal copy/paste shortcuts
Restore expected terminal clipboard shortcuts.

- intercept Ctrl/Cmd+C in the dashboard terminal to copy the current selection while preserving plain SIGINT when nothing is selected
- intercept Ctrl/Cmd+V to read clipboard text and send it into the active PTY session
- add terminal shortcut regression coverage and document the new integrated terminal behavior
- add a patch changeset for @runfusion/fusion

Files changed:
 .changeset/friendly-ravens-hammer.md               |   5 +
 docs/dashboard-guide.md                            |   2 +
 packages/dashboard/app/components/TerminalModal.tsx     |  48 +++++++++
 packages/dashboard/app/components/__tests__/TerminalModal.test.tsx    | 113 +++++++++++++++++++++
 4 files changed, 168 insertions(+)

Fusion-Task-Id: FN-5885

Fusion-Task-Lineage: f8b3658c-2b52-4094-8cef-79c762f4d78d
2026-06-02 09:20:31 -07:00
gsxdsm
1a065f2637 FN-5873: trim async waits in SettingsModal tests
Reduce SettingsModal test setup overhead around Remote and Notifications flows.

- switch key authentication assertions to await section controls directly instead of waiting for full modal readiness
- share a zero-delay user-event instance across Remote and Notifications suites and consolidate default-render setup in nested describe blocks
- replace several clear/type interaction sequences with direct change events to cut async churn while preserving coverage

Files changed:
 .../components/__tests__/SettingsModal.test.tsx    | 473 ++++++++++-----------
 1 file changed, 224 insertions(+), 249 deletions(-)

Fusion-Task-Id: FN-5873

Fusion-Task-Lineage: d1f33301-a43f-467f-97e8-b7bfad28e009
2026-06-02 09:05:22 -07:00
gsxdsm
48e08c07eb FN-5880: recover plan-ready mission interview drafts
Keep completed mission interview summaries resumable until they are approved or discarded.

- include  mission interview sessions in dashboard, CLI, and extension draft listings
- relabel complete drafts as plan-ready review items and reopen them at the summary approval step
- add regression coverage and docs/changeset updates for resumable complete drafts

Files changed:
 .../fn-5880-mission-interview-complete-draft.md    |  5 ++
 docs/missions.md                                   |  8 +--
 packages/cli/src/__tests__/extension.test.ts       | 13 +++-
 .../cli/src/commands/__tests__/mission.test.ts     | 11 ++-
 packages/cli/src/commands/mission.ts               | 17 ++++-
 packages/cli/src/extension.ts                      |  7 +-
 .../dashboard/app/components/MissionManager.tsx    | 24 ++++---
 .../components/__tests__/MissionManager.test.tsx   | 70 ++++++++++++++++++
 packages/dashboard/app/components/mission-types.ts |  2 +-
 .../mission-interview-drafts-routes.test.ts        | 18 ++++ -
 .../src/__tests__/mission-interview.test.ts        | 82 ++++++++++++++++++++++
 packages/dashboard/src/mission-interview.ts        | 36 +++++-----
 12 files changed, 252 insertions(+), 41 deletions(-)

Fusion-Task-Id: FN-5880

Fusion-Task-Lineage: 18a9c25c-3f59-4179-9e9c-63f0747acb7f
2026-06-02 09:02:48 -07:00
gsxdsm
f20c37471d FN-5881: guard project status badges against unknown states
Prevent Projects view status rendering from crashing on unknown or missing project states.

- add fallback status config helpers to ProjectCard, ProjectHealthBadge, and ProjectSelector
- format unknown status strings into readable labels and default missing values to Unknown
- add regression tests for unknown and missing statuses across project dashboard components
- document graceful degradation for transient registry or health status mismatches

Files changed:
 docs/multi-project.md                              |  1 +
 packages/dashboard/app/components/ProjectCard.tsx  | 36 ++++++++++++++++-
 .../app/components/ProjectHealthBadge.tsx          | 36 ++++++++++++++++-
 .../dashboard/app/components/ProjectSelector.tsx   | 15 ++++++-
 .../app/components/__tests__/ProjectCard.test.tsx  | 31 +++++++++++++-
 .../__tests__/ProjectHealthBadge.test.tsx          | 47 ++++++++++++++++++++++
 .../components/__tests__/ProjectSelector.test.tsx  | 24 ++++++++++-
 7 files changed, 182 insertions(+), 8 deletions(-)

Fusion-Task-Id: FN-5881

Fusion-Task-Lineage: 55a9df6f-3fcb-46e8-9e83-3494312b4c24
2026-06-02 08:49:25 -07:00
gsxdsm
5bad807189 FN-5879: restore desktop tab scrolling in task detail modal
Keep the task detail tab strip scrollable on desktop without shrinking tab labels.

- move horizontal tab-strip scrolling and momentum styles into the base .detail-tabs rule
- keep .detail-tab items from shrinking at all viewport sizes so overflow remains scrollable
- add a CSS contract test for the base tab strip behavior and extend task detail API mocks with refreshPrStatus

Files changed:
 packages/dashboard/app/components/TaskDetailModal.css              | 7 ++++---
 .../dashboard/app/components/__tests__/TaskDetailModal.css.test.ts | 7 +++++++
 .../app/components/__tests__/TaskDetailModal.test-helpers.ts       | 1 +
 3 files changed, 12 insertions(+), 3 deletions(-)

Fusion-Task-Id: FN-5879

Fusion-Task-Lineage: b990a88e-7b1d-44d9-b222-986a28ae143d
2026-06-02 08:46:04 -07:00
gsxdsm
419d6cda86 FN-5877: add sync-with-origin remotes action
Add a one-click Remotes sync flow that rebases on pull before pushing.

- add a Sync button in Git Manager Remotes that runs pull --rebase and then push
- stop before pushing when the rebase pull reports a conflict or fails, and surface toasts/status updates
- cover successful, conflicting, failing, and loading sync behavior in GitManagerModal tests
- document the new Sync action in the dashboard guide

Files changed:
 docs/dashboard-guide.md                            |   1 +
 .../dashboard/app/components/GitManagerModal.tsx   |  39 ++++++++
 .../components/__tests__/GitManagerModal.test.tsx  | 100 +++++++++++++++++++++
 3 files changed, 140 insertions(+)

Fusion-Task-Id: FN-5877

Fusion-Task-Lineage: 2e28c00d-b965-4f44-a6fa-26536d91d16d
2026-06-02 08:25:46 -07:00
gsxdsm
8b839d79e8 FN-5878: re-hide revealed secrets from the eye toggle
Let users hide a revealed secret again from the row visibility toggle.

- add a hideSecret helper that clears reveal timers and resets the revealed value
- make the row eye toggle switch between reveal and hide states instead of reveal-only
- add a SecretsView regression test covering reveal, hide, and copy button state changes

Files changed:
 packages/dashboard/app/components/SecretsView.tsx         | 18 +++++++++-
 packages/dashboard/app/components/__tests__/SecretsView.test.tsx | 40 ++++++++++++++++++++++
 2 files changed, 57 insertions(+), 1 deletion(-)

Fusion-Task-Id: FN-5878

Fusion-Task-Lineage: 936195db-88c9-48f5-8273-9b930bf6b858
2026-06-02 08:14:10 -07:00
gsxdsm
dd1024fe0b FN-5871: streamline SettingsModal tests
Reduce SettingsModal test overhead by reusing setup and waiting on stable UI signals.

- replace generic waitFor polling with findBy* queries and direct mock call assertions
- consolidate project-general persistence coverage and split default-value checks from save-path assertions
- share Memory and Merge section setup across related tests to avoid repeated navigation and duplicate work

Files changed:
 packages/dashboard/app/components/__tests__/SettingsModal.test.tsx | 333 ++++++++-------------
 1 file changed, 127 insertions(+), 206 deletions(-)

Fusion-Task-Id: FN-5871

Fusion-Task-Lineage: 1b625571-f16e-4aec-8640-22d8f3bb8139
2026-06-02 08:10:35 -07:00
gsxdsm
3989193cf2 FN-5876: prevent mobile quick-entry autofocus
Avoid restoring focus to the new-task quick entry on mobile while preserving desktop behavior.

- gate quick-entry autofocus and post-submit focus restoration behind a desktop-width check
- add desktop and mobile coverage for initial focus behavior
- add mobile coverage for avoiding focus restoration after successful task creation

Files changed:
 .../dashboard/app/components/QuickEntryBox.tsx     |  5 ++-
 .../components/__tests__/QuickEntryBox.test.tsx    | 42 ++++++++++++++++++++++
 2 files changed, 46 insertions(+), 1 deletion(-)

Fusion-Task-Id: FN-5876

Fusion-Task-Lineage: ede08207-6506-4f5e-8a6f-f7f1cbfb37c9
2026-06-02 08:08:01 -07:00
gsxdsm
91784d9acf FN-5875: fix hidden usage row count
Keep the usage indicator's hidden-row toggle in sync with rendered duplicate windows.

- count hidden usage rows from the currently rendered provider windows instead of persisted label entries
- preserve the Show hidden button when duplicate live windows share a stored hidden label
- add a regression test covering duplicate Daily windows with persisted hidden state

Files changed:
 .../dashboard/app/components/UsageIndicator.tsx    | 12 ++++++-
 .../components/__tests__/UsageIndicator.test.tsx   | 42 ++++++++++++++++++++++
 2 files changed, 53 insertions(+), 1 deletion(-)

Fusion-Task-Id: FN-5875

Fusion-Task-Lineage: 648f9cb9-ea0a-4573-b08f-b1a412a46ae4
2026-06-02 07:52:04 -07:00
gsxdsm
7c7fb065dc fix(dashboard): remove Lineage commit associations from Task Changes UI
The lineage commit associations panel surfaced low-value provenance
metadata. Remove the UI section, its dead state/fetch wiring in
TaskChangesTab, the orphaned .task-lineage-* CSS, and the obsolete
tests. The fetchTaskCommitAssociations API helper is retained.
2026-06-02 07:40:37 -07:00
gsxdsm
be95b3f2c3 FN-5854: preselect default model for new chats
Preselect the resolved default model when creating a new model-based chat.

- pass the resolved default model into the new chat dialog
- preserve and restore the default model selection when switching into model mode
- add ChatView coverage for default-model preselection, create enablement, and unresolved-default fallback

Files changed:
 packages/dashboard/app/components/ChatView.tsx     | 18 +++++-
 packages/dashboard/app/components/__tests__/ChatView.test.tsx     | 65 ++++++++++++++++++++--
 2 files changed, 75 insertions(+), 8 deletions(-)

Fusion-Task-Id: FN-5854

Fusion-Task-Lineage: d1ace008-0354-44b4-90c8-e0370f38b6bf
2026-06-02 04:01:31 -07:00
gsxdsm
04e1701d90 FN-5864: stabilize ChatView skill-menu keyboard assertions
Make the ChatView skill-menu keyboard navigation test wait for async UI updates.

- wrap the highlighted-option assertion after ArrowUp in waitFor to avoid synchronous timing races
- wait for the textarea value update after Enter selection before asserting the chosen skill command

Files changed:
 packages/dashboard/app/components/__tests__/ChatView.test.tsx | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

Fusion-Task-Id: FN-5864

Fusion-Task-Lineage: 9f1b3988-7022-415f-8d4b-83b0b3b25dfb
2026-06-02 00:34:43 -07:00
gsxdsm
76a5337833 FN-5861: preserve FileEditor instance across content updates
Keep the memory/file editor stable while controlled content updates flow through CodeMirror.

- stop recreating the editor view when content and editor options change
- reconfigure line numbers, word wrap, read-only state, and language in place via compartments
- add regression tests for editor instance preservation and caret stability during controlled edits

Files changed:
 packages/dashboard/app/components/FileEditor.tsx         | 34 +++++++++++++++-
 packages/dashboard/app/components/__tests__/FileEditor.test.tsx | 47 +++++++++++++++++++++-
 2 files changed, 79 insertions(+), 2 deletions(-)

Fusion-Task-Id: FN-5861

Fusion-Task-Lineage: a8c5c4b0-ff5f-4f25-9e65-ed3f31c2b893
2026-06-02 00:23:05 -07:00
gsxdsm
a381863b5c FN-5860: allow Shift+Enter newlines in collapsed quick entry
Ensure quick entry keeps Shift+Enter newline behavior even before expansion.

- allow Shift+Enter to bypass submit handling in any quick-entry state
- expand the quick entry when Shift+Enter inserts a newline from the collapsed state
- update QuickEntryBox coverage to verify newline behavior without submission while collapsed

Files changed:
 packages/dashboard/app/components/QuickEntryBox.tsx         |  5 +++--
 packages/dashboard/app/components/__tests__/QuickEntryBox.test.tsx | 13 ++++++++-----
 2 files changed, 11 insertions(+), 7 deletions(-)

Fusion-Task-Id: FN-5860

Fusion-Task-Lineage: 58a65cb7-2d5b-45bb-bce9-8ffdbebbe586
2026-06-02 00:14:28 -07:00
gsxdsm
b9bcae6ea4 FN-5859: resolve task card agent names from cache
Resolve task card agent badges to show assigned and source agent names without fetch delay.

- use the agents map cache to resolve assigned agent names before falling back to fetches or raw ids
- prefer cached source agent names for agent-created provenance badges while preserving the generic fallback when no name is available
- add TaskCard coverage for cached agent badge rendering, provenance label resolution, and fallback behavior

Files changed:
 packages/dashboard/app/components/TaskCard.tsx     | 51 ++++++++++++---
 .../app/components/__tests__/TaskCard.test.tsx     | 76 ++++++++++++++++++++--
 2 files changed, 114 insertions(+), 13 deletions(-)

Fusion-Task-Id: FN-5859

Fusion-Task-Lineage: ac15f69a-50ca-48c5-a7a8-fb6c5e48af70
2026-06-02 00:10:21 -07:00
gsxdsm
c60dae1cb9 FN-5856: preserve closed quick chat panel size
Prevent closed quick chat FAB drags from overwriting the saved desktop panel size.

- gate desktop panel resize clamping and persistence behind the panel open state
- pass the quick chat open state into the resize hook so closed FAB moves leave saved dimensions untouched
- add a regression test covering closed-FAB dragging and reopened panel dimensions
- add a patch changeset for the published CLI package

Files changed:
 .changeset/fn-5856-quick-chat-resize.md            |  5 +++++
 packages/dashboard/app/components/QuickChatFAB.tsx | 12 +++++------
 .../app/components/__tests__/QuickChatFAB.test.tsx | 23 ++++++++++++++++++++++
 3 files changed, 34 insertions(+), 6 deletions(-)

Fusion-Task-Id: FN-5856

Fusion-Task-Lineage: 3358f2b0-ae8d-468c-8e9e-71a1b5365061
2026-06-01 23:37:03 -07:00
gsxdsm
41c891d7d8 FN-5850: add AI goal description drafting
Add AI-assisted goal description drafting from the Goals view add form.

- add a readonly AI drafting flow for goal descriptions with title validation and shared rate limiting
- expose a new /api/ai/draft-goal-description endpoint and dashboard API helper for requesting drafts
- add Goals view UI, styling, tests, and dashboard docs covering the draft workflow

Files changed:
 docs/dashboard-guide.md                            |   6 +
 packages/dashboard/app/api/legacy.ts               |  24 +++-
 packages/dashboard/app/components/GoalsView.css    |  14 ++
 packages/dashboard/app/components/GoalsView.tsx    |  46 +++++-
 packages/dashboard/app/components/__tests__/GoalsView.test.tsx    |  50 +++++++
 packages/dashboard/src/__tests__/ai-refine.test.ts |  75 ++++++++++
 packages/dashboard/src/__tests__/routes-agents.test.ts  |  92 ++++++++++++
 packages/dashboard/src/ai-refine.ts                | 155 ++++++++++++++++++---
 packages/dashboard/src/routes.ts                   |  58 ++++++++
 9 files changed, 489 insertions(+), 31 deletions(-)

Fusion-Task-Id: FN-5850

Fusion-Task-Lineage: $#%
!

2026-06-01 22:50:41 -07:00
gsxdsm
8376781864 FN-5845: fix mobile agent log scroll and add collapsible branch group card
Improve dashboard mobile log usability and make branch group cards collapsible for cleaner review workflows.

- preserve/restore AgentLogViewer scroll position when toggling mobile drawer and lock body scroll while open
- add collapse/expand state to BranchGroupCard with a summary header and hidden details when collapsed
- add regression tests for AgentLogViewer mobile scroll behavior and BranchGroupCard collapse interactions
- add a changeset and dashboard guide note for the new branch group card behavior

Files changed:
 .changeset/fn-5845-branch-group-collapse.md        |  5 ++
 docs/dashboard-guide.md                            |  1 +
 .../dashboard/app/components/AgentLogViewer.tsx    | 21 ++++++++
 .../dashboard/app/components/BranchGroupCard.css   | 23 ++++++++
 .../dashboard/app/components/BranchGroupCard.tsx   | 63 +++++++++++++++++-----
 .../components/__tests__/AgentLogViewer.test.tsx   | 48 +++++++++++++++++
 .../components/__tests__/BranchGroupCard.test.tsx  | 18 +++++++
 7 files changed, 166 insertions(+), 13 deletions(-)

Fusion-Task-Id: FN-5845

Fusion-Task-Lineage: 6a0f2967-5df8-4761-ae6c-50991f01ab78
2026-06-01 16:24:21 -07:00
gsxdsm
3602fb9a23 FN-5839: prevent stale integration-advance sync prompts
Treat rewritten integration-branch advances as handled when the working tree is already aligned.

- Add a new `superseded` resolution for unreachable advance SHAs that remain after history rewrites while HEAD matches the local integration tip.
- Update Git status collection logic and route/API status typings to propagate the new resolution state.
- Update Git Manager modal messaging and dismiss behavior so handled `superseded` entries do not show a sync CTA.
- Extend dashboard route and modal tests, and refresh dashboard guide docs for the new classification behavior.

Files changed:
 docs/dashboard-guide.md                            |  5 +--
 packages/dashboard/app/api/legacy.ts               |  2 +-
 .../dashboard/app/components/GitManagerModal.tsx   |  6 ++--
 .../components/__tests__/GitManagerModal.test.tsx  |  5 ++-
 .../dashboard/src/__tests__/routes-git.test.ts     | 36 ++++++++++++++++++++--
 .../dashboard/src/routes/register-git-github.ts    | 13 ++++++--
 6 files changed, 55 insertions(+), 12 deletions(-)

Fusion-Task-Id: FN-5839

Fusion-Task-Lineage: 6b4afb73-587d-4319-8ad8-f1d5d54bc7bf
2026-06-01 11:52:02 -07:00
gsxdsm
4a20aa140e FN-5838: suppress stale integration-advance action prompts
Refine merge-advance status handling so Git Manager only requests action when the checkout is truly behind.

- classify recent integration advances as reachable, orphaned, subsumed, or pending before marking them actionable
- detect subsumed advances by comparing commit patch fingerprints from recent HEAD history
- expose advance resolution metadata in API status payloads and route exports
- update Git Manager UI to count only pending actionable advances, gate Sync Working Tree visibility, and allow dismissing handled orphaned/subsumed rows
- expand dashboard tests and docs to cover stale false-positive scenarios and new resolution behavior

Files changed:
 docs/dashboard-guide.md                            |  6 ++
 packages/dashboard/app/api/legacy.ts               |  1 +
 .../dashboard/app/components/GitManagerModal.tsx   | 45 ++++++----
 .../components/__tests__/GitManagerModal.test.tsx  | 63 ++++++++++++++
 .../dashboard/src/__tests__/routes-git.test.ts     | 97 +++++++++++++++++++++-
 .../dashboard/src/routes/register-git-github.ts    | 94 ++++++++++++++-------
 6 files changed, 259 insertions(+), 47 deletions(-)

Fusion-Task-Id: FN-5838

Fusion-Task-Lineage: 65d1317a-7618-4fff-9875-c845474888ed
2026-06-01 11:05:22 -07:00
gsxdsm
05c7e448a1 FN-5836: fix mailbox mobile scroll-to-bottom behavior
Ensure mailbox content can scroll to the latest agent-to-agent email on mobile layouts.

- Add `min-height: 0` to `.mailbox-view .mailbox-content` to keep the flex child bounded and scrollable.
- Strengthen mobile mailbox scrolling with `overflow-y: auto`, `overscroll-behavior: contain`, and `-webkit-overflow-scrolling: touch`.
- Extend MailboxView CSS tests to assert the new bounded flex and mobile scrolling rules.

Files changed:
 packages/dashboard/app/components/MailboxModal.css        |  4 ++++
 .../app/components/__tests__/MailboxView.test.tsx         | 15 +++++++++++++++
 2 files changed, 19 insertions(+)

Fusion-Task-Id: FN-5836

Fusion-Task-Lineage: 41ce03bf-d788-4de9-9dc1-db8ad443048e
2026-06-01 10:31:36 -07:00
gsxdsm
1610cd5757 FN-5837: keep message composer visible when mobile keyboard opens
Ensure the message composer textarea scrolls into view during mobile keyboard interactions.

- extract a reusable textarea scroll helper guarded for missing scrollIntoView support
- subscribe to visualViewport resize for all compose modes (not only replies) and clean up listener with stable callback
- trigger textarea scrolling on focus to proactively keep the composer visible when soft keyboards open
- add tests covering visualViewport resize for new compose, existing reply flow, and focus-triggered scroll behavior

Files changed:
 .../dashboard/app/components/MessageComposer.tsx   | 20 ++++----
 .../components/__tests__/MessageComposer.test.tsx  | 56 ++++++++++++++++++++++
 2 files changed, 68 insertions(+), 8 deletions(-)

Fusion-Task-Id: FN-5837

Fusion-Task-Lineage: c9fb76a2-6c5a-4d5c-b8ad-8250ed470825
2026-06-01 10:17:52 -07:00
gsxdsm
eb425d17d9 FN-5825: add dedicated grouped-task modal popup
Introduce a dedicated modal flow for grouped shared-branch tasks in the dashboard.

- Add GroupTaskModal component and styles for grouped task details and actions.
- Wire grouped-task modal state through App, modal manager hooks, and modal container components.
- Update board/column/task-card interactions to open grouped tasks in the new modal.
- Adjust subtask breakdown behavior and add focused tests for grouped task modal/task-card flows.
- Document the grouped-task modal behavior and add a changeset for @runfusion/fusion.

Files changed:
 .changeset/fn-5825-group-task-modal.md             |   5 +
 docs/dashboard-guide.md                            |   5 +-
 packages/dashboard/app/App.tsx                     |   6 +
 packages/dashboard/app/components/AppModals.tsx    |  24 ++++
 packages/dashboard/app/components/Board.tsx        |   4 +-
 packages/dashboard/app/components/Column.tsx       |   4 +-
 .../dashboard/app/components/GroupTaskModal.css    |  79 ++++++++++
 .../dashboard/app/components/GroupTaskModal.tsx    | 159 +++++++++++++++++++++
 .../app/components/SubtaskBreakdownModal.tsx       |  16 ++-
 packages/dashboard/app/components/TaskCard.tsx     |   8 ++
 .../components/__tests__/GroupTaskModal.test.tsx   | 105 ++++++++++++++
 .../app/components/__tests__/TaskCard.test.tsx     |  18 +++
 packages/dashboard/app/hooks/useModalManager.ts    |  16 +++
 packages/dashboard/vitest.config.ts                |   2 +-
 14 files changed, 445 insertions(+), 6 deletions(-)

Fusion-Task-Id: FN-5825

Fusion-Task-Lineage: d9317a58-05ce-4437-8311-b7e2a186537b
2026-06-01 05:15:14 -07:00
gsxdsm
e9de195ef5 FN-5822: wire shared branch-group visibility and merge controls
Add dashboard and API support for viewing shared branch groups and triggering group merge actions.

- add branch-group API routes and register them in integrated routers
- extend dashboard legacy API client with branch-group fetch and merge-control actions
- add BranchGroupCard UI + styles and surface it in task/detail/subtask views
- add dashboard/API test coverage for branch-group routes and UI integration points
- document branch-group behavior and add a changeset for @runfusion/fusion

Files changed:
 .changeset/fn-5822-branch-group-dashboard.md       |   5 +
 docs/dashboard-guide.md                            |  31 ++++++
 packages/dashboard/app/api/legacy.ts               |  54 +++++++++
 .../dashboard/app/components/BranchGroupCard.css   |  83 ++++++++++++++
 .../dashboard/app/components/BranchGroupCard.tsx   | 123 +++++++++++++++++++++
 .../app/components/SubtaskBreakdownModal.tsx       |   3 +
 packages/dashboard/app/components/TaskCard.tsx     |  19 ++++
 .../dashboard/app/components/TaskDetailModal.tsx   |   4 +
 .../components/__tests__/BranchGroupCard.test.tsx  |  96 ++++++++++++++++
 .../__tests__/SubtaskBreakdownModal.test.tsx       |   1 +
 .../app/components/__tests__/TaskCard.test.tsx     |  16 ++++
 .../components/__tests__/TaskDetailModal.test.tsx  |  22 ++++
 .../src/__tests__/routes-branch-groups.test.ts     | 119 ++++++++++++++++++++
 .../src/routes/register-branch-groups-routes.ts    | 118 ++++++++++++++++++++
 .../src/routes/register-integrated-routers.ts      |  13 +++
 packages/dashboard/vitest.config.ts                |   4 +-
 16 files changed, 709 insertions(+), 2 deletions(-)

Fusion-Task-Id: FN-5822

Fusion-Task-Lineage: 199c25b8-f6ec-43b4-8fab-509f23fb5ac7
2026-06-01 04:47:19 -07:00
gsxdsm
9c29e2e776 FN-5829: add shared feature branch option for new tasks
Allow new tasks to target a shared branch-group feature branch during creation.

- Add branch-group aware branch selection handling in task workflow routes.
- Update store/types/db wiring to support and persist shared feature-branch targeting.
- Extend dashboard task creation UI/tests and route tests to cover the new option.
- Add a changeset for @runfusion/fusion documenting the new CLI/task behavior.

Files changed:
 .changeset/fn-5829-shared-feature-branch-option.md |   7 ++
 .../src/commands/__tests__/task-lifecycle.test.ts  |   2 +-
 .../core/src/__tests__/branch-group-store.test.ts  |  26 ++++++
 packages/core/src/db.ts                            |   4 +-
 packages/core/src/store.ts                         |   9 +-
 packages/core/src/types.ts                         |   2 +-
 packages/dashboard/app/components/NewTaskModal.tsx |   2 +-
 packages/dashboard/app/components/TaskForm.tsx     |   9 +-
 .../app/components/__tests__/NewTaskModal.test.tsx |  37 ++++++++
 .../src/__tests__/branch-selection.test.ts         |  12 +++
 .../dashboard/src/__tests__/mission-e2e.test.ts    |   8 +-
 .../src/__tests__/routes-planning.test.ts          |   6 +-
 .../src/__tests__/routes-tasks.test.ts             | 102 +++++++++++++++++++++
 packages/dashboard/src/routes/branch-selection.ts  |  19 +++-
 .../src/routes/register-task-workflow-routes.ts    |  23 +++--
 15 files changed, 242 insertions(+), 26 deletions(-)

Fusion-Task-Id: FN-5829

Fusion-Task-Lineage: 7d69acc8-19a3-4112-9bf2-5ac7b5e5a929
2026-06-01 03:23:10 -07:00
gsxdsm
1aef3c9899 FN-5817: prevent blank dashboard after auto-merge toggle
Ensure viewport mode updates stay in sync so toggling auto-merge no longer blanks the dashboard.

- update useViewportMode to initialize safely and react consistently to viewport/media-query changes
- add focused hook coverage for initial mode detection and transition behavior
- add dashboard/app regression tests to confirm the board remains rendered after auto-merge toggles
- add a changeset for @runfusion/fusion patch release

Files changed:
 .changeset/fn-5817-auto-merge-toggle-mobile.md     |  5 ++
 .../app/components/__tests__/App.test.tsx          | 66 ++++++++++++++++++++++
 .../__tests__/board-mobile-initial-render.test.tsx | 30 ++++++++++
 .../app/hooks/__tests__/useViewportMode.test.ts    | 34 +++++++++++
 packages/dashboard/app/hooks/useViewportMode.ts    | 28 +++++++--
 5 files changed, 159 insertions(+), 4 deletions(-)

Fusion-Task-Id: FN-5817

Fusion-Task-Lineage: 2fc044b1-5f37-44de-b70e-c60364a3d69c
2026-06-01 01:30:34 -07:00
gsxdsm
4ea43c0c87 FN-5801: add markdown preview toggle for planning description
Add a markdown/plain toggle to the planning summary description so users can preview formatted content before creating a task.

- add a Description header toggle that switches between editable plain textarea and rendered markdown preview
- render description preview with react-markdown and remark-gfm while preserving expand/collapse layout behavior
- add preview container styles and spacing adjustments for summary form
- add UI interaction test coverage for markdown toggle behavior and rendered heading/bold content
- document the new markdown/plain description toggle in dashboard guide

Files changed:
 docs/dashboard-guide.md                            |  1 +
 packages/dashboard/app/components/PlanningModeModal.css | 18 +++++++-
 packages/dashboard/app/components/PlanningModeModal.tsx | 32 ++++++++++---
 packages/dashboard/app/components/__tests__/PlanningModeModal.ui-interactions.test.tsx | 54 ++++++++++++++++++++++
 4 files changed, 98 insertions(+), 7 deletions(-)

Fusion-Task-Id: FN-5801

Fusion-Task-Lineage: 34972830-7d51-4fcd-bf00-3de8f5aff028
2026-05-31 21:59:06 -07:00
gsxdsm
0a16fc690a FN-5799: preserve first-turn planning thinking output
Ensure first-question planning UI reliably shows streamed reasoning before question transitions.

- Keep streamingOutputRef synchronized during onThinking updates so back-to-back thinking/question events preserve full reasoning text.
- Expand PlanningModeModal question-flow tests to cover same-tick buffered replay and loading-view visibility for first-turn and follow-up thinking output.
- Update assertions to verify reasoning content remains visible in conversation history after question handoff.

Files changed:
 .../dashboard/app/components/PlanningModeModal.tsx |  9 +++-
 .../__tests__/PlanningModeModal.questions.test.tsx | 62 ++++++++++++++++++++--
 2 files changed, 66 insertions(+), 5 deletions(-)

Fusion-Task-Id: FN-5799
Fusion-Task-Lineage: 41677c47-4380-4145-a3d2-0e928fc40042
2026-05-31 21:43:23 -07:00
gsxdsm
944c03d495 FN-5797: fix usage indicator show hidden button behavior
Prevent hidden-window controls in UsageIndicator from acting as implicit form submitters.

- Set both window-level Hide and provider-level Show hidden buttons to `type="button"`.
- Preserve hidden-window reveal behavior without submitting parent forms.
- Add a regression test covering hide/show persistence and rerender re-sync behavior.

Files changed:
 .changeset/fn-5797-show-hidden-fix.md              |  8 +++++
 packages/dashboard/app/components/UsageIndicator.tsx    |  2 ++
 packages/dashboard/app/components/__tests__/UsageIndicator.test.tsx   | 40 ++++++++++++++++++++++
 3 files changed, 50 insertions(+)

Fusion-Task-Id: FN-5797

Fusion-Task-Lineage: 9072bb68-b86b-4ec7-8b1f-0e6b706cbb5f
2026-05-31 21:08:41 -07:00
gsxdsm
5930c18b4d FN-5795: send ntfy notification when agents create tasks
Add agent task-created ntfy notifications with configurable settings and coverage.

- add notification plumbing to emit a dedicated event when an agent creates a task
- extend ntfy provider/settings typing and dashboard settings coverage for the new event toggle
- add regression tests for notification service, notifier integration, and ntfy provider behavior
- add a changeset and documentation updates describing the new notification capability

Files changed:
 .changeset/fn-5795-task-created-notification.md    |  9 +++
 docs/architecture.md                               |  4 +-
 docs/settings-reference.md                         |  4 +-
 docs/storage.md                                    |  2 +-
 packages/core/src/types.ts                         |  4 +-
 .../dashboard/app/components/SettingsModal.tsx     |  1 +
 .../components/__tests__/SettingsModal.test.tsx    | 27 +++++++-
 .../src/__tests__/notification-service.test.ts     | 71 ++++++++++++++++++++++
 packages/engine/src/__tests__/notifier.test.ts     |  5 ++
 .../engine/src/__tests__/ntfy-provider.test.ts     | 32 ++++++++++
 .../src/notification/notification-service.ts       | 53 +++++++++++++++-
 packages/engine/src/notification/ntfy-provider.ts  | 21 +++++--
 12 files changed, 220 insertions(+), 13 deletions(-)

Fusion-Task-Id: FN-5795

Fusion-Task-Lineage: 4cfa3b46-8e9c-451e-ab2d-b7d5c9bf5968
2026-05-31 19:59:32 -07:00