{"abstract":"Compiler identity is absent from invalidation.","category":"Build systems","checks":32,"contract":"Rebuild if output absent, content digest changed, tool changed, recipe changed, or a prerequisite failed; timestamps alone are irrelevant.","evaluation_group":"xt-rebuild","failed_approach":"The attempted repair substitutes state['tool'] == state['old_tool']. Fixture 17 still yields True instead of False.","family":"xt-rebuild-compiler","id":"FA-9091","implementations":{"attempt":{"sha256":"80fd6849dc796079ff7485ee788c3088a22302708fb1bc08ef98766a5c81ac86","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(state):\n    return (not state['exists'] or state['digest'] != state['old_digest'] or state['tool'] == state['old_tool'] or state['recipe'] != state['old_recipe'] or state['failed'])\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('fixture 1', solve({'exists': False, 'digest': 'a', 'old_digest': 'a', 'tool': 'cc1', 'old_tool': 'cc1', 'recipe': 'r1', 'old_recipe': 'r1', 'failed': False}), True)\ncheck('fixture 2', solve({'exists': False, 'digest': 'a', 'old_digest': 'a', 'tool': 'cc1', 'old_tool': 'cc1', 'recipe': 'r1', 'old_recipe': 'r1', 'failed': True}), True)\ncheck('fixture 3', solve({'exists': False, 'digest': 'a', 'old_digest': 'a', 'tool': 'cc1', 'old_tool': 'cc1', 'recipe': 'r2', 'old_recipe': 'r1', 'failed': False}), True)\ncheck('fixture 4', solve({'exists': False, 'digest': 'a', 'old_digest': 'a', 'tool': 'cc1', 'old_tool': 'cc1', 'recipe': 'r2', 'old_recipe': 'r1', 'failed': True}), True)\ncheck('fixture 5', solve({'exists': False, 'digest': 'a', 'old_digest': 'a', 'tool': 'cc2', 'old_tool': 'cc1', 'recipe': 'r1', 'old_recipe': 'r1', 'failed': False}), True)\ncheck('fixture 6', solve({'exists': False, 'digest': 'a', 'old_digest': 'a', 'tool': 'cc2', 'old_tool': 'cc1', 'recipe': 'r1', 'old_recipe': 'r1', 'failed': True}), True)\ncheck('fixture 7', solve({'exists': False, 'digest': 'a', 'old_digest': 'a', 'tool': 'cc2', 'old_tool': 'cc1', 'recipe': 'r2', 'old_recipe': 'r1', 'failed': False}), True)\ncheck('fixture 8', solve({'exists': False, 'digest': 'a', 'old_digest': 'a', 'tool': 'cc2', 'old_tool': 'cc1', 'recipe': 'r2', 'old_recipe': 'r1', 'failed': True}), True)\ncheck('fixture 9', solve({'exists': False, 'digest': 'b', 'old_digest': 'a', 'tool': 'cc1', 'old_tool': 'cc1', 'recipe': 'r1', 'old_recipe': 'r1', 'failed': False}), True)\ncheck('fixture 10', solve({'exists': False, 'digest': 'b', 'old_digest': 'a', 'tool': 'cc1', 'old_tool': 'cc1', 'recipe': 'r1', 'old_recipe': 'r1', 'failed': True}), True)\ncheck('fixture 11', solve({'exists': False, 'digest': 'b', 'old_digest': 'a', 'tool': 'cc1', 'old_tool': 'cc1', 'recipe': 'r2', 'old_recipe': 'r1', 'failed': False}), True)\ncheck('fixture 12', solve({'exists': False, 'digest': 'b', 'old_digest': 'a', 'tool': 'cc1', 'old_tool': 'cc1', 'recipe': 'r2', 'old_recipe': 'r1', 'failed': True}), True)\ncheck('fixture 13', solve({'exists': False, 'digest': 'b', 'old_digest': 'a', 'tool': 'cc2', 'old_tool': 'cc1', 'recipe': 'r1', 'old_recipe': 'r1', 'failed': False}), True)\ncheck('fixture 14', solve({'exists': False, 'digest': 'b', 'old_digest': 'a', 'tool': 'cc2', 'old_tool': 'cc1', 'recipe': 'r1', 'old_recipe': 'r1', 'failed': True}), True)\ncheck('fixture 15', solve({'exists': False, 'digest': 'b', 'old_digest': 'a', 'tool': 'cc2', 'old_tool': 'cc1', 'recipe': 'r2', 'old_recipe': 'r1', 'failed': False}), True)\ncheck('fixture 16', solve({'exists': False, 'digest': 'b', 'old_digest': 'a', 'tool': 'cc2', 'old_tool': 'cc1', 'recipe': 'r2', 'old_recipe': 'r1', 'failed': True}), True)\ncheck('fixture 17', solve({'exists': True, 'digest': 'a', 'old_digest': 'a', 'tool': 'cc1', 'old_tool': 'cc1', 'recipe': 'r1', 'old_recipe': 'r1', 'failed': False}), False)\ncheck('fixture 18', solve({'exists': True, 'digest': 'a', 'old_digest': 'a', 'tool': 'cc1', 'old_tool': 'cc1', 'recipe': 'r1', 'old_recipe': 'r1', 'failed': True}), True)\ncheck('fixture 19', solve({'exists': True, 'digest': 'a', 'old_digest': 'a', 'tool': 'cc1', 'old_tool': 'cc1', 'recipe': 'r2', 'old_recipe': 'r1', 'failed': False}), True)\ncheck('fixture 20', solve({'exists': True, 'digest': 'a', 'old_digest': 'a', 'tool': 'cc1', 'old_tool': 'cc1', 'recipe': 'r2', 'old_recipe': 'r1', 'failed': True}), True)\ncheck('fixture 21', solve({'exists': True, 'digest': 'a', 'old_digest': 'a', 'tool': 'cc2', 'old_tool': 'cc1', 'recipe': 'r1', 'old_recipe': 'r1', 'failed': False}), True)\ncheck('fixture 22', solve({'exists': True, 'digest': 'a', 'old_digest': 'a', 'tool': 'cc2', 'old_tool': 'cc1', 'recipe': 'r1', 'old_recipe': 'r1', 'failed': True}), True)\ncheck('fixture 23', solve({'exists': True, 'digest': 'a', 'old_digest': 'a', 'tool': 'cc2', 'old_tool': 'cc1', 'recipe': 'r2', 'old_recipe': 'r1', 'failed': False}), True)\ncheck('fixture 24', solve({'exists': True, 'digest': 'a', 'old_digest': 'a', 'tool': 'cc2', 'old_tool': 'cc1', 'recipe': 'r2', 'old_recipe': 'r1', 'failed': True}), True)\ncheck('fixture 25', solve({'exists': True, 'digest': 'b', 'old_digest': 'a', 'tool': 'cc1', 'old_tool': 'cc1', 'recipe': 'r1', 'old_recipe': 'r1', 'failed': False}), True)\ncheck('fixture 26', solve({'exists': True, 'digest': 'b', 'old_digest': 'a', 'tool': 'cc1', 'old_tool': 'cc1', 'recipe': 'r1', 'old_recipe': 'r1', 'failed': True}), True)\ncheck('fixture 27', solve({'exists': True, 'digest': 'b', 'old_digest': 'a', 'tool': 'cc1', 'old_tool': 'cc1', 'recipe': 'r2', 'old_recipe': 'r1', 'failed': False}), True)\ncheck('fixture 28', solve({'exists': True, 'digest': 'b', 'old_digest': 'a', 'tool': 'cc1', 'old_tool': 'cc1', 'recipe': 'r2', 'old_recipe': 'r1', 'failed': True}), True)\ncheck('fixture 29', solve({'exists': True, 'digest': 'b', 'old_digest': 'a', 'tool': 'cc2', 'old_tool': 'cc1', 'recipe': 'r1', 'old_recipe': 'r1', 'failed': False}), True)\ncheck('fixture 30', solve({'exists': True, 'digest': 'b', 'old_digest': 'a', 'tool': 'cc2', 'old_tool': 'cc1', 'recipe': 'r1', 'old_recipe': 'r1', 'failed': True}), True)\ncheck('fixture 31', solve({'exists': True, 'digest': 'b', 'old_digest': 'a', 'tool': 'cc2', 'old_tool': 'cc1', 'recipe': 'r2', 'old_recipe': 'r1', 'failed': False}), True)\ncheck('fixture 32', solve({'exists': True, 'digest': 'b', 'old_digest': 'a', 'tool': 'cc2', 'old_tool': 'cc1', 'recipe': 'r2', 'old_recipe': 'r1', 'failed': True}), True)\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":"a9ac677bb7aed463dabd685c9c3ba75096cb3ce1789a7e836be49d9d087165fa","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(state):\n    return (not state['exists'] or state['digest'] != state['old_digest'] or False or state['recipe'] != state['old_recipe'] or state['failed'])\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('fixture 1', solve({'exists': False, 'digest': 'a', 'old_digest': 'a', 'tool': 'cc1', 'old_tool': 'cc1', 'recipe': 'r1', 'old_recipe': 'r1', 'failed': False}), True)\ncheck('fixture 2', solve({'exists': False, 'digest': 'a', 'old_digest': 'a', 'tool': 'cc1', 'old_tool': 'cc1', 'recipe': 'r1', 'old_recipe': 'r1', 'failed': True}), True)\ncheck('fixture 3', solve({'exists': False, 'digest': 'a', 'old_digest': 'a', 'tool': 'cc1', 'old_tool': 'cc1', 'recipe': 'r2', 'old_recipe': 'r1', 'failed': False}), True)\ncheck('fixture 4', solve({'exists': False, 'digest': 'a', 'old_digest': 'a', 'tool': 'cc1', 'old_tool': 'cc1', 'recipe': 'r2', 'old_recipe': 'r1', 'failed': True}), True)\ncheck('fixture 5', solve({'exists': False, 'digest': 'a', 'old_digest': 'a', 'tool': 'cc2', 'old_tool': 'cc1', 'recipe': 'r1', 'old_recipe': 'r1', 'failed': False}), True)\ncheck('fixture 6', solve({'exists': False, 'digest': 'a', 'old_digest': 'a', 'tool': 'cc2', 'old_tool': 'cc1', 'recipe': 'r1', 'old_recipe': 'r1', 'failed': True}), True)\ncheck('fixture 7', solve({'exists': False, 'digest': 'a', 'old_digest': 'a', 'tool': 'cc2', 'old_tool': 'cc1', 'recipe': 'r2', 'old_recipe': 'r1', 'failed': False}), True)\ncheck('fixture 8', solve({'exists': False, 'digest': 'a', 'old_digest': 'a', 'tool': 'cc2', 'old_tool': 'cc1', 'recipe': 'r2', 'old_recipe': 'r1', 'failed': True}), True)\ncheck('fixture 9', solve({'exists': False, 'digest': 'b', 'old_digest': 'a', 'tool': 'cc1', 'old_tool': 'cc1', 'recipe': 'r1', 'old_recipe': 'r1', 'failed': False}), True)\ncheck('fixture 10', solve({'exists': False, 'digest': 'b', 'old_digest': 'a', 'tool': 'cc1', 'old_tool': 'cc1', 'recipe': 'r1', 'old_recipe': 'r1', 'failed': True}), True)\ncheck('fixture 11', solve({'exists': False, 'digest': 'b', 'old_digest': 'a', 'tool': 'cc1', 'old_tool': 'cc1', 'recipe': 'r2', 'old_recipe': 'r1', 'failed': False}), True)\ncheck('fixture 12', solve({'exists': False, 'digest': 'b', 'old_digest': 'a', 'tool': 'cc1', 'old_tool': 'cc1', 'recipe': 'r2', 'old_recipe': 'r1', 'failed': True}), True)\ncheck('fixture 13', solve({'exists': False, 'digest': 'b', 'old_digest': 'a', 'tool': 'cc2', 'old_tool': 'cc1', 'recipe': 'r1', 'old_recipe': 'r1', 'failed': False}), True)\ncheck('fixture 14', solve({'exists': False, 'digest': 'b', 'old_digest': 'a', 'tool': 'cc2', 'old_tool': 'cc1', 'recipe': 'r1', 'old_recipe': 'r1', 'failed': True}), True)\ncheck('fixture 15', solve({'exists': False, 'digest': 'b', 'old_digest': 'a', 'tool': 'cc2', 'old_tool': 'cc1', 'recipe': 'r2', 'old_recipe': 'r1', 'failed': False}), True)\ncheck('fixture 16', solve({'exists': False, 'digest': 'b', 'old_digest': 'a', 'tool': 'cc2', 'old_tool': 'cc1', 'recipe': 'r2', 'old_recipe': 'r1', 'failed': True}), True)\ncheck('fixture 17', solve({'exists': True, 'digest': 'a', 'old_digest': 'a', 'tool': 'cc1', 'old_tool': 'cc1', 'recipe': 'r1', 'old_recipe': 'r1', 'failed': False}), False)\ncheck('fixture 18', solve({'exists': True, 'digest': 'a', 'old_digest': 'a', 'tool': 'cc1', 'old_tool': 'cc1', 'recipe': 'r1', 'old_recipe': 'r1', 'failed': True}), True)\ncheck('fixture 19', solve({'exists': True, 'digest': 'a', 'old_digest': 'a', 'tool': 'cc1', 'old_tool': 'cc1', 'recipe': 'r2', 'old_recipe': 'r1', 'failed': False}), True)\ncheck('fixture 20', solve({'exists': True, 'digest': 'a', 'old_digest': 'a', 'tool': 'cc1', 'old_tool': 'cc1', 'recipe': 'r2', 'old_recipe': 'r1', 'failed': True}), True)\ncheck('fixture 21', solve({'exists': True, 'digest': 'a', 'old_digest': 'a', 'tool': 'cc2', 'old_tool': 'cc1', 'recipe': 'r1', 'old_recipe': 'r1', 'failed': False}), True)\ncheck('fixture 22', solve({'exists': True, 'digest': 'a', 'old_digest': 'a', 'tool': 'cc2', 'old_tool': 'cc1', 'recipe': 'r1', 'old_recipe': 'r1', 'failed': True}), True)\ncheck('fixture 23', solve({'exists': True, 'digest': 'a', 'old_digest': 'a', 'tool': 'cc2', 'old_tool': 'cc1', 'recipe': 'r2', 'old_recipe': 'r1', 'failed': False}), True)\ncheck('fixture 24', solve({'exists': True, 'digest': 'a', 'old_digest': 'a', 'tool': 'cc2', 'old_tool': 'cc1', 'recipe': 'r2', 'old_recipe': 'r1', 'failed': True}), True)\ncheck('fixture 25', solve({'exists': True, 'digest': 'b', 'old_digest': 'a', 'tool': 'cc1', 'old_tool': 'cc1', 'recipe': 'r1', 'old_recipe': 'r1', 'failed': False}), True)\ncheck('fixture 26', solve({'exists': True, 'digest': 'b', 'old_digest': 'a', 'tool': 'cc1', 'old_tool': 'cc1', 'recipe': 'r1', 'old_recipe': 'r1', 'failed': True}), True)\ncheck('fixture 27', solve({'exists': True, 'digest': 'b', 'old_digest': 'a', 'tool': 'cc1', 'old_tool': 'cc1', 'recipe': 'r2', 'old_recipe': 'r1', 'failed': False}), True)\ncheck('fixture 28', solve({'exists': True, 'digest': 'b', 'old_digest': 'a', 'tool': 'cc1', 'old_tool': 'cc1', 'recipe': 'r2', 'old_recipe': 'r1', 'failed': True}), True)\ncheck('fixture 29', solve({'exists': True, 'digest': 'b', 'old_digest': 'a', 'tool': 'cc2', 'old_tool': 'cc1', 'recipe': 'r1', 'old_recipe': 'r1', 'failed': False}), True)\ncheck('fixture 30', solve({'exists': True, 'digest': 'b', 'old_digest': 'a', 'tool': 'cc2', 'old_tool': 'cc1', 'recipe': 'r1', 'old_recipe': 'r1', 'failed': True}), True)\ncheck('fixture 31', solve({'exists': True, 'digest': 'b', 'old_digest': 'a', 'tool': 'cc2', 'old_tool': 'cc1', 'recipe': 'r2', 'old_recipe': 'r1', 'failed': False}), True)\ncheck('fixture 32', solve({'exists': True, 'digest': 'b', 'old_digest': 'a', 'tool': 'cc2', 'old_tool': 'cc1', 'recipe': 'r2', 'old_recipe': 'r1', 'failed': True}), True)\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":"3f10f8d55f1744d83f8c9a11cfd81a7be839b88ae17e1a36df07b81333b276da","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(state):\n    return (not state['exists'] or state['digest'] != state['old_digest'] or state['tool'] != state['old_tool'] or state['recipe'] != state['old_recipe'] or state['failed'])\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('fixture 1', solve({'exists': False, 'digest': 'a', 'old_digest': 'a', 'tool': 'cc1', 'old_tool': 'cc1', 'recipe': 'r1', 'old_recipe': 'r1', 'failed': False}), True)\ncheck('fixture 2', solve({'exists': False, 'digest': 'a', 'old_digest': 'a', 'tool': 'cc1', 'old_tool': 'cc1', 'recipe': 'r1', 'old_recipe': 'r1', 'failed': True}), True)\ncheck('fixture 3', solve({'exists': False, 'digest': 'a', 'old_digest': 'a', 'tool': 'cc1', 'old_tool': 'cc1', 'recipe': 'r2', 'old_recipe': 'r1', 'failed': False}), True)\ncheck('fixture 4', solve({'exists': False, 'digest': 'a', 'old_digest': 'a', 'tool': 'cc1', 'old_tool': 'cc1', 'recipe': 'r2', 'old_recipe': 'r1', 'failed': True}), True)\ncheck('fixture 5', solve({'exists': False, 'digest': 'a', 'old_digest': 'a', 'tool': 'cc2', 'old_tool': 'cc1', 'recipe': 'r1', 'old_recipe': 'r1', 'failed': False}), True)\ncheck('fixture 6', solve({'exists': False, 'digest': 'a', 'old_digest': 'a', 'tool': 'cc2', 'old_tool': 'cc1', 'recipe': 'r1', 'old_recipe': 'r1', 'failed': True}), True)\ncheck('fixture 7', solve({'exists': False, 'digest': 'a', 'old_digest': 'a', 'tool': 'cc2', 'old_tool': 'cc1', 'recipe': 'r2', 'old_recipe': 'r1', 'failed': False}), True)\ncheck('fixture 8', solve({'exists': False, 'digest': 'a', 'old_digest': 'a', 'tool': 'cc2', 'old_tool': 'cc1', 'recipe': 'r2', 'old_recipe': 'r1', 'failed': True}), True)\ncheck('fixture 9', solve({'exists': False, 'digest': 'b', 'old_digest': 'a', 'tool': 'cc1', 'old_tool': 'cc1', 'recipe': 'r1', 'old_recipe': 'r1', 'failed': False}), True)\ncheck('fixture 10', solve({'exists': False, 'digest': 'b', 'old_digest': 'a', 'tool': 'cc1', 'old_tool': 'cc1', 'recipe': 'r1', 'old_recipe': 'r1', 'failed': True}), True)\ncheck('fixture 11', solve({'exists': False, 'digest': 'b', 'old_digest': 'a', 'tool': 'cc1', 'old_tool': 'cc1', 'recipe': 'r2', 'old_recipe': 'r1', 'failed': False}), True)\ncheck('fixture 12', solve({'exists': False, 'digest': 'b', 'old_digest': 'a', 'tool': 'cc1', 'old_tool': 'cc1', 'recipe': 'r2', 'old_recipe': 'r1', 'failed': True}), True)\ncheck('fixture 13', solve({'exists': False, 'digest': 'b', 'old_digest': 'a', 'tool': 'cc2', 'old_tool': 'cc1', 'recipe': 'r1', 'old_recipe': 'r1', 'failed': False}), True)\ncheck('fixture 14', solve({'exists': False, 'digest': 'b', 'old_digest': 'a', 'tool': 'cc2', 'old_tool': 'cc1', 'recipe': 'r1', 'old_recipe': 'r1', 'failed': True}), True)\ncheck('fixture 15', solve({'exists': False, 'digest': 'b', 'old_digest': 'a', 'tool': 'cc2', 'old_tool': 'cc1', 'recipe': 'r2', 'old_recipe': 'r1', 'failed': False}), True)\ncheck('fixture 16', solve({'exists': False, 'digest': 'b', 'old_digest': 'a', 'tool': 'cc2', 'old_tool': 'cc1', 'recipe': 'r2', 'old_recipe': 'r1', 'failed': True}), True)\ncheck('fixture 17', solve({'exists': True, 'digest': 'a', 'old_digest': 'a', 'tool': 'cc1', 'old_tool': 'cc1', 'recipe': 'r1', 'old_recipe': 'r1', 'failed': False}), False)\ncheck('fixture 18', solve({'exists': True, 'digest': 'a', 'old_digest': 'a', 'tool': 'cc1', 'old_tool': 'cc1', 'recipe': 'r1', 'old_recipe': 'r1', 'failed': True}), True)\ncheck('fixture 19', solve({'exists': True, 'digest': 'a', 'old_digest': 'a', 'tool': 'cc1', 'old_tool': 'cc1', 'recipe': 'r2', 'old_recipe': 'r1', 'failed': False}), True)\ncheck('fixture 20', solve({'exists': True, 'digest': 'a', 'old_digest': 'a', 'tool': 'cc1', 'old_tool': 'cc1', 'recipe': 'r2', 'old_recipe': 'r1', 'failed': True}), True)\ncheck('fixture 21', solve({'exists': True, 'digest': 'a', 'old_digest': 'a', 'tool': 'cc2', 'old_tool': 'cc1', 'recipe': 'r1', 'old_recipe': 'r1', 'failed': False}), True)\ncheck('fixture 22', solve({'exists': True, 'digest': 'a', 'old_digest': 'a', 'tool': 'cc2', 'old_tool': 'cc1', 'recipe': 'r1', 'old_recipe': 'r1', 'failed': True}), True)\ncheck('fixture 23', solve({'exists': True, 'digest': 'a', 'old_digest': 'a', 'tool': 'cc2', 'old_tool': 'cc1', 'recipe': 'r2', 'old_recipe': 'r1', 'failed': False}), True)\ncheck('fixture 24', solve({'exists': True, 'digest': 'a', 'old_digest': 'a', 'tool': 'cc2', 'old_tool': 'cc1', 'recipe': 'r2', 'old_recipe': 'r1', 'failed': True}), True)\ncheck('fixture 25', solve({'exists': True, 'digest': 'b', 'old_digest': 'a', 'tool': 'cc1', 'old_tool': 'cc1', 'recipe': 'r1', 'old_recipe': 'r1', 'failed': False}), True)\ncheck('fixture 26', solve({'exists': True, 'digest': 'b', 'old_digest': 'a', 'tool': 'cc1', 'old_tool': 'cc1', 'recipe': 'r1', 'old_recipe': 'r1', 'failed': True}), True)\ncheck('fixture 27', solve({'exists': True, 'digest': 'b', 'old_digest': 'a', 'tool': 'cc1', 'old_tool': 'cc1', 'recipe': 'r2', 'old_recipe': 'r1', 'failed': False}), True)\ncheck('fixture 28', solve({'exists': True, 'digest': 'b', 'old_digest': 'a', 'tool': 'cc1', 'old_tool': 'cc1', 'recipe': 'r2', 'old_recipe': 'r1', 'failed': True}), True)\ncheck('fixture 29', solve({'exists': True, 'digest': 'b', 'old_digest': 'a', 'tool': 'cc2', 'old_tool': 'cc1', 'recipe': 'r1', 'old_recipe': 'r1', 'failed': False}), True)\ncheck('fixture 30', solve({'exists': True, 'digest': 'b', 'old_digest': 'a', 'tool': 'cc2', 'old_tool': 'cc1', 'recipe': 'r1', 'old_recipe': 'r1', 'failed': True}), True)\ncheck('fixture 31', solve({'exists': True, 'digest': 'b', 'old_digest': 'a', 'tool': 'cc2', 'old_tool': 'cc1', 'recipe': 'r2', 'old_recipe': 'r1', 'failed': False}), True)\ncheck('fixture 32', solve({'exists': True, 'digest': 'b', 'old_digest': 'a', 'tool': 'cc2', 'old_tool': 'cc1', 'recipe': 'r2', 'old_recipe': 'r1', 'failed': True}), True)\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":"xt-rebuild-compiler","generated_at":"2026-09-29T14:38:26.928599+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"An offline model of incremental rebuild decision, suitable for testing build and release tooling without external services.","repair":"Invalidate when the compiler identity changes.","root_cause":"The implementation substitutes False for state['tool'] != state['old_tool'], so compiler identity is absent from invalidation.","sha256":"83055f906c86e45ba4ce46e6aa8ce63ae13c3c2f7e32772d20200a16c07ca258","title":"Incremental rebuild decision: Compiler identity is absent from invalidation · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":38.621,"exit_code":1,"observations":[{"actual":true,"check":"fixture 1","expected":true,"passed":true},{"actual":true,"check":"fixture 2","expected":true,"passed":true},{"actual":true,"check":"fixture 3","expected":true,"passed":true},{"actual":true,"check":"fixture 4","expected":true,"passed":true},{"actual":true,"check":"fixture 5","expected":true,"passed":true},{"actual":true,"check":"fixture 6","expected":true,"passed":true},{"actual":true,"check":"fixture 7","expected":true,"passed":true},{"actual":true,"check":"fixture 8","expected":true,"passed":true},{"actual":true,"check":"fixture 9","expected":true,"passed":true},{"actual":true,"check":"fixture 10","expected":true,"passed":true},{"actual":true,"check":"fixture 11","expected":true,"passed":true},{"actual":true,"check":"fixture 12","expected":true,"passed":true},{"actual":true,"check":"fixture 13","expected":true,"passed":true},{"actual":true,"check":"fixture 14","expected":true,"passed":true},{"actual":true,"check":"fixture 15","expected":true,"passed":true},{"actual":true,"check":"fixture 16","expected":true,"passed":true},{"actual":true,"check":"fixture 17","expected":false,"passed":false},{"actual":true,"check":"fixture 18","expected":true,"passed":true},{"actual":true,"check":"fixture 19","expected":true,"passed":true},{"actual":true,"check":"fixture 20","expected":true,"passed":true},{"actual":false,"check":"fixture 21","expected":true,"passed":false},{"actual":true,"check":"fixture 22","expected":true,"passed":true},{"actual":true,"check":"fixture 23","expected":true,"passed":true},{"actual":true,"check":"fixture 24","expected":true,"passed":true},{"actual":true,"check":"fixture 25","expected":true,"passed":true},{"actual":true,"check":"fixture 26","expected":true,"passed":true},{"actual":true,"check":"fixture 27","expected":true,"passed":true},{"actual":true,"check":"fixture 28","expected":true,"passed":true},{"actual":true,"check":"fixture 29","expected":true,"passed":true},{"actual":true,"check":"fixture 30","expected":true,"passed":true},{"actual":true,"check":"fixture 31","expected":true,"passed":true},{"actual":true,"check":"fixture 32","expected":true,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"fixture 1\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 2\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 3\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 4\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 5\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 6\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 7\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 8\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 9\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 10\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 11\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 12\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 13\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 14\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 15\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 16\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 17\", \"actual\": true, \"expected\": false, \"passed\": false}, {\"check\": \"fixture 18\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 19\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 20\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 21\", \"actual\": false, \"expected\": true, \"passed\": false}, {\"check\": \"fixture 22\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 23\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 24\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 25\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 26\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 27\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 28\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 29\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 30\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 31\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 32\", \"actual\": true, \"expected\": true, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":38.089,"exit_code":1,"observations":[{"actual":true,"check":"fixture 1","expected":true,"passed":true},{"actual":true,"check":"fixture 2","expected":true,"passed":true},{"actual":true,"check":"fixture 3","expected":true,"passed":true},{"actual":true,"check":"fixture 4","expected":true,"passed":true},{"actual":true,"check":"fixture 5","expected":true,"passed":true},{"actual":true,"check":"fixture 6","expected":true,"passed":true},{"actual":true,"check":"fixture 7","expected":true,"passed":true},{"actual":true,"check":"fixture 8","expected":true,"passed":true},{"actual":true,"check":"fixture 9","expected":true,"passed":true},{"actual":true,"check":"fixture 10","expected":true,"passed":true},{"actual":true,"check":"fixture 11","expected":true,"passed":true},{"actual":true,"check":"fixture 12","expected":true,"passed":true},{"actual":true,"check":"fixture 13","expected":true,"passed":true},{"actual":true,"check":"fixture 14","expected":true,"passed":true},{"actual":true,"check":"fixture 15","expected":true,"passed":true},{"actual":true,"check":"fixture 16","expected":true,"passed":true},{"actual":false,"check":"fixture 17","expected":false,"passed":true},{"actual":true,"check":"fixture 18","expected":true,"passed":true},{"actual":true,"check":"fixture 19","expected":true,"passed":true},{"actual":true,"check":"fixture 20","expected":true,"passed":true},{"actual":false,"check":"fixture 21","expected":true,"passed":false},{"actual":true,"check":"fixture 22","expected":true,"passed":true},{"actual":true,"check":"fixture 23","expected":true,"passed":true},{"actual":true,"check":"fixture 24","expected":true,"passed":true},{"actual":true,"check":"fixture 25","expected":true,"passed":true},{"actual":true,"check":"fixture 26","expected":true,"passed":true},{"actual":true,"check":"fixture 27","expected":true,"passed":true},{"actual":true,"check":"fixture 28","expected":true,"passed":true},{"actual":true,"check":"fixture 29","expected":true,"passed":true},{"actual":true,"check":"fixture 30","expected":true,"passed":true},{"actual":true,"check":"fixture 31","expected":true,"passed":true},{"actual":true,"check":"fixture 32","expected":true,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"fixture 1\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 2\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 3\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 4\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 5\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 6\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 7\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 8\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 9\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 10\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 11\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 12\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 13\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 14\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 15\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 16\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 17\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"fixture 18\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 19\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 20\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 21\", \"actual\": false, \"expected\": true, \"passed\": false}, {\"check\": \"fixture 22\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 23\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 24\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 25\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 26\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 27\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 28\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 29\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 30\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 31\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 32\", \"actual\": true, \"expected\": true, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":38.446,"exit_code":0,"observations":[{"actual":true,"check":"fixture 1","expected":true,"passed":true},{"actual":true,"check":"fixture 2","expected":true,"passed":true},{"actual":true,"check":"fixture 3","expected":true,"passed":true},{"actual":true,"check":"fixture 4","expected":true,"passed":true},{"actual":true,"check":"fixture 5","expected":true,"passed":true},{"actual":true,"check":"fixture 6","expected":true,"passed":true},{"actual":true,"check":"fixture 7","expected":true,"passed":true},{"actual":true,"check":"fixture 8","expected":true,"passed":true},{"actual":true,"check":"fixture 9","expected":true,"passed":true},{"actual":true,"check":"fixture 10","expected":true,"passed":true},{"actual":true,"check":"fixture 11","expected":true,"passed":true},{"actual":true,"check":"fixture 12","expected":true,"passed":true},{"actual":true,"check":"fixture 13","expected":true,"passed":true},{"actual":true,"check":"fixture 14","expected":true,"passed":true},{"actual":true,"check":"fixture 15","expected":true,"passed":true},{"actual":true,"check":"fixture 16","expected":true,"passed":true},{"actual":false,"check":"fixture 17","expected":false,"passed":true},{"actual":true,"check":"fixture 18","expected":true,"passed":true},{"actual":true,"check":"fixture 19","expected":true,"passed":true},{"actual":true,"check":"fixture 20","expected":true,"passed":true},{"actual":true,"check":"fixture 21","expected":true,"passed":true},{"actual":true,"check":"fixture 22","expected":true,"passed":true},{"actual":true,"check":"fixture 23","expected":true,"passed":true},{"actual":true,"check":"fixture 24","expected":true,"passed":true},{"actual":true,"check":"fixture 25","expected":true,"passed":true},{"actual":true,"check":"fixture 26","expected":true,"passed":true},{"actual":true,"check":"fixture 27","expected":true,"passed":true},{"actual":true,"check":"fixture 28","expected":true,"passed":true},{"actual":true,"check":"fixture 29","expected":true,"passed":true},{"actual":true,"check":"fixture 30","expected":true,"passed":true},{"actual":true,"check":"fixture 31","expected":true,"passed":true},{"actual":true,"check":"fixture 32","expected":true,"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"fixture 1\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 2\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 3\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 4\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 5\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 6\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 7\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 8\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 9\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 10\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 11\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 12\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 13\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 14\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 15\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 16\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 17\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"fixture 18\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 19\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 20\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 21\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 22\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 23\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 24\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 25\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 26\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 27\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 28\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 29\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 30\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 31\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"fixture 32\", \"actual\": true, \"expected\": true, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}