Add dashboard support for resolving task-branch PR conflicts with AI before PR creation.
- add a dashboard PR conflict resolver that merges the selected base into the task branch, invokes an AI merge session on conflicted files, verifies markers are removed, then commits and pushes the updated branch
- expose a POST /tasks/:id/pr/resolve-conflicts route plus client API/export wiring, docs updates, and a changeset for the published CLI package
- update the Create PR modal UI, styling, and tests to surface preflight conflicts, trigger AI resolution, and refresh preflight state after success
- add API coverage for successful and unresolved conflict-resolution paths and include the new route test in the dashboard API quality shard
Files changed:
.changeset/fn-5949-pr-conflict-resolution.md | 5 +
docs/dashboard-guide.md | 1 +
docs/task-management.md | 1 +
packages/dashboard/README.md | 1 +
packages/dashboard/app/api/legacy.ts | 20 ++
.../dashboard/app/components/PrCreateModal.css | 32 ++-
.../dashboard/app/components/PrCreateModal.tsx | 46 ++++
.../components/__tests__/PrCreateModal.test.tsx | 33 +++
...egister-git-github.pr-resolve-conflicts.test.ts | 186 +++++++++++++++
packages/dashboard/src/index.ts | 5 +
packages/dashboard/src/pr-conflict-resolver.ts | 258 +++++++++++++++++++++
.../dashboard/src/routes/register-git-github.ts | 225 ++++++++++++------
packages/dashboard/vitest.config.ts | 2 +-
13 files changed, 739 insertions(+), 76 deletions(-)
Fusion-Task-Id: FN-5949
Fusion-Task-Lineage: fea35fbf-6254-415c-83cc-0bc24abc911e
ce-compound learning from the live-output/steering work: push-channel-
alongside-pull-contract, void-safe detached turns, inactivity watchdog,
transient liveActivity + persisted trace, replay suppression. Also adds a
"Compound Engineering sessions" cluster to CONCEPTS.md and refreshes the
plugin reference doc's Sessions section with the new transport behaviors.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- runFeatureValidation now lazy-ensures a linked assertion (FN-5902) instead
of the removed zero-assertion auto-pass, for both task-completion and the
stranded-feature recovery path
- CONCEPTS.md: union of main's Merge-lifecycle cluster and this branch's
Missions clusters; Contract Assertion entry updated for FN-5902 semantics
- AGENTS.md: take main's docs/solutions + CONCEPTS.md pointer wording
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Expose operational log retention as a project setting in the dashboard.
- add an Operational log retention selector to the Project General settings section with supported retention options
- validate operationalLogRetentionDays in the settings API and cover accepted and rejected values in tests
- document the constrained retention values and assert project-scope/default parity for the setting
Files changed:
docs/settings-reference.md | 2 +-
packages/core/src/__tests__/settings-parity.test.ts | 7 ++++
packages/dashboard/app/components/SettingsModal.tsx | 47 ++++++++++------------
packages/dashboard/app/components/__tests__/SettingsModal.test.tsx | 8 ++++
packages/dashboard/src/__tests__/routes-settings.test.ts | 21 ++++++++++
packages/dashboard/src/routes/register-settings-memory-routes.ts | 10 +++++
6 files changed, 69 insertions(+), 26 deletions(-)
Fusion-Task-Id: FN-5939
Fusion-Task-Lineage: 2148dd88-1cef-4c6d-9696-31148fce97d3
- Add behavior-level tests for the shared merge-enqueue funnel
(enqueueEligibleInReviewTasks) with a Surface Enumeration of all
in-review entry surfaces, per review
- Seed real stale in-review fixtures in the FN-5147 no-mutation
regression block so sweeps enumerate candidates and the assertions
are non-vacuous
- Keep per-task auto-merge gating uniform across reclaim/contamination
candidate columns: the suggested in-review-only scoping broke the
FN-5704 regression contract (reclaim short-circuits when autoMerge
is off); documented the tension in code comments and the learning doc
- Drop hardcoded commit hash from the learning doc
Document the trigger-layer gating bug fixed in this PR under
docs/solutions/logic-errors/, seed CONCEPTS.md with the merge-lifecycle
vocabulary, and surface both knowledge stores in AGENTS.md's reference
docs index.
Document the UNIQUE(branch_groups.branchName) collision that silently
stranded mission triage, in docs/solutions/logic-errors/, cross-linked to
the sibling PR #1345 mission-stall learning.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Document the stranded done+implementing feature stall in
docs/solutions/logic-errors/, seed CONCEPTS.md with the mission domain
vocabulary, and surface both from AGENTS.md's reference-docs list.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Document why PluginSkillContribution.skillFiles silently fails to load bundled
skills in live sessions (resolver only filters disk-discovered skills) and the
physical-install + additionalSkillPaths-forwarding fix, as a searchable
docs/solutions/ learning. Surface docs/solutions/ in AGENTS.md so agents
discover it.
Document and enforce pnpm build-script review decisions to prevent ignored-script install warnings.
- add reviewed ignoredBuiltDependencies entries to the root pnpm config and mirror the effective policy in pnpm-workspace.yaml
- add a regression test that verifies reviewed dependencies are categorized exactly once and stay aligned across both config files
- document the pnpm build-script approval policy in contributing docs and link plugin authoring guidance from AGENTS.md and PLUGIN_AUTHORING.md
Files changed:
AGENTS.md | 5 ++
docs/PLUGIN_AUTHORING.md | 3 +-
docs/contributing.md | 14 ++++
package.json | 9 +++
pnpm-workspace.yaml | 14 ++++
scripts/__tests__/pnpm-build-scripts-config.test.mjs | 74 ++++++++++++++++++++++
6 files changed, 118 insertions(+), 1 deletion(-)
Fusion-Task-Id: FN-5927
Fusion-Task-Lineage: 192bbed9-c5ed-45cb-b4bd-fb18514e2783
Add settingsSchema (default session provider/model, enabled stages, sync
reconcile-on-hooks toggle, reconcile cadence hint) aligned across manifest.json
and the runtime manifest, with typed getters. Wire the consumed getters:
orchestrator passes defaultProvider/defaultModelId into sessions and rejects
disabled stages; hooks gate their reconcile drain on reconcileOnHooks. Add the
plugin README and docs/plugins/compound-engineering.md documenting the hub,
interactive sessions, work bridge, and the sync ownership model.
reconcileIntervalMinutes is exposed as an operator cadence hint but not yet
consumed (no host scheduler; reconcile is on-demand by design).
Add unread mailbox status to the desktop header toggle while keeping pending approvals prioritized.
- show an unread status dot on the desktop header mailbox toggle when unread mail exists without pending approvals
- keep pending-approval indicators taking precedence and hide mailbox indicators while the mailbox view is active
- extend Header coverage for unread-only, pending-only, combined, zero-count, and active-mailbox states
- update restart integration coverage to reuse an existing worktree during orphaned resume concurrency
Files changed:
docs/dashboard-guide.md | 2 +-
packages/dashboard/app/components/Header.tsx | 9 +++++--
.../app/components/__tests__/Header.test.tsx | 26 ++++++++++++++++---
.../src/__tests__/restart.integration.test.ts | 29 ++++++++++++++++++++--
4 files changed, 58 insertions(+), 8 deletions(-)
Fusion-Task-Id: FN-5915
Fusion-Task-Lineage: 3a207e2c-ca58-402f-94cf-3a9e514fe263
Keep MissionManager mission interview state and detail rendering in sync while stabilizing the failing test coverage.
- reload assertion-linked feature data when mission details or milestone panels load
- keep selected mission detail state synchronized after mission update events instead of forcing a full mission reload
- hide the sidebar edit form while the selected mission is already being edited in the detail pane
- add a non-destructive Send to background action for resume-launched mission interview modals
- tighten MissionManager tests to target the detail pane and slice-scoped controls that now render alongside sidebar content
Files changed:
docs/missions.md | 2 +-
.../app/components/MissionInterviewModal.tsx | 30 ++++++++
.../dashboard/app/components/MissionManager.tsx | 77 +++++++++++--------
.../components/__tests__/MissionManager.test.tsx | 88 +++++++++++++++-------
4 files changed, 137 insertions(+), 60 deletions(-)
Fusion-Task-Id: FN-5895
Fusion-Task-Lineage: d018a945-33a7-4471-9636-35bc36dc88a9
Document that workflow IR v1 keeps agent-call and typed-edge semantics as conventions rather than a 1.1 schema bump.
- replace the deferred-v1.1 note with the FN-5769 evaluation outcome
- record that prompt config and edge.condition remain the canonical v1 representation for parity rollout
Files changed:
docs/workflow-steps.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
Fusion-Task-Id: FN-5769
Fusion-Task-Lineage: 341ce4fe-d87d-4c25-a1fc-652ccfbc2e94
Keep mission interview drafts recoverable when closing and refreshing Missions.
- make MissionInterviewModal use a single non-destructive close path for header, Escape, and backdrop actions
- refresh mission interview draft/session rows on mission and ai-session SSE updates and reconnects
- open Plan New Mission as a fresh interview instead of always resuming the last session, with regression coverage and docs updates
Files changed:
docs/missions.md | 2 +-
.../app/components/MissionInterviewModal.tsx | 89 +++-----
.../dashboard/app/components/MissionManager.tsx | 156 ++++++++++----
.../__tests__/MissionInterviewModal.test.tsx | 100 ++++++++-
.../components/__tests__/MissionManager.test.tsx | 224 +++++++++++++++++++++
5 files changed, 455 insertions(+), 116 deletions(-)
Fusion-Task-Id: FN-5882
Fusion-Task-Lineage: 75de9e94-edef-4564-a266-91782e60c2ac
Keep quick chat warm and restore the last opened conversation per project.
- persist the active quick chat session id in per-project local storage and restore it before falling back to latest activity
- retain in-memory quick chat state across close/reopen while resetting chat state correctly when the project changes
- add storage, hook, and FAB coverage for restored sessions, warm reopen behavior, and project switching; document the updated quick chat behavior
Files changed:
docs/dashboard-guide.md | 3 +-
packages/dashboard/app/components/QuickChatFAB.tsx | 29 ++++--
.../app/components/__tests__/QuickChatFAB.test.tsx | 112 +++++++++++++++++++--
.../__tests__/quickChatLastSessionStorage.test.ts | 55 ++++++++++
.../app/hooks/__tests__/useQuickChat.test.ts | 70 +++++++++++++
.../app/hooks/quickChatLastSessionStorage.ts | 41 ++++++++
packages/dashboard/app/hooks/useQuickChat.ts | 25 +++++
7 files changed, 319 insertions(+), 16 deletions(-)
Fusion-Task-Id: FN-5884
Fusion-Task-Lineage: 4d689611-1824-41db-8fc2-d543407316ff
Restore expected terminal clipboard shortcuts.
- intercept Ctrl/Cmd+C in the dashboard terminal to copy the current selection while preserving plain SIGINT when nothing is selected
- intercept Ctrl/Cmd+V to read clipboard text and send it into the active PTY session
- add terminal shortcut regression coverage and document the new integrated terminal behavior
- add a patch changeset for @runfusion/fusion
Files changed:
.changeset/friendly-ravens-hammer.md | 5 +
docs/dashboard-guide.md | 2 +
packages/dashboard/app/components/TerminalModal.tsx | 48 +++++++++
packages/dashboard/app/components/__tests__/TerminalModal.test.tsx | 113 +++++++++++++++++++++
4 files changed, 168 insertions(+)
Fusion-Task-Id: FN-5885
Fusion-Task-Lineage: f8b3658c-2b52-4094-8cef-79c762f4d78d
Add a one-click Remotes sync flow that rebases on pull before pushing.
- add a Sync button in Git Manager Remotes that runs pull --rebase and then push
- stop before pushing when the rebase pull reports a conflict or fails, and surface toasts/status updates
- cover successful, conflicting, failing, and loading sync behavior in GitManagerModal tests
- document the new Sync action in the dashboard guide
Files changed:
docs/dashboard-guide.md | 1 +
.../dashboard/app/components/GitManagerModal.tsx | 39 ++++++++
.../components/__tests__/GitManagerModal.test.tsx | 100 +++++++++++++++++++++
3 files changed, 140 insertions(+)
Fusion-Task-Id: FN-5877
Fusion-Task-Lineage: 2e28c00d-b965-4f44-a6fa-26536d91d16d