{"abstract":"Pointer beyond radial menu radius still hits a command.","category":"Menu interactions","checks":7,"contract":"A radial menu has half-open angular sectors, an inactive central disk and a bounded outer radius; only displayed command sectors are hittable.","evaluation_group":"s3-menu-interactions-radial-menu-hit","failed_approach":"The attempted repair `p['radius']>=p['outer']` still violates the outer oracle.","family":"s3-menu-interactions-radial-menu-hit-outer","id":"FA-33306","implementations":{"attempt":{"sha256":"a79581e245f3684863a368efaeed824042a26e264b358d90a4dbee1972194c6f","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nimport unicodedata\nN = 1\nobservations = []\ndef solve(action, p):\n    if action == 'center':\n        return None if p['radius']<p['inner'] else 'ring'\n    if action == 'outer':\n        return p['radius']>=p['outer']\n    if action == 'angle':\n        return (p['degrees']-p['rotation'])%360\n    if action == 'sector':\n        return int(p['angle']//(360/p['count']))\n    if action == 'empty-sector':\n        return p['commands'][p['sector']] if p['sector']<len(p['commands']) else None\n    if action == 'gap':\n        return p['local']>=p['gap']/2 and p['local']<p['width']-p['gap']/2\n    return {'error': 'unsupported menu operation'}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('center contract', solve('center', {'radius':N,'inner':N+2}), None)\ncheck('outer contract', solve('outer', {'radius':N+10,'outer':N+9}), False)\ncheck('angle contract', solve('angle', {'degrees':N+30,'rotation':20}), N+10)\ncheck('sector contract', solve('sector', {'angle':80+N,'count':4}), 0)\ncheck('empty-sector contract', solve('empty-sector', {'commands':[N,N+1],'sector':3}), None)\ncheck('gap contract', solve('gap', {'local':N/10,'gap':4,'width':90}), False)\ncheck('unknown operation', solve('unknown', {}), {'error': 'unsupported menu operation'})\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":"3f26d5d1c3cd76d5b9c8f6a8c3ff086071e00eda71e4abe66b3ea01e7fa07060","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nimport unicodedata\nN = 1\nobservations = []\ndef solve(action, p):\n    if action == 'center':\n        return None if p['radius']<p['inner'] else 'ring'\n    if action == 'outer':\n        return True\n    if action == 'angle':\n        return (p['degrees']-p['rotation'])%360\n    if action == 'sector':\n        return int(p['angle']//(360/p['count']))\n    if action == 'empty-sector':\n        return p['commands'][p['sector']] if p['sector']<len(p['commands']) else None\n    if action == 'gap':\n        return p['local']>=p['gap']/2 and p['local']<p['width']-p['gap']/2\n    return {'error': 'unsupported menu operation'}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('center contract', solve('center', {'radius':N,'inner':N+2}), None)\ncheck('outer contract', solve('outer', {'radius':N+10,'outer':N+9}), False)\ncheck('angle contract', solve('angle', {'degrees':N+30,'rotation':20}), N+10)\ncheck('sector contract', solve('sector', {'angle':80+N,'count':4}), 0)\ncheck('empty-sector contract', solve('empty-sector', {'commands':[N,N+1],'sector':3}), None)\ncheck('gap contract', solve('gap', {'local':N/10,'gap':4,'width':90}), False)\ncheck('unknown operation', solve('unknown', {}), {'error': 'unsupported menu operation'})\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"},"fixed":{"sha256":"3c277bc3a44c873d7e4c62420912c9bd779b6a52d5dcad71e6abb24396bee9dd","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nimport unicodedata\nN = 1\nobservations = []\ndef solve(action, p):\n    if action == 'center':\n        return None if p['radius']<p['inner'] else 'ring'\n    if action == 'outer':\n        return p['radius']<=p['outer']\n    if action == 'angle':\n        return (p['degrees']-p['rotation'])%360\n    if action == 'sector':\n        return int(p['angle']//(360/p['count']))\n    if action == 'empty-sector':\n        return p['commands'][p['sector']] if p['sector']<len(p['commands']) else None\n    if action == 'gap':\n        return p['local']>=p['gap']/2 and p['local']<p['width']-p['gap']/2\n    return {'error': 'unsupported menu operation'}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('center contract', solve('center', {'radius':N,'inner':N+2}), None)\ncheck('outer contract', solve('outer', {'radius':N+10,'outer':N+9}), False)\ncheck('angle contract', solve('angle', {'degrees':N+30,'rotation':20}), N+10)\ncheck('sector contract', solve('sector', {'angle':80+N,'count':4}), 0)\ncheck('empty-sector contract', solve('empty-sector', {'commands':[N,N+1],'sector':3}), None)\ncheck('gap contract', solve('gap', {'local':N/10,'gap':4,'width':90}), False)\ncheck('unknown operation', solve('unknown', {}), {'error': 'unsupported menu operation'})\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":"Offline supplied-valid-payload model; excludes DOM, keyboard, focus, selection, announcements and browser conformance. 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-menu-interactions-radial-menu-hit-outer","generated_at":"2026-09-29T14:42:21.036460+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Cascading and context menus require coherent command and session state as content changes.","repair":"Apply `p['radius']<=p['outer']` at outer.","root_cause":"The radial-menu-hit model applies `True` at its outer operation instead of the stipulated transformation.","sha256":"849547d4e609e460a5b8eacb34b430c1ab823dd12ae41595f17507632dd6994f","title":"Pointer beyond radial menu radius still hits a command · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":46.766,"exit_code":1,"observations":[{"actual":null,"check":"center contract","expected":null,"passed":true},{"actual":true,"check":"outer contract","expected":false,"passed":false},{"actual":11,"check":"angle contract","expected":11,"passed":true},{"actual":0,"check":"sector contract","expected":0,"passed":true},{"actual":null,"check":"empty-sector contract","expected":null,"passed":true},{"actual":false,"check":"gap contract","expected":false,"passed":true},{"actual":{"error":"unsupported menu operation"},"check":"unknown operation","expected":{"error":"unsupported menu operation"},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"center contract\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"outer contract\", \"actual\": true, \"expected\": false, \"passed\": false}, {\"check\": \"angle contract\", \"actual\": 11, \"expected\": 11, \"passed\": true}, {\"check\": \"sector contract\", \"actual\": 0, \"expected\": 0, \"passed\": true}, {\"check\": \"empty-sector contract\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"gap contract\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"unknown operation\", \"actual\": {\"error\": \"unsupported menu operation\"}, \"expected\": {\"error\": \"unsupported menu operation\"}, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":44.051,"exit_code":1,"observations":[{"actual":null,"check":"center contract","expected":null,"passed":true},{"actual":true,"check":"outer contract","expected":false,"passed":false},{"actual":11,"check":"angle contract","expected":11,"passed":true},{"actual":0,"check":"sector contract","expected":0,"passed":true},{"actual":null,"check":"empty-sector contract","expected":null,"passed":true},{"actual":false,"check":"gap contract","expected":false,"passed":true},{"actual":{"error":"unsupported menu operation"},"check":"unknown operation","expected":{"error":"unsupported menu operation"},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"center contract\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"outer contract\", \"actual\": true, \"expected\": false, \"passed\": false}, {\"check\": \"angle contract\", \"actual\": 11, \"expected\": 11, \"passed\": true}, {\"check\": \"sector contract\", \"actual\": 0, \"expected\": 0, \"passed\": true}, {\"check\": \"empty-sector contract\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"gap contract\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"unknown operation\", \"actual\": {\"error\": \"unsupported menu operation\"}, \"expected\": {\"error\": \"unsupported menu operation\"}, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":47.003,"exit_code":0,"observations":[{"actual":null,"check":"center contract","expected":null,"passed":true},{"actual":false,"check":"outer contract","expected":false,"passed":true},{"actual":11,"check":"angle contract","expected":11,"passed":true},{"actual":0,"check":"sector contract","expected":0,"passed":true},{"actual":null,"check":"empty-sector contract","expected":null,"passed":true},{"actual":false,"check":"gap contract","expected":false,"passed":true},{"actual":{"error":"unsupported menu operation"},"check":"unknown operation","expected":{"error":"unsupported menu operation"},"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"center contract\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"outer contract\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"angle contract\", \"actual\": 11, \"expected\": 11, \"passed\": true}, {\"check\": \"sector contract\", \"actual\": 0, \"expected\": 0, \"passed\": true}, {\"check\": \"empty-sector contract\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"gap contract\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"unknown operation\", \"actual\": {\"error\": \"unsupported menu operation\"}, \"expected\": {\"error\": \"unsupported menu operation\"}, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}