diff --git a/packages/engine/src/__tests__/workflow-task-runtime.test.ts b/packages/engine/src/__tests__/workflow-task-runtime.test.ts index 14b7c847e5..caa7546127 100644 --- a/packages/engine/src/__tests__/workflow-task-runtime.test.ts +++ b/packages/engine/src/__tests__/workflow-task-runtime.test.ts @@ -32,7 +32,7 @@ function recordingPrimitives( overrides: Partial> & { prepareData?: PreparedWorktree | null; } = {}, - observed: { prepared?: PreparedWorktree; mergeAttempt?: number } = {}, + observed: { prepared?: PreparedWorktree; mergeAttempt?: number; mergeRunId?: string; mergeWorkflowId?: string } = {}, ): WorkflowRuntimePrimitives { const prepared: PreparedWorktree = { worktreePath: "/tmp/fusion-worktree" }; return { @@ -95,6 +95,8 @@ function recordingPrimitives( requestMerge: async (ctx) => { calls.push("merge"); observed.mergeAttempt = ctx.node.attempt; + observed.mergeRunId = ctx.run.runId; + observed.mergeWorkflowId = ctx.run.workflowId; return { outcome: "success", value: "merged", data: { status: "merged" } }; }, abortRun: async () => ({ outcome: "success" }), @@ -535,7 +537,7 @@ describe("WorkflowTaskRuntime", () => { }); it("threads work item attempt into merge primitive context", async () => { - const observed: { mergeAttempt?: number } = {}; + const observed: { mergeAttempt?: number; mergeRunId?: string; mergeWorkflowId?: string } = {}; const transitions: Array<{ id: string; state: WorkflowWorkItemState; patch?: Record }> = []; const workItem = { id: "work-merge-attempt", @@ -572,6 +574,8 @@ describe("WorkflowTaskRuntime", () => { expect(result.disposition).toBe("completed"); expect(result.context["workflow:work-item-attempt"]).toBe(3); expect(observed.mergeAttempt).toBe(3); + expect(observed.mergeRunId).toBe("run-merge-attempt"); + expect(observed.mergeWorkflowId).toBe("builtin:coding"); expect(transitions).toEqual([ expect.objectContaining({ id: "work-merge-attempt", state: "succeeded" }), ]); diff --git a/packages/engine/src/workflow-task-runtime.ts b/packages/engine/src/workflow-task-runtime.ts index 73c00b5e06..a7495817ae 100644 --- a/packages/engine/src/workflow-task-runtime.ts +++ b/packages/engine/src/workflow-task-runtime.ts @@ -14,6 +14,8 @@ import { type WorkflowNodeOutcome, } from "./workflow-graph-executor.js"; import { + WORKFLOW_ID_CONTEXT_KEY, + WORKFLOW_RUN_ID_CONTEXT_KEY, createDefaultNodeHandlers, createNoopLegacySeams, type WorkflowCustomNodeRunner, @@ -169,6 +171,8 @@ export class WorkflowTaskRuntime { let outcome: WorkflowNodeOutcome = "success"; let reason: string | undefined; let context: Record = { + [WORKFLOW_RUN_ID_CONTEXT_KEY]: workItem.runId, + [WORKFLOW_ID_CONTEXT_KEY]: target.workflowId, "workflow:work-item-id": workItem.id, "workflow:work-item-kind": workItem.kind, "workflow:work-item-attempt": workItem.attempt,