gsxdsm
625dbc6c5f
FN-8441: separate planning artifacts from task prompts
...
Persist validated planning output as plan.md while keeping task prompts concise.
- Add a reusable plan.md formatter and export it through core entrypoints.
- Store plan and original-description task documents for planning-created tasks and subtasks.
- Direct triage to derive PROMPT.md from the plan artifact and cover the handoff with tests and documentation.
Files changed:
.changeset/fn-8441-separate-plan-from-prompt.md | 7 ++
docs/dashboard-guide.md | 3 +
.../core/src/__tests__/planning-plan-md.test.ts | 33 ++++++
packages/core/src/index.gate.ts | 1 +
packages/core/src/index.ts | 1 +
packages/core/src/planning-plan-md.ts | 42 +++++++
.../__tests__/planning-e2e-plan-creation.test.ts | 62 +----------
.../src/__tests__/routes-planning.test.ts | 122 ++++++++++++---------
packages/dashboard/src/planning.ts | 12 +-
.../src/routes/register-planning-subtask-routes.ts | 61 ++++++++++-
packages/engine/src/__tests__/triage.test.ts | 17 +++
packages/engine/src/triage.ts | 43 ++++++--
12 files changed, 278 insertions(+), 126 deletions(-)
Fusion-Task-Id: FN-8441
Fusion-Task-Lineage: e6092bf8-9f59-4b6d-abd1-aaa4a566677a
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-20 13:03:13 -07:00
gsxdsm
f9c1620c1e
FN-8438: generate and refine running plans
...
Planning Mode now generates an initial work-product plan and refines it after every answer.
- Prompt both initial agent paths to create a running plan before asking questions
- Provide meaningful fallback summaries and deliverables when model plan fields are absent
- Cover streaming and non-streaming initial-plan behavior and document the refinement contract
Files changed:
.changeset/fn-8438-running-plan-generate-refine.md | 7 ++
docs/dashboard-guide.md | 3 +-
.../__tests__/planning-infinite-interview.test.ts | 76 ++++++++++++++++++++--
packages/dashboard/src/planning.ts | 58 ++++++++++++-----
4 files changed, 122 insertions(+), 22 deletions(-)
Fusion-Task-Id: FN-8438
Fusion-Task-Lineage: 29e155ec-480e-462a-be3d-07ac02d7236b
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-20 12:50:06 -07:00
gsxdsm
df488f25ea
FN-8443: fix chat plugin skill loading
...
Forward enabled plugin skill body paths into chat sessions.
- Pass resolved plugin skill directories through dashboard chat, QuickChat, and room responder sessions.
- Preserve additional skill paths in the runtime session factory and cover both forwarding layers.
- Document the chat skill contract and add a patch changeset.
Files changed:
.changeset/fn-8443-chat-plugin-skill-paths.md | 7 +++
docs/agents.md | 2 +-
packages/dashboard/src/__tests__/chat-manager.test.ts | 60 ++++++++++++++++++++--
packages/dashboard/src/chat.ts | 12 +++--
packages/engine/src/__tests__/agent-session-helpers.test.ts | 37 +++++++++++++
packages/engine/src/agent-session-helpers.ts | 5 ++
6 files changed, 114 insertions(+), 9 deletions(-)
Fusion-Task-Id: FN-8443
Fusion-Task-Lineage: 92c4e32c-8c94-4e8e-ad62-a5dae2fb9dc3
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-20 12:32:01 -07:00
gsxdsm
8c01cc7c7a
FN-8437: restore Planning Mode sessions after navigation
...
Persist active Planning interviews across embedded navigation while honoring explicit dismissal.
- Store the active Planning session per project and restore it through the existing session loader.
- Clear the saved active session for dismissals and terminal session actions.
- Cover leave-and-return, completed-away, fresh-plan, and dismissed-error flows; document the behavior.
- Add a patch changeset for the Planning session recovery fix.
Files changed:
.changeset/fn-8437-planning-leave-return-restore.md | 7 ++
docs/dashboard-guide.md | 2 +-
packages/dashboard/app/components/PlanningModeModal.tsx | 51 ++++++++++++-
packages/dashboard/app/components/__tests__/PlanningModeModal.planning-flow.test.tsx | 86 ++++++++++++++++++++++
packages/dashboard/app/hooks/__tests__/modalPersistence.test.ts | 18 +++++
packages/dashboard/app/hooks/modalPersistence.ts | 17 +++++
packages/dashboard/app/utils/__tests__/projectStorage.test.ts | 3 +-
packages/dashboard/app/utils/projectStorage.ts | 1 +
8 files changed, 180 insertions(+), 5 deletions(-)
Fusion-Task-Id: FN-8437
Fusion-Task-Lineage: 892aacb6-139e-4487-a40c-1bedd51237ea
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-20 12:09:23 -07:00
gsxdsm
3962222863
FN-8424: route CLI chat replies through inbox mail
...
Route agent replies to the correct CLI or dashboard mailbox with bounded polling deadlines.
- add reply-parent routing validation and CLI/dashboard inbox selection
- preserve named mailbox conversations while handling per-message reply deadlines
- document chat and inbox interfaces and cover deadline and routing regressions
Files changed:
.changeset/fn-8424-cli-chat-reply-routing.md | 7 +
docs/agents.md | 20 +-
docs/cli-reference.md | 29 +-
packages/cli/src/bin.ts | 15 +-
packages/cli/src/commands/__tests__/chat.test.ts | 262 +++++++++---------
.../cli/src/commands/__tests__/message.test.ts | 12 +
packages/cli/src/commands/chat.ts | 293 ++++++++++++---------
packages/cli/src/commands/message.ts | 18 +-
...tools-send-message-recipient-validation.test.ts | 86 +++++-
packages/engine/src/agent-heartbeat-prompts.ts | 8 +-
packages/engine/src/agent-tools.ts | 71 +++--
11 files changed, 523 insertions(+), 298 deletions(-)
Fusion-Task-Id: FN-8424
Fusion-Task-Lineage: 28d0ef88-717e-4f39-8880-64d2fef94706
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-20 11:26:08 -07:00
gsxdsm
00891c225f
FN-8440: preserve acknowledged duplicate decisions
...
Keep an operator's same-canonical duplicate decision durable across triage and maintenance reprocessing.
- Preserve acknowledged Keep decisions for the same canonical while prompting for a new canonical.
- Clear acknowledged duplicate markers without overriding manual pauses.
- Export the acknowledgement helper through both core barrels for engine gate loading.
- Add regression coverage, operator documentation, and a patch changeset.
Files changed:
.changeset/fn-8440-persist-duplicate-decision.md | 7 ++
docs/task-management.md | 2 +
.../core/src/__tests__/duplicate-intake.test.ts | 16 +++++
packages/core/src/duplicate-intake.ts | 27 ++++++--
packages/core/src/index.gate.ts | 1 +
packages/core/src/index.ts | 1 +
.../explicit-duplicate-marker-sweep.test.ts | 59 +++++++++++++++++
.../triage-explicit-duplicate-marker.test.ts | 77 ++++++++++++++++++++--
packages/engine/src/self-healing.ts | 21 +++++-
packages/engine/src/triage.ts | 21 ++++++
10 files changed, 221 insertions(+), 11 deletions(-)
Fusion-Task-Id: FN-8440
Fusion-Task-Lineage: 966d7c09-8651-463c-840d-707f2bafd2a7
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-20 11:12:54 -07:00
gsxdsm
e43dffad52
FN-8434: preserve evolving running plans
...
Keep Planning Mode's running plan as an evolving work product alongside every interview question.
- Carry model-authored running-plan updates through question responses without ending the interview
- Merge partial plan updates with prior title, deliverables, dependencies, size, and priority
- Derive safe fallback summaries without turning interview questions into deliverables
- Cover running-plan persistence and document the contract
Files changed:
.changeset/fn-8434-running-plan-content.md | 7 +
docs/dashboard-guide.md | 2 +-
packages/core/src/types.ts | 6 +
.../PlanningModeModal.planning-flow.test.tsx | 11 +-
.../__tests__/planning-e2e-plan-creation.test.ts | 17 ++-
.../__tests__/planning-infinite-interview.test.ts | 91 +++++++++++-
packages/dashboard/src/planning.ts | 163 ++++++++++++++-------
7 files changed, 232 insertions(+), 65 deletions(-)
Fusion-Task-Id: FN-8434
Fusion-Task-Lineage: cdf1c4ff-fd33-4e4a-84f4-b54a5e0a9cf8
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-20 10:33:59 -07:00
gsxdsm
9db0ffc1f9
FN-8425: route CLI chat through agent inbox
...
Route CLI chat messages through durable, named agent mailbox conversations.
- Add conversation IDs and parsing for CLI chat sessions.
- Filter CLI chat history and replies by mailbox conversation identity.
- Surface conversation IDs to agents and document the inbox-based transport.
Files changed:
.changeset/fn-8425-cli-chat-conversation.md | 7 +
docs/agents.md | 11 +-
docs/cli-reference.md | 15 +-
packages/cli/src/__tests__/bin-chat-args.test.ts | 34 +++++
packages/cli/src/bin.ts | 45 ++----
packages/cli/src/commands/__tests__/chat.test.ts | 162 +++++++++++++++++++++
packages/cli/src/commands/chat.ts | 132 +++++++++++++++--
packages/core/src/types/messages.ts | 6 +
.../__tests__/agent-tools-read-messages.test.ts | 48 ++++++
packages/engine/src/agent-tools.ts | 10 +-
10 files changed, 418 insertions(+), 52 deletions(-)
Fusion-Task-Id: FN-8425
Fusion-Task-Lineage: 5091f49f-1f12-4ff7-8d21-48f008cf984e
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-20 10:20:41 -07:00
gsxdsm
76822d8c4c
FN-8432: document responsive Planning Mode navigation
...
Clarify and verify tablet tab navigation and mobile list-first Planning Mode behavior.
- Add tablet progressive-tab coverage across interview states.
- Assert mobile saved-session list-first navigation and plan visibility.
- Update mobile and dashboard guidance with the intentional session-selection flow.
- Add a patch changeset for the Planning Mode fix.
Files changed:
.../fn-8432-planning-tablet-mobile-plan-layout.md | 7 ++++
MOBILE.md | 2 +-
docs/dashboard-guide.md | 2 +-
.../PlanningModeModal.planning-flow.test.tsx | 43 +++++++++++++++++++++-
.../PlanningModeModal.ui-interactions.test.tsx | 25 +++++++++++++
5 files changed, 75 insertions(+), 4 deletions(-)
Fusion-Task-Id: FN-8432
Fusion-Task-Lineage: e412069e-87e2-4a61-9556-6908f86b56c5
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-20 10:07:44 -07:00
gsxdsm
087fd8f881
FN-8429: fix live activity snapshot metrics
...
Keep Live activity counts current and project-scoped rather than date-range derived.
- Exclude soft-deleted tasks from live board column totals
- Share SSE-refreshed live snapshots between Overview and Mission Control
- Count all in-progress aliases and current active sessions/runs
- Cover live refresh, date-range independence, and deleted-task behavior
Files changed:
docs/dashboard-guide.md | 2 +-
.../command-center-remaining-analytics.pg.test.ts | 12 ++-
packages/core/src/command-center-live.ts | 15 +++-
.../components/command-center/CommandCenter.tsx | 43 +++-------
.../command-center/MissionControlPanel.tsx | 46 +++++++----
.../__tests__/CommandCenter.test.tsx | 91 ++++++++++++++++++----
.../command-center/liveSnapshotMetrics.ts | 32 ++++++++
7 files changed, 174 insertions(+), 67 deletions(-)
Fusion-Task-Id: FN-8429
Fusion-Task-Lineage: a29a92a1-1d27-4927-9e19-9c42e66a0674
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-20 09:57:38 -07:00
gsxdsm
bd558462ed
FN-8427: restore mobile planning session navigation
...
Restore a full-pane saved-session destination for compact Planning Mode.
- Unmount the running-plan pane while mobile and tablet session lists are open.
- Keep Back and Sessions available from active, completed, and new planning surfaces.
- Cover compact navigation behavior and document the mobile interaction.
Files changed:
.../fn-8427-planning-mobile-session-list-nav.md | 7 ++
MOBILE.md | 2 +-
docs/dashboard-guide.md | 2 +-
.../dashboard/app/components/PlanningModeModal.css | 56 +++++++++++++++-
.../dashboard/app/components/PlanningModeModal.tsx | 33 ++++++---
.../__tests__/PlanningModeModal.css.test.ts | 5 ++
.../PlanningModeModal.ui-interactions.test.tsx | 78 ++++++++++++++++++++++
7 files changed, 167 insertions(+), 16 deletions(-)
Fusion-Task-Id: FN-8427
Fusion-Task-Lineage: 6664d075-0614-4b5a-ba36-34a0ec6a20a3
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-20 09:51:26 -07:00
gsxdsm
8993e912d2
FN-8426: adapt Planning Mode for compact layouts
...
Make Planning Mode usable on mobile, tablet, and short-height layouts.
- Collapse compact Planning interviews into selectable question, plan, and history surfaces.
- Keep Sessions navigation synchronized so returning from the session list restores a visible interview pane.
- Document and test mobile, tablet, and short-landscape behavior.
Files changed:
.../fn-8426-planning-mobile-tablet-layout.md | 7 ++
MOBILE.md | 2 +-
docs/dashboard-guide.md | 2 +-
.../dashboard/app/components/PlanningModeModal.css | 94 ++++++++++++++++++++--
.../dashboard/app/components/PlanningModeModal.tsx | 51 +++++++++++-
.../__tests__/PlanningModeModal.css.test.ts | 17 ++++
.../PlanningModeModal.planning-flow.test.tsx | 36 +++++++++
.../__tests__/PlanningModeModal.test-helpers.ts | 23 ++++++
8 files changed, 220 insertions(+), 12 deletions(-)
Fusion-Task-Id: FN-8426
Fusion-Task-Lineage: 489d6f92-326c-4780-bc85-d28967c7ab35
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-20 09:16:12 -07:00
gsxdsm
104bf69b3b
FN-8401: preserve same-agent duplicates across create paths
...
Unify same-agent duplicate intake so live duplicates remain visible and sticky tombstones block recreation on every backend.
- Route SQLite and backend creation through one duplicate-intake resolver
- Flag new live duplicates by default; archive only the new task when explicitly enabled
- Include archived soft-deletes in sticky tombstone matching and cover the backend-safe read
- Document the cross-backend duplicate and resurrection policy
Files changed:
.changeset/fn-8401-same-agent-intake.md | 7 +
docs/architecture.md | 2 +-
docs/settings-reference.md | 2 +-
docs/task-management.md | 8 +-
.../__tests__/same-agent-duplicate-intake.test.ts | 129 ++++++++++++
packages/core/src/task-store/remaining-ops-2.ts | 50 +----
packages/core/src/task-store/task-creation.ts | 220 ++++++++-------------
7 files changed, 233 insertions(+), 185 deletions(-)
Fusion-Task-Id: FN-8401
Fusion-Task-Lineage: 2efa998e-a27d-4013-b42e-e44b7e2316fb
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-20 09:01:39 -07:00
gsxdsm
8166c80bad
FN-8420: keep Planning Mode interviews open until validation
...
Keep the Planning Mode workspace active until the operator explicitly validates its running plan.
- Preserve the answered-question, current-question, and running-plan panes through stream updates and recoverable states.
- Require durable validation before exposing terminal summaries and task creation actions.
- Make every answer request one new high-impact question and update Planning Mode guidance, coverage, and release notes.
Files changed:
.../fn-8420-planning-mode-user-validation.md | 7 +
docs/dashboard-guide.md | 6 +-
docs/settings-reference.md | 2 +-
.../dashboard/app/components/PlanningModeModal.tsx | 163 +++++++++++++--------
.../__tests__/PlanningModeModal.initial.test.tsx | 20 ++-
.../PlanningModeModal.planning-flow.test.tsx | 99 +++++++++----
.../PlanningModeModal.ui-interactions.test.tsx | 14 ++
.../app/planning-browser-e2e-fixture.html | 5 +
.../dashboard/app/planning-browser-e2e-fixture.tsx | 131 +++++++++++++++++
.../src/__tests__/planning-browser-e2e.test.ts | 115 +++++++++++++++
.../__tests__/planning-infinite-interview.test.ts | 2 +
.../planning-interview-formatters.test.ts | 8 +
packages/dashboard/src/planning.ts | 16 +-
13 files changed, 485 insertions(+), 103 deletions(-)
Fusion-Task-Id: FN-8420
Fusion-Task-Lineage: af88729b-98c1-4141-bad3-a17ddb497181
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-20 02:01:58 -07:00
gsxdsm
5af53bc94a
FN-8422: fix Fusion MCP bridge packaging and model markers
...
Ensure Grok and Claude ACP sessions report usable custom-tool bridge outcomes and model labels.
- Copy the MCP schema server into runtime build output and fail custom-tool setup with stable diagnostics.
- Record bridge failure metadata safely and normalize ACP string model markers.
- Add bridge smoke coverage, adapter regressions, documentation, and a patch changeset.
Files changed:
.changeset/fn-8422-mcp-bridge.md | 7 ++++
docs/grok-cli-contract.md | 8 +++++
.../src/__tests__/agent-session-helpers.test.ts | 37 ++++++++++++++++++++++
packages/engine/src/__tests__/pi.test.ts | 16 ++++++++++
packages/engine/src/agent-session-helpers.ts | 20 ++++++++++++
packages/engine/src/pi.ts | 27 ++++++++++++++--
plugins/fusion-plugin-claude-runtime/README.md | 6 ++++
plugins/fusion-plugin-claude-runtime/package.json | 2 +-
.../src/__tests__/runtime-adapter.test.ts | 30 ++++++++++++++++++
.../src/__tests__/tool-bridge.test.ts | 33 ++++++++++++++++++-
.../src/runtime-adapter.ts | 30 ++++++++++++++++--
.../src/tool-bridge.ts | 24 +++++++++++---
plugins/fusion-plugin-claude-runtime/src/types.ts | 2 ++
plugins/fusion-plugin-grok-runtime/package.json | 2 +-
.../src/__tests__/runtime-adapter.test.ts | 24 ++++++++++++++
.../src/__tests__/tool-bridge.test.ts | 33 ++++++++++++++++++-
.../src/runtime-adapter.ts | 30 ++++++++++++++++--
.../fusion-plugin-grok-runtime/src/tool-bridge.ts | 24 +++++++++++---
plugins/fusion-plugin-grok-runtime/src/types.ts | 2 ++
19 files changed, 338 insertions(+), 19 deletions(-)
Fusion-Task-Id: FN-8422
Fusion-Task-Lineage: 6738f1bd-23f7-4fd3-8490-178d956b362d
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-20 01:07:14 -07:00
gsxdsm
2c1567c6b8
FN-8418: add WhatsApp QR pairing settings
...
Add WhatsApp connection pairing guidance directly in plugin settings.
- Display a QR code and phone pairing instructions for WhatsApp Chat connections.
- Expose connection details through the plugin and document the setup flow.
- Add dashboard and plugin regression coverage plus a release changeset.
Files changed:
.changeset/fn-8418-whatsapp-settings-pairing.md | 7 +
docs/plugin-management.md | 2 +-
.../dashboard/app/components/PluginManager.tsx | 4 +
.../app/components/WhatsAppChatPairingPanel.css | 115 ++++++++++++++
.../app/components/WhatsAppChatPairingPanel.tsx | 165 +++++++++++++++++++++
.../components/__tests__/PluginManager.test.tsx | 21 +++
.../__tests__/WhatsAppChatPairingPanel.test.tsx | 78 ++++++++++
plugins/fusion-plugin-whatsapp-chat/README.md | 19 +--
.../src/__tests__/connection.test.ts | 16 +-
.../src/__tests__/index.test.ts | 33 +++++
.../fusion-plugin-whatsapp-chat/src/connection.ts | 21 ++-
plugins/fusion-plugin-whatsapp-chat/src/index.ts | 15 +-
12 files changed, 479 insertions(+), 17 deletions(-)
Fusion-Task-Id: FN-8418
Fusion-Task-Lineage: a16b7d25-422d-4612-83d4-d5ac9c049aec
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-20 00:54:01 -07:00
gsxdsm
e22c65ad11
FN-8397: separate pinned chats and retain failed edits
...
Separate direct-chat session groups and make message edits safely retryable.
- Render explicit Pinned and Recent sections across desktop and mobile chat lists.
- Keep inline message corrections open until edit-and-resend succeeds in Direct and Planner Chat.
- Add localized Recent labels, documentation, release metadata, and regression coverage.
Files changed:
.changeset/fn-8397-chat-pin-separation-and-edit-save.md | 7 +++
docs/dashboard-guide.md | 5 +-
packages/dashboard/app/components/ChatView.css | 10 ++++
packages/dashboard/app/components/ChatView.tsx | 31 ++++++++---
packages/dashboard/app/components/StandardChatSurface.tsx | 35 +++++++++----
packages/dashboard/app/components/TaskPlannerChatTab.tsx | 14 +++--
packages/dashboard/app/components/__tests__/ChatView.core-contracts.test.tsx | 46 +++++++++++++++++
packages/dashboard/app/components/__tests__/ChatView.message-edit.test.tsx | 60 ++++++++++++++++++++--
packages/dashboard/app/components/__tests__/TaskPlannerChatTab.test.tsx | 10 ++--
packages/dashboard/app/hooks/__tests__/useChat.test.ts | 4 +-
packages/dashboard/app/hooks/useChat.ts | 13 +++--
packages/i18n/locales/{en,es,fr,ko,zh-CN,zh-TW}/app.json | 6 +++
17 files changed, 205 insertions(+), 36 deletions(-)
Fusion-Task-Id: FN-8397
Fusion-Task-Lineage: 4dbc664a-56a3-48c7-be9a-febd5f411c9e
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-20 00:42:15 -07:00
gsxdsm
2fe1b996bf
FN-8400: rework Planning Mode into a guided three-pane flow
...
Make planning interviews easier to navigate while keeping the evolving plan and validation actions accessible.
- Show answered questions in an editable navigation pane and keep one clear next-question action.
- Keep the generated plan and validation controls visible throughout planning and recovery.
- Add server validation and localized copy for session title updates.
Files changed:
.changeset/fn-8400-planning-mode-ui.md | 7 +
MOBILE.md | 2 +-
docs/dashboard-guide.md | 6 +-
packages/dashboard/app/api/legacy.ts | 12 +-
.../dashboard/app/components/PlanningModeModal.css | 112 +++--
.../dashboard/app/components/PlanningModeModal.tsx | 408 +++++++++++--------
.../PlanningModeModal.planning-flow.test.tsx | 453 ++++++++-------------
.../PlanningModeModal.ui-interactions.test.tsx | 4 +-
.../src/__tests__/routes-planning.test.ts | 50 +++
packages/dashboard/src/planning.ts | 21 +-
.../src/routes/register-planning-subtask-routes.ts | 26 ++
packages/i18n/locales/en/app.json | 7 +-
packages/i18n/locales/es/app.json | 7 +-
packages/i18n/locales/fr/app.json | 7 +-
packages/i18n/locales/ko/app.json | 7 +-
packages/i18n/locales/zh-CN/app.json | 7 +-
packages/i18n/locales/zh-TW/app.json | 7 +-
packages/i18n/src/resources.d.ts | 5 +
18 files changed, 620 insertions(+), 528 deletions(-)
Fusion-Task-Id: FN-8400
Fusion-Task-Lineage: 032cf0ad-134d-4680-878f-b870eea23cc9
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-19 23:01:44 -07:00
gsxdsm
1f77935358
FN-8307: guard heartbeat task creation with mission lineage
...
Require autonomous heartbeat work to prove and retain approved mission lineage.
- Validate and persist mission lineage for created and delegated tasks
- Block off-mission heartbeat actions and reconcile roadmap failures without completion
- Renew and release mission symbol locks across workflow lifecycle transitions
Files changed:
.changeset/fn-8307-heartbeat-mission-guard.md | 7 ++
docs/missions.md | 4 +
packages/core/src/__tests__/symbol-locks.test.ts | 12 +++
packages/core/src/task-store/task-update.ts | 17 +++-
.../engine/src/__tests__/agent-action-gate.test.ts | 9 +-
.../src/__tests__/agent-tools-delegation.test.ts | 41 +++++++-
.../src/__tests__/gating-classifications.test.ts | 7 +-
.../src/__tests__/mission-feature-sync.test.ts | 10 +-
.../src/__tests__/mission-symbol-admission.test.ts | 25 +++++
.../src/__tests__/permanent-agent-gating.test.ts | 3 +-
packages/engine/src/agent-action-gate.ts | 28 +++++-
packages/engine/src/agent-heartbeat-prompts.ts | 14 +--
packages/engine/src/agent-heartbeat.ts | 34 +++++--
packages/engine/src/agent-tools.ts | 103 +++++++++++++++++++--
packages/engine/src/executor.ts | 2 +-
packages/engine/src/gating-classifications.ts | 11 ++-
packages/engine/src/mission-feature-sync.ts | 39 +++-----
packages/engine/src/mission-symbol-admission.ts | 35 ++++++-
packages/engine/src/permanent-agent-gating.ts | 22 +++++
packages/engine/src/scheduler.ts | 21 +++--
packages/engine/src/step-session-executor.ts | 2 +-
packages/engine/src/triage.ts | 2 +-
22 files changed, 369 insertions(+), 79 deletions(-)
Fusion-Task-Id: FN-8307
Fusion-Task-Lineage: 4ca2ccac-db6e-4e5c-9cc6-d62a40d4f30a
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-19 22:43:13 -07:00
gsxdsm
d4a87accb8
FN-8395: autosave settings changes
...
Settings edits now persist automatically with safe feedback and close handling.
- Debounce and serialize settings persistence, retaining newer edits through in-flight saves and unmounts.
- Remove the Settings Save action and unsaved-changes prompt while flushing pending section and workflow-lane updates.
- Update Settings documentation, release metadata, and regression coverage for auto-save behavior.
Files changed:
.changeset/fn-8395-settings-autosave.md | 7 +
docs/dashboard-guide.md | 11 +-
docs/settings-reference.md | 8 +-
.../dashboard/app/components/SettingsModal.tsx | 402 ++++++++++++++++-----
.../__tests__/SettingsModal.general.test.tsx | 154 ++++++--
.../SettingsModal.keyboardShortcuts.test.tsx | 7 +-
.../__tests__/SettingsModal.models-auth.test.tsx | 46 +--
.../SettingsModal.remote-notifications.test.tsx | 38 +-
.../SettingsModal.scheduling-merge.test.tsx | 58 ++-
.../__tests__/SettingsModal.test-harness.tsx | 9 +-
.../__tests__/SettingsModalNodeRouting.test.tsx | 2 -
.../settings/sections/ProjectModelsSection.tsx | 15 +-
12 files changed, 548 insertions(+), 209 deletions(-)
Fusion-Task-Id: FN-8395
Fusion-Task-Lineage: 77f4c0d3-d0cc-4973-9831-c70eb2a2b49b
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-19 22:16:11 -07:00
gsxdsm
93437ff09b
FN-8306: add mission symbol lock scheduler admission
...
Schedule approved mission work with durable symbol-level concurrency control.
- Gate mission execution on active lineage and required plan approval
- Acquire, renew, and release symbol locks across scheduler and workflow execution
- Honor custom workflow WIP columns when maintaining symbol-lock leases
- Add admission, contention, renewal, and custom-WIP regression coverage
Files changed:
.../fn-8306-mission-symbol-scheduler-admission.md | 7 ++
docs/architecture.md | 1 +
packages/core/src/task-store/moves.ts | 23 ++++
.../src/__tests__/mission-symbol-admission.test.ts | 54 +++++++++
.../__tests__/scheduler-workflow-cutover.test.ts | 49 ++++++++
.../src/__tests__/workflow-work-processor.test.ts | 39 ++++++
.../src/__tests__/workflow-work-scheduler.test.ts | 44 +++++++
packages/engine/src/mission-symbol-admission.ts | 94 +++++++++++++++
packages/engine/src/scheduler.ts | 133 ++++++++++++++++++++-
packages/engine/src/workflow-work-processor.ts | 22 +++-
packages/engine/src/workflow-work-scheduler.ts | 62 +++++++++-
11 files changed, 520 insertions(+), 8 deletions(-)
Fusion-Task-Id: FN-8306
Fusion-Task-Lineage: ec6a9928-d8c0-4cf7-99b5-47e1fc3a2dcc
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-19 22:07:55 -07:00
gsxdsm
9e962bb670
FN-8415: scrub report file activity traces
...
Scrub file-report activity traces before report pipeline processing.
- Sanitize top-level and nested activity traces before parsing report input.
- Add regressions for trace scrubbing and absent-trace behavior.
- Document the report filing scrub boundary and add a security changeset.
Files changed:
.changeset/fn-8415-report-file-activity-trace-scrub.md | 7 +++++
docs/dashboard-guide.md | 2 +-
packages/dashboard/src/__tests__/report-routes.test.ts | 35 ++++++++++++++++++++++
packages/dashboard/src/routes/register-report-routes.ts | 16 ++++++++--
4 files changed, 56 insertions(+), 4 deletions(-)
Fusion-Task-Id: FN-8415
Fusion-Task-Lineage: 90e42370-1682-42fc-bd53-61bb23da84a8
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-19 21:27:25 -07:00
gsxdsm
3008eb2dd8
FN-8405: add durable task symbol declarations
...
Persist normalized task symbol declarations and resolve symbols solely from durable task data.
- Add declared-symbol parsing, normalization, and durable TaskStore resolution APIs.
- Persist declarations through PostgreSQL migration, task serialization, and archive/restore flows.
- Cover declaration precedence and schema upgrades with core tests.
Files changed:
docs/architecture.md | 1 +
docs/storage.md | 1 +
.../src/__tests__/postgres/schema-applier.test.ts | 39 +++-
.../src/__tests__/task-symbol-resolution.test.ts | 222 +++++++++++++++++++++
packages/core/src/index.ts | 10 +
.../core/src/postgres/migrations/0000_initial.sql | 1 +
.../migrations/0028_task_declared_symbols.sql | 1 +
packages/core/src/postgres/schema-applier.ts | 12 +-
packages/core/src/postgres/schema/project.ts | 1 +
packages/core/src/store.ts | 22 +-
.../core/src/task-store/archive-lifecycle-2.ts | 2 +
packages/core/src/task-store/persistence.ts | 4 +-
packages/core/src/task-store/remaining-ops-2.ts | 2 +-
packages/core/src/task-store/serialization.ts | 2 +
packages/core/src/task-store/task-creation.ts | 5 +
packages/core/src/task-store/task-row-mappers.ts | 2 +-
packages/core/src/task-store/task-update.ts | 9 +
packages/core/src/task-symbol-resolution.ts | 65 ++++++
packages/core/src/types.ts | 5 +
19 files changed, 400 insertions(+), 6 deletions(-)
Fusion-Task-Id: FN-8405
Fusion-Task-Lineage: ca86dbe5-cd4c-4f58-b607-678d669875af
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-19 21:19:56 -07:00
gsxdsm
a11f789b0c
FN-8327: fall back to issues when Discussions are disabled
...
Reports can select a Discussion category and reliably file to Issues when Discussions are unavailable.
- Add Discussion-disabled detection across GitHub GraphQL operations.
- Let report submission select a category and disclose the actual filing destination.
- Preserve duplicate handling and document the fallback behavior.
Files changed:
.changeset/fn-8327-discussion-fallback.md | 7 +++
docs/dashboard-guide.md | 4 +-
packages/dashboard/app/api/report.ts | 22 +++++--
packages/dashboard/app/components/ReportModal.tsx | 7 ++-
.../app/components/__tests__/ReportModal.test.tsx | 13 ++++
.../src/__tests__/github-discussions.test.ts | 29 +++++++--
.../src/__tests__/report-pipeline.test.ts | 63 ++++++++++++++-----
.../dashboard/src/__tests__/report-routes.test.ts | 15 +++--
packages/dashboard/src/github.ts | 71 ++++++++++++++++------
packages/dashboard/src/report-pipeline.ts | 54 +++++++++++-----
.../dashboard/src/routes/register-report-routes.ts | 12 +++-
11 files changed, 227 insertions(+), 70 deletions(-)
Fusion-Task-Id: FN-8327
Fusion-Task-Lineage: 510d3d4f-ffc9-4167-bee8-7043e0ddbd9c
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-19 20:42:05 -07:00
gsxdsm
f6c788dee4
FN-8409: enable coding tools for dashboard chat agents
...
Enable interactive dashboard chat sessions to use the project coding workspace safely.
- Share the coding tool mode across direct, room, and planner chat sessions.
- Document branch-sticky workspace behavior and durable-agent policy gates.
- Cover coding tool access and prompt guidance with chat tests.
- Add a minor changeset for the published Fusion package.
Files changed:
.changeset/fn-8409-chat-coding-tools.md | 7 +++++
docs/agents.md | 6 +++++
docs/dashboard-guide.md | 2 ++
.../dashboard/src/__tests__/chat-manager.test.ts | 31 +++++++++++++++-------
.../src/__tests__/chat-system-prompt.test.ts | 11 ++++++++
packages/dashboard/src/chat.ts | 12 ++++++---
6 files changed, 56 insertions(+), 13 deletions(-)
Fusion-Task-Id: FN-8409
Fusion-Task-Lineage: ca88794d-a5cf-4852-a931-90f61e3751df
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-19 20:36:27 -07:00
gsxdsm
64c1193d1e
FN-8333: embed report screenshots in GitHub filings
...
Enable opt-in report screenshots to be safely hosted and embedded in filed GitHub reports.
- add GitHub Contents API image upload support and CLI-safe payload handling
- validate and resolve report screenshot artifacts before best-effort Markdown embedding
- cover upload, media access, filing, and report modal behavior with tests
Files changed:
.changeset/github-report-screenshot-embed.md | 7 +++
docs/dashboard-guide.md | 4 +-
packages/core/src/__tests__/gh-cli-input.test.ts | 32 ++++++++++
packages/core/src/gh-cli.ts | 21 ++++++-
.../app/components/__tests__/ReportModal.test.tsx | 5 ++
.../dashboard/src/__tests__/artifact-media.test.ts | 20 ++++++
.../__tests__/github-upload-image-asset.test.ts | 39 ++++++++++++
.../__tests__/report-pipeline-screenshots.test.ts | 67 ++++++++++++++++++++
.../dashboard/src/__tests__/report-routes.test.ts | 36 ++++++++++-
packages/dashboard/src/artifact-media.ts | 32 ++++++++++
packages/dashboard/src/github.ts | 57 +++++++++++++++++
packages/dashboard/src/issue-image-attachments.ts | 6 +-
packages/dashboard/src/report-pipeline.ts | 72 ++++++++++++++++++----
.../dashboard/src/routes/register-report-routes.ts | 29 ++++++---
.../src/routes/register-task-workflow-routes.ts | 24 +-------
15 files changed, 401 insertions(+), 50 deletions(-)
Fusion-Task-Id: FN-8333
Fusion-Task-Lineage: b706810d-2fec-4053-b57a-1128e5c16e94
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-19 18:45:27 -07:00
gsxdsm
18f1cb743a
FN-8308: add selectable GitHub Discussions report targets
...
Enable configurable GitHub Issue or Discussion destinations for in-app reports.
- Add report target and Discussion category settings with localized controls.
- Validate target overrides before Help shortcuts and route them through report filing.
- Discover and validate GitHub Discussion categories through GraphQL.
- Cover target validation on both draft and file routes.
Files changed:
.changeset/fn-8308-report-discussions.md | 7 +++
docs/dashboard-guide.md | 7 +++
.../core/src/__tests__/settings-parity.test.ts | 9 +++
packages/core/src/index.gate.ts | 2 +-
packages/core/src/index.ts | 2 +-
packages/core/src/settings-schema.ts | 4 ++
packages/core/src/types.ts | 10 ++++
packages/dashboard/app/api/report.ts | 13 +++-
packages/dashboard/app/components/ReportModal.tsx | 9 ++-
.../__tests__/SettingsModal.general.test.tsx | 18 ++++++
.../settings/sections/GeneralSection.tsx | 16 ++++-
.../src/__tests__/github-discussions.test.ts | 44 ++++++++++++++
.../src/__tests__/report-pipeline.test.ts | 70 +++++++++++++++++++++-
.../dashboard/src/__tests__/report-routes.test.ts | 19 ++++++
packages/dashboard/src/github.ts | 37 ++++++++++--
packages/dashboard/src/index.ts | 4 +-
packages/dashboard/src/report-pipeline.ts | 41 +++++++++----
.../dashboard/src/routes/register-report-routes.ts | 32 ++++++++--
packages/i18n/locales/en/app.json | 26 +++++++-
packages/i18n/locales/es/app.json | 26 +++++++-
packages/i18n/locales/fr/app.json | 26 +++++++-
packages/i18n/locales/ko/app.json | 26 +++++++-
packages/i18n/locales/zh-CN/app.json | 26 +++++++-
packages/i18n/locales/zh-TW/app.json | 26 +++++++-
24 files changed, 453 insertions(+), 47 deletions(-)
Fusion-Task-Id: FN-8308
Fusion-Task-Lineage: f5ac1b67-ecbc-4765-88c7-c524c7e943bf
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-19 18:37:45 -07:00
gsxdsm
fc8c7a6cca
FN-8410: preserve productive work when reports are stuck
...
Guide managers to verify live progress before reassigning stuck heartbeat reports.
- Replace immediate reassignment guidance with live-work verification steps
- Cover the safe recovery guidance in heartbeat reports-health tests
- Document stuck-report triage and reassignment criteria
Files changed:
docs/agents.md | 4 +++-
packages/engine/src/__tests__/heartbeat-executor.test.ts | 2 ++
packages/engine/src/agent-heartbeat.ts | 10 +++++++++-
3 files changed, 14 insertions(+), 2 deletions(-)
Fusion-Task-Id: FN-8410
Fusion-Task-Lineage: b1168aab-41cf-4148-be67-c20812e6f5b5
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-19 18:07:29 -07:00
gsxdsm
365874f7f9
FN-8406: consolidate Command Center report actions
...
Move the guided report flow to System while ensuring its menu reliably overlays dashboard content.
- Portal the shared ReportActionMenu with a defined dropdown/modal stacking scale.
- Make System the sole Command Center report home and retain Copy diagnostics as a local action.
- Update regression coverage, documentation, and the published package changeset.
Files changed:
.changeset/fn-8406-report-home-zindex.md | 7 ++
docs/dashboard-guide.md | 4 +-
.../dashboard/app/components/ReportActionMenu.css | 5 +-
.../dashboard/app/components/ReportActionMenu.tsx | 72 ++++++++++++-
.../components/__tests__/ReportActionMenu.test.tsx | 12 +++
.../components/command-center/CommandCenter.css | 32 ------
.../components/command-center/CommandCenter.tsx | 59 ++++-------
.../__tests__/CommandCenter.test.tsx | 8 +-
.../__tests__/SystemControlsArea.test.tsx | 94 +----------------
.../command-center/areas/SystemControlsArea.tsx | 112 ++++-----------------
packages/dashboard/app/styles.css | 11 ++
11 files changed, 144 insertions(+), 272 deletions(-)
Fusion-Task-Id: FN-8406
Fusion-Task-Lineage: 957a77b0-fb04-4024-9506-225fec562f5d
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-19 17:39:43 -07:00
gsxdsm
e4a032d9d9
FN-8399: expose incomplete migration status on dashboard
...
Expose durable SQLite-to-PostgreSQL migration state through dashboard health and banners.
- Read per-project running and failed migration markers from PostgreSQL
- Surface degraded migration state in health endpoints and dashboard banners
- Preserve migration context across CLI and runtime startup paths
- Document the recovery workflow and add a patch changeset
Files changed:
.changeset/FN-8399-migration-status-dashboard.md | 7 +++
docs/storage.md | 5 ++
packages/cli/src/commands/daemon.ts | 19 +++++++
packages/cli/src/commands/desktop.ts | 6 +++
packages/cli/src/commands/serve.ts | 20 +++++++-
packages/core/src/index.ts | 2 +
packages/core/src/postgres/index.ts | 2 +
packages/core/src/postgres/sqlite-migrator.ts | 43 ++++++++++++++++
packages/dashboard/app/api/health.ts | 7 ++-
.../app/components/dashboard/DashboardBanners.tsx | 18 ++++++-
.../dashboard/__tests__/DashboardBanners.test.tsx | 12 ++++-
.../__tests__/dashboard-postgres-health.test.ts | 45 +++++++++++++++++
.../dashboard/src/dashboard-postgres-health.ts | 58 ++++++++++++++++++++++
packages/dashboard/src/server.ts | 27 ++++++++--
packages/engine/src/project-engine-manager.ts | 4 ++
packages/engine/src/project-runtime.ts | 9 +++-
packages/engine/src/runtimes/in-process-runtime.ts | 1 +
17 files changed, 275 insertions(+), 10 deletions(-)
Fusion-Task-Id: FN-8399
Fusion-Task-Lineage: e196d6c4-ea9a-48ba-bedc-9e6fa44c33d3
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-19 16:52:02 -07:00
gsxdsm
a9c7a6bcc0
FN-8371: store report screenshot artifacts
...
Store opted-in report screenshots as validated local artifacts rather than GitHub attachments.
- Add multipart report attachment upload with PNG/JPEG validation and provenance metadata.
- Carry validated artifact references through report drafts and filing flows without binary egress.
- Update report UI, tests, documentation, and release metadata.
Files changed:
.changeset/report-screenshot-artifacts.md | 7 +
docs/dashboard-guide.md | 2 +-
packages/core/src/index.gate.ts | 2 +-
packages/core/src/index.ts | 2 +-
packages/core/src/types.ts | 7 +
packages/dashboard/app/api/report.ts | 14 +-
packages/dashboard/app/components/ReportModal.css | 3 +-
packages/dashboard/app/components/ReportModal.tsx | 41 ++---
.../app/components/__tests__/ReportModal.test.tsx | 58 +++++--
packages/dashboard/app/utils/report-capture.ts | 47 ++----
.../src/__tests__/report-pipeline.test.ts | 94 ------------
.../dashboard/src/__tests__/report-routes.test.ts | 123 +++++++++++----
packages/dashboard/src/report-pipeline.ts | 128 +++-------------
.../dashboard/src/routes/register-report-routes.ts | 169 +++++++--------------
14 files changed, 279 insertions(+), 418 deletions(-)
Fusion-Task-Id: FN-8371
Fusion-Task-Lineage: 48d0e94d-602f-43e2-a63f-cb497221ac29
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-19 16:44:40 -07:00
gsxdsm
efa9580b93
FN-8366: enforce end-to-end project scoping
...
Ensure asynchronous dashboard data and real-time streams remain bound to their active project context.
- Resolve SSE and badge WebSocket stores through the canonical project resolver
- Guard agents, artifacts, and documents hooks against stale project responses and events
- Add scoped cache handling, regression coverage, and architecture documentation
Files changed:
docs/architecture.md | 7 ++++
.../app/hooks/__tests__/useAgents.test.ts | 24 +++++++++++
.../app/hooks/__tests__/useArtifacts.test.ts | 47 ++++++++++++++++++++++
.../app/hooks/__tests__/useDocuments.test.ts | 34 ++++++++++++++++
packages/dashboard/app/hooks/useAgents.ts | 47 +++++++++++++++++-----
packages/dashboard/app/hooks/useArtifacts.ts | 26 +++++++++---
packages/dashboard/app/hooks/useDocuments.ts | 18 ++++++++-
.../dashboard/app/hooks/useProjectContextGuard.ts | 38 +++++++++++++++++
.../routes-context-project-identity.test.ts | 12 ++++++
packages/dashboard/src/server.ts | 21 +++++++---
10 files changed, 251 insertions(+), 23 deletions(-)
Fusion-Task-Id: FN-8366
Fusion-Task-Lineage: 0fcd38c1-727f-4511-8209-5d70cbf9eb0d
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-19 16:29:39 -07:00
gsxdsm
ccb7d4e8ff
FN-8367: enforce bounded engine shellouts
...
Enforce bounded synchronous shellout use across the engine.
- Audit every production synchronous shellout against a call-site allowlist.
- Bound data-dependent git diff commands by timeout and output size.
- Document the async shellout invariant and align focused command guards.
Files changed:
AGENTS.md | 2 +-
docs/architecture.md | 1 +
.../__tests__/engine-no-blocking-shellout.test.ts | 135 +++++++++++++++++++++
.../user-configured-command-no-execsync.test.ts | 5 +-
packages/engine/src/merger-git-parse.ts | 16 ++-
.../engine/src/merger-workspace-test-commands.ts | 27 ++++-
6 files changed, 181 insertions(+), 5 deletions(-)
Fusion-Task-Id: FN-8367
Fusion-Task-Lineage: 976384e6-f283-4464-9f74-f328f2be3430
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-19 16:00:28 -07:00
gsxdsm
d940bf3d5c
FN-8358: add roadmap-item structure previews
...
Enable native previews and hosted navigation for roadmap items.
- Extend native structure references and API resolution through the roadmap adapter.
- Register the bundled Roadmaps view across desktop and mobile navigation.
- Cover roadmap preview availability, navigation, and route behavior.
Files changed:
...n-8358-roadmap-item-native-structure-preview.md | 7 ++++
docs/dashboard-guide.md | 6 ++--
packages/core/src/types.ts | 24 ++++++++-----
packages/dashboard/app/App.tsx | 24 ++++++++-----
.../dashboard/app/components/LeftSidebarNav.tsx | 12 +++----
.../app/components/NativeStructurePreview.tsx | 10 ++++--
.../app/components/__tests__/App.test.tsx | 13 ++++---
.../app/components/__tests__/Header.test.tsx | 5 ++-
.../components/__tests__/LeftSidebarNav.test.tsx | 5 ++-
.../app/components/__tests__/MobileNavBar.test.tsx | 4 +--
.../__tests__/NativeStructurePreview.test.tsx | 40 ++++++++++++++++------
.../__tests__/registerBundledPluginViews.test.tsx | 24 ++++++++++---
.../app/plugins/registerBundledPluginViews.ts | 23 +++++++++++++
packages/dashboard/src/native-structure-preview.ts | 25 +++++++++++++-
.../native-structure-preview-routes.test.ts | 31 +++++++++++++++--
.../src/routes/register-task-workflow-routes.ts | 4 +--
packages/dashboard/vite.config.ts | 4 +++
packages/dashboard/vitest.config.ts | 4 +++
plugins/fusion-plugin-roadmap/package.json | 5 +++
.../fusion-plugin-roadmap/src/dashboard-view.tsx | 5 +++
plugins/fusion-plugin-roadmap/src/index.ts | 14 ++++++--
21 files changed, 223 insertions(+), 66 deletions(-)
Fusion-Task-Id: FN-8358
Fusion-Task-Lineage: c369ce87-eef0-4d06-bf23-bced9c4363f9
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-19 15:45:45 -07:00
gsxdsm
41f387b219
FN-8364: track task token usage from session deltas
...
Track only task-local deltas from cumulative session usage.
- Capture and reset baselines for reused, resumed, and heartbeat sessions
- Route executor prompt accounting through the shared per-session delta seam
- Cover token accounting behavior and document the analytics correction
Files changed:
.changeset/fn-8364-session-token-deltas.md | 7 +++
docs/storage.md | 2 +-
.../src/__tests__/executor-token-usage.test.ts | 48 +++++++++++++++++++-
.../src/__tests__/heartbeat-executor.test.ts | 42 +++++++++++++++++
.../src/__tests__/session-token-usage.test.ts | 53 +++++++++++++++++++++-
packages/engine/src/agent-heartbeat.ts | 10 +++-
packages/engine/src/executor.ts | 44 +++++++++++-------
packages/engine/src/session-token-usage.ts | 20 ++++++++
8 files changed, 205 insertions(+), 21 deletions(-)
Fusion-Task-Id: FN-8364
Fusion-Task-Lineage: 2b16a581-0d58-4c91-8903-6ce368b30a7c
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-19 15:38:31 -07:00
gsxdsm
2c72ac0c0c
FN-8387: add canonical lineage approval predicate
...
Centralize symbol-lock admission rules for resolved mission lineage.
- Add a pure core predicate with stable approval and rejection reasons.
- Export the lineage contract and cover status and plan-fingerprint cases.
- Document scheduler ownership and the admission requirements.
Files changed:
docs/missions.md | 15 +++
.../__tests__/symbol-lock-lineage-approval.test.ts | 123 +++++++++++++++++++++
packages/core/src/index.ts | 10 ++
packages/core/src/symbol-lock-lineage-approval.ts | 87 +++++++++++++++
4 files changed, 235 insertions(+)
Fusion-Task-Id: FN-8387
Fusion-Task-Lineage: dc2d8518-ffff-4062-b11f-a162dd1b10da
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-19 15:20:39 -07:00
gsxdsm
bea51f7bdb
FN-8348: relocate report actions to settings and command center
...
Relocate guided reporting from the header into durable project and overview surfaces.
- Add Report entry points to Project General settings and Command Center Overview.
- Preserve guided report modal context through a shared route helper.
- Cover relocated controls and update dashboard guidance.
Files changed:
docs/dashboard-guide.md | 2 +-
packages/dashboard/app/components/Header.tsx | 33 ++++------------------
.../dashboard/app/components/SettingsModal.tsx | 2 +-
.../app/components/__tests__/Header.test.tsx | 7 +++++
.../components/command-center/CommandCenter.css | 32 +++++++++++++++++++++
.../components/command-center/CommandCenter.tsx | 30 +++++++++++++++++++-
.../__tests__/CommandCenter.test.tsx | 11 ++++++++
.../settings/sections/GeneralSection.tsx | 21 ++++++++++++++
.../GeneralSection.aiUndoWorkflow.test.tsx | 20 +++++++++++--
packages/dashboard/app/utils/reportContextRefs.ts | 13 +++++++++
10 files changed, 139 insertions(+), 32 deletions(-)
Fusion-Task-Id: FN-8348
Fusion-Task-Lineage: add1b302-deab-4e17-be2f-832971c1c83d
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-19 15:12:23 -07:00
gsxdsm
f85acce548
FN-8361: guard planning recovery mutations atomically
...
Keep delayed planning recovery mutations conditional on the task still being in its planning stage.
- Add task-lock-backed conditional move and deletion APIs for planning recovery.
- Guard triage and self-healing writes, including prompt-file mutations, with live planning predicates.
- Cover conditional task operations and stale recovery behavior with regression tests.
Files changed:
docs/architecture.md | 2 +-
.../src/__tests__/delete-task-if-planning.test.ts | 56 +++++++++++++
.../src/__tests__/move-task-if-planning.test.ts | 43 ++++++++++
packages/core/src/store.ts | 22 ++++-
.../core/src/task-store/archive-lifecycle-2.ts | 35 ++++++++
packages/core/src/task-store/archive-lifecycle.ts | 65 +++++++++++++++
packages/core/src/task-store/moves.ts | 32 ++++++++
packages/engine/src/__tests__/self-healing.test.ts | 26 ++++++
packages/engine/src/__tests__/triage.test.ts | 14 +++-
packages/engine/src/self-healing.ts | 30 ++++++-
packages/engine/src/triage.ts | 95 ++++++++++++++++------
11 files changed, 383 insertions(+), 37 deletions(-)
Fusion-Task-Id: FN-8361
Fusion-Task-Lineage: d76f1805-d8c6-4b3f-9bc6-12907aae9733
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-19 15:05:31 -07:00
gsxdsm
da1e445d6b
FN-8310: add public-roadmap report deduplication
...
Add public-roadmap issues as a configurable, reviewable deduplication source for in-app reports.
- Resolve roadmap settings across project, global, and tracking-repository fallbacks
- Search and endorse matching open roadmap issues before filing duplicate reports
- Expose and index roadmap controls with localized default descriptions
Files changed:
.changeset/fn-8310-public-roadmap-dedupe.md | 7 ++
docs/dashboard-guide.md | 2 +-
docs/settings-reference.md | 4 +-
.../core/src/__tests__/settings-parity.test.ts | 14 +++-
packages/core/src/settings-schema.ts | 7 +-
packages/core/src/types.ts | 13 +++-
packages/dashboard/app/api/report.ts | 2 +-
packages/dashboard/app/components/ReportModal.tsx | 18 ++---
.../dashboard/app/components/SettingsModal.tsx | 15 +++-
.../app/components/__tests__/ReportModal.test.tsx | 12 ++--
.../__tests__/SettingsModal.general.test.tsx | 6 +-
.../settings/__tests__/section-keys.test.ts | 5 +-
.../app/components/settings/save-split.ts | 14 ++--
.../app/components/settings/section-keys.ts | 5 ++
.../settings/sections/GeneralSection.search.ts | 34 ++++++---
.../settings/sections/GeneralSection.tsx | 29 ++++++--
.../sections/SourceControlGlobalSection.search.ts | 27 +++++++
.../sections/SourceControlGlobalSection.tsx | 55 ++++++++++----
.../settings-default-descriptions.test.tsx | 4 +-
.../src/__tests__/report-pipeline.test.ts | 73 ++++++++++++-------
.../dashboard/src/__tests__/report-routes.test.ts | 23 +++---
packages/dashboard/src/report-pipeline.ts | 84 ++++++++++++++--------
.../dashboard/src/routes/register-report-routes.ts | 9 +--
packages/i18n/locales/en/app.json | 17 ++++-
packages/i18n/locales/es/app.json | 17 ++++-
packages/i18n/locales/fr/app.json | 17 ++++-
packages/i18n/locales/ko/app.json | 17 ++++-
packages/i18n/locales/zh-CN/app.json | 16 ++++-
packages/i18n/locales/zh-TW/app.json | 16 ++++-
29 files changed, 409 insertions(+), 153 deletions(-)
Fusion-Task-Id: FN-8310
Fusion-Task-Lineage: 0efa8d76-e849-4256-bdcd-e9d6dd612e41
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-19 14:51:49 -07:00
gsxdsm
965f15f5ca
FN-8368: enforce browser-safe dashboard core imports
...
Prevent dashboard code from bypassing Vite's browser-safe core boundary.
- Add an allowlist-backed scanner for dashboard core value imports, including dynamic template imports.
- Run the scanner in test and merge-gate prechecks, with regression coverage and import guidance.
- Document reviewed browser-safe core leaves and Vite alias requirements.
Files changed:
docs/dashboard-guide.md | 6 +
package.json | 6 +-
packages/dashboard/vite.config.ts | 5 +
...no-node-only-core-imports-in-dashboard.test.mjs | 80 ++++++++++
...heck-no-node-only-core-imports-in-dashboard.mjs | 167 +++++++++++++++++++++
.../lib/dashboard-browser-safe-core-modules.json | 59 ++++++++
6 files changed, 320 insertions(+), 3 deletions(-)
Fusion-Task-Id: FN-8368
Fusion-Task-Lineage: 13e70672-d1da-430c-a360-0a714ad33d9f
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-19 14:08:51 -07:00
gsxdsm
2302fb8a3d
feat: add beta/stable release tracks with switchable update channel ( #2345 )
...
## Summary
Fusion can now ship on two release tracks. Betas are cut from `main` as
`vX.Y.Z-beta.N` (npm dist-tag `beta`, GitHub prerelease), stable
releases are promoted to a long-lived `release` branch and published to
`latest`, and users pick their track with the new `updateChannel` global
setting — via **Settings → General → Release channel** or `fn update
--channel <stable|beta>`. Previously everything was single-track: every
publish landed on `latest` and every update surface could only see it.
| | beta | stable |
|---|---|---|
| Cut from | `main` | `release` branch |
| Version | `X.Y.Z-beta.N` (changesets pre-mode) | `X.Y.Z` |
| npm dist-tag | `beta` | `latest` |
| GitHub Release | prerelease | latest |
| Homebrew tap / X draft | skipped | bumped / printed |
## How releasing works now
`pnpm release` prompts for the channel and **defaults to beta**, so
day-to-day releases are betas; stable is always an explicit choice.
Choosing stable from `main` triggers assisted promotion: the script
proposes the newest beta tag reachable from HEAD, verifies `release`
fast-forwards to it, then runs the whole stable release inside a
temporary git worktree on `release` — the primary checkout never leaves
`main`. Changesets pre-mode preserves changeset files across betas, so
the promoted stable release aggregates every changeset since the last
stable into one clean changelog entry.
## Design decisions
- **Every publish path names an explicit `--tag`.** A beta accidentally
landing on `latest` is the one unrecoverable failure of a dual-track
scheme, so nothing relies on npm's implicit default (`release.mjs`,
`version.yml`).
- **Beta channel resolves to semver-max of `latest` and `beta`**, so
beta users are offered each promoted stable once it overtakes their
prerelease. Switching beta → stable never downgrades; `fn update
--channel stable --force` is the explicit escape hatch.
- **One comparator instead of three.** CLI, dashboard, and desktop each
had their own `isRemoteNewer` that ignored prerelease identifiers —
`0.73.0-beta.2`, `-beta.3`, and `0.73.0` all compared equal, which
breaks the moment any beta exists. They now share full SemVer-precedence
helpers (`compareVersions`, `resolveUpdateTargetVersion`) from
`@fusion/core`.
- **Installs pin exact versions** (`@runfusion/fusion@0.73 .0-beta.2`),
never a dist-tag, so an install can't silently land on the wrong track.
- **Desktop channels via electron-updater manifests.** Beta tags build
desktop artifacts with `publish.channel=beta` (emitting `beta*.yml`);
the app sets `channel`/`allowPrerelease` from the shared setting,
re-read on every manual check.
- **Update caches are channel-stamped** — a cache written for one
channel is never served to the other, so switching tracks takes effect
on the next check instead of after TTL.
## Test plan
- New unit coverage: SemVer precedence + channel resolution in
`@fusion/core` (30), channel behavior of the dashboard update check (28,
incl. 9 new) and `fn update` (16, incl. 8 new: persist `--channel`,
no-downgrade, `--force`, cache channel mismatch).
- `pnpm verify:fast` green (scoped typecheck, builds, CLI build, boot
smoke); desktop + settings-section suites green.
- `release.mjs` dry-run matrix exercised by hand: channel prompt
(default/override/invalid), branch preflights per channel,
assisted-promotion target selection, fast-forward guard against a
diverged `release` branch, and bootstrap when no `release` branch
exists.
- Not exercised live: an end-to-end publish (needs TTY authorization +
real npm publish). First real run is the first `pnpm release --channel
beta`.
---
[](https://github.com/EveryInc/compound-engineering-plugin )

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
* **New Features**
* Added beta and stable release channels across CLI, dashboard, and
desktop updates.
* Users can select a channel via Settings or `fn update --channel
<stable|beta>` (stored as a global default).
* Desktop beta releases now generate beta update manifests and publish
as prereleases.
* **Documentation**
* Expanded release-track, settings, and CLI references to explain
channel semantics and workflows.
* **Bug Fixes**
* Updates now pin the resolved version per channel, improve version
comparison, and prevent unintended cross-channel downgrades unless
`--force` is used.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
---------
Co-authored-by: Claude Fable 5 <noreply@anthropic.com >
2026-07-19 13:34:25 -07:00
gsxdsm
3f7c32c95c
refactor(cutover 2/3): engine — graph-owned lifecycle, legacy execution deleted ( #2342 )
...
Part **2 of 3** of the IR-driven lifecycle cutover (stacked on #2341 ;
top is #2335 ).
**Scope (80 files, packages/engine + cli/pi skill docs +
AGENTS/architecture):** graph-driven column moves via the
column-boundary controller (R1), single-mover scheduler/hold-release
trait cutover (KTD-2/KTD-9), trait re-keyed self-healing + merger with
the R7b confirmed-merge-must-finalize guarantee, graph-exclusive Plan
Review with leased dedup (R4/R5), the executeCore body-lift — zero
legacy re-entry — with fn_review_step + interceptor machinery deleted
and tombstone-ratcheted (R9), builtin workflow runtime fixes (missing
hold handler, unseamed-node column inheritance, no-merge completion
mover), the 6-column benchmark acceptance suite (11 tests) + 12-builtin
lifecycle sweep (94 assertions), and the executor test-harness
modernization. Also retires core's interpreter-cutover scaffolding whose
last consumer (the authoritative driver) dies here.
**Merge order:** #2341 → this → #2335 . After #2341 merges, retarget this
to main.
🤖 Generated with [Claude Code](https://claude.com/claude-code )
---------
Co-authored-by: Claude Fable 5 <noreply@anthropic.com >
2026-07-19 12:08:10 -07:00
gsxdsm
05a02e8061
refactor(cutover 1/3): core — IR-driven lifecycle foundation ( #2341 )
...
Part **1 of 3** of the IR-driven lifecycle cutover (split from #2335 to
fit review-tool file limits; plan:
docs/plans/2026-07-18-001-refactor-ir-driven-lifecycle-cutover-plan.md,
included here).
**Scope (48 files, packages/core + docs/plans):** shared transition
policy + validator (KTD-5), IR validation hardening incl. the benchmark
capability floor, CAS review leases (KTD-4), pooled WIP capacity budgets
(KTD-9), lifecycle-trait helpers, durable IR pin/drift detection
(KTD-3), review-level creation-time preset, legacy adoption module +
census + migration 0026 + stale-binary guard (KTD-8), core-side builtin
workflow fixes (single default-IR authority, no-merge complete-column
support).
Note: `workflow-cutover.ts` (interpreter parity scaffolding) stays alive
in this PR — its last consumer dies in part 2/3, which retires it.
**Merge order:** this PR → #TBD-2 (engine) → #2335 (dashboard/top).
🤖 Generated with [Claude Code](https://claude.com/claude-code )
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
* **New Features**
* Added workflow-trait-driven task lifecycle transitions, including WIP
capacity pooling and workflow-aware recovery (IR pinning + drift
detection).
* Added legacy adoption/backfill for pre-cutover task states, with
unmappable rows safely parked.
* Added create-time `reviewLevel` presets to automatically configure
enabled workflow steps.
* **Bug Fixes**
* Fixed workflow moves when no workflow selection exists.
* Improved merge-blocker validation to be keyed to the workflow’s actual
review-lane identity, preventing invalid moves and misclassified
terminal states.
* **Tests**
* Added end-to-end and unit/integration coverage for workflow
validation, legacy adoption, migrations/schema guards, leases, review
presets, and transition rules.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
---------
Co-authored-by: Claude Fable 5 <noreply@anthropic.com >
2026-07-19 11:50:52 -07:00
gsxdsm
ecffdbb14b
fix: isolate test-mode database access
...
Prevent automated tests from inheriting production PostgreSQL URLs and route global test-mode startups to a dedicated external or embedded test database.
2026-07-19 00:10:02 -07:00
gsxdsm
e30f6d851f
FN-8293: add native structure drag-and-draft mail composition
...
Mail composers can attach native structures by drag-and-drop and generate report narratives with AI.
- Add a shared native-structure drag protocol and attachable previews across Mail source views.
- Add a disposable compose-chat panel that drafts narratives around attached embeds.
- Cover drag behavior and compose-chat session lifecycle, and document the Mail interaction.
Files changed:
.changeset/fn-8293-mail-drag-compose-chat.md | 7 ++
docs/dashboard-guide.md | 3 +
.../dashboard/app/components/ComposeChatPanel.css | 33 ++++++
.../dashboard/app/components/ComposeChatPanel.tsx | 117 +++++++++++++++++++++
packages/dashboard/app/components/EvalsView.tsx | 3 +-
packages/dashboard/app/components/GoalsView.tsx | 6 ++
packages/dashboard/app/components/InsightsView.tsx | 8 +-
.../dashboard/app/components/MessageComposer.css | 22 ++++
.../dashboard/app/components/MessageComposer.tsx | 92 ++++++++++++++--
.../dashboard/app/components/MissionManager.tsx | 11 +-
.../components/__tests__/ComposeChatPanel.test.tsx | 102 ++++++++++++++++++
.../components/__tests__/MessageComposer.test.tsx | 25 +++++
.../utils/__tests__/nativeStructureDrag.test.ts | 56 ++++++++++
.../dashboard/app/utils/nativeStructureDrag.ts | 54 ++++++++++
14 files changed, 525 insertions(+), 14 deletions(-)
Fusion-Task-Id: FN-8293
Fusion-Task-Lineage: 9864e76c-2a0d-41f6-b7f2-de8dd63710b5
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-18 20:30:42 -07:00
gsxdsm
0dbe67c851
FN-8356: clear stale duplicate decision pauses
...
Clear inactive duplicate markers so eligible tasks resume planning instead of showing a stranded decision badge.
- Reconcile stale triage-marker duplicate pauses during self-healing and record audit events.
- Clear inactive canonical markers during triage while preserving user and unrelated pauses.
- Cover missing, deleted, completed, and archived canonical states with regression tests.
Files changed:
.changeset/fn-8356-stale-duplicate-decision.md | 7 ++
AGENTS.md | 1 +
docs/architecture.md | 1 +
.../explicit-duplicate-marker-sweep.test.ts | 43 ++++++--
.../self-healing-stale-duplicate-decision.test.ts | 109 +++++++++++++++++++++
.../triage-explicit-duplicate-marker.test.ts | 32 ++++--
packages/engine/src/run-audit.ts | 2 +
packages/engine/src/self-healing.ts | 87 ++++++++++++++--
packages/engine/src/triage.ts | 41 ++++++--
9 files changed, 298 insertions(+), 25 deletions(-)
Fusion-Task-Id: FN-8356
Fusion-Task-Lineage: 8df8f0ee-d73e-41d6-8abe-a4b33662c9da
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-18 20:06:41 -07:00
gsxdsm
c8b4e23ca4
FN-8357: show verification videos in the Quality hub
...
Surface executor-produced task verification videos in the top-level Quality hub.
- Fetch review-artifact settings and video artifacts per selected project.
- Render tokenized inline videos with source-task navigation and responsive states.
- Add host interop aliases, coverage, documentation, and a minor changeset.
Files changed:
.changeset/FN-8357-quality-verification-videos.md | 7 +
docs/settings-reference.md | 2 +-
docs/workflow-steps.md | 2 +-
packages/dashboard/tsconfig.app.json | 1 +
packages/dashboard/vite.config.ts | 2 +
packages/dashboard/vitest.config.ts | 2 +
plugins/fusion-plugin-quality/package.json | 1 +
.../dashboard-view-verification-videos.test.tsx | 131 ++++++++++++++++++
.../src/dashboard-interop.d.ts | 20 +++
.../fusion-plugin-quality/src/dashboard-view.css | 87 ++++++++++++
.../fusion-plugin-quality/src/dashboard-view.tsx | 151 +++++++++++++++++++--
plugins/fusion-plugin-quality/tsconfig.json | 1 +
plugins/fusion-plugin-quality/vitest.config.ts | 8 ++
pnpm-lock.yaml | 135 +++++++++++++++++-
14 files changed, 532 insertions(+), 18 deletions(-)
Fusion-Task-Id: FN-8357
Fusion-Task-Lineage: 728a5417-87ed-4203-850d-8ee108206766
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-18 19:51:58 -07:00
gsxdsm
cf3f5e9bf0
FN-8292: embed native structures in mail messages
...
Embed selected native project structures directly in mailbox messages and drafts.
- Persist native structure embeds in message metadata and expose their shared types.
- Add composer selection, mailbox rendering, previews, and dashboard navigation for linked structures.
- Cover metadata persistence and mailbox embed behavior with core and dashboard tests.
Files changed:
.changeset/fn-8292-mail-native-structure-embeds.md | 7 ++
docs/dashboard-guide.md | 1 +
.../message-metadata-native-structures.test.ts | 25 +++++++
.../__tests__/postgres/message-store.pg.test.ts | 21 ++++++
packages/core/src/index.ts | 2 +-
packages/core/src/types.ts | 32 +++++++++
packages/core/src/types/messages.ts | 14 ++++
packages/dashboard/app/components/MailboxModal.css | 29 ++++++++
packages/dashboard/app/components/MailboxModal.tsx | 13 +++-
.../components/MailboxNativeStructureEmbeds.tsx | 37 ++++++++++
packages/dashboard/app/components/MailboxView.tsx | 14 +++-
.../dashboard/app/components/MessageComposer.tsx | 65 ++++++++++++++++--
.../app/components/NativeStructurePreview.tsx | 6 +-
.../__tests__/MailboxModal.cache.test.tsx | 8 +--
.../app/components/__tests__/MailboxModal.test.tsx | 9 +++
.../MailboxNativeStructureEmbeds.test.tsx | 42 ++++++++++++
.../app/components/__tests__/MailboxView.test.tsx | 9 +++
.../components/__tests__/MessageComposer.test.tsx | 25 +++++++
.../app/components/dashboard/MainContent.tsx | 78 +++++++++++++++++++++-
.../MainContent.mailbox-view-task.test.tsx | 46 ++++++++++++-
20 files changed, 459 insertions(+), 24 deletions(-)
Fusion-Task-Id: FN-8292
Fusion-Task-Lineage: ae6cfb9c-a764-407c-bd45-cfd879ccdd3e
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-18 19:45:08 -07:00
gsxdsm
bc4b679598
FN-8291: add inline native structure previews to chat
...
Enable chat users to inspect and open referenced native structures inline.
- Render clickable inline previews for native structure references across chat surfaces.
- Route preview actions to their corresponding task, mission, goal, and other dashboard views.
- Add regression coverage, dashboard documentation, and a CLI changeset.
Files changed:
...fn-8291-chat-native-structure-inline-preview.md | 7 +
docs/dashboard-guide.md | 5 +-
packages/dashboard/app/App.tsx | 31 +++
.../app/components/StandardChatSurface.tsx | 226 ++++++++++++++++--
...andardChatSurface.nativeStructureEmbed.test.tsx | 257 +++++++++++++++++++++
.../__tests__/nativeStructureChatRef.test.ts | 54 +++++
.../app/components/nativeStructureChatRef.ts | 58 +++++
.../app/components/nativeStructureNavigation.ts | 21 ++
8 files changed, 635 insertions(+), 24 deletions(-)
Fusion-Task-Id: FN-8291
Fusion-Task-Lineage: 9db2c0fa-494e-4779-93f3-3309eed8565a
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-18 19:36:57 -07:00
gsxdsm
b61311baa8
FN-8305: add durable PostgreSQL symbol locks
...
Introduce durable project-scoped symbol locks backed by PostgreSQL.
- Add normalized lease-based lock acquisition, renewal, release, and reconciliation APIs with audit events.
- Add PostgreSQL schema migrations and self-healing reconciliation coverage.
- Document the lock model and test migration and lock behavior.
Files changed:
AGENTS.md | 1 +
docs/architecture.md | 1 +
docs/storage.md | 7 +
.../src/__tests__/postgres/schema-applier.test.ts | 115 +++++++++-
packages/core/src/__tests__/symbol-locks.test.ts | 91 ++++++++
packages/core/src/index.ts | 17 ++
.../core/src/postgres/migrations/0000_initial.sql | 25 +++
.../src/postgres/migrations/0025_symbol_locks.sql | 63 ++++++
packages/core/src/postgres/schema-applier.ts | 18 +-
packages/core/src/postgres/schema/project.ts | 29 +++
packages/core/src/store.ts | 23 ++
packages/core/src/symbol-lock-types.ts | 60 +++++
packages/core/src/task-store/symbol-locks.ts | 244 +++++++++++++++++++++
.../__tests__/symbol-lock-reconciliation.test.ts | 19 ++
packages/engine/src/self-healing.ts | 35 +++
15 files changed, 745 insertions(+), 3 deletions(-)
Fusion-Task-Id: FN-8305
Fusion-Task-Lineage: efd95c73-23e3-4359-8204-dfad374a39bc
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-18 19:31:30 -07:00