{"abstract":"Drawing with clipping disabled still uses cached coverage.","category":"Raster clipping","checks":9,"contract":"Cache entries store copied coverage and source revisions. Draw recomputes after mask edits. Disable returns full coverage without overwriting cached mask. Rebinding to another name cannot reuse the old name; clearing definitions removes stale entries. Missing definitions clip empty.","contract_signature":"commands, size","evaluation_group":"s3-raster-clipping-clip-mask-cache","failed_approach":"Bypassing the cached clip with empty coverage blocks disabled draws.","family":"s3-raster-clipping-clip-mask-cache-disabled-cache-result","id":"FA-50511","implementations":{"attempt":{"sha256":"adbe9eb15c8a08e52b13a98f1a14714a6eb18dc0895a5eb5b8246b6be5c019a5","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(commands, size):\n    full=set(range(size))\n    defs={}\n    revs={}\n    cache={}\n    active=None\n    enabled=True\n    out=[]\n    for cmd in commands:\n        op=cmd[0]\n        if op=='set':\n            defs[cmd[1]]=set(cmd[2]) & full\n            revs[cmd[1]]=revs.get(cmd[1],0)+1\n        elif op=='bind': active=cmd[1]\n        elif op=='drop':\n            defs.pop(cmd[1],None)\n            cache.pop(cmd[1],None)\n        elif op=='invalidate': cache.pop(cmd[1],None)\n        elif op=='clear': defs.clear(); cache.clear()\n        elif op=='disable': enabled=False\n        elif op=='enable': enabled=True\n        elif op=='draw':\n            revision=revs.get(active,0)\n            if active not in cache or cache[active][0]!=revision:\n                cache[active]=(revision,set(defs.get(active,set())))\n            out.append(sorted(cache[active][1] if enabled else set()))\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nif N == 1:\n    check('explicit sequence 0', solve([['set', 'a', [0]], ['bind', 'a'], ['draw'], ['set', 'a', [1]], ['draw']], 4), [[0], [1]])\n    check('explicit sequence 1', solve([['set', 'a', [0]], ['set', 'b', [2]], ['bind', 'b'], ['draw']], 4), [[2]])\n    check('explicit sequence 2', solve([['set', 'a', [0]], ['bind', 'a'], ['draw'], ['drop', 'a'], ['draw']], 4), [[0], []])\n    check('explicit sequence 3', solve([['set', 'a', [0]], ['bind', 'a'], ['draw'], ['clear'], ['draw']], 4), [[0], []])\n    check('explicit sequence 4', solve([['set', 'a', [0]], ['bind', 'a'], ['draw'], ['disable'], ['draw'], ['enable'], ['draw']], 4), [[0], [0, 1, 2, 3], [0]])\n    check('explicit sequence 5', solve([['bind', 'missing'], ['draw']], 4), [[]])\n    check('explicit sequence 6', solve([['set', 'a', [0, 99]], ['bind', 'a'], ['draw'], ['invalidate', 'a'], ['draw']], 4), [[0], [0]])\n    check('explicit sequence 7', solve([['set', 'a', []], ['bind', 'a'], ['draw']], 4), [[]])\n    check('explicit sequence 8', solve([['set', 'a', [0]], ['set', 'b', [1]], ['bind', 'a'], ['draw'], ['drop', 'a'], ['draw']], 4), [[0], []])\nif N == 2:\n    check('explicit sequence 0', solve([['set', 'a', [0]], ['bind', 'a'], ['draw'], ['set', 'a', [1]], ['draw']], 5), [[0], [1]])\n    check('explicit sequence 1', solve([['set', 'a', [0]], ['set', 'b', [2]], ['bind', 'b'], ['draw']], 5), [[2]])\n    check('explicit sequence 2', solve([['set', 'a', [0]], ['bind', 'a'], ['draw'], ['drop', 'a'], ['draw']], 5), [[0], []])\n    check('explicit sequence 3', solve([['set', 'a', [0]], ['bind', 'a'], ['draw'], ['clear'], ['draw']], 5), [[0], []])\n    check('explicit sequence 4', solve([['set', 'a', [0]], ['bind', 'a'], ['draw'], ['disable'], ['draw'], ['enable'], ['draw']], 5), [[0], [0, 1, 2, 3, 4], [0]])\n    check('explicit sequence 5', solve([['bind', 'missing'], ['draw']], 5), [[]])\n    check('explicit sequence 6', solve([['set', 'a', [0, 99]], ['bind', 'a'], ['draw'], ['invalidate', 'a'], ['draw']], 5), [[0], [0]])\n    check('explicit sequence 7', solve([['set', 'a', []], ['bind', 'a'], ['draw']], 5), [[]])\n    check('explicit sequence 8', solve([['set', 'a', [0]], ['set', 'b', [1]], ['bind', 'a'], ['draw'], ['drop', 'a'], ['draw']], 5), [[0], []])\nif N == 3:\n    check('explicit sequence 0', solve([['set', 'a', [0]], ['bind', 'a'], ['draw'], ['set', 'a', [1]], ['draw']], 6), [[0], [1]])\n    check('explicit sequence 1', solve([['set', 'a', [0]], ['set', 'b', [2]], ['bind', 'b'], ['draw']], 6), [[2]])\n    check('explicit sequence 2', solve([['set', 'a', [0]], ['bind', 'a'], ['draw'], ['drop', 'a'], ['draw']], 6), [[0], []])\n    check('explicit sequence 3', solve([['set', 'a', [0]], ['bind', 'a'], ['draw'], ['clear'], ['draw']], 6), [[0], []])\n    check('explicit sequence 4', solve([['set', 'a', [0]], ['bind', 'a'], ['draw'], ['disable'], ['draw'], ['enable'], ['draw']], 6), [[0], [0, 1, 2, 3, 4, 5], [0]])\n    check('explicit sequence 5', solve([['bind', 'missing'], ['draw']], 6), [[]])\n    check('explicit sequence 6', solve([['set', 'a', [0, 99]], ['bind', 'a'], ['draw'], ['invalidate', 'a'], ['draw']], 6), [[0], [0]])\n    check('explicit sequence 7', solve([['set', 'a', []], ['bind', 'a'], ['draw']], 6), [[]])\n    check('explicit sequence 8', solve([['set', 'a', [0]], ['set', 'b', [1]], ['bind', 'a'], ['draw'], ['drop', 'a'], ['draw']], 6), [[0], []])\nif N == 4:\n    check('explicit sequence 0', solve([['set', 'a', [0]], ['bind', 'a'], ['draw'], ['set', 'a', [1]], ['draw']], 7), [[0], [1]])\n    check('explicit sequence 1', solve([['set', 'a', [0]], ['set', 'b', [2]], ['bind', 'b'], ['draw']], 7), [[2]])\n    check('explicit sequence 2', solve([['set', 'a', [0]], ['bind', 'a'], ['draw'], ['drop', 'a'], ['draw']], 7), [[0], []])\n    check('explicit sequence 3', solve([['set', 'a', [0]], ['bind', 'a'], ['draw'], ['clear'], ['draw']], 7), [[0], []])\n    check('explicit sequence 4', solve([['set', 'a', [0]], ['bind', 'a'], ['draw'], ['disable'], ['draw'], ['enable'], ['draw']], 7), [[0], [0, 1, 2, 3, 4, 5, 6], [0]])\n    check('explicit sequence 5', solve([['bind', 'missing'], ['draw']], 7), [[]])\n    check('explicit sequence 6', solve([['set', 'a', [0, 99]], ['bind', 'a'], ['draw'], ['invalidate', 'a'], ['draw']], 7), [[0], [0]])\n    check('explicit sequence 7', solve([['set', 'a', []], ['bind', 'a'], ['draw']], 7), [[]])\n    check('explicit sequence 8', solve([['set', 'a', [0]], ['set', 'b', [1]], ['bind', 'a'], ['draw'], ['drop', 'a'], ['draw']], 7), [[0], []])\nif N == 5:\n    check('explicit sequence 0', solve([['set', 'a', [0]], ['bind', 'a'], ['draw'], ['set', 'a', [1]], ['draw']], 8), [[0], [1]])\n    check('explicit sequence 1', solve([['set', 'a', [0]], ['set', 'b', [2]], ['bind', 'b'], ['draw']], 8), [[2]])\n    check('explicit sequence 2', solve([['set', 'a', [0]], ['bind', 'a'], ['draw'], ['drop', 'a'], ['draw']], 8), [[0], []])\n    check('explicit sequence 3', solve([['set', 'a', [0]], ['bind', 'a'], ['draw'], ['clear'], ['draw']], 8), [[0], []])\n    check('explicit sequence 4', solve([['set', 'a', [0]], ['bind', 'a'], ['draw'], ['disable'], ['draw'], ['enable'], ['draw']], 8), [[0], [0, 1, 2, 3, 4, 5, 6, 7], [0]])\n    check('explicit sequence 5', solve([['bind', 'missing'], ['draw']], 8), [[]])\n    check('explicit sequence 6', solve([['set', 'a', [0, 99]], ['bind', 'a'], ['draw'], ['invalidate', 'a'], ['draw']], 8), [[0], [0]])\n    check('explicit sequence 7', solve([['set', 'a', []], ['bind', 'a'], ['draw']], 8), [[]])\n    check('explicit sequence 8', solve([['set', 'a', [0]], ['set', 'b', [1]], ['bind', 'a'], ['draw'], ['drop', 'a'], ['draw']], 8), [[0], []])\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":"d3d9d58c405c02aa00186a42df6814b20b5e1ae25852a3531131360dfce41e39","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(commands, size):\n    full=set(range(size))\n    defs={}\n    revs={}\n    cache={}\n    active=None\n    enabled=True\n    out=[]\n    for cmd in commands:\n        op=cmd[0]\n        if op=='set':\n            defs[cmd[1]]=set(cmd[2]) & full\n            revs[cmd[1]]=revs.get(cmd[1],0)+1\n        elif op=='bind': active=cmd[1]\n        elif op=='drop':\n            defs.pop(cmd[1],None)\n            cache.pop(cmd[1],None)\n        elif op=='invalidate': cache.pop(cmd[1],None)\n        elif op=='clear': defs.clear(); cache.clear()\n        elif op=='disable': enabled=False\n        elif op=='enable': enabled=True\n        elif op=='draw':\n            revision=revs.get(active,0)\n            if active not in cache or cache[active][0]!=revision:\n                cache[active]=(revision,set(defs.get(active,set())))\n            out.append(sorted(cache[active][1]))\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nif N == 1:\n    check('explicit sequence 0', solve([['set', 'a', [0]], ['bind', 'a'], ['draw'], ['set', 'a', [1]], ['draw']], 4), [[0], [1]])\n    check('explicit sequence 1', solve([['set', 'a', [0]], ['set', 'b', [2]], ['bind', 'b'], ['draw']], 4), [[2]])\n    check('explicit sequence 2', solve([['set', 'a', [0]], ['bind', 'a'], ['draw'], ['drop', 'a'], ['draw']], 4), [[0], []])\n    check('explicit sequence 3', solve([['set', 'a', [0]], ['bind', 'a'], ['draw'], ['clear'], ['draw']], 4), [[0], []])\n    check('explicit sequence 4', solve([['set', 'a', [0]], ['bind', 'a'], ['draw'], ['disable'], ['draw'], ['enable'], ['draw']], 4), [[0], [0, 1, 2, 3], [0]])\n    check('explicit sequence 5', solve([['bind', 'missing'], ['draw']], 4), [[]])\n    check('explicit sequence 6', solve([['set', 'a', [0, 99]], ['bind', 'a'], ['draw'], ['invalidate', 'a'], ['draw']], 4), [[0], [0]])\n    check('explicit sequence 7', solve([['set', 'a', []], ['bind', 'a'], ['draw']], 4), [[]])\n    check('explicit sequence 8', solve([['set', 'a', [0]], ['set', 'b', [1]], ['bind', 'a'], ['draw'], ['drop', 'a'], ['draw']], 4), [[0], []])\nif N == 2:\n    check('explicit sequence 0', solve([['set', 'a', [0]], ['bind', 'a'], ['draw'], ['set', 'a', [1]], ['draw']], 5), [[0], [1]])\n    check('explicit sequence 1', solve([['set', 'a', [0]], ['set', 'b', [2]], ['bind', 'b'], ['draw']], 5), [[2]])\n    check('explicit sequence 2', solve([['set', 'a', [0]], ['bind', 'a'], ['draw'], ['drop', 'a'], ['draw']], 5), [[0], []])\n    check('explicit sequence 3', solve([['set', 'a', [0]], ['bind', 'a'], ['draw'], ['clear'], ['draw']], 5), [[0], []])\n    check('explicit sequence 4', solve([['set', 'a', [0]], ['bind', 'a'], ['draw'], ['disable'], ['draw'], ['enable'], ['draw']], 5), [[0], [0, 1, 2, 3, 4], [0]])\n    check('explicit sequence 5', solve([['bind', 'missing'], ['draw']], 5), [[]])\n    check('explicit sequence 6', solve([['set', 'a', [0, 99]], ['bind', 'a'], ['draw'], ['invalidate', 'a'], ['draw']], 5), [[0], [0]])\n    check('explicit sequence 7', solve([['set', 'a', []], ['bind', 'a'], ['draw']], 5), [[]])\n    check('explicit sequence 8', solve([['set', 'a', [0]], ['set', 'b', [1]], ['bind', 'a'], ['draw'], ['drop', 'a'], ['draw']], 5), [[0], []])\nif N == 3:\n    check('explicit sequence 0', solve([['set', 'a', [0]], ['bind', 'a'], ['draw'], ['set', 'a', [1]], ['draw']], 6), [[0], [1]])\n    check('explicit sequence 1', solve([['set', 'a', [0]], ['set', 'b', [2]], ['bind', 'b'], ['draw']], 6), [[2]])\n    check('explicit sequence 2', solve([['set', 'a', [0]], ['bind', 'a'], ['draw'], ['drop', 'a'], ['draw']], 6), [[0], []])\n    check('explicit sequence 3', solve([['set', 'a', [0]], ['bind', 'a'], ['draw'], ['clear'], ['draw']], 6), [[0], []])\n    check('explicit sequence 4', solve([['set', 'a', [0]], ['bind', 'a'], ['draw'], ['disable'], ['draw'], ['enable'], ['draw']], 6), [[0], [0, 1, 2, 3, 4, 5], [0]])\n    check('explicit sequence 5', solve([['bind', 'missing'], ['draw']], 6), [[]])\n    check('explicit sequence 6', solve([['set', 'a', [0, 99]], ['bind', 'a'], ['draw'], ['invalidate', 'a'], ['draw']], 6), [[0], [0]])\n    check('explicit sequence 7', solve([['set', 'a', []], ['bind', 'a'], ['draw']], 6), [[]])\n    check('explicit sequence 8', solve([['set', 'a', [0]], ['set', 'b', [1]], ['bind', 'a'], ['draw'], ['drop', 'a'], ['draw']], 6), [[0], []])\nif N == 4:\n    check('explicit sequence 0', solve([['set', 'a', [0]], ['bind', 'a'], ['draw'], ['set', 'a', [1]], ['draw']], 7), [[0], [1]])\n    check('explicit sequence 1', solve([['set', 'a', [0]], ['set', 'b', [2]], ['bind', 'b'], ['draw']], 7), [[2]])\n    check('explicit sequence 2', solve([['set', 'a', [0]], ['bind', 'a'], ['draw'], ['drop', 'a'], ['draw']], 7), [[0], []])\n    check('explicit sequence 3', solve([['set', 'a', [0]], ['bind', 'a'], ['draw'], ['clear'], ['draw']], 7), [[0], []])\n    check('explicit sequence 4', solve([['set', 'a', [0]], ['bind', 'a'], ['draw'], ['disable'], ['draw'], ['enable'], ['draw']], 7), [[0], [0, 1, 2, 3, 4, 5, 6], [0]])\n    check('explicit sequence 5', solve([['bind', 'missing'], ['draw']], 7), [[]])\n    check('explicit sequence 6', solve([['set', 'a', [0, 99]], ['bind', 'a'], ['draw'], ['invalidate', 'a'], ['draw']], 7), [[0], [0]])\n    check('explicit sequence 7', solve([['set', 'a', []], ['bind', 'a'], ['draw']], 7), [[]])\n    check('explicit sequence 8', solve([['set', 'a', [0]], ['set', 'b', [1]], ['bind', 'a'], ['draw'], ['drop', 'a'], ['draw']], 7), [[0], []])\nif N == 5:\n    check('explicit sequence 0', solve([['set', 'a', [0]], ['bind', 'a'], ['draw'], ['set', 'a', [1]], ['draw']], 8), [[0], [1]])\n    check('explicit sequence 1', solve([['set', 'a', [0]], ['set', 'b', [2]], ['bind', 'b'], ['draw']], 8), [[2]])\n    check('explicit sequence 2', solve([['set', 'a', [0]], ['bind', 'a'], ['draw'], ['drop', 'a'], ['draw']], 8), [[0], []])\n    check('explicit sequence 3', solve([['set', 'a', [0]], ['bind', 'a'], ['draw'], ['clear'], ['draw']], 8), [[0], []])\n    check('explicit sequence 4', solve([['set', 'a', [0]], ['bind', 'a'], ['draw'], ['disable'], ['draw'], ['enable'], ['draw']], 8), [[0], [0, 1, 2, 3, 4, 5, 6, 7], [0]])\n    check('explicit sequence 5', solve([['bind', 'missing'], ['draw']], 8), [[]])\n    check('explicit sequence 6', solve([['set', 'a', [0, 99]], ['bind', 'a'], ['draw'], ['invalidate', 'a'], ['draw']], 8), [[0], [0]])\n    check('explicit sequence 7', solve([['set', 'a', []], ['bind', 'a'], ['draw']], 8), [[]])\n    check('explicit sequence 8', solve([['set', 'a', [0]], ['set', 'b', [1]], ['bind', 'a'], ['draw'], ['drop', 'a'], ['draw']], 8), [[0], []])\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":"Finite one-dimensional integer sample sets model coverage state only; no geometric intersection, memory layout, GPU or graphics-standard conformance is claimed. 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":"s3-raster-clipping-clip-mask-cache-disabled-cache-result","generated_at":"2026-09-29T14:45:10.018716+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Raster clip state can leak coverage across draws even when every individual region is valid.","root_cause":"Drawing with clipping disabled still uses cached coverage.","sha256":"81ef9eb371fb6baf45b75f7087e001f6826b1743942a51a6bfdd9ea4891ba055","title":"Clip mask cache: disabled cache result · 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":41.971,"exit_code":1,"observations":[{"actual":[[0],[1]],"check":"explicit sequence 0","expected":[[0],[1]],"passed":true},{"actual":[[2]],"check":"explicit sequence 1","expected":[[2]],"passed":true},{"actual":[[0],[]],"check":"explicit sequence 2","expected":[[0],[]],"passed":true},{"actual":[[0],[]],"check":"explicit sequence 3","expected":[[0],[]],"passed":true},{"actual":[[0],[],[0]],"check":"explicit sequence 4","expected":[[0],[0,1,2,3],[0]],"passed":false},{"actual":[[]],"check":"explicit sequence 5","expected":[[]],"passed":true},{"actual":[[0],[0]],"check":"explicit sequence 6","expected":[[0],[0]],"passed":true},{"actual":[[]],"check":"explicit sequence 7","expected":[[]],"passed":true},{"actual":[[0],[]],"check":"explicit sequence 8","expected":[[0],[]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"explicit sequence 0\", \"actual\": [[0], [1]], \"expected\": [[0], [1]], \"passed\": true}, {\"check\": \"explicit sequence 1\", \"actual\": [[2]], \"expected\": [[2]], \"passed\": true}, {\"check\": \"explicit sequence 2\", \"actual\": [[0], []], \"expected\": [[0], []], \"passed\": true}, {\"check\": \"explicit sequence 3\", \"actual\": [[0], []], \"expected\": [[0], []], \"passed\": true}, {\"check\": \"explicit sequence 4\", \"actual\": [[0], [], [0]], \"expected\": [[0], [0, 1, 2, 3], [0]], \"passed\": false}, {\"check\": \"explicit sequence 5\", \"actual\": [[]], \"expected\": [[]], \"passed\": true}, {\"check\": \"explicit sequence 6\", \"actual\": [[0], [0]], \"expected\": [[0], [0]], \"passed\": true}, {\"check\": \"explicit sequence 7\", \"actual\": [[]], \"expected\": [[]], \"passed\": true}, {\"check\": \"explicit sequence 8\", \"actual\": [[0], []], \"expected\": [[0], []], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.911,"exit_code":1,"observations":[{"actual":[[0],[1]],"check":"explicit sequence 0","expected":[[0],[1]],"passed":true},{"actual":[[2]],"check":"explicit sequence 1","expected":[[2]],"passed":true},{"actual":[[0],[]],"check":"explicit sequence 2","expected":[[0],[]],"passed":true},{"actual":[[0],[]],"check":"explicit sequence 3","expected":[[0],[]],"passed":true},{"actual":[[0],[0],[0]],"check":"explicit sequence 4","expected":[[0],[0,1,2,3],[0]],"passed":false},{"actual":[[]],"check":"explicit sequence 5","expected":[[]],"passed":true},{"actual":[[0],[0]],"check":"explicit sequence 6","expected":[[0],[0]],"passed":true},{"actual":[[]],"check":"explicit sequence 7","expected":[[]],"passed":true},{"actual":[[0],[]],"check":"explicit sequence 8","expected":[[0],[]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"explicit sequence 0\", \"actual\": [[0], [1]], \"expected\": [[0], [1]], \"passed\": true}, {\"check\": \"explicit sequence 1\", \"actual\": [[2]], \"expected\": [[2]], \"passed\": true}, {\"check\": \"explicit sequence 2\", \"actual\": [[0], []], \"expected\": [[0], []], \"passed\": true}, {\"check\": \"explicit sequence 3\", \"actual\": [[0], []], \"expected\": [[0], []], \"passed\": true}, {\"check\": \"explicit sequence 4\", \"actual\": [[0], [0], [0]], \"expected\": [[0], [0, 1, 2, 3], [0]], \"passed\": false}, {\"check\": \"explicit sequence 5\", \"actual\": [[]], \"expected\": [[]], \"passed\": true}, {\"check\": \"explicit sequence 6\", \"actual\": [[0], [0]], \"expected\": [[0], [0]], \"passed\": true}, {\"check\": \"explicit sequence 7\", \"actual\": [[]], \"expected\": [[]], \"passed\": true}, {\"check\": \"explicit sequence 8\", \"actual\": [[0], []], \"expected\": [[0], []], \"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."}}