The duplicate and refine task routes returned without invoking
createTrackingIssueForTask, depending on TaskStore's internal
task-created hook to do it. That works in production with a real
TaskStore but leaves no path through mocked test stores — which is why
routes-tasks-ops's duplicate/refine tests expecting createIssue calls
were failing.
Call createTrackingIssueForTask explicitly after duplicateTask and
refineTask, in a best-effort try/catch so a tracking failure can't
block the response. Mirrors the existing PATCH /tasks/:id flow.
Also wire registerGithubTrackingHook with a test logger in
routes-planning-tracking.test.ts and have the mock store fire the hook
after createTask so the planning create-task flow's expectations land.
Fix the two PATCH tests in routes-tasks-ops that mocked getTask to
already return a linked issue — using mockResolvedValueOnce for the
pre-creation state and mockResolvedValue for the post-creation state
so createTrackingIssueForTask sees the unlinked task first.
Fixes 9 failing tests across routes-tasks-ops.test.ts (6) and
routes-planning-tracking.test.ts (3).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The planning routes no longer pass { invokeTaskCreatedHook: false } as
the second arg to store.createTask — they let the hook fire so
GitHub tracking and other post-creation listeners run. The
toHaveBeenCalledWith assertions still expected the legacy second arg
and failed across 12 test cases.
Strip the second argument from each toHaveBeenCalledWith spec. Fixes 8
failing tests in routes-planning.test.ts.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
createMissionInterviewSession, submitMissionInterviewResponse,
retryMissionInterviewSession, and submitTargetInterviewResponse now
take a TaskStore as an additional argument (after rootDir). The e2e
expectations still asserted on the pre-store positional shape and
failed. Insert expect.anything() in the store slot of each
toHaveBeenCalledWith assertion.
Fixes 10 failing tests in mission-e2e.test.ts (interview start/respond/
retry scoping suite + milestone interview respond regression).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
8 more test files were failing to load because their vi.mock("@fusion/core")
factories didn't include the deterministicGuardLocks export that
register-task-workflow-routes pulls in at module-load time. Add the
empty Map to each mock's return object. Unblocks the suite-level
collection for these files (previously the entire file's tests counted
as 0/failed because the module never loaded).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Mirror the planning.ts fix: capture store/rootDir on MissionInterviewSession
at creation, fall back to the captured values in
ensureMissionInterviewAgent when callers don't plumb them through. Then
update the session/mission test files so their createSession,
createMissionInterviewSession, and rehydrated submitResponse/retry calls
pass a real TaskStore where they were previously passing undefined.
Fixes 10 failing tests across mission-interview.test.ts,
milestone-slice-interview.test.ts, session-error-recovery.test.ts,
session-persistence-roundtrip.test.ts, session-resume-history.test.ts.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
createSession captured a TaskStore but submitResponse/retrySession/
rewindSession had no way to receive one — so rehydrated sessions
(loaded from SQLite, no prior createSession call) failed with
"Planning session has no task store and cannot be resumed without
project context" when they needed to rebuild an agent.
- Add optional `store` to Session and capture it on createSession.
- Extend submitResponse, retrySession, rewindSession to accept and
propagate a store argument; ensureSessionAgent falls back to the
session-captured value when the caller doesn't plumb one.
- Update planning.test.ts rehydration paths to pass MOCK_TASK_STORE
where they previously relied on the implicit error to test against.
Fixes 7 failing tests in planning.test.ts (rehydration + retry/rewind
flows). Same pattern applies to mission-interview.ts and the related
session-* test files but is deferred to a separate commit.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
createSession now requires a TaskStore (planning.ts:765); the reconnect
test had a TaskStore in scope but was still passing undefined as the
third arg. Hook it up. Fixes the 1 failing test in this file.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
routes-sandbox-audit.test.ts mocked @fusion/core without
deterministicGuardLocks (causing the workflow-routes import to throw)
and its MockStore lacked getDatabase, which createServer now calls
when wiring ChatStore. Add both. Fixes 3 failing tests.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
server.ts createServer now invokes engine.getSelfHealingManager() to
wire the self-healing branch-rebind hook. The headless engine fake in
remote-access-headless.test.ts hadn't been updated. Add a vi.fn() stub
so the mock satisfies the engine surface contract.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
createDatabase(":memory:") fails the absolute-path guard added to the
Database constructor. Use a real tmp dir with inMemory: true, and call
db.init() to materialize project_insight_runs before InsightStore is
constructed. Fixes 5 failing tests.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
proxy-routes and routes-agent-skills tests mock @fusion/core but omit
the deterministicGuardLocks Map that register-task-workflow-routes
imports at module-load time. Add the export so the mock satisfies the
shape consumers expect. Fixes 24 failing tests across the two files.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Add dashboard routes to generate PR title/body metadata for task branches
- Add PR preflight diagnostics for base branch resolution, remote branch checks, commit summaries, changed files, conflicts, and gh auth state
- Cover the new Create PR route contracts and metadata preflight behavior with dashboard tests
- Add a changeset for the published @runfusion/fusion package
Fusion-Task-Id: FN-5144
Resolve @typescript-eslint/no-unused-vars error in register-task-workflow-routes.ts.
The import is kept in deps for potential future use but prefixed to satisfy lint.
Fix FN-5053 restores workspace test stability for the verification gate by adjusting the duplicate guard and task workflow route registration, with updated coverage in the branch-conflicts and diff-volume-gate test suites.
Fusion-Task-Id: FN-5053
Fusion-Task-Lineage: cc8a561a-fd56-4275-b06c-0966c80c2868