{"abstract":"Progress percentage ignores a nonzero range origin.","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.","contract_signature":"value, minimum, maximum, label, busy","evaluation_group":"xi-progress","failed_approach":"Dividing by the absolute maximum uses the wrong span.","family":"xi-progress-origin","id":"FA-8741","implementations":{"attempt":{"sha256":"1bdc0058d29c78430d716cb58c1102e3f0356326bd93ffcc76a6fef0c46a84f4","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 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"},"broken":{"sha256":"ca8fb9663248a9bc8f9e9a3c8290af2cb232ac231dcaac3b46fd17f1ac7e1d85","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/(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-origin","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.","root_cause":"The origin operation uses `value/(maximum-minimum)` where the contract requires `(value-minimum)/(maximum-minimum)`.","sha256":"e54bcee24195ffd425998529b5c018acf82a9dc41d76d1f3e8b4e81009f097cf","title":"Progress indicator representation: Progress percentage ignores a nonzero range origin · 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":37.803,"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":false,"label":"Upload","percent":67,"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":33,"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":true,"label":"Task","percent":33,"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\": 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\": 67}, \"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\": 33}, \"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\": true, \"value\": 2, \"percent\": 33}, \"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":36.573,"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":50,"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":150,"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":100,"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":true,"label":"Task","percent":100,"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\": true, \"value\": 10, \"percent\": 50}, \"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\": 150}, \"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\": 100}, \"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\": true, \"value\": 2, \"percent\": 100}, \"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"}},"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."}}