{"abstract":"A borrowed pointer either keeps an object alive or decrements an ownership count it never incremented.","category":"Runtime and resources","checks":7,"contract":"The object starts with owning handle root. Events create distinct clone or borrow names, or drop an existing handle once. Cloning occurs only while a live owner exists. Borrowed handles do not extend lifetime and are not dereferenced here. Return [owning reference count,is alive,destruction transitions].","contract_signature":"events","evaluation_group":"xr-suite-owner-clone-requires-live-owner","failed_approach":"Avoiding increments for borrows while decrementing all dropped handles causes premature destruction.","family":"runtime-borrowed-reference-lifetime","id":"FA-251","implementations":{"attempt":{"sha256":"6b9a050cb8692e92e4f29c1bae5fbf445c9cb3093e8cf47550c6b75f2330eca7","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(events):\n    handles, references, destroyed = {'root': True}, 1, 0\n    for kind, identity in events:\n        if kind == 'clone':\n            handles[identity] = True\n            references += 1\n        elif kind == 'borrow':\n            handles[identity] = False\n            pass\n        else:\n            owned = handles.pop(identity)\n            if True:\n                references -= 1\n                if references == 0:\n                    destroyed += 1\n    return [references, references > 0, destroyed]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nborrows = [['borrow', 'b'+str(i)] for i in range(N)]\ndrops = [['drop', 'b'+str(i)] for i in range(N)]\ncheck('borrows do not own', solve(borrows), [1, True, 0])\ncheck('dropping borrows preserves owner', solve(borrows+drops), [1, True, 0])\ncheck('last owner can die before borrow record', solve(borrows+[['drop', 'root']]), [0, False, 1])\ncheck('clone keeps object alive', solve([['clone', 'second'], ['drop', 'root']]), [1, True, 0])\ncheck('last cloned owner frees once', solve([['clone', 'second'], ['drop', 'root'], ['drop', 'second']]), [0, False, 1])\ncheck('borrow after extra owner then drops', solve([['clone', 'second'], ['borrow', 'view'], ['drop', 'view'], ['drop', 'root']]), [1, True, 0])\ncheck('no lifetime changes', solve([]), [1, True, 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":"18f3338e462657d2a010067b567ac23208ece0f5a5a92f11f5148fa79ee09ef0","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(events):\n    handles, references, destroyed = {'root': True}, 1, 0\n    for kind, identity in events:\n        if kind == 'clone':\n            handles[identity] = True\n            references += 1\n        elif kind == 'borrow':\n            handles[identity] = False\n            references += 1\n        else:\n            owned = handles.pop(identity)\n            if True:\n                references -= 1\n                if references == 0:\n                    destroyed += 1\n    return [references, references > 0, destroyed]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nborrows = [['borrow', 'b'+str(i)] for i in range(N)]\ndrops = [['drop', 'b'+str(i)] for i in range(N)]\ncheck('borrows do not own', solve(borrows), [1, True, 0])\ncheck('dropping borrows preserves owner', solve(borrows+drops), [1, True, 0])\ncheck('last owner can die before borrow record', solve(borrows+[['drop', 'root']]), [0, False, 1])\ncheck('clone keeps object alive', solve([['clone', 'second'], ['drop', 'root']]), [1, True, 0])\ncheck('last cloned owner frees once', solve([['clone', 'second'], ['drop', 'root'], ['drop', 'second']]), [0, False, 1])\ncheck('borrow after extra owner then drops', solve([['clone', 'second'], ['borrow', 'view'], ['drop', 'view'], ['drop', 'root']]), [1, True, 0])\ncheck('no lifetime changes', solve([]), [1, True, 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":"runtime-borrowed-reference-lifetime","generated_at":"2026-09-29T14:36:51.533819+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Models ownership versus borrowed aliases in manual or native resource wrappers, including dangling borrow records after the last owner disappears, without executing unsafe memory access.","root_cause":"Pointer existence is confused with owning-reference lifetime.","sha256":"5c724ea19f2242fca521ab1219c2d8eb3d6aa1c574692ea39bc2199f8d414708","title":"Dropping a borrowed alias destroys a still-owned object · 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":34.876,"exit_code":1,"observations":[{"actual":[1,true,0],"check":"borrows do not own","expected":[1,true,0],"passed":true},{"actual":[0,false,1],"check":"dropping borrows preserves owner","expected":[1,true,0],"passed":false},{"actual":[0,false,1],"check":"last owner can die before borrow record","expected":[0,false,1],"passed":true},{"actual":[1,true,0],"check":"clone keeps object alive","expected":[1,true,0],"passed":true},{"actual":[0,false,1],"check":"last cloned owner frees once","expected":[0,false,1],"passed":true},{"actual":[0,false,1],"check":"borrow after extra owner then drops","expected":[1,true,0],"passed":false},{"actual":[1,true,0],"check":"no lifetime changes","expected":[1,true,0],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"borrows do not own\", \"actual\": [1, true, 0], \"expected\": [1, true, 0], \"passed\": true}, {\"check\": \"dropping borrows preserves owner\", \"actual\": [0, false, 1], \"expected\": [1, true, 0], \"passed\": false}, {\"check\": \"last owner can die before borrow record\", \"actual\": [0, false, 1], \"expected\": [0, false, 1], \"passed\": true}, {\"check\": \"clone keeps object alive\", \"actual\": [1, true, 0], \"expected\": [1, true, 0], \"passed\": true}, {\"check\": \"last cloned owner frees once\", \"actual\": [0, false, 1], \"expected\": [0, false, 1], \"passed\": true}, {\"check\": \"borrow after extra owner then drops\", \"actual\": [0, false, 1], \"expected\": [1, true, 0], \"passed\": false}, {\"check\": \"no lifetime changes\", \"actual\": [1, true, 0], \"expected\": [1, true, 0], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":31.218,"exit_code":1,"observations":[{"actual":[2,true,0],"check":"borrows do not own","expected":[1,true,0],"passed":false},{"actual":[1,true,0],"check":"dropping borrows preserves owner","expected":[1,true,0],"passed":true},{"actual":[1,true,0],"check":"last owner can die before borrow record","expected":[0,false,1],"passed":false},{"actual":[1,true,0],"check":"clone keeps object alive","expected":[1,true,0],"passed":true},{"actual":[0,false,1],"check":"last cloned owner frees once","expected":[0,false,1],"passed":true},{"actual":[1,true,0],"check":"borrow after extra owner then drops","expected":[1,true,0],"passed":true},{"actual":[1,true,0],"check":"no lifetime changes","expected":[1,true,0],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"borrows do not own\", \"actual\": [2, true, 0], \"expected\": [1, true, 0], \"passed\": false}, {\"check\": \"dropping borrows preserves owner\", \"actual\": [1, true, 0], \"expected\": [1, true, 0], \"passed\": true}, {\"check\": \"last owner can die before borrow record\", \"actual\": [1, true, 0], \"expected\": [0, false, 1], \"passed\": false}, {\"check\": \"clone keeps object alive\", \"actual\": [1, true, 0], \"expected\": [1, true, 0], \"passed\": true}, {\"check\": \"last cloned owner frees once\", \"actual\": [0, false, 1], \"expected\": [0, false, 1], \"passed\": true}, {\"check\": \"borrow after extra owner then drops\", \"actual\": [1, true, 0], \"expected\": [1, true, 0], \"passed\": true}, {\"check\": \"no lifetime changes\", \"actual\": [1, true, 0], \"expected\": [1, true, 0], \"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."}}