refactor(workflow): add workflow-owned merge migration slice#1571
Conversation
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughThis PR adds foundational documentation and validation for shifting merge, retry, and scheduling control to workflow-owned policy, and implements durable workflow_work_items support: schema migration (v115), types, TaskStore scheduling/lease APIs, and tests exercising upsert, due listing, leases, retries, and terminal-state guards. ChangesWorkflow Policy Ownership and Merge-Retry-Scheduling Refactor
Estimated code review effort🎯 4 (Complex) | ⏱️ ~45 minutes Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
8911676 to
0cb54dd
Compare
Greptile SummaryThis PR implements the S1 foundation slice of a workflow-owned merge/retry/scheduling migration: it introduces the
Confidence Score: 5/5Safe to merge; all changes are additive (new table, new store methods, new tests) with no modifications to existing data paths. The schema migration is idempotent, the new store methods are fully transactional with audit logging, and the tests cover the core invariants. No existing behavior is altered. No files require special attention for merge safety. Important Files Changed
Flowchart%%{init: {'theme': 'neutral'}}%%
flowchart TD
NEW([new work item]) -->|upsertWorkflowWorkItem| RUNNABLE[runnable]
RETRYING[retrying] -->|acquireWorkflowWorkItemLease| RUNNING[running]
RUNNABLE -->|acquireWorkflowWorkItemLease| RUNNING
RUNNING -->|lease expired + acquireWorkflowWorkItemLease| RUNNING
RUNNING -->|transitionWorkflowWorkItem| RETRYING
RUNNING -->|transitionWorkflowWorkItem| HELD[held]
RUNNING -->|transitionWorkflowWorkItem| MANUAL[manual-required]
HELD -->|transitionWorkflowWorkItem| RUNNABLE
MANUAL -->|transitionWorkflowWorkItem| RUNNABLE
RUNNING -->|transitionWorkflowWorkItem| SUCCEEDED([succeeded])
RUNNING -->|transitionWorkflowWorkItem| FAILED([failed])
RUNNING -->|transitionWorkflowWorkItem| CANCELLED([cancelled])
RUNNING -->|transitionWorkflowWorkItem| EXHAUSTED([exhausted])
SUCCEEDED -->|upsert same state: allowed| SUCCEEDED
FAILED -->|any state change: throws| ERR{{Error: terminal}}
SUCCEEDED -->|any state change: throws| ERR
Reviews (5): Last reviewed commit: "fix(review): stabilize ownership map tes..." | Re-trigger Greptile |
There was a problem hiding this comment.
Actionable comments posted: 4
🧹 Nitpick comments (5)
packages/engine/src/__tests__/agent-tools.test.ts (1)
204-206: ⚡ Quick winStrengthen the “workflowId omitted” assertions.
Line 204 and Line 376 use a matcher that can still pass when
workflowId: undefinedis present. Assert property absence directly on the create input object.✅ Suggested assertion pattern
- expect(store.createTask).toHaveBeenCalledWith(expect.not.objectContaining({ - workflowId: expect.anything(), - }), expect.anything()); + const createInput = vi.mocked(store.createTask).mock.calls[0]?.[0] as Record<string, unknown>; + expect(createInput).not.toHaveProperty("workflowId"); ... - expect(taskStore.createTask).toHaveBeenCalledWith(expect.not.objectContaining({ - workflowId: expect.anything(), - }), expect.anything()); + const delegatedInput = vi.mocked(taskStore.createTask).mock.calls[0]?.[0] as Record<string, unknown>; + expect(delegatedInput).not.toHaveProperty("workflowId");Also applies to: 376-378
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@packages/engine/src/__tests__/agent-tools.test.ts` around lines 204 - 206, The current matcher can still pass when workflowId is present but undefined; instead extract the actual create input from store.createTask's mock calls and assert the property is absent using Jest's not.toHaveProperty; e.g., grab the first call arg via (store.createTask as jest.Mock).mock.calls[0][0] and run expect(createArg).not.toHaveProperty('workflowId'), then keep the other call assertions (or assert the full call args if needed); apply the same change for the second occurrence that checks workflowId absence.packages/engine/src/__tests__/agent-tools-github-tracking-end-to-end.test.ts (1)
45-45: 💤 Low valueMock cleanup strategy changed from
restoreAllMockstoclearAllMocks.The change from
vi.restoreAllMocks()tovi.clearAllMocks()means mocks retain their implementation between tests (only call history is cleared). This works for the current test cases, but could cause issues if additional tests with different mocking needs are added later. Consider documenting this choice or keepingrestoreAllMocksfor more robust test isolation.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@packages/engine/src/__tests__/agent-tools-github-tracking-end-to-end.test.ts` at line 45, The test teardown was changed to vi.clearAllMocks(), which only resets call history and leaves mock implementations in place; decide and implement the intended isolation strategy by either switching back to vi.restoreAllMocks() in the test file to fully restore mocked implementations after each test, or add a comment near the vi.clearAllMocks() call documenting why persistent implementations are required and that test authors must manually reset/restore implementations when needed; update references to vi.clearAllMocks() and vi.restoreAllMocks() accordingly.packages/engine/src/__tests__/agent-task-creation-github-tracking-flag.test.ts (1)
46-46: 💤 Low valueMock cleanup strategy changed from
restoreAllMockstoclearAllMocks.The change from
vi.restoreAllMocks()tovi.clearAllMocks()means mocks retain their implementation between tests (only call history is cleared). This works for the current single test case, but could cause issues if additional tests with different mocking needs are added later. Consider documenting this choice or keepingrestoreAllMocksfor more robust test isolation.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@packages/engine/src/__tests__/agent-task-creation-github-tracking-flag.test.ts` at line 46, The test switched from vi.restoreAllMocks() to vi.clearAllMocks(), which leaves mock implementations intact and can cause cross-test leakage; either revert to vi.restoreAllMocks() in the test teardown to fully restore original implementations (replace the vi.clearAllMocks() call), or explicitly document and justify the choice by adding a comment and ensure test isolation by resetting implementations where needed (e.g., re-stubbing before each test) so functions referenced like vi.clearAllMocks() and vi.restoreAllMocks() do not introduce hidden state between tests.packages/dashboard/app/components/__tests__/TaskCard.test.tsx (1)
4342-4366: ⚡ Quick winUse existing
mountCssForBadgeTests()helper for consistent CSS injection.The test manually injects CSS and handles cleanup, but the file already provides
mountCssForBadgeTests()(line 123) that does the same with proper variable setup. Other tests use this helper (e.g., line 2782, line 3251).♻️ Refactor to use existing helper
it("renders a promote action when onPromote is provided", () => { const onPromote = vi.fn().mockResolvedValue(undefined); - const style = document.createElement("style"); - style.textContent = loadAllAppCss(); - document.head.appendChild(style); + const cleanupCss = mountCssForBadgeTests(); try { render( <TaskCard task={makeTask({ id: "FN-777", column: "todo" })} onOpenDetail={noop} addToast={noop} onPromote={onPromote} />, ); const promoteButton = screen.getByTestId("card-promote-FN-777"); expect(promoteButton).toBeDefined(); expect(promoteButton).toHaveClass("card-promote-action"); expect(promoteButton.textContent).toContain("Promote"); - const styles = getComputedStyle(promoteButton); - expect(styles.gap).toBe("var(--space-xs)"); - expect(styles.padding).toBe("var(--space-xs) var(--space-sm)"); + // Verify styles are applied (after fixing assertions per other comment) } finally { - style.remove(); + cleanupCss(); } });🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@packages/dashboard/app/components/__tests__/TaskCard.test.tsx` around lines 4342 - 4366, Replace the manual CSS injection block (creating a <style>, setting textContent = loadAllAppCss(), appending to document.head, and removing it in finally) with the existing test helper mountCssForBadgeTests(); call mountCssForBadgeTests() before rendering the <TaskCard> (and rely on its internal cleanup) so the test uses the consistent CSS setup used by other tests (see mountCssForBadgeTests).packages/engine/src/merger-ai.ts (1)
1008-1022: 💤 Low valueConsider consolidating merge details persistence.
finalizeTaskrebuilds and persistsmergeDetailseven thoughfinalizeMerged(line 959) already wrote a completemergeDetailsobject for non-empty merges. The defensive merge pattern here is safe and handles both empty and non-empty cases uniformly, but it results in two store writes for the AI merge path.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@packages/engine/src/merger-ai.ts` around lines 1008 - 1022, finalizeTask is rebuilding and persisting mergeDetails even though finalizeMerged already wrote a complete mergeDetails for non-empty AI merges, causing duplicate store writes; modify finalizeTask to avoid the second write by checking for an existing complete mergeDetails (e.g., inspect result.task.mergeDetails and a reliable marker such as mergedAt or mergeConfirmed) and only construct+call store.updateTask when mergeDetails is absent/incomplete (otherwise skip the update), leaving finalizeMerged, mergeDetails, result.task.mergeDetails, and store.updateTask as the referenced symbols to locate the change.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@eslint.config.mjs`:
- Around line 72-100: The noPluginViewReexport rule currently only inspects
ExportNamedDeclaration nodes; add an ExportAllDeclaration handler alongside
ExportNamedDeclaration that uses the existing
isViewEntrypointReexportSource(node.source?.value) check and calls
context.report with the same node.source and message so `export * from
"./dashboard-view"` is caught; reuse the same message text and reporting logic
as in the ExportNamedDeclaration branch to ensure consistent behavior.
In `@packages/dashboard/app/components/__tests__/TaskCard.test.tsx`:
- Around line 4362-4363: The test asserts CSS variables directly but
getComputedStyle returns resolved values, so update the assertions in
TaskCard.test.tsx (the expectations using styles.gap and styles.padding) to
either compare the resolved pixel strings (e.g., "4px" / "8px 12px") or simply
assert that the computed style properties are truthy/present; locate the lines
referencing styles.gap and styles.padding and replace them with assertions that
match the computed values or non-exact presence checks (e.g.,
expect(styles.gap).toBeDefined() or expect(styles.gap).toBe("4px") depending on
whether you want a loose or exact check).
In `@packages/dashboard/src/file-service.ts`:
- Around line 495-501: The catch blocks around the stat/existence/parent checks
in file-service.ts currently rethrow raw errors (see the catch that casts to
Error & { code?: string }) which lets EACCES/EPERM bubble up as 500s; instead,
detect permission-related error.code values ("EACCES", "EPERM") and wrap/throw
them as a FileServiceError (preserving the original error message) so they
normalize to a 403 response. Update both catch sites (the block handling
existence/parent checks and the similar block at the second occurrence) to:
check error.code, if it's "ENOENT" keep current behavior, if it's "EACCES" or
"EPERM" throw new FileServiceError(...) (or rethrow a FileServiceError instance)
otherwise rethrow the original error; reference FileServiceError and the
stat/existence/parent check locations when making the change.
---
Nitpick comments:
In `@packages/dashboard/app/components/__tests__/TaskCard.test.tsx`:
- Around line 4342-4366: Replace the manual CSS injection block (creating a
<style>, setting textContent = loadAllAppCss(), appending to document.head, and
removing it in finally) with the existing test helper mountCssForBadgeTests();
call mountCssForBadgeTests() before rendering the <TaskCard> (and rely on its
internal cleanup) so the test uses the consistent CSS setup used by other tests
(see mountCssForBadgeTests).
In
`@packages/engine/src/__tests__/agent-task-creation-github-tracking-flag.test.ts`:
- Line 46: The test switched from vi.restoreAllMocks() to vi.clearAllMocks(),
which leaves mock implementations intact and can cause cross-test leakage;
either revert to vi.restoreAllMocks() in the test teardown to fully restore
original implementations (replace the vi.clearAllMocks() call), or explicitly
document and justify the choice by adding a comment and ensure test isolation by
resetting implementations where needed (e.g., re-stubbing before each test) so
functions referenced like vi.clearAllMocks() and vi.restoreAllMocks() do not
introduce hidden state between tests.
In
`@packages/engine/src/__tests__/agent-tools-github-tracking-end-to-end.test.ts`:
- Line 45: The test teardown was changed to vi.clearAllMocks(), which only
resets call history and leaves mock implementations in place; decide and
implement the intended isolation strategy by either switching back to
vi.restoreAllMocks() in the test file to fully restore mocked implementations
after each test, or add a comment near the vi.clearAllMocks() call documenting
why persistent implementations are required and that test authors must manually
reset/restore implementations when needed; update references to
vi.clearAllMocks() and vi.restoreAllMocks() accordingly.
In `@packages/engine/src/__tests__/agent-tools.test.ts`:
- Around line 204-206: The current matcher can still pass when workflowId is
present but undefined; instead extract the actual create input from
store.createTask's mock calls and assert the property is absent using Jest's
not.toHaveProperty; e.g., grab the first call arg via (store.createTask as
jest.Mock).mock.calls[0][0] and run
expect(createArg).not.toHaveProperty('workflowId'), then keep the other call
assertions (or assert the full call args if needed); apply the same change for
the second occurrence that checks workflowId absence.
In `@packages/engine/src/merger-ai.ts`:
- Around line 1008-1022: finalizeTask is rebuilding and persisting mergeDetails
even though finalizeMerged already wrote a complete mergeDetails for non-empty
AI merges, causing duplicate store writes; modify finalizeTask to avoid the
second write by checking for an existing complete mergeDetails (e.g., inspect
result.task.mergeDetails and a reliable marker such as mergedAt or
mergeConfirmed) and only construct+call store.updateTask when mergeDetails is
absent/incomplete (otherwise skip the update), leaving finalizeMerged,
mergeDetails, result.task.mergeDetails, and store.updateTask as the referenced
symbols to locate the change.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: 3410eb8c-ba24-484f-82a2-ea61e44d63b3
📒 Files selected for processing (63)
.changeset/fn-6088-workflow-editor-selected-workflow.md.changeset/fn-6091-workflow-id-agent-tools.md.changeset/fn-6092-promote-button.md.changeset/fn-6093-notification-workflow-fix.md.changeset/merge-queued-stalled-review.mddocs/PLUGIN_AUTHORING.mddocs/dashboard-guide.mddocs/plans/2026-06-09-002-refactor-workflow-owned-merge-retry-scheduling-plan.mddocs/solutions/integration-issues/bundled-plugin-registration-drift.mddocs/solutions/integration-issues/bundled-plugin-vite-alias-missing.mddocs/workflow-policy-ownership-map.mdeslint.config.mjspackages/cli/skill/fusion/references/engine-tools.mdpackages/cli/skill/fusion/references/extension-tools.mdpackages/cli/skill/fusion/references/fusion-capabilities.mdpackages/cli/src/__tests__/extension.test.tspackages/cli/src/extension.tspackages/core/src/__tests__/store-stalled-review.test.tspackages/core/src/store.tspackages/dashboard/app/api/legacy.tspackages/dashboard/app/components/AppModals.tsxpackages/dashboard/app/components/ChatView.csspackages/dashboard/app/components/FileBrowser.csspackages/dashboard/app/components/FileBrowser.tsxpackages/dashboard/app/components/InlineCreateCard.tsxpackages/dashboard/app/components/ModelSelectionModal.tsxpackages/dashboard/app/components/QuickEntryBox.tsxpackages/dashboard/app/components/ReliabilityView.csspackages/dashboard/app/components/ReliabilityView.tsxpackages/dashboard/app/components/TaskCard.csspackages/dashboard/app/components/WorkflowNodeEditor.tsxpackages/dashboard/app/components/__tests__/ChatView.chat-input-autosize.test.tsxpackages/dashboard/app/components/__tests__/FileBrowser.test.tsxpackages/dashboard/app/components/__tests__/InlineCreateCard.test.tsxpackages/dashboard/app/components/__tests__/QuickEntryBox.test.tsxpackages/dashboard/app/components/__tests__/ReliabilityView.test.tsxpackages/dashboard/app/components/__tests__/TaskCard.test.tsxpackages/dashboard/app/components/__tests__/WorkflowNodeEditor.css.test.tspackages/dashboard/app/components/__tests__/WorkflowNodeEditor.test.tsxpackages/dashboard/src/__tests__/routes-git.test.tspackages/dashboard/src/file-service.tspackages/dashboard/src/routes/README.mdpackages/dashboard/src/routes/register-file-workspace-routes.tspackages/dashboard/vitest.config.tspackages/engine/src/__tests__/agent-task-creation-github-tracking-flag.test.tspackages/engine/src/__tests__/agent-tools-github-tracking-end-to-end.test.tspackages/engine/src/__tests__/agent-tools.test.tspackages/engine/src/__tests__/merger-ai.test.tspackages/engine/src/__tests__/merger-post-merge.test.tspackages/engine/src/__tests__/notification-service.test.tspackages/engine/src/__tests__/self-healing.test.tspackages/engine/src/__tests__/workflow-policy-ownership-map.test.tspackages/engine/src/agent-tools.tspackages/engine/src/merger-ai.tspackages/engine/src/merger.tspackages/engine/src/notification/notification-service.tspackages/engine/src/notifier.tspackages/engine/src/self-healing.tspackages/engine/vitest.config.tsplugins/fusion-plugin-cli-printing-press/src/index.tsplugins/fusion-plugin-compound-engineering/src/index.tsplugins/fusion-plugin-reports/src/index.tsscripts/lib/test-quarantine.json
💤 Files with no reviewable changes (4)
- plugins/fusion-plugin-cli-printing-press/src/index.ts
- plugins/fusion-plugin-reports/src/index.ts
- packages/dashboard/app/components/QuickEntryBox.tsx
- plugins/fusion-plugin-compound-engineering/src/index.ts
There was a problem hiding this comment.
Actionable comments posted: 3
🧹 Nitpick comments (2)
packages/core/src/__tests__/db-migrate.test.ts (1)
718-719: ⚡ Quick winRemove duplicate schema-version assertions in the same test block.
The second assertion is redundant and this pattern repeats in multiple updated tests in this file.
♻️ Proposed cleanup
- expect(db.getSchemaVersion()).toBe(115); expect(db.getSchemaVersion()).toBe(115);🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@packages/core/src/__tests__/db-migrate.test.ts` around lines 718 - 719, Remove the duplicate schema-version assertion in the test by deleting the redundant expect(db.getSchemaVersion()).toBe(115); so each test block only asserts getSchemaVersion() once; locate the duplicate calls to getSchemaVersion() in the failing test(s) (search for expect(db.getSchemaVersion()).toBe(...)) and keep a single assertion per block to avoid redundant checks.packages/core/src/__tests__/db.test.ts (1)
337-338: ⚡ Quick winCollapse duplicated schema-version expectations.
These two assertions are identical with no intervening mutation; this same duplicate pattern appears in multiple changed spots in this file.
♻️ Proposed cleanup
- expect(db.getSchemaVersion()).toBe(115); expect(db.getSchemaVersion()).toBe(115);🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@packages/core/src/__tests__/db.test.ts` around lines 337 - 338, Remove the duplicated identical assertion calls that check the schema version; replace consecutive duplicate expect(db.getSchemaVersion()).toBe(115) lines with a single assertion. Search for repeated patterns of expect(db.getSchemaVersion()) in the test file (and other duplicated expect calls) and collapse each pair into one to avoid redundant checks while preserving test semantics.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@packages/core/src/__tests__/run-audit.test.ts`:
- Around line 586-588: Rename the test description to match the asserted schema
version: update the `it("schema version is bumped to 40", ...)` test title to
reflect version 115 (for example `it("schema version is bumped to 115", ...)`)
so the human-readable test name aligns with the
`expect(db.getSchemaVersion()).toBe(115);` assertion referencing
`db.getSchemaVersion()`.
In `@packages/core/src/store.ts`:
- Around line 9102-9123: acquireWorkflowWorkItemLease currently allows zero or
negative leaseDurationMs, producing already-expired leases; add the same guard
used by acquireMergeQueueLease by validating opts.leaseDurationMs > 0 at the
start of acquireWorkflowWorkItemLease (before calling
this.db.transactionImmediate) and throw a clear Error (e.g., "leaseDurationMs
must be > 0") when the value is non-positive so the method enforces the same
contract as acquireMergeQueueLease.
- Around line 9076-9099: In listDueWorkflowWorkItems ensure the special "(state
= 'running' AND leaseExpiresAt ...)" branch is only added when the caller's
filter.states either is not provided (current default behavior) or explicitly
includes "running"; when filter.states is provided and does not include
"running" remove that OR branch and do not append the extra now param for it,
and update the conditions/params build (symbols: listDueWorkflowWorkItems,
filter.states, conditions, params) so the prepared SQL and parameter ordering
match the chosen branches (preserve existing handling for kinds and limit).
---
Nitpick comments:
In `@packages/core/src/__tests__/db-migrate.test.ts`:
- Around line 718-719: Remove the duplicate schema-version assertion in the test
by deleting the redundant expect(db.getSchemaVersion()).toBe(115); so each test
block only asserts getSchemaVersion() once; locate the duplicate calls to
getSchemaVersion() in the failing test(s) (search for
expect(db.getSchemaVersion()).toBe(...)) and keep a single assertion per block
to avoid redundant checks.
In `@packages/core/src/__tests__/db.test.ts`:
- Around line 337-338: Remove the duplicated identical assertion calls that
check the schema version; replace consecutive duplicate
expect(db.getSchemaVersion()).toBe(115) lines with a single assertion. Search
for repeated patterns of expect(db.getSchemaVersion()) in the test file (and
other duplicated expect calls) and collapse each pair into one to avoid
redundant checks while preserving test semantics.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: 06276cfb-ef03-4b18-bc4d-5ef2e35f4d1f
📒 Files selected for processing (16)
.changeset/workflow-work-items.mddocs/plans/2026-06-09-003-refactor-workflow-owned-merge-full-migration-slices-plan.mdpackages/core/src/__tests__/db-migrate.test.tspackages/core/src/__tests__/db.test.tspackages/core/src/__tests__/goals-schema.test.tspackages/core/src/__tests__/insight-store.test.tspackages/core/src/__tests__/merge-request-record.test.tspackages/core/src/__tests__/mission-store.test.tspackages/core/src/__tests__/run-audit.test.tspackages/core/src/__tests__/store-merge-queue.test.tspackages/core/src/__tests__/store-workflow-runtime.test.tspackages/core/src/__tests__/task-documents.test.tspackages/core/src/db.tspackages/core/src/index.tspackages/core/src/store.tspackages/core/src/types.ts
✅ Files skipped from review due to trivial changes (7)
- packages/core/src/tests/goals-schema.test.ts
- packages/core/src/tests/task-documents.test.ts
- packages/core/src/tests/merge-request-record.test.ts
- packages/core/src/tests/mission-store.test.ts
- packages/core/src/tests/store-merge-queue.test.ts
- .changeset/workflow-work-items.md
- packages/core/src/tests/insight-store.test.ts
|
Caution Failed to replace (edit) comment. This is likely due to insufficient permissions or the comment being deleted. Error details |
|
Resolved Greptile ownership-map path feedback in |
Summary
docs/plans/2026-06-09-003-refactor-workflow-owned-merge-full-migration-slices-plan.md.Migration Milestones
Migration Slices
Stack PRs
Verification
pnpm --filter @fusion/core exec vitest run src/__tests__/store-workflow-runtime.test.ts src/__tests__/merge-request-record.test.ts --silent=passed-only --reporter=dotpnpm --filter @fusion/core typecheckpnpm test:gatepnpm lintpnpm buildBrowser
Summary by CodeRabbit
Documentation
New Features
Tests
Chores
Implementation Added