{"abstract":"The safety edge is ignored while the door nudges.","category":"Elevator dispatch scheduling","checks":8,"contract":"During a door cycle each light-curtain obstruction reopens the doors and counts; the third obstruction, or an obstruction while the curtain has been blocked continuously for 20 s or more since the first unbroken obstruction, starts nudging (slow close, curtain ignored). While nudging, curtain obstructions are ignored. The mechanical safety edge always reopens and does not affect counting. unblock ends a continuous blockage. closed ends the cycle and resets everything.","contract_signature":"x","evaluation_group":"w2-elevator_dispatch_scheduling-door-obstruction-nudging","failed_approach":"Cancelling nudging on an edge contact lets the curtain count start over.","family":"w2-elevator_dispatch_scheduling-door-obstruction-nudging-safety-edge-during-nudging","id":"FA-67646","implementations":{"attempt":{"sha256":"a194567bc68558251f0f700e2bc9ba05a1b76a249486d8b90cfa4dc432f38c93","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    count = 0\n    nudge = False\n    block_start = None\n    out = []\n    for t, ev in x['events']:\n        if ev == 'obstruct':\n            if block_start is None:\n                block_start = t\n            if nudge:\n                out.append('ignored')\n            else:\n                count += 1\n                if count >= 3 or t - block_start >= 20:\n                    nudge = True\n                    out.append('nudge')\n                else:\n                    out.append('reopen')\n        elif ev == 'unblock':\n            block_start = None\n        elif ev == 'edge':\n            out.append('reopen')\n            nudge = False\n            count = 0\n        elif ev == 'closed':\n            count = 0\n            nudge = False\n            block_start = None\n            out.append('done')\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: safety edge while nudging', {'events': [[1, 'obstruct'], [2, 'obstruct'], [3, 'obstruct'], [4, 'edge'], [5, 'obstruct']]}, ['reopen', 'reopen', 'nudge', 'reopen', 'ignored']), ('sampled regression 22', {'events': [[5, 'closed'], [7, 'obstruct'], [9, 'obstruct'], [14, 'obstruct'], [19, 'edge'], [20, 'edge'], [32, 'unblock']]}, ['done', 'reopen', 'reopen', 'nudge', 'reopen', 'reopen']), ('control 1', {'events': [[8, 'obstruct'], [13, 'closed'], [18, 'obstruct'], [26, 'edge'], [28, 'obstruct'], [29, 'obstruct'], [41, 'obstruct'], [42, 'obstruct'], [54, 'obstruct'], [66, 'closed']]}, ['reopen', 'done', 'reopen', 'reopen', 'reopen', 'nudge', 'ignored', 'ignored', 'ignored', 'done']), ('boundary: third obstruction', {'events': [[1, 'obstruct'], [2, 'unblock'], [3, 'obstruct'], [4, 'unblock'], [5, 'obstruct']]}, ['reopen', 'reopen', 'nudge']), ('boundary: edge contacts do not count', {'events': [[1, 'obstruct'], [2, 'edge'], [3, 'unblock'], [4, 'obstruct'], [5, 'edge']]}, ['reopen', 'reopen', 'reopen', 'reopen']), ('control 4', {'events': [[5, 'edge'], [10, 'unblock'], [11, 'obstruct'], [19, 'closed']]}, ['reopen', 'reopen', 'done']), ('control 7', {'events': [[2, 'unblock'], [10, 'edge'], [18, 'obstruct'], [23, 'unblock'], [28, 'edge'], [33, 'obstruct']]}, ['reopen', 'reopen', 'reopen', 'reopen']), ('control 10', {'events': [[8, 'edge'], [13, 'obstruct'], [18, 'edge'], [30, 'unblock'], [35, 'obstruct'], [40, 'obstruct'], [42, 'unblock']]}, ['reopen', 'reopen', 'reopen', 'reopen', 'nudge'])], [('regression: safety edge while nudging', {'events': [[1, 'obstruct'], [2, 'obstruct'], [3, 'obstruct'], [4, 'edge'], [5, 'obstruct']]}, ['reopen', 'reopen', 'nudge', 'reopen', 'ignored']), ('sampled regression 77', {'events': [[5, 'obstruct'], [13, 'obstruct'], [25, 'obstruct'], [33, 'obstruct'], [41, 'obstruct'], [53, 'edge'], [54, 'edge']]}, ['reopen', 'reopen', 'nudge', 'ignored', 'ignored', 'reopen', 'reopen']), ('sampled regression 33', {'events': [[5, 'obstruct'], [17, 'unblock'], [18, 'obstruct'], [20, 'unblock'], [32, 'edge'], [34, 'edge'], [46, 'unblock'], [54, 'obstruct'], [62, 'edge'], [70, 'closed']]}, ['reopen', 'reopen', 'reopen', 'reopen', 'nudge', 'reopen', 'done']), ('boundary: edge contacts do not count', {'events': [[1, 'obstruct'], [2, 'edge'], [3, 'unblock'], [4, 'obstruct'], [5, 'edge']]}, ['reopen', 'reopen', 'reopen', 'reopen']), ('boundary: new cycle after closing', {'events': [[1, 'obstruct'], [2, 'obstruct'], [3, 'closed'], [4, 'obstruct'], [5, 'unblock']]}, ['reopen', 'reopen', 'done', 'reopen']), ('control 12', {'events': [[5, 'obstruct'], [13, 'edge'], [15, 'unblock'], [16, 'obstruct'], [21, 'unblock'], [22, 'edge'], [30, 'closed'], [32, 'obstruct'], [44, 'edge']]}, ['reopen', 'reopen', 'reopen', 'reopen', 'done', 'reopen', 'reopen']), ('sampled regression 15', {'events': [[8, 'obstruct'], [9, 'obstruct'], [10, 'obstruct'], [11, 'unblock'], [16, 'obstruct'], [24, 'obstruct'], [29, 'edge']]}, ['reopen', 'reopen', 'nudge', 'ignored', 'ignored', 'reopen']), ('control 18', {'events': [[12, 'obstruct'], [20, 'obstruct'], [22, 'obstruct']]}, ['reopen', 'reopen', 'nudge'])], [('regression: safety edge while nudging', {'events': [[1, 'obstruct'], [2, 'obstruct'], [3, 'obstruct'], [4, 'edge'], [5, 'obstruct']]}, ['reopen', 'reopen', 'nudge', 'reopen', 'ignored']), ('sampled regression 67', {'events': [[12, 'obstruct'], [20, 'obstruct'], [28, 'edge'], [33, 'obstruct'], [41, 'obstruct'], [53, 'edge'], [65, 'edge'], [67, 'edge'], [75, 'unblock'], [76, 'obstruct']]}, ['reopen', 'reopen', 'reopen', 'nudge', 'ignored', 'reopen', 'reopen', 'reopen', 'ignored']), ('sampled regression 76', {'events': [[2, 'obstruct'], [4, 'obstruct'], [5, 'obstruct'], [13, 'edge'], [15, 'edge'], [20, 'obstruct'], [22, 'obstruct'], [30, 'obstruct'], [42, 'obstruct']]}, ['reopen', 'reopen', 'nudge', 'reopen', 'reopen', 'ignored', 'ignored', 'ignored', 'ignored']), ('boundary: curtain held for twenty seconds', {'events': [[0, 'obstruct'], [20, 'obstruct']]}, ['reopen', 'nudge']), ('boundary: curtain broken then blocked again', {'events': [[0, 'obstruct'], [5, 'unblock'], [15, 'obstruct'], [26, 'obstruct']]}, ['reopen', 'reopen', 'nudge']), ('control 23', {'events': [[1, 'unblock'], [6, 'unblock'], [18, 'obstruct'], [30, 'closed']]}, ['reopen', 'done']), ('control 26', {'events': [[12, 'closed'], [13, 'closed'], [15, 'obstruct'], [17, 'obstruct'], [19, 'obstruct']]}, ['done', 'done', 'reopen', 'reopen', 'nudge']), ('control 29', {'events': [[8, 'edge'], [10, 'obstruct'], [12, 'obstruct'], [20, 'closed']]}, ['reopen', 'reopen', 'reopen', 'done'])], [('regression: safety edge while nudging', {'events': [[1, 'obstruct'], [2, 'obstruct'], [3, 'obstruct'], [4, 'edge'], [5, 'obstruct']]}, ['reopen', 'reopen', 'nudge', 'reopen', 'ignored']), ('sampled regression 15', {'events': [[8, 'obstruct'], [9, 'obstruct'], [10, 'obstruct'], [11, 'unblock'], [16, 'obstruct'], [24, 'obstruct'], [29, 'edge']]}, ['reopen', 'reopen', 'nudge', 'ignored', 'ignored', 'reopen']), ('control 17', {'events': [[5, 'unblock'], [13, 'unblock'], [14, 'closed'], [26, 'obstruct'], [34, 'edge'], [36, 'obstruct'], [48, 'unblock'], [60, 'obstruct'], [72, 'unblock']]}, ['done', 'reopen', 'reopen', 'reopen', 'nudge']), ('boundary: closing clears nudging', {'events': [[0, 'obstruct'], [1, 'obstruct'], [2, 'obstruct'], [3, 'closed'], [4, 'obstruct']]}, ['reopen', 'reopen', 'nudge', 'done', 'reopen']), ('boundary: third obstruction', {'events': [[1, 'obstruct'], [2, 'unblock'], [3, 'obstruct'], [4, 'unblock'], [5, 'obstruct']]}, ['reopen', 'reopen', 'nudge']), ('control 34', {'events': [[8, 'edge'], [16, 'obstruct'], [24, 'obstruct'], [36, 'closed'], [48, 'obstruct'], [60, 'obstruct'], [62, 'obstruct'], [64, 'unblock'], [72, 'obstruct'], [80, 'unblock']]}, ['reopen', 'reopen', 'reopen', 'done', 'reopen', 'reopen', 'nudge', 'ignored']), ('control 37', {'events': [[2, 'closed'], [4, 'closed'], [9, 'obstruct'], [21, 'edge']]}, ['done', 'done', 'reopen', 'reopen']), ('control 40', {'events': [[2, 'closed'], [7, 'obstruct'], [15, 'edge'], [16, 'obstruct'], [18, 'closed']]}, ['done', 'reopen', 'reopen', 'reopen', 'done'])], [('regression: safety edge while nudging', {'events': [[1, 'obstruct'], [2, 'obstruct'], [3, 'obstruct'], [4, 'edge'], [5, 'obstruct']]}, ['reopen', 'reopen', 'nudge', 'reopen', 'ignored']), ('sampled regression 76', {'events': [[2, 'obstruct'], [4, 'obstruct'], [5, 'obstruct'], [13, 'edge'], [15, 'edge'], [20, 'obstruct'], [22, 'obstruct'], [30, 'obstruct'], [42, 'obstruct']]}, ['reopen', 'reopen', 'nudge', 'reopen', 'reopen', 'ignored', 'ignored', 'ignored', 'ignored']), ('sampled regression 67', {'events': [[12, 'obstruct'], [20, 'obstruct'], [28, 'edge'], [33, 'obstruct'], [41, 'obstruct'], [53, 'edge'], [65, 'edge'], [67, 'edge'], [75, 'unblock'], [76, 'obstruct']]}, ['reopen', 'reopen', 'reopen', 'nudge', 'ignored', 'reopen', 'reopen', 'reopen', 'ignored']), ('boundary: edge contacts do not count', {'events': [[1, 'obstruct'], [2, 'edge'], [3, 'unblock'], [4, 'obstruct'], [5, 'edge']]}, ['reopen', 'reopen', 'reopen', 'reopen']), ('boundary: new cycle after closing', {'events': [[1, 'obstruct'], [2, 'obstruct'], [3, 'closed'], [4, 'obstruct'], [5, 'unblock']]}, ['reopen', 'reopen', 'done', 'reopen']), ('control 45', {'events': [[5, 'edge'], [17, 'closed'], [22, 'obstruct'], [24, 'closed']]}, ['reopen', 'done', 'reopen', 'done']), ('control 48', {'events': [[2, 'obstruct'], [7, 'obstruct'], [15, 'obstruct'], [27, 'obstruct'], [35, 'unblock']]}, ['reopen', 'reopen', 'nudge', 'ignored']), ('control 51', {'events': [[8, 'closed'], [9, 'closed'], [14, 'obstruct'], [26, 'closed'], [38, 'obstruct']]}, ['done', 'done', 'reopen', 'done', 'reopen'])]]\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":"56c7896e9a50bebb1e5bd6a1e14e4bcd9cfc8c07545531d29b4fa3000d2005e6","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    count = 0\n    nudge = False\n    block_start = None\n    out = []\n    for t, ev in x['events']:\n        if ev == 'obstruct':\n            if block_start is None:\n                block_start = t\n            if nudge:\n                out.append('ignored')\n            else:\n                count += 1\n                if count >= 3 or t - block_start >= 20:\n                    nudge = True\n                    out.append('nudge')\n                else:\n                    out.append('reopen')\n        elif ev == 'unblock':\n            block_start = None\n        elif ev == 'edge':\n            out.append('ignored' if nudge else 'reopen')\n        elif ev == 'closed':\n            count = 0\n            nudge = False\n            block_start = None\n            out.append('done')\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: safety edge while nudging', {'events': [[1, 'obstruct'], [2, 'obstruct'], [3, 'obstruct'], [4, 'edge'], [5, 'obstruct']]}, ['reopen', 'reopen', 'nudge', 'reopen', 'ignored']), ('sampled regression 22', {'events': [[5, 'closed'], [7, 'obstruct'], [9, 'obstruct'], [14, 'obstruct'], [19, 'edge'], [20, 'edge'], [32, 'unblock']]}, ['done', 'reopen', 'reopen', 'nudge', 'reopen', 'reopen']), ('control 1', {'events': [[8, 'obstruct'], [13, 'closed'], [18, 'obstruct'], [26, 'edge'], [28, 'obstruct'], [29, 'obstruct'], [41, 'obstruct'], [42, 'obstruct'], [54, 'obstruct'], [66, 'closed']]}, ['reopen', 'done', 'reopen', 'reopen', 'reopen', 'nudge', 'ignored', 'ignored', 'ignored', 'done']), ('boundary: third obstruction', {'events': [[1, 'obstruct'], [2, 'unblock'], [3, 'obstruct'], [4, 'unblock'], [5, 'obstruct']]}, ['reopen', 'reopen', 'nudge']), ('boundary: edge contacts do not count', {'events': [[1, 'obstruct'], [2, 'edge'], [3, 'unblock'], [4, 'obstruct'], [5, 'edge']]}, ['reopen', 'reopen', 'reopen', 'reopen']), ('control 4', {'events': [[5, 'edge'], [10, 'unblock'], [11, 'obstruct'], [19, 'closed']]}, ['reopen', 'reopen', 'done']), ('control 7', {'events': [[2, 'unblock'], [10, 'edge'], [18, 'obstruct'], [23, 'unblock'], [28, 'edge'], [33, 'obstruct']]}, ['reopen', 'reopen', 'reopen', 'reopen']), ('control 10', {'events': [[8, 'edge'], [13, 'obstruct'], [18, 'edge'], [30, 'unblock'], [35, 'obstruct'], [40, 'obstruct'], [42, 'unblock']]}, ['reopen', 'reopen', 'reopen', 'reopen', 'nudge'])], [('regression: safety edge while nudging', {'events': [[1, 'obstruct'], [2, 'obstruct'], [3, 'obstruct'], [4, 'edge'], [5, 'obstruct']]}, ['reopen', 'reopen', 'nudge', 'reopen', 'ignored']), ('sampled regression 77', {'events': [[5, 'obstruct'], [13, 'obstruct'], [25, 'obstruct'], [33, 'obstruct'], [41, 'obstruct'], [53, 'edge'], [54, 'edge']]}, ['reopen', 'reopen', 'nudge', 'ignored', 'ignored', 'reopen', 'reopen']), ('sampled regression 33', {'events': [[5, 'obstruct'], [17, 'unblock'], [18, 'obstruct'], [20, 'unblock'], [32, 'edge'], [34, 'edge'], [46, 'unblock'], [54, 'obstruct'], [62, 'edge'], [70, 'closed']]}, ['reopen', 'reopen', 'reopen', 'reopen', 'nudge', 'reopen', 'done']), ('boundary: edge contacts do not count', {'events': [[1, 'obstruct'], [2, 'edge'], [3, 'unblock'], [4, 'obstruct'], [5, 'edge']]}, ['reopen', 'reopen', 'reopen', 'reopen']), ('boundary: new cycle after closing', {'events': [[1, 'obstruct'], [2, 'obstruct'], [3, 'closed'], [4, 'obstruct'], [5, 'unblock']]}, ['reopen', 'reopen', 'done', 'reopen']), ('control 12', {'events': [[5, 'obstruct'], [13, 'edge'], [15, 'unblock'], [16, 'obstruct'], [21, 'unblock'], [22, 'edge'], [30, 'closed'], [32, 'obstruct'], [44, 'edge']]}, ['reopen', 'reopen', 'reopen', 'reopen', 'done', 'reopen', 'reopen']), ('sampled regression 15', {'events': [[8, 'obstruct'], [9, 'obstruct'], [10, 'obstruct'], [11, 'unblock'], [16, 'obstruct'], [24, 'obstruct'], [29, 'edge']]}, ['reopen', 'reopen', 'nudge', 'ignored', 'ignored', 'reopen']), ('control 18', {'events': [[12, 'obstruct'], [20, 'obstruct'], [22, 'obstruct']]}, ['reopen', 'reopen', 'nudge'])], [('regression: safety edge while nudging', {'events': [[1, 'obstruct'], [2, 'obstruct'], [3, 'obstruct'], [4, 'edge'], [5, 'obstruct']]}, ['reopen', 'reopen', 'nudge', 'reopen', 'ignored']), ('sampled regression 67', {'events': [[12, 'obstruct'], [20, 'obstruct'], [28, 'edge'], [33, 'obstruct'], [41, 'obstruct'], [53, 'edge'], [65, 'edge'], [67, 'edge'], [75, 'unblock'], [76, 'obstruct']]}, ['reopen', 'reopen', 'reopen', 'nudge', 'ignored', 'reopen', 'reopen', 'reopen', 'ignored']), ('sampled regression 76', {'events': [[2, 'obstruct'], [4, 'obstruct'], [5, 'obstruct'], [13, 'edge'], [15, 'edge'], [20, 'obstruct'], [22, 'obstruct'], [30, 'obstruct'], [42, 'obstruct']]}, ['reopen', 'reopen', 'nudge', 'reopen', 'reopen', 'ignored', 'ignored', 'ignored', 'ignored']), ('boundary: curtain held for twenty seconds', {'events': [[0, 'obstruct'], [20, 'obstruct']]}, ['reopen', 'nudge']), ('boundary: curtain broken then blocked again', {'events': [[0, 'obstruct'], [5, 'unblock'], [15, 'obstruct'], [26, 'obstruct']]}, ['reopen', 'reopen', 'nudge']), ('control 23', {'events': [[1, 'unblock'], [6, 'unblock'], [18, 'obstruct'], [30, 'closed']]}, ['reopen', 'done']), ('control 26', {'events': [[12, 'closed'], [13, 'closed'], [15, 'obstruct'], [17, 'obstruct'], [19, 'obstruct']]}, ['done', 'done', 'reopen', 'reopen', 'nudge']), ('control 29', {'events': [[8, 'edge'], [10, 'obstruct'], [12, 'obstruct'], [20, 'closed']]}, ['reopen', 'reopen', 'reopen', 'done'])], [('regression: safety edge while nudging', {'events': [[1, 'obstruct'], [2, 'obstruct'], [3, 'obstruct'], [4, 'edge'], [5, 'obstruct']]}, ['reopen', 'reopen', 'nudge', 'reopen', 'ignored']), ('sampled regression 15', {'events': [[8, 'obstruct'], [9, 'obstruct'], [10, 'obstruct'], [11, 'unblock'], [16, 'obstruct'], [24, 'obstruct'], [29, 'edge']]}, ['reopen', 'reopen', 'nudge', 'ignored', 'ignored', 'reopen']), ('control 17', {'events': [[5, 'unblock'], [13, 'unblock'], [14, 'closed'], [26, 'obstruct'], [34, 'edge'], [36, 'obstruct'], [48, 'unblock'], [60, 'obstruct'], [72, 'unblock']]}, ['done', 'reopen', 'reopen', 'reopen', 'nudge']), ('boundary: closing clears nudging', {'events': [[0, 'obstruct'], [1, 'obstruct'], [2, 'obstruct'], [3, 'closed'], [4, 'obstruct']]}, ['reopen', 'reopen', 'nudge', 'done', 'reopen']), ('boundary: third obstruction', {'events': [[1, 'obstruct'], [2, 'unblock'], [3, 'obstruct'], [4, 'unblock'], [5, 'obstruct']]}, ['reopen', 'reopen', 'nudge']), ('control 34', {'events': [[8, 'edge'], [16, 'obstruct'], [24, 'obstruct'], [36, 'closed'], [48, 'obstruct'], [60, 'obstruct'], [62, 'obstruct'], [64, 'unblock'], [72, 'obstruct'], [80, 'unblock']]}, ['reopen', 'reopen', 'reopen', 'done', 'reopen', 'reopen', 'nudge', 'ignored']), ('control 37', {'events': [[2, 'closed'], [4, 'closed'], [9, 'obstruct'], [21, 'edge']]}, ['done', 'done', 'reopen', 'reopen']), ('control 40', {'events': [[2, 'closed'], [7, 'obstruct'], [15, 'edge'], [16, 'obstruct'], [18, 'closed']]}, ['done', 'reopen', 'reopen', 'reopen', 'done'])], [('regression: safety edge while nudging', {'events': [[1, 'obstruct'], [2, 'obstruct'], [3, 'obstruct'], [4, 'edge'], [5, 'obstruct']]}, ['reopen', 'reopen', 'nudge', 'reopen', 'ignored']), ('sampled regression 76', {'events': [[2, 'obstruct'], [4, 'obstruct'], [5, 'obstruct'], [13, 'edge'], [15, 'edge'], [20, 'obstruct'], [22, 'obstruct'], [30, 'obstruct'], [42, 'obstruct']]}, ['reopen', 'reopen', 'nudge', 'reopen', 'reopen', 'ignored', 'ignored', 'ignored', 'ignored']), ('sampled regression 67', {'events': [[12, 'obstruct'], [20, 'obstruct'], [28, 'edge'], [33, 'obstruct'], [41, 'obstruct'], [53, 'edge'], [65, 'edge'], [67, 'edge'], [75, 'unblock'], [76, 'obstruct']]}, ['reopen', 'reopen', 'reopen', 'nudge', 'ignored', 'reopen', 'reopen', 'reopen', 'ignored']), ('boundary: edge contacts do not count', {'events': [[1, 'obstruct'], [2, 'edge'], [3, 'unblock'], [4, 'obstruct'], [5, 'edge']]}, ['reopen', 'reopen', 'reopen', 'reopen']), ('boundary: new cycle after closing', {'events': [[1, 'obstruct'], [2, 'obstruct'], [3, 'closed'], [4, 'obstruct'], [5, 'unblock']]}, ['reopen', 'reopen', 'done', 'reopen']), ('control 45', {'events': [[5, 'edge'], [17, 'closed'], [22, 'obstruct'], [24, 'closed']]}, ['reopen', 'done', 'reopen', 'done']), ('control 48', {'events': [[2, 'obstruct'], [7, 'obstruct'], [15, 'obstruct'], [27, 'obstruct'], [35, 'unblock']]}, ['reopen', 'reopen', 'nudge', 'ignored']), ('control 51', {'events': [[8, 'closed'], [9, 'closed'], [14, 'obstruct'], [26, 'closed'], [38, 'obstruct']]}, ['done', 'done', 'reopen', 'done', 'reopen'])]]\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":"Stipulated toy lift-control contract for a bounded teaching model; it makes no claim of conformance to any lift code or vendor dispatcher and omits real safety cases. 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-elevator_dispatch_scheduling-door-obstruction-nudging-safety-edge-during-nudging","generated_at":"2026-09-29T14:47:54.840532+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Lift group controllers make these decisions many times per minute; a wrong answer strands passengers, wastes trips or overrides a safety rule.","root_cause":"Edge contacts are suppressed together with the light curtain during nudging.","sha256":"11f9e726c2e192e996f7a159397317dd4502987f71ef4a2d2f1bd4a0ee1d0a29","title":"Door obstruction reopen and nudging: safety edge during nudging · 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.428,"exit_code":1,"observations":[{"actual":["reopen","reopen","nudge","reopen","reopen"],"check":"regression: safety edge while nudging","expected":["reopen","reopen","nudge","reopen","ignored"],"passed":false},{"actual":["done","reopen","reopen","nudge","reopen","reopen"],"check":"sampled regression 22","expected":["done","reopen","reopen","nudge","reopen","reopen"],"passed":true},{"actual":["reopen","done","reopen","reopen","reopen","reopen","nudge","ignored","ignored","done"],"check":"control 1","expected":["reopen","done","reopen","reopen","reopen","nudge","ignored","ignored","ignored","done"],"passed":false},{"actual":["reopen","reopen","nudge"],"check":"boundary: third obstruction","expected":["reopen","reopen","nudge"],"passed":true},{"actual":["reopen","reopen","reopen","reopen"],"check":"boundary: edge contacts do not count","expected":["reopen","reopen","reopen","reopen"],"passed":true},{"actual":["reopen","reopen","done"],"check":"control 4","expected":["reopen","reopen","done"],"passed":true},{"actual":["reopen","reopen","reopen","reopen"],"check":"control 7","expected":["reopen","reopen","reopen","reopen"],"passed":true},{"actual":["reopen","reopen","reopen","reopen","reopen"],"check":"control 10","expected":["reopen","reopen","reopen","reopen","nudge"],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: safety edge while nudging\", \"actual\": [\"reopen\", \"reopen\", \"nudge\", \"reopen\", \"reopen\"], \"expected\": [\"reopen\", \"reopen\", \"nudge\", \"reopen\", \"ignored\"], \"passed\": false}, {\"check\": \"sampled regression 22\", \"actual\": [\"done\", \"reopen\", \"reopen\", \"nudge\", \"reopen\", \"reopen\"], \"expected\": [\"done\", \"reopen\", \"reopen\", \"nudge\", \"reopen\", \"reopen\"], \"passed\": true}, {\"check\": \"control 1\", \"actual\": [\"reopen\", \"done\", \"reopen\", \"reopen\", \"reopen\", \"reopen\", \"nudge\", \"ignored\", \"ignored\", \"done\"], \"expected\": [\"reopen\", \"done\", \"reopen\", \"reopen\", \"reopen\", \"nudge\", \"ignored\", \"ignored\", \"ignored\", \"done\"], \"passed\": false}, {\"check\": \"boundary: third obstruction\", \"actual\": [\"reopen\", \"reopen\", \"nudge\"], \"expected\": [\"reopen\", \"reopen\", \"nudge\"], \"passed\": true}, {\"check\": \"boundary: edge contacts do not count\", \"actual\": [\"reopen\", \"reopen\", \"reopen\", \"reopen\"], \"expected\": [\"reopen\", \"reopen\", \"reopen\", \"reopen\"], \"passed\": true}, {\"check\": \"control 4\", \"actual\": [\"reopen\", \"reopen\", \"done\"], \"expected\": [\"reopen\", \"reopen\", \"done\"], \"passed\": true}, {\"check\": \"control 7\", \"actual\": [\"reopen\", \"reopen\", \"reopen\", \"reopen\"], \"expected\": [\"reopen\", \"reopen\", \"reopen\", \"reopen\"], \"passed\": true}, {\"check\": \"control 10\", \"actual\": [\"reopen\", \"reopen\", \"reopen\", \"reopen\", \"reopen\"], \"expected\": [\"reopen\", \"reopen\", \"reopen\", \"reopen\", \"nudge\"], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.809,"exit_code":1,"observations":[{"actual":["reopen","reopen","nudge","ignored","ignored"],"check":"regression: safety edge while nudging","expected":["reopen","reopen","nudge","reopen","ignored"],"passed":false},{"actual":["done","reopen","reopen","nudge","ignored","ignored"],"check":"sampled regression 22","expected":["done","reopen","reopen","nudge","reopen","reopen"],"passed":false},{"actual":["reopen","done","reopen","reopen","reopen","nudge","ignored","ignored","ignored","done"],"check":"control 1","expected":["reopen","done","reopen","reopen","reopen","nudge","ignored","ignored","ignored","done"],"passed":true},{"actual":["reopen","reopen","nudge"],"check":"boundary: third obstruction","expected":["reopen","reopen","nudge"],"passed":true},{"actual":["reopen","reopen","reopen","reopen"],"check":"boundary: edge contacts do not count","expected":["reopen","reopen","reopen","reopen"],"passed":true},{"actual":["reopen","reopen","done"],"check":"control 4","expected":["reopen","reopen","done"],"passed":true},{"actual":["reopen","reopen","reopen","reopen"],"check":"control 7","expected":["reopen","reopen","reopen","reopen"],"passed":true},{"actual":["reopen","reopen","reopen","reopen","nudge"],"check":"control 10","expected":["reopen","reopen","reopen","reopen","nudge"],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: safety edge while nudging\", \"actual\": [\"reopen\", \"reopen\", \"nudge\", \"ignored\", \"ignored\"], \"expected\": [\"reopen\", \"reopen\", \"nudge\", \"reopen\", \"ignored\"], \"passed\": false}, {\"check\": \"sampled regression 22\", \"actual\": [\"done\", \"reopen\", \"reopen\", \"nudge\", \"ignored\", \"ignored\"], \"expected\": [\"done\", \"reopen\", \"reopen\", \"nudge\", \"reopen\", \"reopen\"], \"passed\": false}, {\"check\": \"control 1\", \"actual\": [\"reopen\", \"done\", \"reopen\", \"reopen\", \"reopen\", \"nudge\", \"ignored\", \"ignored\", \"ignored\", \"done\"], \"expected\": [\"reopen\", \"done\", \"reopen\", \"reopen\", \"reopen\", \"nudge\", \"ignored\", \"ignored\", \"ignored\", \"done\"], \"passed\": true}, {\"check\": \"boundary: third obstruction\", \"actual\": [\"reopen\", \"reopen\", \"nudge\"], \"expected\": [\"reopen\", \"reopen\", \"nudge\"], \"passed\": true}, {\"check\": \"boundary: edge contacts do not count\", \"actual\": [\"reopen\", \"reopen\", \"reopen\", \"reopen\"], \"expected\": [\"reopen\", \"reopen\", \"reopen\", \"reopen\"], \"passed\": true}, {\"check\": \"control 4\", \"actual\": [\"reopen\", \"reopen\", \"done\"], \"expected\": [\"reopen\", \"reopen\", \"done\"], \"passed\": true}, {\"check\": \"control 7\", \"actual\": [\"reopen\", \"reopen\", \"reopen\", \"reopen\"], \"expected\": [\"reopen\", \"reopen\", \"reopen\", \"reopen\"], \"passed\": true}, {\"check\": \"control 10\", \"actual\": [\"reopen\", \"reopen\", \"reopen\", \"reopen\", \"nudge\"], \"expected\": [\"reopen\", \"reopen\", \"reopen\", \"reopen\", \"nudge\"], \"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."}}