{"abstract":"Two flags that both depend on the same base flag report a prerequisite cycle.","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].","contract_signature":"flags, name","evaluation_group":"w2-feature-flag-rollout-bucketing-prerequisite-chain","failed_approach":"Checking the path without its root lets a cycle through the root run one hop further and blame the wrong flag.","family":"w2-feature-flag-rollout-bucketing-prerequisite-chain-diamond-dependency","id":"FA-73926","implementations":{"attempt":{"sha256":"958f3a5474eefdaf86a14bd317bb2f8a769d85e723725f385139c03b12259e2a","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[1:]:\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  ('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 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 [('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  ('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 33',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'x'], ['a', 'on']]},\n     'b': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': [['a', 'on'], ['b', 'on']]},\n     'c': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': [['a', 'off']]},\n     'd': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': [['z', 'off']]},\n     'e': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['c', 'x']]}},\n    'b'],\n   [None, 'CYCLE', '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  ('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 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 27',\n   [{'a': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': [['z', 'x'], ['e', 'x'], ['d', 'x']]},\n     'b': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['d', 'on']]},\n     'c': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': [['b', 'on'], ['b', 'x']]},\n     'd': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'x']]},\n     'e': {'on': False, 'off': 'off', 'serve': 'x', 'prereqs': [['b', 'on'], ['z', 'on']]}},\n    'd'],\n   [None, 'CYCLE', 'd'])],\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  ('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 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 [('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  ('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])]]\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":"382dca4fdca7054faf77412e58c0b163a440903e60d32fb6300e50d7012e096b","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(flags, name):\n    visited = []\n    def ev(key, stack):\n        f = flags.get(key)\n        if f is None:\n            return [None, 'MISSING', key]\n        if key in visited:\n            return [None, 'CYCLE', key]\n        visited.append(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  ('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 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 [('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  ('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 33',\n   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'x'], ['a', 'on']]},\n     'b': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': [['a', 'on'], ['b', 'on']]},\n     'c': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': [['a', 'off']]},\n     'd': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': [['z', 'off']]},\n     'e': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['c', 'x']]}},\n    'b'],\n   [None, 'CYCLE', '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  ('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 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 27',\n   [{'a': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': [['z', 'x'], ['e', 'x'], ['d', 'x']]},\n     'b': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['d', 'on']]},\n     'c': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': [['b', 'on'], ['b', 'x']]},\n     'd': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'x']]},\n     'e': {'on': False, 'off': 'off', 'serve': 'x', 'prereqs': [['b', 'on'], ['z', 'on']]}},\n    'd'],\n   [None, 'CYCLE', 'd'])],\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  ('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 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 [('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  ('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])]]\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-diamond-dependency","generated_at":"2026-09-29T14:48:51.983314+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.","root_cause":"Cycle detection records every visited flag in one list shared across sibling branches instead of the current path.","sha256":"feef57e0038b1b696745abde74e25ae1f7167fbad707c0e31c9885bf9323f858","title":"Prerequisite flag chain: Shared prerequisites are mistaken for cycles · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verified":true,"visibility":"public","verification":{"attempt":{"elapsed_ms":38.585,"exit_code":1,"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","b"],"check":"cycle through an off member reports CYCLE","expected":[null,"CYCLE","a"],"passed":false},{"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":[null,"CYCLE","b"],"check":"cycle revisits the root","expected":[null,"CYCLE","a"],"passed":false},{"actual":["on","ON",null],"check":"diamond dependency is not a cycle","expected":["on","ON",null],"passed":true},{"actual":[null,"MISSING","d"],"check":"prerequisite graph sample 1","expected":[null,"MISSING","d"],"passed":true}],"passed":false,"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\", \"b\"], \"expected\": [null, \"CYCLE\", \"a\"], \"passed\": false}, {\"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\": \"cycle revisits the root\", \"actual\": [null, \"CYCLE\", \"b\"], \"expected\": [null, \"CYCLE\", \"a\"], \"passed\": false}, {\"check\": \"diamond dependency is not a cycle\", \"actual\": [\"on\", \"ON\", null], \"expected\": [\"on\", \"ON\", null], \"passed\": true}, {\"check\": \"prerequisite graph sample 1\", \"actual\": [null, \"MISSING\", \"d\"], \"expected\": [null, \"MISSING\", \"d\"], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.095,"exit_code":1,"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":[null,"CYCLE","a"],"check":"cycle revisits the root","expected":[null,"CYCLE","a"],"passed":true},{"actual":[null,"CYCLE","d"],"check":"diamond dependency is not a cycle","expected":["on","ON",null],"passed":false},{"actual":[null,"MISSING","d"],"check":"prerequisite graph sample 1","expected":[null,"MISSING","d"],"passed":true}],"passed":false,"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\": \"cycle revisits the root\", \"actual\": [null, \"CYCLE\", \"a\"], \"expected\": [null, \"CYCLE\", \"a\"], \"passed\": true}, {\"check\": \"diamond dependency is not a cycle\", \"actual\": [null, \"CYCLE\", \"d\"], \"expected\": [\"on\", \"ON\", null], \"passed\": false}, {\"check\": \"prerequisite graph sample 1\", \"actual\": [null, \"MISSING\", \"d\"], \"expected\": [null, \"MISSING\", \"d\"], \"passed\": true}], \"passed\": false}\n"}},"member_only":{"stages":["fixed"],"fields":["implementations.fixed","verification.fixed","harness","repair"],"note":"The verified repair, its recorded checks, the repair description, and the scoring harness are available to members."}}