{"abstract":"Levels contain fewer encounters than designed.","category":"Procedural level generation constraints","checks":8,"contract":"Proposed positions are deduplicated and taken ascending. A position is legal when 1 <= pos <= length-2, is not a rest checkpoint (pos % rest_every == 0 when rest_every > 0), and lies at least min_gap after the anchor: the later of the last accepted encounter (initially the start, 0) and the last checkpoint at or before pos. Returns accepted positions.","contract_signature":"length, encounters, min_gap, rest_every","evaluation_group":"w2-procedural-level-generation-constraints-encounter-pacing","failed_approach":"Measuring from the last encounter ignores checkpoints.","family":"w2-procedural-level-generation-constraints-encounter-pacing-gap-measure","id":"FA-86781","implementations":{"attempt":{"sha256":"c07266f3a497df9fea3cb34bda4cee3af1d9048ba7e8b9718f424f893bf5b5ca","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(length, encounters, min_gap, rest_every):\n    out = []\n    last = 0\n    for pos in sorted(set(encounters)):\n        if pos < 1 or pos > length - 2:\n            continue\n        if rest_every and pos % rest_every == 0:\n            continue\n        anchor = last\n        if rest_every:\n            anchor = max(anchor, pos // rest_every * rest_every)\n        if pos - last < min_gap:\n            continue\n        out.append(pos)\n        last = pos\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = [[('checkpoint resets gap #1', [20, [2, 6, 7], 2, 5], [2, 7]),\n  ('fault site gap measure #1', [14, [4, 9, 16, 9, 16, 7, 8, 16, 0, 13], 1, 5], [4, 7, 8, 9]),\n  ('fault site gap measure #2', [40, [3, 4], 3, 0], [3]),\n  ('partial repair boundary #1', [21, [-2, 16], 2, 5], []),\n  ('partial repair boundary #2', [34, [-1, 30, 25, 20, 1, 11, 0], 5, 4], []),\n  ('duplicate proposals #1', [10, [3, 3, 4], 0, 0], [3, 4]),\n  ('last legal tile #1', [10, [8, 9], 1, 0], [8]),\n  ('control #1', [27, [20, 6, 10, 15, 26, -2, 12, 27, -1], 0, 0], [6, 10, 12, 15, 20])],\n [('checkpoint resets gap #1', [20, [2, 6, 7], 2, 5], [2, 7]),\n  ('fault site gap measure #1', [40, [3, 4], 3, 0], [3]),\n  ('fault site gap measure #2', [39, [34, 15, 35, 19, 4], 2, 4], [15, 19, 34]),\n  ('partial repair boundary #1', [34, [-1, 30, 25, 20, 1, 11, 0], 5, 4], []),\n  ('regression gap measure #1', [29, [13, 16], 3, 5], [13]),\n  ('duplicate proposals #1', [10, [3, 3, 4], 0, 0], [3, 4]),\n  ('last legal tile #1', [10, [8, 9], 1, 0], [8]),\n  ('control #1', [27, [20, 6, 10, 15, 26, -2, 12, 27, -1], 0, 0], [6, 10, 12, 15, 20])],\n [('checkpoint resets gap #1', [20, [2, 6, 7], 2, 5], [2, 7]),\n  ('fault site gap measure #1', [10, [1, 3, 6, 0, 12, 9, 7, -1], 3, 0], [3, 6]),\n  ('regression gap measure #1', [29, [13, 16], 3, 5], [13]),\n  ('regression gap measure #2', [22, [17, 15, -1, 24, 7, 1, -2, 18, 2], 2, 7], [2, 17]),\n  ('partial repair boundary #1', [14, [11, 0, 11, 6, 13, 15, 15, 3], 5, 7], [6]),\n  ('duplicate proposals #1', [10, [3, 3, 4], 0, 0], [3, 4]),\n  ('last legal tile #1', [10, [8, 9], 1, 0], [8]),\n  ('control #1', [27, [20, 6, 10, 15, 26, -2, 12, 27, -1], 0, 0], [6, 10, 12, 15, 20])],\n [('checkpoint resets gap #1', [20, [2, 6, 7], 2, 5], [2, 7]),\n  ('regression gap measure #1', [22, [17, 15, -1, 24, 7, 1, -2, 18, 2], 2, 7], [2, 17]),\n  ('fault site gap measure #1', [38, [26, 15, -2, 19, 22, -1, 7, 23], 1, 0], [7, 15, 19, 22, 23, 26]),\n  ('regression gap measure #2', [13, [4, 11, 8, 5], 5, 7], [5]),\n  ('regression gap measure #3', [30, [32, 12, 17, 27, 6, 20], 3, 4], [27]),\n  ('duplicate proposals #1', [10, [3, 3, 4], 0, 0], [3, 4]),\n  ('last legal tile #1', [10, [8, 9], 1, 0], [8]),\n  ('control #1', [40, [41, 39, 8, 9, 9, 32, 18, 41], 5, 0], [8, 18, 32])],\n [('checkpoint resets gap #1', [20, [2, 6, 7], 2, 5], [2, 7]),\n  ('fault site gap measure #1', [29, [18, 24, 20, 17, 15], 2, 0], [15, 17, 20, 24]),\n  ('fault site gap measure #2', [27, [24], 3, 7], [24]),\n  ('partial repair boundary #1', [37, [38, 25, 36, 9, 26, 10, 25, 2, 27, -2], 3, 5], [9]),\n  ('regression gap measure #1', [33, [17, 5, -1], 5, 7], [5]),\n  ('duplicate proposals #1', [10, [3, 3, 4], 0, 0], [3, 4]),\n  ('last legal tile #1', [10, [8, 9], 1, 0], [8]),\n  ('control #1', [37, [27, 33, 11, 14, 7], 0, 7], [11, 27, 33])]]\nfor label, args, expected in cases[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":"0cc8d942360913ca4ce961a7f99f26838a9c0a96e130fbd6b5aa1866713864c6","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(length, encounters, min_gap, rest_every):\n    out = []\n    last = 0\n    for pos in sorted(set(encounters)):\n        if pos < 1 or pos > length - 2:\n            continue\n        if rest_every and pos % rest_every == 0:\n            continue\n        anchor = last\n        if rest_every:\n            anchor = max(anchor, pos // rest_every * rest_every)\n        if pos - anchor <= min_gap:\n            continue\n        out.append(pos)\n        last = pos\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = [[('checkpoint resets gap #1', [20, [2, 6, 7], 2, 5], [2, 7]),\n  ('fault site gap measure #1', [14, [4, 9, 16, 9, 16, 7, 8, 16, 0, 13], 1, 5], [4, 7, 8, 9]),\n  ('fault site gap measure #2', [40, [3, 4], 3, 0], [3]),\n  ('partial repair boundary #1', [21, [-2, 16], 2, 5], []),\n  ('partial repair boundary #2', [34, [-1, 30, 25, 20, 1, 11, 0], 5, 4], []),\n  ('duplicate proposals #1', [10, [3, 3, 4], 0, 0], [3, 4]),\n  ('last legal tile #1', [10, [8, 9], 1, 0], [8]),\n  ('control #1', [27, [20, 6, 10, 15, 26, -2, 12, 27, -1], 0, 0], [6, 10, 12, 15, 20])],\n [('checkpoint resets gap #1', [20, [2, 6, 7], 2, 5], [2, 7]),\n  ('fault site gap measure #1', [40, [3, 4], 3, 0], [3]),\n  ('fault site gap measure #2', [39, [34, 15, 35, 19, 4], 2, 4], [15, 19, 34]),\n  ('partial repair boundary #1', [34, [-1, 30, 25, 20, 1, 11, 0], 5, 4], []),\n  ('regression gap measure #1', [29, [13, 16], 3, 5], [13]),\n  ('duplicate proposals #1', [10, [3, 3, 4], 0, 0], [3, 4]),\n  ('last legal tile #1', [10, [8, 9], 1, 0], [8]),\n  ('control #1', [27, [20, 6, 10, 15, 26, -2, 12, 27, -1], 0, 0], [6, 10, 12, 15, 20])],\n [('checkpoint resets gap #1', [20, [2, 6, 7], 2, 5], [2, 7]),\n  ('fault site gap measure #1', [10, [1, 3, 6, 0, 12, 9, 7, -1], 3, 0], [3, 6]),\n  ('regression gap measure #1', [29, [13, 16], 3, 5], [13]),\n  ('regression gap measure #2', [22, [17, 15, -1, 24, 7, 1, -2, 18, 2], 2, 7], [2, 17]),\n  ('partial repair boundary #1', [14, [11, 0, 11, 6, 13, 15, 15, 3], 5, 7], [6]),\n  ('duplicate proposals #1', [10, [3, 3, 4], 0, 0], [3, 4]),\n  ('last legal tile #1', [10, [8, 9], 1, 0], [8]),\n  ('control #1', [27, [20, 6, 10, 15, 26, -2, 12, 27, -1], 0, 0], [6, 10, 12, 15, 20])],\n [('checkpoint resets gap #1', [20, [2, 6, 7], 2, 5], [2, 7]),\n  ('regression gap measure #1', [22, [17, 15, -1, 24, 7, 1, -2, 18, 2], 2, 7], [2, 17]),\n  ('fault site gap measure #1', [38, [26, 15, -2, 19, 22, -1, 7, 23], 1, 0], [7, 15, 19, 22, 23, 26]),\n  ('regression gap measure #2', [13, [4, 11, 8, 5], 5, 7], [5]),\n  ('regression gap measure #3', [30, [32, 12, 17, 27, 6, 20], 3, 4], [27]),\n  ('duplicate proposals #1', [10, [3, 3, 4], 0, 0], [3, 4]),\n  ('last legal tile #1', [10, [8, 9], 1, 0], [8]),\n  ('control #1', [40, [41, 39, 8, 9, 9, 32, 18, 41], 5, 0], [8, 18, 32])],\n [('checkpoint resets gap #1', [20, [2, 6, 7], 2, 5], [2, 7]),\n  ('fault site gap measure #1', [29, [18, 24, 20, 17, 15], 2, 0], [15, 17, 20, 24]),\n  ('fault site gap measure #2', [27, [24], 3, 7], [24]),\n  ('partial repair boundary #1', [37, [38, 25, 36, 9, 26, 10, 25, 2, 27, -2], 3, 5], [9]),\n  ('regression gap measure #1', [33, [17, 5, -1], 5, 7], [5]),\n  ('duplicate proposals #1', [10, [3, 3, 4], 0, 0], [3, 4]),\n  ('last legal tile #1', [10, [8, 9], 1, 0], [8]),\n  ('control #1', [37, [27, 33, 11, 14, 7], 0, 7], [11, 27, 33])]]\nfor label, args, expected in cases[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":"Deterministic toy contract stipulated for this model; integer or exact arithmetic only, not a reproduction of any specific game engine. 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-procedural-level-generation-constraints-encounter-pacing-gap-measure","generated_at":"2026-09-29T14:50:52.734265+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Procedural generators silently emit unplayable or unfair levels when a single constraint check uses the wrong boundary, axis, neighborhood or update order; the defect is visible in exact generated geometry.","root_cause":"The gap comparison is inclusive.","sha256":"bcac34d3167d428221c861a95beb51bab78617330d437cae536384943241f896","title":"Encounter pacing along the critical path: Encounters one tile too far apart · 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":38.417,"exit_code":1,"observations":[{"actual":[2,6],"check":"checkpoint resets gap #1","expected":[2,7],"passed":false},{"actual":[4,7,8,9],"check":"fault site gap measure #1","expected":[4,7,8,9],"passed":true},{"actual":[3],"check":"fault site gap measure #2","expected":[3],"passed":true},{"actual":[16],"check":"partial repair boundary #1","expected":[],"passed":false},{"actual":[11,25,30],"check":"partial repair boundary #2","expected":[],"passed":false},{"actual":[3,4],"check":"duplicate proposals #1","expected":[3,4],"passed":true},{"actual":[8],"check":"last legal tile #1","expected":[8],"passed":true},{"actual":[6,10,12,15,20],"check":"control #1","expected":[6,10,12,15,20],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"checkpoint resets gap #1\", \"actual\": [2, 6], \"expected\": [2, 7], \"passed\": false}, {\"check\": \"fault site gap measure #1\", \"actual\": [4, 7, 8, 9], \"expected\": [4, 7, 8, 9], \"passed\": true}, {\"check\": \"fault site gap measure #2\", \"actual\": [3], \"expected\": [3], \"passed\": true}, {\"check\": \"partial repair boundary #1\", \"actual\": [16], \"expected\": [], \"passed\": false}, {\"check\": \"partial repair boundary #2\", \"actual\": [11, 25, 30], \"expected\": [], \"passed\": false}, {\"check\": \"duplicate proposals #1\", \"actual\": [3, 4], \"expected\": [3, 4], \"passed\": true}, {\"check\": \"last legal tile #1\", \"actual\": [8], \"expected\": [8], \"passed\": true}, {\"check\": \"control #1\", \"actual\": [6, 10, 12, 15, 20], \"expected\": [6, 10, 12, 15, 20], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":39.038,"exit_code":1,"observations":[{"actual":[],"check":"checkpoint resets gap #1","expected":[2,7],"passed":false},{"actual":[4,7,9],"check":"fault site gap measure #1","expected":[4,7,8,9],"passed":false},{"actual":[4],"check":"fault site gap measure #2","expected":[3],"passed":false},{"actual":[],"check":"partial repair boundary #1","expected":[],"passed":true},{"actual":[],"check":"partial repair boundary #2","expected":[],"passed":true},{"actual":[3,4],"check":"duplicate proposals #1","expected":[3,4],"passed":true},{"actual":[8],"check":"last legal tile #1","expected":[8],"passed":true},{"actual":[6,10,12,15,20],"check":"control #1","expected":[6,10,12,15,20],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"checkpoint resets gap #1\", \"actual\": [], \"expected\": [2, 7], \"passed\": false}, {\"check\": \"fault site gap measure #1\", \"actual\": [4, 7, 9], \"expected\": [4, 7, 8, 9], \"passed\": false}, {\"check\": \"fault site gap measure #2\", \"actual\": [4], \"expected\": [3], \"passed\": false}, {\"check\": \"partial repair boundary #1\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"partial repair boundary #2\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"duplicate proposals #1\", \"actual\": [3, 4], \"expected\": [3, 4], \"passed\": true}, {\"check\": \"last legal tile #1\", \"actual\": [8], \"expected\": [8], \"passed\": true}, {\"check\": \"control #1\", \"actual\": [6, 10, 12, 15, 20], \"expected\": [6, 10, 12, 15, 20], \"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."}}