{"abstract":"The tab workspace reports an incorrect save required.","category":"Tab interfaces","checks":6,"contract":"Closing a dirty tab waits for its save generation, accepts only matching successful completion, retains the tab on error/cancel and clears dirty only at the saved revision.","contract_signature":"x","evaluation_group":"s3-tabs-save-before-close","failed_approach":"The partial repair x['dirty'] and x['status']=='ok' still violates a workspace boundary or normal case.","family":"s3-tab-interfaces-save-before-close-save-required","id":"FA-35821","implementations":{"attempt":{"sha256":"ec748b9a662bcfc4c20e124709c4aca3f3fce7655729c41d6818ff52f3144e60","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    r0 = x['dirty'] and x['status']=='ok'\n    r1 = x['request']==x['completion']\n    r2 = x['status']=='ok'\n    r3 = x['saved_revision']==x['revision']\n    r4 = not x['dirty'] or (x['status']=='ok' and x['request']==x['completion'] and x['saved_revision']==x['revision'])\n    r5 = x['dirty'] and x['status']=='error' and x['request']==x['completion']\n    return [r0,r1,r2,r3,r4,r5]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = {1: [({'dirty': True, 'revision': 7, 'saved_revision': 7, 'request': 3, 'completion': 3, 'status': 'ok'}, [True, True, True, True, True, False]), ({'dirty': True, 'revision': 7, 'saved_revision': 7, 'request': 3, 'completion': 3, 'status': 'error'}, [True, True, False, True, False, True]), ({'dirty': True, 'revision': 7, 'saved_revision': 7, 'request': 3, 'completion': 3, 'status': 'cancel'}, [True, True, False, True, False, False]), ({'dirty': True, 'revision': 7, 'saved_revision': 7, 'request': 3, 'completion': 2, 'status': 'ok'}, [True, False, True, True, False, False]), ({'dirty': True, 'revision': 7, 'saved_revision': 6, 'request': 3, 'completion': 3, 'status': 'ok'}, [True, True, True, False, False, False]), ({'dirty': False, 'revision': 7, 'saved_revision': 7, 'request': 3, 'completion': 3, 'status': 'ok'}, [False, True, True, True, True, False])], 2: [({'dirty': True, 'revision': 14, 'saved_revision': 14, 'request': 6, 'completion': 6, 'status': 'ok'}, [True, True, True, True, True, False]), ({'dirty': True, 'revision': 14, 'saved_revision': 14, 'request': 6, 'completion': 6, 'status': 'error'}, [True, True, False, True, False, True]), ({'dirty': True, 'revision': 14, 'saved_revision': 14, 'request': 6, 'completion': 6, 'status': 'cancel'}, [True, True, False, True, False, False]), ({'dirty': True, 'revision': 14, 'saved_revision': 14, 'request': 6, 'completion': 4, 'status': 'ok'}, [True, False, True, True, False, False]), ({'dirty': True, 'revision': 14, 'saved_revision': 12, 'request': 6, 'completion': 6, 'status': 'ok'}, [True, True, True, False, False, False]), ({'dirty': False, 'revision': 14, 'saved_revision': 14, 'request': 6, 'completion': 6, 'status': 'ok'}, [False, True, True, True, True, False])], 3: [({'dirty': True, 'revision': 21, 'saved_revision': 21, 'request': 9, 'completion': 9, 'status': 'ok'}, [True, True, True, True, True, False]), ({'dirty': True, 'revision': 21, 'saved_revision': 21, 'request': 9, 'completion': 9, 'status': 'error'}, [True, True, False, True, False, True]), ({'dirty': True, 'revision': 21, 'saved_revision': 21, 'request': 9, 'completion': 9, 'status': 'cancel'}, [True, True, False, True, False, False]), ({'dirty': True, 'revision': 21, 'saved_revision': 21, 'request': 9, 'completion': 6, 'status': 'ok'}, [True, False, True, True, False, False]), ({'dirty': True, 'revision': 21, 'saved_revision': 18, 'request': 9, 'completion': 9, 'status': 'ok'}, [True, True, True, False, False, False]), ({'dirty': False, 'revision': 21, 'saved_revision': 21, 'request': 9, 'completion': 9, 'status': 'ok'}, [False, True, True, True, True, False])], 4: [({'dirty': True, 'revision': 28, 'saved_revision': 28, 'request': 12, 'completion': 12, 'status': 'ok'}, [True, True, True, True, True, False]), ({'dirty': True, 'revision': 28, 'saved_revision': 28, 'request': 12, 'completion': 12, 'status': 'error'}, [True, True, False, True, False, True]), ({'dirty': True, 'revision': 28, 'saved_revision': 28, 'request': 12, 'completion': 12, 'status': 'cancel'}, [True, True, False, True, False, False]), ({'dirty': True, 'revision': 28, 'saved_revision': 28, 'request': 12, 'completion': 8, 'status': 'ok'}, [True, False, True, True, False, False]), ({'dirty': True, 'revision': 28, 'saved_revision': 24, 'request': 12, 'completion': 12, 'status': 'ok'}, [True, True, True, False, False, False]), ({'dirty': False, 'revision': 28, 'saved_revision': 28, 'request': 12, 'completion': 12, 'status': 'ok'}, [False, True, True, True, True, False])], 5: [({'dirty': True, 'revision': 35, 'saved_revision': 35, 'request': 15, 'completion': 15, 'status': 'ok'}, [True, True, True, True, True, False]), ({'dirty': True, 'revision': 35, 'saved_revision': 35, 'request': 15, 'completion': 15, 'status': 'error'}, [True, True, False, True, False, True]), ({'dirty': True, 'revision': 35, 'saved_revision': 35, 'request': 15, 'completion': 15, 'status': 'cancel'}, [True, True, False, True, False, False]), ({'dirty': True, 'revision': 35, 'saved_revision': 35, 'request': 15, 'completion': 10, 'status': 'ok'}, [True, False, True, True, False, False]), ({'dirty': True, 'revision': 35, 'saved_revision': 30, 'request': 15, 'completion': 15, 'status': 'ok'}, [True, True, True, False, False, False]), ({'dirty': False, 'revision': 35, 'saved_revision': 35, 'request': 15, 'completion': 15, 'status': 'ok'}, [False, True, True, True, True, False])]}\nfor i, (inputs, expected) in enumerate(fixtures[N]):\n    check(\"workspace regression \"+str(i), solve(inputs), 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":"abc6152d71aaee98d8ae0fd7628b2fe4d16f7d449c903bce4ec746b369740fbb","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    r0 = False\n    r1 = x['request']==x['completion']\n    r2 = x['status']=='ok'\n    r3 = x['saved_revision']==x['revision']\n    r4 = not x['dirty'] or (x['status']=='ok' and x['request']==x['completion'] and x['saved_revision']==x['revision'])\n    r5 = x['dirty'] and x['status']=='error' and x['request']==x['completion']\n    return [r0,r1,r2,r3,r4,r5]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = {1: [({'dirty': True, 'revision': 7, 'saved_revision': 7, 'request': 3, 'completion': 3, 'status': 'ok'}, [True, True, True, True, True, False]), ({'dirty': True, 'revision': 7, 'saved_revision': 7, 'request': 3, 'completion': 3, 'status': 'error'}, [True, True, False, True, False, True]), ({'dirty': True, 'revision': 7, 'saved_revision': 7, 'request': 3, 'completion': 3, 'status': 'cancel'}, [True, True, False, True, False, False]), ({'dirty': True, 'revision': 7, 'saved_revision': 7, 'request': 3, 'completion': 2, 'status': 'ok'}, [True, False, True, True, False, False]), ({'dirty': True, 'revision': 7, 'saved_revision': 6, 'request': 3, 'completion': 3, 'status': 'ok'}, [True, True, True, False, False, False]), ({'dirty': False, 'revision': 7, 'saved_revision': 7, 'request': 3, 'completion': 3, 'status': 'ok'}, [False, True, True, True, True, False])], 2: [({'dirty': True, 'revision': 14, 'saved_revision': 14, 'request': 6, 'completion': 6, 'status': 'ok'}, [True, True, True, True, True, False]), ({'dirty': True, 'revision': 14, 'saved_revision': 14, 'request': 6, 'completion': 6, 'status': 'error'}, [True, True, False, True, False, True]), ({'dirty': True, 'revision': 14, 'saved_revision': 14, 'request': 6, 'completion': 6, 'status': 'cancel'}, [True, True, False, True, False, False]), ({'dirty': True, 'revision': 14, 'saved_revision': 14, 'request': 6, 'completion': 4, 'status': 'ok'}, [True, False, True, True, False, False]), ({'dirty': True, 'revision': 14, 'saved_revision': 12, 'request': 6, 'completion': 6, 'status': 'ok'}, [True, True, True, False, False, False]), ({'dirty': False, 'revision': 14, 'saved_revision': 14, 'request': 6, 'completion': 6, 'status': 'ok'}, [False, True, True, True, True, False])], 3: [({'dirty': True, 'revision': 21, 'saved_revision': 21, 'request': 9, 'completion': 9, 'status': 'ok'}, [True, True, True, True, True, False]), ({'dirty': True, 'revision': 21, 'saved_revision': 21, 'request': 9, 'completion': 9, 'status': 'error'}, [True, True, False, True, False, True]), ({'dirty': True, 'revision': 21, 'saved_revision': 21, 'request': 9, 'completion': 9, 'status': 'cancel'}, [True, True, False, True, False, False]), ({'dirty': True, 'revision': 21, 'saved_revision': 21, 'request': 9, 'completion': 6, 'status': 'ok'}, [True, False, True, True, False, False]), ({'dirty': True, 'revision': 21, 'saved_revision': 18, 'request': 9, 'completion': 9, 'status': 'ok'}, [True, True, True, False, False, False]), ({'dirty': False, 'revision': 21, 'saved_revision': 21, 'request': 9, 'completion': 9, 'status': 'ok'}, [False, True, True, True, True, False])], 4: [({'dirty': True, 'revision': 28, 'saved_revision': 28, 'request': 12, 'completion': 12, 'status': 'ok'}, [True, True, True, True, True, False]), ({'dirty': True, 'revision': 28, 'saved_revision': 28, 'request': 12, 'completion': 12, 'status': 'error'}, [True, True, False, True, False, True]), ({'dirty': True, 'revision': 28, 'saved_revision': 28, 'request': 12, 'completion': 12, 'status': 'cancel'}, [True, True, False, True, False, False]), ({'dirty': True, 'revision': 28, 'saved_revision': 28, 'request': 12, 'completion': 8, 'status': 'ok'}, [True, False, True, True, False, False]), ({'dirty': True, 'revision': 28, 'saved_revision': 24, 'request': 12, 'completion': 12, 'status': 'ok'}, [True, True, True, False, False, False]), ({'dirty': False, 'revision': 28, 'saved_revision': 28, 'request': 12, 'completion': 12, 'status': 'ok'}, [False, True, True, True, True, False])], 5: [({'dirty': True, 'revision': 35, 'saved_revision': 35, 'request': 15, 'completion': 15, 'status': 'ok'}, [True, True, True, True, True, False]), ({'dirty': True, 'revision': 35, 'saved_revision': 35, 'request': 15, 'completion': 15, 'status': 'error'}, [True, True, False, True, False, True]), ({'dirty': True, 'revision': 35, 'saved_revision': 35, 'request': 15, 'completion': 15, 'status': 'cancel'}, [True, True, False, True, False, False]), ({'dirty': True, 'revision': 35, 'saved_revision': 35, 'request': 15, 'completion': 10, 'status': 'ok'}, [True, False, True, True, False, False]), ({'dirty': True, 'revision': 35, 'saved_revision': 30, 'request': 15, 'completion': 15, 'status': 'ok'}, [True, True, True, False, False, False]), ({'dirty': False, 'revision': 35, 'saved_revision': 35, 'request': 15, 'completion': 15, 'status': 'ok'}, [False, True, True, True, True, False])]}\nfor i, (inputs, expected) in enumerate(fixtures[N]):\n    check(\"workspace regression \"+str(i), solve(inputs), 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":"Finite stipulated workspace snapshots only. Independent result fields describe observable obligations, not a full UI runtime. 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-tab-interfaces-save-before-close-save-required","generated_at":"2026-09-29T14:42:45.486633+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Offline tab/panel workspace behavior; no browser or desktop framework is emulated.","root_cause":"The save required decision uses False instead of x['dirty'].","sha256":"5266a248fbd876af5a817be4dd46cc10dc2da1079b0d87d2633f257759af8c47","title":"Save before close: save required · 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":39.039,"exit_code":1,"observations":[{"actual":[true,true,true,true,true,false],"check":"workspace regression 0","expected":[true,true,true,true,true,false],"passed":true},{"actual":[false,true,false,true,false,true],"check":"workspace regression 1","expected":[true,true,false,true,false,true],"passed":false},{"actual":[false,true,false,true,false,false],"check":"workspace regression 2","expected":[true,true,false,true,false,false],"passed":false},{"actual":[true,false,true,true,false,false],"check":"workspace regression 3","expected":[true,false,true,true,false,false],"passed":true},{"actual":[true,true,true,false,false,false],"check":"workspace regression 4","expected":[true,true,true,false,false,false],"passed":true},{"actual":[false,true,true,true,true,false],"check":"workspace regression 5","expected":[false,true,true,true,true,false],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"workspace regression 0\", \"actual\": [true, true, true, true, true, false], \"expected\": [true, true, true, true, true, false], \"passed\": true}, {\"check\": \"workspace regression 1\", \"actual\": [false, true, false, true, false, true], \"expected\": [true, true, false, true, false, true], \"passed\": false}, {\"check\": \"workspace regression 2\", \"actual\": [false, true, false, true, false, false], \"expected\": [true, true, false, true, false, false], \"passed\": false}, {\"check\": \"workspace regression 3\", \"actual\": [true, false, true, true, false, false], \"expected\": [true, false, true, true, false, false], \"passed\": true}, {\"check\": \"workspace regression 4\", \"actual\": [true, true, true, false, false, false], \"expected\": [true, true, true, false, false, false], \"passed\": true}, {\"check\": \"workspace regression 5\", \"actual\": [false, true, true, true, true, false], \"expected\": [false, true, true, true, true, false], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.576,"exit_code":1,"observations":[{"actual":[false,true,true,true,true,false],"check":"workspace regression 0","expected":[true,true,true,true,true,false],"passed":false},{"actual":[false,true,false,true,false,true],"check":"workspace regression 1","expected":[true,true,false,true,false,true],"passed":false},{"actual":[false,true,false,true,false,false],"check":"workspace regression 2","expected":[true,true,false,true,false,false],"passed":false},{"actual":[false,false,true,true,false,false],"check":"workspace regression 3","expected":[true,false,true,true,false,false],"passed":false},{"actual":[false,true,true,false,false,false],"check":"workspace regression 4","expected":[true,true,true,false,false,false],"passed":false},{"actual":[false,true,true,true,true,false],"check":"workspace regression 5","expected":[false,true,true,true,true,false],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"workspace regression 0\", \"actual\": [false, true, true, true, true, false], \"expected\": [true, true, true, true, true, false], \"passed\": false}, {\"check\": \"workspace regression 1\", \"actual\": [false, true, false, true, false, true], \"expected\": [true, true, false, true, false, true], \"passed\": false}, {\"check\": \"workspace regression 2\", \"actual\": [false, true, false, true, false, false], \"expected\": [true, true, false, true, false, false], \"passed\": false}, {\"check\": \"workspace regression 3\", \"actual\": [false, false, true, true, false, false], \"expected\": [true, false, true, true, false, false], \"passed\": false}, {\"check\": \"workspace regression 4\", \"actual\": [false, true, true, false, false, false], \"expected\": [true, true, true, false, false, false], \"passed\": false}, {\"check\": \"workspace regression 5\", \"actual\": [false, true, true, true, true, false], \"expected\": [false, true, true, true, true, 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."}}