FAILURE MAP
← Case archive

FA-94321 / Shift rostering labor rules / Open access

Refused overtime offers not charged to the ledger · case 01

Workers who always refuse stay at the top of the offer list.

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

ROOT CAUSE

Refusals skip the worker without charging the offered minutes.

VERIFIED REPAIR

Charge refused offers at the full offered minutes.

Unsuccessful approach: Charging half the offer still distorts the rotation.

Case contract

ledger: worker -> [overtime minutes charged, seniority rank (1 most senior), minutes already worked today]; offers: [minutes, workers who will refuse]. For each offer, candidates are ordered by charged overtime then seniority rank. Workers who would exceed 720 minutes today are skipped without charge; refusers are charged the offered minutes; the first remaining worker takes it and is charged and credited today. Return [taker per offer (or None), charged minutes by worker].

Why this case matters

Overtime equalization clauses require fair rotation of offers, including charging refusals.

1 / The failure

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

N = 1
observations = []
def solve(ledger, offers):
    led = {w: list(v) for w, v in ledger.items()}
    result = []
    for minutes, refusers in offers:
        cands = sorted(led, key=lambda w: (led[w][0], led[w][1]))
        taker = None
        for w in cands:
            if led[w][2] + minutes > 720:
                continue
            if w in refusers:
                continue
            taker = w
            break
        if taker is not None:
            led[taker][0] += minutes
            led[taker][2] += minutes
        result.append(taker)
    return [result, {w: led[w][0] for w in sorted(led)}]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: refusal charge 1',
   [{'p': [120, 1, 240], 'r': [0, 2, 480], 'q': [60, 3, 240], 's': [60, 4, 480]},
    [[60, []], [240, ['q', 'r']]]],
   [['r', 's'], {'p': 120, 'q': 300, 'r': 60, 's': 300}]),
  ('regression variant: refusal charge 2',
   [{'q': [120, 1, 0], 'p': [120, 2, 660]}, [[240, ['q']], [240, []], [120, []]]],
   [[None, 'q', 'q'], {'p': 120, 'q': 720}]),
  ('partial repair guard 3',
   [{'q': [120, 1, 600], 'p': [240, 2, 660]}, [[120, ['q']], [60, []], [120, []], [240, []]]],
   [[None, 'q', None, None], {'p': 240, 'q': 300}]),
  ('normal control 4',
   [{'q': [0, 1, 0], 'r': [60, 2, 600], 's': [0, 3, 240], 'p': [60, 4, 480]},
    [[120, ['p', 'q']], [240, ['r']], [240, []], [60, ['p']]]],
   [['s', 'p', 'q', 'r'], {'p': 300, 'q': 360, 'r': 120, 's': 120}]),
  ('normal control 5', [{'p': [60, 1, 480], 'r': [240, 2, 660], 'q': [0, 3, 600]}, [[120, []]]],
   [['q'], {'p': 60, 'q': 120, 'r': 240}]),
  ('normal control 6',
   [{'q': [60, 1, 600], 'p': [240, 2, 240], 's': [120, 3, 240], 'r': [120, 4, 0]},
    [[120, ['p']], [120, ['r']], [240, ['q', 'p']], [120, ['p']]]],
   [['q', 's', 'r', 's'], {'p': 360, 'q': 180, 'r': 360, 's': 360}]),
  ('normal control 7', [{'p': [0, 1, 660], 'q': [60, 2, 660]}, [[120, ['p']], [120, []], [60, ['q', 'p']]]],
   [[None, None, None], {'p': 60, 'q': 120}]),
  ('normal control 8',
   [{'q': [60, 1, 660], 'p': [60, 2, 0]}, [[60, []], [240, []], [120, ['p']], [240, ['q', 'p']]]],
   [['q', 'p', None, None], {'p': 660, 'q': 120}])],
 [('regression: refusal charge 1',
   [{'p': [60, 1, 480], 'q': [120, 2, 600]}, [[60, ['p', 'q']], [60, ['q', 'p']], [60, ['p', 'q']]]],
   [[None, None, None], {'p': 240, 'q': 300}]),
  ('regression variant: refusal charge 2',
   [{'p': [240, 1, 660], 'r': [60, 2, 240], 's': [120, 3, 0], 'q': [0, 4, 600]},
    [[240, []], [60, ['q', 'p']]]],
   [['r', 's'], {'p': 240, 'q': 60, 'r': 300, 's': 180}]),
  ('partial repair guard 3',
   [{'q': [120, 1, 0], 'r': [240, 2, 240], 'p': [0, 3, 0]},
    [[120, []], [60, ['q', 'r']], [60, ['p']], [60, ['q']]]],
   [['p', 'p', 'q', 'p'], {'p': 240, 'q': 240, 'r': 240}]),
  ('normal control 4', [{'p': [60, 1, 240], 'q': [120, 2, 0]}, [[60, ['q']]]], [['p'], {'p': 120, 'q': 120}]),
  ('normal control 5', [{'r': [120, 1, 240], 'p': [60, 2, 600], 'q': [240, 3, 660]}, [[60, []], [60, []]]],
   [['p', 'r'], {'p': 120, 'q': 240, 'r': 180}]),
  ('normal control 6',
   [{'r': [240, 1, 0], 's': [0, 2, 0], 'p': [120, 3, 660], 'q': [120, 4, 0]},
    [[60, ['p', 's']], [240, ['r']], [60, ['s', 'r']], [240, ['r']]]],
   [['q', 's', 'p', 'q'], {'p': 240, 'q': 420, 'r': 240, 's': 300}]),
  ('normal control 7',
   [{'r': [240, 1, 600], 'p': [120, 2, 600], 's': [120, 3, 660], 'q': [120, 4, 600]},
    [[120, []], [240, ['p', 's']], [60, ['s']]]],
   [['p', None, 'q'], {'p': 240, 'q': 180, 'r': 240, 's': 180}]),
  ('normal control 8', [{'r': [60, 1, 240], 'q': [120, 2, 240], 'p': [60, 3, 480]}, [[60, ['r', 'p']]]],
   [['q'], {'p': 120, 'q': 180, 'r': 120}])],
 [('regression: refusal charge 1',
   [{'p': [0, 1, 0], 'q': [120, 2, 600]}, [[60, ['q', 'p']], [120, []], [120, ['q']], [120, []]]],
   [[None, 'p', 'p', 'q'], {'p': 300, 'q': 300}]),
  ('regression variant: refusal charge 2',
   [{'q': [120, 1, 600], 'p': [240, 2, 0]}, [[120, []], [60, ['p']], [240, []], [120, ['p']]]],
   [['q', None, 'p', None], {'p': 660, 'q': 240}]),
  ('partial repair guard 3', [{'q': [120, 1, 480], 'p': [120, 2, 660]}, [[240, ['q', 'p']]]],
   [[None], {'p': 120, 'q': 360}]),
  ('normal control 4',
   [{'q': [0, 1, 240], 'p': [0, 2, 240], 'r': [60, 3, 660]},
    [[240, ['p']], [120, ['r']], [240, []], [120, ['q']]]],
   [['q', 'p', 'p', 'p'], {'p': 480, 'q': 360, 'r': 60}]),
  ('normal control 5',
   [{'q': [120, 1, 0], 'p': [120, 2, 240], 'r': [120, 3, 480]},
    [[60, ['p']], [60, ['r', 'q']], [60, ['q', 'r']], [120, ['r', 'q']]]],
   [['q', 'p', 'p', 'p'], {'p': 360, 'q': 360, 'r': 300}]),
  ('normal control 6', [{'p': [0, 1, 0], 'q': [60, 2, 660], 'r': [0, 3, 0]}, [[60, []]]],
   [['p'], {'p': 60, 'q': 60, 'r': 0}]),
  ('normal control 7', [{'p': [60, 1, 0], 'r': [240, 2, 600], 'q': [0, 3, 480]}, [[240, ['r']]]],
   [['q'], {'p': 60, 'q': 240, 'r': 240}]),
  ('normal control 8', [{'r': [120, 1, 0], 'p': [0, 2, 0], 'q': [120, 3, 480]}, [[60, ['r']], [60, []]]],
   [['p', 'p'], {'p': 120, 'q': 120, 'r': 120}])],
 [('regression: refusal charge 1', [{'q': [0, 1, 240], 'p': [120, 2, 0]}, [[120, ['p', 'q']], [240, []]]],
   [[None, 'q'], {'p': 240, 'q': 360}]),
  ('regression variant: refusal charge 2',
   [{'r': [0, 1, 600], 'p': [120, 2, 660], 'q': [0, 3, 660]},
    [[60, ['p', 'r']], [120, ['p', 'r']], [60, ['r', 'p']]]],
   [['q', None, None], {'p': 180, 'q': 60, 'r': 240}]),
  ('partial repair guard 3',
   [{'p': [0, 1, 660], 'q': [120, 2, 480]}, [[60, []], [60, ['p', 'q']], [240, []], [240, ['q']]]],
   [['p', None, 'q', None], {'p': 60, 'q': 420}]),
  ('normal control 4',
   [{'p': [120, 1, 480], 'q': [120, 2, 660], 'r': [120, 3, 0]}, [[240, ['r', 'p']], [240, []]]],
   [[None, 'p'], {'p': 600, 'q': 120, 'r': 360}]),
  ('normal control 5',
   [{'p': [60, 1, 0], 's': [120, 2, 240], 'r': [240, 3, 600], 'q': [240, 4, 480]},
    [[120, ['r', 's']], [120, []]]],
   [['p', 's'], {'p': 180, 'q': 240, 'r': 240, 's': 240}]),
  ('normal control 6',
   [{'p': [120, 1, 600], 'q': [0, 2, 600]}, [[120, ['p']], [240, ['q']], [60, ['p']], [240, ['q']]]],
   [['q', None, None, None], {'p': 180, 'q': 120}]),
  ('normal control 7',
   [{'q': [60, 1, 240], 'p': [60, 2, 480], 'r': [60, 3, 0]},
    [[120, []], [240, ['r', 'p']], [60, ['q', 'p']]]],
   [['q', 'q', 'r'], {'p': 360, 'q': 420, 'r': 360}]),
  ('normal control 8',
   [{'q': [0, 1, 660], 'p': [120, 2, 480]}, [[60, ['p']], [60, ['p']], [240, []], [60, ['q', 'p']]]],
   [['q', None, 'p', None], {'p': 420, 'q': 60}])],
 [('regression: refusal charge 1',
   [{'r': [240, 1, 0], 'p': [60, 2, 0], 'q': [120, 3, 0], 's': [120, 4, 600]}, [[120, ['p', 'q']]]],
   [['s'], {'p': 180, 'q': 240, 'r': 240, 's': 240}]),
  ('regression variant: refusal charge 2',
   [{'p': [120, 1, 480], 'q': [0, 2, 240]}, [[240, []], [120, ['p']], [60, []], [60, []]]],
   [['q', 'q', 'p', 'p'], {'p': 360, 'q': 360}]),
  ('partial repair guard 3',
   [{'p': [240, 1, 0], 'q': [60, 2, 660]}, [[60, ['q', 'p']], [120, ['p', 'q']], [120, ['p']]]],
   [[None, None, None], {'p': 540, 'q': 120}]),
  ('normal control 4', [{'p': [60, 1, 600], 'q': [240, 2, 660]}, [[240, ['q']], [60, []]]],
   [[None, 'p'], {'p': 120, 'q': 240}]),
  ('normal control 5',
   [{'p': [0, 1, 600], 'r': [120, 2, 0], 'q': [120, 3, 0], 's': [0, 4, 240]},
    [[60, ['r']], [60, ['q', 's']]]],
   [['p', 'p'], {'p': 120, 'q': 120, 'r': 120, 's': 60}]),
  ('normal control 6',
   [{'q': [120, 1, 480], 'p': [120, 2, 600], 'r': [240, 3, 600], 's': [240, 4, 480]},
    [[120, ['r']], [120, ['s']], [60, ['q']], [240, ['q']]]],
   [['q', 'p', 'r', 's'], {'p': 240, 'q': 300, 'r': 300, 's': 480}]),
  ('normal control 7',
   [{'s': [60, 1, 660], 'r': [0, 2, 660], 'p': [0, 3, 0], 'q': [120, 4, 240]},
    [[60, []], [120, ['s', 'q']], [240, ['q', 'p']], [240, ['r']]]],
   [['r', 'p', None, 'p'], {'p': 600, 'q': 360, 'r': 60, 's': 60}]),
  ('normal control 8',
   [{'q': [0, 1, 0], 'p': [120, 2, 240], 'r': [120, 3, 660]}, [[60, []], [120, []], [240, []]]],
   [['q', 'q', 'p'], {'p': 360, 'q': 180, 'r': 120}])]]
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: refusal charge 1[['r', 's'], {'p': 120, 'q': 60, 'r': 60, 's': 300}][['r', 's'], {'p': 120, 'q': 300, 'r': 60, 's': 300}]Failed
regression variant: refusal charge 2[[None, 'q', 'q'], {'p': 120, 'q': 480}][[None, 'q', 'q'], {'p': 120, 'q': 720}]Failed
partial repair guard 3[[None, 'q', None, None], {'p': 240, 'q': 180}][[None, 'q', None, None], {'p': 240, 'q': 300}]Failed
normal control 4[['s', 'q', 'p', 'r'], {'p': 300, 'q': 240, 'r': 120, 's': 120}][['s', 'p', 'q', 'r'], {'p': 300, 'q': 360, 'r': 120, 's': 120}]Failed
normal control 5[['q'], {'p': 60, 'q': 120, 'r': 240}][['q'], {'p': 60, 'q': 120, 'r': 240}]Passed
normal control 6[['q', 's', 'r', 's'], {'p': 240, 'q': 180, 'r': 360, 's': 360}][['q', 's', 'r', 's'], {'p': 360, 'q': 180, 'r': 360, 's': 360}]Failed
normal control 7[[None, None, None], {'p': 0, 'q': 60}][[None, None, None], {'p': 60, 'q': 120}]Failed
normal control 8[['q', 'p', None, None], {'p': 300, 'q': 120}][['q', 'p', None, None], {'p': 660, 'q': 120}]Failed

SHA-256 / 9cfe2edae258f8761af912aa8ef9efac69de6c9ca01e9a00e4ff1f87d3a04e36

2 / The unsuccessful fix

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

N = 1
observations = []
def solve(ledger, offers):
    led = {w: list(v) for w, v in ledger.items()}
    result = []
    for minutes, refusers in offers:
        cands = sorted(led, key=lambda w: (led[w][0], led[w][1]))
        taker = None
        for w in cands:
            if led[w][2] + minutes > 720:
                continue
            if w in refusers:
                led[w][0] += minutes // 2
                continue
            taker = w
            break
        if taker is not None:
            led[taker][0] += minutes
            led[taker][2] += minutes
        result.append(taker)
    return [result, {w: led[w][0] for w in sorted(led)}]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: refusal charge 1',
   [{'p': [120, 1, 240], 'r': [0, 2, 480], 'q': [60, 3, 240], 's': [60, 4, 480]},
    [[60, []], [240, ['q', 'r']]]],
   [['r', 's'], {'p': 120, 'q': 300, 'r': 60, 's': 300}]),
  ('regression variant: refusal charge 2',
   [{'q': [120, 1, 0], 'p': [120, 2, 660]}, [[240, ['q']], [240, []], [120, []]]],
   [[None, 'q', 'q'], {'p': 120, 'q': 720}]),
  ('partial repair guard 3',
   [{'q': [120, 1, 600], 'p': [240, 2, 660]}, [[120, ['q']], [60, []], [120, []], [240, []]]],
   [[None, 'q', None, None], {'p': 240, 'q': 300}]),
  ('normal control 4',
   [{'q': [0, 1, 0], 'r': [60, 2, 600], 's': [0, 3, 240], 'p': [60, 4, 480]},
    [[120, ['p', 'q']], [240, ['r']], [240, []], [60, ['p']]]],
   [['s', 'p', 'q', 'r'], {'p': 300, 'q': 360, 'r': 120, 's': 120}]),
  ('normal control 5', [{'p': [60, 1, 480], 'r': [240, 2, 660], 'q': [0, 3, 600]}, [[120, []]]],
   [['q'], {'p': 60, 'q': 120, 'r': 240}]),
  ('normal control 6',
   [{'q': [60, 1, 600], 'p': [240, 2, 240], 's': [120, 3, 240], 'r': [120, 4, 0]},
    [[120, ['p']], [120, ['r']], [240, ['q', 'p']], [120, ['p']]]],
   [['q', 's', 'r', 's'], {'p': 360, 'q': 180, 'r': 360, 's': 360}]),
  ('normal control 7', [{'p': [0, 1, 660], 'q': [60, 2, 660]}, [[120, ['p']], [120, []], [60, ['q', 'p']]]],
   [[None, None, None], {'p': 60, 'q': 120}]),
  ('normal control 8',
   [{'q': [60, 1, 660], 'p': [60, 2, 0]}, [[60, []], [240, []], [120, ['p']], [240, ['q', 'p']]]],
   [['q', 'p', None, None], {'p': 660, 'q': 120}])],
 [('regression: refusal charge 1',
   [{'p': [60, 1, 480], 'q': [120, 2, 600]}, [[60, ['p', 'q']], [60, ['q', 'p']], [60, ['p', 'q']]]],
   [[None, None, None], {'p': 240, 'q': 300}]),
  ('regression variant: refusal charge 2',
   [{'p': [240, 1, 660], 'r': [60, 2, 240], 's': [120, 3, 0], 'q': [0, 4, 600]},
    [[240, []], [60, ['q', 'p']]]],
   [['r', 's'], {'p': 240, 'q': 60, 'r': 300, 's': 180}]),
  ('partial repair guard 3',
   [{'q': [120, 1, 0], 'r': [240, 2, 240], 'p': [0, 3, 0]},
    [[120, []], [60, ['q', 'r']], [60, ['p']], [60, ['q']]]],
   [['p', 'p', 'q', 'p'], {'p': 240, 'q': 240, 'r': 240}]),
  ('normal control 4', [{'p': [60, 1, 240], 'q': [120, 2, 0]}, [[60, ['q']]]], [['p'], {'p': 120, 'q': 120}]),
  ('normal control 5', [{'r': [120, 1, 240], 'p': [60, 2, 600], 'q': [240, 3, 660]}, [[60, []], [60, []]]],
   [['p', 'r'], {'p': 120, 'q': 240, 'r': 180}]),
  ('normal control 6',
   [{'r': [240, 1, 0], 's': [0, 2, 0], 'p': [120, 3, 660], 'q': [120, 4, 0]},
    [[60, ['p', 's']], [240, ['r']], [60, ['s', 'r']], [240, ['r']]]],
   [['q', 's', 'p', 'q'], {'p': 240, 'q': 420, 'r': 240, 's': 300}]),
  ('normal control 7',
   [{'r': [240, 1, 600], 'p': [120, 2, 600], 's': [120, 3, 660], 'q': [120, 4, 600]},
    [[120, []], [240, ['p', 's']], [60, ['s']]]],
   [['p', None, 'q'], {'p': 240, 'q': 180, 'r': 240, 's': 180}]),
  ('normal control 8', [{'r': [60, 1, 240], 'q': [120, 2, 240], 'p': [60, 3, 480]}, [[60, ['r', 'p']]]],
   [['q'], {'p': 120, 'q': 180, 'r': 120}])],
 [('regression: refusal charge 1',
   [{'p': [0, 1, 0], 'q': [120, 2, 600]}, [[60, ['q', 'p']], [120, []], [120, ['q']], [120, []]]],
   [[None, 'p', 'p', 'q'], {'p': 300, 'q': 300}]),
  ('regression variant: refusal charge 2',
   [{'q': [120, 1, 600], 'p': [240, 2, 0]}, [[120, []], [60, ['p']], [240, []], [120, ['p']]]],
   [['q', None, 'p', None], {'p': 660, 'q': 240}]),
  ('partial repair guard 3', [{'q': [120, 1, 480], 'p': [120, 2, 660]}, [[240, ['q', 'p']]]],
   [[None], {'p': 120, 'q': 360}]),
  ('normal control 4',
   [{'q': [0, 1, 240], 'p': [0, 2, 240], 'r': [60, 3, 660]},
    [[240, ['p']], [120, ['r']], [240, []], [120, ['q']]]],
   [['q', 'p', 'p', 'p'], {'p': 480, 'q': 360, 'r': 60}]),
  ('normal control 5',
   [{'q': [120, 1, 0], 'p': [120, 2, 240], 'r': [120, 3, 480]},
    [[60, ['p']], [60, ['r', 'q']], [60, ['q', 'r']], [120, ['r', 'q']]]],
   [['q', 'p', 'p', 'p'], {'p': 360, 'q': 360, 'r': 300}]),
  ('normal control 6', [{'p': [0, 1, 0], 'q': [60, 2, 660], 'r': [0, 3, 0]}, [[60, []]]],
   [['p'], {'p': 60, 'q': 60, 'r': 0}]),
  ('normal control 7', [{'p': [60, 1, 0], 'r': [240, 2, 600], 'q': [0, 3, 480]}, [[240, ['r']]]],
   [['q'], {'p': 60, 'q': 240, 'r': 240}]),
  ('normal control 8', [{'r': [120, 1, 0], 'p': [0, 2, 0], 'q': [120, 3, 480]}, [[60, ['r']], [60, []]]],
   [['p', 'p'], {'p': 120, 'q': 120, 'r': 120}])],
 [('regression: refusal charge 1', [{'q': [0, 1, 240], 'p': [120, 2, 0]}, [[120, ['p', 'q']], [240, []]]],
   [[None, 'q'], {'p': 240, 'q': 360}]),
  ('regression variant: refusal charge 2',
   [{'r': [0, 1, 600], 'p': [120, 2, 660], 'q': [0, 3, 660]},
    [[60, ['p', 'r']], [120, ['p', 'r']], [60, ['r', 'p']]]],
   [['q', None, None], {'p': 180, 'q': 60, 'r': 240}]),
  ('partial repair guard 3',
   [{'p': [0, 1, 660], 'q': [120, 2, 480]}, [[60, []], [60, ['p', 'q']], [240, []], [240, ['q']]]],
   [['p', None, 'q', None], {'p': 60, 'q': 420}]),
  ('normal control 4',
   [{'p': [120, 1, 480], 'q': [120, 2, 660], 'r': [120, 3, 0]}, [[240, ['r', 'p']], [240, []]]],
   [[None, 'p'], {'p': 600, 'q': 120, 'r': 360}]),
  ('normal control 5',
   [{'p': [60, 1, 0], 's': [120, 2, 240], 'r': [240, 3, 600], 'q': [240, 4, 480]},
    [[120, ['r', 's']], [120, []]]],
   [['p', 's'], {'p': 180, 'q': 240, 'r': 240, 's': 240}]),
  ('normal control 6',
   [{'p': [120, 1, 600], 'q': [0, 2, 600]}, [[120, ['p']], [240, ['q']], [60, ['p']], [240, ['q']]]],
   [['q', None, None, None], {'p': 180, 'q': 120}]),
  ('normal control 7',
   [{'q': [60, 1, 240], 'p': [60, 2, 480], 'r': [60, 3, 0]},
    [[120, []], [240, ['r', 'p']], [60, ['q', 'p']]]],
   [['q', 'q', 'r'], {'p': 360, 'q': 420, 'r': 360}]),
  ('normal control 8',
   [{'q': [0, 1, 660], 'p': [120, 2, 480]}, [[60, ['p']], [60, ['p']], [240, []], [60, ['q', 'p']]]],
   [['q', None, 'p', None], {'p': 420, 'q': 60}])],
 [('regression: refusal charge 1',
   [{'r': [240, 1, 0], 'p': [60, 2, 0], 'q': [120, 3, 0], 's': [120, 4, 600]}, [[120, ['p', 'q']]]],
   [['s'], {'p': 180, 'q': 240, 'r': 240, 's': 240}]),
  ('regression variant: refusal charge 2',
   [{'p': [120, 1, 480], 'q': [0, 2, 240]}, [[240, []], [120, ['p']], [60, []], [60, []]]],
   [['q', 'q', 'p', 'p'], {'p': 360, 'q': 360}]),
  ('partial repair guard 3',
   [{'p': [240, 1, 0], 'q': [60, 2, 660]}, [[60, ['q', 'p']], [120, ['p', 'q']], [120, ['p']]]],
   [[None, None, None], {'p': 540, 'q': 120}]),
  ('normal control 4', [{'p': [60, 1, 600], 'q': [240, 2, 660]}, [[240, ['q']], [60, []]]],
   [[None, 'p'], {'p': 120, 'q': 240}]),
  ('normal control 5',
   [{'p': [0, 1, 600], 'r': [120, 2, 0], 'q': [120, 3, 0], 's': [0, 4, 240]},
    [[60, ['r']], [60, ['q', 's']]]],
   [['p', 'p'], {'p': 120, 'q': 120, 'r': 120, 's': 60}]),
  ('normal control 6',
   [{'q': [120, 1, 480], 'p': [120, 2, 600], 'r': [240, 3, 600], 's': [240, 4, 480]},
    [[120, ['r']], [120, ['s']], [60, ['q']], [240, ['q']]]],
   [['q', 'p', 'r', 's'], {'p': 240, 'q': 300, 'r': 300, 's': 480}]),
  ('normal control 7',
   [{'s': [60, 1, 660], 'r': [0, 2, 660], 'p': [0, 3, 0], 'q': [120, 4, 240]},
    [[60, []], [120, ['s', 'q']], [240, ['q', 'p']], [240, ['r']]]],
   [['r', 'p', None, 'p'], {'p': 600, 'q': 360, 'r': 60, 's': 60}]),
  ('normal control 8',
   [{'q': [0, 1, 0], 'p': [120, 2, 240], 'r': [120, 3, 660]}, [[60, []], [120, []], [240, []]]],
   [['q', 'q', 'p'], {'p': 360, 'q': 180, 'r': 120}])]]
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: refusal charge 1[['r', 's'], {'p': 120, 'q': 180, 'r': 60, 's': 300}][['r', 's'], {'p': 120, 'q': 300, 'r': 60, 's': 300}]Failed
regression variant: refusal charge 2[[None, 'q', 'q'], {'p': 120, 'q': 600}][[None, 'q', 'q'], {'p': 120, 'q': 720}]Failed
partial repair guard 3[[None, 'q', None, None], {'p': 240, 'q': 240}][[None, 'q', None, None], {'p': 240, 'q': 300}]Failed
normal control 4[['s', 'q', 'p', 'r'], {'p': 300, 'q': 300, 'r': 120, 's': 120}][['s', 'p', 'q', 'r'], {'p': 300, 'q': 360, 'r': 120, 's': 120}]Failed
normal control 5[['q'], {'p': 60, 'q': 120, 'r': 240}][['q'], {'p': 60, 'q': 120, 'r': 240}]Passed
normal control 6[['q', 's', 'r', 's'], {'p': 300, 'q': 180, 'r': 360, 's': 360}][['q', 's', 'r', 's'], {'p': 360, 'q': 180, 'r': 360, 's': 360}]Failed
normal control 7[[None, None, None], {'p': 30, 'q': 90}][[None, None, None], {'p': 60, 'q': 120}]Failed
normal control 8[['q', 'p', None, None], {'p': 480, 'q': 120}][['q', 'p', None, None], {'p': 660, 'q': 120}]Failed

SHA-256 / 92c49a892444222bb7313dbacb752a0fd1f4a939a901ba9decb1ada14b1f2956

3 / The verified repair

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

N = 1
observations = []
def solve(ledger, offers):
    led = {w: list(v) for w, v in ledger.items()}
    result = []
    for minutes, refusers in offers:
        cands = sorted(led, key=lambda w: (led[w][0], led[w][1]))
        taker = None
        for w in cands:
            if led[w][2] + minutes > 720:
                continue
            if w in refusers:
                led[w][0] += minutes
                continue
            taker = w
            break
        if taker is not None:
            led[taker][0] += minutes
            led[taker][2] += minutes
        result.append(taker)
    return [result, {w: led[w][0] for w in sorted(led)}]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: refusal charge 1',
   [{'p': [120, 1, 240], 'r': [0, 2, 480], 'q': [60, 3, 240], 's': [60, 4, 480]},
    [[60, []], [240, ['q', 'r']]]],
   [['r', 's'], {'p': 120, 'q': 300, 'r': 60, 's': 300}]),
  ('regression variant: refusal charge 2',
   [{'q': [120, 1, 0], 'p': [120, 2, 660]}, [[240, ['q']], [240, []], [120, []]]],
   [[None, 'q', 'q'], {'p': 120, 'q': 720}]),
  ('partial repair guard 3',
   [{'q': [120, 1, 600], 'p': [240, 2, 660]}, [[120, ['q']], [60, []], [120, []], [240, []]]],
   [[None, 'q', None, None], {'p': 240, 'q': 300}]),
  ('normal control 4',
   [{'q': [0, 1, 0], 'r': [60, 2, 600], 's': [0, 3, 240], 'p': [60, 4, 480]},
    [[120, ['p', 'q']], [240, ['r']], [240, []], [60, ['p']]]],
   [['s', 'p', 'q', 'r'], {'p': 300, 'q': 360, 'r': 120, 's': 120}]),
  ('normal control 5', [{'p': [60, 1, 480], 'r': [240, 2, 660], 'q': [0, 3, 600]}, [[120, []]]],
   [['q'], {'p': 60, 'q': 120, 'r': 240}]),
  ('normal control 6',
   [{'q': [60, 1, 600], 'p': [240, 2, 240], 's': [120, 3, 240], 'r': [120, 4, 0]},
    [[120, ['p']], [120, ['r']], [240, ['q', 'p']], [120, ['p']]]],
   [['q', 's', 'r', 's'], {'p': 360, 'q': 180, 'r': 360, 's': 360}]),
  ('normal control 7', [{'p': [0, 1, 660], 'q': [60, 2, 660]}, [[120, ['p']], [120, []], [60, ['q', 'p']]]],
   [[None, None, None], {'p': 60, 'q': 120}]),
  ('normal control 8',
   [{'q': [60, 1, 660], 'p': [60, 2, 0]}, [[60, []], [240, []], [120, ['p']], [240, ['q', 'p']]]],
   [['q', 'p', None, None], {'p': 660, 'q': 120}])],
 [('regression: refusal charge 1',
   [{'p': [60, 1, 480], 'q': [120, 2, 600]}, [[60, ['p', 'q']], [60, ['q', 'p']], [60, ['p', 'q']]]],
   [[None, None, None], {'p': 240, 'q': 300}]),
  ('regression variant: refusal charge 2',
   [{'p': [240, 1, 660], 'r': [60, 2, 240], 's': [120, 3, 0], 'q': [0, 4, 600]},
    [[240, []], [60, ['q', 'p']]]],
   [['r', 's'], {'p': 240, 'q': 60, 'r': 300, 's': 180}]),
  ('partial repair guard 3',
   [{'q': [120, 1, 0], 'r': [240, 2, 240], 'p': [0, 3, 0]},
    [[120, []], [60, ['q', 'r']], [60, ['p']], [60, ['q']]]],
   [['p', 'p', 'q', 'p'], {'p': 240, 'q': 240, 'r': 240}]),
  ('normal control 4', [{'p': [60, 1, 240], 'q': [120, 2, 0]}, [[60, ['q']]]], [['p'], {'p': 120, 'q': 120}]),
  ('normal control 5', [{'r': [120, 1, 240], 'p': [60, 2, 600], 'q': [240, 3, 660]}, [[60, []], [60, []]]],
   [['p', 'r'], {'p': 120, 'q': 240, 'r': 180}]),
  ('normal control 6',
   [{'r': [240, 1, 0], 's': [0, 2, 0], 'p': [120, 3, 660], 'q': [120, 4, 0]},
    [[60, ['p', 's']], [240, ['r']], [60, ['s', 'r']], [240, ['r']]]],
   [['q', 's', 'p', 'q'], {'p': 240, 'q': 420, 'r': 240, 's': 300}]),
  ('normal control 7',
   [{'r': [240, 1, 600], 'p': [120, 2, 600], 's': [120, 3, 660], 'q': [120, 4, 600]},
    [[120, []], [240, ['p', 's']], [60, ['s']]]],
   [['p', None, 'q'], {'p': 240, 'q': 180, 'r': 240, 's': 180}]),
  ('normal control 8', [{'r': [60, 1, 240], 'q': [120, 2, 240], 'p': [60, 3, 480]}, [[60, ['r', 'p']]]],
   [['q'], {'p': 120, 'q': 180, 'r': 120}])],
 [('regression: refusal charge 1',
   [{'p': [0, 1, 0], 'q': [120, 2, 600]}, [[60, ['q', 'p']], [120, []], [120, ['q']], [120, []]]],
   [[None, 'p', 'p', 'q'], {'p': 300, 'q': 300}]),
  ('regression variant: refusal charge 2',
   [{'q': [120, 1, 600], 'p': [240, 2, 0]}, [[120, []], [60, ['p']], [240, []], [120, ['p']]]],
   [['q', None, 'p', None], {'p': 660, 'q': 240}]),
  ('partial repair guard 3', [{'q': [120, 1, 480], 'p': [120, 2, 660]}, [[240, ['q', 'p']]]],
   [[None], {'p': 120, 'q': 360}]),
  ('normal control 4',
   [{'q': [0, 1, 240], 'p': [0, 2, 240], 'r': [60, 3, 660]},
    [[240, ['p']], [120, ['r']], [240, []], [120, ['q']]]],
   [['q', 'p', 'p', 'p'], {'p': 480, 'q': 360, 'r': 60}]),
  ('normal control 5',
   [{'q': [120, 1, 0], 'p': [120, 2, 240], 'r': [120, 3, 480]},
    [[60, ['p']], [60, ['r', 'q']], [60, ['q', 'r']], [120, ['r', 'q']]]],
   [['q', 'p', 'p', 'p'], {'p': 360, 'q': 360, 'r': 300}]),
  ('normal control 6', [{'p': [0, 1, 0], 'q': [60, 2, 660], 'r': [0, 3, 0]}, [[60, []]]],
   [['p'], {'p': 60, 'q': 60, 'r': 0}]),
  ('normal control 7', [{'p': [60, 1, 0], 'r': [240, 2, 600], 'q': [0, 3, 480]}, [[240, ['r']]]],
   [['q'], {'p': 60, 'q': 240, 'r': 240}]),
  ('normal control 8', [{'r': [120, 1, 0], 'p': [0, 2, 0], 'q': [120, 3, 480]}, [[60, ['r']], [60, []]]],
   [['p', 'p'], {'p': 120, 'q': 120, 'r': 120}])],
 [('regression: refusal charge 1', [{'q': [0, 1, 240], 'p': [120, 2, 0]}, [[120, ['p', 'q']], [240, []]]],
   [[None, 'q'], {'p': 240, 'q': 360}]),
  ('regression variant: refusal charge 2',
   [{'r': [0, 1, 600], 'p': [120, 2, 660], 'q': [0, 3, 660]},
    [[60, ['p', 'r']], [120, ['p', 'r']], [60, ['r', 'p']]]],
   [['q', None, None], {'p': 180, 'q': 60, 'r': 240}]),
  ('partial repair guard 3',
   [{'p': [0, 1, 660], 'q': [120, 2, 480]}, [[60, []], [60, ['p', 'q']], [240, []], [240, ['q']]]],
   [['p', None, 'q', None], {'p': 60, 'q': 420}]),
  ('normal control 4',
   [{'p': [120, 1, 480], 'q': [120, 2, 660], 'r': [120, 3, 0]}, [[240, ['r', 'p']], [240, []]]],
   [[None, 'p'], {'p': 600, 'q': 120, 'r': 360}]),
  ('normal control 5',
   [{'p': [60, 1, 0], 's': [120, 2, 240], 'r': [240, 3, 600], 'q': [240, 4, 480]},
    [[120, ['r', 's']], [120, []]]],
   [['p', 's'], {'p': 180, 'q': 240, 'r': 240, 's': 240}]),
  ('normal control 6',
   [{'p': [120, 1, 600], 'q': [0, 2, 600]}, [[120, ['p']], [240, ['q']], [60, ['p']], [240, ['q']]]],
   [['q', None, None, None], {'p': 180, 'q': 120}]),
  ('normal control 7',
   [{'q': [60, 1, 240], 'p': [60, 2, 480], 'r': [60, 3, 0]},
    [[120, []], [240, ['r', 'p']], [60, ['q', 'p']]]],
   [['q', 'q', 'r'], {'p': 360, 'q': 420, 'r': 360}]),
  ('normal control 8',
   [{'q': [0, 1, 660], 'p': [120, 2, 480]}, [[60, ['p']], [60, ['p']], [240, []], [60, ['q', 'p']]]],
   [['q', None, 'p', None], {'p': 420, 'q': 60}])],
 [('regression: refusal charge 1',
   [{'r': [240, 1, 0], 'p': [60, 2, 0], 'q': [120, 3, 0], 's': [120, 4, 600]}, [[120, ['p', 'q']]]],
   [['s'], {'p': 180, 'q': 240, 'r': 240, 's': 240}]),
  ('regression variant: refusal charge 2',
   [{'p': [120, 1, 480], 'q': [0, 2, 240]}, [[240, []], [120, ['p']], [60, []], [60, []]]],
   [['q', 'q', 'p', 'p'], {'p': 360, 'q': 360}]),
  ('partial repair guard 3',
   [{'p': [240, 1, 0], 'q': [60, 2, 660]}, [[60, ['q', 'p']], [120, ['p', 'q']], [120, ['p']]]],
   [[None, None, None], {'p': 540, 'q': 120}]),
  ('normal control 4', [{'p': [60, 1, 600], 'q': [240, 2, 660]}, [[240, ['q']], [60, []]]],
   [[None, 'p'], {'p': 120, 'q': 240}]),
  ('normal control 5',
   [{'p': [0, 1, 600], 'r': [120, 2, 0], 'q': [120, 3, 0], 's': [0, 4, 240]},
    [[60, ['r']], [60, ['q', 's']]]],
   [['p', 'p'], {'p': 120, 'q': 120, 'r': 120, 's': 60}]),
  ('normal control 6',
   [{'q': [120, 1, 480], 'p': [120, 2, 600], 'r': [240, 3, 600], 's': [240, 4, 480]},
    [[120, ['r']], [120, ['s']], [60, ['q']], [240, ['q']]]],
   [['q', 'p', 'r', 's'], {'p': 240, 'q': 300, 'r': 300, 's': 480}]),
  ('normal control 7',
   [{'s': [60, 1, 660], 'r': [0, 2, 660], 'p': [0, 3, 0], 'q': [120, 4, 240]},
    [[60, []], [120, ['s', 'q']], [240, ['q', 'p']], [240, ['r']]]],
   [['r', 'p', None, 'p'], {'p': 600, 'q': 360, 'r': 60, 's': 60}]),
  ('normal control 8',
   [{'q': [0, 1, 0], 'p': [120, 2, 240], 'r': [120, 3, 660]}, [[60, []], [120, []], [240, []]]],
   [['q', 'q', 'p'], {'p': 360, 'q': 180, 'r': 120}])]]
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: refusal charge 1[['r', 's'], {'p': 120, 'q': 300, 'r': 60, 's': 300}][['r', 's'], {'p': 120, 'q': 300, 'r': 60, 's': 300}]Passed
regression variant: refusal charge 2[[None, 'q', 'q'], {'p': 120, 'q': 720}][[None, 'q', 'q'], {'p': 120, 'q': 720}]Passed
partial repair guard 3[[None, 'q', None, None], {'p': 240, 'q': 300}][[None, 'q', None, None], {'p': 240, 'q': 300}]Passed
normal control 4[['s', 'p', 'q', 'r'], {'p': 300, 'q': 360, 'r': 120, 's': 120}][['s', 'p', 'q', 'r'], {'p': 300, 'q': 360, 'r': 120, 's': 120}]Passed
normal control 5[['q'], {'p': 60, 'q': 120, 'r': 240}][['q'], {'p': 60, 'q': 120, 'r': 240}]Passed
normal control 6[['q', 's', 'r', 's'], {'p': 360, 'q': 180, 'r': 360, 's': 360}][['q', 's', 'r', 's'], {'p': 360, 'q': 180, 'r': 360, 's': 360}]Passed
normal control 7[[None, None, None], {'p': 60, 'q': 120}][[None, None, None], {'p': 60, 'q': 120}]Passed
normal control 8[['q', 'p', None, None], {'p': 660, 'q': 120}][['q', 'p', None, None], {'p': 660, 'q': 120}]Passed

SHA-256 / 7b842ffd3a19deb5067ca7fd1c6f8b96363688016c882f34119823a528d07b33

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

Case digest / e4f4e3160a8a668149ead4b70ff0b8ce1bfebda09b539d3754ad63971f6f7bbe