{"abstract":"Debug output says a flag failed its own prerequisite instead of naming the blocking dependency.","category":"Feature flag rollout bucketing","checks":8,"contract":"flags maps key -> {on, off, serve, prereqs:[[key, required variation]]}. Missing flags yield [None, MISSING, key]; revisiting a flag on the current path yields [None, CYCLE, key] (checked before on/off). An off flag serves [off, OFF, None]. Prerequisites are evaluated in order; MISSING/CYCLE results propagate unchanged; the first prerequisite that is OFF or serves a different variation stops evaluation with [off, PREREQUISITE_FAILED, that prerequisite key]. A prerequisite that itself failed counts as serving its off variation. Otherwise [serve, ON, None].","evaluation_group":"w2-feature-flag-rollout-bucketing-prerequisite-chain","failed_approach":"Propagating the prerequisite result detail yields None for simply-off prerequisites and deep keys otherwise.","family":"w2-feature-flag-rollout-bucketing-prerequisite-chain-failure-detail","id":"FA-73921","implementations":{"attempt":{"sha256":"dfb18f2beb2f8329255321d40d444ad26f04ca3189dc8ce5635c2e84f2b744b8","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(flags, name):\n    def ev(key, stack):\n        f = flags.get(key)\n        if f is None:\n            return [None, 'MISSING', key]\n        if key in stack:\n            return [None, 'CYCLE', key]\n        if not f['on']:\n            return [f['off'], 'OFF', None]\n        for pre, want in f.get('prereqs', []):\n            got = ev(pre, stack + [key])\n            if got[1] in ('MISSING', 'CYCLE'):\n                return got\n            if got[0] != want or got[1] == 'OFF':\n                return [f['off'], 'PREREQUISITE_FAILED', got[2]]\n        return [f['serve'], 'ON', None]\n    return ev(name, [])\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('off prerequisite whose off value equals the requirement fails',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'off']]},\n     'b': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': []}},\n    'a'],\n   ['off', 'PREREQUISITE_FAILED', 'b']),\n  ('failure names the unmet prerequisite',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on']]},\n     'b': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []}},\n    'a'],\n   ['off', 'PREREQUISITE_FAILED', 'b']),\n  ('cycle through an off member reports CYCLE',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on']]},\n     'b': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['a', 'on']]}},\n    'a'],\n   [None, 'CYCLE', 'a']),\n  ('missing prerequisite propagates MISSING',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['zz', 'on']]}}, 'a'],\n   [None, 'MISSING', 'zz']),\n  ('first unmet prerequisite stops evaluation',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['c', 'on']]},\n     'b': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []},\n     'c': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []}},\n    'a'],\n   ['off', 'PREREQUISITE_FAILED', 'b']),\n  ('later missing prerequisite is never reached',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['zz', 'on']]},\n     'b': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': []}},\n    'a'],\n   ['off', 'PREREQUISITE_FAILED', 'b']),\n  ('prerequisite graph sample 1',\n   [{'a': {'on': False, 'off': 'x', 'serve': 'on', 'prereqs': []},\n     'b': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': [['e', 'on'], ['e', 'off']]},\n     'c': {'on': False, 'off': 'x', 'serve': 'x', 'prereqs': [['c', 'on']]},\n     'e': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['b', 'x'], ['e', 'x'], ['b', 'off']]}},\n    'd'],\n   [None, 'MISSING', 'd']),\n  ('prerequisite graph sample 2',\n   [{'a': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': []},\n     'b': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['a', 'on'], ['c', 'on']]},\n     'c': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': [['z', 'on'], ['d', 'x'], ['c', 'x']]},\n     'e': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['a', 'on'], ['c', 'on']]}},\n    'b'],\n   [None, 'MISSING', 'z'])],\n [('failure names the unmet prerequisite',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on']]},\n     'b': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []}},\n    'a'],\n   ['off', 'PREREQUISITE_FAILED', 'b']),\n  ('cycle through an off member reports CYCLE',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on']]},\n     'b': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['a', 'on']]}},\n    'a'],\n   [None, 'CYCLE', 'a']),\n  ('missing prerequisite propagates MISSING',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['zz', 'on']]}}, 'a'],\n   [None, 'MISSING', 'zz']),\n  ('first unmet prerequisite stops evaluation',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['c', 'on']]},\n     'b': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []},\n     'c': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []}},\n    'a'],\n   ['off', 'PREREQUISITE_FAILED', 'b']),\n  ('later missing prerequisite is never reached',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['zz', 'on']]},\n     'b': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': []}},\n    'a'],\n   ['off', 'PREREQUISITE_FAILED', 'b']),\n  ('prerequisite graph sample 6',\n   [{'c': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': [['z', 'on'], ['d', 'off'], ['a', 'on']]},\n     'd': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['d', 'on']]},\n     'e': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['z', 'off']]}},\n    'c'],\n   ['off', 'OFF', None]),\n  ('prerequisite graph sample 7',\n   [{'a': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['z', 'x'], ['a', 'x'], ['a', 'on']]},\n     'b': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': [['c', 'on']]},\n     'd': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['z', 'on']]},\n     'e': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': [['b', 'x'], ['d', 'on'], ['b', 'on']]}},\n    'c'],\n   [None, 'MISSING', 'c']),\n  ('prerequisite graph sample 29',\n   [{'a': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': [['e', 'on']]},\n     'b': {'on': False, 'off': 'x', 'serve': 'on', 'prereqs': [['z', 'on']]},\n     'c': {'on': False, 'off': 'x', 'serve': 'x', 'prereqs': [['e', 'off'], ['b', 'on'], ['e', 'x']]},\n     'd': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': [['a', 'x']]},\n     'e': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': [['c', 'on'], ['d', 'off'], ['e', 'off']]}},\n    'd'],\n   ['off', 'PREREQUISITE_FAILED', 'a'])],\n [('failure names the unmet prerequisite',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on']]},\n     'b': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []}},\n    'a'],\n   ['off', 'PREREQUISITE_FAILED', 'b']),\n  ('cycle through an off member reports CYCLE',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on']]},\n     'b': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['a', 'on']]}},\n    'a'],\n   [None, 'CYCLE', 'a']),\n  ('missing prerequisite propagates MISSING',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['zz', 'on']]}}, 'a'],\n   [None, 'MISSING', 'zz']),\n  ('first unmet prerequisite stops evaluation',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['c', 'on']]},\n     'b': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []},\n     'c': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []}},\n    'a'],\n   ['off', 'PREREQUISITE_FAILED', 'b']),\n  ('later missing prerequisite is never reached',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['zz', 'on']]},\n     'b': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': []}},\n    'a'],\n   ['off', 'PREREQUISITE_FAILED', 'b']),\n  ('nested failure serving required off variation passes',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'x']]},\n     'b': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['c', 'on']]},\n     'c': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': []}},\n    'a'],\n   ['on', 'ON', None]),\n  ('prerequisite graph sample 11',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['c', 'on']]},\n     'b': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': [['z', 'x'], ['b', 'on']]},\n     'c': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': []},\n     'd': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['b', 'x'], ['z', 'x'], ['e', 'on']]},\n     'e': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': []}},\n    'e'],\n   ['on', 'ON', None]),\n  ('prerequisite graph sample 12',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': [['c', 'on'], ['z', 'x']]},\n     'b': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': [['b', 'on']]},\n     'c': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['b', 'on']]},\n     'e': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': []}},\n    'c'],\n   [None, 'CYCLE', 'b'])],\n [('missing prerequisite propagates MISSING',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['zz', 'on']]}}, 'a'],\n   [None, 'MISSING', 'zz']),\n  ('first unmet prerequisite stops evaluation',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['c', 'on']]},\n     'b': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []},\n     'c': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []}},\n    'a'],\n   ['off', 'PREREQUISITE_FAILED', 'b']),\n  ('later missing prerequisite is never reached',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['zz', 'on']]},\n     'b': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': []}},\n    'a'],\n   ['off', 'PREREQUISITE_FAILED', 'b']),\n  ('nested failure serving required off variation passes',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'x']]},\n     'b': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['c', 'on']]},\n     'c': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': []}},\n    'a'],\n   ['on', 'ON', None]),\n  ('cycle revisits the root',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on']]},\n     'b': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['a', 'on']]}},\n    'a'],\n   [None, 'CYCLE', 'a']),\n  ('prerequisite graph sample 16',\n   [{'a': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': []},\n     'b': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['c', 'on'], ['d', 'off']]},\n     'c': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': []},\n     'd': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': [['z', 'off'], ['z', 'on']]},\n     'e': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['d', 'on']]}},\n    'c'],\n   ['x', 'ON', None]),\n  ('prerequisite graph sample 17',\n   [{'b': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['c', 'off']]},\n     'c': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': []}},\n    'd'],\n   [None, 'MISSING', 'd']),\n  ('prerequisite graph sample 32',\n   [{'b': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['b', 'off'], ['e', 'off']]},\n     'c': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['d', 'on'], ['a', 'off']]},\n     'd': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': [['z', 'on']]}},\n    'c'],\n   ['x', 'PREREQUISITE_FAILED', 'd'])],\n [('first unmet prerequisite stops evaluation',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['c', 'on']]},\n     'b': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []},\n     'c': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []}},\n    'a'],\n   ['off', 'PREREQUISITE_FAILED', 'b']),\n  ('later missing prerequisite is never reached',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['zz', 'on']]},\n     'b': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': []}},\n    'a'],\n   ['off', 'PREREQUISITE_FAILED', 'b']),\n  ('nested failure serving required off variation passes',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'x']]},\n     'b': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['c', 'on']]},\n     'c': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': []}},\n    'a'],\n   ['on', 'ON', None]),\n  ('cycle revisits the root',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on']]},\n     'b': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['a', 'on']]}},\n    'a'],\n   [None, 'CYCLE', 'a']),\n  ('diamond dependency is not a cycle',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['c', 'on']]},\n     'b': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['d', 'on']]},\n     'c': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['d', 'on']]},\n     'd': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': []}},\n    'a'],\n   ['on', 'ON', None]),\n  ('prerequisite graph sample 21',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['b', 'on'], ['d', 'on']]},\n     'b': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': [['d', 'off'], ['a', 'on'], ['d', 'x']]},\n     'c': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['a', 'x']]},\n     'd': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': []}},\n    'e'],\n   [None, 'MISSING', 'e']),\n  ('prerequisite graph sample 22',\n   [{'a': {'on': False, 'off': 'off', 'serve': 'x', 'prereqs': [['d', 'x'], ['e', 'on'], ['c', 'on']]},\n     'b': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['c', 'off'], ['a', 'x']]},\n     'c': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': [['c', 'on']]},\n     'd': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': []},\n     'e': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['a', 'on']]}},\n    'a'],\n   ['off', 'OFF', None]),\n  ('prerequisite graph sample 23',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []},\n     'e': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': [['z', 'x'], ['c', 'on'], ['z', 'on']]}},\n    'a'],\n   ['x', 'ON', None])]]\nfor label, args, expected in fixtures[N - 1]:\n    check(label, solve(*args), expected)\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":"c3c5b76f74dc3f027c3320f27cad9209c68083fb5366d9305a3378db8de9ee9c","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(flags, name):\n    def ev(key, stack):\n        f = flags.get(key)\n        if f is None:\n            return [None, 'MISSING', key]\n        if key in stack:\n            return [None, 'CYCLE', key]\n        if not f['on']:\n            return [f['off'], 'OFF', None]\n        for pre, want in f.get('prereqs', []):\n            got = ev(pre, stack + [key])\n            if got[1] in ('MISSING', 'CYCLE'):\n                return got\n            if got[0] != want or got[1] == 'OFF':\n                return [f['off'], 'PREREQUISITE_FAILED', key]\n        return [f['serve'], 'ON', None]\n    return ev(name, [])\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('off prerequisite whose off value equals the requirement fails',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'off']]},\n     'b': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': []}},\n    'a'],\n   ['off', 'PREREQUISITE_FAILED', 'b']),\n  ('failure names the unmet prerequisite',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on']]},\n     'b': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []}},\n    'a'],\n   ['off', 'PREREQUISITE_FAILED', 'b']),\n  ('cycle through an off member reports CYCLE',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on']]},\n     'b': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['a', 'on']]}},\n    'a'],\n   [None, 'CYCLE', 'a']),\n  ('missing prerequisite propagates MISSING',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['zz', 'on']]}}, 'a'],\n   [None, 'MISSING', 'zz']),\n  ('first unmet prerequisite stops evaluation',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['c', 'on']]},\n     'b': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []},\n     'c': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []}},\n    'a'],\n   ['off', 'PREREQUISITE_FAILED', 'b']),\n  ('later missing prerequisite is never reached',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['zz', 'on']]},\n     'b': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': []}},\n    'a'],\n   ['off', 'PREREQUISITE_FAILED', 'b']),\n  ('prerequisite graph sample 1',\n   [{'a': {'on': False, 'off': 'x', 'serve': 'on', 'prereqs': []},\n     'b': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': [['e', 'on'], ['e', 'off']]},\n     'c': {'on': False, 'off': 'x', 'serve': 'x', 'prereqs': [['c', 'on']]},\n     'e': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['b', 'x'], ['e', 'x'], ['b', 'off']]}},\n    'd'],\n   [None, 'MISSING', 'd']),\n  ('prerequisite graph sample 2',\n   [{'a': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': []},\n     'b': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['a', 'on'], ['c', 'on']]},\n     'c': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': [['z', 'on'], ['d', 'x'], ['c', 'x']]},\n     'e': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['a', 'on'], ['c', 'on']]}},\n    'b'],\n   [None, 'MISSING', 'z'])],\n [('failure names the unmet prerequisite',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on']]},\n     'b': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []}},\n    'a'],\n   ['off', 'PREREQUISITE_FAILED', 'b']),\n  ('cycle through an off member reports CYCLE',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on']]},\n     'b': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['a', 'on']]}},\n    'a'],\n   [None, 'CYCLE', 'a']),\n  ('missing prerequisite propagates MISSING',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['zz', 'on']]}}, 'a'],\n   [None, 'MISSING', 'zz']),\n  ('first unmet prerequisite stops evaluation',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['c', 'on']]},\n     'b': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []},\n     'c': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []}},\n    'a'],\n   ['off', 'PREREQUISITE_FAILED', 'b']),\n  ('later missing prerequisite is never reached',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['zz', 'on']]},\n     'b': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': []}},\n    'a'],\n   ['off', 'PREREQUISITE_FAILED', 'b']),\n  ('prerequisite graph sample 6',\n   [{'c': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': [['z', 'on'], ['d', 'off'], ['a', 'on']]},\n     'd': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['d', 'on']]},\n     'e': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['z', 'off']]}},\n    'c'],\n   ['off', 'OFF', None]),\n  ('prerequisite graph sample 7',\n   [{'a': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['z', 'x'], ['a', 'x'], ['a', 'on']]},\n     'b': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': [['c', 'on']]},\n     'd': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['z', 'on']]},\n     'e': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': [['b', 'x'], ['d', 'on'], ['b', 'on']]}},\n    'c'],\n   [None, 'MISSING', 'c']),\n  ('prerequisite graph sample 29',\n   [{'a': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': [['e', 'on']]},\n     'b': {'on': False, 'off': 'x', 'serve': 'on', 'prereqs': [['z', 'on']]},\n     'c': {'on': False, 'off': 'x', 'serve': 'x', 'prereqs': [['e', 'off'], ['b', 'on'], ['e', 'x']]},\n     'd': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': [['a', 'x']]},\n     'e': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': [['c', 'on'], ['d', 'off'], ['e', 'off']]}},\n    'd'],\n   ['off', 'PREREQUISITE_FAILED', 'a'])],\n [('failure names the unmet prerequisite',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on']]},\n     'b': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []}},\n    'a'],\n   ['off', 'PREREQUISITE_FAILED', 'b']),\n  ('cycle through an off member reports CYCLE',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on']]},\n     'b': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['a', 'on']]}},\n    'a'],\n   [None, 'CYCLE', 'a']),\n  ('missing prerequisite propagates MISSING',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['zz', 'on']]}}, 'a'],\n   [None, 'MISSING', 'zz']),\n  ('first unmet prerequisite stops evaluation',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['c', 'on']]},\n     'b': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []},\n     'c': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []}},\n    'a'],\n   ['off', 'PREREQUISITE_FAILED', 'b']),\n  ('later missing prerequisite is never reached',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['zz', 'on']]},\n     'b': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': []}},\n    'a'],\n   ['off', 'PREREQUISITE_FAILED', 'b']),\n  ('nested failure serving required off variation passes',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'x']]},\n     'b': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['c', 'on']]},\n     'c': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': []}},\n    'a'],\n   ['on', 'ON', None]),\n  ('prerequisite graph sample 11',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['c', 'on']]},\n     'b': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': [['z', 'x'], ['b', 'on']]},\n     'c': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': []},\n     'd': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['b', 'x'], ['z', 'x'], ['e', 'on']]},\n     'e': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': []}},\n    'e'],\n   ['on', 'ON', None]),\n  ('prerequisite graph sample 12',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': [['c', 'on'], ['z', 'x']]},\n     'b': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': [['b', 'on']]},\n     'c': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['b', 'on']]},\n     'e': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': []}},\n    'c'],\n   [None, 'CYCLE', 'b'])],\n [('missing prerequisite propagates MISSING',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['zz', 'on']]}}, 'a'],\n   [None, 'MISSING', 'zz']),\n  ('first unmet prerequisite stops evaluation',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['c', 'on']]},\n     'b': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []},\n     'c': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []}},\n    'a'],\n   ['off', 'PREREQUISITE_FAILED', 'b']),\n  ('later missing prerequisite is never reached',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['zz', 'on']]},\n     'b': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': []}},\n    'a'],\n   ['off', 'PREREQUISITE_FAILED', 'b']),\n  ('nested failure serving required off variation passes',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'x']]},\n     'b': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['c', 'on']]},\n     'c': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': []}},\n    'a'],\n   ['on', 'ON', None]),\n  ('cycle revisits the root',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on']]},\n     'b': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['a', 'on']]}},\n    'a'],\n   [None, 'CYCLE', 'a']),\n  ('prerequisite graph sample 16',\n   [{'a': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': []},\n     'b': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['c', 'on'], ['d', 'off']]},\n     'c': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': []},\n     'd': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': [['z', 'off'], ['z', 'on']]},\n     'e': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['d', 'on']]}},\n    'c'],\n   ['x', 'ON', None]),\n  ('prerequisite graph sample 17',\n   [{'b': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['c', 'off']]},\n     'c': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': []}},\n    'd'],\n   [None, 'MISSING', 'd']),\n  ('prerequisite graph sample 32',\n   [{'b': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['b', 'off'], ['e', 'off']]},\n     'c': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['d', 'on'], ['a', 'off']]},\n     'd': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': [['z', 'on']]}},\n    'c'],\n   ['x', 'PREREQUISITE_FAILED', 'd'])],\n [('first unmet prerequisite stops evaluation',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['c', 'on']]},\n     'b': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []},\n     'c': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []}},\n    'a'],\n   ['off', 'PREREQUISITE_FAILED', 'b']),\n  ('later missing prerequisite is never reached',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['zz', 'on']]},\n     'b': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': []}},\n    'a'],\n   ['off', 'PREREQUISITE_FAILED', 'b']),\n  ('nested failure serving required off variation passes',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'x']]},\n     'b': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['c', 'on']]},\n     'c': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': []}},\n    'a'],\n   ['on', 'ON', None]),\n  ('cycle revisits the root',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on']]},\n     'b': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['a', 'on']]}},\n    'a'],\n   [None, 'CYCLE', 'a']),\n  ('diamond dependency is not a cycle',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['c', 'on']]},\n     'b': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['d', 'on']]},\n     'c': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['d', 'on']]},\n     'd': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': []}},\n    'a'],\n   ['on', 'ON', None]),\n  ('prerequisite graph sample 21',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['b', 'on'], ['d', 'on']]},\n     'b': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': [['d', 'off'], ['a', 'on'], ['d', 'x']]},\n     'c': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['a', 'x']]},\n     'd': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': []}},\n    'e'],\n   [None, 'MISSING', 'e']),\n  ('prerequisite graph sample 22',\n   [{'a': {'on': False, 'off': 'off', 'serve': 'x', 'prereqs': [['d', 'x'], ['e', 'on'], ['c', 'on']]},\n     'b': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['c', 'off'], ['a', 'x']]},\n     'c': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': [['c', 'on']]},\n     'd': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': []},\n     'e': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['a', 'on']]}},\n    'a'],\n   ['off', 'OFF', None]),\n  ('prerequisite graph sample 23',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []},\n     'e': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': [['z', 'x'], ['c', 'on'], ['z', 'on']]}},\n    'a'],\n   ['x', 'ON', None])]]\nfor label, args, expected in fixtures[N - 1]:\n    check(label, solve(*args), expected)\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":"8a30b91f6d17e54158e76dfcb8fc27f804df592f2ca13a6205c62c38c7d53c73","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(flags, name):\n    def ev(key, stack):\n        f = flags.get(key)\n        if f is None:\n            return [None, 'MISSING', key]\n        if key in stack:\n            return [None, 'CYCLE', key]\n        if not f['on']:\n            return [f['off'], 'OFF', None]\n        for pre, want in f.get('prereqs', []):\n            got = ev(pre, stack + [key])\n            if got[1] in ('MISSING', 'CYCLE'):\n                return got\n            if got[0] != want or got[1] == 'OFF':\n                return [f['off'], 'PREREQUISITE_FAILED', pre]\n        return [f['serve'], 'ON', None]\n    return ev(name, [])\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('off prerequisite whose off value equals the requirement fails',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'off']]},\n     'b': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': []}},\n    'a'],\n   ['off', 'PREREQUISITE_FAILED', 'b']),\n  ('failure names the unmet prerequisite',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on']]},\n     'b': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []}},\n    'a'],\n   ['off', 'PREREQUISITE_FAILED', 'b']),\n  ('cycle through an off member reports CYCLE',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on']]},\n     'b': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['a', 'on']]}},\n    'a'],\n   [None, 'CYCLE', 'a']),\n  ('missing prerequisite propagates MISSING',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['zz', 'on']]}}, 'a'],\n   [None, 'MISSING', 'zz']),\n  ('first unmet prerequisite stops evaluation',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['c', 'on']]},\n     'b': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []},\n     'c': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []}},\n    'a'],\n   ['off', 'PREREQUISITE_FAILED', 'b']),\n  ('later missing prerequisite is never reached',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['zz', 'on']]},\n     'b': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': []}},\n    'a'],\n   ['off', 'PREREQUISITE_FAILED', 'b']),\n  ('prerequisite graph sample 1',\n   [{'a': {'on': False, 'off': 'x', 'serve': 'on', 'prereqs': []},\n     'b': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': [['e', 'on'], ['e', 'off']]},\n     'c': {'on': False, 'off': 'x', 'serve': 'x', 'prereqs': [['c', 'on']]},\n     'e': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['b', 'x'], ['e', 'x'], ['b', 'off']]}},\n    'd'],\n   [None, 'MISSING', 'd']),\n  ('prerequisite graph sample 2',\n   [{'a': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': []},\n     'b': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['a', 'on'], ['c', 'on']]},\n     'c': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': [['z', 'on'], ['d', 'x'], ['c', 'x']]},\n     'e': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['a', 'on'], ['c', 'on']]}},\n    'b'],\n   [None, 'MISSING', 'z'])],\n [('failure names the unmet prerequisite',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on']]},\n     'b': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []}},\n    'a'],\n   ['off', 'PREREQUISITE_FAILED', 'b']),\n  ('cycle through an off member reports CYCLE',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on']]},\n     'b': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['a', 'on']]}},\n    'a'],\n   [None, 'CYCLE', 'a']),\n  ('missing prerequisite propagates MISSING',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['zz', 'on']]}}, 'a'],\n   [None, 'MISSING', 'zz']),\n  ('first unmet prerequisite stops evaluation',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['c', 'on']]},\n     'b': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []},\n     'c': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []}},\n    'a'],\n   ['off', 'PREREQUISITE_FAILED', 'b']),\n  ('later missing prerequisite is never reached',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['zz', 'on']]},\n     'b': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': []}},\n    'a'],\n   ['off', 'PREREQUISITE_FAILED', 'b']),\n  ('prerequisite graph sample 6',\n   [{'c': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': [['z', 'on'], ['d', 'off'], ['a', 'on']]},\n     'd': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['d', 'on']]},\n     'e': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['z', 'off']]}},\n    'c'],\n   ['off', 'OFF', None]),\n  ('prerequisite graph sample 7',\n   [{'a': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['z', 'x'], ['a', 'x'], ['a', 'on']]},\n     'b': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': [['c', 'on']]},\n     'd': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['z', 'on']]},\n     'e': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': [['b', 'x'], ['d', 'on'], ['b', 'on']]}},\n    'c'],\n   [None, 'MISSING', 'c']),\n  ('prerequisite graph sample 29',\n   [{'a': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': [['e', 'on']]},\n     'b': {'on': False, 'off': 'x', 'serve': 'on', 'prereqs': [['z', 'on']]},\n     'c': {'on': False, 'off': 'x', 'serve': 'x', 'prereqs': [['e', 'off'], ['b', 'on'], ['e', 'x']]},\n     'd': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': [['a', 'x']]},\n     'e': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': [['c', 'on'], ['d', 'off'], ['e', 'off']]}},\n    'd'],\n   ['off', 'PREREQUISITE_FAILED', 'a'])],\n [('failure names the unmet prerequisite',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on']]},\n     'b': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []}},\n    'a'],\n   ['off', 'PREREQUISITE_FAILED', 'b']),\n  ('cycle through an off member reports CYCLE',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on']]},\n     'b': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['a', 'on']]}},\n    'a'],\n   [None, 'CYCLE', 'a']),\n  ('missing prerequisite propagates MISSING',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['zz', 'on']]}}, 'a'],\n   [None, 'MISSING', 'zz']),\n  ('first unmet prerequisite stops evaluation',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['c', 'on']]},\n     'b': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []},\n     'c': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []}},\n    'a'],\n   ['off', 'PREREQUISITE_FAILED', 'b']),\n  ('later missing prerequisite is never reached',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['zz', 'on']]},\n     'b': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': []}},\n    'a'],\n   ['off', 'PREREQUISITE_FAILED', 'b']),\n  ('nested failure serving required off variation passes',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'x']]},\n     'b': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['c', 'on']]},\n     'c': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': []}},\n    'a'],\n   ['on', 'ON', None]),\n  ('prerequisite graph sample 11',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['c', 'on']]},\n     'b': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': [['z', 'x'], ['b', 'on']]},\n     'c': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': []},\n     'd': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['b', 'x'], ['z', 'x'], ['e', 'on']]},\n     'e': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': []}},\n    'e'],\n   ['on', 'ON', None]),\n  ('prerequisite graph sample 12',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': [['c', 'on'], ['z', 'x']]},\n     'b': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': [['b', 'on']]},\n     'c': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['b', 'on']]},\n     'e': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': []}},\n    'c'],\n   [None, 'CYCLE', 'b'])],\n [('missing prerequisite propagates MISSING',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['zz', 'on']]}}, 'a'],\n   [None, 'MISSING', 'zz']),\n  ('first unmet prerequisite stops evaluation',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['c', 'on']]},\n     'b': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []},\n     'c': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []}},\n    'a'],\n   ['off', 'PREREQUISITE_FAILED', 'b']),\n  ('later missing prerequisite is never reached',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['zz', 'on']]},\n     'b': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': []}},\n    'a'],\n   ['off', 'PREREQUISITE_FAILED', 'b']),\n  ('nested failure serving required off variation passes',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'x']]},\n     'b': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['c', 'on']]},\n     'c': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': []}},\n    'a'],\n   ['on', 'ON', None]),\n  ('cycle revisits the root',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on']]},\n     'b': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['a', 'on']]}},\n    'a'],\n   [None, 'CYCLE', 'a']),\n  ('prerequisite graph sample 16',\n   [{'a': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': []},\n     'b': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['c', 'on'], ['d', 'off']]},\n     'c': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': []},\n     'd': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': [['z', 'off'], ['z', 'on']]},\n     'e': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['d', 'on']]}},\n    'c'],\n   ['x', 'ON', None]),\n  ('prerequisite graph sample 17',\n   [{'b': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['c', 'off']]},\n     'c': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': []}},\n    'd'],\n   [None, 'MISSING', 'd']),\n  ('prerequisite graph sample 32',\n   [{'b': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['b', 'off'], ['e', 'off']]},\n     'c': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['d', 'on'], ['a', 'off']]},\n     'd': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': [['z', 'on']]}},\n    'c'],\n   ['x', 'PREREQUISITE_FAILED', 'd'])],\n [('first unmet prerequisite stops evaluation',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['c', 'on']]},\n     'b': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []},\n     'c': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []}},\n    'a'],\n   ['off', 'PREREQUISITE_FAILED', 'b']),\n  ('later missing prerequisite is never reached',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['zz', 'on']]},\n     'b': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': []}},\n    'a'],\n   ['off', 'PREREQUISITE_FAILED', 'b']),\n  ('nested failure serving required off variation passes',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'x']]},\n     'b': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['c', 'on']]},\n     'c': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': []}},\n    'a'],\n   ['on', 'ON', None]),\n  ('cycle revisits the root',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on']]},\n     'b': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['a', 'on']]}},\n    'a'],\n   [None, 'CYCLE', 'a']),\n  ('diamond dependency is not a cycle',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['c', 'on']]},\n     'b': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['d', 'on']]},\n     'c': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['d', 'on']]},\n     'd': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': []}},\n    'a'],\n   ['on', 'ON', None]),\n  ('prerequisite graph sample 21',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['b', 'on'], ['d', 'on']]},\n     'b': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': [['d', 'off'], ['a', 'on'], ['d', 'x']]},\n     'c': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['a', 'x']]},\n     'd': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': []}},\n    'e'],\n   [None, 'MISSING', 'e']),\n  ('prerequisite graph sample 22',\n   [{'a': {'on': False, 'off': 'off', 'serve': 'x', 'prereqs': [['d', 'x'], ['e', 'on'], ['c', 'on']]},\n     'b': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['c', 'off'], ['a', 'x']]},\n     'c': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': [['c', 'on']]},\n     'd': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': []},\n     'e': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['a', 'on']]}},\n    'a'],\n   ['off', 'OFF', None]),\n  ('prerequisite graph sample 23',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []},\n     'e': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': [['z', 'x'], ['c', 'on'], ['z', 'on']]}},\n    'a'],\n   ['x', 'ON', None])]]\nfor label, args, expected in fixtures[N - 1]:\n    check(label, solve(*args), expected)\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":"A deterministic toy flag-evaluation model with a stipulated contract; it does not reproduce any vendor SDK byte for byte. 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":"w2-feature-flag-rollout-bucketing-prerequisite-chain-failure-detail","generated_at":"2026-09-29T14:48:51.978150+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Prerequisite chains gate dependent features and must fail closed with an actionable reason.","repair":"Report the key of the first unmet prerequisite.","root_cause":"The PREREQUISITE_FAILED detail is filled with the evaluated key rather than the prerequisite key.","sha256":"74f80e6a8c26e7b9707ace4c765f668fada34315511cc791a6a9ce1c5f65d04a","title":"Prerequisite flag chain: Failure reason names the dependent flag · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":41.144,"exit_code":1,"observations":[{"actual":["off","PREREQUISITE_FAILED",null],"check":"off prerequisite whose off value equals the requirement fails","expected":["off","PREREQUISITE_FAILED","b"],"passed":false},{"actual":["off","PREREQUISITE_FAILED",null],"check":"failure names the unmet prerequisite","expected":["off","PREREQUISITE_FAILED","b"],"passed":false},{"actual":[null,"CYCLE","a"],"check":"cycle through an off member reports CYCLE","expected":[null,"CYCLE","a"],"passed":true},{"actual":[null,"MISSING","zz"],"check":"missing prerequisite propagates MISSING","expected":[null,"MISSING","zz"],"passed":true},{"actual":["off","PREREQUISITE_FAILED",null],"check":"first unmet prerequisite stops evaluation","expected":["off","PREREQUISITE_FAILED","b"],"passed":false},{"actual":["off","PREREQUISITE_FAILED",null],"check":"later missing prerequisite is never reached","expected":["off","PREREQUISITE_FAILED","b"],"passed":false},{"actual":[null,"MISSING","d"],"check":"prerequisite graph sample 1","expected":[null,"MISSING","d"],"passed":true},{"actual":[null,"MISSING","z"],"check":"prerequisite graph sample 2","expected":[null,"MISSING","z"],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"off prerequisite whose off value equals the requirement fails\", \"actual\": [\"off\", \"PREREQUISITE_FAILED\", null], \"expected\": [\"off\", \"PREREQUISITE_FAILED\", \"b\"], \"passed\": false}, {\"check\": \"failure names the unmet prerequisite\", \"actual\": [\"off\", \"PREREQUISITE_FAILED\", null], \"expected\": [\"off\", \"PREREQUISITE_FAILED\", \"b\"], \"passed\": false}, {\"check\": \"cycle through an off member reports CYCLE\", \"actual\": [null, \"CYCLE\", \"a\"], \"expected\": [null, \"CYCLE\", \"a\"], \"passed\": true}, {\"check\": \"missing prerequisite propagates MISSING\", \"actual\": [null, \"MISSING\", \"zz\"], \"expected\": [null, \"MISSING\", \"zz\"], \"passed\": true}, {\"check\": \"first unmet prerequisite stops evaluation\", \"actual\": [\"off\", \"PREREQUISITE_FAILED\", null], \"expected\": [\"off\", \"PREREQUISITE_FAILED\", \"b\"], \"passed\": false}, {\"check\": \"later missing prerequisite is never reached\", \"actual\": [\"off\", \"PREREQUISITE_FAILED\", null], \"expected\": [\"off\", \"PREREQUISITE_FAILED\", \"b\"], \"passed\": false}, {\"check\": \"prerequisite graph sample 1\", \"actual\": [null, \"MISSING\", \"d\"], \"expected\": [null, \"MISSING\", \"d\"], \"passed\": true}, {\"check\": \"prerequisite graph sample 2\", \"actual\": [null, \"MISSING\", \"z\"], \"expected\": [null, \"MISSING\", \"z\"], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.799,"exit_code":1,"observations":[{"actual":["off","PREREQUISITE_FAILED","a"],"check":"off prerequisite whose off value equals the requirement fails","expected":["off","PREREQUISITE_FAILED","b"],"passed":false},{"actual":["off","PREREQUISITE_FAILED","a"],"check":"failure names the unmet prerequisite","expected":["off","PREREQUISITE_FAILED","b"],"passed":false},{"actual":[null,"CYCLE","a"],"check":"cycle through an off member reports CYCLE","expected":[null,"CYCLE","a"],"passed":true},{"actual":[null,"MISSING","zz"],"check":"missing prerequisite propagates MISSING","expected":[null,"MISSING","zz"],"passed":true},{"actual":["off","PREREQUISITE_FAILED","a"],"check":"first unmet prerequisite stops evaluation","expected":["off","PREREQUISITE_FAILED","b"],"passed":false},{"actual":["off","PREREQUISITE_FAILED","a"],"check":"later missing prerequisite is never reached","expected":["off","PREREQUISITE_FAILED","b"],"passed":false},{"actual":[null,"MISSING","d"],"check":"prerequisite graph sample 1","expected":[null,"MISSING","d"],"passed":true},{"actual":[null,"MISSING","z"],"check":"prerequisite graph sample 2","expected":[null,"MISSING","z"],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"off prerequisite whose off value equals the requirement fails\", \"actual\": [\"off\", \"PREREQUISITE_FAILED\", \"a\"], \"expected\": [\"off\", \"PREREQUISITE_FAILED\", \"b\"], \"passed\": false}, {\"check\": \"failure names the unmet prerequisite\", \"actual\": [\"off\", \"PREREQUISITE_FAILED\", \"a\"], \"expected\": [\"off\", \"PREREQUISITE_FAILED\", \"b\"], \"passed\": false}, {\"check\": \"cycle through an off member reports CYCLE\", \"actual\": [null, \"CYCLE\", \"a\"], \"expected\": [null, \"CYCLE\", \"a\"], \"passed\": true}, {\"check\": \"missing prerequisite propagates MISSING\", \"actual\": [null, \"MISSING\", \"zz\"], \"expected\": [null, \"MISSING\", \"zz\"], \"passed\": true}, {\"check\": \"first unmet prerequisite stops evaluation\", \"actual\": [\"off\", \"PREREQUISITE_FAILED\", \"a\"], \"expected\": [\"off\", \"PREREQUISITE_FAILED\", \"b\"], \"passed\": false}, {\"check\": \"later missing prerequisite is never reached\", \"actual\": [\"off\", \"PREREQUISITE_FAILED\", \"a\"], \"expected\": [\"off\", \"PREREQUISITE_FAILED\", \"b\"], \"passed\": false}, {\"check\": \"prerequisite graph sample 1\", \"actual\": [null, \"MISSING\", \"d\"], \"expected\": [null, \"MISSING\", \"d\"], \"passed\": true}, {\"check\": \"prerequisite graph sample 2\", \"actual\": [null, \"MISSING\", \"z\"], \"expected\": [null, \"MISSING\", \"z\"], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":42.229,"exit_code":0,"observations":[{"actual":["off","PREREQUISITE_FAILED","b"],"check":"off prerequisite whose off value equals the requirement fails","expected":["off","PREREQUISITE_FAILED","b"],"passed":true},{"actual":["off","PREREQUISITE_FAILED","b"],"check":"failure names the unmet prerequisite","expected":["off","PREREQUISITE_FAILED","b"],"passed":true},{"actual":[null,"CYCLE","a"],"check":"cycle through an off member reports CYCLE","expected":[null,"CYCLE","a"],"passed":true},{"actual":[null,"MISSING","zz"],"check":"missing prerequisite propagates MISSING","expected":[null,"MISSING","zz"],"passed":true},{"actual":["off","PREREQUISITE_FAILED","b"],"check":"first unmet prerequisite stops evaluation","expected":["off","PREREQUISITE_FAILED","b"],"passed":true},{"actual":["off","PREREQUISITE_FAILED","b"],"check":"later missing prerequisite is never reached","expected":["off","PREREQUISITE_FAILED","b"],"passed":true},{"actual":[null,"MISSING","d"],"check":"prerequisite graph sample 1","expected":[null,"MISSING","d"],"passed":true},{"actual":[null,"MISSING","z"],"check":"prerequisite graph sample 2","expected":[null,"MISSING","z"],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"off prerequisite whose off value equals the requirement fails\", \"actual\": [\"off\", \"PREREQUISITE_FAILED\", \"b\"], \"expected\": [\"off\", \"PREREQUISITE_FAILED\", \"b\"], \"passed\": true}, {\"check\": \"failure names the unmet prerequisite\", \"actual\": [\"off\", \"PREREQUISITE_FAILED\", \"b\"], \"expected\": [\"off\", \"PREREQUISITE_FAILED\", \"b\"], \"passed\": true}, {\"check\": \"cycle through an off member reports CYCLE\", \"actual\": [null, \"CYCLE\", \"a\"], \"expected\": [null, \"CYCLE\", \"a\"], \"passed\": true}, {\"check\": \"missing prerequisite propagates MISSING\", \"actual\": [null, \"MISSING\", \"zz\"], \"expected\": [null, \"MISSING\", \"zz\"], \"passed\": true}, {\"check\": \"first unmet prerequisite stops evaluation\", \"actual\": [\"off\", \"PREREQUISITE_FAILED\", \"b\"], \"expected\": [\"off\", \"PREREQUISITE_FAILED\", \"b\"], \"passed\": true}, {\"check\": \"later missing prerequisite is never reached\", \"actual\": [\"off\", \"PREREQUISITE_FAILED\", \"b\"], \"expected\": [\"off\", \"PREREQUISITE_FAILED\", \"b\"], \"passed\": true}, {\"check\": \"prerequisite graph sample 1\", \"actual\": [null, \"MISSING\", \"d\"], \"expected\": [null, \"MISSING\", \"d\"], \"passed\": true}, {\"check\": \"prerequisite graph sample 2\", \"actual\": [null, \"MISSING\", \"z\"], \"expected\": [null, \"MISSING\", \"z\"], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}