{"abstract":"Completed progress remains announced as busy.","category":"Assistive semantics","checks":7,"contract":"Indeterminate indicators omit numeric value and are busy; determinate values clamp, percentages normalize the range, zero-span means complete, and busy reflects explicit state.","evaluation_group":"xi-progress","failed_approach":"Always false suppresses in-progress busy state.","family":"xi-progress-busy-state","id":"FA-8751","implementations":{"attempt":{"sha256":"15be737cd8c7f3a1283514b82384c35bf64bc252cb77bfe617acf85c5e2a8839","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(value, minimum, maximum, label, busy):\n    if value is None: return {'role':'progressbar', 'label':label, 'busy':True}\n    value = max(minimum, min(value, maximum))\n    ratio = (value-minimum)/(maximum-minimum) if maximum > minimum else 1\n    return {'role':'progressbar', 'label':label, 'busy':False, 'value':value, 'percent':round(ratio*100)}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('indeterminate', solve(None, 0, 100, 'Upload', True), {'role': 'progressbar', 'label': 'Upload', 'busy': True})\ncheck('below', solve(-5, 10, 30, 'Upload', True), {'role': 'progressbar', 'label': 'Upload', 'busy': True, 'value': 10, 'percent': 0})\ncheck('above', solve(40, 10, 30, 'Upload', False), {'role': 'progressbar', 'label': 'Upload', 'busy': False, 'value': 30, 'percent': 100})\ncheck('offset', solve(20, 10, 30, 'Upload', True), {'role': 'progressbar', 'label': 'Upload', 'busy': True, 'value': 20, 'percent': 50})\ncheck('empty range', solve(10, 10, 10, 'Upload', False), {'role': 'progressbar', 'label': 'Upload', 'busy': False, 'value': 10, 'percent': 100})\ncheck('parameterized progress range', solve(2*N,N,3*N,'Task',True), dict(role='progressbar',label='Task',busy=True,value=2*N,percent=50))\nfor repetition in range(N):\n    check('repeat empty range', solve(10, 10, 10, 'Upload', False), {'role': 'progressbar', 'label': 'Upload', 'busy': False, 'value': 10, 'percent': 100})\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":"e223e3b411c02c6ed9e39002b39fd6be78bb6d6e7de3578df71640cd78dc41bc","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(value, minimum, maximum, label, busy):\n    if value is None: return {'role':'progressbar', 'label':label, 'busy':True}\n    value = max(minimum, min(value, maximum))\n    ratio = (value-minimum)/(maximum-minimum) if maximum > minimum else 1\n    return {'role':'progressbar', 'label':label, 'busy':True, 'value':value, 'percent':round(ratio*100)}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('indeterminate', solve(None, 0, 100, 'Upload', True), {'role': 'progressbar', 'label': 'Upload', 'busy': True})\ncheck('below', solve(-5, 10, 30, 'Upload', True), {'role': 'progressbar', 'label': 'Upload', 'busy': True, 'value': 10, 'percent': 0})\ncheck('above', solve(40, 10, 30, 'Upload', False), {'role': 'progressbar', 'label': 'Upload', 'busy': False, 'value': 30, 'percent': 100})\ncheck('offset', solve(20, 10, 30, 'Upload', True), {'role': 'progressbar', 'label': 'Upload', 'busy': True, 'value': 20, 'percent': 50})\ncheck('empty range', solve(10, 10, 10, 'Upload', False), {'role': 'progressbar', 'label': 'Upload', 'busy': False, 'value': 10, 'percent': 100})\ncheck('parameterized progress range', solve(2*N,N,3*N,'Task',True), dict(role='progressbar',label='Task',busy=True,value=2*N,percent=50))\nfor repetition in range(N):\n    check('repeat empty range', solve(10, 10, 10, 'Upload', False), {'role': 'progressbar', 'label': 'Upload', 'busy': False, 'value': 10, 'percent': 100})\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":"56d1db0e38e5408b333be054bfcc8baf39a216863a244e7db6dc8a2ee1cc10f7","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(value, minimum, maximum, label, busy):\n    if value is None: return {'role':'progressbar', 'label':label, 'busy':True}\n    value = max(minimum, min(value, maximum))\n    ratio = (value-minimum)/(maximum-minimum) if maximum > minimum else 1\n    return {'role':'progressbar', 'label':label, 'busy':busy, 'value':value, 'percent':round(ratio*100)}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('indeterminate', solve(None, 0, 100, 'Upload', True), {'role': 'progressbar', 'label': 'Upload', 'busy': True})\ncheck('below', solve(-5, 10, 30, 'Upload', True), {'role': 'progressbar', 'label': 'Upload', 'busy': True, 'value': 10, 'percent': 0})\ncheck('above', solve(40, 10, 30, 'Upload', False), {'role': 'progressbar', 'label': 'Upload', 'busy': False, 'value': 30, 'percent': 100})\ncheck('offset', solve(20, 10, 30, 'Upload', True), {'role': 'progressbar', 'label': 'Upload', 'busy': True, 'value': 20, 'percent': 50})\ncheck('empty range', solve(10, 10, 10, 'Upload', False), {'role': 'progressbar', 'label': 'Upload', 'busy': False, 'value': 10, 'percent': 100})\ncheck('parameterized progress range', solve(2*N,N,3*N,'Task',True), dict(role='progressbar',label='Task',busy=True,value=2*N,percent=50))\nfor repetition in range(N):\n    check('repeat empty range', solve(10, 10, 10, 'Upload', False), {'role': 'progressbar', 'label': 'Upload', 'busy': False, 'value': 10, 'percent': 100})\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":" 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":"xi-progress-busy-state","generated_at":"2026-09-29T14:38:24.097999+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"A deterministic model of progress indicator representation; this isolates one interface invariant without requiring a browser.","repair":"Implement the busy state operation as `'busy':busy`.","root_cause":"The busy state operation uses `'busy':True` where the contract requires `'busy':busy`.","sha256":"aed7732be066cfaee47bd9f57dafd967f5be75a6f8ef4f944cd37119de0f83d9","title":"Progress indicator representation: Completed progress remains announced as busy · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":37.513,"exit_code":1,"observations":[{"actual":{"busy":true,"label":"Upload","role":"progressbar"},"check":"indeterminate","expected":{"busy":true,"label":"Upload","role":"progressbar"},"passed":true},{"actual":{"busy":false,"label":"Upload","percent":0,"role":"progressbar","value":10},"check":"below","expected":{"busy":true,"label":"Upload","percent":0,"role":"progressbar","value":10},"passed":false},{"actual":{"busy":false,"label":"Upload","percent":100,"role":"progressbar","value":30},"check":"above","expected":{"busy":false,"label":"Upload","percent":100,"role":"progressbar","value":30},"passed":true},{"actual":{"busy":false,"label":"Upload","percent":50,"role":"progressbar","value":20},"check":"offset","expected":{"busy":true,"label":"Upload","percent":50,"role":"progressbar","value":20},"passed":false},{"actual":{"busy":false,"label":"Upload","percent":100,"role":"progressbar","value":10},"check":"empty range","expected":{"busy":false,"label":"Upload","percent":100,"role":"progressbar","value":10},"passed":true},{"actual":{"busy":false,"label":"Task","percent":50,"role":"progressbar","value":2},"check":"parameterized progress range","expected":{"busy":true,"label":"Task","percent":50,"role":"progressbar","value":2},"passed":false},{"actual":{"busy":false,"label":"Upload","percent":100,"role":"progressbar","value":10},"check":"repeat empty range","expected":{"busy":false,"label":"Upload","percent":100,"role":"progressbar","value":10},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"indeterminate\", \"actual\": {\"role\": \"progressbar\", \"label\": \"Upload\", \"busy\": true}, \"expected\": {\"role\": \"progressbar\", \"label\": \"Upload\", \"busy\": true}, \"passed\": true}, {\"check\": \"below\", \"actual\": {\"role\": \"progressbar\", \"label\": \"Upload\", \"busy\": false, \"value\": 10, \"percent\": 0}, \"expected\": {\"role\": \"progressbar\", \"label\": \"Upload\", \"busy\": true, \"value\": 10, \"percent\": 0}, \"passed\": false}, {\"check\": \"above\", \"actual\": {\"role\": \"progressbar\", \"label\": \"Upload\", \"busy\": false, \"value\": 30, \"percent\": 100}, \"expected\": {\"role\": \"progressbar\", \"label\": \"Upload\", \"busy\": false, \"value\": 30, \"percent\": 100}, \"passed\": true}, {\"check\": \"offset\", \"actual\": {\"role\": \"progressbar\", \"label\": \"Upload\", \"busy\": false, \"value\": 20, \"percent\": 50}, \"expected\": {\"role\": \"progressbar\", \"label\": \"Upload\", \"busy\": true, \"value\": 20, \"percent\": 50}, \"passed\": false}, {\"check\": \"empty range\", \"actual\": {\"role\": \"progressbar\", \"label\": \"Upload\", \"busy\": false, \"value\": 10, \"percent\": 100}, \"expected\": {\"role\": \"progressbar\", \"label\": \"Upload\", \"busy\": false, \"value\": 10, \"percent\": 100}, \"passed\": true}, {\"check\": \"parameterized progress range\", \"actual\": {\"role\": \"progressbar\", \"label\": \"Task\", \"busy\": false, \"value\": 2, \"percent\": 50}, \"expected\": {\"role\": \"progressbar\", \"label\": \"Task\", \"busy\": true, \"value\": 2, \"percent\": 50}, \"passed\": false}, {\"check\": \"repeat empty range\", \"actual\": {\"role\": \"progressbar\", \"label\": \"Upload\", \"busy\": false, \"value\": 10, \"percent\": 100}, \"expected\": {\"role\": \"progressbar\", \"label\": \"Upload\", \"busy\": false, \"value\": 10, \"percent\": 100}, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.601,"exit_code":1,"observations":[{"actual":{"busy":true,"label":"Upload","role":"progressbar"},"check":"indeterminate","expected":{"busy":true,"label":"Upload","role":"progressbar"},"passed":true},{"actual":{"busy":true,"label":"Upload","percent":0,"role":"progressbar","value":10},"check":"below","expected":{"busy":true,"label":"Upload","percent":0,"role":"progressbar","value":10},"passed":true},{"actual":{"busy":true,"label":"Upload","percent":100,"role":"progressbar","value":30},"check":"above","expected":{"busy":false,"label":"Upload","percent":100,"role":"progressbar","value":30},"passed":false},{"actual":{"busy":true,"label":"Upload","percent":50,"role":"progressbar","value":20},"check":"offset","expected":{"busy":true,"label":"Upload","percent":50,"role":"progressbar","value":20},"passed":true},{"actual":{"busy":true,"label":"Upload","percent":100,"role":"progressbar","value":10},"check":"empty range","expected":{"busy":false,"label":"Upload","percent":100,"role":"progressbar","value":10},"passed":false},{"actual":{"busy":true,"label":"Task","percent":50,"role":"progressbar","value":2},"check":"parameterized progress range","expected":{"busy":true,"label":"Task","percent":50,"role":"progressbar","value":2},"passed":true},{"actual":{"busy":true,"label":"Upload","percent":100,"role":"progressbar","value":10},"check":"repeat empty range","expected":{"busy":false,"label":"Upload","percent":100,"role":"progressbar","value":10},"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"indeterminate\", \"actual\": {\"role\": \"progressbar\", \"label\": \"Upload\", \"busy\": true}, \"expected\": {\"role\": \"progressbar\", \"label\": \"Upload\", \"busy\": true}, \"passed\": true}, {\"check\": \"below\", \"actual\": {\"role\": \"progressbar\", \"label\": \"Upload\", \"busy\": true, \"value\": 10, \"percent\": 0}, \"expected\": {\"role\": \"progressbar\", \"label\": \"Upload\", \"busy\": true, \"value\": 10, \"percent\": 0}, \"passed\": true}, {\"check\": \"above\", \"actual\": {\"role\": \"progressbar\", \"label\": \"Upload\", \"busy\": true, \"value\": 30, \"percent\": 100}, \"expected\": {\"role\": \"progressbar\", \"label\": \"Upload\", \"busy\": false, \"value\": 30, \"percent\": 100}, \"passed\": false}, {\"check\": \"offset\", \"actual\": {\"role\": \"progressbar\", \"label\": \"Upload\", \"busy\": true, \"value\": 20, \"percent\": 50}, \"expected\": {\"role\": \"progressbar\", \"label\": \"Upload\", \"busy\": true, \"value\": 20, \"percent\": 50}, \"passed\": true}, {\"check\": \"empty range\", \"actual\": {\"role\": \"progressbar\", \"label\": \"Upload\", \"busy\": true, \"value\": 10, \"percent\": 100}, \"expected\": {\"role\": \"progressbar\", \"label\": \"Upload\", \"busy\": false, \"value\": 10, \"percent\": 100}, \"passed\": false}, {\"check\": \"parameterized progress range\", \"actual\": {\"role\": \"progressbar\", \"label\": \"Task\", \"busy\": true, \"value\": 2, \"percent\": 50}, \"expected\": {\"role\": \"progressbar\", \"label\": \"Task\", \"busy\": true, \"value\": 2, \"percent\": 50}, \"passed\": true}, {\"check\": \"repeat empty range\", \"actual\": {\"role\": \"progressbar\", \"label\": \"Upload\", \"busy\": true, \"value\": 10, \"percent\": 100}, \"expected\": {\"role\": \"progressbar\", \"label\": \"Upload\", \"busy\": false, \"value\": 10, \"percent\": 100}, \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":38.025,"exit_code":0,"observations":[{"actual":{"busy":true,"label":"Upload","role":"progressbar"},"check":"indeterminate","expected":{"busy":true,"label":"Upload","role":"progressbar"},"passed":true},{"actual":{"busy":true,"label":"Upload","percent":0,"role":"progressbar","value":10},"check":"below","expected":{"busy":true,"label":"Upload","percent":0,"role":"progressbar","value":10},"passed":true},{"actual":{"busy":false,"label":"Upload","percent":100,"role":"progressbar","value":30},"check":"above","expected":{"busy":false,"label":"Upload","percent":100,"role":"progressbar","value":30},"passed":true},{"actual":{"busy":true,"label":"Upload","percent":50,"role":"progressbar","value":20},"check":"offset","expected":{"busy":true,"label":"Upload","percent":50,"role":"progressbar","value":20},"passed":true},{"actual":{"busy":false,"label":"Upload","percent":100,"role":"progressbar","value":10},"check":"empty range","expected":{"busy":false,"label":"Upload","percent":100,"role":"progressbar","value":10},"passed":true},{"actual":{"busy":true,"label":"Task","percent":50,"role":"progressbar","value":2},"check":"parameterized progress range","expected":{"busy":true,"label":"Task","percent":50,"role":"progressbar","value":2},"passed":true},{"actual":{"busy":false,"label":"Upload","percent":100,"role":"progressbar","value":10},"check":"repeat empty range","expected":{"busy":false,"label":"Upload","percent":100,"role":"progressbar","value":10},"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"indeterminate\", \"actual\": {\"role\": \"progressbar\", \"label\": \"Upload\", \"busy\": true}, \"expected\": {\"role\": \"progressbar\", \"label\": \"Upload\", \"busy\": true}, \"passed\": true}, {\"check\": \"below\", \"actual\": {\"role\": \"progressbar\", \"label\": \"Upload\", \"busy\": true, \"value\": 10, \"percent\": 0}, \"expected\": {\"role\": \"progressbar\", \"label\": \"Upload\", \"busy\": true, \"value\": 10, \"percent\": 0}, \"passed\": true}, {\"check\": \"above\", \"actual\": {\"role\": \"progressbar\", \"label\": \"Upload\", \"busy\": false, \"value\": 30, \"percent\": 100}, \"expected\": {\"role\": \"progressbar\", \"label\": \"Upload\", \"busy\": false, \"value\": 30, \"percent\": 100}, \"passed\": true}, {\"check\": \"offset\", \"actual\": {\"role\": \"progressbar\", \"label\": \"Upload\", \"busy\": true, \"value\": 20, \"percent\": 50}, \"expected\": {\"role\": \"progressbar\", \"label\": \"Upload\", \"busy\": true, \"value\": 20, \"percent\": 50}, \"passed\": true}, {\"check\": \"empty range\", \"actual\": {\"role\": \"progressbar\", \"label\": \"Upload\", \"busy\": false, \"value\": 10, \"percent\": 100}, \"expected\": {\"role\": \"progressbar\", \"label\": \"Upload\", \"busy\": false, \"value\": 10, \"percent\": 100}, \"passed\": true}, {\"check\": \"parameterized progress range\", \"actual\": {\"role\": \"progressbar\", \"label\": \"Task\", \"busy\": true, \"value\": 2, \"percent\": 50}, \"expected\": {\"role\": \"progressbar\", \"label\": \"Task\", \"busy\": true, \"value\": 2, \"percent\": 50}, \"passed\": true}, {\"check\": \"repeat empty range\", \"actual\": {\"role\": \"progressbar\", \"label\": \"Upload\", \"busy\": false, \"value\": 10, \"percent\": 100}, \"expected\": {\"role\": \"progressbar\", \"label\": \"Upload\", \"busy\": false, \"value\": 10, \"percent\": 100}, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}