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
Filter active task diff displays to commits attributed to the current task when a branch range includes foreign task commits. This keeps task cards and Changes tabs from showing inherited branch stacks as task-owned file changes.
Fusion-Task-Id: FN-6117
Add periodic bundle version polling so open dashboard tabs refresh after new deployments.
- add a production polling interval to version checks for visible dashboard tabs
- clear installed polling when version-check state resets to avoid duplicate timers in tests/runtime
- expand versionCheck coverage for poll-triggered mismatch detection, cooldown behavior, and cleanup
Files changed:
packages/dashboard/app/__tests__/versionCheck.test.ts | 115 +++++++++++++++++++++
packages/dashboard/app/versionCheck.ts | 27 ++++-
2 files changed, 140 insertions(+), 2 deletions(-)
Fusion-Task-Id: FN-6124
Fusion-Task-Lineage: a211fc03-06fd-4142-8878-98ac60b70c13
Expose the dashboard file viewer to plugin views and wire Compound Engineering artifacts to it.
- add an openFile callback to the dashboard plugin view context and pass through the app host implementation
- switch Compound Engineering artifact Open actions to the built-in file viewer with matching styling and coverage
- document the new plugin context capability and add a published changeset for the CLI package
Files changed:
.changeset/ce-docs-built-in-viewer.md | 5 +++
docs/PLUGIN_AUTHORING.md | 2 +-
packages/dashboard/app/App.tsx | 1 +
packages/dashboard/app/plugins/types.ts | 2 ++
.../src/dashboard-interop.d.ts | 1 +
.../src/dashboard/CompoundEngineeringView.css | 16 +++++++++
.../src/dashboard/CompoundEngineeringView.tsx | 24 +++++++-------
.../__tests__/CompoundEngineeringView.test.tsx | 38 ++++++++++++++++++++++
8 files changed, 76 insertions(+), 13 deletions(-)
Fusion-Task-Id: FN-6119
Fusion-Task-Lineage: 8feb461c-b1d2-4059-9aa1-ffc756d15196
Prevent stale terminal connection metadata from replaying after it has already been delivered.
- only retain scrollback and connected payloads when no listeners are registered yet
- clear buffered terminal events after live subscribers receive them
- add regression coverage for scrollback and connected replay behavior
Files changed:
.../app/hooks/__tests__/useTerminal.test.ts | 50 ++++++++++++++++++++++
packages/dashboard/app/hooks/useTerminal.ts | 23 ++++++----
2 files changed, 65 insertions(+), 8 deletions(-)
Fusion-Task-Id: FN-6116
Fusion-Task-Lineage: 5876fe24-2e90-4ef1-9e8b-5abce40555b4
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
Right-align the task card promote action within its action row.
- add auto margin to the promote action so it anchors to the row's right edge
- cover the promote action alignment with a TaskCard CSS regression test
- add a patch changeset for the published CLI package
Files changed:
.changeset/fn-6092-promote-button.md | 5 +++++
packages/dashboard/app/components/TaskCard.css | 1 +
.../app/components/__tests__/TaskCard.test.tsx | 21 +++++++++++++++++++++
3 files changed, 27 insertions(+)
Fusion-Task-Id: FN-6092
Fusion-Task-Lineage: eacd596e-c810-44fd-b8ec-05c76988649f
Align the promote action chip with the task card's other pill-style controls.
- add shared gap and padding to the promote action chip styling
- match send-back promote styling to the updated chip spacing contract
- load app CSS in the task card test and assert the promote action keeps the expected chip class and spacing
Files changed:
packages/dashboard/app/components/TaskCard.css | 4 +++
.../app/components/__tests__/TaskCard.test.tsx | 34 +++++++++++++++-------
2 files changed, 27 insertions(+), 11 deletions(-)
Fusion-Task-Id: FN-6086
Fusion-Task-Lineage: 8e8f07d2-8bf2-46d3-b488-766694495ec4
Align dashboard behavior and test expectations for the backfill-2 suite.
- restore the mobile agent delete action for idle, paused, and error states
- update the settings routing test to match the current Scheduling & Capacity button label
- make the EventSource mock behave like a constructed instance in the agents mobile tests
- expect the board mobile render flow to register the pageshow listener
Files changed:
packages/dashboard/app/components/AgentsView.tsx | 11 +++++++++++
.../components/__tests__/SettingsModalNodeRouting.test.tsx | 2 +-
.../app/components/__tests__/agents-view-mobile.test.tsx | 11 +++++++----
.../components/__tests__/board-mobile-initial-render.test.tsx | 2 +-
4 files changed, 20 insertions(+), 6 deletions(-)
Fusion-Task-Id: FN-6090
Fusion-Task-Lineage: 19e880fe-dea7-4d51-b8e0-97fa184bb5ed
Make quick task entry open with its controls visible by default.
- default the quick entry textarea and disclosure controls to the expanded state
- update quick entry component tests to assert the new default-expanded behavior and collapse toggle flow
- tighten App settings-button selection to avoid collisions with quick-entry control labels
Files changed:
.../__tests__/quick-entry-expanded-height.test.tsx | 24 +--
.../dashboard/app/components/QuickEntryBox.tsx | 6 +-
.../app/components/__tests__/App.test.tsx | 8 +-
.../components/__tests__/QuickEntryBox.test.tsx | 174 ++++++++++-----------
4 files changed, 103 insertions(+), 109 deletions(-)
Fusion-Task-Id: FN-6081
Fusion-Task-Lineage: 37cce52f-170c-4f2a-b340-33bbe225f610
Ensure the mobile workflow editor keeps the React Flow surface tall enough for edges to render correctly.
- add a full-height mobile rule for the workflow editor React Flow surface
- extend the mobile CSS contract test to assert the height requirement
- broaden the selector width test to cover the collapsed workflow selector button
Files changed:
packages/dashboard/app/components/WorkflowNodeEditor.css | 1 +
.../app/components/__tests__/WorkflowNodeEditor.css.test.ts | 6 +++++-
2 files changed, 6 insertions(+), 1 deletion(-)
Fusion-Task-Id: FN-6079
Fusion-Task-Lineage: a6f1de35-ce99-4673-bfaf-183124969a7c
Update dashboard tests to mirror constructor-based browser APIs and xterm addons.
- rewrite SessionTerminal mobile test doubles as constructable function mocks so xterm and addon instances initialize like real classes
- replace the useDocuments AbortController stub with a class-based mock to preserve constructor semantics during fetch cancellation tests
Files changed:
.../__tests__/SessionTerminal.mobile.test.tsx | 21 +++++++++++++++++----
.../app/hooks/__tests__/useDocuments.test.ts | 8 ++++----
2 files changed, 21 insertions(+), 8 deletions(-)
Fusion-Task-Id: FN-6078
Fusion-Task-Lineage: d8e0a9aa-6c7c-44c1-b9d4-5196924531c1
Preserve unsaved workflow value edits made while a save request is in flight.
- track the keys included in the current save request before sending it
- clear only the saved keys after a successful save so newer edits remain pending
- add regression coverage for mid-flight edits that trigger a follow-up save
Files changed:
packages/dashboard/app/components/WorkflowSettingsPanel.tsx | 7 +++-
packages/dashboard/app/components/__tests__/WorkflowSettingsPanel.test.tsx | 41 +++++++++++++++++++++-
2 files changed, 46 insertions(+), 2 deletions(-)
Fusion-Task-Id: FN-6073
Fusion-Task-Lineage: 31e05269-d51d-40c0-9691-87e61d464992