diff --git a/.changeset/fix-checkpoint-runid.md b/.changeset/fix-checkpoint-runid.md new file mode 100644 index 00000000..1a2d9f7f --- /dev/null +++ b/.changeset/fix-checkpoint-runid.md @@ -0,0 +1,5 @@ +--- +"@perstack/runtime": patch +--- + +Fix: Use setting.runId for continued checkpoints instead of inheriting from previous checkpoint diff --git a/apps/runtime/src/helpers/checkpoint.test.ts b/apps/runtime/src/helpers/checkpoint.test.ts index 7995f1c3..9f35958e 100644 --- a/apps/runtime/src/helpers/checkpoint.test.ts +++ b/apps/runtime/src/helpers/checkpoint.test.ts @@ -75,15 +75,15 @@ describe("@perstack/runtime: createNextStepCheckpoint", () => { contextWindowUsage: 0.5, } - it("increments stepNumber and updates id", () => { - const result = createNextStepCheckpoint("new-checkpoint-id", baseCheckpoint) + it("increments stepNumber and updates id and runId", () => { + const result = createNextStepCheckpoint("new-checkpoint-id", baseCheckpoint, "new-run-id") expect(result.id).toBe("new-checkpoint-id") + expect(result.runId).toBe("new-run-id") expect(result.stepNumber).toBe(6) }) it("preserves other checkpoint properties", () => { - const result = createNextStepCheckpoint("new-checkpoint-id", baseCheckpoint) - expect(result.runId).toBe(baseCheckpoint.runId) + const result = createNextStepCheckpoint("new-checkpoint-id", baseCheckpoint, "new-run-id") expect(result.expert).toEqual(baseCheckpoint.expert) expect(result.status).toBe(baseCheckpoint.status) expect(result.messages).toEqual(baseCheckpoint.messages) diff --git a/apps/runtime/src/helpers/checkpoint.ts b/apps/runtime/src/helpers/checkpoint.ts index 005929e2..81693ed1 100644 --- a/apps/runtime/src/helpers/checkpoint.ts +++ b/apps/runtime/src/helpers/checkpoint.ts @@ -32,10 +32,15 @@ export function createInitialCheckpoint( } } -export function createNextStepCheckpoint(checkpointId: string, checkpoint: Checkpoint): Checkpoint { +export function createNextStepCheckpoint( + checkpointId: string, + checkpoint: Checkpoint, + runId: string, +): Checkpoint { return { ...checkpoint, id: checkpointId, + runId, stepNumber: checkpoint.stepNumber + 1, } } diff --git a/apps/runtime/src/orchestration/single-run-executor.test.ts b/apps/runtime/src/orchestration/single-run-executor.test.ts index 291ddda2..f8952426 100644 --- a/apps/runtime/src/orchestration/single-run-executor.test.ts +++ b/apps/runtime/src/orchestration/single-run-executor.test.ts @@ -39,9 +39,10 @@ vi.mock("../helpers/index.js", () => ({ }, contextWindow: params.contextWindow, })), - createNextStepCheckpoint: vi.fn().mockImplementation((id, checkpoint) => ({ + createNextStepCheckpoint: vi.fn().mockImplementation((id, checkpoint, runId) => ({ ...checkpoint, id, + runId, stepNumber: checkpoint.stepNumber + 1, })), })) diff --git a/apps/runtime/src/orchestration/single-run-executor.ts b/apps/runtime/src/orchestration/single-run-executor.ts index 7f6e51b5..1696fabf 100644 --- a/apps/runtime/src/orchestration/single-run-executor.ts +++ b/apps/runtime/src/orchestration/single-run-executor.ts @@ -79,7 +79,7 @@ export class SingleRunExecutor { }) const initialCheckpoint = checkpoint - ? createNextStepCheckpoint(createId(), checkpoint) + ? createNextStepCheckpoint(createId(), checkpoint, setting.runId) : createInitialCheckpoint(createId(), { jobId: setting.jobId, runId: setting.runId,