{"abstract":"Combining attacks bypasses per-hit armor.","category":"Game simulation rules","checks":6,"contract":"Nonnegative integer hits and armor: return sum of max(0, hit-armor) for each hit.","evaluation_group":"model-99451b85de3433ce","failed_approach":"Clamping only the final sum lets weak hits cancel strong hits.","family":"z-games-per-hit-armor","id":"FA-11641","implementations":{"attempt":{"sha256":"ef1ca4e507e1037ff9e43eb6da7cc9d9722e82222971d1a8ef20ab0c0bbb40f9","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(hits, armor):\n    return max(0, sum(h-armor for h in hits))\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('two blocked hits',solve([N,N],N),0)\ncheck('mixed hit cannot heal',solve([0,N+3],N),3)\ncheck('one hit',solve([N+4],N),4)\ncheck('no attacks',solve([],N),0)\ncheck('unarmored',solve([N,2],0),N+2)\ncheck('all hits blocked',solve([0,N-1],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":"5556471321b6dbc044d0ef6af12f2d88de03405b65f79ad29ede70921783b59d","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(hits, armor):\n    return max(0, sum(hits)-armor)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('two blocked hits',solve([N,N],N),0)\ncheck('mixed hit cannot heal',solve([0,N+3],N),3)\ncheck('one hit',solve([N+4],N),4)\ncheck('no attacks',solve([],N),0)\ncheck('unarmored',solve([N,2],0),N+2)\ncheck('all hits blocked',solve([0,N-1],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":"4c36ed8d1e2aa474105b09f83ae45c670ab5475353191509c8cb671e2c73dcea","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(hits, armor):\n    return sum(max(0,h-armor) for h in hits)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('two blocked hits',solve([N,N],N),0)\ncheck('mixed hit cannot heal',solve([0,N+3],N),3)\ncheck('one hit',solve([N+4],N),4)\ncheck('no attacks',solve([],N),0)\ncheck('unarmored',solve([N,2],0),N+2)\ncheck('all hits blocked',solve([0,N-1],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":"Controlled rules-only simulation; not a complete game engine. 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-games-per-hit-armor","generated_at":"2026-09-29T14:38:49.742878+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"A deterministic game-rule model isolates this rule interaction for regression testing.","repair":"Reduce each hit separately and clamp each result at zero.","root_cause":"Armor is subtracted from the combined turn damage.","sha256":"c4b4a462938a244a890d2477a1b2215e0d8775b86eb91cff4efb3bfab330e6d8","title":"Combining attacks bypasses per-hit armor · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":41.319,"exit_code":1,"observations":[{"actual":0,"check":"two blocked hits","expected":0,"passed":true},{"actual":2,"check":"mixed hit cannot heal","expected":3,"passed":false},{"actual":4,"check":"one hit","expected":4,"passed":true},{"actual":0,"check":"no attacks","expected":0,"passed":true},{"actual":3,"check":"unarmored","expected":3,"passed":true},{"actual":0,"check":"all hits blocked","expected":0,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"two blocked hits\", \"actual\": 0, \"expected\": 0, \"passed\": true}, {\"check\": \"mixed hit cannot heal\", \"actual\": 2, \"expected\": 3, \"passed\": false}, {\"check\": \"one hit\", \"actual\": 4, \"expected\": 4, \"passed\": true}, {\"check\": \"no attacks\", \"actual\": 0, \"expected\": 0, \"passed\": true}, {\"check\": \"unarmored\", \"actual\": 3, \"expected\": 3, \"passed\": true}, {\"check\": \"all hits blocked\", \"actual\": 0, \"expected\": 0, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":38.074,"exit_code":1,"observations":[{"actual":1,"check":"two blocked hits","expected":0,"passed":false},{"actual":3,"check":"mixed hit cannot heal","expected":3,"passed":true},{"actual":4,"check":"one hit","expected":4,"passed":true},{"actual":0,"check":"no attacks","expected":0,"passed":true},{"actual":3,"check":"unarmored","expected":3,"passed":true},{"actual":0,"check":"all hits blocked","expected":0,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"two blocked hits\", \"actual\": 1, \"expected\": 0, \"passed\": false}, {\"check\": \"mixed hit cannot heal\", \"actual\": 3, \"expected\": 3, \"passed\": true}, {\"check\": \"one hit\", \"actual\": 4, \"expected\": 4, \"passed\": true}, {\"check\": \"no attacks\", \"actual\": 0, \"expected\": 0, \"passed\": true}, {\"check\": \"unarmored\", \"actual\": 3, \"expected\": 3, \"passed\": true}, {\"check\": \"all hits blocked\", \"actual\": 0, \"expected\": 0, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":39.917,"exit_code":0,"observations":[{"actual":0,"check":"two blocked hits","expected":0,"passed":true},{"actual":3,"check":"mixed hit cannot heal","expected":3,"passed":true},{"actual":4,"check":"one hit","expected":4,"passed":true},{"actual":0,"check":"no attacks","expected":0,"passed":true},{"actual":3,"check":"unarmored","expected":3,"passed":true},{"actual":0,"check":"all hits blocked","expected":0,"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"two blocked hits\", \"actual\": 0, \"expected\": 0, \"passed\": true}, {\"check\": \"mixed hit cannot heal\", \"actual\": 3, \"expected\": 3, \"passed\": true}, {\"check\": \"one hit\", \"actual\": 4, \"expected\": 4, \"passed\": true}, {\"check\": \"no attacks\", \"actual\": 0, \"expected\": 0, \"passed\": true}, {\"check\": \"unarmored\", \"actual\": 3, \"expected\": 3, \"passed\": true}, {\"check\": \"all hits blocked\", \"actual\": 0, \"expected\": 0, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}