{"abstract":"Separated tool errors trigger a consecutive-error stop.","category":"Agent workflow termination","checks":8,"contract":"Return true iff the number of trailing error outcomes is at least limit.","contract_signature":"outcomes, limit","evaluation_group":"w3-agent-workflow-termination-consecutive-error-limit","failed_approach":"Looking only at the most recent outcome misses an exhausted multi-error streak.","family":"w3-agent-workflow-termination-consecutive-error-limit","id":"FA-99911","implementations":{"attempt":{"sha256":"d62de679d3dc32222b9548882e7a5ff3ba7f01d112b894656f95fc6dfddef8d0","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(outcomes, limit):\n    return bool(outcomes) and outcomes[-1] == 'error' and limit <= 1\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('separated errors', solve(['error','ok','error'],2),False)\ncheck('trailing errors', solve(['ok']+['error']*N,N),True)\ncheck('two errors at the tail', solve(['error','ok','error','error'],2),True)\ncheck('empty outcomes', solve([],1),False)\ncheck('limit one error', solve(['error'],1),True)\ncheck('limit one success', solve(['ok'],1),False)\ncheck('multi-error trailing run', solve(['ok','error','error'],2),True)\ncheck('exact run', solve(['error']*N,N),True)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"broken":{"sha256":"1bd9ca9f4faf0e2ae4f4e18dc90486c1b8bbd18dd64a85bfa5f353abbcdbdfac","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(outcomes, limit):\n    return outcomes.count('error') >= limit\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('separated errors', solve(['error','ok','error'],2),False)\ncheck('trailing errors', solve(['ok']+['error']*N,N),True)\ncheck('two errors at the tail', solve(['error','ok','error','error'],2),True)\ncheck('empty outcomes', solve([],1),False)\ncheck('limit one error', solve(['error'],1),True)\ncheck('limit one success', solve(['ok'],1),False)\ncheck('multi-error trailing run', solve(['ok','error','error'],2),True)\ncheck('exact run', solve(['error']*N,N),True)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"}},"limitations":"Outcomes use error for a failed turn and any other label for non-error. 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.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"w3-agent-workflow-termination-consecutive-error-limit","generated_at":"2026-09-30T16:48:29.420400+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"This toy decision rule isolates one bounded agent-loop completion contract.","root_cause":"The implementation totals errors across the entire workflow.","sha256":"94a53a12cb271cf087b47a729c3dd2fb37a4c179e711c57286e02af68e74b09e","title":"Workflow: error limit ignores a successful turn between errors · case 01","variant":1,"variant_policy":"The fixture code references N, supplied as 1 through 5. Fixed boundary checks may repeat. These records share one mechanism and must remain together in evaluation splits.","verified":true,"visibility":"public","verification":{"attempt":{"elapsed_ms":30.786,"exit_code":1,"observations":[{"actual":false,"check":"separated errors","expected":false,"passed":true},{"actual":true,"check":"trailing errors","expected":true,"passed":true},{"actual":false,"check":"two errors at the tail","expected":true,"passed":false},{"actual":false,"check":"empty outcomes","expected":false,"passed":true},{"actual":true,"check":"limit one error","expected":true,"passed":true},{"actual":false,"check":"limit one success","expected":false,"passed":true},{"actual":false,"check":"multi-error trailing run","expected":true,"passed":false},{"actual":true,"check":"exact run","expected":true,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"separated errors\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"trailing errors\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"two errors at the tail\", \"actual\": false, \"expected\": true, \"passed\": false}, {\"check\": \"empty outcomes\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"limit one error\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"limit one success\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"multi-error trailing run\", \"actual\": false, \"expected\": true, \"passed\": false}, {\"check\": \"exact run\", \"actual\": true, \"expected\": true, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":26.175,"exit_code":1,"observations":[{"actual":true,"check":"separated errors","expected":false,"passed":false},{"actual":true,"check":"trailing errors","expected":true,"passed":true},{"actual":true,"check":"two errors at the tail","expected":true,"passed":true},{"actual":false,"check":"empty outcomes","expected":false,"passed":true},{"actual":true,"check":"limit one error","expected":true,"passed":true},{"actual":false,"check":"limit one success","expected":false,"passed":true},{"actual":true,"check":"multi-error trailing run","expected":true,"passed":true},{"actual":true,"check":"exact run","expected":true,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"separated errors\", \"actual\": true, \"expected\": false, \"passed\": false}, {\"check\": \"trailing errors\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"two errors at the tail\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"empty outcomes\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"limit one error\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"limit one success\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"multi-error trailing run\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"exact run\", \"actual\": true, \"expected\": true, \"passed\": true}], \"passed\": false}\n"}},"member_only":{"stages":["fixed"],"fields":["implementations.fixed","verification.fixed","harness","repair"],"note":"The verified repair, its recorded checks, the repair description, and the scoring harness are available to members."}}