Commit Graph

896 Commits

Author SHA1 Message Date
gsxdsm
1cbf9e1015 test: enforce test-directory isolation across all packages
Introduce a shared test-utils module and global vitest setup that
guarantee tests never write to the real .fusion directory or leak temp
directories under /tmp.

Infrastructure:
- packages/core/src/__test-utils__/workspace.ts — tempWorkspace(),
  useIsolatedCwd(), trackForCleanup(), assertOutsideRealFusion() with
  auto-cleanup in afterEach.
- packages/core/src/__test-utils__/vitest-setup.ts — per-worker guard:
  chdirs each worker into an isolated tmp dir, wraps process.chdir to
  refuse the real .fusion, scopes tmp dirs under fusion-test-workers/
  (skips cwd change in thread-pool workers where chdir isn't supported).
- packages/core/src/__test-utils__/vitest-teardown.ts — globalSetup
  hook that wipes the shared parent even when workers are SIGKILLed.
- scripts/check-test-isolation.mjs + `test:isolated` / `test:check-
  isolation` scripts for CI.
- @fusion/test-utils alias + setupFiles + globalSetup wired into core,
  cli, engine, dashboard, tui vitest configs; matching tsconfig paths.

Test refactors (no behavior change):
- cli provider-settings, auth-paths, provider-auth — switch leaking
  mkdtempSync calls to tempWorkspace().
- core migration, first-run, store-backward-compat — replace manual
  process.chdir save/restore with useIsolatedCwd().
- tui fusion-context — replace 9 hardcoded tmp paths (collision-prone
  under parallelism) with tempWorkspace().
- dashboard useTheme, FileBrowser, TaskCard — resolve source-file reads
  against a PACKAGE_ROOT computed from import.meta.url instead of cwd,
  so tests don't depend on the process working directory.

Verified: full suite (~15,500 tests across 8 packages + plugins) passes
and the orphan-detector reports zero leaked temp directories after a
complete run.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-18 23:41:47 -07:00
gsxdsm
cae24ce600 feat(FN-2088): merge fusion/fn-2088 2026-04-18 23:22:26 -07:00
gsxdsm
00a01de81c feat(FN-2086): merge fusion/fn-2086 2026-04-18 22:52:33 -07:00
Fusion
049f356f88 feat(FN-2087): finalize canonical memory path migration
- Remove legacy .fusion/memory.md fallback references and normalize prompts/docs to .fusion/memory/MEMORY.md
- Stop legacy mirror writes and fallback reads in core memory backend and project memory flows
- Update engine worktree boundary checks and tests for canonical memory file handling
- Align dashboard memory/settings surfaces and route tests with canonical memory behavior
- Add model-favorites persistence test coverage for mission interview and new agent dialogs
2026-04-18 22:47:17 -07:00
gsxdsm
9307dc2249 feat(FN-2103): merge fusion/fn-2103 2026-04-18 22:37:20 -07:00
gsxdsm
b71ffac4a9 feat(FN-2082): merge fusion/fn-2082 2026-04-18 22:22:20 -07:00
Fusion
d1c097e825 fix(FN-2090): log and cover engine warning fallbacks
- Add structured warning logs for plugin-runner fallback paths instead of silent catches
- Add warning telemetry in agent-tools for agent-memory directory, QMD search, and index refresh failures
- Log cron-runner session disposal failures and update agent-logger persistence warnings to use logger output
- Expand engine tests to cover warning behavior across plugin-runner, agent-tools, cron-runner, and agent-logger
2026-04-18 22:18:55 -07:00
Fusion
53cad3ba9d fix(FN-2078): adopt canonical .fusion/memory paths
- Update core and engine prompt text to reference .fusion/memory/ with MEMORY.md and daily-note guidance
- Allow worktree tool boundary access to .fusion/memory/ files while preserving legacy .fusion/memory.md compatibility
- Revise memory compaction/insight extraction messaging and related type/docs comments to use canonical memory paths
- Refresh dashboard and test expectations across core/engine/dashboard/docs for the new memory path wording
2026-04-18 22:02:46 -07:00
gsxdsm
94bbca31da feat(FN-2081): merge fusion/fn-2081 2026-04-18 21:52:21 -07:00
Fusion
76d318ca5e fix(FN-2091): improve reset-cleanup diagnostics in merger retries
- Add context-rich warning messages for git reset --merge failures in merge-cleanup, build-retry, and merge-retry paths
- Log reset cleanup failures during build-verification rollback in executeMergeAttempt
- Add targeted merger tests covering reset cleanup failures across retry and verification error scenarios
- Update retry-logic assertions to validate the new diagnostic message formats
2026-04-18 21:50:31 -07:00
Fusion
891c95bf89 fix(FN-2084): improve auto-merge error recovery observability
- Add runtimeLog.error diagnostics when auto-merge recovery updates fail after conflict, non-conflict, or strategy errors
- Keep recovery behavior best-effort while surfacing concrete failure reasons from thrown exceptions
- Add merge-error-recovery tests for conflict retry exhaustion, non-conflict/strategy failures, and verification-error rollback to in-progress
- Verify recovery paths do not crash merge draining when persistence calls fail
2026-04-18 21:30:30 -07:00
Fusion
342dd48350 fix(FN-2077): use no-task prompt for ambient heartbeat runs
- Add HEARTBEAT_NO_TASK_SYSTEM_PROMPT for no-task heartbeat sessions with only non-task-scoped tooling guidance
- Switch heartbeat session setup to choose the no-task base prompt when executing without task context
- Keep agent instruction and memory enrichment on top of the selected base prompt for both task and no-task runs
- Extend heartbeat tests to verify no-task prompts exclude task-scoped tool references and are passed into createKbAgent
2026-04-18 20:56:13 -07:00
gsxdsm
e748ad1d32 feat(FN-2083): merge fusion/fn-2083 2026-04-18 20:56:13 -07:00
Fusion
d6b7d076d5 feat(FN-2075): merge fusion/fn-2075 2026-04-18 20:56:12 -07:00
gsxdsm
30b6822b00 feat(FN-2073): merge fusion/fn-2073 2026-04-18 20:56:12 -07:00
gsxdsm
0dbdc1847c fix(FN-2116): allow two vitest workers 2026-04-18 17:48:22 -07:00
gsxdsm
1d8b7f2cb8 fix(FN-2116): show paused agents and cap vitest workers 2026-04-18 17:34:44 -07:00
gsxdsm
5a831a67bc fix(FN-2116): use sqlite-backed agent storage 2026-04-18 17:25:17 -07:00
Fusion
0bad6c25a5 fix(FN-2065): log final merge cleanup reset failures
- Log final-path git reset --merge cleanup failures in aiMergeTask with task-scoped warning details
- Preserve the original "all 3 attempts exhausted" merge error even when cleanup reset fails
- Add merger retry tests covering successful final cleanup and failed final cleanup logging behavior
- Add a patch changeset for @gsxdsm/fusion documenting the improved merger diagnostics
2026-04-18 16:39:34 -07:00
Fusion
7affac3d4b fix(FN-2055): harden node test utilities and import resolution
- Convert seed-sample-nodes into a test-only helper and remove direct execution against the real central database
- Replace private-looking host examples with RFC 5737 test-net addresses in node connection docs and ConnectNodeModal expectations
- Add Vitest aliases for @fusion/core and @fusion/engine to stabilize cross-package test imports
- Load AgentReflectionService via local engine source path in in-process runtime to avoid alias resolution failures
2026-04-18 12:21:14 -07:00
Fusion
3977b38895 fix(FN-2054): harden agent loop stuck-detection and self-healing
- Add defensive cleanup for in-memory task tracking when tasks move state or agents pause
- Improve stuck-detection and self-healing flow to reduce leaked state and missed recovery paths
- Add logging around previously swallowed errors and tighten executor cleanup behavior
- Expand restart and self-healing reliability tests to cover regression scenarios
2026-04-18 12:11:00 -07:00
gsxdsm
eb04fd148d feat(FN-2052): merge fusion/fn-2052 2026-04-18 10:43:23 -07:00
Fusion
c4379d1330 fix(FN-2053): enforce mission status consistency from feature state
- Recompute slice status when adding a feature so stale "complete" slices cascade back to milestone and mission statuses
- Require checkMissionCompletion to verify every feature is done before marking a mission complete
- Add mission-wide status-chain recomputation when stale complete slices or milestones are detected during reconciliation
- Expand core and engine tests to cover addFeature downgrades, stale complete states, and feature-level completion checks
2026-04-18 10:41:34 -07:00
gsxdsm
9ac44b4892 feat(FN-2051): merge fusion/fn-2051 2026-04-18 10:28:16 -07:00
gsxdsm
074868dd59 feat: auto-revive in-review tasks with failed pre-merge workflow steps
Adds a SelfHealingManager scan that finds tasks parked in in-review with
a failed pre-merge workflow step and no active session, and sends them
back through the existing sendTaskBackForFix flow (PROMPT.md injection,
step reset, todo → in-progress). Bounded by a new maxPostReviewFixes
setting (default 1) and a per-task postReviewFixCount so a persistently-
failing verifier cannot ping-pong a task indefinitely.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-17 23:28:32 -07:00
Fusion
cfffe156b2 fix(FN-2036): wire agent reflections runtime and UI dependencies
- Add a reusable .btn-secondary style (including light-theme hover/focus states) for reflections tab actions
- Initialize ReflectionStore in reflection API routes before reading or writing reflections
- Create AgentStore and ReflectionStore during in-process runtime startup and wire AgentReflectionService into TaskExecutor
- Reuse the initialized AgentStore for HeartbeatMonitor and trigger scheduler setup with non-fatal guards
2026-04-17 22:29:16 -07:00
Fusion
01eabe4aa7 fix(FN-2040): prevent false unresponsive agent states
- Apply a default 30s heartbeat interval when scheduler config is missing or invalid
- Dynamically register and update heartbeat triggers from AgentStore create/update events
- Register all non-disabled agents at startup and guard listener cleanup when stopping runtime
- Treat non-periodic agents as healthy in dashboard health checks to avoid stale-time false alarms
- Expand engine and dashboard tests and add a patch changeset for @gsxdsm/fusion
2026-04-17 20:40:06 -07:00
Fusion
39e833b91e feat(FN-2014): merge fusion/fn-2014 2026-04-17 14:31:43 -07:00
gsxdsm
b4764a1bd4 feat(FN-2007): merge fusion/fn-2007 2026-04-17 14:25:18 -07:00
gsxdsm
6f12375725 feat(FN-1982): merge fusion/fn-1982 2026-04-17 14:09:37 -07:00
gsxdsm
23c38c20b9 fix(FN-000): skip qmd index mutations in test runs
Why: tests were leaking ~700 per-temp-dir collection registrations
into the user's global ~/.config/qmd/index.yml because searchWithQmd
and the agent-memory qmd path called execFile("qmd", ...) with the
real binary, bypassing shouldSkipBackgroundQmdRefresh() which only
guarded the schedule* wrappers.

Guard both direct-execFile paths under the same skip flag and fall
back to file-based agent memory search when skipping.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-17 13:54:28 -07:00
gsxdsm
f35ea101c1 fix(FN-1572): stabilize fusion agent execution 2026-04-17 12:13:39 -07:00
gsxdsm
9bcefcb3a9 fix(FN-000): process agent memory dreams 2026-04-17 10:03:46 -07:00
gsxdsm
728022366d fix(FN-000): search agent memory through memory tools 2026-04-17 09:52:23 -07:00
gsxdsm
2a981fc4d1 fix(FN-000): align qmd memory lifecycle 2026-04-17 09:41:05 -07:00
Fusion
9baa29fd08 feat(FN-2000): add memory auto-summarize settings and automation sync
- Add Memory section controls for enabling auto-summarize with threshold and cron schedule inputs
- Wire ProjectEngine to sync auto-summarize automation on startup and when related settings change
- Reuse a single startup settings snapshot when syncing insight extraction and auto-summarize automations
- Add SettingsModal and ProjectEngine tests covering auto-summarize UI persistence and automation re-sync behavior
2026-04-17 09:16:08 -07:00
gsxdsm
39cbfaba02 fix(FN-000): simplify qmd memory settings 2026-04-17 08:16:36 -07:00
gsxdsm
985b8a4eb5 fix(FN-000): rebuild layered memory system 2026-04-17 07:36:22 -07:00
Fusion
07ddb1ca1f feat(FN-1984): enrich chat and heartbeat prompts with agent context
- Add agent memory support to instruction resolution and introduce/export buildAgentChatPrompt for identity-aware prompt assembly with optional project memory
- Wire ChatManager to AgentStore so chat sessions can enrich system prompts per agent and include recent conversation context in prompt payloads
- Update server chat wiring to provide an AgentStore for prompt enrichment and keep graceful fallback behavior when agent context is unavailable
- Enrich HeartbeatMonitor system prompts with resolved agent instructions/ratings while preserving base-prompt fallback paths
- Expand dashboard and engine tests to cover prompt enrichment, fallback behavior, conversation context assembly, and AgentStore route mocks
2026-04-17 02:19:54 -07:00
gsxdsm
d7ff914e3d fix(FN-1989): stabilize triage fallback 2026-04-17 01:49:25 -07:00
gsxdsm
5ef809d935 fix(FN-1952): merge pi package settings 2026-04-17 00:20:19 -07:00
gsxdsm
bab9761591 fix(FN-1952): recover routines schedules merge 2026-04-16 23:07:40 -07:00
gsxdsm
8df18fab2b fix(FN-1952): restore pi auth and extension loading 2026-04-16 21:42:16 -07:00
gsxdsm
a99af24297 fix(FN-1952): read legacy oauth auth 2026-04-16 21:16:48 -07:00
gsxdsm
bd8324eba4 fix(FN-1952): recover failed review tasks 2026-04-16 20:52:50 -07:00
gsxdsm
e2560981fe feat(FN-1952): move archived tasks to cold database 2026-04-16 19:49:07 -07:00
gsxdsm
4a576c028c fix(FN-1952): bound recovery and task log growth 2026-04-16 19:32:35 -07:00
Fusion
80e49b8e40 feat(FN-1976): forward mailbox message events end to end
- Wire MessageStore into the in-process executor runtime and project engine
- Forward MessageStore events through dashboard SSE infrastructure for mailbox updates
- Close mailbox pipeline gaps across API routes, server wiring, and mailbox UI components
- Add regression coverage for messaging routes, SSE forwarding, and agent tool behavior
- Document the MessageStore SSE wiring pattern in .fusion/memory.md
2026-04-16 18:20:58 -07:00
gsxdsm
8de7feeb13 feat(FN-1974): merge fusion/fn-1974 2026-04-16 15:55:14 -07:00
Fusion
9e1c18e0c8 feat(FN-1949): add send_message and read_messages agent tools
- Add send_message tool factory for executor agents to send messages
- Add read_messages tool factory to retrieve agent inbox messages
- Update heartbeat to process pending messages during agent wake cycles
- Include message tools in executor agent tool context
- Add comprehensive unit tests for message tools
- Add heartbeat message processing tests
- Add end-to-end agent messaging test
- Create changeset for @gsxdsm/fusion package
2026-04-16 13:50:10 -07:00