Commit Graph

144 Commits

Author SHA1 Message Date
gsxdsm
bf173dad7c FN-8696: keep reverted tasks out of Done
Keep reverted tasks out of completed views and give every task-detail host a revision recovery path.

- Exclude reverted tasks from complete columns and group them in dedicated recovery lists.
- Provide Delete and Revise actions in cards, lists, docks, modals, and popped-out details.
- Add localized copy, documentation, regression coverage, and a patch changeset.

Files changed:
 .changeset/fn-8696-reverted-task-resolution.md     |  7 ++++
 docs/dashboard-guide.md                            |  4 ++
 packages/dashboard/app/App.tsx                     |  2 +
 packages/dashboard/app/components/AppModals.tsx    |  2 +
 packages/dashboard/app/components/Board.tsx        | 42 +++++++++++++++++++-
 packages/dashboard/app/components/DockTaskList.tsx | 21 +++++++++-
 packages/dashboard/app/components/ListView.tsx     | 18 +++++++++
 packages/dashboard/app/components/TaskCard.css     |  4 ++
 packages/dashboard/app/components/TaskCard.tsx     |  9 +++++
 .../dashboard/app/components/TaskDetailModal.tsx   | 18 ++++++++-
 .../app/components/__tests__/Board.test.tsx        | 46 ++++++++++++++++++++++
 .../app/components/__tests__/DockTaskList.test.tsx | 29 +++++++++++++-
 .../app/components/dashboard/MainContent.tsx       |  4 ++
 .../app/components/overflowViewRegistry.tsx        |  3 ++
 .../app/components/useRightDockController.tsx      |  9 +++++
 .../app/utils/__tests__/taskRevert.test.ts         | 16 +++++++-
 packages/dashboard/app/utils/taskRevert.ts         | 18 +++++++++
 packages/i18n/locales/en/app.json                  |  3 ++
 18 files changed, 249 insertions(+), 6 deletions(-)

Fusion-Task-Id: FN-8696
Fusion-Task-Lineage: 7c9550fb-ef8e-4422-8ec1-0de1665413a3
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-01 13:30:18 -07:00
gsxdsm
fdd2bf2418 fix: prevent queued badge icon clipping on tablets 2026-08-01 12:58:29 -07:00
gsxdsm
b244ecd9a0 fix(dashboard): refine queued badge icon alignment 2026-08-01 00:46:42 -07:00
gsxdsm
1cfedbb7c5 fix(dashboard): shift queued icon spacing left 2026-08-01 00:42:11 -07:00
gsxdsm
22da0f2341 fix(dashboard): balance queued badge icon spacing 2026-08-01 00:39:12 -07:00
gsxdsm
9b82ff29e1 fix: enforce active capacity and clarify queued cards
Refresh canonical live-task claims at serialized scheduler, planning, and merge admission boundaries, including workflow-step leases and reservation handoffs. Back off capacity-denied merges safely across abort and restart lifecycles. Render queued planning cards in the header badge family with compact reason-specific icons.
2026-08-01 00:32:25 -07:00
gsxdsm
3b680cce04 FN-8675: align task-card size badges
Align direct size chips with adjacent task-card header badges.

- Center size badges on the shared header row across desktop and responsive layouts.
- Add coverage for size badge alignment, dimensions, and responsive CSS rules.
- Add a patch changeset for the dashboard alignment fix.

Files changed:
 .changeset/fn-8675-size-badge-alignment.md         |  7 +++
 packages/dashboard/app/components/TaskCard.css     |  8 +++
 .../__tests__/TaskCard.badge-height.test.tsx       | 68 ++++++++++++++++++++++
 .../__tests__/TaskCard.badge-wrap.test.tsx         | 10 ++++
 4 files changed, 93 insertions(+)

Fusion-Task-Id: FN-8675

Fusion-Task-Lineage: bf2eefb8-dbc2-40dd-a009-800f883146a8

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-01 00:10:04 -07:00
gsxdsm
f5a776d923 FN-8667: align fast-mode badges with task status
Keep fast-mode metadata badges in the task-card header's shared wrapping context.

- Make the meta badge wrapper layout-transparent so fast, priority, and oversight badges wrap independently with status.
- Prevent fast and priority chips from shrinking and update desktop and mobile layout coverage.
- Add a patch changeset for aligned task-card badges.

Files changed:
 .changeset/task-card-fast-mode-badge-wrap.md       |  7 ++++
 packages/dashboard/app/components/TaskCard.css     | 16 ++++----
 .../__tests__/TaskCard.badge-wrap.test.tsx         | 46 ++++++++++++++++++++++
 .../app/components/__tests__/TaskCard.test.tsx     |  6 +--
 4 files changed, 64 insertions(+), 11 deletions(-)

Fusion-Task-Id: FN-8667

Fusion-Task-Lineage: 34bdb410-8d8a-4b1f-8bc4-105ae324874e

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-31 22:51:07 -07:00
gsxdsm
031d0f3e0b FN-8665: align task-card size badge heights
Align size badges with the shared task-card badge geometry across responsive layouts.

- Remove fixed size-chip heights so shared badge styling determines dimensions.
- Cover desktop and wrapped badge geometry for S, M, and L task sizes.
- Add a patch changeset for the visual consistency fix.

Files changed:
 .changeset/fn-8665-size-badge-height.md            |  7 +++++
 packages/dashboard/app/components/TaskCard.css     | 14 +++------
 .../__tests__/TaskCard.badge-height.test.tsx       | 33 ++++++++++++++++++++--
 .../__tests__/TaskCard.badge-wrap.test.tsx         | 18 ++++++------
 4 files changed, 50 insertions(+), 22 deletions(-)

Fusion-Task-Id: FN-8665
Fusion-Task-Lineage: e54e76d5-ba33-49d5-ac05-25c0cc4183db
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-31 22:03:15 -07:00
gsxdsm
46d5019e2d FN-8631: remove task card bottom whitespace
Make progress-bearing task cards use their content height without an unused trailing band.

- Remove the fixed minimum height from the task-card steps toggle.
- Cover trailing-row layout across desktop and mobile task-card variants.
- Add a patch changeset for the visual layout fix.

Files changed:
 .changeset/fn-8631-task-card-bottom-space.md       |   7 ++
 packages/dashboard/app/components/TaskCard.css     |   8 +-
 .../app/components/__tests__/TaskCard.test.tsx     | 140 +++++++++++++++++++++
 3 files changed, 153 insertions(+), 2 deletions(-)

Fusion-Task-Id: FN-8631

Fusion-Task-Lineage: 408d359f-66ed-4510-8974-3debbf76860f

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-31 14:26:58 -07:00
gsxdsm
3f33cb000f feat: per-origin workflow selection + feedback-derived refinement titles
Two task origins had no workflow picker in front of the operator and always
inherited the project default: `fn task create` (CLI + the `fn_task_create`
agent tool) and refinement tasks. Add a Project General setting for each, where
blank/unset means "Selected workflow" (the operator's current Board lane,
falling back to the project default) and a concrete id pins that origin.

Because the Board lane lives in browser localStorage, non-browser callers could
not resolve "Selected workflow" at all. `boardSelectedWorkflowId` mirrors the
lane into project settings so they can. Note this makes the mirrored lane
project-scoped: two operators on one project share it, last switch wins. The
Board never reads it back, so the only effect is which workflow a newly created
task inherits.

Resolution is `TaskStore.resolveOriginWorkflowOverrideId(origin)`: pinned
setting -> mirrored lane -> `undefined` to inherit each caller's existing
default-workflow path unchanged. A deleted or fragment id degrades to inherit
rather than throwing, so a stale settings value can never break task creation.
An explicit `workflow_id` argument to `fn_task_create` still wins.

Separately, a refinement is now titled by the operator's own feedback via the
shared `deriveFallbackTaskTitle`, not `Refinement: <parent title>`. Ten
refinements of one task previously rendered ten identical titles, so the board
could not tell them apart while the text saying what each one asked for sat in
the description. Provenance moves to a `Refines <id>` card chip alongside the
existing detail-view parent link and dependency edge.

Verified: merge gate (299 tests), lint, full build, and typecheck for core, CLI,
and dashboard all pass. New coverage: origin resolution across both origins and
the full precedence ladder, the two settings pickers, the board-lane mirror,
refinement titling (including sibling distinctness), and the card chip.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-26 20:33:25 -07:00
gsxdsm
9afd88dd9b FN-8599: fix task card size badge alignment
Keep the size badge aligned with the first task-card header row when status badges wrap.

- Anchor desktop and mobile size chips to the header start with fixed tokenized heights
- Cover size-badge geometry and paused/reviewing badge combinations
- Add a patch changeset for the task-card alignment fix

Files changed:
 .changeset/fn-8599-task-card-size-badge.md         |  7 +++
 packages/dashboard/app/components/TaskCard.css     | 25 +++++++--
 .../__tests__/TaskCard.badge-height.test.tsx       | 13 ++++-
 .../__tests__/TaskCard.badge-wrap.test.tsx         | 62 +++++++++++++++++++--
 4 files changed, 98 insertions(+), 9 deletions(-)

Fusion-Task-Id: FN-8599

Fusion-Task-Lineage: 062716b6-58ca-4f5b-8741-50856e933192

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-26 08:42:46 -07:00
gsxdsm
9cbed745f9 feat(dashboard): surface the planning-capacity wait and stop overclaiming Start
Start performs a bare column move, so "Started planning {id}" reported an
outcome the handler cannot observe: the engine still has to admit the card, and
a busy pool (per-project maxConcurrent or cross-project globalMaxConcurrent) can
defer that indefinitely. The wait was only visible in the engine log
("Plan throttled by running-agent cap|global semaphore"), so a throttled card
looked like a bug.

- Add a "Queued to plan" badge: the exact complement of "Ready" (same idle-Todo
  conditions, but no steps yet, so it waits for a PLANNING slot rather than a WIP
  slot). Three Todo states are now distinguishable: planning in flight, queued to
  plan, and ready. Pause suppression matches Ready; the badge reuses the existing
  status-badge primitives with a color-mix tint, no new tokens.
- Retitle the Start toast to "Queued {id} for planning" in both call sites
  (TaskCard Start and QuickEntryBox quick-add Start).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-25 09:14:11 -07:00
gsxdsm
03cfc2dfc8 FN-8561: add lifecycle dates to task cards
Show localized creation and completion dates directly on task cards.

- Render compact, locale-aware lifecycle timestamps with accessible full-date titles.
- Persist archive timestamps for completed archived-task fallbacks and add coverage.
- Add translated labels, documentation, and a minor release changeset.

Files changed:
 .changeset/fn-8561-task-card-dates.md              |  7 +++
 docs/dashboard-guide.md                            |  1 +
 .../__tests__/archive-entry-serialization.test.ts  | 35 ++++++++++++++
 packages/core/src/task-store/serialization.ts      |  8 ++++
 packages/core/src/types/task-core.ts               |  5 ++
 packages/dashboard/app/components/TaskCard.css     | 27 +++++++++++
 packages/dashboard/app/components/TaskCard.tsx     | 55 ++++++++++++++++++++++
 .../__tests__/TaskCard.host-inventory.test.tsx     | 21 +++++++++
 .../app/components/__tests__/TaskCard.test.tsx     | 17 +++++++
 .../dashboard/app/i18n/__tests__/format.test.ts    | 19 +++++++-
 packages/dashboard/app/i18n/format.ts              | 38 +++++++++++++++
 packages/i18n/locales/en/app.json                  |  4 ++
 packages/i18n/locales/es/app.json                  |  4 ++
 packages/i18n/locales/fr/app.json                  |  4 ++
 packages/i18n/locales/ko/app.json                  |  4 ++
 packages/i18n/locales/zh-CN/app.json               |  4 ++
 packages/i18n/locales/zh-TW/app.json               |  4 ++
 17 files changed, 256 insertions(+), 1 deletion(-)

Fusion-Task-Id: FN-8561

Fusion-Task-Lineage: 474b949b-d8e7-469a-b564-00acae66e58a

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-24 11:15:43 -07:00
gsxdsm
8dc66bf3dd fix(dashboard): badge lane-owned gates and keep WIP progress clean
Suppress Ready while Plan Review is active, show only implementation steps
on In-progress progress, and surface Plan Review / Code Review / Browser
Verification as header badges on their lanes instead of progress bullets.
2026-07-21 22:37:10 -07:00
gsxdsm
40d125b9d1 FN-8324: place cost badge below Promote
Place enabled task cost badges directly below Promote while preserving their existing placement on other cards.

- Render the shared cost badge in a Promote-specific bottom-right row
- Preserve footer placement when Promote is unavailable
- Add placement and visibility coverage plus a patch changeset

Files changed:
 .changeset/fn-8324-card-cost-promote.md            |  7 +++
 packages/dashboard/app/components/TaskCard.css     | 14 +++++
 packages/dashboard/app/components/TaskCard.tsx     | 41 +++++++-----
 packages/dashboard/app/components/__tests__/TaskCard.test.tsx | 72 ++++++++++++++++++++++
 4 files changed, 120 insertions(+), 14 deletions(-)

Fusion-Task-Id: FN-8324

Fusion-Task-Lineage: 053da911-7f47-468c-a3b9-c0d85738bda8

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-18 13:27:43 -07:00
gsxdsm
12e0e3987b FN-8254: standardize task-card header badge heights
Standardize TaskCard header badge geometry across text and icon-only variants.

- Align planner oversight, fast-mode, mission, PR, and existing header chips with shared badge padding, borders, line height, and icon sizing.
- Cover populated desktop header chips and shared mobile chip declarations with regression tests.

Files changed:
 packages/dashboard/app/components/TaskCard.css     | 75 ++++++++++++++++------
 .../__tests__/TaskCard.badge-height.test.tsx       | 69 ++++++++++++++++++--
 .../__tests__/TaskCard.badge-wrap.test.tsx         | 26 ++++++--
 3 files changed, 142 insertions(+), 28 deletions(-)

Fusion-Task-Id: FN-8254

Fusion-Task-Lineage: bd5e4cce-8641-47ac-8745-6465d5cbbc1a

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-17 17:52:08 -07:00
gsxdsm
204bf8afa8 FN-8253: align task size badge with header badges
Align task-card size badge geometry with its sibling header badges.

- Center the size badge and inherit shared header-badge height.
- Cover desktop and mobile badge-height behavior with CSS assertions.

Files changed:
 packages/dashboard/app/components/TaskCard.css                | 11 +++++------
 .../app/components/__tests__/TaskCard.badge-wrap.test.tsx     | 11 +++++++++--
 2 files changed, 14 insertions(+), 8 deletions(-)

Fusion-Task-Id: FN-8253

Fusion-Task-Lineage: 63a64d62-12b3-4b53-a05e-1df7406ab222

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-17 17:33:19 -07:00
gsxdsm
a650057b3a FN-8234: position task size badges beside IDs
Place task size badges directly after task IDs to keep card header metadata aligned.

- Move size badges out of trailing action clusters into the ID-adjacent header position
- Preserve desktop and mobile chip-height alignment for size badges and actions
- Update card layout tests for badge ordering and alignment

Files changed:
 packages/dashboard/app/components/TaskCard.css     | 33 ++++++---
 packages/dashboard/app/components/TaskCard.tsx     | 20 +++---
 .../__tests__/TaskCard.badge-wrap.test.tsx         | 81 +++++++++++++---------
 .../app/components/__tests__/TaskCard.test.tsx     | 31 +++++++--
 4 files changed, 107 insertions(+), 58 deletions(-)

Fusion-Task-Id: FN-8234

Fusion-Task-Lineage: c9c93d1a-3339-40b0-b818-4d7b1a44a650

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-17 13:21:13 -07:00
gsxdsm
6ca7e48f87 fix(FN-7965): surface duplicate decisions
Show a clear operator-decision badge and deliver an idempotent mailbox prompt for triage duplicate markers.

Fusion-Task-Id: FN-7965
2026-07-17 08:53:44 -07:00
gsxdsm
e10ba2826f FN-8149: consolidate task-card move actions in three-dot menu
Consolidate task-card movement controls into the shared three-dot action menu.

- Remove standalone Send back and Move dropdown controls and their styles.
- Preserve all in-review move targets, including Triage and Done (no merge), in the action menu.
- Update task-card desktop and mobile coverage for the consolidated menu.

Files changed:
 packages/dashboard/app/components/TaskCard.css     |  63 +--------
 packages/dashboard/app/components/TaskCard.tsx     | 150 +++------------------
 .../__tests__/TaskCard.badge-wrap.test.tsx         |  39 ++----
 .../app/components/__tests__/TaskCard.test.tsx     | 134 +++++-------------
 .../app/components/__tests__/board-mobile.test.tsx |   6 +-
 5 files changed, 69 insertions(+), 323 deletions(-)

Fusion-Task-Id: FN-8149

Fusion-Task-Lineage: 650e20f6-c660-4c29-aa65-eb156bed7a0e

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-16 20:04:22 -07:00
gsxdsm
99b79e456b FN-8066: show reverted badges for completed tasks
Persist git-revert provenance and display it on completed task cards.

- Stamp source tasks after clean or already-reverted git outcomes.
- Render localized Reverted badges in completed and archived task views.
- Cover metadata, route, and card behavior with regression tests.

Files changed:
 .changeset/fn-8066-reverted-badge.md               |  7 +++
 docs/dashboard-guide.md                            |  2 +
 packages/dashboard/app/components/TaskCard.css     | 14 ++++-
 packages/dashboard/app/components/TaskCard.tsx     | 20 ++++++-
 .../app/components/__tests__/TaskCard.test.tsx     | 67 ++++++++++++++++++++++
 .../app/utils/__tests__/taskRevert.test.ts         | 17 ++++++
 packages/dashboard/app/utils/taskRevert.ts         | 11 ++++
 .../src/__tests__/task-revert-route.test.ts        | 35 +++++++++++
 .../src/routes/register-task-workflow-routes.ts    | 30 ++++++++++
 packages/i18n/locales/en/app.json                  |  2 +
 packages/i18n/locales/es/app.json                  |  2 +
 packages/i18n/locales/fr/app.json                  |  2 +
 packages/i18n/locales/ko/app.json                  |  2 +
 packages/i18n/locales/zh-CN/app.json               |  2 +
 packages/i18n/locales/zh-TW/app.json               |  2 +
 packages/i18n/src/resources.d.ts                   |  2 +
 16 files changed, 213 insertions(+), 4 deletions(-)

Fusion-Task-Id: FN-8066

Fusion-Task-Lineage: 2a071c14-7e5d-4161-ab0c-158f47ad9c22

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-16 03:00:59 -07:00
gsxdsm
e46ffebde1 FN-7985: surface review budget exhaustion and configure replan cap
Expose exhausted Plan Review replan budgets for operator approval and allow workflows to configure the cap.

- Add validated numeric workflow setting support and a Plan Review replan-cap setting.
- Route configured cap exhaustion with a distinct approval reason and preserve fallback behavior.
- Display the budget-exhaustion state across task cards, lists, and details.
- Add tests, localized copy, documentation, and a minor changeset.

Files changed:
 .changeset/fn-7985-review-budget-approval.md       |  7 ++++
 docs/settings-reference.md                         |  9 +++--
 docs/workflow-steps.md                             |  2 +-
 .../builtin-workflow-settings-triage.test.ts       | 27 +++++++++++++--
 packages/core/src/builtin-workflow-settings.ts     | 17 ++++++++++
 packages/core/src/index.gate.ts                    |  1 +
 packages/core/src/index.ts                         |  1 +
 packages/core/src/workflow-ir-types.ts             |  4 +++
 packages/core/src/workflow-ir.ts                   | 27 +++++++++++++++
 packages/core/src/workflow-settings-resolver.ts    |  1 +
 packages/core/src/workflow-settings.ts             |  6 ++++
 packages/dashboard/app/components/ListView.css     | 19 +++++++++++
 packages/dashboard/app/components/ListView.tsx     | 22 +++++++++---
 packages/dashboard/app/components/TaskCard.css     | 18 ++++++++++
 packages/dashboard/app/components/TaskCard.tsx     |  6 ++--
 .../dashboard/app/components/TaskDetailModal.tsx   |  4 +--
 .../app/components/__tests__/ListView.test.tsx     | 30 +++++++++++++++++
 .../app/components/__tests__/TaskCard.test.tsx     | 17 ++++++++--
 .../app/components/workflow-setting-display.ts     | 11 ++++++
 .../dashboard/app/utils/reviewBudgetApproval.ts    | 11 ++++++
 .../triage-plan-review-replan-cap.test.ts          | 39 +++++++++++++++++++---
 packages/engine/src/triage.ts                      | 21 ++++++++----
 packages/i18n/locales/en/app.json                  |  2 +-
 packages/i18n/src/resources.d.ts                   | 19 ++++++++---
 24 files changed, 288 insertions(+), 33 deletions(-)

Fusion-Task-Id: FN-7985

Fusion-Task-Lineage: 125f101c-caca-45c2-8b40-996b2a31c019

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-16 01:32:23 -07:00
gsxdsm
e24980ae46 FN-7997: keep task-card agent badge text visible on mobile and narrow cards
Stop hiding agent badge labels as icon-only pills on mobile and narrow task cards; rely on existing ellipsis truncation instead.

- Remove @container and max-width media rules that set .card-agent-badge-text { display: none }
- Document the no-icon-only-label requirement with an FNXC comment
- Add regression coverage that label text stays visible with ellipsis and that CSS no longer hides it

Files changed:
 packages/dashboard/app/components/TaskCard.css     | 15 +++-------
 .../__tests__/TaskCard.badge-wrap.test.tsx         | 33 ++++++++++++++++++++++
 2 files changed, 37 insertions(+), 11 deletions(-)

Fusion-Task-Id: FN-7997

Fusion-Task-Lineage: 3add9a91-adef-4299-a638-d71257d26633

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-15 14:31:21 -07:00
gsxdsm
b487f4542d fix: raise TaskCard Actions control onto header centerline
Nudge the text+chevron Actions/Send-back chip up by a quarter space-xs so
it no longer sits optically below the ⋯ menu and size badge on the locked
chip-height row.
2026-07-13 01:06:01 -07:00
gsxdsm
0b60fe9548 fix: align TaskCard right header cluster with task-id baseline
Lock .card-id and .card-header-actions to the chip height so the mobile
28px ⋯ touch target cannot stretch the row and sink Actions/size below
FN-####. Cancel residual menu layout growth and extend badge-wrap
regression coverage for the shared locked-row contract.
2026-07-13 01:03:06 -07:00
gsxdsm
cf58d7234d FN-7933: align mobile task-card header controls to one centerline
Follow-up to FN-7928: fix vertical alignment of the Send-back/Actions trigger, menu button, and size badge in the mobile task-card header actions.

- Set line-height: 1 on .card-menu-btn, .card-size-badge, and .card-send-back-btn so their text/icon baselines match instead of drifting from default line-height.
- Add align-items: center to .card-header-actions at the mobile breakpoint so Send back, menu, and size badge share one optical vertical centerline.
- Add padding-block to .card-size-badge to keep the badge's rendered height consistent with the neighboring controls after the line-height fix.
- Add regression tests (TaskCard.badge-wrap.test.tsx) asserting the mobile header-actions rule set (min-height, align-items, gap) and per-control line-height/padding declarations, plus an awaiting-user-input coverage case exercising the send-back/menu/size-badge centerline together.

Files changed:
 packages/dashboard/app/components/TaskCard.css     | 16 ++++
 .../__tests__/TaskCard.badge-wrap.test.tsx         | 92 ++++++++++++++++++++++
 2 files changed, 108 insertions(+)

Fusion-Task-Id: FN-7933
Fusion-Task-Lineage: e3d52b36-2446-4cdf-8faf-5c94b0f52786
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-13 00:53:48 -07:00
gsxdsm
da919fddea FN-7928: align TaskCard header-actions controls on a shared centerline
Fixes vertical baseline drift among the Send-back button, ⋯ menu button, and size badge inside .card-header-actions by normalizing their line-height, plus adds regression coverage.

- Set line-height: 1 on .card-menu-btn and .card-send-back-btn so their inline-flex content no longer drifts off-center relative to the size badge
- Add FNXC:TaskCardLayout comment documenting the FN-7928 requirement and its coexistence with prior FN-7889/FN-7862/FN-7837/FN-4351 header rules
- Add a badge-wrap regression test asserting Send-back/menu/size controls share one optical centerline across in-progress, done, triage, no-menu, and no-size card states

Files changed:
 packages/dashboard/app/components/TaskCard.css                          |   6 +
 packages/dashboard/app/components/__tests__/TaskCard.badge-wrap.test.tsx | 136 +++++++++++++++++++++
 2 files changed, 142 insertions(+)

Fusion-Task-Id: FN-7928

Fusion-Task-Lineage: 1b4ad644-8495-4ea1-8687-0849d6a3319b

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-13 00:01:42 -07:00
gsxdsm
c341b58bde FN-7889: align task card header action icons to the id's optical centerline
Vertically nudges the card-header-actions cluster (size badge/menu icons) to share the same optical centerline as the mono task id, matching the existing id nudge.

- Add a translateY(calc(var(--space-xs) / 4)) transform to .card-header-actions in TaskCard.css, mirroring the FN-7871 id nudge
- Document the change with an FNXC comment explaining the FN-7889 requirement and its relationship to FN-7871/FN-7862/FN-7837
- Extend the TaskCard.badge-wrap.test.tsx regression test to assert the actions cluster's transform matches the id's transform and stays tokenized (no raw px values)

Files changed:
 packages/dashboard/app/components/TaskCard.css                      | 6 +++++-
 .../dashboard/app/components/__tests__/TaskCard.badge-wrap.test.tsx | 4 ++++
 2 files changed, 9 insertions(+), 1 deletion(-)

Fusion-Task-Id: FN-7889

Fusion-Task-Lineage: d4743b8f-c7d7-4c3b-9b68-f632dd6e0b7b

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-12 18:06:38 -07:00
gsxdsm
5de1d9e7b0 FN-7871: center task-id chip with header badge row on TaskCard
Center the task-id chip with the header badge row on TaskCard.

- Add a subtle translateY nudge (calc(var(--space-xs) / 4)) to .card-id in TaskCard.css so the mono task id optically aligns with the first-row badges/icons, while preserving the existing FN-7862 flex-start anchor and FN-7837 badge-wrap contract.
- Add an FNXC:TaskCardLayout comment documenting the FN-7871 requirement and rationale for the nudge.
- Update TaskCard.badge-wrap.test.tsx to assert the new transform value on the rendered .card-id element and to assert the tokenized transform rule (and absence of a raw px translateY) directly in the loaded CSS.

Files changed:
 packages/dashboard/app/components/TaskCard.css                   | 5 +++++
 .../app/components/__tests__/TaskCard.badge-wrap.test.tsx        | 9 ++++++++-
 2 files changed, 13 insertions(+), 1 deletion(-)

Fusion-Task-Id: FN-7871

Fusion-Task-Lineage: 0c79d482-42d3-4e34-8844-3113c3e75ad7

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-12 12:55:36 -07:00
gsxdsm
b10f823672 FN-7867: make task-card priority badges icon-only to stop meta-badge wrapping
Board TaskCard priority badges no longer render visible priority text, so the .card-meta-badges row cannot wrap onto a new line when a priority label widens it.

- TaskCard.tsx: drop the visible priority-label <span>, add title/aria-label with the full priority label, and keep the label reachable via a visually-hidden span for assistive tech
- TaskCard.css: update the FNXC comment on .card-priority-badge to reflect the icon-only rationale (spacing/geometry rules unchanged, still shared with the Task Detail chip/select)
- TaskCard.test.tsx: assert icon-only rendering (no visible text node/span), title/aria-label correctness, visually-hidden label content, and that the badge is absent for tasks without a priority; loosen the mocked lucide icons to forward arbitrary props
- Add a patch changeset documenting the icon-only priority badge fix

Files changed:
 .changeset/icon-only-priority-badges.md            |  7 +++++
 packages/dashboard/app/components/TaskCard.css     |  2 +-
 packages/dashboard/app/components/TaskCard.tsx     | 12 ++++++---
 .../app/components/__tests__/TaskCard.test.tsx     | 30 +++++++++++++++++-----
 4 files changed, 39 insertions(+), 12 deletions(-)

Fusion-Task-Id: FN-7867

Fusion-Task-Lineage: 5c845c23-0a9f-47b4-9a75-6c410b507ef4

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-12 12:26:54 -07:00
gsxdsm
7a7c12847e FN-7862: align task-id, badges, and header actions on a shared baseline in board card header
Aligns the task card header so the id chip, first badge row, and right-side size/action controls share a consistent centered vertical baseline, using the existing card chip height tokens for row rhythm on both desktop and mobile while preserving FN-7837 wrapping behavior.

- Give .card-header-badges and .card-id a shared min-height (--card-chip-height) and switch .card-id to inline-flex with centered items and line-height:1 so it lines up with sibling chips instead of sitting on its own baseline
- Add min-height (--card-chip-height) to .card-header-actions so the right-aligned size/action cluster matches the id/badge row height
- Add a mobile-breakpoint override giving .card-id, .card-header-badges, and .card-header-actions a shared --card-chip-height-mobile min-height, extending the existing FN-4365/FN-4351/FN-7837 compact mobile header comment
- Add/extend TaskCard.badge-wrap tests: a shared expectSharedHeaderBaseline() assertion helper, new in-progress and no-badges alignment test cases, and a test asserting the mobile header rhythm CSS rule is present in loaded app CSS

Files changed:
 packages/dashboard/app/components/TaskCard.css     |  23 +++--
 .../__tests__/TaskCard.badge-wrap.test.tsx         | 100 ++++++++++++++++++++-
 2 files changed, 116 insertions(+), 7 deletions(-)

Fusion-Task-Id: FN-7862

Fusion-Task-Lineage: 1d66fbd6-30bc-4a76-9eb4-3b8734ddadc3

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-12 11:39:07 -07:00
gsxdsm
c7c6c5a8c4 FN-7842: color-code priority icons by urgency across quick add, task form, and task cards
Adds a shared urgency color source to priorityIndicator and wires it into every priority-glyph surface so low/normal/high/urgent read consistently by color, not just icon shape.

- priorityIndicator.tsx: add colorVar (low=info/blue, normal=muted, high=warning/amber, urgent=error/red) and new getPriorityColorVar() export as the single source of truth
- QuickEntryBox: tint the icon-only priority trigger and each option row in the priority picker with the matching urgency color
- TaskForm: tint the New Task inline priority glyph using the same color source
- TaskCard: render a colored priority glyph alongside the existing text label in the card-priority-badge (kept the non-normal visibility gate and badge geometry via a small CSS gap addition)
- Updated/added tests for QuickEntryBox, TaskCard (badge, badge-height, badge-wrap), and priorityIndicator to assert the new colors; added a patch changeset and a dashboard-guide.md doc update

Files changed:
 .changeset/fn-7842-priority-color-coding.md        |  7 +++++
 docs/dashboard-guide.md                            |  7 +++--
 .../dashboard/app/components/QuickEntryBox.tsx     |  7 +++--
 packages/dashboard/app/components/TaskCard.css     |  2 ++
 packages/dashboard/app/components/TaskCard.tsx     |  6 +++-
 packages/dashboard/app/components/TaskForm.tsx     |  7 +++--
 .../components/__tests__/QuickEntryBox.test.tsx    | 17 +++++++++--
 .../__tests__/TaskCard.badge-height.test.tsx       |  5 ++++
 .../__tests__/TaskCard.badge-wrap.test.tsx         |  5 ++++
 .../app/components/__tests__/TaskCard.test.tsx     | 33 +++++++++++++++++++++-
 .../app/utils/__tests__/priorityIndicator.test.tsx | 13 +++++----
 packages/dashboard/app/utils/priorityIndicator.tsx | 16 ++++++++---
 12 files changed, 103 insertions(+), 22 deletions(-)

Fusion-Task-Id: FN-7842

Fusion-Task-Lineage: 0b2d0d15-6e61-45fc-9378-bc09002bef55

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-11 22:16:48 -07:00
gsxdsm
66e91f96ae FN-7837: fix task card size badge wrapping onto a misaligned second row
Groups TaskCard header badges so the id and right-aligned size/actions cluster never wrap, fixing the S/M/L size chip dropping to its own row when extra badges (fast-mode, priority, oversight, PR/GitHub, etc.) are present.

- Introduce hasHeaderBadges/hasHeaderActions guards and wrap the middle badge cluster in a new .card-header-badges container so only .card-header-badges wraps, while .card-id and .card-header-actions stay pinned to the top row
- Update TaskCard.css: .card-header becomes a non-wrapping flex row; .card-header-badges takes over the wrapping/flex-grow behavior previously on .card-header; .card-id gets flex-shrink: 0; .card-header-actions gets flex: 0 0 auto and align-self: flex-start; mobile media query gains .card-header-badges alongside .card-meta-badges
- Add FNXC:TaskCardLayout comments documenting the FN-7837 layout requirement (non-wrapping header row, wrapping badge cluster)
- Extend TaskCard.badge-wrap.test.tsx and TaskCard.test.tsx coverage for the new header grouping/wrap behavior
- Add changeset FN-7837-card-size-badge-alignment.md (patch, fix) for @runfusion/fusion

Files changed:
 .changeset/FN-7837-card-size-badge-alignment.md    |  7 +++
 packages/dashboard/app/components/TaskCard.css     | 29 +++++++--
 packages/dashboard/app/components/TaskCard.tsx     | 38 ++++++++++++
 .../__tests__/TaskCard.badge-wrap.test.tsx         | 70 ++++++++++++++++++++--
 .../app/components/__tests__/TaskCard.test.tsx     | 27 ++++++---
 5 files changed, 156 insertions(+), 15 deletions(-)

Fusion-Task-Id: FN-7837

Fusion-Task-Lineage: 9f70abcf-3b23-41b3-8642-aa34a561996d

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-11 22:16:47 -07:00
gsxdsm
fc07bdfc7e FN-7831: add Reviewing badge for active Plan Review on task cards and list rows
Adds a distinct "Reviewing" status badge that surfaces on TaskCard and ListView rows while a task's optional plan-review workflow step is actively running, reusing the unified progress predicate so board and list surfaces stay in sync.

- Add isPlanReviewRunning(task) helper in taskProgress.ts, derived from getUnifiedTaskProgress's workflow-plan-review item status
- Render a pulsing "Reviewing" badge on TaskCard header (additive to existing status badges, with title/data-testid) while plan-review is running
- Render the matching "Reviewing" badge on both grouped and ungrouped ListView row layouts for parity with TaskCard
- Add supporting CSS for .card-status-badge--reviewing and .list-status-badge--reviewing
- Add unit tests for isPlanReviewRunning and component tests for the new badge across TaskCard and ListView
- Add minor changeset documenting the new operator-facing badge

Files changed:
 .changeset/tidy-reviewing-badges.md                |  7 ++
 packages/dashboard/app/components/ListView.css     | 10 +++
 packages/dashboard/app/components/ListView.tsx     | 22 +++++-
 packages/dashboard/app/components/TaskCard.css     | 10 +++
 packages/dashboard/app/components/TaskCard.tsx     | 25 ++++++-
 .../app/components/__tests__/ListView.test.tsx     | 78 ++++++++++++++++++++++
 .../app/components/__tests__/TaskCard.test.tsx     | 31 +++++++++
 .../app/utils/__tests__/taskProgress.test.ts       | 16 ++++-
 packages/dashboard/app/utils/taskProgress.ts       | 10 +++
 9 files changed, 205 insertions(+), 4 deletions(-)

Fusion-Task-Id: FN-7831

Fusion-Task-Lineage: d36f8c63-9b84-400a-8b10-3b9f3b04212b

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-11 20:37:26 -07:00
gsxdsm
937650472a FN-7820: add Cost tab to task detail and optional card cost badge
Adds a shared cost-derivation utility and surfaces token/cost info in a new Cost tab on the task detail modal, plus an opt-in per-card cost badge on the board.

- Extract token-cost calculation into a shared taskTokenCost helper (read-time costFor derivation) reused by the Summary tab, new Cost tab, and card badge
- Add TaskDetailModal Cost tab (TaskCostTab.tsx/.css) showing cost breakdown for a task
- Simplify TaskSummaryTab by delegating cost math to the shared helper
- Add default-off project setting showCostBadgeOnCards (settings-schema.ts, types.ts) with a SettingsModal/AppearanceSection toggle
- Add CostBadgeContext to thread the setting into TaskCard without prop drilling
- Show an optional cost badge on TaskCard when the setting is enabled
- Update i18n strings across en/es/fr/ko/zh-CN/zh-TW locales
- Update docs (dashboard-guide.md, settings-reference.md) and add changeset fn-7820-cost-tab-and-card-badge.md

Files changed:
 .changeset/fn-7820-cost-tab-and-card-badge.md      |   7 ++
 docs/dashboard-guide.md                            |   4 +
 docs/settings-reference.md                         |   1 +
 .../core/src/__tests__/settings-defaults.test.ts   |  13 ++
 packages/core/src/settings-schema.ts               |   5 +
 packages/core/src/types.ts                         |   5 +
 packages/dashboard/app/App.tsx                     |   5 +
 .../dashboard/app/components/SettingsModal.tsx     |   6 +
 packages/dashboard/app/components/TaskCard.css     |   7 +-
 packages/dashboard/app/components/TaskCard.tsx     |  27 +++-
 packages/dashboard/app/components/TaskCostTab.css  |  51 ++++++++
 packages/dashboard/app/components/TaskCostTab.tsx  |  91 ++++++++++++++
 .../dashboard/app/components/TaskDetailModal.tsx   |  14 ++-
 .../dashboard/app/components/TaskSummaryTab.tsx    | 123 +-----------------
 .../app/components/__tests__/TaskCard.test.tsx     |  81 +++++++++++-
 .../app/components/__tests__/TaskCostTab.test.tsx  |  55 ++++++++
 .../TaskDetailModal.attachments-and-tabs.test.tsx  |  11 +-
 .../settings/sections/AppearanceSection.tsx        |   8 ++
 .../sections/__tests__/AppearanceSection.test.tsx  |  20 +++
 .../settings-default-descriptions.test.tsx         |   1 +
 .../dashboard/app/context/CostBadgeContext.tsx     |  19 +++
 packages/dashboard/app/hooks/useAppSettings.ts     |  15 +++
 .../app/utils/__tests__/taskTokenCost.test.ts      |  62 +++++++++
 packages/dashboard/app/utils/taskTokenCost.ts      | 139 +++++++++++++++++++++
 packages/i18n/locales/en/app.json                  |  29 ++++-
 packages/i18n/locales/es/app.json                  |  30 ++++-
 packages/i18n/locales/fr/app.json                  |  27 +++-
 packages/i18n/locales/ko/app.json                  |  30 ++++-
 packages/i18n/locales/zh-CN/app.json               |  30 ++++-
 packages/i18n/locales/zh-TW/app.json               |  30 ++++-
 30 files changed, 789 insertions(+), 157 deletions(-)

Fusion-Task-Id: FN-7820

Fusion-Task-Lineage: d33c5678-a68c-4b29-9db1-8ff0369dfd72

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-11 18:07:00 -07:00
gsxdsm
ec1a2eafcf fix(dashboard): organize board quick-add composer and expose task actions menu
- Quick-add composer: single divider, option chips grouped left
  (workflow, priority, steps, deps, models, node, agent, GitHub) and
  primary actions right-aligned (attach, fast, Save last).
- Task cards get a visible kebab button (hover on desktop, always on
  mobile) opening the same context menu as right-click, which was
  previously undiscoverable.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 18:05:50 -07:00
gsxdsm
f5fd8b84f8 FN-7780: move agent-created badge to bottom row on task cards
Moves the agent-created badge out of the task card header's meta-badges row into its own bottom row so it no longer causes header wrapping.

- Moved .card-agent-created-badge out of .card-meta-badges into a new .card-agent-badge-row in TaskCard.tsx
- Updated hasCardMetaBadges guard logic and TaskCard.css to support the new bottom row layout
- Added TaskCard.badge-wrap.test.tsx regression coverage and extended TaskCard.test.tsx
- Updated docs/dashboard-guide.md
- Added changeset fn-7780-agent-badge-bottom-row.md (patch, fix category)

Files changed:
 .changeset/fn-7780-agent-badge-bottom-row.md       |  7 +++
 docs/dashboard-guide.md                            |  3 +-
 packages/dashboard/app/components/TaskCard.css     | 12 ++++
 packages/dashboard/app/components/TaskCard.tsx     | 29 ++++++----
 .../__tests__/TaskCard.badge-wrap.test.tsx         | 66 ++++++++++++++++++++++
 .../app/components/__tests__/TaskCard.test.tsx     | 34 ++++++++---
 6 files changed, 131 insertions(+), 20 deletions(-)

Fusion-Task-Id: FN-7780

Fusion-Task-Lineage: 6a6cd9f6-a9ce-488f-969d-520459c8631b

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-10 08:06:08 -07:00
gsxdsm
6a13ad175e FN-7732: remove dangling release-authorization UI/i18n/docs scaffolding
Narrative: The triage release-authorization gate itself was already removed in b5b0458; this cleans up the leftover scaffolding it left behind — an unemitted activity type, a dead TaskCard badge/label/CSS, orphaned i18n keys across all 6 locales, and a stale solutions doc — so the codebase no longer references a gate that no longer exists.

- Drop the unused `task:release-authorization-required` ActivityEventType and its label/rendering in ActivityFeed.tsx and ActivityLogModal.tsx
- Remove the dead `isReleaseAuthorizationHold` badge logic and `.awaiting-release-authorization` CSS class from TaskCard.tsx/TaskCard.css
- Simplify TaskDetailModal.tsx comments/logic now that legacy release-authorization holds render as ordinary manual plan-approval holds
- Delete orphaned i18n keys `tasks.awaitingReleaseAuthorization` and `taskDetail.plan.releaseAuthorizationHold` across en/es/fr/ko/zh-CN/zh-TW locales and resources.d.ts
- Delete the stale docs/solutions/architecture-patterns/release-triage-requires-user-authorization.md doc
- Update docs/workflow-steps.md and docs/settings-reference.md to describe the gate as removed (superseded by FN-7732) instead of documenting still-active behavior
- Add changeset for @runfusion/fusion (patch/internal)

Files changed:
 .changeset/fn-7732-remove-release-authorization-block.md |  7 +++++
 docs/settings-reference.md                                |  2 +-
 docs/solutions/architecture-patterns/release-triage-requires-user-authorization.md | 33 ----------------------
 docs/workflow-steps.md                                    |  6 ++--
 packages/core/src/types.ts                                 |  8 ++++--
 packages/dashboard/app/components/ActivityFeed.tsx         |  5 ----
 packages/dashboard/app/components/ActivityLogModal.tsx     |  6 ----
 packages/dashboard/app/components/TaskCard.css             | 11 --------
 packages/dashboard/app/components/TaskCard.tsx              | 13 +++------
 packages/dashboard/app/components/TaskDetailModal.tsx       | 14 +++------
 packages/i18n/locales/en/app.json                           |  3 --
 packages/i18n/locales/es/app.json                           |  5 +---
 packages/i18n/locales/fr/app.json                           |  5 +---
 packages/i18n/locales/ko/app.json                           |  5 +---
 packages/i18n/locales/zh-CN/app.json                        |  5 +---
 packages/i18n/locales/zh-TW/app.json                        |  5 +---
 packages/i18n/src/resources.d.ts                            |  3 --
 17 files changed, 30 insertions(+), 106 deletions(-)

Fusion-Task-Id: FN-7732

Fusion-Task-Lineage: d4137bd8-9056-4062-9f2a-c6f5d47295f4

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-09 19:58:07 -07:00
gsxdsm
09a10bc5e7 FN-7592: replace overseer badge text label with a colored Eye icon
Swaps the planner-overseer status badge from an uppercase text pill to a compact icon glyph, keeping accessibility text on aria-label/title.

- Render a small lucide-react Eye icon instead of the state-label text inside the overseer badge
- Keep the readable state name on aria-label and the composed tooltip on title for accessibility
- Add per-state coloring (watching/steering/recovering/awaiting-confirmation) keyed off the data-planner-overseer-state attribute in TaskCard.css, sized tightly around the icon
- Update TaskCard tests to assert the icon renders and the accessible name moved to aria-label instead of textContent

Files changed:
 packages/dashboard/app/components/TaskCard.css     | 40 ++++++++++++++++++++++
 packages/dashboard/app/components/TaskCard.tsx     | 14 ++++++--
 .../app/components/__tests__/TaskCard.test.tsx     | 25 +++++++++++---
 3 files changed, 72 insertions(+), 7 deletions(-)

Fusion-Task-Id: FN-7592

Fusion-Task-Lineage: d7ca93a6-9236-4fa0-a829-80f5b99dbd5f

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-05 13:11:15 -07:00
gsxdsm
e7cb2f1fed FN-7525: add Revert/Undo affordance to Done and Archived task cards
Adds a Revert action so operators can undo landed changes for Done/Archived tasks directly from the board.

- Adds onRevertTask wiring through Board, Column, Lane, ListView, TaskDetailModal, and WorktreeGroup surfaces
- Adds a Revert affordance to TaskCard (Done/Archived states) with confirm UX and CSS
- Adds POST /tasks/:id/revert legacy API route supporting "auto" mode with an AI-undo fallback (mode: "ai") on conflict
- Wires useTasks hook and dashboard MainContent/types to support the new revert action
- Adds new i18n strings for the revert affordance
- Adds a minor changeset for @runfusion/fusion documenting the feature
- Adds/updates tests: TaskCard.test.tsx, board-mobile.test.tsx, api-git.test.ts
- Updates docs/dashboard-guide.md and docs/task-management.md

Files changed:
 .changeset/fn-7525-revert-card-affordance.md       |   7 +
 docs/dashboard-guide.md                            |   2 +-
 docs/task-management.md                            |  10 ++
 packages/dashboard/app/App.tsx                     |   7 +-
 packages/dashboard/app/__tests__/api-git.test.ts   |  51 +++++++
 packages/dashboard/app/api/legacy.ts               |  51 +++++++
 packages/dashboard/app/components/AppModals.tsx    |   5 +-
 packages/dashboard/app/components/Board.tsx        |  10 +-
 packages/dashboard/app/components/Column.tsx       |   8 +-
 packages/dashboard/app/components/Lane.tsx         |   5 +-
 packages/dashboard/app/components/ListView.tsx     |  80 ++++++++++-
 packages/dashboard/app/components/TaskCard.css     |  24 +++-
 packages/dashboard/app/components/TaskCard.tsx     | 127 ++++++++++++++++-
 packages/dashboard/app/components/TaskDetailModal.tsx   |  85 ++++++++++++
 packages/dashboard/app/components/WorktreeGroup.tsx     |   6 +
 packages/dashboard/app/components/__tests__/TaskCard.test.tsx     | 151 +++++++++++++++++++++
 packages/dashboard/app/components/__tests__/board-mobile.test.tsx |  63 +++++++++
 packages/dashboard/app/components/dashboard/MainContent.tsx       |   4 +
 packages/dashboard/app/components/dashboard/types.ts    |   8 ++
 packages/dashboard/app/components/useRightDockController.tsx      |   4 +
 packages/dashboard/app/hooks/useTasks.ts           |  21 ++-
 packages/i18n/locales/en/app.json                  |  11 ++
 22 files changed, 718 insertions(+), 22 deletions(-)

Fusion-Task-Id: FN-7525

Fusion-Task-Lineage: b9e2ca94-4ec6-4443-8e41-cf4828018856

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-05 11:31:47 -07:00
gsxdsm
986e249bc1 FN-7555: surface bidirectional undo/source task links in dashboard UI
Adds a client-side helper and UI affordances so AI-undo tasks and their source tasks link to each other in the dashboard, without any new API or backend changes.

- Add packages/dashboard/app/utils/taskRevert.ts with getRevertOfId() (resolves the revertOf marker written by createAiUndoTask, with a defensive sourceType==="recovery" fallback to sourceParentTaskId) and findOpenUndoTaskForSource() (reverse lookup for the most recent open undo task pointing at a source task)
- TaskCard and TaskDetailModal now render "Undo of <id>" / "Undo task: <id>" provenance links using the shared helper, keeping forward and reverse affordances consistent
- Add TaskCard.css styling for the new undo-link affordance
- Add/extend tests: TaskCard.test.tsx and TaskDetailModal.rendering.test.tsx cover the new undo/source link rendering
- Update docs/task-management.md and packages/i18n/locales/en/app.json for the new UI copy

Files changed:
 docs/task-management.md                            |   2 +-
 packages/dashboard/app/components/TaskCard.css     |  37 +++++
 packages/dashboard/app/components/TaskCard.tsx     |  29 +++-
 .../dashboard/app/components/TaskDetailModal.tsx   |  46 ++++++
 .../app/components/__tests__/TaskCard.test.tsx     |  46 ++++++
 .../__tests__/TaskDetailModal.rendering.test.tsx   | 160 +++++++++++++++++++++
 packages/dashboard/app/utils/taskRevert.ts         |  80 +++++++++++
 packages/i18n/locales/en/app.json                  |   7 +-
 8 files changed, 403 insertions(+), 4 deletions(-)

Fusion-Task-Id: FN-7555

Fusion-Task-Lineage: c3d2dbd2-4d86-40b5-afce-0ca7a6dfc73d

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-05 11:31:46 -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
b4be5153f3 FN-7542: remove active-overseer-state badge from task cards
Removes the recently-added executor/reviewer/merger overseer-state chip from TaskCard, which fired as noise on nearly every in-progress card, keeping the separate oversight-level badge untouched.

- Deletes deriveOverseerCardWatchedStage and its OVERSEER_STATE_LABEL/MODIFIER maps from TaskCard.tsx
- Removes showOverseerStateBadge gating and its contribution to hasCardMetaBadges/areTaskCardPropsEqual
- Strips the now-unused .task-card-overseer-state-badge CSS rules from TaskCard.css
- Rewrites TaskCard.oversight.test.tsx to drop overseer-state-badge coverage while keeping oversight-level badge tests
- Updates docs/dashboard-guide.md reference and adds a changeset documenting the removal

Files changed:
 .changeset/fn-7542-remove-overseer-state-badge.md  |   7 +
 docs/dashboard-guide.md                            |   2 +-
 packages/dashboard/app/components/TaskCard.css     |  63 +-------
 packages/dashboard/app/components/TaskCard.tsx     | 161 +++------------------
 .../__tests__/TaskCard.oversight.test.tsx          | 149 +++++++------------
 5 files changed, 77 insertions(+), 305 deletions(-)

Fusion-Task-Id: FN-7542

Fusion-Task-Lineage: dabaf72a-a7b0-4054-8a72-7c3d99fa7bb1

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-04 21:28:18 -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
gsxdsm
31822b0336 FN-7516: show effective oversight level and active overseer state on task cards
Adds two display-only badges to TaskCard so operators can see planner oversight configuration and live overseer activity at a glance.

- Resolve and display the workflow's effective `plannerOversightLevel` (observe/steer/autonomous) per task, with a module-level cache keyed by (projectId, workflowId) and in-flight de-duplication to avoid redundant `/api/workflows/:id/setting-values` fetches across cards sharing a workflow.
- Gate oversight badge rendering until the workflow-effective value resolves (or a per-task override is known) so the very first render never shows a guessed schema-default badge.
- Derive a card-local "active overseer state" indicator (Executor/Reviewer/Merger/Pull request/Workflow gate) that mirrors the engine's `resolveWatchedStage` precedence using only fields already present on the Task payload (column, paused, pausedReason, prInfo, reviewState, workflowTransitionNotification), since the real in-memory monitor state has no persisted/API surface today.
- Add corresponding CSS badge modifiers and update dashboard-guide.md documentation.
- Add TaskCard.oversight.test.tsx covering the new badges and update existing TaskCard tests/badge-wrap test for the new markup.

Files changed:
 docs/dashboard-guide.md                            |   4 +
 packages/dashboard/app/components/TaskCard.css     | 106 +++++-
 packages/dashboard/app/components/TaskCard.tsx     | 369 +++++++++++++++++++-
 .../__tests__/TaskCard.badge-wrap.test.tsx         |   1 +
 .../__tests__/TaskCard.oversight.test.tsx          | 383 +++++++++++++++++++++
 .../app/components/__tests__/TaskCard.test.tsx     |  32 +-
 6 files changed, 889 insertions(+), 6 deletions(-)

Fusion-Task-Id: FN-7516

Fusion-Task-Lineage: ce909409-862b-4697-a19e-d6735a3b572d

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-04 21:28:16 -07:00
gsxdsm
e4eb8b6190 FN-7363: prevent mobile task long-press text selection
Prevent Board task long-press gestures from selecting card text while preserving editing controls.

- Disable native text selection and WebKit touch callouts on non-editing task cards.
- Prevent touch/pen pointer-down defaults before the long-press context-menu timer starts.
- Cover the mobile selection behavior with component and CSS regression tests and document the Board behavior.

Files changed:
 .changeset/fn-7363-mobile-board-text-selection.md  |  7 ++++
 docs/dashboard-guide.md                            |  5 +--
 packages/dashboard/app/components/TaskCard.css     | 17 ++++++++++
 packages/dashboard/app/components/TaskCard.tsx     |  5 +++
 .../app/components/__tests__/TaskCard.test.tsx     | 39 ++++++++++++++++++++++
 .../app/components/__tests__/board-mobile.test.tsx | 24 +++++++++++++
 6 files changed, 95 insertions(+), 2 deletions(-)

Fusion-Task-Id: FN-7363

Fusion-Task-Lineage: c683ab3b-2caa-4b45-a455-0cc163fd52cc

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-01 08:10:05 -07:00
gsxdsm
f04f01db1d FN-7362: Fix board task context menu clipping
Render Board task context menus as viewport overlays so column clipping no longer hides actions.

- Portal TaskCard context menus to document.body and position them with viewport coordinates.
- Clamp context menus after render and close them when the task identity or column changes.
- Update TaskCard coverage for overflow escape, keyboard/touch placement, and menu lifecycle behavior.
- Document the overlay behavior and add a patch changeset for @runfusion/fusion.

Files changed:
 .changeset/fn-7362-board-context-menu-overlay.md   |   7 +
 docs/dashboard-guide.md                            |   5 +-
 packages/dashboard/app/components/TaskCard.css     |   6 +-
 packages/dashboard/app/components/TaskCard.tsx     |  38 ++--
 .../app/components/__tests__/TaskCard.test.tsx     | 242 ++++++++++++++++-----
 5 files changed, 211 insertions(+), 87 deletions(-)

Fusion-Task-Id: FN-7362

Fusion-Task-Lineage: 8f2fc0b1-ad63-402e-a960-6a09cbe9c893

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-01 07:33:57 -07:00
gsxdsm
5ee19647f8 FN-7336: remove redundant workflow step badges
Remove duplicate workflow labels from expanded task-card step rows while preserving workflow progress visibility.

- Drop the per-step workflow text badge rendering and its phase-specific styles.
- Keep workflow rows identifiable through names, status dots, and active badges.
- Update task-card tests to assert workflow badge removal and running workflow-step behavior.
- Add a patch changeset for the published Fusion package.

Files changed:
 .changeset/remove-task-card-workflow-step-badge.md |  7 +++++
 packages/dashboard/app/components/TaskCard.css     | 24 -----------------
 packages/dashboard/app/components/TaskCard.tsx     | 11 +++-----
 .../app/components/__tests__/TaskCard.test.tsx     | 31 +++++++++++++---------
 4 files changed, 28 insertions(+), 45 deletions(-)

Fusion-Task-Id: FN-7336
Fusion-Task-Lineage: f4d29c69-edce-4f19-a156-8203e4784777
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-06-30 23:45:01 -07:00
gsxdsm
1bf86d15ea FN-7303: add workflow badge icon spacing
Add token-based spacing so workflow badge icons read clearly beside labels.

- Add consistent column gaps to task-card and task-detail workflow badges.
- Cover badge icon-label ordering and spacing expectations in dashboard tests.
- Add a patch changeset for the published Fusion package.

Files changed:
 .changeset/workflow-badge-spacing.md                           |  7 +++++++
 packages/dashboard/app/components/TaskCard.css                 |  4 ++++
 packages/dashboard/app/components/TaskDetailModal.css          |  5 +++++
 packages/dashboard/app/components/__tests__/TaskCard.test.tsx  | 10 ++++++++--
 .../TaskDetailModal.responsive-and-dependencies.test.tsx       |  1 +
 5 files changed, 25 insertions(+), 2 deletions(-)

Fusion-Task-Id: FN-7303
Fusion-Task-Lineage: 6d129e6c-0f8a-43c2-9c6d-88ff9acd520f
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-06-30 14:25:13 -07:00