FA-99901 / Agent workflow termination / Open access
Workflow: cancelled workflow receives another turn · case 01
A cancelled run remains eligible for another agent turn.
ROOT CAUSE
The predicate rejects only complete and failed states, so a cancelled run remains resumable.
THE FAILURE
The predicate rejects only complete and failed states, so a cancelled run remains resumable.
Unsuccessful approach: Blocking every non-active state makes paused workflows impossible to resume.
Case contract
Return true for status active or paused and false for complete, failed, or cancelled.
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(status):
return status != 'complete' and status != 'failed'
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('active', solve('active'),True)
check('paused resumes', solve('paused'),True)
check('cancelled', solve('cancelled'),False)
check('complete', solve('complete'),False)
check('failed', solve('failed'),False)
check('unknown state', solve('unknown'),False)
check('empty label', solve(''),False)
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 |
|---|---|---|---|
| active | True | True | Passed |
| paused resumes | True | True | Passed |
| cancelled | True | False | Failed |
| complete | False | False | Passed |
| failed | False | False | Passed |
| unknown state | True | False | Failed |
| empty label | True | False | Failed |
SHA-256 / 589c8d5a395603c35f8d97f8bc4196483d22cf1fc88664a7101562317b825c27
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(status):
return status == 'active'
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('active', solve('active'),True)
check('paused resumes', solve('paused'),True)
check('cancelled', solve('cancelled'),False)
check('complete', solve('complete'),False)
check('failed', solve('failed'),False)
check('unknown state', solve('unknown'),False)
check('empty label', solve(''),False)
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 |
|---|---|---|---|
| active | True | True | Passed |
| paused resumes | False | True | Failed |
| cancelled | False | False | Passed |
| complete | False | False | Passed |
| failed | False | False | Passed |
| unknown state | False | False | Passed |
| empty label | False | False | Passed |
SHA-256 / cfc381b08dcf7457f10889cd18d04f5d6f598a8b5b5d7fe0fc5e781516a03fe3
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
Only the listed toy statuses are recognized. 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.418775+00:00.
Case digest / 07db6599b4e5242bd1ad19ee4bcf3cea4dcf8189b0f12bb46c7f5d5f635b82fe