FA-94001 / Shift rostering labor rules / Open access
Fortnight rest window slices thirteen days · case 01
A day off on the fourteenth day of a window is ignored, producing false shortfalls.
ROOT CAUSE
The window slice has length 13.
VERIFIED REPAIR
Each window is 14 days: pattern[i:i + 14].
Unsuccessful approach: Shifting the slice start by one still inspects only 13 days and skips the first.
Case contract
A day pattern (W worked, O rostered off, L leave) and the count of consecutive worked days immediately before it. Any worked day that makes the streak exceed six is a streak violation; O or L ends a streak. Every 14-day window fully inside the pattern (each start index) needs at least two O days; leave does not count as a rostered day off. Return [kind, index] rows: streaks in day order, then windows.
Why this case matters
Consecutive-day limits and fortnightly day-off minimums are standard roster labor rules.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(pattern, carry_in):
out = []
run = carry_in
for i, c in enumerate(pattern):
if c == 'W':
run += 1
if run > 6:
out.append(['streak', i])
else:
run = 0
for i in range(len(pattern) - 13):
if pattern[i:i + 13].count('O') < 2:
out.append(['rest14', i])
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: fortnight window length 1', ['WWWWWWOWWWWWWOW', 0], []),
('regression variant: fortnight window length 2', ['WWWOWWWWWWLWLLWOWWWWWLWWWWWL', 6],
[['streak', 0], ['streak', 1], ['streak', 2], ['rest14', 0], ['rest14', 1], ['rest14', 4], ['rest14', 5],
['rest14', 6], ['rest14', 7], ['rest14', 8], ['rest14', 9], ['rest14', 10], ['rest14', 11],
['rest14', 12], ['rest14', 13], ['rest14', 14]]),
('partial repair guard 3', ['WWLOLWOLWWWOWLWWWWWLW', 1], [['rest14', 7]]),
('boundary control 4', ['WWWWWWWO', 0], [['streak', 6]]), ('normal control 5', ['WWOOWLWLWW', 0], []),
('normal control 6', ['OWOWWWOWWWWWWWW', 3], [['streak', 13], ['streak', 14]]),
('normal control 7', ['LWWOOWWWWWWWWWWWOOOWW', 5],
[['streak', 11], ['streak', 12], ['streak', 13], ['streak', 14], ['streak', 15]]),
('normal control 8', ['WOWWLOOLWO', 1], [])],
[('regression: fortnight window length 1', ['WWWLWWWWWWWOWWWO', 0],
[['streak', 10], ['rest14', 0], ['rest14', 1]]),
('regression variant: fortnight window length 2', ['LWWOWWWWWWWWLLOWLLWWW', 0],
[['streak', 10], ['streak', 11], ['rest14', 0], ['rest14', 4], ['rest14', 5], ['rest14', 6],
['rest14', 7]]),
('partial repair guard 3', ['WWWOWWWWWWLWLLWOWWWWWLWWWWWL', 6],
[['streak', 0], ['streak', 1], ['streak', 2], ['rest14', 0], ['rest14', 1], ['rest14', 4], ['rest14', 5],
['rest14', 6], ['rest14', 7], ['rest14', 8], ['rest14', 9], ['rest14', 10], ['rest14', 11],
['rest14', 12], ['rest14', 13], ['rest14', 14]]),
('boundary control 4', ['WWWWWWOWWWWWWL', 0], [['rest14', 0]]),
('normal control 5', ['WWWWWWWWWWWWLWW', 3],
[['streak', 3], ['streak', 4], ['streak', 5], ['streak', 6], ['streak', 7], ['streak', 8], ['streak', 9],
['streak', 10], ['streak', 11], ['rest14', 0], ['rest14', 1]]),
('normal control 6', ['WWWWWWWWLWWWWWW', 0], [['streak', 6], ['streak', 7], ['rest14', 0], ['rest14', 1]]),
('normal control 7', ['OOWLOWOWWWOLWWW', 6], []),
('normal control 8', ['OOLWOWWLWWWWWWW', 3], [['streak', 14]])],
[('regression: fortnight window length 1', ['LLWWWWLWWWWWWOWOWW', 0], [['rest14', 0], ['rest14', 1]]),
('regression variant: fortnight window length 2', ['WWLOWWWWWWWWLWO', 6],
[['streak', 0], ['streak', 1], ['streak', 10], ['streak', 11], ['rest14', 0]]),
('partial repair guard 3', ['WWWOOWWWLWWWWWWWWW', 1],
[['streak', 15], ['streak', 16], ['streak', 17], ['rest14', 4]]),
('boundary control 4', ['WWOWWWWWW', 3], []), ('boundary control 5', ['WWWWWWO', 0], []),
('normal control 6', ['LWWLWWWWWW', 0], []),
('normal control 7', ['OWWLLOWWWWLLWWLWWL', 3],
[['rest14', 1], ['rest14', 2], ['rest14', 3], ['rest14', 4]]),
('normal control 8', ['LWLWOWLWWLWLWO', 0], [])],
[('regression: fortnight window length 1', ['WWWWLWWWWWWWWWWWWOLOL', 5],
[['streak', 1], ['streak', 2], ['streak', 3], ['streak', 11], ['streak', 12], ['streak', 13],
['streak', 14], ['streak', 15], ['streak', 16], ['rest14', 0], ['rest14', 1], ['rest14', 2],
['rest14', 3], ['rest14', 4], ['rest14', 5]]),
('regression variant: fortnight window length 2', ['OWOOWWWOWWWLLWWWWLOWWOOWWWLW', 0], [['rest14', 4]]),
('partial repair guard 3', ['WWWOWWWWWWWWWWLOLW', 0],
[['streak', 10], ['streak', 11], ['streak', 12], ['streak', 13], ['rest14', 0], ['rest14', 1],
['rest14', 4]]),
('boundary control 4', ['OWWWWWWOWWWWWW', 0], []), ('boundary control 5', ['WWWWWWOWWWWWWOW', 0], []),
('normal control 6', ['WWLOWOWLLW', 0], []), ('normal control 7', ['WWLWWWLWWW', 0], []),
('normal control 8', ['WLWWWLLWOWWLWWW', 0], [['rest14', 0], ['rest14', 1]])],
[('regression: fortnight window length 1', ['WLLWWWWWLWLWOOWWOWWOO', 1], []),
('regression variant: fortnight window length 2', ['WWWLOWWWWWWWWLWOWWLWWWWWWWWW', 0],
[['streak', 11], ['streak', 12], ['streak', 25], ['streak', 26], ['streak', 27], ['rest14', 0],
['rest14', 1], ['rest14', 5], ['rest14', 6], ['rest14', 7], ['rest14', 8], ['rest14', 9], ['rest14', 10],
['rest14', 11], ['rest14', 12], ['rest14', 13], ['rest14', 14]]),
('partial repair guard 3', ['OOLWOWWLWWWWWWW', 3], [['streak', 14]]),
('boundary control 4', ['WWWWWWWO', 0], [['streak', 6]]),
('boundary control 5', ['WWWLWWWWWWWOWWWO', 0], [['streak', 10], ['rest14', 0], ['rest14', 1]]),
('normal control 6', ['LOWWOWOLLOWOWWWOWOLWW', 6], []),
('normal control 7', ['WWWWOWWWWLOOWOLWWLWWW', 5], [['streak', 1], ['streak', 2], ['streak', 3]]),
('normal control 8', ['OWWOWLWLOWWWLWWWWW', 5], [['rest14', 4]])]]
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 |
|---|---|---|---|
| regression: fortnight window length 1 | [['rest14', 0]] | [] | Failed |
| regression variant: fortnight window length 2 | [['streak', 0], ['streak', 1], ['streak', 2], ['rest14', 0], ['rest14', 1], ['rest14', 2], ['rest14', 4], ['rest14', 5], ['rest14', 6], ['rest14', 7], ['rest14', 8], ['rest14', 9], ['rest14', 10], ['rest14', 11], ['rest14', 12], ['rest14', 13], ['rest14', 14]] | [['streak', 0], ['streak', 1], ['streak', 2], ['rest14', 0], ['rest14', 1], ['rest14', 4], ['rest14', 5], ['rest14', 6], ['rest14', 7], ['rest14', 8], ['rest14', 9], ['rest14', 10], ['rest14', 11], ['rest14', 12], ['rest14', 13], ['rest14', 14]] | Failed |
| partial repair guard 3 | [['rest14', 7]] | [['rest14', 7]] | Passed |
| boundary control 4 | [['streak', 6]] | [['streak', 6]] | Passed |
| normal control 5 | [] | [] | Passed |
| normal control 6 | [['streak', 13], ['streak', 14]] | [['streak', 13], ['streak', 14]] | Passed |
| normal control 7 | [['streak', 11], ['streak', 12], ['streak', 13], ['streak', 14], ['streak', 15]] | [['streak', 11], ['streak', 12], ['streak', 13], ['streak', 14], ['streak', 15]] | Passed |
| normal control 8 | [] | [] | Passed |
SHA-256 / 8cf2895a6c0465cd8986e7c8c5e02b67668926fd06d7727aaee0b26c4f803f91
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(pattern, carry_in):
out = []
run = carry_in
for i, c in enumerate(pattern):
if c == 'W':
run += 1
if run > 6:
out.append(['streak', i])
else:
run = 0
for i in range(len(pattern) - 13):
if pattern[i + 1:i + 14].count('O') < 2:
out.append(['rest14', i])
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: fortnight window length 1', ['WWWWWWOWWWWWWOW', 0], []),
('regression variant: fortnight window length 2', ['WWWOWWWWWWLWLLWOWWWWWLWWWWWL', 6],
[['streak', 0], ['streak', 1], ['streak', 2], ['rest14', 0], ['rest14', 1], ['rest14', 4], ['rest14', 5],
['rest14', 6], ['rest14', 7], ['rest14', 8], ['rest14', 9], ['rest14', 10], ['rest14', 11],
['rest14', 12], ['rest14', 13], ['rest14', 14]]),
('partial repair guard 3', ['WWLOLWOLWWWOWLWWWWWLW', 1], [['rest14', 7]]),
('boundary control 4', ['WWWWWWWO', 0], [['streak', 6]]), ('normal control 5', ['WWOOWLWLWW', 0], []),
('normal control 6', ['OWOWWWOWWWWWWWW', 3], [['streak', 13], ['streak', 14]]),
('normal control 7', ['LWWOOWWWWWWWWWWWOOOWW', 5],
[['streak', 11], ['streak', 12], ['streak', 13], ['streak', 14], ['streak', 15]]),
('normal control 8', ['WOWWLOOLWO', 1], [])],
[('regression: fortnight window length 1', ['WWWLWWWWWWWOWWWO', 0],
[['streak', 10], ['rest14', 0], ['rest14', 1]]),
('regression variant: fortnight window length 2', ['LWWOWWWWWWWWLLOWLLWWW', 0],
[['streak', 10], ['streak', 11], ['rest14', 0], ['rest14', 4], ['rest14', 5], ['rest14', 6],
['rest14', 7]]),
('partial repair guard 3', ['WWWOWWWWWWLWLLWOWWWWWLWWWWWL', 6],
[['streak', 0], ['streak', 1], ['streak', 2], ['rest14', 0], ['rest14', 1], ['rest14', 4], ['rest14', 5],
['rest14', 6], ['rest14', 7], ['rest14', 8], ['rest14', 9], ['rest14', 10], ['rest14', 11],
['rest14', 12], ['rest14', 13], ['rest14', 14]]),
('boundary control 4', ['WWWWWWOWWWWWWL', 0], [['rest14', 0]]),
('normal control 5', ['WWWWWWWWWWWWLWW', 3],
[['streak', 3], ['streak', 4], ['streak', 5], ['streak', 6], ['streak', 7], ['streak', 8], ['streak', 9],
['streak', 10], ['streak', 11], ['rest14', 0], ['rest14', 1]]),
('normal control 6', ['WWWWWWWWLWWWWWW', 0], [['streak', 6], ['streak', 7], ['rest14', 0], ['rest14', 1]]),
('normal control 7', ['OOWLOWOWWWOLWWW', 6], []),
('normal control 8', ['OOLWOWWLWWWWWWW', 3], [['streak', 14]])],
[('regression: fortnight window length 1', ['LLWWWWLWWWWWWOWOWW', 0], [['rest14', 0], ['rest14', 1]]),
('regression variant: fortnight window length 2', ['WWLOWWWWWWWWLWO', 6],
[['streak', 0], ['streak', 1], ['streak', 10], ['streak', 11], ['rest14', 0]]),
('partial repair guard 3', ['WWWOOWWWLWWWWWWWWW', 1],
[['streak', 15], ['streak', 16], ['streak', 17], ['rest14', 4]]),
('boundary control 4', ['WWOWWWWWW', 3], []), ('boundary control 5', ['WWWWWWO', 0], []),
('normal control 6', ['LWWLWWWWWW', 0], []),
('normal control 7', ['OWWLLOWWWWLLWWLWWL', 3],
[['rest14', 1], ['rest14', 2], ['rest14', 3], ['rest14', 4]]),
('normal control 8', ['LWLWOWLWWLWLWO', 0], [])],
[('regression: fortnight window length 1', ['WWWWLWWWWWWWWWWWWOLOL', 5],
[['streak', 1], ['streak', 2], ['streak', 3], ['streak', 11], ['streak', 12], ['streak', 13],
['streak', 14], ['streak', 15], ['streak', 16], ['rest14', 0], ['rest14', 1], ['rest14', 2],
['rest14', 3], ['rest14', 4], ['rest14', 5]]),
('regression variant: fortnight window length 2', ['OWOOWWWOWWWLLWWWWLOWWOOWWWLW', 0], [['rest14', 4]]),
('partial repair guard 3', ['WWWOWWWWWWWWWWLOLW', 0],
[['streak', 10], ['streak', 11], ['streak', 12], ['streak', 13], ['rest14', 0], ['rest14', 1],
['rest14', 4]]),
('boundary control 4', ['OWWWWWWOWWWWWW', 0], []), ('boundary control 5', ['WWWWWWOWWWWWWOW', 0], []),
('normal control 6', ['WWLOWOWLLW', 0], []), ('normal control 7', ['WWLWWWLWWW', 0], []),
('normal control 8', ['WLWWWLLWOWWLWWW', 0], [['rest14', 0], ['rest14', 1]])],
[('regression: fortnight window length 1', ['WLLWWWWWLWLWOOWWOWWOO', 1], []),
('regression variant: fortnight window length 2', ['WWWLOWWWWWWWWLWOWWLWWWWWWWWW', 0],
[['streak', 11], ['streak', 12], ['streak', 25], ['streak', 26], ['streak', 27], ['rest14', 0],
['rest14', 1], ['rest14', 5], ['rest14', 6], ['rest14', 7], ['rest14', 8], ['rest14', 9], ['rest14', 10],
['rest14', 11], ['rest14', 12], ['rest14', 13], ['rest14', 14]]),
('partial repair guard 3', ['OOLWOWWLWWWWWWW', 3], [['streak', 14]]),
('boundary control 4', ['WWWWWWWO', 0], [['streak', 6]]),
('boundary control 5', ['WWWLWWWWWWWOWWWO', 0], [['streak', 10], ['rest14', 0], ['rest14', 1]]),
('normal control 6', ['LOWWOWOLLOWOWWWOWOLWW', 6], []),
('normal control 7', ['WWWWOWWWWLOOWOLWWLWWW', 5], [['streak', 1], ['streak', 2], ['streak', 3]]),
('normal control 8', ['OWWOWLWLOWWWLWWWWW', 5], [['rest14', 4]])]]
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 |
|---|---|---|---|
| regression: fortnight window length 1 | [] | [] | Passed |
| regression variant: fortnight window length 2 | [['streak', 0], ['streak', 1], ['streak', 2], ['rest14', 0], ['rest14', 1], ['rest14', 3], ['rest14', 4], ['rest14', 5], ['rest14', 6], ['rest14', 7], ['rest14', 8], ['rest14', 9], ['rest14', 10], ['rest14', 11], ['rest14', 12], ['rest14', 13], ['rest14', 14]] | [['streak', 0], ['streak', 1], ['streak', 2], ['rest14', 0], ['rest14', 1], ['rest14', 4], ['rest14', 5], ['rest14', 6], ['rest14', 7], ['rest14', 8], ['rest14', 9], ['rest14', 10], ['rest14', 11], ['rest14', 12], ['rest14', 13], ['rest14', 14]] | Failed |
| partial repair guard 3 | [['rest14', 6], ['rest14', 7]] | [['rest14', 7]] | Failed |
| boundary control 4 | [['streak', 6]] | [['streak', 6]] | Passed |
| normal control 5 | [] | [] | Passed |
| normal control 6 | [['streak', 13], ['streak', 14]] | [['streak', 13], ['streak', 14]] | Passed |
| normal control 7 | [['streak', 11], ['streak', 12], ['streak', 13], ['streak', 14], ['streak', 15]] | [['streak', 11], ['streak', 12], ['streak', 13], ['streak', 14], ['streak', 15]] | Passed |
| normal control 8 | [] | [] | Passed |
SHA-256 / 6d1b37afe013736cfbba837e5b39d27c8e60bfd96a7ab0d1c5bf7565e4b50cfe
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(pattern, carry_in):
out = []
run = carry_in
for i, c in enumerate(pattern):
if c == 'W':
run += 1
if run > 6:
out.append(['streak', i])
else:
run = 0
for i in range(len(pattern) - 13):
if pattern[i:i + 14].count('O') < 2:
out.append(['rest14', i])
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: fortnight window length 1', ['WWWWWWOWWWWWWOW', 0], []),
('regression variant: fortnight window length 2', ['WWWOWWWWWWLWLLWOWWWWWLWWWWWL', 6],
[['streak', 0], ['streak', 1], ['streak', 2], ['rest14', 0], ['rest14', 1], ['rest14', 4], ['rest14', 5],
['rest14', 6], ['rest14', 7], ['rest14', 8], ['rest14', 9], ['rest14', 10], ['rest14', 11],
['rest14', 12], ['rest14', 13], ['rest14', 14]]),
('partial repair guard 3', ['WWLOLWOLWWWOWLWWWWWLW', 1], [['rest14', 7]]),
('boundary control 4', ['WWWWWWWO', 0], [['streak', 6]]), ('normal control 5', ['WWOOWLWLWW', 0], []),
('normal control 6', ['OWOWWWOWWWWWWWW', 3], [['streak', 13], ['streak', 14]]),
('normal control 7', ['LWWOOWWWWWWWWWWWOOOWW', 5],
[['streak', 11], ['streak', 12], ['streak', 13], ['streak', 14], ['streak', 15]]),
('normal control 8', ['WOWWLOOLWO', 1], [])],
[('regression: fortnight window length 1', ['WWWLWWWWWWWOWWWO', 0],
[['streak', 10], ['rest14', 0], ['rest14', 1]]),
('regression variant: fortnight window length 2', ['LWWOWWWWWWWWLLOWLLWWW', 0],
[['streak', 10], ['streak', 11], ['rest14', 0], ['rest14', 4], ['rest14', 5], ['rest14', 6],
['rest14', 7]]),
('partial repair guard 3', ['WWWOWWWWWWLWLLWOWWWWWLWWWWWL', 6],
[['streak', 0], ['streak', 1], ['streak', 2], ['rest14', 0], ['rest14', 1], ['rest14', 4], ['rest14', 5],
['rest14', 6], ['rest14', 7], ['rest14', 8], ['rest14', 9], ['rest14', 10], ['rest14', 11],
['rest14', 12], ['rest14', 13], ['rest14', 14]]),
('boundary control 4', ['WWWWWWOWWWWWWL', 0], [['rest14', 0]]),
('normal control 5', ['WWWWWWWWWWWWLWW', 3],
[['streak', 3], ['streak', 4], ['streak', 5], ['streak', 6], ['streak', 7], ['streak', 8], ['streak', 9],
['streak', 10], ['streak', 11], ['rest14', 0], ['rest14', 1]]),
('normal control 6', ['WWWWWWWWLWWWWWW', 0], [['streak', 6], ['streak', 7], ['rest14', 0], ['rest14', 1]]),
('normal control 7', ['OOWLOWOWWWOLWWW', 6], []),
('normal control 8', ['OOLWOWWLWWWWWWW', 3], [['streak', 14]])],
[('regression: fortnight window length 1', ['LLWWWWLWWWWWWOWOWW', 0], [['rest14', 0], ['rest14', 1]]),
('regression variant: fortnight window length 2', ['WWLOWWWWWWWWLWO', 6],
[['streak', 0], ['streak', 1], ['streak', 10], ['streak', 11], ['rest14', 0]]),
('partial repair guard 3', ['WWWOOWWWLWWWWWWWWW', 1],
[['streak', 15], ['streak', 16], ['streak', 17], ['rest14', 4]]),
('boundary control 4', ['WWOWWWWWW', 3], []), ('boundary control 5', ['WWWWWWO', 0], []),
('normal control 6', ['LWWLWWWWWW', 0], []),
('normal control 7', ['OWWLLOWWWWLLWWLWWL', 3],
[['rest14', 1], ['rest14', 2], ['rest14', 3], ['rest14', 4]]),
('normal control 8', ['LWLWOWLWWLWLWO', 0], [])],
[('regression: fortnight window length 1', ['WWWWLWWWWWWWWWWWWOLOL', 5],
[['streak', 1], ['streak', 2], ['streak', 3], ['streak', 11], ['streak', 12], ['streak', 13],
['streak', 14], ['streak', 15], ['streak', 16], ['rest14', 0], ['rest14', 1], ['rest14', 2],
['rest14', 3], ['rest14', 4], ['rest14', 5]]),
('regression variant: fortnight window length 2', ['OWOOWWWOWWWLLWWWWLOWWOOWWWLW', 0], [['rest14', 4]]),
('partial repair guard 3', ['WWWOWWWWWWWWWWLOLW', 0],
[['streak', 10], ['streak', 11], ['streak', 12], ['streak', 13], ['rest14', 0], ['rest14', 1],
['rest14', 4]]),
('boundary control 4', ['OWWWWWWOWWWWWW', 0], []), ('boundary control 5', ['WWWWWWOWWWWWWOW', 0], []),
('normal control 6', ['WWLOWOWLLW', 0], []), ('normal control 7', ['WWLWWWLWWW', 0], []),
('normal control 8', ['WLWWWLLWOWWLWWW', 0], [['rest14', 0], ['rest14', 1]])],
[('regression: fortnight window length 1', ['WLLWWWWWLWLWOOWWOWWOO', 1], []),
('regression variant: fortnight window length 2', ['WWWLOWWWWWWWWLWOWWLWWWWWWWWW', 0],
[['streak', 11], ['streak', 12], ['streak', 25], ['streak', 26], ['streak', 27], ['rest14', 0],
['rest14', 1], ['rest14', 5], ['rest14', 6], ['rest14', 7], ['rest14', 8], ['rest14', 9], ['rest14', 10],
['rest14', 11], ['rest14', 12], ['rest14', 13], ['rest14', 14]]),
('partial repair guard 3', ['OOLWOWWLWWWWWWW', 3], [['streak', 14]]),
('boundary control 4', ['WWWWWWWO', 0], [['streak', 6]]),
('boundary control 5', ['WWWLWWWWWWWOWWWO', 0], [['streak', 10], ['rest14', 0], ['rest14', 1]]),
('normal control 6', ['LOWWOWOLLOWOWWWOWOLWW', 6], []),
('normal control 7', ['WWWWOWWWWLOOWOLWWLWWW', 5], [['streak', 1], ['streak', 2], ['streak', 3]]),
('normal control 8', ['OWWOWLWLOWWWLWWWWW', 5], [['rest14', 4]])]]
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 |
|---|---|---|---|
| regression: fortnight window length 1 | [] | [] | Passed |
| regression variant: fortnight window length 2 | [['streak', 0], ['streak', 1], ['streak', 2], ['rest14', 0], ['rest14', 1], ['rest14', 4], ['rest14', 5], ['rest14', 6], ['rest14', 7], ['rest14', 8], ['rest14', 9], ['rest14', 10], ['rest14', 11], ['rest14', 12], ['rest14', 13], ['rest14', 14]] | [['streak', 0], ['streak', 1], ['streak', 2], ['rest14', 0], ['rest14', 1], ['rest14', 4], ['rest14', 5], ['rest14', 6], ['rest14', 7], ['rest14', 8], ['rest14', 9], ['rest14', 10], ['rest14', 11], ['rest14', 12], ['rest14', 13], ['rest14', 14]] | Passed |
| partial repair guard 3 | [['rest14', 7]] | [['rest14', 7]] | Passed |
| boundary control 4 | [['streak', 6]] | [['streak', 6]] | Passed |
| normal control 5 | [] | [] | Passed |
| normal control 6 | [['streak', 13], ['streak', 14]] | [['streak', 13], ['streak', 14]] | Passed |
| normal control 7 | [['streak', 11], ['streak', 12], ['streak', 13], ['streak', 14], ['streak', 15]] | [['streak', 11], ['streak', 12], ['streak', 13], ['streak', 14], ['streak', 15]] | Passed |
| normal control 8 | [] | [] | Passed |
SHA-256 / 7665799bc122f090c71c5b98d17ded549139f9ab669f6ee0e3be2d7c8571cb6b
Verification & scope
Stipulated toy labor rule for a bounded roster model; it is not legal advice and does not claim conformance with any jurisdiction, award, or collective agreement. 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:52:00.257962+00:00.
Case digest / 145e267d9f80d5090ce753f0cfd56493647e8fffb3a0ec7c3e287da94f1cdca4