micro/go-micro · error
flow %s has no checkpoint configured
Error message
flow %s has no checkpoint configured
What it means
Resume restores a persisted run from the flow's checkpoint store. If the Flow was constructed without a Checkpoint option, f.checkpoint is nil and there is nowhere to load the run from, so Resume fails fast with this error. The library requires checkpointing to be configured before any resume operation.
Source
Thrown at flow/steps.go:422
Started: time.Now(),
}
for _, s := range f.opts.Steps {
run.Steps = append(run.Steps, StepRecord{Name: s.Name, Status: "pending"})
}
return f.runFrom(ctx, run)
}
// Resume continues a persisted run by id, picking up at the step it
// stopped on. Completed runs are a no-op.
func (f *Flow) Resume(ctx context.Context, runID string) error {
ctx, cancel := f.withTimeout(ctx)
defer cancel()
if err := validateSteps(f.opts.Steps); err != nil {
return err
}
if f.checkpoint == nil {
return fmt.Errorf("flow %s has no checkpoint configured", f.name)
}
run, ok, err := f.checkpoint.Load(ctx, runID)
if err != nil {
return err
}
if !ok {
return fmt.Errorf("run %s not found", runID)
}
if run.Status == "done" {
return nil
}
_, err = f.runFrom(ctx, run)
return err
}
// ResumePending resumes every checkpointed run for this flow that has not
// completed yet, in the same oldest-first order returned by Pending.
//View on GitHub (pinned to 24529f1404)
Solutions
- Add the flow.Checkpoint(...) option when constructing the Flow, pointing it at a persistent store.
- Verify the Flow instance used for Resume is the same one (or configured identically to the one) that started the run.
- If checkpointing is intentionally disabled, remove the Resume/ResumePending call path instead of resuming.
Example fix
// before f := flow.New(flow.Steps(step1, step2)) err := f.Resume(ctx, runID) // fails: no checkpoint // after f := flow.New( flow.Steps(step1, step2), flow.Checkpoint(mystore), ) err := f.Resume(ctx, runID)
Defensive patterns
Strategy: validation
Validate before calling
if f.checkpoint == nil {
return errors.New("cannot resume: flow was created without flow.Checkpoint(...)")
} Try / catch
if err := f.Resume(ctx, runID); err != nil {
if strings.Contains(err.Error(), "no checkpoint configured") {
// rebuild flow with checkpoint option, then retry
}
return err
} Prevention
- Make flow.Checkpoint a mandatory part of your flow factory function
- Use a single constructor so every Flow instance has identical options
- Add a startup check that Resume/ResumePending-capable flows have a checkpoint
- Document that flows without checkpoints cannot be resumed
When it happens
Trigger: Calling flow.Resume(ctx, runID) (directly or via ResumePending) on a Flow instance created without flow.Checkpoint(...).
Common situations: A flow works fine for fresh starts (Start doesn't need a checkpoint), so the missing option goes unnoticed until a crash/restart and someone tries to resume; flows created in tests often omit the checkpoint option; ResumePending loops over saved runs but the target flow itself never had a checkpoint configured.
Related errors
- agent: ResumeStreamAsk requires a checkpoint
- LLM step requires a flow model (set Provider/APIKey)
- run %s not found
- %w; additionally failed to checkpoint failed run: %v
- flow: step %q has no Run function
AI-assisted analysis of micro/go-micro@24529f1404 (2026-09-01).
Data as JSON: /api/errors/aabf69dfdf0aa2ca.
Report an issue: GitHub.