{"abstract":"Changes an AttributeError getter into ValueError so fallback no longer runs and changes the required Python-language result.","category":"Descriptor lookup","checks":4,"contract":"Read attributes normally: instance attributes override plain class values; __getattr__ supplies missing:name only after AttributeError, including AttributeError from a property getter. Inputs use the finite Python types shown in the fixtures. An error string denotes the specified caught exception, not an unhandled process failure.","evaluation_group":"xl-getattr-fallback","failed_approach":"The alternative still fails because it returns a constant fallback instead of the requested missing attribute name.","family":"xl-getattr-fallback-wrong-getter-exception","id":"FA-5021","implementations":{"attempt":{"sha256":"d3011d92c124d6a6f7c612a3b429973cad446fd32adda7094c7ca15446e65482","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(values, names):\n    class C:\n        present='class-value'\n        @property\n        def trouble(self):\n            raise AttributeError('getter failed')\n        def __getattr__(self,name):\n            return 'missing'\n    c=C(); c.__dict__.update(values)\n    out=[]\n    for name in names:\n        try: out.append(getattr(c,name))\n        except Exception as exc: out.append(type(exc).__name__)\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('existing class and missing', solve({}, ['present', 'other']), ['class-value', 'missing:other'])\ncheck('instance override', solve({'present': 0}, ['present']), [0])\ncheck('property AttributeError falls back', solve({}, ['trouble']), ['missing:trouble'])\ncheck('stored None is present', solve({'other': None}, ['other', 'absent']), [None, 'missing:absent'])\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":"6861819fa2c91f44e8872a444b252c884117233c51a0cee14d0c83cdf3b5be1e","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(values, names):\n    class C:\n        present='class-value'\n        @property\n        def trouble(self):\n            raise ValueError('getter failed')\n        def __getattr__(self,name):\n            return 'missing:'+name\n    c=C(); c.__dict__.update(values)\n    out=[]\n    for name in names:\n        try: out.append(getattr(c,name))\n        except Exception as exc: out.append(type(exc).__name__)\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('existing class and missing', solve({}, ['present', 'other']), ['class-value', 'missing:other'])\ncheck('instance override', solve({'present': 0}, ['present']), [0])\ncheck('property AttributeError falls back', solve({}, ['trouble']), ['missing:trouble'])\ncheck('stored None is present', solve({'other': None}, ['other', 'absent']), [None, 'missing:absent'])\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":"daf8bbfad47d494e507e263e1c2c755301ceb7f00533587abcc6861b0942c8a2","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(values, names):\n    class C:\n        present='class-value'\n        @property\n        def trouble(self):\n            raise AttributeError('getter failed')\n        def __getattr__(self,name):\n            return 'missing:'+name\n    c=C(); c.__dict__.update(values)\n    out=[]\n    for name in names:\n        try: out.append(getattr(c,name))\n        except Exception as exc: out.append(type(exc).__name__)\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('existing class and missing', solve({}, ['present', 'other']), ['class-value', 'missing:other'])\ncheck('instance override', solve({'present': 0}, ['present']), [0])\ncheck('property AttributeError falls back', solve({}, ['trouble']), ['missing:trouble'])\ncheck('stored None is present', solve({'other': None}, ['other', 'absent']), [None, 'missing:absent'])\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":"xl-getattr-fallback-wrong-getter-exception","generated_at":"2026-09-29T14:37:45.220551+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Runs Python standard-library language operations in a deterministic local reproducer. Literal expected answers are authored independently. Related defects share an evaluation group to avoid benchmark split leakage.","repair":"Read attributes normally: instance attributes override plain class values; __getattr__ supplies missing:name only after AttributeError, including AttributeError from a property getter.","root_cause":"Changes an AttributeError getter into ValueError so fallback no longer runs. The executable reproducer isolates this operation from the rest of the contract.","sha256":"6f8dcea6b4539d58f53099931f7b4c7b7f21a794bf05e8424e0d9ce92c4bf1bc","title":"Getattr fallback: Changes an AttributeError getter into ValueError so fallback no longer runs · case 01","variant":1,"variant_policy":"The five numbered cases rerun the same authored boundary fixtures; they are reproducibility runs, not independent input variants.","verification":{"attempt":{"elapsed_ms":118.531,"exit_code":1,"observations":[{"actual":["class-value","missing"],"check":"existing class and missing","expected":["class-value","missing:other"],"passed":false},{"actual":[0],"check":"instance override","expected":[0],"passed":true},{"actual":["missing"],"check":"property AttributeError falls back","expected":["missing:trouble"],"passed":false},{"actual":[null,"missing"],"check":"stored None is present","expected":[null,"missing:absent"],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"existing class and missing\", \"actual\": [\"class-value\", \"missing\"], \"expected\": [\"class-value\", \"missing:other\"], \"passed\": false}, {\"check\": \"instance override\", \"actual\": [0], \"expected\": [0], \"passed\": true}, {\"check\": \"property AttributeError falls back\", \"actual\": [\"missing\"], \"expected\": [\"missing:trouble\"], \"passed\": false}, {\"check\": \"stored None is present\", \"actual\": [null, \"missing\"], \"expected\": [null, \"missing:absent\"], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":37.648,"exit_code":1,"observations":[{"actual":["class-value","missing:other"],"check":"existing class and missing","expected":["class-value","missing:other"],"passed":true},{"actual":[0],"check":"instance override","expected":[0],"passed":true},{"actual":["ValueError"],"check":"property AttributeError falls back","expected":["missing:trouble"],"passed":false},{"actual":[null,"missing:absent"],"check":"stored None is present","expected":[null,"missing:absent"],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"existing class and missing\", \"actual\": [\"class-value\", \"missing:other\"], \"expected\": [\"class-value\", \"missing:other\"], \"passed\": true}, {\"check\": \"instance override\", \"actual\": [0], \"expected\": [0], \"passed\": true}, {\"check\": \"property AttributeError falls back\", \"actual\": [\"ValueError\"], \"expected\": [\"missing:trouble\"], \"passed\": false}, {\"check\": \"stored None is present\", \"actual\": [null, \"missing:absent\"], \"expected\": [null, \"missing:absent\"], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":38.458,"exit_code":0,"observations":[{"actual":["class-value","missing:other"],"check":"existing class and missing","expected":["class-value","missing:other"],"passed":true},{"actual":[0],"check":"instance override","expected":[0],"passed":true},{"actual":["missing:trouble"],"check":"property AttributeError falls back","expected":["missing:trouble"],"passed":true},{"actual":[null,"missing:absent"],"check":"stored None is present","expected":[null,"missing:absent"],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"existing class and missing\", \"actual\": [\"class-value\", \"missing:other\"], \"expected\": [\"class-value\", \"missing:other\"], \"passed\": true}, {\"check\": \"instance override\", \"actual\": [0], \"expected\": [0], \"passed\": true}, {\"check\": \"property AttributeError falls back\", \"actual\": [\"missing:trouble\"], \"expected\": [\"missing:trouble\"], \"passed\": true}, {\"check\": \"stored None is present\", \"actual\": [null, \"missing:absent\"], \"expected\": [null, \"missing:absent\"], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}