FAILURE MAP
← Case archive

FA-73936 / Feature flag rollout bucketing / Open access

Prerequisite flag chain: Evaluation continues past an unmet prerequisite · case 01

The reported blocking prerequisite is the last failing one, and later broken references surface.

Verified by executionVariant 1 · 8 checks per implementationDownload source bundle ↓JSON ↗

ROOT CAUSE

Unmet prerequisites are recorded and the loop keeps evaluating the remaining prerequisites.

VERIFIED REPAIR

Return immediately at the first unmet prerequisite.

Unsuccessful approach: Remembering the first failure while continuing still evaluates later prerequisites and propagates their errors.

Case 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].

Why this case matters

Prerequisite chains gate dependent features and must fail closed with an actionable reason.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(flags, name):
    def ev(key, stack):
        f = flags.get(key)
        if f is None:
            return [None, 'MISSING', key]
        if key in stack:
            return [None, 'CYCLE', key]
        if not f['on']:
            return [f['off'], 'OFF', None]
        failed = None
        for pre, want in f.get('prereqs', []):
            got = ev(pre, stack + [key])
            if got[1] in ('MISSING', 'CYCLE'):
                return got
            if got[0] != want or got[1] == 'OFF':
                failed = pre
        if failed is not None:
            return [f['off'], 'PREREQUISITE_FAILED', failed]
        return [f['serve'], 'ON', None]
    return ev(name, [])
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('off prerequisite whose off value equals the requirement fails',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'off']]},
     'b': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': []}},
    'a'],
   ['off', 'PREREQUISITE_FAILED', 'b']),
  ('failure names the unmet prerequisite',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on']]},
     'b': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []}},
    'a'],
   ['off', 'PREREQUISITE_FAILED', 'b']),
  ('cycle through an off member reports CYCLE',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on']]},
     'b': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['a', 'on']]}},
    'a'],
   [None, 'CYCLE', 'a']),
  ('missing prerequisite propagates MISSING',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['zz', 'on']]}}, 'a'],
   [None, 'MISSING', 'zz']),
  ('first unmet prerequisite stops evaluation',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['c', 'on']]},
     'b': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []},
     'c': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []}},
    'a'],
   ['off', 'PREREQUISITE_FAILED', 'b']),
  ('later missing prerequisite is never reached',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['zz', 'on']]},
     'b': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': []}},
    'a'],
   ['off', 'PREREQUISITE_FAILED', 'b']),
  ('prerequisite graph sample 1',
   [{'a': {'on': False, 'off': 'x', 'serve': 'on', 'prereqs': []},
     'b': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': [['e', 'on'], ['e', 'off']]},
     'c': {'on': False, 'off': 'x', 'serve': 'x', 'prereqs': [['c', 'on']]},
     'e': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['b', 'x'], ['e', 'x'], ['b', 'off']]}},
    'd'],
   [None, 'MISSING', 'd']),
  ('prerequisite graph sample 2',
   [{'a': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': []},
     'b': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['a', 'on'], ['c', 'on']]},
     'c': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': [['z', 'on'], ['d', 'x'], ['c', 'x']]},
     'e': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['a', 'on'], ['c', 'on']]}},
    'b'],
   [None, 'MISSING', 'z'])],
 [('failure names the unmet prerequisite',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on']]},
     'b': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []}},
    'a'],
   ['off', 'PREREQUISITE_FAILED', 'b']),
  ('cycle through an off member reports CYCLE',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on']]},
     'b': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['a', 'on']]}},
    'a'],
   [None, 'CYCLE', 'a']),
  ('missing prerequisite propagates MISSING',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['zz', 'on']]}}, 'a'],
   [None, 'MISSING', 'zz']),
  ('first unmet prerequisite stops evaluation',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['c', 'on']]},
     'b': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []},
     'c': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []}},
    'a'],
   ['off', 'PREREQUISITE_FAILED', 'b']),
  ('later missing prerequisite is never reached',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['zz', 'on']]},
     'b': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': []}},
    'a'],
   ['off', 'PREREQUISITE_FAILED', 'b']),
  ('prerequisite graph sample 6',
   [{'c': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': [['z', 'on'], ['d', 'off'], ['a', 'on']]},
     'd': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['d', 'on']]},
     'e': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['z', 'off']]}},
    'c'],
   ['off', 'OFF', None]),
  ('prerequisite graph sample 7',
   [{'a': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['z', 'x'], ['a', 'x'], ['a', 'on']]},
     'b': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': [['c', 'on']]},
     'd': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['z', 'on']]},
     'e': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': [['b', 'x'], ['d', 'on'], ['b', 'on']]}},
    'c'],
   [None, 'MISSING', 'c']),
  ('prerequisite graph sample 32',
   [{'b': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['b', 'off'], ['e', 'off']]},
     'c': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['d', 'on'], ['a', 'off']]},
     'd': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': [['z', 'on']]}},
    'c'],
   ['x', 'PREREQUISITE_FAILED', 'd'])],
 [('cycle through an off member reports CYCLE',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on']]},
     'b': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['a', 'on']]}},
    'a'],
   [None, 'CYCLE', 'a']),
  ('missing prerequisite propagates MISSING',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['zz', 'on']]}}, 'a'],
   [None, 'MISSING', 'zz']),
  ('first unmet prerequisite stops evaluation',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['c', 'on']]},
     'b': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []},
     'c': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []}},
    'a'],
   ['off', 'PREREQUISITE_FAILED', 'b']),
  ('later missing prerequisite is never reached',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['zz', 'on']]},
     'b': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': []}},
    'a'],
   ['off', 'PREREQUISITE_FAILED', 'b']),
  ('nested failure serving required off variation passes',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'x']]},
     'b': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['c', 'on']]},
     'c': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': []}},
    'a'],
   ['on', 'ON', None]),
  ('prerequisite graph sample 11',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['c', 'on']]},
     'b': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': [['z', 'x'], ['b', 'on']]},
     'c': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': []},
     'd': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['b', 'x'], ['z', 'x'], ['e', 'on']]},
     'e': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': []}},
    'e'],
   ['on', 'ON', None]),
  ('prerequisite graph sample 12',
   [{'a': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': [['c', 'on'], ['z', 'x']]},
     'b': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': [['b', 'on']]},
     'c': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['b', 'on']]},
     'e': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': []}},
    'c'],
   [None, 'CYCLE', 'b']),
  ('prerequisite graph sample 32',
   [{'b': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['b', 'off'], ['e', 'off']]},
     'c': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['d', 'on'], ['a', 'off']]},
     'd': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': [['z', 'on']]}},
    'c'],
   ['x', 'PREREQUISITE_FAILED', 'd'])],
 [('missing prerequisite propagates MISSING',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['zz', 'on']]}}, 'a'],
   [None, 'MISSING', 'zz']),
  ('first unmet prerequisite stops evaluation',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['c', 'on']]},
     'b': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []},
     'c': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []}},
    'a'],
   ['off', 'PREREQUISITE_FAILED', 'b']),
  ('later missing prerequisite is never reached',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['zz', 'on']]},
     'b': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': []}},
    'a'],
   ['off', 'PREREQUISITE_FAILED', 'b']),
  ('nested failure serving required off variation passes',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'x']]},
     'b': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['c', 'on']]},
     'c': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': []}},
    'a'],
   ['on', 'ON', None]),
  ('cycle revisits the root',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on']]},
     'b': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['a', 'on']]}},
    'a'],
   [None, 'CYCLE', 'a']),
  ('prerequisite graph sample 16',
   [{'a': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': []},
     'b': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['c', 'on'], ['d', 'off']]},
     'c': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': []},
     'd': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': [['z', 'off'], ['z', 'on']]},
     'e': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['d', 'on']]}},
    'c'],
   ['x', 'ON', None]),
  ('prerequisite graph sample 17',
   [{'b': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['c', 'off']]},
     'c': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': []}},
    'd'],
   [None, 'MISSING', 'd']),
  ('prerequisite graph sample 32',
   [{'b': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['b', 'off'], ['e', 'off']]},
     'c': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['d', 'on'], ['a', 'off']]},
     'd': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': [['z', 'on']]}},
    'c'],
   ['x', 'PREREQUISITE_FAILED', 'd'])],
 [('first unmet prerequisite stops evaluation',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['c', 'on']]},
     'b': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []},
     'c': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []}},
    'a'],
   ['off', 'PREREQUISITE_FAILED', 'b']),
  ('later missing prerequisite is never reached',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['zz', 'on']]},
     'b': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': []}},
    'a'],
   ['off', 'PREREQUISITE_FAILED', 'b']),
  ('nested failure serving required off variation passes',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'x']]},
     'b': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['c', 'on']]},
     'c': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': []}},
    'a'],
   ['on', 'ON', None]),
  ('cycle revisits the root',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on']]},
     'b': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['a', 'on']]}},
    'a'],
   [None, 'CYCLE', 'a']),
  ('diamond dependency is not a cycle',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['c', 'on']]},
     'b': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['d', 'on']]},
     'c': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['d', 'on']]},
     'd': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': []}},
    'a'],
   ['on', 'ON', None]),
  ('prerequisite graph sample 21',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['b', 'on'], ['d', 'on']]},
     'b': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': [['d', 'off'], ['a', 'on'], ['d', 'x']]},
     'c': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['a', 'x']]},
     'd': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': []}},
    'e'],
   [None, 'MISSING', 'e']),
  ('prerequisite graph sample 22',
   [{'a': {'on': False, 'off': 'off', 'serve': 'x', 'prereqs': [['d', 'x'], ['e', 'on'], ['c', 'on']]},
     'b': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['c', 'off'], ['a', 'x']]},
     'c': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': [['c', 'on']]},
     'd': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': []},
     'e': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['a', 'on']]}},
    'a'],
   ['off', 'OFF', None]),
  ('prerequisite graph sample 23',
   [{'a': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []},
     'e': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': [['z', 'x'], ['c', 'on'], ['z', 'on']]}},
    'a'],
   ['x', 'ON', None])]]
for label, args, expected in fixtures[N - 1]:
    check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
off prerequisite whose off value equals the requirement fails['off', 'PREREQUISITE_FAILED', 'b']['off', 'PREREQUISITE_FAILED', 'b']Passed
failure names the unmet prerequisite['off', 'PREREQUISITE_FAILED', 'b']['off', 'PREREQUISITE_FAILED', 'b']Passed
cycle through an off member reports CYCLE[None, 'CYCLE', 'a'][None, 'CYCLE', 'a']Passed
missing prerequisite propagates MISSING[None, 'MISSING', 'zz'][None, 'MISSING', 'zz']Passed
first unmet prerequisite stops evaluation['off', 'PREREQUISITE_FAILED', 'c']['off', 'PREREQUISITE_FAILED', 'b']Failed
later missing prerequisite is never reached[None, 'MISSING', 'zz']['off', 'PREREQUISITE_FAILED', 'b']Failed
prerequisite graph sample 1[None, 'MISSING', 'd'][None, 'MISSING', 'd']Passed
prerequisite graph sample 2[None, 'MISSING', 'z'][None, 'MISSING', 'z']Passed

SHA-256 / be713c08e492cafdd1daf6bf6271ec27de178005b1c88d821549783611542661

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(flags, name):
    def ev(key, stack):
        f = flags.get(key)
        if f is None:
            return [None, 'MISSING', key]
        if key in stack:
            return [None, 'CYCLE', key]
        if not f['on']:
            return [f['off'], 'OFF', None]
        failed = None
        for pre, want in f.get('prereqs', []):
            got = ev(pre, stack + [key])
            if got[1] in ('MISSING', 'CYCLE'):
                return got
            if got[0] != want or got[1] == 'OFF':
                if failed is None:
                    failed = pre
        if failed is not None:
            return [f['off'], 'PREREQUISITE_FAILED', failed]
        return [f['serve'], 'ON', None]
    return ev(name, [])
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('off prerequisite whose off value equals the requirement fails',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'off']]},
     'b': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': []}},
    'a'],
   ['off', 'PREREQUISITE_FAILED', 'b']),
  ('failure names the unmet prerequisite',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on']]},
     'b': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []}},
    'a'],
   ['off', 'PREREQUISITE_FAILED', 'b']),
  ('cycle through an off member reports CYCLE',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on']]},
     'b': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['a', 'on']]}},
    'a'],
   [None, 'CYCLE', 'a']),
  ('missing prerequisite propagates MISSING',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['zz', 'on']]}}, 'a'],
   [None, 'MISSING', 'zz']),
  ('first unmet prerequisite stops evaluation',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['c', 'on']]},
     'b': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []},
     'c': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []}},
    'a'],
   ['off', 'PREREQUISITE_FAILED', 'b']),
  ('later missing prerequisite is never reached',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['zz', 'on']]},
     'b': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': []}},
    'a'],
   ['off', 'PREREQUISITE_FAILED', 'b']),
  ('prerequisite graph sample 1',
   [{'a': {'on': False, 'off': 'x', 'serve': 'on', 'prereqs': []},
     'b': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': [['e', 'on'], ['e', 'off']]},
     'c': {'on': False, 'off': 'x', 'serve': 'x', 'prereqs': [['c', 'on']]},
     'e': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['b', 'x'], ['e', 'x'], ['b', 'off']]}},
    'd'],
   [None, 'MISSING', 'd']),
  ('prerequisite graph sample 2',
   [{'a': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': []},
     'b': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['a', 'on'], ['c', 'on']]},
     'c': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': [['z', 'on'], ['d', 'x'], ['c', 'x']]},
     'e': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['a', 'on'], ['c', 'on']]}},
    'b'],
   [None, 'MISSING', 'z'])],
 [('failure names the unmet prerequisite',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on']]},
     'b': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []}},
    'a'],
   ['off', 'PREREQUISITE_FAILED', 'b']),
  ('cycle through an off member reports CYCLE',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on']]},
     'b': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['a', 'on']]}},
    'a'],
   [None, 'CYCLE', 'a']),
  ('missing prerequisite propagates MISSING',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['zz', 'on']]}}, 'a'],
   [None, 'MISSING', 'zz']),
  ('first unmet prerequisite stops evaluation',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['c', 'on']]},
     'b': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []},
     'c': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []}},
    'a'],
   ['off', 'PREREQUISITE_FAILED', 'b']),
  ('later missing prerequisite is never reached',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['zz', 'on']]},
     'b': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': []}},
    'a'],
   ['off', 'PREREQUISITE_FAILED', 'b']),
  ('prerequisite graph sample 6',
   [{'c': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': [['z', 'on'], ['d', 'off'], ['a', 'on']]},
     'd': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['d', 'on']]},
     'e': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['z', 'off']]}},
    'c'],
   ['off', 'OFF', None]),
  ('prerequisite graph sample 7',
   [{'a': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['z', 'x'], ['a', 'x'], ['a', 'on']]},
     'b': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': [['c', 'on']]},
     'd': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['z', 'on']]},
     'e': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': [['b', 'x'], ['d', 'on'], ['b', 'on']]}},
    'c'],
   [None, 'MISSING', 'c']),
  ('prerequisite graph sample 32',
   [{'b': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['b', 'off'], ['e', 'off']]},
     'c': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['d', 'on'], ['a', 'off']]},
     'd': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': [['z', 'on']]}},
    'c'],
   ['x', 'PREREQUISITE_FAILED', 'd'])],
 [('cycle through an off member reports CYCLE',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on']]},
     'b': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['a', 'on']]}},
    'a'],
   [None, 'CYCLE', 'a']),
  ('missing prerequisite propagates MISSING',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['zz', 'on']]}}, 'a'],
   [None, 'MISSING', 'zz']),
  ('first unmet prerequisite stops evaluation',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['c', 'on']]},
     'b': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []},
     'c': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []}},
    'a'],
   ['off', 'PREREQUISITE_FAILED', 'b']),
  ('later missing prerequisite is never reached',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['zz', 'on']]},
     'b': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': []}},
    'a'],
   ['off', 'PREREQUISITE_FAILED', 'b']),
  ('nested failure serving required off variation passes',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'x']]},
     'b': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['c', 'on']]},
     'c': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': []}},
    'a'],
   ['on', 'ON', None]),
  ('prerequisite graph sample 11',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['c', 'on']]},
     'b': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': [['z', 'x'], ['b', 'on']]},
     'c': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': []},
     'd': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['b', 'x'], ['z', 'x'], ['e', 'on']]},
     'e': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': []}},
    'e'],
   ['on', 'ON', None]),
  ('prerequisite graph sample 12',
   [{'a': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': [['c', 'on'], ['z', 'x']]},
     'b': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': [['b', 'on']]},
     'c': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['b', 'on']]},
     'e': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': []}},
    'c'],
   [None, 'CYCLE', 'b']),
  ('prerequisite graph sample 32',
   [{'b': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['b', 'off'], ['e', 'off']]},
     'c': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['d', 'on'], ['a', 'off']]},
     'd': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': [['z', 'on']]}},
    'c'],
   ['x', 'PREREQUISITE_FAILED', 'd'])],
 [('missing prerequisite propagates MISSING',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['zz', 'on']]}}, 'a'],
   [None, 'MISSING', 'zz']),
  ('first unmet prerequisite stops evaluation',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['c', 'on']]},
     'b': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []},
     'c': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []}},
    'a'],
   ['off', 'PREREQUISITE_FAILED', 'b']),
  ('later missing prerequisite is never reached',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['zz', 'on']]},
     'b': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': []}},
    'a'],
   ['off', 'PREREQUISITE_FAILED', 'b']),
  ('nested failure serving required off variation passes',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'x']]},
     'b': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['c', 'on']]},
     'c': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': []}},
    'a'],
   ['on', 'ON', None]),
  ('cycle revisits the root',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on']]},
     'b': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['a', 'on']]}},
    'a'],
   [None, 'CYCLE', 'a']),
  ('prerequisite graph sample 16',
   [{'a': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': []},
     'b': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['c', 'on'], ['d', 'off']]},
     'c': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': []},
     'd': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': [['z', 'off'], ['z', 'on']]},
     'e': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['d', 'on']]}},
    'c'],
   ['x', 'ON', None]),
  ('prerequisite graph sample 17',
   [{'b': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['c', 'off']]},
     'c': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': []}},
    'd'],
   [None, 'MISSING', 'd']),
  ('prerequisite graph sample 32',
   [{'b': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['b', 'off'], ['e', 'off']]},
     'c': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['d', 'on'], ['a', 'off']]},
     'd': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': [['z', 'on']]}},
    'c'],
   ['x', 'PREREQUISITE_FAILED', 'd'])],
 [('first unmet prerequisite stops evaluation',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['c', 'on']]},
     'b': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []},
     'c': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []}},
    'a'],
   ['off', 'PREREQUISITE_FAILED', 'b']),
  ('later missing prerequisite is never reached',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['zz', 'on']]},
     'b': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': []}},
    'a'],
   ['off', 'PREREQUISITE_FAILED', 'b']),
  ('nested failure serving required off variation passes',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'x']]},
     'b': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['c', 'on']]},
     'c': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': []}},
    'a'],
   ['on', 'ON', None]),
  ('cycle revisits the root',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on']]},
     'b': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['a', 'on']]}},
    'a'],
   [None, 'CYCLE', 'a']),
  ('diamond dependency is not a cycle',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['c', 'on']]},
     'b': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['d', 'on']]},
     'c': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['d', 'on']]},
     'd': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': []}},
    'a'],
   ['on', 'ON', None]),
  ('prerequisite graph sample 21',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['b', 'on'], ['d', 'on']]},
     'b': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': [['d', 'off'], ['a', 'on'], ['d', 'x']]},
     'c': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['a', 'x']]},
     'd': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': []}},
    'e'],
   [None, 'MISSING', 'e']),
  ('prerequisite graph sample 22',
   [{'a': {'on': False, 'off': 'off', 'serve': 'x', 'prereqs': [['d', 'x'], ['e', 'on'], ['c', 'on']]},
     'b': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['c', 'off'], ['a', 'x']]},
     'c': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': [['c', 'on']]},
     'd': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': []},
     'e': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['a', 'on']]}},
    'a'],
   ['off', 'OFF', None]),
  ('prerequisite graph sample 23',
   [{'a': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []},
     'e': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': [['z', 'x'], ['c', 'on'], ['z', 'on']]}},
    'a'],
   ['x', 'ON', None])]]
for label, args, expected in fixtures[N - 1]:
    check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
off prerequisite whose off value equals the requirement fails['off', 'PREREQUISITE_FAILED', 'b']['off', 'PREREQUISITE_FAILED', 'b']Passed
failure names the unmet prerequisite['off', 'PREREQUISITE_FAILED', 'b']['off', 'PREREQUISITE_FAILED', 'b']Passed
cycle through an off member reports CYCLE[None, 'CYCLE', 'a'][None, 'CYCLE', 'a']Passed
missing prerequisite propagates MISSING[None, 'MISSING', 'zz'][None, 'MISSING', 'zz']Passed
first unmet prerequisite stops evaluation['off', 'PREREQUISITE_FAILED', 'b']['off', 'PREREQUISITE_FAILED', 'b']Passed
later missing prerequisite is never reached[None, 'MISSING', 'zz']['off', 'PREREQUISITE_FAILED', 'b']Failed
prerequisite graph sample 1[None, 'MISSING', 'd'][None, 'MISSING', 'd']Passed
prerequisite graph sample 2[None, 'MISSING', 'z'][None, 'MISSING', 'z']Passed

SHA-256 / 72fd26a288f111ae9c493d594018cbbaa7234cfdf51cf05d8a079239b40bb3a5

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(flags, name):
    def ev(key, stack):
        f = flags.get(key)
        if f is None:
            return [None, 'MISSING', key]
        if key in stack:
            return [None, 'CYCLE', key]
        if not f['on']:
            return [f['off'], 'OFF', None]
        for pre, want in f.get('prereqs', []):
            got = ev(pre, stack + [key])
            if got[1] in ('MISSING', 'CYCLE'):
                return got
            if got[0] != want or got[1] == 'OFF':
                return [f['off'], 'PREREQUISITE_FAILED', pre]
        return [f['serve'], 'ON', None]
    return ev(name, [])
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('off prerequisite whose off value equals the requirement fails',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'off']]},
     'b': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': []}},
    'a'],
   ['off', 'PREREQUISITE_FAILED', 'b']),
  ('failure names the unmet prerequisite',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on']]},
     'b': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []}},
    'a'],
   ['off', 'PREREQUISITE_FAILED', 'b']),
  ('cycle through an off member reports CYCLE',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on']]},
     'b': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['a', 'on']]}},
    'a'],
   [None, 'CYCLE', 'a']),
  ('missing prerequisite propagates MISSING',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['zz', 'on']]}}, 'a'],
   [None, 'MISSING', 'zz']),
  ('first unmet prerequisite stops evaluation',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['c', 'on']]},
     'b': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []},
     'c': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []}},
    'a'],
   ['off', 'PREREQUISITE_FAILED', 'b']),
  ('later missing prerequisite is never reached',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['zz', 'on']]},
     'b': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': []}},
    'a'],
   ['off', 'PREREQUISITE_FAILED', 'b']),
  ('prerequisite graph sample 1',
   [{'a': {'on': False, 'off': 'x', 'serve': 'on', 'prereqs': []},
     'b': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': [['e', 'on'], ['e', 'off']]},
     'c': {'on': False, 'off': 'x', 'serve': 'x', 'prereqs': [['c', 'on']]},
     'e': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['b', 'x'], ['e', 'x'], ['b', 'off']]}},
    'd'],
   [None, 'MISSING', 'd']),
  ('prerequisite graph sample 2',
   [{'a': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': []},
     'b': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['a', 'on'], ['c', 'on']]},
     'c': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': [['z', 'on'], ['d', 'x'], ['c', 'x']]},
     'e': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['a', 'on'], ['c', 'on']]}},
    'b'],
   [None, 'MISSING', 'z'])],
 [('failure names the unmet prerequisite',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on']]},
     'b': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []}},
    'a'],
   ['off', 'PREREQUISITE_FAILED', 'b']),
  ('cycle through an off member reports CYCLE',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on']]},
     'b': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['a', 'on']]}},
    'a'],
   [None, 'CYCLE', 'a']),
  ('missing prerequisite propagates MISSING',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['zz', 'on']]}}, 'a'],
   [None, 'MISSING', 'zz']),
  ('first unmet prerequisite stops evaluation',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['c', 'on']]},
     'b': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []},
     'c': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []}},
    'a'],
   ['off', 'PREREQUISITE_FAILED', 'b']),
  ('later missing prerequisite is never reached',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['zz', 'on']]},
     'b': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': []}},
    'a'],
   ['off', 'PREREQUISITE_FAILED', 'b']),
  ('prerequisite graph sample 6',
   [{'c': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': [['z', 'on'], ['d', 'off'], ['a', 'on']]},
     'd': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['d', 'on']]},
     'e': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['z', 'off']]}},
    'c'],
   ['off', 'OFF', None]),
  ('prerequisite graph sample 7',
   [{'a': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['z', 'x'], ['a', 'x'], ['a', 'on']]},
     'b': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': [['c', 'on']]},
     'd': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['z', 'on']]},
     'e': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': [['b', 'x'], ['d', 'on'], ['b', 'on']]}},
    'c'],
   [None, 'MISSING', 'c']),
  ('prerequisite graph sample 32',
   [{'b': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['b', 'off'], ['e', 'off']]},
     'c': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['d', 'on'], ['a', 'off']]},
     'd': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': [['z', 'on']]}},
    'c'],
   ['x', 'PREREQUISITE_FAILED', 'd'])],
 [('cycle through an off member reports CYCLE',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on']]},
     'b': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['a', 'on']]}},
    'a'],
   [None, 'CYCLE', 'a']),
  ('missing prerequisite propagates MISSING',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['zz', 'on']]}}, 'a'],
   [None, 'MISSING', 'zz']),
  ('first unmet prerequisite stops evaluation',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['c', 'on']]},
     'b': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []},
     'c': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []}},
    'a'],
   ['off', 'PREREQUISITE_FAILED', 'b']),
  ('later missing prerequisite is never reached',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['zz', 'on']]},
     'b': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': []}},
    'a'],
   ['off', 'PREREQUISITE_FAILED', 'b']),
  ('nested failure serving required off variation passes',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'x']]},
     'b': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['c', 'on']]},
     'c': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': []}},
    'a'],
   ['on', 'ON', None]),
  ('prerequisite graph sample 11',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['c', 'on']]},
     'b': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': [['z', 'x'], ['b', 'on']]},
     'c': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': []},
     'd': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['b', 'x'], ['z', 'x'], ['e', 'on']]},
     'e': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': []}},
    'e'],
   ['on', 'ON', None]),
  ('prerequisite graph sample 12',
   [{'a': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': [['c', 'on'], ['z', 'x']]},
     'b': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': [['b', 'on']]},
     'c': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['b', 'on']]},
     'e': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': []}},
    'c'],
   [None, 'CYCLE', 'b']),
  ('prerequisite graph sample 32',
   [{'b': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['b', 'off'], ['e', 'off']]},
     'c': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['d', 'on'], ['a', 'off']]},
     'd': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': [['z', 'on']]}},
    'c'],
   ['x', 'PREREQUISITE_FAILED', 'd'])],
 [('missing prerequisite propagates MISSING',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['zz', 'on']]}}, 'a'],
   [None, 'MISSING', 'zz']),
  ('first unmet prerequisite stops evaluation',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['c', 'on']]},
     'b': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []},
     'c': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []}},
    'a'],
   ['off', 'PREREQUISITE_FAILED', 'b']),
  ('later missing prerequisite is never reached',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['zz', 'on']]},
     'b': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': []}},
    'a'],
   ['off', 'PREREQUISITE_FAILED', 'b']),
  ('nested failure serving required off variation passes',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'x']]},
     'b': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['c', 'on']]},
     'c': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': []}},
    'a'],
   ['on', 'ON', None]),
  ('cycle revisits the root',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on']]},
     'b': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['a', 'on']]}},
    'a'],
   [None, 'CYCLE', 'a']),
  ('prerequisite graph sample 16',
   [{'a': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': []},
     'b': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['c', 'on'], ['d', 'off']]},
     'c': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': []},
     'd': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': [['z', 'off'], ['z', 'on']]},
     'e': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['d', 'on']]}},
    'c'],
   ['x', 'ON', None]),
  ('prerequisite graph sample 17',
   [{'b': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['c', 'off']]},
     'c': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': []}},
    'd'],
   [None, 'MISSING', 'd']),
  ('prerequisite graph sample 32',
   [{'b': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['b', 'off'], ['e', 'off']]},
     'c': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['d', 'on'], ['a', 'off']]},
     'd': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': [['z', 'on']]}},
    'c'],
   ['x', 'PREREQUISITE_FAILED', 'd'])],
 [('first unmet prerequisite stops evaluation',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['c', 'on']]},
     'b': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []},
     'c': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []}},
    'a'],
   ['off', 'PREREQUISITE_FAILED', 'b']),
  ('later missing prerequisite is never reached',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['zz', 'on']]},
     'b': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': []}},
    'a'],
   ['off', 'PREREQUISITE_FAILED', 'b']),
  ('nested failure serving required off variation passes',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'x']]},
     'b': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': [['c', 'on']]},
     'c': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': []}},
    'a'],
   ['on', 'ON', None]),
  ('cycle revisits the root',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on']]},
     'b': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['a', 'on']]}},
    'a'],
   [None, 'CYCLE', 'a']),
  ('diamond dependency is not a cycle',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['c', 'on']]},
     'b': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['d', 'on']]},
     'c': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['d', 'on']]},
     'd': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': []}},
    'a'],
   ['on', 'ON', None]),
  ('prerequisite graph sample 21',
   [{'a': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'on'], ['b', 'on'], ['d', 'on']]},
     'b': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': [['d', 'off'], ['a', 'on'], ['d', 'x']]},
     'c': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['a', 'x']]},
     'd': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': []}},
    'e'],
   [None, 'MISSING', 'e']),
  ('prerequisite graph sample 22',
   [{'a': {'on': False, 'off': 'off', 'serve': 'x', 'prereqs': [['d', 'x'], ['e', 'on'], ['c', 'on']]},
     'b': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['c', 'off'], ['a', 'x']]},
     'c': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': [['c', 'on']]},
     'd': {'on': True, 'off': 'x', 'serve': 'on', 'prereqs': []},
     'e': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['a', 'on']]}},
    'a'],
   ['off', 'OFF', None]),
  ('prerequisite graph sample 23',
   [{'a': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': []},
     'e': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': [['z', 'x'], ['c', 'on'], ['z', 'on']]}},
    'a'],
   ['x', 'ON', None])]]
for label, args, expected in fixtures[N - 1]:
    check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
off prerequisite whose off value equals the requirement fails['off', 'PREREQUISITE_FAILED', 'b']['off', 'PREREQUISITE_FAILED', 'b']Passed
failure names the unmet prerequisite['off', 'PREREQUISITE_FAILED', 'b']['off', 'PREREQUISITE_FAILED', 'b']Passed
cycle through an off member reports CYCLE[None, 'CYCLE', 'a'][None, 'CYCLE', 'a']Passed
missing prerequisite propagates MISSING[None, 'MISSING', 'zz'][None, 'MISSING', 'zz']Passed
first unmet prerequisite stops evaluation['off', 'PREREQUISITE_FAILED', 'b']['off', 'PREREQUISITE_FAILED', 'b']Passed
later missing prerequisite is never reached['off', 'PREREQUISITE_FAILED', 'b']['off', 'PREREQUISITE_FAILED', 'b']Passed
prerequisite graph sample 1[None, 'MISSING', 'd'][None, 'MISSING', 'd']Passed
prerequisite graph sample 2[None, 'MISSING', 'z'][None, 'MISSING', 'z']Passed

SHA-256 / 34f8cfc5bc2cc1994c2c8aab3f17ed8b6e94b75936625548dcfd2ac3c6f4ca15

Verification & scope

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.

Observations recorded using Python 3.12.14 at 2026-09-29T14:48:51.990569+00:00.

Case digest / 3e06ca218beab5a38b4009c4e2c4ed1673a6d358995d95ee3b2e4cb7c4fb3e93