gsxdsm
f5538e6253
chore(release): v0.70.0
...
Version bump via changesets.
2026-07-17 17:12:42 -07:00
gsxdsm
d8735b3dbe
FN-8249: persist GitHub translations and show status
...
Persist legacy GitHub translation cache entries and expose background translation progress to import operators.
- Backfill historic unscoped translation cache partitions during schema migration.
- Display accessible translating and failure status in the GitHub issues import list.
- Add migration, service, and UI coverage plus operator documentation.
Files changed:
.../fn-8249-github-import-translation-status.md | 7 ++
docs/dashboard-guide.md | 2 +-
.../postgres/import-translation-cache.pg.test.ts | 13 +++-
.../src/__tests__/postgres/schema-applier.test.ts | 48 ++++++++++++
...translation_cache_legacy_partition_backfill.sql | 31 ++++++++
packages/core/src/postgres/schema-applier.ts | 29 ++++++-
.../dashboard/app/components/GitHubImportModal.css | 42 ++++++++++
.../dashboard/app/components/GitHubImportModal.tsx | 29 +++++++
.../__tests__/GitHubImportModal.test.tsx | 90 ++++++++++++++++++++++
.../src/__tests__/import-translate-service.test.ts | 62 +++++++++++++++
10 files changed, 346 insertions(+), 7 deletions(-)
Fusion-Task-Id: FN-8249
Fusion-Task-Lineage: 79c26d85-50f1-4d01-9341-a17db5e57f8f
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-17 16:46:42 -07:00
gsxdsm
b0654031bc
FN-8251: hide overseer eye when oversight is off
...
Resolve inherited workflow oversight before rendering task-card overseer indicators.
- Resolve selected-workflow oversight using the planning workflow identity
- Fail closed for unknown, pending, malformed, and failed inherited settings
- Cover workflow changes and mobile suppression, and document the behavior
- Add a patch changeset for the corrected card indicator
Files changed:
.changeset/fn-8251-card-eye-effective-oversight.md | 7 +
docs/dashboard-guide.md | 4 +-
packages/dashboard/app/components/TaskCard.tsx | 116 ++++++++-------
.../__tests__/TaskCard.oversight.test.tsx | 161 ++++++++++++++++++++-
.../app/components/__tests__/TaskCard.test.tsx | 6 +-
5 files changed, 234 insertions(+), 60 deletions(-)
Fusion-Task-Id: FN-8251
Fusion-Task-Lineage: 72dfa67e-e6d5-4557-91b3-23aff6dcf9e7
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-17 16:38:29 -07:00
gsxdsm
eee04bc1a8
FN-8248: fix Quick Chat popup stacking
...
Make Quick Chat and task popups honor their most recent interaction order.
- Place Quick Chat in the task-detail peer stack while retaining higher utility windows.
- Raise Create Room dialogs above Chat on each open, including mobile sheets.
- Add stacking regression coverage and operator documentation with screenshots.
Files changed:
docs/assets/fn-8248-chat-above-task.png | Bin 0 -> 55108 bytes
docs/assets/fn-8248-mobile-create-room.png | Bin 0 -> 56699 bytes
docs/assets/fn-8248-task-above-chat.png | Bin 0 -> 74263 bytes
docs/dashboard-guide.md | 5 +-
packages/dashboard/app/App.tsx | 13 +++-
.../dashboard/app/components/CreateRoomModal.tsx | 15 ++++-
.../dashboard/app/components/FloatingWindow.tsx | 11 +++-
.../components/__tests__/CreateRoomModal.test.tsx | 72 +++++++++++++++++++++
.../FloatingWindowStack.cross-type.test.tsx | 37 +++++++----
.../app/components/floatingWindowStack.ts | 10 +--
10 files changed, 139 insertions(+), 24 deletions(-)
Fusion-Task-Id: FN-8248
Fusion-Task-Lineage: 94ef20f1-96da-4249-9812-169f780c9451
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-17 16:34:16 -07:00
gsxdsm
703488f0f3
fix(FN-8142): restore Anthropic OAuth refresh
...
Use the Claude OAuth client identity issued by the login flow and lock the request contract down with a regression assertion.
2026-07-17 16:26:20 -07:00
gsxdsm
62f121e0c9
FN-8247: stop session advisor with oversight
...
Stop now persists session-advisor disablement and reflects inherited advisor state in task details.
- Persist an explicit advisor-off override and clear its live runtime when stopping oversight.
- Resolve workflow-level advisor defaults for task-detail icons and toggle behavior.
- Cover stop cleanup and desktop/mobile oversight state transitions with regression tests.
- Document the combined stop contract and add a patch changeset.
Files changed:
.changeset/fn-8247-session-advisor-stop-and-icon.md | 7 ++
docs/dashboard-guide.md | 6 +-
packages/dashboard/app/components/TaskDetailModal.tsx | 86 +++++++++++------
packages/dashboard/app/components/__tests__/TaskDetailModal.oversight-controls.test.tsx | 104 +++++++++++++++++++++
packages/dashboard/app/components/__tests__/TaskDetailModal.oversight-mobile.test.tsx | 62 ++++++++++++
packages/engine/src/__tests__/project-engine-stop-overseer-session-advisor.test.ts | 62 ++++++++++++
packages/engine/src/project-engine.ts | 13 ++-
7 files changed, 310 insertions(+), 30 deletions(-)
Fusion-Task-Id: FN-8247
Fusion-Task-Lineage: dcb67af7-9a36-4b25-bafa-84722fe158a0
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-17 16:20:10 -07:00
gsxdsm
669cb7cc56
FN-8250: pin Settings at bottom of mobile More menu
...
Pin the omitted Settings destination beneath the mobile More-menu divider.
- Render Settings after the More-menu separator when omitted from primary tabs.
- Prevent duplicate Settings entries when it is a primary tab.
- Cover ordering and duplicate-prevention behavior with MobileNavBar tests.
- Add a patch changeset for the mobile navigation fix.
Files changed:
.changeset/fn-8250-mobile-more-settings.md | 7 +++++++
packages/dashboard/app/components/MobileNavBar.tsx | 11 ++++++++++-
.../app/components/__tests__/MobileNavBar.test.tsx | 22 ++++++++++++++++++++++
3 files changed, 39 insertions(+), 1 deletion(-)
Fusion-Task-Id: FN-8250
Fusion-Task-Lineage: 4eea65d8-2e01-4fa4-986e-ffc15e906553
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-17 15:54:39 -07:00
gsxdsm
c43fdbb520
FN-8245: stabilize dashboard focus and planning tests
...
Make dashboard test execution deterministic and restore quarantined coverage.
- Defer oversight-menu autofocus until the opening frame and cover both breakpoints.
- Replace timing-dependent planning stream mocks with deterministic microtasks.
- Isolate QuickEntryBox focus state and re-admit restored dashboard tests.
Files changed:
.../dashboard/app/components/TaskDetailModal.tsx | 15 ++-
.../PlanningModeModal.planning-flow.test.tsx | 132 ++++++++++++++-------
.../components/__tests__/QuickEntryBox.test.tsx | 13 ++
.../TaskDetailModal.oversight-mobile.test.tsx | 19 +--
packages/dashboard/vitest.config.ts | 24 ++--
scripts/lib/dashboard-curated-skiplist.json | 4 +
scripts/lib/test-quarantine.json | 20 ----
7 files changed, 140 insertions(+), 87 deletions(-)
Fusion-Task-Id: FN-8245
Fusion-Task-Lineage: cd9b0638-0a6b-4dcf-980a-e90ba72b5db9
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-17 15:46:31 -07:00
gsxdsm
59815fd563
FN-8240: restore dashboard API test coverage
...
Restore quarantined dashboard API coverage and harden PostgreSQL template setup.
- Re-enable 18 dashboard API tests by clearing their quarantine ledger and Vitest exclusions.
- Preserve remote tunnel providers in route test mocks.
- Prevent PostgreSQL template cleanup races and terminate stale template sessions before copies.
Files changed:
.../core/src/__test-utils__/pg-test-harness.ts | 28 ++++---
.../src/__tests__/routes-remote-access.test.ts | 7 +-
packages/dashboard/vitest.config.ts | 25 ++----
scripts/lib/test-quarantine.json | 90 ----------------------
4 files changed, 30 insertions(+), 120 deletions(-)
Fusion-Task-Id: FN-8240
Fusion-Task-Lineage: 19269246-4eb7-418f-ab0d-bf90ba5dfb49
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-17 15:02:25 -07:00
gsxdsm
56773f691c
FN-8244: fix PG template database isolation
...
Prevent same-process Vitest modules from racing over a shared PostgreSQL schema template.
- Assign each harness module instance a nonce-bearing template database.
- Clean up successful-worker templates and preserve live sibling templates during sweeps.
- Add isolated-module concurrency and template lifecycle regression coverage.
Files changed:
.../core/src/__test-utils__/pg-test-harness.ts | 100 +++++++++++++++-----
...pg-test-harness-template-concurrency.pg.test.ts | 101 +++++++++++++++++++++
2 files changed, 177 insertions(+), 24 deletions(-)
Fusion-Task-Id: FN-8244
Fusion-Task-Lineage: 5a693232-6740-404f-a3da-763fecc5950f
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-17 14:50:59 -07:00
gsxdsm
c0441c96e4
FN-8243: restore priority select focus-visible coverage
...
Restore tokenized focus styling required by dashboard CSS hygiene checks.
- Add the missing `.detail-priority-select:focus-visible` selector.
- Reuse the shared strong focus-ring and radius tokens.
Files changed:
packages/dashboard/app/components/TaskDetailModal.css | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
Fusion-Task-Id: FN-8243
Fusion-Task-Lineage: 35d6214e-a0de-48b1-8fd7-9eb4fca707ef
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-17 14:45:23 -07:00
gsxdsm
600e9c9ecc
FN-8242: fix triage duplicate-finalization test mock
...
Make triage duplicate-finalization tests provide the activity recorder used by the implementation.
- Add an awaited recordActivity mock to the shared TaskStore fixture.
- Select delete resolution in the reviewer-outage retry scenario so it reaches deleteTask.
Files changed:
packages/engine/src/__tests__/triage.test.ts | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
Fusion-Task-Id: FN-8242
Fusion-Task-Lineage: 8f9fd4b6-8071-47f3-8091-747884762ec9
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-17 14:40:48 -07:00
gsxdsm
7517f2eddf
FN-8239: align task card oversight icon state
...
Keep task-card overseer indicators aligned with resolved oversight settings.
- Gate transient Eye badges on the resolved effective oversight level.
- Suppress stale snapshots and empty header wrappers while inherited workflow settings load.
- Add regression coverage and document the consistent off-state behavior.
Files changed:
.changeset/fn-8239-oversight-icon-consistency.md | 7 ++++
docs/dashboard-guide.md | 3 +-
packages/dashboard/app/components/TaskCard.tsx | 29 ++++++++++++----
.../__tests__/TaskCard.oversight.test.tsx | 40 ++++++++++++++++++++++
.../app/components/__tests__/TaskCard.test.tsx | 23 +++++++++++++
5 files changed, 94 insertions(+), 8 deletions(-)
Fusion-Task-Id: FN-8239
Fusion-Task-Lineage: 2857358c-7626-4b04-b1b5-fa51c3a71418
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-17 14:35:07 -07:00
gsxdsm
9152d8fa61
FN-8229: remove background AI tasks pill
...
Replace the redundant footer AI session control with progress and action visibility in the session notification banner.
- Delete the BackgroundTasksIndicator component, styles, footer wiring, and obsolete translations.
- Surface non-planning generating and retained error sessions through the notification banner while leaving Planning in its dedicated view.
- Update session lifecycle, localization, documentation, and regression coverage.
Files changed:
.../fn-8229-remove-ai-background-tasks-pill.md | 7 +
docs/dashboard-guide.md | 4 +-
packages/dashboard/README.md | 1 -
packages/dashboard/app/App.tsx | 28 +--
.../app/__tests__/css-hygiene-scan.test.ts | 2 -
.../dashboard-component-color-tokenization.test.ts | 1 -
packages/dashboard/app/api/legacy.ts | 2 +-
.../app/components/BackgroundTasksIndicator.css | 130 -------------
.../app/components/BackgroundTasksIndicator.tsx | 210 ---------------------
.../dashboard/app/components/ExecutorStatusBar.css | 3 -
.../dashboard/app/components/ExecutorStatusBar.tsx | 30 +--
.../app/components/SessionNotificationBanner.css | 10 +
.../app/components/SessionNotificationBanner.tsx | 52 ++++-
.../app/components/SubtaskBreakdownModal.tsx | 7 +-
.../app/components/__tests__/App.test.tsx | 11 +-
.../__tests__/ExecutorStatusBar.test.tsx | 1 -
.../__tests__/SessionNotificationBanner.test.tsx | 88 ++++-----
.../components/__tests__/utility-mobile.test.tsx | 191 +------------------
.../app/components/dashboard/DashboardBanners.tsx | 8 +-
.../dashboard/__tests__/DashboardBanners.test.tsx | 30 ++-
.../hooks/__tests__/useBackgroundSessions.test.ts | 21 ++-
.../dashboard/app/hooks/useBackgroundSessions.ts | 21 ++-
.../app/utils/__tests__/appLifecycle.test.ts | 61 ++----
packages/dashboard/app/utils/appLifecycle.ts | 16 +-
packages/dashboard/src/routes.ts | 2 +-
packages/i18n/locales/en/app.json | 33 +---
packages/i18n/locales/es/app.json | 44 ++---
packages/i18n/locales/fr/app.json | 44 ++---
packages/i18n/locales/ko/app.json | 44 ++---
packages/i18n/locales/zh-CN/app.json | 44 ++---
packages/i18n/locales/zh-TW/app.json | 44 ++---
packages/i18n/src/resources.d.ts | 48 ++---
32 files changed, 316 insertions(+), 922 deletions(-)
Fusion-Task-Id: FN-8229
Fusion-Task-Lineage: a232fb04-08ff-4f0a-a440-e94545243e61
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-17 14:25:30 -07:00
gsxdsm
0b6957a1b2
FN-8241: log Plan Review revisions distinctly
...
Classify requested Plan Review changes as normal specification revision activity rather than workflow failures.
- Replace failure log actions for deterministic and reviewer-requested revisions
- Preserve failed workflow-result state for replan and recovery processing
- Cover revision logging across deterministic, reviewer, and retry paths
Files changed:
.../triage-review-spec-external-integration.test.ts | 5 ++++-
packages/engine/src/__tests__/triage.test.ts | 11 +++++++++++
packages/engine/src/triage.ts | 14 ++++++++++++--
3 files changed, 27 insertions(+), 3 deletions(-)
Fusion-Task-Id: FN-8241
Fusion-Task-Lineage: 316370ac-36c2-45b5-944f-602375167cdd
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-17 14:19:28 -07:00
gsxdsm
a746a02f3b
FN-8236: group mobile Settings sections by topic
...
Group the mobile Settings picker by desktop navigation topics while preserving scoped section adjacency.
- Render mobile section choices in native topic optgroups
- Preserve Global-before-Project ordering and search-aware empty groups
- Cover grouped picker behavior and document the mobile navigation
Files changed:
docs/dashboard-guide.md | 2 +-
packages/dashboard/app/components/SettingsModal.tsx | 31 +++++++--
packages/dashboard/app/components/__tests__/settings-mobile.test.tsx | 80 ++++++++++++++++++++++
3 files changed, 107 insertions(+), 6 deletions(-)
Fusion-Task-Id: FN-8236
Fusion-Task-Lineage: 3a90bc72-2393-4b41-a7c3-2c9e30c94e01
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-17 14:13:41 -07:00
gsxdsm
eae8d9dabe
FN-8238: tighten mobile mailbox header layout
...
Keep full-page mailbox actions and detail controls compact on mobile devices.
- Gate compact mailbox styles on the runtime mobile viewport mode
- Preserve header actions, tabs, and message controls in single mobile rows
- Add regression coverage for mobile layout gating and actions
Files changed:
packages/dashboard/app/components/MailboxModal.css | 113 ++++++++++++++++++++-
packages/dashboard/app/components/MailboxView.tsx | 12 ++-
.../app/components/__tests__/MailboxView.test.tsx | 73 +++++++++++++
3 files changed, 193 insertions(+), 5 deletions(-)
Fusion-Task-Id: FN-8238
Fusion-Task-Lineage: fce35577-4368-4cf6-a059-445550c98463
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-17 13:58:34 -07:00
gsxdsm
595c27ceae
FN-8235: add mobile Kanban column snapping
...
Mobile Kanban now settles user swipes on the nearest column.
- add a mobile-only, user-driven scroll-end snapping hook
- wire snapping to every live Board rendering and cover interaction boundaries
- document the behavior and add a patch changeset
Files changed:
.changeset/fn-8235-mobile-kanban-snap.md | 7 +
docs/dashboard-guide.md | 6 +
packages/dashboard/app/components/Board.tsx | 19 ++-
.../app/components/__tests__/board-mobile.test.tsx | 14 +-
.../hooks/__tests__/useColumnScrollSnap.test.ts | 159 ++++++++++++++++++
.../dashboard/app/hooks/useColumnScrollSnap.ts | 179 +++++++++++++++++++++
6 files changed, 380 insertions(+), 4 deletions(-)
Fusion-Task-Id: FN-8235
Fusion-Task-Lineage: 46881e93-59f2-49d6-b29e-fa6150420f2a
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-17 13:53:13 -07:00
gsxdsm
44c784264a
FN-8237: refine mobile footer quick actions
...
Make mobile footer quick actions configurable, reorderable, and immediately applied.
- Expand the selectable quick-action universe and preserve valid configured items.
- Add General settings controls for reordering, adding, and removing footer actions.
- Wire updated navigation settings through the dashboard and document the behavior.
Files changed:
.../fn-8237-mobile-nav-quick-actions-refinement.md | 7 +
docs/dashboard-guide.md | 2 +-
docs/settings-reference.md | 2 +-
.../src/__tests__/mobile-nav-primary-items.test.ts | 17 +-
packages/core/src/mobile-nav-primary-items.ts | 44 ++-
packages/dashboard/app/App.tsx | 4 +-
packages/dashboard/app/components/AppModals.tsx | 2 +
packages/dashboard/app/components/MobileNavBar.tsx | 319 ++++-----------------
.../dashboard/app/components/SettingsModal.tsx | 4 +
.../app/components/__tests__/MobileNavBar.test.tsx | 18 +-
.../__tests__/SettingsModal.general.test.tsx | 20 ++
.../dashboard/app/components/dashboard/MainContent.tsx | 2 +
.../dashboard/app/components/dashboard/types.ts | 1 +
.../settings/sections/GeneralSection.tsx | 75 ++---
packages/dashboard/app/hooks/useAppSettings.ts | 11 +
packages/i18n/locales/en/app.json | 5 +-
16 files changed, 220 insertions(+), 313 deletions(-)
Fusion-Task-Id: FN-8237
Fusion-Task-Lineage: cff91b30-7ef9-4557-8880-cc71ed74dafb
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-17 13:45:41 -07:00
gsxdsm
f0b6e4be0c
FN-8233: reflect oversight state in menu trigger
...
Make the Oversight menu trigger icon reflect the effective overseer configuration.
- Switch the trigger between Eye and EyeOff based on oversight level and Session advisor state.
- Cover icon updates after changing either control.
- Document the combined trigger-state behavior.
Files changed:
docs/dashboard-guide.md | 6 ++-
.../dashboard/app/components/TaskDetailModal.tsx | 10 +++-
.../TaskDetailModal.oversight-controls.test.tsx | 61 ++++++++++++++++++++++
3 files changed, 74 insertions(+), 3 deletions(-)
Fusion-Task-Id: FN-8233
Fusion-Task-Lineage: 16012bf1-94f8-4461-90b6-95d309aa9a6d
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-17 13:38:32 -07:00
gsxdsm
2f7da57601
FN-8230: translate GitHub import issues across pages
...
GitHub import auto-translation now covers every reachable issue page within the fetch cap.
- Translate and retain per-page results while invalidating changed or reloaded issues
- Raise the translation budget for a 300-issue traversal and cover pagination regressions
- Document the GitHub-only pagination behavior and add a patch changeset
Files changed:
.changeset/fn-8230-import-translate-pagination.md | 7 ++
docs/dashboard-guide.md | 2 +-
docs/settings-reference.md | 4 +-
.../dashboard/app/components/GitHubImportModal.tsx | 33 ++++++---
.../components/GitHubImportTranslateControls.tsx | 80 ++++++++++++---------
.../__tests__/GitHubImportAutoTranslate.test.tsx | 66 ++++++++++++-----
.../__tests__/GitHubImportModal.test.tsx | 32 +++++++++
.../dashboard/src/__tests__/ai-translate.test.ts | 20 ++++++
packages/dashboard/src/ai-translate.ts | 6 +-
packages/dashboard/src/import-translate-service.ts | Bin 11109 -> 11099 bytes
10 files changed, 186 insertions(+), 64 deletions(-)
Fusion-Task-Id: FN-8230
Fusion-Task-Lineage: 2c3ce6f6-a8f3-46a9-b93a-0192f0cdaf54
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-17 13:31:42 -07:00
gsxdsm
a650057b3a
FN-8234: position task size badges beside IDs
...
Place task size badges directly after task IDs to keep card header metadata aligned.
- Move size badges out of trailing action clusters into the ID-adjacent header position
- Preserve desktop and mobile chip-height alignment for size badges and actions
- Update card layout tests for badge ordering and alignment
Files changed:
packages/dashboard/app/components/TaskCard.css | 33 ++++++---
packages/dashboard/app/components/TaskCard.tsx | 20 +++---
.../__tests__/TaskCard.badge-wrap.test.tsx | 81 +++++++++++++---------
.../app/components/__tests__/TaskCard.test.tsx | 31 +++++++--
4 files changed, 107 insertions(+), 58 deletions(-)
Fusion-Task-Id: FN-8234
Fusion-Task-Lineage: c9c93d1a-3339-40b0-b818-4d7b1a44a650
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-17 13:21:13 -07:00
gsxdsm
cdcdc32679
FN-8232: keep task attachment picker available across tabs
...
Keep the task-detail attachment picker functional outside the Definition tab.
- Mount the shared hidden file input outside tab-specific content.
- Cover attachment picker access from the Activity tab.
- Add a patch changeset for the task-detail fix.
Files changed:
.../fn-8232-task-detail-attachment-picker.md | 7 +++++++
.../dashboard/app/components/TaskDetailModal.tsx | 20 ++++++++++++-------
...lModal.inline-editing-and-integrations.test.tsx | 23 ++++++++++++++++++++++
3 files changed, 43 insertions(+), 7 deletions(-)
Fusion-Task-Id: FN-8232
Fusion-Task-Lineage: a425a373-f15c-4e7f-a50e-e2eba592d2c9
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-17 13:15:58 -07:00
gsxdsm
9cdddab504
FN-8231: dismiss mobile mailbox details on Back
...
Mobile mailbox overlays now close through the shared navigation history before leaving the message list.
- Register mobile message, composer, and approval overlays as navigation modals.
- Remove matching history entries when mailbox overlays close or change state.
- Add mobile back-navigation coverage and document the behavior.
Files changed:
docs/dashboard-guide.md | 3 +-
packages/dashboard/app/components/MailboxView.tsx | 117 ++++++++++++----
.../app/components/__tests__/MailboxView.test.tsx | 148 +++++++++++++++++++++
3 files changed, 241 insertions(+), 27 deletions(-)
Fusion-Task-Id: FN-8231
Fusion-Task-Lineage: b6f06ed9-b03f-45d9-b90b-28b565231bcc
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-17 13:10:39 -07:00
gsxdsm
f3ef60b80a
FN-8227: link closed tracked issues to landing commits
...
Closed GitHub tracked issues now reliably include their landing commit link.
- Re-read the authoritative task row before posting a Done tracking comment.
- Preserve event-snapshot commit links when the task lookup fails or is absent.
- Cover stale events, unavailable rows, no-op landings, and non-Done transitions.
Files changed:
.changeset/fn-8227-tracked-issue-commit-link.md | 7 ++
.../src/__tests__/github-tracking-comments.test.ts | 81 ++++++++++++++++++++++
packages/dashboard/src/github-tracking-comments.ts | 14 +++-
3 files changed, 100 insertions(+), 2 deletions(-)
Fusion-Task-Id: FN-8227
Fusion-Task-Lineage: f497dbb8-da5c-4409-a8fd-836d6df573da
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-17 13:04:45 -07:00
gsxdsm
9b9d6a2e72
FN-8226: install dependencies before full rebuilds
...
Full System rebuilds now refresh workspace dependencies before compiling and restarting.
- Run and stream pnpm install before full builds
- Abort builds and restarts when dependency installation fails
- Cover install sequencing, failure handling, and scoped rebuild behavior
Files changed:
.changeset/FN-8226-full-rebuild-install.md | 7 +
.../__tests__/register-system-routes.test.ts | 94 ++++++++++-
.../dashboard/src/routes/register-system-routes.ts | 180 ++++++++++++++-------
3 files changed, 220 insertions(+), 61 deletions(-)
Fusion-Task-Id: FN-8226
Fusion-Task-Lineage: 15d178d6-5052-445a-8376-bd5f32fc38c4
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-17 12:59:34 -07:00
gsxdsm
2e9c255268
FN-8228: support Back navigation in import detail sheets
...
Make mobile Back dismiss import detail sheets before the parent import modal.
- Register nested navigation entries for GitHub and GitLab detail sheets.
- Centralize detail selection cleanup across dismissal and successful actions.
- Cover native and browser Back flows and document the mobile behavior.
Files changed:
docs/dashboard-guide.md | 7 ++
.../dashboard/app/components/GitHubImportModal.tsx | 54 +++++++--
.../__tests__/GitHubImportModal.test.tsx | 132 ++++++++++++++++++++-
3 files changed, 180 insertions(+), 13 deletions(-)
Fusion-Task-Id: FN-8228
Fusion-Task-Lineage: 36062d52-ad6b-4d5c-87ff-5a6959feecc9
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-17 12:53:46 -07:00
gsxdsm
adb3eb3a37
FN-8224: add Claude ACP runtime support
...
Add a bundled Claude Code ACP runtime with model discovery and CLI distribution integration.
- Add the Claude ACP runtime plugin, bridge, tool forwarding, and tests.
- Register Claude model discovery and cached picker support in the dashboard.
- Stage the plugin in CLI and desktop packaging with its pinned dependency.
- Add workspace, lockfile, and release metadata.
Files changed:
.changeset/fn-8224-claude-acp-runtime.md | 7 +
packages/cli/package.json | 1 +
packages/cli/src/__tests__/bundle-output.test.ts | 32 +-
.../cli/src/plugins/staged-bundled-plugin-ids.ts | 1 +
packages/cli/tsup.config.ts | 40 +-
.../core/src/plugins/bundled-plugin-install.ts | 2 +
packages/dashboard/package.json | 3 +-
packages/dashboard/src/claude-model-cache.ts | 185 +++++++
packages/dashboard/src/routes.ts | 1 +
.../dashboard/src/routes/register-model-routes.ts | 11 +
packages/dashboard/src/runtime-provider-probes.ts | 15 +
packages/dashboard/vitest.config.ts | 4 +
packages/desktop/scripts/workspace-tools.ts | 1 +
plugins/fusion-plugin-claude-runtime/README.md | 7 +
plugins/fusion-plugin-claude-runtime/manifest.json | 1 +
plugins/fusion-plugin-claude-runtime/package.json | 1 +
.../src/__tests__/cli-spawn.test.ts | 3 +
.../src/__tests__/index.test.ts | 3 +
.../src/__tests__/provider.test.ts | 8 +
.../src/__tests__/runtime-adapter.test.ts | 7 +
.../src/__tests__/tool-bridge.test.ts | 79 +++
.../src/acp-settings.ts | 21 +
.../src/acp/VENDORED.md | 30 ++
.../src/acp/cli-spawn.ts | 188 +++++++
.../src/acp/control-handler.ts | 302 ++++++++++++
.../src/acp/event-bridge.ts | 308 ++++++++++++
.../src/acp/fs-capabilities.ts | 263 ++++++++++
.../fusion-plugin-claude-runtime/src/acp/index.ts | 16 +
.../src/acp/path-jail.ts | 229 +++++++++
.../src/acp/process-manager.ts | 177 +++++++
.../src/acp/prompt-builder.ts | 87 ++++
.../src/acp/provider.ts | 542 +++++++++++++++++++++
.../src/acp/runtime-adapter.ts | 190 ++++++++
.../src/acp/sanitize.ts | 81 +++
.../src/acp/tool-mapping.ts | 47 ++
.../fusion-plugin-claude-runtime/src/acp/types.ts | 189 +++++++
.../fusion-plugin-claude-runtime/src/cli-spawn.ts | 31 ++
plugins/fusion-plugin-claude-runtime/src/index.ts | 95 ++++
.../src/mcp-forwarding.ts | 114 +++++
.../src/mcp-schema-server.cjs | 155 ++++++
plugins/fusion-plugin-claude-runtime/src/probe.ts | 8 +
.../fusion-plugin-claude-runtime/src/provider.ts | 8 +
.../src/runtime-adapter.ts | 424 ++++++++++++++++
.../src/skill-loader.ts | 290 +++++++++++
.../src/tool-bridge.ts | 264 ++++++++++
plugins/fusion-plugin-claude-runtime/src/types.ts | 142 ++++++
plugins/fusion-plugin-claude-runtime/tsconfig.json | 10 +
.../fusion-plugin-claude-runtime/vitest.config.ts | 22 +
pnpm-lock.yaml | 131 ++++-
pnpm-workspace.yaml | 1 +
50 files changed, 4753 insertions(+), 24 deletions(-)
Fusion-Task-Id: FN-8224
Fusion-Task-Lineage: 4e626913-32bb-4baa-a142-816c7f4ee7c4
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-17 12:00:26 -07:00
gsxdsm
7f1b7e21c1
FN-8223: enforce full CLI quarantine ledger lockstep
...
Extend CLI quarantine validation across the entire ledger.
- Normalize package-relative Vitest exclusions to repository paths.
- Require each CLI configuration exclusion and ledger entry exactly once.
- Validate ISO 8601 quarantine timestamps.
Files changed:
.../src/__tests__/lockstep-cli-quarantine.test.ts | 52 +++++++++++-----------
packages/cli/vitest.config.ts | 4 +-
2 files changed, 27 insertions(+), 29 deletions(-)
Fusion-Task-Id: FN-8223
Fusion-Task-Lineage: 7abe719b-63bf-4dfa-8db6-e3dd7547c7fe
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-17 11:43:46 -07:00
gsxdsm
065890ca01
FN-8222: align CLI tests with current store APIs
...
Repair CLI test mocks and retry-reset expectations for the current store contracts.
- Add the backend store factory to the experiment-finalize mock.
- Provide global settings directory access in backup test stores.
- Assert all manual retry reset fields in task command tests.
Files changed:
.../extension-experiment-finalize.test.ts | 13 ++++++++++
.../commands/__tests__/backup-lock-retry.test.ts | 2 ++
packages/cli/src/commands/__tests__/backup.test.ts | 17 ++++++++++++-
packages/cli/src/commands/__tests__/task.test.ts | 28 +++++++++++++++++-----
4 files changed, 53 insertions(+), 7 deletions(-)
Fusion-Task-Id: FN-8222
Fusion-Task-Lineage: 033ce6a6-c699-409c-a59e-2d1f5e041cfc
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-17 11:37:32 -07:00
gsxdsm
5d2c3be6a0
FN-8221: clear inactive planner overseer state
...
Clear retained planner overseer state when effective oversight is disabled.
- Remove monitor, recovery, advisor, and dedup runtime for oversight-off tasks.
- Suppress stale oversight-off Eye badges in task cards.
- Cover cleanup and badge behavior with regression tests.
- Document the runtime snapshot invariant and add a patch changeset.
Files changed:
.changeset/fn-8221-overseer-badge-oversight-off.md | 7 ++
docs/architecture.md | 4 +
packages/dashboard/app/components/TaskCard.tsx | 9 +-
.../app/components/__tests__/TaskCard.test.tsx | 20 ++++
.../__tests__/planner-overseer-off-cleanup.test.ts | 119 +++++++++++++++++++++
packages/engine/src/project-engine.ts | 12 +++
6 files changed, 170 insertions(+), 1 deletion(-)
Fusion-Task-Id: FN-8221
Fusion-Task-Lineage: 01c9d838-fbe4-4d34-8eb5-d735cf35e581
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-17 11:27:44 -07:00
gsxdsm
b686fbd61d
FN-8220: mock daemon model runtime setup
...
Align daemon startup mocks with the model runtime initialization path.
- Add the auth-storage setModelRuntime mock.
- Stub the Fusion model registry factory to use the shared test registry.
Files changed:
packages/cli/src/commands/__tests__/daemon.test.ts | 9 +++++++++
1 file changed, 9 insertions(+)
Fusion-Task-Id: FN-8220
Fusion-Task-Lineage: 6e00980f-2e24-4502-a4d8-e91849df33b9
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-17 11:24:02 -07:00
gsxdsm
5acea6c0cf
fix(pg): route residual SQLite-stub store paths through the async data layer ( #2273 )
...
## Summary
An audit of the SQLite→PostgreSQL store migration found data-store paths
still reaching the removed SQLite stub in backend (PG) mode. In backend
mode `store.db`/`getDatabase()` throw the removed-SQLite error, so each
of these either threw on every run or — worse — had the throw swallowed
into a silent wrong result. This PR routes all of them through the
`AsyncDataLayer` (and removes one dead primitive).
## The 6 live bugs fixed
| Fix | Was |
|-----|-----|
| `executor.ts` authoritative assigned-agent fallback now inherits the
TaskStore `asyncLayer` | silently returned `null` → model drift to the
pi built-in (the exact thing its comment guards) |
| `pruneAgentLogFilesAsync` replaces the sync self-healing prune call |
threw `SQLite Database is not available` every maintenance sweep →
agent-log pruning never ran |
| `cleanupOrphanedMaterializedSteps` deletes PG `workflow_steps` rows on
a failed create | swallowed the throw → leaked rows |
| `deleteTaskBackendImpl` now runs the async mission feature/task-link
unlink | PG hard delete left orphaned mission links |
| `getWorkflowSettingsProjectId` returns `rootDir` in backend mode
without touching the stub | swallowed throw for unscoped backend stores
|
| `fn plugin` unregistered-project fallback bootstraps a `CentralCore`
`AsyncDataLayer` | layerless `PluginStore` threw in PG |
## The 4 latent traps, fixed properly
- **`cleanupArchivedTasks`** — real async port (enumerate archived
soft-deleted rows, guarantee cold snapshot, hard-delete project row +
purge selection rows + rm dir).
- **`deleteWorkflowStep`** — real async port (delete `workflow_steps`
via the layer with `.returning()` to preserve the not-found contract).
- **`applyTaskPatch`** — **removed** (zero-caller SQLite column-patch
primitive with no backend analogue; impl + facade + import deleted).
- **`AgentStore.importLegacyFileRuns`** — clean backend no-op (no legacy
SQLite run-files exist in a PG deployment; its only `init()` caller
early-returns in backend mode).
## Symptom Verification
New PG regression suite
`packages/core/src/__tests__/postgres/store-sqlite-residue-fixes.pg.test.ts`
reproduces the original failures against real embedded Postgres and
asserts they're gone:
- orphaned `workflow_steps` are actually deleted (no swallowed throw)
- `pruneAgentLogFilesAsync` resolves and prunes inactive-task log files
- hard delete unlinks the mission feature from the task
- `deleteWorkflowStep` removes the row / reports not-found
- `cleanupArchivedTasks` hard-deletes the project row while retaining
the cold snapshot
## Verification
- `@fusion/core`, `@fusion/engine`, `@runfusion/fusion` typecheck clean
- ~50 existing + 5 new PG tests pass; lint clean; changeset validates
🤖 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**
* Prevented PostgreSQL backend maintenance from hitting removed legacy
SQLite code paths, avoiding datastore failures and residue cleanup
issues.
* Fixed workflow-step deletion and “not found” behavior in backend mode.
* Ensured backend hard-deletes correctly unlink related mission
feature/task links and clean orphaned materialized steps.
* Prevented legacy file-run imports from incorrectly reporting success
in backend mode.
* **New Features**
* Added async agent-log pruning for inactive tasks and updated
maintenance to use it.
* **Tests**
* Added PostgreSQL regression coverage for residue fixes and
archive/workflow cleanup.
* **Refactor**
* Removed an unused task patch operation and updated task-store cleanup
methods to be async where needed.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
---------
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com >
2026-07-17 11:22:21 -07:00
gsxdsm
cdcc3261f1
FN-8225: migrate goal-tool tests to shared PostgreSQL harness
...
Migrate goal-tool extension tests to the injected shared PostgreSQL harness.
- Replace temporary embedded PostgreSQL roots with shared harness lifecycle hooks
- Reuse harness API registration and tool helpers across goal retrieval and audit suites
- Preserve retrieval audit assertions while avoiding concurrent database startup locks
Files changed:
.../__tests__/extension-goal-tools-audit.test.ts | 72 ++++++-------
.../cli/src/__tests__/extension-goal-tools.test.ts | 113 ++++++++-------------
2 files changed, 76 insertions(+), 109 deletions(-)
Fusion-Task-Id: FN-8225
Fusion-Task-Lineage: 424c1bb2-5cb7-4e81-b3fd-8f6a6f29b433
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-17 11:18:50 -07:00
gsxdsm
a7ab3ccb49
fix(heartbeat): stop zombie-timer audit churning live-but-skipping timers ( #2271 )
...
## Problem
Permanent (durable) agent heartbeats went silent while the rest of the
engine kept running. Investigation of the live DB showed **every**
permanent agent's `heartbeatTimerRepair` metadata carrying
`nonAdvancingEscalated: true` with **3–63 consecutive** zombie re-arms —
the audit re-arming a timer every 60s for hours while emitting
`heartbeat-rearm-nonadvancing-escalated` warnings that never recovered
anything.
## Root cause
The heartbeat trigger audit classified a "zombie" (dead) timer **solely
from a stale `lastHeartbeatAt`**. But that column advances *only* on a
successful `"ok"` delivery (`agent-store.ts` `recordHeartbeat`). It
stays frozen whenever a heartbeat is intentionally skipped or no-op'd:
- agent over budget / over budget threshold
- `globalPause` / `enginePaused`
- `skipHeartbeatWhenIdle` on an idle agent
- idle "org" agents whose runs complete as `no_assignment_identity_run`
In all of these the interval keeps firing perfectly — the timer is
alive, delivery is just (correctly) skipped. Keying zombie detection off
`lastHeartbeatAt` misread those healthy timers as dead, re-armed them
every 60s, and escalated forever. Re-arming a live timer is a no-op, so
the loop could never recover — it only produced churn and phantom
warnings.
## Fix (the invariant)
Key zombie detection off **whether the interval physically fired**, not
whether delivery advanced.
- New `lastTimerFireAtMs` map, stamped at the top of `onTimerTick`
**before any gate** — a fired-but-skipped tick still counts as proof of
liveness.
- In the audit: a present + stale timer that fired within its stale
window is **left untouched** (no re-arm, no escalation, non-advancing
counter reset). Only a timer with **no recent fire** (a genuinely dead
interval) falls through to the existing re-arm/escalation path.
- Map cleaned up in `unregisterAgent()` / `stop()`.
This preserves the FN-7645 zombie repair (a timer that stops firing goes
stale in lockstep on both clocks and is still re-armed) and the FN-7939
watchdog, while eliminating the phantom churn for live-but-skipping
timers.
Why not "force a heartbeat" or "park the agent": forcing delivery would
bypass budget/pause governance, and parking a healthy idle agent would
be wrong. The correct action for a live-but-skipping timer is to leave
it alone — its next real tick delivers once the skip condition clears.
## Tests
- Rewrote the old `skipHeartbeatWhenIdle` test that codified the buggy
escalation → now asserts a **live** idle-skipping timer is left
untouched (no zombie re-arm, no escalation).
- Added a budget/no-assignment surface: a live timer that dispatches but
leaves `lastHeartbeatAt` frozen must not be misclassified.
`heartbeat-scheduler.test.ts` 120/120; broader heartbeat + concurrency
suites 349/349; `@fusion/engine` typecheck 0 errors.
## Review
Self-reviewed at medium effort. Two acknowledged, bounded trade-offs
(kept intentionally): a genuinely-dead-but-recently-fired timer's repair
latency is bounded at ~2× interval (same as the original FN-7645
latency), and the escalation warning is suppressed for live timers (it
only ever fired because of the churn this removes; per-tick error logs +
a new "left live-but-skipping timer" log retain visibility). One trivial
cleanup applied (single `Date.now()` sample).
## Notes
- Engine is a private package → no changeset.
- Complementary to a separate in-flight fix for the
agentStore/scheduler-not-constructed bug (why heartbeats stopped
*entirely*); this PR ensures that once the scheduler runs again, the
audit stops the phantom churn/escalation.
🤖 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**
* Improved heartbeat timer monitoring to distinguish healthy timers from
genuinely stopped timers.
* Prevented unnecessary timer re-registration and warning escalation
when heartbeats are intentionally skipped due to idle, paused,
budget-limited, or unassigned states.
* Improved recovery when a replacement timer stops firing, ensuring it
is detected and repaired reliably.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
---------
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com >
2026-07-17 11:15:41 -07:00
gsxdsm
01b1c694d1
FN-8219: remove expired CLI quarantined tests
...
Remove expired CLI test quarantines and preserve evidence of their resolution.
- Delete five expired quarantined CLI test files
- Remove their Vitest exclusions
- Add a lockstep regression guard for the retired quarantine scope
Files changed:
.../src/__tests__/extension-fn-secret-get.test.ts | 164 -
.../src/__tests__/lockstep-cli-quarantine.test.ts | 64 +
packages/cli/src/__tests__/skill-sync.test.ts | 562 ---
packages/cli/src/__tests__/version.test.ts | 62 -
.../cli/src/commands/__tests__/dashboard.test.ts | 3736 --------------------
.../__tests__/bundled-plugin-freshness.test.ts | 75 -
packages/cli/vitest.config.ts | 21 +-
7 files changed, 78 insertions(+), 4606 deletions(-)
Fusion-Task-Id: FN-8219
Fusion-Task-Lineage: cac0b4c5-3255-4733-ba24-2156979d60f3
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-17 11:11:07 -07:00
gsxdsm
526aaf8d65
FN-8218: stub model registry runtime initialization in serve tests
...
Keep serve command tests compatible with async ModelRuntime initialization.
- Add setModelRuntime to the auth storage mock
- Mock createFusionModelRegistry with the shared registry fixture
Files changed:
packages/cli/src/commands/__tests__/serve.test.ts | 10 ++++++++++
1 file changed, 10 insertions(+)
Fusion-Task-Id: FN-8218
Fusion-Task-Lineage: dcbba740-e363-4b17-8eba-00c399343d16
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-17 11:05:02 -07:00
gsxdsm
abc2550cc6
FN-8216: fix settings description test guard
...
Keep the Settings default-description coverage aligned with surfaced and global-only settings.
- Add missing Notifications and Scheduling description keys to the coverage map
- Allowlist the global-only LAN discovery setting so the guard does not require a UI description
Files changed:
.../sections/__tests__/settings-default-descriptions.test.tsx | 9 +++++++++
1 file changed, 9 insertions(+)
Fusion-Task-Id: FN-8216
Fusion-Task-Lineage: a5449429-c5b2-4d88-915b-26baba3fb60b
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-17 10:59:11 -07:00
gsxdsm
eb7d223a03
FN-8207: add task reassignment for delegated work
...
Correct delegation routing for duplicate tasks and enable explicit task owner reassignment.
- Preserve requested assignee and todo routing on duplicate canonical tasks
- Add governed fn_task_assign to engine, heartbeat, triage, workflow, and chat sessions
- Cover assignment validation, truthful delegation responses, and tool availability
Files changed:
.changeset/fn-8207-delegate-assign.md | 7 ++
docs/agents.md | 6 ++
packages/core/src/types.ts | 1 +
packages/core/src/usage-events.ts | 2 +-
.../dashboard/src/__tests__/chat-manager.test.ts | 2 +
packages/dashboard/src/__tests__/chat.test.ts | 2 +
packages/dashboard/src/chat.ts | 2 +
.../engine/src/__tests__/agent-action-gate.test.ts | 2 +
.../src/__tests__/agent-tools-delegation.test.ts | 99 ++++++++++++++++++-
.../src/__tests__/agent-tools-task-assign.test.ts | 75 +++++++++++++++
.../src/__tests__/gating-classifications.test.ts | 1 +
.../src/__tests__/heartbeat-executor.test.ts | 8 +-
.../src/__tests__/permanent-agent-gating.test.ts | 2 +
.../src/__tests__/step-session-executor.test.ts | 4 +-
packages/engine/src/__tests__/triage.test.ts | 5 +-
packages/engine/src/agent-heartbeat.ts | 4 +-
packages/engine/src/agent-tools.ts | 105 ++++++++++++++++++++-
packages/engine/src/executor.ts | 3 +
packages/engine/src/gating-classifications.ts | 1 +
packages/engine/src/index.ts | 2 +
packages/engine/src/step-session-executor.ts | 2 +
packages/engine/src/triage.ts | 2 +
22 files changed, 324 insertions(+), 13 deletions(-)
Fusion-Task-Id: FN-8207
Fusion-Task-Lineage: db6f3876-bdc8-4279-b726-29344d9acdb9
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-17 10:53:19 -07:00
gsxdsm
86c281bc38
FN-8215: add GitHub issue comment posting
...
Enable operators to post upstream GitHub issue comments from the Import Tasks preview.
- Add authenticated GitHub CLI and REST fallback support for creating issue comments.
- Expose a validated API route and inline issue-comment composer with optimistic preview updates.
- Add localized UI copy, documentation, release metadata, and coverage for client, route, and modal behavior.
Files changed:
.changeset/fn-8215-github-issue-add-comment.md | 7 ++
docs/dashboard-guide.md | 9 ++-
packages/dashboard/app/api/legacy.ts | 13 ++++
.../dashboard/app/components/GitHubImportModal.css | 34 +++++++++
.../dashboard/app/components/GitHubImportModal.tsx | 68 +++++++++++++++++-
.../__tests__/GitHubImportModal.test.tsx | 62 +++++++++++++++++
packages/dashboard/src/__tests__/github.test.ts | 48 +++++++++++++
.../dashboard/src/__tests__/routes-github.test.ts | 80 ++++++++++++++++++++++
packages/dashboard/src/github.ts | 49 +++++++++++++
.../dashboard/src/routes/register-git-github.ts | 56 +++++++++++++++
packages/i18n/locales/en/app.json | 5 ++
packages/i18n/locales/es/app.json | 5 ++
packages/i18n/locales/fr/app.json | 5 ++
packages/i18n/locales/ko/app.json | 5 ++
packages/i18n/locales/zh-CN/app.json | 5 ++
packages/i18n/locales/zh-TW/app.json | 5 ++
packages/i18n/src/resources.d.ts | 5 ++
17 files changed, 459 insertions(+), 2 deletions(-)
Fusion-Task-Id: FN-8215
Fusion-Task-Lineage: 0fe6acca-e86d-484f-a97f-5746d32717a1
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-17 10:37:00 -07:00
gsxdsm
3b0b9a5661
FN-8214: show runtime model providers in chat
...
Ensure task chat role icons reflect each agent's actual runtime model.
- Parse runtime model markers from status and text log entries.
- Prefer runtime and effective models over stale task provider overrides.
- Cover provider icon precedence and fallback behavior for all chat roles.
Files changed:
packages/dashboard/app/components/TaskChatTab.tsx | 8 +-
packages/dashboard/app/components/__tests__/TaskChatTab.test.tsx | 88 ++++++++++++++++++----
2 files changed, 76 insertions(+), 20 deletions(-)
Fusion-Task-Id: FN-8214
Fusion-Task-Lineage: 1eb02ca5-469f-4a9d-932c-5cf02383b7fe
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-17 10:30:46 -07:00
gsxdsm
26807c8bf4
FN-8211: restore intrinsic mobile option icons
...
Restore intrinsic mobile sizing for Quick Add option icons.
- Limit enlarged mobile glyphs to primary Quick Add controls.
- Preserve compact options, touch targets, and desktop styling.
- Add regression coverage and a patch changeset.
Files changed:
.changeset/fn-8211-quick-add-icon-revert.md | 7 +++++
.../quick-entry-action-row-height-parity.test.tsx | 27 ++++++++++---------
.../dashboard/app/components/QuickEntryBox.css | 30 +++++++++++++---------
3 files changed, 38 insertions(+), 26 deletions(-)
Fusion-Task-Id: FN-8211
Fusion-Task-Lineage: 85399053-2d6e-4bb7-8741-e7c3b1aa437d
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-17 10:25:01 -07:00
gsxdsm
0d339f4803
FN-8210: repair CLI package configuration test contract
...
Restore the CLI package configuration test to the active test lane with current build expectations.
- Allowlist WhatsApp plugin-only tsup externals as non-runtime CLI dependencies.
- Assert the full workspace build command in the verification contract.
- Remove the stale package-config test quarantine.
Files changed:
packages/cli/src/__tests__/package-config.test.ts | 12 +++++++++++-
packages/cli/vitest.config.ts | 9 ++++-----
2 files changed, 15 insertions(+), 6 deletions(-)
Fusion-Task-Id: FN-8210
Fusion-Task-Lineage: aa29d866-430f-4097-affa-a89d107474b2
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-17 10:19:34 -07:00
gsxdsm
611e51d2a8
FN-8209: align task detail toolbar icons on mobile
...
Make Task Detail inline controls use the compact, accessible Quick Add icon pattern.
- Replace labeled priority and execution controls with icon-only buttons and a priority picker.
- Apply shared icon sizing to oversight, attachment, priority, and fast-mode controls.
- Update responsive and interaction coverage and add a patch changeset.
Files changed:
.changeset/fn-8209-task-detail-toolbar-icons.md | 7 +
.../dashboard/app/components/TaskDetailModal.css | 160 ++++++---------------
.../dashboard/app/components/TaskDetailModal.tsx | 109 ++++++++++----
...lModal.inline-editing-and-integrations.test.tsx | 31 ++--
.../TaskDetailModal.oversight-controls.test.tsx | 5 +-
.../TaskDetailModal.oversight-mobile.test.tsx | 4 +
.../__tests__/TaskDetailModal.rendering.test.tsx | 95 +++---------
...etailModal.responsive-and-dependencies.test.tsx | 20 ++-
8 files changed, 182 insertions(+), 249 deletions(-)
Fusion-Task-Id: FN-8209
Fusion-Task-Lineage: 3c079a7b-245a-4c4d-b058-6e1cf4b5a69d
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-17 10:13:23 -07:00
gsxdsm
7a50232916
FN-8208: validate agent message recipients before delivery
...
Prevent false-success agent messages by validating recipients before delivery.
- Wire AgentStore into every send-message tool registration.
- Reject missing or unvalidated agent recipients before persistence or wake-up.
- Add recipient validation coverage and a patch changeset.
Files changed:
.../fn-8208-send-message-recipient-validation.md | 7 ++
.../chat-send-message-agentstore-wiring.test.ts | 11 ++
packages/dashboard/src/chat.ts | 2 +-
...tools-send-message-recipient-validation.test.ts | 116 +++++++++++++++++++++
packages/engine/src/agent-heartbeat.ts | 4 +-
packages/engine/src/agent-tools.ts | 24 ++++-
packages/engine/src/executor.ts | 2 +-
packages/engine/src/step-session-executor.ts | 2 +-
8 files changed, 162 insertions(+), 6 deletions(-)
Fusion-Task-Id: FN-8208
Fusion-Task-Lineage: 84752bb8-c9f7-42bd-87c1-9681ac442789
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-17 10:07:24 -07:00
gsxdsm
28878d8125
FN-8206: validate landed merge checkout
...
Validate mission assertions against the delivered merge revision rather than an ambient working branch.
- Materialize and dispose a detached checkout at mergeDetails.commitSha for validator sessions.
- Defer failed validation when landed-code ancestry cannot be proven, preventing spurious fix features.
- Link validator runs to their board tasks and document the inspection behavior.
Files changed:
.changeset/fn-8206-mission-validator-inspection-root.md | 7 +
docs/missions.md | 2 +
packages/engine/src/__tests__/mission-execution-loop.test.ts | 278 +++++++++++++--------
packages/engine/src/mission-execution-loop.ts | 160 ++++++++----
4 files changed, 298 insertions(+), 149 deletions(-)
Fusion-Task-Id: FN-8206
Fusion-Task-Lineage: dfd1eb21-fcdf-4722-acb8-416750f4f40b
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-17 10:00:18 -07:00
gsxdsm
67fac31f5c
FN-8202: prevent mDNS hostname conflicts
...
Prevent self-conflicting mDNS advertisements and allow automatic LAN discovery to be disabled.
- Advertise a Fusion-owned DNS-SD hostname derived from the node ID.
- Add a global automatic LAN discovery opt-out for dashboard and serve.
- Cover hostname isolation and discovery startup behavior with tests and documentation.
Files changed:
.changeset/fn-8202-mdns-hostname-fix.md | 7 +++++
docs/settings-reference.md | 1 +
docs/shared-mesh-protocol.md | 2 +-
.../cli/src/commands/__tests__/dashboard.test.ts | 24 ++++++++++++++++
packages/cli/src/commands/__tests__/serve.test.ts | 12 ++++++++
packages/cli/src/commands/dashboard.ts | 24 +++++++++++-----
packages/cli/src/commands/serve.ts | 24 +++++++++++-----
packages/core/src/__tests__/node-discovery.test.ts | 32 +++++++++++++++++++++-
.../core/src/__tests__/settings-defaults.test.ts | 8 ++++++
packages/core/src/node-discovery.ts | 31 +++++++++++++++++++++
packages/core/src/settings-schema.ts | 5 ++++
packages/core/src/types.ts | 2 ++
12 files changed, 156 insertions(+), 16 deletions(-)
Fusion-Task-Id: FN-8202
Fusion-Task-Lineage: c1d6e36b-bda7-4968-b40c-c14e16ebda28
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-17 09:54:44 -07:00
gsxdsm
7fc4b439ee
FN-8205: fix shared auth credential lock retries
...
Serialize shared auth credential writes and await durable persistence under contention.
- Replace synchronous auth-file locking with queued asynchronous retries.
- Propagate asynchronous credential mutations through CLI, dashboard, and provider wrappers.
- Cover held-lock persistence, queue recovery, and awaited caller behavior.
Files changed:
.changeset/fn-8205-auth-lock-retry.md | 7 ++
.../cli/src/commands/__tests__/onboard.test.ts | 17 +++
.../src/commands/__tests__/provider-auth.test.ts | 78 ++++++------
packages/cli/src/commands/onboard.ts | 2 +-
packages/dashboard/src/routes.ts | 6 +-
.../dashboard/src/routes/register-auth-routes.ts | 10 +-
.../dashboard/src/routes/register-mesh-routes.ts | 4 +-
.../register-settings-sync-inbound-routes.ts | 4 +-
.../src/routes/register-settings-sync-routes.ts | 4 +-
.../src/__tests__/auth-storage-concurrency.test.ts | 84 ++++++++++---
packages/engine/src/__tests__/auth-storage.test.ts | 48 ++++----
packages/engine/src/auth-storage.ts | 137 +++++++++++++--------
packages/engine/src/provider-auth.ts | 56 ++++-----
13 files changed, 284 insertions(+), 173 deletions(-)
Fusion-Task-Id: FN-8205
Fusion-Task-Lineage: b932b9ce-9aee-4f0a-9155-63b026c6bde4
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-17 09:47:40 -07:00
gsxdsm
4293826b5a
FN-8212: remove model dropdown sticky-header gap
...
Make pinned model provider headers sit flush against the fixed dropdown header stack.
- Remove top padding that exposed scrolling rows above sticky provider headers.
- Cover the no-seam invariant across desktop and mobile layouts with and without thinking controls.
- Add a patch changeset for the dropdown scrolling fix.
Files changed:
.changeset/fn-8212-model-dropdown-sticky-gap.md | 7 ++++
.../app/components/CustomModelDropdown.css | 5 ++-
.../__tests__/CustomModelDropdown.test.tsx | 46 ++++++++++++++++++++++
3 files changed, 57 insertions(+), 1 deletion(-)
Fusion-Task-Id: FN-8212
Fusion-Task-Lineage: d7ce42d1-bcbe-4000-8107-794ec8e05307
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-17 09:35:14 -07:00
gsxdsm
d6860b5b76
FN-8204: add configurable mobile footer quick actions
...
Add an ordered project setting for mobile footer quick-action destinations.
- Render selected destinations as primary mobile tabs and retain omitted choices in More.
- Provide settings controls, validation, translations, documentation, and regression coverage.
- Add a minor changeset for the published CLI package.
Files changed:
.changeset/fn-8204-mobile-nav-primary-items.md | 7 +
docs/dashboard-guide.md | 4 +
docs/settings-reference.md | 4 +
.../src/__tests__/mobile-nav-primary-items.test.ts | 23 +++
packages/core/src/index.ts | 9 ++
packages/core/src/mobile-nav-primary-items.ts | 55 +++++++
packages/core/src/settings-schema.ts | 1 +
packages/core/src/types.ts | 7 +
packages/dashboard/app/App.tsx | 2 +
.../mobile-feature-access-regression.test.tsx | 19 +++
packages/dashboard/app/components/MobileNavBar.tsx | 159 +++++----------------
.../app/components/__tests__/MobileNavBar.test.tsx | 16 +++
.../app/components/settings/section-keys.ts | 1 +
.../settings/sections/GeneralSection.search.ts | 9 ++
.../settings/sections/GeneralSection.tsx | 45 ++++++
.../settings-default-descriptions.test.tsx | 1 +
packages/dashboard/app/hooks/useAppSettings.ts | 5 +
packages/i18n/locales/en/app.json | 4 +
18 files changed, 244 insertions(+), 127 deletions(-)
Fusion-Task-Id: FN-8204
Fusion-Task-Lineage: 077de4c4-d281-401d-bddd-e5ce8e91d4ab
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-17 09:27:33 -07:00