{"record":{"id":"c3dcc1d77fd4326d","repo":"temporalio/temporal","slug":"can-t-find-reset-point-for-v","errorCode":null,"errorMessage":"Can't find reset point for %v","messagePattern":"Can't find reset point for (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"service/worker/batcher/activities.go","lineNumber":1183,"sourceCode":"\t})\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tresetPoints := res.GetWorkflowExecutionInfo().GetAutoResetPoints().GetPoints()\n\tfor _, point := range resetPoints {\n\t\tif point.BuildId == buildId {\n\t\t\tif !point.Resettable {\n\t\t\t\treturn 0, fmt.Errorf(\"Reset point for %v is not resettable\", buildId)\n\t\t\t} else if point.ExpireTime != nil && point.ExpireTime.AsTime().Before(time.Now()) {\n\t\t\t\treturn 0, fmt.Errorf(\"Reset point for %v is expired\", buildId)\n\t\t\t} else if execution.RunId != point.RunId && currentRunOnly {\n\t\t\t\treturn 0, fmt.Errorf(\"Reset point for %v points to previous run and CurrentRunOnly is set\", buildId)\n\t\t\t}\n\t\t\texecution.RunId = point.RunId\n\t\t\treturn point.FirstWorkflowTaskCompletedId, nil\n\t\t}\n\t}\n\treturn 0, fmt.Errorf(\"Can't find reset point for %v\", buildId)\n}\n","sourceCodeStart":1165,"sourceCodeEnd":1185,"githubUrl":"https://github.com/temporalio/temporal/blob/bde624efd13fbd3843654058db6d9c716166318b/service/worker/batcher/activities.go#L1165-L1185","documentation":"getResetPoint iterated all auto-reset points of the workflow execution and none had a BuildId equal to the requested buildId, so no FirstWorkflowTaskCompletedId could be resolved. This means the workflow has no auto-reset point recorded for that worker deployment version.","triggerScenarios":"Calling getResetEventIDByOptions with a buildId that was never recorded as an auto-reset point for this workflow execution — wrong version string, version deployed but workflow never ran a task on it, or reset points cleared/expired/overwritten by newer deployments (max points limit).","commonSituations":"Typo in BuildId; resetting a workflow that started after the bad deployment (so no earlier point exists); servers keeping only a bounded number of auto-reset points so older ones were evicted; versioning config not enabled when the workflow ran.","solutions":["Verify the BuildId exists: describe the workflow execution and inspect GetAutoResetPoints().GetPoints() for an exact match.","Use the correct/complete BuildId string (include the full version identifier as recorded by the worker).","If no point exists for that version, use an alternative recovery: reset by event ID/time, or terminate and restart the workflow.","Enable/verify worker-versioning auto-reset-point recording so future builds are captured."],"exampleFix":"// before\nid, err := getResetEventIDByOptions(ctx, exec, &ResetOptions{BuildId: \"my-worker@1.2\"}) // not recorded\n// after\nresp, _ := client.DescribeWorkflowExecution(ctx, &workflowservice.DescribeWorkflowExecutionRequest{WorkflowExecution: exec})\nfor _, p := range resp.GetWorkflowExecutionInfo().GetAutoResetPoints().GetPoints() {\n  if p.GetBuildId() == \"my-worker@1.2\" {\n    id, err = getResetEventIDByOptions(ctx, exec, &ResetOptions{BuildId: p.GetBuildId()})\n    break\n  }\n}","handlingStrategy":"validation","validationCode":"resp, err := client.DescribeWorkflowExecution(ctx, &workflowservice.DescribeWorkflowExecutionRequest{WorkflowExecution: exec})\nif err != nil { return err }\nfound := false\nfor _, p := range resp.GetWorkflowExecutionInfo().GetAutoResetPoints().GetPoints() {\n  if p.GetBuildId() == buildId { found = true; break }\n}\nif !found {\n  return fmt.Errorf(\"build %s has no reset point on this workflow\", buildId)\n}","typeGuard":"func hasResetPoint(points []*deploymentpb.ResetPoint, buildId string) bool {\n  for _, p := range points {\n    if p.GetBuildId() == buildId { return true }\n  }\n  return false\n}","tryCatchPattern":"if err := doReset(ctx, exec, buildId); err != nil {\n  if strings.Contains(err.Error(), \"Can't find reset point\") {\n    logger.Warn(\"no reset point for build; falling back to terminate/restart\")\n    return fallbackRecovery(ctx, exec)\n  }\n  return err\n}","preventionTips":["Copy BuildIds directly from DescribeWorkflowExecution output instead of typing them.","Remember auto-reset points are bounded and can be evicted; reset soon after incidents.","Verify worker-versioning/auto-reset recording was enabled when the workflow ran.","Only reset workflows that actually executed a task on the target build."],"tags":["go","reset","build-id","worker-versioning"],"backgroundTag":"reset-point-not-found","analyzedSha":"bde624efd13fbd3843654058db6d9c716166318b","analyzedAt":"2026-09-01T07:18:39.080Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}