FAILURE MAP
← Case archive

FA-93996 / Shift rostering labor rules / Open access

Final fourteen-day window never checked · case 01

A rest shortfall in the last fortnight of the roster is not reported.

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

ROOT CAUSE

The rolling window loop stops one start index early.

VERIFIED REPAIR

Check every window start from 0 through len(pattern) - 14.

Unsuccessful approach: Stepping by whole weeks checks only calendar fortnights, missing rolling windows.

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) - 14):
        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 count 1', ['WWWWWWOWWWWWWL', 0], [['rest14', 0]]),
  ('regression variant: fortnight window count 2', ['WOLWWWOWWWWWWWWWWW', 0],
   [['streak', 13], ['streak', 14], ['streak', 15], ['streak', 16], ['streak', 17], ['rest14', 2],
    ['rest14', 3], ['rest14', 4]]),
  ('partial repair guard 3', ['WWOWWLWWWLLOWWWWWWWWLLLWWWWW', 0],
   [['streak', 18], ['streak', 19], ['rest14', 3], ['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', ['WWWWWWOWWWWWWOW', 0], []),
  ('boundary control 5', ['WWWWWWWO', 0], [['streak', 6]]), ('normal control 6', ['OOWWWWWOWOWWWW', 3], []),
  ('normal control 7', ['WLWWWOWWOOWWLWWLLW', 6], [['streak', 0]]),
  ('normal control 8', ['LWLLWWWOWOLOWOWWWW', 3], [])],
 [('regression: fortnight window count 1', ['WWOWLOWWLWWWWWWWWW', 3],
   [['streak', 15], ['streak', 16], ['streak', 17], ['rest14', 3], ['rest14', 4]]),
  ('regression variant: fortnight window count 2', ['WOWWLOWLWWWWWWWLWWLWOWLLWWWW', 1],
   [['streak', 14], ['rest14', 2], ['rest14', 3], ['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', ['WWLLWWWLOWWWWWLWOW', 5],
   [['streak', 1], ['rest14', 0], ['rest14', 1], ['rest14', 2]]),
  ('boundary control 4', ['WWWLWWWWWWWOWWWO', 0], [['streak', 10], ['rest14', 0], ['rest14', 1]]),
  ('boundary control 5', ['WWWWWWOWWWWWWL', 0], [['rest14', 0]]),
  ('normal control 6', ['WWWWLOOWWWWWWLWLWWLWW', 1], [['rest14', 6], ['rest14', 7]]),
  ('normal control 7', ['WOWWLWWLWWLWWWWWWWLWWWWWWWWW', 1],
   [['streak', 17], ['streak', 25], ['streak', 26], ['streak', 27], ['rest14', 0], ['rest14', 1],
    ['rest14', 2], ['rest14', 3], ['rest14', 4], ['rest14', 5], ['rest14', 6], ['rest14', 7], ['rest14', 8],
    ['rest14', 9], ['rest14', 10], ['rest14', 11], ['rest14', 12], ['rest14', 13], ['rest14', 14]]),
  ('normal control 8', ['WWWWWWWWOOLLLLL', 3],
   [['streak', 3], ['streak', 4], ['streak', 5], ['streak', 6], ['streak', 7]])],
 [('regression: fortnight window count 1', ['OWWWWWWWWWLWOWL', 6],
   [['streak', 7], ['streak', 8], ['streak', 9], ['rest14', 1]]),
  ('regression variant: fortnight window count 2', ['LWWWWWWWOWWWLL', 3], [['streak', 7], ['rest14', 0]]),
  ('partial repair guard 3', ['WWWLWLWWWWWWWWWWWWWWW', 3],
   [['streak', 12], ['streak', 13], ['streak', 14], ['streak', 15], ['streak', 16], ['streak', 17],
    ['streak', 18], ['streak', 19], ['streak', 20], ['rest14', 0], ['rest14', 1], ['rest14', 2],
    ['rest14', 3], ['rest14', 4], ['rest14', 5], ['rest14', 6], ['rest14', 7]]),
  ('boundary control 4', ['WWOWWWWWW', 3], []), ('boundary control 5', ['WWWWWWO', 0], []),
  ('normal control 6', ['WWWWWOWWWLWLOWLWWW', 5],
   [['streak', 1], ['streak', 2], ['streak', 3], ['streak', 4]]),
  ('normal control 7', ['WOWWOWWWWW', 0], []), ('normal control 8', ['LOWWOWOLLOWOWWWOWOLWW', 6], [])],
 [('regression: fortnight window count 1', ['LLWWLLWWWWWWLL', 1], [['rest14', 0]]),
  ('regression variant: fortnight window count 2', ['WWWOWWWWWWWWWWLOLW', 0],
   [['streak', 10], ['streak', 11], ['streak', 12], ['streak', 13], ['rest14', 0], ['rest14', 1],
    ['rest14', 4]]),
  ('partial repair guard 3', ['WWWOOWWWLWWWWWWWWW', 1],
   [['streak', 15], ['streak', 16], ['streak', 17], ['rest14', 4]]),
  ('boundary control 4', ['OWWWWWWOWWWWWW', 0], []), ('boundary control 5', ['WWWWWWOWWWWWWOW', 0], []),
  ('normal control 6', ['WWWWWLWWWWWLLWWWOWOWWWWWWWOW', 6],
   [['streak', 0], ['streak', 1], ['streak', 2], ['streak', 3], ['streak', 4], ['streak', 25], ['rest14', 0],
    ['rest14', 1], ['rest14', 2], ['rest14', 3], ['rest14', 4]]),
  ('normal control 7', ['WWWWWWWWLWWWWWO', 3],
   [['streak', 3], ['streak', 4], ['streak', 5], ['streak', 6], ['streak', 7], ['rest14', 0], ['rest14', 1]]),
  ('normal control 8', ['WWWWOOWWOWOWWOLWWLWWW', 3], [['streak', 3]])],
 [('regression: fortnight window count 1', ['WOWWWWWWWWOWWWWWWWWOWWWWWWLW', 6],
   [['streak', 0], ['streak', 8], ['streak', 9], ['streak', 17], ['streak', 18], ['rest14', 2], ['rest14', 3],
    ['rest14', 4], ['rest14', 5], ['rest14', 11], ['rest14', 12], ['rest14', 13], ['rest14', 14]]),
  ('regression variant: fortnight window count 2', ['WWWWLOOWWWWWWLWLWWLWW', 1],
   [['rest14', 6], ['rest14', 7]]),
  ('partial repair guard 3', ['OWOWWWWWWWWWOWWWWL', 0],
   [['streak', 9], ['streak', 10], ['streak', 11], ['rest14', 3], ['rest14', 4]]),
  ('boundary control 4', ['WWWWWWWO', 0], [['streak', 6]]),
  ('boundary control 5', ['WWWLWWWWWWWOWWWO', 0], [['streak', 10], ['rest14', 0], ['rest14', 1]]),
  ('normal control 6', ['WOOWLOWWWWLOWLWWWWWWWOWWOLLW', 3], [['streak', 20], ['rest14', 6], ['rest14', 7]]),
  ('normal control 7', ['LWLLLWWLWWWWOWOLWWWWO', 3], [['rest14', 0]]),
  ('normal control 8', ['LWWWWOWWWWWWWWWWWW', 0],
   [['streak', 12], ['streak', 13], ['streak', 14], ['streak', 15], ['streak', 16], ['streak', 17],
    ['rest14', 0], ['rest14', 1], ['rest14', 2], ['rest14', 3], ['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 fixtureActualExpectedOutcome
regression: fortnight window count 1[][['rest14', 0]]Failed
regression variant: fortnight window count 2[['streak', 13], ['streak', 14], ['streak', 15], ['streak', 16], ['streak', 17], ['rest14', 2], ['rest14', 3]][['streak', 13], ['streak', 14], ['streak', 15], ['streak', 16], ['streak', 17], ['rest14', 2], ['rest14', 3], ['rest14', 4]]Failed
partial repair guard 3[['streak', 18], ['streak', 19], ['rest14', 3], ['rest14', 4], ['rest14', 5], ['rest14', 6], ['rest14', 7], ['rest14', 8], ['rest14', 9], ['rest14', 10], ['rest14', 11], ['rest14', 12], ['rest14', 13]][['streak', 18], ['streak', 19], ['rest14', 3], ['rest14', 4], ['rest14', 5], ['rest14', 6], ['rest14', 7], ['rest14', 8], ['rest14', 9], ['rest14', 10], ['rest14', 11], ['rest14', 12], ['rest14', 13], ['rest14', 14]]Failed
boundary control 4[][]Passed
boundary control 5[['streak', 6]][['streak', 6]]Passed
normal control 6[][]Passed
normal control 7[['streak', 0]][['streak', 0]]Passed
normal control 8[][]Passed

SHA-256 / e1718eebe9cd74d1fc080ff846a2a99e6780f91380984d45a7b3317cd7fc0a41

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(0, len(pattern) - 13, 7):
        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 count 1', ['WWWWWWOWWWWWWL', 0], [['rest14', 0]]),
  ('regression variant: fortnight window count 2', ['WOLWWWOWWWWWWWWWWW', 0],
   [['streak', 13], ['streak', 14], ['streak', 15], ['streak', 16], ['streak', 17], ['rest14', 2],
    ['rest14', 3], ['rest14', 4]]),
  ('partial repair guard 3', ['WWOWWLWWWLLOWWWWWWWWLLLWWWWW', 0],
   [['streak', 18], ['streak', 19], ['rest14', 3], ['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', ['WWWWWWOWWWWWWOW', 0], []),
  ('boundary control 5', ['WWWWWWWO', 0], [['streak', 6]]), ('normal control 6', ['OOWWWWWOWOWWWW', 3], []),
  ('normal control 7', ['WLWWWOWWOOWWLWWLLW', 6], [['streak', 0]]),
  ('normal control 8', ['LWLLWWWOWOLOWOWWWW', 3], [])],
 [('regression: fortnight window count 1', ['WWOWLOWWLWWWWWWWWW', 3],
   [['streak', 15], ['streak', 16], ['streak', 17], ['rest14', 3], ['rest14', 4]]),
  ('regression variant: fortnight window count 2', ['WOWWLOWLWWWWWWWLWWLWOWLLWWWW', 1],
   [['streak', 14], ['rest14', 2], ['rest14', 3], ['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', ['WWLLWWWLOWWWWWLWOW', 5],
   [['streak', 1], ['rest14', 0], ['rest14', 1], ['rest14', 2]]),
  ('boundary control 4', ['WWWLWWWWWWWOWWWO', 0], [['streak', 10], ['rest14', 0], ['rest14', 1]]),
  ('boundary control 5', ['WWWWWWOWWWWWWL', 0], [['rest14', 0]]),
  ('normal control 6', ['WWWWLOOWWWWWWLWLWWLWW', 1], [['rest14', 6], ['rest14', 7]]),
  ('normal control 7', ['WOWWLWWLWWLWWWWWWWLWWWWWWWWW', 1],
   [['streak', 17], ['streak', 25], ['streak', 26], ['streak', 27], ['rest14', 0], ['rest14', 1],
    ['rest14', 2], ['rest14', 3], ['rest14', 4], ['rest14', 5], ['rest14', 6], ['rest14', 7], ['rest14', 8],
    ['rest14', 9], ['rest14', 10], ['rest14', 11], ['rest14', 12], ['rest14', 13], ['rest14', 14]]),
  ('normal control 8', ['WWWWWWWWOOLLLLL', 3],
   [['streak', 3], ['streak', 4], ['streak', 5], ['streak', 6], ['streak', 7]])],
 [('regression: fortnight window count 1', ['OWWWWWWWWWLWOWL', 6],
   [['streak', 7], ['streak', 8], ['streak', 9], ['rest14', 1]]),
  ('regression variant: fortnight window count 2', ['LWWWWWWWOWWWLL', 3], [['streak', 7], ['rest14', 0]]),
  ('partial repair guard 3', ['WWWLWLWWWWWWWWWWWWWWW', 3],
   [['streak', 12], ['streak', 13], ['streak', 14], ['streak', 15], ['streak', 16], ['streak', 17],
    ['streak', 18], ['streak', 19], ['streak', 20], ['rest14', 0], ['rest14', 1], ['rest14', 2],
    ['rest14', 3], ['rest14', 4], ['rest14', 5], ['rest14', 6], ['rest14', 7]]),
  ('boundary control 4', ['WWOWWWWWW', 3], []), ('boundary control 5', ['WWWWWWO', 0], []),
  ('normal control 6', ['WWWWWOWWWLWLOWLWWW', 5],
   [['streak', 1], ['streak', 2], ['streak', 3], ['streak', 4]]),
  ('normal control 7', ['WOWWOWWWWW', 0], []), ('normal control 8', ['LOWWOWOLLOWOWWWOWOLWW', 6], [])],
 [('regression: fortnight window count 1', ['LLWWLLWWWWWWLL', 1], [['rest14', 0]]),
  ('regression variant: fortnight window count 2', ['WWWOWWWWWWWWWWLOLW', 0],
   [['streak', 10], ['streak', 11], ['streak', 12], ['streak', 13], ['rest14', 0], ['rest14', 1],
    ['rest14', 4]]),
  ('partial repair guard 3', ['WWWOOWWWLWWWWWWWWW', 1],
   [['streak', 15], ['streak', 16], ['streak', 17], ['rest14', 4]]),
  ('boundary control 4', ['OWWWWWWOWWWWWW', 0], []), ('boundary control 5', ['WWWWWWOWWWWWWOW', 0], []),
  ('normal control 6', ['WWWWWLWWWWWLLWWWOWOWWWWWWWOW', 6],
   [['streak', 0], ['streak', 1], ['streak', 2], ['streak', 3], ['streak', 4], ['streak', 25], ['rest14', 0],
    ['rest14', 1], ['rest14', 2], ['rest14', 3], ['rest14', 4]]),
  ('normal control 7', ['WWWWWWWWLWWWWWO', 3],
   [['streak', 3], ['streak', 4], ['streak', 5], ['streak', 6], ['streak', 7], ['rest14', 0], ['rest14', 1]]),
  ('normal control 8', ['WWWWOOWWOWOWWOLWWLWWW', 3], [['streak', 3]])],
 [('regression: fortnight window count 1', ['WOWWWWWWWWOWWWWWWWWOWWWWWWLW', 6],
   [['streak', 0], ['streak', 8], ['streak', 9], ['streak', 17], ['streak', 18], ['rest14', 2], ['rest14', 3],
    ['rest14', 4], ['rest14', 5], ['rest14', 11], ['rest14', 12], ['rest14', 13], ['rest14', 14]]),
  ('regression variant: fortnight window count 2', ['WWWWLOOWWWWWWLWLWWLWW', 1],
   [['rest14', 6], ['rest14', 7]]),
  ('partial repair guard 3', ['OWOWWWWWWWWWOWWWWL', 0],
   [['streak', 9], ['streak', 10], ['streak', 11], ['rest14', 3], ['rest14', 4]]),
  ('boundary control 4', ['WWWWWWWO', 0], [['streak', 6]]),
  ('boundary control 5', ['WWWLWWWWWWWOWWWO', 0], [['streak', 10], ['rest14', 0], ['rest14', 1]]),
  ('normal control 6', ['WOOWLOWWWWLOWLWWWWWWWOWWOLLW', 3], [['streak', 20], ['rest14', 6], ['rest14', 7]]),
  ('normal control 7', ['LWLLLWWLWWWWOWOLWWWWO', 3], [['rest14', 0]]),
  ('normal control 8', ['LWWWWOWWWWWWWWWWWW', 0],
   [['streak', 12], ['streak', 13], ['streak', 14], ['streak', 15], ['streak', 16], ['streak', 17],
    ['rest14', 0], ['rest14', 1], ['rest14', 2], ['rest14', 3], ['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 fixtureActualExpectedOutcome
regression: fortnight window count 1[['rest14', 0]][['rest14', 0]]Passed
regression variant: fortnight window count 2[['streak', 13], ['streak', 14], ['streak', 15], ['streak', 16], ['streak', 17]][['streak', 13], ['streak', 14], ['streak', 15], ['streak', 16], ['streak', 17], ['rest14', 2], ['rest14', 3], ['rest14', 4]]Failed
partial repair guard 3[['streak', 18], ['streak', 19], ['rest14', 7], ['rest14', 14]][['streak', 18], ['streak', 19], ['rest14', 3], ['rest14', 4], ['rest14', 5], ['rest14', 6], ['rest14', 7], ['rest14', 8], ['rest14', 9], ['rest14', 10], ['rest14', 11], ['rest14', 12], ['rest14', 13], ['rest14', 14]]Failed
boundary control 4[][]Passed
boundary control 5[['streak', 6]][['streak', 6]]Passed
normal control 6[][]Passed
normal control 7[['streak', 0]][['streak', 0]]Passed
normal control 8[][]Passed

SHA-256 / a778227dd5bf8fff6a1c4b9bf866f29acb11977082745db7847a524a144512b5

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 count 1', ['WWWWWWOWWWWWWL', 0], [['rest14', 0]]),
  ('regression variant: fortnight window count 2', ['WOLWWWOWWWWWWWWWWW', 0],
   [['streak', 13], ['streak', 14], ['streak', 15], ['streak', 16], ['streak', 17], ['rest14', 2],
    ['rest14', 3], ['rest14', 4]]),
  ('partial repair guard 3', ['WWOWWLWWWLLOWWWWWWWWLLLWWWWW', 0],
   [['streak', 18], ['streak', 19], ['rest14', 3], ['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', ['WWWWWWOWWWWWWOW', 0], []),
  ('boundary control 5', ['WWWWWWWO', 0], [['streak', 6]]), ('normal control 6', ['OOWWWWWOWOWWWW', 3], []),
  ('normal control 7', ['WLWWWOWWOOWWLWWLLW', 6], [['streak', 0]]),
  ('normal control 8', ['LWLLWWWOWOLOWOWWWW', 3], [])],
 [('regression: fortnight window count 1', ['WWOWLOWWLWWWWWWWWW', 3],
   [['streak', 15], ['streak', 16], ['streak', 17], ['rest14', 3], ['rest14', 4]]),
  ('regression variant: fortnight window count 2', ['WOWWLOWLWWWWWWWLWWLWOWLLWWWW', 1],
   [['streak', 14], ['rest14', 2], ['rest14', 3], ['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', ['WWLLWWWLOWWWWWLWOW', 5],
   [['streak', 1], ['rest14', 0], ['rest14', 1], ['rest14', 2]]),
  ('boundary control 4', ['WWWLWWWWWWWOWWWO', 0], [['streak', 10], ['rest14', 0], ['rest14', 1]]),
  ('boundary control 5', ['WWWWWWOWWWWWWL', 0], [['rest14', 0]]),
  ('normal control 6', ['WWWWLOOWWWWWWLWLWWLWW', 1], [['rest14', 6], ['rest14', 7]]),
  ('normal control 7', ['WOWWLWWLWWLWWWWWWWLWWWWWWWWW', 1],
   [['streak', 17], ['streak', 25], ['streak', 26], ['streak', 27], ['rest14', 0], ['rest14', 1],
    ['rest14', 2], ['rest14', 3], ['rest14', 4], ['rest14', 5], ['rest14', 6], ['rest14', 7], ['rest14', 8],
    ['rest14', 9], ['rest14', 10], ['rest14', 11], ['rest14', 12], ['rest14', 13], ['rest14', 14]]),
  ('normal control 8', ['WWWWWWWWOOLLLLL', 3],
   [['streak', 3], ['streak', 4], ['streak', 5], ['streak', 6], ['streak', 7]])],
 [('regression: fortnight window count 1', ['OWWWWWWWWWLWOWL', 6],
   [['streak', 7], ['streak', 8], ['streak', 9], ['rest14', 1]]),
  ('regression variant: fortnight window count 2', ['LWWWWWWWOWWWLL', 3], [['streak', 7], ['rest14', 0]]),
  ('partial repair guard 3', ['WWWLWLWWWWWWWWWWWWWWW', 3],
   [['streak', 12], ['streak', 13], ['streak', 14], ['streak', 15], ['streak', 16], ['streak', 17],
    ['streak', 18], ['streak', 19], ['streak', 20], ['rest14', 0], ['rest14', 1], ['rest14', 2],
    ['rest14', 3], ['rest14', 4], ['rest14', 5], ['rest14', 6], ['rest14', 7]]),
  ('boundary control 4', ['WWOWWWWWW', 3], []), ('boundary control 5', ['WWWWWWO', 0], []),
  ('normal control 6', ['WWWWWOWWWLWLOWLWWW', 5],
   [['streak', 1], ['streak', 2], ['streak', 3], ['streak', 4]]),
  ('normal control 7', ['WOWWOWWWWW', 0], []), ('normal control 8', ['LOWWOWOLLOWOWWWOWOLWW', 6], [])],
 [('regression: fortnight window count 1', ['LLWWLLWWWWWWLL', 1], [['rest14', 0]]),
  ('regression variant: fortnight window count 2', ['WWWOWWWWWWWWWWLOLW', 0],
   [['streak', 10], ['streak', 11], ['streak', 12], ['streak', 13], ['rest14', 0], ['rest14', 1],
    ['rest14', 4]]),
  ('partial repair guard 3', ['WWWOOWWWLWWWWWWWWW', 1],
   [['streak', 15], ['streak', 16], ['streak', 17], ['rest14', 4]]),
  ('boundary control 4', ['OWWWWWWOWWWWWW', 0], []), ('boundary control 5', ['WWWWWWOWWWWWWOW', 0], []),
  ('normal control 6', ['WWWWWLWWWWWLLWWWOWOWWWWWWWOW', 6],
   [['streak', 0], ['streak', 1], ['streak', 2], ['streak', 3], ['streak', 4], ['streak', 25], ['rest14', 0],
    ['rest14', 1], ['rest14', 2], ['rest14', 3], ['rest14', 4]]),
  ('normal control 7', ['WWWWWWWWLWWWWWO', 3],
   [['streak', 3], ['streak', 4], ['streak', 5], ['streak', 6], ['streak', 7], ['rest14', 0], ['rest14', 1]]),
  ('normal control 8', ['WWWWOOWWOWOWWOLWWLWWW', 3], [['streak', 3]])],
 [('regression: fortnight window count 1', ['WOWWWWWWWWOWWWWWWWWOWWWWWWLW', 6],
   [['streak', 0], ['streak', 8], ['streak', 9], ['streak', 17], ['streak', 18], ['rest14', 2], ['rest14', 3],
    ['rest14', 4], ['rest14', 5], ['rest14', 11], ['rest14', 12], ['rest14', 13], ['rest14', 14]]),
  ('regression variant: fortnight window count 2', ['WWWWLOOWWWWWWLWLWWLWW', 1],
   [['rest14', 6], ['rest14', 7]]),
  ('partial repair guard 3', ['OWOWWWWWWWWWOWWWWL', 0],
   [['streak', 9], ['streak', 10], ['streak', 11], ['rest14', 3], ['rest14', 4]]),
  ('boundary control 4', ['WWWWWWWO', 0], [['streak', 6]]),
  ('boundary control 5', ['WWWLWWWWWWWOWWWO', 0], [['streak', 10], ['rest14', 0], ['rest14', 1]]),
  ('normal control 6', ['WOOWLOWWWWLOWLWWWWWWWOWWOLLW', 3], [['streak', 20], ['rest14', 6], ['rest14', 7]]),
  ('normal control 7', ['LWLLLWWLWWWWOWOLWWWWO', 3], [['rest14', 0]]),
  ('normal control 8', ['LWWWWOWWWWWWWWWWWW', 0],
   [['streak', 12], ['streak', 13], ['streak', 14], ['streak', 15], ['streak', 16], ['streak', 17],
    ['rest14', 0], ['rest14', 1], ['rest14', 2], ['rest14', 3], ['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 fixtureActualExpectedOutcome
regression: fortnight window count 1[['rest14', 0]][['rest14', 0]]Passed
regression variant: fortnight window count 2[['streak', 13], ['streak', 14], ['streak', 15], ['streak', 16], ['streak', 17], ['rest14', 2], ['rest14', 3], ['rest14', 4]][['streak', 13], ['streak', 14], ['streak', 15], ['streak', 16], ['streak', 17], ['rest14', 2], ['rest14', 3], ['rest14', 4]]Passed
partial repair guard 3[['streak', 18], ['streak', 19], ['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', 18], ['streak', 19], ['rest14', 3], ['rest14', 4], ['rest14', 5], ['rest14', 6], ['rest14', 7], ['rest14', 8], ['rest14', 9], ['rest14', 10], ['rest14', 11], ['rest14', 12], ['rest14', 13], ['rest14', 14]]Passed
boundary control 4[][]Passed
boundary control 5[['streak', 6]][['streak', 6]]Passed
normal control 6[][]Passed
normal control 7[['streak', 0]][['streak', 0]]Passed
normal control 8[][]Passed

SHA-256 / 1af271f98769722baf3ed0374c4291bafb7d2180c741e97be03b6a8cbb3c54f6

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.216981+00:00.

Case digest / 9d1935e1ea1df51932b6a74f87c5a1bf300df157d6f63f3e4e97a6d30c288b56