Commit Graph

3121 Commits

Author SHA1 Message Date
gsxdsm
72f0bbb503 docs: record dashboard api-lane PostgreSQL contention as a suite-infrastructure flake pattern
Three consecutive full-lane runs on the same tree each failed a DIFFERENT file,
every one passing in isolation, with hook timeouts arriving alongside PostgreSQL
'Failed query' warnings from two api lanes sharing one database. That is the same
class FN-9131 investigated for core's loaded PostgreSQL directory.

Deliberately not quarantined: quarantine is file-level and the failing file moves,
so it would evict healthy coverage without touching the cause. Recorded with the
evidence so the next person does not re-derive it, and so the rescue is aimed at
the lane runner's connection/concurrency budget rather than at whichever test lost
the race that run.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-23 18:45:31 -07:00
gsxdsm
5378bca7f6 test: fix the dashboard quality runner's self-spawning tests
Running the dashboard's REAL test command (`run-quality-tests.mjs`, which shards
into 15 lanes) surfaced two failures that a plain `vitest run` never shows —
worth noting on its own, since measuring around a package's own command is how
a suite gets called green on a number the project does not produce.

`scripts/__tests__/run-quality-tests.test.ts` spawns the package's own
`pnpm --filter @fusion/dashboard test` to prove the package-command wiring. Inside
a full lane run that child inherited a Corepack environment that stopped to ask
about downloading pnpm, so it never launched, the lane log came back empty, and
the assertion read 0 launched projects. It passed in isolation only because that
shell had already resolved pnpm. Both spawn sites now set
COREPACK_ENABLE_DOWNLOAD_PROMPT=0; nothing about the assertions changed.

Also records PlanningModeModal.planning-flow as a suite-only flake rather than
forcing it green: it fails only in lane `app:backfill-3` under four concurrent
6GB shards, passes 83/83 in isolation, and picked a DIFFERENT case on each of two
runs — a render-settle timing problem, not a product defect. Recorded as a first
sighting; a repeat of the same case is an on-sight quarantine.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-23 18:03:38 -07:00
gsxdsm
64cb17c100 FN-9204: advertise a valid memory MCP server version
Make the built-in memory MCP server complete the SDK-validated initialize handshake.

- Include a non-empty version in fusion-memory serverInfo responses.
- Cover the real SDK handshake, malformed-response skip path, and JSON-RPC envelopes.
- Document the protocol requirement and add a patch changeset.

Files changed:
 .changeset/fn-9204-memory-mcp-handshake.md         |   7 ++
 docs/mcp.md                                        |   2 +
 .../__tests__/mcp-memory-server-spawn.test.ts      |   5 +-
 .../mcp/__tests__/memory-mcp-handler.test.ts       |   7 +-
 packages/core/src/memory/mcp/memory-mcp-handler.ts |   8 +-
 .../src/__tests__/mcp-memory-handshake.test.ts     | 120 +++++++++++++++++++++
 6 files changed, 146 insertions(+), 3 deletions(-)

Fusion-Task-Id: FN-9204

Fusion-Task-Lineage: 0f68bdd5-56fe-4fdb-867f-2a5e0ea4de65

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-23 17:17:08 -07:00
gsxdsm
28a0ebc382 docs: index three Stash memory backend docs orphaned by #3494
Add memory-backend-integration.md to Architecture & Development (plus its
missing docs-index back-link) and performance/spawn-storm-attribution.md
and research/stash-vector-search-evaluation.md to Audit Reports. All three
were added by 8fcf4bdbaa without README index entries; test:docs-index
passes and the CLI Printing Press invariant remains 2 (Audit Reports).
2026-08-23 17:17:07 -07:00
Phil Larson
c9f3f11a72 fix: allow worktree agents to read user skills (#3506)
## Summary

- allow worktree sessions to read the standard user skill root at
`~/.agents/skills`
- keep sibling `~/.agents` files and all write/edit/Bash access outside
the exception
- canonicalize existing path components so symlinks cannot escape an
allowed skill root
- document the boundary and add a patch changeset

This extends the same host-skill consistency fixed in #2384: Fusion
should not tell an agent to load a skill and then block the skill body.

## Test plan

- [x] 15 worktree-boundary tests
- [x] `pnpm --filter @fusion/engine typecheck`
- [x] scoped ESLint
- [x] changeset and FNXC date checks
- [x] `pnpm verify:fast` (20 steps, including build and boot smoke)
- [x] CLI CI-shape test (72 tests)

## Local gate notes

`pnpm test:gate` passed all static checks, 432 engine-core tests, and
184 core unit tests. Its PostgreSQL lane could not authenticate locally
(`empty password returned by client`). The full
`pi-create-fn-agent.test.ts` run also reaches an unrelated
dashboard-chat principal assertion failure already present at the exact
`origin/main` SHA; the 15 boundary tests pass.


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

- **New Features**
- Worktree agents can read and search skills installed in the standard
`~/.agents/skills` directory.

- **Bug Fixes**
- Preserved worktree protections for writing, editing, and Bash
operations.
- Blocked access to unrelated files and prevented symlink-based boundary
escapes across supported path operations.
  - Improved access validation for paths that do not yet exist.

- **Documentation**
- Updated worktree boundary documentation to describe skill access and
its restrictions.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-08-23 16:53:10 -07:00
ischindl
8fcf4bdbaa feat: Stash memory backend — session capture, per-chat backfill, opt-in vector search (#3494)
## Summary

Adds the **Stash memory backend** (`memory.backendType=stash`) that
connects Fusion's agent memory to the
[Stash](https://github.com/Fergana-Labs/stash) product — *knowledge
bases for the agent era* ([product site:
joinstash.ai](https://joinstash.ai)). Fusion becomes a first-class Stash
client: complete chat sessions and finished tasks are captured into
Stash, memory is recalled during chat, and Stash sessions are kept in
sync with the dashboard (including deletes and archival).

**Product:** <https://github.com/Fergana-Labs/stash> ·
[joinstash.ai](https://joinstash.ai)

## What's included

### 1. Stash memory backend (RUFU-068 / RUFU-121)
- New `StashMemoryBackend` (`memory.backendType=stash`) with `stashUrl`
/ `stashApiKey` settings (global secrets-store `stash-api-key` +
per-project override).
- **Complete-chat-session capture** keyed by ChatSession id.
- Sessions are classified into **per-project folders** (get-or-create,
`external_key fusion-<projectId>`, 1h per-process cache) and
**soft-deleted with their chat** via `DELETE /api/chat/sessions/:id`.
- Per-conversation **memory-focus** read-time scoping (new
`0066_chat_session_memory_focus.sql` migration — sequence renumbered
0059→0060→0061→0065→0066 as origin/main claimed the lower numbers);
event metadata enriched with `project` / `project_name` / `chat_title`.
- Recall queries normalized to single-keyword / explicit-OR ASCII (≤100
chars); shared normalizer export reused by per-turn recall.

### 2. Per-task executor transcript capture (RUFU-122)
Finished or failed tasks upload their executor transcript
(`agent-log.jsonl`) to Stash as a task session.

### 3. Bulk archive Stash sync (RUFU-125)
Archived task-planner chats soft-delete their Stash sessions on bulk
archival (paged). The snapshot of doomed session ids is taken *before*
the local bulk delete, and the Stash sync runs fire-and-forget so a
Stash stall can never delay local archival.

### 4. Per-chat "Preserve to Stash" backfill (RUFU-136)
A per-chat action that backfills a chat's full history into Stash, with
client-side idempotency and a pre-check that skips already-uploaded
content (fail-closed, no duplicate upload on transport failure).
- **Session-folder naming fix:** the first project folder is now named
"Fusion — &lt;project name&gt;" instead of the bare "Fusion" fallback
(the backfill now resolves the central-registry project name,
best-effort, never blocking the upload).

### 5. Opt-in semantic (vector) recall (RUFU-126)
`stashVectorSearch` setting (default `false` — **zero behavior change
until enabled**). For multi-word queries the backend tries Stash's
semantic-search endpoint first, then falls back byte-identically to the
keyword path. Definitive 404/405/501/503 responses are negatively cached
per process. Requires a patched Stash server (new endpoint +
`sentence-transformers` + embedding backfill); unpatched servers are
transparently bypassed after the first 404.

## Safety
- **Opt-in / inert by default:** the default backend remains `qmd`; the
Stash backend is inert until `memoryBackendType=stash` + `stashUrl` are
set.
- All Stash I/O is **best-effort, fail-closed, and non-blocking** — a
Stash outage never blocks chat, task completion, or archival. No
run-audit content is emitted.

## Testing
- Backfill + delete-sync suites (20/20), Stash backend suite (68/68),
executor memory / session capture suites, `memory-focus-recalling`,
description-guard — all green.
- `tsc` clean across core / engine / dashboard.
- Live verification: bulk backfill of 21/24 chats completed; the
"Preserve to Stash" action is idempotent on re-run.

## Changesets
- `@runfusion/fusion` **minor** — Stash memory backend + capture
(RUFU-068/121), per-task transcript (RUFU-122), bulk archive sync
(RUFU-125), per-chat backfill (RUFU-136), opt-in vector search
(RUFU-126)
- `@runfusion/fusion` **patch** — backfill session-folder naming fix


## Rebase Note (2026-08-23)

Rebased onto `origin/main` `3f448f7292` (v0.77.0-beta.7). Conflicts
resolved additively:
- `packages/core/src/postgres/schema-applier.ts` + test — upstream's
0062-0065 migrations (task/subtask splitting removal, AI merge review
reconciliation, task repository scope, FN-149 review convergence)
unioned with this PR's `chat_sessions.memory_focus` migration, which is
**renumbered 0065 → 0066** (upstream's FN-149 shipped 0065 canonically
on origin/main); `SCHEMA_BASELINE_VERSION` advances to `0066`.
- `packages/dashboard/app/components/ChatView.tsx` — upstream's docked
chat sidebar resize handlers unioned with the RUFU-136 "Preserve to
Stash" backfill handler.
- New commit: `settings.memory.*` stash-backend i18n keys added to all 6
secondary locales (RUFU-121/122 parity fix; `pnpm i18n:status` no longer
reports any violation introduced by this PR).

**Deploy note (operator environments that already ran a pre-rebase build
of this PR):** the memory-focus SQL may already be in the schema under
ledger row `0065`. Remap that row to `0066` (`UPDATE
fusion_schema_migrations SET version = '0066' WHERE version = '0065';`)
*before* first boot of a 0066-ceiling binary — otherwise the fresh
upstream `0065_fn_149_review_convergence_stage.sql` would be skipped as
"already applied". Clean databases (no prior memory-focus row) need no
action.

**CI note — Lint (lifecycle-column census) is red on the merge base:**
`pnpm check:lifecycle-columns --strict` fails identically on pure
`origin/main` `3f448f7292` with
`packages/core/src/db/legacy-adoption.ts: 0 -> 3` (3 column guards in
the U9b legacy-adoption table without a baseline entry or
`DELIBERATE-LITERAL` marker). Verified by running the census on a clean
origin/main checkout — inherited from the base, not introduced by this
PR. Fix belongs upstream; tracked separately.

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

* **New Features**
* Added Stash memory integration with project configuration and optional
semantic search.
  * Added per-chat memory focus controls and a `/focus` command.
  * Added “Preserve to Stash” for uploading complete chat history.
  * Added automatic chat, task transcript, and completion-event capture.
* Added project-specific Stash session folders and archive/delete
synchronization.
* **Bug Fixes**
* Improved Stash folder naming and handling of missing branches during
no-commit tasks.
* **Documentation**
* Added setup, configuration, integration, vector-search, and
performance guidance.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Fusion <noreply@runfusion.ai>
Co-authored-by: gsxdsm <gsxdsm@users.noreply.github.com>
2026-08-23 16:46:14 -07:00
gsxdsm
9d1bd393d8 FN-9202: Unify dashboard banner styling
Standardize dashboard notices on a shared, token-driven banner shell.

- Add a reusable Banner primitive with consistent tones, layouts, actions, and dismissal behavior.
- Migrate dashboard notification banners away from bespoke shells and left accent borders.
- Document and test banner styling invariants, including token-only CSS lengths and colors.
- Add a patch changeset for the published dashboard bundle.

Files changed:
 .changeset/fn-9202-banner-style-unification.md     |   7 ++
 docs/dashboard-guide.md                            |   4 +
 .../app/__tests__/banner-style-consistency.test.ts |  25 ++++
 .../app/components/ApprovalNotificationBanner.css  |  10 --
 .../app/components/ApprovalNotificationBanner.tsx  |   5 +-
 packages/dashboard/app/components/Banner.css       |  81 ++++++++++++
 packages/dashboard/app/components/Banner.tsx       |  78 ++++++++++++
 .../app/components/CapacityRiskBanner.css          |  50 +-------
 .../app/components/CapacityRiskBanner.tsx          |  39 +++---
 .../app/components/CliBinaryInstallBanner.css      | 126 ++-----------------
 .../app/components/CliBinaryInstallBanner.tsx      |  14 +--
 .../app/components/DbCorruptionBanner.css          |  18 +--
 .../app/components/DbCorruptionBanner.tsx          |   5 +-
 .../app/components/EngineStatusBanner.css          |  94 ++------------
 .../app/components/EngineStatusBanner.tsx          |  48 +++----
 .../app/components/EngineUnavailableBanner.css     |  42 +------
 .../app/components/EngineUnavailableBanner.tsx     |  21 ++--
 .../app/components/MergeAdvanceNotice.css          | 129 +++----------------
 .../app/components/MergeAdvanceNotice.tsx          |  36 +++---
 .../app/components/MigrationInProgressBanner.css   |  25 ----
 .../app/components/MigrationInProgressBanner.tsx   |  19 +--
 .../app/components/OAuthReloginBanner.css          |  53 +-------
 .../app/components/OAuthReloginBanner.tsx          |  26 +---
 .../app/components/SessionNotificationBanner.css   |  16 +--
 .../app/components/SessionNotificationBanner.tsx   |   5 +-
 .../app/components/SetupWarningBanner.css          | 106 +---------------
 .../app/components/SetupWarningBanner.tsx          |  31 +----
 .../app/components/SqliteMigrationBanner.css       |  40 +-----
 .../app/components/SqliteMigrationBanner.tsx       |  33 ++---
 .../app/components/TaskIdIntegrityBanner.css       |  18 +--
 .../app/components/TaskIdIntegrityBanner.tsx       |   5 +-
 .../dashboard/app/components/TestModeBanner.css    |  18 ---
 .../dashboard/app/components/TestModeBanner.tsx    |  12 +-
 .../app/components/UpdateAvailableBanner.css       | 139 +++------------------
 .../app/components/UpdateAvailableBanner.tsx       |  22 ++--
 .../app/components/__tests__/Banner.test.tsx       |  48 +++++++
 36 files changed, 450 insertions(+), 998 deletions(-)

Fusion-Task-Id: FN-9202

Fusion-Task-Lineage: 14762201-55e5-4124-a897-9667c3a1ab84

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-23 16:00:53 -07:00
gsxdsm
4475342145 docs: record a first-sighting PG setup-hook flake in the observed register
`handoff-to-review-atomicity.pg.test.ts` aborted its `beforeAll` at the 15s
budget on the first `pnpm test:gate` of a session; not reproduced in 8 later
runs across three shapes (gate x2, pg-gate x3, isolated x3).

Same mode as entries 6 and 7, but narrower: it happened under the capped
four-fork lane with two selected files, so fork oversubscription does not
explain it. Recorded the cold-cluster correlation as a hypothesis rather than a
finding — reproducing it means stopping the embedded cluster, and this host runs
a live Fusion instance.

Discloses that the failing run's full output was lost to a tail pipe, and that
inline quarantine was unavailable regardless (quarantinedCoreTests must stay
empty); eviction of a transactional-invariant gate file is owner-escalated.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-23 15:45:31 -07:00
gsxdsm
39812f4898 test: quarantine one suite-only flake, record another, fix the lockstep guard
Full engine suite at a97aa84a20: 3 failures out of 12,414. All three diagnosed:

- self-healing-pending-wedge-notification's marker-selection case fails ONLY in
  a full-suite run (expects 1 elapsed marker, sees 2) and passes deterministically
  alone. This is its SECOND sighting, so per AGENTS.md it is an on-sight
  quarantine with no further discretion: ledger entry + matching vitest exclude,
  same commit, 2026-09-06 deletion deadline.
- spec-drift-reconciler's exponential-backoff case shows the same shape on a
  FIRST sighting, so it is recorded in the observed register instead of evicting
  that file's other passing coverage. Both are timer-driven reconciler tests that
  only fail alongside other suites, pointing at cross-file fake-timer state.
- merge-orphan-durable-write-inventory drift was pure lineHint movement (19
  changed, zero newly unclassified entries) after product edits shifted lines.
  Regenerated.

Also fixes check-quarantine-ledger.mjs, which could not see the exclude I added:
its comment stripper treated the `/**` inside glob literals like "node_modules/**"
and "src/**/*.slow.test.ts" as a block-comment opener and deleted through to the
next "*/", swallowing whole array literals and every entry after them. It now
scans string-aware, so the lockstep check actually holds. Nothing was appeased:
no timeout widened, no retry added, no assertion relaxed.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-23 15:43:00 -07:00
gsxdsm
3d37cfa7db FN-9201: Prevent mobile nav lift when the iOS keyboard opens
Keep mobile bottom chrome pinned or hidden during keyboard focus transitions, including landscape phone layouts.

- track keyboard-focus intent before visual viewport metrics settle
- clamp focused iOS viewport offsets so fixed bars remain behind the keyboard
- cover runtime bootstrap, landscape integration, nav, focus, and offset behavior
- document the mobile keyboard layout contract and add a patch changeset

Files changed:
 .changeset/fn-9201-mobile-nav-keyboard-lift.md     |  7 ++
 docs/dashboard-guide.md                            |  4 +-
 packages/dashboard/app/App.tsx                     | 43 ++++++++--
 ...ile-nav-keyboard-landscape.integration.test.tsx | 91 ++++++++++++++++++++
 .../__tests__/icb-inline-script.runtime.test.ts    | 74 ++++++++++++++++
 .../mobile-bottom-bars-keyboard-layout.test.ts     | 15 +++-
 .../viewport-compensation-keyboard.test.ts         |  5 +-
 .../__tests__/MobileNavBar.keyboard-lift.test.tsx  | 65 ++++++++++++++
 .../__tests__/useKeyboardFocusPending.test.tsx     | 99 ++++++++++++++++++++++
 .../dashboard/app/hooks/useKeyboardFocusPending.ts | 43 ++++++++++
 packages/dashboard/app/index.html                  | 12 ++-
 .../utils/__tests__/mobileBarKeyboardFlags.test.ts | 22 +++++
 .../app/utils/__tests__/viewportOffset.test.ts     | 32 +++++++
 .../dashboard/app/utils/mobileBarKeyboardFlags.ts  | 10 ++-
 packages/dashboard/app/utils/viewportOffset.ts     |  8 ++
 15 files changed, 510 insertions(+), 20 deletions(-)

Fusion-Task-Id: FN-9201

Fusion-Task-Lineage: 4b3b01d3-8968-432b-9537-a63ee6bbde31

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-23 11:40:06 -07:00
gsxdsm
324145c1e1 test: repair engine fixtures that predate shipped product guards
The engine suite's failures are not independent bugs; they are a handful of
systemic drifts where a guard shipped and its fixtures were never updated.

- Required pre-merge gates (FN-158): the door refuses a card whose enabled
  optional groups produced no result, and the built-in workflow enables Plan and
  Code Review by default. Merge-mechanics fixtures now declare an explicit empty
  list, stating the intent they always had. group-merge-coordinator's
  "post-Code-Review member" instead gets real PASSING workflowStepResults,
  because recording the pass is what that fixture actually means.
- Branch-write provenance: the shared reliability fixture creates a task with a
  branch, which now requires an explicit origin. It stands in for an
  engine-created branch, so it says so.
- updateTaskAtomic: a production write seam missing from several fake stores,
  copied from the faithful fake in merger-ai.test.ts.
- Durable-write inventory: eight unclassified TaskStore surfaces classified,
  including the two batched reads this branch added.
- workflow-graph-merge-region-collapse asserted completion-summary AFTER
  code-review; the IR wires it before, and production logs agree.

merger-ai.test.ts alone goes 37 -> 0. Engine failures 288 -> ~200.

Also records a first-sighting suite-only flake in the observed register per the
standing rule, rather than quarantining a file with substantial coverage.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-23 10:18:50 -07:00
gsxdsm
52d124bde2 FN-9195: Keep the chat composer visible above iOS keyboards
Keep Chat input reachable across software-keyboard viewport changes.

- Track visual viewport changes across phones, tablets, compact docks, and narrow floating Chat hosts.
- Clamp thread height using the measured host offset while preserving iOS focus behavior.
- Add regression coverage, shared viewport test helpers, operator documentation, and a patch changeset.

Files changed:
 .changeset/fn-9195-chat-ios-keyboard-composer.md   |   7 +
 docs/dashboard-guide.md                            |   2 +-
 packages/dashboard/app/components/ChatView.css     |  44 +--
 packages/dashboard/app/components/ChatView.tsx     |  43 ++-
 .../__tests__/ChatView.ios-keyboard.test.tsx       | 335 +++++++++++++++++++++
 .../components/__tests__/ChatView.test-harness.tsx | 103 ++++++-
 6 files changed, 506 insertions(+), 28 deletions(-)

Fusion-Task-Id: FN-9195

Fusion-Task-Lineage: cdada0cc-af6c-4cf8-8ffd-0940d280b07a

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-23 09:55:53 -07:00
gsxdsm
3857e0dc14 FN-9198: Fix narrow chat switcher dropdown rendering
Anchor the direct-conversation switcher to the visible thread header across narrow Chat surfaces.

- position narrow-host switcher menus relative to the thread header
- cover mobile, compact dock, floating, desktop, and empty-menu states
- add the shared 2px spacing token and document the corrected behavior
- add a patch changeset for the published Fusion package

Files changed:
 .../fn-9198-chat-title-switcher-menu-anchor.md     |   7 +
 docs/dashboard-guide.md                            |   2 +-
 .../app/components/ChatThreadTitleSwitcher.css     |  11 +-
 .../__tests__/ChatView.title-switcher.test.tsx     | 144 ++++++++++++++++++++-
 packages/dashboard/app/styles.css                  |   2 +
 5 files changed, 160 insertions(+), 6 deletions(-)

Fusion-Task-Id: FN-9198

Fusion-Task-Lineage: 9a1132d2-9b1a-4150-918a-085b42b22e02

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-23 09:21:10 -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
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
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
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
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
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
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
c21f628174 FN-101: separate update installation and restart automation
Separate automatic update installation from restart recovery so dashboard reloads only after the replacement host is healthy.

- Add scoped update automation settings and localized descriptions.
- Coordinate update installation, restart recovery, timeout handling, and manual refresh guidance.
- Update settings UI, banner behavior, API routes, documentation, screenshots, and regression coverage.

Files changed:
 .changeset/fn-101-update-restart-lifecycle.md      |   7 ++
 docs/assets/fn-101-update-automation-desktop.png   | Bin 0 -> 17744 bytes
 docs/assets/fn-101-update-automation-mobile.png    | Bin 0 -> 11367 bytes
 docs/dashboard-guide.md                            |   6 +-
 docs/settings-reference.md                         |  12 ++-
 packages/core/src/config/settings-schema.ts        |   9 ++
 packages/core/src/config/update-automation.ts      |  17 +++
 packages/core/src/index.gate.ts                    |   1 +
 packages/core/src/index.ts                         |   1 +
 packages/core/src/types/settings/settings-scope.ts |   8 ++
 packages/dashboard/app/api/settings/settings.ts    |   4 +
 .../dashboard/app/components/SettingsModal.tsx     |  38 +++++--
 .../app/components/UpdateAvailableBanner.tsx       |  33 +++++-
 .../__tests__/SettingsModal.general.test.tsx       |  39 +++++++
 .../__tests__/UpdateAvailableBanner.test.tsx       |  59 ++++++++++-
 .../app/components/settings/save-split.ts          |   5 +-
 .../sections/GlobalGeneralSection.search.ts        |  22 ++--
 .../settings/sections/GlobalGeneralSection.tsx     |  29 +++--
 .../settings-default-descriptions.test.tsx         |   2 +
 .../__tests__/useSystemRestartRecovery.test.ts     | 118 +++++++++++++++++++++
 .../app/hooks/useSystemRestartRecovery.ts          | 118 +++++++++++++++++++++
 packages/dashboard/src/auto-update.ts              |  22 +++-
 .../src/routes/register-update-check-routes.ts     |  24 +++-
 .../dashboard/src/update-install-coordinator.ts    |  37 +++++++
 packages/i18n/locales/en/app.json                  |   4 +
 packages/i18n/locales/es/app.json                  |   4 +
 packages/i18n/locales/fr/app.json                  |   4 +
 packages/i18n/locales/ko/app.json                  |   4 +
 packages/i18n/locales/pt-BR/app.json               |   8 ++
 packages/i18n/locales/zh-CN/app.json               |   4 +
 packages/i18n/locales/zh-TW/app.json               |   4 +
 packages/i18n/src/resources.d.ts                   |   4 +
 32 files changed, 602 insertions(+), 45 deletions(-)

Fusion-Task-Id: FN-101

Fusion-Task-Lineage: 2d00e84e-a01d-4d19-bb02-aa87a818165b

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-21 04:36:21 +00:00
Fusion Agent
bbca7a1ffc FN-094: add mono- and multi-repository lifecycle parity
Extend workspace lifecycle behavior so mono-repository and multi-repository tasks share the same durable scope, workflow, review, and merge semantics.

- Add repository-scope persistence, migrations, serialization, and task mutation support.
- Align dashboard task creation, detail, and workspace worktree views with repository-aware lifecycle state.
- Extend executor, reviewer, merger, triage, and self-healing paths with parity coverage and tests.
- Document the lifecycle contract and publish the operator-facing changeset.

Files changed:
 .changeset/fn-094-multi-repository-lifecycle.md    |   7 +
 docs/agents.md                                     |   8 +
 docs/architecture.md                               |   6 +
 docs/dashboard-guide.md                            |   4 +
 docs/multi-project.md                              |   6 +
 docs/settings-reference.md                         |   2 +-
 docs/testing.md                                    |  12 ++
 docs/workspaces.md                                 |   6 +
 ...workspace-worktrees-concurrent-merge.pg.test.ts |  19 +++
 packages/core/src/index.ts                         |   2 +-
 .../core/src/postgres/migrations/0000_initial.sql  |   1 +
 .../0064_fn_094_task_repository_scope.sql          |   2 +
 packages/core/src/postgres/schema-applier.ts       |  13 +-
 packages/core/src/postgres/schema/project.ts       |   2 +
 packages/core/src/store.ts                         |  21 ++-
 .../core/src/task-store/branch-and-pr-entities.ts  |   2 +-
 packages/core/src/task-store/persistence.ts        |   4 +-
 packages/core/src/task-store/serialization.ts      |   2 +
 packages/core/src/task-store/task-creation.ts      |  31 ++++
 packages/core/src/task-store/task-mutation-ops.ts  | 131 +++++++++++++++-
 packages/core/src/task-store/task-row-mappers.ts   |   2 +-
 packages/core/src/task-store/task-update.ts        |  55 +++++--
 packages/core/src/tasks/repository-scope.ts        |  29 ++++
 packages/core/src/types.ts                         |   4 +
 packages/core/src/types/task/task-core.ts          |  35 ++++-
 packages/core/src/types/workflow/workflow-steps.ts |  21 +++
 packages/dashboard/app/api/tasks/tasks.ts          |  14 ++
 packages/dashboard/app/components/NewTaskModal.tsx |  16 +-
 .../dashboard/app/components/TaskDetailModal.css   |  27 ++++
 .../dashboard/app/components/TaskDetailModal.tsx   |  15 +-
 .../app/components/WorkspaceWorktreesSummary.tsx   |  68 ++++++++-
 .../app/components/__tests__/NewTaskModal.test.tsx |   1 +
 .../__tests__/WorkspaceWorktreesSummary.test.tsx   |  27 +++-
 .../src/routes/register-task-workflow-routes.ts    |  48 ++++++
 .../__tests__/executor-workspace-taskdone.test.ts  |  20 +++
 .../src/__tests__/reviewer-workspace.test.ts       | 170 ++++++++++++++++++++-
 .../src/__tests__/self-healing-workspace.test.ts   |   4 +
 .../workflow-graph-optional-group.test.ts          |  32 ++++
 .../workflow-graph-optional-step-fix.test.ts       |  58 +++++++
 .../engine/src/__tests__/workspace-e2e.test.ts     |  91 ++++++++++-
 .../__tests__/workspace-lifecycle-parity.test.ts   |  61 ++++++++
 .../src/__tests__/workspace-merger-lease.test.ts   |  25 +++
 .../__tests__/workspace-merger-scope-gates.test.ts |  58 +++++++
 .../engine/src/__tests__/workspace-merger.test.ts  |  59 ++++++-
 packages/engine/src/agent-tools.ts                 |  92 ++++++++++-
 packages/engine/src/execution/reviewer.ts          |  10 +-
 .../create-authoritative-workflow-seams.ts         |  95 ++++++++++--
 .../engine/src/executor/execute-workflow-graph.ts  |  37 ++++-
 .../request-pre-merge-optional-step-fix.ts         |  70 +++++++++
 .../engine/src/executor/run-graph-custom-node.ts   | 124 ++++++++++-----
 .../engine/src/executor/workflow-step-verdict.ts   |   6 +-
 .../src/executor/workspace-review-per-repo.ts      | 118 +++++++++++++-
 .../src/executor/worktree-task-done-scope-leak.ts  | 109 ++++++++++++-
 packages/engine/src/merge/merger-ai.ts             |  88 ++++++++++-
 packages/engine/src/self-healing.ts                |  19 ++-
 packages/engine/src/triage.ts                      |   9 ++
 .../src/workflows/workflow-graph-executor.ts       |  73 +++++++--
 .../engine/src/workflows/workflow-node-handlers.ts |  12 +-
 58 files changed, 1962 insertions(+), 121 deletions(-)

Fusion-Task-Id: FN-094

Fusion-Task-Lineage: 483f958f-cc67-474e-9383-26856c329543

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-21 04:35:58 +00:00
Fusion Agent
3066123516 FN-100: prevent false interrupted-response save errors on new chats
Make starting or clearing an idle chat a successful cancellation no-op while preserving durable cancellation barriers for active responses.

- Return success for idle generation cancellation instead of showing a false save warning.
- Await cancellation and reconciliation from the chat hook before queue/session transitions.
- Update chat API, route handling, documentation, regression tests, and the published fix changeset.

Files changed:
 .changeset/fn-100-chat-new-cancel.md               |  7 +++
 docs/dashboard-guide.md                            |  2 +-
 packages/dashboard/app/api/chat/chat.ts            |  5 +-
 packages/dashboard/app/components/ChatView.tsx     | 25 +++++----
 .../__tests__/ChatView.streaming-thread.test.tsx   | 59 ++++++++++++++++++++++
 .../dashboard/app/hooks/__tests__/useChat.test.ts  | 37 ++++++++++++++
 packages/dashboard/app/hooks/useChat.ts            | 14 ++---
 .../dashboard/src/__tests__/chat-manager.test.ts   | 11 +++-
 .../src/__tests__/routes-chat-cancellation.test.ts |  7 +--
 packages/dashboard/src/chat.ts                     |  8 ++-
 .../dashboard/src/routes/register-chat-routes.ts   |  6 +--
 11 files changed, 153 insertions(+), 28 deletions(-)

Fusion-Task-Id: FN-100

Fusion-Task-Lineage: caa5fe20-4abd-4884-ba1d-f9473c12b52f

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-21 04:34:43 +00:00
Fusion Agent
b5e366da62 FN-099: match task Chat model menu width to Direct Chat
Match the task Chat model selector to Direct Chat sizing so provider and model names remain readable across desktop and mobile.

- Apply the shared readable, viewport-clamped dropdown width to Task Chat.
- Add regression coverage and desktop/mobile screenshots.
- Document the behavior and publish a patch changeset.

Files changed:
 .changeset/fn-099-task-chat-model-menu-width.md    |   7 ++
 docs/dashboard-guide.md                            |   2 +-
 .../app/components/TaskPlannerChatTab.tsx          |   5 ++
 .../ChatThinkingLevelControl.portal.test.tsx       |   3 +-
 .../__tests__/TaskPlannerChatTab.test.tsx           |  92 ++++++++++++++++++++-
 .../fn-099-task-chat-model-menu-desktop.png         | Bin 0 -> 9534 bytes
 screenshots/fn-099-task-chat-model-menu-mobile.png  | Bin 0 -> 7240 bytes
 7 files changed, 105 insertions(+), 4 deletions(-)

Fusion-Task-Id: FN-099

Fusion-Task-Lineage: fec67d58-9ca9-4878-8a0a-ac83984a3766

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-21 04:34:43 +00:00
Fusion Agent
3903d3c383 FN-096: add New Chat to active conversation headers
Expose the shared New Chat action wherever an active conversation is open.

- Keep New Chat available in list and selected-detail headers across Chat hosts.
- Reset room launches to a persisted Direct session and preserve existing navigation behavior.
- Update responsive styling, documentation, regression coverage, screenshots, and release metadata.

Files changed:
 .changeset/fn-096-chat-header-new-chat.md          |   7 +++
 docs/dashboard-guide.md                            |   6 +--
 packages/dashboard/app/components/ChatView.css     |   3 ++
 packages/dashboard/app/components/ChatView.tsx     |  23 +++++----
 .../components/__tests__/ChatView.mobile.test.tsx  |  15 +++++-
 .../__tests__/ChatView.new-chat-default.test.tsx   |  53 +++++++++++++++++++--
 .../__tests__/ChatView.sessions-rooms.test.tsx     |  36 +++++++++++---
 screenshots/fn-096-chat-header-new-desktop.png      | Bin 0 -> 7476 bytes
 screenshots/fn-096-chat-header-new-mobile.png       | Bin 0 -> 4881 bytes
 9 files changed, 120 insertions(+), 23 deletions(-)

Fusion-Task-Id: FN-096

Fusion-Task-Lineage: b63ddd12-87bb-470e-9cc9-a80817270257

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-21 04:34:43 +00:00
Fusion Agent
f714e45bda FN-090: reconcile AI merge review state
Reconcile AI merge-review outcomes with durable task state and operator-visible workflow controls.

- Persist merge-review findings and reconciliation metadata through the core task store and schema migration.
- Update merger prompts, execution, recovery handling, and workflow routes for approved review outcomes.
- Add dashboard task-detail presentation and release documentation for the reconciliation flow.

Files changed:
 .../fn-090-ai-merge-review-reconciliation.md       |   7 +
 docs/architecture.md                               |   6 +
 .../src/__tests__/postgres/schema-applier.test.ts  |   2 +-
 .../0063_fn_090_ai_merge_review_reconciliation.sql |   2 +
 packages/core/src/postgres/schema-applier.ts       |  19 +-
 packages/core/src/postgres/schema/project.ts       |   1 +
 packages/core/src/store.ts                         |  24 +-
 packages/core/src/task-store/persistence.ts        |   2 +
 packages/core/src/task-store/reset-lifecycle.ts    |   1 +
 packages/core/src/task-store/serialization.ts      |   1 +
 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        |   5 +
 packages/core/src/types/task/task-core.ts          |  27 ++
 .../dashboard/app/api/tasks/tasks-lifecycle.ts     |   9 +
 .../dashboard/app/components/TaskDetailModal.css   |  19 ++
 .../dashboard/app/components/TaskDetailModal.tsx   |  29 ++
 .../src/routes/register-task-workflow-routes.ts    |  17 ++
 .../src/__tests__/merge-error-recovery.test.ts     |   5 +-
 packages/engine/src/__tests__/merger-ai.test.ts    | 234 +++++----------
 packages/engine/src/merge/merger-ai-prompts.ts     |  31 +-
 packages/engine/src/merge/merger-ai.ts             | 319 ++++++++++-----------
 packages/engine/src/project-engine.ts              |   4 +-
 23 files changed, 416 insertions(+), 352 deletions(-)

Fusion-Task-Id: FN-090
Fusion-Task-Lineage: 13450a9f-f17f-46b4-ab39-4887520c2a82
Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-21 04:34:43 +00:00