{"abstract":"Loop detector count and occupancy binning returns a wrong result when vehicles are counted in the bin where they leave.","category":"Traffic signal timing plans","checks":8,"contract":"Input {interval s, bins, events: [[on, off]] seconds relative to period start (on may be negative), max_presence, no_activity}. A vehicle is counted in the bin of its on time if inside the period; occupied time is split across bins by overlap; occupancy percent is floor(occupied*100/interval). Status is 'stuck-on' if any presence lasts >= max_presence, 'no-activity' if there are no events and the period (bins*interval) is >= no_activity, else 'ok'. Return {counts, occ_pct, status}.","contract_signature":"x","evaluation_group":"w2-traffic_signal_timing_plans-detector-bins","failed_approach":"Counting at the midpoint still misplaces vehicles whose presence straddles a boundary.","family":"w2-traffic_signal_timing_plans-detector-bins-count-bin","id":"FA-68231","implementations":{"attempt":{"sha256":"50e9864cd96091ca89e4c4d48116654f610e23f5f178edbe5123f81916c41540","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    I = x['interval']\n    B = x['bins']\n    counts = [0] * B\n    occ = [0] * B\n    status = 'ok'\n    for on, off in sorted(x['events']):\n        b = (on + off) // 2 // I\n        if 0 <= b < B:\n            counts[b] += 1\n        if off - on >= x['max_presence']:\n            status = 'stuck-on'\n        for k in range(B):\n            lo, hi = k * I, (k + 1) * I\n            occ[k] += max(0, min(off, hi) - max(on, lo))\n    if not x['events'] and B * I >= x['no_activity']:\n        status = 'no-activity'\n    return {'counts': counts, 'occ_pct': [o * 100 // I for o in occ], 'status': status}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[({'interval': 60, 'bins': 2, 'events': [], 'max_presence': 180, 'no_activity': 120}, {'counts': [0, 0], 'occ_pct': [0, 0], 'status': 'no-activity'}), ({'interval': 30, 'bins': 2, 'events': [[455, 463], [31, 33], [419, 422], [1, 4], [53, 58], [96, 391], [78, 79], [439, 441]], 'max_presence': 100, 'no_activity': 600}, {'counts': [1, 2], 'occ_pct': [10, 23], 'status': 'stuck-on'}), ({'interval': 120, 'bins': 4, 'events': [[8, 16], [44, 45], [72, 80], [101, 102]], 'max_presence': 240, 'no_activity': 240}, {'counts': [4, 0, 0, 0], 'occ_pct': [15, 0, 0, 0], 'status': 'ok'}), ({'interval': 60, 'bins': 2, 'events': [[-5, 3], [58, 63], [70, 71]], 'max_presence': 180, 'no_activity': 120}, {'counts': [1, 1], 'occ_pct': [8, 6], 'status': 'ok'}), ({'interval': 30, 'bins': 4, 'events': [[-14, -6], [31, 34], [55, 95], [124, 164], [188, 190], [194, 197], [222, 230]], 'max_presence': 100, 'no_activity': 600}, {'counts': [0, 2, 0, 0], 'occ_pct': [0, 26, 100, 16], 'status': 'ok'}), ({'interval': 30, 'bins': 4, 'events': [[0, 180]], 'max_presence': 180, 'no_activity': 60}, {'counts': [1, 0, 0, 0], 'occ_pct': [100, 100, 100, 100], 'status': 'stuck-on'}), ({'interval': 120, 'bins': 3, 'events': [[0, 8], [32, 33], [54, 57], [84, 124], [155, 160], [187, 189]], 'max_presence': 180, 'no_activity': 120}, {'counts': [4, 2, 0], 'occ_pct': [40, 9, 0], 'status': 'ok'}), ({'interval': 60, 'bins': 4, 'events': [[4, 7]], 'max_presence': 100, 'no_activity': 240}, {'counts': [1, 0, 0, 0], 'occ_pct': [5, 0, 0, 0], 'status': 'ok'})], [({'interval': 60, 'bins': 2, 'events': [[-5, 3], [58, 63], [70, 71]], 'max_presence': 180, 'no_activity': 120}, {'counts': [1, 1], 'occ_pct': [8, 6], 'status': 'ok'}), ({'interval': 30, 'bins': 4, 'events': [[0, 180]], 'max_presence': 180, 'no_activity': 60}, {'counts': [1, 0, 0, 0], 'occ_pct': [100, 100, 100, 100], 'status': 'stuck-on'}), ({'interval': 60, 'bins': 2, 'events': [], 'max_presence': 180, 'no_activity': 120}, {'counts': [0, 0], 'occ_pct': [0, 0], 'status': 'no-activity'}), ({'interval': 60, 'bins': 5, 'events': [[-15, -10], [27, 30]], 'max_presence': 180, 'no_activity': 60}, {'counts': [1, 0, 0, 0, 0], 'occ_pct': [5, 0, 0, 0, 0], 'status': 'ok'}), ({'interval': 120, 'bins': 2, 'events': [[-20, -12], [0, 1], [32, 37], [58, 98], [105, 108], [112, 152]], 'max_presence': 180, 'no_activity': 60}, {'counts': [5, 0], 'occ_pct': [47, 26], 'status': 'ok'}), ({'interval': 60, 'bins': 5, 'events': [[58, 59], [86, 89], [34, 36], [8, 13]], 'max_presence': 180, 'no_activity': 240}, {'counts': [3, 1, 0, 0, 0], 'occ_pct': [13, 5, 0, 0, 0], 'status': 'ok'}), ({'interval': 30, 'bins': 3, 'events': [[-5, 0], [590, 593], [346, 555], [38, 235], [305, 306], [644, 652], [273, 274], [629, 631]], 'max_presence': 180, 'no_activity': 120}, {'counts': [0, 1, 0], 'occ_pct': [0, 73, 100], 'status': 'stuck-on'}), ({'interval': 30, 'bins': 2, 'events': [[-9, -8], [31, 36], [72, 74], [88, 91], [93, 94]], 'max_presence': 240, 'no_activity': 240}, {'counts': [0, 1], 'occ_pct': [0, 16], 'status': 'ok'})], [({'interval': 60, 'bins': 4, 'events': [], 'max_presence': 180, 'no_activity': 600}, {'counts': [0, 0, 0, 0], 'occ_pct': [0, 0, 0, 0], 'status': 'ok'}), ({'interval': 60, 'bins': 3, 'events': [[213, 214], [61, 62], [0, 40], [177, 179], [99, 139]], 'max_presence': 100, 'no_activity': 240}, {'counts': [1, 2, 1], 'occ_pct': [66, 36, 35], 'status': 'ok'}), ({'interval': 30, 'bins': 2, 'events': [], 'max_presence': 180, 'no_activity': 600}, {'counts': [0, 0], 'occ_pct': [0, 0], 'status': 'ok'}), ({'interval': 60, 'bins': 2, 'events': [[-5, 3], [58, 63], [70, 71]], 'max_presence': 180, 'no_activity': 120}, {'counts': [1, 1], 'occ_pct': [8, 6], 'status': 'ok'}), ({'interval': 60, 'bins': 2, 'events': [[-4, -3], [28, 68], [96, 97], [116, 121], [153, 155]], 'max_presence': 100, 'no_activity': 60}, {'counts': [1, 2], 'occ_pct': [53, 21], 'status': 'ok'}), ({'interval': 60, 'bins': 2, 'events': [], 'max_presence': 180, 'no_activity': 120}, {'counts': [0, 0], 'occ_pct': [0, 0], 'status': 'no-activity'}), ({'interval': 120, 'bins': 4, 'events': [[-20, -15], [8, 13], [48, 49], [82, 85], [101, 104], [132, 133], [165, 168], [201, 202]], 'max_presence': 240, 'no_activity': 600}, {'counts': [4, 3, 0, 0], 'occ_pct': [10, 4, 0, 0], 'status': 'ok'}), ({'interval': 30, 'bins': 4, 'events': [[0, 180]], 'max_presence': 180, 'no_activity': 60}, {'counts': [1, 0, 0, 0], 'occ_pct': [100, 100, 100, 100], 'status': 'stuck-on'})], [({'interval': 30, 'bins': 4, 'events': [[2, 42], [52, 57], [92, 93], [106, 107], [127, 231], [259, 299]], 'max_presence': 100, 'no_activity': 240}, {'counts': [1, 1, 0, 2], 'occ_pct': [93, 56, 0, 6], 'status': 'stuck-on'}), ({'interval': 120, 'bins': 4, 'events': [[-10, -7], [12, 14], [51, 59], [61, 101], [134, 137]], 'max_presence': 180, 'no_activity': 60}, {'counts': [3, 1, 0, 0], 'occ_pct': [41, 2, 0, 0], 'status': 'ok'}), ({'interval': 60, 'bins': 2, 'events': [[-5, 3], [58, 63], [70, 71]], 'max_presence': 180, 'no_activity': 120}, {'counts': [1, 1], 'occ_pct': [8, 6], 'status': 'ok'}), ({'interval': 60, 'bins': 5, 'events': [], 'max_presence': 240, 'no_activity': 240}, {'counts': [0, 0, 0, 0, 0], 'occ_pct': [0, 0, 0, 0, 0], 'status': 'no-activity'}), ({'interval': 30, 'bins': 3, 'events': [[-3, 301], [324, 332], [344, 346]], 'max_presence': 180, 'no_activity': 120}, {'counts': [0, 0, 0], 'occ_pct': [100, 100, 100], 'status': 'stuck-on'}), ({'interval': 30, 'bins': 4, 'events': [[0, 180]], 'max_presence': 180, 'no_activity': 60}, {'counts': [1, 0, 0, 0], 'occ_pct': [100, 100, 100, 100], 'status': 'stuck-on'}), ({'interval': 60, 'bins': 2, 'events': [], 'max_presence': 180, 'no_activity': 120}, {'counts': [0, 0], 'occ_pct': [0, 0], 'status': 'no-activity'}), ({'interval': 60, 'bins': 2, 'events': [[1, 2], [17, 25], [60, 65], [67, 69], [86, 87]], 'max_presence': 100, 'no_activity': 60}, {'counts': [2, 3], 'occ_pct': [15, 13], 'status': 'ok'})], [({'interval': 60, 'bins': 4, 'events': [[-11, -6], [17, 20], [27, 67]], 'max_presence': 100, 'no_activity': 600}, {'counts': [2, 0, 0, 0], 'occ_pct': [60, 11, 0, 0], 'status': 'ok'}), ({'interval': 60, 'bins': 2, 'events': [], 'max_presence': 180, 'no_activity': 120}, {'counts': [0, 0], 'occ_pct': [0, 0], 'status': 'no-activity'}), ({'interval': 60, 'bins': 2, 'events': [[-5, 3], [58, 63], [70, 71]], 'max_presence': 180, 'no_activity': 120}, {'counts': [1, 1], 'occ_pct': [8, 6], 'status': 'ok'}), ({'interval': 60, 'bins': 5, 'events': [], 'max_presence': 100, 'no_activity': 120}, {'counts': [0, 0, 0, 0, 0], 'occ_pct': [0, 0, 0, 0, 0], 'status': 'no-activity'}), ({'interval': 60, 'bins': 4, 'events': [[-8, 0], [31, 71], [93, 94]], 'max_presence': 180, 'no_activity': 60}, {'counts': [1, 1, 0, 0], 'occ_pct': [48, 20, 0, 0], 'status': 'ok'}), ({'interval': 30, 'bins': 3, 'events': [[10, 13], [49, 54], [90, 98]], 'max_presence': 180, 'no_activity': 600}, {'counts': [1, 1, 0], 'occ_pct': [10, 16, 0], 'status': 'ok'}), ({'interval': 30, 'bins': 4, 'events': [[0, 180]], 'max_presence': 180, 'no_activity': 60}, {'counts': [1, 0, 0, 0], 'occ_pct': [100, 100, 100, 100], 'status': 'stuck-on'}), ({'interval': 120, 'bins': 4, 'events': [[9, 17], [26, 31], [46, 51], [88, 93], [109, 114]], 'max_presence': 240, 'no_activity': 600}, {'counts': [5, 0, 0, 0], 'occ_pct': [23, 0, 0, 0], 'status': 'ok'})]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check('timing oracle' + ' %d' % i, 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":"1d92b7a1ecfa1bad820100ada8c82661379ef4b94050c2d4cdffedf9176d9d94","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    I = x['interval']\n    B = x['bins']\n    counts = [0] * B\n    occ = [0] * B\n    status = 'ok'\n    for on, off in sorted(x['events']):\n        b = off // I\n        if 0 <= b < B:\n            counts[b] += 1\n        if off - on >= x['max_presence']:\n            status = 'stuck-on'\n        for k in range(B):\n            lo, hi = k * I, (k + 1) * I\n            occ[k] += max(0, min(off, hi) - max(on, lo))\n    if not x['events'] and B * I >= x['no_activity']:\n        status = 'no-activity'\n    return {'counts': counts, 'occ_pct': [o * 100 // I for o in occ], 'status': status}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[({'interval': 60, 'bins': 2, 'events': [], 'max_presence': 180, 'no_activity': 120}, {'counts': [0, 0], 'occ_pct': [0, 0], 'status': 'no-activity'}), ({'interval': 30, 'bins': 2, 'events': [[455, 463], [31, 33], [419, 422], [1, 4], [53, 58], [96, 391], [78, 79], [439, 441]], 'max_presence': 100, 'no_activity': 600}, {'counts': [1, 2], 'occ_pct': [10, 23], 'status': 'stuck-on'}), ({'interval': 120, 'bins': 4, 'events': [[8, 16], [44, 45], [72, 80], [101, 102]], 'max_presence': 240, 'no_activity': 240}, {'counts': [4, 0, 0, 0], 'occ_pct': [15, 0, 0, 0], 'status': 'ok'}), ({'interval': 60, 'bins': 2, 'events': [[-5, 3], [58, 63], [70, 71]], 'max_presence': 180, 'no_activity': 120}, {'counts': [1, 1], 'occ_pct': [8, 6], 'status': 'ok'}), ({'interval': 30, 'bins': 4, 'events': [[-14, -6], [31, 34], [55, 95], [124, 164], [188, 190], [194, 197], [222, 230]], 'max_presence': 100, 'no_activity': 600}, {'counts': [0, 2, 0, 0], 'occ_pct': [0, 26, 100, 16], 'status': 'ok'}), ({'interval': 30, 'bins': 4, 'events': [[0, 180]], 'max_presence': 180, 'no_activity': 60}, {'counts': [1, 0, 0, 0], 'occ_pct': [100, 100, 100, 100], 'status': 'stuck-on'}), ({'interval': 120, 'bins': 3, 'events': [[0, 8], [32, 33], [54, 57], [84, 124], [155, 160], [187, 189]], 'max_presence': 180, 'no_activity': 120}, {'counts': [4, 2, 0], 'occ_pct': [40, 9, 0], 'status': 'ok'}), ({'interval': 60, 'bins': 4, 'events': [[4, 7]], 'max_presence': 100, 'no_activity': 240}, {'counts': [1, 0, 0, 0], 'occ_pct': [5, 0, 0, 0], 'status': 'ok'})], [({'interval': 60, 'bins': 2, 'events': [[-5, 3], [58, 63], [70, 71]], 'max_presence': 180, 'no_activity': 120}, {'counts': [1, 1], 'occ_pct': [8, 6], 'status': 'ok'}), ({'interval': 30, 'bins': 4, 'events': [[0, 180]], 'max_presence': 180, 'no_activity': 60}, {'counts': [1, 0, 0, 0], 'occ_pct': [100, 100, 100, 100], 'status': 'stuck-on'}), ({'interval': 60, 'bins': 2, 'events': [], 'max_presence': 180, 'no_activity': 120}, {'counts': [0, 0], 'occ_pct': [0, 0], 'status': 'no-activity'}), ({'interval': 60, 'bins': 5, 'events': [[-15, -10], [27, 30]], 'max_presence': 180, 'no_activity': 60}, {'counts': [1, 0, 0, 0, 0], 'occ_pct': [5, 0, 0, 0, 0], 'status': 'ok'}), ({'interval': 120, 'bins': 2, 'events': [[-20, -12], [0, 1], [32, 37], [58, 98], [105, 108], [112, 152]], 'max_presence': 180, 'no_activity': 60}, {'counts': [5, 0], 'occ_pct': [47, 26], 'status': 'ok'}), ({'interval': 60, 'bins': 5, 'events': [[58, 59], [86, 89], [34, 36], [8, 13]], 'max_presence': 180, 'no_activity': 240}, {'counts': [3, 1, 0, 0, 0], 'occ_pct': [13, 5, 0, 0, 0], 'status': 'ok'}), ({'interval': 30, 'bins': 3, 'events': [[-5, 0], [590, 593], [346, 555], [38, 235], [305, 306], [644, 652], [273, 274], [629, 631]], 'max_presence': 180, 'no_activity': 120}, {'counts': [0, 1, 0], 'occ_pct': [0, 73, 100], 'status': 'stuck-on'}), ({'interval': 30, 'bins': 2, 'events': [[-9, -8], [31, 36], [72, 74], [88, 91], [93, 94]], 'max_presence': 240, 'no_activity': 240}, {'counts': [0, 1], 'occ_pct': [0, 16], 'status': 'ok'})], [({'interval': 60, 'bins': 4, 'events': [], 'max_presence': 180, 'no_activity': 600}, {'counts': [0, 0, 0, 0], 'occ_pct': [0, 0, 0, 0], 'status': 'ok'}), ({'interval': 60, 'bins': 3, 'events': [[213, 214], [61, 62], [0, 40], [177, 179], [99, 139]], 'max_presence': 100, 'no_activity': 240}, {'counts': [1, 2, 1], 'occ_pct': [66, 36, 35], 'status': 'ok'}), ({'interval': 30, 'bins': 2, 'events': [], 'max_presence': 180, 'no_activity': 600}, {'counts': [0, 0], 'occ_pct': [0, 0], 'status': 'ok'}), ({'interval': 60, 'bins': 2, 'events': [[-5, 3], [58, 63], [70, 71]], 'max_presence': 180, 'no_activity': 120}, {'counts': [1, 1], 'occ_pct': [8, 6], 'status': 'ok'}), ({'interval': 60, 'bins': 2, 'events': [[-4, -3], [28, 68], [96, 97], [116, 121], [153, 155]], 'max_presence': 100, 'no_activity': 60}, {'counts': [1, 2], 'occ_pct': [53, 21], 'status': 'ok'}), ({'interval': 60, 'bins': 2, 'events': [], 'max_presence': 180, 'no_activity': 120}, {'counts': [0, 0], 'occ_pct': [0, 0], 'status': 'no-activity'}), ({'interval': 120, 'bins': 4, 'events': [[-20, -15], [8, 13], [48, 49], [82, 85], [101, 104], [132, 133], [165, 168], [201, 202]], 'max_presence': 240, 'no_activity': 600}, {'counts': [4, 3, 0, 0], 'occ_pct': [10, 4, 0, 0], 'status': 'ok'}), ({'interval': 30, 'bins': 4, 'events': [[0, 180]], 'max_presence': 180, 'no_activity': 60}, {'counts': [1, 0, 0, 0], 'occ_pct': [100, 100, 100, 100], 'status': 'stuck-on'})], [({'interval': 30, 'bins': 4, 'events': [[2, 42], [52, 57], [92, 93], [106, 107], [127, 231], [259, 299]], 'max_presence': 100, 'no_activity': 240}, {'counts': [1, 1, 0, 2], 'occ_pct': [93, 56, 0, 6], 'status': 'stuck-on'}), ({'interval': 120, 'bins': 4, 'events': [[-10, -7], [12, 14], [51, 59], [61, 101], [134, 137]], 'max_presence': 180, 'no_activity': 60}, {'counts': [3, 1, 0, 0], 'occ_pct': [41, 2, 0, 0], 'status': 'ok'}), ({'interval': 60, 'bins': 2, 'events': [[-5, 3], [58, 63], [70, 71]], 'max_presence': 180, 'no_activity': 120}, {'counts': [1, 1], 'occ_pct': [8, 6], 'status': 'ok'}), ({'interval': 60, 'bins': 5, 'events': [], 'max_presence': 240, 'no_activity': 240}, {'counts': [0, 0, 0, 0, 0], 'occ_pct': [0, 0, 0, 0, 0], 'status': 'no-activity'}), ({'interval': 30, 'bins': 3, 'events': [[-3, 301], [324, 332], [344, 346]], 'max_presence': 180, 'no_activity': 120}, {'counts': [0, 0, 0], 'occ_pct': [100, 100, 100], 'status': 'stuck-on'}), ({'interval': 30, 'bins': 4, 'events': [[0, 180]], 'max_presence': 180, 'no_activity': 60}, {'counts': [1, 0, 0, 0], 'occ_pct': [100, 100, 100, 100], 'status': 'stuck-on'}), ({'interval': 60, 'bins': 2, 'events': [], 'max_presence': 180, 'no_activity': 120}, {'counts': [0, 0], 'occ_pct': [0, 0], 'status': 'no-activity'}), ({'interval': 60, 'bins': 2, 'events': [[1, 2], [17, 25], [60, 65], [67, 69], [86, 87]], 'max_presence': 100, 'no_activity': 60}, {'counts': [2, 3], 'occ_pct': [15, 13], 'status': 'ok'})], [({'interval': 60, 'bins': 4, 'events': [[-11, -6], [17, 20], [27, 67]], 'max_presence': 100, 'no_activity': 600}, {'counts': [2, 0, 0, 0], 'occ_pct': [60, 11, 0, 0], 'status': 'ok'}), ({'interval': 60, 'bins': 2, 'events': [], 'max_presence': 180, 'no_activity': 120}, {'counts': [0, 0], 'occ_pct': [0, 0], 'status': 'no-activity'}), ({'interval': 60, 'bins': 2, 'events': [[-5, 3], [58, 63], [70, 71]], 'max_presence': 180, 'no_activity': 120}, {'counts': [1, 1], 'occ_pct': [8, 6], 'status': 'ok'}), ({'interval': 60, 'bins': 5, 'events': [], 'max_presence': 100, 'no_activity': 120}, {'counts': [0, 0, 0, 0, 0], 'occ_pct': [0, 0, 0, 0, 0], 'status': 'no-activity'}), ({'interval': 60, 'bins': 4, 'events': [[-8, 0], [31, 71], [93, 94]], 'max_presence': 180, 'no_activity': 60}, {'counts': [1, 1, 0, 0], 'occ_pct': [48, 20, 0, 0], 'status': 'ok'}), ({'interval': 30, 'bins': 3, 'events': [[10, 13], [49, 54], [90, 98]], 'max_presence': 180, 'no_activity': 600}, {'counts': [1, 1, 0], 'occ_pct': [10, 16, 0], 'status': 'ok'}), ({'interval': 30, 'bins': 4, 'events': [[0, 180]], 'max_presence': 180, 'no_activity': 60}, {'counts': [1, 0, 0, 0], 'occ_pct': [100, 100, 100, 100], 'status': 'stuck-on'}), ({'interval': 120, 'bins': 4, 'events': [[9, 17], [26, 31], [46, 51], [88, 93], [109, 114]], 'max_presence': 240, 'no_activity': 600}, {'counts': [5, 0, 0, 0], 'occ_pct': [23, 0, 0, 0], 'status': 'ok'})]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check('timing oracle' + ' %d' % i, 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, bounded toy model with a stipulated contract; it makes no claim of conformance to any agency manual or standard. 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-traffic_signal_timing_plans-detector-bins-count-bin","generated_at":"2026-09-29T14:48:00.282689+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Signal timing arithmetic is exact and integer or rational; a wrong rule silently produces unsafe or inefficient timing plans.","root_cause":"Counting at the off time moves vehicles that straddle a bin boundary into the next bin.","sha256":"df87df620711f58a53df182a012d037ca96db4e084a96e94e2e9bdfbad5e018f","title":"Loop detector count and occupancy binning: vehicles are counted in the bin where they leave · 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":42.148,"exit_code":1,"observations":[{"actual":{"counts":[0,0],"occ_pct":[0,0],"status":"no-activity"},"check":"timing oracle 0","expected":{"counts":[0,0],"occ_pct":[0,0],"status":"no-activity"},"passed":true},{"actual":{"counts":[1,2],"occ_pct":[10,23],"status":"stuck-on"},"check":"timing oracle 1","expected":{"counts":[1,2],"occ_pct":[10,23],"status":"stuck-on"},"passed":true},{"actual":{"counts":[4,0,0,0],"occ_pct":[15,0,0,0],"status":"ok"},"check":"timing oracle 2","expected":{"counts":[4,0,0,0],"occ_pct":[15,0,0,0],"status":"ok"},"passed":true},{"actual":{"counts":[0,2],"occ_pct":[8,6],"status":"ok"},"check":"timing oracle 3","expected":{"counts":[1,1],"occ_pct":[8,6],"status":"ok"},"passed":false},{"actual":{"counts":[0,1,1,0],"occ_pct":[0,26,100,16],"status":"ok"},"check":"timing oracle 4","expected":{"counts":[0,2,0,0],"occ_pct":[0,26,100,16],"status":"ok"},"passed":false},{"actual":{"counts":[0,0,0,1],"occ_pct":[100,100,100,100],"status":"stuck-on"},"check":"timing oracle 5","expected":{"counts":[1,0,0,0],"occ_pct":[100,100,100,100],"status":"stuck-on"},"passed":false},{"actual":{"counts":[4,2,0],"occ_pct":[40,9,0],"status":"ok"},"check":"timing oracle 6","expected":{"counts":[4,2,0],"occ_pct":[40,9,0],"status":"ok"},"passed":true},{"actual":{"counts":[1,0,0,0],"occ_pct":[5,0,0,0],"status":"ok"},"check":"timing oracle 7","expected":{"counts":[1,0,0,0],"occ_pct":[5,0,0,0],"status":"ok"},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"timing oracle 0\", \"actual\": {\"counts\": [0, 0], \"occ_pct\": [0, 0], \"status\": \"no-activity\"}, \"expected\": {\"counts\": [0, 0], \"occ_pct\": [0, 0], \"status\": \"no-activity\"}, \"passed\": true}, {\"check\": \"timing oracle 1\", \"actual\": {\"counts\": [1, 2], \"occ_pct\": [10, 23], \"status\": \"stuck-on\"}, \"expected\": {\"counts\": [1, 2], \"occ_pct\": [10, 23], \"status\": \"stuck-on\"}, \"passed\": true}, {\"check\": \"timing oracle 2\", \"actual\": {\"counts\": [4, 0, 0, 0], \"occ_pct\": [15, 0, 0, 0], \"status\": \"ok\"}, \"expected\": {\"counts\": [4, 0, 0, 0], \"occ_pct\": [15, 0, 0, 0], \"status\": \"ok\"}, \"passed\": true}, {\"check\": \"timing oracle 3\", \"actual\": {\"counts\": [0, 2], \"occ_pct\": [8, 6], \"status\": \"ok\"}, \"expected\": {\"counts\": [1, 1], \"occ_pct\": [8, 6], \"status\": \"ok\"}, \"passed\": false}, {\"check\": \"timing oracle 4\", \"actual\": {\"counts\": [0, 1, 1, 0], \"occ_pct\": [0, 26, 100, 16], \"status\": \"ok\"}, \"expected\": {\"counts\": [0, 2, 0, 0], \"occ_pct\": [0, 26, 100, 16], \"status\": \"ok\"}, \"passed\": false}, {\"check\": \"timing oracle 5\", \"actual\": {\"counts\": [0, 0, 0, 1], \"occ_pct\": [100, 100, 100, 100], \"status\": \"stuck-on\"}, \"expected\": {\"counts\": [1, 0, 0, 0], \"occ_pct\": [100, 100, 100, 100], \"status\": \"stuck-on\"}, \"passed\": false}, {\"check\": \"timing oracle 6\", \"actual\": {\"counts\": [4, 2, 0], \"occ_pct\": [40, 9, 0], \"status\": \"ok\"}, \"expected\": {\"counts\": [4, 2, 0], \"occ_pct\": [40, 9, 0], \"status\": \"ok\"}, \"passed\": true}, {\"check\": \"timing oracle 7\", \"actual\": {\"counts\": [1, 0, 0, 0], \"occ_pct\": [5, 0, 0, 0], \"status\": \"ok\"}, \"expected\": {\"counts\": [1, 0, 0, 0], \"occ_pct\": [5, 0, 0, 0], \"status\": \"ok\"}, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":42.335,"exit_code":1,"observations":[{"actual":{"counts":[0,0],"occ_pct":[0,0],"status":"no-activity"},"check":"timing oracle 0","expected":{"counts":[0,0],"occ_pct":[0,0],"status":"no-activity"},"passed":true},{"actual":{"counts":[1,2],"occ_pct":[10,23],"status":"stuck-on"},"check":"timing oracle 1","expected":{"counts":[1,2],"occ_pct":[10,23],"status":"stuck-on"},"passed":true},{"actual":{"counts":[4,0,0,0],"occ_pct":[15,0,0,0],"status":"ok"},"check":"timing oracle 2","expected":{"counts":[4,0,0,0],"occ_pct":[15,0,0,0],"status":"ok"},"passed":true},{"actual":{"counts":[1,2],"occ_pct":[8,6],"status":"ok"},"check":"timing oracle 3","expected":{"counts":[1,1],"occ_pct":[8,6],"status":"ok"},"passed":false},{"actual":{"counts":[0,1,0,1],"occ_pct":[0,26,100,16],"status":"ok"},"check":"timing oracle 4","expected":{"counts":[0,2,0,0],"occ_pct":[0,26,100,16],"status":"ok"},"passed":false},{"actual":{"counts":[0,0,0,0],"occ_pct":[100,100,100,100],"status":"stuck-on"},"check":"timing oracle 5","expected":{"counts":[1,0,0,0],"occ_pct":[100,100,100,100],"status":"stuck-on"},"passed":false},{"actual":{"counts":[3,3,0],"occ_pct":[40,9,0],"status":"ok"},"check":"timing oracle 6","expected":{"counts":[4,2,0],"occ_pct":[40,9,0],"status":"ok"},"passed":false},{"actual":{"counts":[1,0,0,0],"occ_pct":[5,0,0,0],"status":"ok"},"check":"timing oracle 7","expected":{"counts":[1,0,0,0],"occ_pct":[5,0,0,0],"status":"ok"},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"timing oracle 0\", \"actual\": {\"counts\": [0, 0], \"occ_pct\": [0, 0], \"status\": \"no-activity\"}, \"expected\": {\"counts\": [0, 0], \"occ_pct\": [0, 0], \"status\": \"no-activity\"}, \"passed\": true}, {\"check\": \"timing oracle 1\", \"actual\": {\"counts\": [1, 2], \"occ_pct\": [10, 23], \"status\": \"stuck-on\"}, \"expected\": {\"counts\": [1, 2], \"occ_pct\": [10, 23], \"status\": \"stuck-on\"}, \"passed\": true}, {\"check\": \"timing oracle 2\", \"actual\": {\"counts\": [4, 0, 0, 0], \"occ_pct\": [15, 0, 0, 0], \"status\": \"ok\"}, \"expected\": {\"counts\": [4, 0, 0, 0], \"occ_pct\": [15, 0, 0, 0], \"status\": \"ok\"}, \"passed\": true}, {\"check\": \"timing oracle 3\", \"actual\": {\"counts\": [1, 2], \"occ_pct\": [8, 6], \"status\": \"ok\"}, \"expected\": {\"counts\": [1, 1], \"occ_pct\": [8, 6], \"status\": \"ok\"}, \"passed\": false}, {\"check\": \"timing oracle 4\", \"actual\": {\"counts\": [0, 1, 0, 1], \"occ_pct\": [0, 26, 100, 16], \"status\": \"ok\"}, \"expected\": {\"counts\": [0, 2, 0, 0], \"occ_pct\": [0, 26, 100, 16], \"status\": \"ok\"}, \"passed\": false}, {\"check\": \"timing oracle 5\", \"actual\": {\"counts\": [0, 0, 0, 0], \"occ_pct\": [100, 100, 100, 100], \"status\": \"stuck-on\"}, \"expected\": {\"counts\": [1, 0, 0, 0], \"occ_pct\": [100, 100, 100, 100], \"status\": \"stuck-on\"}, \"passed\": false}, {\"check\": \"timing oracle 6\", \"actual\": {\"counts\": [3, 3, 0], \"occ_pct\": [40, 9, 0], \"status\": \"ok\"}, \"expected\": {\"counts\": [4, 2, 0], \"occ_pct\": [40, 9, 0], \"status\": \"ok\"}, \"passed\": false}, {\"check\": \"timing oracle 7\", \"actual\": {\"counts\": [1, 0, 0, 0], \"occ_pct\": [5, 0, 0, 0], \"status\": \"ok\"}, \"expected\": {\"counts\": [1, 0, 0, 0], \"occ_pct\": [5, 0, 0, 0], \"status\": \"ok\"}, \"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."}}