gsxdsm
64413f4e8d
chore(release): v0.75.1
...
Version bump via changesets.
2026-08-06 00:18:07 -07:00
gsxdsm
cb500eeb4c
chore(release): v0.75.1-beta.2
...
Version bump via changesets.
2026-08-05 18:19:27 -07:00
gsxdsm
4f4aef7173
FN-8811: preserve explicit shared-member review holds
...
Keep shared branch-group integration moving unless an operator explicitly holds the task.
- Track auto-merge provenance and distinguish explicit user holds from inherited mission policy.
- Preserve manual holds across workflow recovery, merge coordination, API updates, and dashboard status.
- Add regression coverage, document the behavior, and quarantine the observed flaky test.
Files changed:
.changeset/fn-8811-shared-member-review-hold.md | 7 ++
docs/architecture.md | 4 +-
docs/dashboard-guide.md | 1 +
.../mission-store.sync-auto-merge.test.ts | 7 +-
.../__tests__/postgres/mission-store.pg.test.ts | 1 +
.../__tests__/postgres/store-movement.pg.test.ts | 20 ++++
packages/core/src/__tests__/task-merge.test.ts | 14 +++
.../core/src/async-stores/async-mission-store.ts | 6 +-
packages/core/src/index.gate.ts | 1 +
packages/core/src/index.ts | 1 +
packages/core/src/merge/task-merge.ts | 20 +++-
packages/core/src/missions/mission-store.ts | 6 +-
packages/core/src/task-store/serialization.ts | 2 +-
packages/core/src/task-store/task-creation.ts | 8 +-
packages/core/src/types/task/task-core.ts | 12 ++-
.../components/__tests__/TaskDetailModal.test.tsx | 63 ++++++++++++
.../dashboard/src/__tests__/routes-tasks.test.ts | 47 +++++++++
.../src/routes/register-task-workflow-routes.ts | 15 ++-
...cutor-live-branch-group-auto-merge-hold.test.ts | 87 +++++++++++++++++
.../src/__tests__/group-merge-coordinator.test.ts | 99 ++++++++++++++++++-
.../engine/src/__tests__/project-engine.test.ts | 57 ++++++++++-
.../self-healing-paused-abort-recovery.test.ts | 52 +++++++++-
packages/engine/src/__tests__/self-healing.test.ts | 106 +++++++++++++++++++++
.../workflow-graph-executor-handlers.test.ts | 23 +++++
packages/engine/src/executor.ts | 37 ++++++-
packages/engine/src/project-engine.ts | 25 +++--
packages/engine/src/self-healing.ts | 71 ++++++++++++--
.../src/workflow-node-runners/merge-runner.ts | 24 ++++-
.../src/workflows/workflow-graph-executor.ts | 4 +
.../src/workflows/workflow-graph-task-runner.ts | 6 ++
.../engine/src/workflows/workflow-node-handlers.ts | 5 +-
packages/engine/vitest.config.ts | 11 ++-
scripts/lib/test-quarantine.json | 5 +
33 files changed, 789 insertions(+), 58 deletions(-)
Fusion-Task-Id: FN-8811
Fusion-Task-Lineage: 5c1609bf-3132-4988-a254-fedec6c0e33d
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-05 17:39:15 -07:00
gsxdsm
1e4c7faf68
FN-8812: fix workspace merge retry timer cleanup
...
Ensure workspace contention retries are canceled when the project engine stops.
- Track workspace busy re-enqueue timers separately from other merge timers
- Clear pending workspace retry callbacks during engine shutdown
- Strengthen retry ladder and timer cleanup coverage
Files changed:
.changeset/workspace-busy-timer-cleanup.md | 7 +++
.../engine/src/__tests__/project-engine.test.ts | 66 +++++++++++-----------
packages/engine/src/project-engine.ts | 23 +++++++-
3 files changed, 59 insertions(+), 37 deletions(-)
Fusion-Task-Id: FN-8812
Fusion-Task-Lineage: dd4c9581-8738-4082-8d6b-d91d4c463a5a
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-05 17:10:55 -07:00
gsxdsm
1db7adcdb0
FN-8809: preserve agent principals for secret approvals
...
Keep prompt-gated secret approvals bound to their calling chat-agent session.
- Resolve extension secret callers through async session identity context.
- Give anonymous engine sessions unique principals and preserve them across tool invocations.
- Surface actionable approval decision errors in the mailbox and cover approval flows.
Files changed:
.changeset/fn-8809-secrets-chat-approval.md | 7 +
.../__tests__/extension-permission-gates.test.ts | 257 ++++++++++++++++++++-
packages/cli/src/extension.ts | 96 +++++---
.../__tests__/session-identity-registry.test.ts | 27 +++
packages/core/src/index.ts | 4 +-
packages/core/src/session-identity-registry.ts | 47 +++-
packages/dashboard/app/components/MailboxView.tsx | 11 +-
.../app/components/__tests__/MailboxView.test.tsx | 49 ++++
.../dashboard/src/__tests__/chat-manager.test.ts | 28 ++-
.../__tests__/register-approval-routes.test.ts | 22 ++
.../src/__tests__/pi-create-fn-agent.test.ts | 210 ++++++++++++++++-
packages/engine/src/pi.ts | 34 ++-
12 files changed, 748 insertions(+), 44 deletions(-)
Fusion-Task-Id: FN-8809
Fusion-Task-Lineage: 2e070f78-7215-4401-bcf2-6fa25fa27066
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-05 16:46:53 -07:00
gsxdsm
00fdbe1bef
FN-8808: bind dashboard secrets to selected project
...
Bind dashboard secret operations to the explicitly selected project.
- Include project identity in secrets and sync-passphrase requests.
- Reject missing project IDs before fallback project-store resolution.
- Prevent stale cross-project UI responses and document recovery guidance.
Files changed:
.changeset/fn-8808-secrets-project-binding.md | 7 +
docs/secrets.md | 6 +
packages/dashboard/app/components/SecretsView.tsx | 134 ++++++++++++++-----
.../dashboard/app/components/SettingsModal.tsx | 2 +-
.../__tests__/SecretsView.mobile.test.tsx | 9 ++
.../app/components/__tests__/SecretsView.test.tsx | 137 ++++++++++++++++++++
.../__tests__/SettingsModal.mcp.test.tsx | 69 +++++++++-
.../__tests__/SettingsModal.test-harness.tsx | 8 +-
.../app/components/dashboard/MainContent.tsx | 2 +-
.../app/components/overflowViewRegistry.tsx | 2 +-
.../settings/sections/McpServersCard.tsx | 58 +++++++--
.../settings/sections/SecretsSection.tsx | 5 +-
.../__tests__/register-secrets-routes.test.ts | 142 +++++++++++++++++++--
.../src/routes/register-secrets-routes.ts | 53 +++++---
14 files changed, 551 insertions(+), 83 deletions(-)
Fusion-Task-Id: FN-8808
Fusion-Task-Lineage: dd224dbe-46a5-49a6-b6e9-5d5bbe4e742e
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-05 15:41:56 -07:00
gsxdsm
2a0827835d
FN-8810: wire secrets stores into runtime worktrees
...
Wire project secrets stores into runtime and dashboard heartbeat worktree acquisition.
- Inject the project secrets store into executor and heartbeat monitors.
- Cover in-process, UI-only dashboard, and secrets-env worktree materialization paths.
- Add a patch changeset for restored secrets-env files.
Files changed:
.changeset/fn-8810-secrets-env-runtime-wiring.md | 7 ++
.../commands/__tests__/dashboard-supervise.test.ts | 28 ++++-
packages/cli/src/commands/dashboard.ts | 38 ++++++-
.../src/__tests__/in-process-runtime.pg.test.ts | 121 ++++++++++++++++++++-
.../src/__tests__/secrets-env-writer.test.ts | 35 ++++++
.../worktree-acquisition-secrets-env.test.ts | 4 +-
packages/engine/src/runtimes/in-process-runtime.ts | 9 ++
7 files changed, 233 insertions(+), 9 deletions(-)
Fusion-Task-Id: FN-8810
Fusion-Task-Lineage: a67c3fbe-7744-4898-8a56-8739caa04479
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-05 15:23:08 -07:00
gsxdsm
6ccde2b0d8
FN-8806: stabilize task title expansion during resize
...
Keep expanded task titles stable while their container resizes.
- Measure persistent title text separately from the interactive expansion control.
- Fence hidden pop-out resize observers and preserve expansion state across detail hosts.
- Add rendering and browser coverage for resize-driven title behavior.
Files changed:
.changeset/fn-8806-task-title-flicker.md | 7 +
.../dashboard/app/components/TaskDetailModal.css | 16 +-
.../dashboard/app/components/TaskDetailModal.tsx | 37 +--
.../__tests__/TaskDetailModal.rendering.test.tsx | 42 +++-
.../app/task-modal-touch-resize-e2e-fixture.tsx | 149 +++++++++++-
.../task-modal-touch-resize-browser.test.ts | 267 ++++++++++++++++++++-
6 files changed, 485 insertions(+), 33 deletions(-)
Fusion-Task-Id: FN-8806
Fusion-Task-Lineage: 9519a5dc-ae6d-43e1-a0da-7ac963f27d7f
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-05 13:02:48 -07:00
gsxdsm
09e4808d7e
FN-8807: revalidate dashboard cards after browser resume
...
Refresh dashboard task data when browser resume signals arrive, while retaining live SSE mutations across delayed snapshots and cache remounts.
- Revalidate on focus, pageshow, visibility, and SSE reconnect with overlapping-request deduplication.
- Reconcile live task creates and deletes synchronously before caching or pruning mutation fences.
- Cover resume triggers, instrumentation, and cache/remount membership races.
Files changed:
.../fn-8807-dashboard-resume-revalidation.md | 7 +
.../useTasks.resume-instrumentation.test.ts | 41 +++++
.../dashboard/app/hooks/__tests__/useTasks.test.ts | 65 ++++++++
packages/dashboard/app/hooks/useTasks.ts | 185 +++++++++++++++------
.../dashboard/app/utils/resumeInstrumentation.ts | 6 +
5 files changed, 256 insertions(+), 48 deletions(-)
Fusion-Task-Id: FN-8807
Fusion-Task-Lineage: df8f097e-5067-4fcc-8023-92a2ea329b40
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-05 11:39:23 -07:00
gsxdsm
4324762d9a
FN-8805: preserve expanded task titles on resize
...
Keep task-detail title expansion stable across resize observers and task changes.
- Measure overflow only in the collapsed title layout.
- Preserve explicit expand/collapse selection through stale resize callbacks.
- Cover modal and embedded narrow-title behavior with regression tests.
- Add a patch changeset for the title stability fix.
Files changed:
.changeset/fn-8805-stable-task-title.md | 7 ++
packages/dashboard/app/components/TaskDetailModal.tsx | 39 +++++---
packages/dashboard/app/components/__tests__/TaskDetailModal.rendering.test.tsx | 110 +++++++++++++++++++++
3 files changed, 141 insertions(+), 15 deletions(-)
Fusion-Task-Id: FN-8805
Fusion-Task-Lineage: 66177622-78e8-4378-88f6-c0979a96afd2
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-05 09:58:45 -07:00
gsxdsm
8120c07b6a
FN-8804: fix TaskDetailModal optimistic status assertions
...
Scope optimistic-opening runtime-status assertions to the execution statistics panel.
- Add a helper that verifies the scoped runtime row and lifecycle badge.
- Preserve coverage for duplicate Stats panels without ambiguous DOM queries.
Files changed:
.../__tests__/TaskDetailModal.rendering.test.tsx | 23 +++++++++++++++++++---
1 file changed, 20 insertions(+), 3 deletions(-)
Fusion-Task-Id: FN-8804
Fusion-Task-Lineage: b5573222-5d74-462a-b428-6eca687d68f3
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-05 01:01:32 -07:00
gsxdsm
907c051844
FN-8803: fix TaskDetailModal prompt refresh coverage
...
Align TaskDetailModal refresh tests with the narrow prompt API.
- Exercise visible plan refreshes through fetchTaskPrompt
- Reset prompt and detail API mocks to preserve Promise contracts
Files changed:
.../TaskDetailModal.definition-actions.test.tsx | 57 +++++++++++++---------
.../__tests__/TaskDetailModal.test-helpers.ts | 19 +++++---
2 files changed, 47 insertions(+), 29 deletions(-)
Fusion-Task-Id: FN-8803
Fusion-Task-Lineage: e2539c24-377b-48bf-81d1-80206da7071c
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-05 00:55:15 -07:00
gsxdsm
fef3a6daf7
FN-8802: contain task cards in narrow layouts
...
Keep task-card content within its host at narrow desktop and mobile widths.
- Make task-card roots shrinkable, border-box flex items with bounded width
- Cover minimal and populated narrow-card layouts, including badges and controls
Files changed:
packages/dashboard/app/components/TaskCard.css | 7 ++++
.../__tests__/TaskCard.badge-wrap.test.tsx | 39 ++++++++++++++++++++++
2 files changed, 46 insertions(+)
Fusion-Task-Id: FN-8802
Fusion-Task-Lineage: 9b0d58ce-4c48-4f3a-89fc-2ef3d603b47e
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-05 00:48:47 -07:00
gsxdsm
59cfa47b1c
FN-8801: refresh task state after lifecycle actions
...
Refresh dashboard task views immediately when lifecycle mutations are confirmed.
- Centralize confirmed task reconciliation across pause and unpause actions
- Propagate lifecycle handlers through dashboard detail and dock hosts
- Add state synchronization regression coverage and a patch changeset
Files changed:
.changeset/fn-8801-immediate-unpause-state.md | 7 ++
packages/dashboard/app/App.tsx | 6 +-
packages/dashboard/app/components/AppModals.tsx | 4 ++
packages/dashboard/app/components/ListView.tsx | 2 +
.../dashboard/app/components/TaskDetailModal.tsx | 26 +++++---
.../TaskDetailModal.definition-actions.test.tsx | 76 +++++++++++++++------
.../app/components/dashboard/MainContent.tsx | 2 +
.../app/components/useRightDockController.tsx | 4 ++
.../dashboard/app/hooks/__tests__/useTasks.test.ts | 57 ++++++++++++++++
packages/dashboard/app/hooks/useTasks.ts | 77 +++++++++-------------
10 files changed, 183 insertions(+), 78 deletions(-)
Fusion-Task-Id: FN-8801
Fusion-Task-Lineage: 2ab80d4d-8914-43c5-8ebb-281d31276b61
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-05 00:34:06 -07:00
gsxdsm
68e964383f
chore(release): v0.75.1-beta.1
...
Version bump via changesets.
2026-08-05 00:12:09 -07:00
gsxdsm
2dcb072472
fix(FN-8795): mark structured findings release as patch
2026-08-05 00:09:42 -07:00
gsxdsm
ec10411c4c
FN-8795: persist structured workflow review findings
...
Persist normalized actionable findings from review workflow nodes.
- Normalize bounded finding IDs, text, locations, and severities in workflow results.
- Surface individual findings for Review-tab selection and same-task revision.
- Preserve findings through workflow retries and document the advisory contract.
Files changed:
.changeset/fn-8795-structured-review-findings.md | 7 +++
docs/dashboard-guide.md | 2 +-
docs/workflow-steps.md | 4 +-
.../src/__tests__/workflow-step-results.test.ts | 32 +++++++++++++-
packages/core/src/index.gate.ts | 4 ++
packages/core/src/index.ts | 6 ++-
packages/core/src/types.ts | 4 ++
packages/core/src/types/task/task-review.ts | 5 +++
packages/core/src/types/workflow/workflow-steps.ts | 20 +++++++++
.../core/src/workflows/workflow-step-results.ts | 50 +++++++++++++++++++++-
.../dashboard/app/components/TaskReviewTab.tsx | 12 +++++-
.../src/routes/register-task-workflow-routes.ts | 26 ++++++++++-
.../workflow-malformed-verdict-gate.test.ts | 12 ++++++
packages/engine/src/executor.ts | 46 +++++++++++++++++---
.../src/workflows/workflow-graph-executor.ts | 11 +++++
15 files changed, 227 insertions(+), 14 deletions(-)
Fusion-Task-Id: FN-8795
Fusion-Task-Lineage: 09003b01-3f9a-4387-b6a7-f29066ce52f6
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-05 00:00:03 -07:00
gsxdsm
bfd9c9c86e
fix(FN-8794): mark review-kind release as patch
2026-08-04 23:53:36 -07:00
gsxdsm
9c77788850
fix(FN-8795): refresh queued overlap blockers
2026-08-04 23:42:06 -07:00
gsxdsm
e75c788db2
FN-8794: add workflow review-kind markers
...
Classify workflow review nodes so review feedback can target their persisted results.
- validate and type explicit plan/code review-kind markers in workflow IR
- expose review-kind selection in the workflow editor and document the authoring contract
- persist markers through task workflow routes and graph execution with regression coverage
Files changed:
.changeset/fn-8794-review-kind.md | 7 +
docs/dashboard-guide.md | 4 +
docs/workflow-steps.md | 10 +
.../__tests__/workflow-ir-optional-group.test.ts | 17 ++
packages/core/src/__tests__/workflow-ir.test.ts | 83 +++++++++
packages/core/src/index.gate.ts | 2 +-
packages/core/src/index.ts | 2 +-
packages/core/src/types.ts | 2 +
packages/core/src/types/workflow/workflow-steps.ts | 8 +
.../src/workflows/builtin-code-review-group.ts | 1 +
.../src/workflows/builtin-plan-review-group.ts | 1 +
packages/core/src/workflows/workflow-ir-types.ts | 5 +
packages/core/src/workflows/workflow-ir.ts | 24 +++
.../app/components/WorkflowNodeEditor.tsx | 17 ++
.../__tests__/WorkflowNodeEditor.test.tsx | 206 +++++++++++++++++++++
.../dashboard/src/__tests__/routes-tasks.test.ts | 166 ++++++++++++++++-
.../src/routes/register-task-workflow-routes.ts | 82 ++++++--
.../workflow-graph-optional-group.test.ts | 177 +++++++++++++++++-
.../src/workflows/workflow-graph-executor.ts | 20 +-
19 files changed, 801 insertions(+), 33 deletions(-)
Fusion-Task-Id: FN-8794
Fusion-Task-Lineage: a7752469-59bc-406f-82e8-6ffde6c392ef
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-04 23:36:32 -07:00
gsxdsm
6f939a08a0
FN-8800: update board badges promptly
...
Accept authoritative equal-clock move events so board badges reflect lifecycle transitions without waiting for refresh.
- Treat canonical task:moved SSE destinations as authoritative when lifecycle clocks tie.
- Preserve rejection of delayed older move events.
- Cover prompt badge updates and stale-event protection in useTasks tests.
Files changed:
.../dashboard/app/hooks/__tests__/useTasks.test.ts | 49 ++++++++++++++++++++++
packages/dashboard/app/hooks/useTasks.ts | 13 +++++-
2 files changed, 61 insertions(+), 1 deletion(-)
Fusion-Task-Id: FN-8800
Fusion-Task-Lineage: 2982c053-bdfb-40d6-9e92-29a429a2a7e6
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-04 22:36:19 -07:00
gsxdsm
35810666be
FN-8797: stabilize task detail refreshes
...
Keep task-detail state and controls mounted while Definition content refreshes.
- Add a prompt-only task endpoint and client request path.
- Preserve task lifecycle, workflow badges, and actions during prompt refreshes and workflow updates.
- Cover prompt refresh stability, late responses, and route behavior.
Files changed:
packages/dashboard/app/__tests__/api-tasks.test.ts | 14 ++
packages/dashboard/app/api/legacy.ts | 3 +
packages/dashboard/app/api/tasks/tasks.ts | 15 ++
.../dashboard/app/components/TaskDetailModal.tsx | 102 ++++++----
.../__tests__/TaskDetailModal.rendering.test.tsx | 211 ++++++++++++++++++---
.../__tests__/TaskDetailModal.test-helpers.ts | 1 +
...gister-task-workflow-routes.task-prompt.test.ts | 93 +++++++++
.../src/routes/register-task-workflow-routes.ts | 17 ++
8 files changed, 388 insertions(+), 68 deletions(-)
Fusion-Task-Id: FN-8797
Fusion-Task-Lineage: 57d571b4-4a02-4c96-9986-444c525d8405
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-04 22:22:41 -07:00
gsxdsm
26219b8d34
FN-8799: suppress alerts during automatic task recovery
...
Prevent terminal task alerts while persisted automatic recovery owns a failed task.
- Classify scheduled and transient merge recovery ownership before wedge notification claims.
- Re-read live task state before claims and deferred failure delivery to avoid recovery races.
- Add recovery suppression coverage, architecture documentation, and a patch changeset.
Files changed:
.changeset/fn-8799-recovery-notifications.md | 7 ++
docs/architecture.md | 2 +
.../src/errors/transient-merge-error-classifier.ts | 18 +++++
.../__tests__/notification-service.test.ts | 78 ++++++++++++++++++-
.../__tests__/task-wedge-notification.test.ts | 26 ++++++-
.../src/notification/notification-service.ts | 90 ++++++++++++----------
.../src/notification/task-wedge-notification.ts | 37 +++++++--
packages/engine/src/project-engine.ts | 4 +-
8 files changed, 210 insertions(+), 52 deletions(-)
Fusion-Task-Id: FN-8799
Fusion-Task-Lineage: f8296e81-6b84-4697-8b20-63823f09d584
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-04 22:17:06 -07:00
Phil Larson
3071018593
fix: prepare browser smoke fixture before launch ( #3333 )
...
## Summary
- prepares emitted dashboard CSS and binds the fixture server before
starting Chrome
- prevents cold client builds from consuming the supervised browser
lifetime
- adds a regression that holds browser launch until fixture preparation
resolves
## Test plan
- `FUSION_DASHBOARD_DEEP=1 pnpm --filter @fusion/dashboard exec vitest
run --project dashboard-app-quality-foundation-ui --pool=vmThreads
--maxWorkers=1 --silent=passed-only --reporter=dot
app/__tests__/browser-layout-smoke-fixture.test.ts`
- `pnpm --filter @fusion/dashboard typecheck`
- `pnpm --filter @fusion/dashboard build`
- `FUSION_BROWSER_SMOKE_REQUIRE=1 pnpm --filter @fusion/dashboard
test:browser-smoke`
- `pnpm exec eslint packages/dashboard/scripts/browser-layout-smoke.mjs
packages/dashboard/app/__tests__/browser-layout-smoke-fixture.test.ts`
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
* **Bug Fixes**
* Improved browser smoke test setup to ensure fixture preparation
completes before the browser launches.
* Added cleanup handling when browser startup fails, preventing leftover
test resources.
* Preserved the primary browser launch error when cleanup also fails,
while recording the cleanup issue.
* **Tests**
* Added coverage for fixture startup order, launch failures, and cleanup
behavior.
* Preserved existing HTML fixture validation.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-08-04 22:03:52 -07:00
gsxdsm
fa3df0f6bd
FN-8798: synchronize planning status across task views
...
Keep board, list, and task detail planning indicators consistent with fresh lifecycle state.
- preserve authoritative task snapshots across SSE and detail refreshes
- render transient replan planning only for fresh, unpaused planner activity
- pass global pause state to every task-detail host and cover status convergence
Files changed:
packages/dashboard/app/App.tsx | 2 +
packages/dashboard/app/components/AppModals.tsx | 3 +
packages/dashboard/app/components/ListView.tsx | 11 +-
packages/dashboard/app/components/TaskCard.tsx | 7 +-
.../dashboard/app/components/TaskDetailModal.tsx | 27 ++-
.../app/components/__tests__/AppModals.test.tsx | 201 +++++++++++++++++++--
.../app/components/__tests__/ListView.test.tsx | 31 ++++
.../app/components/__tests__/TaskCard.test.tsx | 17 ++
.../app/components/dashboard/MainContent.tsx | 1 +
.../__tests__/useTasks-hydration-freshness.test.ts | 58 +++++-
.../dashboard/app/hooks/__tests__/useTasks.test.ts | 29 ++-
packages/dashboard/app/hooks/useTasks.ts | 51 +++++-
.../utils/__tests__/taskStatusBadgeLabel.test.ts | 22 ++-
.../dashboard/app/utils/taskStatusBadgeLabel.ts | 36 ++++
14 files changed, 453 insertions(+), 43 deletions(-)
Fusion-Task-Id: FN-8798
Fusion-Task-Lineage: 7defae4e-fb39-4d2c-943a-ef6c1a164bfc
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-04 21:57:00 -07:00
gsxdsm
6a5e1b0145
chore(release): v0.75.1-beta.0
...
Version bump via changesets.
2026-08-04 20:38:29 -07:00
gsxdsm
1320265455
FN-8796: stabilize task-detail lifecycle snapshots
...
Keep open task details on their newest lifecycle state during scheduler resyncs.
- Reconcile task snapshots by lifecycle timestamps across modal, panel, dock, list, and popup hosts.
- Preserve fetched detail fields while accepting only fresher status and column transitions.
- Cover stale queued dependency and file-overlap payload regressions.
Files changed:
packages/dashboard/app/App.tsx | 7 +-
packages/dashboard/app/components/AppModals.tsx | 16 +---
packages/dashboard/app/components/ListView.tsx | 9 +-
.../dashboard/app/components/TaskDetailModal.tsx | 33 +++----
.../app/components/__tests__/AppModals.test.tsx | 59 ++++++++++++
.../__tests__/TaskDetailModal.rendering.test.tsx | 45 +++++++++
.../app/components/dashboard/MainContent.tsx | 8 +-
.../app/components/useRightDockController.tsx | 4 +-
.../__tests__/useTasks-hydration-freshness.test.ts | 49 +++++++++-
packages/dashboard/app/hooks/useModalManager.ts | 3 +-
packages/dashboard/app/hooks/useTasks.ts | 103 +++++++++++++--------
11 files changed, 252 insertions(+), 84 deletions(-)
Fusion-Task-Id: FN-8796
Fusion-Task-Lineage: 430b2c46-717d-4b83-803f-6574cf64670d
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-04 20:13:45 -07:00
gsxdsm
4167841e3c
FN-8792: resume Plan Review after approval
...
Approved plans now seed their canonical Plan Review continuation so dispatch can proceed.
- Add an engine handoff that atomically seeds approved Plan Review work without duplicating active continuations.
- Invoke the handoff under the dashboard approval lifecycle lock and cover approval, duplicate, and lifecycle-fence cases.
- Document the lifecycle guarantee and add a patch changeset.
Files changed:
.changeset/fn-8792-plan-approval-dispatch.md | 7 +
docs/architecture.md | 6 +-
.../dashboard/src/__tests__/routes-github.test.ts | 167 ++++++++++++++++++++-
.../src/routes/register-task-workflow-routes.ts | 17 +++
.../__tests__/plan-approval-hold-invariant.test.ts | 70 +++++++++
packages/engine/src/index.ts | 4 +
packages/engine/src/plan-review-continuation.ts | 38 +++++
7 files changed, 304 insertions(+), 5 deletions(-)
Fusion-Task-Id: FN-8792
Fusion-Task-Lineage: 0645c48d-ec92-475d-9e29-73cc22c12df8
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-04 19:31:06 -07:00
gsxdsm
0658795181
FN-8793: restore workflow review feedback selection
...
Restore canonical workflow review feedback so revisions can select server-owned reviewer items.
- Normalize current Code Review and Plan Review workflow results into stable review items.
- Preserve verdict and reviewer type through review API mappings and reject forged client feedback.
- Add regression coverage and a patch changeset.
Files changed:
.changeset/fn-8793-workflow-review-items.md | 7 +
packages/core/src/index.gate.ts | 2 +-
packages/core/src/index.ts | 2 +-
packages/core/src/types/task/task-review.ts | 6 +-
packages/dashboard/app/api/agents/run-audit.ts | 2 +
.../dashboard/src/__tests__/routes-tasks.test.ts | 121 +++++++++++++++++
.../src/routes/register-task-workflow-routes.ts | 148 ++++++++++++++++++---
7 files changed, 264 insertions(+), 24 deletions(-)
Fusion-Task-Id: FN-8793
Fusion-Task-Lineage: 25da04f9-5c30-4ad8-9f82-e1ac91ec481f
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-04 19:23:20 -07:00
gsxdsm
b9c5df04af
FN-8791: prevent NUL-containing chat checkpoints from crashing
...
Prevent malformed tool output from breaking chat checkpoint persistence.
- Sanitize NUL characters at chat JSONB persistence boundaries without mutating clean values.
- Observe rejected best-effort checkpoint writes so streaming sessions do not emit unhandled rejections.
- Add PostgreSQL, dashboard, and sanitizer regression coverage with operator-facing release notes.
Files changed:
.changeset/fn-8791-chat-nul-checkpoint.md | 7 ++
.../reliability/chat-jsonb-nul-sanitization.md | 44 +++++++++++
packages/core/src/__tests__/nul-sanitize.test.ts | 21 ++++-
.../chat-store-content-search-edit.pg.test.ts | 91 +++++++++++++++++++++-
packages/core/src/async-stores/async-chat-store.ts | 61 ++++++++++-----
packages/core/src/postgres/nul-sanitize.ts | 17 ++--
.../dashboard/src/__tests__/chat-manager.test.ts | 90 +++++++++++++++++++++
packages/dashboard/src/chat.ts | 21 ++++-
8 files changed, 322 insertions(+), 30 deletions(-)
Fusion-Task-Id: FN-8791
Fusion-Task-Lineage: 51e13634-04cc-4827-b72f-f33e40760940
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-04 19:15:20 -07:00
gsxdsm
71b13e7888
test(engine): memoize corpus scans in lifecycle-column gate tests
...
Both gate-admitted census tests re-scanned the whole ~1200-file corpus
redundantly: legacy-column-literal-census ran census() twice in full
(~900ms each) and no-legacy-move-targets re-read the entire tree a second
time in its anti-vacuity case. Memoize the census result and share a
comment-stripped read cache so each tree is scanned once per run.
Fusion-Task-Id: none
2026-08-04 17:03:44 -07:00
gsxdsm
5dbfef7b64
chore(release): v0.75.0
...
Version bump via changesets.
2026-08-04 16:41:28 -07:00
gsxdsm
b1d5e0fec3
chore(release): v0.75.0-beta.2
...
Version bump via changesets.
2026-08-04 11:58:02 -07:00
gsxdsm
1dc636b8b4
FN-8785: deduplicate queued dependency and scope logs
...
Persist queue episodes atomically so repeated scheduler and self-healing passes do not duplicate diagnostics.
- Add a queued-episode signature with PostgreSQL migration and task serialization support.
- Route dependency and file-scope queue transitions through the atomic deduplication API.
- Cover repeated and concurrent queue transitions, and update scheduler mocks for the new store API.
Files changed:
.changeset/fn-8785-queued-log-deduplication.md | 7 +
docs/architecture.md | 1 +
.../postgres/queued-episode-transition.pg.test.ts | 158 +++++++++++++++++++++
.../src/__tests__/postgres/schema-applier.test.ts | 9 +-
.../core/src/postgres/migrations/0000_initial.sql | 1 +
.../0044_fn_8785_queued_episode_signature.sql | 3 +
packages/core/src/postgres/schema-applier.ts | 12 +-
packages/core/src/postgres/schema/project.ts | 1 +
packages/core/src/store.ts | 5 +-
packages/core/src/task-store/audit-ops.ts | 80 +++++++++++
packages/core/src/task-store/persistence.ts | 2 +
packages/core/src/task-store/serialization.ts | 1 +
packages/core/src/types/task/task-core.ts | 5 +
...executor-outer-dispatch-dependency-gate.test.ts | 39 +++--
.../engine/src/__tests__/executor-test-helpers.ts | 7 +
.../__tests__/scheduler-overlap-starvation.test.ts | 43 +++++-
.../__tests__/scheduler-workflow-cutover.test.ts | 35 +++--
.../self-healing-completion-fanout.test.ts | 37 +++++
packages/engine/src/__tests__/self-healing.test.ts | 25 +++-
packages/engine/src/executor.ts | 16 ++-
packages/engine/src/scheduler.ts | 26 ++--
packages/engine/src/self-healing.ts | 117 +++++----------
22 files changed, 491 insertions(+), 139 deletions(-)
Fusion-Task-Id: FN-8785
Fusion-Task-Lineage: 8d68c243-f24e-4db4-bd1d-b7eda01309f6
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-04 11:52:15 -07:00
gsxdsm
750b4bedbc
FN-8788: retain Kimi K3 quarantine through deadline
...
Document the decision to preserve Kimi K3 quarantine coverage until its deletion-ratchet deadline.
- Retain the supplemental route test, Vitest exclusion, and ledger entry through 2026-08-15.
- Clarify that early removal requires regression evidence and a root-cause fix.
Files changed:
docs/testing.md | 3 +++
1 file changed, 3 insertions(+)
Fusion-Task-Id: FN-8788
Fusion-Task-Lineage: e1644a4b-1632-4cf7-a0a9-42ecc2b027a9
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-04 11:45:20 -07:00
gsxdsm
39326b3be6
FN-8787: reduce task-detail title spacing
...
Reduce the task-detail content's top inset while preserving its side and bottom spacing.
- Override the shared desktop and mobile block-start padding with smaller token values.
- Cover desktop and mobile padding-order and spacing contracts.
Files changed:
packages/dashboard/app/components/TaskDetailModal.css | 8 ++++++++
packages/dashboard/app/components/__tests__/TaskDetailModal.css.test.ts | 22 ++++++++++++++++++++++
2 files changed, 30 insertions(+)
Fusion-Task-Id: FN-8787
Fusion-Task-Lineage: 1b556533-1b2c-4dd5-aff7-6df71091dd17
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-04 11:24:38 -07:00
gsxdsm
2af01dd27d
FN-8786: make task titles directly expandable
...
Make overflowed task titles directly expandable with an accessible title control.
- Replace the standalone Show more/Show less row with a title-owned button.
- Add focus styling while preserving title clamping and summarization behavior.
- Cover title expansion, keyboard access, fallbacks, and responsive styling.
Files changed:
.../dashboard/app/components/TaskDetailModal.css | 35 ++---
.../dashboard/app/components/TaskDetailModal.tsx | 26 ++--
.../__tests__/TaskDetailModal.rendering.test.tsx | 150 +++++++++++----------
3 files changed, 112 insertions(+), 99 deletions(-)
Fusion-Task-Id: FN-8786
Fusion-Task-Lineage: 351a9f33-42c0-4a4f-a34a-94aa726f2436
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-04 11:13:07 -07:00
gsxdsm
1d1a7fedab
fix(FN-8785): ignore completed duplicate history
...
Fusion-Task-Id: FN-8785
2026-08-04 10:52:12 -07:00
gsxdsm
07dccbe2bd
FN-8783: parallelize static merge-gate validators
...
Run independent static merge-gate policy validators concurrently without weakening gate ordering.
- Add a fail-closed concurrent static-validator runner with coverage for inventory and failures.
- Preserve curated engine, PostgreSQL, unit, and CI-shape gate contracts.
- Document the gate composition and warm-cache performance policy.
Files changed:
docs/testing.md | 13 ++-
package.json | 3 +-
packages/cli/src/__tests__/ci-workflow.test.ts | 21 ++--
packages/engine/vitest.config.ts | 36 +++++--
.../__tests__/engine-vitest-gate-policy.test.mjs | 90 +++++++++++++----
scripts/__tests__/run-static-gate-checks.test.mjs | 100 +++++++++++++++++++
scripts/run-static-gate-checks.mjs | 106 +++++++++++++++++++++
7 files changed, 332 insertions(+), 37 deletions(-)
Fusion-Task-Id: FN-8783
Fusion-Task-Lineage: d5d3c9e1-b3c4-45ff-a3e7-f9555585cd70
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-04 09:21:07 -07:00
gsxdsm
9e4a0817db
feat: restart the development engine on source changes ( #3329 )
...
## Summary
Add an opt-in source-development loop that restarts the dashboard and
engine when runtime TypeScript or JSON changes. Use `pnpm dev:watch`;
`pnpm dev:hmr` now combines Vite UI HMR with the same supervised
API/engine restart path.
The watcher filters tests, fixtures, generated declarations, build
output, and task state. It coalesces bursts with a two-second maximum
wait, waits for the child to acknowledge its IPC listener, and rebuilds
runtime dist artifacts before a source-triggered respawn.
## Safety model
- Close scheduler, triage, heartbeat, mission, routine, self-healing,
and merge admission before checking for active work.
- Let already-running agents reach a safe boundary; do not mutate
durable pause settings.
- Enter the existing graceful exit-code-86 shutdown and supervised
respawn path.
- Retry failed liveness reads and declined restart requests instead of
dropping the pending change.
- Keep ordinary `pnpm dev` behavior unchanged; inherited watch state
does not break nested non-dashboard development commands.
A development restart intentionally replaces the dashboard process, so
transient dashboard connections and project dev-server children
reconnect or restart with it. Agent work is the protected boundary.
## Validation
- `pnpm lint`
- `pnpm test:gate` (753 tests passed across engine, core, PostgreSQL
gate, and CI-shape suites)
- Focused CLI watcher/restart/supervision suites: 40 tests passed
- Focused engine drain/manager suites: 52 tests passed
- `pnpm --filter @runfusion/fusion typecheck`
- `pnpm --filter @fusion/engine typecheck`
- `pnpm verify:fast` (13 steps passed, including CLI build and real
health boot smoke)
- Manual unsupported-command probe confirms explicit `--watch` fails
clearly outside the dashboard command
## Post-Deploy Monitoring & Validation
- Watch for `[fusion:dev] source changed`, `source restart deferred`,
`active work drained`, and `restart requested` logs during the first
watched development session.
- Healthy behavior is one exit-86 respawn per edit batch, no interrupted
active agents, refreshed dist artifacts, and a healthy dashboard after
respawn.
- Investigate repeated restart loops, watcher attachment warnings,
declined restart retries, or liveness-read failures.
- Immediate mitigation is to use ordinary `pnpm dev` without `--watch`;
no production runtime behavior or durable setting needs rollback.
- Validation owner: Fusion maintainers during the first source edit
after merge.
---
[](https://github.com/EveryInc/compound-engineering-plugin )
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
* **New Features**
* Added `pnpm dev:watch` to automatically restart development runtime
processes when source files change.
* Development restarts now wait for active work to finish, preventing
new work from starting during the transition.
* Enhanced `pnpm dev:hmr` with graceful runtime source restarts while
keeping the dashboard available.
* Rapid source changes are grouped to avoid unnecessary restarts.
* **Documentation**
* Updated development setup and contribution guides with the new watch
workflow.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-08-04 08:57:30 -07:00
Phil Larson
b00d8adaeb
test(engine): fix moved skill resolver fixture import ( #3328 )
...
## Summary
- update the CE workflow-step fixture runtime import to the moved
`cli-runtime/skill-resolver.js` path
- align the runtime specifier with the existing type-only import
## Test plan
- `pnpm --filter @fusion/engine exec vitest run --project=engine-default
src/__tests__/ce-workflow-step-executor.test.ts --silent=passed-only
--reporter=dot --maxWorkers=1 --no-file-parallelism` (52 passed)
- `pnpm --filter @fusion/engine typecheck`
- `pnpm check:changesets`
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
* **Tests**
* Updated test configuration to reference the correct skill resolver
location.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-08-04 08:55:01 -07:00
gsxdsm
be3799e7a3
FN-8782: stabilize TaskDetailModal rendering tests
...
Cover TaskDetailModal definition refresh behavior with reliable Promise-backed API mocks.
- Reset detail fetch mocks to preserve the production Promise contract
- Test refreshed markdown file links, rejected refreshes, visibility polling, and stale response fencing
- Update optimistic detail expectations for authoritative Definition refreshes
Files changed:
.../__tests__/TaskDetailModal.rendering.test.tsx | 200 +++++++++++++++++++--
.../__tests__/TaskDetailModal.test-helpers.ts | 17 +-
2 files changed, 197 insertions(+), 20 deletions(-)
Fusion-Task-Id: FN-8782
Fusion-Task-Lineage: 302a7d58-c014-473b-97f0-8751b510169c
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-04 08:40:58 -07:00
gsxdsm
993a2f9d86
chore(release): v0.75.0-beta.1
...
Version bump via changesets.
2026-08-04 01:59:50 -07:00
gsxdsm
3cc1d9373f
FN-8780: expand Activity thinking blocks by default
...
Make Task Detail Activity reasoning immediately readable in every workflow column.
- Default newly mounted thinking segments to expanded state
- Preserve user collapse choices while streamed reasoning updates
- Add coverage for default, toggle, and streaming behavior
Files changed:
.changeset/fn-8780-activity-thinking-open.md | 7 ++
packages/dashboard/app/components/TaskChatTab.tsx | 25 ++-----
.../app/components/__tests__/TaskChatTab.test.tsx | 79 +++++++++-------------
3 files changed, 45 insertions(+), 66 deletions(-)
Fusion-Task-Id: FN-8780
Fusion-Task-Lineage: 51a0be0d-0bc8-4e1f-ac1d-b30583d7b202
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-04 01:54:22 -07:00
gsxdsm
7b1c8db1d3
FN-8779: keep Activity Feed scrolling above footer
...
Keep Feed history scrollable within Task Detail while the action footer remains fixed.
- Add a Feed-specific flex and overflow layout for Activity history.
- Keep Task Detail footer and modal controls outside the scrolling body.
- Cover Feed footer containment and responsive layout behavior.
Files changed:
packages/dashboard/app/components/TaskDetailModal.css | 38 +++++++++++++--
packages/dashboard/app/components/TaskDetailModal.tsx | 12 ++---
...etailModal.responsive-and-dependencies.test.tsx | 46 ++++++++++++++++++
.../TaskDetailModal.task-activity-chat.test.tsx | 54 ++++++++++++++++++++++
4 files changed, 139 insertions(+), 11 deletions(-)
Fusion-Task-Id: FN-8779
Fusion-Task-Lineage: 4bc4851c-27a1-4b45-afdb-11ccbc8a017e
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-04 01:47:52 -07:00
gsxdsm
ad2cb6958e
FN-8778: reconcile task state on board re-entry
...
Keep Board and List task data current after users return from views without SSE.
- Refresh task data on every genuine false-to-true task-view transition
- Coalesce concurrent project switches with re-entry refreshes
- Cover server-state reconciliation, empty snapshots, and late responses
Files changed:
.../dashboard/app/hooks/__tests__/useTasks.test.ts | 87 ++++++++++------------
packages/dashboard/app/hooks/useTasks.ts | 45 ++++-------
2 files changed, 55 insertions(+), 77 deletions(-)
Fusion-Task-Id: FN-8778
Fusion-Task-Lineage: 8123b24a-9228-46cc-a382-19c91aa72e73
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-04 01:30:33 -07:00
gsxdsm
c10a880fc9
FN-8777: scope voice dictation to selected projects
...
Keep voice dictation sessions and requests isolated to the active dashboard project.
- Append the encoded project ID to voice status, session, transcription, and cleanup requests.
- Add real-route and composer coverage for scoped sessions and project changes.
- Document the project boundary and add a patch changeset.
Files changed:
.changeset/fn-8777-voice-entry-e2e.md | 7 +
docs/dashboard-guide.md | 5 +
.../__tests__/voice-dictation-composers.test.tsx | 19 ++-
.../app/hooks/__tests__/useVoiceDictation.test.tsx | 149 ++++++++++++++++++++-
packages/dashboard/app/hooks/useVoiceDictation.ts | 44 ++++--
.../routes/__tests__/register-voice-routes.test.ts | 28 ++++
6 files changed, 238 insertions(+), 14 deletions(-)
Fusion-Task-Id: FN-8777
Fusion-Task-Lineage: 65390f79-3e29-4759-88c6-275b1c9f17d4
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-04 01:24:30 -07:00
gsxdsm
f344715df5
docs: describe planning and review prompt fixes
2026-08-04 01:16:20 -07:00
gsxdsm
dd2cb0c8ba
fix(FN-8778): preserve planning lock receiver
...
Fusion-Task-Id: FN-8778
2026-08-04 01:06:44 -07:00
gsxdsm
9939897aab
fix: prevent stale planning approvals and review churn ( #3327 )
...
## Summary
Planning can no longer approve or execute against evidence from a
superseded dependency episode. Dependency mutations, approval decisions,
recovery, and execution admission now share serialized lifecycle rules,
so stale planner work cannot restore an invalid approval or release an
unplanned task.
Review also converges instead of discovering one blocker per round.
Planning performs a repository-grounded completeness pass up front; Plan
Review batches all independently discoverable blockers and carries an
episode-scoped decision ledger across revisions; code review traces
changed invariants through production consumers and tests. Repeated
feedback still advances the safety budget, while provider failures and
superseded episodes stay outside the remediation ledger.
The dashboard now exposes manual approval only for the intended
exhausted-review state, and refusal/recovery audit events make rejected
lifecycle transitions diagnosable without leaking prompt content.
## Validation
- `pnpm verify:fast` — scoped typechecks/builds, CLI build, and boot
smoke passed.
- Focused Core and Engine regression suites — 511 tests passed.
- `pnpm lint`, strict changeset validation, Core/Engine typechecks, and
package builds passed.
Fixes #3325 .
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
* **New Features**
* Improved Plan Review approvals, rejections, and replan-cap handling
across task workflows.
* Added cumulative feedback and attempt tracking across repeated
planning reviews.
* Added safer recovery for stalled planning handoffs and interrupted
approval updates.
* **Bug Fixes**
* Prevented stale approvals and unplanned execution after dependency
changes.
* Improved concurrent approval handling, retryability, and
refusal-record deduplication.
* Refined dashboard approval indicators and responsive approval views.
* **Quality Improvements**
* Strengthened planning and code-review completeness checks and
blocking-finding coverage.
* Preserved review history while clearly marking outdated approvals.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-08-04 00:20:08 -07:00