{"abstract":"Every child RPC spends the entire retry budget independently.","category":"Distributed coordination","checks":7,"contract":"Given a nonnegative total allowance and nonnegative per-branch demand, return grants in branch order. Grant one unit per nonempty branch per round until total or all demand is exhausted. This models serialized admission to an already atomic shared counter.","evaluation_group":"model-e1f549083c0f78dc","failed_approach":"Equal static partitions waste remainders and cannot transfer unused allowance from idle children.","family":"dist-shared-fanout-retry-budget","id":"FA-081","implementations":{"attempt":{"sha256":"3d598bbeaef8475865d77ff3e23c571d562f25d28f6d9d3a31b93becc3ae6368","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(total, demands):\n    share = total//len(demands) if demands else 0\n    return [min(share, demand) for demand in demands]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('one shared allowance', solve(N, [N, N]), [(N+1)//2, N//2])\ncheck('idle branch yields allowance', solve(N, [0, N]), [0, N])\ncheck('leftover unit stays useful', solve(2*N+1, [N+1, N+1]), [N+1, N])\ncheck('demand lower than allowance', solve(10*N, [N, 1]), [N, 1])\ncheck('zero allowance', solve(0, [N, N]), [0, 0])\ncheck('no branches', solve(N, []), [])\ncheck('all branches idle', solve(N, [0, 0]), [0, 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":"bc40db986c1f96acbaac70eb8b3fca8b33eea1e17877599aa0b73d8b349823a0","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(total, demands):\n    return [min(total, demand) for demand in demands]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('one shared allowance', solve(N, [N, N]), [(N+1)//2, N//2])\ncheck('idle branch yields allowance', solve(N, [0, N]), [0, N])\ncheck('leftover unit stays useful', solve(2*N+1, [N+1, N+1]), [N+1, N])\ncheck('demand lower than allowance', solve(10*N, [N, 1]), [N, 1])\ncheck('zero allowance', solve(0, [N, N]), [0, 0])\ncheck('no branches', solve(N, []), [])\ncheck('all branches idle', solve(N, [0, 0]), [0, 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":"6e604caeddfa7b2869f4b2eb54ee6e53f4a91aef40b4cd77efed53d1d59f1bcb","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(total, demands):\n    grants = [0]*len(demands)\n    while total > 0:\n        progressed = False\n        for i, demand in enumerate(demands):\n            if grants[i] < demand and total:\n                grants[i] += 1\n                total -= 1\n                progressed = True\n        if not progressed:\n            break\n    return grants\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('one shared allowance', solve(N, [N, N]), [(N+1)//2, N//2])\ncheck('idle branch yields allowance', solve(N, [0, N]), [0, N])\ncheck('leftover unit stays useful', solve(2*N+1, [N+1, N+1]), [N+1, N])\ncheck('demand lower than allowance', solve(10*N, [N, 1]), [N, 1])\ncheck('zero allowance', solve(0, [N, N]), [0, 0])\ncheck('no branches', solve(N, []), [])\ncheck('all branches idle', solve(N, [0, 0]), [0, 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":" 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":"dist-shared-fanout-retry-budget","generated_at":"2026-09-29T14:36:50.427483+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Models bounded retry amplification in scatter/gather RPC graphs; it does not attempt to simulate network timeouts or replace an atomic distributed budget store.","repair":"Consume a single shared allowance with deterministic round-robin grants to pending branches.","root_cause":"The budget is copied to children instead of accounted for across the request tree.","sha256":"fa64d1c41195d91d8253d74f6371e287ed2294966993ee369757172829052ea3","title":"Fanout multiplies a parent request's retry allowance · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":36.966,"exit_code":1,"observations":[{"actual":[0,0],"check":"one shared allowance","expected":[1,0],"passed":false},{"actual":[0,0],"check":"idle branch yields allowance","expected":[0,1],"passed":false},{"actual":[1,1],"check":"leftover unit stays useful","expected":[2,1],"passed":false},{"actual":[1,1],"check":"demand lower than allowance","expected":[1,1],"passed":true},{"actual":[0,0],"check":"zero allowance","expected":[0,0],"passed":true},{"actual":[],"check":"no branches","expected":[],"passed":true},{"actual":[0,0],"check":"all branches idle","expected":[0,0],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"one shared allowance\", \"actual\": [0, 0], \"expected\": [1, 0], \"passed\": false}, {\"check\": \"idle branch yields allowance\", \"actual\": [0, 0], \"expected\": [0, 1], \"passed\": false}, {\"check\": \"leftover unit stays useful\", \"actual\": [1, 1], \"expected\": [2, 1], \"passed\": false}, {\"check\": \"demand lower than allowance\", \"actual\": [1, 1], \"expected\": [1, 1], \"passed\": true}, {\"check\": \"zero allowance\", \"actual\": [0, 0], \"expected\": [0, 0], \"passed\": true}, {\"check\": \"no branches\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"all branches idle\", \"actual\": [0, 0], \"expected\": [0, 0], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":35.066,"exit_code":1,"observations":[{"actual":[1,1],"check":"one shared allowance","expected":[1,0],"passed":false},{"actual":[0,1],"check":"idle branch yields allowance","expected":[0,1],"passed":true},{"actual":[2,2],"check":"leftover unit stays useful","expected":[2,1],"passed":false},{"actual":[1,1],"check":"demand lower than allowance","expected":[1,1],"passed":true},{"actual":[0,0],"check":"zero allowance","expected":[0,0],"passed":true},{"actual":[],"check":"no branches","expected":[],"passed":true},{"actual":[0,0],"check":"all branches idle","expected":[0,0],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"one shared allowance\", \"actual\": [1, 1], \"expected\": [1, 0], \"passed\": false}, {\"check\": \"idle branch yields allowance\", \"actual\": [0, 1], \"expected\": [0, 1], \"passed\": true}, {\"check\": \"leftover unit stays useful\", \"actual\": [2, 2], \"expected\": [2, 1], \"passed\": false}, {\"check\": \"demand lower than allowance\", \"actual\": [1, 1], \"expected\": [1, 1], \"passed\": true}, {\"check\": \"zero allowance\", \"actual\": [0, 0], \"expected\": [0, 0], \"passed\": true}, {\"check\": \"no branches\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"all branches idle\", \"actual\": [0, 0], \"expected\": [0, 0], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":34.589,"exit_code":0,"observations":[{"actual":[1,0],"check":"one shared allowance","expected":[1,0],"passed":true},{"actual":[0,1],"check":"idle branch yields allowance","expected":[0,1],"passed":true},{"actual":[2,1],"check":"leftover unit stays useful","expected":[2,1],"passed":true},{"actual":[1,1],"check":"demand lower than allowance","expected":[1,1],"passed":true},{"actual":[0,0],"check":"zero allowance","expected":[0,0],"passed":true},{"actual":[],"check":"no branches","expected":[],"passed":true},{"actual":[0,0],"check":"all branches idle","expected":[0,0],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"one shared allowance\", \"actual\": [1, 0], \"expected\": [1, 0], \"passed\": true}, {\"check\": \"idle branch yields allowance\", \"actual\": [0, 1], \"expected\": [0, 1], \"passed\": true}, {\"check\": \"leftover unit stays useful\", \"actual\": [2, 1], \"expected\": [2, 1], \"passed\": true}, {\"check\": \"demand lower than allowance\", \"actual\": [1, 1], \"expected\": [1, 1], \"passed\": true}, {\"check\": \"zero allowance\", \"actual\": [0, 0], \"expected\": [0, 0], \"passed\": true}, {\"check\": \"no branches\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"all branches idle\", \"actual\": [0, 0], \"expected\": [0, 0], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}