FA-73931 / Feature flag rollout bucketing / Open access
Prerequisite flag chain: Missing prerequisites look like ordinary failures · case 01
A typo in a prerequisite key is reported as a routine prerequisite failure.
ROOT CAUSE
Only CYCLE results are propagated; a MISSING prerequisite falls through to the variation comparison.
VERIFIED REPAIR
Propagate MISSING and CYCLE results unchanged.
Unsuccessful approach: Rewrapping the error with the off variation changes the propagated value from None.
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]
for pre, want in f.get('prereqs', []):
got = ev(pre, stack + [key])
if got[1] == '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']),
('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 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']),
('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 13',
[{'a': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': [['z', 'off'], ['d', 'x'], ['e', 'off']]},
'b': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': [['c', 'on'], ['z', 'x'], ['b', 'on']]},
'c': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['e', 'on'], ['d', 'off']]},
'd': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'x']]}},
'a'],
[None, 'MISSING', 'z']),
('prerequisite graph sample 49',
[{'a': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': []},
'c': {'on': False, 'off': 'x', 'serve': 'x', 'prereqs': [['c', 'off'], ['c', 'on'], ['b', 'x']]},
'd': {'on': False, 'off': 'off', 'serve': 'x', 'prereqs': [['e', 'on'], ['a', 'off']]},
'e': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': [['z', 'on'], ['a', 'off'], ['e', 'on']]}},
'e'],
[None, 'MISSING', 'z'])],
[('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 39',
[{'a': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': [['z', 'on'], ['e', 'off']]},
'b': {'on': False, 'off': 'x', 'serve': 'on', 'prereqs': [['e', 'on'], ['c', 'on']]},
'c': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': [['z', 'x']]},
'd': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'x']]},
'e': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': [['z', 'off'], ['c', 'on']]}},
'c'],
[None, 'MISSING', 'z'])],
[('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 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']),
('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 49',
[{'a': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': []},
'c': {'on': False, 'off': 'x', 'serve': 'x', 'prereqs': [['c', 'off'], ['c', 'on'], ['b', 'x']]},
'd': {'on': False, 'off': 'off', 'serve': 'x', 'prereqs': [['e', 'on'], ['a', 'off']]},
'e': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': [['z', 'on'], ['a', 'off'], ['e', 'on']]}},
'e'],
[None, 'MISSING', 'z'])],
[('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']),
('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 51',
[{'c': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': [['z', 'off']]},
'd': {'on': False, 'off': 'x', 'serve': 'x', 'prereqs': [['a', 'on'], ['a', 'on'], ['c', 'x']]},
'e': {'on': False, 'off': 'x', 'serve': 'on', 'prereqs': [['e', 'off']]}},
'c'],
[None, 'MISSING', 'z'])]]
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 | ['off', 'PREREQUISITE_FAILED', 'zz'] | [None, 'MISSING', 'zz'] | Failed |
| first unmet prerequisite stops evaluation | ['off', 'PREREQUISITE_FAILED', 'b'] | ['off', 'PREREQUISITE_FAILED', 'b'] | Passed |
| cycle revisits the root | [None, 'CYCLE', 'a'] | [None, 'CYCLE', 'a'] | Passed |
| prerequisite graph sample 1 | [None, 'MISSING', 'd'] | [None, 'MISSING', 'd'] | Passed |
| prerequisite graph sample 2 | ['off', 'PREREQUISITE_FAILED', 'c'] | [None, 'MISSING', 'z'] | Failed |
SHA-256 / 2ca7bf621709c66918271e0e1a2d5cacaac1a86514435e06011bbfbc03608cae
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]
for pre, want in f.get('prereqs', []):
got = ev(pre, stack + [key])
if got[1] in ('MISSING', 'CYCLE'):
return [f['off'], got[1], got[2]]
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']),
('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 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']),
('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 13',
[{'a': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': [['z', 'off'], ['d', 'x'], ['e', 'off']]},
'b': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': [['c', 'on'], ['z', 'x'], ['b', 'on']]},
'c': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['e', 'on'], ['d', 'off']]},
'd': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'x']]}},
'a'],
[None, 'MISSING', 'z']),
('prerequisite graph sample 49',
[{'a': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': []},
'c': {'on': False, 'off': 'x', 'serve': 'x', 'prereqs': [['c', 'off'], ['c', 'on'], ['b', 'x']]},
'd': {'on': False, 'off': 'off', 'serve': 'x', 'prereqs': [['e', 'on'], ['a', 'off']]},
'e': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': [['z', 'on'], ['a', 'off'], ['e', 'on']]}},
'e'],
[None, 'MISSING', 'z'])],
[('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 39',
[{'a': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': [['z', 'on'], ['e', 'off']]},
'b': {'on': False, 'off': 'x', 'serve': 'on', 'prereqs': [['e', 'on'], ['c', 'on']]},
'c': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': [['z', 'x']]},
'd': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'x']]},
'e': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': [['z', 'off'], ['c', 'on']]}},
'c'],
[None, 'MISSING', 'z'])],
[('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 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']),
('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 49',
[{'a': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': []},
'c': {'on': False, 'off': 'x', 'serve': 'x', 'prereqs': [['c', 'off'], ['c', 'on'], ['b', 'x']]},
'd': {'on': False, 'off': 'off', 'serve': 'x', 'prereqs': [['e', 'on'], ['a', 'off']]},
'e': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': [['z', 'on'], ['a', 'off'], ['e', 'on']]}},
'e'],
[None, 'MISSING', 'z'])],
[('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']),
('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 51',
[{'c': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': [['z', 'off']]},
'd': {'on': False, 'off': 'x', 'serve': 'x', 'prereqs': [['a', 'on'], ['a', 'on'], ['c', 'x']]},
'e': {'on': False, 'off': 'x', 'serve': 'on', 'prereqs': [['e', 'off']]}},
'c'],
[None, 'MISSING', 'z'])]]
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 | ['off', 'CYCLE', 'a'] | [None, 'CYCLE', 'a'] | Failed |
| missing prerequisite propagates MISSING | ['off', 'MISSING', 'zz'] | [None, 'MISSING', 'zz'] | Failed |
| first unmet prerequisite stops evaluation | ['off', 'PREREQUISITE_FAILED', 'b'] | ['off', 'PREREQUISITE_FAILED', 'b'] | Passed |
| cycle revisits the root | ['off', 'CYCLE', 'a'] | [None, 'CYCLE', 'a'] | Failed |
| prerequisite graph sample 1 | [None, 'MISSING', 'd'] | [None, 'MISSING', 'd'] | Passed |
| prerequisite graph sample 2 | ['off', 'MISSING', 'z'] | [None, 'MISSING', 'z'] | Failed |
SHA-256 / 45d45b5e5280aaaf8de912ffe0f5dff19723ddbfef32b94b189125921d475020
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']),
('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 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']),
('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 13',
[{'a': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': [['z', 'off'], ['d', 'x'], ['e', 'off']]},
'b': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': [['c', 'on'], ['z', 'x'], ['b', 'on']]},
'c': {'on': True, 'off': 'off', 'serve': 'on', 'prereqs': [['e', 'on'], ['d', 'off']]},
'd': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'x']]}},
'a'],
[None, 'MISSING', 'z']),
('prerequisite graph sample 49',
[{'a': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': []},
'c': {'on': False, 'off': 'x', 'serve': 'x', 'prereqs': [['c', 'off'], ['c', 'on'], ['b', 'x']]},
'd': {'on': False, 'off': 'off', 'serve': 'x', 'prereqs': [['e', 'on'], ['a', 'off']]},
'e': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': [['z', 'on'], ['a', 'off'], ['e', 'on']]}},
'e'],
[None, 'MISSING', 'z'])],
[('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 39',
[{'a': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': [['z', 'on'], ['e', 'off']]},
'b': {'on': False, 'off': 'x', 'serve': 'on', 'prereqs': [['e', 'on'], ['c', 'on']]},
'c': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': [['z', 'x']]},
'd': {'on': False, 'off': 'off', 'serve': 'on', 'prereqs': [['b', 'x']]},
'e': {'on': True, 'off': 'off', 'serve': 'x', 'prereqs': [['z', 'off'], ['c', 'on']]}},
'c'],
[None, 'MISSING', 'z'])],
[('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 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']),
('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 49',
[{'a': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': []},
'c': {'on': False, 'off': 'x', 'serve': 'x', 'prereqs': [['c', 'off'], ['c', 'on'], ['b', 'x']]},
'd': {'on': False, 'off': 'off', 'serve': 'x', 'prereqs': [['e', 'on'], ['a', 'off']]},
'e': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': [['z', 'on'], ['a', 'off'], ['e', 'on']]}},
'e'],
[None, 'MISSING', 'z'])],
[('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']),
('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 51',
[{'c': {'on': True, 'off': 'x', 'serve': 'x', 'prereqs': [['z', 'off']]},
'd': {'on': False, 'off': 'x', 'serve': 'x', 'prereqs': [['a', 'on'], ['a', 'on'], ['c', 'x']]},
'e': {'on': False, 'off': 'x', 'serve': 'on', 'prereqs': [['e', 'off']]}},
'c'],
[None, 'MISSING', 'z'])]]
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 |
| cycle revisits the root | [None, 'CYCLE', 'a'] | [None, 'CYCLE', 'a'] | 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 / 9a54323e96dcd8c53b7675c23ec0afbd6c9111516cad04a13c444104cd31bac7
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.983091+00:00.
Case digest / 405d24a31bc1e6aa91495fdc3cef684f00cde596aefc2d0fcf18114847b14e08