Commit Graph

172 Commits

Author SHA1 Message Date
Fusion Agent
c30d65080e FN-008: add Activity Feed log copying
Add a localized copy action for task Activity Feed logs with clipboard feedback and coverage.

- Add the Activity Feed copy control and styling to task details.
- Localize copy, success, and failure messages across supported locales.
- Cover clipboard states and regenerate translation resource types.

Files changed:
 .changeset/fn-008-copy-task-activity-logs.md       |   7 +
 .../dashboard/app/components/TaskDetailModal.css   |  52 ++++++
 .../dashboard/app/components/TaskDetailModal.tsx   |  70 +++++--
 .../__tests__/TaskDetailModal.test-helpers.ts      |   1 +
 .../components/__tests__/TaskDetailModal.test.tsx  | 202 ++++++++++++++++++++
 packages/i18n/locales/en/app.json                  |   4 +
 packages/i18n/locales/es/app.json                  |   9 +
 packages/i18n/locales/fr/app.json                  |   9 +
 packages/i18n/locales/ko/app.json                  |   9 +
 packages/i18n/locales/pt-BR/app.json               |   9 +
 packages/i18n/locales/zh-CN/app.json               |   9 +
 packages/i18n/locales/zh-TW/app.json               |   9 +
 packages/i18n/src/resources.d.ts                   |  11 +-
 13 files changed, 385 insertions(+), 16 deletions(-)

Fusion-Task-Id: FN-008
Fusion-Task-Lineage: 41574c1e-528e-499b-bec0-9cccfdf068de
Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-20 03:55:38 +00:00
gsxdsm
ef35fb8e5a FN-9164: select per-repository workspace base branches
Workspace worktrees now honor and persist the appropriate base branch for each sub-repository throughout their lifecycle.

- Resolve requested bases per repository, normalize remote-only refs, and fall back safely to repository integration branches.
- Reuse recorded bases for landing, recovery, and revert flows with privacy-safe audit breadcrumbs.
- Surface base and fallback details in task UI, documentation, tests, and release notes.

Files changed:
 .changeset/fn-9164-workspace-base-branch.md        |   7 +
 AGENTS.md                                          |   1 +
 docs/task-management.md                            |   2 +-
 docs/workspaces.md                                 |   8 +-
 packages/core/src/types/task/task-core.ts          |  12 ++
 .../dashboard/app/components/TaskDetailModal.css   |  14 ++
 .../app/components/WorkspaceWorktreesSummary.tsx   |   2 +
 .../__tests__/WorkspaceWorktreesSummary.test.tsx   |  13 ++
 .../src/routes/register-task-workflow-routes.ts    |   2 +
 .../task-revert.workspace.real-git.test.ts         |  25 +++
 .../src/__tests__/workspace-base-branch.test.ts    |  93 +++++++++++
 .../worktree-acquisition-workspace.test.ts         |  27 ++++
 packages/engine/src/execution/task-revert.ts       |  58 +++++--
 packages/engine/src/merge/merger-ai.ts             |  30 +++-
 packages/engine/src/self-healing.ts                |  50 +++++-
 packages/engine/src/util/run-audit.ts              |   6 +
 .../engine/src/worktree/workspace-base-branch.ts   | 180 +++++++++++++++++++++
 .../engine/src/worktree/worktree-acquisition.ts    |  62 ++++---
 18 files changed, 548 insertions(+), 44 deletions(-)

Fusion-Task-Id: FN-9164

Fusion-Task-Lineage: 487a1c77-32cb-47dd-bf43-297a146951ba

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-19 18:57:33 -07:00
gsxdsm
9db2565e99 fix(dashboard): remove the shared floating-window gutter and fix browser onboarding
Operator report: the first-run "Set Up AI" modal had extra space along its right
edge, and it asked a browser visitor to connect a remote server and mentioned a
native shell they do not have.

Three defects, verified in a real container build at desktop and mobile widths:

- FN-8015 reserved `margin-inline-end: var(--space-lg)` on the shared
  `.floating-window__body` so a hosted scrollbar cleared the east resize hot
  zones. One shared reservation every caller had to know about produced a
  recurring class of asymmetric-right-inset bugs instead: it was zeroed
  piecemeal five times (FN-8766, mobile task detail, FN-8722, FN-8702, every
  tablet window) while two callers leaned on it for their right inset and had to
  restore it whenever one of those predicates fired. Delete the gutter, its five
  overrides, and GitHub Import's borrowed-inset compensation. Where a scrollbar
  and a resize target actually collide, use FN-8766's outboard east targets.
  Trade-off accepted by the operator; the ratchet test now forbids the gutter in
  any stylesheet at any breakpoint.
- The hosted Set Up AI modal did not fill its window: its standalone
  `height: min(85vh, ...)` rule ties on specificity with FloatingWindow's
  `height: 100%` and won on source order, leaving ~60px of dead window surface
  under the footer alongside the 16px gutter strip. Right gap 17px -> 1px,
  bottom gap 62px -> 1px.
- The "Connect remote Fusion server" card keyed only on
  `desktopMode !== "local"`, and `desktopMode` is undefined on web, so every
  browser first-run led with a native-shell hand-off form. Now also requires
  `host !== "web"`.

Verified: 165 dashboard test files / 5829 tests pass, eslint and
`tsc -p tsconfig.app.json` clean, and a container built from this tree shows the
panel flush at 1280x800 and as a symmetric full-screen sheet at 390x844 with no
remote-server card.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-17 16:56:48 -07:00
gsxdsm
7bb7d450e6 FN-9062: surface workspace repository land status
Expose per-repository workspace landing progress and failures in Task Detail.

- Persist display-only repository land failure breadcrumbs during merge and recovery
- Render landed, pending, and failed repository statuses with partial-land detail
- Document the workspace status behavior and add coverage for UI and recovery paths

Files changed:
 .changeset/fn-9062-workspace-land-status.md        |   7 ++
 docs/dashboard-guide.md                            |   4 +
 packages/core/src/types/task/task-core.ts          |  11 ++-
 .../dashboard/app/components/TaskDetailModal.css   |  33 +++++++
 .../app/components/WorkspaceWorktreesSummary.tsx   | 106 ++++++++-------------
 .../__tests__/WorkspaceWorktreesSummary.test.tsx   |  46 ++++++++-
 .../src/__tests__/self-healing-workspace.test.ts   |  19 ++++
 .../engine/src/__tests__/workspace-merger.test.ts  |   6 ++
 packages/engine/src/merge/merger-ai.ts             |   7 +-
 .../engine/src/merge/workspace-land-failure.ts     |  21 ++++
 packages/engine/src/self-healing.ts                |  16 ++++
 11 files changed, 208 insertions(+), 68 deletions(-)

Fusion-Task-Id: FN-9062

Fusion-Task-Lineage: 8c12b9f9-f6ed-4766-a6f1-49cdf9ea8926

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-15 00:48:23 -07:00
gsxdsm
e610c72034 FN-8943: reconcile spec-lock divergence history
Preserve prior divergence when a task is re-locked after plan changes.

- Persist immutable spec locks, current-plan evidence, and drift reports.
- Reconcile retained divergence into re-approved alignment state across engine, API, and dashboard views.
- Fence Plan Review acceptance and schema upgrades while retaining migration identity parity.

Files changed:
 .changeset/fn-8845-spec-lock-drift-report.md       |   7 +
 .changeset/fn-8943-spec-lock-divergence.md         |   7 +
 docs/architecture.md                               |  17 +-
 docs/dashboard-guide.md                            |   3 +
 docs/missions.md                                   |   4 +
 .../core/src/__tests__/planner/spec-lock.test.ts   | 158 ++++++++++++++
 .../src/__tests__/postgres/schema-applier.test.ts  |  30 ++-
 .../postgres/task-dependency-mutation.pg.test.ts   |  74 +++++++
 packages/core/src/index.gate.ts                    |   4 +
 packages/core/src/index.ts                         |   4 +
 packages/core/src/planner/drift-report.ts          | 152 +++++++++++++
 packages/core/src/planner/spec-lock.ts             | 182 ++++++++++++++++
 .../migrations/0050_spec_lock_drift_report.sql     |  29 +++
 .../0051_spec_lock_source_revision_bigint.sql      |   3 +
 packages/core/src/postgres/schema-applier.ts       |  25 ++-
 packages/core/src/postgres/schema/project.ts       |  13 ++
 packages/core/src/store.ts                         | 242 ++++++++++++++++++++-
 .../core/src/task-store/branch-and-pr-entities.ts  |  32 ++-
 packages/core/src/task-store/project-store-ops.ts  |  34 ++-
 packages/core/src/task-store/task-update.ts        |  66 +++++-
 packages/core/src/task-store/update-task-deps.ts   |  31 ++-
 packages/dashboard/app/api.ts                      |   3 +
 packages/dashboard/app/api/tasks/tasks.ts          |  22 ++
 .../dashboard/app/components/MissionManager.css    |  21 ++
 .../dashboard/app/components/MissionManager.tsx    |  41 +++-
 .../dashboard/app/components/TaskDetailModal.css   |  26 +++
 .../dashboard/app/components/TaskDetailModal.tsx   |  62 +++++-
 .../__tests__/TaskDetailModal.spec-lock.test.tsx   |  80 +++++++
 .../__tests__/TaskDetailModal.test-helpers.ts      |   2 +
 .../src/__tests__/plan-approval-status.pg.test.ts  |  81 ++++++-
 .../src/routes/register-task-workflow-routes.ts    |  59 ++++-
 .../src/__tests__/mission-feature-sync.test.ts     |  15 +-
 .../src/__tests__/spec-drift-reconciler.test.ts    | 108 +++++++++
 .../engine/src/executor/execute-workflow-graph.ts  |  49 ++++-
 .../engine/src/missions/mission-feature-sync.ts    |  55 ++++-
 packages/engine/src/project-engine.ts              |  33 +++
 packages/engine/src/spec-drift-reconciler.ts       | 105 +++++++++
 packages/engine/src/triage.ts                      |  29 +++
 38 files changed, 1842 insertions(+), 66 deletions(-)

Fusion-Task-Id: FN-8943

Fusion-Task-Lineage: 2a7f8a38-99aa-4c4b-8c36-41d14c466d21

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-10 02:56:58 -07:00
gsxdsm
6ccde2b0d8 FN-8806: stabilize task title expansion during resize
Keep expanded task titles stable while their container resizes.

- Measure persistent title text separately from the interactive expansion control.
- Fence hidden pop-out resize observers and preserve expansion state across detail hosts.
- Add rendering and browser coverage for resize-driven title behavior.

Files changed:
 .changeset/fn-8806-task-title-flicker.md           |   7 +
 .../dashboard/app/components/TaskDetailModal.css   |  16 +-
 .../dashboard/app/components/TaskDetailModal.tsx   |  37 +--
 .../__tests__/TaskDetailModal.rendering.test.tsx   |  42 +++-
 .../app/task-modal-touch-resize-e2e-fixture.tsx    | 149 +++++++++++-
 .../task-modal-touch-resize-browser.test.ts        | 267 ++++++++++++++++++++-
 6 files changed, 485 insertions(+), 33 deletions(-)

Fusion-Task-Id: FN-8806

Fusion-Task-Lineage: 9519a5dc-ae6d-43e1-a0da-7ac963f27d7f

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-05 13:02:48 -07:00
gsxdsm
39326b3be6 FN-8787: reduce task-detail title spacing
Reduce the task-detail content's top inset while preserving its side and bottom spacing.

- Override the shared desktop and mobile block-start padding with smaller token values.
- Cover desktop and mobile padding-order and spacing contracts.

Files changed:
 packages/dashboard/app/components/TaskDetailModal.css          |  8 ++++++++
 packages/dashboard/app/components/__tests__/TaskDetailModal.css.test.ts | 22 ++++++++++++++++++++++
 2 files changed, 30 insertions(+)

Fusion-Task-Id: FN-8787

Fusion-Task-Lineage: 1b556533-1b2c-4dd5-aff7-6df71091dd17

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-04 11:24:38 -07:00
gsxdsm
2af01dd27d FN-8786: make task titles directly expandable
Make overflowed task titles directly expandable with an accessible title control.

- Replace the standalone Show more/Show less row with a title-owned button.
- Add focus styling while preserving title clamping and summarization behavior.
- Cover title expansion, keyboard access, fallbacks, and responsive styling.

Files changed:
 .../dashboard/app/components/TaskDetailModal.css   |  35 ++---
 .../dashboard/app/components/TaskDetailModal.tsx   |  26 ++--
 .../__tests__/TaskDetailModal.rendering.test.tsx   | 150 +++++++++++----------
 3 files changed, 112 insertions(+), 99 deletions(-)

Fusion-Task-Id: FN-8786

Fusion-Task-Lineage: 351a9f33-42c0-4a4f-a34a-94aa726f2436

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-04 11:13:07 -07:00
gsxdsm
7b1c8db1d3 FN-8779: keep Activity Feed scrolling above footer
Keep Feed history scrollable within Task Detail while the action footer remains fixed.

- Add a Feed-specific flex and overflow layout for Activity history.
- Keep Task Detail footer and modal controls outside the scrolling body.
- Cover Feed footer containment and responsive layout behavior.

Files changed:
 packages/dashboard/app/components/TaskDetailModal.css   | 38 +++++++++++++--
 packages/dashboard/app/components/TaskDetailModal.tsx   | 12 ++---
 ...etailModal.responsive-and-dependencies.test.tsx | 46 ++++++++++++++++++
 .../TaskDetailModal.task-activity-chat.test.tsx    | 54 ++++++++++++++++++++++
 4 files changed, 139 insertions(+), 11 deletions(-)

Fusion-Task-Id: FN-8779

Fusion-Task-Lineage: 4bc4851c-27a1-4b45-afdb-11ccbc8a017e

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-04 01:47:52 -07:00
gsxdsm
5786c87eff FN-8679: contain mobile Summary table overflow
Keep Summary token and cost tables horizontally scrollable within mobile task details.

- Constrain Summary flex ancestors so wide tables cannot widen the detail body
- Preserve real token/cost table rendering across populated and empty usage states
- Add a patch changeset for the mobile overflow fix

Files changed:
 .changeset/fn-8679-mobile-token-scroll.md          |  7 +++
 .../dashboard/app/components/TaskDetailModal.css   |  9 ++++
 .../__tests__/TaskDetailModal.summary-tab.test.tsx | 60 +++++++++++++++++++++-
 3 files changed, 75 insertions(+), 1 deletion(-)

Fusion-Task-Id: FN-8679

Fusion-Task-Lineage: 33562f89-053f-4681-b1b1-98aa2f2704a2

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-01 01:28:38 -07:00
gsxdsm
ec55889605 FN-8674: add plan approval banner actions
Place plan approval controls alongside the task approval message for faster operator action.

- Add approve and reject controls to the plan-approval banner.
- Reuse existing approval handlers and add coverage for banner and footer actions.
- Add responsive banner action styling and a patch changeset.

Files changed:
 .changeset/plan-approval-banner-actions.md         |  7 +++
 .../dashboard/app/components/TaskDetailModal.css   | 14 +++++
 .../dashboard/app/components/TaskDetailModal.tsx   | 19 ++++++-
 .../TaskDetailModal.definition-actions.test.tsx    | 59 +++++++++++++++++-----
 4 files changed, 85 insertions(+), 14 deletions(-)

Fusion-Task-Id: FN-8674

Fusion-Task-Lineage: 89c521c2-535d-4492-8b39-6e1517693218

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-31 23:53:38 -07:00
gsxdsm
44e607e1a7 refactor: rename tablet marker to floating-window--tablet-viewport, add shell naming maps
The right-padding bug recurred three times because 'Task Detail modal' names ONE
surface with THREE shells and fixes kept landing in the wrong file. Disambiguate:

- Rename the just-introduced .floating-window--tablet marker to
  .floating-window--tablet-viewport and document the naming contract next to it:
  --tablet-viewport = viewport MODE classifies tablet (touch or not, styling
  surface); --touch-geometry = tablet AND touch (enlarged 44px targets only).
- Add SHELL NAMING MAP breadcrumbs at the top of TaskDetailModal.css and
  TerminalModal.css pointing inset/padding fixes at the FloatingWindow shell
  that tablet popups and floating terminals actually render through.

Comment wording deliberately avoids dot-prefixed class tokens because
FloatingWindow.test.tsx scans raw CSS (comments included) with selector regexes.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-31 21:25:40 -07:00
gsxdsm
c0ddadd746 FN-8634: balance Task Detail and terminal right padding
Balance perceived right-edge spacing across Task Detail and terminal shells.

- Move content padding outside scrollbar-owning Task Detail surfaces.
- Account for injected terminal viewport scrollbar tracks across modal variants.
- Add layout regression coverage and a patch changeset.

Files changed:
 .changeset/fn-8634-task-detail-right-padding.md    |   7 +
 .../__tests__/detail-body-mobile-overflow.test.ts  |   8 +-
 .../__tests__/task-detail-inset-symmetry.test.ts   | 271 +++++++++++----------
 .../dashboard/app/components/SessionTerminal.css   |  16 +-
 .../dashboard/app/components/SessionTerminal.tsx   |  14 +-
 .../dashboard/app/components/TaskDetailModal.css   |  49 ++--
 .../dashboard/app/components/TaskDetailModal.tsx   |  48 ++--
 .../dashboard/app/components/TerminalModal.css     |  11 +-
 .../components/__tests__/TaskChangesTab.test.tsx   |  23 +-
 ...etailModal.responsive-and-dependencies.test.tsx |  16 +-
 10 files changed, 273 insertions(+), 190 deletions(-)

Fusion-Task-Id: FN-8634

Fusion-Task-Lineage: 58cce580-5da0-47cf-a325-20b3707dbeef

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-31 18:34:58 -07:00
gsxdsm
f86d758f9b FN-8630: balance Task Detail scrollbar insets
Keep Task Detail content symmetrically inset when its body scrolls.

- Reserve stable scrollbar gutters on both inline edges of the scrollable detail body.
- Add deterministic coverage for modal, pop-out, and embedded detail inset symmetry.
- Publish a patch changeset for the layout correction.

Files changed:
 .changeset/fn-8630-task-detail-right-padding.md    |   7 +
 .../__tests__/task-detail-inset-symmetry.test.ts   | 222 +++++++++++++++++++++
 .../dashboard/app/components/TaskDetailModal.css   |  15 ++
 3 files changed, 244 insertions(+)

Fusion-Task-Id: FN-8630

Fusion-Task-Lineage: 9fd0c2bd-3370-4f86-ad12-9f06e5172c5b

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-31 14:04:15 -07:00
gsxdsm
4f929acc10 fix(dashboard): stop over-aggressive component unmounts (keep-alive for planning, terminals, popups) (#2420)
Implements
docs/plans/2026-07-22-001-fix-dashboard-remount-churn-plan.md: every
confirmed source of unnecessary unmount/remount churn in the dashboard,
plus a keep-alive layer for conversation- and terminal-bearing surfaces.

## What changed

**Keying / component identity (U1–U3)**
- Streaming chat segment key no longer embeds `entries.length` — an
expanded thinking block stays expanded while entries stream into it
(R1).
- Dock task list keys `TaskCard` rows by `task.id` (occurrence suffix
only for the duplicate-id anomaly) instead of `id-index` — no remount on
reorder/filter/status change (R2).
- `ProviderStatusBadge` / `GitHubStatusBadge` hoisted out of
ModelOnboardingModal's render body (R3); MCP server rows key by
`server.name` alone (R4).

**Keep-alive layer (U4–U6)**
- New shared `KeepAliveView` wrapper: visible = in-flow flex child;
hidden = out-of-flow `position:absolute; inset:0` with
`visibility:hidden; pointer-events:none` + `aria-hidden` (never
`display:none`, so xterm geometry never collapses).
- Planning Mode renders as a kept-alive sibling of the MainContent
switch after first open (per-project latch mirroring Quick Chat). While
hidden, the session-list SSE, recovery poll, and elapsed ticker suspend
via a new `active` prop; reveal re-subscribes and refreshes the sessions
list once. Payload-carrying entry points (initial-plan handoff, resume)
and project switches remount via a new
`modalManager.planningEntryGeneration` key, preserving pre-keep-alive
fresh-open semantics. `recordResumeEvent` instrumentation records
`remount` on first activation and `route-active` on reveal.
- Task-detail Terminal / Worktree-terminal / Planner-chat tabs stay
mounted-but-hidden after first open (per-task latches; task switch/close
still disposes fully). `SessionTerminal` gains `active`: reveal refits +
forces a font remeasure, and if the WS died while hidden it re-runs the
full attach lifecycle (dead-socket recovery).
- Popped-out task windows hide via FloatingWindow `hidden` instead of
leaving the render array; `TaskDetailContent` gains `active` so hidden
popups close their SSE/EventSource channels while the terminal WS stays
open. `visiblePoppedOutTaskEntries` remains the Escape-shortcut
consumer.

**Planning Mode internal-transition audit (U7)**
- Audit findings: session-list mode and mobile list/detail flips are
CSS-class transitions over one always-mounted detail pane (no
state-discarding unmounts); re-selecting the active session is an
early-return visibility restore; session switching intentionally reloads
from the session row (stream re-attach for generating sessions);
remaining index keys are on stateless lists. No product-code defects
found; regression tests now lock the always-mounted invariant on desktop
+ mobile.

**Cheap-view state (U8)**
- CommandCenter (active sub-tab + date range) and DevServerView
(selected script/task + typed-but-unsent command) persist per project
via `modalPersistence` and restore after their (intentional) unmount
round-trips. Also fixed the candidate auto-fill effect clobbering a
customized non-empty command.

## Symptom Verification
- **Original symptom:** streaming thinking blocks collapsed mid-stream;
terminals reconnected and lost scroll/input on tab flips; Planning Mode
lost in-flight interviews on navigation; popped-out windows vanished
off-view; dock cards remounted on reorder.
- **Exact reproduction:** (1) expand a thinking block during a stream;
(2) run a command in the Terminal tab, flip to Plan and back; (3) start
a planning interview, navigate Board and back; (4) pop out a task with
board/list-only scoping and switch views; (5) change a dock task's
status.
- **Assertion it is gone:** component-identity/instrumentation tests in
TaskChatTab, SessionTerminal, TaskDetailModal
(worktree/planner-chat/tabs), PlanningModeModal keep-alive +
internal-transitions, App keep-alive round-trip, and
App.taskPopupViewGating assert no remount and preserved state for each
repro, across desktop and mobile breakpoints.

## Verification
- File-scoped vitest: 23 files / 1091 tests green (all touched suites
plus FloatingWindow, TerminalModal, TaskPlannerChatTab,
lazy-loaded-views guard, App suites).
- `pnpm verify:fast`: PASS (13 steps — scoped typecheck/build, CLI
build, boot smoke).
- `pnpm check:changesets`: passes; changeset
`fix-dashboard-remount-churn` (`@runfusion/fusion` patch, labeled
format).
- Known pre-existing failures NOT caused by this branch (verified
failing at base a224c1111 in a clean worktree): 7 tests in
`TaskDetailModal.oversight-controls/oversight-mobile/models-progress-workflow`.
- jsdom cannot prove rendered-grid correctness for xterm reveal; per the
plan's risk note, manual browser verification of terminal reveal remains
recommended.

🤖 Generated with [Claude Code](https://claude.com/claude-code)


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **Bug Fixes**
* Switching views or tabs no longer resets Planning Mode, task details,
terminals, planner chats, or popped-out task windows.
  * Streaming content remains expanded and stable as new entries arrive.
* Hidden views suspend background activity and resume correctly when
shown.
  * Terminal sessions reconnect automatically when needed.

* **Improvements**
  * Command Center and Dev Server selections persist per project.
  * Custom Dev Server commands are preserved while browsing suggestions.
* Improved stability when reordering task lists and updating server
states.

* **Documentation**
* Updated dashboard guidance for hidden, retained task pop-ups and view
transitions.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-30 21:50:47 -07:00
gsxdsm
e4cb957b57 FN-8619: migrate modal geometry to FloatingWindow
Unify migrated modal geometry and responsive behavior under FloatingWindow.

- Cover Agent Detail and GitHub Import floating-window interaction and persistence contracts.
- Preserve unique Agent Detail labels, mouse-only backdrop dismissal, and tablet touch layouts.
- Update the dashboard modal migration inventory.

Files changed:
 docs/dashboard-modal-inventory.md                  |   6 +-
 .../dashboard/app/components/AgentDetailView.css   |  49 +++++-----
 .../dashboard/app/components/AgentDetailView.tsx   |   6 +-
 .../dashboard/app/components/FloatingWindow.css    |  10 +-
 .../dashboard/app/components/TaskDetailModal.css   |  15 +++
 .../AgentDetailView.floating-window.test.tsx       | 102 +++++++++++++++++++++
 .../__tests__/GitHubImportModal.test.tsx           |  58 ++++++++++++
 ...etailModal.responsive-and-dependencies.test.tsx |  24 +++++
 8 files changed, 241 insertions(+), 29 deletions(-)

Fusion-Task-Id: FN-8619

Fusion-Task-Lineage: efa95e41-b12e-4e5d-aeb2-65b43c2dd8e0

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-26 20:04:33 -07:00
gsxdsm
43160a7aae FN-8621: migrate complex modals to FloatingWindow
Unify complex dashboard modal presentation under persisted FloatingWindow geometry.

- Migrate Create Room, Task Detail, Agent Detail, and GitHub Import modal presentations.
- Preserve documented embedded and docked exceptions, dismissal behavior, and nested scrolling.
- Add presentation-contract coverage and publish dashboard guidance and changesets.

Files changed:
 ...n-8619-resize-persist-modals-floating-window.md |   7 ++
 .changeset/fn-8621-create-room-floating-window.md  |   7 ++
 docs/dashboard-guide.md                            |  16 +++-
 docs/dashboard-modal-inventory.md                  |  12 +--
 .../dashboard/app/components/AgentDetailView.css   |  16 +---
 .../dashboard/app/components/AgentDetailView.tsx   | 102 ++++++++++++++++-----
 .../dashboard/app/components/CreateRoomModal.css   |  19 +++-
 .../dashboard/app/components/CreateRoomModal.tsx   |  57 ++++++++----
 .../dashboard/app/components/FloatingWindow.css    |  13 ++-
 .../dashboard/app/components/FloatingWindow.tsx    |  15 +++
 .../dashboard/app/components/GitHubImportModal.css |  11 +--
 .../dashboard/app/components/GitHubImportModal.tsx |  40 ++++++--
 .../dashboard/app/components/TaskDetailModal.css   |  52 +----------
 .../dashboard/app/components/TaskDetailModal.tsx   |  58 ++++++------
 .../__tests__/AgentDetailView.core.test.tsx        |   2 +-
 .../AgentDetailView.mobile-scroll.test.tsx         |   6 +-
 .../components/__tests__/CreateRoomModal.test.tsx  |  62 +++++++++++--
 .../components/__tests__/FloatingWindow.test.tsx   |   1 +
 .../__tests__/GitHubImportModal.test.tsx           |   8 +-
 ...etailModal.responsive-and-dependencies.test.tsx |  77 +++++++---------
 .../__tests__/modal-presentation-contract.test.tsx |  74 +++++++++++++++
 .../dashboard/app/hooks/useEmbeddedPresentation.ts |   2 +-
 .../dashboard/app/hooks/useModalResizePersist.ts   |   5 +
 23 files changed, 441 insertions(+), 221 deletions(-)

Fusion-Task-Id: FN-8621

Fusion-Task-Lineage: 04b6f3fe-d527-4a21-a0cb-489eb20f5e91

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-26 19:52:32 -07:00
gsxdsm
7715a83e6f FN-8624: fix task detail activity right padding
Keep Task Detail activity insets symmetric while reserving overlay clearance only for first-row content.

- Move Live/Feed overlay clearance from the activity container to first-row elements.
- Preserve responsive overlay spacing and the full-width Interventions timeline.
- Cover modal, pop-out, embedded, and responsive activity layouts with updated tests.
- Add a patch changeset for the Task Detail padding fix.

Files changed:
 .changeset/fn-8624-task-detail-inset.md            |  7 ++++
 .../dashboard/app/components/TaskDetailModal.css   | 41 ++++++++++------------
 .../TaskDetailModal.attachments-and-tabs.test.tsx  |  6 ++--
 .../__tests__/TaskDetailModal.css.test.ts          | 21 ++++++-----
 ...etailModal.responsive-and-dependencies.test.tsx | 25 +++++++------
 5 files changed, 54 insertions(+), 46 deletions(-)

Fusion-Task-Id: FN-8624

Fusion-Task-Lineage: 578cfe86-3021-421d-841b-2670efc10a5d

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-26 19:45:47 -07:00
gsxdsm
fde3b76a8c FN-8602: enable tablet touch resizing for task modals
Enable touch-driven resizing for task modals on tablet viewports.

- Add tablet touch resize handles and pointer interactions for task and new-task modals.
- Preserve responsive modal sizing while keeping phone layouts fullscreen.
- Add unit, browser, and visual regression coverage with updated documentation.

Files changed:
 .changeset/fn-8602-tablet-touch-resize.md          |   7 +
 docs/dashboard-guide.md                            |   6 +-
 docs/testing.md                                    |   4 +
 packages/dashboard/app/components/NewTaskModal.css |  70 ++++++++++
 packages/dashboard/app/components/NewTaskModal.tsx |  19 ++-
 .../dashboard/app/components/TaskDetailModal.css   |  12 ++
 .../dashboard/app/components/TaskDetailModal.tsx   |   7 +-
 .../app/components/__tests__/NewTaskModal.test.tsx |   4 +
 ...etailModal.responsive-and-dependencies.test.tsx |   1 +
 .../hooks/__tests__/useModalResizePersist.test.tsx |  10 +-
 .../app/hooks/__tests__/useViewportMode.test.ts    |  26 +++-
 .../dashboard/app/hooks/useModalResizePersist.ts   |  26 +++-
 packages/dashboard/app/hooks/useViewportMode.ts    |  13 ++
 packages/dashboard/app/styles.css                  |  16 +++
 .../app/task-modal-touch-resize-e2e-fixture.html   |   5 +
 .../app/task-modal-touch-resize-e2e-fixture.tsx    |  60 ++++++++
 .../__screenshots__/fn-8602/phone-fullscreen.png   | Bin 0 -> 43987 bytes
 .../e2e/__screenshots__/fn-8602/tablet-after.png   | Bin 0 -> 52549 bytes
 .../e2e/__screenshots__/fn-8602/tablet-before.png  | Bin 0 -> 11500 bytes
 .../task-modal-touch-resize-browser.test.ts        | 154 +++++++++++++++++++++
 20 files changed, 424 insertions(+), 16 deletions(-)

Fusion-Task-Id: FN-8602

Fusion-Task-Lineage: f07ce22f-f529-4be3-ba1b-04063154a1b0

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-26 12:12:35 -07:00
gsxdsm
4b4df1ff30 FN-8565: restore tablet task modal resizing
Restore resizable Task Detail and New Task windows on 768px touch tablets.

- Classify known touch tablets separately from phone sheets
- Restore bounded modal geometry and resize grips with keyboard support
- Add regression coverage, documentation, and a patch changeset

Files changed:
 .changeset/fn-8565-tablet-task-modal-resize.md     |  7 +++
 docs/dashboard-guide.md                            |  5 ++
 .../task-detail-modal-tablet-width.test.ts         | 15 +++++
 packages/dashboard/app/components/NewTaskModal.css | 18 +++++-
 packages/dashboard/app/components/NewTaskModal.tsx | 44 +++++++++++++-
 .../dashboard/app/components/TaskDetailModal.css   | 30 ++++++++++
 .../dashboard/app/components/TaskDetailModal.tsx   | 40 +++++--------
 .../app/components/__tests__/NewTaskModal.test.tsx | 68 +++++++++++++++++++++-
 ...etailModal.responsive-and-dependencies.test.tsx | 51 ++++++++++++++++
 .../hooks/__tests__/useModalResizePersist.test.tsx | 53 ++++++++++++++++-
 .../dashboard/app/hooks/useModalResizePersist.ts   | 58 +++++++++++++++---
 11 files changed, 352 insertions(+), 37 deletions(-)

Fusion-Task-Id: FN-8565

Fusion-Task-Lineage: 7d9bbeb9-0e6a-4ad9-8b4d-e9f3d8aef650

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-24 19:20:16 -07:00
gsxdsm
295226ea64 FN-8501: align mobile task-detail footer actions
Align the mobile task-detail Move action with the footer edge.

- Let the footer spacer absorb surplus mobile width instead of the Move dropdown.
- Cover canonical footer order and triage actions-absent behavior.
- Add a patch changeset for the mobile footer fix.

Files changed:
 .changeset/fn-8501-mobile-footer-alignment.md      |  7 ++++
 .../dashboard/app/components/TaskDetailModal.css   |  8 ++++-
 ...etailModal.responsive-and-dependencies.test.tsx | 40 ++++++++++++++++++++++
 3 files changed, 54 insertions(+), 1 deletion(-)

Fusion-Task-Id: FN-8501

Fusion-Task-Lineage: a87bb5af-d16e-4ca8-9111-3168c8440f14

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-22 17:56:27 -07:00
gsxdsm
e24fb37c8b FN-8492: keep mobile task footer actions on one row
Keep task-detail footer actions compact and readable across mobile widths.

- Prevent mobile footer controls from wrapping while preserving shrink behavior.
- Add ellipsis-safe labels for actions and review controls.
- Cover standard and in-review footer layouts with responsive tests.
- Add a patch changeset for the mobile footer fix.

Files changed:
 .../fn-8492-mobile-task-footer-single-row.md       |  7 ++
 .../dashboard/app/components/TaskDetailModal.css   | 74 ++++++++++++++++-
 .../dashboard/app/components/TaskDetailModal.tsx   |  8 +-
 ...etailModal.responsive-and-dependencies.test.tsx | 94 +++++++++++++++++++++-
 4 files changed, 175 insertions(+), 8 deletions(-)

Fusion-Task-Id: FN-8492

Fusion-Task-Lineage: dae7a449-5022-4bfe-a879-880349341594

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-22 16:13:00 -07:00
gsxdsm
57636226b1 FN-8421: align tablet task modal control heights
Align Task Detail action controls and Planner Chat composer heights across tablet and desktop.

- Apply shared compact-height classes to inline Task Detail actions
- Use Quick Add control-height tokens and remove conflicting button padding
- Size Planner Chat Send and Stop controls to match the composer
- Add dashboard regression coverage and a patch changeset

Files changed:
 .../fn-8421-task-detail-tablet-control-heights.md  |  7 ++++++
 .../dashboard/app/components/TaskDetailModal.css   | 18 ++++++++++++---
 .../dashboard/app/components/TaskDetailModal.tsx   | 11 ++++++---
 .../app/components/TaskPlannerChatTab.css          | 10 ++++++++
 .../__tests__/TaskDetailModal.rendering.test.tsx   |  8 +++++++
 ...etailModal.responsive-and-dependencies.test.tsx | 13 +++++++++++
 .../__tests__/TaskPlannerChatTab.test.tsx          | 27 ++++++++++++++++++++++
 7 files changed, 88 insertions(+), 6 deletions(-)

Fusion-Task-Id: FN-8421

Fusion-Task-Lineage: 151795c8-4c00-4976-8901-9446557fc1a3

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-20 01:00:37 -07:00
gsxdsm
e04608d62c FN-8396: fix task detail inline icon sizing
Normalize Task Detail inline action icons across every responsive breakpoint.

- Apply scoped tokenized SVG sizing that includes wrapped provider icons.
- Add source and browser-layout coverage for optional-control variants at mobile, tablet, and desktop widths.
- Add a patch changeset for the responsive icon-sizing fix.
Files changed:
 .changeset/fn-8396-task-detail-tablet-icon-size.md |  7 +++
 .../__tests__/browser-layout-smoke-fixture.test.ts | 18 ++++++
 .../dashboard/app/components/TaskDetailModal.css   | 14 +++++
 .../__tests__/TaskDetailModal.rendering.test.tsx   | 25 ++++++++
 ...etailModal.responsive-and-dependencies.test.tsx | 16 ++++++
 .../dashboard/scripts/browser-layout-smoke.mjs     | 67 ++++++++++++++++++++++
 6 files changed, 147 insertions(+)

Fusion-Task-Id: FN-8396

Fusion-Task-Lineage: 3cd0e5e6-7edf-4dc7-aa71-0586cca6e6ec

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-19 16:36:42 -07:00
gsxdsm
a6f1ed07e2 FN-8287: unify task-detail action button sizing
Standardize task-detail inline action controls across themes.

- Apply shared tokenized square sizing, borders, and radii to all inline metadata actions.
- Add a regression test for the common sizing rule and document the control cluster.
- Add a patch changeset for consistent task-detail action buttons.

Files changed:
 .changeset/fn-8287-task-detail-button-sizes.md     |  7 +++
 docs/dashboard-guide.md                            |  2 +-
 .../dashboard/app/components/TaskDetailModal.css   | 73 ++++++++--------------
 ...etailModal.responsive-and-dependencies.test.tsx | 24 +++++++
 4 files changed, 57 insertions(+), 49 deletions(-)

Fusion-Task-Id: FN-8287

Fusion-Task-Lineage: 21ce01e1-7443-4a41-8a7d-faaa2bcddb28

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-18 10:08:33 -07:00
gsxdsm
c0441c96e4 FN-8243: restore priority select focus-visible coverage
Restore tokenized focus styling required by dashboard CSS hygiene checks.

- Add the missing `.detail-priority-select:focus-visible` selector.
- Reuse the shared strong focus-ring and radius tokens.

Files changed:
 packages/dashboard/app/components/TaskDetailModal.css | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

Fusion-Task-Id: FN-8243

Fusion-Task-Lineage: 35d6214e-a0de-48b1-8fd7-9eb4fca707ef

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-17 14:45:23 -07:00
gsxdsm
611e51d2a8 FN-8209: align task detail toolbar icons on mobile
Make Task Detail inline controls use the compact, accessible Quick Add icon pattern.

- Replace labeled priority and execution controls with icon-only buttons and a priority picker.
- Apply shared icon sizing to oversight, attachment, priority, and fast-mode controls.
- Update responsive and interaction coverage and add a patch changeset.

Files changed:
 .changeset/fn-8209-task-detail-toolbar-icons.md    |   7 +
 .../dashboard/app/components/TaskDetailModal.css   | 160 ++++++---------------
 .../dashboard/app/components/TaskDetailModal.tsx   | 109 ++++++++++----
 ...lModal.inline-editing-and-integrations.test.tsx |  31 ++--
 .../TaskDetailModal.oversight-controls.test.tsx    |   5 +-
 .../TaskDetailModal.oversight-mobile.test.tsx      |   4 +
 .../__tests__/TaskDetailModal.rendering.test.tsx   |  95 +++---------
 ...etailModal.responsive-and-dependencies.test.tsx |  20 ++-
 8 files changed, 182 insertions(+), 249 deletions(-)

Fusion-Task-Id: FN-8209
Fusion-Task-Lineage: 3c079a7b-245a-4c4d-b058-6e1cf4b5a69d
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-17 10:13:23 -07:00
gsxdsm
0d2dcb3a40 FN-8189: fix mobile task-detail scrollbar gutter
Hide the mobile task-detail scrollbar to keep content insets visually symmetric.

- Preserve touch scrolling while removing the mobile non-overlay scrollbar track
- Add responsive regression coverage for scrollbar and inset behavior
- Add a patch changeset for the mobile layout fix

Files changed:
 .../fn-8189-task-detail-mobile-scrollbar-gutter.md |  7 +++
 .../dashboard/app/components/TaskDetailModal.css   | 12 +++++
 ...etailModal.responsive-and-dependencies.test.tsx | 55 ++++++++++++++++++++++
 3 files changed, 74 insertions(+)

Fusion-Task-Id: FN-8189

Fusion-Task-Lineage: 3a9300f7-9732-417b-95b0-b65a79efaaf6

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-17 00:04:41 -07:00
gsxdsm
c9aa3b465c FN-8166: fix mobile task-detail right padding
Remove the residual mobile Feed right inset so task details use balanced body padding.

- Let the task-detail body provide the mobile right inset.
- Retain first-row clearance for overlay controls.
- Cover mobile Feed padding and attached tab behavior with regression tests.
- Add a patch changeset for the dashboard fix.

Files changed:
 .../fn-8166-task-detail-mobile-right-padding.md    |  7 +++
 .../dashboard/app/components/TaskDetailModal.css   |  8 +--
 .../TaskDetailModal.attachments-and-tabs.test.tsx  |  2 +-
 ...etailModal.responsive-and-dependencies.test.tsx | 63 +++++++++++++++++++++-
 4 files changed, 74 insertions(+), 6 deletions(-)

Fusion-Task-Id: FN-8166

Fusion-Task-Lineage: ae58ae8b-4659-429f-8939-1d7e1a82d34c

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-16 18:30:14 -07:00
gsxdsm
bd8a6ae7bb FN-8154: fix mobile task-detail Feed padding
Narrow the mobile Feed inset while preserving clearance for its overlay control.

- Restore full-width activity content on narrow task-detail surfaces.
- Reserve overlay-toggle clearance only for first-row Feed elements.
- Cover the responsive CSS contract and publish a patch changeset.

Files changed:
 .changeset/fn-8154-task-detail-mobile-padding.md   |  7 +++++++
 .../dashboard/app/components/TaskDetailModal.css   | 16 +++++++++++++++-
 .../TaskDetailModal.attachments-and-tabs.test.tsx  |  2 +-
 .../__tests__/TaskDetailModal.css.test.ts          | 22 ++++++++++++++++++++++
 ...etailModal.responsive-and-dependencies.test.tsx |  2 +-
 5 files changed, 46 insertions(+), 3 deletions(-)

Fusion-Task-Id: FN-8154
Fusion-Task-Lineage: 9094d12d-0431-4f42-bec9-c573686c7d6f
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-16 16:44:39 -07:00
gsxdsm
96b1f21707 FN-7999: show failed-banner diagnostics and model/node retry
Expose a richer Task Failed banner with tool-error diagnostics and one-click retry using a different model or node.

- Always show the failed banner for failed tasks (including errorless failures) with a generic reason fallback
- Surface the latest agent-log tool_error detail and a retry hint for workflow/step-execute failures
- Add Retry and Retry with a different model/node actions with deferred model/node override save on confirm
- Style the banner recovery controls and cover them in TaskDetailModal tests
- Add minor changeset for @runfusion/fusion

Files changed:
 .changeset/fn-7999-failed-banner-retry.md          |   7 +
 .../dashboard/app/components/TaskDetailModal.css   |  47 +++++++
 .../dashboard/app/components/TaskDetailModal.tsx   | 143 ++++++++++++++++++++-
 .../__tests__/TaskDetailModal.test-helpers.ts      |   3 +-
 .../components/__tests__/TaskDetailModal.test.tsx  |  59 ++++++++-
 5 files changed, 248 insertions(+), 11 deletions(-)

Fusion-Task-Id: FN-7999

Fusion-Task-Lineage: d4268c43-442f-4f39-afbe-c6f583ec0fc0

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-15 16:35:26 -07:00
gsxdsm
335b6a4dc2 fix: raise Plan Review replan cap to 8 and explain approval holds
Give planner/reviewer pairs more room to converge before escalating, and surface why a task is parked for plan approval—especially plan-review-replan-cap non-convergence—on cards, detail, and notifications.
2026-07-15 11:14:17 -07:00
gsxdsm
be1950b79c FN-7843: keep task-detail per-model token tables horizontally scrollable on mobile
Removes the mobile stacked-card override for the Summary tab's per-model token/cost table so it stays a real, horizontally-scrollable table matching the Command Center pattern, and updates the covering tests/changeset accordingly.

- Drop the @media (max-width: 768px) block in TaskDetailModal.css that converted .task-summary-token-table rows into stacked cards (display:block, thead hidden, td::before labels), so the wrapper's overflow-x: auto and table min-width now govern mobile layout.
- Update FNXC:TaskDetailSummaryTokenCost comments to document the new horizontal-scroll contract instead of the removed stacked-card behavior, and refresh the TaskCostTab.css FNXC comment to match.
- Add a new regression test (token-table-mobile-scroll.test.ts) asserting the task-detail token table wrapper keeps overflow-x: auto, the mobile media block no longer stacks rows into cards, and the Command Center .cc-table-wrap stays scrollable.
- Update the existing TaskDetailModal summary-tab test to assert the stacked-card CSS is absent from the mobile block instead of asserting its presence.
- Add a patch changeset describing the fix for end users.

Files changed:
 .changeset/mobile-token-table-scroll.md            |  7 +++
 .../__tests__/token-table-mobile-scroll.test.ts    | 70 +++++++++++++++++++++
 packages/dashboard/app/components/TaskCostTab.css  |  2 +-
 .../dashboard/app/components/TaskDetailModal.css   | 73 ++--------------------
 .../__tests__/TaskDetailModal.summary-tab.test.tsx | 13 ++--
 5 files changed, 90 insertions(+), 75 deletions(-)

Fusion-Task-Id: FN-7843

Fusion-Task-Lineage: bb6dde7c-f205-45f3-984a-0fc52be5d547

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-11 22:16:48 -07:00
gsxdsm
49faf0afe2 FN-7832: reorder Task Detail tabs and default terminal picker to task worktree
Reworks the Task Detail terminal experience: the embedded Terminal tab now sits between Comments and Cost, its workspace picker defaults to the task's worktree, and the mobile terminal panel is shorter.

- Move the Terminal tab in Task Detail's tab strip to sit right after Comments and before Cost (previously Cost was earlier and Terminal was near the Session tab)
- TerminalModal now defaults its workspace picker to the useWorkspaces entry whose worktree matches the passed defaultCwd, but only until the operator manually changes the selection; the footer/global terminal still defaults to Project Root since it doesn't pass defaultCwd
- Reduce `.detail-section--worktree-terminal`'s mobile min-height from min(65dvh, 14 * --space-2xl) to min(50dvh, 11 * --space-2xl) so tab context and controls stay reachable above the fold
- Update docs/dashboard-guide.md to describe the new Comments → Terminal → Cost tab order and the worktree-matching picker default
- Add regression tests covering the new tab order and the default terminal workspace selection behavior
- Add a patch changeset describing the user-facing change

Files changed:
 .changeset/FN-7832-task-terminal-picker-and-tab-order.md          |  7 +++
 docs/dashboard-guide.md                                           |  9 +--
 packages/dashboard/app/components/TaskDetailModal.css             |  5 +-
 packages/dashboard/app/components/TaskDetailModal.tsx             | 30 +++++-----
 packages/dashboard/app/components/TerminalModal.tsx                | 19 +++++++
 packages/dashboard/app/components/__tests__/TaskDetailModal.attachments-and-tabs.test.tsx | 15 ++---
 packages/dashboard/app/components/__tests__/TaskDetailModal.worktree-terminal.test.tsx    | 12 ++++
 packages/dashboard/app/components/__tests__/TerminalModal.test.tsx                        | 64 ++++++++++++++++++++++
 8 files changed, 134 insertions(+), 27 deletions(-)

Fusion-Task-Id: FN-7832

Fusion-Task-Lineage: 4ee67a65-8564-49c9-b93c-8c3eab05c073

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-11 20:46:05 -07:00
gsxdsm
6317fcddb5 FN-7813: add embedded worktree-rooted multi-tab Terminal to Task Detail
Add an interactive, worktree-rooted, multi-tab Terminal tab to the Task Detail
view, distinct from the pre-existing CLI-agent Session tab.

- TaskDetailModal gains a new embedded Terminal tab (single non-workspace
  task with one recorded worktree) that mounts TerminalModal in a new
  `embedded` render mode, rooted at the task's worktree
- Rename the existing agent-session tab label to "Session" to disambiguate
  it from the new Terminal tab
- useTerminalSessions gains task-scoped session storage and a `defaultCwd`
  option so embedded terminal tabs persist separately from footer/global
  project terminal tabs and start in the task worktree
- TerminalModal/CSS updated to support the embedded layout mode
- Update lazy-loaded-views docs test and AGENTS.md exclusion list to cover
  the new `LazyTerminalModal` task-detail-internal surface
- Document the new Session/Terminal tab split in docs/dashboard-guide.md
- Add i18n strings for the new Terminal tab across all locales
- Add a changeset (minor) for @runfusion/fusion

Files changed:
 .changeset/FN-7813-worktree-terminal-tab.md        |   7 +
 AGENTS.md                                          |   2 +-
 docs/dashboard-guide.md                            |   3 +
 .../app/__tests__/lazy-loaded-views-docs.test.ts   |   4 +-
 .../dashboard/app/components/TaskDetailModal.css   |  17 +++
 .../dashboard/app/components/TaskDetailModal.tsx   |  41 +++++-
 .../dashboard/app/components/TerminalModal.css     |  51 +++++++
 .../dashboard/app/components/TerminalModal.tsx     |  71 +++++++---
 .../__tests__/TaskDetailModal.test-helpers.ts      |   3 +
 .../TaskDetailModal.worktree-terminal.test.tsx     | 139 ++++++++++++++++++
 .../components/__tests__/TerminalModal.test.tsx    |  29 ++++
 .../hooks/__tests__/useTerminalSessions.test.ts    | 157 +++++++++++++++++++++
 .../dashboard/app/hooks/useTerminalSessions.ts     |  63 ++++++---
 packages/i18n/locales/en/app.json                  |   3 +-
 packages/i18n/locales/es/app.json                  |   3 +-
 packages/i18n/locales/fr/app.json                  |   3 +-
 packages/i18n/locales/ko/app.json                  |   3 +-
 packages/i18n/locales/zh-CN/app.json               |   3 +-
 packages/i18n/locales/zh-TW/app.json               |   3 +-
 19 files changed, 550 insertions(+), 55 deletions(-)

Fusion-Task-Id: FN-7813

Fusion-Task-Lineage: 4ef86a15-347a-4862-b01c-5063d8004cb8

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-11 00:01:10 -07:00
gsxdsm
927741a8cf FN-7727: persist failed workflow step history across self-healing retries
Preserves prior failed pre-merge review attempts instead of overwriting them when self-healing re-runs a failed workflow step.

- Add optional bounded `priorAttempts?: WorkflowStepResult[]` field to `WorkflowStepResult` (capped at `MAX_WORKFLOW_STEP_PRIOR_ATTEMPTS`)
- Add shared pure `upsertWorkflowStepResult(existing, incoming, opts?)` helper in `@fusion/core` (packages/core/src/workflow-step-results.ts)
- Route the executor graph adapter's `recordWorkflowStepResult` and triage's `recordPlanReviewWorkflowResult` through the new helper so a self-healing recovery re-run snapshots the prior failed/advisory_failure attempt into `priorAttempts` instead of dropping it
- Selection logic (self-healing, merge-blocker, progress/timing) is unchanged and still reads only the current entry
- Surface prior failed attempts in the TaskDetailModal Summary tab's Workflow results list as a collapsed "previous failed attempts" disclosure
- Add core/engine/dashboard tests covering the upsert helper, self-healing recovery snapshotting, and the UI disclosure
- Document the behavior in docs/workflow-steps.md
- Add changeset for @runfusion/fusion (patch)

Files changed:
 .changeset/fn-7727-persist-failed-step-history.md  |   7 ++
 docs/workflow-steps.md                             |  15 +++
 .../src/__tests__/workflow-step-results.test.ts    | 138 +++++++++++++++++++++
 packages/core/src/index.gate.ts                    |   4 +
 packages/core/src/index.ts                         |   4 +
 packages/core/src/types.ts                         |  19 +++
 packages/core/src/workflow-step-results.ts         |  99 +++++++++++++++
 .../dashboard/app/components/TaskDetailModal.css   |  55 ++++++++
 .../dashboard/app/components/TaskSummaryTab.tsx    |  42 ++++++-
 .../TaskSummaryTab.prior-attempts.test.tsx         |  89 +++++++++++++
 .../clear-terminal-workflow-step-failures.test.ts  |  27 ++++
 packages/engine/src/__tests__/self-healing.test.ts |  50 ++++++++
 ...flow-step-results-self-healing-recovery.test.ts | 115 +++++++++++++++++
 packages/engine/src/executor.ts                    |  29 +++--
 packages/engine/src/triage.ts                      |  14 ++-
 15 files changed, 688 insertions(+), 19 deletions(-)

Fusion-Task-Id: FN-7727
Fusion-Task-Lineage: 7316fb18-bc92-426d-91f4-b1a4ad41c9b1
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-09 19:58:05 -07:00
gsxdsm
413ef1dfa2 FN-7633: pin equal explicit heights for Priority, Execution-mode, and Oversight controls
Align the Priority chip, Execution-mode toggle, and Oversight dropdown trigger to the exact same box height in the task detail metadata cluster, closing a gap where a shared min-height floor still let controls diverge.

- Add explicit `height: var(--detail-priority-control-min-height)` to `.detail-priority-chip`, `.detail-execution-mode-toggle`, and `.detail-oversight-menu-trigger` alongside the existing `min-height`, so none can outgrow or undershoot the others regardless of flex stretch/content differences
- Keep `min-height` as a safety-net floor for edge cases like font scaling
- Add regression test asserting all three controls share the same fixed height token on desktop and mobile, and that the Oversight popover itself remains unaffected
- Add changeset documenting the fix as a patch-level bug fix

Files changed:
 .../fn-7633-priority-execution-oversight-height.md |  7 ++++
 .../dashboard/app/components/TaskDetailModal.css   | 44 ++++++++++++++++---
 ...etailModal.responsive-and-dependencies.test.tsx | 49 ++++++++++++++++++++++
 3 files changed, 95 insertions(+), 5 deletions(-)

Fusion-Task-Id: FN-7633

Fusion-Task-Lineage: 7a89743e-117f-4032-9614-a9a15f2a9b08

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-07 22:04:54 -07:00
gsxdsm
1ea3c86769 FN-7618: stretch Oversight dropdown trigger to match Priority/Execution-mode height
Fixes the Task Detail Oversight dropdown trigger rendering shorter than the Priority and Execution-mode controls on non-mobile viewports.

- Made `.detail-oversight-menu-dropdown` an `inline-flex` with `align-items: stretch` so the popover-positioning wrapper participates in `.detail-meta-inline-controls`'s stretch behavior instead of only sizing to its own content.
- Added `align-self: stretch` to `.detail-oversight-menu-trigger` so it fills the now-stretched wrapper, matching Priority/Execution-mode's direct-child stretch.
- Added a regression test asserting the wrapper/trigger stretch declarations exist, apply at every viewport, and don't leak into the absolutely-positioned popover.
- Added a patch changeset documenting the fix.

Files changed:
 .changeset/fn-7618-oversight-trigger-height.md     |  7 ++++
 .../dashboard/app/components/TaskDetailModal.css   | 26 ++++++++++++
 ...etailModal.responsive-and-dependencies.test.tsx | 48 ++++++++++++++++++++++
 3 files changed, 81 insertions(+)

Fusion-Task-Id: FN-7618
Fusion-Task-Lineage: f918c2aa-5677-446c-a7dc-17c72adb9c27
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-06 19:03:07 -07:00
gsxdsm
f7dfcb3b09 FN-7604: collapse overseer/oversight controls into a single dropdown across surfaces
Unifies the previously mobile-only Oversight overflow menu into a single, always-present dropdown that replaces the scattered desktop oversight buttons and the separate mobile affordance.

- Replace discrete desktop oversight action buttons in TaskDetailModal's footer with one universal "Oversight actions" dropdown trigger, reusing the menu across desktop and mobile breakpoints.
- Simplify TaskDetailModal.tsx footer rendering logic, removing now-redundant responsive branching for oversight controls.
- Update TaskDetailModal.css to drop the old mobile-only oversight-overflow styles and support the unified dropdown across breakpoints.
- Update definition-actions, oversight-controls, oversight-mobile, rendering, and responsive-and-dependencies tests to assert the single dropdown behavior and disambiguate the exact "Actions" button query from the new "Oversight actions" aria-label.
- Refresh docs/dashboard-guide.md to describe the unified oversight dropdown UX.

Files changed:
 docs/dashboard-guide.md                            |  14 +-
 packages/dashboard/app/components/TaskDetailModal.css   |  89 +++++------
 packages/dashboard/app/components/TaskDetailModal.tsx   | 177 +++------------------
 packages/dashboard/app/components/__tests__/TaskDetailModal.definition-actions.test.tsx    |  70 ++++----
 packages/dashboard/app/components/__tests__/TaskDetailModal.oversight-controls.test.tsx    | 130 ++++++++++-----
 packages/dashboard/app/components/__tests__/TaskDetailModal.oversight-mobile.test.tsx      |  42 +++--
 packages/dashboard/app/components/__tests__/TaskDetailModal.rendering.test.tsx   |  27 ++--
 packages/dashboard/app/components/__tests__/TaskDetailModal.responsive-and-dependencies.test.tsx |  57 ++++---
 8 files changed, 278 insertions(+), 328 deletions(-)

Fusion-Task-Id: FN-7604
Fusion-Task-Lineage: afbb7573-d654-48db-a9ac-aecbd8e22e46
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-05 19:39:18 -07:00
gsxdsm
8fb7d51ae9 FN-7601: distinguish task-detail priority chip colors by level
Give the TaskDetailModal priority chip distinct tinted borders/backgrounds per level so low/high/urgent/normal are visually distinguishable at a glance.

- Add per-level border-color and stronger background overrides for .detail-priority-chip.card-priority-badge--{low,high,urgent}, using the matching semantic color token (info/warning/error) with higher specificity than the shared base rule.
- Leave the FN-7585 shared base chip rule and FN-7597 neutral 'normal' treatment untouched; scope changes strictly to .detail-priority-chip so read-only TaskCard badge tints are unaffected.
- Add a regression test asserting each level has distinct, non-var(--border) border-colors and backgrounds, mutually distinct across levels, while the read-only TaskCard badge selectors remain unchanged.

Files changed:
 .../dashboard/app/components/TaskDetailModal.css   | 33 ++++++++++
 ...etailModal.responsive-and-dependencies.test.tsx | 71 ++++++++++++++++++++++
 2 files changed, 104 insertions(+)

Fusion-Task-Id: FN-7601

Fusion-Task-Lineage: 1e2fc574-835c-43b0-8689-02884ad5c2d6

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-05 19:09:14 -07:00
gsxdsm
20379e81c5 FN-7597: style task-detail Priority dropdown to match Oversight dropdown
Aligns the task-detail Priority dropdown's size, border, and typography with the Oversight dropdown so both controls read as one consistent style.

- Give the untinted `normal` priority level a neutral, token-based chip background (scoped to `.detail-priority-chip.card-priority-badge--normal`) instead of an empty bordered shell, matching the Oversight `--off` chip treatment.
- Remove the Priority-only forced uppercase text-transform on the select/option so it relies on the ancestor label's uppercase transform like the Oversight select does.
- Add regression coverage asserting shared box-size/border tokens across the Priority chip, Oversight chip, and mobile Oversight overflow trigger, no duplicated text-transform overrides, preserved low/high/urgent semantic tints, and unaffected --saving state.
- Add a patch changeset documenting the fix.

Files changed:
 .changeset/fn-7597-priority-dropdown-matches-oversight.md          |  7 +++
 packages/dashboard/app/components/TaskDetailModal.css              | 27 ++++++++++--
 packages/dashboard/app/components/__tests__/TaskDetailModal.responsive-and-dependencies.test.tsx | 51 ++++++++++++++++++++++
 3 files changed, 82 insertions(+), 3 deletions(-)

Fusion-Task-Id: FN-7597

Fusion-Task-Lineage: d703e59a-35d8-4788-9ad2-1462d6f3c588

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-05 16:56:22 -07:00
gsxdsm
8a7507ad36 FN-7587: add predictive-back slide/fade animation for mobile task-detail dismissal
Adds a presentation-only enter animation for mobile task-detail surfaces (modal and board main-panel), layered on top of the existing FN-7583/FN-7586 dismissal routing, without altering close/back timing.

- Gate a new `.task-detail-modal--mobile-transition` class in TaskDetailModal.tsx via a local resize listener at the 768px breakpoint, mirroring the existing OVERSIGHT_MENU_MOBILE_BREAKPOINT pattern
- Add matching `.task-detail-main-panel--mobile-transition` modifier in MainContent.tsx gated by the existing isMobile prop
- Add slide/fade keyframe animations in TaskDetailModal.css and styles.css, both honoring prefers-reduced-motion
- Add regression tests covering the modal and board-panel mobile transition behavior
- Document the Capacitor WebView limitation preventing a true interactive predictive-back in packages/mobile/README.md

Files changed:
 .../dashboard/app/components/TaskDetailModal.css   |  33 ++
 .../dashboard/app/components/TaskDetailModal.tsx   |  31 +-
 ...skDetail.mobile-transition.board-panel.test.tsx | 333 +++++++++++++++++++++
 .../TaskDetail.mobile-transition.test.tsx          | 156 ++++++++++
 .../app/components/dashboard/MainContent.tsx       |  10 +-
 packages/dashboard/app/styles.css                  |  35 +++
 packages/mobile/README.md                          |  30 ++
 7 files changed, 626 insertions(+), 2 deletions(-)

Fusion-Task-Id: FN-7587

Fusion-Task-Lineage: cc5f08df-4aaf-447d-9c30-237b32191d3f

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-05 12:38:01 -07:00
gsxdsm
0f1cd0a36a FN-7585: unify border, radius, and height across task-detail Priority/Execution-mode/Oversight controls
Unifies the visual styling of the task-detail modal's Priority, Execution-mode, and Oversight quick-control chips so the cluster reads as one consistent control group.

- Add a shared --detail-control-border-radius token (resolving to --radius-md) alongside the existing --detail-priority-control-min-height token
- Override .detail-priority-chip's inherited transparent border with a visible --btn-border-width/--border pairing so the "normal" priority level renders as a bordered box instead of borderless text
- Pin the same border-width/color/radius trio on .detail-execution-mode-toggle so a future change to .btn defaults can't desync the cluster
- Apply the same trio to .detail-oversight-chip, overriding .card-oversight-badge's transparent border (covers the neutral "off" tint too)
- Apply the same trio to the mobile .detail-oversight-menu-trigger swap-in so the mobile overflow-trigger variant matches the desktop chip
- Add a changeset (patch) documenting the fix for @runfusion/fusion
- Extend TaskDetailModal.responsive-and-dependencies.test.tsx coverage for the unified styling

Files changed:
 .changeset/FN-7585-unify-task-detail-quick-control-styling.md                         |  7 +++
 packages/dashboard/app/components/TaskDetailModal.css                                 | 55 ++++++++++++++++++++++
 packages/dashboard/app/components/__tests__/TaskDetailModal.responsive-and-dependencies.test.tsx | 27 +++++++++++
 3 files changed, 89 insertions(+)

Fusion-Task-Id: FN-7585

Fusion-Task-Lineage: 0cca8c82-c9fb-4410-af48-51861a743f96

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-05 11:49:42 -07:00
gsxdsm
ab28e7811c FN-7581: make Intervention Timeline activity panel full width on mobile
Stop the Interventions Activity segment from reserving padding for an overlay toggle button it never renders, which was insetting the FN-7519 timeline from the right edge (worse on mobile).

- Add `.detail-activity--interventions` CSS modifier that zeroes `padding-inline-end` for the Interventions segment, both base and mobile breakpoints, while leaving Live/Feed/Raw's reserved padding untouched
- Apply the new modifier class to the Interventions `.detail-activity` container in TaskDetailModal.tsx
- Add a regression test asserting the Interventions container carries `detail-activity--interventions` while the Feed container (which still renders the overlay toggle) does not

Files changed:
 .../dashboard/app/components/TaskDetailModal.css   | 18 ++++++++++
 .../dashboard/app/components/TaskDetailModal.tsx   |  2 +-
 .../TaskDetailModal.oversight-controls.test.tsx    | 38 ++++++++++++++++++++++
 3 files changed, 57 insertions(+), 1 deletion(-)

Fusion-Task-Id: FN-7581

Fusion-Task-Lineage: d5c55773-7df3-4eb4-aa70-01f6e0a622c6

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-05 11:31:48 -07:00
gsxdsm
6e4c207a7f FN-7559: disambiguate release-authorization holds from manual plan-approval holds
Disambiguate release-authorization approval holds from manual plan-approval holds so auto-approve no longer appears broken.

- Add `Task.awaitingApprovalReason` (`"release-authorization" | null`) to distinguish the release-authorization gate from the independent manual plan-approval gate, both of which set `status: "awaiting-approval"`.
- Stamp `awaitingApprovalReason: "release-authorization"` when the release gate blocks a task, and explicitly clear it (`null`) when the manual plan-approval gate parks the task, so a stale reason never survives a replan.
- Add DB migration/persistence support for the new column in `db.ts`/`store.ts`/`types.ts`.
- TaskCard/TaskDetailModal now render a distinct status for release-authorization holds and suppress the generic manual Approve/Reject affordance for them.
- Add i18n string and docs updates (`settings-reference.md`, `workflow-steps.md`) plus a changeset.
- Extend regression tests in db, triage, TaskCard, and TaskDetailModal to cover the new reason field and disambiguated UI.

Files changed:
$(git diff --cached --stat)

Fusion-Task-Id: FN-7559
Fusion-Task-Lineage: 0b37cbf0-40a4-4165-8088-482ed365ba19
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-05 11:31:44 -07:00
gsxdsm
3d55102091 FN-7546: clarify planner-oversight Nudge/Explain controls with visible label and in-DOM disabled reason
Add a visible group label and an in-DOM disabled-reason helper to the task-detail oversight controls so the Nudge/Explain cluster is no longer confusing when greyed out, and make Explain always-openable since it is read-only.

- Add a `detail-oversight-controls-label` group label above the Nudge/Stop/Explain buttons, gated by the same visibility condition as the buttons (mobile and desktop clusters)
- Add a `detail-overseer-nudge-disabled-reason` in-DOM helper line explaining why Nudge is unavailable, instead of relying only on a hover title
- Remove the disabled gate from Explain (it's read-only/non-mutating) and update its title copy to reflect that it always opens and shows last-known state when inactive
- Add regression tests covering the new label/helper text and Explain's always-enabled behavior
- Add a patch changeset and a docs/dashboard-guide.md note

Files changed:
 .changeset/FN-7546-oversight-controls-clarity.md   |  7 +++
 docs/dashboard-guide.md                            |  2 +
 .../dashboard/app/components/TaskDetailModal.css   | 42 +++++++++++++
 .../dashboard/app/components/TaskDetailModal.tsx   | 41 +++++++++++--
 .../TaskDetailModal.oversight-controls.test.tsx    | 69 ++++++++++++++++++++++
 5 files changed, 157 insertions(+), 4 deletions(-)

Fusion-Task-Id: FN-7546

Fusion-Task-Lineage: d1f342ea-2de0-4b54-9930-9b3d540c7af6

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-04 21:28:19 -07:00
gsxdsm
19a436ab5e FN-7545: collapse task-detail oversight controls into mobile overflow menu
Adds a mobile-friendly overflow menu for the task-detail planner-overseer controls, keeping the desktop inline cluster unchanged.

- Below 768px, replace the inline oversight-level select/nudge/stop/explain controls with a single "Oversight" overflow-menu trigger (MoreVertical icon, aria-haspopup="menu") mirroring the existing move-action dropdown pattern
- Popover lists the same controls as full-width, tappable role="menuitem" entries with identical testids and enablement/visibility rules as desktop
- Trigger is withheld entirely when no controls would render (no empty-shell button)
- Desktop (>768px) inline cluster is unchanged
- Adds TaskDetailModal.oversight-mobile.test.tsx covering trigger visibility, menu contents, and parity with desktop controls
- Updates docs/dashboard-guide.md to document the mobile overflow-menu behavior

Files changed:
 docs/dashboard-guide.md                            |   2 +
 packages/dashboard/app/components/TaskDetailModal.css   | 118 ++++++
 packages/dashboard/app/components/TaskDetailModal.tsx   | 383 ++++++++++++++-----
 packages/dashboard/app/components/__tests__/TaskDetailModal.oversight-mobile.test.tsx      | 413 +++++++++++++++++++++
 packages/dashboard/app/components/__tests__/TaskDetailModal.test-helpers.ts      |   2 +
 5 files changed, 830 insertions(+), 88 deletions(-)

Fusion-Task-Id: FN-7545

Fusion-Task-Lineage: 63cb778e-f17d-43d3-a3de-864683d4e8f1

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-04 21:28:18 -07:00
gsxdsm
62ddb19cb3 FN-7543: render original task prompt as collapsible markdown in Plan tab
Original prompt in the Task Detail Plan tab now renders as Markdown and is collapsed by default behind a chevron toggle, matching the shared PROMPT.md renderer instead of showing raw preserved plain text.

- Add a collapse/expand chevron toggle (`.detail-source-header`/`.detail-source-toggle`) for the original-prompt section, collapsed by default; toggle only renders when content exists.
- Render the expanded original prompt through the shared ReactMarkdown pipeline (remarkGfm, sharedRehypePlugins, markdownLinkifyComponents) instead of plain preserved text.
- Update CSS: replace `.detail-original-prompt-text` box/border/pre-wrap styling with `.detail-section--original-prompt .markdown-body` sizing rules (including mobile breakpoint).
- Update dashboard-guide.md docs to describe the collapsed-by-default markdown rendering behavior.
- Update TaskDetailModal tests to cover collapsed-by-default state, expand/collapse toggle, markdown rendering, and no-toggle empty state.
- Add changeset (@runfusion/fusion patch) describing the user-facing behavior change.

Files changed:
 .changeset/fn-7543-original-prompt-markdown-collapsed.md                                 |  7 +++
 docs/dashboard-guide.md                                                                   |  2 +-
 packages/dashboard/app/components/TaskDetailModal.css                                     | 13 ++----
 packages/dashboard/app/components/TaskDetailModal.tsx                                     | 30 +++++++++++--
 packages/dashboard/app/components/__tests__/TaskDetailModal.inline-editing-and-integrations.test.tsx | 52 +++++++++++++---------
 5 files changed, 69 insertions(+), 35 deletions(-)

Fusion-Task-Id: FN-7543

Fusion-Task-Lineage: b00964c0-404e-41a1-b9e1-336c000d4acc

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-04 21:28:18 -07:00
gsxdsm
d10ea9aef1 FN-7519: add planner-overseer intervention timeline model and UI
Introduces a persisted planner-overseer intervention timeline surfaced in the task-detail Planner Oversight cluster, recording stage, reason, action taken, outcome, attempt count/limit, and source links for each intervention.

- Add core `PlannerInterventionEntry` type plus `recordPlannerIntervention`/`getPlannerInterventionTimeline` helpers that persist entries via the run-audit store under the `overseer:intervention` mutation
- Add `PlannerInterventionTimeline` dashboard component rendering the timeline (stage/reason/action/outcome/attempts/links) with associated styles
- Wire the new API route/legacy handler and TaskDetailModal integration to expose and render the timeline
- Add unit tests for the core helpers and the new UI component
- Add changeset for the new minor feature and update architecture/dashboard-guide docs

Files changed:
$(cat /tmp/diffstat_7519.txt)

Fusion-Task-Id: FN-7519

Fusion-Task-Lineage: 3c4fcda3-9eb2-46d3-b142-b0c7d6334cd0

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-04 21:28:17 -07:00
gsxdsm
6498d028f2 FN-7517: add task detail oversight quick-controls (level change, manual nudge, stop, explain-current-action)
Adds task detail modal controls that let an operator quickly change a task's
oversight level, nudge the planner with a manual instruction, stop oversight
entirely, and request an explanation of the overseer's current action,
backed by new dashboard API routes and engine/core plumbing.

- Add oversight quick-controls UI (level change, manual nudge, stop
  oversight, explain-current-action) to TaskDetailModal with supporting
  styles in TaskDetailModal.css and TaskCard.css
- Add dashboard legacy API + task-workflow routes to handle the new
  oversight actions (register-task-workflow-routes.ts, api/legacy.ts)
- Extend planner-overseer-state and planner-overseer-runtime-snapshot to
  track/report manual nudge and stop-oversight state
- Extend PlannerRecoveryController and project-engine to apply manual
  oversight actions (level change, nudge, stop, explain) end-to-end
- Add tests: TaskDetailModal.oversight-controls.test.tsx,
  tasks-overseer-controls.test.ts,
  planner-recovery-controller-manual-action.test.ts, plus updates to
  planner-overseer-runtime-snapshot.test.ts and test-helpers
- Update docs/dashboard-guide.md and docs/settings-reference.md

Files changed:
 docs/dashboard-guide.md                            |   2 +
 docs/settings-reference.md                         |   2 +-
 packages/core/src/planner-overseer-state.ts        |  18 +
 packages/dashboard/app/api/legacy.ts               |  33 ++
 packages/dashboard/app/components/TaskCard.css     |  13 +
 packages/dashboard/app/components/TaskDetailModal.css   | 122 +++++++
 packages/dashboard/app/components/TaskDetailModal.tsx   | 374 ++++++++++++++++++++-
 packages/dashboard/app/components/__tests__/TaskDetailModal.oversight-controls.test.tsx | 290 ++++++++++++++++
 packages/dashboard/app/components/__tests__/TaskDetailModal.test-helpers.ts      |  11 +
 packages/dashboard/src/routes/__tests__/tasks-overseer-controls.test.ts      | 191 +++++++++++
 packages/dashboard/src/routes/register-task-workflow-routes.ts    |  68 ++++
 packages/engine/src/__tests__/planner-overseer-runtime-snapshot.test.ts      |  24 +-
 packages/engine/src/__tests__/planner-recovery-controller-manual-action.test.ts |  84 +++++
 packages/engine/src/planner-overseer-runtime-snapshot.ts       |  11 +
 packages/engine/src/planner-recovery-controller.ts |  40 +++
 packages/engine/src/project-engine.ts              | 102 ++++++
 16 files changed, 1380 insertions(+), 5 deletions(-)

Fusion-Task-Id: FN-7517

Fusion-Task-Lineage: eded7ff5-d126-429d-acbb-9f4bfff5ae2a

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-04 21:28:16 -07:00