Commit Graph

10490 Commits

Author SHA1 Message Date
gsxdsm
a03aae7f66 fix(engine): route review via explicit external checkout metadata (#1865)
## Summary
- Add explicit `sourceMetadata.externalReviewCheckout` review routing
with fail-closed validation.
- Log the selected review checkout so operator/runtime tasks can verify
where review ran.
- Cover metadata extraction, invalid metadata fallback,
`fn_review_step`, and workflow `stepReview` routing.

## Test Plan
- `cd packages/engine && corepack pnpm exec vitest run
src/__tests__/review-checkout.test.ts
src/__tests__/reviewer-workspace.test.ts`


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

* **New Features**
* Review routing now supports explicit external checkout overrides via
review checkout metadata, using the resolved external checkout as the
review working directory when valid.
* Logging now highlights the selected review routing target and warns
when external checkout metadata is present but invalid.

* **Bug Fixes**
* Missing/blank/invalid/relative/nonexistent/non-git paths now fail
closed to the task worktree instead of falling back.
* Metadata priority is enforced strictly (custom fields → branch context
→ source metadata → root), preventing lower-priority fallback when
higher-priority data is invalid.

* **Tests**
* Added/expanded automated coverage for override and fail-closed
behavior, including workspace-mode routing semantics.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-07-01 17:02:30 -07:00
gsxdsm
c59ae0b969 fix(anthropic): restore direct OAuth execution for Claude subscriptions (#1862)
## Problem

Claude **subscription** (Max/Pro) chats fail with a rotating `404 / 502
/ 429` cascade — the same symptom as #1857, which was reported fixed.
Raw `ANTHROPIC_API_KEY` and explicit Claude CLI usage work; direct OAuth
does not.

## Root cause (proven against git history)

- **v0.51.0 (worked):** `packages/core/src/anthropic-models.ts` didn't
exist. `getApiKey("anthropic")` returned the subscription **OAuth**
access token and pi-ai's built-in `anthropic` provider POSTed it to
`api.anthropic.com/v1` with **Claude Code identity headers** (`Bearer` +
`anthropic-beta: claude-code-20250219,oauth-2025-04-20`). Direct OAuth
worked — **not** via the CLI.
- **The regression chain:** #1857 mis-concluded "0.51.0 uses the CLI /
OAuth is blocked on /v1" (its `grep` missed the runtime-appended `/v1`;
a naive curl repro lacked pi-ai's full impersonation). FN-7291 → FN-7391
→ FN-7396 were built on that wrong premise. FN-7396's
`registerAnthropicSubscriptionProvider` rerouted subscription OAuth to a
new `anthropic-subscription` provider **still pointed at
`api.anthropic.com/v1`** — reintroducing #1857.

## Fix — restore the v0.51.0 path (three independent surfaces, no
rerouting)

- **`auth-storage.ts`** — `getApiKey("anthropic")` resolves
subscription/legacy OAuth again (raw API key still takes precedence), so
the built-in provider receives the token.
- **`pi.ts`** — remove the runtime reroute and the `/v1`-based
`anthropic-subscription` execution provider; `anthropic/*` selections
stay on the built-in OAuth-capable provider.
- **`register-model-routes.ts`** — advertise `anthropic` in the picker
for OAuth users so direct OAuth is selectable.
- Result: **direct OAuth**, **raw `ANTHROPIC_API_KEY`** (precedence),
and **explicit `pi-claude-cli`** all work independently.

## Verification

- `packages/engine`: `auth-storage.test.ts` +
`pi-create-fn-agent.test.ts` — **137 passed** (assertions restored to
the correct invariant; the FN-7391/FN-7396 tests encoded the bug).
- `packages/dashboard`: `routes-auth.test.ts` + `usage.test.ts` — **352
passed**.
- `pnpm --filter @fusion/engine build` clean.
- Docs (`settings-reference.md`, `dashboard-guide.md`) + changeset
updated.

Fixes #1857

🤖 Generated with [Claude Code](https://claude.com/claude-code)

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

* **Bug Fixes**
* Restored Anthropic Claude subscription chat reliability by reverting
the OAuth execution behavior to the expected direct runtime flow.
* Improved Anthropic credential precedence and provider visibility
across direct API key, subscription OAuth, and Claude CLI modes.
* Reinstated Claude Sonnet 5 in the model picker with correct
catalog/pricing.
* **Documentation**
* Updated the OAuth re-login banner guide and settings reference to
clarify Anthropic credential behavior and precedence.
* **Tests**
* Updated authentication, model discovery, session routing, and pricing
expectations for Anthropic scenarios.
* **Chores**
* Tightened peer dependency version constraints for the Claude CLI
package.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-07-01 16:40:36 -07:00
Phil Larson
87ce37831c fix(engine): address review checkout routing feedback 2026-07-01 16:38:27 -07:00
Phil Larson
c46d11f0a3 test(cli): keep extension engine mocks current 2026-07-01 16:34:02 -07:00
gsxdsm
e154892596 Align pi-claude-cli peer deps to pi-ai 0.80.3
The vendored pi-claude-cli extension declared `@earendil-works/pi-ai` and
`pi-coding-agent` as `*` peers, so its dev/workspace resolution drifted to
0.77.0 while the rest of the workspace is on ^0.80.3. Pin both peers to
^0.80.3 so the extension's `getModels("anthropic")` catalog (which feeds the
pi-claude-cli picker rows) matches the engine/cli — 0.80.3 ships
claude-sonnet-5 natively. Behavior-preserving; the bundled CLI already
provided 0.80.3 at runtime.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-01 16:30:52 -07:00
Phil Larson
b58d9b5d2f chore: add review checkout routing changeset 2026-07-01 16:27:21 -07:00
Phil Larson
f76d2f3609 fix(engine): route review via explicit external checkout metadata 2026-07-01 16:26:54 -07:00
gsxdsm
b7c6443a7b Restore Claude Sonnet 5 in the picker + address PR review feedback (#1862)
Sonnet 5 had disappeared from every surface: pi-ai 0.79.9 (the installed
version) lacks it, and FN-7374 removed the static row expecting the live
registry to carry it. Live-verified that claude-sonnet-5 returns 200 on
api.anthropic.com/v1 with a raw ANTHROPIC_API_KEY and runs via the Claude
CLI (it 403s on subscription-OAuth /v1 — scope-gated; runtime fallback
applies). Note: pi-ai 0.80.3 ships sonnet-5 natively, so this SUPPLEMENTAL
row dedupes once the install catches up.

- core: re-add claude-sonnet-5 to SUPPLEMENTAL_ANTHROPIC_PROVIDER_REGISTRATION
  and restore its static pricing (revert FN-7374); update pricing tests.
- engine/dashboard tests: flip the FN-7374 "withheld" assertions to the
  restored "advertised" behavior.

PR feedback:
- Trim the two FNXC comments (auth-storage.ts, pi.ts) to concise
  requirement prose per coding guidelines (CodeRabbit).
- Replace the now-inert getApiKey mock in two subscription routing tests
  with a clarifying note (Greptile).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-01 16:19:03 -07:00
gsxdsm
a1af5de609 fix(anthropic): restore direct OAuth execution for Claude subscriptions
Claude subscription (Max/Pro) chats regressed to 404/502/429 because
FN-7396 rerouted subscription OAuth to a /v1-based `anthropic-subscription`
runtime provider — reintroducing issue #1857 that FN-7391 had fixed. Both
routed the OAuth token to api.anthropic.com/v1, the surface that broke.

Proven in code that v0.51.0 (working) sent subscription OAuth directly to
/v1 via pi-ai's built-in `anthropic` provider (Claude Code impersonation:
Bearer + anthropic-beta oauth headers), NOT through the CLI. Restore that:

- auth-storage: getApiKey("anthropic") resolves subscription/legacy OAuth
  again (raw API key still wins), so the built-in provider gets the token.
- pi.ts: remove the runtime reroute and the /v1 `anthropic-subscription`
  execution provider so anthropic/* selections stay on the built-in provider.
- register-model-routes: advertise `anthropic` for OAuth users so direct
  OAuth is selectable in the picker.

Three independent surfaces, no rerouting: direct OAuth, raw ANTHROPIC_API_KEY
(precedence), and explicit pi-claude-cli.

Fixes #1857

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-01 15:40:16 -07:00
gsxdsm
20e42c65d1 FN-7400: enforce JSON protocol for CE debug launches
Prevent Compound Engineering Debug stages from failing launch when skill guidance would otherwise produce prose.

- Prioritize the interactive JSON question/complete protocol over loaded skill instructions in CE stage prompts.
- Document CE Debug dashboard protocol requirements in the bundled debug skill.
- Add regression coverage for Debug stage startup, malformed-output errors, and session list/delete handling.
- Add a patch changeset for the published Fusion package.

Files changed:
 .changeset/fn-7400-compound-debug-stage-json.md    |  7 ++
 .../src/__tests__/session-routes.test.ts           | 89 +++++++++++++++++++++-
 .../src/__tests__/stage-launch-guard.test.ts       | 78 +++++++++++++++++++
 .../src/session/orchestrator.ts                    |  7 +-
 .../src/skills/ce-debug/SKILL.md                   |  5 ++
 5 files changed, 184 insertions(+), 2 deletions(-)

Fusion-Task-Id: FN-7400

Fusion-Task-Lineage: 7d37660b-1073-489f-8115-20f07c8b05a4

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-01 15:39:34 -07:00
gsxdsm
9c2a264322 FN-7398: restore Anthropic model selection
Restore Anthropic model selector discovery across API-key, OAuth subscription, and Claude CLI flows.

- Read injected auth storage when building /api/models so Settings connection state feeds model availability.
- Keep Anthropic subscription OAuth separate from direct Anthropic API-key rows while allowing enabled Claude CLI models to appear.
- Add regression coverage for selector rendering, stale empty catalog refresh, and authenticated model-route filtering.
- Document the restored Anthropic provider surfaces and add a patch changeset.

Files changed:
 .changeset/fn-7398-anthropic-model-selector.md     |   7 ++
 docs/settings-reference.md                         |   4 +-
 .../components/__tests__/ModelSelectorTab.test.tsx | 105 +++++++++++++++++
 .../app/hooks/__tests__/useModelsCache.test.ts     |  40 +++++++
 .../dashboard/src/__tests__/routes-auth.test.ts    | 125 ++++++++++++++++++++-
 .../dashboard/src/routes/register-model-routes.ts  |  60 +++++++++-
 6 files changed, 333 insertions(+), 8 deletions(-)

Fusion-Task-Id: FN-7398

Fusion-Task-Lineage: 5d1b1b8e-9b8b-40fe-b76f-7d6142e0e21f

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-01 15:39:34 -07:00
gsxdsm
f998fe3ffc FN-7397: pass plugin context to lifecycle hooks
Ensure task lifecycle plugin hooks receive a PluginContext when fired through runtime event bridges.

- Append the plugin context for task-created, task-moved, and task-completed hooks when callers only provide raw lifecycle arguments.
- Preserve existing explicit-context hook calls and add coverage for loader and runner lifecycle dispatch paths.
- Cover Compound Engineering sync completion handling so taskStore is available in onTaskCompleted.

Files changed:
 .changeset/fn-7397-plugin-hook-context.md          |  7 +++
 packages/core/src/__tests__/plugin-loader.test.ts  | 52 +++++++++++++++++++++-
 packages/core/src/plugin-loader.ts                 | 34 +++++++++++++-
 .../engine/src/__tests__/plugin-runner.test.ts     | 25 ++++++++++-
 .../src/__tests__/sync.test.ts                     | 29 +++++++++++-
 5 files changed, 141 insertions(+), 6 deletions(-)

Fusion-Task-Id: FN-7397

Fusion-Task-Lineage: 7661714c-cf2a-4f4d-bec1-fc6bc11c0613

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-01 15:39:34 -07:00
gsxdsm
07aa1a0085 FN-7399: widen Project Models model menus
Make Project Models dropdown menus easier to scan without changing shared selector defaults.

- Add an opt-in readable menu width mode to the shared custom model dropdown.
- Apply the wider menu only to Project Models lane, workflow, and preset model selectors.
- Cover readable sizing, viewport clamping, and default trigger-width behavior with dashboard tests.
- Add a patch changeset for the published Fusion package.

Files changed:
 .changeset/wide-project-model-dropdowns.md         |   7 +
 .../app/__tests__/settings-sections.test.tsx       |  66 ++++++-
 .../app/components/CustomModelDropdown.tsx         |  17 +-
 .../__tests__/CustomModelDropdown.test.tsx         | 210 +++++++++++++++++++++
 .../settings/sections/ProjectModelsSection.tsx     |   8 +-
 5 files changed, 301 insertions(+), 7 deletions(-)

Fusion-Task-Id: FN-7399

Fusion-Task-Lineage: 40aae990-37bc-4ed8-8e2a-7e78a543053b

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-01 15:39:34 -07:00
gsxdsm
519d8dfbc8 FN-7394: stabilize broad App test setup
Stabilize App.test.tsx by resetting shared dashboard shell mocks for broad runs.

- Add default workflow and dashboard health API mock responses for App-level setup.
- Keep the default project list, current project, and persisted project view mode aligned between tests.
- Use persistent auth/settings mocks where App onboarding checks can re-fetch state.

Files changed:
 .../app/components/__tests__/App.test.tsx          | 65 ++++++++++++++++++----
 1 file changed, 55 insertions(+), 10 deletions(-)

Fusion-Task-Id: FN-7394

Fusion-Task-Lineage: 9b59ad83-817d-4285-940d-42d1bec29c20

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-01 15:39:34 -07:00
gsxdsm
e85d25e383 FN-7395: fix packaged desktop launch assets
Fix installed desktop launches so they use packaged runtime assets without parsing caller workspaces.

- Resolve normal desktop launches from packaged CLI desktop assets, with explicit override and dev paths.
- Stage desktop runtime assets into the published CLI package and include them in npm files.
- Route desktop --no-auth into the embedded dashboard server and document installed/dev launch behavior.
- Cover invalid JSON caller directories, missing packaged assets, package contents, and CLI routing in tests.

Files changed:
 .changeset/fn-7395-desktop-launcher.md             |   7 ++
 docs/cli-reference.md                              |  12 +-
 packages/cli/package.json                          |   1 +
 packages/cli/src/__tests__/bin.test.ts             |  19 +++
 packages/cli/src/__tests__/package-config.test.ts  |  11 ++
 packages/cli/src/bin.ts                            |  10 +-
 .../cli/src/commands/__tests__/desktop.test.ts     | 132 ++++++++++++++++++---
 packages/cli/src/commands/desktop.ts               |  85 ++++++++-----
 packages/cli/tsup.config.ts                        |  60 ++++++++++
 9 files changed, 285 insertions(+), 52 deletions(-)

Fusion-Task-Id: FN-7395

Fusion-Task-Lineage: e7a8d065-0d41-4fa3-9cea-1cfb5b466d16

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-01 15:39:34 -07:00
gsxdsm
19e59ec6c8 FN-7396: separate Anthropic OAuth routing paths
Separate Anthropic subscription OAuth execution from raw API-key and Claude CLI routing.

- Route subscription-backed Anthropic selections through a dedicated anthropic-subscription provider instead of raw anthropic API-key storage or implicit CLI execution.
- Preserve Anthropic OAuth refresh, status, usage, and re-login banner behavior across separated and legacy credential rows.
- Add dashboard and engine coverage for OAuth subscription auth, raw API-key isolation, and explicit Claude CLI routing.
- Document the separated Anthropic subscription, API-key, and CLI surfaces and add a release changeset.

Files changed:
 .../fn-7396-anthropic-oauth-cli-api-paths.md       |   7 ++
 docs/dashboard-guide.md                            |   4 +-
 docs/settings-reference.md                         |  12 ++-
 .../__tests__/OAuthReloginBanner.test.tsx          | 118 +++++++++++++++++++++
 .../dashboard/src/__tests__/routes-auth.test.ts    |  29 +++++
 packages/dashboard/src/__tests__/usage.test.ts     | 109 ++++++++++++++++++-
 .../dashboard/src/routes/register-auth-routes.ts   |  20 +++-
 packages/dashboard/src/usage.ts                    |  21 +++-
 packages/engine/src/__tests__/auth-storage.test.ts |  65 ++++++++++++
 .../src/__tests__/pi-create-fn-agent.test.ts       |  55 ++++++++--
 packages/engine/src/auth-storage.ts                |  61 +++++++++--
 packages/engine/src/pi.ts                          |  70 ++++++++----
 12 files changed, 521 insertions(+), 50 deletions(-)

Fusion-Task-Id: FN-7396

Fusion-Task-Lineage: f5f42a40-b855-46ad-b2ae-3509e903f286

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-01 15:39:34 -07:00
gsxdsm
1ccef81950 FN-7393: add planner chat task metrics access
Planner chat can now answer read-only task usage and timing questions with scoped metrics context.

- Add a task-scoped metrics tool for token, cost, runtime, timing-event, workflow-step, and per-model usage summaries.
- Wire planner chat to expose the metrics tool only for task-detail planner sessions.
- Cover metric aggregation, stale pricing uncertainty, chat tool routing, and planner context behavior with dashboard tests.
- Document planner chat metrics support and add a published package changeset.

Files changed:
 .changeset/fn-7393-planner-metrics.md              |   7 +
 docs/dashboard-guide.md                            |   2 +-
 .../dashboard/src/__tests__/chat-manager.test.ts   | 153 +++++++
 .../__tests__/task-planner-chat-metrics.test.ts    | 243 +++++++++++
 packages/dashboard/src/chat.ts                     |  61 ++-
 .../dashboard/src/task-planner-chat-context.ts     |   5 +-
 .../dashboard/src/task-planner-chat-metrics.ts     | 445 +++++++++++++++++++++
 7 files changed, 912 insertions(+), 4 deletions(-)

Fusion-Task-Id: FN-7393

Fusion-Task-Lineage: aed7574e-67cf-49af-982f-dfd4620ebe0a

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-01 15:39:34 -07:00
gsxdsm
4beae7130d FN-7392: suppress hidden planner chat unread badges
Suppress hidden task-planner chat replies from triggering the global unread badge while preserving opt-in common-feed behavior.

- Enrich chat message SSE payloads with session agent metadata and task chat common-feed visibility.
- Ignore hidden `task-planner:` assistant events in the chat unread badge hook.
- Cover hidden, visible, and legacy payload behavior with dashboard SSE and hook tests.
- Document the unread badge scope and add a patch changeset for the published CLI package.

Files changed:
 .changeset/fn-7392-planner-chat-unread.md          |   7 +
 docs/dashboard-guide.md                            |   2 +-
 .../app/components/__tests__/App.test.tsx          |  55 ++++++++
 .../app/hooks/__tests__/useChatUnreadBadge.test.ts | 110 ++++++++++++++++
 packages/dashboard/app/hooks/useChatUnreadBadge.ts |  32 ++++-
 packages/dashboard/src/__tests__/sse.test.ts       | 141 ++++++++++++++++++++-
 packages/dashboard/src/sse.ts                      |  36 +++++-
 7 files changed, 378 insertions(+), 5 deletions(-)

Fusion-Task-Id: FN-7392

Fusion-Task-Lineage: 13fd5c51-eefa-4088-979b-005c8b217f89

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-01 15:39:34 -07:00
gsxdsm
bfe5ceddc8 FN-7389: dedupe Claude CLI Sonnet 5 models
Keep Claude Sonnet 5 visible only through eligible provider catalogs without duplicate picker rows.

- Dedupe API model rows by provider/model after registry and supplemental catalog merges.
- Cover Claude CLI Sonnet 5 visibility, disabled-toggle filtering, and duplicate suppression in API tests.
- Add dropdown coverage for stale direct-Anthropic favorite shells when Claude CLI Sonnet 5 is selected.
- Add a patch changeset for the model picker fix.

Files changed:
 .changeset/fn-7389-sonnet-5-model-list.md          |  7 +++++
 .../__tests__/CustomModelDropdown.test.tsx         | 33 ++++++++++++++++++++++
 .../dashboard/src/__tests__/routes-auth.test.ts    | 15 ++++++++--
 .../dashboard/src/routes/register-model-routes.ts  | 12 ++++++++
 4 files changed, 65 insertions(+), 2 deletions(-)

Fusion-Task-Id: FN-7389

Fusion-Task-Lineage: d41b422e-60f9-46c3-9c6f-d115a86e9e2a

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-01 15:39:33 -07:00
gsxdsm
775ff5fb9c FN-7391: route Anthropic subscription chats through Claude CLI
Keep Anthropic OAuth subscription credentials away from the direct /v1 provider while preserving raw API-key routing.

- Treat direct anthropic auth as raw API-key-only in auth storage and model discovery.
- Re-route persisted anthropic model selections to the Claude CLI provider when no raw Anthropic API key is configured.
- Add regression coverage for OAuth-only routing, raw API-key preservation, and provider list separation.
- Document the distinct raw API key, OAuth subscription, and Claude CLI routes.

Files changed:
 .../fn-7391-anthropic-subscription-cli-routing.md  |   7 ++
 docs/settings-reference.md                         |   2 +-
 .../dashboard/src/__tests__/routes-auth.test.ts    |  74 ++++++++++++++
 .../dashboard/src/routes/register-model-routes.ts  |  27 +++++-
 packages/engine/src/__tests__/auth-storage.test.ts | 108 +++++++--------------
 .../src/__tests__/pi-create-fn-agent.test.ts       | 100 +++++++++++++++++++
 packages/engine/src/auth-storage.ts                |  45 ++++-----
 packages/engine/src/pi.ts                          |  61 ++++++++++++
 8 files changed, 319 insertions(+), 105 deletions(-)

Fusion-Task-Id: FN-7391

Fusion-Task-Lineage: d1fecc2d-7f31-408c-bf65-0e65b7fd88b1

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-01 15:39:33 -07:00
gsxdsm
18b07b5b7d FN-7388: Fix folded Android terminal mobile sizing
Fix Android foldable terminal surfaces so initial folded panes use mobile viewport geometry.\n\n- Use touch visualViewport dimensions when classifying terminal mobile mode.\n- Apply mobile TerminalModal shell styles outside media queries for folded Android panes.\n- Cover folded Android viewport behavior in terminal and viewport-mode tests.\n- Document the folded viewport baseline invariant and add a patch changeset.\n\nFiles changed:\n .changeset/fn-7388-android-folded-terminal-spacing.md     |  7 +++\n docs/solutions/ui-bugs/mobile-terminal-folded-viewport-baseline.md    |  8 ++-\n packages/dashboard/app/components/SessionTerminal.tsx   | 18 +++++-\n packages/dashboard/app/components/TerminalModal.css     | 37 +++++++++++\n packages/dashboard/app/components/TerminalModal.tsx     | 31 ++++++++-\n packages/dashboard/app/components/__tests__/SessionTerminal.mobile.test.tsx      | 31 +++++++++\n packages/dashboard/app/components/__tests__/TerminalModal.test.tsx    | 73 ++++++++++++++++++++++\n packages/dashboard/app/hooks/__tests__/useViewportMode.test.ts    | 29 ++++++++-\n packages/dashboard/app/hooks/useViewportMode.ts    | 26 +++++++-\n 9 files changed, 251 insertions(+), 9 deletions(-)

Fusion-Task-Id: FN-7388

Fusion-Task-Lineage: cdf2ef0d-be1f-4414-9113-17ffebdecde5

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-01 15:39:33 -07:00
gsxdsm
3219ced7c1 FN-7390: add latest Claude CLI models
Expose the latest Claude CLI-callable Anthropic models with corrected supplemental metadata.

- Add Sonnet 5, Fable 5, and Opus 4.8 to the pi-claude-cli supplemental model catalog.
- Update context/output limits for recent Claude 4.x CLI rows.
- Preserve catalog deduplication and assert Fable 5 uses the current 0/0 per MTok pricing.
- Add a patch changeset for the published Fusion CLI package.

Files changed:
 .changeset/fn-7390-claude-cli-latest-models.md     |  7 ++++
 packages/pi-claude-cli/index.ts                    | 40 ++++++++++++++++--
 .../pi-claude-cli/src/__tests__/provider.test.ts   | 47 +++++++++++++++-------
 3 files changed, 76 insertions(+), 18 deletions(-)

Fusion-Task-Id: FN-7390

Fusion-Task-Lineage: 54df5de7-c29e-44af-bcb6-9d768103576e

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-01 15:39:33 -07:00
gsxdsm
d7ee6ce87f fix: tolerate recovered CE question ids (#1855)
## Summary
- add an opt-in `allowAnswerQuestionIdDrift` flag for interactive AI
sessions
- keep strict question-id validation by default
- enable the tolerance only for Compound Engineering recovered sessions
so persisted session rows can answer after dashboard
restarts/non-deterministic rehydration

## Test Plan
- `corepack pnpm --filter @fusion/engine exec vitest run
src/__tests__/interactive-ai-session.test.ts --silent=passed-only
--reporter=dot`
- `corepack pnpm --filter @fusion/engine typecheck`
- `corepack pnpm --filter @fusion-plugin-examples/compound-engineering
build`


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

* **Bug Fixes**
* Improved interactive session recovery so persisted answers can
continue after dashboard restarts, even if the question ID changes
during rehydration.
* Keeps strict question-ID validation by default; mismatches still fail
unless drift is explicitly allowed.
* **New Features**
* Added `allowAnswerQuestionIdDrift` option to permit accepting the
persisted question ID during recovered session answering.
* **Tests**
* Added/updated coverage for strict mismatch error behavior and the
successful completion path when drift is enabled.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-07-01 15:21:17 -07:00
gsxdsm
14bb7a3707 feat(FN-7360): remove legacy workflow step engine
The step execution engine was already gone (runWorkflowSteps deleted,
workflow_steps table dropped in migration 132). This removes what remained:
the linear step compiler (compileWorkflowToSteps/validateLinearity/
WorkflowCompileError), which survived only as a validator + step-preview
generator.

parseWorkflowIr/validateV2 (which accepts branching graphs) is now the sole
workflow validity gate at save/select/refine and in the graph task runner.
Custom branching workflows are now selectable and run on the graph
interpreter instead of being rejected as non-linear.

- core: delete workflow-compiler.ts; rework store.validateWorkflowCompilable
  onto parseWorkflowIr; move MERGE_REGION_NODE_KINDS into
  workflow-lifecycle-validation; retag workflow-steps-to-ir as legacy lowering
- engine: drop the compiler double-validation in workflow-graph-task-runner
- dashboard: remove POST /api/workflows/:id/compile + client wrapper; drop the
  interpreterOnly response field and editor banner; no post-save compile check
- i18n: remove the orphaned workflowNodes.interpreterOnly key across locales
- tests: reframe two workflow-selection tests whose premise inverted; fix a
  pre-existing red in builtin-lead-generation (completion-summary node)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-01 11:28:03 -07:00
gsxdsm
4694b4a8c9 FN-7387: move destructive task actions to menu bottom
Task context menus now place destructive actions after safer task operations.

- Reorder shared task action descriptors so Reset and Delete render at the bottom, with Delete last.
- Update context-menu model coverage for lifecycle, GitHub tracking, pause, and workflow column states.
- Add a patch changeset for the published Fusion CLI package.

Files changed:
 .changeset/fn-7387-context-menu-action-order.md    |  7 ++++++
 .../dashboard/app/components/TaskContextMenu.tsx   | 24 +++++++++++--------
 .../components/__tests__/TaskContextMenu.test.tsx  | 27 +++++++++++++---------
 3 files changed, 38 insertions(+), 20 deletions(-)

Fusion-Task-Id: FN-7387

Fusion-Task-Lineage: f320ed96-d5e7-48f4-9151-59357ae12de7

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-01 11:18:57 -07:00
gsxdsm
869974cd5a FN-7383: refresh workflows after chat authoring
Chat-authored workflow changes now propagate immediately to workflow selectors and editors.

- Emit workflow lifecycle SSE events when chat, planner, or room workflow tools create, update, select, configure, or delete workflows.
- Force-refresh board workflow caches and the workflow editor list when workflow lifecycle events arrive.
- Add cross-surface tests for chat workflow creation visibility and room/chat workflow tool event behavior.
- Add a patch changeset for the published Fusion package.

Files changed:
 .changeset/fn-7383-chat-workflow-authoring.md      |  7 +++
 .../workflow-selection-cross-surface.test.tsx      | 23 +++++++++
 packages/dashboard/app/api/legacy.ts               |  9 ++--
 .../app/components/WorkflowNodeEditor.tsx          | 23 ++++++++-
 .../app/hooks/__tests__/useBoardWorkflows.test.ts  | 27 +++++++---
 packages/dashboard/app/hooks/useBoardWorkflows.ts  | 22 +++++---
 .../utils/__tests__/boardWorkflowsCache.test.ts    | 12 ++++-
 .../dashboard/app/utils/boardWorkflowsCache.ts     | 14 +++++
 .../dashboard/src/__tests__/chat-manager.test.ts   | 44 ++++++++++++++--
 .../dashboard/src/__tests__/chat.rooms.test.ts     | 44 ++++++++++++++++
 packages/dashboard/src/chat.ts                     | 59 +++++++++++++++++++---
 11 files changed, 255 insertions(+), 29 deletions(-)

Fusion-Task-Id: FN-7383

Fusion-Task-Lineage: ebe4c982-214b-402f-b829-a58ace19ffe0

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-01 11:12:59 -07:00
gsxdsm
4378053433 FN-7386: overlay Activity expand controls and remove Raw duplicate
Overlay Activity expansion controls while keeping Raw logs to a single fullscreen affordance.

- Move Live and Feed Activity expand controls into overlaid buttons instead of a reserved toolbar row.
- Let Raw logs rely on AgentLogViewer fullscreen controls, including loading and empty states, to avoid duplicate expand buttons.
- Update responsive CSS and regression coverage for Activity overlay behavior and Raw fullscreen uniqueness.
- Add a patch changeset for the dashboard Activity control fix.

Files changed:
 .changeset/fn-7386-activity-expand.md              |  7 ++++
 .../dashboard/app/components/AgentLogViewer.css    |  6 ++++
 .../dashboard/app/components/AgentLogViewer.tsx    | 34 ++++++++++++-------
 packages/dashboard/app/components/TaskChatTab.tsx  |  2 +-
 .../dashboard/app/components/TaskDetailModal.css   | 36 ++++++++++++++------
 .../dashboard/app/components/TaskDetailModal.tsx   | 29 +++++++++--------
 .../TaskDetailModal.attachments-and-tabs.test.tsx  | 38 ++++++++++++++++++----
 ...etailModal.responsive-and-dependencies.test.tsx | 17 ++++++++++
 8 files changed, 128 insertions(+), 41 deletions(-)

Fusion-Task-Id: FN-7386

Fusion-Task-Lineage: 93728fc2-785d-44de-9903-b61df4911053

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-01 11:07:32 -07:00
gsxdsm
ec0fa960d7 FN-7382: add triage plan auto-approve toggle
Add a board-column shortcut for toggling project plan auto-approval.

- Surface an Auto-approve plan switch in Triage and workflow intake/hold column menus.
- Wire the dashboard setting hook to persist planApprovalMode between workflow and auto-approve-all with optimistic rollback.
- Cover legacy and workflow board propagation plus column menu behavior with tests.
- Document the shortcut and add a patch changeset for the published CLI package.

Files changed:
 .changeset/fn-7382-triage-auto-approve-toggle.md   |   7 ++
 docs/dashboard-guide.md                            |   2 +
 docs/settings-reference.md                         |   2 +-
 packages/dashboard/app/App.tsx                     |   4 +
 packages/dashboard/app/components/Board.tsx        |   7 +-
 packages/dashboard/app/components/Column.tsx       |  35 ++++++-
 .../app/components/__tests__/Board.test.tsx        |  55 +++++++++-
 .../app/components/__tests__/Column.test.tsx       |  75 ++++++++++++++
 .../app/components/dashboard/MainContent.tsx       |   6 ++
 .../dashboard/app/components/dashboard/types.ts    |   2 +
 .../app/hooks/__tests__/useAppSettings.test.ts     | 114 +++++++++++++++++++++
 packages/dashboard/app/hooks/useAppSettings.ts     |  39 +++++++
 12 files changed, 343 insertions(+), 5 deletions(-)

Fusion-Task-Id: FN-7382

Fusion-Task-Lineage: 1db96b50-3a8f-4074-b957-c30d1745aa23

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-01 11:01:50 -07:00
gsxdsm
af6e671e72 FN-7385: preserve live worktrees with fresh fallback
Preserve active worktree owners by retrying acquisition on a fresh sibling checkout.

- Add executor fallback that detects active cleanup refusals and creates bounded sibling branches in fresh generated worktrees.\n- Cover DB-only, same-task workflow-step, existing-branch, and exhausted-suffix conflict paths with regression tests.\n- Document the live worktree conflict fallback and add a patch changeset for the published CLI package.\n\nFiles changed:\n .../fn-7385-active-worktree-fresh-fallback.md      |   7 +\n docs/architecture.md                               |   1 +\n .../__tests__/executor-worktree-conflict.test.ts   | 103 +++++++++++++-\n .../engine/src/__tests__/executor-worktree.test.ts | 153 ++++++++++++++++++---\n packages/engine/src/executor.ts                    |  90 ++++++++----\n 5 files changed, 312 insertions(+), 42 deletions(-)

Fusion-Task-Id: FN-7385

Fusion-Task-Lineage: 02c31656-1248-49c0-9063-0750cc8e41c6

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-01 10:55:57 -07:00
gsxdsm
d94c3591d3 FN-7381: honor project auto plan approval
Honor project-level auto plan approval across fresh and recovered triage finalization.

- Merge effective workflow settings during approved-task recovery before resolving the manual plan approval gate.
- Keep release authorization and Workflow Plan Review independent from manual plan approval bypasses.
- Add regression coverage for stored workflow approval settings overridden by project auto approval.
- Document the planApprovalMode precedence and release the fix as a patch.

Files changed:
 .changeset/fn-7381-auto-plan-approval.md           |  7 ++++
 docs/settings-reference.md                         |  2 +-
 docs/workflow-steps.md                             |  2 ++
 .../src/__tests__/effective-settings-merge.test.ts | 12 +++++++
 .../triage-plan-review-unavailable-retry.test.ts   | 27 +++++++++++++-
 packages/engine/src/__tests__/triage.test.ts       | 42 ++++++++++++++++++++++
 packages/engine/src/triage.ts                      | 13 ++++---
 7 files changed, 99 insertions(+), 6 deletions(-)

Fusion-Task-Id: FN-7381
Fusion-Task-Lineage: c00fd0d9-ec0a-4dc5-8d6f-b49640157365
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-01 10:49:58 -07:00
gsxdsm
e341c0673f FN-7379: render planner questions outside tool groups
Make planner clarification prompts stay answerable when assistant messages include other tool calls.

- Extract fn_ask_question cards before grouping generic chat tool calls.
- Keep non-question tools in the existing grouped tool-call details.
- Cover persisted and streamed mixed-tool planner transcripts with actionable question assertions.
- Add a patch changeset for the planner-chat fix.

Files changed:
 .changeset/fn-7379-planner-question-cards.md       |  7 +++
 .../app/components/StandardChatSurface.tsx         | 73 +++++++++++++++-------
 .../app/components/TaskPlannerChatTab.tsx          |  3 +
 .../__tests__/TaskPlannerChatTab.test.tsx          | 48 ++++++++++++--
 4 files changed, 103 insertions(+), 28 deletions(-)

Fusion-Task-Id: FN-7379

Fusion-Task-Lineage: 5e88f991-cbcf-49d8-a815-fc44d49bad10

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-01 10:45:19 -07:00
Phil Larson
a8a2673429 fix: derive CE question drift option type 2026-07-01 10:38:30 -07:00
gsxdsm
37027632e0 FN-7378: upgrade pi SDK dependencies
Upgrade the bundled pi SDK packages and compatibility imports for the 0.80.3 release.

- Bump @earendil-works/pi-ai and @earendil-works/pi-coding-agent consumers to ^0.80.3.
- Update pi SDK import paths for the new compatibility and API export map layout.
- Refresh dependency contract tests and add a patch changeset for the published CLI package.

Files changed:
 .changeset/fn-7378-pi-sdk-upgrade.md               |   7 ++
 packages/cli/package.json                          |   4 +-
 packages/cli/src/__tests__/package-config.test.ts  |   8 +-
 packages/dashboard/package.json                    |   2 +-
 packages/engine/package.json                       |   4 +-
 .../custom-providers-openai-completions.test.ts    |   8 +-
 pnpm-lock.yaml                                     | 108 ++++++++++-----------
 7 files changed, 72 insertions(+), 69 deletions(-)

Fusion-Task-Id: FN-7378

Fusion-Task-Lineage: ed8847dc-2adf-4ede-aa75-045f2e2436a0

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-01 10:37:44 -07:00
gsxdsm
a4ef439212 FN-7376: preserve planner chat stop icon
Keep Planner Chat mobile action text hiding from clipping the streaming stop icon.

- Narrow the mobile Planner Chat send-button label selector to leave the shared stop icon span visible.
- Add regression coverage for send and stop icon visibility during planner thinking.
- Add a patch changeset for the published Fusion package.

Files changed:
 .changeset/fn-7376-planner-chat-stop-icon.md       |  7 ++++
 .../app/components/TaskPlannerChatTab.css          |  6 +++-
 .../__tests__/TaskPlannerChatTab.test.tsx          | 41 ++++++++++++++++++++++
 3 files changed, 53 insertions(+), 1 deletion(-)

Fusion-Task-Id: FN-7376
Fusion-Task-Lineage: 45ef720e-5ae1-4890-a2ed-afc4f97a8bb0
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-01 10:30:45 -07:00
gsxdsm
427ce04a6f FN-7374: stop advertising Claude Sonnet 5 statically
Stop Fusion from statically offering Claude Sonnet 5 when account availability is unknown.

- Remove the supplemental direct Anthropic Claude Sonnet 5 model registration and static pricing row.
- Keep Claude CLI supplemental metadata from force-adding Sonnet 5 while preserving other extra Claude models.
- Update model registry, pricing, adapter, and provider tests to expect unavailable or upstream-only Sonnet 5 handling.
- Add a patch changeset for the operator-facing fix.

Files changed:
 .changeset/fn-7374-anthropic-sonnet-5-404.md       |  7 ++++++
 packages/core/src/__tests__/model-pricing.test.ts  | 20 +++++++---------
 packages/core/src/anthropic-models.ts              | 24 +++----------------
 packages/core/src/model-pricing.ts                 | 11 ++-------
 .../dashboard/src/__tests__/routes-auth.test.ts    | 13 ++++++----
 .../src/__tests__/pi-create-fn-agent.test.ts       | 28 ++++++----------------
 .../src/cli-agent/adapters/__tests__/pi.test.ts    |  6 ++---
 packages/pi-claude-cli/index.ts                    | 13 ++--------
 .../src/__tests__/process-manager.test.ts          |  4 ++--
 .../pi-claude-cli/src/__tests__/provider.test.ts   | 12 ++--------
 10 files changed, 44 insertions(+), 94 deletions(-)

Fusion-Task-Id: FN-7374

Fusion-Task-Lineage: 9c498bb4-c4c1-4dd8-ae80-869dfb1d4c2c

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-01 10:23:39 -07:00
gsxdsm
919420e11a FN-7373: enforce active worktree cap
Enforce maxWorktrees at the task-store transition boundary so active execution worktrees cannot exceed the operator cap.

- Reject allocated moves into in-progress when existing active or pending holders already meet maxWorktrees.
- Count in-progress tasks and pending in-progress transitions while excluding the task being moved.
- Cover scheduler and hold-release paths with regression tests and document the hard-cap invariant.
- Add a patch changeset for the published CLI package.

Files changed:
 .changeset/fn-7373-max-worktrees-cap.md            |  7 ++
 docs/architecture.md                               |  2 +-
 packages/core/src/__tests__/store-movement.test.ts | 80 +++++++++++++++++++++-
 packages/core/src/store.ts                         | 50 ++++++++++++++
 packages/engine/src/__tests__/hold-release.test.ts | 52 ++++++++++++++
 .../__tests__/scheduler-workflow-cutover.test.ts   | 53 ++++++++++++++
 6 files changed, 242 insertions(+), 2 deletions(-)

Fusion-Task-Id: FN-7373
Fusion-Task-Lineage: be4a9649-f6ae-475f-9395-07433e98de5c
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-01 10:18:32 -07:00
gsxdsm
17505231d6 FN-7372: add GitHub tracking context menu action
Expose GitHub tracking enablement from task context menus while reusing existing task update paths.

- Add an Enable GitHub tracking action to the shared task context menu model for untracked tasks with update-capable hosts.
- Wire board cards and list rows to PATCH githubTracking, refresh local snapshots, close stale menus, and show task-detail toasts.
- Extend context-menu/card/list tests and add a changeset for the published CLI package.

Files changed:
 .../fn-7372-enable-github-tracking-context-menu.md |  7 +++
 packages/dashboard/app/components/Column.tsx       |  2 +-
 packages/dashboard/app/components/ListView.tsx     | 20 ++++++++-
 packages/dashboard/app/components/TaskCard.tsx     | 27 +++++++++---
 .../dashboard/app/components/TaskContextMenu.tsx   | 16 ++++++-
 .../app/components/__tests__/ListView.test.tsx     | 51 +++++++++++++++++++++-
 .../app/components/__tests__/TaskCard.test.tsx     | 41 +++++++++++++++++
 .../components/__tests__/TaskContextMenu.test.tsx  | 38 ++++++++++++++++
 packages/dashboard/app/hooks/useTasks.ts           |  2 +-
 9 files changed, 193 insertions(+), 11 deletions(-)

Fusion-Task-Id: FN-7372

Fusion-Task-Lineage: 0d2a05fb-6152-4e29-ac2c-88dd055132ee

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-01 10:13:33 -07:00
gsxdsm
627c5fb0bd FN-7371: clarify CI mode regression guard
Clarifies the test-infrastructure regression guard for CI mode selection.\n\n- Update the FNXC rationale for the CI=true --print-mode subprocess test.\n- Document that full-suite mode remains an explicit opt-in via --full or FUSION_TEST_FULL.\n\nFiles changed:\n scripts/__tests__/test-changed.test.mjs | 4 ++--\n 1 file changed, 2 insertions(+), 2 deletions(-)

Fusion-Task-Id: FN-7371

Fusion-Task-Lineage: b7482ef1-4db7-4003-85f7-3466470d3dff

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-01 10:04:55 -07:00
Phil Larson
80b2dafdf7 fix: limit CE question-id drift tolerance to recovery 2026-07-01 10:00:20 -07:00
gsxdsm
6d1507aa8f FN-7380: Close task detail on delete
Close task detail hosts immediately after delete confirmation.

- Wire the embedded list split-detail host to clear selected task state when detail content requests close.
- Keep task-detail delete close idempotent across initial delete failures and follow-up prompts.
- Add regression coverage for split-detail closing and optimistic delete failure handling.
- Add a patch changeset for the operator-visible delete detail behavior.

Files changed:
 .changeset/fn-7380-task-detail-delete-close.md     |  7 ++++
 packages/dashboard/app/components/ListView.tsx     | 15 +++++++
 .../dashboard/app/components/TaskDetailModal.tsx   |  4 +-
 .../app/components/__tests__/ListView.test.tsx     | 22 ++++++++++
 .../components/__tests__/TaskDetailModal.test.tsx  | 49 ++++++++++++++++++++++
 5 files changed, 95 insertions(+), 2 deletions(-)

Fusion-Task-Id: FN-7380
Fusion-Task-Lineage: 0b7fa676-cf89-4116-aa64-c10840b6fb07
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-01 10:00:14 -07:00
gsxdsm
a9e2baa9f8 FN-7367: link imported GitHub issues to tracking
Imported GitHub issues can now adopt their source issue as the tracking issue without changing ordinary task defaults.

- Add the project-scoped githubLinkImportedIssuesToTracking setting with docs, Settings UI, and defaults.
- Honor the import-only setting across dashboard, CLI, and extension GitHub issue import paths.
- Cover saved settings and import tracking behavior with CLI, dashboard, and parity tests.
- Add a minor changeset for the published CLI package.

Files changed:
 .changeset/fn-7367-github-import-tracking.md       |  7 +++
 docs/settings-reference.md                         |  3 +-
 packages/cli/src/__tests__/extension.test.ts       | 73 ++++++++++++++++++++++
 .../task-command-github-import-tracking.test.ts    | 16 +++++
 packages/cli/src/commands/__tests__/task.test.ts   | 28 +++++++++
 packages/cli/src/commands/task.ts                  | 45 +++++++------
 packages/cli/src/extension.ts                      | 45 +++++++------
 .../core/src/__tests__/settings-parity.test.ts     |  4 ++
 packages/core/src/settings-schema.ts               |  1 +
 packages/core/src/types.ts                         |  6 ++
 .../app/__tests__/settings-save-split.test.ts      | 19 ++++++
 .../dashboard/app/components/SettingsModal.tsx     |  6 ++
 .../__tests__/SettingsModal.general.test.tsx       | 59 +++++++++++++++++
 .../__tests__/SettingsModal.test-harness.tsx       |  1 +
 .../settings/sections/GeneralSection.tsx           |  9 +++
 .../dashboard/src/__tests__/routes-github.test.ts  | 45 +++++++++++++
 .../dashboard/src/routes/register-git-github.ts    |  7 +++
 17 files changed, 325 insertions(+), 49 deletions(-)

Fusion-Task-Id: FN-7367
Fusion-Task-Lineage: 43671cdf-7e0d-4b7a-9ba2-54c9a367dfec
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-01 09:50:57 -07:00
gsxdsm
12ee9a92d2 FN-7361: add exact tool permission overrides
Add exact tool-name permission overrides for permanent agent tool usage.

- Add persisted toolRules policy support with normalization, project-default inheritance, and escalation comparison.
- Enforce exact tool dispositions before category rules in engine gating and permanent-agent decisions.
- Extend the permission editor, agent/settings routes, translations, docs, and tests for fine-grained tool controls.

Files changed:
 .changeset/fn-7361-tool-permissions.md             |   7 +
 docs/agents.md                                     |  18 ++-
 docs/settings-reference.md                         |  12 +-
 .../agent-permission-policy-resolution.test.ts     |  58 +++++++-
 .../src/__tests__/agent-permission-policy.test.ts  |  17 +++
 ...settings-schema-agent-permission-policy.test.ts |   6 +-
 packages/core/src/agent-permission-policy.ts       |  87 ++++++++++--
 packages/core/src/index.ts                         |   2 +-
 packages/core/src/types.ts                         |  19 ++-
 .../dashboard/app/components/AgentDetailView.tsx   |  17 +--
 .../app/components/AgentPermissionPolicyEditor.css |  59 +++++++-
 .../app/components/AgentPermissionPolicyEditor.tsx | 156 ++++++++++++++++++++-
 .../__tests__/AgentPermissionPolicyEditor.test.tsx |  92 +++++++++++-
 .../settings/sections/AgentPermissionsSection.tsx  |   6 +-
 .../dashboard/src/__tests__/routes-agents.test.ts  |  79 +++++++++++
 .../src/__tests__/routes-settings.test.ts          |  21 +++
 .../src/routes/register-agent-core-routes.ts       |  37 +++--
 .../agent-action-gate-project-default.test.ts      |  34 +++++
 .../engine/src/__tests__/agent-action-gate.test.ts |  43 ++++++
 .../src/__tests__/gating-classifications.test.ts   |  55 ++++++++
 packages/engine/src/agent-action-gate.ts           |  17 ++-
 packages/engine/src/permanent-agent-gating.ts      |  11 +-
 packages/i18n/locales/en/app.json                  |  15 +-
 packages/i18n/locales/es/app.json                  |  15 +-
 packages/i18n/locales/fr/app.json                  |  15 +-
 packages/i18n/locales/ko/app.json                  |  15 +-
 packages/i18n/locales/zh-CN/app.json               |  15 +-
 packages/i18n/locales/zh-TW/app.json               |  15 +-
 28 files changed, 878 insertions(+), 65 deletions(-)

Fusion-Task-Id: FN-7361

Fusion-Task-Lineage: 006e4311-91a5-4792-9a54-feaba892129a

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-01 09:45:30 -07:00
Phil Larson
ad8db59374 fix: tolerate recovered CE question ids 2026-07-01 09:41:20 -07:00
gsxdsm
914c7c189f FN-7377: hide failed banner in expanded planner chat
Hide failed-task alert chrome while the task planner chat is maximized.

- Gate the failed-task banner on Planner Chat expansion state so the expanded conversation gets the full detail surface.\n- Preserve failed-banner visibility for normal detail, collapsed Planner Chat, and expanded Activity views.\n- Add dashboard regression coverage and a patch changeset for the published CLI package.\n\nFiles changed:\n .changeset/fn-7377-planner-chat-failed-banner.md   |   7 ++\n .../dashboard/app/components/TaskDetailModal.tsx   |   7 +-\n .../components/__tests__/TaskDetailModal.test.tsx  | 101 +++++++++++++++++++++\n 3 files changed, 114 insertions(+), 1 deletion(-)

Fusion-Task-Id: FN-7377

Fusion-Task-Lineage: 5cd8c846-a27d-4040-8124-ecf547300c78

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-01 09:35:21 -07:00
gsxdsm
67f93cedd9 FN-7370: show thinking effort in model log markers
Display configured thinking effort alongside runtime task-log model markers.

- Add a shared formatter for model marker annotations and use it for triage, executor, reviewer, and workflow-step logs.
- Teach dashboard model parsing to ignore parenthesized marker diagnostics while preserving provider/model resolution.
- Cover thinking-effort markers with engine and dashboard tests, docs, and a patch changeset.

Files changed:
 .changeset/fn-7370-thinking-effort-model-logs.md   |  7 +++
 docs/agents.md                                     |  2 +
 packages/dashboard/app/components/TaskChatTab.tsx  |  7 +--
 .../app/components/__tests__/TaskChatTab.test.tsx  |  6 +--
 ...skDetailModal.models-progress-workflow.test.tsx |  6 +--
 .../__tests__/WorkflowResultsTab.test.tsx          |  6 +--
 .../__tests__/effective-model-resolution.test.ts   | 17 ++++--
 .../app/components/effective-model-resolution.ts   | 23 +++++---
 .../src/__tests__/executor-model-marker.test.ts    | 62 ++++++++++++++++++++++
 .../engine/src/__tests__/executor-test-helpers.ts  |  4 ++
 .../__tests__/executor-workflow-step-model.test.ts | 23 +++++++-
 packages/engine/src/__tests__/pi.test.ts           | 12 ++++-
 packages/engine/src/__tests__/reviewer.test.ts     | 37 +++++++++++++
 packages/engine/src/__tests__/triage.test.ts       | 20 ++++++-
 packages/engine/src/executor.ts                    | 17 ++++--
 packages/engine/src/pi.ts                          | 19 +++++++
 packages/engine/src/reviewer.ts                    |  7 +--
 packages/engine/src/triage.ts                      |  4 +-
 18 files changed, 244 insertions(+), 35 deletions(-)

Fusion-Task-Id: FN-7370

Fusion-Task-Lineage: 2c94a20c-77e1-41db-8af0-76239b30e3c4

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-01 09:30:00 -07:00
gsxdsm
4805182d0c FN-7369: add custom answers to Planning Mode confirms
Planning Mode confirm prompts can now preserve a user-authored Other answer instead of forcing Yes or No.

- Add an Other option with a textarea to confirm-style Planning Mode questions.
- Submit confirm Other answers with the shared `_other` payload and render them in agent/history formatting.
- Cover confirm Other behavior in modal flow and formatter tests.
- Add a patch changeset for the published CLI package.

Files changed:
 .changeset/fn-7369-confirm-other.md                |   7 ++
 .../dashboard/app/components/PlanningModeModal.css |  10 ++
 .../dashboard/app/components/PlanningModeModal.tsx |  74 +++++++++---
 .../PlanningModeModal.planning-flow.test.tsx       | 125 +++++++++++++++++++++
 .../planning-interview-formatters.test.ts          |  27 +++++
 packages/dashboard/src/planning.ts                 |  10 +-
 6 files changed, 234 insertions(+), 19 deletions(-)

Fusion-Task-Id: FN-7369

Fusion-Task-Lineage: 67b4d943-8ff3-4502-bca1-7e74eb95ac06

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-01 09:24:50 -07:00
gsxdsm
7e5d908efa FN-7375: fix Activity dropdown clipping
Keep the task Activity view selector visible without blanking the mobile tab strip.

- Portal the Activity view menu to the document body and clamp its fixed position to the visual viewport.
- Close and refocus the menu safely across task changes, scrolling, resizing, keyboard selection, and outside clicks.
- Add regression coverage for mobile clipping, tab-strip preservation, and the changeset release note.

Files changed:
 .changeset/fn-7375-activity-dropdown-overlay.md    |   7 +
 .../dashboard/app/components/TaskDetailModal.css   |  15 +-
 .../dashboard/app/components/TaskDetailModal.tsx   | 186 ++++++++++++++++++---
 .../__tests__/TaskDetailModal.css.test.ts          |   7 +-
 ...etailModal.responsive-and-dependencies.test.tsx |  12 +-
 .../TaskDetailModal.task-activity-chat.test.tsx    |  61 +++++++
 6 files changed, 254 insertions(+), 34 deletions(-)

Fusion-Task-Id: FN-7375

Fusion-Task-Lineage: 5999507a-edd3-4485-935a-885f7c143ed4

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-01 09:18:47 -07:00
gsxdsm
c194248d4b FN-7366: restore planner chat in-flight state
Planner chat now resumes active generations when task detail is reopened.\n\n- Rehydrate in-flight planner chat snapshots and reattach to the session stream after tab/modal remounts.\n- Preserve accepted optimistic user turns across provider failures while rolling back pre-acceptance failures.\n- Add regression coverage for remount reattachment, attached completion/error refresh, and accepted error reconciliation.\n- Add a patch changeset for the published Fusion package.\n\nFiles changed:\n .changeset/fn-7366-planner-chat-resume.md          |   7 +\n .../app/components/TaskPlannerChatTab.tsx          | 334 +++++++++++++--------\n .../__tests__/TaskPlannerChatTab.test.tsx          | 189 +++++++++++-\n 3 files changed, 382 insertions(+), 148 deletions(-)

Fusion-Task-Id: FN-7366

Fusion-Task-Lineage: b13b9c5e-9295-461f-b44b-f2b5a9008b4f

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-01 09:12:30 -07:00
gsxdsm
24279c9aee fix(FN-7360): trust landed task merge proof
Auto-merge finalization now ignores stale branch-only residue once durable merge proof exists, so squash-landed tasks do not stay stuck in review because their task branch history is noisy.

Fusion-Task-Id: FN-7360
2026-07-01 09:06:01 -07:00
gsxdsm
fed60ecff6 FN-7364: hide task chats from common feed by default
Hide task-detail planner chats from the common Chat feed unless a project opts in.

- Add a project setting and Settings UI toggle for showing populated task chats in the common feed.
- Filter task-planner sessions on chat list routes and avoid stale cached/SSE planner rows in the Chat hook.
- Cover default-hidden and opt-in behavior with route, hook, settings, and parity tests.
- Document the Chat feed behavior and include a patch changeset.

Files changed:
 .changeset/fn-7364-task-chat-feed-setting.md       |  7 ++
 docs/dashboard-guide.md                            |  2 +
 .../core/src/__tests__/settings-parity.test.ts     |  8 +++
 packages/core/src/settings-schema.ts               |  5 ++
 packages/core/src/types.ts                         |  5 ++
 .../__tests__/SettingsModal.general.test.tsx       | 18 +++++
 .../settings/sections/GeneralSection.tsx           |  9 +++
 .../dashboard/app/hooks/__tests__/useChat.test.ts  | 65 +++++++++++++++++
 packages/dashboard/app/hooks/useChat.ts            | 22 ++++--
 .../dashboard/src/__tests__/chat-routes.test.ts    | 82 +++++++++++++++++++++-
 .../dashboard/src/routes/register-chat-routes.ts   | 13 +++-
 11 files changed, 227 insertions(+), 9 deletions(-)

Fusion-Task-Id: FN-7364
Fusion-Task-Lineage: 79a0706c-ba7f-4417-b88b-c5282ae7877c
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-01 08:50:29 -07:00