FA-74071 / Feature flag rollout bucketing / Open access
Mutually exclusive layer allocation: Paused experiments release their range · case 01
Pausing an experiment pours its users into an overlapping experiment listed later.
ROOT CAUSE
A paused experiment is skipped with continue instead of reserving its range.
VERIFIED REPAIR
Return no experiment for users inside a paused experiment's range.
Unsuccessful approach: Reporting a paused marker name still labels the user as allocated.
Case contract
bucket = int(md5(layer_salt + ":" + user) hex, 16) % 1000. experiments is an ordered list of {name, start, end, paused?} with start/end in percent (one decimal) converted to permille by round(x * 10); ranges are half-open [start, end). The first listed range containing the bucket decides: a paused experiment reserves its range (user gets None). Return [bucket, name or None].
Why this case matters
Layers keep concurrent experiments from overlapping on the same users.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
import hashlib
N = 1
observations = []
def solve(layer_salt, user, experiments):
bucket = int(hashlib.md5((layer_salt + ':' + user).encode()).hexdigest(), 16) % 1000
for exp in experiments:
lo = round(exp['start'] * 10)
hi = round(exp['end'] * 10)
if lo <= bucket < hi:
if exp.get('paused'):
continue
return [bucket, exp['name']]
return [bucket, None]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('bucket at range end belongs to next range',
['layer-a', 'alice', [{'name': 'x', 'start': 0, 'end': 98.8}, {'name': 'y', 'start': 98.8, 'end': 100}]],
[988, 'y']),
('bucket at range start is included',
['layer-b', 'bob', [{'name': 'x', 'start': 30.9, 'end': 100}]],
[309, 'x']),
('paused range reserves its users',
['layer-a',
'alice',
[{'name': 'x', 'start': 0, 'end': 100, 'paused': True}, {'name': 'y', 'start': 0, 'end': 100}]],
[988, None]),
('first listed overlapping range wins',
['layer-b',
'bob',
[{'name': 'wide', 'start': 0, 'end': 100}, {'name': 'narrow', 'start': 30.9, 'end': 31.0}]],
[309, 'wide']),
('percent bounds convert to permille',
['layer-a', 'alice', [{'name': 'x', 'start': 98.3, 'end': 99.3}]],
[988, 'x']),
('layer sample 1',
['layer-a',
'u295',
[{'name': 'exp0', 'start': 50, 'end': 57.7, 'paused': False},
{'name': 'exp1', 'start': 0, 'end': 57.7, 'paused': False}]],
[576, 'exp0']),
('layer sample 2',
['layer-b',
'u4435',
[{'name': 'exp0', 'start': 0, 'end': 75.0, 'paused': True},
{'name': 'exp1', 'start': 0, 'end': 74.9, 'paused': False}]],
[750, None]),
('layer sample 3',
['layer-a',
'u3828',
[{'name': 'exp0', 'start': 1.72, 'end': 17.3, 'paused': False},
{'name': 'exp1', 'start': 0, 'end': 17.3, 'paused': True}]],
[172, 'exp0'])],
[('bucket at range start is included',
['layer-b', 'bob', [{'name': 'x', 'start': 30.9, 'end': 100}]],
[309, 'x']),
('paused range reserves its users',
['layer-a',
'alice',
[{'name': 'x', 'start': 0, 'end': 100, 'paused': True}, {'name': 'y', 'start': 0, 'end': 100}]],
[988, None]),
('first listed overlapping range wins',
['layer-b',
'bob',
[{'name': 'wide', 'start': 0, 'end': 100}, {'name': 'narrow', 'start': 30.9, 'end': 31.0}]],
[309, 'wide']),
('percent bounds convert to permille',
['layer-a', 'alice', [{'name': 'x', 'start': 98.3, 'end': 99.3}]],
[988, 'x']),
('no range matches', ['layer-b', 'bob', [{'name': 'x', 'start': 0, 'end': 0}]], [309, None]),
('layer sample 6',
['layer-a', 'u2869', [{'name': 'exp0', 'start': 28.1, 'end': 50, 'paused': False}]],
[282, 'exp0']),
('layer sample 18',
['layer-b',
'u4000',
[{'name': 'exp0', 'start': 0, 'end': 2.83, 'paused': False},
{'name': 'exp1', 'start': 0, 'end': 100, 'paused': True},
{'name': 'exp2', 'start': 28.2, 'end': 28.4, 'paused': False}]],
[283, None]),
('layer sample 34',
['layer-b', 'u91', [{'name': 'exp0', 'start': 41.6, 'end': 41.8, 'paused': True}]],
[417, None])],
[('paused range reserves its users',
['layer-a',
'alice',
[{'name': 'x', 'start': 0, 'end': 100, 'paused': True}, {'name': 'y', 'start': 0, 'end': 100}]],
[988, None]),
('first listed overlapping range wins',
['layer-b',
'bob',
[{'name': 'wide', 'start': 0, 'end': 100}, {'name': 'narrow', 'start': 30.9, 'end': 31.0}]],
[309, 'wide']),
('percent bounds convert to permille',
['layer-a', 'alice', [{'name': 'x', 'start': 98.3, 'end': 99.3}]],
[988, 'x']),
('no range matches', ['layer-b', 'bob', [{'name': 'x', 'start': 0, 'end': 0}]], [309, None]),
('empty experiment list', ['layer-a', 'carol', []], [970, None]),
('layer sample 11',
['layer-b',
'u3995',
[{'name': 'exp0', 'start': 50, 'end': 84.5, 'paused': True},
{'name': 'exp1', 'start': 8.45, 'end': 84.5, 'paused': True}]],
[845, None]),
('layer sample 12',
['layer-a', 'u3185', [{'name': 'exp0', 'start': 50, 'end': 98.8, 'paused': False}]],
[344, None]),
('layer sample 50',
['layer-b',
'u369',
[{'name': 'exp0', 'start': 8.27, 'end': 90.0, 'paused': True},
{'name': 'exp1', 'start': 8.27, 'end': 82.8, 'paused': False}]],
[827, None])],
[('bucket at range end belongs to next range',
['layer-a', 'alice', [{'name': 'x', 'start': 0, 'end': 98.8}, {'name': 'y', 'start': 98.8, 'end': 100}]],
[988, 'y']),
('first listed overlapping range wins',
['layer-b',
'bob',
[{'name': 'wide', 'start': 0, 'end': 100}, {'name': 'narrow', 'start': 30.9, 'end': 31.0}]],
[309, 'wide']),
('percent bounds convert to permille',
['layer-a', 'alice', [{'name': 'x', 'start': 98.3, 'end': 99.3}]],
[988, 'x']),
('no range matches', ['layer-b', 'bob', [{'name': 'x', 'start': 0, 'end': 0}]], [309, None]),
('empty experiment list', ['layer-a', 'carol', []], [970, None]),
('layer sample 16',
['layer-a',
'u4745',
[{'name': 'exp0', 'start': 81.9, 'end': 100, 'paused': True},
{'name': 'exp1', 'start': 8.19, 'end': 82.0, 'paused': True},
{'name': 'exp2', 'start': 50, 'end': 82.0, 'paused': False}]],
[819, None]),
('layer sample 17',
['layer-a',
'u1058',
[{'name': 'exp0', 'start': 39.5, 'end': 100, 'paused': False},
{'name': 'exp1', 'start': 39.3, 'end': 39.4, 'paused': False}]],
[394, None]),
('layer sample 34',
['layer-b', 'u91', [{'name': 'exp0', 'start': 41.6, 'end': 41.8, 'paused': True}]],
[417, None])],
[('bucket at range end belongs to next range',
['layer-a', 'alice', [{'name': 'x', 'start': 0, 'end': 98.8}, {'name': 'y', 'start': 98.8, 'end': 100}]],
[988, 'y']),
('bucket at range start is included',
['layer-b', 'bob', [{'name': 'x', 'start': 30.9, 'end': 100}]],
[309, 'x']),
('paused range reserves its users',
['layer-a',
'alice',
[{'name': 'x', 'start': 0, 'end': 100, 'paused': True}, {'name': 'y', 'start': 0, 'end': 100}]],
[988, None]),
('percent bounds convert to permille',
['layer-a', 'alice', [{'name': 'x', 'start': 98.3, 'end': 99.3}]],
[988, 'x']),
('no range matches', ['layer-b', 'bob', [{'name': 'x', 'start': 0, 'end': 0}]], [309, None]),
('empty experiment list', ['layer-a', 'carol', []], [970, None]),
('layer sample 21',
['layer-a',
'u505',
[{'name': 'exp0', 'start': 0, 'end': 100, 'paused': False},
{'name': 'exp1', 'start': 54.1, 'end': 100, 'paused': False}]],
[540, 'exp0']),
('layer sample 23',
['layer-b',
'u3183',
[{'name': 'exp0', 'start': 0, 'end': 50, 'paused': True},
{'name': 'exp1', 'start': 23.6, 'end': 100, 'paused': False},
{'name': 'exp2', 'start': 23.7, 'end': 50, 'paused': False}]],
[236, 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 |
|---|---|---|---|
| bucket at range end belongs to next range | [988, 'y'] | [988, 'y'] | Passed |
| bucket at range start is included | [309, 'x'] | [309, 'x'] | Passed |
| paused range reserves its users | [988, 'y'] | [988, None] | Failed |
| first listed overlapping range wins | [309, 'wide'] | [309, 'wide'] | Passed |
| percent bounds convert to permille | [988, 'x'] | [988, 'x'] | Passed |
| layer sample 1 | [576, 'exp0'] | [576, 'exp0'] | Passed |
| layer sample 2 | [750, None] | [750, None] | Passed |
| layer sample 3 | [172, 'exp0'] | [172, 'exp0'] | Passed |
SHA-256 / 43b5b6ff6839ae2f0b4f96ce74f3985a57eda70f8d44e284e4a7b7e966e48157
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
import hashlib
N = 1
observations = []
def solve(layer_salt, user, experiments):
bucket = int(hashlib.md5((layer_salt + ':' + user).encode()).hexdigest(), 16) % 1000
for exp in experiments:
lo = round(exp['start'] * 10)
hi = round(exp['end'] * 10)
if lo <= bucket < hi:
if exp.get('paused'):
return [bucket, exp['name'] + ':paused']
return [bucket, exp['name']]
return [bucket, None]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('bucket at range end belongs to next range',
['layer-a', 'alice', [{'name': 'x', 'start': 0, 'end': 98.8}, {'name': 'y', 'start': 98.8, 'end': 100}]],
[988, 'y']),
('bucket at range start is included',
['layer-b', 'bob', [{'name': 'x', 'start': 30.9, 'end': 100}]],
[309, 'x']),
('paused range reserves its users',
['layer-a',
'alice',
[{'name': 'x', 'start': 0, 'end': 100, 'paused': True}, {'name': 'y', 'start': 0, 'end': 100}]],
[988, None]),
('first listed overlapping range wins',
['layer-b',
'bob',
[{'name': 'wide', 'start': 0, 'end': 100}, {'name': 'narrow', 'start': 30.9, 'end': 31.0}]],
[309, 'wide']),
('percent bounds convert to permille',
['layer-a', 'alice', [{'name': 'x', 'start': 98.3, 'end': 99.3}]],
[988, 'x']),
('layer sample 1',
['layer-a',
'u295',
[{'name': 'exp0', 'start': 50, 'end': 57.7, 'paused': False},
{'name': 'exp1', 'start': 0, 'end': 57.7, 'paused': False}]],
[576, 'exp0']),
('layer sample 2',
['layer-b',
'u4435',
[{'name': 'exp0', 'start': 0, 'end': 75.0, 'paused': True},
{'name': 'exp1', 'start': 0, 'end': 74.9, 'paused': False}]],
[750, None]),
('layer sample 3',
['layer-a',
'u3828',
[{'name': 'exp0', 'start': 1.72, 'end': 17.3, 'paused': False},
{'name': 'exp1', 'start': 0, 'end': 17.3, 'paused': True}]],
[172, 'exp0'])],
[('bucket at range start is included',
['layer-b', 'bob', [{'name': 'x', 'start': 30.9, 'end': 100}]],
[309, 'x']),
('paused range reserves its users',
['layer-a',
'alice',
[{'name': 'x', 'start': 0, 'end': 100, 'paused': True}, {'name': 'y', 'start': 0, 'end': 100}]],
[988, None]),
('first listed overlapping range wins',
['layer-b',
'bob',
[{'name': 'wide', 'start': 0, 'end': 100}, {'name': 'narrow', 'start': 30.9, 'end': 31.0}]],
[309, 'wide']),
('percent bounds convert to permille',
['layer-a', 'alice', [{'name': 'x', 'start': 98.3, 'end': 99.3}]],
[988, 'x']),
('no range matches', ['layer-b', 'bob', [{'name': 'x', 'start': 0, 'end': 0}]], [309, None]),
('layer sample 6',
['layer-a', 'u2869', [{'name': 'exp0', 'start': 28.1, 'end': 50, 'paused': False}]],
[282, 'exp0']),
('layer sample 18',
['layer-b',
'u4000',
[{'name': 'exp0', 'start': 0, 'end': 2.83, 'paused': False},
{'name': 'exp1', 'start': 0, 'end': 100, 'paused': True},
{'name': 'exp2', 'start': 28.2, 'end': 28.4, 'paused': False}]],
[283, None]),
('layer sample 34',
['layer-b', 'u91', [{'name': 'exp0', 'start': 41.6, 'end': 41.8, 'paused': True}]],
[417, None])],
[('paused range reserves its users',
['layer-a',
'alice',
[{'name': 'x', 'start': 0, 'end': 100, 'paused': True}, {'name': 'y', 'start': 0, 'end': 100}]],
[988, None]),
('first listed overlapping range wins',
['layer-b',
'bob',
[{'name': 'wide', 'start': 0, 'end': 100}, {'name': 'narrow', 'start': 30.9, 'end': 31.0}]],
[309, 'wide']),
('percent bounds convert to permille',
['layer-a', 'alice', [{'name': 'x', 'start': 98.3, 'end': 99.3}]],
[988, 'x']),
('no range matches', ['layer-b', 'bob', [{'name': 'x', 'start': 0, 'end': 0}]], [309, None]),
('empty experiment list', ['layer-a', 'carol', []], [970, None]),
('layer sample 11',
['layer-b',
'u3995',
[{'name': 'exp0', 'start': 50, 'end': 84.5, 'paused': True},
{'name': 'exp1', 'start': 8.45, 'end': 84.5, 'paused': True}]],
[845, None]),
('layer sample 12',
['layer-a', 'u3185', [{'name': 'exp0', 'start': 50, 'end': 98.8, 'paused': False}]],
[344, None]),
('layer sample 50',
['layer-b',
'u369',
[{'name': 'exp0', 'start': 8.27, 'end': 90.0, 'paused': True},
{'name': 'exp1', 'start': 8.27, 'end': 82.8, 'paused': False}]],
[827, None])],
[('bucket at range end belongs to next range',
['layer-a', 'alice', [{'name': 'x', 'start': 0, 'end': 98.8}, {'name': 'y', 'start': 98.8, 'end': 100}]],
[988, 'y']),
('first listed overlapping range wins',
['layer-b',
'bob',
[{'name': 'wide', 'start': 0, 'end': 100}, {'name': 'narrow', 'start': 30.9, 'end': 31.0}]],
[309, 'wide']),
('percent bounds convert to permille',
['layer-a', 'alice', [{'name': 'x', 'start': 98.3, 'end': 99.3}]],
[988, 'x']),
('no range matches', ['layer-b', 'bob', [{'name': 'x', 'start': 0, 'end': 0}]], [309, None]),
('empty experiment list', ['layer-a', 'carol', []], [970, None]),
('layer sample 16',
['layer-a',
'u4745',
[{'name': 'exp0', 'start': 81.9, 'end': 100, 'paused': True},
{'name': 'exp1', 'start': 8.19, 'end': 82.0, 'paused': True},
{'name': 'exp2', 'start': 50, 'end': 82.0, 'paused': False}]],
[819, None]),
('layer sample 17',
['layer-a',
'u1058',
[{'name': 'exp0', 'start': 39.5, 'end': 100, 'paused': False},
{'name': 'exp1', 'start': 39.3, 'end': 39.4, 'paused': False}]],
[394, None]),
('layer sample 34',
['layer-b', 'u91', [{'name': 'exp0', 'start': 41.6, 'end': 41.8, 'paused': True}]],
[417, None])],
[('bucket at range end belongs to next range',
['layer-a', 'alice', [{'name': 'x', 'start': 0, 'end': 98.8}, {'name': 'y', 'start': 98.8, 'end': 100}]],
[988, 'y']),
('bucket at range start is included',
['layer-b', 'bob', [{'name': 'x', 'start': 30.9, 'end': 100}]],
[309, 'x']),
('paused range reserves its users',
['layer-a',
'alice',
[{'name': 'x', 'start': 0, 'end': 100, 'paused': True}, {'name': 'y', 'start': 0, 'end': 100}]],
[988, None]),
('percent bounds convert to permille',
['layer-a', 'alice', [{'name': 'x', 'start': 98.3, 'end': 99.3}]],
[988, 'x']),
('no range matches', ['layer-b', 'bob', [{'name': 'x', 'start': 0, 'end': 0}]], [309, None]),
('empty experiment list', ['layer-a', 'carol', []], [970, None]),
('layer sample 21',
['layer-a',
'u505',
[{'name': 'exp0', 'start': 0, 'end': 100, 'paused': False},
{'name': 'exp1', 'start': 54.1, 'end': 100, 'paused': False}]],
[540, 'exp0']),
('layer sample 23',
['layer-b',
'u3183',
[{'name': 'exp0', 'start': 0, 'end': 50, 'paused': True},
{'name': 'exp1', 'start': 23.6, 'end': 100, 'paused': False},
{'name': 'exp2', 'start': 23.7, 'end': 50, 'paused': False}]],
[236, 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 |
|---|---|---|---|
| bucket at range end belongs to next range | [988, 'y'] | [988, 'y'] | Passed |
| bucket at range start is included | [309, 'x'] | [309, 'x'] | Passed |
| paused range reserves its users | [988, 'x:paused'] | [988, None] | Failed |
| first listed overlapping range wins | [309, 'wide'] | [309, 'wide'] | Passed |
| percent bounds convert to permille | [988, 'x'] | [988, 'x'] | Passed |
| layer sample 1 | [576, 'exp0'] | [576, 'exp0'] | Passed |
| layer sample 2 | [750, None] | [750, None] | Passed |
| layer sample 3 | [172, 'exp0'] | [172, 'exp0'] | Passed |
SHA-256 / d75fba5ba5c8220aca07e83bd152e68e6892dd451d964dbc9312df160662aae1
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
import hashlib
N = 1
observations = []
def solve(layer_salt, user, experiments):
bucket = int(hashlib.md5((layer_salt + ':' + user).encode()).hexdigest(), 16) % 1000
for exp in experiments:
lo = round(exp['start'] * 10)
hi = round(exp['end'] * 10)
if lo <= bucket < hi:
if exp.get('paused'):
return [bucket, None]
return [bucket, exp['name']]
return [bucket, None]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('bucket at range end belongs to next range',
['layer-a', 'alice', [{'name': 'x', 'start': 0, 'end': 98.8}, {'name': 'y', 'start': 98.8, 'end': 100}]],
[988, 'y']),
('bucket at range start is included',
['layer-b', 'bob', [{'name': 'x', 'start': 30.9, 'end': 100}]],
[309, 'x']),
('paused range reserves its users',
['layer-a',
'alice',
[{'name': 'x', 'start': 0, 'end': 100, 'paused': True}, {'name': 'y', 'start': 0, 'end': 100}]],
[988, None]),
('first listed overlapping range wins',
['layer-b',
'bob',
[{'name': 'wide', 'start': 0, 'end': 100}, {'name': 'narrow', 'start': 30.9, 'end': 31.0}]],
[309, 'wide']),
('percent bounds convert to permille',
['layer-a', 'alice', [{'name': 'x', 'start': 98.3, 'end': 99.3}]],
[988, 'x']),
('layer sample 1',
['layer-a',
'u295',
[{'name': 'exp0', 'start': 50, 'end': 57.7, 'paused': False},
{'name': 'exp1', 'start': 0, 'end': 57.7, 'paused': False}]],
[576, 'exp0']),
('layer sample 2',
['layer-b',
'u4435',
[{'name': 'exp0', 'start': 0, 'end': 75.0, 'paused': True},
{'name': 'exp1', 'start': 0, 'end': 74.9, 'paused': False}]],
[750, None]),
('layer sample 3',
['layer-a',
'u3828',
[{'name': 'exp0', 'start': 1.72, 'end': 17.3, 'paused': False},
{'name': 'exp1', 'start': 0, 'end': 17.3, 'paused': True}]],
[172, 'exp0'])],
[('bucket at range start is included',
['layer-b', 'bob', [{'name': 'x', 'start': 30.9, 'end': 100}]],
[309, 'x']),
('paused range reserves its users',
['layer-a',
'alice',
[{'name': 'x', 'start': 0, 'end': 100, 'paused': True}, {'name': 'y', 'start': 0, 'end': 100}]],
[988, None]),
('first listed overlapping range wins',
['layer-b',
'bob',
[{'name': 'wide', 'start': 0, 'end': 100}, {'name': 'narrow', 'start': 30.9, 'end': 31.0}]],
[309, 'wide']),
('percent bounds convert to permille',
['layer-a', 'alice', [{'name': 'x', 'start': 98.3, 'end': 99.3}]],
[988, 'x']),
('no range matches', ['layer-b', 'bob', [{'name': 'x', 'start': 0, 'end': 0}]], [309, None]),
('layer sample 6',
['layer-a', 'u2869', [{'name': 'exp0', 'start': 28.1, 'end': 50, 'paused': False}]],
[282, 'exp0']),
('layer sample 18',
['layer-b',
'u4000',
[{'name': 'exp0', 'start': 0, 'end': 2.83, 'paused': False},
{'name': 'exp1', 'start': 0, 'end': 100, 'paused': True},
{'name': 'exp2', 'start': 28.2, 'end': 28.4, 'paused': False}]],
[283, None]),
('layer sample 34',
['layer-b', 'u91', [{'name': 'exp0', 'start': 41.6, 'end': 41.8, 'paused': True}]],
[417, None])],
[('paused range reserves its users',
['layer-a',
'alice',
[{'name': 'x', 'start': 0, 'end': 100, 'paused': True}, {'name': 'y', 'start': 0, 'end': 100}]],
[988, None]),
('first listed overlapping range wins',
['layer-b',
'bob',
[{'name': 'wide', 'start': 0, 'end': 100}, {'name': 'narrow', 'start': 30.9, 'end': 31.0}]],
[309, 'wide']),
('percent bounds convert to permille',
['layer-a', 'alice', [{'name': 'x', 'start': 98.3, 'end': 99.3}]],
[988, 'x']),
('no range matches', ['layer-b', 'bob', [{'name': 'x', 'start': 0, 'end': 0}]], [309, None]),
('empty experiment list', ['layer-a', 'carol', []], [970, None]),
('layer sample 11',
['layer-b',
'u3995',
[{'name': 'exp0', 'start': 50, 'end': 84.5, 'paused': True},
{'name': 'exp1', 'start': 8.45, 'end': 84.5, 'paused': True}]],
[845, None]),
('layer sample 12',
['layer-a', 'u3185', [{'name': 'exp0', 'start': 50, 'end': 98.8, 'paused': False}]],
[344, None]),
('layer sample 50',
['layer-b',
'u369',
[{'name': 'exp0', 'start': 8.27, 'end': 90.0, 'paused': True},
{'name': 'exp1', 'start': 8.27, 'end': 82.8, 'paused': False}]],
[827, None])],
[('bucket at range end belongs to next range',
['layer-a', 'alice', [{'name': 'x', 'start': 0, 'end': 98.8}, {'name': 'y', 'start': 98.8, 'end': 100}]],
[988, 'y']),
('first listed overlapping range wins',
['layer-b',
'bob',
[{'name': 'wide', 'start': 0, 'end': 100}, {'name': 'narrow', 'start': 30.9, 'end': 31.0}]],
[309, 'wide']),
('percent bounds convert to permille',
['layer-a', 'alice', [{'name': 'x', 'start': 98.3, 'end': 99.3}]],
[988, 'x']),
('no range matches', ['layer-b', 'bob', [{'name': 'x', 'start': 0, 'end': 0}]], [309, None]),
('empty experiment list', ['layer-a', 'carol', []], [970, None]),
('layer sample 16',
['layer-a',
'u4745',
[{'name': 'exp0', 'start': 81.9, 'end': 100, 'paused': True},
{'name': 'exp1', 'start': 8.19, 'end': 82.0, 'paused': True},
{'name': 'exp2', 'start': 50, 'end': 82.0, 'paused': False}]],
[819, None]),
('layer sample 17',
['layer-a',
'u1058',
[{'name': 'exp0', 'start': 39.5, 'end': 100, 'paused': False},
{'name': 'exp1', 'start': 39.3, 'end': 39.4, 'paused': False}]],
[394, None]),
('layer sample 34',
['layer-b', 'u91', [{'name': 'exp0', 'start': 41.6, 'end': 41.8, 'paused': True}]],
[417, None])],
[('bucket at range end belongs to next range',
['layer-a', 'alice', [{'name': 'x', 'start': 0, 'end': 98.8}, {'name': 'y', 'start': 98.8, 'end': 100}]],
[988, 'y']),
('bucket at range start is included',
['layer-b', 'bob', [{'name': 'x', 'start': 30.9, 'end': 100}]],
[309, 'x']),
('paused range reserves its users',
['layer-a',
'alice',
[{'name': 'x', 'start': 0, 'end': 100, 'paused': True}, {'name': 'y', 'start': 0, 'end': 100}]],
[988, None]),
('percent bounds convert to permille',
['layer-a', 'alice', [{'name': 'x', 'start': 98.3, 'end': 99.3}]],
[988, 'x']),
('no range matches', ['layer-b', 'bob', [{'name': 'x', 'start': 0, 'end': 0}]], [309, None]),
('empty experiment list', ['layer-a', 'carol', []], [970, None]),
('layer sample 21',
['layer-a',
'u505',
[{'name': 'exp0', 'start': 0, 'end': 100, 'paused': False},
{'name': 'exp1', 'start': 54.1, 'end': 100, 'paused': False}]],
[540, 'exp0']),
('layer sample 23',
['layer-b',
'u3183',
[{'name': 'exp0', 'start': 0, 'end': 50, 'paused': True},
{'name': 'exp1', 'start': 23.6, 'end': 100, 'paused': False},
{'name': 'exp2', 'start': 23.7, 'end': 50, 'paused': False}]],
[236, 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 |
|---|---|---|---|
| bucket at range end belongs to next range | [988, 'y'] | [988, 'y'] | Passed |
| bucket at range start is included | [309, 'x'] | [309, 'x'] | Passed |
| paused range reserves its users | [988, None] | [988, None] | Passed |
| first listed overlapping range wins | [309, 'wide'] | [309, 'wide'] | Passed |
| percent bounds convert to permille | [988, 'x'] | [988, 'x'] | Passed |
| layer sample 1 | [576, 'exp0'] | [576, 'exp0'] | Passed |
| layer sample 2 | [750, None] | [750, None] | Passed |
| layer sample 3 | [172, 'exp0'] | [172, 'exp0'] | Passed |
SHA-256 / d667c550ef131eadf04eb52abed74bcf2182e1cf0f05b172f8aa720df057ea29
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:53.247649+00:00.
Case digest / 392332a94d6e4c17b0374625993fac47289088b6aed6d3f8d489c95c93552fd4