Resume a coroutine through a fixed number of ordered checkpoints and report the resume sequence and drain state.

checkpoint resume Each coroutine yield marks an ordered checkpoint that resumes in sequence, so the checkpoint count and resume order stay deterministic.

Checkpoint Resume Coordination Report

seed
checkpoint_resume.lua
Replay: real traced execution (multi-file project)
local seed = 2
local checkpoints = 0
local order = ""

for i = 1, seed do
  checkpoints = checkpoints + 1
  order = order .. i
end

local report_status = "idle"
if checkpoints >= 3 then
  report_status = "drained"
elseif checkpoints == 2 then
  report_status = "checked"
elseif checkpoints == 1 then
  report_status = "primed"
end

print("seed=" .. seed .. " checkpoints=" .. checkpoints .. " order=" .. order .. " status=" .. report_status)
local seed = 1
local checkpoints = 0
local order = ""

for i = 1, seed do
  checkpoints = checkpoints + 1
  order = order .. i
end

local report_status = "idle"
if checkpoints >= 3 then
  report_status = "drained"
elseif checkpoints == 2 then
  report_status = "checked"
elseif checkpoints == 1 then
  report_status = "primed"
end

print("seed=" .. seed .. " checkpoints=" .. checkpoints .. " order=" .. order .. " status=" .. report_status)
local seed = 3
local checkpoints = 0
local order = ""

for i = 1, seed do
  checkpoints = checkpoints + 1
  order = order .. i
end

local report_status = "idle"
if checkpoints >= 3 then
  report_status = "drained"
elseif checkpoints == 2 then
  report_status = "checked"
elseif checkpoints == 1 then
  report_status = "primed"
end

print("seed=" .. seed .. " checkpoints=" .. checkpoints .. " order=" .. order .. " status=" .. report_status)
  1. seed ← 2, checkpoints ← 0, order ← (empty)

    1local seed→ 2 = 2 --@seed=1, 32local checkpoints→ 0 = 03local order→ (empty) = ""
  2. checkpoints ← 1, order ← 1

    pass 1 of 2
    5for i1 = 1, seed2 do6  checkpoints→ 1 = checkpoints + 17  order→ 1 = order .. i18end
  3. checkpoints ← 2, order ← 12

    pass 2 of 2
    5for i2 = 1, seed2 do6  checkpoints→ 2 = checkpoints + 17  order→ 12 = order .. i28end
  4. report_status ← idle

    10local report_status→ idle = "idle"11if checkpoints >= 3 then
  5. report_status ← checked

    12  report_status = "drained"13elseif checkpoints2 == 2 then14  report_status→ checked = "checked"15elseif checkpoints == 1 then
  6. print("seed=" .. seed .. " checkpoints=" .. checkpoints .. " order=" .…

    19print("seed=" .. seed2 .. " checkpoints=" .. checkpoints2 .. " order=" .. order12 .. " status=" .. report_statuschecked)
    outputseed=2 checkpoints=2 order=12 status=checked
  1. seed ← 1, checkpoints ← 0, order ← (empty)

    1local seed→ 1 = 12local checkpoints→ 0 = 03local order→ (empty) = ""
  2. checkpoints ← 1, order ← 1

    5for i1 = 1, seed1 do6  checkpoints→ 1 = checkpoints + 17  order→ 1 = order .. i18end
  3. report_status ← idle

    10local report_status→ idle = "idle"11if checkpoints >= 3 then
  4. report_status ← primed

    14  report_status = "checked"15elseif checkpoints1 == 1 then16  report_status→ primed = "primed"17end
  5. print("seed=" .. seed .. " checkpoints=" .. checkpoints .. " order=" .…

    19print("seed=" .. seed1 .. " checkpoints=" .. checkpoints1 .. " order=" .. order1 .. " status=" .. report_statusprimed)
    outputseed=1 checkpoints=1 order=1 status=primed
  1. seed ← 3, checkpoints ← 0, order ← (empty)

    1local seed→ 3 = 32local checkpoints→ 0 = 03local order→ (empty) = ""
  2. checkpoints ← 1, order ← 1

    pass 1 of 3
    5for i1 = 1, seed3 do6  checkpoints→ 1 = checkpoints + 17  order→ 1 = order .. i18end
    All 3 passes — pass 1 is the card above
    passicheckpointsorder
    110 1(empty) 1
    221 21 12
    332 312 123
  3. report_status ← idle

    10local report_status→ idle = "idle"11if checkpoints >= 3 then
  4. report_status ← drained

    10local report_status = "idle"11if checkpoints3 >= 3 then12  report_status→ drained = "drained"13elseif checkpoints == 2 then
  5. print("seed=" .. seed .. " checkpoints=" .. checkpoints .. " order=" .…

    19print("seed=" .. seed3 .. " checkpoints=" .. checkpoints3 .. " order=" .. order123 .. " status=" .. report_statusdrained)
    outputseed=3 checkpoints=3 order=123 status=drained