FAILURE MAP
← Case archive

FA-94306 / Shift rostering labor rules / Open access

Overtime minutes also counted as additional hours · case 01

Weeks over 40 hours count minutes in both additional and overtime bands.

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

ROOT CAUSE

Additional minutes are not capped at the full-time threshold.

VERIFIED REPAIR

Cap additional minutes at 2400 worked minutes.

Unsuccessful approach: Capping at 48 hours still double counts minutes 2400-2880.

Case contract

Contract minutes per week and worked minutes per week. Per week: top-up = shortfall below contract; additional = minutes between contract and 2400; supplement base = additional minutes beyond a tolerance of contract // 10; overtime = minutes above 2400. Return [top-up, additional, supplement base, overtime] per week.

Why this case matters

Part-time contracts pay guaranteed hours, additional hours and supplements; each band has its own boundary.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(contract, weeks):
    out = []
    free = contract // 10
    for w in weeks:
        top = max(contract - w, 0)
        add = max(w - contract, 0)
        sup = max(add - free, 0)
        ot = max(w - 2400, 0)
        out.append([top, add, sup, ot])
    return out
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: additional band cap 1', [1500, [2500, 1000]], [[0, 900, 750, 100], [500, 0, 0, 0]]),
  ('regression variant: additional band cap 2', [1800, [2880, 0, 2500, 1488, 1981]],
   [[0, 600, 420, 480], [1800, 0, 0, 0], [0, 600, 420, 100], [312, 0, 0, 0], [0, 181, 1, 0]]),
  ('partial repair guard 3', [1234, [2880, 1056, 2880, 2400, 1357]],
   [[0, 1166, 1043, 480], [178, 0, 0, 0], [0, 1166, 1043, 480], [0, 1166, 1043, 0], [0, 123, 0, 0]]),
  ('boundary control 4', [1800, [2400, 3000]], [[0, 600, 420, 0], [0, 600, 420, 600]]),
  ('boundary control 5', [1200, [1320, 1321]], [[0, 120, 0, 0], [0, 121, 1, 0]]),
  ('normal control 6', [1200, [2880, 204, 1321]], [[0, 1200, 1080, 480], [996, 0, 0, 0], [0, 121, 1, 0]]),
  ('normal control 7', [2100, [2500, 2311]], [[0, 300, 90, 100], [0, 211, 1, 0]]),
  ('normal control 8', [1500, [1440, 1651, 1440]], [[60, 0, 0, 0], [0, 151, 1, 0], [60, 0, 0, 0]])],
 [('regression: additional band cap 1', [1800, [2400, 3000]], [[0, 600, 420, 0], [0, 600, 420, 600]]),
  ('regression variant: additional band cap 2', [1500, [0, 0, 1123, 2880, 2400]],
   [[1500, 0, 0, 0], [1500, 0, 0, 0], [377, 0, 0, 0], [0, 900, 750, 480], [0, 900, 750, 0]]),
  ('partial repair guard 3', [1800, [1740, 2880]], [[60, 0, 0, 0], [0, 600, 420, 480]]),
  ('boundary control 4', [1500, [2500, 1000]], [[0, 900, 750, 100], [500, 0, 0, 0]]),
  ('normal control 5', [1200, [1140, 0, 1200, 2696]],
   [[60, 0, 0, 0], [1200, 0, 0, 0], [0, 0, 0, 0], [0, 1200, 1080, 296]]),
  ('normal control 6', [1205, [1325, 2880]], [[0, 120, 0, 0], [0, 1195, 1075, 480]]),
  ('normal control 7', [1205, [1145, 1145, 1326]], [[60, 0, 0, 0], [60, 0, 0, 0], [0, 121, 1, 0]]),
  ('normal control 8', [1205, [1205, 2880, 0]], [[0, 0, 0, 0], [0, 1195, 1075, 480], [1205, 0, 0, 0]])],
 [('regression: additional band cap 1', [2100, [1346, 2500, 0, 2880, 2100]],
   [[754, 0, 0, 0], [0, 300, 90, 100], [2100, 0, 0, 0], [0, 300, 90, 480], [0, 0, 0, 0]]),
  ('regression variant: additional band cap 2', [2100, [2500, 2880, 2791, 0, 2100]],
   [[0, 300, 90, 100], [0, 300, 90, 480], [0, 300, 90, 391], [2100, 0, 0, 0], [0, 0, 0, 0]]),
  ('partial repair guard 3', [1800, [2500, 2500]], [[0, 600, 420, 100], [0, 600, 420, 100]]),
  ('boundary control 4', [1205, [1325, 1326]], [[0, 120, 0, 0], [0, 121, 1, 0]]),
  ('boundary control 5', [1500, [2500, 1000]], [[0, 900, 750, 100], [500, 0, 0, 0]]),
  ('normal control 6', [1200, [1321, 1321, 1200]], [[0, 121, 1, 0], [0, 121, 1, 0], [0, 0, 0, 0]]),
  ('normal control 7', [1200, [2400, 1320, 1200, 2400, 2500]],
   [[0, 1200, 1080, 0], [0, 120, 0, 0], [0, 0, 0, 0], [0, 1200, 1080, 0], [0, 1200, 1080, 100]]),
  ('normal control 8', [2100, [2400, 2400, 0, 2310, 2400]],
   [[0, 300, 90, 0], [0, 300, 90, 0], [2100, 0, 0, 0], [0, 210, 0, 0], [0, 300, 90, 0]])],
 [('regression: additional band cap 1', [1500, [2880, 2880, 2880]],
   [[0, 900, 750, 480], [0, 900, 750, 480], [0, 900, 750, 480]]),
  ('regression variant: additional band cap 2', [1500, [1440, 2400, 2880, 2013, 2500]],
   [[60, 0, 0, 0], [0, 900, 750, 0], [0, 900, 750, 480], [0, 513, 363, 0], [0, 900, 750, 100]]),
  ('partial repair guard 3', [1205, [0, 2400, 2880, 1325, 1145]],
   [[1205, 0, 0, 0], [0, 1195, 1075, 0], [0, 1195, 1075, 480], [0, 120, 0, 0], [60, 0, 0, 0]]),
  ('boundary control 4', [1200, [1320, 1321]], [[0, 120, 0, 0], [0, 121, 1, 0]]),
  ('boundary control 5', [1205, [1325, 1326]], [[0, 120, 0, 0], [0, 121, 1, 0]]),
  ('normal control 6', [1200, [1200, 1321, 2823]], [[0, 0, 0, 0], [0, 121, 1, 0], [0, 1200, 1080, 423]]),
  ('normal control 7', [1500, [2500, 2400, 2500, 1650]],
   [[0, 900, 750, 100], [0, 900, 750, 0], [0, 900, 750, 100], [0, 150, 0, 0]]),
  ('normal control 8', [1205, [1325, 1145, 1325, 0, 2880]],
   [[0, 120, 0, 0], [60, 0, 0, 0], [0, 120, 0, 0], [1205, 0, 0, 0], [0, 1195, 1075, 480]])],
 [('regression: additional band cap 1', [2100, [2400, 2310, 2880, 58, 0]],
   [[0, 300, 90, 0], [0, 210, 0, 0], [0, 300, 90, 480], [2042, 0, 0, 0], [2100, 0, 0, 0]]),
  ('regression variant: additional band cap 2', [1205, [2880, 1326, 2500, 1205]],
   [[0, 1195, 1075, 480], [0, 121, 1, 0], [0, 1195, 1075, 100], [0, 0, 0, 0]]),
  ('partial repair guard 3', [1500, [1440, 2880, 1651]], [[60, 0, 0, 0], [0, 900, 750, 480], [0, 151, 1, 0]]),
  ('boundary control 4', [1800, [2400, 3000]], [[0, 600, 420, 0], [0, 600, 420, 600]]),
  ('boundary control 5', [1200, [1320, 1321]], [[0, 120, 0, 0], [0, 121, 1, 0]]),
  ('normal control 6', [1500, [0, 2400, 1651, 1651]],
   [[1500, 0, 0, 0], [0, 900, 750, 0], [0, 151, 1, 0], [0, 151, 1, 0]]),
  ('normal control 7', [1234, [1174, 2400, 1358]], [[60, 0, 0, 0], [0, 1166, 1043, 0], [0, 124, 1, 0]]),
  ('normal control 8', [2100, [2310, 2400]], [[0, 210, 0, 0], [0, 300, 90, 0]])]]
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: additional band cap 1[[0, 1000, 850, 100], [500, 0, 0, 0]][[0, 900, 750, 100], [500, 0, 0, 0]]Failed
regression variant: additional band cap 2[[0, 1080, 900, 480], [1800, 0, 0, 0], [0, 700, 520, 100], [312, 0, 0, 0], [0, 181, 1, 0]][[0, 600, 420, 480], [1800, 0, 0, 0], [0, 600, 420, 100], [312, 0, 0, 0], [0, 181, 1, 0]]Failed
partial repair guard 3[[0, 1646, 1523, 480], [178, 0, 0, 0], [0, 1646, 1523, 480], [0, 1166, 1043, 0], [0, 123, 0, 0]][[0, 1166, 1043, 480], [178, 0, 0, 0], [0, 1166, 1043, 480], [0, 1166, 1043, 0], [0, 123, 0, 0]]Failed
boundary control 4[[0, 600, 420, 0], [0, 1200, 1020, 600]][[0, 600, 420, 0], [0, 600, 420, 600]]Failed
boundary control 5[[0, 120, 0, 0], [0, 121, 1, 0]][[0, 120, 0, 0], [0, 121, 1, 0]]Passed
normal control 6[[0, 1680, 1560, 480], [996, 0, 0, 0], [0, 121, 1, 0]][[0, 1200, 1080, 480], [996, 0, 0, 0], [0, 121, 1, 0]]Failed
normal control 7[[0, 400, 190, 100], [0, 211, 1, 0]][[0, 300, 90, 100], [0, 211, 1, 0]]Failed
normal control 8[[60, 0, 0, 0], [0, 151, 1, 0], [60, 0, 0, 0]][[60, 0, 0, 0], [0, 151, 1, 0], [60, 0, 0, 0]]Passed

SHA-256 / f1c307765f93e96670f8d4408a95c10ec157eda98c85846a82d3ba9218760df7

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(contract, weeks):
    out = []
    free = contract // 10
    for w in weeks:
        top = max(contract - w, 0)
        add = max(min(w, 2880) - contract, 0)
        sup = max(add - free, 0)
        ot = max(w - 2400, 0)
        out.append([top, add, sup, ot])
    return out
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: additional band cap 1', [1500, [2500, 1000]], [[0, 900, 750, 100], [500, 0, 0, 0]]),
  ('regression variant: additional band cap 2', [1800, [2880, 0, 2500, 1488, 1981]],
   [[0, 600, 420, 480], [1800, 0, 0, 0], [0, 600, 420, 100], [312, 0, 0, 0], [0, 181, 1, 0]]),
  ('partial repair guard 3', [1234, [2880, 1056, 2880, 2400, 1357]],
   [[0, 1166, 1043, 480], [178, 0, 0, 0], [0, 1166, 1043, 480], [0, 1166, 1043, 0], [0, 123, 0, 0]]),
  ('boundary control 4', [1800, [2400, 3000]], [[0, 600, 420, 0], [0, 600, 420, 600]]),
  ('boundary control 5', [1200, [1320, 1321]], [[0, 120, 0, 0], [0, 121, 1, 0]]),
  ('normal control 6', [1200, [2880, 204, 1321]], [[0, 1200, 1080, 480], [996, 0, 0, 0], [0, 121, 1, 0]]),
  ('normal control 7', [2100, [2500, 2311]], [[0, 300, 90, 100], [0, 211, 1, 0]]),
  ('normal control 8', [1500, [1440, 1651, 1440]], [[60, 0, 0, 0], [0, 151, 1, 0], [60, 0, 0, 0]])],
 [('regression: additional band cap 1', [1800, [2400, 3000]], [[0, 600, 420, 0], [0, 600, 420, 600]]),
  ('regression variant: additional band cap 2', [1500, [0, 0, 1123, 2880, 2400]],
   [[1500, 0, 0, 0], [1500, 0, 0, 0], [377, 0, 0, 0], [0, 900, 750, 480], [0, 900, 750, 0]]),
  ('partial repair guard 3', [1800, [1740, 2880]], [[60, 0, 0, 0], [0, 600, 420, 480]]),
  ('boundary control 4', [1500, [2500, 1000]], [[0, 900, 750, 100], [500, 0, 0, 0]]),
  ('normal control 5', [1200, [1140, 0, 1200, 2696]],
   [[60, 0, 0, 0], [1200, 0, 0, 0], [0, 0, 0, 0], [0, 1200, 1080, 296]]),
  ('normal control 6', [1205, [1325, 2880]], [[0, 120, 0, 0], [0, 1195, 1075, 480]]),
  ('normal control 7', [1205, [1145, 1145, 1326]], [[60, 0, 0, 0], [60, 0, 0, 0], [0, 121, 1, 0]]),
  ('normal control 8', [1205, [1205, 2880, 0]], [[0, 0, 0, 0], [0, 1195, 1075, 480], [1205, 0, 0, 0]])],
 [('regression: additional band cap 1', [2100, [1346, 2500, 0, 2880, 2100]],
   [[754, 0, 0, 0], [0, 300, 90, 100], [2100, 0, 0, 0], [0, 300, 90, 480], [0, 0, 0, 0]]),
  ('regression variant: additional band cap 2', [2100, [2500, 2880, 2791, 0, 2100]],
   [[0, 300, 90, 100], [0, 300, 90, 480], [0, 300, 90, 391], [2100, 0, 0, 0], [0, 0, 0, 0]]),
  ('partial repair guard 3', [1800, [2500, 2500]], [[0, 600, 420, 100], [0, 600, 420, 100]]),
  ('boundary control 4', [1205, [1325, 1326]], [[0, 120, 0, 0], [0, 121, 1, 0]]),
  ('boundary control 5', [1500, [2500, 1000]], [[0, 900, 750, 100], [500, 0, 0, 0]]),
  ('normal control 6', [1200, [1321, 1321, 1200]], [[0, 121, 1, 0], [0, 121, 1, 0], [0, 0, 0, 0]]),
  ('normal control 7', [1200, [2400, 1320, 1200, 2400, 2500]],
   [[0, 1200, 1080, 0], [0, 120, 0, 0], [0, 0, 0, 0], [0, 1200, 1080, 0], [0, 1200, 1080, 100]]),
  ('normal control 8', [2100, [2400, 2400, 0, 2310, 2400]],
   [[0, 300, 90, 0], [0, 300, 90, 0], [2100, 0, 0, 0], [0, 210, 0, 0], [0, 300, 90, 0]])],
 [('regression: additional band cap 1', [1500, [2880, 2880, 2880]],
   [[0, 900, 750, 480], [0, 900, 750, 480], [0, 900, 750, 480]]),
  ('regression variant: additional band cap 2', [1500, [1440, 2400, 2880, 2013, 2500]],
   [[60, 0, 0, 0], [0, 900, 750, 0], [0, 900, 750, 480], [0, 513, 363, 0], [0, 900, 750, 100]]),
  ('partial repair guard 3', [1205, [0, 2400, 2880, 1325, 1145]],
   [[1205, 0, 0, 0], [0, 1195, 1075, 0], [0, 1195, 1075, 480], [0, 120, 0, 0], [60, 0, 0, 0]]),
  ('boundary control 4', [1200, [1320, 1321]], [[0, 120, 0, 0], [0, 121, 1, 0]]),
  ('boundary control 5', [1205, [1325, 1326]], [[0, 120, 0, 0], [0, 121, 1, 0]]),
  ('normal control 6', [1200, [1200, 1321, 2823]], [[0, 0, 0, 0], [0, 121, 1, 0], [0, 1200, 1080, 423]]),
  ('normal control 7', [1500, [2500, 2400, 2500, 1650]],
   [[0, 900, 750, 100], [0, 900, 750, 0], [0, 900, 750, 100], [0, 150, 0, 0]]),
  ('normal control 8', [1205, [1325, 1145, 1325, 0, 2880]],
   [[0, 120, 0, 0], [60, 0, 0, 0], [0, 120, 0, 0], [1205, 0, 0, 0], [0, 1195, 1075, 480]])],
 [('regression: additional band cap 1', [2100, [2400, 2310, 2880, 58, 0]],
   [[0, 300, 90, 0], [0, 210, 0, 0], [0, 300, 90, 480], [2042, 0, 0, 0], [2100, 0, 0, 0]]),
  ('regression variant: additional band cap 2', [1205, [2880, 1326, 2500, 1205]],
   [[0, 1195, 1075, 480], [0, 121, 1, 0], [0, 1195, 1075, 100], [0, 0, 0, 0]]),
  ('partial repair guard 3', [1500, [1440, 2880, 1651]], [[60, 0, 0, 0], [0, 900, 750, 480], [0, 151, 1, 0]]),
  ('boundary control 4', [1800, [2400, 3000]], [[0, 600, 420, 0], [0, 600, 420, 600]]),
  ('boundary control 5', [1200, [1320, 1321]], [[0, 120, 0, 0], [0, 121, 1, 0]]),
  ('normal control 6', [1500, [0, 2400, 1651, 1651]],
   [[1500, 0, 0, 0], [0, 900, 750, 0], [0, 151, 1, 0], [0, 151, 1, 0]]),
  ('normal control 7', [1234, [1174, 2400, 1358]], [[60, 0, 0, 0], [0, 1166, 1043, 0], [0, 124, 1, 0]]),
  ('normal control 8', [2100, [2310, 2400]], [[0, 210, 0, 0], [0, 300, 90, 0]])]]
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: additional band cap 1[[0, 1000, 850, 100], [500, 0, 0, 0]][[0, 900, 750, 100], [500, 0, 0, 0]]Failed
regression variant: additional band cap 2[[0, 1080, 900, 480], [1800, 0, 0, 0], [0, 700, 520, 100], [312, 0, 0, 0], [0, 181, 1, 0]][[0, 600, 420, 480], [1800, 0, 0, 0], [0, 600, 420, 100], [312, 0, 0, 0], [0, 181, 1, 0]]Failed
partial repair guard 3[[0, 1646, 1523, 480], [178, 0, 0, 0], [0, 1646, 1523, 480], [0, 1166, 1043, 0], [0, 123, 0, 0]][[0, 1166, 1043, 480], [178, 0, 0, 0], [0, 1166, 1043, 480], [0, 1166, 1043, 0], [0, 123, 0, 0]]Failed
boundary control 4[[0, 600, 420, 0], [0, 1080, 900, 600]][[0, 600, 420, 0], [0, 600, 420, 600]]Failed
boundary control 5[[0, 120, 0, 0], [0, 121, 1, 0]][[0, 120, 0, 0], [0, 121, 1, 0]]Passed
normal control 6[[0, 1680, 1560, 480], [996, 0, 0, 0], [0, 121, 1, 0]][[0, 1200, 1080, 480], [996, 0, 0, 0], [0, 121, 1, 0]]Failed
normal control 7[[0, 400, 190, 100], [0, 211, 1, 0]][[0, 300, 90, 100], [0, 211, 1, 0]]Failed
normal control 8[[60, 0, 0, 0], [0, 151, 1, 0], [60, 0, 0, 0]][[60, 0, 0, 0], [0, 151, 1, 0], [60, 0, 0, 0]]Passed

SHA-256 / b099bb5b9b6f7dc3ebc52ad9264dce25a88a864428d4982c22a56175331f96e2

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(contract, weeks):
    out = []
    free = contract // 10
    for w in weeks:
        top = max(contract - w, 0)
        add = max(min(w, 2400) - contract, 0)
        sup = max(add - free, 0)
        ot = max(w - 2400, 0)
        out.append([top, add, sup, ot])
    return out
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: additional band cap 1', [1500, [2500, 1000]], [[0, 900, 750, 100], [500, 0, 0, 0]]),
  ('regression variant: additional band cap 2', [1800, [2880, 0, 2500, 1488, 1981]],
   [[0, 600, 420, 480], [1800, 0, 0, 0], [0, 600, 420, 100], [312, 0, 0, 0], [0, 181, 1, 0]]),
  ('partial repair guard 3', [1234, [2880, 1056, 2880, 2400, 1357]],
   [[0, 1166, 1043, 480], [178, 0, 0, 0], [0, 1166, 1043, 480], [0, 1166, 1043, 0], [0, 123, 0, 0]]),
  ('boundary control 4', [1800, [2400, 3000]], [[0, 600, 420, 0], [0, 600, 420, 600]]),
  ('boundary control 5', [1200, [1320, 1321]], [[0, 120, 0, 0], [0, 121, 1, 0]]),
  ('normal control 6', [1200, [2880, 204, 1321]], [[0, 1200, 1080, 480], [996, 0, 0, 0], [0, 121, 1, 0]]),
  ('normal control 7', [2100, [2500, 2311]], [[0, 300, 90, 100], [0, 211, 1, 0]]),
  ('normal control 8', [1500, [1440, 1651, 1440]], [[60, 0, 0, 0], [0, 151, 1, 0], [60, 0, 0, 0]])],
 [('regression: additional band cap 1', [1800, [2400, 3000]], [[0, 600, 420, 0], [0, 600, 420, 600]]),
  ('regression variant: additional band cap 2', [1500, [0, 0, 1123, 2880, 2400]],
   [[1500, 0, 0, 0], [1500, 0, 0, 0], [377, 0, 0, 0], [0, 900, 750, 480], [0, 900, 750, 0]]),
  ('partial repair guard 3', [1800, [1740, 2880]], [[60, 0, 0, 0], [0, 600, 420, 480]]),
  ('boundary control 4', [1500, [2500, 1000]], [[0, 900, 750, 100], [500, 0, 0, 0]]),
  ('normal control 5', [1200, [1140, 0, 1200, 2696]],
   [[60, 0, 0, 0], [1200, 0, 0, 0], [0, 0, 0, 0], [0, 1200, 1080, 296]]),
  ('normal control 6', [1205, [1325, 2880]], [[0, 120, 0, 0], [0, 1195, 1075, 480]]),
  ('normal control 7', [1205, [1145, 1145, 1326]], [[60, 0, 0, 0], [60, 0, 0, 0], [0, 121, 1, 0]]),
  ('normal control 8', [1205, [1205, 2880, 0]], [[0, 0, 0, 0], [0, 1195, 1075, 480], [1205, 0, 0, 0]])],
 [('regression: additional band cap 1', [2100, [1346, 2500, 0, 2880, 2100]],
   [[754, 0, 0, 0], [0, 300, 90, 100], [2100, 0, 0, 0], [0, 300, 90, 480], [0, 0, 0, 0]]),
  ('regression variant: additional band cap 2', [2100, [2500, 2880, 2791, 0, 2100]],
   [[0, 300, 90, 100], [0, 300, 90, 480], [0, 300, 90, 391], [2100, 0, 0, 0], [0, 0, 0, 0]]),
  ('partial repair guard 3', [1800, [2500, 2500]], [[0, 600, 420, 100], [0, 600, 420, 100]]),
  ('boundary control 4', [1205, [1325, 1326]], [[0, 120, 0, 0], [0, 121, 1, 0]]),
  ('boundary control 5', [1500, [2500, 1000]], [[0, 900, 750, 100], [500, 0, 0, 0]]),
  ('normal control 6', [1200, [1321, 1321, 1200]], [[0, 121, 1, 0], [0, 121, 1, 0], [0, 0, 0, 0]]),
  ('normal control 7', [1200, [2400, 1320, 1200, 2400, 2500]],
   [[0, 1200, 1080, 0], [0, 120, 0, 0], [0, 0, 0, 0], [0, 1200, 1080, 0], [0, 1200, 1080, 100]]),
  ('normal control 8', [2100, [2400, 2400, 0, 2310, 2400]],
   [[0, 300, 90, 0], [0, 300, 90, 0], [2100, 0, 0, 0], [0, 210, 0, 0], [0, 300, 90, 0]])],
 [('regression: additional band cap 1', [1500, [2880, 2880, 2880]],
   [[0, 900, 750, 480], [0, 900, 750, 480], [0, 900, 750, 480]]),
  ('regression variant: additional band cap 2', [1500, [1440, 2400, 2880, 2013, 2500]],
   [[60, 0, 0, 0], [0, 900, 750, 0], [0, 900, 750, 480], [0, 513, 363, 0], [0, 900, 750, 100]]),
  ('partial repair guard 3', [1205, [0, 2400, 2880, 1325, 1145]],
   [[1205, 0, 0, 0], [0, 1195, 1075, 0], [0, 1195, 1075, 480], [0, 120, 0, 0], [60, 0, 0, 0]]),
  ('boundary control 4', [1200, [1320, 1321]], [[0, 120, 0, 0], [0, 121, 1, 0]]),
  ('boundary control 5', [1205, [1325, 1326]], [[0, 120, 0, 0], [0, 121, 1, 0]]),
  ('normal control 6', [1200, [1200, 1321, 2823]], [[0, 0, 0, 0], [0, 121, 1, 0], [0, 1200, 1080, 423]]),
  ('normal control 7', [1500, [2500, 2400, 2500, 1650]],
   [[0, 900, 750, 100], [0, 900, 750, 0], [0, 900, 750, 100], [0, 150, 0, 0]]),
  ('normal control 8', [1205, [1325, 1145, 1325, 0, 2880]],
   [[0, 120, 0, 0], [60, 0, 0, 0], [0, 120, 0, 0], [1205, 0, 0, 0], [0, 1195, 1075, 480]])],
 [('regression: additional band cap 1', [2100, [2400, 2310, 2880, 58, 0]],
   [[0, 300, 90, 0], [0, 210, 0, 0], [0, 300, 90, 480], [2042, 0, 0, 0], [2100, 0, 0, 0]]),
  ('regression variant: additional band cap 2', [1205, [2880, 1326, 2500, 1205]],
   [[0, 1195, 1075, 480], [0, 121, 1, 0], [0, 1195, 1075, 100], [0, 0, 0, 0]]),
  ('partial repair guard 3', [1500, [1440, 2880, 1651]], [[60, 0, 0, 0], [0, 900, 750, 480], [0, 151, 1, 0]]),
  ('boundary control 4', [1800, [2400, 3000]], [[0, 600, 420, 0], [0, 600, 420, 600]]),
  ('boundary control 5', [1200, [1320, 1321]], [[0, 120, 0, 0], [0, 121, 1, 0]]),
  ('normal control 6', [1500, [0, 2400, 1651, 1651]],
   [[1500, 0, 0, 0], [0, 900, 750, 0], [0, 151, 1, 0], [0, 151, 1, 0]]),
  ('normal control 7', [1234, [1174, 2400, 1358]], [[60, 0, 0, 0], [0, 1166, 1043, 0], [0, 124, 1, 0]]),
  ('normal control 8', [2100, [2310, 2400]], [[0, 210, 0, 0], [0, 300, 90, 0]])]]
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: additional band cap 1[[0, 900, 750, 100], [500, 0, 0, 0]][[0, 900, 750, 100], [500, 0, 0, 0]]Passed
regression variant: additional band cap 2[[0, 600, 420, 480], [1800, 0, 0, 0], [0, 600, 420, 100], [312, 0, 0, 0], [0, 181, 1, 0]][[0, 600, 420, 480], [1800, 0, 0, 0], [0, 600, 420, 100], [312, 0, 0, 0], [0, 181, 1, 0]]Passed
partial repair guard 3[[0, 1166, 1043, 480], [178, 0, 0, 0], [0, 1166, 1043, 480], [0, 1166, 1043, 0], [0, 123, 0, 0]][[0, 1166, 1043, 480], [178, 0, 0, 0], [0, 1166, 1043, 480], [0, 1166, 1043, 0], [0, 123, 0, 0]]Passed
boundary control 4[[0, 600, 420, 0], [0, 600, 420, 600]][[0, 600, 420, 0], [0, 600, 420, 600]]Passed
boundary control 5[[0, 120, 0, 0], [0, 121, 1, 0]][[0, 120, 0, 0], [0, 121, 1, 0]]Passed
normal control 6[[0, 1200, 1080, 480], [996, 0, 0, 0], [0, 121, 1, 0]][[0, 1200, 1080, 480], [996, 0, 0, 0], [0, 121, 1, 0]]Passed
normal control 7[[0, 300, 90, 100], [0, 211, 1, 0]][[0, 300, 90, 100], [0, 211, 1, 0]]Passed
normal control 8[[60, 0, 0, 0], [0, 151, 1, 0], [60, 0, 0, 0]][[60, 0, 0, 0], [0, 151, 1, 0], [60, 0, 0, 0]]Passed

SHA-256 / a23d8073bcc0b171954a1004c206305872fe8543b6c82c71faf0e01fa0fd4389

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

Case digest / 2487212243aed4840df34eb927ae3c7210cbccc5efa1b3ac03a387a5c887695f