{"abstract":"Pairs keep being found after the opener stack overflowed.","category":"Bidirectional text layout","checks":8,"contract":"Input [text, classes, stack limit]. Only characters of class ON take part. Openers ( [ { are pushed; on overflow of the stack limit stop and keep pairs found so far. A closer searches the stack from the top for its opener; if found it pairs and discards that entry and everything above; otherwise it is ignored. Return pairs sorted by opener.","contract_signature":"x","evaluation_group":"w2-bidirectional-text-layout-bracket-pairs","failed_approach":"Allowing one extra entry delays the stop.","family":"w2-bidirectional-text-layout-bracket-pairs-stack-overflow-handling","id":"FA-80581","implementations":{"attempt":{"sha256":"e06b4fbdbcf59902d1ddb6c1c5a41e9382acc638bd95230fe96a6074ffc264a1","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    text, classes, limit = x\n    OPEN = {'(': ')', '[': ']', '{': '}'}\n    CLOSE = {')', ']', '}'}\n    stack = []\n    pairs = []\n    for i, ch in enumerate(text):\n        if classes[i] != 'ON':\n            continue\n        if ch in OPEN:\n            if len(stack) > limit:\n                break\n            stack.append((OPEN[ch], i))\n        elif ch in CLOSE:\n            for k in range(len(stack) - 1, -1, -1):\n                if stack[k][0] == ch:\n                    pairs.append([stack[k][1], i])\n                    del stack[k:]\n                    break\n    return sorted(pairs)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('stack overflow stops', ['((()))', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], []), ('regression: stack overflow handling', ['(({{[(a){a)', ['ON', 'ON', 'ON', 'R', 'ON', 'ON', 'R', 'ON', 'ON', 'L', 'R'], 4], []), ('regression: stack overflow handling', ['{[)(a([]a({](', ['ON', 'ON', 'ON', 'R', 'L', 'R', 'ON', 'L', 'L', 'L', 'L', 'ON', 'ON'], 2], []), ('regression: stack overflow handling', ['{a[}(((', ['ON', 'L', 'ON', 'ON', 'ON', 'L', 'ON'], 1], []), ('overridden bracket ignored', ['(a)', ['R', 'L', 'ON'], 4], []), ('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('control layout', ['[[(a[(}[[{', ['ON', 'R', 'ON', 'L', 'R', 'ON', 'ON', 'ON', 'ON', 'ON'], 3], []), ('control layout', ['][}((}(()([', ['ON', 'L', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'ON'], 3], [[6, 8]])], [('regression: stack overflow handling', ['](](a)(](', ['L', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'ON'], 1], []), ('regression: stack overflow handling', ['{}((}{[}(())(', ['R', 'L', 'ON', 'ON', 'ON', 'R', 'ON', 'R', 'L', 'ON', 'ON', 'ON', 'R'], 2], []), ('regression: stack overflow handling', ['[a[(}](][(){)', ['L', 'R', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'L', 'ON'], 1], []), ('regression: stack overflow handling', ['{}({a{{(()](}', ['ON', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'ON'], 4], [[0, 1]]), ('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('stack overflow stops', ['((()))', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], []), ('control layout', [')a{{a}]}({', ['L', 'L', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'ON', 'ON'], 4], [[2, 7], [3, 5]]), ('control layout', [')]])([', ['R', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], [])], [('regression: stack overflow handling', ['(][})([{({a]a]', ['ON', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'L', 'ON', 'L', 'R'], 2], [[0, 4]]), ('regression: stack overflow handling', ['{({{{{}a((a', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'R', 'L'], 2], []), ('regression: stack overflow handling', ['[]a}}[](a](((', ['ON', 'R', 'R', 'ON', 'R', 'ON', 'ON', 'ON', 'L', 'R', 'L', 'ON', 'R'], 1], []), ('regression: stack overflow handling', ['(()[{a{[[((}', ['ON', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'L', 'ON', 'ON', 'R'], 1], []), ('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('overridden bracket ignored', ['(a)', ['R', 'L', 'ON'], 4], []), ('control layout', ['a][a', ['L', 'L', 'ON', 'R'], 3], []), ('control layout', ['a))(', ['L', 'L', 'ON', 'L'], 3], [])], [('regression: stack overflow handling', ['[([{{(]]', ['ON', 'ON', 'R', 'R', 'ON', 'ON', 'ON', 'R'], 1], []), ('regression: stack overflow handling', ['{({{{{}a((a', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'R', 'L'], 2], []), ('partial-repair probe', ['()}][[a[(({}}{', ['L', 'R', 'R', 'ON', 'ON', 'ON', 'R', 'ON', 'R', 'ON', 'ON', 'ON', 'ON', 'ON'], 4], []), ('regression: stack overflow handling', ['[]a}}[](a](((', ['ON', 'R', 'R', 'ON', 'R', 'ON', 'ON', 'ON', 'L', 'R', 'L', 'ON', 'R'], 1], []), ('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('overridden bracket ignored', ['(a)', ['R', 'L', 'ON'], 4], []), ('control layout', ['][', ['ON', 'ON'], 1], []), ('control layout', [')a}]', ['L', 'R', 'ON', 'ON'], 4], [])], [('regression: stack overflow handling', ['[]([[]a)})[', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'R', 'ON', 'ON', 'ON', 'ON'], 1], [[0, 1]]), ('regression: stack overflow handling', ['[a{a]})]([}', ['ON', 'L', 'ON', 'L', 'L', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 1], []), ('regression: stack overflow handling', ['(]{[}', ['ON', 'ON', 'ON', 'ON', 'ON'], 2], []), ('partial-repair probe', ['{]a[)][(', ['ON', 'ON', 'R', 'ON', 'ON', 'ON', 'R', 'ON'], 1], []), ('stack overflow stops', ['((()))', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], []), ('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('control layout', ['[)[a{{{(', ['L', 'ON', 'ON', 'R', 'ON', 'ON', 'L', 'ON'], 3], []), ('control layout', ['(([)([', ['ON', 'ON', 'ON', 'ON', 'ON', 'L'], 3], [[1, 3]])]]\nfor label, args, expected in fixtures[N - 1]:\n    check(label, solve(args), expected)\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":"db6ad45672f0d64696184b5fa4d1b98dfac42fece9eb97003688566a7572540b","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    text, classes, limit = x\n    OPEN = {'(': ')', '[': ']', '{': '}'}\n    CLOSE = {')', ']', '}'}\n    stack = []\n    pairs = []\n    for i, ch in enumerate(text):\n        if classes[i] != 'ON':\n            continue\n        if ch in OPEN:\n            if len(stack) >= limit:\n                continue\n            stack.append((OPEN[ch], i))\n        elif ch in CLOSE:\n            for k in range(len(stack) - 1, -1, -1):\n                if stack[k][0] == ch:\n                    pairs.append([stack[k][1], i])\n                    del stack[k:]\n                    break\n    return sorted(pairs)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('stack overflow stops', ['((()))', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], []), ('regression: stack overflow handling', ['(({{[(a){a)', ['ON', 'ON', 'ON', 'R', 'ON', 'ON', 'R', 'ON', 'ON', 'L', 'R'], 4], []), ('regression: stack overflow handling', ['{[)(a([]a({](', ['ON', 'ON', 'ON', 'R', 'L', 'R', 'ON', 'L', 'L', 'L', 'L', 'ON', 'ON'], 2], []), ('regression: stack overflow handling', ['{a[}(((', ['ON', 'L', 'ON', 'ON', 'ON', 'L', 'ON'], 1], []), ('overridden bracket ignored', ['(a)', ['R', 'L', 'ON'], 4], []), ('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('control layout', ['[[(a[(}[[{', ['ON', 'R', 'ON', 'L', 'R', 'ON', 'ON', 'ON', 'ON', 'ON'], 3], []), ('control layout', ['][}((}(()([', ['ON', 'L', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'ON'], 3], [[6, 8]])], [('regression: stack overflow handling', ['](](a)(](', ['L', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'ON'], 1], []), ('regression: stack overflow handling', ['{}((}{[}(())(', ['R', 'L', 'ON', 'ON', 'ON', 'R', 'ON', 'R', 'L', 'ON', 'ON', 'ON', 'R'], 2], []), ('regression: stack overflow handling', ['[a[(}](][(){)', ['L', 'R', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'L', 'ON'], 1], []), ('regression: stack overflow handling', ['{}({a{{(()](}', ['ON', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'ON'], 4], [[0, 1]]), ('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('stack overflow stops', ['((()))', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], []), ('control layout', [')a{{a}]}({', ['L', 'L', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'ON', 'ON'], 4], [[2, 7], [3, 5]]), ('control layout', [')]])([', ['R', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], [])], [('regression: stack overflow handling', ['(][})([{({a]a]', ['ON', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'L', 'ON', 'L', 'R'], 2], [[0, 4]]), ('regression: stack overflow handling', ['{({{{{}a((a', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'R', 'L'], 2], []), ('regression: stack overflow handling', ['[]a}}[](a](((', ['ON', 'R', 'R', 'ON', 'R', 'ON', 'ON', 'ON', 'L', 'R', 'L', 'ON', 'R'], 1], []), ('regression: stack overflow handling', ['(()[{a{[[((}', ['ON', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'L', 'ON', 'ON', 'R'], 1], []), ('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('overridden bracket ignored', ['(a)', ['R', 'L', 'ON'], 4], []), ('control layout', ['a][a', ['L', 'L', 'ON', 'R'], 3], []), ('control layout', ['a))(', ['L', 'L', 'ON', 'L'], 3], [])], [('regression: stack overflow handling', ['[([{{(]]', ['ON', 'ON', 'R', 'R', 'ON', 'ON', 'ON', 'R'], 1], []), ('regression: stack overflow handling', ['{({{{{}a((a', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'R', 'L'], 2], []), ('partial-repair probe', ['()}][[a[(({}}{', ['L', 'R', 'R', 'ON', 'ON', 'ON', 'R', 'ON', 'R', 'ON', 'ON', 'ON', 'ON', 'ON'], 4], []), ('regression: stack overflow handling', ['[]a}}[](a](((', ['ON', 'R', 'R', 'ON', 'R', 'ON', 'ON', 'ON', 'L', 'R', 'L', 'ON', 'R'], 1], []), ('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('overridden bracket ignored', ['(a)', ['R', 'L', 'ON'], 4], []), ('control layout', ['][', ['ON', 'ON'], 1], []), ('control layout', [')a}]', ['L', 'R', 'ON', 'ON'], 4], [])], [('regression: stack overflow handling', ['[]([[]a)})[', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'R', 'ON', 'ON', 'ON', 'ON'], 1], [[0, 1]]), ('regression: stack overflow handling', ['[a{a]})]([}', ['ON', 'L', 'ON', 'L', 'L', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 1], []), ('regression: stack overflow handling', ['(]{[}', ['ON', 'ON', 'ON', 'ON', 'ON'], 2], []), ('partial-repair probe', ['{]a[)][(', ['ON', 'ON', 'R', 'ON', 'ON', 'ON', 'R', 'ON'], 1], []), ('stack overflow stops', ['((()))', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], []), ('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('control layout', ['[)[a{{{(', ['L', 'ON', 'ON', 'R', 'ON', 'ON', 'L', 'ON'], 3], []), ('control layout', ['(([)([', ['ON', 'ON', 'ON', 'ON', 'ON', 'L'], 3], [[1, 3]])]]\nfor label, args, expected in fixtures[N - 1]:\n    check(label, solve(args), expected)\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":"A deterministic toy bidi model over stipulated class labels and integer levels; it is inspired by, but does not claim conformance to, any published algorithm. 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":"w2-bidirectional-text-layout-bracket-pairs-stack-overflow-handling","generated_at":"2026-09-29T14:49:55.195024+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Mixed right-to-left and left-to-right text must resolve levels and visual order exactly, or words, numbers and carets land in the wrong place.","root_cause":"An overflowing opener is skipped instead of stopping identification.","sha256":"4b989ee7e95ccda16513bb0d1fed24e4229d229d1825231da5b29beb8f162e21","title":"Bracket pair identification: stack overflow handling · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verified":true,"visibility":"public","verification":{"attempt":{"elapsed_ms":40.672,"exit_code":1,"observations":[{"actual":[[0,5],[1,4],[2,3]],"check":"stack overflow stops","expected":[],"passed":false},{"actual":[[5,7]],"check":"regression: stack overflow handling","expected":[],"passed":false},{"actual":[[6,11]],"check":"regression: stack overflow handling","expected":[],"passed":false},{"actual":[[0,3]],"check":"regression: stack overflow handling","expected":[],"passed":false},{"actual":[],"check":"overridden bracket ignored","expected":[],"passed":true},{"actual":[[0,2]],"check":"mismatched inner bracket","expected":[[0,2]],"passed":true},{"actual":[],"check":"control layout","expected":[],"passed":true},{"actual":[[6,8]],"check":"control layout","expected":[[6,8]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"stack overflow stops\", \"actual\": [[0, 5], [1, 4], [2, 3]], \"expected\": [], \"passed\": false}, {\"check\": \"regression: stack overflow handling\", \"actual\": [[5, 7]], \"expected\": [], \"passed\": false}, {\"check\": \"regression: stack overflow handling\", \"actual\": [[6, 11]], \"expected\": [], \"passed\": false}, {\"check\": \"regression: stack overflow handling\", \"actual\": [[0, 3]], \"expected\": [], \"passed\": false}, {\"check\": \"overridden bracket ignored\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"mismatched inner bracket\", \"actual\": [[0, 2]], \"expected\": [[0, 2]], \"passed\": true}, {\"check\": \"control layout\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"control layout\", \"actual\": [[6, 8]], \"expected\": [[6, 8]], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.569,"exit_code":1,"observations":[{"actual":[[0,4],[1,3]],"check":"stack overflow stops","expected":[],"passed":false},{"actual":[[1,7]],"check":"regression: stack overflow handling","expected":[],"passed":false},{"actual":[[1,11]],"check":"regression: stack overflow handling","expected":[],"passed":false},{"actual":[[0,3]],"check":"regression: stack overflow handling","expected":[],"passed":false},{"actual":[],"check":"overridden bracket ignored","expected":[],"passed":true},{"actual":[[0,2]],"check":"mismatched inner bracket","expected":[[0,2]],"passed":true},{"actual":[],"check":"control layout","expected":[],"passed":true},{"actual":[[6,8]],"check":"control layout","expected":[[6,8]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"stack overflow stops\", \"actual\": [[0, 4], [1, 3]], \"expected\": [], \"passed\": false}, {\"check\": \"regression: stack overflow handling\", \"actual\": [[1, 7]], \"expected\": [], \"passed\": false}, {\"check\": \"regression: stack overflow handling\", \"actual\": [[1, 11]], \"expected\": [], \"passed\": false}, {\"check\": \"regression: stack overflow handling\", \"actual\": [[0, 3]], \"expected\": [], \"passed\": false}, {\"check\": \"overridden bracket ignored\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"mismatched inner bracket\", \"actual\": [[0, 2]], \"expected\": [[0, 2]], \"passed\": true}, {\"check\": \"control layout\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"control layout\", \"actual\": [[6, 8]], \"expected\": [[6, 8]], \"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."}}