Commit Graph

141 Commits

Author SHA1 Message Date
gsxdsm
11c4120705 FN-6659: keep xterm font metrics symbols-free
Keep terminal wide-glyph fallback out of xterm's measured font path while preserving Nerd Font symbols in DOM rendering.

- Split terminal font resolution into symbols-free xterm font families and scoped glyph fallback families.
- Apply the glyph fallback CSS variable to both TerminalModal and SessionTerminal surfaces.
- Update regression coverage and the documented mobile xterm wide-glyph recurrence analysis.

Files changed:
 .changeset/fn-6659-terminal-render.md              |  5 +++
 .../xterm-symbols-nerd-font-unicode-range.md       | 22 +++++++-----
 .../dashboard/app/__tests__/terminal-input.test.ts | 42 +++++++++++++---------
 .../dashboard/app/components/SessionTerminal.css   |  8 +++++
 .../dashboard/app/components/SessionTerminal.tsx   | 21 +++++++++--
 .../dashboard/app/components/TerminalModal.css     |  8 +++++
 .../dashboard/app/components/TerminalModal.tsx     | 13 ++++++-
 .../__tests__/SessionTerminal.mobile.test.tsx      |  6 ++--
 .../components/__tests__/SessionTerminal.test.tsx  | 14 ++++----
 .../components/__tests__/TerminalModal.test.tsx    |  9 +++--
 .../utils/__tests__/terminalPreferences.test.ts    |  2 +-
 .../dashboard/app/utils/terminalPreferences.ts     | 16 +++++----
 12 files changed, 117 insertions(+), 49 deletions(-)

Fusion-Task-Id: FN-6659

Fusion-Task-Lineage: e29a709d-9d9d-4a90-9616-8f08c41b126d
2026-06-18 15:59:34 -07:00
gsxdsm
16b6e5decb FN-6638: stabilize mobile terminal font metrics
Stabilize terminal font metric remeasurement across mobile and attach surfaces.

- Add a shared terminal font metric wait helper that falls back from full font stacks to concrete individual font families before remeasurement.
- Reapply font options, refit, resize, and refresh SessionTerminal after font metrics settle to cover attached CLI terminals.
- Pin text-size adjustment on xterm measurement subtrees so mobile WebKit cannot inflate ASCII cell metrics.
- Extend terminal preference and rendering tests, documentation, and changeset coverage for the recurrence.

Files changed:
 .changeset/fn-6638-terminal-render.md              |   5 +
 .../xterm-async-font-remeasure-paste-dedupe.md     |  20 +++-
 .../dashboard/app/__tests__/terminal-input.test.ts |  26 +++++
 .../dashboard/app/components/SessionTerminal.css   |  10 ++
 .../dashboard/app/components/SessionTerminal.tsx   |  29 ++++++
 .../dashboard/app/components/TerminalModal.css     |  10 ++
 .../dashboard/app/components/TerminalModal.tsx     |  24 ++---
 .../components/__tests__/SessionTerminal.test.tsx  |  41 +++++++-
 .../components/__tests__/TerminalModal.test.tsx    |  38 ++++++++
 .../utils/__tests__/terminalPreferences.test.ts    |  29 +++++-
 .../dashboard/app/utils/terminalPreferences.ts     | 107 +++++++++++++++++++++
 11 files changed, 319 insertions(+), 20 deletions(-)

Fusion-Task-Id: FN-6638

Fusion-Task-Lineage: edbf071d-a0c1-4955-95ff-83e6996f4674
2026-06-18 13:19:43 -07:00
gsxdsm
1bd8f6de6f FN-6603: fix mobile terminal font measurement
Stabilize terminal glyph measurement by keeping monospace text fonts ahead of symbols fallbacks.

- Move the Fusion Terminal Nerd Font Symbols face behind real monospace fonts in the shared xterm font stack and terminal presets.
- Document the mobile WebKit cell-measurement hazard and keep SessionTerminal aligned with the shared preference path.
- Add regression coverage for mobile wide-glyph spacing, preference presets, and terminal input rendering.
- Add a patch changeset for the published CLI bundle.

Files changed:
 .changeset/fn-6603-terminal-render.md              |  5 +++
 .../xterm-symbols-nerd-font-unicode-range.md       | 17 ++++++---
 .../dashboard/app/__tests__/terminal-input.test.ts | 42 ++++++++++++++++++++--
 .../dashboard/app/components/SessionTerminal.tsx   |  3 ++
 .../dashboard/app/components/TerminalModal.css     |  5 ++-
 .../__tests__/SessionTerminal.mobile.test.tsx      | 22 +++++++++++-
 .../components/__tests__/SessionTerminal.test.tsx  | 23 ++++++++++--
 .../dashboard/app/utils/terminalPreferences.ts     | 14 +++++---
 8 files changed, 115 insertions(+), 16 deletions(-)

Fusion-Task-Id: FN-6603

Fusion-Task-Lineage: b5d90064-1bfd-4da9-8d89-c95cf6fcec0c
2026-06-17 18:48:53 -07:00
gsxdsm
ca14a12b94 FN-6601: consolidate relative-time bucket formatting
Consolidate dashboard relative-time calculations behind a shared bucket helper while preserving each surface's display behavior.

- Add getRelativeTimeBucket to centralize parsing, boundary math, and bucket metadata.
- Route ActivityFeed, AgentLogViewer, MissionManager, and PlanningModeModal timestamp labels through the shared helper.
- Extend unit coverage for bucket boundaries plus surface-specific just-now and future timestamp behavior.

Files changed:
 packages/dashboard/app/components/ActivityFeed.tsx | 36 ++++++----
 .../dashboard/app/components/AgentLogViewer.tsx    | 36 ++++++----
 .../dashboard/app/components/MissionManager.tsx    | 32 +++++----
 .../dashboard/app/components/PlanningModeModal.tsx | 35 ++++++----
 .../app/components/__tests__/ActivityFeed.test.tsx |  8 +++
 .../components/__tests__/AgentLogViewer.test.tsx   |  8 +++
 .../app/utils/__tests__/relativeTimeAgo.test.ts    | 77 +++++++++++++++++++++-
 packages/dashboard/app/utils/relativeTimeAgo.ts    | 66 +++++++++++++++----
 8 files changed, 236 insertions(+), 62 deletions(-)

Fusion-Task-Id: FN-6601

Fusion-Task-Lineage: 3521afa0-f3ce-49a4-8861-efd4f64f9a69
2026-06-17 17:57:19 -07:00
gsxdsm
01b80db603 FN-6589: add structured ask-question chat tool
Add a native chat-agent tool for presenting structured questions to dashboard users.

- Register `fn_ask_question` for dashboard chat sessions with prompt guidance to wait for user replies.
- Reuse the existing structured question card parser by recognizing the new tool name.
- Validate ask-question parameters in engine tooling and cover chat/parser behavior with tests.
- Document the dashboard chat question flow and add a patch changeset.

Files changed:
 .changeset/fn-6589-chat-ask-question.md            |  5 ++
 docs/dashboard-guide.md                            |  3 +-
 .../utils/__tests__/parseQuestionToolCall.test.ts  | 19 +++++
 .../dashboard/app/utils/parseQuestionToolCall.ts   |  3 +-
 .../dashboard/src/__tests__/chat-manager.test.ts   | 10 ++-
 packages/dashboard/src/chat.ts                     | 10 ++-
 .../src/__tests__/agent-tools-ask-question.test.ts | 51 ++++++++++++
 packages/engine/src/agent-tools.ts                 | 94 ++++++++++++++++++++++
 packages/engine/src/index.ts                       |  2 +
 9 files changed, 190 insertions(+), 7 deletions(-)

Fusion-Task-Id: FN-6589
Fusion-Task-Lineage: 3f416010-ed2f-40b3-a899-7a9f4a6ed265
2026-06-17 16:53:29 -07:00
gsxdsm
c261217ac1 FN-6597: add task chat timestamps
Show compact relative timestamps in task chat without adding live polling.

- Add a shared relative-time formatter for chat timestamps.
- Render muted timestamps on user message headers and agent group metadata.
- Cover timestamp formatting and chat header rendering with dashboard tests.
- Document task chat timestamp behavior in the dashboard guide.

Files changed:
 docs/dashboard-guide.md                            |  2 +-
 packages/dashboard/app/components/TaskChatTab.css  | 19 +++++
 packages/dashboard/app/components/TaskChatTab.tsx  | 23 ++++-
 .../app/components/__tests__/TaskChatTab.test.tsx  | 97 +++++++++++++++++++++-
 .../app/utils/__tests__/relativeTimeAgo.test.ts    | 32 +++++++
 packages/dashboard/app/utils/relativeTimeAgo.ts    | 23 +++++
 6 files changed, 192 insertions(+), 4 deletions(-)

Fusion-Task-Id: FN-6597

Fusion-Task-Lineage: 52c54a9e-6d00-4df1-a454-2218a935ebda
2026-06-17 16:21:54 -07:00
gsxdsm
e923b5e84d FN-6527: add terminal shortcuts and preferences
Adds persistent terminal customization and keyboard-less navigation controls to the dashboard terminal.

- Add arrow shortcut buttons that send ANSI cursor sequences alongside existing Ctrl/Alt helpers.
- Add localStorage-backed terminal preferences for font family, size, cursor style, blink, and renderer with legacy font-size migration.
- Apply font and cursor preferences live, document renderer behavior, and cover preference parsing and modal controls with tests.

Files changed:
 docs/dashboard-guide.md                            |   3 +
 .../dashboard/app/components/TerminalModal.css     |  57 ++++-
 .../dashboard/app/components/TerminalModal.tsx     | 271 ++++++++++++++++-----
 .../components/__tests__/TerminalModal.test.tsx    | 135 +++++++++-
 .../utils/__tests__/terminalPreferences.test.ts    |  90 +++++++
 .../dashboard/app/utils/terminalPreferences.ts     | 197 +++++++++++++++
 6 files changed, 690 insertions(+), 63 deletions(-)

Fusion-Task-Id: FN-6527
Fusion-Task-Lineage: bc863486-9d2c-41d5-84a4-7b697e81a298
2026-06-17 00:06:24 -07:00
gsxdsm
a4537167ab FN-6501: render chat question response controls
Render structured assistant question prompts directly in chat surfaces.

- Add parser and formatter support for question tool calls.
- Add reusable question response UI for select, multi-select, text, and confirm prompts.
- Wire regular chat and quick chat to show live and answered question states.
- Cover parsing and chat response behavior with dashboard tests and localized labels.

Files changed:
 .changeset/fn-6501-chat-question-response.md       |   5 +
 docs/dashboard-guide.md                            |   2 +
 .../app/components/ChatQuestionResponse.css        | 194 ++++++++++++++++
 .../app/components/ChatQuestionResponse.tsx        | 247 +++++++++++++++++++++
 packages/dashboard/app/components/ChatView.tsx     |  85 ++++++-
 packages/dashboard/app/components/QuickChatFAB.tsx |  84 ++++++-
 .../__tests__/ChatQuestionResponse.test.tsx        |  52 +++++
 .../app/components/__tests__/ChatView.test.tsx     |  51 +++++
 .../app/components/__tests__/QuickChatFAB.test.tsx |  64 ++++++
 .../utils/__tests__/parseQuestionToolCall.test.ts  |  82 +++++++
 .../dashboard/app/utils/parseQuestionToolCall.ts   | 240 ++++++++++++++++++++
 packages/i18n/locales/en/app.json                  |  10 +
 12 files changed, 1105 insertions(+), 11 deletions(-)

Fusion-Task-Id: FN-6501
Fusion-Task-Lineage: 1fd4a3aa-b2d7-4157-a196-852fdeda680d
2026-06-16 20:13:13 -07:00
Phil Larson
724f31a877 fix(dashboard): document legacy task log deadlock handling 2026-06-14 14:27:45 -07:00
Phil Larson
84cf3ff6e5 fix(dashboard): guard task detail log entry rendering 2026-06-14 13:50:17 -07:00
gsxdsm
869a4f77da FN-6329: prevent Quick Chat keyboard board shift
Keep the mobile board layout stable while Quick Chat owns the keyboard viewport.

- Treat fullscreen mobile overlays as suppressors for App-level footer hiding.
- Pass Quick Chat mobile open state into the shared keyboard flag helper.
- Cover iOS, Android, modal, and non-mobile keyboard flag behavior.
- Document the Quick Chat mobile keyboard board-shift root cause and fix.

Files changed:
 .../quick-chat-mobile-keyboard-board-shift.md      | 58 ++++++++++++++++++++++
 packages/dashboard/app/App.tsx                     |  4 +-
 .../utils/__tests__/mobileBarKeyboardFlags.test.ts | 57 ++++++++++++++++++++-
 .../dashboard/app/utils/mobileBarKeyboardFlags.ts  | 10 +++-
 4 files changed, 126 insertions(+), 3 deletions(-)

Fusion-Task-Id: FN-6329

Fusion-Task-Lineage: f7c37252-c0ea-44f0-b4e3-5aa2022cf7bc
2026-06-12 19:22:11 -07:00
gsxdsm
4bd6024ef7 FN-6300: add live task chat tab
Add a live chat-style task detail tab for following and steering active agent work.

- Add TaskChatTab with grouped agent log bubbles, live-follow scrolling, and steering message composer.
- Share chat input autosize helpers between ChatView and task chat.
- Wire the Chat tab into task detail navigation with localized labels and regression coverage.

Files changed:
 docs/dashboard-guide.md                            |   2 +
 .../dashboard/app/components/AgentLogViewer.tsx    |   2 +-
 packages/dashboard/app/components/ChatView.tsx     |  25 +-
 packages/dashboard/app/components/TaskChatTab.css  | 193 ++++++++++++++
 packages/dashboard/app/components/TaskChatTab.tsx  | 276 +++++++++++++++++++++
 .../dashboard/app/components/TaskDetailModal.tsx   |  13 +-
 .../app/components/__tests__/TaskChatTab.test.tsx  | 181 ++++++++++++++
 .../TaskDetailModal.attachments-and-tabs.test.tsx  |  19 +-
 .../TaskDetailModal.definition-actions.test.tsx    | 104 ++++----
 ...etailModal.responsive-and-dependencies.test.tsx |   2 +-
 packages/dashboard/app/utils/chatInputAutosize.ts  |  18 ++
 packages/i18n/locales/en/app.json                  |   1 +
 packages/i18n/locales/es/app.json                  |   1 +
 packages/i18n/locales/fr/app.json                  |   1 +
 packages/i18n/locales/ko/app.json                  |   1 +
 packages/i18n/locales/zh-CN/app.json               |   1 +
 packages/i18n/locales/zh-TW/app.json               |   1 +
 17 files changed, 757 insertions(+), 84 deletions(-)

Fusion-Task-Id: FN-6300
Fusion-Task-Lineage: 1eb8a17b-3ca5-4cba-81c6-ac7ccce0a113
2026-06-12 10:00:08 -07:00
gsxdsm
d67f61d03e FN-6135: remove workflow toolbar collapse toggle
Simplify the workflow board toolbar by removing its collapse state and persistence.

- remove the workflow toolbar collapse toggle, handlers, and scoped localStorage persistence from Board
- drop collapse-specific workflow toolbar styling and mobile collapsed-layout rules
- replace collapse-focused board tests with assertions that the toolbar renders without a collapse affordance
- remove the unused workflow toolbar storage key and update project storage expectations

Files changed:
 packages/dashboard/app/components/Board.tsx        | 129 +++++---------
 packages/dashboard/app/components/Lane.css         |  36 ----
 .../app/components/__tests__/Board.test.tsx        | 187 +++------------------
 .../app/utils/__tests__/projectStorage.test.ts     |   3 +-
 packages/dashboard/app/utils/projectStorage.ts     |   1 -
 5 files changed, 60 insertions(+), 296 deletions(-)

Fusion-Task-Id: FN-6135

Fusion-Task-Lineage: 11c17edf-bbed-4ec5-a06e-00a2537ffac1
2026-06-09 16:02:08 -07:00
gsxdsm
320b153c45 FN-6113: fail fast on terminal provider errors
Fail fast on non-retryable provider failures in the in-review stall recovery flow.

- classify failed-task provider errors as non-retryable, retryable, or unknown in core stall detection
- surface terminal provider errors with dedicated dashboard copy and exported stall signal metadata
- pause in-review tasks immediately on non-retryable provider failures and record a dedicated run-audit mutation
- add regression coverage for provider error classification, self-healing disposition, and dashboard badge behavior

Files changed:
 .../core/src/__tests__/in-review-stall.test.ts     |  70 ++++++++++
 packages/core/src/in-review-stall.ts               |  53 ++++++-
 packages/core/src/index.ts                         |   4 +-
 .../app/utils/__tests__/inReviewStallCopy.test.ts  |   5 +-
 packages/dashboard/app/utils/inReviewStallCopy.ts  |   8 ++
 .../in-review-stall-deadlock-disposition.test.ts   | 153 +++++++++++++++++++++
 packages/engine/src/run-audit.ts                   |   1 +
 packages/engine/src/self-healing.ts                |  30 +++-
 8 files changed, 320 insertions(+), 4 deletions(-)

Fusion-Task-Id: FN-6113

Fusion-Task-Lineage: 5e89adb4-6b59-4deb-8811-5c75d6fa19cc
2026-06-09 12:51:20 -07:00
gsxdsm
a2f4bb14c0 FN-6080: remove workflow selector collapse controls
Always render the workflow selector expanded across the dashboard.

- remove collapsible workflow selector props, state, icons, and toggle styles
- stop InlineCreateCard from passing collapse persistence options
- delete project storage support and tests for collapsed workflow selector state
- add a patch changeset for the published CLI package

Files changed:
 .changeset/fn-6080-removal.md                      |  5 ++
 .../dashboard/app/components/InlineCreateCard.tsx  |  3 -
 .../dashboard/app/components/WorkflowSelector.css  | 14 +----
 .../dashboard/app/components/WorkflowSelector.tsx  | 65 +--------------------
 .../components/__tests__/InlineCreateCard.test.tsx | 50 ----------------
 .../components/__tests__/WorkflowSelector.test.tsx | 68 ----------------------
 .../app/utils/__tests__/projectStorage.test.ts     |  3 +-
 packages/dashboard/app/utils/projectStorage.ts     |  1 -
 8 files changed, 8 insertions(+), 201 deletions(-)

Fusion-Task-Id: FN-6080

Fusion-Task-Lineage: cca26111-9e20-47d0-8473-d18a3b488ae1
2026-06-09 08:14:16 -07:00
gsxdsm
4366a933da FN-6046: add collapsible workflow selectors
Add collapsible workflow selectors for board workflow controls and inline task creation.

- add a collapsible board workflow toolbar with persisted per-project state
- make the inline create workflow selector collapsible and store its expanded state per project
- update workflow selector styling, storage key allowlist, and regression coverage for collapse behavior

Files changed:
 packages/dashboard/app/components/Board.tsx        | 104 +++++++++++++--------
 .../dashboard/app/components/InlineCreateCard.css  |   9 ++
 .../dashboard/app/components/InlineCreateCard.tsx  |   3 +
 packages/dashboard/app/components/Lane.css         |  23 +++++
 .../dashboard/app/components/WorkflowSelector.css  |  20 +++-
 .../dashboard/app/components/WorkflowSelector.tsx  |  81 ++++++++++++++--
 .../app/components/__tests__/Board.test.tsx        | 101 ++++++++++++++++++--
 .../components/__tests__/InlineCreateCard.test.tsx |  57 ++++++++++-
 .../components/__tests__/WorkflowSelector.test.tsx |  73 ++++++++++++++-
 .../app/utils/__tests__/projectStorage.test.ts     |   4 +-
 packages/dashboard/app/utils/projectStorage.ts     |   2 +
 11 files changed, 420 insertions(+), 57 deletions(-)

Fusion-Task-Id: FN-6046

Fusion-Task-Lineage: 07cbe7a8-5740-479d-94a3-b178c72a5273
2026-06-09 02:09:31 -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
9b54f52b39 FN-5707: fix Android executor footer overlap after keyboard dismiss
Adjust mobile keyboard bar flags so Android keeps the executor footer stacked above the nav bar while iOS retains collapse behavior.

- extract mobile bar keyboard flag computation into a dedicated utility
- keep nav keyboard pinning cross-platform while limiting footer keyboard-collapse to iOS
- add focused unit tests for Android/iOS/modal/desktop keyboard flag scenarios
- update ExecutorStatusBar keyboard-open test assertion and dashboard guide keyboard behavior notes

Files changed:
 docs/dashboard-guide.md                            |  2 +-
 packages/dashboard/app/App.tsx                     | 23 ++++---
 .../__tests__/ExecutorStatusBar.test.tsx           |  6 +-
 .../utils/__tests__/mobileBarKeyboardFlags.test.ts | 73 ++++++++++++++++++++++
 .../dashboard/app/utils/mobileBarKeyboardFlags.ts  | 36 +++++++++++
 5 files changed, 129 insertions(+), 11 deletions(-)

Fusion-Task-Id: FN-5707

Fusion-Task-Lineage: ed01fcb0-d814-4595-9479-5baf97326ae7
2026-05-29 21:03:12 -07:00
gsxdsm
129e17d16c FN-5702: keep mobile footer and nav pinned when keyboard opens
Add viewport-offset handling so mobile bottom bars stay anchored while virtual keyboards resize the visual viewport.

- add a shared viewportOffset utility to compute keyboard-related visual viewport compensation
- update dashboard app bootstrap/index logic to apply compensation variables for pinned footer/nav layout
- extend mobile keyboard layout coverage with dedicated viewport compensation and bottom-bar tests
- document the keyboard/pinned-bar behavior update in dashboard guide

Files changed:
 docs/dashboard-guide.md                            |  2 +-
 .../mobile-bottom-bars-keyboard-layout.test.ts     | 12 ++-
 .../viewport-compensation-keyboard.test.ts         | 24 ++++++
 packages/dashboard/app/index.html                  | 39 +++++++++-
 .../app/utils/__tests__/viewportOffset.test.ts     | 86 ++++++++++++++++++++++
 packages/dashboard/app/utils/viewportOffset.ts     | 64 ++++++++++++++++
 6 files changed, 223 insertions(+), 4 deletions(-)

Fusion-Task-Id: FN-5702

Fusion-Task-Lineage: be47ad0c-82df-4c38-9577-94c2eee49a0e
2026-05-29 20:05:14 -07:00
gsxdsm
d37bebf8bf feat(FN-5516): merge fusion/fn-5516 2026-05-22 17:24:38 -07:00
gsxdsm
ed4d021d3d fix(dashboard): keep mobile nav visible on Android landscape and during keyboard
- Broaden mobile media query to include (max-height: 480px) so landscape
  phones (which exceed 768 CSS px wide) still render the bottom nav and
  mobile board layout instead of desktop horizontally-scrollable columns.
- Guard useMobileKeyboard against pinch-zoom (vv.scale > 1) — Android
  Chrome ignores user-scalable=no, and a focused textarea + zoom was
  false-positiving keyboard-open and hiding MobileNavBar.
- Read documentElement.clientHeight instead of stale window.innerHeight
  when computing keyboard overlap (Android multi-window can leave
  innerHeight cached at a wildly different value than the actual layout
  viewport — observed 2848 while html was 797).
- Add interactive-widget=resizes-content to the viewport meta so Android
  Chrome shrinks the layout viewport with the soft keyboard, matching iOS.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-22 13:12:36 -07:00
Fusion (runfusion.ai)
ef5dd7ba25 feat(FN-5435): reset fallback retry counter on success in reviewer
Adds a fallback retry counter to the reviewer that resets on successful step completion, preventing premature escalation when earlier steps exhaust retries while later ones succeed; also aligns dashboard trace buffer types and adds comprehensive coverage for the reset semantics.

Fusion-Task-Id: FN-5435
2026-05-21 08:43:57 -07:00
Fusion (runfusion.ai)
e96cb09982 feat(FN-5388): add warm room cache hydration with open diagnostics
Add room open performance diagnostics and warm cache hydration for room switches (FN-5388). The implementation adds a timing instrumentation utility, SWR cache constants, warm-room handoff logic in `useChatRooms`, and a documentation file covering the performance model, accompanied by regression tes

Fusion-Task-Id: FN-5388
2026-05-20 20:27:11 -07:00
Fusion (runfusion.ai)
1913cb59fe feat(FN-5389): add resume event instrumentation with SSE, hooks, and diagno
FN-5389 adds dashboard resume event instrumentation: a `resumeInstrumentation` utility captures SSE resume signals, wired through `useChat`, `useChatRooms`, and `useTasks` hooks, with remount markers in `Board` and `ChatView`; diagnostics routes expose resume events for observability, documented in

Fusion-Task-Id: FN-5389
2026-05-20 19:58:49 -07:00
Fusion (runfusion.ai)
cfc70b21bd feat(FN-5202): add SWR caching for chat agents, skills, and models
This merge introduces SWR-style caching across the dashboard to eliminate redundant fetches for models, agents, and skills, significantly refactoring ChatView.tsx (reduced by ~140 lines) by offloading cache coordination to three new dedicated hooks (`useAgentsMapCache`, `useDiscoveredSkillsCache`, `

Fusion-Task-Id: FN-5202
2026-05-20 03:19:44 -07:00
Fusion (runfusion.ai)
e6c7dcdd64 feat(FN-5139): wire lineage unlink delete and archive flows
Fusion-Task-Id: FN-5139
Fusion-Task-Lineage: c16f4245-bfda-4b9a-bd98-ffc44b45f5a0
2026-05-19 18:56:24 -07:00
Fusion (runfusion.ai)
ad35a1ccfc test(FN-5134): complete Step 2 — cover no-worktree badge suppression
Fusion-Task-Id: FN-5134
Fusion-Task-Lineage: 1d7fd2a5-de42-4977-a4b9-583c04124c5d
2026-05-19 07:36:11 -07:00
Fusion (runfusion.ai)
d646bfb4b2 feat(FN-5134): complete Step 1 — suppress no-worktree in-review badge
Fusion-Task-Id: FN-5134
Fusion-Task-Lineage: 1d7fd2a5-de42-4977-a4b9-583c04124c5d
2026-05-19 07:36:11 -07:00
Fusion (runfusion.ai)
bca388af84 feat(FN-4963): complete Step 2 — add chat sessions cache key
Fusion-Task-Id: FN-4963
Fusion-Task-Lineage: 791f5e46-c630-4883-89de-942cc85c329b
2026-05-18 03:34:54 -07:00
gsxdsm
1842a69e6c test(FN-4951): stabilize clipboard fallback coverage
Fusion-Task-Id: FN-4951
Fusion-Task-Lineage: 25de66db-c8cf-463b-86f2-efff1bc22683
2026-05-18 03:10:52 -07:00
gsxdsm
3986c09154 test(FN-4951): complete Step 2 — add clipboard utility tests
Fusion-Task-Id: FN-4951
Fusion-Task-Lineage: 25de66db-c8cf-463b-86f2-efff1bc22683
2026-05-18 03:10:52 -07:00
gsxdsm
c96a918591 feat(FN-4951): complete Step 1 — add shared clipboard utility
Fusion-Task-Id: FN-4951
Fusion-Task-Lineage: 25de66db-c8cf-463b-86f2-efff1bc22683
2026-05-18 03:10:52 -07:00
gsxdsm
f9cf3f1bde feat(FN-4921): merge fusion/fn-4921 2026-05-17 19:11:59 -07:00
Fusion (runfusion.ai)
13bcb8ed85 feat(FN-4924): complete Step 1 — add tasks TTL constant
Fusion-Task-Id: FN-4924
Fusion-Task-Lineage: a5f882e1-8348-4f9d-89be-15994adc148c
2026-05-17 12:41:21 -07:00
Fusion (runfusion.ai)
7ad3449c8f feat(FN-4924): complete Step 1 — add swr cache envelope ttl
Fusion-Task-Id: FN-4924
Fusion-Task-Lineage: a5f882e1-8348-4f9d-89be-15994adc148c
2026-05-17 11:33:56 -07:00
Fusion (runfusion.ai)
3d0cce72f2 feat(FN-4885): complete Step 7 — finalize docs and changeset
Fusion-Task-Id: FN-4885
Fusion-Task-Lineage: 31110eed-5ca3-4d67-8f11-581185056dc6
2026-05-17 09:31:07 -07:00
Fusion (runfusion.ai)
5793c4bcd7 feat(FN-4885): complete Step 6 — add deadlock disposition dashboard copy
Fusion-Task-Id: FN-4885
Fusion-Task-Lineage: 31110eed-5ca3-4d67-8f11-581185056dc6
2026-05-17 09:31:07 -07:00
Fusion (runfusion.ai)
672339619a feat(FN-4859): complete Step 1 — extend swr cache keys
Fusion-Task-Id: FN-4859
Fusion-Task-Lineage: 9254ee9f-5600-4895-8ac4-41c9d89fce4d
2026-05-17 03:34:55 -07:00
Fusion (runfusion.ai)
228daa8f35 feat(FN-4854): complete Step 1 — extend cache keys and diagnostics
Fusion-Task-Id: FN-4854
Fusion-Task-Lineage: 969ec04a-efe3-4dee-b183-2d4f2de6b388
2026-05-17 00:43:47 -07:00
Fusion (runfusion.ai)
167b2cf0c9 feat(FN-4780): complete Step 1 — add swr cache utility
Fusion-Task-Id: FN-4780
Fusion-Task-Lineage: 7f052539-9d15-4997-8135-21434f065d4a
2026-05-16 13:24:50 -07:00
Fusion
3648d1e1df feat(FN-4595): implement cumulative execution timing semantics
Fusion-Task-Id: FN-4595
Fusion-Task-Lineage: 73a3d0ad-5c10-4560-aec5-f9d138deeefd
2026-05-15 07:50:34 -07:00
Fusion
03a4522118 test(FN-4570): complete Step 3 — cover merge-active stall suppression
Fusion-Task-Id: FN-4570
Fusion-Task-Lineage: 08deec6d-a54a-4296-9443-3101662314f2
2026-05-15 01:02:56 -07:00
Fusion
c11b2d199f feat(FN-4570): complete Step 2 — centralize merge-active stall suppression
Fusion-Task-Id: FN-4570
Fusion-Task-Lineage: 08deec6d-a54a-4296-9443-3101662314f2
2026-05-15 01:02:56 -07:00
Fusion
3573573a39 feat(FN-4462): complete Step 1 — per-code stall copy and counter
Fusion-Task-Id: FN-4462
Fusion-Task-Lineage: 15fc09f5-1363-429e-b131-9c9fdabee532
2026-05-14 22:57:47 -07:00
Fusion
273fc7018a feat(FN-4452): complete Step 4 — surface stale paused review in dashboard
Fusion-Task-Id: FN-4452
Fusion-Task-Lineage: 7d8b1c13-883b-4815-94ee-fdf18ad24e5f
2026-05-14 18:35:30 -07:00
Fusion
927a32182d feat(FN-4465): complete Step 4 — dashboard stale signal surfacing
Fusion-Task-Id: FN-4465
Fusion-Task-Lineage: 4365d4cb-ab93-4ed5-add9-3e14b26237ad
2026-05-14 05:55:16 -07:00
Fusion
95d742abb3 feat(FN-4468): add workflow step gateMode advisory gating
Adds an "advisory" `gateMode` option for workflow steps: steps in advisory mode log findings but no longer block merge completion, while steps that must block can still be configured as blocking. The change covers the workflow step types and schema, executor gating logic, dashboard UI in WorkflowSte

Fusion-Task-Id: FN-4468
2026-05-14 05:35:12 -07:00
Fusion
280466a163 feat(FN-4411): complete Step 2 — add CodeMirror language resolver
Fusion-Task-Id: FN-4411
Fusion-Task-Lineage: d90785f2-b828-4fa0-b330-ede7f3c14349
2026-05-14 02:23:45 -07:00
Fusion
81611b370a feat(FN-4415): revert todo aging indicator from FN-4316
Reverts the FN-4316 todo aging indicator feature, removing the `TodoAgingSummary` component and its CSS, the `todoAging` utility, all associated tests, and the corresponding documentation. The revert is accompanied by a changeset confirming the patch-level reversal.

Fusion-Task-Id: FN-4415
2026-05-13 19:22:38 -07:00
Fusion
b67f986e5e feat(FN-4316): complete Step 1 — add todo aging utility
Fusion-Task-Id: FN-4316
Fusion-Task-Lineage: 6b2b78b4-effa-479c-9a22-5a53d0f74894
2026-05-13 18:14:22 -07:00