Move Authentication into the Global settings group after General.
- remove the standalone Account header from the settings sidebar
- place Authentication immediately after Global General in the Global group
- update the section inventory comments to match the new grouping, including runtime sections
Files changed:
packages/dashboard/app/components/SettingsModal.tsx | 11 +++++------
1 file changed, 5 insertions(+), 6 deletions(-)
Fusion-Task-Id: FN-6201
Fusion-Task-Lineage: 4cae66aa-43c5-4436-957b-4059915c2884
Rescue the WorkflowNodeEditor quarantine by waiting for inspector fields before asserting.
- make the foreach inspector Mode assertion wait for the panel to finish rendering
- wait for the code node Source and Timeout inputs before editing them to avoid the inspector race
- remove WorkflowNodeEditor.test.tsx from the dashboard quarantine config and ledger
Files changed:
.../app/components/__tests__/WorkflowNodeEditor.test.tsx | 6 +++---
packages/dashboard/vitest.config.ts | 4 +---
scripts/lib/test-quarantine.json | 8 +-------
3 files changed, 5 insertions(+), 13 deletions(-)
Fusion-Task-Id: FN-6191
Fusion-Task-Lineage: 57fb1dcc-3e50-4ba1-8488-fcff204c1d76
Add a dashboard CSS hygiene scan and align accent text colors with the CTA text token.
- add a dashboard CSS hygiene regression scan for recent component styles
- assert tokenized focus styles, mobile breakpoints, and no raw hex or rgba colors in scanned CSS
- replace hardcoded white text with var(--cta-text) in background task, pull request, task card, and task field accent surfaces
Files changed:
.../app/__tests__/css-hygiene-scan.test.ts | 191 +++++++++++++++++++++
.../app/components/BackgroundTasksIndicator.css | 2 +-
.../dashboard/app/components/PullRequestView.css | 2 +-
packages/dashboard/app/components/TaskCard.css | 2 +-
.../dashboard/app/components/TaskFieldsSection.css | 2 +-
5 files changed, 195 insertions(+), 4 deletions(-)
Fusion-Task-Id: FN-6186
Fusion-Task-Lineage: c579bcda-01f9-4495-bf59-78d1dfef816c
Keep the mobile mailbox list anchored after refreshes and SSE updates.
- capture the mobile mailbox content scroll position before inbox, outbox, agent, and approval reloads
- restore the saved scroll position after refreshed mailbox data renders and wire the content container through a ref
- allow vertical scrolling in the mailbox view content area and cover the SSE refresh behavior with a mobile regression test
Files changed:
packages/dashboard/app/components/MailboxModal.css | 3 +-
packages/dashboard/app/components/MailboxView.tsx | 58 +++++++++++++++++++---
.../app/components/__tests__/MailboxView.test.tsx | 35 +++++++++++++
3 files changed, 89 insertions(+), 7 deletions(-)
Fusion-Task-Id: FN-6183
Fusion-Task-Lineage: ea8be80b-4834-4b77-96cd-254e6b0b0795
Keep the chat sidebar from crowding tablet chat while the software keyboard is open.
- extend mobile keyboard detection so tablet chat can react to visual viewport keyboard changes
- hide the chat sidebar and resize handle while the tablet keyboard is open, then restore prior visibility when it closes
- add regression coverage for tablet keyboard behavior plus desktop and mobile guardrails
Files changed:
packages/dashboard/app/components/ChatView.tsx | 39 +++++-
packages/dashboard/app/components/__tests__/ChatView.mobile-render.test.tsx | 139 ++++++++++++++++++++-
packages/dashboard/app/hooks/useMobileKeyboard.ts | 7 +-
3 files changed, 171 insertions(+), 14 deletions(-)
Fusion-Task-Id: FN-6178
Fusion-Task-Lineage: 7acdb76a-135f-4b9c-ab50-708eec03b2c6
Prevent the NodesView tablet overlay from letting underlying content bleed through.
- make the tablet nodes management overlay fixed, fullscreen, and scrollable with the app background
- add a regression test that asserts the tablet overlay media query and rule properties
- add a patch changeset for the published CLI package bundle
Files changed:
.changeset/fn-6179-tablet-nodes-overlay.md | 5 +++++
packages/dashboard/app/components/NodesView.css | 12 ++++++++++-
.../app/components/__tests__/NodesView.test.tsx | 23 ++++++++++++++++++++--
3 files changed, 37 insertions(+), 3 deletions(-)
Fusion-Task-Id: FN-6179
Fusion-Task-Lineage: 9455b38e-c32f-4865-917a-a06c1cb38840
Harden TerminalModal mobile keyboard regression coverage against async tab setup and xterm mock issues.
- add missing xterm terminal mock methods used by mobile tab interactions
- replace anonymous constructor mock implementations with named function mocks for Terminal and FitAddon
- wait for second-session callbacks before simulating viewport and keyboard transitions in mobile tab-switch tests
Files changed:
packages/dashboard/app/components/__tests__/TerminalModal.test.tsx | 48 ++++++++++++++++++----
1 file changed, 39 insertions(+), 9 deletions(-)
Fusion-Task-Id: FN-6175
Fusion-Task-Lineage: fc95f3d6-586a-475c-a226-be1a57c88ff4
Move the task detail modal's GitHub tracking section to render after the prompt/spec content.
- relocate the GitHub tracking section in TaskDetailModal so it appears beneath prompt details in read mode
- preserve the existing GitHub tracking controls, status, and expand/collapse behavior while changing only section order
- add a regression test that asserts the prompt content appears before the GitHub tracking section
Files changed:
.../dashboard/app/components/TaskDetailModal.tsx | 274 ++++++++++-----------
...lModal.inline-editing-and-integrations.test.tsx | 28 +++
2 files changed, 165 insertions(+), 137 deletions(-)
Fusion-Task-Id: FN-6171
Fusion-Task-Lineage: dac8ac54-655d-4403-9e7d-6aad446da793
Make the mobile Nodes screen open as a full-screen overlay above the header and nav.
- add a mobile-only fixed fullscreen overlay style for the nodes management panel
- preserve safe-area spacing and scroll behavior while keeping the overlay above mobile navigation
- add a NodesView regression test that asserts the mobile overlay CSS contract and close control rendering
Files changed:
.changeset/fn-6170-mobile-nodes-fullscreen.md | 5 +++
packages/dashboard/app/components/NodesView.css | 11 +++++
.../app/components/__tests__/NodesView.test.tsx | 52 ++++++++++++++++++++++
3 files changed, 68 insertions(+)
Fusion-Task-Id: FN-6170
Fusion-Task-Lineage: 16995d9f-6b5e-4f15-9367-7eccbd3153d0
Open fresh tabs for follow-up script launches instead of reusing the current terminal.
- track whether an initial command arrived with modal open versus after the terminal was already active
- create a new terminal tab for later script commands, wait for that tab to become active, then send the command there
- expand TerminalModal coverage for first-open versus follow-up script execution and clarify modal-manager script handoff expectations
Files changed:
packages/dashboard/app/components/TerminalModal.tsx | 80 ++++++++++-
.../components/__tests__/TerminalModal.test.tsx | 150 ++++++++++++++++++---
.../app/hooks/__tests__/useModalManager.test.ts | 4 +-
3 files changed, 207 insertions(+), 27 deletions(-)
Fusion-Task-Id: FN-6169
Fusion-Task-Lineage: a7e57a9b-dc3a-432f-bff1-195b62555852
Keep the mobile workflow editor stage from stretching the canvas wrapper and shrinking the full-screen view.
- adjust the mobile editor-stage canvas wrapper flex rule to avoid consuming the full stage height
- extend the WorkflowNodeEditor mobile CSS contract test to lock the updated flex behavior
Files changed:
packages/dashboard/app/components/WorkflowNodeEditor.css | 2 +-
.../dashboard/app/components/__tests__/WorkflowNodeEditor.css.test.ts | 1 +
2 files changed, 2 insertions(+), 1 deletion(-)
Fusion-Task-Id: FN-6162
Fusion-Task-Lineage: b09d3317-cf22-4fbf-a732-9f4829c1cfd8
Prevent mobile quick-entry action taps from being swallowed by browser touch gestures.
- apply a mobile touch-action override to quick-entry action containers and their descendants
- keep the existing mobile button sizing while removing the redundant per-button touch-action rule
- add a regression test that inspects the mobile CSS rule covering quick-entry action controls
Files changed:
.changeset/quick-entry-mobile-touch.md | 5 +++++
packages/dashboard/app/components/QuickEntryBox.css | 8 ++++----
packages/dashboard/app/components/__tests__/QuickEntryBox.test.tsx | 17 +++++++++++++++++
3 files changed, 26 insertions(+), 4 deletions(-)
Fusion-Task-Id: FN-6153
Fusion-Task-Lineage: e915bb06-2c45-4d96-b719-2b7efcf6f986
Rescue the dashboard board workflow toolbar coverage and rotate the active quarantine.
- wait for the workflow toolbar itself before asserting board workflow actions in Board.test.tsx
- remove Board.test.tsx from the dashboard vitest quarantine list
- quarantine WorkflowNodeEditor.test.tsx with an updated ledger entry for the newly observed flake
Files changed:
packages/dashboard/app/components/__tests__/Board.test.tsx | 4 ++--
packages/dashboard/vitest.config.ts | 4 +++-
scripts/lib/test-quarantine.json | 4 ++--
3 files changed, 7 insertions(+), 5 deletions(-)
Fusion-Task-Id: FN-6156
Fusion-Task-Lineage: c91c3542-fdec-426a-8e63-3edb3f5d34e5
Guard the U8 authoring workflow test against editor hydration races.
- wait for the workflow column panel before opening the Code palette
- wait for the code node to render before reading the TypeScript source textarea
- document the flake class to align this test with the existing palette-add race fix
Files changed:
.../dashboard/app/components/__tests__/WorkflowNodeEditor.test.tsx | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
Fusion-Task-Id: FN-6157
Fusion-Task-Lineage: 4009cbb5-8217-4eae-8889-e047ec31bee3
Keep the workflow prompt expander usable in the fullscreen editor across desktop and mobile.
- render the expanded prompt and gate editor in a document-body portal instead of reusing the inline inspector container
- keep the inline prompt textarea compact while wiring fullscreen edits, focus, and collapse controls through the portal overlay
- extend workflow node editor coverage for desktop and mobile fullscreen expand, collapse, Escape, empty prompt, and edit persistence flows
Files changed:
packages/dashboard/app/components/WorkflowNodeEditor.tsx | 81 +++++++------
packages/dashboard/app/components/__tests__/WorkflowNodeEditor.test.tsx | 127 +++++++++++++++++++--
2 files changed, 164 insertions(+), 44 deletions(-)
Fusion-Task-Id: FN-6155
Fusion-Task-Lineage: 5d0a6367-932a-4fbc-bded-ebad3073d1a6
Let the mobile workflow node editor inspector use the full available height.
- remove the mobile inspector max-height cap so the editor stage can expand full screen
- update the WorkflowNodeEditor mobile CSS contract test to assert the new max-height rule
- quarantine the unrelated flaky dashboard Board test and record it in the quarantine ledger
Files changed:
packages/dashboard/app/components/WorkflowNodeEditor.css | 1 +
.../app/components/__tests__/WorkflowNodeEditor.css.test.ts | 1 +
packages/dashboard/vitest.config.ts | 2 +-
scripts/lib/test-quarantine.json | 8 +++++++-
4 files changed, 10 insertions(+), 2 deletions(-)
Fusion-Task-Id: FN-6154
Fusion-Task-Lineage: 14928ad1-dc84-461b-9adf-b5ee079e3b0d
Wait for workflow editor hydration before exercising save and rename flows.
- wait for the Save action and column inputs to render before editing workflow names
- switch the rename clicks to synchronous lookups after hydration to avoid async race flakiness
- keep the coverage focused on the existing save-and-close and dirty-switch scenarios
Files changed:
.../app/components/__tests__/WorkflowNodeEditor.test.tsx | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
Fusion-Task-Id: FN-6150
Fusion-Task-Lineage: 98044a22-3f07-4a58-ad61-19ba6b372565
Preserve quick-entry mobile touch behavior for Fast and Priority controls.
- treat action touch targets as generic Elements so nested SVG taps still resolve to their parent buttons
- add mobile touch-action styling for quick-entry action buttons to improve tap handling
- extend QuickEntryBox mobile tests to cover Fast toggle, Priority picker, and SVG touch targets
Files changed:
packages/dashboard/app/components/QuickEntryBox.css | 5 +
packages/dashboard/app/components/QuickEntryBox.tsx | 2 +-
packages/dashboard/app/components/__tests__/QuickEntryBox.test.tsx | 117 +++++++++++++++++----
3 files changed, 102 insertions(+), 22 deletions(-)
Fusion-Task-Id: FN-6145
Fusion-Task-Lineage: 2af1c142-25ba-41a8-ba4f-c58e38cc870a
Let the mobile workflow node editor use the full available screen height.
- replace the mobile inspector max-height cap with flex sizing so the editor stage can expand full screen
- preserve mobile inspector scrolling by setting a zero min-height in the stacked layout
- update the mobile CSS contract test to assert the new flex-based sizing rules
Files changed:
packages/dashboard/app/components/WorkflowNodeEditor.css | 3 ++-
.../dashboard/app/components/__tests__/WorkflowNodeEditor.css.test.ts | 3 ++-
2 files changed, 4 insertions(+), 2 deletions(-)
Fusion-Task-Id: FN-6144
Fusion-Task-Lineage: 49d06acb-17c6-40fd-9c6d-3af98ddf8f6e
Restore pinned mobile chat scroll position when visibility-driven refetch hooks fire.
- re-anchor mobile chat to the bottom during visibility/pageshow refetch capture when the user was pinned
- tighten ChatView visibility restore regression tests to assert the synchronous re-anchor path directly
- remove the ChatView rooms test quarantine and restore the dashboard include list entry
Files changed:
packages/dashboard/app/components/ChatView.tsx | 6 +++++-
.../app/components/__tests__/ChatView.rooms.test.tsx | 17 ++++++++---------
.../app/components/__tests__/ChatView.test.tsx | 7 ++++---
packages/dashboard/vitest.config.ts | 2 +-
scripts/lib/test-quarantine.json | 8 +-------
5 files changed, 19 insertions(+), 21 deletions(-)
Fusion-Task-Id: FN-6142
Fusion-Task-Lineage: 2974cf0d-5512-4b24-ab0c-2d2fb63fd41a
Convert the built-in PR lifecycle into a reusable fragment instead of a selectable task workflow.
- mark builtin:pr-workflow as a fragment and exclude fragments from default-enabled built-ins
- hide built-in fragments from the General settings workflow toggles
- update core and dashboard tests to assert fragment behavior and reject task selection of the PR lifecycle fragment
- add a changeset for the published CLI package
Files changed:
.changeset/pr-lifecycle-fragment.md | 5 +++++
.../core/src/__tests__/builtin-workflows.test.ts | 24 ++++++++++++++++------
packages/core/src/builtin-workflows.ts | 7 ++++---
packages/core/src/store.ts | 2 +-
.../__tests__/WorkflowNodeEditor.test.tsx | 3 ++-
.../settings/sections/GeneralSection.tsx | 4 +++-
6 files changed, 33 insertions(+), 12 deletions(-)
Fusion-Task-Id: FN-6137
Fusion-Task-Lineage: d959ba3b-2e50-4c9b-a1fa-161776939403
Reorder the Quick Entry action row so the primary create controls appear first.
- move Save, Fast, GitHub, and Priority controls to the start of the Quick Entry actions row
- preserve the existing priority picker behavior while relocating its trigger and portal markup
- update QuickEntryBox tests to assert the new DOM order and keep focus-coverage stable after the reorder
Files changed:
packages/dashboard/app/components/QuickEntryBox.tsx | 225 +++++++++++----------
packages/dashboard/app/components/__tests__/QuickEntryBox.test.tsx | 47 +++--
2 files changed, 145 insertions(+), 127 deletions(-)
Fusion-Task-Id: FN-6131
Fusion-Task-Lineage: d95401b9-4440-4c55-ad32-94df7d0c33fe
Prevent mobile quick-entry touches from stealing focus from the task textarea.
- intercept touch interactions on quick-entry action buttons before the browser refocuses them
- restore textarea focus after touch-triggered quick-entry actions complete
- avoid autofocus in the deps search input when the textarea is already focused
- add mobile regression coverage across the full quick-entry action button surface, including disabled buttons
Files changed:
packages/dashboard/app/components/QuickEntryBox.tsx | 32 +++++-
packages/dashboard/app/components/__tests__/QuickEntryBox.test.tsx | 123 +++++++++++++++++++++
2 files changed, 153 insertions(+), 2 deletions(-)
Fusion-Task-Id: FN-6128
Fusion-Task-Lineage: 598e6ba5-6e83-426c-9bf2-dd2ac4215092
Keep the promote action pinned to the right edge of task card action rows.
- add `margin-left: auto` to the promote action send-back button styling
- preserve right alignment for the mobile action row breakpoint
- add TaskCard coverage for solo and multi-action mobile layouts
Files changed:
packages/dashboard/app/components/TaskCard.css | 5 +++
packages/dashboard/app/components/__tests__/TaskCard.test.tsx | 40 ++++++++++++++++++++++
2 files changed, 45 insertions(+)
Fusion-Task-Id: FN-6129
Fusion-Task-Lineage: 70aed0c1-b007-4a71-9755-04535b630888
Replace the empty lane toggle button with an accessible tappable header for workflow rows on mobile.
- make the full workflow lane header act as the collapse toggle
- add keyboard support plus hover and focus-visible states for the header control
- update Lane tests to cover header click, keyboard toggles, and removal of the empty icon button
Files changed:
packages/dashboard/app/components/Lane.css | 11 +++++++
packages/dashboard/app/components/Lane.tsx | 30 +++++++++++--------
packages/dashboard/app/components/__tests__/Lane.test.tsx | 35 +++++++++++++++++++---
3 files changed, 60 insertions(+), 16 deletions(-)
Fusion-Task-Id: FN-6118
Fusion-Task-Lineage: 0cc1b632-1e59-4d1d-b274-f1da53a503f4
Remove the workflow lane chevron while preserving collapse behavior.
- remove the chevron icon import and button contents from the workflow lane toggle
- keep the existing lane toggle button and accessible label behavior intact
- add a regression test that asserts the lane toggle renders without an svg icon
Files changed:
packages/dashboard/app/components/Lane.tsx | 5 +----
packages/dashboard/app/components/__tests__/Lane.test.tsx | 7 +++++--
2 files changed, 6 insertions(+), 6 deletions(-)
Fusion-Task-Id: FN-6115
Fusion-Task-Lineage: ce865f17-1e29-4345-b0cd-d5038ca56333
Ensure the reliability view fills its flex container across loading, populated, and error states.
- add full-height styling for reliability loading and error states
- include reliability view in shared min-height reset for app content containers
- expand reliability view tests to assert width and height fill on desktop and mobile
Files changed:
packages/dashboard/app/components/ReliabilityView.css | 7 +++++++
.../app/components/__tests__/ReliabilityView.test.tsx | 14 ++++++++++----
packages/dashboard/app/styles.css | 3 ++-
3 files changed, 19 insertions(+), 5 deletions(-)
Fusion-Task-Id: FN-6112
Fusion-Task-Lineage: c5b2bd85-4024-4f88-b64d-dbc90b3cf2ed
Keep the Reliability view filling its flex parent across mobile and desktop states.
- add flex growth and min-width safeguards to the Reliability view, loading, and error containers
- add desktop and mobile regression coverage for loading, populated, and error rendering states
Files changed:
packages/dashboard/app/components/ReliabilityView.css | 6 +++
packages/dashboard/app/components/__tests__/ReliabilityView.test.tsx | 59 ++++++++++++++++++++++
2 files changed, 65 insertions(+)
Fusion-Task-Id: FN-6110
Fusion-Task-Lineage: 5fe1e5a7-f13a-4316-8c4e-b5c85a51ce86
Update the WorkflowNodeEditor CSS contract test to match the standalone mobile panel override selector.
- narrow the mobile selector contract assertion to the select and manage controls
- stop expecting the collapsed button in the standalone override rule
Files changed:
packages/dashboard/app/components/__tests__/WorkflowNodeEditor.css.test.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
Fusion-Task-Id: FN-6099
Fusion-Task-Lineage: 0e698ef2-c532-4a7d-9450-17b04f93be37
Keep QuickEntryBox expanded or collapsed after creating a task instead of forcing a reset.
- stop resetForm from collapsing the textarea and disclosure controls after successful task creation
- update QuickEntryBox tests to expect preserved visible controls after submit and preserved collapsed state when manually collapsed
- cover the submit flow where focus restoration keeps controls visible without changing user-selected disclosure state
Files changed:
.../dashboard/app/components/QuickEntryBox.tsx | 2 --
.../components/__tests__/QuickEntryBox.test.tsx | 38 +++++++++++++++++-----
2 files changed, 29 insertions(+), 11 deletions(-)
Fusion-Task-Id: FN-6104
Fusion-Task-Lineage: fd77c491-cd37-4a57-8270-3eb5e7ba3c94
Align the regular chat stop button with the composer control sizing while quarantining an unrelated flaky room test.
- define a shared chat input control size variable and apply it to send/stop buttons for consistent width and minimum height
- update the chat input autosize CSS test to assert the shared control size contract and textarea minimum height
- quarantine the unrelated flaky ChatView rooms test in the dashboard Vitest config and quarantine ledger per policy
Files changed:
packages/dashboard/app/components/ChatView.css | 20 +++++++++++++-------
.../__tests__/ChatView.chat-input-autosize.test.tsx | 16 +++++++++++-----
packages/dashboard/vitest.config.ts | 3 ++-
scripts/lib/test-quarantine.json | 8 +++++++-
4 files changed, 33 insertions(+), 14 deletions(-)
Fusion-Task-Id: FN-6103
Fusion-Task-Lineage: 3efc95ba-9369-4022-aa6e-f1981485caea
Ensure quick task model overrides flow through planning and submission.
- add planning model selection state to inline task creation and include it in submit payloads only when explicitly overridden
- extend the model selection modal with an optional planning-model picker that clears preset mode consistently with other manual overrides
- cover planning, combined overrides, and default omission behavior in inline create card and quick entry tests
Files changed:
packages/dashboard/app/components/InlineCreateCard.tsx | 26 ++++++++-
packages/dashboard/app/components/ModelSelectionModal.tsx | 45 +++++++++++++++
packages/dashboard/app/components/__tests__/InlineCreateCard.test.tsx | 67 +++++++++++++++++++++-
packages/dashboard/app/components/__tests__/QuickEntryBox.test.tsx | 49 ++++++++++++----
4 files changed, 172 insertions(+), 15 deletions(-)
Fusion-Task-Id: FN-6101
Fusion-Task-Lineage: 7c1553d2-3edb-4b23-ad36-77756bbfe1dc
Open workflow-mode edits on the workflow the user already selected.
- pass the workflow editor's initial workflow id through AppModals
- preselect the matching workflow in WorkflowNodeEditor before defaulting to the first workflow
- skip the mobile workflow list stage when a valid initial workflow is already selected
- add dashboard tests for desktop selection, missing-id fallback, and mobile deep-link behavior
- add a patch changeset for @runfusion/fusion
Files changed:
.../fn-6088-workflow-editor-selected-workflow.md | 5 +++
packages/dashboard/app/components/AppModals.tsx | 1 +
.../app/components/WorkflowNodeEditor.tsx | 37 ++++++++++++++++++++--
.../__tests__/WorkflowNodeEditor.test.tsx | 34 ++++++++++++++++++++
4 files changed, 74 insertions(+), 3 deletions(-)
Fusion-Task-Id: FN-6088
Fusion-Task-Lineage: 88a0cd03-2112-4706-b6b5-4cbebdcae234
Improve ReliabilityView so pending and failed fetches render explicit UI states.
- add dedicated loading and error states to ReliabilityView while preserving existing data during background refreshes
- style the new reliability loading and error containers in the dashboard view CSS
- extend ReliabilityView tests to cover loading, fetch failure, and refresh behavior alongside the existing layout assertion
Files changed:
packages/dashboard/app/components/ReliabilityView.css | 25 ++++++++++
packages/dashboard/app/components/ReliabilityView.tsx | 41 ++++++++++++++---
packages/dashboard/app/components/__tests__/ReliabilityView.test.tsx | 53 ++++++++++++++++++++--
3 files changed, 109 insertions(+), 10 deletions(-)
Fusion-Task-Id: FN-6097
Fusion-Task-Lineage: c6949cc6-4383-4e53-8467-5656a101199e