List view now starts with a title-only table while preserving column toggle customization.
- Set the first-run default visible column set to Title only.
- Keep all optional column toggles available and saved preferences authoritative.
- Update ListView tests for title-only defaults, bulk-edit spans, and title hiding flows.
Files changed:
packages/dashboard/app/components/ListView.tsx | 6 +-
.../app/components/__tests__/ListView.test.tsx | 87 ++++++++++++++--------
2 files changed, 61 insertions(+), 32 deletions(-)
Fusion-Task-Id: FN-6530
Fusion-Task-Lineage: 7838b5fa-2424-4fb6-9e80-7806aaf6eeb3
List-view active task rows now use a calmer static highlight instead of the animated glow.
- Replace desktop list-row glow animation with a subtle background and inset border.
- Match the mobile list-card active styling to the toned-down static highlight.
- Rename the ListView test case to document the expected static highlight styling.
Files changed:
packages/dashboard/app/components/ListView.css | 16 ++++++++--------
.../dashboard/app/components/__tests__/ListView.test.tsx | 2 +-
2 files changed, 9 insertions(+), 9 deletions(-)
Fusion-Task-Id: FN-6529
Fusion-Task-Lineage: 67286eee-0360-41dd-be78-592b40eb5bee
Quick chat now re-anchors to the latest message when opened content finishes loading.
- Track message-loading state with the previous open thread state.
- Re-run bottom anchoring when direct or room-thread messages transition from loading to loaded.
- Cover streaming, direct thread, and mobile room-thread tail anchoring with regression tests.
Files changed:
packages/dashboard/app/components/QuickChatFAB.tsx | 21 ++-
.../app/components/__tests__/QuickChatFAB.test.tsx | 176 +++++++++++++++++++++
2 files changed, 193 insertions(+), 4 deletions(-)
Fusion-Task-Id: FN-6513
Fusion-Task-Lineage: 2cf3e110-b447-4182-a7ff-886a2b5cb815
Quick Chat now restores the persisted session id without same-target auto-init replacing it.
- Wait for persisted session lookup before auto-initializing the selected quick chat target.
- Skip the first same-target switch after restoring an existing session so the restored id remains authoritative.
- Prefer message activity over metadata-only updates when falling back from stale persisted sessions.
- Cover model, agent, and mobile restoration paths plus hook-level same-target replay behavior.
- Document the quick chat last-session restoration regression and invariant.
Files changed:
docs/solutions/ui-bugs/quick-chat-last-opened-session-restore.md | 60 ++++++++++
packages/dashboard/app/components/QuickChatFAB.tsx | 23 +++-
packages/dashboard/app/components/__tests__/QuickChatFAB.test.tsx | 130 ++++++++++++++++++++-
packages/dashboard/app/hooks/__tests__/useQuickChat.test.ts | 38 ++++++
4 files changed, 246 insertions(+), 5 deletions(-)
Fusion-Task-Id: FN-6510
Fusion-Task-Lineage: 135807dd-30f3-4032-9de8-f34927e5c44d
Add a canonical dashboard workflow editor guide and connect it from related docs.
- Add a new Workflow Editor guide covering entry points, canvas anatomy, authoring panels, settings values, templates, AI design, import/export, and mobile behavior.
- Link the guide from the docs index, settings reference, and Workflow IR overview.
- Require the workflow editor guide in the docs README index coverage test.
Files changed:
docs/README.md | 1 +
docs/settings-reference.md | 2 +-
docs/workflow-editor.md | 158 +++++++++++++++++++++
docs/workflow-steps.md | 2 +-
.../cli/src/__tests__/docs-readme-index.test.ts | 1 +
5 files changed, 162 insertions(+), 2 deletions(-)
Fusion-Task-Id: FN-6520
Fusion-Task-Lineage: 9a2525a5-6ff8-48de-ae13-a7c7c5844f99
Expanded agent chat now keeps the modal title context while hiding the rest of the chrome.
- Preserve the task title row when chat expands and keep header spacing balanced.
- Continue hiding tabs and modal actions while expanded chat occupies the modal body.
- Extend desktop, mobile, and embedded chat coverage for the expanded title-row behavior.
Files changed:
.../dashboard/app/components/TaskDetailModal.css | 10 ++--
.../TaskDetailModal.attachments-and-tabs.test.tsx | 58 ++++++++++++++++++++--
2 files changed, 59 insertions(+), 9 deletions(-)
Fusion-Task-Id: FN-6517
Fusion-Task-Lineage: 77a82f16-5711-4e8d-9560-fd6e0fdfa655
Rescues the QuickEntryBox suite by restoring jsdom globals instead of keeping it quarantined.
- Snapshot and restore QuickEntryBox viewport, visibility, matchMedia, and object URL descriptors after each test.
- Add a guard test that proves mutated jsdom globals return to their original descriptors.
- Remove the QuickEntryBox quarantine entries while documenting the rescue pattern.
Files changed:
docs/testing.md | 2 +
.../components/__tests__/QuickEntryBox.test.tsx | 50 ++++++++++++++++++++++
packages/dashboard/vitest.config.ts | 7 ++-
scripts/lib/test-quarantine.json | 5 ---
4 files changed, 55 insertions(+), 9 deletions(-)
Fusion-Task-Id: FN-6514
Fusion-Task-Lineage: 12f20ad8-19ee-4168-91a9-33193b1ab5f7
Expose declared fallback model lanes in project Settings while preserving workflow-scoped persistence.
- Load the default workflow definition before rendering Project Models lane controls.\n- Show fallback model dropdowns only when the workflow declares matching provider/model settings.\n- Persist and reset fallback lane edits through the Settings modal primary Save action.\n- Update settings documentation for default-workflow and global fallback model placement.
Files changed:\n docs/settings-reference.md | 40 +++---\n .../components/__tests__/SettingsModal.test.tsx | 135 ++++++++++++++++++++-\n .../settings/sections/ProjectModelsSection.tsx | 52 +++++++-\n 3 files changed, 204 insertions(+), 23 deletions(-)
Fusion-Task-Id: FN-6508
Fusion-Task-Lineage: 18dba2f9-658a-4b82-850f-3bbeb70341d3
Keep the Task Detail chat send glyph proportional to its touch target on desktop and mobile.
- Set the task chat send button icon sizing token to the larger spacing value.
- Preserve the existing desktop and mobile touch-target dimensions.
- Add CSS regression coverage for the send glyph and mobile sizing rules.
Files changed:
packages/dashboard/app/components/TaskChatTab.css | 6 ++++++
.../app/components/__tests__/TaskChatTab.test.tsx | 17 +++++++++++++++++
2 files changed, 23 insertions(+)
Fusion-Task-Id: FN-6507
Fusion-Task-Lineage: 619aef93-d225-443c-9cf2-41a59d794148
Keeps tablet task detail modals wide enough and within the viewport.\n\n- Reconcile the tablet overlay offset with modal max-height so actions remain visible.\n- Widen the tablet task detail modal to use more horizontal viewport space.\n- Add CSS-focused coverage for tablet sizing plus unchanged desktop and mobile guards.\n- Add a patch changeset for the published Fusion package.\n\nFiles changed:\n .changeset/fn-6500-tablet-task-detail-modal.md | 5 ++\n .../task-detail-modal-tablet-width.test.ts | 14 +++--\n .../dashboard/app/components/TaskDetailModal.css | 15 +++--\n ...etailModal.responsive-and-dependencies.test.tsx | 64 ++++++++++++++++++++++\n .../__tests__/core-modals-mobile.test.tsx | 5 +-\n 5 files changed, 94 insertions(+), 9 deletions(-)
Fusion-Task-Id: FN-6500
Fusion-Task-Lineage: 016a2839-29f9-48de-b644-a5fcd27b35e3
Keep tablet chat navigation available while software keyboards reduce the viewport.
- Stop auto-hiding the tablet chat sidebar when the keyboard opens.
- Bound the sidebar to its minimum width during tablet keyboard-open layout without overwriting the saved width.
- Cover visible and user-collapsed tablet sidebar behavior in mobile render tests.
- Add a patch changeset for the published Fusion package.
Files changed:
.changeset/fn-6494-tablet-chat-sidebar.md | 5 ++
packages/dashboard/app/components/ChatView.tsx | 34 +++--------
.../__tests__/ChatView.mobile-render.test.tsx | 70 ++++++++++++++++++++--
3 files changed, 79 insertions(+), 30 deletions(-)
Fusion-Task-Id: FN-6494
Fusion-Task-Lineage: 618cccc3-5102-4e9c-ac0e-6c7a44742940
The POST /chat/sessions/:id/messages writer (and cancel + isGenerating
enrichment) resolved its per-project ChatManager/ChatStore via
getOrCreateProjectStore, while the GET reader resolves via the engine-aware
resolveProjectChatContext. When those resolved to different store instances,
a sent message persisted to one store but the reload read from another, so
regular chat (ChatView) messages vanished after leaving and returning.
Quick Chat masked it by keeping its thread warm in memory (no server reload).
resolveScopedChatManager now resolves through resolveProjectChatContext so
writer and reader always share one store. Updated multi-project routing tests
to the corrected invariant and added an engine-aware regression test.
Relying on env(safe-area-inset-*) in remotely-served dashboard CSS was
unreliable (depends on device Chromium version reporting insets + the
service-worker-cacheable CSS being current). Configure
@capacitor-community/safe-area with detectViewportFitCoverChanges:false +
initialViewportFitCover:false so it pads the whole webview natively on every
Android device, guaranteeing the app never renders under the status/nav bars
regardless of CSS or webview version.
Android WebView returns 0 for env(safe-area-inset-top) by default, so the
CSS-only header inset had no effect on edge-to-edge devices (API 35+).
- Add @capacitor-community/safe-area@^7.0.0 (Capacitor 7 compatible); it
patches the webview so env(safe-area-inset-*) report real values. Enabled
natively (no JS init), so it works in remote/live mode too.
- capacitor.config.ts: declare SafeArea plugin (initialViewportFitCover).
- mobile-run-android.sh: idempotently enable EdgeToEdge in MainActivity after
cap add (android/ is generated/gitignored), required by the plugin.
Keep the Agents view focused when starting the selected agent from the dashboard TUI.
- Treat `s` as the selected-agent start command inside the Agents interactive view.
- Preserve `m` as the universal Main/status shortcut and keep the `s` alias outside Agents.
- Add regression coverage for Agents, non-Agents, status, and empty Agents shortcut behavior.
- Add a patch changeset for the published CLI package.
Files changed:
.changeset/fn-6491-tui-agents-start-key.md | 5 +
.../commands/dashboard-tui/__tests__/app.test.tsx | 102 ++++++++++++++++++++-
packages/cli/src/commands/dashboard-tui/app.tsx | 9 +-
3 files changed, 112 insertions(+), 4 deletions(-)
Fusion-Task-Id: FN-6491
Fusion-Task-Lineage: 82a9acab-6e4a-400c-80ee-54d051245b57
- Add scripts/mobile-run-android.sh + pnpm mobile:run:android (auto-detects
Android SDK + JDK 21, writes local.properties, reconnects network ADB
before deploy, supports remote backend via FUSION_SERVER_URL).
- Header.css: reserve env(safe-area-inset-top) so top app chrome no longer
draws under the OS status bar on edge-to-edge native shells (Capacitor
Android API 35+, iOS notch, PWA standalone). No-op on web/desktop.
- .gitignore: ignore generated packages/mobile/{ios,android} (stale paths
pointed at packages/dashboard/).
Replace raw dashboard RGB alpha colors with color-mix token expressions and guard the global CSS surface.
- Converted global theme shadow, state, mission, event, and theme-data alpha colors from raw rgba() to color-mix() expressions.
- Added CSS fixture loading for theme-data.css and a regression test banning raw rgb/rgba outside var() fallbacks across global app CSS.
- Documented the stricter dashboard styling rule for global and theme token CSS.
Files changed:
docs/dashboard-guide.md | 2 +-
.../__tests__/global-theme-css-no-raw-rgba.test.ts | 68 +++
packages/dashboard/app/public/theme-data.css | 573 +++++++++++----------
packages/dashboard/app/styles.css | 49 +-
packages/dashboard/app/test/cssFixture.ts | 7 +
5 files changed, 389 insertions(+), 310 deletions(-)
Fusion-Task-Id: FN-6489
Fusion-Task-Lineage: 7c466971-d15c-4382-a24b-1b32eea71974
Rescue the same-day core and CLI flaky quarantines by fixing their fixture seams instead of appeasing timeouts.
- Make the core concurrent-write lock helper release synchronously inside its child process so package load cannot delay the transient lock release.
- Close real CLI TaskStore fixtures before removing temp roots and switch mock cleanup to non-hoisted unmocking.
- Remove both test files from package quarantine excludes and clear the quarantine ledger while documenting the rescue pattern.
Files changed:
docs/testing.md | 2 ++
packages/cli/src/__tests__/extension-task-tools.test.ts | 17 +++++++++++++----
packages/cli/vitest.config.ts | 4 +++-
.../core/src/__tests__/store-concurrent-writes.test.ts | 8 +++++++-
packages/core/vitest.config.ts | 4 +++-
scripts/lib/test-quarantine.json | 13 +------------
6 files changed, 29 insertions(+), 19 deletions(-)
Fusion-Task-Id: FN-6486
Fusion-Task-Lineage: c90358c4-0549-4c68-8d17-2e2a336433b5
Quarantine the load-sensitive CLI extension task tools suite instead of widening Vitest timeouts.
- Add the extension task tools test file to the CLI Vitest quarantine exclude list.\n- Record the FN-6483 quarantine evidence in the deletion-ratchet ledger while preserving the existing core quarantine entry.\n\nFiles changed:\n packages/cli/vitest.config.ts | 5 +++++\n scripts/lib/test-quarantine.json | 5 +++++\n 2 files changed, 10 insertions(+)
Fusion-Task-Id: FN-6483
Fusion-Task-Lineage: 4a3be3b4-b2b4-4e05-afd0-564aa0d28c68