FAILURE MAP
← Case archive

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.

Verified by executionVariant 1 · 7 checks per implementationDownload source bundle ↓JSON ↗

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 fixtureActualExpectedOutcome
progress resets20Failed
stall increments22Passed
zero progress10Failed
zero stall11Passed
large reset50Failed
long prior streak increments44Passed
later stall22Passed

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 fixtureActualExpectedOutcome
progress resets00Passed
stall increments12Failed
zero progress00Passed
zero stall01Failed
large reset00Passed
long prior streak increments34Failed
later stall12Failed

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