Can we resume from the checkpoint and continue running at the interruption point instead of starting from the first node?

My graph is:

A → B → C → D → E
       ⬆️
      error in C

my code snippets

        global task
        async with AsyncSqliteSaver.from_conn_string("checkpoints.db") as memory:
            checkpoint_tuple =await memory.aget_tuple({"configurable": {"thread_id": task["id"]}})
            checkpoint = checkpoint_tuple.checkpoint if checkpoint_tuple else None
            if checkpoint:
                print(f"Restore checkpoint: {checkpoint['id']}")
            else:
                print("No checkpoint was found. The execution will start from the beginning.")

            config: RunnableConfig = {"configurable": {"thread_id": task["id"], "checkpoint_ns": "",'checkpoint_id': checkpoint["id"]},"callbacks": [langfuse_handler]}
            msg = builder_create_report.compile(
                name="report generation", checkpointer=memory
            ).astream(
                state,config,context=Context(model="Qwen3-Coder-480B-A35B-Instruct"),
                # stream_mode="messages"
            )

I want to recover from the mistakes and continue to proceed (since the errors are sporadic).

The current situation I’m facing is that when the checkpointer saves at point B, and I restart the graph anew, the graph will not continue from point B or point C, but will start anew from point A. Could it be that the design of langgraph is exactly as it is, or is there something wrong with my configuration? My version of Langgraph is V0.6.5.
Gratitude !!

Replenish:
When I checked at the breakpoint, the status was normally read up to the end of point B.

Hi! Why are you passing the checkpoint_id in your LangGraph invocation? If there is an existing mid-graph checkpoint for that thread, all you need to do is pass the thread_id and LangGraph will pick up where the last run left off.

I also tried passing only the “thread_id”, and initially it was like that. But after I realized that I couldn’t proceed from point C, I then tried passing the “checkpoint_id”. However, the result was still starting at point A.

my builder object like:

async def the_A_node(state: InputStateCodesReport, runtime: Runtime[Context]) -> Command[Literal["B"]]:
    ...
    return Command(
    goto="B",
    update=...)
async def the_B_node(state: InputStateCodesReport, runtime: Runtime[Context]) -> Command[Literal["C"]]:
    ...
    return Command(
    goto="C",
    update=...)

(And so on to E......)

builder_create_report = StateGraph(StateCodesReport, context_schema=Context, input_schema=InputStateCodesReport)
builder_create_report.add_node("A", the_A_node)
builder_create_report.add_node("B", the_B_node)
builder_create_report.add_node("C", the_C_node)
builder_create_report.add_node("D", the_D_node)
builder_create_report.add_node("E", the_E_node)
builder_create_report.set_entry_point("A")
builder_create_report.set_finish_point("E")