- Keep adjacent GitHub provenance markers grouped at the right edge of the TaskCard footer
- Add a CSS rule that prevents later provenance chips from reapplying auto left margin
- Expand TaskCard regression coverage for imported issues with GitHub tracking links
Fusion-Task-Id: FN-4287
Adds regression tests for TaskCard tracking-link affordance (FN-4181 Step 3), covering the interactive element behavior introduced in the prior step.
Fusion-Task-Id: FN-4181
Adds a tracking issue mechanism for GitHub-imported tasks, creating an internal Fusion task to track the import lifecycle. The TaskCard component gains visibility into tracking status, backed by new tests in both TaskCard and GitHub tracking modules.
Fusion-Task-Id: FN-4271
Adds a GitHub link indicator to task cards with styling and hover behavior, accompanied by tests to cover the new icon display logic.
Fusion-Task-Id: FN-4144
Simplified the fan-out badge label to match the design spec and removed the now-redundant CSS overrides in TaskCard.css, inheriting the count color from the task column instead. Also stabilized verification tests and added a changeset for the patch release.
Fusion-Task-Id: FN-4122
Fusion-Task-Lineage: 7dba6f5b-5143-49e9-8edb-2f54a1e2b608
Merges FN-3954: adds a blocker fanout system where task staleness automatically escalates to upstream blocking tasks, with a new `blocker-fanout` core module, dashboard hooks wiring that surfaces escalation status on the board and executor status bar, and a new settings toggle to disable escalation.
Fusion-Task-Id: FN-3954
Adds a "high fan-out" indicator that surfaces when a task blocks an unusually large number of downstream tasks, displayed as a warning badge on TaskCards and in the ExecutorStatusBar. The feature includes core type definitions, dashboard UI updates to render the warning with appropriate styling and
Fusion-Task-Id: FN-3942
Implemented the blocker fan-out feature across the dashboard: added a `useBlockerFanout` hook to track blocking relationships, rendered a fan-out badge on task cards, and added a blocking section to the task detail modal, with tests covering the hook and responsive modal behavior.
Fusion-Task-Id: FN-3897
- Add mesh lease manager integration so engine/self-healing can recover and reconcile stale lease state
- Extend core store/agent-store types, DB handling, and tests to track lease recovery semantics across runtimes
- Collapse TaskCard assigned-agent badge label in narrow cards while preserving accessible labeling behavior
- Update dashboard and engine test coverage for lease recovery flows and assigned-agent badge accessibility
- Document mesh lease recovery behavior in architecture, multi-project, and agents docs
Fusion-Task-Id: FN-3864
Merges FN-3428's branch-field contract and merge target override/default behavior tests across core, dashboard, and engine, plus a companion fix that sweeps subsumed autostash orphans and surfaces outcomes on the task feed. Adds project-node path mapping persistence APIs and schema (FN-3503), new ag
Fusion-Task-Id: FN-3428
Adds test coverage for TaskCard drag override behavior and DependencyGraph drag opt-out wiring, with a minor README clarification in the graph plugin.
Fusion-Task-Id: FN-3625
Adds documentation for graph navigation canonicalization (FN-3080) covering plugin authoring and dashboard usage, along with a changeset for the `@runfusion/fusion` package release.
Fusion-Task-Id: FN-3080
Refined branch chip visibility logic in TaskCard (suppressing the chip when the current branch is the default) and added test coverage for those suppression cases, with corresponding documentation updates. Also added chat layout regression tests and fixed a composer drag-pan issue on mobile touch de
Fusion-Task-Id: FN-3629
Merges the documentation update for FN-3287, adding 2 lines to the dashboard README covering PR link visibility behavior. This completes Step 5 of the task.
Fusion-Task-Id: FN-3287
- Resolve the cli-alias merge conflict by keeping mainline-deletion semantics under smart-prefer-main
- Add TaskCard workspace verification UI behavior and regression coverage
- Update plugin-sdk exports and related task/dashboard documentation for verification workflow
Fusion-Task-Id: FN-3386
This merge lands FN-3231 across two steps: it preserves a merge-active fix when verification bounces occur (step 1) and ensures the fix is retained during board routing transitions (step 2). Changes span the dashboard Board routing logic and the engine executor, with corresponding test coverage adde
Fusion-Task-Id: FN-3231
Fixes task detail modal danger/error styling by switching to token-based CSS variables for consistent theming across dark and light modes.
Fusion-Task-Id: FN-3350
Merged FN-3178: Added icon-based fast indicators to TaskCard and ListView components, replacing text badges with visual icons for quicker status scanning at a glance. Both the task card and list view layers were updated with matching CSS and component changes, along with corresponding test coverage.
Fusion-Task-Id: FN-3178
The merge adds GitHub provenance markers to task cards (FN-3174), finalizes planning CTA defaults in the summary view (FN-3172), and introduces drag-and-drop provider reordering with a Quick Chat FAB (FN-3153). It also updates `UsageIndicator` with substantial styling and logic improvements and adds
Fusion-Task-Id: FN-3174
This merge adds research settings to the settings modal and dashboard (FN-2839, FN-3029), implements a dashboard font scale setting with persistence and documentation (FN-3027), refactors AgentDetailView with a new AgentLogViewer CSS module (FN-2839), and improves NewAgentDialog with custom model dr
Fusion-Task-Id: FN-3027
The in-review timer chip was driven by per-step instrumented duration,
which is frozen during a merge (the merge phase isn't tracked as a
workflow step). A stuck merge could read "3m" indefinitely. While
status is "merging"/"merging-pr", show live elapsed since updatedAt
(set by the merger at status flip) with a "Merging Nm" tooltip.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Redesign the task Routing tab with effective-node summary rows, unhealthy node signaling, and direct per-task override selection
- Add robust override update handling (loading/saving states, stale-task guards, clear override action, and in-progress lock messaging)
- Extend TaskCard execution time indicator behavior to in-review cards and add focused regression coverage
- Refresh dashboard tests and styling for routing and node-status presentation, and remove an unused remote settings API import
- Add formatElapsedDurationDone to render done task elapsed time with ceiling-based minute/hour/day rounding
- Keep in-progress time indicator logic on existing floor-based formatElapsedDuration behavior
- Route done-card time indicator rendering through the new done-specific formatter
- Expand TaskCard tests to cover done rounding semantics and preserve in-progress rounding expectations
- Wire onRetryTask from App through Board/Column/WorktreeGroup/ListView into TaskCard
- Add a Retry button with loading/disabled state to failed task error boxes in TaskCard
- Update failed-card styles to use design tokens and add retry button visual states
- Add TaskCard tests covering retry visibility, callback invocation, loading, and error toast behavior
- Add a patch changeset for @runfusion/fusion documenting the dashboard retry shortcut
Production typecheck (tsconfig.json + tsconfig.app.json) was already
clean, but a third config that includes test files surfaced 661 errors
across 60+ test files — accumulated drift between mock fixtures and
production types. Six parallel typescript-pro agents fixed every one
without touching production code.
Per-scope before/after (errors → 0):
ChatView 183
Mailbox + Agent suite (5 files) 156
Task / Modal suite (6 files) 127
App + small components (12 files) 96
Hooks + api/auth (8 files) 48
Long tail (32 files) 51
-----------------------------------------------------------------
Total 661
Major fix categories:
- Untyped state objects inferring `never[]` / `null` literals (root
cause of ~120 errors in ChatView alone — added a single
`UseChatReturn` annotation)
- Mock objects missing fields that became required: `WorkflowStep.mode`,
`ChatMessage.thinkingOutput / metadata`, `ChatSession.projectId`,
`Task.log`, `ProjectHealth` fields, `PtyTerminalSessionInfo.createdAt`,
`Agent.metadata`, `InboxResponse.total`, etc.
- Mock objects with stale fields that no longer exist:
`AgentBudgetStatus.budgetPeriod`, `truncated` on log responses,
`OutboxResponse.unreadCount`, `MergeResult.source/target/details`
- Modal props that became required (e.g. `PlanningModeModal.onTasksCreated`)
- String literals not in narrowed unions (`Column`, `WorkflowStepPhase`,
`InsightStatus`, `AgentLogType`, etc.)
- `querySelector` returning `Element` cast to `HTMLElement` for
`@testing-library/react`'s `within()`
- Vitest mock typing: `.mock.calls` access needing `vi.mocked(...)`,
zero-param tuple handling, generic `vi.fn(() => [])` inferring
`never[]`
Helpers introduced in test files (no shared infra):
- `makeSettings(overrides)` in ModelSelectorTab.test.tsx
- `makePromptOverrides(overrides)` in AgentPromptsManager.test.tsx
- `FileBrowserTestOverrides` type alias in FileBrowser.test.tsx
- `makeInboxResponse / makeOutboxResponse` in MailboxView.test.tsx
Verification:
- tsc -p tsconfig.json: exit 0
- tsc -p tsconfig.app.json: exit 0
- tsc -p tsconfig.test-check.json (new — includes test files): exit 0
- vitest run: 9639 / 9641 (2 pre-existing failures
in terminal-mobile-keyboard-layout.test.ts
unrelated to this work; verified via
`git stash` + run on clean HEAD)
Adds packages/dashboard/tsconfig.test-check.json to keep this regression
guard available locally — same as tsconfig.app.json minus the test
exclude.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The task card timer chip previously fell back through several metrics
(timed duration → workflow runtime → wallclock), so cards showed only a
subset of execution time. For FN-2714 this rendered <1m on the card while
the stats tab reported >2m of workflow runtime.
The chip now reports the sum of [timing]-tagged log events and workflow
step runtime (matching the new "Total execution time" metric in the stats
panel), with live elapsed for in-progress workflow steps. When neither
metric is recorded, the chip is hidden rather than falling back to
wallclock.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Move TaskCard time indicator rendering from the header back into the footer metadata row
- Render timer and files-changed metadata together in the shared footer row layout
- Update timer chip CSS to stay right-aligned with margin-left:auto and prevent shrinking
- Update TaskCard and mobile board tests to assert footer placement and alignment behavior
- Render the countdown timer in the task card header next to metadata for clearer scanning
- Remove legacy footer timer styling and adjust TaskCard structure accordingly
- Update TaskCard unit tests to assert the new timer placement and header behavior
- Expand mobile board tests to validate timer visibility and placement across card states
- Remove token usage badge rendering and compact token formatting from TaskCard
- Drop token usage fields from TaskCard memo equality checks now that the badge is gone
- Delete obsolete TaskCard token badge CSS rules and icon import
- Simplify TaskCard tests by removing token badge assertions and related fixtures
- Render a compact token usage indicator in TaskCard footer with accessible labeling and token-aware styling
- Track token usage fields in the TaskCard memo comparator and expose a comparator test helper for regression coverage
- Add TaskCard tests for token usage rendering behavior and comparator invalidation on token usage updates
- Configure runtime plugin Vitest setups with an @fusion/engine source alias for reliable workspace test resolution
- Keep restart integration child_process spawn mocking aligned with execSync-driven merge verification behavior
- Render provider icons on TaskCard model metadata with token-based sizing and spacing
- Add provider icon display in TaskDetailModal for executor, validator, and planning model rows
- Update dashboard styling with reusable provider icon classes and layout tweaks in component CSS
- Expand TaskCard tests to cover provider icon rendering and fallback behavior
- Update TaskCard done-duration calculations to use createdAt as the start baseline for completed tasks
- Refactor TaskCard timer tests to assert against TaskStore-backed timestamps and avoid brittle elapsed-time assumptions
- Cover done-state timer behavior with expanded test scenarios for start/end timestamp combinations
- Remove unused provider code in pi-claude-cli to satisfy lint and keep the full test/build gates green
- Prevent TaskCard footer row metadata from wrapping by enforcing nowrap layout
- Make files-changed chip flex safely and truncate long text with ellipsis while preserving icon visibility
- Keep timer chip placement anchored to the right side of the footer metadata row
- Add TaskCard and board-mobile regression tests asserting footer child order and CSS layout guarantees
- Split timer calculation paths so in-progress cards show live elapsed time since entering in-progress
- Make done cards show fixed processing duration from start to completion instead of growing post-completion elapsed time
- Improve timer tooltip and aria-label copy for clearer in-progress and done semantics
- Expand TaskCard tests to cover boundary formatting, fixed done-duration behavior, and stable timer output as time advances