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
gsxdsm
f57661a013
chore(release): v0.77.0-beta.3
...
Version bump via changesets.
2026-08-18 22:16:44 -07:00
dependabot[bot]
8b0b88ae95
Bump tar from 7.5.13 to 7.5.22 ( #3464 )
...
Bumps [tar](https://github.com/isaacs/node-tar ) from 7.5.13 to 7.5.22.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="2a22bfc5d3 "><code>2a22bfc</code></a>
7.5.22</li>
<li><a
href="df1cd8dc09 "><code>df1cd8d</code></a>
Allow transform to be falsey</li>
<li><a
href="0cd9cc3c58 "><code>0cd9cc3</code></a>
7.5.21</li>
<li><a
href="631ae59121 "><code>631ae59</code></a>
list: prevent unbounded recursion</li>
<li><a
href="ebbb720941 "><code>ebbb720</code></a>
7.5.20</li>
<li><a
href="2f271963a7 "><code>2f27196</code></a>
fix: fully disable and dispose of unzip when aborting parser</li>
<li><a
href="be440da64e "><code>be440da</code></a>
7.5.19</li>
<li><a
href="2812e93386 "><code>2812e93</code></a>
add maxDecompressionRatio guard against explosive decompression</li>
<li><a
href="9ecd4d2956 "><code>9ecd4d2</code></a>
7.5.18</li>
<li><a
href="9e78bf058b "><code>9e78bf0</code></a>
refuse to let header size be less than 0</li>
<li>Additional commits viewable in <a
href="https://github.com/isaacs/node-tar/compare/v7.5.13...v7.5.22 ">compare
view</a></li>
</ul>
</details>
<br />
[](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores )
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
<details>
<summary>Dependabot commands and options</summary>
<br />
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
</details>
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-18 22:12:17 -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
gsxdsm
86950400c9
chore(release): v0.77.0-beta.2
...
Version bump via changesets.
2026-08-18 00:22:21 -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
7380be699c
chore(release): v0.77.0-beta.1
...
Version bump via changesets.
2026-08-16 08:39:57 -07:00
gsxdsm
dd1e0f22e1
chore(release): v0.77.0-beta.0
...
Version bump via changesets.
2026-08-16 00:32:50 -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