{"abstract":"Repeated observations accumulate loss regardless of elapsed model time.","category":"Battery state accounting","checks":6,"contract":"Return final charge under a constant integer loss of one unit per tick and ordered observation timestamps at or after start; settle each elapsed interval once, floor at zero.","evaluation_group":"model-4144721d16303674","failed_approach":"Charging from the original timestamp on every observation double bills elapsed intervals.","family":"z-battery_models-idle-settlement","id":"FA-12326","implementations":{"attempt":{"sha256":"e3c9242a8fa442006a513b87ce9c4058303d1bb37fbb81376da4a9f6cc0848ec","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(charge, start, times):\n    for t in times:\n        charge=max(0,charge-(t-start))\n    return charge\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('repeated timestamp', solve(20*N,0,[N,N,2*N]), 18*N)\ncheck('one observation', solve(20*N,0,[3*N]), 17*N)\ncheck('no observation', solve(20*N,0,[]), 20*N)\ncheck('zero interval', solve(20*N,N,[N,N]), 20*N)\ncheck('offset clock', solve(20*N,10*N,[11*N,13*N]), 17*N)\ncheck('exhaustion', solve(N,0,[2*N,4*N]), 0)\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":"d264454d53e7232378dbf7c3576c7734f25f726e2c777ef7a63fad5788bdd50f","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(charge, start, times):\n    return max(0,charge-len(times))\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('repeated timestamp', solve(20*N,0,[N,N,2*N]), 18*N)\ncheck('one observation', solve(20*N,0,[3*N]), 17*N)\ncheck('no observation', solve(20*N,0,[]), 20*N)\ncheck('zero interval', solve(20*N,N,[N,N]), 20*N)\ncheck('offset clock', solve(20*N,10*N,[11*N,13*N]), 17*N)\ncheck('exhaustion', solve(N,0,[2*N,4*N]), 0)\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":"16c8c7804866db984608765814884d5863bc80b3675dc5a6934588bb7acac417","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(charge, start, times):\n    for t in times:\n        charge=max(0,charge-(t-start))\n        start=t\n    return charge\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('repeated timestamp', solve(20*N,0,[N,N,2*N]), 18*N)\ncheck('one observation', solve(20*N,0,[3*N]), 17*N)\ncheck('no observation', solve(20*N,0,[]), 20*N)\ncheck('zero interval', solve(20*N,N,[N,N]), 20*N)\ncheck('offset clock', solve(20*N,10*N,[11*N,13*N]), 17*N)\ncheck('exhaustion', solve(N,0,[2*N,4*N]), 0)\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":"Integer toy accounting with declared loss rules; no electrochemistry, hardware behavior, or safety claims. 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":"z-battery_models-idle-settlement","generated_at":"2026-09-29T14:38:55.933445+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"An explicit synthetic battery bookkeeping model isolates this state-accounting error; it is not an engineering prediction or safety procedure.","repair":"Settle loss from the last settlement time and advance that timestamp.","root_cause":"Repeated observations accumulate loss regardless of elapsed model time.","sha256":"e836c3543b4ec84db29c21640ef8ef6c56de43d487b862fd3b0a68463c7ed2aa","title":"Idle loss is charged once per observation · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":39.907,"exit_code":1,"observations":[{"actual":16,"check":"repeated timestamp","expected":18,"passed":false},{"actual":17,"check":"one observation","expected":17,"passed":true},{"actual":20,"check":"no observation","expected":20,"passed":true},{"actual":20,"check":"zero interval","expected":20,"passed":true},{"actual":16,"check":"offset clock","expected":17,"passed":false},{"actual":0,"check":"exhaustion","expected":0,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"repeated timestamp\", \"actual\": 16, \"expected\": 18, \"passed\": false}, {\"check\": \"one observation\", \"actual\": 17, \"expected\": 17, \"passed\": true}, {\"check\": \"no observation\", \"actual\": 20, \"expected\": 20, \"passed\": true}, {\"check\": \"zero interval\", \"actual\": 20, \"expected\": 20, \"passed\": true}, {\"check\": \"offset clock\", \"actual\": 16, \"expected\": 17, \"passed\": false}, {\"check\": \"exhaustion\", \"actual\": 0, \"expected\": 0, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":39.6,"exit_code":1,"observations":[{"actual":17,"check":"repeated timestamp","expected":18,"passed":false},{"actual":19,"check":"one observation","expected":17,"passed":false},{"actual":20,"check":"no observation","expected":20,"passed":true},{"actual":18,"check":"zero interval","expected":20,"passed":false},{"actual":18,"check":"offset clock","expected":17,"passed":false},{"actual":0,"check":"exhaustion","expected":0,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"repeated timestamp\", \"actual\": 17, \"expected\": 18, \"passed\": false}, {\"check\": \"one observation\", \"actual\": 19, \"expected\": 17, \"passed\": false}, {\"check\": \"no observation\", \"actual\": 20, \"expected\": 20, \"passed\": true}, {\"check\": \"zero interval\", \"actual\": 18, \"expected\": 20, \"passed\": false}, {\"check\": \"offset clock\", \"actual\": 18, \"expected\": 17, \"passed\": false}, {\"check\": \"exhaustion\", \"actual\": 0, \"expected\": 0, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":41.872,"exit_code":0,"observations":[{"actual":18,"check":"repeated timestamp","expected":18,"passed":true},{"actual":17,"check":"one observation","expected":17,"passed":true},{"actual":20,"check":"no observation","expected":20,"passed":true},{"actual":20,"check":"zero interval","expected":20,"passed":true},{"actual":17,"check":"offset clock","expected":17,"passed":true},{"actual":0,"check":"exhaustion","expected":0,"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"repeated timestamp\", \"actual\": 18, \"expected\": 18, \"passed\": true}, {\"check\": \"one observation\", \"actual\": 17, \"expected\": 17, \"passed\": true}, {\"check\": \"no observation\", \"actual\": 20, \"expected\": 20, \"passed\": true}, {\"check\": \"zero interval\", \"actual\": 20, \"expected\": 20, \"passed\": true}, {\"check\": \"offset clock\", \"actual\": 17, \"expected\": 17, \"passed\": true}, {\"check\": \"exhaustion\", \"actual\": 0, \"expected\": 0, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}