{"abstract":"Queued hover event opens a submenu after pointer departure.","category":"Menu interactions","checks":8,"contract":"Menu hover work is keyed by owner and pointer incarnation; scheduling honors open delays and close grace without retaining superseded jobs.","contract_signature":"action, p","evaluation_group":"s3-menu-interactions-hover-scheduler","failed_approach":"The attempted repair `p['inside']` still violates the late-fire oracle.","family":"s3-menu-interactions-hover-scheduler-late-fire","id":"FA-32726","implementations":{"attempt":{"sha256":"12cf22c68494efd896e88a2e7b90edcc3977540cc445ef354989213cc2361ccb","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 == 'open-at':\n        return p['entered']+p['delay']\n    if action == 'replace-job':\n        return [x for x in p['jobs'] if x['owner']!=p['new']['owner']]+[p['new']]\n    if action == 'entry-cancel':\n        return [x for x in p['jobs'] if not (x['owner']==p['owner'] and x['kind']=='close')]\n    if action == 'due':\n        return [x for x in p['jobs'] if x['at']<=p['now']]\n    if action == 'leave-grace':\n        return max(p['base'],p['intent'])\n    if action == 'late-fire':\n        return p['inside']\n    return {'error': 'unsupported menu operation'}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('open-at contract', solve('open-at', {'entered':N,'now':N+3,'delay':10}), N+10)\ncheck('replace-job contract', solve('replace-job', {'jobs':[{'owner':'a','at':N},{'owner':'b','at':N}],'new':{'owner':'a','at':N+1}}), [{'owner':'b','at':N},{'owner':'a','at':N+1}])\ncheck('entry-cancel contract', solve('entry-cancel', {'owner':'a','jobs':[{'owner':'a','kind':'close','at':N},{'owner':'b','kind':'open','at':N}]}), [{'owner':'b','kind':'open','at':N}])\ncheck('due contract', solve('due', {'jobs':[{'at':N},{'at':N+1}],'now':N}), [{'at':N}])\ncheck('leave-grace contract', solve('leave-grace', {'base':N+1,'intent':N+5}), N+5)\ncheck('late-fire contract', solve('late-fire', {'owner':'a'+str(N),'current':'a'+str(N),'inside':False}), False)\ncheck('unknown operation', solve('unknown', {}), {'error': 'unsupported menu operation'})\ncheck('inside different owner',solve('late-fire',{'owner':N,'current':N+1,'inside':True}),False)\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":"20218dd4ec1d7c01a9037e45c62a57ae096df7c7166d74df28a7befd9df869a7","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 == 'open-at':\n        return p['entered']+p['delay']\n    if action == 'replace-job':\n        return [x for x in p['jobs'] if x['owner']!=p['new']['owner']]+[p['new']]\n    if action == 'entry-cancel':\n        return [x for x in p['jobs'] if not (x['owner']==p['owner'] and x['kind']=='close')]\n    if action == 'due':\n        return [x for x in p['jobs'] if x['at']<=p['now']]\n    if action == 'leave-grace':\n        return max(p['base'],p['intent'])\n    if action == 'late-fire':\n        return p['owner']==p['current']\n    return {'error': 'unsupported menu operation'}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('open-at contract', solve('open-at', {'entered':N,'now':N+3,'delay':10}), N+10)\ncheck('replace-job contract', solve('replace-job', {'jobs':[{'owner':'a','at':N},{'owner':'b','at':N}],'new':{'owner':'a','at':N+1}}), [{'owner':'b','at':N},{'owner':'a','at':N+1}])\ncheck('entry-cancel contract', solve('entry-cancel', {'owner':'a','jobs':[{'owner':'a','kind':'close','at':N},{'owner':'b','kind':'open','at':N}]}), [{'owner':'b','kind':'open','at':N}])\ncheck('due contract', solve('due', {'jobs':[{'at':N},{'at':N+1}],'now':N}), [{'at':N}])\ncheck('leave-grace contract', solve('leave-grace', {'base':N+1,'intent':N+5}), N+5)\ncheck('late-fire contract', solve('late-fire', {'owner':'a'+str(N),'current':'a'+str(N),'inside':False}), False)\ncheck('unknown operation', solve('unknown', {}), {'error': 'unsupported menu operation'})\ncheck('inside different owner',solve('late-fire',{'owner':N,'current':N+1,'inside':True}),False)\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-hover-scheduler-late-fire","generated_at":"2026-09-29T14:42:15.073828+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.","root_cause":"The hover-scheduler model applies `p['owner']==p['current']` at its late-fire operation instead of the stipulated transformation.","sha256":"89c72f15ea744ef765a26ae4cae6008bc40bc6761f1315d209d36c08c8c95203","title":"Queued hover event opens a submenu after pointer departure · 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.184,"exit_code":1,"observations":[{"actual":11,"check":"open-at contract","expected":11,"passed":true},{"actual":[{"at":1,"owner":"b"},{"at":2,"owner":"a"}],"check":"replace-job contract","expected":[{"at":1,"owner":"b"},{"at":2,"owner":"a"}],"passed":true},{"actual":[{"at":1,"kind":"open","owner":"b"}],"check":"entry-cancel contract","expected":[{"at":1,"kind":"open","owner":"b"}],"passed":true},{"actual":[{"at":1}],"check":"due contract","expected":[{"at":1}],"passed":true},{"actual":6,"check":"leave-grace contract","expected":6,"passed":true},{"actual":false,"check":"late-fire contract","expected":false,"passed":true},{"actual":{"error":"unsupported menu operation"},"check":"unknown operation","expected":{"error":"unsupported menu operation"},"passed":true},{"actual":true,"check":"inside different owner","expected":false,"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"open-at contract\", \"actual\": 11, \"expected\": 11, \"passed\": true}, {\"check\": \"replace-job contract\", \"actual\": [{\"owner\": \"b\", \"at\": 1}, {\"owner\": \"a\", \"at\": 2}], \"expected\": [{\"owner\": \"b\", \"at\": 1}, {\"owner\": \"a\", \"at\": 2}], \"passed\": true}, {\"check\": \"entry-cancel contract\", \"actual\": [{\"owner\": \"b\", \"kind\": \"open\", \"at\": 1}], \"expected\": [{\"owner\": \"b\", \"kind\": \"open\", \"at\": 1}], \"passed\": true}, {\"check\": \"due contract\", \"actual\": [{\"at\": 1}], \"expected\": [{\"at\": 1}], \"passed\": true}, {\"check\": \"leave-grace contract\", \"actual\": 6, \"expected\": 6, \"passed\": true}, {\"check\": \"late-fire contract\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"unknown operation\", \"actual\": {\"error\": \"unsupported menu operation\"}, \"expected\": {\"error\": \"unsupported menu operation\"}, \"passed\": true}, {\"check\": \"inside different owner\", \"actual\": true, \"expected\": false, \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.336,"exit_code":1,"observations":[{"actual":11,"check":"open-at contract","expected":11,"passed":true},{"actual":[{"at":1,"owner":"b"},{"at":2,"owner":"a"}],"check":"replace-job contract","expected":[{"at":1,"owner":"b"},{"at":2,"owner":"a"}],"passed":true},{"actual":[{"at":1,"kind":"open","owner":"b"}],"check":"entry-cancel contract","expected":[{"at":1,"kind":"open","owner":"b"}],"passed":true},{"actual":[{"at":1}],"check":"due contract","expected":[{"at":1}],"passed":true},{"actual":6,"check":"leave-grace contract","expected":6,"passed":true},{"actual":true,"check":"late-fire contract","expected":false,"passed":false},{"actual":{"error":"unsupported menu operation"},"check":"unknown operation","expected":{"error":"unsupported menu operation"},"passed":true},{"actual":false,"check":"inside different owner","expected":false,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"open-at contract\", \"actual\": 11, \"expected\": 11, \"passed\": true}, {\"check\": \"replace-job contract\", \"actual\": [{\"owner\": \"b\", \"at\": 1}, {\"owner\": \"a\", \"at\": 2}], \"expected\": [{\"owner\": \"b\", \"at\": 1}, {\"owner\": \"a\", \"at\": 2}], \"passed\": true}, {\"check\": \"entry-cancel contract\", \"actual\": [{\"owner\": \"b\", \"kind\": \"open\", \"at\": 1}], \"expected\": [{\"owner\": \"b\", \"kind\": \"open\", \"at\": 1}], \"passed\": true}, {\"check\": \"due contract\", \"actual\": [{\"at\": 1}], \"expected\": [{\"at\": 1}], \"passed\": true}, {\"check\": \"leave-grace contract\", \"actual\": 6, \"expected\": 6, \"passed\": true}, {\"check\": \"late-fire contract\", \"actual\": true, \"expected\": false, \"passed\": false}, {\"check\": \"unknown operation\", \"actual\": {\"error\": \"unsupported menu operation\"}, \"expected\": {\"error\": \"unsupported menu operation\"}, \"passed\": true}, {\"check\": \"inside different owner\", \"actual\": false, \"expected\": false, \"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."}}