{"abstract":"The reported blocking prerequisite is the last failing one, and later broken references surface.","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":"Remembering the first failure while continuing still evaluates later prerequisites and propagates their errors.","family":"w2-feature-flag-rollout-bucketing-prerequisite-chain-first-unmet-stop","id":"FA-73936","implementations":{"attempt":{"sha256":"72fd26a288f111ae9c493d594018cbbaa7234cfdf51cf05d8a079239b40bb3a5","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        failed = 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                if failed is None:\n                    failed = pre\n        if failed is not None:\n            return [f['off'], 'PREREQUISITE_FAILED', failed]\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 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 [('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  ('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 [('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":"be713c08e492cafdd1daf6bf6271ec27de178005b1c88d821549783611542661","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        failed = 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                failed = pre\n        if failed is not None:\n            return [f['off'], 'PREREQUISITE_FAILED', failed]\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 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 [('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  ('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 [('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-first-unmet-stop","generated_at":"2026-09-29T14:48:51.990569+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":"Unmet prerequisites are recorded and the loop keeps evaluating the remaining prerequisites.","sha256":"2566f433c7ec58f24be3c4648090f52f301b32dca574839ef32db78962dc73f1","title":"Prerequisite flag chain: Evaluation continues past an unmet prerequisite · 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":40.358,"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,"MISSING","zz"],"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\", \"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\": [null, \"MISSING\", \"zz\"], \"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":40.329,"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","c"],"check":"first unmet prerequisite stops evaluation","expected":["off","PREREQUISITE_FAILED","b"],"passed":false},{"actual":[null,"MISSING","zz"],"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\", \"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\", \"c\"], \"expected\": [\"off\", \"PREREQUISITE_FAILED\", \"b\"], \"passed\": false}, {\"check\": \"later missing prerequisite is never reached\", \"actual\": [null, \"MISSING\", \"zz\"], \"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"}},"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."}}