FA-99896 / Agent workflow termination / Open access
Workflow: stale progress count survives a productive action · case 01
An old no-progress count triggers termination after a successful action.
ROOT CAUSE
Progress is reported separately but does not clear the stale counter.
THE FAILURE
Progress is reported separately but does not clear the stale counter.
Unsuccessful approach: Resetting on progress but failing to increment on an idle turn delays the stall limit.
Case contract
Return the new consecutive no-progress count from prior count and progress flag.
Why this case matters
This toy decision rule isolates one bounded agent-loop completion contract.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(prior, made_progress):
return prior + 1
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('progress resets', solve(N,True),0)
check('stall increments', solve(N,False),N+1)
check('zero progress', solve(0,True),0)
check('zero stall', solve(0,False),1)
check('large reset', solve(N+3,True),0)
check('long prior streak increments', solve(N+2,False),N+3)
check('later stall', solve(1,False),2)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| progress resets | 2 | 0 | Failed |
| stall increments | 2 | 2 | Passed |
| zero progress | 1 | 0 | Failed |
| zero stall | 1 | 1 | Passed |
| large reset | 5 | 0 | Failed |
| long prior streak increments | 4 | 4 | Passed |
| later stall | 2 | 2 | Passed |
SHA-256 / 3935f19f1572478875a1764c794f8c10b2ec92bb7c68380564075ac7fae6f2b0
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(prior, made_progress):
return 0 if made_progress else prior
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('progress resets', solve(N,True),0)
check('stall increments', solve(N,False),N+1)
check('zero progress', solve(0,True),0)
check('zero stall', solve(0,False),1)
check('large reset', solve(N+3,True),0)
check('long prior streak increments', solve(N+2,False),N+3)
check('later stall', solve(1,False),2)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| progress resets | 0 | 0 | Passed |
| stall increments | 1 | 2 | Failed |
| zero progress | 0 | 0 | Passed |
| zero stall | 0 | 1 | Failed |
| large reset | 0 | 0 | Passed |
| long prior streak increments | 3 | 4 | Failed |
| later stall | 1 | 2 | Failed |
SHA-256 / d0fb31849c39677a5524cb11f0f7c7ae160b8ef836dac2d898e869355c4e943a
HELD IN THE MEMBER ARCHIVE
The verified repair and its recorded checks are member-only.
This mechanism has 7 recorded checks per implementation. The open-access tier publishes the failure and the unsuccessful fix; the repaired source that passes every check, and the observations that prove it, are available to members.
Every case sharing this mechanism uses the same contract and the same repair, so this one record is held back for all of them.
Member access is invitation-based. Sign in with your invited account to inspect the repair.
Sign in to the archive ↗Verification & scope
Prior is a nonnegative integer streak count. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.
Observations recorded using Python 3.12.14 at 2026-09-30T16:48:29.418975+00:00.
Case digest / cb54e51719c28182eb5af7fa332a4b4fc773710b5ad41d583a340540830da942