Practical Scripting Patterns
Retry Budgets
Model a bounded retry loop.
retry-budget
Retry loops need a limit. A small counter and status label show whether the script stopped because work succeeded or because the budget ran out.
Retry Budgets
retry_budget.lua
Replay: real traced execution (multi-file project)
local failures = 2
local max_attempts = 3
local attempt = 0
local status = "retry"
while attempt < max_attempts and status == "retry" do
attempt = attempt + 1
if attempt > failures then
status = "ok"
end
end
if status ~= "ok" then
status = "failed"
end
print("failures=" .. failures)
print("attempts=" .. attempt)
print("status=" .. status)
local failures = 0
local max_attempts = 3
local attempt = 0
local status = "retry"
while attempt < max_attempts and status == "retry" do
attempt = attempt + 1
if attempt > failures then
status = "ok"
end
end
if status ~= "ok" then
status = "failed"
end
print("failures=" .. failures)
print("attempts=" .. attempt)
print("status=" .. status)
local failures = 3
local max_attempts = 3
local attempt = 0
local status = "retry"
while attempt < max_attempts and status == "retry" do
attempt = attempt + 1
if attempt > failures then
status = "ok"
end
end
if status ~= "ok" then
status = "failed"
end
print("failures=" .. failures)
print("attempts=" .. attempt)
print("status=" .. status)
failures ← 2, max_attempts ← 3, attempt ← 0, status ← retry
1local failures→ 2 = 2 --@failures=0, 32local max_attempts→ 3 = 33local attempt→ 0 = 04local status→ retry = "retry"attempt ← 1
pass 1 of 36while attempt0 < max_attempts3 and statusretry == "retry" do7 attempt→ 1 = attempt + 18 if attempt > failures thenAll 3 passes — pass 1 is the card above pass failuresattemptstatus1 — 0 → 1 retry 2 — 1 → 2 retry 3 2 2 → 3 ok status ← ok
7attempt = attempt + 18if attempt3 > failures2 then9 status→ ok = "ok"10endprint("failures=" .. failures)
17print("failures=" .. failures2)18print("attempts=" .. attempt3)19print("status=" .. statusok)outputfailures=2 attempts=3 status=ok
failures ← 0, max_attempts ← 3, attempt ← 0, status ← retry
1local failures→ 0 = 02local max_attempts→ 3 = 33local attempt→ 0 = 04local status→ retry = "retry"attempt ← 1
6while attempt0 < max_attempts3 and statusretry == "retry" do7 attempt→ 1 = attempt + 18 if attempt > failures thenstatus ← ok
7attempt = attempt + 18if attempt1 > failures0 then9 status→ ok = "ok"10endprint("failures=" .. failures)
17print("failures=" .. failures0)18print("attempts=" .. attempt1)19print("status=" .. statusok)outputfailures=0 attempts=1 status=ok
failures ← 3, max_attempts ← 3, attempt ← 0, status ← retry
1local failures→ 3 = 32local max_attempts→ 3 = 33local attempt→ 0 = 04local status→ retry = "retry"attempt ← 1
pass 1 of 36while attempt0 < max_attempts3 and statusretry == "retry" do7 attempt→ 1 = attempt + 18 if attempt > failures thenAll 3 passes — pass 1 is the card above pass attemptstatus1 0 → 1 retry 2 1 → 2 retry 3 2 → 3 retry → failed status ← failed
13if statusretry ~= "ok" then14 status→ failed = "failed"15endprint("failures=" .. failures)
17print("failures=" .. failures3)18print("attempts=" .. attempt3)19print("status=" .. statusfailed)outputfailures=3 attempts=3 status=failed