Commit Graph

13750 Commits

Author SHA1 Message Date
Fusion Agent
c82e0cdeee FN-072: preserve the TaskStore receiver during reset publication
Ensure confirmed task resets invoke publication with the scoped TaskStore receiver.\n\n- Call resetTaskPublication as a bound store method so async state remains available.\n- Strengthen the lifecycle test to verify receiver identity and publication arguments.\n\nFiles changed:\n .../src/__tests__/task-reset-lifecycle.test.ts         | 18 +++++++++++++++---\n .../src/routes/register-task-workflow-routes.ts        | 14 ++++++++++----\n 2 files changed, 25 insertions(+), 7 deletions(-)

Fusion-Task-Id: FN-072

Fusion-Task-Lineage: 4d75f824-7176-4030-bbaa-c5ce76aab45f

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-21 04:32:52 +00:00
Fusion Agent
0b71e9f55e FN-070: streamline mobile navigation and task creation
Refine mobile project navigation so task creation and view switching remain accessible without redundant header controls.

- Add a Header New Task action backed by the existing full task form.
- Move mobile Board/List destinations to the bottom navigation and preserve Planning quick entry.
- Update responsive documentation, changeset metadata, and regression coverage.

Files changed:
 .changeset/fn-070-mobile-navigation.md             |  7 ++++
 docs/dashboard-guide.md                            |  2 +-
 packages/dashboard/app/App.tsx                     |  1 +
 packages/dashboard/app/__tests__/mobile-feature-access-regression.test.tsx      | 25 +++++++------
 packages/dashboard/app/components/Board.tsx        |  9 ++++-
 packages/dashboard/app/components/Header.tsx       | 43 ++++++++++-------------
 packages/dashboard/app/components/ListView.tsx     |  2 +-
 packages/dashboard/app/components/MobileNavBar.tsx | 20 ++++++++--
 .../app/components/__tests__/App.test.tsx          | 14 ++++---
 .../app/components/__tests__/Board.test.tsx        | 17 +++++++++
 .../app/components/__tests__/Header.test.tsx       | 16 +++++++-
 .../app/components/__tests__/ListView.test.tsx     |  5 ++-
 .../app/components/__tests__/MobileNavBar.test.tsx | 24 +++++++-----
 13 files changed, 123 insertions(+), 62 deletions(-)

Fusion-Task-Id: FN-070
Fusion-Task-Lineage: 17bdd4fe-a2ef-481e-9083-6fb1c2d6425f
Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-21 04:32:52 +00:00
Fusion Agent
0fce621729 FN-071: delete tasks when descriptions are cleared
Clear a saved Task Detail description through the existing confirmed deletion lifecycle.

- Detect blanking a populated description during autosave and explicit save.
- Reuse destructive-action confirmation preferences and guard against stale drafts or duplicate deletion requests.
- Add regression coverage, operator documentation, and a patch changeset.

Files changed:
 .changeset/fn-071-clear-description-delete.md      |   7 ++
 docs/dashboard-guide.md                            |   1 +
 .../dashboard/app/components/TaskDetailModal.tsx   |  65 +++++++++--
 ...lModal.inline-editing-and-integrations.test.tsx | 126 +++++++++++++++++++++
 4 files changed, 189 insertions(+), 10 deletions(-)

Fusion-Task-Id: FN-071

Fusion-Task-Lineage: bec428c4-8c08-47c5-b7c5-09692e101a26

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-21 04:32:52 +00:00
Fusion Agent
b8a70a544d FN-068: repair floating Chat HUD and conversation navigation
Repair floating Chat HUD controls and keep conversation navigation consistent across Chat hosts.\n\n- Remove redundant Quick Chat minimize behavior and retain clear Close/Open in Chat actions.\n- Move the Back action beside saved conversation titles across direct and room threads.\n- Preserve model metadata as secondary identity and document the updated responsive navigation.\n\nFiles changed:\n docs/dashboard-guide.md                            | 13 +++--
 packages/dashboard/app/App.tsx                     |  7 +--
 packages/dashboard/app/components/ChatView.css     | 22 ++++---
 packages/dashboard/app/components/ChatView.tsx     | 60 +++++++++----------
 .../__tests__/ChatView.core-interactions.test.tsx  | 67 ++++++++++++++++++++--
 .../components/__tests__/ChatView.mobile.test.tsx  | 11 +++-
 .../__tests__/ChatView.sessions-rooms.test.tsx     | 17 +++---
 .../__tests__/overflowViewRegistry.chat.test.tsx   |  4 +-
 8 files changed, 133 insertions(+), 68 deletions(-)

Fusion-Task-Id: FN-068

Fusion-Task-Lineage: 4cb32c6b-77c6-4f7f-9d75-741692a149aa

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-21 04:32:52 +00:00
Fusion Agent
f561d45177 FN-069: show agent mention dropdown above composer
Agent mention suggestions now consistently open above the chat composer in direct and room conversations.

- Set a shared above-composer position for both mention popup render paths.
- Extend direct-chat and room interaction coverage for popup placement and active conversation selection.

Files changed:
 packages/dashboard/app/components/ChatView.tsx     | 10 +++++--
 .../__tests__/ChatView.core-interactions.test.tsx  | 31 ++++++++++++++--------
 2 files changed, 28 insertions(+), 13 deletions(-)

Fusion-Task-Id: FN-069

Fusion-Task-Lineage: 69344c00-c076-4299-8edd-528378812309

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-21 04:32:52 +00:00
Fusion Agent
d9a4d36c1a FN-067: restore desktop Board drag navigation
Restore safe Board panning for desktop and tablet without changing mobile touch behavior.

- Restore primary-mouse dragging from safe noninteractive Board surfaces, including empty-column text.
- Keep cards, controls, editable content, native draggables, and mobile scrolling native.
- Preserve no edge auto-scroll behavior and document the updated navigation contract.

Files changed:
 .changeset/fn-067-board-safe-surface-pan.md        |   7 +
 docs/dashboard-guide.md                            |   4 +-
 packages/dashboard/app/components/Board.css        |   6 +-
 packages/dashboard/app/components/Board.tsx        |  12 +-
 .../app/components/__tests__/Board.test.tsx        |  73 +++++----
 .../app/components/__tests__/board-mobile.test.tsx |   4 +-
 .../app/hooks/__tests__/useBoardMousePan.test.tsx  | 163 +++++++++++----------
 packages/dashboard/app/hooks/useBoardMousePan.ts   |  37 +++--
 8 files changed, 172 insertions(+), 134 deletions(-)

Fusion-Task-Id: FN-067

Fusion-Task-Lineage: 410d3401-1d41-40f1-b025-26248ecd37ff

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-21 04:32:52 +00:00
Fusion Agent
dfa25335d0 FN-066: add task-ID search to Activity Log
Add task-ID filtering across the Activity Log data, API, and dashboard UI.\n\n- Index and expose task IDs in central activity audit queries.\n- Add API, hook, modal, styling, localization, and regression-test coverage for search.\n- Include the published-package changeset and PostgreSQL migration.\n\nFiles changed:\n .changeset/fn-066-activity-log-task-search.md      |  7 +++\n .../postgres/activity-log-parity.pg.test.ts        | 20 ++++++-\n .../postgres/central-core-backend.test.ts          | 16 +++++\n .../src/__tests__/postgres/schema-applier.test.ts  |  4 +-\n .../core/src/async-stores/async-central-core.ts    | 16 ++++-\n packages/core/src/central/central-core.ts          |  5 +\n .../core/src/postgres/migrations/0000_initial.sql  |  2 +\n .../0061_fn_066_activity_log_task_id_index.sql     |  7 +++\n packages/core/src/postgres/schema-applier.ts       | 13 ++++\n packages/core/src/postgres/schema/central.ts       |  1 +\n packages/core/src/store.ts                         |  2 +\n packages/core/src/task-store/async/async-audit.ts  | 19 +++--\n packages/dashboard/README.md                       |  1 +\n .../app/__tests__/activity-log-layout.test.ts      |  5 ++\n .../dashboard/app/__tests__/api-projects.test.ts   |  4 +\n packages/dashboard/app/api/projects/projects.ts    |  4 +\n packages/dashboard/app/api/system/scheduling.ts    |  3 +\n .../dashboard/app/components/ActivityLogModal.css  | 14 +++++\n .../dashboard/app/components/ActivityLogModal.tsx  | 68 +++++++++++-------\n packages/dashboard/app/components/ScriptsModal.css | 21 +++++++\n .../components/__tests__/ActivityLogModal.test.tsx | 58 ++++++++++++++++++\n .../app/hooks/__tests__/useActivityLog.test.ts     | 35 +++++++++++\n packages/dashboard/app/hooks/useActivityLog.ts     | 14 +++--\n .../src/__tests__/activity-log-route.test.ts       | 35 +++++++++++\n .../src/routes/register-setup-activity-routes.ts   | 28 +++++---\n packages/i18n/locales/en/app.json                  |  5 +\n packages/i18n/locales/es/app.json                  |  5 +\n packages/i18n/locales/fr/app.json                  |  5 +\n packages/i18n/locales/ko/app.json                  |  5 +\n packages/i18n/locales/pt-BR/app.json               |  5 +\n packages/i18n/locales/zh-CN/app.json               |  5 +\n packages/i18n/locales/zh-TW/app.json               |  5 +\n packages/i18n/src/resources.d.ts                   |  3 +\n 33 files changed, 384 insertions(+), 56 deletions(-)

Fusion-Task-Id: FN-066

Fusion-Task-Lineage: 055e2383-9701-4b7e-9f7d-92c2fe175049

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-21 04:32:52 +00:00
gsxdsm
5c008bab97 FN-9181: bound recall-capture audit emission
Route detached recall-capture telemetry through the bounded core audit seam.

- Preserve the injectable audit adapter while bounding production recorded and failed events.
- Add hostile-sink, metadata-contract, and source-routing regression coverage.
- Document the class-A decision and add a patch changeset.

Files changed:
 .changeset/fn-9181-recall-capture-bounded-audit.md |  7 +++
 AGENTS.md                                          |  1 +
 docs/run-audit.md                                  |  4 +-
 .../core-run-audit-emitter-isolation.test.ts       |  3 +-
 .../__tests__/core-run-audit-sink-health.test.ts   | 62 ++++++++++++++++++-
 .../src/__tests__/memory/recall-capture.test.ts    | 71 +++++++++++++++++++++-
 packages/core/src/memory/recall-capture.ts         | 43 +++++++------
 7 files changed, 166 insertions(+), 25 deletions(-)

Fusion-Task-Id: FN-9181

Fusion-Task-Lineage: 4700caca-7182-4aa7-9355-b0bfdef0e4e1

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-20 03:36:07 -07:00
gsxdsm
fdebfba8a1 FN-9180: Route deleted-task outbox audits through the bounded seam
Keep deleted-task outbox processing resilient to hostile audit sinks while preserving durable ordering.

- Route catch-up, reconciliation fallback, lease-fenced, and retention-pruned events through the core bounded audit emitter.
- Add production-path sink-health coverage and update emitter routing ratchets.
- Document the class-A decision and add a patch changeset.

Files changed:
 .changeset/fn-9180-outbox-run-audit.md             |   7 +
 AGENTS.md                                          |   1 +
 docs/run-audit.md                                  |   2 +-
 .../core-run-audit-emitter-isolation.test.ts       |  13 +-
 .../excluded-awaited-run-audit-layer-sites.test.ts | 203 +--------------------
 .../task-deleted-outbox-audit-sink-health.test.ts  | 117 ++++++++++++
 ...k-lifecycle-retention-audit-sink-health.test.ts |  64 +++++++
 .../src/task-store/task-deleted-outbox-consumer.ts |  13 +-
 .../task-store/task-lifecycle-event-retention.ts   |   8 +-
 9 files changed, 215 insertions(+), 213 deletions(-)

Fusion-Task-Id: FN-9180

Fusion-Task-Lineage: 33e126fd-23d6-4f3b-a377-1c4bfd7b2941

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-20 00:54:56 -07:00
gsxdsm
c8f6afe124 FN-9182: Bound reconciliation audit emissions
Keep reconciliation responsive while preserving audit-dependent outcomes.

- add a bounded core audit emitter that reports recorded, absent, failed, and timed-out outcomes
- route workflow-switch and phantom-reservation reconciliation through the outcome-aware seam
- cover hostile sink behavior, caller-visible failures, routing invariants, and operator documentation

Files changed:
 .changeset/fn-9182-bounded-run-audit-outcome.md    |  7 ++
 AGENTS.md                                          |  1 +
 docs/run-audit.md                                  |  4 +-
 .../core-run-audit-emitter-isolation.test.ts       | 10 +--
 .../__tests__/core-run-audit-sink-health.test.ts   | 51 ++++++++++++++-
 .../src/__tests__/emit-bounded-run-audit.test.ts   | 58 ++++++++++++++++-
 .../phantom-reservation-audit-outcome.test.ts      | 76 ++++++++++++++++++++++
 .../core/src/run-audit/emit-bounded-run-audit.ts   | 41 +++++++++---
 .../task-store/async/async-phantom-reservations.ts | 31 +++++----
 .../core/src/task-store/workflow-definitions.ts    | 48 ++++++++------
 10 files changed, 277 insertions(+), 50 deletions(-)

Fusion-Task-Id: FN-9182

Fusion-Task-Lineage: c98e8e5e-2dae-47a0-b969-4156f4beccb3

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-20 00:36:50 -07:00
gsxdsm
649b901bbd FN-9178: Classify awaited core run-audit emitters
Document and ratchet which core run-audit writers may remain lifecycle-coupled.

- classify awaited emitters by bounded-isolation safety and preserve transactional boundaries
- characterize hostile sink behavior across store- and data-layer call sites
- fail closed when new awaited audit writers lack an explicit classification

Files changed:
 AGENTS.md                                          |   1 +
 docs/run-audit.md                                  |   6 +
 .../core-run-audit-emitter-isolation.test.ts       |  71 ++++-
 .../excluded-awaited-run-audit-layer-sites.test.ts | 332 +++++++++++++++++++++
 .../excluded-awaited-run-audit-store-sites.test.ts | 236 +++++++++++++++
 5 files changed, 645 insertions(+), 1 deletion(-)

Fusion-Task-Id: FN-9178

Fusion-Task-Lineage: 25fed6a5-4f2f-4d4b-8724-838eff4323c8

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-20 00:28:59 -07:00
gsxdsm
f5192a5d15 FN-9177: route core run-audit emitters through bounded seam
Make best-effort core telemetry unable to block or alter lifecycle operations.

- Add a bounded core run-audit helper that absorbs missing, throwing, rejecting, hanging, and late-settling sinks.
- Route planner and task-store best-effort emitters through the helper while preserving transactional audit writes.
- Add sink-health, source-routing, and helper regressions plus operator-facing policy documentation and a release changeset.

Files changed:
 .changeset/fn-9177-core-run-audit.md               |   7 +
 AGENTS.md                                          |   5 +-
 docs/run-audit.md                                  |   6 +-
 .../core-run-audit-emitter-isolation.test.ts       |  21 ++
 .../__tests__/core-run-audit-sink-health.test.ts   | 317 +++++++++++++++++++++
 .../src/__tests__/emit-bounded-run-audit.test.ts   |  35 +++
 packages/core/src/planner/planner-intervention.ts  |   9 +-
 .../core/src/planner/planner-overseer-events.ts    |  15 +-
 .../core/src/run-audit/emit-bounded-run-audit.ts   |  51 ++++
 packages/core/src/task-store/audit-ops.ts          |   6 +-
 packages/core/src/task-store/branch-group-ops.ts   |   6 +-
 packages/core/src/task-store/lifecycle-ops.ts      |   4 +-
 packages/core/src/task-store/merge-queue-ops-2.ts  |   4 +-
 packages/core/src/task-store/task-artifacts-ops.ts |   4 +-
 packages/core/src/task-store/task-id-integrity.ts  |  52 ++--
 packages/core/src/task-store/task-mutation-ops.ts  |  13 +-
 packages/core/src/task-store/workflow-integrity.ts |   4 +-
 .../src/task-store/workflow-workitems-ops-2.ts     |   4 +-
 .../core/src/task-store/workflow-workitems-ops.ts  |   4 +-
 19 files changed, 512 insertions(+), 55 deletions(-)

Fusion-Task-Id: FN-9177

Fusion-Task-Lineage: 95082837-1670-4c25-9503-60ad983b9d68

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-19 23:29:37 -07:00
gsxdsm
6d51ae84c3 FN-9176: Route remaining run-audit emitters through bounded seam
Prevent audit sink failures and hangs from blocking engine lifecycle progress.

- Route hold release, goal diagnostics, overseer, mesh lease, credential rotation, and workflow boundary telemetry through emitBoundedRunAudit.
- Add hostile sink regression coverage and a source-level isolation ratchet for migrated emitters.
- Document the bounded audit contract, scoped exclusions, and release impact.

Files changed:
 ...n-9176-remaining-run-audit-emitter-isolation.md |   7 ++
 AGENTS.md                                          |   5 +
 docs/run-audit.md                                  |   2 +-
 ...on-executor-run-audit-emitter-isolation.test.ts |   8 ++
 ...un-audit-sink-health-boundary-heartbeat.test.ts | 116 +++++++++++++++++++++
 .../__tests__/run-audit-sink-health-goals.test.ts  |  71 +++++++++++++
 .../run-audit-sink-health-hold-release.test.ts     | 102 ++++++++++++++++++
 .../run-audit-sink-health-overseer.test.ts         |  71 +++++++++++++
 .../run-audit-sink-health-runtime-leases.test.ts   |  82 +++++++++++++++
 .../engine/src/credential-instance-rotation.ts     |   6 +-
 packages/engine/src/execution/hold-release.ts      |  32 +++---
 packages/engine/src/goals/goal-anchoring-audit.ts  |   9 +-
 .../engine/src/goals/goal-injection-diagnostics.ts |   5 +-
 .../src/overseer/overseer-advisor-service.ts       |  11 +-
 packages/engine/src/project-engine.ts              |  10 +-
 packages/engine/src/project/mesh-lease-manager.ts  |  17 +--
 packages/engine/src/runtimes/in-process-runtime.ts |  32 ++++--
 .../engine/src/workflow-column-boundary-hooks.ts   |   3 +-
 18 files changed, 524 insertions(+), 65 deletions(-)

Fusion-Task-Id: FN-9176

Fusion-Task-Lineage: 5205deeb-57e8-424e-aba4-3aed6a66f85c

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-19 23:20:27 -07:00
gsxdsm
a426e28781 FN-9165: Add optional JIRA workspace branch derivation
Add opt-in JIRA-backed workspace branch naming while preserving editable manual branch workflows.

- add scoped JIRA configuration, secret resolution, and documented inheritance
- expose a bounded JIRA issue client and branch-derivation API route
- add settings and task-form controls with recoverable errors and coverage
- derive sanitized branch names from configurable issue-key and summary templates

Files changed:
 .changeset/fn-9165-jira-branch-name.md             |   7 ++
 docs/secrets.md                                    |   4 +
 docs/settings-reference.md                         |  18 ++++
 docs/workspaces.md                                 |   4 +
 packages/core/src/__tests__/jira-config.test.ts    |   6 ++
 .../core/src/__tests__/settings-parity.test.ts     |  12 +++
 packages/core/src/config/settings-schema.ts        |  14 +++
 packages/core/src/index.ts                         |   2 +
 packages/core/src/jira/index.ts                    |   1 +
 packages/core/src/jira/jira-config.ts              |  34 +++++++
 packages/core/src/types/settings/settings-scope.ts |  16 ++++
 .../app/__tests__/settings-save-split.test.ts      |  43 +++++++++
 .../dashboard/app/components/SettingsModal.tsx     |  29 +++++-
 packages/dashboard/app/components/TaskForm.tsx     |  23 ++++-
 .../app/components/__tests__/TaskForm.test.tsx     |  31 +++++++
 .../settings/__tests__/section-keys.test.ts        |   2 +
 .../app/components/settings/save-split.ts          |  64 ++++++++++++-
 .../app/components/settings/section-keys.ts        |   1 +
 .../sections/SourceControlGlobalSection.search.ts  |   9 ++
 .../sections/SourceControlGlobalSection.tsx        |  20 ++++-
 .../sections/SourceControlSection.search.ts        |   9 ++
 .../settings/sections/SourceControlSection.tsx     |  12 +++
 .../settings-default-descriptions.test.tsx         |   7 ++
 .../dashboard/src/__tests__/jira-client.test.ts    |  58 ++++++++++++
 .../src/__tests__/register-jira-routes.test.ts     |  70 +++++++++++++++
 packages/dashboard/src/jira-auth.ts                |  18 ++++
 packages/dashboard/src/jira.ts                     |  75 ++++++++++++++++
 packages/dashboard/src/routes.ts                   |   2 +
 packages/dashboard/src/routes/README.md            | 100 +++++++++++----------
 .../src/routes/create-api-routes-mount-sequence.ts |   2 +-
 packages/dashboard/src/routes/register-jira.ts     |  66 ++++++++++++++
 packages/engine/src/index.ts                       |   2 +
 .../worktree/__tests__/jira-branch-name.test.ts    |   7 ++
 packages/engine/src/worktree/jira-branch-name.ts   |   6 ++
 packages/i18n/locales/en/app.json                  |  23 +++++
 35 files changed, 739 insertions(+), 58 deletions(-)

Fusion-Task-Id: FN-9165

Fusion-Task-Lineage: 88ab5fa3-f66e-421d-8139-5c3e8917348d

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-19 22:44:46 -07:00
gsxdsm
07be287e32 FN-9175: isolate engine run-audit emitters
Make run-audit telemetry best-effort across engine lifecycle paths.

- centralize bounded sink handling for absent, throwing, rejecting, hanging, and late-settling audit writers
- route merger, recovery, scheduler, plugin, mission, project, and run-auditor emissions through the shared seam
- add hostile-sink regression coverage, emitter routing checks, documentation, and a patch changeset

Files changed:
 .../fn-9175-non-executor-run-audit-isolation.md    |   7 +
 AGENTS.md                                          |   7 +-
 docs/run-audit.md                                  |   4 +-
 .../src/__tests__/emit-bounded-run-audit.test.ts   |  31 ++-
 ...on-executor-run-audit-emitter-isolation.test.ts |  29 +++
 .../non-executor-run-audit-sink-health.test.ts     | 280 +++++++++++++++++++++
 packages/engine/src/__tests__/self-healing.test.ts |   7 +-
 .../engine/src/executor/emit-bounded-run-audit.ts  |  52 +---
 packages/engine/src/logger.ts                      |   3 +
 packages/engine/src/merge/merger-ai.ts             |  47 ++--
 packages/engine/src/merge/pr-reconcile.ts          |   5 +-
 packages/engine/src/merger.ts                      |  41 +--
 .../engine/src/missions/mission-execution-loop.ts  |   5 +-
 packages/engine/src/plugins/plugin-runner.ts       |   9 +-
 packages/engine/src/project-engine.ts              |  55 ++--
 packages/engine/src/scheduler.ts                   |  17 +-
 packages/engine/src/self-healing.ts                |  39 +--
 packages/engine/src/util/emit-bounded-run-audit.ts |  69 +++++
 packages/engine/src/util/run-audit.ts              |   9 +-
 19 files changed, 564 insertions(+), 152 deletions(-)

Fusion-Task-Id: FN-9175
Fusion-Task-Lineage: bf74cd37-19bd-4d99-a5d6-b05a4bb43576
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-19 22:37:12 -07:00
gsxdsm
e40bcebc27 FN-9161: support operator workspace branches
Allow workspace tasks to use one operator-selected branch consistently across every sub-repository while preserving ownership during recovery.

- validate and persist operator branch provenance at task creation and update boundaries
- reuse custom branches across workspace worktrees, PR flows, cleanup, and self-healing without deleting operator-owned refs
- expose branch validation in task forms and document the workspace behavior
- add coverage and a release changeset for shared custom branch handling

Files changed:
 .changeset/fn-9161-workspace-custom-branch.md      |  7 ++
 docs/workspaces.md                                 |  6 ++
 packages/cli/src/commands/pr.ts                    | 10 ++-
 packages/cli/src/commands/task-lifecycle.ts        | 10 +--
 packages/cli/src/commands/task.ts                  |  4 +-
 packages/cli/src/extension.ts                      |  2 +-
 .../core/src/__tests__/branch-assignment.test.ts   | 37 ++++++++++
 .../task-update-awaiting-approval-reason.test.ts   |  8 +++
 .../core/src/async-stores/async-mission-store.ts   |  1 +
 packages/core/src/branch/branch-assignment.ts      | 64 +++++++++++++++++
 packages/core/src/index.gate.ts                    |  7 ++
 packages/core/src/index.ts                         |  7 ++
 packages/core/src/missions/mission-store.ts        |  1 +
 packages/core/src/store.ts                         |  2 +-
 packages/core/src/task-store/branch-context.ts     | 35 +++++++--
 packages/core/src/task-store/merge-queue-ops.ts    | 31 ++++----
 packages/core/src/task-store/task-creation.ts      | 30 ++++++++
 packages/core/src/task-store/task-mutation-ops.ts  | 18 ++++-
 packages/core/src/task-store/task-update.ts        | 60 ++++++++++++++--
 packages/core/src/types.ts                         |  5 ++
 packages/core/src/types/task/task-core.ts          | 20 +++++-
 packages/dashboard/app/components/NewTaskModal.tsx | 25 +++++--
 packages/dashboard/app/components/TaskForm.tsx     | 18 ++++-
 .../app/components/__tests__/NewTaskModal.test.tsx | 12 ++++
 packages/dashboard/src/pr-conflict-resolver.ts     | 14 ++--
 packages/dashboard/src/routes/branch-selection.ts  |  7 ++
 .../dashboard/src/routes/register-git-github.ts    | 18 +++--
 .../src/routes/register-task-workflow-routes.ts    | 17 ++++-
 .../engine/src/__tests__/worktree-hooks.test.ts    |  6 ++
 .../engine/src/__tests__/worktree-pool.test.ts     |  8 +++
 .../src/auto-recovery-handlers/branch-worktree.ts  | 20 +++---
 .../engine/src/execution/step-session-executor.ts  |  6 +-
 .../src/executor/build-foreach-worktree-deps.ts    |  5 +-
 .../engine/src/executor/create-task-done-tool.ts   |  8 +--
 packages/engine/src/executor/dep-abort-cleanup.ts  |  4 +-
 packages/engine/src/executor/mark-stuck-aborted.ts |  2 +-
 .../src/executor/release-pre-execution-worktree.ts |  2 +-
 packages/engine/src/executor/run-implementation.ts | 14 ++--
 .../src/executor/task-done-refusal-handler.ts      |  4 +-
 .../executor/worktree-branch-conflict-handle.ts    | 10 +--
 .../src/executor/worktree-cleanup-conflicting.ts   | 39 +++++-----
 .../src/executor/worktree-create-conflict.ts       |  1 +
 .../engine/src/executor/worktree-stale-branch.ts   |  9 +++
 .../src/healing/restart-recovery-coordinator.ts    |  2 +-
 packages/engine/src/merger.ts                      | 33 +++++----
 .../src/recovery/foreign-only-contamination.ts     |  8 ++-
 packages/engine/src/self-healing.ts                | 82 +++++++++++++++-------
 .../engine/src/worktree/worktree-acquisition.ts    | 52 ++++++++++----
 packages/engine/src/worktree/worktree-backend.ts   | 42 ++++++++---
 packages/engine/src/worktree/worktree-hooks.ts     | 24 +++++--
 packages/engine/src/worktree/worktree-names.ts     | 13 ++++
 packages/engine/src/worktree/worktree-pool.ts      | 17 ++++-
 52 files changed, 708 insertions(+), 179 deletions(-)

Fusion-Task-Id: FN-9161

Fusion-Task-Lineage: 5b0b9ecc-bead-471f-96f7-bec6698b69fc

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-19 21:42:29 -07:00
gsxdsm
53b57735f5 chore(release): v0.77.0-beta.4
Version bump via changesets.
2026-08-19 21:19:08 -07:00
gsxdsm
338dc173ff feat: pnpm dev --isolated runs against its own database and project
Working on Fusion from inside a machine that already runs one, a plain
`pnpm dev` shares that instance's LIVE database. Everything durable hangs off
$HOME/.fusion — settings, credentials, central DB, the embedded Postgres data
dir — and a process pointed at a data dir whose postmaster is already running
attaches to it instead of starting its own.

--isolated spawns the dev child with HOME pointed at a sandbox, so it gets its
own settings, credentials and Postgres cluster on its own port. It also moves
the child's cwd, which is the half that is easy to miss: `fn dashboard`
derives its project from the working directory and has no project flag, so
isolating HOME alone leaves both instances on `<repo>/.fusion` — including
`.fusion/tasks/<id>/`, which the orphaned-task-dir sweep re-imports, so a
fresh dev database would adopt the real instance's tasks.

The sandbox defaults to ~/.fusion-dev/<checkout-name>/{home,project}: outside
the work tree so it neither shows up in git status nor dies on a clean
checkout, and keyed by checkout so two clones cannot collide. The project dir
is git init-ed on first use because Fusion projects are git work trees.
Changing cwd is safe because PRELOAD/LOADER/ENTRY are already absolute.

Verified in a container beside a running Fusion: the isolated instance
reported zero projects while the real one reported two, on separate Postgres
clusters (ports 42617 and 38311).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-19 21:14:31 -07:00
gsxdsm
7ae238cc67 fix(FN-061): store medieval theme screenshots as Git LFS pointers
These four screenshots/*.png were committed as raw blobs despite the
screenshots/**/*.png LFS rule, so git reported them as files that should
have been pointers. Re-add them through the LFS clean filter.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-19 21:04:55 -07:00
ischindl
3d355465c7 feat(missions): done-credit via reverse lineage, feature re-point/unlink tools, and live unlink SSE (#3491)
## What this PR does

Closes three lifecycle gaps in the Mission → Milestone → Slice →
**Feature** model, where a feature links to exactly one delivery task
(single-valued `feature.taskId`, one-feature-one-task):

1. **Reverse-lineage done-credit** — a terminal, non-failed task
carrying a feature's reverse `missionLineage`
(featureId/sliceId/missionId) now credits the feature as satisfying its
acceptance criteria, independent of where the forward `feature.taskId`
points (e.g. a newer follow-up task). Credit is only applied when
**none** of the feature's lineage candidates is live, so a live
follow-up keeps the feature active. Fixes features that otherwise sit
"in-progress" forever after their delivering task completes.
2. **Re-point / unlink surface** — new `fn_feature_repoint_task` /
`fn_feature_unlink_task` agent tools (engine + CLI) backed by an atomic
`repointFeatureToTask` store primitive, so a mis-linked feature can be
re-attached to the correct delivery task or unlinked — without a manual
DB edit. Single-valued `feature.taskId` and one-feature-one-task
invariants are preserved; unlinking an already-unlinked feature errors
clearly. Classified as mutation tools, same class as the existing
`fn_feature_link_task`.
3. **Live SSE update** — the `feature:unlinked` store event is now
emitted over SSE (`event: feature:unlinked`) so the dashboard refreshes
immediately after a re-point/unlink instead of waiting for the next
poll.

## Why

The forward-only `feature.taskId` link made three real failure modes
unrecoverable from the product surface: stale done-features after task
replacement, permanently mis-linked features, and a stale dashboard
after a repair. This closes the feature lifecycle end-to-end.

## Invariants

- `feature.taskId` stays single-valued; one feature is linked to at most
one task at any time (atomic store primitive).
- Done-credit requires: terminal column, non-failed, and no live lineage
candidate.
- No new run-audit prose; store events carry ids/counts/outcomes only.

## Tests

- `mission-state-reconcile.test.ts` — reverse-lineage credit matrix
(live vs. terminal vs. failed candidates)
- `mission-store.pg.test.ts` — `repointFeatureToTask` atomicity +
invariants (PG; gate-safe auto-skip without Postgres)
- `agent-mission-tools.test.ts` — tool delegation (unlink / re-point
exactly once)
- `heartbeat-executor.test.ts`, `extension.test.ts` — tool exposure and
heartbeat interaction
- Changeset: `@runfusion/fusion: minor`

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

- **New Features**
- Added tools to reassign a feature to another live task or remove its
task link.
- Unlinking resets the feature to a defined state and provides clear
errors when applicable.
  - Added live updates for feature unlink events.
- Improved reconciliation to recognize completed reverse-lineage work
while respecting active follow-up tasks and failures.
- Improved relationship consistency when concurrent task-link operations
occur.

- **Documentation**
- Documented feature linking, unlinking, reassignment, lifecycle events,
and reconciliation behavior.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-19 21:01:56 -07:00
Fusion Agent
e099511b10 docs(FN-062): retain merge review architecture guidance 2026-08-20 03:57:56 +00:00
Fusion Agent
29010e0b0a FN-064: preserve bounded Board mouse panning
Keep Board dragging within safe viewport bounds while preserving usable mobile interactions.

- Add a reusable bounded mouse-pan hook and wire it into the Board.
- Preserve Board transforms and cursor behavior through responsive CSS updates.
- Expand desktop and mobile regression coverage and document the interaction.
- Add the published-package changeset for the Board fix.

Files changed:
 .changeset/fn-064-board-safe-mouse-pan.md          |   7 +
 docs/dashboard-guide.md                            |   4 +-
 packages/dashboard/app/components/Board.css        |  10 ++
 packages/dashboard/app/components/Board.tsx        |  17 ++-
 .../app/components/__tests__/Board.test.tsx        |  40 ++++-
 .../app/components/__tests__/board-mobile.test.tsx |  13 +-
 .../app/hooks/__tests__/useBoardMousePan.test.tsx   | 163 +++++++++++++++++++++
 packages/dashboard/app/hooks/useBoardMousePan.ts   | 141 ++++++++++++++++++
 8 files changed, 374 insertions(+), 21 deletions(-)

Fusion-Task-Id: FN-064

Fusion-Task-Lineage: 22e9dfeb-b565-414b-89cf-eb10725490a8

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-20 03:57:39 +00:00
Fusion Agent
14befb76bc FN-062: enforce AI merge review finding reconciliation
Make AI merge reviews preserve actionable reasons and require explicit resolution of prior blockers before landing.

- Recover reviewer rejection reasons and preserve bounded squash-fidelity findings across corrective passes.
- Require explicit prior-finding acknowledgement, reject unknown acknowledgements as new blockers, and keep advisory concerns landable.
- Park typed AI review blocks without git-conflict retries and cover the reconciliation contract with regression tests and release notes.

Files changed:
 .changeset/fn-062-ai-merge-review-livelock.md      |   7 ++
 docs/architecture.md                               |   1 +
 .../src/__tests__/merge-error-recovery.test.ts     |  29 ++++-
 .../engine/src/__tests__/merger-ai-prompts.test.ts |  25 +++-
 packages/engine/src/__tests__/merger-ai.test.ts    |  80 ++++++++++---
 packages/engine/src/__tests__/workspace-merger.test.ts  |  27 +++-
 packages/engine/src/merge/merger-ai-prompts.ts     |  74 +++++++++---
 packages/engine/src/merge/merger-ai.ts             | 127 ++++++++++++++-------
 packages/engine/src/project-engine.ts              |  27 +++++
 9 files changed, 325 insertions(+), 72 deletions(-)

Fusion-Task-Id: FN-062

Fusion-Task-Lineage: 59d6d94d-a9e3-4f6a-9d16-d434a335e6a3

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-20 03:57:39 +00:00
Fusion Agent
07125886b7 FN-061: refine medieval theme typography
Refine the medieval dashboard theme so its typography and responsive presentation are more balanced.

- Reduce oversized theme typography and tune responsive layout styling.
- Load Pixelify Sans and update theme tokens, documentation, and changesets.
- Expand theme and hook coverage with desktop and mobile visual references.

Files changed:
 .changeset/fn-058-medieval-theme.md                |   2 +-
 .changeset/fn-061-medieval-theme-refinement.md     |   7 +
 docs/dashboard-guide.md                            |   4 +-
 docs/settings-reference.md                         |   2 +-
 .../dashboard/app/__tests__/medieval-theme.test.ts | 172 +++++++++++++++++++--
 .../dashboard/app/hooks/__tests__/useTheme.test.ts |  14 ++
 packages/dashboard/app/main.tsx                    |   2 +-
 packages/dashboard/app/public/theme-data.css       |  22 ++-
 packages/dashboard/app/styles.css                  |  46 +++++-
 packages/dashboard/package.json                    |   2 +-
 pnpm-lock.yaml                                     |   8 +-
 screenshots/fn-061-medieval-desktop.png            | Bin 0 -> 753177 bytes
 screenshots/fn-061-medieval-mobile.png             | Bin 0 -> 208805 bytes
 13 files changed, 244 insertions(+), 37 deletions(-)

Fusion-Task-Id: FN-061

Fusion-Task-Lineage: fe95f1d1-7db4-4098-965f-f4c0aa8860e0

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-20 03:57:23 +00:00
Fusion Agent
967ea6ee91 revert(FN-054): FN-054: preserve list-first chat navigation contracts
Fusion-Task-Id: FN-054

Reverts work landed by task FN-054 (FN-054: preserve list-first chat navigation contracts @ bdb7fcf9).
2026-08-20 03:57:23 +00:00
Fusion Agent
66ebbb1aa4 FN-054: preserve list-first chat navigation contracts
Migrate Chat detail mounting and room coverage to preserve accessible list-to-detail navigation contracts.

- Gate thread anchoring and live-tail updates on detail mode.
- Replace stale room-switcher tests with list selection and explicit detail entry.
- Retain composer, keyboard overlap, gesture, and scroll assertions across room and direct modes.

Files changed:
 packages/dashboard/app/components/ChatView.tsx     |  13 +-
 .../components/__tests__/ChatView.rooms.test.tsx   | 334 ++++++++++++++-------
 2 files changed, 239 insertions(+), 108 deletions(-)

Fusion-Task-Id: FN-054

Fusion-Task-Lineage: 6b139504-ecf3-4b29-ab72-34a4d593676c

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-20 03:57:23 +00:00
Fusion Agent
4d74560ae0 FN-054: add list-first chat conversation navigation
Move chat conversations to list-first navigation with explicit detail entry and back navigation.

- Replace room-switcher dropdown contracts with list-to-detail coverage.
- Update room composer, thread, gesture, and scroll tests for explicit detail selection.
- Remove obsolete room-switcher UI and refresh dashboard documentation and release metadata.

Files changed:
 .changeset/fn-054-removal.md                       |    7 +
 docs/dashboard-guide.md                            |   22 +-
 packages/dashboard/app/App.tsx                     |    2 +-
 packages/dashboard/app/components/ChatView.css     |  365 +--
 packages/dashboard/app/components/ChatView.tsx     |  446 +---
 .../__tests__/ChatView.context-window.test.tsx     |   19 +-
 .../__tests__/ChatView.core-contracts.test.tsx     |  158 +-
 .../__tests__/ChatView.mobile-render.test.tsx      |  251 +-
 .../components/__tests__/ChatView.mobile.test.tsx  | 2567 +-------------------
 .../__tests__/ChatView.new-chat-default.test.tsx   |   20 +-
 .../components/__tests__/ChatView.rooms.test.tsx   |  346 +--
 .../__tests__/ChatView.sessions-rooms.test.tsx     |  163 +-
 .../__tests__/ChatView.swipe-back.test.tsx         |   27 +-
 .../components/__tests__/ChatView.test-harness.tsx |    5 +-
 .../app/components/overflowViewRegistry.tsx        |    2 +-
 packages/dashboard/vitest.config.ts                |   12 +-
 16 files changed, 419 insertions(+), 3993 deletions(-)

Fusion-Task-Id: FN-054

Fusion-Task-Lineage: 6b139504-ecf3-4b29-ab72-34a4d593676c

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-20 03:57:23 +00:00
Fusion Agent
2c16a7e9ba FN-058: add Medieval appearance theme
Add a bundled pixel-font Medieval theme with parchment and wood visual styling across dashboard and desktop surfaces.

- Add Medieval theme tokens, swatches, first-paint persistence, and selector integration.\n- Bundle Press Start 2P typography with responsive modal styling and documentation.\n- Add theme behavior tests, screenshots, and a published-package changeset.\n\nFiles changed:\n .changeset/fn-058-medieval-theme.md                |   7 ++\n docs/dashboard-guide.md                            |   5 +-\n docs/settings-reference.md                         |   2 +-\n packages/core/src/types/ui/execution-and-ui.ts     |   5 ++\n .../dashboard/app/__tests__/medieval-theme.test.ts |  71 +++++++++++++++++\n .../dashboard/app/components/ThemeSelector.css     |  15 +++\n .../components/__tests__/ThemeDropdown.test.tsx    |   2 +-\n .../components/__tests__/ThemeSelector.test.tsx    |  14 ++--\n .../__tests__/CommandCenterControls.test.tsx       |  10 ++-\n packages/dashboard/app/components/themeOptions.ts  |   1 +\n .../dashboard/app/hooks/__tests__/useTheme.test.ts |  28 +++++++\n packages/dashboard/app/index.html                  |   4 +-\n packages/dashboard/app/main.tsx                    |   1 +\n packages/dashboard/app/public/theme-data.css       |  86 +++++++++++++++++++++\n packages/dashboard/app/styles.css                  |  24 ++++++\n packages/dashboard/package.json                    |   1 +\n packages/desktop/src/renderer/index.html           |   3 +-\n pnpm-lock.yaml                                     |   8 ++\n screenshots/fn-058-medieval-theme-desktop.png      | Bin 0 -> 19898 bytes\n screenshots/fn-058-medieval-theme-mobile.png       | Bin 0 -> 14996 bytes\n 20 files changed, 269 insertions(+), 18 deletions(-)

Fusion-Task-Id: FN-058

Fusion-Task-Lineage: b7ce1b83-59ba-4516-8073-c1e8c46bb181

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-20 03:57:23 +00:00
Fusion Agent
47a8b53ad2 FN-059: deduplicate failure activity logging
Record task failure activity only when a task enters the failed state, while preserving lifecycle metadata compatibility.

- Emit failure-transition metadata only for non-failed to failed updates.
- Preserve warm-cache lane decoration and cold-cache absent metadata.
- Add PostgreSQL parity coverage and a published-package changeset.

Files changed:
 .changeset/fn-059-activity-log-failure-dedup.md    |  7 +++
 .../postgres/activity-log-parity.pg.test.ts        | 50 ++++++++++++++++++++++
 packages/core/src/store.ts                         | 13 ++++--
 packages/core/src/task-store/lifecycle-ops.ts      | 11 +++--
 packages/core/src/task-store/task-update.ts        |  6 ++-

 5 files changed, 80 insertions(+), 7 deletions(-)

Fusion-Task-Id: FN-059

Fusion-Task-Lineage: 28c28c0d-d325-4fa6-844d-33a05a18e5ed

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-20 03:57:23 +00:00
Fusion Agent
b533220716 FN-052: remove Board mouse-drag panning
Remove scripted desktop Board panning while retaining native scrolling and mobile snapping.

- Remove the Board mouse-pan hook and its cursor styling.
- Update Board interaction tests and mobile coverage for browser-owned scrolling.
- Document the revised navigation behavior and publish a patch changeset.

Files changed:
 .changeset/fn-052-remove-board-mouse-pan.md        |   7 +
 docs/dashboard-guide.md                            |   4 +-
 packages/dashboard/app/components/Board.css        |  11 --
 packages/dashboard/app/components/Board.tsx        |  17 +--
 .../app/components/__tests__/Board.test.tsx        |  47 +++---
 .../app/components/__tests__/board-mobile.test.tsx |   8 +-
 .../app/hooks/__tests__/useBoardMousePan.test.tsx  | 164 ---------------------
 packages/dashboard/app/hooks/useBoardMousePan.ts   | 151 -------------------
 8 files changed, 39 insertions(+), 370 deletions(-)

Fusion-Task-Id: FN-052

Fusion-Task-Lineage: 7cd4c22f-09cf-4e09-8e24-729b5dd8d3fb

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-20 03:57:23 +00:00
Fusion Agent
3fd4bdbc69 FN-051: disable native task dragging
Remove native task drag-and-drop while preserving board panning and task actions.

- Remove draggable task movement and drop handling from board, columns, lanes, lists, and cards.
- Add task context-menu movement actions and update related documentation and release metadata.
- Update component tests to cover non-draggable cards and board-pan exclusions.

Files changed:
 .changeset/fn-051-task-card-moves.md               |   7 +
 docs/dashboard-guide.md                            |   5 +-
 docs/task-management.md                            |   6 +
 packages/dashboard/app/components/Board.tsx        |  63 +-----
 packages/dashboard/app/components/Column.tsx       | 140 +-------------
 packages/dashboard/app/components/DockTaskList.tsx |   3 +-
 packages/dashboard/app/components/Lane.tsx         |   9 -
 packages/dashboard/app/components/ListView.css     |  12 +-
 packages/dashboard/app/components/ListView.tsx     | 132 ++-----------
 packages/dashboard/app/components/TaskCard.css     |   8 -
 packages/dashboard/app/components/TaskCard.tsx     |  58 ++----
 .../dashboard/app/components/TaskContextMenu.css   |  37 ++++
 .../dashboard/app/components/TaskContextMenu.tsx   | 145 ++++++++++++--
 .../__tests__/Board.canDropTask.test.tsx           | 212 ---------------------
 .../app/components/__tests__/Board.test.tsx        |   8 +-
 .../app/components/__tests__/Column.test.tsx       | 101 +---------
 .../app/components/__tests__/DockTaskList.test.tsx |   5 +-
 .../app/components/__tests__/Lane.test.tsx         |  26 ---
 .../app/components/__tests__/ListView.test.tsx     | 178 +----------------
 .../app/components/__tests__/TaskCard.test.tsx     |  60 ++----
 .../components/__tests__/TaskContextMenu.test.tsx  |  55 +++++-
 .../dashboard/app/components/boardCanDropTask.ts   |  56 -----
 .../app/components/dashboard/MainContent.tsx       |   1 -
 .../app/components/useRightDockController.tsx      |   1 -
 packages/dashboard/app/styles.css                  |  14 --
 25 files changed, 297 insertions(+), 1045 deletions(-)

Fusion-Task-Id: FN-051

Fusion-Task-Lineage: b5614cb1-75f3-4307-a595-123f903adc99

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-20 03:57:23 +00:00
Fusion Agent
a736843cd2 FN-017: add authenticated image artifact viewer
Protect dashboard image artifacts while providing a dedicated preview experience.

- Fetch image media with header authentication and render revocable blob URLs.
- Add desktop and mobile viewer behavior across gallery, documents, task, and mailbox surfaces.
- Cover viewer, blob-loading, and updated artifact-surface behavior with tests and documentation.

Files changed:
 docs/dashboard-guide.md                            |   1 +
 .../app/components/ArtifactImageViewer.css         |   9 ++
 .../app/components/ArtifactImageViewer.tsx         | 100 ++++++++++++++++++
 .../dashboard/app/components/ArtifactMedia.tsx     |   8 +-
 .../dashboard/app/components/ArtifactsGallery.tsx  |  10 +-
 .../dashboard/app/components/DocumentsView.tsx     |   4 +-
 .../app/components/MailboxArtifactAttachment.tsx   |  29 +++---
 .../dashboard/app/components/TaskDocumentsTab.tsx  | 114 ++-------------------
 .../__tests__/ArtifactImageViewer.test.tsx         |  48 +++++++++
 .../__tests__/ArtifactsGallery.swipe-back.test.tsx |   7 +-
 .../components/__tests__/DocumentsView.test.tsx    |   9 +-
 .../__tests__/MailboxArtifactAttachment.test.tsx   |  34 ++++--
 .../components/__tests__/TaskDocumentsTab.test.tsx |  22 ++--
 .../hooks/__tests__/useArtifactImageBlob.test.tsx  |  92 +++++++++++++++++
 .../dashboard/app/hooks/useArtifactImageBlob.ts    |  59 +++++++++++
 15 files changed, 387 insertions(+), 159 deletions(-)

Fusion-Task-Id: FN-017
Fusion-Task-Lineage: 893c5a50-536a-4f54-a9a4-cba33ea111b5
Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-20 03:57:23 +00:00
Fusion Agent
da3c280672 FN-049: apply Appearance settings immediately in embedded Settings
Mirror Appearance drafts into mounted dashboard surfaces immediately while keeping SettingsModal as the persistence owner.

- Add immediate setters for task routing, popup, cost badge, task-detail ordering, and chat layout settings.
- Wire embedded and overlay Settings controls through the App shell with regression coverage.
- Add the published-package fix changeset.

Files changed:
 .changeset/fn-049-live-dashboard-settings.md                  |  7 +++
 packages/dashboard/app/App.tsx                               | 17 +++++-
 packages/dashboard/app/components/AppModals.tsx              | 19 ++++++
 packages/dashboard/app/components/SettingsModal.tsx          | 31 ++++++++++
 packages/dashboard/app/components/__tests__/SettingsModal.general.test.tsx | 29 ++++++++++
 packages/dashboard/app/components/dashboard/MainContent.tsx   | 22 +++++++
 packages/dashboard/app/components/dashboard/__tests__/MainContent.graph-popout.test.tsx | 67 +++++++++++++++++++++
 packages/dashboard/app/components/dashboard/types.ts         | 10 +++
 packages/dashboard/app/components/settings/sections/AppearanceSection.tsx | 52 +++++++++++++----
 packages/dashboard/app/components/settings/sections/__tests__/AppearanceSection.test.tsx | 41 ++++++++++++-
 packages/dashboard/app/hooks/__tests__/useAppSettings.test.ts | 44 ++++++++++++++
 packages/dashboard/app/hooks/useAppSettings.ts                | 34 ++++++++++-
 packages/dashboard/app/task-modal-touch-resize-e2e-fixture.tsx |  2 +-
 13 files changed, 359 insertions(+), 16 deletions(-)

Fusion-Task-Id: FN-049

Fusion-Task-Lineage: 4140b47f-2f70-4c8b-ab47-2fc28672a2bb

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-20 03:57:23 +00:00
Fusion Agent
67becd9fc2 FN-050: preserve chat transcripts during revalidation
Keep populated chat transcripts and reader position stable while background requests refresh data.

- Retain in-memory session and room messages during same-context revalidation.
- Show loading placeholders only for cold or empty transcript loads.
- Add regression coverage for cache behavior and transcript rendering.
- Add the published-package changeset.

Files changed:
 .changeset/fn-050-chat-transcript-revalidation.md  |  7 ++++
 packages/dashboard/app/components/ChatView.tsx     |  4 +-
 .../__tests__/ChatView.sessions-rooms.test.tsx     | 44 ++++++++++++++++++++++
 .../app/hooks/__tests__/useChatRooms.cache.test.ts | 27 +++++++++++++
 packages/dashboard/app/hooks/useChat.ts            | 16 ++++++--
 packages/dashboard/app/hooks/useChatRooms.ts       | 26 +++++++++----
 6 files changed, 111 insertions(+), 13 deletions(-)

Fusion-Task-Id: FN-050

Fusion-Task-Lineage: 688cf159-3ebd-4c40-b56f-21319863de23

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-20 03:57:23 +00:00
Fusion Agent
c3aeff5ff1 FN-048: resize chat composers from the top edge and collapse stale heights
Resize shared chat composers around a top-edge drag model and clear manual heights when drafts shrink.

- Replace native textarea resizing with desktop/tablet top-edge pointer resizing.
- Collapse stale manual heights back to automatic sizing for shorter drafts.
- Update composer styles, regression coverage, and the published patch changeset.

Files changed:
 .changeset/fn-048-chat-composer-resize.md          |  7 ++
 packages/dashboard/app/components/ChatView.css     |  6 +-
 packages/dashboard/app/components/TaskChatTab.css  |  6 +-
 .../app/components/TaskPlannerChatTab.css          |  6 +-
 .../__tests__/ChatView.autosize.test.tsx           | 54 ++++++++++--
 .../ChatView.chat-input-autosize.test.tsx          | 80 +++++++++++++-----
 .../app/components/__tests__/TaskChatTab.test.tsx  | 24 ++++--
 .../__tests__/TaskPlannerChatTab.test.tsx          | 24 ++++--
 packages/dashboard/app/utils/chatInputAutosize.ts  | 96 ++++++++++++++++------
 9 files changed, 223 insertions(+), 80 deletions(-)

Fusion-Task-Id: FN-048

Fusion-Task-Lineage: 83d573b2-fdaa-48bb-906a-c1e0b074539f

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-20 03:57:23 +00:00
Fusion Agent
ef22fa478a FN-047: preserve project-scoped Chat context
Keep task Chat bound to the selected project even when its engine is unavailable.

- Resolve request-scoped TaskStore and ChatStore pairs without falling back to the default project.
- Apply the project-safe resolution to task planner and room chat routes.
- Add regression coverage and document the selected-project context guarantee.

Files changed:
 .../fn-047-task-chat-context-project-scope.md      |  7 ++
 docs/dashboard-guide.md                            |  2 +-
 .../dashboard/src/__tests__/chat-manager.test.ts   | 49 +++++++-----
 .../src/__tests__/chat-project-services.test.ts    | 18 +++++
 .../src/__tests__/routes-chat-cancellation.test.ts |  2 +-
 packages/dashboard/src/chat-project-services.ts    | 20 ++++-
 .../src/routes/register-chat-room-routes.ts        |  7 ++
 .../dashboard/src/routes/register-chat-routes.ts   | 86 +++++++++++++---------
 8 files changed, 135 insertions(+), 56 deletions(-)

Fusion-Task-Id: FN-047

Fusion-Task-Lineage: 008eefad-e495-40ba-9243-d46ec913c9db

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-20 03:57:23 +00:00
Fusion Agent
7563fcfe1b FN-037: configure AI-authored task output language
Configure a persisted output-language setting and apply it across AI-authored task text and workflow summaries.

- Add project/global output-language settings with defaults, validation, UI controls, translations, and documentation.
- Propagate the selected language through planning, execution, review, summaries, and task creation.
- Add focused coverage for language resolution and update affected dashboard, engine, and localization tests.

Files changed:
 .changeset/fn-037-task-output-language.md          |   7 ++
 docs/settings-reference.md                         |   4 +
 docs/task-management.md                            |   4 +
 .../core/src/__tests__/ai-output-language.test.ts  |  21 +++++
 packages/core/src/ai/ai-output-language.ts         |  42 +++++++++
 packages/core/src/ai/ai-summarize.ts               |  16 +++-
 packages/core/src/config/settings-schema.ts        |   2 +
 packages/core/src/index.gate.ts                    |   2 +
 packages/core/src/index.ts                         |   2 +
 packages/core/src/task-store/settings-ops.ts       |   7 ++
 packages/core/src/task-store/task-creation.ts      |   4 +
 packages/core/src/types/settings/settings-scope.ts |   2 +
 .../app/__tests__/settings-sections.test.tsx       |  21 +++--
 .../__tests__/SettingsModal.models-auth.test.tsx   |  10 +-
 .../app/components/settings/section-keys.ts        |   2 +-
 .../sections/ProjectModelsSection.search.ts        |  13 ++-
 .../settings/sections/ProjectModelsSection.tsx     |  28 ++++--
 .../settings-default-descriptions.test.tsx         |   4 +-
 .../src/__tests__/github-tracking.test.ts          |   4 +-
 .../__tests__/planning-prompt-resolution.test.ts   |  29 ++++--
 .../src/__tests__/routes-planning.test.ts          |  32 ++++++-
 packages/dashboard/src/ai-session-store.ts         |  15 ++-
 packages/dashboard/src/github-tracking.ts          |   3 +
 packages/dashboard/src/planning.ts                 |  75 +++++++++++++--
 .../routes/register-ai-text-assistant-routes.ts    |  11 ++-
 .../src/routes/register-planning-subtask-routes.ts |   6 +-
 .../src/routes/register-task-workflow-routes.ts    |   9 +-
 packages/dashboard/src/shared/settings-sections.ts |   2 +-
 .../__tests__/ce-workflow-step-executor.test.ts    |  45 ++++++++-
 .../__tests__/executor-review-artifacts.test.ts    |  65 +++++++++++++
 packages/engine/src/__tests__/triage.test.ts       |   7 +-
 .../src/__tests__/workflow-task-runtime.test.ts    |  23 +++++
 .../create-authoritative-workflow-primitives.ts    |  14 ++-
 .../create-authoritative-workflow-seams.ts         |  17 +++-
 .../engine/src/executor/execute-workflow-graph.ts  |  19 +++-
 .../engine/src/executor/execute-workflow-step.ts   |  13 ++-
 packages/engine/src/executor/execution-prompt.ts   |  10 +-
 .../engine/src/executor/handoff-task-to-review.ts  |  10 +-
 .../engine/src/executor/run-graph-custom-node.ts   |   6 +-
 .../src/executor/task-executor-graph-facades.ts    |   8 +-
 packages/engine/src/triage.ts                      |  35 ++-----
 .../src/workflows/workflow-completion-summary.ts   | 101 ++++++++++++++++++---
 .../engine/src/workflows/workflow-task-runtime.ts  |  12 +++
 packages/i18n/locales/en/app.json                  |   7 +-
 packages/i18n/locales/es/app.json                  |   7 +-
 packages/i18n/locales/fr/app.json                  |   7 +-
 packages/i18n/locales/ko/app.json                  |   7 +-
 packages/i18n/locales/pt-BR/app.json               |  14 ++-
 packages/i18n/locales/zh-CN/app.json               |   7 +-
 packages/i18n/locales/zh-TW/app.json               |   7 +-
 packages/i18n/src/resources.d.ts                   |  13 ++-
 51 files changed, 680 insertions(+), 151 deletions(-)

Fusion-Task-Id: FN-037

Fusion-Task-Lineage: 968a707e-7ffe-43ba-b983-d679b031f7a5

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-20 03:57:23 +00:00
Fusion Agent
ef5ebd21e5 FN-044: show bounded description fallbacks for titleless tasks
Display titleless tasks consistently across cards and list views without persisting generated fallback titles.

- Centralize title, description, and ID display fallback selection.
- Bound long description fallbacks to 200 characters with literal dots and preserve full tooltips.
- Cover desktop, mobile, whitespace, length-boundary, and explicit-title behavior.

Files changed:
 packages/dashboard/app/components/ListView.tsx     |  5 +-
 packages/dashboard/app/components/TaskCard.css     | 12 +++
 packages/dashboard/app/components/TaskCard.tsx     | 18 +++++-
 .../app/components/__tests__/ListView.test.tsx     | 64 ++++++++++++++++++++++
 .../app/components/__tests__/TaskCard.test.tsx     | 43 +++++++++++++++
 packages/dashboard/app/utils/taskTitleDisplay.ts   | 51 +++++++++++++++++
 6 files changed, 188 insertions(+), 5 deletions(-)

Fusion-Task-Id: FN-044

Fusion-Task-Lineage: 822f17f3-4839-4f9e-9aa7-cd90037b67de

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-20 03:57:23 +00:00
Fusion Agent
b1893a63af FN-043: add canonical thinking levels for custom providers
Custom-provider models now expose the full thinking-level selector and faithfully transmit the selected effort.

- Register all canonical thinking levels and preserve provider-specific API dialects.
- Remove the redundant reasoning toggle and update provider status and settings documentation.
- Add dashboard, engine, and provider registration coverage for thinking-level behavior.
- Add a minor changeset for the published CLI package.

Files changed:
 .../fn-043-custom-provider-thinking-levels.md      |  7 ++
 docs/settings-reference.md                         |  2 +
 .../dashboard/app/api/settings/provider-status.ts  |  1 -
 .../app/components/CustomProviderForm.css          |  5 +-
 .../app/components/CustomProviderForm.tsx          | 18 ++---
 .../__tests__/CustomProviderForm.test.tsx          | 35 ++++++---
 ...r-model-routes-custom-provider-thinking.test.ts | 91 ++++++++++++++++++++++
 .../custom-provider-thinking-levels.test.ts        | 49 ++++++++++++
 .../custom-providers-openai-completions.test.ts    |  2 +-
 .../custom-providers-openai-responses.test.ts      |  3 +-
 .../src/__tests__/pi-create-fn-agent.test.ts       | 31 +++++++-
 .../src/__tests__/provider-registration.test.ts    | 20 ++++-
 .../engine/src/auth/custom-provider-registry.ts    | 14 +++-
 packages/engine/src/pi.ts                          |  9 ++-
 14 files changed, 251 insertions(+), 36 deletions(-)

Fusion-Task-Id: FN-043

Fusion-Task-Lineage: fdd3308a-d5bd-4f54-911a-226c2b46a927

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-20 03:57:23 +00:00
Fusion Agent
a81c9b80d9 FN-036: make task title summarization project-controlled
Make generated task titles project-controlled while preserving useful summaries at any length.

- Add project-level title summarization settings and UI controls.
- Make summarization length-independent across task creation, planning, GitHub, and agent flows.
- Update localization, documentation, and regression coverage.

Files changed:
 .../fn-036-systematic-title-summarization.md       |   7 +
 docs/settings-reference.md                         |   2 +-
 docs/storage.md                                    |   2 +-
 docs/task-management.md                            |   4 +-
 packages/core/src/__tests__/ai-summarize.test.ts   |  34 ++--
 .../__tests__/store-create-intake-column.test.ts   | 186 +++++++++++++++++++++
 packages/core/src/ai/ai-summarize.ts               |  32 ++--
 packages/core/src/task-store/task-creation.ts      |  83 +++++++--
 packages/core/src/types/settings/settings-scope.ts |   9 +-
 packages/core/src/types/task/task-core.ts          |   2 +-
 .../dashboard/app/__tests__/api-projects.test.ts   |   4 +-
 .../app/__tests__/settings-sections.test.tsx       |   2 +-
 .../dashboard/app/api/planning/ai-summarize.ts     |   2 +-
 .../__tests__/SettingsModal.search.test.ts         |   5 +-
 .../search/__tests__/settings-search-index.test.ts |   2 +-
 .../sections/ProjectModelsSection.search.ts        |   4 +-
 .../settings/sections/ProjectModelsSection.tsx     |  11 +-
 .../src/__tests__/github-tracking.test.ts          |  12 +-
 .../src/__tests__/routes-planning.test.ts          |  28 +++-
 .../dashboard/src/__tests__/routes-tasks.test.ts   |  19 +++
 packages/dashboard/src/github-tracking.ts          |   9 +-
 .../routes/register-ai-text-assistant-routes.ts    |   7 +-
 .../src/__tests__/agent-tools-delegation.test.ts   |   1 +
 .../src/__tests__/heartbeat-executor.test.ts       |   1 -
 packages/engine/src/__tests__/triage.test.ts       |   7 +-
 packages/engine/src/agent-tools.ts                 |   7 +-
 packages/engine/src/triage.ts                      |  12 +-
 packages/i18n/locales/en/app.json                  |   6 +-
 packages/i18n/locales/pt-BR/app.json               |   8 +-
 packages/i18n/src/resources.d.ts                   |   6 +-
 30 files changed, 418 insertions(+), 96 deletions(-)

Fusion-Task-Id: FN-036

Fusion-Task-Lineage: df603386-e63e-4be8-a8e5-bae9aa1d4a80

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-20 03:57:23 +00:00
Fusion Agent
06649a0288 FN-041: add chat message layout to Settings search
Make the conversation layout setting discoverable across Settings search presentations.

- Add the project-scoped chat message layout entry to the Appearance search index.
- Cover desktop, mobile, and embedded Settings search with regression tests.
- Add a patch changeset for the published Fusion package.

Files changed:
 .changeset/fn-041-settings-search-chat-layout.md   |  7 +++
 .../__tests__/SettingsModal.general.test.tsx       | 51 ++++++++++++++++++++++
 .../settings/sections/AppearanceSection.search.ts  | 15 +++++++
 3 files changed, 73 insertions(+)

Fusion-Task-Id: FN-041
Fusion-Task-Lineage: 614cded0-a97a-4343-96f7-22eeb483a54b
Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-20 03:57:23 +00:00
Fusion Agent
e80fef3fe0 FN-040: fix chat source-link integrity and contrast
Harden chat source links across streaming providers while improving new-tab behavior and visual contrast.

- Preserve source-link metadata through streamed delta and event bridges.
- Open chat source links safely in new tabs across desktop and mobile surfaces.
- Improve source-link contrast and add regression coverage plus user-facing guidance.

Files changed:
 .changeset/fn-040-chat-source-links.md             |  7 +++
 docs/dashboard-guide.md                            |  3 +
 .../ui-bugs/chat-streamed-source-link-integrity.md | 53 ++++++++++++++++
 packages/dashboard/app/components/ChatView.css     | 24 ++++++++
 .../app/components/StandardChatSurface.tsx         |  8 ++-
 .../components/__tests__/ChatView.core.test.tsx    | 38 ++++++++++++
 .../components/__tests__/ChatView.mobile.test.tsx  | 70 ++++++++++++++++++++--
 .../__tests__/ChatView.sessions-rooms.test.tsx     | 49 +++++++++++++++
 ...andardChatSurface.nativeStructureEmbed.test.tsx | 52 +++++++++++++++-
 .../__tests__/TaskPlannerChatTab.test.tsx          | 48 +++++++++++++++
 .../engine/src/__tests__/streaming-delta.test.ts   | 36 +++++++++++
 packages/engine/src/execution/streaming-delta.ts   | 17 +++++-
 .../src/__tests__/event-bridge.test.ts             | 30 +++++++++-
 packages/pi-claude-cli/src/event-bridge.ts         | 14 +++--
 .../src/__tests__/event-bridge.test.ts             | 42 +++++++++++++
 .../fusion-plugin-acp-runtime/src/event-bridge.ts  |  8 ++-
 .../src/__tests__/provider.test.ts                 | 34 +++++++++++
 .../src/acp/event-bridge.ts                        |  8 ++-
 .../src/__tests__/event-bridge.test.ts             | 28 +++++++++
 .../src/event-bridge.ts                            | 14 +++--
 .../src/__tests__/provider.test.ts                 | 34 +++++++++++
 .../src/acp/event-bridge.ts                        |  8 ++-
 .../src/__tests__/runtime-adapter.test.ts          | 34 +++++++++++
 .../src/acp/event-bridge.ts                        |  8 ++-
 24 files changed, 642 insertions(+), 25 deletions(-)

Fusion-Task-Id: FN-040

Fusion-Task-Lineage: 364ad678-df3e-4fb2-b19c-29eb44d8a429

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-20 03:57:23 +00:00
Fusion Agent
bcc77c9608 FN-035: require automatic task recommendations
Require task recommendations to be explicitly enabled and consistently surfaced across execution and settings.

- Add the automatic task recommendations setting, persistence, validation, and localized UI copy.
- Gate executor recommendation prompts and completion-tool behavior on the setting.
- Update dashboard/API coverage, documentation, and regression tests.

Files changed:
 .changeset/fn-035-required-task-recommendations.md |  7 +++
 docs/dashboard-guide.md                            |  3 +-
 docs/settings-reference.md                         |  2 +
 .../postgres/settings-persistence.pg.test.ts       | 18 +++++++
 .../core/src/__tests__/settings-parity.test.ts     |  3 ++
 packages/core/src/config/settings-schema.ts        |  2 +
 packages/core/src/task-store/settings-ops.ts       | 16 ++++--
 packages/core/src/types/settings/settings-scope.ts |  8 +++
 .../app/__tests__/settings-save-split.test.ts      | 16 ++++++
 .../__tests__/SettingsModal.general.test.tsx       | 36 +++++++++++++
 .../app/components/settings/section-keys.ts        |  1 +
 .../settings/sections/GeneralSection.search.ts     | 10 ++++
 .../settings/sections/GeneralSection.tsx           | 15 +++++-
 .../settings-default-descriptions.test.tsx         |  2 +
 .../register-settings-memory-worktrunk.test.ts     | 28 ++++++++++
 .../src/routes/register-settings-memory-routes.ts  |  5 ++
 ...cutor-prompt-completion-recommendations.test.ts | 31 +++++++++++
 .../executor-task-recommendations.test.ts          | 61 ++++++++++++++++++++--
 .../engine/src/executor/create-task-done-tool.ts   | 18 +++++--
 packages/engine/src/executor/system-prompt.ts      | 20 +++++--
 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/pt-BR/app.json               |  5 +-
 packages/i18n/locales/zh-CN/app.json               |  3 ++
 packages/i18n/locales/zh-TW/app.json               |  3 ++
 packages/i18n/src/resources.d.ts                   |  3 ++
 28 files changed, 307 insertions(+), 21 deletions(-)

Fusion-Task-Id: FN-035
Fusion-Task-Lineage: 336d4d99-3105-43df-b82c-ca413b9c5892
Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-20 03:57:23 +00:00
Fusion Agent
29f4de39c4 FN-038: prepare projects for Git during onboarding
Make project initialization and registration produce Git-ready projects consistently.\n\n- Centralize repository readiness and initialization behavior.\n- Update CLI onboarding and dashboard registration flows to use the Git-ready setup.\n- Add regression coverage and document the new project preparation behavior.\n\nFiles changed:\n .changeset/fn-038-git-ready-projects.md            |   7 +\n docs/cli-reference.md                              |  11 +-\n docs/getting-started.md                            |  17 +-\n docs/workspaces.md                                 |   4 +-\n packages/cli/src/commands/__tests__/init.test.ts   |  39 ++--\n packages/cli/src/commands/init.ts                  | 115 ++--------\n packages/core/src/__tests__/git-repository.test.ts | 125 +++++++++-\n packages/core/src/central/central-core.ts          |  57 +++--\n packages/core/src/git/git-repository.ts             | 254 +++++++++++++++++----\n packages/dashboard/app/api/projects/projects.ts    |   2 -\n packages/dashboard/app/components/SetupWizardModal.tsx |  46 +---\n packages/dashboard/app/components/__tests__/SetupWizardModal.git-missing.test.tsx |  74 +++---\n packages/dashboard/src/routes/__tests__/register-project-git-readiness.test.ts | 165 +++++++++++++\n packages/dashboard/src/routes/register-project-routes.ts |  11 -\n 14 files changed, 647 insertions(+), 280 deletions(-)

Fusion-Task-Id: FN-038

Fusion-Task-Lineage: 83634184-569b-4190-a88f-4a09eb832e9d

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-20 03:57:23 +00:00
Fusion Agent
aad4b73a47 FN-033: use default chat model for task chat
Task chat now uses the resolved project default while matching general chat controls and session behavior.

- Resolve the effective task-chat model and expose model/thinking selectors in the task chat composer.
- Persist per-session model and thinking overrides through scoped task-chat routes.
- Refresh task-chat UI, documentation, tests, and release metadata for the new behavior.

Files changed:
 .changeset/fn-033-task-chat-default-model.md       |   7 +
 docs/agents.md                                     |   4 +-
 docs/dashboard-guide.md                            |  26 +--
 packages/dashboard/app/api/chat/chat.ts            |  26 +--
 .../dashboard/app/components/TaskDetailModal.tsx   |   4 +-
 .../app/components/TaskPlannerChatTab.css          |  38 ++-
 .../app/components/TaskPlannerChatTab.tsx          | 211 +++++++++++++++++----
 .../__tests__/TaskDetailModal.test-helpers.ts      |   2 +
 .../components/__tests__/TaskDetailModal.test.tsx  |   4 +-
 .../__tests__/TaskPlannerChatTab.test.tsx          | 149 +++++++++------
 .../__tests__/effective-model-resolution.test.ts   |  32 +++
 .../app/components/effective-model-resolution.ts   |  30 ++-
 .../dashboard/src/__tests__/chat-manager.test.ts   |  14 +-
 .../routes-task-planner-chat-session.test.ts       | 210 +++++++++++++++++++
 .../dashboard/src/routes/register-chat-routes.ts   | 116 +++++++----
 15 files changed, 700 insertions(+), 173 deletions(-)

Fusion-Task-Id: FN-033

Fusion-Task-Lineage: 10cffb5e-1a38-47e1-9b29-cd3cb0b99b81

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-20 03:56:41 +00:00
Fusion Agent
3f85c4cf84 FN-034: route workspace tasks through repository worktrees
Route multi-repository planning and graph execution through declared repository worktrees instead of workspace roots.

- Acquire declared repository worktrees for planning and custom graph nodes.
- Filter planning coordinator selection to configured repositories and preserve workspace routing metadata.
- Add workspace worktree recovery, concurrency coverage, and release documentation.

Files changed:
 .changeset/fn-034-workspace-worktree-routing.md    |   7 ++
 docs/architecture.md                               |   1 +
 ...workspace-worktrees-concurrent-merge.pg.test.ts |  36 +++++++
 packages/core/src/store.ts                         |  10 ++
 packages/core/src/task-store/task-mutation-ops.ts  |  60 +++++++++++-
 .../executor-workspace-session-cwd.test.ts         |  29 ++++--
 packages/engine/src/__tests__/self-healing.test.ts |  17 ++--
 .../workspace-root-worktree-routing.test.ts        | 107 +++++++++++++++++++++
 .../create-authoritative-workflow-seams.ts         |  48 ++++++---
 .../executor/ensure-graph-custom-node-worktree.ts  |  45 +++++++-
 .../executor/ensure-task-worktree-for-planning.ts  |  38 ++++++--
 .../src/executor/reset-steps-if-work-lost.ts       |  12 ++-
 .../engine/src/executor/run-graph-custom-node.ts   |  83 ++++++++++++++--
 packages/engine/src/executor/run-implementation.ts |  59 ++++++++++--
 .../src/executor/workspace-config-resolver.ts      |  30 +++++-
 .../src/executor/workspace-review-per-repo.ts      |  29 +++++-
 .../executor/worktree-missing-session-recovery.ts  |  26 ++++-
 packages/engine/src/self-healing.ts                |  50 +++++++---
 .../self-healing/auto-recover-worktree-session.ts  |  31 +++++-
 .../engine/src/worktree/worktree-acquisition.ts    |  65 +++++++++++-
 20 files changed, 702 insertions(+), 81 deletions(-)

Fusion-Task-Id: FN-034
Fusion-Task-Lineage: 59c5f273-d676-4b7f-b006-c12dc6c3abe6
Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-20 03:56:41 +00:00
Fusion Agent
5a0117a362 FN-031: add task reset lifecycle handling
Add durable task reset lifecycle support across core, dashboard, and engine integrations.

- Add reset lifecycle publication and disposal primitives with coverage.
- Expose reset lifecycle behavior through task workflow routes and dashboard task details.
- Update workflow intake, engine exports, and worktree integration documentation.

Files changed:
 docs/dashboard-guide.md                            |   8 +
 .../postgres/task-reset-publication.pg.test.ts     |  99 +++++++
 .../core/src/__tests__/task-move-disposer.test.ts  |  52 +++
 packages/core/src/index.gate.ts                    |   6 +
 packages/core/src/index.ts                         |   6 +
 packages/core/src/store.ts                         |   6 +
 packages/core/src/task-store/reset-lifecycle.ts    | 193 ++++++++++++++
 packages/core/src/tasks/task-move-disposer.ts      |  25 ++
 .../dashboard/app/components/TaskDetailModal.tsx   |   8 +-
 .../components/__tests__/TaskDetailModal.test.tsx  |  28 +-
 .../__tests__/plan-approval-intake-column.test.ts  |  80 ++----
 .../src/__tests__/task-reset-lifecycle.test.ts     | 171 +++++++++++++
 .../src/routes/register-task-workflow-routes.ts    | 285 ++++++++++-----------
 packages/engine/src/index.ts                       |  10 +-
 packages/engine/src/worktree/worktree-backend.ts   |   1 +
 15 files changed, 766 insertions(+), 212 deletions(-)

Fusion-Task-Id: FN-031

Fusion-Task-Lineage: 183bb709-485e-4069-bd2a-98f787b2bd73

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-20 03:55:39 +00:00
Fusion Agent
21b3baa62d FN-029: unify direct and planner chat queues
Standardize queued-message controls across Direct Chat and planner conversations while preserving force-send ordering during cancellation reconciliation.

- Add shared pending-message queue UI with edit, reorder, delete, and force-send actions.
- Coordinate durable cancellation reconciliation before dispatching selected queued messages.
- Disable the Direct composer and related controls until force-send reconciliation completes.
- Add localized queue copy, documentation, styling, and regression coverage.

Files changed:
 docs/dashboard-guide.md                            |   8 +
 packages/dashboard/app/components/ChatView.css     |  63 ------
 packages/dashboard/app/components/ChatView.tsx     |  55 +++--
 packages/dashboard/app/components/PendingChatMessageQueue.css     |  94 +++++++++
 packages/dashboard/app/components/PendingChatMessageQueue.tsx     | 200 ++++++++++++++++++
 packages/dashboard/app/components/TaskPlannerChatTab.css          |  84 --------
 packages/dashboard/app/components/TaskPlannerChatTab.tsx          | 113 ++---------
 packages/dashboard/app/components/__tests__/ChatView.core-interactions.test.tsx |  24 ++-
 packages/dashboard/app/components/__tests__/PendingChatMessageQueue.test.tsx   |  76 +++++++
 packages/dashboard/app/hooks/__tests__/useChat.test.ts            |  39 +++
 packages/dashboard/app/hooks/useChat.ts                           | 224 ++++++++++++++++-----
 packages/i18n/locales/en/app.json                                 |  25 +--
 packages/i18n/locales/es/app.json                                 |  25 +--
 packages/i18n/locales/fr/app.json                                 |  25 +--
 packages/i18n/locales/ko/app.json                                 |  25 +--
 packages/i18n/locales/pt-BR/app.json                              |  25 +--
 packages/i18n/locales/zh-CN/app.json                              |  25 +--
 packages/i18n/locales/zh-TW/app.json                              |  25 +--
 packages/i18n/src/resources.d.ts                                  |  25 +--
 19 files changed, 746 insertions(+), 434 deletions(-)

Fusion-Task-Id: FN-029

Fusion-Task-Lineage: 3330d0e7-ba77-4392-98f7-69425070cfd1

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-20 03:55:39 +00:00
Fusion Agent
a7afb020e9 FN-032: use deterministic titles for short descriptions
Short untitled task descriptions now receive stable planning titles instead of an empty placeholder.

- Derive short-task titles from the first meaningful description line with shared normalization and length safety.
- Preserve explicit titles and leave long or empty descriptions on existing AI/none behavior.
- Persist the planning heading title through normal task metadata finalization and document the threshold.

Files changed:
 .changeset/fn-032-short-description-title.md |   7 ++
 docs/settings-reference.md                   |   2 +-
 docs/task-management.md                      |   4 +-
 packages/engine/src/__tests__/triage.test.ts | 115 ++++++++++++++++++++++++---
 packages/engine/src/triage.ts                |  23 +++++-
 5 files changed, 137 insertions(+), 14 deletions(-)

Fusion-Task-Id: FN-032

Fusion-Task-Lineage: 886f5a32-7eb5-460d-bf1a-93ebf5dc0b93

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-20 03:55:39 +00:00
Fusion Agent
c3ff663c1c FN-030: route refinement tasks directly to planning
Route refinement and duplicate-task handling through the planning path while preserving task metadata and API behavior.\n\n- Route CLI refinement commands directly into planning.\n- Harden dependency updates and duplicate-task refinement persistence.\n- Expand PostgreSQL, CLI, and dashboard authorization coverage.\n- Document the refined task lifecycle and add the published-package changeset.\n\nFiles changed:\n .changeset/fn-030-refinement-planning-route.md     |   7 ++\n docs/architecture.md                               |  20 ++--\n docs/task-management.md                            |  11 +-\n packages/cli/src/commands/__tests__/task.test.ts   |   9 +-\n packages/cli/src/commands/task.ts                  |   2 +-\n .../postgres/refine-duplicate-task.pg.test.ts      | 130 +++++++++++++++++++++\n .../__tests__/postgres/store-comments.pg.test.ts   |  32 +++++\n packages/core/src/task-store/update-task-deps.ts   |  17 +--\n packages/dashboard/app/__tests__/api-auth.test.ts  |   5 +-\n 9 files changed, 207 insertions(+), 26 deletions(-)

Fusion-Task-Id: FN-030

Fusion-Task-Lineage: 885c0a9f-d8bf-4abf-9ec9-dca5a01648e8

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-20 03:55:39 +00:00