2bdc4448ef2c46f3eeb92952e39e6507fbb80972
2857 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
7c329d8bf2 |
fix(FN-094): remove stray brace that broke the core build
FN-094 closed resolveInitialRepositoryScope twice, so tsc failed with TS1128 and `pnpm release` aborted at pnpm build:full. |
||
|
|
c21f628174 |
FN-101: separate update installation and restart automation
Separate automatic update installation from restart recovery so dashboard reloads only after the replacement host is healthy. - Add scoped update automation settings and localized descriptions. - Coordinate update installation, restart recovery, timeout handling, and manual refresh guidance. - Update settings UI, banner behavior, API routes, documentation, screenshots, and regression coverage. Files changed: .changeset/fn-101-update-restart-lifecycle.md | 7 ++ docs/assets/fn-101-update-automation-desktop.png | Bin 0 -> 17744 bytes docs/assets/fn-101-update-automation-mobile.png | Bin 0 -> 11367 bytes docs/dashboard-guide.md | 6 +- docs/settings-reference.md | 12 ++- packages/core/src/config/settings-schema.ts | 9 ++ packages/core/src/config/update-automation.ts | 17 +++ packages/core/src/index.gate.ts | 1 + packages/core/src/index.ts | 1 + packages/core/src/types/settings/settings-scope.ts | 8 ++ packages/dashboard/app/api/settings/settings.ts | 4 + .../dashboard/app/components/SettingsModal.tsx | 38 +++++-- .../app/components/UpdateAvailableBanner.tsx | 33 +++++- .../__tests__/SettingsModal.general.test.tsx | 39 +++++++ .../__tests__/UpdateAvailableBanner.test.tsx | 59 ++++++++++- .../app/components/settings/save-split.ts | 5 +- .../sections/GlobalGeneralSection.search.ts | 22 ++-- .../settings/sections/GlobalGeneralSection.tsx | 29 +++-- .../settings-default-descriptions.test.tsx | 2 + .../__tests__/useSystemRestartRecovery.test.ts | 118 +++++++++++++++++++++ .../app/hooks/useSystemRestartRecovery.ts | 118 +++++++++++++++++++++ packages/dashboard/src/auto-update.ts | 22 +++- .../src/routes/register-update-check-routes.ts | 24 +++- .../dashboard/src/update-install-coordinator.ts | 37 +++++++ packages/i18n/locales/en/app.json | 4 + packages/i18n/locales/es/app.json | 4 + packages/i18n/locales/fr/app.json | 4 + packages/i18n/locales/ko/app.json | 4 + packages/i18n/locales/pt-BR/app.json | 8 ++ packages/i18n/locales/zh-CN/app.json | 4 + packages/i18n/locales/zh-TW/app.json | 4 + packages/i18n/src/resources.d.ts | 4 + 32 files changed, 602 insertions(+), 45 deletions(-) Fusion-Task-Id: FN-101 Fusion-Task-Lineage: 2d00e84e-a01d-4d19-bb02-aa87a818165b Co-authored-by: Fusion <noreply@runfusion.ai> |
||
|
|
bbca7a1ffc |
FN-094: add mono- and multi-repository lifecycle parity
Extend workspace lifecycle behavior so mono-repository and multi-repository tasks share the same durable scope, workflow, review, and merge semantics. - Add repository-scope persistence, migrations, serialization, and task mutation support. - Align dashboard task creation, detail, and workspace worktree views with repository-aware lifecycle state. - Extend executor, reviewer, merger, triage, and self-healing paths with parity coverage and tests. - Document the lifecycle contract and publish the operator-facing changeset. Files changed: .changeset/fn-094-multi-repository-lifecycle.md | 7 + docs/agents.md | 8 + docs/architecture.md | 6 + docs/dashboard-guide.md | 4 + docs/multi-project.md | 6 + docs/settings-reference.md | 2 +- docs/testing.md | 12 ++ docs/workspaces.md | 6 + ...workspace-worktrees-concurrent-merge.pg.test.ts | 19 +++ packages/core/src/index.ts | 2 +- .../core/src/postgres/migrations/0000_initial.sql | 1 + .../0064_fn_094_task_repository_scope.sql | 2 + packages/core/src/postgres/schema-applier.ts | 13 +- packages/core/src/postgres/schema/project.ts | 2 + packages/core/src/store.ts | 21 ++- .../core/src/task-store/branch-and-pr-entities.ts | 2 +- packages/core/src/task-store/persistence.ts | 4 +- packages/core/src/task-store/serialization.ts | 2 + packages/core/src/task-store/task-creation.ts | 31 ++++ packages/core/src/task-store/task-mutation-ops.ts | 131 +++++++++++++++- packages/core/src/task-store/task-row-mappers.ts | 2 +- packages/core/src/task-store/task-update.ts | 55 +++++-- packages/core/src/tasks/repository-scope.ts | 29 ++++ packages/core/src/types.ts | 4 + packages/core/src/types/task/task-core.ts | 35 ++++- packages/core/src/types/workflow/workflow-steps.ts | 21 +++ packages/dashboard/app/api/tasks/tasks.ts | 14 ++ packages/dashboard/app/components/NewTaskModal.tsx | 16 +- .../dashboard/app/components/TaskDetailModal.css | 27 ++++ .../dashboard/app/components/TaskDetailModal.tsx | 15 +- .../app/components/WorkspaceWorktreesSummary.tsx | 68 ++++++++- .../app/components/__tests__/NewTaskModal.test.tsx | 1 + .../__tests__/WorkspaceWorktreesSummary.test.tsx | 27 +++- .../src/routes/register-task-workflow-routes.ts | 48 ++++++ .../__tests__/executor-workspace-taskdone.test.ts | 20 +++ .../src/__tests__/reviewer-workspace.test.ts | 170 ++++++++++++++++++++- .../src/__tests__/self-healing-workspace.test.ts | 4 + .../workflow-graph-optional-group.test.ts | 32 ++++ .../workflow-graph-optional-step-fix.test.ts | 58 +++++++ .../engine/src/__tests__/workspace-e2e.test.ts | 91 ++++++++++- .../__tests__/workspace-lifecycle-parity.test.ts | 61 ++++++++ .../src/__tests__/workspace-merger-lease.test.ts | 25 +++ .../__tests__/workspace-merger-scope-gates.test.ts | 58 +++++++ .../engine/src/__tests__/workspace-merger.test.ts | 59 ++++++- packages/engine/src/agent-tools.ts | 92 ++++++++++- packages/engine/src/execution/reviewer.ts | 10 +- .../create-authoritative-workflow-seams.ts | 95 ++++++++++-- .../engine/src/executor/execute-workflow-graph.ts | 37 ++++- .../request-pre-merge-optional-step-fix.ts | 70 +++++++++ .../engine/src/executor/run-graph-custom-node.ts | 124 ++++++++++----- .../engine/src/executor/workflow-step-verdict.ts | 6 +- .../src/executor/workspace-review-per-repo.ts | 118 +++++++++++++- .../src/executor/worktree-task-done-scope-leak.ts | 109 ++++++++++++- packages/engine/src/merge/merger-ai.ts | 88 ++++++++++- packages/engine/src/self-healing.ts | 19 ++- packages/engine/src/triage.ts | 9 ++ .../src/workflows/workflow-graph-executor.ts | 73 +++++++-- .../engine/src/workflows/workflow-node-handlers.ts | 12 +- 58 files changed, 1962 insertions(+), 121 deletions(-) Fusion-Task-Id: FN-094 Fusion-Task-Lineage: 483f958f-cc67-474e-9383-26856c329543 Co-authored-by: Fusion <noreply@runfusion.ai> |
||
|
|
f714e45bda |
FN-090: reconcile AI merge review state
Reconcile AI merge-review outcomes with durable task state and operator-visible workflow controls. - Persist merge-review findings and reconciliation metadata through the core task store and schema migration. - Update merger prompts, execution, recovery handling, and workflow routes for approved review outcomes. - Add dashboard task-detail presentation and release documentation for the reconciliation flow. Files changed: .../fn-090-ai-merge-review-reconciliation.md | 7 + docs/architecture.md | 6 + .../src/__tests__/postgres/schema-applier.test.ts | 2 +- .../0063_fn_090_ai_merge_review_reconciliation.sql | 2 + packages/core/src/postgres/schema-applier.ts | 19 +- packages/core/src/postgres/schema/project.ts | 1 + packages/core/src/store.ts | 24 +- packages/core/src/task-store/persistence.ts | 2 + packages/core/src/task-store/reset-lifecycle.ts | 1 + packages/core/src/task-store/serialization.ts | 1 + packages/core/src/task-store/task-mutation-ops.ts | 2 +- packages/core/src/task-store/task-row-mappers.ts | 2 +- packages/core/src/task-store/task-update.ts | 5 + packages/core/src/types/task/task-core.ts | 27 ++ .../dashboard/app/api/tasks/tasks-lifecycle.ts | 9 + .../dashboard/app/components/TaskDetailModal.css | 19 ++ .../dashboard/app/components/TaskDetailModal.tsx | 29 ++ .../src/routes/register-task-workflow-routes.ts | 17 ++ .../src/__tests__/merge-error-recovery.test.ts | 5 +- packages/engine/src/__tests__/merger-ai.test.ts | 234 +++++---------- packages/engine/src/merge/merger-ai-prompts.ts | 31 +- packages/engine/src/merge/merger-ai.ts | 319 ++++++++++----------- packages/engine/src/project-engine.ts | 4 +- 23 files changed, 416 insertions(+), 352 deletions(-) Fusion-Task-Id: FN-090 Fusion-Task-Lineage: 13450a9f-f17f-46b4-ab39-4887520c2a82 Co-authored-by: Fusion <noreply@runfusion.ai> |
||
|
|
525ecc9f25 |
FN-083: position auto-summarize task titles toggle
Align the auto-summarize task titles setting with task-language controls and preserve language-aware title generation behavior. - Place the project toggle directly after the AI-authored task language selector. - Verify toggle placement, state updates, and resolved title-output language instructions. - Update settings documentation for language snapshotting and bounded fallback behavior. Files changed: docs/settings-reference.md | 4 +-- packages/core/src/__tests__/ai-summarize.test.ts | 18 +++++++++++ .../app/__tests__/settings-sections.test.tsx | 23 ++++++++++++-- .../settings/sections/ProjectModelsSection.tsx | 37 ++++++++++------------ 4 files changed, 58 insertions(+), 24 deletions(-) Fusion-Task-Id: FN-083 Fusion-Task-Lineage: 4a018f7e-3e8d-4478-8d9d-266fd04ada4c Co-authored-by: Fusion <noreply@runfusion.ai> |
||
|
|
eb3eeb887a |
FN-074: remove task splitting and parent deletion
Remove complex-task splitting and parent-deletion behavior across core, dashboard, and engine. - Remove subtask splitting, breakdown UI, and related API routes and lifecycle handling. - Add the migration and prompt/documentation updates that enforce the simplified task model. - Update affected tests and integrations for the removed behavior. Files changed: .changeset/fn-074-removal.md | 7 + docs/dashboard-guide.md | 17 +- docs/gitlab-parity-inventory.md | 7 +- docs/mcp.md | 6 +- docs/settings-reference.md | 16 +- docs/task-management.md | 31 +- docs/workflow-steps.md | 10 +- .../cli/skill/fusion/references/task-structure.md | 2 +- .../cli/skill/fusion/workflows/specifications.md | 4 +- packages/core/src/__tests__/agent-prompts.test.ts | 19 +- .../builtin-workflow-settings-triage.test.ts | 32 +- .../src/__tests__/postgres/schema-applier.test.ts | 2 +- .../core/src/__tests__/prompt-overrides.test.ts | 3 +- ...-deleted-observed-dispatch-side-effects.test.ts | 3 - .../task-deleted-outbox-consumer-backoff.test.ts | 1 - packages/core/src/agents/agent-prompts.ts | 56 +- packages/core/src/index.ts | 2 +- .../0062_remove_task_subtask_splitting.sql | 2 + packages/core/src/postgres/schema-applier.ts | 14 +- packages/core/src/postgres/schema/project.ts | 1 - packages/core/src/store.ts | 12 +- packages/core/src/task-delete-attribution.ts | 20 +- packages/core/src/task-delete-notice.ts | 7 +- .../__tests__/lifecycle-outbox-writer.test.ts | 4 +- .../core/src/task-store/archive-lifecycle-2.ts | 13 +- packages/core/src/task-store/archive-lifecycle.ts | 6 +- packages/core/src/task-store/lifecycle-outbox.ts | 2 - packages/core/src/task-store/persistence.ts | 2 - packages/core/src/task-store/serialization.ts | 2 - packages/core/src/task-store/task-creation.ts | 2 - .../src/task-store/task-deleted-outbox-consumer.ts | 4 - packages/core/src/task-store/task-mutation-ops.ts | 2 +- packages/core/src/task-store/task-row-mappers.ts | 2 +- packages/core/src/tasks/prompt-overrides.ts | 35 - packages/core/src/types.ts | 12 - packages/core/src/types/mesh/archive-planning.ts | 1 - packages/core/src/types/task/task-core.ts | 3 - .../src/workflows/builtin-workflow-settings.ts | 86 -- packages/dashboard/app/App.tsx | 15 - .../mission-planning-modals-mobile.test.ts | 15 - packages/dashboard/app/api/legacy.ts | 18 +- packages/dashboard/app/api/planning/ai-text.ts | 171 +--- packages/dashboard/app/api/planning/planning.ts | 46 - packages/dashboard/app/api/tasks/tasks.ts | 4 +- packages/dashboard/app/components/AppModals.tsx | 39 +- packages/dashboard/app/components/Board.tsx | 10 +- packages/dashboard/app/components/Column.tsx | 9 +- .../dashboard/app/components/InlineCreateCard.tsx | 63 +- packages/dashboard/app/components/Lane.tsx | 3 +- packages/dashboard/app/components/ListView.tsx | 10 +- packages/dashboard/app/components/NewTaskModal.tsx | 8 +- .../dashboard/app/components/PlanningModeModal.css | 128 --- .../dashboard/app/components/PlanningModeModal.tsx | 566 +---------- .../dashboard/app/components/QuickEntryBox.tsx | 43 +- .../dashboard/app/components/SettingsModal.tsx | 2 - .../app/components/SubtaskBreakdownModal.tsx | 932 ----------------- packages/dashboard/app/components/TaskCard.tsx | 1 - packages/dashboard/app/components/TaskForm.tsx | 23 +- .../__tests__/AgentPromptsManager.test.tsx | 1 - .../app/components/__tests__/AppModals.test.tsx | 92 +- .../app/components/__tests__/Board.test.tsx | 69 +- .../components/__tests__/InlineCreateCard.test.tsx | 170 ---- .../app/components/__tests__/ListView.test.tsx | 38 - .../app/components/__tests__/NewTaskModal.test.tsx | 48 - .../components/__tests__/QuickEntryBox.test.tsx | 293 +----- .../__tests__/SubtaskBreakdownModal.test.tsx | 933 ----------------- ...skDetail.mobile-transition.board-panel.test.tsx | 1 - .../__tests__/TaskDetail.swipe-back.test.tsx | 1 - .../app/components/__tests__/TaskForm.test.tsx | 67 -- .../__tests__/WorkflowSettingsPanel.test.tsx | 51 - .../app/components/__tests__/board-mobile.test.tsx | 20 - .../composer-settings-read-isolation.test.tsx | 30 - .../components/__tests__/migratedModalFixtures.tsx | 2 - .../app/components/dashboard/MainContent.tsx | 5 - .../dashboard/__tests__/DashboardBanners.test.tsx | 1 - .../__tests__/MainContent.graph-popout.test.tsx | 1 - .../dashboard/app/components/dashboard/types.ts | 2 - .../app/components/workflow-setting-display.ts | 10 - ...ckgroundSessions.resume-instrumentation.test.ts | 1 - .../hooks/__tests__/useBackgroundSessions.test.ts | 25 +- .../app/hooks/__tests__/useModalManager.test.ts | 3 - packages/dashboard/app/hooks/modalPersistence.ts | 14 - .../dashboard/app/hooks/useBackgroundSessions.ts | 9 +- packages/dashboard/app/hooks/useModalManager.ts | 58 +- packages/dashboard/app/hooks/useProjectActions.ts | 2 +- packages/dashboard/app/hooks/useTaskHandlers.ts | 9 - packages/dashboard/app/utils/builtinPrompts.ts | 7 - packages/dashboard/app/utils/projectStorage.ts | 1 - .../src/__tests__/ai-session-diagnostics.test.ts | 5 +- .../src/__tests__/github-tracking-state.test.ts | 97 -- .../src/__tests__/gitlab-delete-close.test.ts | 6 +- .../gitlab-parity-inventory-documentation.test.ts | 1 - .../src/__tests__/gitlab-split-close.test.ts | 125 --- .../planning-flow-diagnostics-guardrail.test.ts | 1 - .../src/__tests__/process-lifecycle.test.ts | 1 - .../dashboard/src/__tests__/routes-auth.test.ts | 2 - .../src/__tests__/routes-automation.test.ts | 2 - .../dashboard/src/__tests__/routes-git.test.ts | 2 - .../dashboard/src/__tests__/routes-github.test.ts | 92 -- .../src/__tests__/routes-planning-tracking.test.ts | 130 --- .../src/__tests__/routes-planning.test.ts | 1062 +------------------- .../dashboard/src/__tests__/routes-system.test.ts | 2 - .../dashboard/src/__tests__/routes-tasks.test.ts | 902 ----------------- .../shared-branch-group-entry-points.test.ts | 93 -- packages/dashboard/src/ai-session-diagnostics.ts | 3 +- packages/dashboard/src/ai-session-store.ts | 6 +- packages/dashboard/src/ai-session-timeout.ts | 3 +- packages/dashboard/src/github-tracking-state.ts | 43 +- packages/dashboard/src/gitlab-delete-close.ts | 7 +- packages/dashboard/src/gitlab-lifecycle.ts | 4 +- packages/dashboard/src/gitlab-split-close.ts | 103 -- packages/dashboard/src/gitlab-tracking-state.ts | 2 +- packages/dashboard/src/index.ts | 1 - packages/dashboard/src/planning.ts | 171 ---- packages/dashboard/src/routes.ts | 6 - ...er-planning-subtask-routes.parent-close.test.ts | 120 --- .../dashboard/src/routes/register-git-github.ts | 6 - .../src/routes/register-planning-subtask-routes.ts | 773 +------------- .../src/routes/register-task-workflow-routes.ts | 6 +- packages/dashboard/src/server.ts | 8 - packages/dashboard/src/subtask-breakdown.ts | 833 --------------- packages/dashboard/src/triage-trait.ts | 93 +- .../src/__tests__/agent-task-read-tools.test.ts | 1 - .../triage-duplicate-search-regression.test.ts | 3 - .../triage-split-into-subtasks-delete.test.ts | 222 ---- packages/engine/src/__tests__/triage.test.ts | 519 +--------- packages/engine/src/triage.ts | 239 +---- 127 files changed, 214 insertions(+), 10001 deletions(-) Fusion-Task-Id: FN-074 Fusion-Task-Lineage: 23207799-4ec4-4ec7-bcd7-83cba4d98f53 Co-authored-by: Fusion <noreply@runfusion.ai> |
||
|
|
be34be7430 |
FN-073: prevent durable blocks from missing dependencies
Reconcile missing dependency references so task completion and self-healing do not leave durable lifecycle blocks. - Validate and repair dependency references during task creation and lifecycle operations. - Reconcile missing dependencies during self-healing and preserve honest blocked completion behavior. - Add PostgreSQL and executor regression coverage and document the recovery behavior. Files changed: docs/task-management.md | 5 +- packages/core/src/__tests__/postgres/task-dependency-mutation.pg.test.ts | 124 ++++++++++++++++++++ packages/core/src/task-store/archive-lifecycle-2.ts | 71 +++++++++++- packages/core/src/task-store/async/async-lifecycle.ts | 19 ++++ packages/core/src/task-store/project-store-ops.ts | 46 +++++++- packages/core/src/task-store/task-creation.ts | 43 ++++++- packages/engine/src/__tests__/executor-task-done-blocked.test.ts | 65 ++++++++++- packages/engine/src/__tests__/missing-dependency-reconcile.test.ts | 63 +++++++++++ packages/engine/src/executor/create-task-done-tool.ts | 25 ++++- packages/engine/src/self-healing.ts | 58 ++++++++++ 10 files changed, 502 insertions(+), 17 deletions(-) Fusion-Task-Id: FN-073 Fusion-Task-Lineage: 863a07f9-a9d4-4195-b09a-a318689c6382 Co-authored-by: Fusion <noreply@runfusion.ai> |
||
|
|
dfa25335d0 |
FN-066: add task-ID search to Activity Log
Add task-ID filtering across the Activity Log data, API, and dashboard UI.\n\n- Index and expose task IDs in central activity audit queries.\n- Add API, hook, modal, styling, localization, and regression-test coverage for search.\n- Include the published-package changeset and PostgreSQL migration.\n\nFiles changed:\n .changeset/fn-066-activity-log-task-search.md | 7 +++\n .../postgres/activity-log-parity.pg.test.ts | 20 ++++++-\n .../postgres/central-core-backend.test.ts | 16 +++++\n .../src/__tests__/postgres/schema-applier.test.ts | 4 +-\n .../core/src/async-stores/async-central-core.ts | 16 ++++-\n packages/core/src/central/central-core.ts | 5 +\n .../core/src/postgres/migrations/0000_initial.sql | 2 +\n .../0061_fn_066_activity_log_task_id_index.sql | 7 +++\n packages/core/src/postgres/schema-applier.ts | 13 ++++\n packages/core/src/postgres/schema/central.ts | 1 +\n packages/core/src/store.ts | 2 +\n packages/core/src/task-store/async/async-audit.ts | 19 +++--\n packages/dashboard/README.md | 1 +\n .../app/__tests__/activity-log-layout.test.ts | 5 ++\n .../dashboard/app/__tests__/api-projects.test.ts | 4 +\n packages/dashboard/app/api/projects/projects.ts | 4 +\n packages/dashboard/app/api/system/scheduling.ts | 3 +\n .../dashboard/app/components/ActivityLogModal.css | 14 +++++\n .../dashboard/app/components/ActivityLogModal.tsx | 68 +++++++++++-------\n packages/dashboard/app/components/ScriptsModal.css | 21 +++++++\n .../components/__tests__/ActivityLogModal.test.tsx | 58 ++++++++++++++++++\n .../app/hooks/__tests__/useActivityLog.test.ts | 35 +++++++++++\n packages/dashboard/app/hooks/useActivityLog.ts | 14 +++--\n .../src/__tests__/activity-log-route.test.ts | 35 +++++++++++\n .../src/routes/register-setup-activity-routes.ts | 28 +++++---\n packages/i18n/locales/en/app.json | 5 +\n packages/i18n/locales/es/app.json | 5 +\n packages/i18n/locales/fr/app.json | 5 +\n packages/i18n/locales/ko/app.json | 5 +\n packages/i18n/locales/pt-BR/app.json | 5 +\n packages/i18n/locales/zh-CN/app.json | 5 +\n packages/i18n/locales/zh-TW/app.json | 5 +\n packages/i18n/src/resources.d.ts | 3 +\n 33 files changed, 384 insertions(+), 56 deletions(-) Fusion-Task-Id: FN-066 Fusion-Task-Lineage: 055e2383-9701-4b7e-9f7d-92c2fe175049 Co-authored-by: Fusion <noreply@runfusion.ai> |
||
|
|
5c008bab97 |
FN-9181: bound recall-capture audit emission
Route detached recall-capture telemetry through the bounded core audit seam. - Preserve the injectable audit adapter while bounding production recorded and failed events. - Add hostile-sink, metadata-contract, and source-routing regression coverage. - Document the class-A decision and add a patch changeset. Files changed: .changeset/fn-9181-recall-capture-bounded-audit.md | 7 +++ AGENTS.md | 1 + docs/run-audit.md | 4 +- .../core-run-audit-emitter-isolation.test.ts | 3 +- .../__tests__/core-run-audit-sink-health.test.ts | 62 ++++++++++++++++++- .../src/__tests__/memory/recall-capture.test.ts | 71 +++++++++++++++++++++- packages/core/src/memory/recall-capture.ts | 43 +++++++------ 7 files changed, 166 insertions(+), 25 deletions(-) Fusion-Task-Id: FN-9181 Fusion-Task-Lineage: 4700caca-7182-4aa7-9355-b0bfdef0e4e1 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
fdebfba8a1 |
FN-9180: Route deleted-task outbox audits through the bounded seam
Keep deleted-task outbox processing resilient to hostile audit sinks while preserving durable ordering. - Route catch-up, reconciliation fallback, lease-fenced, and retention-pruned events through the core bounded audit emitter. - Add production-path sink-health coverage and update emitter routing ratchets. - Document the class-A decision and add a patch changeset. Files changed: .changeset/fn-9180-outbox-run-audit.md | 7 + AGENTS.md | 1 + docs/run-audit.md | 2 +- .../core-run-audit-emitter-isolation.test.ts | 13 +- .../excluded-awaited-run-audit-layer-sites.test.ts | 203 +-------------------- .../task-deleted-outbox-audit-sink-health.test.ts | 117 ++++++++++++ ...k-lifecycle-retention-audit-sink-health.test.ts | 64 +++++++ .../src/task-store/task-deleted-outbox-consumer.ts | 13 +- .../task-store/task-lifecycle-event-retention.ts | 8 +- 9 files changed, 215 insertions(+), 213 deletions(-) Fusion-Task-Id: FN-9180 Fusion-Task-Lineage: 33e126fd-23d6-4f3b-a377-1c4bfd7b2941 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
c8f6afe124 |
FN-9182: Bound reconciliation audit emissions
Keep reconciliation responsive while preserving audit-dependent outcomes. - add a bounded core audit emitter that reports recorded, absent, failed, and timed-out outcomes - route workflow-switch and phantom-reservation reconciliation through the outcome-aware seam - cover hostile sink behavior, caller-visible failures, routing invariants, and operator documentation Files changed: .changeset/fn-9182-bounded-run-audit-outcome.md | 7 ++ AGENTS.md | 1 + docs/run-audit.md | 4 +- .../core-run-audit-emitter-isolation.test.ts | 10 +-- .../__tests__/core-run-audit-sink-health.test.ts | 51 ++++++++++++++- .../src/__tests__/emit-bounded-run-audit.test.ts | 58 ++++++++++++++++- .../phantom-reservation-audit-outcome.test.ts | 76 ++++++++++++++++++++++ .../core/src/run-audit/emit-bounded-run-audit.ts | 41 +++++++++--- .../task-store/async/async-phantom-reservations.ts | 31 +++++---- .../core/src/task-store/workflow-definitions.ts | 48 ++++++++------ 10 files changed, 277 insertions(+), 50 deletions(-) Fusion-Task-Id: FN-9182 Fusion-Task-Lineage: c98e8e5e-2dae-47a0-b969-4156f4beccb3 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
649b901bbd |
FN-9178: Classify awaited core run-audit emitters
Document and ratchet which core run-audit writers may remain lifecycle-coupled. - classify awaited emitters by bounded-isolation safety and preserve transactional boundaries - characterize hostile sink behavior across store- and data-layer call sites - fail closed when new awaited audit writers lack an explicit classification Files changed: AGENTS.md | 1 + docs/run-audit.md | 6 + .../core-run-audit-emitter-isolation.test.ts | 71 ++++- .../excluded-awaited-run-audit-layer-sites.test.ts | 332 +++++++++++++++++++++ .../excluded-awaited-run-audit-store-sites.test.ts | 236 +++++++++++++++ 5 files changed, 645 insertions(+), 1 deletion(-) Fusion-Task-Id: FN-9178 Fusion-Task-Lineage: 25fed6a5-4f2f-4d4b-8724-838eff4323c8 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
f5192a5d15 |
FN-9177: route core run-audit emitters through bounded seam
Make best-effort core telemetry unable to block or alter lifecycle operations. - Add a bounded core run-audit helper that absorbs missing, throwing, rejecting, hanging, and late-settling sinks. - Route planner and task-store best-effort emitters through the helper while preserving transactional audit writes. - Add sink-health, source-routing, and helper regressions plus operator-facing policy documentation and a release changeset. Files changed: .changeset/fn-9177-core-run-audit.md | 7 + AGENTS.md | 5 +- docs/run-audit.md | 6 +- .../core-run-audit-emitter-isolation.test.ts | 21 ++ .../__tests__/core-run-audit-sink-health.test.ts | 317 +++++++++++++++++++++ .../src/__tests__/emit-bounded-run-audit.test.ts | 35 +++ packages/core/src/planner/planner-intervention.ts | 9 +- .../core/src/planner/planner-overseer-events.ts | 15 +- .../core/src/run-audit/emit-bounded-run-audit.ts | 51 ++++ packages/core/src/task-store/audit-ops.ts | 6 +- packages/core/src/task-store/branch-group-ops.ts | 6 +- packages/core/src/task-store/lifecycle-ops.ts | 4 +- packages/core/src/task-store/merge-queue-ops-2.ts | 4 +- packages/core/src/task-store/task-artifacts-ops.ts | 4 +- packages/core/src/task-store/task-id-integrity.ts | 52 ++-- packages/core/src/task-store/task-mutation-ops.ts | 13 +- packages/core/src/task-store/workflow-integrity.ts | 4 +- .../src/task-store/workflow-workitems-ops-2.ts | 4 +- .../core/src/task-store/workflow-workitems-ops.ts | 4 +- 19 files changed, 512 insertions(+), 55 deletions(-) Fusion-Task-Id: FN-9177 Fusion-Task-Lineage: 95082837-1670-4c25-9503-60ad983b9d68 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
a426e28781 |
FN-9165: Add optional JIRA workspace branch derivation
Add opt-in JIRA-backed workspace branch naming while preserving editable manual branch workflows. - add scoped JIRA configuration, secret resolution, and documented inheritance - expose a bounded JIRA issue client and branch-derivation API route - add settings and task-form controls with recoverable errors and coverage - derive sanitized branch names from configurable issue-key and summary templates Files changed: .changeset/fn-9165-jira-branch-name.md | 7 ++ docs/secrets.md | 4 + docs/settings-reference.md | 18 ++++ docs/workspaces.md | 4 + packages/core/src/__tests__/jira-config.test.ts | 6 ++ .../core/src/__tests__/settings-parity.test.ts | 12 +++ packages/core/src/config/settings-schema.ts | 14 +++ packages/core/src/index.ts | 2 + packages/core/src/jira/index.ts | 1 + packages/core/src/jira/jira-config.ts | 34 +++++++ packages/core/src/types/settings/settings-scope.ts | 16 ++++ .../app/__tests__/settings-save-split.test.ts | 43 +++++++++ .../dashboard/app/components/SettingsModal.tsx | 29 +++++- packages/dashboard/app/components/TaskForm.tsx | 23 ++++- .../app/components/__tests__/TaskForm.test.tsx | 31 +++++++ .../settings/__tests__/section-keys.test.ts | 2 + .../app/components/settings/save-split.ts | 64 ++++++++++++- .../app/components/settings/section-keys.ts | 1 + .../sections/SourceControlGlobalSection.search.ts | 9 ++ .../sections/SourceControlGlobalSection.tsx | 20 ++++- .../sections/SourceControlSection.search.ts | 9 ++ .../settings/sections/SourceControlSection.tsx | 12 +++ .../settings-default-descriptions.test.tsx | 7 ++ .../dashboard/src/__tests__/jira-client.test.ts | 58 ++++++++++++ .../src/__tests__/register-jira-routes.test.ts | 70 +++++++++++++++ packages/dashboard/src/jira-auth.ts | 18 ++++ packages/dashboard/src/jira.ts | 75 ++++++++++++++++ packages/dashboard/src/routes.ts | 2 + packages/dashboard/src/routes/README.md | 100 +++++++++++---------- .../src/routes/create-api-routes-mount-sequence.ts | 2 +- packages/dashboard/src/routes/register-jira.ts | 66 ++++++++++++++ packages/engine/src/index.ts | 2 + .../worktree/__tests__/jira-branch-name.test.ts | 7 ++ packages/engine/src/worktree/jira-branch-name.ts | 6 ++ packages/i18n/locales/en/app.json | 23 +++++ 35 files changed, 739 insertions(+), 58 deletions(-) Fusion-Task-Id: FN-9165 Fusion-Task-Lineage: 88ab5fa3-f66e-421d-8139-5c3e8917348d Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
e40bcebc27 |
FN-9161: support operator workspace branches
Allow workspace tasks to use one operator-selected branch consistently across every sub-repository while preserving ownership during recovery. - validate and persist operator branch provenance at task creation and update boundaries - reuse custom branches across workspace worktrees, PR flows, cleanup, and self-healing without deleting operator-owned refs - expose branch validation in task forms and document the workspace behavior - add coverage and a release changeset for shared custom branch handling Files changed: .changeset/fn-9161-workspace-custom-branch.md | 7 ++ docs/workspaces.md | 6 ++ packages/cli/src/commands/pr.ts | 10 ++- packages/cli/src/commands/task-lifecycle.ts | 10 +-- packages/cli/src/commands/task.ts | 4 +- packages/cli/src/extension.ts | 2 +- .../core/src/__tests__/branch-assignment.test.ts | 37 ++++++++++ .../task-update-awaiting-approval-reason.test.ts | 8 +++ .../core/src/async-stores/async-mission-store.ts | 1 + packages/core/src/branch/branch-assignment.ts | 64 +++++++++++++++++ packages/core/src/index.gate.ts | 7 ++ packages/core/src/index.ts | 7 ++ packages/core/src/missions/mission-store.ts | 1 + packages/core/src/store.ts | 2 +- packages/core/src/task-store/branch-context.ts | 35 +++++++-- packages/core/src/task-store/merge-queue-ops.ts | 31 ++++---- packages/core/src/task-store/task-creation.ts | 30 ++++++++ packages/core/src/task-store/task-mutation-ops.ts | 18 ++++- packages/core/src/task-store/task-update.ts | 60 ++++++++++++++-- packages/core/src/types.ts | 5 ++ packages/core/src/types/task/task-core.ts | 20 +++++- packages/dashboard/app/components/NewTaskModal.tsx | 25 +++++-- packages/dashboard/app/components/TaskForm.tsx | 18 ++++- .../app/components/__tests__/NewTaskModal.test.tsx | 12 ++++ packages/dashboard/src/pr-conflict-resolver.ts | 14 ++-- packages/dashboard/src/routes/branch-selection.ts | 7 ++ .../dashboard/src/routes/register-git-github.ts | 18 +++-- .../src/routes/register-task-workflow-routes.ts | 17 ++++- .../engine/src/__tests__/worktree-hooks.test.ts | 6 ++ .../engine/src/__tests__/worktree-pool.test.ts | 8 +++ .../src/auto-recovery-handlers/branch-worktree.ts | 20 +++--- .../engine/src/execution/step-session-executor.ts | 6 +- .../src/executor/build-foreach-worktree-deps.ts | 5 +- .../engine/src/executor/create-task-done-tool.ts | 8 +-- packages/engine/src/executor/dep-abort-cleanup.ts | 4 +- packages/engine/src/executor/mark-stuck-aborted.ts | 2 +- .../src/executor/release-pre-execution-worktree.ts | 2 +- packages/engine/src/executor/run-implementation.ts | 14 ++-- .../src/executor/task-done-refusal-handler.ts | 4 +- .../executor/worktree-branch-conflict-handle.ts | 10 +-- .../src/executor/worktree-cleanup-conflicting.ts | 39 +++++----- .../src/executor/worktree-create-conflict.ts | 1 + .../engine/src/executor/worktree-stale-branch.ts | 9 +++ .../src/healing/restart-recovery-coordinator.ts | 2 +- packages/engine/src/merger.ts | 33 +++++---- .../src/recovery/foreign-only-contamination.ts | 8 ++- packages/engine/src/self-healing.ts | 82 +++++++++++++++------- .../engine/src/worktree/worktree-acquisition.ts | 52 ++++++++++---- packages/engine/src/worktree/worktree-backend.ts | 42 ++++++++--- packages/engine/src/worktree/worktree-hooks.ts | 24 +++++-- packages/engine/src/worktree/worktree-names.ts | 13 ++++ packages/engine/src/worktree/worktree-pool.ts | 17 ++++- 52 files changed, 708 insertions(+), 179 deletions(-) Fusion-Task-Id: FN-9161 Fusion-Task-Lineage: 5b0b9ecc-bead-471f-96f7-bec6698b69fc Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
3d355465c7 |
feat(missions): done-credit via reverse lineage, feature re-point/unlink tools, and live unlink SSE (#3491)
## What this PR does Closes three lifecycle gaps in the Mission → Milestone → Slice → **Feature** model, where a feature links to exactly one delivery task (single-valued `feature.taskId`, one-feature-one-task): 1. **Reverse-lineage done-credit** — a terminal, non-failed task carrying a feature's reverse `missionLineage` (featureId/sliceId/missionId) now credits the feature as satisfying its acceptance criteria, independent of where the forward `feature.taskId` points (e.g. a newer follow-up task). Credit is only applied when **none** of the feature's lineage candidates is live, so a live follow-up keeps the feature active. Fixes features that otherwise sit "in-progress" forever after their delivering task completes. 2. **Re-point / unlink surface** — new `fn_feature_repoint_task` / `fn_feature_unlink_task` agent tools (engine + CLI) backed by an atomic `repointFeatureToTask` store primitive, so a mis-linked feature can be re-attached to the correct delivery task or unlinked — without a manual DB edit. Single-valued `feature.taskId` and one-feature-one-task invariants are preserved; unlinking an already-unlinked feature errors clearly. Classified as mutation tools, same class as the existing `fn_feature_link_task`. 3. **Live SSE update** — the `feature:unlinked` store event is now emitted over SSE (`event: feature:unlinked`) so the dashboard refreshes immediately after a re-point/unlink instead of waiting for the next poll. ## Why The forward-only `feature.taskId` link made three real failure modes unrecoverable from the product surface: stale done-features after task replacement, permanently mis-linked features, and a stale dashboard after a repair. This closes the feature lifecycle end-to-end. ## Invariants - `feature.taskId` stays single-valued; one feature is linked to at most one task at any time (atomic store primitive). - Done-credit requires: terminal column, non-failed, and no live lineage candidate. - No new run-audit prose; store events carry ids/counts/outcomes only. ## Tests - `mission-state-reconcile.test.ts` — reverse-lineage credit matrix (live vs. terminal vs. failed candidates) - `mission-store.pg.test.ts` — `repointFeatureToTask` atomicity + invariants (PG; gate-safe auto-skip without Postgres) - `agent-mission-tools.test.ts` — tool delegation (unlink / re-point exactly once) - `heartbeat-executor.test.ts`, `extension.test.ts` — tool exposure and heartbeat interaction - Changeset: `@runfusion/fusion: minor` <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Added tools to reassign a feature to another live task or remove its task link. - Unlinking resets the feature to a defined state and provides clear errors when applicable. - Added live updates for feature unlink events. - Improved reconciliation to recognize completed reverse-lineage work while respecting active follow-up tasks and failures. - Improved relationship consistency when concurrent task-link operations occur. - **Documentation** - Documented feature linking, unlinking, reassignment, lifecycle events, and reconciliation behavior. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: Fusion <noreply@runfusion.ai> |
||
|
|
2c16a7e9ba |
FN-058: add Medieval appearance theme
Add a bundled pixel-font Medieval theme with parchment and wood visual styling across dashboard and desktop surfaces. - Add Medieval theme tokens, swatches, first-paint persistence, and selector integration.\n- Bundle Press Start 2P typography with responsive modal styling and documentation.\n- Add theme behavior tests, screenshots, and a published-package changeset.\n\nFiles changed:\n .changeset/fn-058-medieval-theme.md | 7 ++\n docs/dashboard-guide.md | 5 +-\n docs/settings-reference.md | 2 +-\n packages/core/src/types/ui/execution-and-ui.ts | 5 ++\n .../dashboard/app/__tests__/medieval-theme.test.ts | 71 +++++++++++++++++\n .../dashboard/app/components/ThemeSelector.css | 15 +++\n .../components/__tests__/ThemeDropdown.test.tsx | 2 +-\n .../components/__tests__/ThemeSelector.test.tsx | 14 ++--\n .../__tests__/CommandCenterControls.test.tsx | 10 ++-\n packages/dashboard/app/components/themeOptions.ts | 1 +\n .../dashboard/app/hooks/__tests__/useTheme.test.ts | 28 +++++++\n packages/dashboard/app/index.html | 4 +-\n packages/dashboard/app/main.tsx | 1 +\n packages/dashboard/app/public/theme-data.css | 86 +++++++++++++++++++++\n packages/dashboard/app/styles.css | 24 ++++++\n packages/dashboard/package.json | 1 +\n packages/desktop/src/renderer/index.html | 3 +-\n pnpm-lock.yaml | 8 ++\n screenshots/fn-058-medieval-theme-desktop.png | Bin 0 -> 19898 bytes\n screenshots/fn-058-medieval-theme-mobile.png | Bin 0 -> 14996 bytes\n 20 files changed, 269 insertions(+), 18 deletions(-) Fusion-Task-Id: FN-058 Fusion-Task-Lineage: b7ce1b83-59ba-4516-8073-c1e8c46bb181 Co-authored-by: Fusion <noreply@runfusion.ai> |
||
|
|
47a8b53ad2 |
FN-059: deduplicate failure activity logging
Record task failure activity only when a task enters the failed state, while preserving lifecycle metadata compatibility. - Emit failure-transition metadata only for non-failed to failed updates. - Preserve warm-cache lane decoration and cold-cache absent metadata. - Add PostgreSQL parity coverage and a published-package changeset. Files changed: .changeset/fn-059-activity-log-failure-dedup.md | 7 +++ .../postgres/activity-log-parity.pg.test.ts | 50 ++++++++++++++++++++++ packages/core/src/store.ts | 13 ++++-- packages/core/src/task-store/lifecycle-ops.ts | 11 +++-- packages/core/src/task-store/task-update.ts | 6 ++- 5 files changed, 80 insertions(+), 7 deletions(-) Fusion-Task-Id: FN-059 Fusion-Task-Lineage: 28c28c0d-d325-4fa6-844d-33a05a18e5ed Co-authored-by: Fusion <noreply@runfusion.ai> |
||
|
|
7563fcfe1b |
FN-037: configure AI-authored task output language
Configure a persisted output-language setting and apply it across AI-authored task text and workflow summaries. - Add project/global output-language settings with defaults, validation, UI controls, translations, and documentation. - Propagate the selected language through planning, execution, review, summaries, and task creation. - Add focused coverage for language resolution and update affected dashboard, engine, and localization tests. Files changed: .changeset/fn-037-task-output-language.md | 7 ++ docs/settings-reference.md | 4 + docs/task-management.md | 4 + .../core/src/__tests__/ai-output-language.test.ts | 21 +++++ packages/core/src/ai/ai-output-language.ts | 42 +++++++++ packages/core/src/ai/ai-summarize.ts | 16 +++- packages/core/src/config/settings-schema.ts | 2 + packages/core/src/index.gate.ts | 2 + packages/core/src/index.ts | 2 + packages/core/src/task-store/settings-ops.ts | 7 ++ packages/core/src/task-store/task-creation.ts | 4 + packages/core/src/types/settings/settings-scope.ts | 2 + .../app/__tests__/settings-sections.test.tsx | 21 +++-- .../__tests__/SettingsModal.models-auth.test.tsx | 10 +- .../app/components/settings/section-keys.ts | 2 +- .../sections/ProjectModelsSection.search.ts | 13 ++- .../settings/sections/ProjectModelsSection.tsx | 28 ++++-- .../settings-default-descriptions.test.tsx | 4 +- .../src/__tests__/github-tracking.test.ts | 4 +- .../__tests__/planning-prompt-resolution.test.ts | 29 ++++-- .../src/__tests__/routes-planning.test.ts | 32 ++++++- packages/dashboard/src/ai-session-store.ts | 15 ++- packages/dashboard/src/github-tracking.ts | 3 + packages/dashboard/src/planning.ts | 75 +++++++++++++-- .../routes/register-ai-text-assistant-routes.ts | 11 ++- .../src/routes/register-planning-subtask-routes.ts | 6 +- .../src/routes/register-task-workflow-routes.ts | 9 +- packages/dashboard/src/shared/settings-sections.ts | 2 +- .../__tests__/ce-workflow-step-executor.test.ts | 45 ++++++++- .../__tests__/executor-review-artifacts.test.ts | 65 +++++++++++++ packages/engine/src/__tests__/triage.test.ts | 7 +- .../src/__tests__/workflow-task-runtime.test.ts | 23 +++++ .../create-authoritative-workflow-primitives.ts | 14 ++- .../create-authoritative-workflow-seams.ts | 17 +++- .../engine/src/executor/execute-workflow-graph.ts | 19 +++- .../engine/src/executor/execute-workflow-step.ts | 13 ++- packages/engine/src/executor/execution-prompt.ts | 10 +- .../engine/src/executor/handoff-task-to-review.ts | 10 +- .../engine/src/executor/run-graph-custom-node.ts | 6 +- .../src/executor/task-executor-graph-facades.ts | 8 +- packages/engine/src/triage.ts | 35 ++----- .../src/workflows/workflow-completion-summary.ts | 101 ++++++++++++++++++--- .../engine/src/workflows/workflow-task-runtime.ts | 12 +++ packages/i18n/locales/en/app.json | 7 +- packages/i18n/locales/es/app.json | 7 +- packages/i18n/locales/fr/app.json | 7 +- packages/i18n/locales/ko/app.json | 7 +- packages/i18n/locales/pt-BR/app.json | 14 ++- packages/i18n/locales/zh-CN/app.json | 7 +- packages/i18n/locales/zh-TW/app.json | 7 +- packages/i18n/src/resources.d.ts | 13 ++- 51 files changed, 680 insertions(+), 151 deletions(-) Fusion-Task-Id: FN-037 Fusion-Task-Lineage: 968a707e-7ffe-43ba-b983-d679b031f7a5 Co-authored-by: Fusion <noreply@runfusion.ai> |
||
|
|
a81c9b80d9 |
FN-036: make task title summarization project-controlled
Make generated task titles project-controlled while preserving useful summaries at any length. - Add project-level title summarization settings and UI controls. - Make summarization length-independent across task creation, planning, GitHub, and agent flows. - Update localization, documentation, and regression coverage. Files changed: .../fn-036-systematic-title-summarization.md | 7 + docs/settings-reference.md | 2 +- docs/storage.md | 2 +- docs/task-management.md | 4 +- packages/core/src/__tests__/ai-summarize.test.ts | 34 ++-- .../__tests__/store-create-intake-column.test.ts | 186 +++++++++++++++++++++ packages/core/src/ai/ai-summarize.ts | 32 ++-- packages/core/src/task-store/task-creation.ts | 83 +++++++-- packages/core/src/types/settings/settings-scope.ts | 9 +- packages/core/src/types/task/task-core.ts | 2 +- .../dashboard/app/__tests__/api-projects.test.ts | 4 +- .../app/__tests__/settings-sections.test.tsx | 2 +- .../dashboard/app/api/planning/ai-summarize.ts | 2 +- .../__tests__/SettingsModal.search.test.ts | 5 +- .../search/__tests__/settings-search-index.test.ts | 2 +- .../sections/ProjectModelsSection.search.ts | 4 +- .../settings/sections/ProjectModelsSection.tsx | 11 +- .../src/__tests__/github-tracking.test.ts | 12 +- .../src/__tests__/routes-planning.test.ts | 28 +++- .../dashboard/src/__tests__/routes-tasks.test.ts | 19 +++ packages/dashboard/src/github-tracking.ts | 9 +- .../routes/register-ai-text-assistant-routes.ts | 7 +- .../src/__tests__/agent-tools-delegation.test.ts | 1 + .../src/__tests__/heartbeat-executor.test.ts | 1 - packages/engine/src/__tests__/triage.test.ts | 7 +- packages/engine/src/agent-tools.ts | 7 +- packages/engine/src/triage.ts | 12 +- packages/i18n/locales/en/app.json | 6 +- packages/i18n/locales/pt-BR/app.json | 8 +- packages/i18n/src/resources.d.ts | 6 +- 30 files changed, 418 insertions(+), 96 deletions(-) Fusion-Task-Id: FN-036 Fusion-Task-Lineage: df603386-e63e-4be8-a8e5-bae9aa1d4a80 Co-authored-by: Fusion <noreply@runfusion.ai> |
||
|
|
bcc77c9608 |
FN-035: require automatic task recommendations
Require task recommendations to be explicitly enabled and consistently surfaced across execution and settings. - Add the automatic task recommendations setting, persistence, validation, and localized UI copy. - Gate executor recommendation prompts and completion-tool behavior on the setting. - Update dashboard/API coverage, documentation, and regression tests. Files changed: .changeset/fn-035-required-task-recommendations.md | 7 +++ docs/dashboard-guide.md | 3 +- docs/settings-reference.md | 2 + .../postgres/settings-persistence.pg.test.ts | 18 +++++++ .../core/src/__tests__/settings-parity.test.ts | 3 ++ packages/core/src/config/settings-schema.ts | 2 + packages/core/src/task-store/settings-ops.ts | 16 ++++-- packages/core/src/types/settings/settings-scope.ts | 8 +++ .../app/__tests__/settings-save-split.test.ts | 16 ++++++ .../__tests__/SettingsModal.general.test.tsx | 36 +++++++++++++ .../app/components/settings/section-keys.ts | 1 + .../settings/sections/GeneralSection.search.ts | 10 ++++ .../settings/sections/GeneralSection.tsx | 15 +++++- .../settings-default-descriptions.test.tsx | 2 + .../register-settings-memory-worktrunk.test.ts | 28 ++++++++++ .../src/routes/register-settings-memory-routes.ts | 5 ++ ...cutor-prompt-completion-recommendations.test.ts | 31 +++++++++++ .../executor-task-recommendations.test.ts | 61 ++++++++++++++++++++-- .../engine/src/executor/create-task-done-tool.ts | 18 +++++-- packages/engine/src/executor/system-prompt.ts | 20 +++++-- packages/i18n/locales/en/app.json | 3 ++ packages/i18n/locales/es/app.json | 3 ++ packages/i18n/locales/fr/app.json | 3 ++ packages/i18n/locales/ko/app.json | 3 ++ packages/i18n/locales/pt-BR/app.json | 5 +- packages/i18n/locales/zh-CN/app.json | 3 ++ packages/i18n/locales/zh-TW/app.json | 3 ++ packages/i18n/src/resources.d.ts | 3 ++ 28 files changed, 307 insertions(+), 21 deletions(-) Fusion-Task-Id: FN-035 Fusion-Task-Lineage: 336d4d99-3105-43df-b82c-ca413b9c5892 Co-authored-by: Fusion <noreply@runfusion.ai> |
||
|
|
29f4de39c4 |
FN-038: prepare projects for Git during onboarding
Make project initialization and registration produce Git-ready projects consistently.\n\n- Centralize repository readiness and initialization behavior.\n- Update CLI onboarding and dashboard registration flows to use the Git-ready setup.\n- Add regression coverage and document the new project preparation behavior.\n\nFiles changed:\n .changeset/fn-038-git-ready-projects.md | 7 +\n docs/cli-reference.md | 11 +-\n docs/getting-started.md | 17 +-\n docs/workspaces.md | 4 +-\n packages/cli/src/commands/__tests__/init.test.ts | 39 ++--\n packages/cli/src/commands/init.ts | 115 ++--------\n packages/core/src/__tests__/git-repository.test.ts | 125 +++++++++-\n packages/core/src/central/central-core.ts | 57 +++--\n packages/core/src/git/git-repository.ts | 254 +++++++++++++++++----\n packages/dashboard/app/api/projects/projects.ts | 2 -\n packages/dashboard/app/components/SetupWizardModal.tsx | 46 +---\n packages/dashboard/app/components/__tests__/SetupWizardModal.git-missing.test.tsx | 74 +++---\n packages/dashboard/src/routes/__tests__/register-project-git-readiness.test.ts | 165 +++++++++++++\n packages/dashboard/src/routes/register-project-routes.ts | 11 -\n 14 files changed, 647 insertions(+), 280 deletions(-) Fusion-Task-Id: FN-038 Fusion-Task-Lineage: 83634184-569b-4190-a88f-4a09eb832e9d Co-authored-by: Fusion <noreply@runfusion.ai> |
||
|
|
3f85c4cf84 |
FN-034: route workspace tasks through repository worktrees
Route multi-repository planning and graph execution through declared repository worktrees instead of workspace roots. - Acquire declared repository worktrees for planning and custom graph nodes. - Filter planning coordinator selection to configured repositories and preserve workspace routing metadata. - Add workspace worktree recovery, concurrency coverage, and release documentation. Files changed: .changeset/fn-034-workspace-worktree-routing.md | 7 ++ docs/architecture.md | 1 + ...workspace-worktrees-concurrent-merge.pg.test.ts | 36 +++++++ packages/core/src/store.ts | 10 ++ packages/core/src/task-store/task-mutation-ops.ts | 60 +++++++++++- .../executor-workspace-session-cwd.test.ts | 29 ++++-- packages/engine/src/__tests__/self-healing.test.ts | 17 ++-- .../workspace-root-worktree-routing.test.ts | 107 +++++++++++++++++++++ .../create-authoritative-workflow-seams.ts | 48 ++++++--- .../executor/ensure-graph-custom-node-worktree.ts | 45 +++++++- .../executor/ensure-task-worktree-for-planning.ts | 38 ++++++-- .../src/executor/reset-steps-if-work-lost.ts | 12 ++- .../engine/src/executor/run-graph-custom-node.ts | 83 ++++++++++++++-- packages/engine/src/executor/run-implementation.ts | 59 ++++++++++-- .../src/executor/workspace-config-resolver.ts | 30 +++++- .../src/executor/workspace-review-per-repo.ts | 29 +++++- .../executor/worktree-missing-session-recovery.ts | 26 ++++- packages/engine/src/self-healing.ts | 50 +++++++--- .../self-healing/auto-recover-worktree-session.ts | 31 +++++- .../engine/src/worktree/worktree-acquisition.ts | 65 +++++++++++- 20 files changed, 702 insertions(+), 81 deletions(-) Fusion-Task-Id: FN-034 Fusion-Task-Lineage: 59c5f273-d676-4b7f-b006-c12dc6c3abe6 Co-authored-by: Fusion <noreply@runfusion.ai> |
||
|
|
5a0117a362 |
FN-031: add task reset lifecycle handling
Add durable task reset lifecycle support across core, dashboard, and engine integrations. - Add reset lifecycle publication and disposal primitives with coverage. - Expose reset lifecycle behavior through task workflow routes and dashboard task details. - Update workflow intake, engine exports, and worktree integration documentation. Files changed: docs/dashboard-guide.md | 8 + .../postgres/task-reset-publication.pg.test.ts | 99 +++++++ .../core/src/__tests__/task-move-disposer.test.ts | 52 +++ packages/core/src/index.gate.ts | 6 + packages/core/src/index.ts | 6 + packages/core/src/store.ts | 6 + packages/core/src/task-store/reset-lifecycle.ts | 193 ++++++++++++++ packages/core/src/tasks/task-move-disposer.ts | 25 ++ .../dashboard/app/components/TaskDetailModal.tsx | 8 +- .../components/__tests__/TaskDetailModal.test.tsx | 28 +- .../__tests__/plan-approval-intake-column.test.ts | 80 ++---- .../src/__tests__/task-reset-lifecycle.test.ts | 171 +++++++++++++ .../src/routes/register-task-workflow-routes.ts | 285 ++++++++++----------- packages/engine/src/index.ts | 10 +- packages/engine/src/worktree/worktree-backend.ts | 1 + 15 files changed, 766 insertions(+), 212 deletions(-) Fusion-Task-Id: FN-031 Fusion-Task-Lineage: 183bb709-485e-4069-bd2a-98f787b2bd73 Co-authored-by: Fusion <noreply@runfusion.ai> |
||
|
|
c3ff663c1c |
FN-030: route refinement tasks directly to planning
Route refinement and duplicate-task handling through the planning path while preserving task metadata and API behavior.\n\n- Route CLI refinement commands directly into planning.\n- Harden dependency updates and duplicate-task refinement persistence.\n- Expand PostgreSQL, CLI, and dashboard authorization coverage.\n- Document the refined task lifecycle and add the published-package changeset.\n\nFiles changed:\n .changeset/fn-030-refinement-planning-route.md | 7 ++\n docs/architecture.md | 20 ++--\n docs/task-management.md | 11 +-\n packages/cli/src/commands/__tests__/task.test.ts | 9 +-\n packages/cli/src/commands/task.ts | 2 +-\n .../postgres/refine-duplicate-task.pg.test.ts | 130 +++++++++++++++++++++\n .../__tests__/postgres/store-comments.pg.test.ts | 32 +++++\n packages/core/src/task-store/update-task-deps.ts | 17 +--\n packages/dashboard/app/__tests__/api-auth.test.ts | 5 +-\n 9 files changed, 207 insertions(+), 26 deletions(-) Fusion-Task-Id: FN-030 Fusion-Task-Lineage: 885c0a9f-d8bf-4abf-9ec9-dca5a01648e8 Co-authored-by: Fusion <noreply@runfusion.ai> |
||
|
|
5089f1b88e |
FN-027: route dependency replans safely
Make dependency changes reliably replan Coding (Ideas) cards without sending them into manual intake. - Derive dependency-replan destinations from workflow lifecycle traits. - Preserve specifications while resetting approval evidence and re-entering planning. - Cover dedicated and generic dependency writers, continuation states, and manual-intake admission. Files changed: .../postgres/task-dependency-mutation.pg.test.ts | 110 +++++++++++++++++++-- packages/core/src/task-store/task-update.ts | 28 ++---- packages/core/src/task-store/update-task-deps.ts | 35 ++++--- .../src/workflows/workflow-lifecycle-traits.ts | 29 ++++++ .../src/__tests__/manual-intake-admission.test.ts | 20 ++++ 5 files changed, 181 insertions(+), 41 deletions(-) Fusion-Task-Id: FN-027 Fusion-Task-Lineage: 63ee58e6-550d-4f56-a1e0-9c878f957b66 Co-authored-by: Fusion <noreply@runfusion.ai> |
||
|
|
b88bb1d532 |
FN-023: respect disabled built-in workflows
Make disabled built-in workflows unavailable for new selections while preserving existing task resolution. - Validate enabled built-in workflow settings atomically and require a valid available option. - Resolve defaults and origin pins through the effective enabled workflow set. - Filter dashboard selectors while retaining management and direct-resolution paths. - Add core and dashboard regression coverage plus operator-facing documentation. Files changed: .changeset/fn-023-disabled-builtin-workflows.md | 7 +++ docs/dashboard-guide.md | 5 +- docs/workflow-steps.md | 6 +- packages/core/src/__tests__/builtin-workflows.test.ts | 35 +++++++++-- packages/core/src/index.ts | 6 ++ packages/core/src/task-store/moves.ts | 17 +++-- packages/core/src/task-store/settings-ops.ts | 22 +++++++ packages/core/src/task-store/task-store-helpers.ts | 33 +++++++++- packages/core/src/workflows/builtin-workflows.ts | 70 +++++++++++++++++++-- packages/dashboard/app/__tests__/workflow-selection-cross-surface.test.tsx | 45 ++++++++++++++ packages/dashboard/app/api/projects/board-workflows.ts | 2 + packages/dashboard/app/components/__tests__/Board.test.tsx | 22 +++++++ packages/dashboard/app/components/__tests__/ListView.test.tsx | 38 ++++++++++++ packages/dashboard/app/components/settings/sections/GeneralSection.tsx | 19 +++++- packages/dashboard/app/components/settings/sections/__tests__/GeneralSection.builtin-workflows.test.tsx | 72 ++++++++++++++++++++++ packages/dashboard/app/hooks/__tests__/useBoardWorkflows.test.ts | 20 ++++++ packages/dashboard/app/hooks/useBoardWorkflows.ts | 18 ++++-- packages/dashboard/src/__tests__/board-workflows.test.ts | 35 +++++++++-- packages/dashboard/src/routes/__tests__/register-settings-memory-worktrunk.test.ts | 37 +++++++++++ packages/dashboard/src/routes/board-workflows.ts | 41 +++++++++--- packages/dashboard/src/routes/register-settings-memory-routes.ts | 46 +++++++++++++- 21 files changed, 553 insertions(+), 43 deletions(-) Fusion-Task-Id: FN-023 Fusion-Task-Lineage: 1043fc42-2a02-49dd-b695-d9ae3af60e90 Co-authored-by: Fusion <noreply@runfusion.ai> |
||
|
|
4d7e7dba4c |
FN-021: expose model-supported thinking levels, including max
Expose thinking-level options from model capabilities through API, workflows, and dashboard controls. - Add model-supported thinking-level metadata, including max, across core and model routes. - Propagate capability-aware levels through planning, agent creation, and chat/task UI. - Update localized labels, documentation, tests, dependencies, and add a release changeset. Files changed: .changeset/fn-021-thinking-levels.md | 7 ++++ docs/settings-reference.md | 8 +++- docs/workflow-steps.md | 8 ++-- packages/core/src/__tests__/openai-models.test.ts | 1 + .../core/src/__tests__/thinking-levels.test.ts | 4 +- packages/core/src/__tests__/workflow-ir.test.ts | 2 +- packages/core/src/ai/openai-models.ts | 5 ++- packages/core/src/types/board/board.ts | 8 ++-- .../app/api/agents/agent-import-generation.ts | 4 +- .../dashboard/app/api/planning/models-usage.ts | 13 +++++++ packages/dashboard/app/api/planning/planning.ts | 5 ++- .../dashboard/app/components/AgentDetailView.tsx | 2 +- .../app/components/ChatThinkingLevelControl.tsx | 28 +++++++++++--- .../app/components/CustomModelDropdown.tsx | 29 ++++++++++---- packages/dashboard/app/components/NewTaskModal.tsx | 4 +- .../dashboard/app/components/TaskDetailModal.tsx | 4 +- .../__tests__/AgentDetailView.test-helpers.ts | 2 +- .../__tests__/AgentOnboardingModal.test.tsx | 2 +- .../__tests__/ChatThinkingLevelControl.test.tsx | 27 ++++++++++++- .../__tests__/CustomModelDropdown.test.tsx | 33 +++++++++++++++- .../__tests__/ModelSelectionModal.test.tsx | 3 +- .../components/__tests__/NewAgentDialog.test.tsx | 2 + .../components/__tests__/QuickEntryBox.test.tsx | 3 +- .../components/agent-presets/agentCreatePayload.ts | 3 +- .../settings/sections/GlobalModelsSection.tsx | 8 ++-- packages/dashboard/package.json | 2 +- .../dashboard/src/__tests__/chat-manager.test.ts | 8 ++-- packages/dashboard/src/__tests__/chat.test.ts | 2 +- ...-model-routes-openai-codex-supplemental.test.ts | 44 +++++++++++++++++++++- .../src/__tests__/routes-automation.test.ts | 4 +- .../dashboard/src/__tests__/routes-tasks.test.ts | 8 ++-- packages/dashboard/src/agent-generation.ts | 9 +++-- packages/dashboard/src/agent-onboarding.ts | 8 ++-- packages/dashboard/src/routes.ts | 14 ++++++- .../src/routes/register-chat-room-routes.ts | 2 +- .../dashboard/src/routes/register-model-routes.ts | 43 ++++++++++++++++----- packages/i18n/locales/en/app.json | 1 + packages/i18n/locales/es/app.json | 1 + packages/i18n/locales/fr/app.json | 1 + packages/i18n/locales/ko/app.json | 1 + packages/i18n/locales/pt-BR/app.json | 1 + packages/i18n/locales/zh-CN/app.json | 1 + packages/i18n/locales/zh-TW/app.json | 1 + packages/i18n/src/resources.d.ts | 1 + pnpm-lock.yaml | 6 +-- 45 files changed, 289 insertions(+), 84 deletions(-) Fusion-Task-Id: FN-021 Fusion-Task-Lineage: af1b0e09-6375-4f0c-9501-66a10c8b9168 Co-authored-by: Fusion <noreply@runfusion.ai> |
||
|
|
6a28811d1a |
FN-012: sort tasks in every board column
Add independent task ordering controls across all board lanes and keep archive pagination aligned with the selected order. - Add arrival and task-ID sorting to every board column, including archived tasks. - Thread bounded, server-backed archive sorting through the API, store, hook, and UI. - Preserve selected archive order for subsequent pages and add localized labels, typings, tests, and dashboard documentation. Files changed: .changeset/fn-012-column-task-sorting.md | 7 ++ docs/dashboard-guide.md | 17 +-- .../postgres/archive-pagination.pg.test.ts | 19 ++++ packages/core/src/__tests__/task-priority.test.ts | 13 +++ packages/core/src/async-stores/async-archive-db.ts | 18 ++-- packages/core/src/index.gate.ts | 2 + packages/core/src/index.ts | 2 + packages/core/src/store.ts | 2 +- .../core/src/task-store/archive-lifecycle-2.ts | 13 ++- packages/core/src/tasks/task-priority.ts | 41 +++++--- packages/core/src/types.ts | 2 +- packages/dashboard/app/App.tsx | 4 +- packages/dashboard/app/api/tasks/tasks.ts | 3 + packages/dashboard/app/components/Board.tsx | 62 +++++++--- packages/dashboard/app/components/Column.tsx | 54 ++++++---- .../app/components/__tests__/Board.test.tsx | 74 +++++++------ .../app/components/__tests__/Column.test.tsx | 8 +- .../app/components/dashboard/MainContent.tsx | 6 ++ .../dashboard/app/components/dashboard/types.ts | 5 + .../dashboard/app/hooks/__tests__/useTasks.test.ts | 61 ++++++++++- packages/dashboard/app/hooks/useTasks.ts | 116 ++++++++++++++++----- ...task-workflow-routes.archive-pagination.test.ts | 78 ++++++++++++++ .../src/routes/register-task-workflow-routes.ts | 20 ++-- packages/i18n/locales/en/app.json | 5 + packages/i18n/locales/es/app.json | 7 +- packages/i18n/locales/fr/app.json | 7 +- packages/i18n/locales/ko/app.json | 7 +- packages/i18n/locales/pt-BR/app.json | 7 +- packages/i18n/locales/zh-CN/app.json | 7 +- packages/i18n/locales/zh-TW/app.json | 7 +- packages/i18n/src/resources.d.ts | 5 + 31 files changed, 537 insertions(+), 142 deletions(-) Fusion-Task-Id: FN-012 Fusion-Task-Lineage: 18dff987-18d5-401d-9fe0-290a71f12e15 Co-authored-by: Fusion <noreply@runfusion.ai> |
||
|
|
3ae22c23d1 |
FN-011: add project chat message width preference
Add a project-scoped conversation layout preference and apply full-width rendering consistently across dashboard chat surfaces. - Add bubbles/full-width project settings with localized Appearance controls. - Apply the preference to Chat, Activity, Planner Chat, Quick Chat, and docked hosts with responsive safeguards. - Add regression coverage, documentation, and the published-package changeset. Files changed: .changeset/fn-011-chat-message-layout.md | 7 ++++ docs/dashboard-guide.md | 4 ++ .../core/src/__tests__/settings-defaults.test.ts | 14 ++++++- .../core/src/__tests__/settings-parity.test.ts | 4 ++ packages/core/src/config/settings-schema.ts | 5 +++ packages/core/src/types/settings/settings-scope.ts | 5 +++ packages/dashboard/app/App.tsx | 7 +++- packages/dashboard/app/components/AppModals.tsx | 5 +++ packages/dashboard/app/components/ChatView.css | 23 +++++++++++ packages/dashboard/app/components/ChatView.tsx | 4 +- .../dashboard/app/components/SettingsModal.tsx | 14 +++++++ packages/dashboard/app/components/TaskChatTab.css | 42 +++++++++++++++++++++ packages/dashboard/app/components/TaskChatTab.tsx | 4 +- .../app/components/TaskPlannerChatTab.css | 22 +++++++++++ .../app/components/TaskPlannerChatTab.tsx | 4 +- .../components/__tests__/ChatView.core.test.tsx | 34 +++++++++++++++++ .../__tests__/SettingsModal.general.test.tsx | 42 +++++++++++++++++++++ .../app/components/__tests__/TaskChatTab.test.tsx | 31 +++++++++++++++ .../__tests__/TaskPlannerChatTab.test.tsx | 32 ++++++++++++++++ .../settings/sections/AppearanceSection.tsx | 24 +++++++++++- .../sections/__tests__/AppearanceSection.test.tsx | 22 ++++++++++- .../app/context/ChatMessageLayoutContext.tsx | 16 ++++++++ .../app/hooks/__tests__/useAppSettings.test.ts | 44 ++++++++++++++++++++++ packages/dashboard/app/hooks/useAppSettings.ts | 29 ++++++++++++++ .../app/task-modal-touch-resize-e2e-fixture.tsx | 2 +- packages/i18n/locales/en/app.json | 6 ++- packages/i18n/locales/es/app.json | 6 ++- packages/i18n/locales/fr/app.json | 6 ++- packages/i18n/locales/ko/app.json | 6 ++- packages/i18n/locales/pt-BR/app.json | 6 ++- packages/i18n/locales/zh-CN/app.json | 6 ++- packages/i18n/locales/zh-TW/app.json | 6 ++- packages/i18n/src/resources.d.ts | 4 ++ 33 files changed, 471 insertions(+), 15 deletions(-) Fusion-Task-Id: FN-011 Fusion-Task-Lineage: d858d00f-e05b-4dc2-8ddb-cfc5b9973871 Co-authored-by: Fusion <noreply@runfusion.ai> |
||
|
|
200b31089e |
FN-004: fix remote access token handoff
Ensure freshly generated Remote Access links authenticate against current global settings. - Synchronize global-settings caches across token writers and readers - Resolve remote-login tokens from canonical global settings - Cover token handoff behavior and document persistent-token semantics Files changed: .changeset/fn-004-remote-token-auth.md | 7 + docs/remote-access.md | 6 +- .../core/src/__tests__/global-settings.test.ts | 41 +++- .../postgres/settings-persistence.pg.test.ts | 37 ++++ packages/core/src/config/global-settings.ts | 46 ++++- .../app/__tests__/auth-token-capture.test.ts | 32 ++++ .../app/__tests__/settings-save-split.test.ts | 4 + .../src/__tests__/remote-login-handoff.test.ts | 213 +++++++++++++++++++++ .../src/__tests__/routes-remote-access.test.ts | 4 + .../src/routes/register-settings-memory-routes.ts | 9 + packages/dashboard/src/server.ts | 10 +- 11 files changed, 400 insertions(+), 9 deletions(-) Fusion-Task-Id: FN-004 Fusion-Task-Lineage: 1a64c345-a590-474e-afbf-af5e5d6df979 Co-authored-by: Fusion <noreply@runfusion.ai> |
||
|
|
643a4098ab |
FN-001: add Velvet dashboard color theme
Add the Velvet plum/burgundy theme across dashboard and desktop startup. - Register Velvet in persisted theme options and pre-hydration validators - Define dark/light palette tokens, selector swatch, and regression coverage - Document the theme and add a minor CLI changeset Files changed: .changeset/fn-001-velvet-theme.md | 6 ++ docs/dashboard-guide.md | 5 +- docs/settings-reference.md | 2 +- packages/core/src/types/ui/execution-and-ui.ts | 2 + .../dashboard/app/__tests__/velvet-theme.test.ts | 101 +++++++++++++++++++++ .../dashboard/app/components/ThemeSelector.css | 14 +++ packages/dashboard/app/components/themeOptions.ts | 1 + packages/dashboard/app/index.html | 2 +- packages/dashboard/app/public/theme-data.css | 86 +++++++++++++++++- packages/desktop/src/renderer/index.html | 1 + 10 files changed, 215 insertions(+), 5 deletions(-) Fusion-Task-Id: FN-001 Fusion-Task-Lineage: a57d7458-b598-48e3-b4ed-cc082f32197d Co-authored-by: Fusion <noreply@runfusion.ai> |
||
|
|
2a31505823 |
FN-9163: Add repositories to existing workspace tasks
Enable validated workspace membership additions and make active tasks discover new repositories safely. - add idempotent direct-child Git repository validation and workspace configuration updates - expose repository discovery and addition through Settings and dashboard API routes - refresh workspace membership during acquisition while blocking additions after review or landing begins - document the workflow and cover core, dashboard, and engine behavior with focused tests Files changed: .changeset/fn-9163-workspace-add-repo.md | 7 ++ docs/dashboard-guide.md | 2 + docs/settings-reference.md | 2 +- docs/workspaces.md | 12 +- .../core/src/__tests__/workspace-add-repo.test.ts | 12 ++ packages/core/src/git/git-repository.ts | 68 ++++++++++- packages/core/src/index.gate.ts | 3 + packages/core/src/index.ts | 3 + packages/dashboard/app/api/agents/agents.ts | 11 +- .../settings/sections/GeneralSection.tsx | 3 + .../settings/sections/WorkspaceReposCard.css | 6 + .../settings/sections/WorkspaceReposCard.tsx | 46 ++++++++ .../__tests__/workspace-repos-card.test.tsx | 49 ++++++++ .../src/__tests__/workspace-add-repo-route.test.ts | 65 ++++++++++ .../dashboard/src/routes/register-git-github.ts | 35 +++++- .../__tests__/workspace-add-repo-midflight.test.ts | 131 +++++++++++++++++++++ packages/engine/src/agent-tools.ts | 27 ++++- packages/engine/src/executor/deps-bags.ts | 44 ++++++- packages/engine/src/executor/run-implementation.ts | 2 + 19 files changed, 512 insertions(+), 16 deletions(-) Fusion-Task-Id: FN-9163 Fusion-Task-Lineage: 7456f55f-b7c8-4076-994f-42994d8babb0 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
3b0a6b795f |
FN-9162: Group workspace worktrees under configurable roots
Configure collision-safe workspace and repository subfolders beneath custom worktree roots. - add shared workspace layout helpers and export them through runtime and gate barrels - route acquisition, pinning, cleanup, archive, and extension discovery through grouped paths - allow absolute worktree roots in settings and document the workspace layout - protect shared-root containers from destructive sweeps and cover multi-repository behavior Files changed: .changeset/fn-9162-workspace-worktree-root.md | 7 ++ docs/settings-reference.md | 2 +- docs/workspaces.md | 6 ++ .../extension-workspace-worktree-root.test.ts | 81 +++++++++++++++++ packages/cli/src/extension.ts | 53 ++++++++++- packages/core/src/__tests__/pi-extensions.test.ts | 46 +++++++++- .../core/src/__tests__/worktree-layout.test.ts | 49 ++++++++++ packages/core/src/index.gate.ts | 13 +++ packages/core/src/index.ts | 9 ++ packages/core/src/plugins/pi-extensions.ts | 12 ++- packages/core/src/task-store/archive-lifecycle.ts | 11 +-- packages/core/src/tasks/worktree-layout.ts | 77 ++++++++++++++++ .../dashboard/app/components/SettingsModal.tsx | 4 +- .../settings/sections/WorktreesSection.tsx | 2 +- .../worktree-acquisition-workspace.test.ts | 55 ++++++++++- .../engine/src/__tests__/worktree-paths.test.ts | 19 +++- .../engine/src/__tests__/worktree-pinning.test.ts | 17 ++++ .../engine/src/__tests__/worktree-pool.test.ts | 19 +++- .../src/executor/workspace-main-checkout-guard.ts | 2 +- packages/engine/src/self-healing.ts | 20 +++- .../engine/src/worktree/worktree-acquisition.ts | 101 +++++++++++++++------ packages/engine/src/worktree/worktree-names.ts | 14 +-- packages/engine/src/worktree/worktree-paths.ts | 75 ++++++++++++--- packages/engine/src/worktree/worktree-pinning.ts | 10 +- packages/engine/src/worktree/worktree-pool.ts | 44 ++++++--- 25 files changed, 656 insertions(+), 92 deletions(-) Fusion-Task-Id: FN-9162 Fusion-Task-Lineage: b5f5e247-577c-4357-9ffe-97e2447b4fd4 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
ef35fb8e5a |
FN-9164: select per-repository workspace base branches
Workspace worktrees now honor and persist the appropriate base branch for each sub-repository throughout their lifecycle. - Resolve requested bases per repository, normalize remote-only refs, and fall back safely to repository integration branches. - Reuse recorded bases for landing, recovery, and revert flows with privacy-safe audit breadcrumbs. - Surface base and fallback details in task UI, documentation, tests, and release notes. Files changed: .changeset/fn-9164-workspace-base-branch.md | 7 + AGENTS.md | 1 + docs/task-management.md | 2 +- docs/workspaces.md | 8 +- packages/core/src/types/task/task-core.ts | 12 ++ .../dashboard/app/components/TaskDetailModal.css | 14 ++ .../app/components/WorkspaceWorktreesSummary.tsx | 2 + .../__tests__/WorkspaceWorktreesSummary.test.tsx | 13 ++ .../src/routes/register-task-workflow-routes.ts | 2 + .../task-revert.workspace.real-git.test.ts | 25 +++ .../src/__tests__/workspace-base-branch.test.ts | 93 +++++++++++ .../worktree-acquisition-workspace.test.ts | 27 ++++ packages/engine/src/execution/task-revert.ts | 58 +++++-- packages/engine/src/merge/merger-ai.ts | 30 +++- packages/engine/src/self-healing.ts | 50 +++++- packages/engine/src/util/run-audit.ts | 6 + .../engine/src/worktree/workspace-base-branch.ts | 180 +++++++++++++++++++++ .../engine/src/worktree/worktree-acquisition.ts | 62 ++++--- 18 files changed, 548 insertions(+), 44 deletions(-) Fusion-Task-Id: FN-9164 Fusion-Task-Lineage: 487a1c77-32cb-47dd-bf43-297a146951ba Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
179f08c2d4 |
FN-9158: recover Windows antivirus-blocked PostgreSQL payloads
Recover quarantined or truncated embedded PostgreSQL runtime files and explain Windows Defender remediation. - Validate materialized payload inventory with v3 markers and repair mismatches atomically. - Surface actionable error 4551 diagnostics through startup failures. - Add regression coverage, operator documentation, and a patch changeset. Files changed: ...-9158-windows-av-blocked-embedded-pg-payload.md | 7 + ...ndows-antivirus-blocks-embedded-postgres-dll.md | 27 +++ docs/storage.md | 4 + .../__tests__/postgres/embedded-lifecycle.test.ts | 139 +++++++++++++- .../src/__tests__/postgres/startup-factory.test.ts | 19 ++ packages/core/src/postgres/embedded-lifecycle.ts | 208 ++++++++++++++++++++- packages/core/src/postgres/startup-factory.ts | 30 +-- 7 files changed, 414 insertions(+), 20 deletions(-) Fusion-Task-Id: FN-9158 Fusion-Task-Lineage: ec2c97d7-0797-49c1-b875-6b147ff26917 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
7b55a02e51 |
FN-9157: fix workflow merge boundary proof and retry routing
Make workflow merge admission accept valid foreach completion and terminate retries when proof is unavailable. - Treat fully terminal live foreach steps as implementation proof for Review Level 0 workflows. - Preserve merge-boundary-unproven as a terminal graph failure and park blocked retries visibly. - Add unit, graph-boundary, and PostgreSQL regression coverage plus operator documentation and a patch changeset. Files changed: .changeset/fn-9157-merge-boundary.md | 7 +++ docs/architecture.md | 4 ++ docs/workflow-steps.md | 6 ++ .../src/__tests__/workflow-merge-proof.test.ts | 11 +++- packages/core/src/workflow-merge-proof.ts | 20 +++++-- .../src/__tests__/executor-graph-boundary.test.ts | 64 +++++++++++++++++++++- ...xecutor-merge-boundary-foreach-proof.pg.test.ts | 10 ++++ .../__tests__/merge-boundary-unproven-park.test.ts | 48 ++++++++++++++++ .../create-authoritative-workflow-primitives.ts | 13 ++++- .../create-authoritative-workflow-seams.ts | 6 +- .../executor/evaluate-workflow-merge-boundary.ts | 18 +++++- .../executor/route-graph-merge-failure-to-retry.ts | 26 ++++++++- packages/engine/src/executor/task-predicates.ts | 2 + .../engine/src/executor/workflow-merge-boundary.ts | 29 +++++++--- .../engine/src/workflows/workflow-merge-nodes.ts | 13 +++++ 15 files changed, 253 insertions(+), 24 deletions(-) Fusion-Task-Id: FN-9157 Fusion-Task-Lineage: 7c68dfe2-28fb-4353-9ae6-df0ddbaf799a Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
fb77eef7a9 |
FN-9150: Capture abandoned PostgreSQL timeout boundaries
Capture elapsed and join evidence for PostgreSQL test boundaries that Vitest abandons before settlement. - emit unique boundary join keys, progress ladders, terminal records, and payload-free watchdog breaches - classify ladder-only, breach, and unobservable lifecycle evidence in the loaded-failure census - cover abandoned and superseded body windows and document the corrective campaign findings Files changed: ...res-loaded-lane-unrelated-failure-population.md | 33 ++++++- docs/testing.md | 14 ++- .../__test-utils__/pg-timeout-boundary-observer.ts | 108 ++++++++++++++++++--- .../__tests__/pg-timeout-boundary-observer.test.ts | 98 ++++++++++++++++++- .../__tests__/pg-loaded-failure-census.test.mjs | 30 ++++++ scripts/pg-loaded-failure-census.mjs | 71 ++++++++++++-- 6 files changed, 327 insertions(+), 27 deletions(-) Fusion-Task-Id: FN-9150 Fusion-Task-Lineage: fc2e9f99-7739-4d86-99f4-713a78f53e57 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
a1977e052b |
FN-9149: Add PostgreSQL timeout-boundary diagnostics
Instrument the opt-in PostgreSQL test harness to attribute loaded-lane timeout failures without changing default behavior. - Add bounded setup, body, and teardown watchdog probes with host, cluster, and template evidence. - Wire observer records into the harness and loaded-failure census with explicit suppression and attribution handling. - Cover observer inertness, boundary behavior, and census joins while documenting the 27-worker campaign findings. Files changed: ...res-loaded-lane-unrelated-failure-population.md | 31 +- docs/testing.md | 27 ++ .../core/src/__test-utils__/pg-test-harness.ts | 113 +++++- .../__test-utils__/pg-timeout-boundary-observer.ts | 451 +++++++++++++++++++++ .../pg-test-harness-observer-inertness.test.ts | 31 ++ .../__tests__/pg-timeout-boundary-observer.test.ts | 177 ++++++++ .../__tests__/pg-loaded-failure-census.test.mjs | 31 ++ scripts/pg-loaded-failure-census.mjs | 101 ++++- 8 files changed, 934 insertions(+), 28 deletions(-) Fusion-Task-Id: FN-9149 Fusion-Task-Lineage: 4df4ee28-5369-41ae-bb0c-e7e9ae78d873 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
72877c8cf9 |
fix(RUFU-074): idle backoff + jitter for the task-deleted outbox consumer (#3471)
**Problem:** Each dashboard/engine project consumer polled `task_deleted` outbox on a fixed 5s setInterval, so ~44 per-project consumers thundered together on the same cadence — an idle DB query storm and CPU hot-spot even when projects were paused/idle. **Fix:** The outbox consumer reschedules itself from each poll outcome: an idle poll (zero events) grows the next delay by `TASK_DELETED_OUTBOX_BACKOFF_STEP_MS` toward `MAX_POLL_MS`, with ±20% jitter so the consumers de-synchronize; a poll that delivered events resets to the fast base. A paused/idle project drains its outbox and backoff alone drops the DB load. **Includes:** regression test (bounded jitter + idle growth), performance changeset, solution doc, deploy handoff script. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **Performance** - Reduced unnecessary idle polling by gradually increasing the polling interval, up to 60 seconds, with bounded timing variation. - Restored the faster 5-second polling cadence when new events, waits, or transient errors occur. - Preserved event ordering, delivery guarantees, acknowledgements, and independent behavior across concurrent consumers. - **Documentation** - Added guidance on polling behavior, deployment verification, and monitoring targets. - **Tests** - Added coverage for backoff growth, jitter limits, event bursts, concurrent consumers, error handling, retries, and clean shutdown. <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
16e63462cc |
fix: audit fallout — tunnel port, orphaned dev processes, scrollback clear
Auditing for repeats of the `pnpm dev --tunnel` bugs turned up the same mistakes elsewhere. Remote tunnels assumed 4040. ProjectEngine's Cloudflare quick tunnel hardcoded http://localhost:4040, so a dashboard on an explicit --port, a PORT override, or runDashboard's EADDRINUSE rebind published a PUBLIC tunnel to whatever else held 4040. The dashboard now records its bound port (setLocalDashboardPort, from both runDashboard and headless serve) and the tunnel reads it, keeping 4040 only as the pre-report default. register-discovery-routes already derived its port from req.socket.localPort and is untouched. Stopping the dev wrapper orphaned everything it started. It installed no signal handlers, so teardown only ran from the child's close handler: signalling the wrapper left the dev server AND its cloudflared alive — observed twice, four surviving processes each time, including a public trycloudflare URL still serving a dev server believed to be down. Ctrl-C hid it by signalling the whole process group. SessionTerminal appended scrollback instead of clearing first, though the server sends it as a separate frame precisely so the client can clear. Latent today because every reattach builds a fresh xterm; a duplicated-history bug the moment an in-place reconnect appears. And BackupManager's centralDbPath is gone: written, never read, and a leftover of the removed SQLite backup — the same class of stale artifact that onboarding was using as evidence about a Postgres install. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
0540686599 |
fix(RUFU-073): thread a per-tick task workflow-selection cache through scheduler reads (#3470)
**Problem:** Scheduler was re-reading each task's `task_workflow_selection` once per park-resolution (sweep, hold-release, moved, unpause/wake), causing a nonstop PostgreSQL query storm (~232 idx_scan/s) on idle polling — a major engine CPU hot-spot. **Fix:** Memoize the workflow selection per scheduler tick/event — thread a shared, per-event selection cache through `resolveWorkflowIrForTask` and all park-resolution handlers, then throw it away. Each task resolves its parked columns with at most one read of `task_workflow_selection` per tick. A selection write is always observed on the next event's fresh cache (never a global/infinite LRU). **Includes:** regression test asserting the once-per-tick read invariant, performance changeset + per-tick-cache solution doc, deploy+verify handoff script, and the parallel quarantine-ledger merge (origin FN-9125 + RUFU-072 OOM entries both retained). <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Performance Improvements** * Reduced repeated workflow-selection reads during scheduler ticks and related event processing. * Improved scheduler and health API responsiveness through per-operation caching and read deduplication. * Preserved existing behavior, including retry handling for failed reads and synchronous data-store support. * **Documentation** * Added architectural guidance covering workflow-selection performance, caching behavior, and verification criteria. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: Fusion <noreply@runfusion.ai> |
||
|
|
2c3a47368f |
FN-9136: Characterize PostgreSQL fork database reuse
Characterize safe per-fork PostgreSQL database reuse while documenting why the production experiment remains reverted. - add a bounded pool primitive with reset, verification, discard, and ownership fencing - cover recycling, poison handling, capacity, and reclaim namespace behavior - align PostgreSQL campaign documentation with the dead-fork leak rejection Files changed: .../test-failures/postgres-ddl-admission-bound.md | 4 +- .../suite-only-flakes-observed-register.md | 4 +- docs/testing.md | 4 +- .../core/src/__test-utils__/pg-fork-db-pool.ts | 184 +++++++++++++++++++++ .../__tests__/pg-fork-db-pool-ownership.test.ts | 36 ++++ .../core/src/__tests__/pg-fork-db-pool.test.ts | 60 +++++++ 6 files changed, 287 insertions(+), 5 deletions(-) Fusion-Task-Id: FN-9136 Fusion-Task-Lineage: 9e14e0eb-d957-4207-977e-2d913e78750f Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
1a3e68de5d |
FN-9139: add bounded PostgreSQL pre-admission measurement
Establish an inert PostgreSQL setup signal and repeatable evidence tooling without changing harness behavior. - add explicit setup participation semantics and inertness coverage - survey Vitest setup boundaries with isolated report-only fixtures - bound interleaved campaigns by process group and campaign deadline - reject missing backend samples and enable candidate diagnostics - document the rejected boundary result and successor protocol Files changed: .../test-failures/postgres-ddl-admission-bound.md | 15 ++ docs/testing.md | 10 ++ packages/core/package.json | 2 +- .../src/__test-utils__/pg-setup-participation.ts | 22 +++ .../src/__tests__/pg-setup-participation.test.ts | 21 +++ .../__tests__/vitest-setup-pg-inertness.test.ts | 10 ++ packages/core/vitest.pg.config.ts | 10 ++ .../__tests__/pg-preadmission-campaign.test.mjs | 63 +++++++ scripts/__tests__/pg-setup-boundary-probe.test.mjs | 92 ++++++++++ scripts/pg-preadmission-campaign.mjs | 194 +++++++++++++++++++++ scripts/pg-setup-boundary-probe.mjs | 182 +++++++++++++++++++ 11 files changed, 620 insertions(+), 1 deletion(-) Fusion-Task-Id: FN-9139 Fusion-Task-Lineage: 2cf8ccbf-37f9-4fdc-8e8f-326df823e1cd Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
ae507afc37 |
FN-9131: Add PostgreSQL harness budget characterization
Characterize cluster-shared PostgreSQL connection admission while keeping regressive harness wiring disabled. - add advisory-lock slot budgeting, bootstrap gating, and local allocation accounting - cover budget arithmetic, queueing, degradation, and PostgreSQL lock behavior - document loaded-lane failures and the terminal-negative lifecycle boundary - clarify that the active harness neither admits nor clamps against the experimental budget Files changed: .../test-failures/pg-harness-connection-budget.md | 21 + .../suite-only-flakes-observed-register.md | 2 + docs/testing.md | 6 + .../__tests__/pg-connection-budget.test.ts | 146 ++++++ .../src/__test-utils__/pg-connection-budget.ts | 492 +++++++++++++++++++++ .../core/src/__test-utils__/pg-test-harness.ts | 8 + .../postgres/pg-connection-budget.pg.test.ts | 36 ++ 7 files changed, 711 insertions(+) Fusion-Task-Id: FN-9131 Fusion-Task-Lineage: c83611ad-95f9-44ef-a0fd-1f182a26725d Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
f2d68939be |
FN-9138: guard same-millisecond approval audit ID collisions
Validate that lifecycle guards prevent duplicate deterministic approval audit IDs during concurrent writes. - Add database-free coverage for losing and successful guarded approval transitions. - Add PostgreSQL overlap probes for decisions, completions, and physical ID uniqueness. - Document the deterministic audit identity and lifecycle ordering guarantees. Files changed: docs/storage.md | 2 +- .../approval-request-audit-id-race.test.ts | 115 ++++++++++++++++++ .../postgres/approval-request-lifecycle.pg.test.ts | 132 ++++++++++++++++++++- .../async-stores/async-approval-request-store.ts | 10 ++ 4 files changed, 253 insertions(+), 6 deletions(-) Fusion-Task-Id: FN-9138 Fusion-Task-Lineage: ccfc084f-2cd8-4549-8a42-242167139b8d Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
fca8dd9841 |
FN-9137: Define approval request ordering semantics
Clarify and verify deterministic newest-first approval request listing across storage paths. - Document created-at descending order with request-ID descending tie resolution. - Align dedupe ordering commentary across async and legacy SQL stores. - Add PostgreSQL coverage for ties, pagination, filters, project binding, and audit isolation. Files changed: .../approval-request-list-ordering.pg.test.ts | 184 +++++++++++++++++++++ packages/core/src/agents/approval-request-store.ts | 11 ++ .../async-stores/async-approval-request-store.ts | 9 +- 3 files changed, 202 insertions(+), 2 deletions(-) Fusion-Task-Id: FN-9137 Fusion-Task-Lineage: b87867aa-fdf3-49bf-a037-7d74163a093d Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
2160f7500c |
FN-9132: order approval audits by lifecycle on timestamp ties
Ensure approval audit histories preserve lifecycle chronology when events share a timestamp. - rank tied audit events by the declared approval lifecycle before audit ID - cover tied and distinct timestamps through module and public store surfaces - document the diagnosed satellite assertion and add a patch changeset Files changed: .changeset/fn-9132-approval-audit-order.md | 7 +++ .../suite-only-flakes-observed-register.md | 27 +++++++++++ ...oval-request-audit-project-isolation.pg.test.ts | 2 +- .../postgres/approval-request-lifecycle.pg.test.ts | 53 +++++++++++++++++++++- .../async-stores/async-approval-request-store.ts | 17 +++++-- 5 files changed, 100 insertions(+), 6 deletions(-) Fusion-Task-Id: FN-9132 Fusion-Task-Lineage: 2f49e896-69bf-48c8-b813-4b1b2b72fc65 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
a453245715 |
FN-9130: Add guarded PostgreSQL DDL admission infrastructure
Document and test PostgreSQL DDL admission experiments while preserving the direct harness after measured regressions. - add advisory-slot admission with local slot accounting, degradation telemetry, and fail-closed reentrancy - cover cross-fork bounds, session loss, timeouts, spawned nested work, and cleanup invariants - make concurrent lifecycle coverage settle all creates and clean up every successful database in finally - record loaded-core measurements and retain the existing PostgreSQL worker cap Files changed: .../test-failures/postgres-ddl-admission-bound.md | 34 ++ .../suite-only-flakes-observed-register.md | 2 +- docs/testing.md | 8 + .../core/src/__test-utils__/pg-ddl-admission.ts | 351 +++++++++++++++++++++ .../core/src/__test-utils__/pg-test-harness.ts | 44 ++- .../core/src/__tests__/pg-ddl-admission.test.ts | 294 +++++++++++++++++ .../postgres/pg-harness-ddl-concurrency.pg.test.ts | 56 ++++ packages/core/vitest.pg.config.ts | 5 + 8 files changed, 778 insertions(+), 16 deletions(-) Fusion-Task-Id: FN-9130 Fusion-Task-Lineage: e28777cd-cd7c-4598-9db6-c4622cb9fa33 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
3c235ce275 |
FN-9129: fence revision attribution assertions by identity
Make settings revision attribution tests select only immutable revisions owned by each test. - Resolve reset-ordering failures by querying revision IDs from unique targets and payloads. - Prove late background system writes cannot contaminate actor assertions. - Document the loaded-lane diagnosis, evidence, and remediation. Files changed: .../suite-only-flakes-observed-register.md | 26 ++++++ .../settings-revision-attribution.test.ts | 104 ++++++++++++++++----- 2 files changed, 107 insertions(+), 23 deletions(-) Fusion-Task-Id: FN-9129 Fusion-Task-Lineage: ae336ed2-0870-400c-9599-37adb588e283 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |