Commit Graph

13815 Commits

Author SHA1 Message Date
gsxdsm
46b329fed9 FN-9199: Replace chat text back marker with arrow icon
Use a consistent icon-and-label back affordance across direct and room chat threads.

- Render the lucide ArrowLeft icon with localized Back text and preserved accessible naming.
- Cover mobile direct and room thread back buttons with icon, text, and accessibility assertions.
- Add a patch changeset for the published Fusion package.

Files changed:
 .changeset/fix-chat-back-arrow.md                          |  6 ++++++
 packages/dashboard/app/components/ChatView.css             |  2 +-
 packages/dashboard/app/components/ChatView.tsx             | 14 ++++++++++++--
 .../app/components/__tests__/ChatView.mobile.test.tsx      |  4 +++-
 .../app/components/__tests__/ChatView.rooms.test.tsx       |  7 ++++++-
 5 files changed, 28 insertions(+), 5 deletions(-)

Fusion-Task-Id: FN-9199

Fusion-Task-Lineage: aab2a300-cc2a-4768-b60b-81d7477b8fab

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-23 09:13:23 -07:00
gsxdsm
bd93723d44 FN-9197: Add padding to the chat tag filter
Improve the chat sidebar tag filter spacing while preserving token-based styling.

- Align the tag filter select padding with the sidebar search input.
- Add a stylesheet regression test covering all ChatView hosts.
- Record the operator-facing fix in a patch changeset.

Files changed:
 .changeset/chat-tag-filter-padding.md              |  7 +++
 packages/dashboard/app/components/ChatView.css     | 10 +++-
 .../__tests__/ChatView.tag-filter-padding.test.ts  | 60 ++++++++++++++++++++++
 3 files changed, 75 insertions(+), 2 deletions(-)

Fusion-Task-Id: FN-9197

Fusion-Task-Lineage: e2220b2d-b7e5-4de9-8751-da8e3a4a9e69

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-23 09:04:29 -07:00
gsxdsm
038f802ba4 fix: make the workflow graph the only merge authority
ProjectEngine's in-review auto-merge sweep was a second merge authority. It
judged eligibility from column, status, steps and retry budget alone, with no
idea where the card sat in its workflow graph, so it merged work the graph had
never authorized: FN-9191 merged ~2s after fn_task_done, before Code Review had
ever started, and FN-9193 merged while Code Review was re-running — the gate
then requested revision and reset the steps, but the in-flight merge landed the
pre-remediation branch anyway and left the card mergeConfirmed WITH incomplete
steps, unfinalizable for five hours.

- classifyMergeSweepAdmission (core) admits only merge-confirmed finalization,
  a card parked at a merge-region node, an interrupted attempt, or a fenced
  quiescent stall. Every initiation is fenced on satisfied pre-merge gates.
- All four doors prove authority: the sweep, the 300ms column-entry handoff
  (which matches FN-9191's timing better than any sweep tick), the unpause
  re-enqueue, and a position-only pre-dispatch re-check for cards the graph
  moved out of the merge lane while they were queued.
- workflow-merge-region.ts holds the canonical merge-region predicate;
  INTERPRETER_ENTRY_NODE_KINDS now aliases it so the two cannot drift.
- Multi-repo: branch-group integration/promotion are merge-region nodes, an
  in-flight sub-repo land reads as foreign liveness, and a cross-node
  merge-dispatch lease defers.
- Sweep reads are batched, so admission costs O(1) queries per poll.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-23 03:29:32 -07:00
gsxdsm
3f448f7292 FN-9194: fix mailbox task ID interpolation
Show concrete destination IDs in mailbox task links instead of leaking untranslated placeholders.

- Pass the catalog's `id` variable to visible and accessible task-link labels.
- Cover shared links and all mailbox host, viewport, and conversation-layout surfaces with the shipping catalog.
- Document the task-link label and add a patch changeset.

Files changed:
 .changeset/fn-9194-mailbox-task-link-id.md         |   7 ++
 docs/dashboard-guide.md                            |   2 +-
 .../app/components/MailboxRelatedWorkLink.tsx      |   9 +-
 .../__tests__/MailboxRelatedWorkLink.test.tsx      |  50 ++++++++
 .../MailboxTaskLinkInterpolation.surfaces.test.tsx | 128 +++++++++++++++++++++
 5 files changed, 193 insertions(+), 3 deletions(-)

Fusion-Task-Id: FN-9194

Fusion-Task-Lineage: d7afd16a-c951-40c4-aa12-d7b56f9cba7e

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-23 01:16:35 -07:00
gsxdsm
eaa1d47cf0 FN-9193: add docked chat conversation sidebar
Add a persistent, resizable conversation sidebar to non-floating chat on tablet and desktop layouts.

- Keep conversation lists visible beside selected direct and room threads on eligible viewports.
- Persist sidebar visibility and width while preserving mobile, compact, and floating one-pane behavior.
- Add responsive styling, operator documentation, a release changeset, and focused regression coverage.

Files changed:
 .changeset/fn-9193-chat-docked-sidebar.md          |   7 ++
 docs/dashboard-guide.md                            |  12 +-
 packages/dashboard/app/components/ChatView.css     |  58 +++++++++-
 packages/dashboard/app/components/ChatView.tsx     | 120 ++++++++++++++++---
 .../__tests__/ChatView.docked-sidebar.test.tsx     | 128 +++++++++++++++++++++
 .../__tests__/ChatView.sessions-rooms.test.tsx     |  29 ++---
 .../components/__tests__/ChatView.test-harness.tsx |  41 ++++++-
 7 files changed, 360 insertions(+), 35 deletions(-)

Fusion-Task-Id: FN-9193

Fusion-Task-Lineage: 58266e56-9d09-4472-98f4-f9d1d80635a7

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-22 21:13:02 -07:00
gsxdsm
0fc2c23f24 FN-9192: add direct chat title switcher
Make Direct conversation titles open an in-place, keyboard-accessible chat switcher.

- Add a responsive title dropdown with pinned, recent, unread, and active conversation states.
- Reuse existing session-selection and back-navigation paths from ChatView.
- Cover interaction, ordering, limits, keyboard behavior, and Room-title exclusions.
- Document the switcher and add a minor release changeset.

Files changed:
 .changeset/fn-9192-chat-title-switcher.md          |   7 +
 docs/dashboard-guide.md                            |   4 +
 .../app/components/ChatThreadTitleSwitcher.css     | 139 +++++++++++++++
 .../app/components/ChatThreadTitleSwitcher.tsx     | 191 +++++++++++++++++++++
 packages/dashboard/app/components/ChatView.tsx     |  17 +-
 .../__tests__/ChatView.title-switcher.test.tsx     | 171 ++++++++++++++++++
 6 files changed, 528 insertions(+), 1 deletion(-)

Fusion-Task-Id: FN-9192

Fusion-Task-Lineage: 1e499595-6d82-4ba3-8599-2470d2e89429

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-22 20:37:46 -07:00
gsxdsm
3af54418cf FN-9191: add the Iceberg dashboard theme
Add a persisted Iceberg palette across dashboard and desktop theme surfaces.

- Define coordinated dark and light Iceberg color tokens and selector swatches.
- Register Iceberg in shared persistence, theme selectors, and first-paint validation.
- Add registry coverage, documentation, visual references, and a release changeset.

Files changed:
 .changeset/fn-9191-iceberg-theme.md                |   6 ++
 docs/dashboard-guide.md                            |   5 +-
 docs/settings-reference.md                         |   4 +-
 packages/core/src/types/ui/execution-and-ui.ts     |   2 +
 .../dashboard/app/__tests__/iceberg-theme.test.ts  | 102 +++++++++++++++++++++
 .../dashboard/app/components/ThemeSelector.css     |  15 +++
 .../components/__tests__/ThemeDropdown.test.tsx    |   3 +-
 .../components/__tests__/ThemeSelector.test.tsx    |   3 +-
 .../__tests__/CommandCenterControls.test.tsx       |   3 +-
 packages/dashboard/app/components/themeOptions.ts  |   2 +
 packages/dashboard/app/index.html                  |   3 +-
 packages/dashboard/app/public/theme-data.css       |  85 +++++++++++++++++
 packages/desktop/src/renderer/index.html           |   2 +
 screenshots/fn-9191-iceberg-theme-dark.png         |   3 +
 screenshots/fn-9191-iceberg-theme-light.png        |   3 +
 15 files changed, 234 insertions(+), 7 deletions(-)

Fusion-Task-Id: FN-9191

Fusion-Task-Lineage: a8b441c6-763a-4c38-a682-bffab1fdd293

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-22 19:43:45 -07:00
gsxdsm
012d42008f chore(release): v0.77.0-beta.7
Version bump via changesets.
2026-08-22 19:27:22 -07:00
gsxdsm
b47fb70b81 fix: defer merge on unrun pre-merge gates instead of failing the task
An enabled pre-merge gate that has not reported yet is a not-yet condition,
not a failure. FN-9191 proved the difference is load-bearing: the in-review
auto-merge sweep enqueued the card ~2s after fn_task_done and ~18s before the
graph started its own Code Review node, the merge door correctly refused, and
the auto-merge error path parked it status="failed". Code Review APPROVED two
minutes later, but every subsequent merge — including the graph's own merge
node — then died on "task is marked 'failed'".

- Merge doors throw the typed PreMergeStepsNotRunError for that blocker.
- The auto-merge error path treats it as a deferral: no status write, no
  mergeRetries burn, no operator handoff.
- enqueueEligibleInReviewTasks holds a card out of the merge queue until every
  enabled pre-merge group has a result, so the race stops at admission.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-22 19:23:15 -07:00
gsxdsm
2f8d2e8ee0 feat: add scripts/run-container.sh for launching the Fusion container
The correct `docker run` is long and every piece of it fails confusingly when
omitted: the OAuth callback ports are fixed by the providers' registered redirect
URIs and unreachable without PI_OAUTH_CALLBACK_HOST=0.0.0.0, /home/node must be a
volume or the Tailscale login and embedded Postgres are lost on recreate, and
--tailscale is an entrypoint flag that must precede the CLI arguments.

- Every knob is an environment variable, so per-container config lives in an
  --env-file outside the repo rather than a committed token.
- FUSION_STATE_VOLUME supports setups that mount /home/node/.fusion as its own
  volume nested inside /home/node; omitting it is not destructive but silently
  points the dashboard at a different database, so the board comes up empty.
- An existing container is never replaced without --recreate, and volumes are
  never removed, so a recreate keeps the database, settings, and tailnet login.
- --dry-run prints the command without running it, including when the container
  already exists, which is exactly when previewing a recreate is most useful.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-22 19:21:31 -07:00
gsxdsm
e6121bc8e2 fix: make container tailscaled opt-in via a --tailscale entrypoint flag
Starting the daemon unconditionally gave every container a process, a listening
socket, and an identity in someone's tailnet that it never asked for. Most
containers never use remote access, so the daemon is now opt-in.

- The entrypoint consumes a leading `--tailscale` argument (or FUSION_TAILSCALE=1,
  with `--no-tailscale` to override it back off) and strips it from the argument
  list, so everything after it stays a normal Fusion CLI invocation.
- Arguments are rotated through shift/append rather than string concatenation, so
  values containing spaces survive as single argv entries.
- Replaces the FUSION_DISABLE_TAILSCALED opt-out, which is redundant now that the
  default is off.
- Document the flag, the userspace-networking mode (no NET_ADMIN/tun caps), the
  one-time `tailscale up`, and the /home/node mount that persists that login.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-22 19:16:00 -07:00
gsxdsm
3edb843f9b fix: start tailscaled in Docker image and preflight tailscale daemon readiness
Tailscale remote access failed in the container with a bare "process exited 1":
the image ships the `tailscale` CLI but nothing ever ran `tailscaled`, so the
`tailscale funnel <port>` spawn died instantly on "failed to connect to local
tailscaled".

- Add scripts/docker-entrypoint.sh, which best-effort starts tailscaled in
  userspace-networking mode (needs neither NET_ADMIN nor /dev/net/tun, so the
  documented `docker run` is unchanged) and then execs the CLI with CMD verbatim.
  Opt out with FUSION_DISABLE_TAILSCALED=1.
- Symlink /var/lib/tailscale into /home/node/.tailscale so the documented
  `-v <vol>:/home/node` mount persists the node login across container recreates,
  and pre-create the daemon's socket/log paths node-owned before the USER switch.
- Preflight daemon reachability and backend state with `tailscale status --json`
  in evaluateRemoteLifecycle instead of only `which tailscale`, so unreachable,
  logged-out, and stopped backends all report an actionable
  runtime_prerequisite_missing reason rather than an unexplained exit 1.

Regression coverage asserts the invariant across all three unusable-backend
surfaces, not just the reported container repro.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-22 19:09:41 -07:00
gsxdsm
d71aa0d189 test: update schema-applier PG test for migrations 0061-0064
Migrations 0061 (activity-log task-id index), 0062 (remove task/subtask
splitting), 0063 (AI merge review reconciliation), and 0064 (task repository
scope) advanced SCHEMA_BASELINE_VERSION to 0064 without updating this
non-gate PG integration test, leaving it red on the non-blocking suite:

- Bump the immutable-identity assertion to 0064 and pin 0062-0064 identities.
- Append the four new versions to all five getAppliedMigrations() lists.
- Add central.central_activity_log to the hand-built 0000 upgrade fixture so
  the 0061 index migration finds the relation real 0000 DBs have from
  0000_initial.sql (fixture gap, not a product regression).
2026-08-22 18:41:30 -07:00
Fusion Agent
bd7a41315c fix(FN-158): remove residual conflict marker
Fusion-Task-Id: FN-158
2026-08-23 01:38:45 +00:00
Fusion Agent
9d8c14b4e8 FN-165: use session context usage for chat indicator
Use provider-reported pi session context usage to drive the Chat context indicator.

- Track measured and pending session context usage in the dashboard.
- Expose bounded context metadata from chat sessions and update token estimation.
- Add regression coverage, localized labels, documentation, and a changeset.

Files changed:
 .changeset/fn-165-chat-context-usage.md            |  7 ++
 docs/dashboard-guide.md                            |  4 +-
 packages/dashboard/app/components/ChatView.tsx     | 49 ++++++++----
 .../__tests__/ChatView.context-window.test.tsx     | 84 +++++++++++++++++++-
 .../app/utils/__tests__/chatContextUsage.test.ts   | 66 ++++++++++++++++
 .../app/utils/__tests__/estimateChatTokens.test.ts | 10 +++
 packages/dashboard/app/utils/chatContextUsage.ts   | 73 ++++++++++++++++++
 packages/dashboard/app/utils/estimateChatTokens.ts | 39 ++++++++--
 .../dashboard/src/__tests__/chat-manager.test.ts   | 89 +++++++++++++++++++++
 packages/dashboard/src/chat.ts                     | 65 +++++++++++++---
 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               |  3 +
 packages/i18n/locales/zh-CN/app.json               |  3 +
 packages/i18n/locales/zh-TW/app.json               |  3 +
 packages/i18n/src/resources.d.ts                   | 19 +++--
 18 files changed, 483 insertions(+), 43 deletions(-)

Fusion-Task-Id: FN-165

Fusion-Task-Lineage: a95a9c7f-80aa-41be-8807-1fbd383f0f1d

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-23 01:37:58 +00:00
Fusion Agent
bfaa0f42da FN-158: enforce workspace multi-repo merge boundaries
Support workspace tasks across a shared root with scope-driven repositories and verifiable merge gates.

- Route task work through one workspace directory with per-repository acquisition and isolation.
- Add sandbox session policies and per-repository verification command handling.
- Enforce required pre-merge checks and honest merge blocking for workspace changes.
- Update workspace, workflow, and sandbox documentation and release metadata.

Files changed:
 .changeset/fn-158-workspace-single-root.md         |   7 +
 docs/sandbox.md                                    |   6 +-
 docs/workflow-steps.md                             |   6 +-
 docs/workspaces.md                                 |  12 +-
 .../core/src/__tests__/legacy-adoption.test.ts     |  15 +-
 .../src/__tests__/required-pre-merge-steps.test.ts |  25 ++++
 .../core/src/__tests__/store-bypass-review.test.ts |  24 ++-
 packages/core/src/__tests__/task-merge.test.ts     |  24 +++
 .../core/src/__tests__/worktree-layout.test.ts     |  29 ++++
 packages/core/src/db/legacy-adoption.ts            |  20 ++-
 packages/core/src/index.gate.ts                    |   4 +
 packages/core/src/index.ts                         |   4 +
 .../core/src/merge/required-pre-merge-steps.ts     |  26 ++++
 packages/core/src/merge/task-merge.ts              |  35 ++++-
 packages/core/src/store.ts                         |  59 ++++++--
 packages/core/src/task-store/lifecycle-ops.ts      |   1 +
 packages/core/src/task-store/merge-queue-ops.ts    |   5 +-
 packages/core/src/task-store/moves.ts              |  13 +-
 packages/core/src/task-store/task-artifacts-ops.ts |  11 +-
 packages/core/src/tasks/worktree-layout.ts         |  43 +++++-
 packages/core/src/types/workflow/workflow-steps.ts |   3 +-
 .../executor-workspace-session-cwd.test.ts         |  42 ++++--
 .../src/__tests__/node-worktree-isolation.test.ts  |  13 +-
 .../src/__tests__/pi-create-fn-agent.test.ts       |  16 ++
 .../engine/src/__tests__/project-engine.test.ts    |  20 ++-
 .../src/__tests__/reviewer-workspace.test.ts       |  30 +++-
 .../src/__tests__/run-verification-command.test.ts |  90 +++++++++++-
 .../__tests__/sandbox/sandbox-exec-policy.test.ts  |  16 +-
 .../src/__tests__/sandbox/session-policy.test.ts   |  45 ++++++
 .../__tests__/workspace-add-repo-midflight.test.ts |   9 ++
 .../engine/src/__tests__/workspace-e2e.test.ts     |  13 +-
 .../workspace-root-worktree-routing.test.ts        |  18 +--
 packages/engine/src/agent-tools.ts                 |  15 +-
 packages/engine/src/agents/agent-runtime.ts        |  19 +++
 .../engine/src/agents/agent-session-helpers.ts     |  15 ++
 packages/engine/src/execution/hold-release.ts      |  29 ++++
 .../engine/src/execution/run-verification-tool.ts  | 114 ++++++++++++++-
 .../create-authoritative-workflow-seams.ts         |  20 +--
 packages/engine/src/executor/deps-bags.ts          |   5 +-
 .../executor/ensure-graph-custom-node-worktree.ts  |  24 ++-
 .../executor/ensure-task-worktree-for-planning.ts  |  36 ++---
 .../engine/src/executor/execute-workflow-step.ts   |   4 +-
 .../src/executor/finalize-already-reviewed-task.ts |   6 +-
 .../src/executor/prepare-graph-node-execution.ts   |  14 +-
 .../engine/src/executor/run-graph-custom-node.ts   | 161 +++++++++++++--------
 packages/engine/src/executor/run-implementation.ts | 117 ++++++++++++---
 packages/engine/src/merge/merger-ai.ts             |  16 +-
 packages/engine/src/merger.ts                      |  20 ++-
 packages/engine/src/pi.ts                          | 150 ++++++++++++++++---
 packages/engine/src/project-engine.ts              |  10 +-
 packages/engine/src/runtimes/in-process-runtime.ts |   4 +-
 packages/engine/src/sandbox/bubblewrap-backend.ts  |  55 ++++++-
 packages/engine/src/sandbox/bubblewrap-policy.ts   |  10 +-
 packages/engine/src/sandbox/index.ts               |   1 +
 .../engine/src/sandbox/sandbox-exec-backend.ts     |  45 +++++-
 packages/engine/src/sandbox/sandbox-exec-policy.ts |  18 ++-
 packages/engine/src/sandbox/session-policy.ts      |  41 ++++++
 packages/engine/src/sandbox/types.ts               |  11 ++
 packages/engine/src/self-healing.ts                |   1 +
 packages/engine/src/triage.ts                      |  10 ++
 .../engine/src/worktree/worktree-acquisition.ts    |  53 ++++---
 61 files changed, 1393 insertions(+), 315 deletions(-)

Fusion-Task-Id: FN-158

Fusion-Task-Lineage: ba57f5a2-fa69-4210-8ea7-3d124be3deb2

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-23 01:37:58 +00:00
Fusion Agent
7d54e86e80 FN-159: filter AI merge protocol markers from blocking findings
Prevent the AI merge reviewer from persisting its own protocol syntax as blocking review findings.

- Register and filter all review protocol markers and disposition lines.
- Aggregate reviewer prose into bounded findings and preserve reconciliation safety.
- Release prior findings that are not re-confirmed on approved candidates.
- Add reconciliation state, tests, documentation, and a patch changeset.

Files changed:
 .../fn-159-ai-merge-protocol-marker-findings.md    |  7 ++
 docs/architecture.md                               |  2 +-
 packages/core/src/types/task/task-core.ts          |  6 ++
 .../engine/src/__tests__/merger-ai-prompts.test.ts | 39 ++++++++++
 .../src/__tests__/merger-ai-squash-gates.test.ts   |  6 ++
 .../engine/src/__tests__/merger-ai.test.ts         | 58 +++++++++++++++
 .../engine/src/__tests__/workspace-merger.test.ts  |  3 +-
 packages/engine/src/merge/merger-ai-prompts.ts     | 53 +++++++++++---
 packages/engine/src/merge/merger-ai.ts             | 84 ++++++++++++++++++----
 9 files changed, 231 insertions(+), 27 deletions(-)

Fusion-Task-Id: FN-159

Fusion-Task-Lineage: 6eea1dec-1252-4b8d-b227-c84c24ab60af

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-23 01:36:33 +00:00
Fusion Agent
794dae3196 fix(FN-149): advance schema ceiling to 0065 so Fusion stops rejecting its own database
FN-149 shipped migration 0065_fn_149_review_convergence_stage.sql and registered
REVIEW_CONVERGENCE_STAGE_VERSION but left SCHEMA_BASELINE_VERSION at "0064". The first
store open applied and recorded 0065; the next open (project store, same boot) hit
assertBinaryNotOlderThanDatabase, saw 0065 > 0064 and threw StaleBinarySchemaError, so
every startup died with "this binary only knows up to 0064" on fresh and upgraded
databases alike.

- Bump SCHEMA_BASELINE_VERSION to "0065" (marker only: applies no SQL, touches no data).
- Move the DB-free migration-wiring assertions out of the PostgreSQL integration file
  into src/__tests__/migration-wiring-integrity.test.ts and wire it into test:unit-gate,
  so the ceiling/migration drift now fails the merge gate instead of main's boot.
- Refresh the stale migration-identity expectations (0062-0065).

Symptom verification: `node scripts/dev-with-memory.mjs --isolated=<tmp> --prebuild none`
exited 1 with the guard error before; it now boots and serves the dashboard.
2026-08-23 01:36:33 +00:00
Fusion Agent
c1818ea819 FN-151: make task reset always complete
Make reset a reliable description-only fresh start by fencing active planning work and cleaning discarded execution state.

- Add reset lifecycle disposal for planning sessions, locks, artifacts, and reset worktrees.
- Preserve operator-provided descriptions while clearing stale execution and planning projections.
- Expose reset routes and add core, dashboard, and engine regression coverage.

Files changed:
 .changeset/fn-151-task-reset-always-completes.md   |   7 +
 docs/architecture.md                               |   3 +
 docs/dashboard-guide.md                            |   6 +-
 .../postgres/task-reset-publication.pg.test.ts     |  71 +++++++++-
 .../core/src/__tests__/task-move-disposer.test.ts  |  38 ++++++
 packages/core/src/index.gate.ts                    |   2 +
 packages/core/src/index.ts                         |   2 +
 packages/core/src/task-store/reset-lifecycle.ts    |  38 +++++-
 packages/core/src/tasks/task-move-disposer.ts      |  36 +++++-
 .../src/__tests__/task-reset-lifecycle.test.ts     | 110 +++++++++++++++-
 .../src/routes/register-task-workflow-routes.ts    |  29 +++--
 .../src/__tests__/agent-document-tools.test.ts     |  49 +++++++
 .../src/__tests__/reset-worktree-removal.test.ts   |  77 +++++++++++
 .../__tests__/triage-reset-planning-fence.test.ts  | 118 +++++++++++++++++
 packages/engine/src/agent-tools.ts                 |  60 +++++++--
 packages/engine/src/agents/planning-liveness.ts    |  19 +++
 packages/engine/src/index.ts                       |   4 +
 packages/engine/src/plan-artifact-writeback.ts     |  27 +++-
 packages/engine/src/planning-reset-fence.ts        |  26 +++
 packages/engine/src/triage.ts                      | 143 +++++++++++++++++++--
 packages/engine/src/worktree/remove-reset-worktree.ts   |  65 ++++++++++
 21 files changed, 882 insertions(+), 48 deletions(-)

Fusion-Task-Id: FN-151

Fusion-Task-Lineage: 1c25d58e-2d23-4340-a489-51f3e2d8a7f4

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-23 01:36:32 +00:00
Fusion Agent
a786c45bb9 FN-149: converge review cycles before human escalation
Add bounded review convergence so disputed review gates can resolve independently before requiring operator intervention.

- Add staged remediation, arbitration, dispute tooling, and stale-attempt fencing.
- Preserve review history and findings while exposing convergence state in core, dashboard, and audit paths.
- Add migration, configuration, documentation, changeset, and regression coverage.

Files changed:
 .changeset/fn-149-review-convergence.md            |   7 +
 AGENTS.md                                          |   2 +
 docs/architecture.md                               |   4 +
 docs/dashboard-guide.md                            |   4 +
 docs/run-audit.md                                  |   4 +
 docs/settings-reference.md                         |   4 +
 docs/workflow-steps.md                             |   8 +
 .../src/__tests__/default-workflow-hooks.test.ts   |  13 +
 packages/core/src/__tests__/plan-approval.test.ts  |  21 ++
 .../src/__tests__/reopen-semantics-by-role.test.ts |  25 ++
 packages/core/src/__tests__/review-severity-gate.test.ts     |  18 +-
 packages/core/src/__tests__/workflow-step-results.test.ts    |  52 +++-
 packages/core/src/config/settings-schema.ts        |   6 +
 packages/core/src/index.gate.ts                    |   9 +
 packages/core/src/index.ts                         |   9 +
 packages/core/src/planner/plan-approval.ts         |  27 +-
 .../0065_fn_149_review_convergence_stage.sql       |   3 +
 packages/core/src/postgres/schema-applier.ts       |  10 +
 packages/core/src/postgres/schema/project.ts       |   2 +
 packages/core/src/store.ts                         |   2 +-
 packages/core/src/task-store/persistence.ts        |   4 +
 packages/core/src/task-store/reset-lifecycle.ts    |   2 +
 packages/core/src/task-store/serialization.ts      |   2 +
 packages/core/src/task-store/task-mutation-ops.ts  |   2 +-
 packages/core/src/task-store/task-row-mappers.ts   |   2 +-
 packages/core/src/task-store/task-update.ts        |   4 +
 packages/core/src/tasks/in-review-stall.ts         |  21 ++
 packages/core/src/tasks/manual-retry-reset.ts      |   2 +
 packages/core/src/types/settings/settings-scope.ts |   7 +
 packages/core/src/types/task/task-core.ts          |   3 +
 packages/core/src/types/task/task-review.ts        |   2 +-
 packages/core/src/types/workflow/workflow-steps.ts |  24 +-
 .../src/workflows/builtin-workflow-settings.ts     |  43 +++
 .../core/src/workflows/default-workflow-hooks.ts   |  10 +-
 .../core/src/workflows/workflow-step-results.ts    | 185 ++++++++++++-
 .../dashboard/app/components/TaskReviewTab.tsx     |   6 +-
 .../components/__tests__/TaskReviewTab.test.tsx    |   6 +-
 .../dashboard/src/__tests__/routes-tasks.test.ts   |   7 +
 .../src/routes/register-task-workflow-routes.ts    |   4 +-
 .../__tests__/review-arbitration-release.test.ts   |  46 ++++
 .../src/__tests__/review-arbitration.test.ts       |  57 ++++
 .../__tests__/review-convergence-context.test.ts   |  95 +++++++
 .../review-convergence-escalation.test.ts          | 135 +++++++++
 .../src/__tests__/review-dispute-tool.test.ts      | 113 +++++++
 .../__tests__/review-finding-supersession.test.ts  |  55 ++-
 .../review-findings-injection.test.ts              |  19 +-
 .../__tests__/review-history-preservation.test.ts  | 186 +++++++++++++
 .../__tests__/review-ladder-entry-points.test.ts   | 304 +++++++++++++++++++++
 ...un-audit-sink-health-review-convergence.test.ts | 251 +++++++++++++++++
 .../workflow-graph-optional-step-fix.test.ts       |  59 ++--
 packages/engine/src/execution/replan-target.ts     |   6 +-
 .../clear-terminal-step-failures-for-retry.ts      |   8 +-
 .../src/executor/create-review-dispute-tool.ts     | 126 +++++++++
 packages/engine/src/executor/deps-bags.ts          |   2 +-
 .../engine/src/executor/execute-workflow-graph.ts  |  71 ++++-
 packages/engine/src/executor/execute-workflow-step.ts   |  16 +-
 packages/engine/src/executor/free-reexports.ts     |   1 +
 packages/engine/src/executor/impl-bindings.ts      |   1 +
 .../engine/src/executor/optional-step-revision.ts  |  33 ++-
 .../src/executor/recover-failed-pre-merge-step.ts  |  43 ++-
 .../request-pre-merge-optional-step-fix.ts         |  85 +++---
 packages/engine/src/executor/review-arbitration.ts | 233 +++++++++++++++
 .../src/executor/review-convergence-ladder.ts      | 237 +++++++++++++++
 .../route-graph-failure-to-execution-resume.ts     |  16 +-
 .../route-retryable-remediation.ts                 |   9 +-
 .../engine/src/executor/run-graph-custom-node.ts   |   1 +
 packages/engine/src/executor/run-implementation.ts |   2 +
 .../src/executor/task-executor-session-facades.ts  |   3 +-
 .../engine/src/executor/workflow-rerun-bounce.ts   |  13 +-
 .../executor/workflow-step-failure-injection.ts    |  23 +-
 .../engine/src/executor/workflow-step-failures.ts  |  16 +-
 .../engine/src/executor/workflow-step-verdict.ts   |   2 +
 packages/engine/src/self-healing.ts                |   5 +-
 packages/engine/src/util/run-audit.ts              |   9 +-
 .../src/workflows/workflow-graph-executor.ts       |   8 +-
 .../engine/src/worktree/review-diff-fingerprint.ts |  21 +++
 .../src/worktree/workspace-review-evidence.ts      |   9 +-
 77 files changed, 2719 insertions(+), 166 deletions(-)

Fusion-Task-Id: FN-149
Fusion-Task-Lineage: 9330df9d-5086-4b40-8daa-66f0ea31cf3e
Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-23 01:36:32 +00:00
Fusion Agent
e67403cd6a FN-155: add expandable thinking traces to transcripts
Add a reusable expandable thinking trace across chat and agent transcript surfaces.

- Add the ThinkingTrace component, styling, localized labels, and documentation.
- Render trace sections across chat, planning, mission, milestone, workflow, and agent log views.
- Preserve streaming trace data and add regression and surface coverage.

Files changed:
 .changeset/fn-155-thinking-trace.md                |   7 ++
 docs/dashboard-guide.md                            |   4 +
 .../dashboard/app/components/AgentLogViewer.tsx    |  11 +-
 packages/dashboard/app/components/ChatView.css     |  10 +-
 .../app/components/ConversationHistory.tsx         |   3 +-
 .../components/MilestoneSliceInterviewModal.tsx    |   3 +-
 .../app/components/MissionInterviewModal.tsx       |   3 +-
 .../dashboard/app/components/PlanningModeModal.tsx |   9 +-
 .../app/components/StandardChatSurface.tsx         |  21 ++--
 packages/dashboard/app/components/TaskChatTab.tsx  |  17 +--
 .../dashboard/app/components/ThinkingTrace.css     |   7 ++
 .../dashboard/app/components/ThinkingTrace.tsx     |  99 ++++++++++++++++++
 .../app/components/WorkflowResultsTab.tsx          |   4 +
 .../__tests__/ChatView.core-interactions.test.tsx  |  25 +++++
 .../MilestoneSliceInterviewModal.test.tsx          |  15 ++-
 .../__tests__/MissionInterviewModal.test.tsx       |  15 ++-
 .../PlanningModeModal.planning-flow.test.tsx       |  33 +++++-
 .../app/components/__tests__/TaskChatTab.test.tsx  |  16 +++
 .../__tests__/ThinkingTrace.surfaces.test.tsx      |  70 +++++++++++++
 .../components/__tests__/ThinkingTrace.test.tsx    | 115 +++++++++++++++++++++
 .../dashboard/src/__tests__/chat-manager.test.ts   |  11 ++
 packages/engine/src/__tests__/agent-logger.test.ts |  15 +++
 packages/engine/src/__tests__/streaming-delta.test.ts   |  13 +++
 packages/engine/src/execution/streaming-delta.ts   |   4 +
 packages/i18n/locales/en/app.json                  |   8 ++
 packages/i18n/locales/es/app.json                  |   8 ++
 packages/i18n/locales/fr/app.json                  |   8 ++
 packages/i18n/locales/ko/app.json                  |   8 ++
 packages/i18n/locales/pt-BR/app.json               |   8 ++
 packages/i18n/locales/zh-CN/app.json               |   8 ++
 packages/i18n/locales/zh-TW/app.json               |   8 ++
 packages/i18n/src/resources.d.ts                   |   8 ++
 32 files changed, 539 insertions(+), 55 deletions(-)

Fusion-Task-Id: FN-155

Fusion-Task-Lineage: 2aafff54-2146-4480-874b-393dc991d52b

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-23 01:36:13 +00:00
Fusion Agent
e5ac9c385a FN-152: repair local PostgreSQL test provisioning
Repair embedded PostgreSQL test-server staging and diagnostics for reliable local and worktree test runs.

- Stage native PostgreSQL runtime files before startup and manage lifecycle state safely.
- Add provisioning diagnostics, harness integration, regression tests, and troubleshooting documentation.
- Expose PostgreSQL test-server lifecycle commands through package scripts.

Files changed:
 ...server-libdir-plpgsql-and-missing-login-role.md |  15 +
 docs/testing.md                                    |  10 +
 package.json                                       |   3 +
 .../__test-utils__/pg-provisioning-diagnostics.ts  |  25 ++
 .../core/src/__test-utils__/pg-test-harness.ts     |   5 +
 .../__tests__/pg-provisioning-diagnostics.test.ts  |  30 ++
 .../__tests__/reliability-interactions/_helpers.ts |  17 +-
 scripts/__tests__/pg-test-server.test.mjs         |  73 +++++
 scripts/pg-test-server.mjs                        | 332 +++++++++++++++++++++
 9 files changed, 505 insertions(+), 5 deletions(-)

Fusion-Task-Id: FN-152

Fusion-Task-Lineage: ead05f6e-00fc-42a0-8599-bf4cb2269527

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-23 01:36:12 +00:00
Fusion Agent
d42a60ea06 FN-142: fix plan confirmation read-back and no-op routing
Make plan persistence confirmations observe the filesystem-backed prompt and let valid no-op reviews terminate cleanly.\n\n- Verify PROMPT.md by querying the task after writes across planning and review surfaces.\n- Add coverage for workspace scope, duplicate plans, failed read-backs, and mirror failures.\n- Route CLOSE_NO_OP Plan Review outcomes through an explicit terminal workflow action.\n- Document the persistence failure mode and publish a patch changeset.\n\nFiles changed:\n .changeset/fn-142-prompt-write-read-back.md        |   7 ++\n .../prompt-write-read-back-queries-the-task-row.md |  51 +++++++++++\n .../core/src/__tests__/builtin-workflows.test.ts   |  22 +++++\n packages/core/src/workflows/builtin-workflows.ts   |  12 +++\n .../src/__tests__/agent-document-tools.test.ts     | 101 ++++++++++++++++++++-\n .../__tests__/plan-prompt-write-surfaces.test.ts   |  77 +++++++++++++++\n packages/engine/src/agent-tools.ts                 |  15 ++-\n 7 files changed, 283 insertions(+), 2 deletions(-)

Fusion-Task-Id: FN-142

Fusion-Task-Lineage: adddffb3-8786-4372-996a-eefef176f31b

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-23 01:36:12 +00:00
Fusion Agent
33f4797ceb FN-126: fix inert sync-lane validation
Prevent inert synchronization lanes from bypassing merge-gate validation while preserving task-lane cache and archive lifecycle behavior.

- Reject sync-resolved lane conversions in the static validator.
- Preserve task-lane cache emissions and active-session cleanup across task mutations and archival.
- Add regression coverage, baseline updates, documentation, and a release changeset.

Files changed:
 .changeset/fn-126-inert-sync-lane.md               |   7 +
 .../a-falling-count-is-not-evidence.md             |  12 +
 .../task-lane-cache-emitter-preservation.test.ts   | 269 +++++++++++++++++++++
 .../core/src/task-store/archive-lifecycle-2.ts     |   3 +-
 packages/core/src/task-store/moves.ts              |   3 +-
 packages/core/src/task-store/task-artifacts-ops.ts |   3 +-
 packages/core/src/task-store/task-update.ts       |   3 +-
 packages/core/src/task-store/update-task-deps.ts   |   3 +-
 ...xecutor-archive-releases-active-session.test.ts |  80 ++++++
 packages/engine/src/executor.ts                    |   4 +-
 .../src/executor/executor-side-effect-hosts.ts     |   2 +-
 .../executor/is-backward-move-out-of-planning.ts   |   7 +-
 .../src/executor/task-executor-graph-facades.ts    |   2 +-
 .../engine/src/executor/task-executor-imports.ts   |   1 -
 .../engine/src/executor/wire-executor-lifecycle.ts |  18 +-
 .../check-inert-sync-lane-conversions.test.mjs     |  83 +++++--
 scripts/check-inert-sync-lane-conversions.mjs      |  19 +-
 scripts/lib/inert-sync-lane-baseline.json          |   6 +-
 18 files changed, 479 insertions(+), 46 deletions(-)

Fusion-Task-Id: FN-126

Fusion-Task-Lineage: 0c7a1a3a-9446-44f8-955d-df6c402dfd31

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-23 01:36:12 +00:00
Fusion Agent
8b681775ae FN-122: fix local workspace integration across repositories
Make multi-repository workspace merges resolve and land against the correct local integration targets.

- Add local integration-target resolution and durable merge-dispatch leasing.
- Harden workspace merge fencing, failure handling, audit logging, and CLI/dashboard controls.
- Document the workflow and add regression coverage for workspace integration and task-log deduplication.
- Complete the CLI engine mock for the new public lease export.

Files changed:
 .changeset/fn-122-local-workspace-integration.md   |   7 +
 docs/architecture.md                               |   1 +
 docs/dashboard-guide.md                            |   4 +
 docs/settings-reference.md                         |   4 +-
 docs/testing.md                                    |  10 ++
 .../task-command-github-import-tracking.test.ts    |   2 +
 packages/cli/src/commands/__tests__/task.test.ts   |   1 +
 packages/cli/src/commands/dashboard.ts             |  15 +-
 packages/cli/src/commands/task.ts                  |  14 +-
 .../__tests__/postgres/task-log-dedupe.pg.test.ts  |  30 ++++
 packages/core/src/index.ts                         |   2 +-
 packages/core/src/store.ts                         |   5 +-
 packages/core/src/task-store/audit-ops.ts          |  38 ++++
 packages/core/src/types.ts                         |   2 +
 packages/core/src/types/task/task-core.ts          |  16 +-
 packages/core/src/types/task/task-log.ts           |   2 +
 .../app/components/WorkspaceWorktreesSummary.tsx   |  15 +-
 .../settings/sections/WorktreesSection.tsx         |   3 +-
 .../engine/src/__tests__/workspace-e2e.test.ts     | 198 ++++++++++++++++-----
 .../__tests__/workspace-integration-target.test.ts |  75 ++++++++
 .../src/__tests__/workspace-merger-lease.test.ts   |  42 ++++-
 packages/engine/src/index.ts                       |   6 +
 packages/engine/src/merge/merger-ai.ts             | 152 +++++++++++-----
 packages/engine/src/merge/workspace-fence-ref.ts   |  17 +-
 .../src/merge/workspace-integration-target.ts      |  87 +++++++++
 .../engine/src/merge/workspace-land-failure.ts     |   6 +-
 .../src/merge/workspace-merge-dispatch-lease.ts    |  54 ++++++
 packages/engine/src/project-engine.ts              |  25 +++
 28 files changed, 715 insertions(+), 118 deletions(-)

Fusion-Task-Id: FN-122
Fusion-Task-Lineage: 9364bba4-cebc-44e7-b2ae-60967fbc025c
Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-23 01:36:12 +00:00
Fusion Agent
0b4dbd219b FN-125: prevent workflow agents from creating tasks
Stop workflow executor agents from creating ordinary tasks while preserving explicit self-spawned dependency handling.

- Gate task creation by session identity and execution context.
- Add self-spawned dependency support, validation, and persistence coverage.
- Update agent prompts, tools, documentation, and CLI integration.
- Add a published-package changeset.

Files changed:
 .changeset/fn-125-removal.md                       |  7 +++
 docs/agents.md                                     |  2 +-
 docs/dashboard-guide.md                            |  2 +-
 docs/settings-reference.md                         |  6 +-
 .../cli/skill/fusion/references/engine-tools.md    | 10 ++--
 .../extension-task-execution-task-creation.test.ts | 70 ++++++++++++++++++++++
 packages/cli/src/extension.ts                      | 49 +++++++++++++--
 .../postgres/store-self-spawned-dep.pg.test.ts     | 56 +++++++++++++++++
 .../src/__tests__/self-spawned-dependency.test.ts  | 18 ++++++
 .../__tests__/session-identity-registry.test.ts    | 14 ++++-
 packages/core/src/agents/agent-prompts.ts          | 27 ++++-----
 .../src/agents/task-execution-task-creation.ts     | 19 ++++++
 packages/core/src/index.ts                         |  7 +++
 packages/core/src/session-identity-registry.ts     |  7 +++
 packages/core/src/store.ts                         |  2 +
 packages/core/src/task-store/errors.ts             | 21 +++++++
 packages/core/src/task-store/task-update.ts        | 10 +++-
 packages/core/src/task-store/update-task-deps.ts   | 12 +++-
 .../__tests__/ephemeral-task-create-gate.test.ts   | 18 +++---
 .../src/__tests__/executor-review-verdicts.test.ts |  3 +-
 packages/engine/src/agent-tools.ts                 |  4 ++
 packages/engine/src/agents/agent-runtime.ts        |  2 +
 .../engine/src/execution/step-session-executor.ts  | 15 ++---
 .../executor/attempt-executor-verification-fix.ts  |  1 +
 .../engine/src/executor/create-spawn-agent-tool.ts |  1 +
 .../engine/src/executor/create-task-done-tool.ts   | 18 +++++-
 .../engine/src/executor/create-task-update-tool.ts | 12 +++-
 .../engine/src/executor/execute-workflow-step.ts   |  1 +
 packages/engine/src/executor/run-implementation.ts | 18 +++---
 packages/engine/src/executor/system-prompt.ts      | 21 +++----
 packages/engine/src/executor/task-add-dep-tool.ts  | 14 ++++-
 packages/engine/src/pi.ts                          | 15 ++++-
 32 files changed, 401 insertions(+), 81 deletions(-)

Fusion-Task-Id: FN-125

Fusion-Task-Lineage: da3d69f6-c9cb-45fd-8691-3dfaf7007514
Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-23 01:36:12 +00:00
Fusion Agent
35f0247028 FN-115: restore task-card detail clicks
Restore native task-card activation while preserving intentional board panning.

- Start board panning only after horizontal intent is established.
- Preserve stationary card clicks and add regression coverage for detail locators and touch resizing.
- Document the restored interaction behavior and publish a patch changeset.

Files changed:
 .changeset/fn-115-restore-board-card-click.md      |   7 ++
 docs/dashboard-guide.md                            |   8 +-
 packages/dashboard/app/components/Board.tsx        |   9 +-
 .../app/components/__tests__/Board.test.tsx        |  47 ++++++---
 .../__tests__/board-card-detail-locators.test.tsx  | 108 +++++++++++++++++++++
 .../app/hooks/__tests__/useBoardMousePan.test.tsx  |  75 ++++++++++++++
 packages/dashboard/app/hooks/useBoardMousePan.ts   |  39 ++++++--
 .../app/task-modal-touch-resize-e2e-fixture.tsx    |  20 +++-
 .../task-modal-touch-resize-browser.test.ts        |  75 +++++++++++++-
 9 files changed, 354 insertions(+), 34 deletions(-)

Fusion-Task-Id: FN-115

Fusion-Task-Lineage: 158de270-2a5c-4590-8347-a3c4d6a5db03

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-23 01:36:12 +00:00
Fusion Agent
10c399d01e FN-120: fix workspace review evidence and landing recovery
Harden workspace review evidence and automatic landing recovery across workflow execution and merge paths.

- Preserve per-repository review evidence and reroute recoverable workspace review failures.
- Improve workflow lifecycle validation, continuation handling, and automatic recovery for workspace landing.
- Add regression coverage and document the updated workspace behavior.

Files changed:
 .changeset/fn-120-workspace-review-landing.md      |   7 ++
 docs/architecture.md                               |   4 +
 ...e-empty-merge-boundary-finalization-livelock.md |   4 +
 docs/testing.md                                    |   4 +
 docs/workflow-steps.md                             |   4 +
 docs/workspaces.md                                 |   6 +
 .../__tests__/builtin-coding-workflow-ir.test.ts   |  11 +-
 ...workspace-worktrees-concurrent-merge.pg.test.ts |  20 +++
 packages/core/src/db/legacy-adoption.ts            |   4 +
 packages/core/src/store.ts                         |   5 +-
 .../task-store/async/async-workflow-workitems.ts   |  21 ++++
 packages/core/src/task-store/task-mutation-ops.ts  |  20 ++-
 .../src/task-store/workflow-workitems-ops-2.ts     |   6 +-
 .../workflows/builtin-coding-ideas-workflow-ir.ts  |   9 +-
 .../src/workflows/builtin-coding-workflow-ir.ts    |  20 ++-
 .../builtin-stepwise-coding-workflow-ir.ts         |  21 +++-
 ...tin-stepwise-final-review-coding-workflow-ir.ts |  13 +-
 .../src/workflows/workflow-lifecycle-validation.ts |  28 ++++-
 .../__tests__/builtin-workflows-lifecycle.test.ts  |   4 +
 .../engine/src/__tests__/project-engine.test.ts    |  79 ++++++++++++
 .../graph-node-missing-worktree-recovery.test.ts   |  32 ++++-
 .../src/__tests__/reviewer-workspace.test.ts       |   2 +
 .../src/__tests__/task-pipeline-smoke.test.ts      |  10 +-
 .../src/__tests__/workflow-task-runtime.test.ts    |  10 +-
 .../engine/src/__tests__/workspace-e2e.test.ts     |  29 +++++
 .../engine/src/__tests__/workspace-merger.test.ts  |   4 +-
 .../__tests__/workspace-review-evidence.test.ts    |  58 +++++++++
 packages/engine/src/execution/reviewer.ts          |   2 +
 .../create-authoritative-workflow-seams.ts         |  59 +++++----
 .../engine/src/executor/execute-workflow-graph.ts  |  29 ++++-
 packages/engine/src/executor/graph-failure-pure.ts |   6 +
 .../engine/src/executor/handle-graph-failure.ts    |  26 ++++
 ...-unusable-worktree-graph-failure-to-recovery.ts |  22 +++-
 .../engine/src/executor/run-graph-custom-node.ts   |   4 +-
 .../src/executor/workspace-review-per-repo.ts      |  55 +++++----
 packages/engine/src/merge/merger-ai.ts             | 137 ++++++++++-----------
 .../engine/src/merge/workspace-review-reroute.ts   |  52 ++++++++
 packages/engine/src/project-engine.ts              |  47 +++++++
 .../self-healing/auto-recover-worktree-session.ts  |   2 +-
 .../src/workflows/workflow-graph-executor.ts       |  28 ++++-
 .../engine/src/workflows/workflow-merge-nodes.ts   |   6 +-
 .../src/worktree/workspace-review-evidence.ts      | 110 +++++++++++++++++
 .../engine/src/worktree/worktree-acquisition.ts    |  24 +++-
 43 files changed, 874 insertions(+), 170 deletions(-)
Fusion-Task-Id: FN-120
Fusion-Task-Lineage: 61c36613-89bd-44ca-8676-de77662bf53e
Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-23 01:36:12 +00:00
Fusion Agent
c47d555123 FN-116: open multiple Quick Chats from conversations
Add in-app Quick Chat windows that open exact Direct conversation snapshots without disturbing the source chat.

- Add pop-out window state, rendering, and close controls for multiple Quick Chats.
- Add context-menu launching and isolated session/preferences handling.
- Add localized labels, dashboard documentation, regression tests, and a release changeset.

Files changed:
 .changeset/fn-116-multiple-quick-chats.md          |  7 +++
 docs/dashboard-guide.md                            |  2 +
 packages/dashboard/app/App.tsx                     | 34 ++++++++++++--
 packages/dashboard/app/components/ChatView.tsx     | 36 +++++++++++++--
 .../app/components/PoppedOutChatWindows.tsx        | 53 ++++++++++++++++++++++
 .../__tests__/ChatView.core-contracts.test.tsx     | 15 ++++++
 .../__tests__/PoppedOutChatWindows.test.tsx        | 25 +++++++++
 .../app/components/dashboard/MainContent.tsx       |  2 +
 .../dashboard/app/components/dashboard/types.ts    |  2 +
 .../app/components/overflowViewRegistry.tsx        |  3 ++
 .../app/components/useRightDockController.tsx      |  3 ++
 .../app/hooks/__tests__/usePoppedOutChats.test.ts  | 24 +++++++++
 packages/dashboard/app/hooks/useChat.ts            | 42 ++++++++++++++--
 packages/dashboard/app/hooks/usePoppedOutChats.ts  | 42 +++++++++++++++++
 packages/i18n/locales/en/app.json                  |  1 +
 packages/i18n/locales/es/app.json                  |  1 +
 packages/i18n/locales/fr/app.json                  |  1 +
 packages/i18n/locales/ko/app.json                  |  1 +
 packages/i18n/locales/pt-BR/app.json               |  1 +
 packages/i18n/locales/zh-CN/app.json               |  1 +
 packages/i18n/locales/zh-TW/app.json               |  1 +
 packages/i18n/src/resources.d.ts                   | 38 ++++++++++++++---
 22 files changed, 313 insertions(+), 22 deletions(-)

Fusion-Task-Id: FN-116

Fusion-Task-Lineage: 486e3092-c4db-4e50-a9df-f2adfeb6fddf

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-23 01:35:06 +00:00
Fusion Agent
2430ce69b0 FN-112: capture workspace merge evidence from task worktrees
Capture workspace merge evidence from immutable acquisition baselines to persisted task branches so real linked task worktrees land reviewed changes reliably.

- Compare review fingerprints and landing ranges against the persisted task branch rather than the live worktree HEAD.
- Add linked-task-worktree regression coverage for per-repository landing proof and exactly-once finalization.
- Document the regression and publish the workspace merge fix in a patch changeset.

Files changed:
 .../fn-112-workspace-task-worktree-evidence.md     |  7 ++++
 docs/architecture.md                               |  1 +
 ...e-empty-merge-boundary-finalization-livelock.md |  8 +++-
 .../engine/src/__tests__/_workspace-fixture.ts     | 15 ++++++++
 .../engine/src/__tests__/workspace-e2e.test.ts     | 31 ++++++++++++---
 .../__tests__/workspace-merger-scope-gates.test.ts |  2 +-
 .../engine/src/__tests__/workspace-merger.test.ts  | 45 +++++++++++++++++++++-
 packages/engine/src/merge/merger-ai.ts             | 29 ++++++++++++--
 8 files changed, 125 insertions(+), 13 deletions(-)

Fusion-Task-Id: FN-112

Fusion-Task-Lineage: 66e8498e-13f2-461b-ae38-bf750383115b

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-23 01:35:06 +00:00
Fusion Agent
294e826ea0 FN-110: integrate Ctrl+F search into chat lists and conversations
Add keyboard-driven search across chat navigation and conversation content.

- Add Ctrl+F search controls for chat lists and conversation messages.
- Support result navigation, highlighting, and localized labels across all dashboard locales.
- Update chat surfaces, documentation, changeset metadata, and regression coverage.

Files changed:
 .changeset/fn-110-chat-find.md                     |   7 +
 docs/dashboard-guide.md                            |   5 +
 packages/dashboard/app/App.tsx                     |   1 +
 packages/dashboard/app/components/ChatView.css     |  41 +++++
 packages/dashboard/app/components/ChatView.tsx     | 162 +++++++++++++++--
 .../dashboard/app/components/CliChatSurface.tsx    |   5 +-
 .../dashboard/app/components/StandardChatSurface.tsx |  14 +-
 .../__tests__/ChatView.content-search.test.tsx     | 197 ++++++++++++++++++++-
 packages/dashboard/vitest.config.ts                |   1 +
 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               |   7 +
 packages/i18n/locales/zh-CN/app.json               |   7 +
 packages/i18n/locales/zh-TW/app.json               |   7 +
 packages/i18n/src/resources.d.ts                   |   7 +
 17 files changed, 467 insertions(+), 22 deletions(-)

Fusion-Task-Id: FN-110

Fusion-Task-Lineage: 33ef1888-d250-489a-80b8-f3c5069da532

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-23 01:35:06 +00:00
Fusion Agent
eab7635f83 FN-109: enable task-card board panning
Allow users to pan the desktop and tablet board from noninteractive task-card surfaces without disrupting controls or mobile scrolling.

- Start horizontal panning from eligible task-card bodies and text while preserving native controls and editing behavior.
- Wire board pan state and cursor styling across live board roots while keeping mobile snap and touch scrolling unchanged.
- Add regression coverage, documentation updates, and a patch changeset.

Files changed:
 .changeset/fn-109-board-card-pan.md                |  7 ++
 docs/dashboard-guide.md                            |  5 +-
 docs/task-management.md                            |  4 +-
 packages/dashboard/app/components/Board.css        |  7 +-
 packages/dashboard/app/components/Board.tsx        |  8 +-
 .../app/components/__tests__/Board.test.tsx        | 98 ++++++++++++++++------
 .../app/hooks/__tests__/useBoardMousePan.test.tsx  | 47 ++++++++++-
 packages/dashboard/app/hooks/useBoardMousePan.ts   | 12 +--
 8 files changed, 146 insertions(+), 42 deletions(-)

Fusion-Task-Id: FN-109

Fusion-Task-Lineage: 456bd9d3-9767-4b82-9f99-f191abc44b18

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-23 01:35:06 +00:00
Phil Larson
8fe69ac5c8 test: align workspace callback fixtures and gate (#3500)
## Summary
- update workspace worktree test stores for callback-based entry
mutations
- preserve validation, existing-entry, and singular-routing behavior in
the fakes
- canonicalize the macOS worktree path fixture before comparing
persisted state
- remove the stale inert-seam exception left after the review-column
callback became fully supplied

## Test plan
- `pnpm --filter @fusion/engine exec vitest run
src/__tests__/node-worktree-isolation.test.ts
src/__tests__/workspace-root-worktree-routing.test.ts
src/__tests__/worktree-acquisition.test.ts --silent=passed-only
--reporter=dot`
- `pnpm --filter @fusion/engine exec vitest run
src/__tests__/worktree-acquisition-workspace.test.ts
--silent=passed-only --reporter=dot`
- Directly changed engine workspace suite with PostgreSQL-dependent
blocks skipped: 338 passed, 4 skipped
- `pnpm --filter @fusion/engine typecheck`
- `node scripts/check-inert-flag-seams.mjs`
- `node --test scripts/__tests__/check-inert-flag-seams.test.mjs`
- `pnpm lint`
- `pnpm check:changesets`


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

* **Bug Fixes**
* Improved recovery of orphaned worktrees by consistently using
canonical paths.
* Strengthened worktree assignment and updates to preserve existing
entries and prevent stale task state.
* Improved synchronization and validation during concurrent workspace
updates.
* Refined self-healing recovery so branch metadata changes only when
necessary.
* Improved handling of stalled tasks, retry exhaustion, and clearing
obsolete worktree or branch information.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-08-21 19:31:08 -07:00
Timoteo
47dd536e36 fix: expose session.subscribe on ACP runtime sessions for engine workflow steps (#3501)
## Summary

Fixes the `session.subscribe is not a function` crash that breaks every
engine workflow step (Plan Review, Code Review) executed by an ACP agent
(Hermes ACP, Prime, Grok).

Introduced by the ACP custom-tools bridge (#3476) in the sense that it
made the gap reachable: ACP sessions stream through the bridging client
handler onto `callbacks` and never exposed the pi-style `subscribe()`
that the engine's AgentSession contract promises. Two production call
sites call it unconditionally:

- `packages/engine/src/executor/execute-workflow-step.ts` (workflow
steps — Plan Review / Code Review)
- `packages/engine/src/pi.ts` fallback wiring (`wireFallbackHooks`,
`promptableSession.subscribe`)

(`reviewer.ts` guards with `typeof session.subscribe === "function"`;
the other paths do not.)

Real-world symptom (verified on 0.77.0-beta.6 with a Hermes ACP agent):
every Plan Review attempt fails before producing a verdict:

```
[pre-merge] Workflow step failed: Plan Review
outcome: Plan Review failed before producing a verdict: session.subscribe is not a function
Plan Review provider retry budget exhausted
```

## Fix

Fix at the seam rather than guarding every call site forever:

- `AcpRuntimeAdapter.createSession` wraps the raw callbacks so each
forwarded text/thinking/tool event is **also** replayed to subscribers
as the pi-shaped event consumers parse (`message_update` +
`assistantMessageEvent.{text_delta,thinking_delta}`,
`tool_execution_start/end`)
- exposes `session.subscribe(handler)` returning an unsubscribe
function; dispose clears subscribers
- merges engine `taskEnv` into the subprocess env behind the existing
allow-list trust boundary (KTD6b preserved — only allow-listed keys
forward, task values win)
- original callback delivery unchanged; subscriber exceptions are
isolated so a faulty consumer can't break the streaming bridge

## Testing

- New regression tests in `runtime-adapter.test.ts` against the real
echo-agent fixture (`ACP_FIXTURE_RICH_PROMPT=1`):
  - subscribe replays text/thinking/tool events as pi-shaped events
  - unsubscribe stops delivery
  - dual delivery: original `onText` callback AND subscriber both fire
- Full plugin suite: 255 passed (21 files)
- `tsc --noEmit` clean for the plugin

- changeset for `@runfusion/fusion` (patch, bugfix)

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

* **New Features**
  * Added session event subscriptions with unsubscribe support.
* Streamed text, thinking, and tool updates are replayed in a consistent
event format.
* Added support for task-specific environment values when launching
subprocesses.

* **Bug Fixes**
* Ensured streamed events reach both existing callbacks and subscribers.
  * Isolated subscriber errors so they do not interrupt other handlers.
  * Session cleanup now stops further subscription notifications.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-08-21 19:30:31 -07:00
XiaoHuo888-hue
41c23adf15 feat: add OrcaRouter as a named model provider (#3502)
## Summary

Adds [OrcaRouter](https://www.orcarouter.ai) as a first-class named
model provider, mirroring the existing OpenRouter integration.
OrcaRouter is an OpenAI-compatible gateway —
`https://api.orcarouter.ai/v1` — that routes to models from many
providers (Anthropic, OpenAI, DeepSeek, Google, Grok, Qwen, Zhipu, and
more) through a single API key. It also runs gateway-level, zero-trust
security for AI agents on the same endpoint — screening every
prompt/response and governing every tool call on a default-deny basis,
with no application code changes.

What this PR does:

- **Catalog sync**: `syncStartupModels` now fetches the OrcaRouter
`/v1/models` catalog at startup (gated by a new `orcarouterModelSync`
global setting, default enabled) and registers an `openai-completions`
provider at `https://api.orcarouter.ai/v1`. The key resolves from the
`ORCAROUTER_API_KEY` environment variable.
- **Auth + onboarding**: OrcaRouter appears in the API-key auth catalog,
onboarding setup copy + key hints, and quick-start provider list (key
format `sk-orca-...`, dashboard link to `https://www.orcarouter.ai`).
- **Icons**: New OrcaRouter brand mark (`OrcaRouterIcon`) with a
dedicated color token, wired into `ProviderIcon` and
`inferProviderIconKey` so `orcarouter/...` model ids render the brand
mark everywhere.
- **Settings**: Startup-sync toggle under **Settings → Global Models**,
settings search entry, and save-split allowlists.
- **Docs + i18n**: `docs/settings-reference.md` / `docs/storage.md` rows
and `en` + secondary-locale catalog keys.
- **Changeset**: `.changeset/add-orcarouter-provider.md` (minor).

Disclosure: I'm an engineer on the OrcaRouter team.

## Test plan

- `pnpm --filter @runfusion/fusion exec vitest run
src/commands/__tests__/startup-model-sync.test.ts` — 18 passed
- `pnpm --filter @fusion/core exec vitest run
src/__tests__/settings-parity.test.ts` — 80 passed
- `pnpm --filter @fusion/dashboard exec vitest run
app/components/__tests__/ProviderIcon.test.tsx` — 115 passed
- `pnpm --filter @fusion/dashboard exec vitest run
app/components/__tests__/AuthenticationSection.test.tsx
app/components/__tests__/ModelOnboardingModal.test.tsx` — 222 passed
- `tsc --noEmit` in `@fusion/cli`, `@fusion/core`, `@fusion/dashboard`,
`@fusion/engine` — all clean
- `pnpm lint` on changed files — clean
- `pnpm check:changesets` — clean
- **L3 live test**: exercised the production `syncStartupModels` path
against the live OrcaRouter API — catalog sync registered 209 models and
a real chat completion returned **HTTP 200** (`finish_reason: "stop"`).

Note: `pnpm i18n:status` reports pre-existing Jira key-parity gaps in
the `app.json` catalogs on a clean checkout (unrelated to this change);
the `common.json` catalogs touched here are in parity.


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

## Summary by CodeRabbit

- **New Features**
  - Added OrcaRouter as a built-in OpenAI-compatible provider.
- Added API-key setup, validation, authentication, onboarding guidance,
provider branding, and model catalog visibility.
- Added automatic startup synchronization of OrcaRouter models, enabled
by default.
  - Added a global setting to enable or disable model synchronization.
- **Documentation**
  - Documented the new synchronization setting and its configuration.
- **Localization**
  - Added OrcaRouter setup and usage text across supported languages.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

Signed-off-by: XiaoHuo888-hue <jinhao.song@myflashcloud.com>
Co-authored-by: XiaoHuo888-hue <jinhao.song@myflashcloud.com>
Co-authored-by: Claude <noreply@anthropic.com>
2026-08-21 19:30:08 -07:00
gsxdsm
5e8d7ae9ae FN-9190: Add invalid concurrency resolver regression coverage
Cover invalid persisted maxConcurrent values across both public resolver entry points.

- Add a shared matrix for zero, negative, non-finite, missing, and wrong-type values.
- Verify effective ceilings remain finite and positive after fallback resolution.
- Preserve binding and disabled worktree-limit behavior for every invalid value.

Files changed:
 .../concurrency-capacity-resolver.test.ts          | 68 +++++++++++++++++++++-
 1 file changed, 66 insertions(+), 2 deletions(-)

Fusion-Task-Id: FN-9190

Fusion-Task-Lineage: aeb0daad-8f03-4835-a218-f45448c66c33

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-21 17:22:17 -07:00
gsxdsm
47de350fca FN-9189: expand dashboard concurrency callback coverage
Expand post-landing QA coverage for dashboard concurrency settings callbacks.

- Exercise unset, configured, and worktree-bound settings across all TUI callback paths.
- Verify pause callbacks use project defaults while the task store is still initializing.
- Extend the dashboard harness with live settings events and a startup barrier.

Files changed:
 .../dashboard-concurrency-settings.test.ts         | 104 ++++++++++++++++++---
 1 file changed, 92 insertions(+), 12 deletions(-)

Fusion-Task-Id: FN-9189

Fusion-Task-Lineage: c373954a-7316-47d2-9821-75e0d34b22d4

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-21 17:15:20 -07:00
gsxdsm
a010dc42bf FN-9185: enforce effective task concurrency limits
Unify task concurrency around authoritative project settings and expose the effective admission ceiling.

- Resolve maxConcurrent and maxWorktrees through a shared core capacity model with consistent defaults.
- Apply the effective limit across scheduler, engine, runtime, CLI, API, and project-manager admission paths.
- Surface configured and binding concurrency values in dashboard controls, status views, diagnostics, and documentation.
- Add regression coverage for settings persistence, routing, scheduling, UI surfaces, and worktree-bound capacity.

Files changed:
 .../fn-9185-max-concurrent-effective-limit.md      |   7 +
 docs/architecture.md                               |   8 +-
 docs/cli-reference.md                              |   1 +
 docs/dashboard-guide.md                            |   4 +
 docs/settings-reference.md                         |   4 +-
 .../dashboard-concurrency-settings.test.ts         | 166 +++++++++++++++++++++
 packages/cli/src/commands/dashboard.ts             |  28 ++--
 packages/cli/src/commands/onboard.ts               |   4 +-
 packages/cli/src/project-resolver.ts               |  27 +++-
 .../concurrency-capacity-resolver.test.ts          |  46 ++++++
 .../src/__tests__/worktree-capacity-limit.test.ts  |  51 +++++--
 packages/core/src/index.gate.ts                    |   2 +-
 packages/core/src/index.ts                         |   2 +-
 packages/core/src/workflows/workflow-capacity.ts   |  61 ++++++--
 packages/dashboard/app/App.tsx                     |   2 +
 .../app/__tests__/concurrency-ui-surfaces.test.tsx | 155 +++++++++++++++++++
 .../scheduling-effective-concurrency.test.tsx      |  48 ++++++
 packages/dashboard/app/api/projects/projects.ts    |  10 +-
 packages/dashboard/app/api/settings/settings.ts    |  14 +-
 packages/dashboard/app/components/Board.tsx        |   7 +-
 packages/dashboard/app/components/Column.tsx       |  13 +-
 .../dashboard/app/components/EngineControlMenu.tsx |  17 ++-
 .../command-center/CommandCenterControls.tsx       |  17 ++-
 .../components/command-center/areas/TeamArea.tsx   |  10 +-
 .../app/components/dashboard/MainContent.tsx       |   3 +
 .../dashboard/app/components/dashboard/types.ts    |   2 +
 .../settings/sections/SchedulingSection.tsx        |  12 +-
 packages/dashboard/app/hooks/useAppSettings.ts     |   9 +-
 packages/dashboard/app/hooks/useExecutorStats.ts   |  10 +-
 .../app/utils/__tests__/worktreeGrouping.test.ts   |  12 +-
 packages/dashboard/app/utils/worktreeGrouping.ts   |   8 +-
 packages/dashboard/src/routes.ts                   |   6 +-
 ...concurrency-authoritative-source-routes.test.ts |  90 +++++++++++
 .../register-config-mcp-pi-settings-routes.test.ts |  29 +++-
 .../register-config-mcp-pi-settings-routes.ts      |  17 ++-
 .../src/routes/register-project-routes.ts          |  14 +-
 .../concurrency-effective-limit-surfaces.test.ts   |  34 +++++
 .../src/__tests__/project-engine-manager.test.ts   |  19 +++
 .../__tests__/scheduler-workflow-cutover.test.ts   |   6 +-
 packages/engine/src/concurrency/concurrency.ts     |  23 ++-
 packages/engine/src/concurrency/hybrid-executor.ts |  35 ++++-
 .../engine/src/executor/create-spawn-agent-tool.ts |   8 +-
 packages/engine/src/project-engine-manager.ts      |  50 +++++--
 packages/engine/src/project-engine.ts              |  12 +-
 packages/engine/src/project/project-manager.ts     |  26 +++-
 packages/engine/src/runtimes/in-process-runtime.ts |  12 +-
 packages/engine/src/scheduler.ts                   |  31 ++--
 packages/engine/src/triage.ts                      |  15 +-
 48 files changed, 1028 insertions(+), 159 deletions(-)

Fusion-Task-Id: FN-9185
Fusion-Task-Lineage: 6294456c-d417-40a5-a5fa-2035c6b964a6
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-21 10:57:44 -07:00
gsxdsm
74dacd0758 FN-9188: respect externally managed updates
Managed deployments can now suppress self-update offers while unsupported installs receive actionable guidance.

- Add an install-level environment policy for externally managed updates across CLI, server, and dashboard surfaces.
- Detect missing npm shell failures and replace raw stderr with deployment-aware remediation.
- Document managed-update behavior and add regression coverage for checks, installs, automation, and UI actions.

Files changed:
 .changeset/fn-9188-managed-updates.md              |  7 +++
 docs/architecture.md                               |  6 +--
 docs/cli-reference.md                              |  2 +-
 docs/dashboard-guide.md                            |  2 +-
 docs/settings-reference.md                         |  4 +-
 packages/cli/src/__tests__/update-cache.test.ts    | 11 ++++-
 .../update-command-externally-managed.test.ts      | 39 +++++++++++++++
 packages/cli/src/commands/update.ts                | 42 +++++++++++-----
 packages/cli/src/update-cache.ts                   |  3 +-
 .../core/src/__tests__/update-management.test.ts   | 15 ++++++
 packages/core/src/config/update-management.ts      | 21 ++++++++
 packages/core/src/index.gate.ts                    |  5 ++
 packages/core/src/index.ts                         |  5 ++
 packages/dashboard/app/api/client/health.ts        |  3 ++
 .../dashboard/app/components/SettingsModal.tsx     |  4 ++
 .../__tests__/SettingsModal.general.test.tsx       | 20 ++++++++
 .../__tests__/UpdateAvailableBanner.test.tsx       | 26 ++++++++++
 .../components/__tests__/settings-mobile.test.tsx  | 24 +++++++++-
 .../__tests__/SystemControlsArea.test.tsx          | 20 ++++++++
 .../command-center/areas/SystemControlsArea.tsx    |  6 +++
 .../app/hooks/__tests__/useUpdateCheck.test.ts     |  1 +
 packages/dashboard/app/hooks/useUpdateCheck.ts     |  3 +-
 .../dashboard/src/__tests__/auto-update.test.ts    | 10 ++++
 .../dashboard/src/__tests__/update-check.test.ts   | 56 ++++++++++++++++++++++
 packages/dashboard/src/auto-update.ts              |  9 +++-
 .../__tests__/register-update-check-routes.test.ts | 24 +++++++++-
 .../src/routes/register-update-check-routes.ts     | 47 +++++++++++++++++-
 packages/dashboard/src/update-check.ts             | 50 ++++++++++++++++---
 28 files changed, 433 insertions(+), 32 deletions(-)

Fusion-Task-Id: FN-9188

Fusion-Task-Lineage: 60b114b9-8bf7-434f-9d26-0c954aea45ba

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-21 10:18:45 -07:00
gsxdsm
1a3230ff93 FN-9186: Bound no-progress self-healing requeues
Bound no-progress self-healing retries so persistent failures stop consuming agent sessions.

- Persist a three-attempt retry budget with exponential backoff and an idempotent terminal sentinel.
- Prevent restart and wedge recovery paths from reopening exhausted failures.
- Emit bounded retry and exhaustion audit events with regression coverage and operator documentation.

Files changed:
 .changeset/fn-9186-no-progress-requeue-budget.md   |   7 ++
 AGENTS.md                                          |   1 +
 docs/architecture.md                               |   2 +
 docs/run-audit.md                                  |   2 +
 docs/self-healing-backward-move-audit.md           |   2 +-
 .../src/__tests__/default-workflow-hooks.test.ts   |  18 +++
 .../non-executor-run-audit-sink-health.test.ts     |  43 +++++++
 .../__tests__/restart-recovery-coordinator.test.ts |  14 +++
 ...self-healing-no-progress-requeue-budget.test.ts | 131 +++++++++++++++++++++
 packages/engine/src/__tests__/self-healing.test.ts |  59 ++++++----
 .../src/healing/no-progress-requeue-budget.ts      |   7 ++
 .../src/healing/restart-recovery-coordinator.ts    |  10 +-
 .../__tests__/task-wedge-notification.test.ts      |  10 +-
 .../src/notification/task-wedge-notification.ts    |   9 ++
 packages/engine/src/self-healing.ts                |  95 +++++++++++++--
 packages/engine/src/util/run-audit.ts              |   3 +
 16 files changed, 378 insertions(+), 35 deletions(-)

Fusion-Task-Id: FN-9186

Fusion-Task-Lineage: 06d29a60-b6ad-4506-a3c1-f3c52411946a

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-21 09:21:52 -07:00
gsxdsm
96ad20c93d FN-9187: Bound auto-archive failure retries
Prevent stale done-task retention from retrying permanently blocked archives forever.

- Pre-filter tasks with live lineage children while honoring renamed archive lanes.
- Bound repeated archive failures by reason and reset budgets when candidates or failure classes change.
- Emit one bounded audit event and operator-facing task log when retries are exhausted.
- Cover retry, escalation, reset, lineage, and renamed-lane behavior and document the retention contract.

Files changed:
 .changeset/fn-9187-bounded-auto-archive.md         |   7 ++
 AGENTS.md                                          |   1 +
 docs/architecture.md                               |   2 +
 docs/run-audit.md                                  |   1 +
 docs/settings-reference.md                         |   2 +-
 .../live-lineage-children-lanes.pg.test.ts         |   3 +-
 .../core/src/task-store/archive-lifecycle-2.ts     |  11 +-
 packages/engine/src/__tests__/self-healing.test.ts | 117 +++++++++++++++++++++
 .../engine/src/run-audit/run-audit-catalogue.ts    |   3 +
 packages/engine/src/self-healing.ts                |  93 +++++++++++++++-
 packages/engine/src/util/run-audit.ts              |   2 +
 11 files changed, 231 insertions(+), 11 deletions(-)

Fusion-Task-Id: FN-9187

Fusion-Task-Lineage: cc9a6adc-4b6d-44da-a84b-5633d4b80a10

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-21 08:25:18 -07:00
Phil Larson
5ec47e58de fix: resolve late-acquire lifecycle and plugin API drift (#3492)
## Summary
- resolves renamed review, complete, and archived workflow columns
before admitting late workspace repositories
- avoids workflow resolution when an existing repository or landing
state already decides the result
- syncs the bundled dependency-graph plugin with the current TaskCard
and scoped-storage APIs

## Test plan
- `pnpm --filter @fusion/engine exec vitest run
src/__tests__/workspace-add-repo-midflight.test.ts --silent=passed-only
--reporter=dot`
- `pnpm --filter @fusion/engine typecheck`
- `pnpm --filter @fusion-plugin-examples/dependency-graph test`
- `pnpm --filter @fusion-plugin-examples/dependency-graph build`
- `pnpm check:plugin-interop-drift`
- `pnpm check:lifecycle-columns`
- `pnpm check:changesets`
- `pnpm lint`
- `pnpm build`

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

* **Bug Fixes**
* Late workspace repository acquisition now respects renamed review,
complete, and archived workflow columns.
* Tasks entering a blocked lifecycle state during acquisition are
refused safely.
* Existing safeguards for merge status, landed worktrees, legacy
terminal identifiers, and existing worktrees remain supported.
* Concurrent acquisition attempts now avoid duplicate worktrees and
preserve task updates reliably.

* **Improvements**
* Improved dependency-graph dashboard interoperability with current
task-card and storage APIs.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-08-21 07:48:23 -07:00
gsxdsm
704d74c9ba chore(release): v0.77.0-beta.6
Version bump via changesets.
2026-08-21 07:44:32 -07:00
Fusion Agent
c91e5ce42d FN-106: prevent workspace finalization livelock
Repair workspace merge-boundary finalization so empty repository sets cannot loop indefinitely.

- Track workspace merge readiness and durable per-repository obligations.
- Gate landing and recovery on scope, blockers, leases, and checkout ownership.
- Preserve remediation state, add recovery paths, documentation, and regression coverage.

Files changed:
 .../fn-106-workspace-finalization-livelock.md      |  7 ++
 docs/architecture.md                               |  6 ++
 ...e-empty-merge-boundary-finalization-livelock.md | 40 ++++++++++
 docs/workflow-steps.md                             |  4 +
 packages/cli/src/commands/__tests__/task.test.ts   |  2 +
 ...workspace-worktrees-concurrent-merge.pg.test.ts | 23 ++++++
 packages/core/src/store.ts                         |  9 ++-
 packages/core/src/task-store/task-mutation-ops.ts  | 49 +++++++++++-
 packages/core/src/task-store/task-update.ts        |  6 +-
 packages/core/src/types/task/task-core.ts          |  7 ++
 .../engine/src/__tests__/executor-test-helpers.ts  |  6 ++
 .../executor-workspace-main-checkout-guard.test.ts |  8 +-
 .../executor-workspace-session-cwd.test.ts         | 37 +++++++++
 .../engine/src/__tests__/project-engine.test.ts    | 14 +++-
 .../src/__tests__/reviewer-workspace.test.ts       | 72 ++++++++++++++++-
 .../__tests__/workspace-merge-readiness.test.ts    | 46 +++++++++++
 .../workspace-merger-idempotency.slow.test.ts      | 15 ++--
 .../src/__tests__/workspace-merger-lease.test.ts   |  4 +-
 .../workspace-root-worktree-routing.test.ts        | 47 +++++++++++
 .../create-authoritative-workflow-seams.ts         |  2 +
 .../engine/src/executor/create-task-done-tool.ts   | 15 ++++
 .../executor/ensure-graph-custom-node-worktree.ts  |  8 ++
 .../request-pre-merge-optional-step-fix.ts         | 49 +++++++++++-
 .../engine/src/executor/run-graph-custom-node.ts   | 24 ++++--
 packages/engine/src/executor/run-implementation.ts |  9 +++
 packages/engine/src/executor/send-task-back-for-fix.ts  |  4 +-
 .../src/executor/workspace-main-checkout-guard.ts  | 26 +++++-
 .../src/executor/workspace-review-remediation.ts   | 54 +++++++++++++
 .../src/executor/worktree-verify-invariants.ts     |  2 +-
 packages/engine/src/merge/merger-ai.ts             | 93 +++++++++++++++++-----
 .../engine/src/merge/workspace-merge-readiness.ts  | 64 +++++++++++++++
 packages/engine/src/project-engine.ts              | 37 +++++++--
 packages/engine/src/self-healing.ts                | 54 ++++++++++---
 .../engine/src/worktree/worktree-acquisition.ts   | 20 ++++-
 34 files changed, 787 insertions(+), 76 deletions(-)

Fusion-Task-Id: FN-106

Fusion-Task-Lineage: 70b5c13d-9e17-419d-90ac-7258697657ef

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-21 14:41:37 +00:00
Fusion Agent
3717fc5af1 FN-107: block single-repository worktree acquisition
Prevent single-repository worktree acquisition from proceeding without explicit multi-repository workspace context.

- Require workspace-aware acquisition for single-repository tasks.
- Propagate acquisition origin and workspace configuration through executor, merger, and recovery paths.
- Add regression coverage, documentation, and a release changeset for the blocked behavior.

Files changed:
 .changeset/fn-107-single-repo-worktree.md          |   7 ++
 docs/architecture.md                               |   4 +
 docs/testing.md                                    |   4 +
 packages/core/src/branch/branch-assignment.ts      |  12 +++
 packages/core/src/index.gate.ts                    |   1 +
 packages/core/src/index.ts                         |   1 +
 packages/core/src/task-store/task-creation.ts      |   4 +-
 packages/core/src/task-store/task-update.ts        |   4 +-
 .../src/routes/register-planning-subtask-routes.ts |   1 +
 .../engine/src/__tests__/executor-test-helpers.ts  |  12 +++
 .../engine/src/__tests__/executor-worktree.test.ts |  44 ++++++---
 .../src/__tests__/node-worktree-isolation.test.ts  |   7 +-
 .../task-branch-write-origin-census.test.ts        |  49 ++++++++++
 .../worktree-acquisition-workspace.test.ts         |   6 +-
 .../src/__tests__/worktree-acquisition.test.ts     | 103 ++++++++++++++++++---
 .../engine/src/executor/handle-graph-failure.ts    |  16 +++
 .../src/executor/workspace-config-resolver.ts      |   1 +
 .../executor/worktree-branch-conflict-handle.ts    |   1 +
 packages/engine/src/merger.ts                      |   3 +-
 packages/engine/src/self-healing.ts                |   6 +
 .../self-healing/auto-recover-worktree-session.ts  |  10 +-
 .../src/workflows/workflow-graph-executor.ts       |   7 +-
 .../engine/src/worktree/worktree-acquisition.ts    |  73 +++++++++++++-
 23 files changed, 334 insertions(+), 42 deletions(-)

Fusion-Task-Id: FN-107

Fusion-Task-Lineage: 80df9dae-59a0-416e-8a02-6ab2dba9bb00

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-21 14:41:37 +00:00
Fusion Agent
b2125aeb2d FN-104: preserve update restart state
Preserve a pending update across Settings reopen while coordinating installation and restart behavior.

- Add pending-update install state and coordinator flows across dashboard and system controls.
- Expose health/settings update APIs and retain restart state through modal reopen.
- Cover desktop/mobile UX, route behavior, coordinator logic, and document the update flow.

Files changed:
 .changeset/fn-104-pending-update-restart.md        |   7 ++
 docs/architecture.md                               |   3 +
 docs/assets/fn-104-pending-update-desktop.png      | Bin 0 -> 10926 bytes
 docs/assets/fn-104-pending-update-mobile.png       | Bin 0 -> 6101 bytes
 docs/dashboard-guide.md                            |   2 +-
 docs/settings-reference.md                         |   2 +-
 packages/core/src/task-store/task-creation.ts      |   1 -
 packages/dashboard/app/api/client/health.ts        |  12 ++++
 packages/dashboard/app/api/settings/settings.ts    |   3 +
 .../dashboard/app/components/SettingsModal.tsx     |  46 ++++++++-----
 .../app/components/UpdateAvailableBanner.tsx       |  20 ++++--
 .../__tests__/SettingsModal.general.test.tsx       |   6 ++
 .../__tests__/SettingsModal.models-auth.test.tsx   |  72 +++++++++++++++++++
 .../__tests__/UpdateAvailableBanner.test.tsx       |   2 +
 .../components/__tests__/settings-mobile.test.tsx  |   3 +
 .../command-center/areas/SystemControlsArea.tsx    |  18 +++--
 .../__tests__/usePendingUpdateInstall.test.ts      |  44 ++++++++++++
 .../dashboard/app/hooks/usePendingUpdateInstall.ts |  76 +++++++++++++++++++++
 packages/dashboard/app/hooks/useUpdateCheck.ts     |   8 +++
 .../dashboard/src/__tests__/auto-update.test.ts    |  18 +++++
 .../__tests__/update-install-coordinator.test.ts   |  36 ++++++++++
 packages/dashboard/src/auto-update.ts              |  14 +++-
 .../__tests__/register-update-check-routes.test.ts |  14 ++++
 .../src/routes/register-update-check-routes.ts     |  31 ++++++++-
 .../dashboard/src/update-install-coordinator.ts    |  23 +++++++
 25 files changed, 425 insertions(+), 36 deletions(-)

Fusion-Task-Id: FN-104
Fusion-Task-Lineage: c754b258-654d-4efe-9b12-1addc7ed190b
Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-21 14:41:37 +00:00
Fusion Agent
2bdc4448ef FN-103: support large request payloads
Allow large chat logs and workspace file-editor saves to pass through the dashboard without payload-too-large failures.

- Increase request-body handling capacity for large text endpoints.
- Document the payload limits and add integration coverage for chat and workspace-file APIs.
- Add the FN-103 release changeset.

Files changed:
 .changeset/fn-103-large-text-payloads.md           |   7 +
 packages/dashboard/README.md                       |  15 +-
 .../app/api/__tests__/chat-rooms-api.test.ts       |  11 ++
 .../app/api/__tests__/legacy-chat-stream.test.ts   |  19 ++
 .../app/api/__tests__/workspace-files-api.test.ts  |  30 ++++
 .../large-text-body-parser-integration.test.ts     | 195 +++++++++++++++++++++
 packages/dashboard/src/routes/README.md            |  21 +++
 packages/dashboard/src/server.ts                   |  29 ++-
 8 files changed, 325 insertions(+), 2 deletions(-)

Fusion-Task-Id: FN-103

Fusion-Task-Lineage: 05cb2642-1f55-4939-8a28-78badf9b7caa

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-21 14:41:37 +00:00
gsxdsm
9e0f64af9a chore(release): v0.77.0-beta.5
Version bump via changesets.
2026-08-20 22:40:47 -07:00
gsxdsm
7c329d8bf2 fix(FN-094): remove stray brace that broke the core build
FN-094 closed resolveInitialRepositoryScope twice, so tsc failed with
TS1128 and `pnpm release` aborted at pnpm build:full.
2026-08-20 22:26:59 -07:00
gsxdsm
a96f0dd932 fix: ship git-lfs in the Docker image
The repo keeps binary assets as Git LFS objects, but the runner stage
installed plain git. Without git-lfs, checkout writes ~130-byte pointer files
in place of the real content and reports a clean tree, so an agent reads a
text stub where an image should be and any `git lfs` subcommand fails. That
is silent corruption of a working checkout, not a visibly missing tool, which
is why it goes in beside git rather than with the optional tooling.

Confirmed in the running container: screenshots/fn-061-medieval-desktop.png
was a `version https://git-lfs.github.com/spec/v1` stub — 129 tracked files
in that state — and became a valid 753KB PNG (signature and IEND intact)
after installing git-lfs and running `git lfs pull`.

The Dockerfile manifest guard now asserts the package so it cannot be dropped.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-20 21:42:30 -07:00