Commit Graph

2838 Commits

Author SHA1 Message Date
Fusion Agent
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>
2026-08-20 03:57:23 +00:00
Fusion Agent
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>
2026-08-20 03:57:23 +00:00
Fusion Agent
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>
2026-08-20 03:57:23 +00:00
Fusion Agent
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>
2026-08-20 03:56:41 +00:00
Fusion Agent
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>
2026-08-20 03:55:39 +00:00
Fusion Agent
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>
2026-08-20 03:55:39 +00:00
Fusion Agent
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>
2026-08-20 03:55:38 +00:00
Fusion Agent
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>
2026-08-20 03:55:38 +00:00
Fusion Agent
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>
2026-08-20 03:55:38 +00:00
Fusion Agent
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>
2026-08-20 03:55:38 +00:00
Fusion Agent
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>
2026-08-20 03:55:38 +00:00
Fusion Agent
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>
2026-08-20 03:55:38 +00:00
Fusion Agent
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>
2026-08-20 03:55:38 +00:00
gsxdsm
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>
2026-08-19 19:59:04 -07:00
gsxdsm
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>
2026-08-19 19:46:35 -07:00
gsxdsm
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>
2026-08-19 18:57:33 -07:00
gsxdsm
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>
2026-08-19 18:50:27 -07:00
gsxdsm
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>
2026-08-19 18:16:49 -07:00
gsxdsm
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>
2026-08-19 10:10:39 -07:00
gsxdsm
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>
2026-08-19 08:41:14 -07:00
ischindl
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 -->
2026-08-18 22:11:47 -07:00
gsxdsm
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>
2026-08-18 21:09:03 -07:00
ischindl
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>
2026-08-18 00:10:46 -07:00
gsxdsm
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>
2026-08-16 22:06:38 -07:00
gsxdsm
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>
2026-08-16 21:09:58 -07:00
gsxdsm
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>
2026-08-16 19:29:05 -07:00
gsxdsm
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>
2026-08-16 17:07:40 -07:00
gsxdsm
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>
2026-08-16 16:19:42 -07:00
gsxdsm
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>
2026-08-16 16:04:18 -07:00
gsxdsm
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>
2026-08-16 15:57:36 -07:00
gsxdsm
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>
2026-08-16 13:47:12 -07:00
gsxdsm
1c9e4dfccd FN-9127: instrument PostgreSQL teardown diagnostics
Add opt-in evidence capture for loaded PostgreSQL teardown stalls without changing teardown behavior.

- Add bounded phase and hook watchdogs with capped pg_stat_activity snapshots.
- Instrument the shared PostgreSQL test harness and cover diagnostic behavior with focused tests.
- Document the diagnostic workflow, measured flake campaign, and corrected mission-store gate scope.

Files changed:
 .../suite-only-flakes-observed-register.md         |  12 ++
 docs/testing.md                                    |  19 ++
 .../src/__test-utils__/pg-teardown-diagnostics.ts  | 237 +++++++++++++++++++++
 .../core/src/__test-utils__/pg-test-harness.ts     | 120 ++++++++---
 .../src/__tests__/pg-teardown-diagnostics.test.ts  | 162 ++++++++++++++
 .../__tests__/postgres/mission-store.pg.test.ts    |   8 +-
 6 files changed, 526 insertions(+), 32 deletions(-)

Fusion-Task-Id: FN-9127
Fusion-Task-Lineage: 2488b7c0-f12f-4560-9a99-41aaca9d1526
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-16 12:59:23 -07:00
gsxdsm
5e5422de6e FN-9128: isolate schema-applier PostgreSQL fixtures
Use shared PostgreSQL harness fixtures to reduce repeated schema DDL while preserving migration coverage.

- replace private database lifecycle helpers with shared empty and baselined fixtures
- add regression coverage for fixture-state selection and idempotent schema application
- document PostgreSQL bootstrap guidance and the resolved flake investigation

Files changed:
 .../suite-only-flakes-observed-register.md         |  13 +-
 docs/testing.md                                    |   3 +
 .../postgres/schema-applier-isolation.test.ts      |  54 +++++++
 .../src/__tests__/postgres/schema-applier.test.ts  | 160 +++++++--------------
 4 files changed, 119 insertions(+), 111 deletions(-)

Fusion-Task-Id: FN-9128

Fusion-Task-Lineage: 036c9011-8973-4211-a77a-42bf0eb9fa5e

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-16 12:27:35 -07:00
gsxdsm
87e673baf7 feat(merge): remove the pre-commit diff-volume gate
The gate blocked approved clean-room squashes on per-file shrinkage with no
override path ("AI merge diff-volume gate blocked the approved squash").
Removed by operator decision: delete checkDiffVolume/DiffVolumeRegressionError,
the merge:diff-volume-blocked audit event, the runDiffVolumeGate call sites in
every legacy squash finalizer, the AI-merge pre-land check, and the
mergeDiffVolume* settings. File scope remains the pre-land guard; the
post-squash audit policy remains the shrinkage backstop.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 22:42:39 -07:00
gsxdsm
9f5f981e33 FN-9114: expose enabled skills and enforce agent skill reads
Make project-enabled skills available across agent sessions while preserving explicit per-agent skills as observable read-first requirements.

- resolve all enabled discovered skills without using agent metadata as an availability filter
- carry forced skill intent through PI, plugin, chat, workflow, merger, and heartbeat session paths
- report resolved and unavailable forced skills in session summaries and diagnostics
- document the updated skill model and add release notes and regression coverage

Files changed:
 .changeset/fn-9114-forced-skills.md                |   7 +
 docs/PLUGIN_AUTHORING.md                           |   2 +-
 docs/agents.md                                     |  10 +-
 docs/diagnostics.md                                |   2 +-
 docs/settings-reference.md                         |   2 +-
 packages/core/src/__tests__/skill-settings.test.ts |   9 +
 .../dashboard/src/__tests__/chat-manager.test.ts   |  26 ++-
 packages/dashboard/src/chat.ts                     |  10 +
 .../engine/src/__tests__/agent-skills-flow.test.ts |  14 +-
 .../compound-engineering-skill-resolution.test.ts  |   2 +-
 .../engine/src/__tests__/heartbeat-skills.test.ts  |  41 ++++
 .../__tests__/hermes-runtime-integration.test.ts   |  63 +++++-
 .../engine/src/__tests__/merger-skills.test.ts     |  33 ++-
 packages/engine/src/__tests__/pi.test.ts           |  35 ++-
 .../__tests__/plugin-skill-body-delivery.test.ts   |   8 +-
 .../src/__tests__/plugin-skill-integration.test.ts |   3 +-
 .../src/__tests__/session-skill-context.test.ts    |  40 ++--
 .../engine/src/__tests__/skill-resolver.test.ts    |  38 +++-
 .../__tests__/step-execute-skill-loading.test.ts   |   6 +
 packages/engine/src/agents/agent-runtime.ts        |   2 +
 .../engine/src/agents/agent-session-helpers.ts     |  88 ++++++-
 .../src/cli-runtime/session-skill-context.ts       | 117 ++++------
 packages/engine/src/cli-runtime/skill-resolver.ts  | 252 +++++++++------------
 .../engine/src/executor/execute-workflow-step.ts   |  14 ++
 packages/engine/src/executor/run-implementation.ts |   5 +
 packages/engine/src/pi.ts                          |  28 ++-
 26 files changed, 576 insertions(+), 281 deletions(-)

Fusion-Task-Id: FN-9114

Fusion-Task-Lineage: fe63ebd1-f947-40d7-be7b-c13d7f1c35c9

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-15 21:57:22 -07:00
gsxdsm
d4d13e2fa5 FN-9111: Add global Quick Add Enter-save preference
Add an operator-level setting that controls whether plain Enter saves a Quick Add task while preserving Cmd/Ctrl+Enter submission.

- add the global quickAddSubmitOnEnter setting, defaults, settings UI, and app context
- update Quick Add keyboard handling with multiline and duplicate/in-flight safeguards
- add focused settings and keyboard regression coverage, localization, documentation, and a release changeset

Files changed:
 .changeset/fn-9111-quick-add-enter.md              |   7 ++
 docs/dashboard-guide.md                            |   2 +
 docs/settings-reference.md                         |   1 +
 .../core/src/__tests__/settings-defaults.test.ts   |  10 ++
 packages/core/src/config/settings-schema.ts        |   5 +
 packages/core/src/types/settings/settings-scope.ts |   5 +
 packages/dashboard/app/App.tsx                     |   4 +
 .../dashboard/app/components/QuickEntryBox.tsx     |  24 ++++-
 .../QuickEntryBox.submit-on-enter.test.tsx         | 118 +++++++++++++++++++++
 .../__tests__/SettingsModal.general.test.tsx       |  18 ++++
 .../app/components/settings/save-split.ts          |   1 +
 .../sections/GlobalGeneralSection.search.ts        |   9 ++
 .../settings/sections/GlobalGeneralSection.tsx     |  10 ++
 .../settings-default-descriptions.test.tsx         |   1 +
 .../__tests__/useQuickAddSubmitOnEnter.test.tsx    |  24 +++++
 packages/dashboard/app/hooks/useAppSettings.ts     |   4 +
 .../app/hooks/useQuickAddSubmitOnEnter.ts          |  21 ++++
 packages/i18n/locales/en/app.json                  |   2 +
 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               |   4 +-
 packages/i18n/locales/zh-CN/app.json               |   4 +-
 packages/i18n/locales/zh-TW/app.json               |   4 +-
 packages/i18n/src/resources.d.ts                   |   4 +-
 25 files changed, 284 insertions(+), 10 deletions(-)

Fusion-Task-Id: FN-9111

Fusion-Task-Lineage: 246153a8-5127-48df-838c-d9b60920cd91

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-15 21:24:25 -07:00
gsxdsm
0935e27902 test(core): fast harness reset, sqlite-migrator template clones, top-3 harness adoptions
Slow-test trim, OPTIMIZE tier (harness owner). Profiling showed 163ms
of the shared harness's 169ms per-test beforeEach was one TRUNCATE over
~110 tables (per-table catalog/fsync constants, row-independent). The
reset is now a single DO block: transaction-local
session_replication_role=replica, DELETE only from non-empty tables,
and sequence resets reproducing RESTART IDENTITY exactly — 169ms → 10ms
per test across every harness file, with the legacy TRUNCATE retained
as an automatic error fallback for non-superuser roles. sqlite-migrator
(the live SQLite→PG upgrade path; all 43 tests kept incl.
VAL-MIGRATE-001..006) now provisions targets from a golden-template
clone via new createBaselinedPgTestDatabase/createEmptyPgTestDatabase
exports — the dry-run test keeps a pristine empty DB so its
no-schemas-left-behind assertions stay meaningful — 148.8s → ~26s.
taskstore-lifecycle, data-layer, and taskstore-remaining migrate onto
the shared harness with byte-identical test bodies (187s → ~11s
combined); data-layer's close() test closes a private layer so the
shared pool survives. Seeding hoists were measured and deliberately
skipped: the harness fix already exceeded their projected savings and a
beforeAll seed would weaken the clean-DB-per-test contract.
Verified: 287 tests green across the touched files plus untouched
harness consumers (schema-applier 80/80, mission-store 62/62).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 20:58:35 -07:00
gsxdsm
ea90eeed1c test(core): migrate 12 hand-rolled PG test files onto the shared harness
Slow-test trim, OPTIMIZE tier (mechanical sweep). These files each
created and baselined a fresh database per test (~3-4.6s/test); they now
use the shared golden-template harness (TRUNCATE per test) or, where a
private database is genuinely required (postgres-health drift/VACUUM
subjects, allocator-cross-project RLS connection sets), a per-test
template clone instead of raw DDL. Zero assertion lines changed
(verified), identical test counts, 110/110 green. Deliberately left
alone: startup-factory-integration and embedded-lifecycle (own-database
boot IS the subject) and schema-applier (real DDL is the subject).
Measured: ~195s serial → ~30s for these files.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 20:55:11 -07:00
gsxdsm
f1a8b271bd test(core): consolidate satellite-store and custom-v1 dispatch suites onto the shared PG harness
Slow-test trim, CONDENSE tier. The three satellite-store files each
hand-rolled CREATE DATABASE + schema baseline per test (38 database
creations, ~75s serial); their describes now live verbatim — every it
name, assertion, and FNXC provenance comment preserved, 38/38 tests —
inside one shared-harness file with a single boot. The 3-test
custom-v1-workflow-dispatch characterization (13s alone) moved into the
adjacent no-selection-default-workflow-move harness file. Measured:
~92s serial → ~8s for the same coverage.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 20:50:38 -07:00
gsxdsm
d9fcabfaef FN-9112: default Memory Keeper heartbeats to disabled
Default built-in Memory Keeper agents to opt-in heartbeat scheduling while retaining operator choices.

- Provision new Memory Keeper agents with heartbeat disabled and hourly scheduling preconfigured.
- Preserve explicit heartbeat settings during startup convergence and avoid no-op rewrites.
- Add provisioning coverage, operator documentation, and a release changeset.

Files changed:
 .../fn-9112-memory-keeper-heartbeat-default-off.md |  7 +++
 docs/agents.md                                     |  2 +-
 .../__tests__/memory-agent-provisioning.test.ts    | 59 +++++++++++++++++++---
 packages/core/src/agents/agent-store.ts            | 34 ++++++++++---
 4 files changed, 86 insertions(+), 16 deletions(-)

Fusion-Task-Id: FN-9112

Fusion-Task-Lineage: 49edc6d9-3d9b-412f-91a5-c26f4a26a662

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-15 20:17:07 -07:00
gsxdsm
872d260ab8 FN-9104: Add mailbox recommendation task actions
Add guarded task creation directly to completed-task recommendation notices.

- Render live recommendation details and task actions in mailbox detail and conversation surfaces.
- Prevent duplicate creates, expose existing task links, and support unavailable and retry states.
- Cover desktop and mobile surfaces, update notice copy and documentation, and add a release changeset.

Files changed:
 .../fn-9104-mailbox-recommendation-create.md       |   7 ++
 docs/dashboard-guide.md                            |   2 +-
 .../__tests__/task-recommendation-notice.test.ts   |   7 ++
 packages/core/src/task-recommendation-notice.ts    |   9 +-
 packages/dashboard/app/components/MailboxModal.tsx |   3 +
 .../app/components/MailboxTaskRecommendations.css  |   9 ++
 .../app/components/MailboxTaskRecommendations.tsx  | 127 +++++++++++++++++++++
 packages/dashboard/app/components/MailboxView.tsx  |   3 +
 .../MailboxTaskRecommendations.surfaces.test.tsx   |  77 +++++++++++++
 .../__tests__/MailboxTaskRecommendations.test.tsx  |  72 ++++++++++++
 10 files changed, 311 insertions(+), 5 deletions(-)

Fusion-Task-Id: FN-9104

Fusion-Task-Lineage: 94f53bfe-f57f-42ee-970e-56658129c1e0

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-15 17:36:32 -07:00
gsxdsm
374ae08d56 test(engine): repoint source-scan contracts to the peeled module layout
Full-suite repair, engine source-scan cluster. The package code
organization waves moved ~30 engine modules into subdirectories
(plugins/, execution/, scheduling/, healing/, worktree/, executor/
peels); the log-severity manifest, prompt carve-out, emit-surface,
failure-lane, and worktree-invariant scanners now read the moved
locations, verified per file via git log --follow. Two scans caught
real drift rather than moves: the lifecycle census had 12 unexamined
column guards (resolved with DELIBERATE-LITERAL markers for the mailbox
archived tab, the FN-9059 lease-owner terminality check, and the FN-9056
legacy done fallback — baseline re-recorded with zero absorbed debt),
and planning-claim gained a genuine second writer in self-healing's
FN-8998 transport-failure recovery, admitted to the allowlist with its
CAS-guarded justification. 9 files / 119 tests green.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 15:31:58 -07:00
gsxdsm
f11bb2e899 fix(core): restore title-redirect planning hold and stamp workflow-create partition
Full-suite repair, core cluster. Two real product regressions caught by
the red tests: (1) the wave-18 refactor dropped the task.title argument
FN-8840 added to isDuplicateRedirectOnlyPrompt inside
isTaskAwaitingPlanning, so a title-only DUPLICATE:<ID> redirect read as
executable Ready instead of awaiting planning; (2) FN-8998 scoped every
workflow-definition read by layer.projectId but left the INSERT on the
session-GUC default, so a JS-bound layer created workflow rows it could
never read back — the insert now stamps the bound projectId like the
FN-8997 workflowSteps insert. Test-lag fixes: analytics renamed-lanes
harnesses now bind projectId 'p1' to match FN-8957/FN-8998 scoping,
project-ownership-runtime-scope replaces a hardcoded expired approval
date, schema-applier learns migrations 0059/0060 (115 project tables,
baseline 0060), and builtin-workflow-settings-triage learns FN-8932's
memoryConsolidationEnabled with position-independent lookups.
Verified: 10 files / 128 tests green, core typecheck clean.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 15:22:33 -07:00
gsxdsm
5a351b2454 test: repoint worktree-capacity audit entries and fix core subpath alias
Full-suite repair, mechanical cluster: the wave-18 executor peel (#3317)
moved the audited child-spawn bound to executor/create-spawn-agent-tool.ts,
the admission-reason unification moved the binding-gate discriminator into
concurrency/concurrency.ts, and the FN-9059-era merge-claim and direct
workflow-continuation defers read the shared ceiling through
resolveActiveTaskCapacityLimit (OFF-mode aware) — all audited with reasons,
none is a new raw gate. Core's vitest config now aliases the
@fusion/core/mcp-builtin-servers subpath before the bare alias (mirroring
engine's config) so core PG tests that exercise engine's mcp-resolution
resolve it from source.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 15:07:24 -07:00
gsxdsm
6401fdea89 FN-9101: normalize Anthropic auth provider selections
Route Anthropic subscription and API-key auth selections through the built-in execution provider.

- Add a shared provider-ID normalization helper and export it from core.
- Normalize persisted model selections during session creation and registry lookup.
- Hide credential-only Anthropic provider rows from the dashboard model catalog.
- Add regression coverage and a patch changeset for subscription-backed execution.

Files changed:
 ...9101-anthropic-subscription-model-resolution.md |  7 ++++
 .../__tests__/anthropic-execution-provider.test.ts | 18 ++++++++
 packages/core/src/ai/anthropic-models.ts           | 13 ++++++
 packages/core/src/index.gate.ts                    |  2 +
 packages/core/src/index.ts                         |  2 +
 .../dashboard/src/__tests__/routes-auth.test.ts    |  2 +
 .../dashboard/src/routes/register-model-routes.ts  | 14 ++++---
 ...-session-helpers-anthropic-subscription.test.ts | 49 ++++++++++++++++++++++
 .../src/__tests__/pi-create-fn-agent.test.ts       | 25 +++++++++++
 .../engine/src/agents/agent-session-helpers.ts     | 26 ++++++++----
 packages/engine/src/pi.ts                          | 14 +++++--
 11 files changed, 154 insertions(+), 18 deletions(-)

Fusion-Task-Id: FN-9101

Fusion-Task-Lineage: 72e70e67-b291-44fc-ba3f-12b54d06eba9

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-15 14:19:23 -07:00
gsxdsm
7ed1c39a67 FN-9102: fix active runtime segment accounting
Prevent reopened tasks from double-counting closed execution segments while preserving pre-execution planning time.

- Clear the live execution anchor whenever a WIP segment is banked.
- Clamp legacy poisoned runtime values with separate execution and combined-work wall-clock ceilings.
- Cover cards, detail statistics, core totals, and planner metrics across WIP round trips and historical rows.
- Add a patch changeset for the published Fusion package.

Files changed:
 .changeset/fn-9102-task-runtime-double-count.md    |  7 ++
 .../src/__tests__/reopen-semantics-by-role.test.ts | 95 ++++++++++++++--------
 packages/core/src/tasks/task-timing.ts             | 20 ++++-
 .../core/src/workflows/default-workflow-hooks.ts   | 14 +++-
 .../app/components/__tests__/TaskCard.test.tsx     | 27 ++++++
 .../__tests__/TaskTokenStatsPanel.test.tsx         | 27 ++++++
 .../app/utils/__tests__/taskTiming.test.ts         | 40 +++++++++
 packages/dashboard/app/utils/taskTiming.ts         | 28 +++++--
 .../__tests__/task-planner-chat-metrics.test.ts    | 28 +++++++
 .../dashboard/src/task-planner-chat-metrics.ts     | 22 ++++-
 10 files changed, 260 insertions(+), 48 deletions(-)

Fusion-Task-Id: FN-9102

Fusion-Task-Lineage: 3b42e81f-4e11-4232-80f6-052f51b83f1c

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-15 13:39:24 -07:00
gsxdsm
9fa8b386ee FN-9059: add durable workspace coordination leases
Prevent overlapping multi-node workspace operations and duplicate repository landings.

- Add durable coordination leases, fence tokens, and land-intent persistence.
- Fence workspace merge dispatches and repository publication across engine nodes.
- Reconcile expired coordination state safely and cover lease lifecycle behavior.

Files changed:
 .../fn-9059-workspace-durable-coordination.md      |   7 +
 AGENTS.md                                          |   1 +
 docs/architecture.md                               |   2 +
 docs/multi-project.md                              |  48 ++++
 .../workspace-coordination-leases.pg.test.ts       |  56 ++++
 .../__tests__/postgres/workspace-leases.pg.test.ts | 112 ++++++++
 packages/core/src/engine-node-identity.ts          |  22 ++
 packages/core/src/index.ts                         |   3 +
 .../0060_fn_9059_workspace_coordination_leases.sql |  10 +
 packages/core/src/postgres/schema-applier.ts       |  13 +-
 packages/core/src/postgres/schema/project.ts       |  31 ++
 packages/core/src/store.ts                         |  18 ++
 packages/core/src/task-store/workspace-leases.ts   | 261 +++++++++++++++++
 packages/core/src/tasks/workspace-lease-types.ts   |  24 ++
 .../engine/src/__tests__/project-engine.test.ts    |  69 ++++-
 .../src/__tests__/self-healing-workspace.test.ts   |  63 ++++-
 .../workspace-durable-coordination.test.ts         |  49 ++++
 .../src/__tests__/workspace-merger-lease.test.ts   | 312 ++++++++++++++++++++-
 packages/engine/src/merge/merger-ai.ts             | 277 ++++++++++++++++--
 packages/engine/src/merge/workspace-fence-ref.ts   | 171 +++++++++++
 packages/engine/src/project-engine.ts              | 175 ++++++++++--
 packages/engine/src/runtimes/in-process-runtime.ts |   4 +-
 packages/engine/src/self-healing.ts                | 191 ++++++++++++-
 packages/engine/src/util/run-audit.ts              |   2 +
 .../engine/src/worktree/worktree-acquisition.ts    |  43 ++-
 25 files changed, 1901 insertions(+), 63 deletions(-)

Fusion-Task-Id: FN-9059

Fusion-Task-Lineage: e51e3f54-69ee-4337-a218-4895d87474aa

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-15 03:22:13 -07:00
gsxdsm
2f99a8fb59 FN-9052: add atomic workspace worktree entry merges
Serialize per-repository workspace worktree state updates across concurrent Fusion processes.

- Add advisory-locked store-level per-entry workspace worktree merges.
- Route acquisition, landing, failure, and recovery updates through atomic merges.
- Cover concurrent sibling repository writes and document the invariant.

Files changed:
 .../fn-9052-workspace-worktree-atomic-merge.md     |  7 ++
 docs/architecture.md                               |  1 +
 ...workspace-worktrees-concurrent-merge.pg.test.ts | 90 ++++++++++++++++++++++
 packages/core/src/store.ts                         | 10 ++-
 packages/core/src/task-store/task-mutation-ops.ts  | 52 ++++++++++++-
 packages/core/src/types.ts                         |  2 +
 packages/core/src/types/task/task-core.ts          | 17 +++-
 .../merge-orphan-body-durable-writes.test.ts       |  8 ++
 .../src/__tests__/self-healing-workspace.test.ts   | 49 +++++++++---
 .../src/__tests__/workspace-merger-lease.test.ts   | 12 +++
 .../engine/src/__tests__/workspace-merger.test.ts  | 12 +--
 .../worktree-acquisition-workspace.test.ts         | 82 +++++++++++++++++++-
 packages/engine/src/merge/merger-ai.ts             | 21 ++---
 .../engine/src/merge/workspace-land-failure.ts     | 19 +++--
 packages/engine/src/self-healing.ts                | 15 +++-
 .../engine/src/worktree/worktree-acquisition.ts    | 25 +++---
 16 files changed, 370 insertions(+), 52 deletions(-)

Fusion-Task-Id: FN-9052

Fusion-Task-Lineage: 2168085a-74a7-4a0f-954e-50db99eb98b7

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-15 01:14:43 -07:00
gsxdsm
7bb7d450e6 FN-9062: surface workspace repository land status
Expose per-repository workspace landing progress and failures in Task Detail.

- Persist display-only repository land failure breadcrumbs during merge and recovery
- Render landed, pending, and failed repository statuses with partial-land detail
- Document the workspace status behavior and add coverage for UI and recovery paths

Files changed:
 .changeset/fn-9062-workspace-land-status.md        |   7 ++
 docs/dashboard-guide.md                            |   4 +
 packages/core/src/types/task/task-core.ts          |  11 ++-
 .../dashboard/app/components/TaskDetailModal.css   |  33 +++++++
 .../app/components/WorkspaceWorktreesSummary.tsx   | 106 ++++++++-------------
 .../__tests__/WorkspaceWorktreesSummary.test.tsx   |  46 ++++++++-
 .../src/__tests__/self-healing-workspace.test.ts   |  19 ++++
 .../engine/src/__tests__/workspace-merger.test.ts  |   6 ++
 packages/engine/src/merge/merger-ai.ts             |   7 +-
 .../engine/src/merge/workspace-land-failure.ts     |  21 ++++
 packages/engine/src/self-healing.ts                |  16 ++++
 11 files changed, 208 insertions(+), 68 deletions(-)

Fusion-Task-Id: FN-9062

Fusion-Task-Lineage: 8c12b9f9-f6ed-4766-a6f1-49cdf9ea8926

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-15 00:48:23 -07:00
gsxdsm
c7779e44ac FN-9055: guard archive disposal of live workspace worktrees
Prevent archive cleanup from removing worktrees that still belong to live tasks.

- Add shared archive liveness evaluation and transactional refusal guards.
- Require CLI and extension archive operations to refuse live tasks unless a human uses --force.
- Protect baseline archive worktree disposal and cover CLI, core, and engine paths with tests.

Files changed:
 .changeset/fn-9055-archive-live-worktree-guard.md  |  7 ++
 docs/cli-reference.md                              |  4 +-
 docs/task-management.md                            |  4 +-
 .../extension-task-archive-live-guard.test.ts      | 82 +++++++++++++++++++
 packages/cli/src/bin.ts                            |  6 +-
 packages/cli/src/commands/__tests__/task.test.ts   | 66 ++++++++++++++-
 packages/cli/src/commands/task.ts                  | 49 +++++++++---
 packages/cli/src/extension.ts                      | 25 ++++--
 .../src/__tests__/archive-live-task-guard.test.ts  | 70 ++++++++++++++++
 .../postgres/archive-live-task-fence.pg.test.ts    | 69 ++++++++++++++++
 .../src/__tests__/task-archive-liveness.test.ts    | 19 +++++
 packages/core/src/index.ts                         | 10 +++
 packages/core/src/store.ts                         |  4 +-
 .../core/src/task-store/archive-lifecycle-2.ts     | 27 +++++--
 packages/core/src/task-store/archive-lifecycle.ts  | 20 ++---
 .../src/task-store/async/async-archive-lineage.ts  | 17 +++-
 packages/core/src/tasks/task-archive-liveness.ts   | 56 +++++++++++++
 ...chive-baseline-disposer-live-task-guard.test.ts | 93 ++++++++++++++++++++++
 .../healing/archive-worktree-disposer-install.ts   | 15 +++-
 19 files changed, 592 insertions(+), 51 deletions(-)

Fusion-Task-Id: FN-9055

Fusion-Task-Lineage: 08644626-cc61-4854-abb9-5b415ddc9491

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-15 00:35:12 -07:00