gsxdsm
779cd2e030
FN-8175: preserve mobile session switcher title layout contract
...
Preserve the ChatView mobile session switcher styling contract for pinned session titles.
- Assert full-width inline-flex title layout and indicator alignment
- Retain wrapping and line-height coverage for long mobile session names
Files changed:
packages/dashboard/app/components/__tests__/ChatView.core-contracts.test.tsx | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
Fusion-Task-Id: FN-8175
Fusion-Task-Lineage: cbb349c8-f53d-4a88-ab44-32b1b0f2cb2e
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-16 19:06:56 -07:00
gsxdsm
fd43a57a41
FN-8179: align pi SDK versions with ModelRuntime API
...
Align workspace pi SDK dependencies with the ModelRuntime API required by the engine.
- Pin pi AI and coding-agent packages to 0.80.10 across workspace consumers.
- Keep session option typing compatible with the updated SDK contract.
- Add a patch changeset and regenerate the dependency lockfile.
Files changed:
.changeset/fn-8179-pi-sdk-align.md | 7 +
packages/cli/package.json | 4 +-
packages/core/package.json | 2 +-
packages/dashboard/package.json | 2 +-
packages/engine/package.json | 4 +-
packages/engine/src/pi.ts | 8 +-
packages/pi-claude-cli/package.json | 8 +-
.../src/thinking-config.ts | 9 +-
pnpm-lock.yaml | 947 +++++++++++----------
pnpm-workspace.yaml | 5 +
10 files changed, 520 insertions(+), 476 deletions(-)
Fusion-Task-Id: FN-8179
Fusion-Task-Lineage: aef45c2e-f353-4014-93de-44be91f43293
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-16 19:01:03 -07:00
gsxdsm
b687cc994e
FN-8174: preserve live triage planning sessions
...
Keep active planning sessions protected from stale recovery while reclaiming genuinely hung triage work.
- Retain stale processing entries that still have a live, non-aborted triage session.
- Continue evicting no-session and stuck-aborted tasks so recovery can proceed.
- Add triage and self-healing regression coverage, architecture guidance, and a patch changeset.
Files changed:
.changeset/fn-8174-planning-premature-todo.md | 7 ++
docs/architecture.md | 1 +
packages/engine/src/__tests__/self-healing.test.ts | 102 +++++++++++++++++++++
packages/engine/src/__tests__/triage.test.ts | 37 +++++++-
packages/engine/src/triage.ts | 48 +++++-----
5 files changed, 168 insertions(+), 27 deletions(-)
Fusion-Task-Id: FN-8174
Fusion-Task-Lineage: f6811d72-95b4-4b5f-a71f-212f50e3ecdd
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-16 18:54:19 -07:00
gsxdsm
eab9977a42
FN-8173: consolidate chat session actions into overflow menu
...
Consolidate each chat session row's actions behind a shared three-dot menu.
- Replace inline pin, rename, and delete buttons with an accessible overflow trigger
- Preserve context-menu actions, pin-limit feedback, and desktop/mobile title clearance
- Update chat session interaction, layout, and mobile coverage
Files changed:
packages/dashboard/app/components/ChatView.css | 30 +++-----
packages/dashboard/app/components/ChatView.tsx | 66 +++++++----------
.../__tests__/ChatView.core-contracts.test.tsx | 83 ++++++++++++++--------
.../__tests__/ChatView.core-interactions.test.tsx | 12 ++--
.../components/__tests__/ChatView.mobile.test.tsx | 22 +++---
5 files changed, 107 insertions(+), 106 deletions(-)
Fusion-Task-Id: FN-8173
Fusion-Task-Lineage: 4fee30f2-b8af-470b-bedd-9691680b78fb
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-16 18:51:15 -07:00
gsxdsm
c449379d00
FN-8172: persist import translations across restarts
...
Persist GitHub and GitLab import translation caches across application restarts.
- Normalize cache ownership scope for reads, writes, pruning, and PostgreSQL RLS
- Add forward migration 0016 to repair existing cache table partitioning
- Cover durable cache reuse and migration behavior with PostgreSQL and service tests
Files changed:
.changeset/github-translation-cache-persistence.md | 7 ++
docs/settings-reference.md | 2 +-
.../postgres/import-translation-cache.pg.test.ts | 105 +++++++++++++++++++++
.../src/__tests__/postgres/schema-applier.test.ts | 84 +++++++++++++++--
.../migrations/0010_import_translation_cache.sql | 6 +-
.../0016_import_translation_cache_scope_fix.sql | 50 ++++++++++
packages/core/src/postgres/schema-applier.ts | 29 +++++-
packages/core/src/postgres/schema/project.ts | 8 +-
packages/core/src/task-store/remaining-ops-8.ts | 21 +++--
.../src/__tests__/import-translate-service.test.ts | 32 ++++++-
packages/dashboard/src/import-translate-service.ts | Bin 10392 -> 11109 bytes
11 files changed, 323 insertions(+), 21 deletions(-)
Fusion-Task-Id: FN-8172
Fusion-Task-Lineage: b3d18f58-dc0b-47e4-a1bf-acb8b2360869
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-16 18:46:36 -07:00
gsxdsm
25df9bf4fd
FN-8171: expand active task thinking by default
...
Show Activity Live reasoning immediately for active and review-stage tasks.
- Default thinking blocks open for in-progress and in-review tasks.
- Preserve collapsed, user-toggleable reasoning for all other task columns.
- Document behavior and cover default state and user collapse interactions.
Files changed:
.changeset/fn-8171-thinking-default-open.md | 7 ++++
docs/dashboard-guide.md | 2 +-
packages/dashboard/app/components/TaskChatTab.tsx | 20 +++++++---
.../app/components/__tests__/TaskChatTab.test.tsx | 43 ++++++++++++++++++++--
4 files changed, 63 insertions(+), 9 deletions(-)
Fusion-Task-Id: FN-8171
Fusion-Task-Lineage: 705d6ac8-0c43-47d3-84df-57e9ec55a3b5
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-16 18:41:24 -07:00
gsxdsm
5006e5543c
FN-8169: group workflow fallback lanes with primary lanes
...
Keep fallback model lanes adjacent to their primary lanes throughout Settings.
- Interleave planning, execution, and validator fallback lanes after their respective primary lanes.
- Classify executor fallback settings in the Models group so the row remains visible.
- Add ordering coverage for project and workflow Settings surfaces.
Files changed:
.changeset/fn-8169-group-fallback-lanes.md | 7 ++++
.../app/__tests__/settings-sections.test.tsx | 47 ++++++++++++++++++++++
.../app/components/WorkflowSettingsPanel.tsx | 31 +++++++-------
.../__tests__/WorkflowSettingsPanel.test.tsx | 40 ++++++++++++++++++
.../settings/sections/ProjectModelsSection.tsx | 31 +++++++-------
.../app/components/workflow-setting-display.ts | 12 ++++++
6 files changed, 140 insertions(+), 28 deletions(-)
Fusion-Task-Id: FN-8169
Fusion-Task-Lineage: 89402b95-1f42-46a7-8ad6-5182dc21f172
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-16 18:36:50 -07:00
gsxdsm
f4903d3db0
FN-8168: dismiss mobile More sheet on Back
...
Make the mobile More sheet participate in navigation history so Back dismisses it before changing views.
- Register the open More sheet as a navigation modal and remove it on every close path
- Cover browser, native, gesture, keyboard, action, and provider-less dismissal flows
- Document mobile More-sheet Back behavior
Files changed:
docs/dashboard-guide.md | 2 +
packages/dashboard/app/components/MobileNavBar.tsx | 48 ++++--
.../__tests__/MobileNavBar.swipe-back.test.tsx | 190 +++++++++++++++++++++
3 files changed, 228 insertions(+), 12 deletions(-)
Fusion-Task-Id: FN-8168
Fusion-Task-Lineage: 1c5652db-5f27-4671-b4b7-676753ca4cd0
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-16 18:33:47 -07:00
gsxdsm
c9aa3b465c
FN-8166: fix mobile task-detail right padding
...
Remove the residual mobile Feed right inset so task details use balanced body padding.
- Let the task-detail body provide the mobile right inset.
- Retain first-row clearance for overlay controls.
- Cover mobile Feed padding and attached tab behavior with regression tests.
- Add a patch changeset for the dashboard fix.
Files changed:
.../fn-8166-task-detail-mobile-right-padding.md | 7 +++
.../dashboard/app/components/TaskDetailModal.css | 8 +--
.../TaskDetailModal.attachments-and-tabs.test.tsx | 2 +-
...etailModal.responsive-and-dependencies.test.tsx | 63 +++++++++++++++++++++-
4 files changed, 74 insertions(+), 6 deletions(-)
Fusion-Task-Id: FN-8166
Fusion-Task-Lineage: ae58ae8b-4659-429f-8939-1d7e1a82d34c
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-16 18:30:14 -07:00
gsxdsm
76ec9334af
FN-8164: enlarge mobile Quick Entry action icons
...
Make icon-forward Quick Entry mobile controls proportionate while preserving touch targets.
- Increase only primary mobile action glyphs using spacing tokens
- Compact mobile action group gaps without changing desktop sizing
- Cover the mobile-only sizing contract and add a patch changeset
Files changed:
.changeset/fn-8164-quick-add-mobile-icon-sizing.md | 7 +++
.../quick-entry-action-row-height-parity.test.tsx | 59 ++++++++++++++++++++--
.../dashboard/app/components/QuickEntryBox.css | 18 +++++++
3 files changed, 81 insertions(+), 3 deletions(-)
Fusion-Task-Id: FN-8164
Fusion-Task-Lineage: 030688cd-880d-448c-a2ef-d6e967dab169
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-16 18:23:56 -07:00
gsxdsm
07e1ceb860
FN-8151: add Cobalt, Clay, and Moss themes
...
Add three synchronized color themes across dashboard and desktop surfaces.
- Register Cobalt, Clay, and Moss theme IDs, token palettes, and light/dark swatches.
- Keep dashboard and desktop bootstrap validators aligned with selector metadata.
- Document and test the cross-surface theme registration invariant.
Files changed:
.changeset/fn-8151-new-themes.md | 7 +
docs/dashboard-guide.md | 3 +-
packages/core/src/types/execution-and-ui.ts | 4 +
.../app/__tests__/new-color-themes.test.ts | 116 ++++++++++++
.../dashboard/app/components/ThemeSelector.css | 42 +++++
packages/dashboard/app/components/themeOptions.ts | 3 +
packages/dashboard/app/index.html | 2 +-
packages/dashboard/app/public/theme-data.css | 202 +++++++++++++++++++++
packages/desktop/src/renderer/index.html | 3 +
9 files changed, 380 insertions(+), 2 deletions(-)
Fusion-Task-Id: FN-8151
Fusion-Task-Lineage: d97973a7-3387-4b98-b150-8ac2e838bfa9
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-16 18:18:35 -07:00
gsxdsm
5a60643c0a
FN-8142: migrate auth storage and model runtime to pi SDK
...
Migrate Fusion's credential and model integrations to pi SDK 0.80.8+.
- Replace legacy AuthStorage initialization with a locked Fusion credential store and ModelRuntime-backed registry.
- Wire asynchronous model initialization and refresh through CLI, desktop, dashboard, executor, and provider paths.
- Update provider, routing, and registry tests for the new SDK contracts.
Files changed:
packages/cli/src/commands/__tests__/daemon.test.ts | 2 +-
.../cli/src/commands/__tests__/dashboard.test.ts | 9 +-
.../cli/src/commands/__tests__/onboard.test.ts | 1 +
packages/cli/src/commands/__tests__/serve.test.ts | 2 +-
packages/cli/src/commands/daemon.ts | 19 +-
packages/cli/src/commands/dashboard.ts | 20 +-
packages/cli/src/commands/onboard.ts | 6 +-
packages/cli/src/commands/serve.ts | 19 +-
packages/cli/src/commands/startup-model-sync.ts | 4 +-
packages/core/src/__tests__/openai-models.test.ts | 17 +-
...-model-routes-openai-codex-supplemental.test.ts | 17 +-
...register-model-routes-zai-real-registry.test.ts | 15 +-
packages/dashboard/src/routes.ts | 12 +-
.../dashboard/src/routes/register-model-routes.ts | 2 +-
packages/desktop/src/local-runtime.ts | 2 +-
packages/desktop/src/local-server.ts | 2 +-
.../custom-providers-openai-completions.test.ts | 16 +-
.../custom-providers-openai-responses.test.ts | 16 +-
.../engine/src/__tests__/executor-test-helpers.ts | 2 +-
.../src/__tests__/pi-create-fn-agent.test.ts | 8 +-
.../engine/src/__tests__/pi-layers-wiring.test.ts | 2 +-
packages/engine/src/__tests__/pi.test.ts | 47 ++---
.../src/__tests__/provider-registration.test.ts | 17 +-
packages/engine/src/auth-storage.ts | 218 ++++++++++++++++++---
packages/engine/src/custom-provider-registry.ts | 14 +-
packages/engine/src/executor.ts | 15 +-
packages/engine/src/pi.ts | 50 +++--
packages/engine/src/provider-auth.ts | 58 +++---
packages/engine/src/provider-registration.ts | 16 +-
29 files changed, 421 insertions(+), 207 deletions(-)
Fusion-Task-Id: FN-8142
Fusion-Task-Lineage: 8ae79064-7820-4976-9645-9431b5a3129e
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-16 18:13:37 -07:00
gsxdsm
d3544cfa99
FN-8160: remove multi-tab session lock prompts
...
Allow planning interview sessions to resume across tabs without legacy lock affordances.
- Remove obsolete cross-tab session lock translations and generated resource keys.
- Cover direct resumption for milestone, slice, and mobile background sessions.
Files changed:
.../MilestoneSliceInterviewModal.test.tsx | 37 +++++++++++++
.../components/__tests__/utility-mobile.test.tsx | 60 ++++++++++++++++++++++
packages/i18n/locales/en/app.json | 18 -------
packages/i18n/locales/es/app.json | 57 +++++++++++---------
packages/i18n/locales/fr/app.json | 57 +++++++++++---------
packages/i18n/locales/ko/app.json | 57 +++++++++++---------
packages/i18n/locales/zh-CN/app.json | 57 +++++++++++---------
packages/i18n/locales/zh-TW/app.json | 57 +++++++++++---------
packages/i18n/src/resources.d.ts | 51 +++++++++---------
9 files changed, 290 insertions(+), 161 deletions(-)
Fusion-Task-Id: FN-8160
Fusion-Task-Lineage: 8bf80297-8394-4e63-b689-6ab56f9a5088
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-16 17:47:54 -07:00
gsxdsm
ca7a5a7106
FN-8144: remove workspace worktrees on archive
...
Archive workspace task worktrees synchronously and safely across archive entry points.
- Add store-scoped workspace disposal planning, reservations, and quarantine handling.
- Install baseline and executor disposers that remove per-repository worktrees and branches without shell interpolation.
- Cover disposal-plan deduplication and document the archive cleanup behavior.
Files changed:
.../fn-8144-archive-removes-workspace-worktrees.md | 7 ++
AGENTS.md | 1 +
docs/task-management.md | 4 +
.../archive-removes-workspace-worktrees.test.ts | 59 +++++++++++
packages/core/src/archive-worktree-disposer.ts | 52 ++++++++++
packages/core/src/index.gate.ts | 8 ++
packages/core/src/index.ts | 8 ++
.../core/src/task-store/archive-lifecycle-2.ts | 29 ++++--
packages/core/src/task-store/archive-lifecycle.ts | 114 ++++++++++++++++++++-
.../src/archive-worktree-disposer-install.ts | 27 ++++-
packages/engine/src/executor.ts | 25 ++++-
11 files changed, 319 insertions(+), 15 deletions(-)
Fusion-Task-Id: FN-8144
Fusion-Task-Lineage: 1c4b65f3-a1d2-4a5c-a4b6-c263f9e6f61d
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-16 17:05:29 -07:00
gsxdsm
fd036665ae
FN-8123: add agent clarification notifications
...
Add agent clarification notices with ntfy delivery and mailbox support.
- Add configurable clarification ntfy topics and notification settings
- Route agent clarification requests to ntfy and the planning mailbox
- Update planning dialogs, translations, documentation, and regression tests
Files changed:
.changeset/fn-8123-agent-clarification.md | 7 +
docs/dashboard-guide.md | 6 +
docs/settings-reference.md | 1 +
.../core/src/__tests__/global-settings.test.ts | 11 +
packages/core/src/settings-schema.ts | 2 +
packages/core/src/types.ts | 6 +
.../app/__tests__/settings-save-split.test.ts | 13 ++
packages/dashboard/app/api/legacy.ts | 3 +-
.../dashboard/app/components/PlanningModeModal.tsx | 29 ++-
.../dashboard/app/components/SettingsModal.tsx | 1 +
.../__tests__/PlanningModeModal.initial.test.tsx | 17 +-
.../app/components/settings/save-split.ts | 1 +
.../settings/sections/NotificationsSection.tsx | 11 +
.../src/__tests__/routes-planning.test.ts | 7 +-
packages/dashboard/src/planning.ts | 228 ++++++++++++++++-----
.../src/routes/register-planning-subtask-routes.ts | 59 +++++-
packages/i18n/locales/en/app.json | 4 +
packages/i18n/src/resources.d.ts | 4 +
18 files changed, 346 insertions(+), 64 deletions(-)
Fusion-Task-Id: FN-8123
Fusion-Task-Lineage: cf397749-01c6-44d6-8d12-8ce7f5627c29
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-16 16:51:19 -07:00
gsxdsm
bd8a6ae7bb
FN-8154: fix mobile task-detail Feed padding
...
Narrow the mobile Feed inset while preserving clearance for its overlay control.
- Restore full-width activity content on narrow task-detail surfaces.
- Reserve overlay-toggle clearance only for first-row Feed elements.
- Cover the responsive CSS contract and publish a patch changeset.
Files changed:
.changeset/fn-8154-task-detail-mobile-padding.md | 7 +++++++
.../dashboard/app/components/TaskDetailModal.css | 16 +++++++++++++++-
.../TaskDetailModal.attachments-and-tabs.test.tsx | 2 +-
.../__tests__/TaskDetailModal.css.test.ts | 22 ++++++++++++++++++++++
...etailModal.responsive-and-dependencies.test.tsx | 2 +-
5 files changed, 46 insertions(+), 3 deletions(-)
Fusion-Task-Id: FN-8154
Fusion-Task-Lineage: 9094d12d-0431-4f42-bec9-c573686c7d6f
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-16 16:44:39 -07:00
gsxdsm
ee28f5e45e
FN-8155: test triage retry title handling
...
Cover blank-title behavior across retryable triage failures.
- Verify deterministic validation retries retain blank task titles
- Verify transient failures retain blank task titles while retries remain
Files changed:
packages/engine/src/__tests__/triage.test.ts | 81 ++++++++++++++++++++++++++++
1 file changed, 81 insertions(+)
Fusion-Task-Id: FN-8155
Fusion-Task-Lineage: d8b4414d-b105-4251-bc42-d02a6d84bf3a
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-16 16:38:25 -07:00
gsxdsm
c6be0b158b
FN-8129: centralize database backup settings
...
Move database backup policy and scheduling to shared global configuration.
- Split project memory backups from cluster-wide database backup settings.
- Migrate legacy backup values and routines safely into central global storage.
- Schedule and dispatch one shared PostgreSQL backup routine across project engines.
Files changed:
.changeset/fn-8129-backup-settings-scope-split.md | 7 +
docs/dashboard-guide.md | 2 +
docs/settings-reference.md | 10 +-
packages/cli/src/commands/backup.ts | 3 +-
.../__tests__/backup-settings-migration.test.ts | 50 ++++++
.../src/__tests__/backup-settings-scope.test.ts | 27 +++
packages/core/src/backup-settings-migration.ts | 188 +++++++++++++++++++++
packages/core/src/backup.ts | 77 +++++----
packages/core/src/global-routine-store.ts | 104 ++++++++++++
packages/core/src/index.gate.ts | 6 +-
packages/core/src/index.ts | 6 +-
.../core/src/postgres/migrations/0000_initial.sql | 19 +++
.../postgres/migrations/0015_global_routines.sql | 19 +++
packages/core/src/postgres/schema-applier.ts | 19 ++-
packages/core/src/postgres/schema/central.ts | 21 ++-
packages/core/src/postgres/startup-factory.ts | 11 ++
packages/core/src/settings-schema.ts | 14 +-
packages/core/src/types.ts | 31 +++-
.../dashboard/app/components/SettingsModal.tsx | 10 +-
.../settings/__tests__/section-keys.test.ts | 1 +
.../app/components/settings/save-split.ts | 2 +
.../search/__tests__/settings-search-index.test.ts | 1 +
.../settings/search/entries.ts | 2 +
.../app/components/settings/section-keys.ts | 4 -
.../settings/sections/BackupsSection.search.ts | 40 -----
.../settings/sections/BackupsSection.tsx | 112 +-----------
.../sections/DatabaseBackupsSection.search.ts | 51 ++++++
.../settings/sections/DatabaseBackupsSection.tsx | 142 ++++++++++++++++
.../settings-default-descriptions.test.tsx | 1 +
packages/dashboard/src/routes.ts | 12 +-
.../src/routes/register-settings-memory-routes.ts | 41 ++---
.../engine/src/__tests__/routine-scheduler.test.ts | 55 +++++-
packages/engine/src/cron-runner.ts | 4 +-
packages/engine/src/routine-runner.ts | 67 +++++---
packages/engine/src/routine-scheduler.ts | 35 +++-
35 files changed, 929 insertions(+), 265 deletions(-)
Fusion-Task-Id: FN-8129
Fusion-Task-Lineage: af17f39a-7f1c-40ff-8a4a-cd63895cd532
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-16 16:34:09 -07:00
gsxdsm
478f226a54
test: green full-suite CI after main drift ( #2229 )
...
## Summary
Restores green **Full Suite (non-blocking)** runs on `main`. Recent main
merges left i18n key parity, schema baseline bookkeeping (0011→0012),
heartbeat tool inventory (FN-8058 `fn_task_logs_read`), and merger
whitespace-classification mocks (execFile `git diff -p -w :2: :3:`) out
of date, so all four test shards failed.
## Root causes observed on main
- **Shard 4 / `@fusion/i18n`**: missing `skipConfirmationDialogs*` +
`reviewBudgetExhausted` in non-en locales; orphan
`awaitingApprovalPlanReviewReplanCap`
- **Shard 3 / `@fusion/core`**: `SCHEMA_BASELINE_VERSION` advanced to
`0012` while tests still equated it with
`OWNER_PROJECT_ID_SPLIT_VERSION` (`0011`) and omitted `0012` from
applied-migration lists
- **Shards 1–2 / `@fusion/engine`**: tool count/snapshot drift for
`fn_task_logs_read`; merger tests still mocked `git diff-tree` for
trivial classification after the execFile `:2:`/`:3:` cutover; mock
provider `updateTask` arity drift
## Changes
- Locale catalogs: add missing keys, drop orphan key
- Schema applier tests: immutable 0011 identity + baseline 0012 lists
- Heartbeat + gating snapshots: include `fn_task_logs_read`
- Merger unit mocks: recognize `git diff -p -w :2:path :3:path`
- Mock provider: accept optional third `updateTask` arg
## Test plan
- [x] `pnpm --filter @fusion/i18n exec vitest run` — 23/23
- [x] `pnpm --filter @fusion/core exec vitest run
src/__tests__/postgres/schema-applier.test.ts` (immutable + automation
upgrade) — pass
- [x] `pnpm --filter @fusion/core exec vitest run` project-identity +
satellite-fusiondir — pass
- [x] Engine suites from failed CI shards (file-scoped,
hermes/openclaw/paperclip/grok, reliability post-finalize/mission,
heartbeat, gating, merger recovery/prompt, mock-provider, etc.) — pass
- [ ] Full Suite workflow green on merge to main
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
- **New Features**
- Improved project data isolation across backend operations.
- Added safer optional toast handling when UI components render outside
the full application shell.
- Added support for reading task logs during agent heartbeat sessions.
- **Bug Fixes**
- Prevented runtime probes from hanging and avoided scanning large
binary files.
- Improved path handling for workspaces with missing descendants.
- Corrected task retry state resets and GitHub import/issue-close
behavior.
- **Style**
- Improved chat, terminal, and settings spacing.
- Added clearer accessibility labeling for the auto-merge control.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-07-16 16:01:29 -07:00
gsxdsm
06a5fd813d
refactor: package code organization waves 6–7 ( #2166 )
...
## Summary
Waves 6–7 of package code organization (plan:
`docs/plans/2026-07-14-001-refactor-package-code-organization-plan.md`),
after #2148 .
### Wave 6
| New module | Parent |
|---|---|
| `merger-autostash-labels.ts` | `merger.ts` |
| `types/agent-state.ts` | `types.ts` |
| `app/api/tasks-lifecycle.ts` | `legacy.ts` |
| `task-store/task-row-mappers.ts` | `remaining-ops-3.ts` (rename) |
### Wave 7
| New module | Parent |
|---|---|
| `self-healing-optional-step-revision.ts` | `self-healing.ts` |
| `self-healing-path-utils.ts` | `self-healing.ts` |
| `merger-git-parse` (+ `quoteArg`, `getBranchChangedFiles`) |
`merger.ts` |
| `app/api/settings.ts` | `legacy.ts` |
Public import paths stay stable via re-exports.
## Test plan
- [x] engine + dashboard typecheck (incl. app)
- [x] eslint on touched modules
- [x] merger-autostash / parse-porcelain / getBranchChanged / api-tasks
- [ ] CI merge gate
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
* **New Features**
* Added a dedicated task lifecycle API client (task promotion, merge,
retry/reset/duplicate, pause/unpause, archive/unarchive, revert, plan
approve/reject) plus branch-group and planner oversight actions.
* Added a settings/config API service (effective task settings, update
check/refresh/install).
* Introduced standardized agent lifecycle states with identity/ephemeral
detection helpers.
* **Bug Fixes**
* Improved autostash label compatibility and NUL-delimited changed-file
detection for branch diffs.
* **Refactor**
* Modularized merger labeling/parsing, self-healing helpers, and
lifecycle/type wiring while keeping behavior consistent.
* **Tests**
* Updated merger verification tests for `git diff -z` output handling.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-07-16 15:42:22 -07:00
gsxdsm
edc64138e0
feat(worktrees): task-pinned worktrees under worktreeNaming "task-id" ( #2233 )
...
## Summary
Adds **task-pinned worktrees** for `worktreeNaming: "task-id"`. Under
task-id naming, a task is pinned to exactly one derivable directory
`<worktreesDir>/<lowercased-task-id>` (e.g. `.worktrees/fn-7996`) for
its entire lifecycle — removing the ambiguity that let stale/foreign
`task.worktree` pointers strand a task (the FN-7996 shape).
`recycleWorktrees` stays fully functional and is **mutually exclusive**
with task-id pinning: the two can't be enabled together.
## Behavior
- **Pinned acquisition (`worktreeNaming: "task-id"`, recycling off):**
`acquireTaskWorktree` runs **derive → validate → reuse-or-recreate** at
the derived path — warm-reuse when the dir is a registered, usable
worktree on the task's own branch; otherwise reclaim-in-place
(`removeWorktree` + recreate at the SAME path, never a sibling name). A
disagreeing `task.worktree` cache self-corrects and emits a new
`worktree:pin-rederived` audit event, without consuming worktree-session
retries. The recycle pool is never consulted in pinned mode.
- **Mutual exclusivity:** enabling both `recycleWorktrees` and
`worktreeNaming: "task-id"` is rejected at the settings-write boundary —
HTTP 400 at `PUT /settings`, and an `Error` backstop in
`store.updateSettings` covering the CLI and every other writer
(`assertWorktreeNamingRecycleExclusive`). The runtime also gates pinned
mode on `!recycleWorktrees`, so a legacy on-disk config carrying both
degrades safely to recycling.
- **Settings UI:** the Settings → Worktrees panel enforces the
exclusivity bidirectionally — the *Recycle worktrees* toggle is disabled
while naming is *Task ID*, and the naming select is disabled while
recycling is on — so the conflicting state is unreachable, with help
text explaining why.
- **Byte-inert for the rest:** `random`/`task-title` naming and the
recycle pool (incl. `merger.ts` release) are unchanged;
worktrunk-managed layouts bypass pinning.
## Acceptance criteria (from the plan)
1. ✅ Pinned task dispatched N times only ever touches
`<worktreesDir>/<task-id>` on its own branch
2. ✅ No code path can hand task A's dir to task B (pool bypassed; path
derived from task id)
3. ✅ FN-7996 stale/foreign `task.worktree` self-corrects at next
dispatch (`worktree:pin-rederived`) without consuming session retries
4. ✅ Non-pinned modes with `recycleWorktrees: true|false` are
byte-identical (existing pool tests pass unchanged)
5. ✅ Stale same-name dir (crash leftover / archive→restore) reclaimed in
place, never suffixed
6. ✅ Docs updated (settings-reference, architecture, `worktreeNaming`
type doc); changeset (`minor`, `feature`); FNXC comments encode the
invariant
## Files
- `packages/engine/src/worktree-pinning.ts` — new pure helpers
(`isTaskPinnedWorktreeNaming`, `pinnedWorktreePathForTask`)
- `packages/engine/src/worktree-acquisition.ts` — pinned branch +
branch-match reclaim-in-place
- `packages/engine/src/run-audit.ts` — `worktree:pin-rederived` audit
type
- `packages/core/src/settings-validation.ts` (+ `index.ts`,
`task-store/settings-ops.ts`) — mutual-exclusion validator + wiring
- `packages/dashboard/src/routes/register-settings-memory-routes.ts` —
400 on conflict
-
`packages/dashboard/app/components/settings/sections/WorktreesSection.tsx`
(+ `packages/i18n/locales/en/app.json`) — bidirectional UI exclusivity
- `packages/core/src/types.ts`, `docs/*`, `.changeset/*`
## Verification
- New tests: engine `worktree-pinning` (5) +
`worktree-acquisition-pinned` (7); core
`worktree-naming-recycle-exclusive` (2); dashboard settings-route 400
(3) + WorktreesSection UI exclusivity (3)
- Regression sweep green: 194 engine
worktree/acquisition/pool/executor/merger-release tests, core settings
tests, dashboard i18n/settings-section tests
- `tsc --noEmit` clean for `@fusion/core` and `@fusion/engine`; changed
source files clean; eslint clean
- `pnpm verify:fast` PASS (build + scoped typecheck + boot smoke)
🤖 Generated with [Claude Code](https://claude.com/claude-code )
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
* **New Features**
* Added Task ID worktree naming, providing each task with a stable,
deterministic worktree directory.
* Automatically reuses valid pinned worktrees and recreates stale or
conflicting ones at the same path.
* Added clear settings controls and validation for incompatible Task ID
naming and worktree recycling options.
* **Documentation**
* Updated worktree architecture, settings reference, and in-app guidance
to explain pinned worktrees and configuration constraints.
* **Bug Fixes**
* Improved recovery from stale or incorrect worktree assignments without
consuming session retries.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
---------
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com >
2026-07-16 15:37:42 -07:00
gsxdsm
4d73232a70
FN-8147: pin quick-add action heights across shadcn themes
...
Keep Quick Add action controls at their intended desktop and mobile sizes in every shadcn theme.
- Define literal root tokens for the 28px desktop and 36px mobile action-row heights.
- Apply the pinned tokens to Quick Add buttons and workflow triggers.
- Expand CSS parity coverage and add a patch changeset.
Files changed:
.changeset/fn-8147-quick-add-shadcn-height.md | 7 +++
.../quick-entry-action-row-height-parity.test.tsx | 56 ++++++++++++++++++++--
.../quick-entry-workflow-trigger-height.test.tsx | 6 ++-
.../dashboard/app/components/QuickEntryBox.css | 16 ++++---
.../components/__tests__/QuickEntryBox.test.tsx | 4 +-
packages/dashboard/app/styles.css | 10 ++++
6 files changed, 84 insertions(+), 15 deletions(-)
Fusion-Task-Id: FN-8147
Fusion-Task-Lineage: 99d51d75-2fce-4d35-963c-4370c3f36add
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-16 15:33:47 -07:00
gsxdsm
f57dfc03b6
FN-8105: remove archived task worktrees safely
...
Archive task worktrees through a store-scoped, race-safe disposal lifecycle.
- Reserve pinned worktree paths during archive cleanup and successor creation.
- Reconcile quarantined removals before reusing a pinned path.
- Gate PostgreSQL archival before destructive worktree disposal and wire CLI cleanup.
Files changed:
.changeset/fn-8105-archive-removes-worktree.md | 7 +
docs/task-management.md | 4 +
.../extension-experiment-finalize.test.ts | 1 +
.../src/__tests__/extension-fn-secret-get.test.ts | 1 +
.../extension-gitlab-tracking.test.ts | 1 +
.../cli/src/__tests__/extension-web-fetch.test.ts | 1 +
.../task-command-github-import-tracking.test.ts | 1 +
packages/cli/src/commands/__tests__/task.test.ts | 1 +
packages/cli/src/commands/task.ts | 8 +-
packages/cli/src/extension.ts | 4 +
.../__tests__/worktree-path-reservation.test.ts | 58 ++++++++
packages/core/src/archive-worktree-disposer.ts | 21 +++
packages/core/src/index.gate.ts | 13 ++
packages/core/src/index.ts | 13 ++
.../core/src/task-store/archive-lifecycle-2.ts | 8 ++
packages/core/src/task-store/archive-lifecycle.ts | 37 +++++
packages/core/src/worktree-path-reservation.ts | 149 +++++++++++++++++++++
.../src/archive-worktree-disposer-install.ts | 18 +++
packages/engine/src/executor.ts | 16 +++
packages/engine/src/index.ts | 2 +
packages/engine/src/runtimes/in-process-runtime.ts | 1 +
packages/engine/src/worktree-acquisition.ts | 27 +++-
22 files changed, 388 insertions(+), 4 deletions(-)
Fusion-Task-Id: FN-8105
Fusion-Task-Lineage: cabb8f52-093f-4986-bfda-2c7601a72579
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-16 15:27:03 -07:00
gsxdsm
4e4b6be1b4
Plan-approval mailbox notification + triage Plan Review convergence ( #2237 )
...
## Summary
Two related changes around the plan-approval flow, plus a fix for
triage's plan-review loop that was stranding tasks at the replan cap.
### 1. Post a mailbox message when a plan needs approval (`feat`)
The ntfy push on `awaiting-approval` already existed end-to-end. This
adds the missing **durable, in-dashboard record**: a `system`-typed
mailbox message linking to the task, written whenever a task enters
`awaiting-approval`.
- Fires **before** the notifications-enabled gate, so a dashboard-only
operator (no ntfy/webhook configured) still gets the record — the whole
point of the mailbox channel.
- `system` type avoids re-triggering the `message:agent-to-user` ntfy
pipeline (no double-notify); idempotent via `sendMessageOnce` (key
`plan-approval:<taskId>`).
### 2. Help triage Plan Review converge before the replan cap (`fix`)
Investigation of three tasks that burned all 8 plan-review replans
without converging (**FN-7996, FN-8105, FN-8108**) found the reviewer
surfaced a *new, deeper* issue each cycle instead of confirming its
prior ones were fixed (goalpost movement), and reviewed specs at
implementation altitude. This addresses the root causes:
- **Feed the spec reviewer its own prior REVISE feedback + the 1-based
replan attempt** so it verifies prior issues rather than moving
goalposts. Gated to `reviewType === "spec"` and `attempt > 1` — **code
review and normal plan review are byte-for-byte unaffected**
(double-verified).
- **Reviewer prompt:** converge-on-re-review rule (don't REVISE for your
own earlier miss), severity ratchet (critical-only at attempt ≥ 3), and
a **Spec Altitude** guard so exact SQL/lock/CAS protocol design is
deferred to code review.
- **Planner prompt:** front-load exhaustive surface enumeration before
writing File Scope, and a storage-architecture ground-truth note
(Postgres-only store, composite PK `(project_id, id)`, `schema-applier`
migrations) to stop the repeated stale-fact REVISE rounds.
## Testing
- `@fusion/core` + `@fusion/engine` typecheck clean.
- Added coverage: reviewer spec-convergence wiring (attempt gating +
code/plan exclusion + severity ratchet), triage prior-feedback
derivation (incl. empty-output→notes fallback), mailbox decoupling
(fires when push disabled) + rejection safety, and assertions for all
new prompt sections.
- Affected suites green: notification-service, reviewer,
triage-plan-review-replan-cap, triage-replan-feedback, agent-prompts.
- `pnpm check:changesets` passes (2 changesets: `@runfusion/fusion`
minor + patch).
## Review
Ran a 6-persona `ce-code-review` (correctness + adversarial on Opus;
maintainability, testing, project-standards, api-contract). Guards
verified unbreakable; no P0/P1 correctness or security issues. Applied
the resulting fixes: decoupled the mailbox write from the push gate
(P2), `??`→`||` in the feedback derivation (P3), de-duplicated the
`specConvergence` ternary (P3), and closed the test-coverage gap the
review flagged.
🤖 Generated with [Claude Code](https://claude.com/claude-code )
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
- **New Features**
- Plans transitioning to **awaiting approval** now write an idempotent,
task-linked **dashboard mailbox** message (approval reason + direct task
link), even if push/notifications are disabled.
- **Bug Fixes**
- Plan Review **replan** behavior now better **converges** on prior
REVISE feedback (including notes fallback) and stops looping at the
replan cap.
- At later attempts (attempt 3+), **REVISE** is applied to **critical**
issues while lower-severity items shift to suggestions.
- **Tests**
- Added/expanded coverage for mailbox messaging and spec-convergence
prompt wiring.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
---------
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com >
2026-07-16 14:44:07 -07:00
gsxdsm
e7c5de0a6e
FN-8138: add restart controls after Settings updates
...
Expose a supervised restart affordance after an in-app update succeeds.
- Detect restart capability while update results are visible and handle scheduled or failed restart requests
- Add accessible restart status, capability guidance, responsive styling, and English translations
- Cover restart states across desktop and mobile Settings modal tests
Files changed:
.../fn-8138-settings-restart-after-update.md | 7 ++
docs/dashboard-guide.md | 2 +-
.../dashboard/app/components/SettingsModal.css | 21 +++-
.../dashboard/app/components/SettingsModal.tsx | 110 ++++++++++++++--
.../__tests__/SettingsModal.general.test.tsx | 139 ++++++++++++++++++++-
.../__tests__/SettingsModal.test-harness.tsx | 4 +
.../components/__tests__/settings-mobile.test.tsx | 4 +-
packages/i18n/locales/en/app.json | 4 +
8 files changed, 274 insertions(+), 17 deletions(-)
Fusion-Task-Id: FN-8138
Fusion-Task-Lineage: 24e8cb9a-ad64-4419-b3ce-461850624365
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-16 14:40:26 -07:00
gsxdsm
d870878a23
FN-7998: add executor alternate model escalation
...
Add opt-in executor escalation after same-model tool-failure retries are exhausted.
- Persist escalation settings and one-shot task state across SQLite and PostgreSQL stores.
- Retry once on a configured alternate model or scheduler node and audit escalation outcomes.
- Expose escalation controls, documentation, translations, migration, and regression coverage.
Files changed:
.changeset/fn-7998-executor-escalation.md | 7 ++
AGENTS.md | 1 +
docs/settings-reference.md | 13 ++-
.../core/src/__tests__/settings-defaults.test.ts | 23 ++++-
packages/core/src/in-review-stall.ts | 29 ++++++
packages/core/src/index.gate.ts | 3 +-
packages/core/src/index.ts | 3 +-
packages/core/src/manual-retry-reset.ts | 1 +
.../0014_executor_escalation_attempt.sql | 2 +
packages/core/src/postgres/schema-applier.ts | 17 ++++
packages/core/src/postgres/schema/project.ts | 1 +
packages/core/src/settings-schema.ts | 4 +
packages/core/src/store.ts | 2 +-
packages/core/src/task-store/persistence.ts | 2 +
packages/core/src/task-store/remaining-ops-2.ts | 2 +-
packages/core/src/task-store/remaining-ops-3.ts | 2 +-
packages/core/src/task-store/remaining-ops-6.ts | 2 +-
packages/core/src/task-store/serialization.ts | 1 +
packages/core/src/task-store/task-update.ts | 2 +
packages/core/src/types.ts | 13 +++
.../dashboard/app/components/SettingsModal.tsx | 12 +++
.../app/components/settings/section-keys.ts | 4 +
.../settings/sections/SchedulingSection.search.ts | 36 +++++++
.../settings/sections/SchedulingSection.tsx | 6 ++
.../settings-default-descriptions.test.tsx | 4 +
.../__tests__/executor-tool-failure-retry.test.ts | 91 +++++++++++++++++-
packages/engine/src/executor.ts | 104 +++++++++++++++++++--
packages/i18n/locales/en/app.json | 8 ++
28 files changed, 376 insertions(+), 19 deletions(-)
Fusion-Task-Id: FN-7998
Fusion-Task-Lineage: bbce767d-c61a-4667-be62-abc0cc54d8be
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-16 14:31:59 -07:00
gsxdsm
4df5c62854
FN-8133: add local codebase context metrics
...
Expose local codebase token estimates and apparent disk size in the project dashboard.
- Add a bounded, cached, symlink-safe codebase metrics service and project API.
- Display token and disk indicators across Command Center overview states.
- Add formatting, route, UI, and metric calibration coverage with a minor changeset.
Files changed:
.changeset/fn-8133-codebase-metrics.md | 7 +
docs/dashboard-guide.md | 2 +-
.../dashboard/app/__tests__/api-projects.test.ts | 12 ++
packages/dashboard/app/api/legacy.ts | 14 ++
.../components/command-center/CommandCenter.css | 5 +
.../components/command-center/CommandCenter.tsx | 65 +++++++--
.../CommandCenter.mobile-chart-layout.test.ts | 4 +
.../__tests__/CommandCenter.test.tsx | 10 ++
.../__tests__/SystemStatsArea.test.tsx | 8 +
.../command-center/areas/SystemStatsArea.tsx | 8 +-
.../app/utils/__tests__/formatBytes.test.ts | 18 +++
packages/dashboard/app/utils/formatBytes.ts | 11 ++
.../src/lib/__tests__/codebase-metrics.test.ts | 62 ++++++++
.../lib/__tests__/fixtures/token-corpus/README.md | 17 +++
.../fixtures/token-corpus/calibration/component.ts | 1 +
.../fixtures/token-corpus/calibration/config.json | 1 +
.../lib/__tests__/fixtures/token-corpus/example.ts | 1 +
.../lib/__tests__/fixtures/token-corpus/notes.md | 3 +
.../fixtures/token-corpus/reference-counts.json | 9 ++
.../__tests__/fixtures/token-corpus/settings.json | 1 +
.../lib/__tests__/fixtures/token-corpus/view.tsx | 1 +
packages/dashboard/src/lib/codebase-metrics.ts | 161 +++++++++++++++++++++
.../__tests__/codebase-metrics-route.test.ts | 34 +++++
.../src/routes/register-project-routes.ts | 19 +++
24 files changed, 456 insertions(+), 18 deletions(-)
Fusion-Task-Id: FN-8133
Fusion-Task-Lineage: d591636b-d4b8-469e-8788-c4516eeb8405
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-16 14:08:43 -07:00
gsxdsm
d306ab67b2
FN-8140: reuse host TaskStore across extension loads
...
Reuse process-wide extension store state to prevent duplicate backend boots from blocking agent reads.
- Share TaskStore cache, boot-inflight, and failure cooldown state across ESM module instances.
- Preserve host-injected stores when cold boots race and add bounded boot-resolution coverage.
- Add a patch changeset for responsive agent reads.
Files changed:
.changeset/fn-8140-taskstore-boot-timeout.md | 7 ++
.../src/__tests__/extension-tool-timeout.test.ts | 88 +++++++++++++++++++++-
packages/cli/src/extension.ts | 48 ++++++++++--
3 files changed, 136 insertions(+), 7 deletions(-)
Fusion-Task-Id: FN-8140
Fusion-Task-Lineage: de32f4e9-5870-4d8f-8454-2fe342a575a8
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-16 14:01:59 -07:00
gsxdsm
f111a40c72
FN-8130: default Settings to Appearance
...
Open Settings on the always-visible Appearance section by default.
- Change the Settings modal default and unavailable-section fallback to Appearance.
- Cover desktop and mobile default selection and fallback behavior.
- Add a patch changeset for the corrected landing section.
Files changed:
.changeset/default-settings-appearance.md | 7 ++++++
.../dashboard/app/components/SettingsModal.tsx | 16 ++++++++------
.../__tests__/SettingsModal.general.test.tsx | 15 +++++++------
.../SettingsModal.remote-notifications.test.tsx | 4 ++--
.../SettingsModal.scheduling-merge.test.tsx | 11 ++++++----
.../components/__tests__/settings-mobile.test.tsx | 25 ++++++++++++++++------
6 files changed, 53 insertions(+), 25 deletions(-)
Fusion-Task-Id: FN-8130
Fusion-Task-Lineage: de9e31d8-98e5-4a02-8135-c5a397f7b8ad
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-16 13:55:37 -07:00
gsxdsm
2c3a777bca
FN-8132: recover bare worktree branch collisions
...
Recover safe worktree creation when a dangling task branch already exists.
- Classify bare branch collisions and preserve foreign or mixed commit history.
- Reuse task-owned branches or recreate merged branches from the pinned start point.
- Audit recovery outcomes and cover native, fallback, and workspace acquisition paths.
Files changed:
.../fn-8132-worktree-branch-collision-recovery.md | 7 ++
docs/architecture.md | 1 +
.../__tests__/worktree-acquisition-backend.test.ts | 69 +++++++++++
.../worktree-acquisition-workspace.test.ts | 21 ++++
.../worktree-backend-branch-collision.test.ts | 132 +++++++++++++++++++++
packages/engine/src/branch-conflicts.ts | 121 +++++++++++++++++++
packages/engine/src/run-audit.ts | 1 +
packages/engine/src/worktree-acquisition.ts | 3 +-
packages/engine/src/worktree-backend.ts | 94 +++++++++++++++-
9 files changed, 447 insertions(+), 2 deletions(-)
Fusion-Task-Id: FN-8132
Fusion-Task-Lineage: f09d140f-4fcd-48a6-99b1-a351630f37bd
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-16 13:48:00 -07:00
gsxdsm
60b6e3e048
FN-7996: add configurable executor tool-failure retries
...
Add bounded, durable same-model retry handling for qualifying consecutive executor tool errors.
- Persist retry claims, cursors, and audit markers with PostgreSQL migrations.
- Expose project retry count, backoff, and failure threshold settings in the dashboard.
- Cover retry, exhaustion, reset, and stale-run safety behavior with tests.
Files changed:
.changeset/fn-7996-executor-tool-failure-retry.md | 7 +
AGENTS.md | 1 +
docs/architecture.md | 1 +
docs/settings-reference.md | 10 ++
.../executor-tool-failure-retry-claim.test.ts | 17 +++
.../core/src/__tests__/manual-retry-reset.test.ts | 3 +
.../core/src/__tests__/settings-defaults.test.ts | 15 +-
packages/core/src/in-review-stall.ts | 20 +++
packages/core/src/index.gate.ts | 6 +
packages/core/src/index.ts | 6 +
packages/core/src/manual-retry-reset.ts | 3 +
.../0013_executor_tool_failure_retry.sql | 4 +
packages/core/src/postgres/schema-applier.ts | 17 +++
packages/core/src/postgres/schema/project.ts | 3 +
packages/core/src/settings-schema.ts | 3 +
packages/core/src/store.ts | 10 +-
packages/core/src/task-store/persistence.ts | 7 +
packages/core/src/task-store/remaining-ops-2.ts | 2 +-
packages/core/src/task-store/remaining-ops-3.ts | 2 +-
packages/core/src/task-store/remaining-ops-6.ts | 65 ++++++++-
packages/core/src/task-store/serialization.ts | 3 +
packages/core/src/task-store/task-update.ts | 6 +
packages/core/src/types.ts | 16 +++
.../dashboard/app/components/SettingsModal.tsx | 15 ++
.../app/components/settings/section-keys.ts | 3 +
.../settings/sections/SchedulingSection.search.ts | 27 ++++
.../settings/sections/SchedulingSection.tsx | 4 +
.../settings-default-descriptions.test.tsx | 3 +
.../__tests__/executor-tool-failure-retry.test.ts | 160 +++++++++++++++++++++
packages/engine/src/executor.ts | 87 ++++++++++-
packages/i18n/locales/en/app.json | 6 +
31 files changed, 523 insertions(+), 9 deletions(-)
Fusion-Task-Id: FN-7996
Fusion-Task-Lineage: d1682ef8-534c-410e-b74c-1f2cf176eac2
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-16 13:41:14 -07:00
gsxdsm
6f99fdb18b
FN-8137: add PR checks refresh control
...
Let GitHub pull request previews refresh their current check status and comments.
- Add an accessible refresh action that bypasses the selected PR detail cache
- Prevent stale refresh responses from overwriting cached or visible PR details
- Cover refresh behavior across modal and embedded views, and document the control
- Add a minor changeset for the new GitHub import capability
Files changed:
.changeset/fn-8137-refresh-pr-checks.md | 7 ++
docs/dashboard-guide.md | 2 +-
.../dashboard/app/components/GitHubImportModal.css | 29 ++++++
.../dashboard/app/components/GitHubImportModal.tsx | 48 +++++++--
.../__tests__/GitHubImportModal.test.tsx | 115 +++++++++++++++++++++
5 files changed, 191 insertions(+), 10 deletions(-)
Fusion-Task-Id: FN-8137
Fusion-Task-Lineage: 1d4ffa9d-635c-4d59-b17c-63075f6d8c5e
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-16 13:34:54 -07:00
gsxdsm
255e9c19b9
FN-8134: add update banner restart action
...
Offer a supervised Fusion restart directly after an in-app update succeeds.
- Add restart capability detection, scheduling feedback, and manual-restart guidance to the update banner
- Cover supported, unsupported, failed, loading, and mobile restart states
- Document the update flow and add a minor CLI changeset
Files changed:
.changeset/fn-8134-restart-after-update.md | 7 ++
docs/dashboard-guide.md | 2 +-
packages/dashboard/app/components/UpdateAvailableBanner.css | 10 +-
packages/dashboard/app/components/UpdateAvailableBanner.tsx | 100 +++++++++++++--
packages/dashboard/app/components/__tests__/UpdateAvailableBanner.test.tsx | 139 ++++++++++++++++++---
packages/i18n/locales/en/app.json | 4 +
6 files changed, 236 insertions(+), 26 deletions(-)
Fusion-Task-Id: FN-8134
Fusion-Task-Lineage: 84f9290e-aa87-4144-a9db-da445dcb76e3
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-16 13:29:25 -07:00
gsxdsm
3e55492c97
FN-8128: restore CLI Binary to basic Settings
...
Restore the CLI Binary settings panel to the default-visible Settings navigation.
- Remove CLI Binary from Advanced-only sections and place it in the Global group.
- Cover desktop navigation, search, Advanced mode, and mobile picker visibility.
- Add a patch changeset for the restored default access.
Files changed:
.changeset/fn-8128-cli-binary-out-of-advanced.md | 7 ++
.../dashboard/app/components/SettingsModal.tsx | 14 ++-
.../SettingsModal.cliBinaryVisibility.test.tsx | 124 +++++++++++++++++++++
.../components/__tests__/settings-mobile.test.tsx | 15 +++
.../settings/sections/CliBinarySection.tsx | 6 +-
5 files changed, 156 insertions(+), 10 deletions(-)
Fusion-Task-Id: FN-8128
Fusion-Task-Lineage: aa6e5c11-1186-4213-9b1a-2582e892d363
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-16 13:22:56 -07:00
gsxdsm
bd4857a44e
FN-8136: update cron-runner backup error expectations
...
Align cron-runner backup failure assertions with the current PostgreSQL project-state error wording.
- Update legacy command backup failure expectation
- Update command-step backup failure expectation
Files changed:
packages/engine/src/__tests__/cron-runner.test.ts | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
Fusion-Task-Id: FN-8136
Fusion-Task-Lineage: 8f182491-1ded-43bb-b4ca-02485dce656a
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-16 13:17:00 -07:00
gsxdsm
d4914eb8b3
FN-8127: fix embedded PostgreSQL backups
...
Enable backup managers to resolve active embedded PostgreSQL runtime URLs safely.
- Track embedded backend URLs with generation-aware lifecycle leases.
- Keep backup resolution current through owner shutdown and joiner release.
- Document PostgreSQL client-tool requirements and add regression coverage.
Files changed:
.changeset/fn-8127-embedded-backup.md | 7 ++
docs/settings-reference.md | 3 +
packages/core/src/__tests__/backup.test.ts | 115 ++++++++++++++++++++
packages/core/src/backup.ts | 17 ++-
packages/core/src/index.gate.ts | 9 ++
packages/core/src/index.ts | 9 ++
.../core/src/postgres/active-backend-registry.ts | 119 +++++++++++++++++++++
packages/core/src/postgres/embedded-lifecycle.ts | 5 +
packages/core/src/postgres/index.ts | 9 ++
packages/core/src/postgres/startup-factory.ts | 118 +++++++++++++++++---
10 files changed, 389 insertions(+), 22 deletions(-)
Fusion-Task-Id: FN-8127
Fusion-Task-Lineage: 6125be5c-d1d5-4228-a6b1-290311de70d9
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-16 13:09:48 -07:00
gsxdsm
f58b56488c
FN-8125: align mobile Settings auth cards
...
Align Authentication provider card content with the Settings section header on mobile.
- Remove the nested mobile gutter within Authentication panels.
- Preserve Custom Provider card spacing outside authentication panels.
- Cover scoped mobile alignment rules and add a patch changeset.
Files changed:
.changeset/fn-8125-mobile-auth-card-alignment.md | 7 +++++++
.../dashboard/app/components/SettingsModal.css | 22 ++++++++++++++++++++++
.../components/__tests__/settings-mobile.test.tsx | 7 +++++--
3 files changed, 34 insertions(+), 2 deletions(-)
Fusion-Task-Id: FN-8125
Fusion-Task-Lineage: a299fe3e-8a32-401a-85f2-85fe58e61da3
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-16 12:54:00 -07:00
gsxdsm
47f9aa7144
FN-8124: reuse dashboard theme dropdown in Settings
...
Unify Settings appearance theme selection with the dashboard control.
- Reuse ThemeDropdown and its custom-color picker in ThemeSelector
- Remove the obsolete Settings color-theme grid styles
- Cover shared dropdown interactions and document the unified control
- Add a patch changeset for the Settings theme selector
Files changed:
.changeset/FN-8124-settings-theme-dropdown.md | 7 +
docs/dashboard-guide.md | 2 +-
.../dashboard/app/components/ThemeDropdown.tsx | 9 +-
.../dashboard/app/components/ThemeSelector.css | 48 --
.../dashboard/app/components/ThemeSelector.tsx | 49 +-
.../components/__tests__/ThemeSelector.test.tsx | 778 ++-------------------
.../__tests__/CommandCenterControls.test.tsx | 18 +-
7 files changed, 109 insertions(+), 802 deletions(-)
Fusion-Task-Id: FN-8124
Fusion-Task-Lineage: 6bd87f2a-d9e1-4374-8f54-1a2266c4004f
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-16 12:48:51 -07:00
gsxdsm
fdea8a4294
FN-8118: document continuation rescue test coverage
...
Document why the verified post-done continuation rescue suite remains unquarantined.
- Record the serialized in-memory reliability coverage and its exclusion rationale.
- Preserve the engine-default reliability partition exclusion.
Files changed:
packages/engine/vitest.config.ts | 2 ++
1 file changed, 2 insertions(+)
Fusion-Task-Id: FN-8118
Fusion-Task-Lineage: 0ac7f24a-888c-470c-b175-98b4e0411061
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-16 12:42:17 -07:00
gsxdsm
15335e8cde
FN-8122: increase mobile activity feed inset
...
Increase mobile activity-feed spacing across the modal, dock, and standalone feed.
- Add token-based mobile insets for activity-feed content.
- Widen Activity Log modal and embedded right-dock padding.
- Cover mobile inset behavior with CSS contract tests.
Files changed:
packages/dashboard/app/components/ActivityFeed.css | 11 +++
.../dashboard/app/components/ActivityLogModal.css | 7 +-
packages/dashboard/app/components/ScriptsModal.css | 8 +-
.../__tests__/activity-feed-mobile-inset.test.tsx | 107 +++++++++++++++++++++
4 files changed, 130 insertions(+), 3 deletions(-)
Fusion-Task-Id: FN-8122
Fusion-Task-Lineage: c6d81ee9-ae8d-4d2d-a765-2f44a73b1ac9
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-16 12:36:03 -07:00
gsxdsm
2142841f0c
FN-8111: restore reliability test coverage
...
Restore PostgreSQL-compatible reliability coverage and prevent completed tasks from wedging on stale continuation recovery.
- Update reliability fixtures and audit assertions for PostgreSQL-backed stores
- Prioritize completed-task handling before stale assistant-continuation retries
- Unquarantine the restored meta-archive and continuation reliability suites
Files changed:
.../explicit-duplicate-marker-sweep.test.ts | 4 ++++
.../meta-archive-guard-composition.test.ts | 26 +++++++++++++++++-----
.../post-done-continuation-no-wedge.test.ts | 3 ++-
packages/engine/src/executor.ts | 7 ++++++
packages/engine/vitest.config.ts | 4 ++--
scripts/lib/test-quarantine.json | 10 ---------
6 files changed, 36 insertions(+), 18 deletions(-)
Fusion-Task-Id: FN-8111
Fusion-Task-Lineage: 8b30b5cb-c160-44e1-8e8c-dd58f4877edc
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-16 12:09:55 -07:00
gsxdsm
3b6bfeee46
FN-8109: import PR comments as resolve feedback tasks
...
Enable GitHub comment imports to create independent resolve-feedback tasks.
- Add comment import controls, status feedback, and client API support
- Create validated GitHub comment tasks with quoted feedback and provenance
- Label pull request imports as resolve-feedback work and document the workflow
Files changed:
docs/dashboard-guide.md | 4 +-
packages/dashboard/app/api/legacy.ts | 20 ++++++
.../dashboard/app/components/GitHubImportModal.css | 35 +++++++++
.../dashboard/app/components/GitHubImportModal.tsx | 82 +++++++++++++++++++---
.../__tests__/GitHubImportModal.test.tsx | 56 +++++++++++++++
.../dashboard/src/__tests__/routes-github.test.ts | 73 +++++++++++++++++++
.../dashboard/src/routes/register-git-github.ts | 48 ++++++++++++-
7 files changed, 304 insertions(+), 14 deletions(-)
Fusion-Task-Id: FN-8109
Fusion-Task-Lineage: bdb4477b-31b4-4e01-8439-b72437ff692d
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-16 11:58:27 -07:00
gsxdsm
46f09e4ac1
FN-8115: consolidate GitHub import settings reads
...
Reuse request-scoped project settings across GitHub issue import operations.
- Read project settings once for single and batch imports
- Share settings with translation and GitHub tracking resolution
- Cover settings reuse and translated/original batch content
Files changed:
.../dashboard/src/__tests__/routes-github.test.ts | 105 ++++++++++++++++++++-
.../dashboard/src/routes/register-git-github.ts | 56 ++++++++---
2 files changed, 145 insertions(+), 16 deletions(-)
Fusion-Task-Id: FN-8115
Fusion-Task-Lineage: acc046c5-d599-4df4-b380-a1e167d45548
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-16 11:42:45 -07:00
gsxdsm
4a797d3804
FN-8117: restore explicit duplicate marker sweep coverage
...
Configure duplicate-marker PG fixtures with canonical FN task IDs so the sweep coverage exercises real deletion paths.
- Set taskPrefix to FN for duplicate-marker reliability fixtures.
- Remove the corrected test from the PG quarantine ledger and Vitest exclusions.
- Document why valid marker IDs are required for this coverage.
Files changed:
.../explicit-duplicate-marker-sweep.test.ts | 20 +++++++++++++-------
packages/engine/vitest.config.ts | 4 +++-
scripts/lib/test-quarantine.json | 5 -----
3 files changed, 16 insertions(+), 13 deletions(-)
Fusion-Task-Id: FN-8117
Fusion-Task-Lineage: 3b09cbbe-924c-4e3c-849b-cf7643b0ac0e
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-16 11:36:32 -07:00
gsxdsm
038ec04975
FN-8113: confirm GitHub issue closures
...
Guard GitHub issue closure with a destructive confirmation flow.
- Style the Close issue action as dangerous and require confirmation before API calls.
- Cover confirmation, cancellation, success, failure, and mobile behavior in modal tests.
- Add a patch changeset describing the safer close interaction.
Files changed:
.changeset/fn-8113-github-close-confirm.md | 7 ++
.../dashboard/app/components/GitHubImportModal.tsx | 22 ++++--
.../__tests__/GitHubImportModal.test.tsx | 91 +++++++++++++++++++++-
3 files changed, 113 insertions(+), 7 deletions(-)
Fusion-Task-Id: FN-8113
Fusion-Task-Lineage: 80e4e1a3-b779-473d-9658-4231bd58d7e6
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-16 11:30:17 -07:00
gsxdsm
3084d7287b
FN-8112: fix GitHub import tracking test mocks
...
Make GitHub import tracking settings mocks persist across each route read.
- Return tracking settings for every read in single-import tests
- Document the persistent-mock requirement for import tracking
Files changed:
packages/dashboard/src/__tests__/routes-github.test.ts | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
Fusion-Task-Id: FN-8112
Fusion-Task-Lineage: 87318b54-39b6-46bb-8093-10c020a3ad72
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-16 11:19:59 -07:00
gsxdsm
68583b5c68
FN-8110: add failed-check fix task action
...
Add an in-context recovery path for failed GitHub PR checks.
- Add a per-failed-check Create fix task action with progress and result feedback.
- Compose fix-task context from the selected PR, repository, branches, check status, and details URL.
- Cover the GitHub import behavior and document the feature release.
Files changed: .changeset/fn-8110-pr-failed-check-fix-task.md | 7 +
docs/dashboard-guide.md | 2 +-
.../dashboard/app/components/GitHubImportModal.css | 23 ++++
.../dashboard/app/components/GitHubImportModal.tsx | 91 ++++++++++++-
.../__tests__/GitHubImportModal.test.tsx | 148 +++++++++++++++++++++
5 files changed, 269 insertions(+), 2 deletions(-)
Fusion-Task-Id: FN-8110
Fusion-Task-Lineage: 0f69a4e2-d950-4a9f-925e-bd56fb6bf45d
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-16 11:16:06 -07:00
gsxdsm
504c702262
FN-8107: add mobile drawer drag dismissal
...
Enable intuitive swipe-down dismissal for the mobile More navigation drawer.
- Add guarded touch drag handling that preserves interior scrolling
- Animate sheet drag and snap-back states with an expanded grab handle
- Cover distance, velocity, scroll, submenu, and cancellation gestures
- Add a patch changeset for the mobile drawer fix
Files changed:
.../fn-8107-mobile-more-drawer-drag-dismiss.md | 7 ++
packages/dashboard/app/components/MobileNavBar.css | 28 ++++-
packages/dashboard/app/components/MobileNavBar.tsx | 104 +++++++++++++++-
.../app/components/__tests__/MobileNavBar.test.tsx | 136 ++++++++++++++++++++-
4 files changed, 265 insertions(+), 10 deletions(-)
Fusion-Task-Id: FN-8107
Fusion-Task-Lineage: 144bd68a-0c72-4786-9efd-ddf86bb9515d
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-16 11:07:57 -07:00
gsxdsm
b891e3a37b
fix(dashboard): drop Settings footer Help icon and fix its underline/sizing
...
The Help link is an <a class="btn"> and .btn never resets link
text-decoration, so the browser's default underline painted under the
icon+label box, reading as an overlap. Drop the icon (redundant next to
the "Help" label) and reset text-decoration on the shared
discord/help anchor-button selector. Also fold the Help button into the
same mobile 36px touch-target rule as Export/Import/Reset/Save so all
five footer buttons render at a consistent height.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com >
2026-07-16 10:53:54 -07:00
gsxdsm
daf5b1297d
fix(dashboard): restore 36px touch target for mobile Settings footer buttons
...
Export/Import/Reset/Cancel/Save use .btn-sm, which the global mobile
touch-target rule deliberately excludes to keep dense table/card button
rows compact. That exclusion also caught the Settings footer, leaving
those buttons at ~24px tall on mobile — visibly smaller than the Help
and auth Test/Disable buttons on the same rail. Scope the 36px minimum
back to just this footer.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com >
2026-07-16 10:40:33 -07:00