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.
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| 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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| 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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| 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