{"abstract":"A profile keeps limiting current for one tick after it expired.","category":"EV charging session scheduling","checks":7,"contract":"Each profile has purpose max/default/tx, stack level, validity [valid_from, valid_to) (valid_to None = open), kind absolute (origin valid_from) or relative (origin session_start; skipped when no session) and periods [[offset, amps]] in any order. A profile yields the amps of the last period with offset <= t-origin, or nothing before its first period. Per purpose the highest stack wins (ties: earlier profile). tx replaces default. Effective limit is the minimum of max, tx-or-default and hw_max, ties resolved in that order. Return [amps, source].","evaluation_group":"w2-ev_charging_session_scheduling-charging-profile-stack","failed_approach":"Subtracting one from valid_to makes the profile expire a tick early instead.","family":"w2-ev_charging_session_scheduling-charging-profile-stack-validity-end-exclusivity","id":"FA-92941","implementations":{"attempt":{"sha256":"0966d882b66c6b20237b05c76436d0a85ef0ee58b1ef3527f7386d439b82ca2e","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(profiles, t, session_start, hw_max):\n    best = {}\n    for p in profiles:\n        if not (p['valid_from'] <= t and (p['valid_to'] is None or t < p['valid_to'] - 1)):\n            continue\n        if p['kind'] == 'relative':\n            if session_start is None:\n                continue\n            origin = session_start\n        else:\n            origin = p['valid_from']\n        el = t - origin\n        lim = None\n        for off, val in sorted(p['periods']):\n            if off <= el:\n                lim = val\n        if lim is None:\n            continue\n        cur = best.get(p['purpose'])\n        if cur is None or p['stack'] > cur[0]:\n            best[p['purpose']] = [p['stack'], lim]\n    cands = []\n    if 'max' in best:\n        cands.append(['max', best['max'][1]])\n    if 'tx' in best:\n        cands.append(['tx', best['tx'][1]])\n    elif 'default' in best:\n        cands.append(['default', best['default'][1]])\n    cands.append(['hw', hw_max])\n    win = cands[0]\n    for c in cands[1:]:\n        if c[1] < win[1]:\n            win = c\n    return [win[1], win[0]]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['boundary: profile expires at t',\n   [[{'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': 30,\n      'kind': 'absolute',\n      'periods': [[0, 10]]}],\n    30, None, 32],\n   [32, 'hw']],\n  ['boundary: relative profile without session',\n   [[{'purpose': 'default',\n      'stack': 1,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 8]]}],\n    20, None, 32],\n   [32, 'hw']],\n  ['boundary: tx overrides lower default',\n   [[{'purpose': 'default',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 6]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 20]]}],\n    5, 0, 32],\n   [20, 'tx']],\n  ['regression: validity end exclusivity',\n   [[{'purpose': 'default',\n      'stack': 1,\n      'valid_from': 39,\n      'valid_to': 45,\n      'kind': 'absolute',\n      'periods': [[0, 6], [5, 32], [0, 10]]}],\n    45, None, 32],\n   [32, 'hw']],\n  ['regression: validity end exclusivity (partial repair)',\n   [[{'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 17,\n      'valid_to': 91,\n      'kind': 'absolute',\n      'periods': [[30, 10], [5, 10]]},\n     {'purpose': 'default',\n      'stack': 0,\n      'valid_from': 28,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 20], [30, 6], [10, 16]]}],\n    90, 29, 16],\n   [10, 'tx']],\n  ['control 1',\n   [[{'purpose': 'max',\n      'stack': 1,\n      'valid_from': 44,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 10], [0, 10], [5, 10]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 7,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 10], [30, 20]]}],\n    3, None, 24],\n   [24, 'hw']],\n  ['control 2',\n   [[{'purpose': 'max',\n      'stack': 2,\n      'valid_from': 11,\n      'valid_to': 21,\n      'kind': 'relative',\n      'periods': [[30, 32], [10, 20], [45, 6]]},\n     {'purpose': 'max',\n      'stack': 1,\n      'valid_from': 14,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[10, 32]]},\n     {'purpose': 'max',\n      'stack': 0,\n      'valid_from': 19,\n      'valid_to': 56,\n      'kind': 'absolute',\n      'periods': [[0, 6], [45, 10], [20, 16]]},\n     {'purpose': 'max',\n      'stack': 1,\n      'valid_from': 53,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 10], [0, 32], [0, 20]]}],\n    97, None, 16],\n   [16, 'hw']]],\n [['boundary: profile expires at t',\n   [[{'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': 30,\n      'kind': 'absolute',\n      'periods': [[0, 10]]}],\n    30, None, 32],\n   [32, 'hw']],\n  ['boundary: relative profile without session',\n   [[{'purpose': 'default',\n      'stack': 1,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 8]]}],\n    20, None, 32],\n   [32, 'hw']],\n  ['boundary: tx overrides lower default',\n   [[{'purpose': 'default',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 6]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 20]]}],\n    5, 0, 32],\n   [20, 'tx']],\n  ['regression: validity end exclusivity',\n   [[{'purpose': 'default',\n      'stack': 1,\n      'valid_from': 39,\n      'valid_to': 45,\n      'kind': 'absolute',\n      'periods': [[0, 6], [5, 32], [0, 10]]}],\n    45, None, 32],\n   [32, 'hw']],\n  ['regression: validity end exclusivity (partial repair)',\n   [[{'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 17,\n      'valid_to': 91,\n      'kind': 'absolute',\n      'periods': [[30, 10], [5, 10]]},\n     {'purpose': 'default',\n      'stack': 0,\n      'valid_from': 28,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 20], [30, 6], [10, 16]]}],\n    90, 29, 16],\n   [10, 'tx']],\n  ['control 1',\n   [[{'purpose': 'default',\n      'stack': 2,\n      'valid_from': 20,\n      'valid_to': 56,\n      'kind': 'relative',\n      'periods': [[20, 10], [10, 20]]}],\n    53, 38, 24],\n   [20, 'default']],\n  ['control 2',\n   [[{'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 43,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[10, 32]]},\n     {'purpose': 'default',\n      'stack': 1,\n      'valid_from': 44,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[45, 32], [45, 6], [20, 20]]}],\n    88, 57, 24],\n   [24, 'hw']]],\n [['boundary: profile expires at t',\n   [[{'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': 30,\n      'kind': 'absolute',\n      'periods': [[0, 10]]}],\n    30, None, 32],\n   [32, 'hw']],\n  ['boundary: relative profile without session',\n   [[{'purpose': 'default',\n      'stack': 1,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 8]]}],\n    20, None, 32],\n   [32, 'hw']],\n  ['boundary: tx overrides lower default',\n   [[{'purpose': 'default',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 6]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 20]]}],\n    5, 0, 32],\n   [20, 'tx']],\n  ['regression: validity end exclusivity',\n   [[{'purpose': 'default',\n      'stack': 2,\n      'valid_from': 6,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 32], [10, 16]]},\n     {'purpose': 'max',\n      'stack': 2,\n      'valid_from': 18,\n      'valid_to': 73,\n      'kind': 'relative',\n      'periods': [[30, 32], [0, 6]]},\n     {'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 12,\n      'valid_to': 36,\n      'kind': 'relative',\n      'periods': [[45, 16], [45, 20], [10, 6]]},\n     {'purpose': 'tx',\n      'stack': 2,\n      'valid_from': 2,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 32], [0, 6]]},\n     {'purpose': 'tx',\n      'stack': 2,\n      'valid_from': 13,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 20]]}],\n    73, 46, 16],\n   [16, 'hw']],\n  ['regression: validity end exclusivity (partial repair)',\n   [[{'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 17,\n      'valid_to': 91,\n      'kind': 'absolute',\n      'periods': [[30, 10], [5, 10]]},\n     {'purpose': 'default',\n      'stack': 0,\n      'valid_from': 28,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 20], [30, 6], [10, 16]]}],\n    90, 29, 16],\n   [10, 'tx']],\n  ['control 1',\n   [[{'purpose': 'tx',\n      'stack': 2,\n      'valid_from': 29,\n      'valid_to': 52,\n      'kind': 'absolute',\n      'periods': [[30, 16], [45, 32], [0, 16]]},\n     {'purpose': 'max',\n      'stack': 0,\n      'valid_from': 13,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 6], [0, 10], [45, 16]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 58,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[10, 16]]}],\n    74, None, 24],\n   [16, 'max']],\n  ['control 2',\n   [[{'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 8,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[30, 6], [10, 6], [20, 32]]},\n     {'purpose': 'max',\n      'stack': 0,\n      'valid_from': 59,\n      'valid_to': 85,\n      'kind': 'absolute',\n      'periods': [[5, 6], [5, 20], [30, 20]]},\n     {'purpose': 'tx',\n      'stack': 2,\n      'valid_from': 29,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[20, 10], [30, 10]]}],\n    15, 48, 16],\n   [16, 'hw']]],\n [['boundary: profile expires at t',\n   [[{'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': 30,\n      'kind': 'absolute',\n      'periods': [[0, 10]]}],\n    30, None, 32],\n   [32, 'hw']],\n  ['boundary: relative profile without session',\n   [[{'purpose': 'default',\n      'stack': 1,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 8]]}],\n    20, None, 32],\n   [32, 'hw']],\n  ['boundary: tx overrides lower default',\n   [[{'purpose': 'default',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 6]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 20]]}],\n    5, 0, 32],\n   [20, 'tx']],\n  ['regression: validity end exclusivity',\n   [[{'purpose': 'default',\n      'stack': 2,\n      'valid_from': 6,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 32], [10, 16]]},\n     {'purpose': 'max',\n      'stack': 2,\n      'valid_from': 18,\n      'valid_to': 73,\n      'kind': 'relative',\n      'periods': [[30, 32], [0, 6]]},\n     {'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 12,\n      'valid_to': 36,\n      'kind': 'relative',\n      'periods': [[45, 16], [45, 20], [10, 6]]},\n     {'purpose': 'tx',\n      'stack': 2,\n      'valid_from': 2,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 32], [0, 6]]},\n     {'purpose': 'tx',\n      'stack': 2,\n      'valid_from': 13,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 20]]}],\n    73, 46, 16],\n   [16, 'hw']],\n  ['regression: validity end exclusivity (partial repair)',\n   [[{'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 17,\n      'valid_to': 91,\n      'kind': 'absolute',\n      'periods': [[30, 10], [5, 10]]},\n     {'purpose': 'default',\n      'stack': 0,\n      'valid_from': 28,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 20], [30, 6], [10, 16]]}],\n    90, 29, 16],\n   [10, 'tx']],\n  ['control 1',\n   [[{'purpose': 'max',\n      'stack': 2,\n      'valid_from': 22,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[30, 6]]},\n     {'purpose': 'default',\n      'stack': 0,\n      'valid_from': 34,\n      'valid_to': 106,\n      'kind': 'absolute',\n      'periods': [[30, 16], [30, 10]]},\n     {'purpose': 'tx',\n      'stack': 2,\n      'valid_from': 11,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[10, 6], [30, 20]]},\n     {'purpose': 'default',\n      'stack': 2,\n      'valid_from': 26,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[5, 6], [5, 6], [45, 10]]},\n     {'purpose': 'default',\n      'stack': 1,\n      'valid_from': 12,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[20, 32], [20, 6]]}],\n    77, None, 24],\n   [20, 'tx']],\n  ['control 2',\n   [[{'purpose': 'default',\n      'stack': 2,\n      'valid_from': 55,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[5, 10], [30, 10]]}],\n    25, 14, 16],\n   [16, 'hw']]],\n [['boundary: profile expires at t',\n   [[{'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': 30,\n      'kind': 'absolute',\n      'periods': [[0, 10]]}],\n    30, None, 32],\n   [32, 'hw']],\n  ['boundary: relative profile without session',\n   [[{'purpose': 'default',\n      'stack': 1,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 8]]}],\n    20, None, 32],\n   [32, 'hw']],\n  ['boundary: tx overrides lower default',\n   [[{'purpose': 'default',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 6]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 20]]}],\n    5, 0, 32],\n   [20, 'tx']],\n  ['regression: validity end exclusivity',\n   [[{'purpose': 'default',\n      'stack': 2,\n      'valid_from': 6,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 32], [10, 16]]},\n     {'purpose': 'max',\n      'stack': 2,\n      'valid_from': 18,\n      'valid_to': 73,\n      'kind': 'relative',\n      'periods': [[30, 32], [0, 6]]},\n     {'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 12,\n      'valid_to': 36,\n      'kind': 'relative',\n      'periods': [[45, 16], [45, 20], [10, 6]]},\n     {'purpose': 'tx',\n      'stack': 2,\n      'valid_from': 2,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 32], [0, 6]]},\n     {'purpose': 'tx',\n      'stack': 2,\n      'valid_from': 13,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 20]]}],\n    73, 46, 16],\n   [16, 'hw']],\n  ['regression: validity end exclusivity (partial repair)',\n   [[{'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 17,\n      'valid_to': 91,\n      'kind': 'absolute',\n      'periods': [[30, 10], [5, 10]]},\n     {'purpose': 'default',\n      'stack': 0,\n      'valid_from': 28,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 20], [30, 6], [10, 16]]}],\n    90, 29, 16],\n   [10, 'tx']],\n  ['control 1',\n   [[{'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 8,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[30, 6]]}],\n    71, 15, 16],\n   [6, 'tx']],\n  ['control 2',\n   [[{'purpose': 'tx',\n      'stack': 2,\n      'valid_from': 39,\n      'valid_to': 108,\n      'kind': 'absolute',\n      'periods': [[20, 16], [30, 32], [20, 20]]},\n     {'purpose': 'max',\n      'stack': 0,\n      'valid_from': 45,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[5, 20]]},\n     {'purpose': 'default',\n      'stack': 1,\n      'valid_from': 21,\n      'valid_to': 46,\n      'kind': 'absolute',\n      'periods': [[5, 20]]}],\n    34, None, 24],\n   [20, 'default']]]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"broken":{"sha256":"30fc8f3ca72aa9f14ec630ca9447184b3bb35611e7e4a22a3137590ac4739338","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(profiles, t, session_start, hw_max):\n    best = {}\n    for p in profiles:\n        if not (p['valid_from'] <= t and (p['valid_to'] is None or t <= p['valid_to'])):\n            continue\n        if p['kind'] == 'relative':\n            if session_start is None:\n                continue\n            origin = session_start\n        else:\n            origin = p['valid_from']\n        el = t - origin\n        lim = None\n        for off, val in sorted(p['periods']):\n            if off <= el:\n                lim = val\n        if lim is None:\n            continue\n        cur = best.get(p['purpose'])\n        if cur is None or p['stack'] > cur[0]:\n            best[p['purpose']] = [p['stack'], lim]\n    cands = []\n    if 'max' in best:\n        cands.append(['max', best['max'][1]])\n    if 'tx' in best:\n        cands.append(['tx', best['tx'][1]])\n    elif 'default' in best:\n        cands.append(['default', best['default'][1]])\n    cands.append(['hw', hw_max])\n    win = cands[0]\n    for c in cands[1:]:\n        if c[1] < win[1]:\n            win = c\n    return [win[1], win[0]]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['boundary: profile expires at t',\n   [[{'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': 30,\n      'kind': 'absolute',\n      'periods': [[0, 10]]}],\n    30, None, 32],\n   [32, 'hw']],\n  ['boundary: relative profile without session',\n   [[{'purpose': 'default',\n      'stack': 1,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 8]]}],\n    20, None, 32],\n   [32, 'hw']],\n  ['boundary: tx overrides lower default',\n   [[{'purpose': 'default',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 6]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 20]]}],\n    5, 0, 32],\n   [20, 'tx']],\n  ['regression: validity end exclusivity',\n   [[{'purpose': 'default',\n      'stack': 1,\n      'valid_from': 39,\n      'valid_to': 45,\n      'kind': 'absolute',\n      'periods': [[0, 6], [5, 32], [0, 10]]}],\n    45, None, 32],\n   [32, 'hw']],\n  ['regression: validity end exclusivity (partial repair)',\n   [[{'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 17,\n      'valid_to': 91,\n      'kind': 'absolute',\n      'periods': [[30, 10], [5, 10]]},\n     {'purpose': 'default',\n      'stack': 0,\n      'valid_from': 28,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 20], [30, 6], [10, 16]]}],\n    90, 29, 16],\n   [10, 'tx']],\n  ['control 1',\n   [[{'purpose': 'max',\n      'stack': 1,\n      'valid_from': 44,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 10], [0, 10], [5, 10]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 7,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 10], [30, 20]]}],\n    3, None, 24],\n   [24, 'hw']],\n  ['control 2',\n   [[{'purpose': 'max',\n      'stack': 2,\n      'valid_from': 11,\n      'valid_to': 21,\n      'kind': 'relative',\n      'periods': [[30, 32], [10, 20], [45, 6]]},\n     {'purpose': 'max',\n      'stack': 1,\n      'valid_from': 14,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[10, 32]]},\n     {'purpose': 'max',\n      'stack': 0,\n      'valid_from': 19,\n      'valid_to': 56,\n      'kind': 'absolute',\n      'periods': [[0, 6], [45, 10], [20, 16]]},\n     {'purpose': 'max',\n      'stack': 1,\n      'valid_from': 53,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 10], [0, 32], [0, 20]]}],\n    97, None, 16],\n   [16, 'hw']]],\n [['boundary: profile expires at t',\n   [[{'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': 30,\n      'kind': 'absolute',\n      'periods': [[0, 10]]}],\n    30, None, 32],\n   [32, 'hw']],\n  ['boundary: relative profile without session',\n   [[{'purpose': 'default',\n      'stack': 1,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 8]]}],\n    20, None, 32],\n   [32, 'hw']],\n  ['boundary: tx overrides lower default',\n   [[{'purpose': 'default',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 6]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 20]]}],\n    5, 0, 32],\n   [20, 'tx']],\n  ['regression: validity end exclusivity',\n   [[{'purpose': 'default',\n      'stack': 1,\n      'valid_from': 39,\n      'valid_to': 45,\n      'kind': 'absolute',\n      'periods': [[0, 6], [5, 32], [0, 10]]}],\n    45, None, 32],\n   [32, 'hw']],\n  ['regression: validity end exclusivity (partial repair)',\n   [[{'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 17,\n      'valid_to': 91,\n      'kind': 'absolute',\n      'periods': [[30, 10], [5, 10]]},\n     {'purpose': 'default',\n      'stack': 0,\n      'valid_from': 28,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 20], [30, 6], [10, 16]]}],\n    90, 29, 16],\n   [10, 'tx']],\n  ['control 1',\n   [[{'purpose': 'default',\n      'stack': 2,\n      'valid_from': 20,\n      'valid_to': 56,\n      'kind': 'relative',\n      'periods': [[20, 10], [10, 20]]}],\n    53, 38, 24],\n   [20, 'default']],\n  ['control 2',\n   [[{'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 43,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[10, 32]]},\n     {'purpose': 'default',\n      'stack': 1,\n      'valid_from': 44,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[45, 32], [45, 6], [20, 20]]}],\n    88, 57, 24],\n   [24, 'hw']]],\n [['boundary: profile expires at t',\n   [[{'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': 30,\n      'kind': 'absolute',\n      'periods': [[0, 10]]}],\n    30, None, 32],\n   [32, 'hw']],\n  ['boundary: relative profile without session',\n   [[{'purpose': 'default',\n      'stack': 1,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 8]]}],\n    20, None, 32],\n   [32, 'hw']],\n  ['boundary: tx overrides lower default',\n   [[{'purpose': 'default',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 6]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 20]]}],\n    5, 0, 32],\n   [20, 'tx']],\n  ['regression: validity end exclusivity',\n   [[{'purpose': 'default',\n      'stack': 2,\n      'valid_from': 6,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 32], [10, 16]]},\n     {'purpose': 'max',\n      'stack': 2,\n      'valid_from': 18,\n      'valid_to': 73,\n      'kind': 'relative',\n      'periods': [[30, 32], [0, 6]]},\n     {'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 12,\n      'valid_to': 36,\n      'kind': 'relative',\n      'periods': [[45, 16], [45, 20], [10, 6]]},\n     {'purpose': 'tx',\n      'stack': 2,\n      'valid_from': 2,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 32], [0, 6]]},\n     {'purpose': 'tx',\n      'stack': 2,\n      'valid_from': 13,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 20]]}],\n    73, 46, 16],\n   [16, 'hw']],\n  ['regression: validity end exclusivity (partial repair)',\n   [[{'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 17,\n      'valid_to': 91,\n      'kind': 'absolute',\n      'periods': [[30, 10], [5, 10]]},\n     {'purpose': 'default',\n      'stack': 0,\n      'valid_from': 28,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 20], [30, 6], [10, 16]]}],\n    90, 29, 16],\n   [10, 'tx']],\n  ['control 1',\n   [[{'purpose': 'tx',\n      'stack': 2,\n      'valid_from': 29,\n      'valid_to': 52,\n      'kind': 'absolute',\n      'periods': [[30, 16], [45, 32], [0, 16]]},\n     {'purpose': 'max',\n      'stack': 0,\n      'valid_from': 13,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 6], [0, 10], [45, 16]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 58,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[10, 16]]}],\n    74, None, 24],\n   [16, 'max']],\n  ['control 2',\n   [[{'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 8,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[30, 6], [10, 6], [20, 32]]},\n     {'purpose': 'max',\n      'stack': 0,\n      'valid_from': 59,\n      'valid_to': 85,\n      'kind': 'absolute',\n      'periods': [[5, 6], [5, 20], [30, 20]]},\n     {'purpose': 'tx',\n      'stack': 2,\n      'valid_from': 29,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[20, 10], [30, 10]]}],\n    15, 48, 16],\n   [16, 'hw']]],\n [['boundary: profile expires at t',\n   [[{'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': 30,\n      'kind': 'absolute',\n      'periods': [[0, 10]]}],\n    30, None, 32],\n   [32, 'hw']],\n  ['boundary: relative profile without session',\n   [[{'purpose': 'default',\n      'stack': 1,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 8]]}],\n    20, None, 32],\n   [32, 'hw']],\n  ['boundary: tx overrides lower default',\n   [[{'purpose': 'default',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 6]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 20]]}],\n    5, 0, 32],\n   [20, 'tx']],\n  ['regression: validity end exclusivity',\n   [[{'purpose': 'default',\n      'stack': 2,\n      'valid_from': 6,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 32], [10, 16]]},\n     {'purpose': 'max',\n      'stack': 2,\n      'valid_from': 18,\n      'valid_to': 73,\n      'kind': 'relative',\n      'periods': [[30, 32], [0, 6]]},\n     {'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 12,\n      'valid_to': 36,\n      'kind': 'relative',\n      'periods': [[45, 16], [45, 20], [10, 6]]},\n     {'purpose': 'tx',\n      'stack': 2,\n      'valid_from': 2,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 32], [0, 6]]},\n     {'purpose': 'tx',\n      'stack': 2,\n      'valid_from': 13,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 20]]}],\n    73, 46, 16],\n   [16, 'hw']],\n  ['regression: validity end exclusivity (partial repair)',\n   [[{'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 17,\n      'valid_to': 91,\n      'kind': 'absolute',\n      'periods': [[30, 10], [5, 10]]},\n     {'purpose': 'default',\n      'stack': 0,\n      'valid_from': 28,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 20], [30, 6], [10, 16]]}],\n    90, 29, 16],\n   [10, 'tx']],\n  ['control 1',\n   [[{'purpose': 'max',\n      'stack': 2,\n      'valid_from': 22,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[30, 6]]},\n     {'purpose': 'default',\n      'stack': 0,\n      'valid_from': 34,\n      'valid_to': 106,\n      'kind': 'absolute',\n      'periods': [[30, 16], [30, 10]]},\n     {'purpose': 'tx',\n      'stack': 2,\n      'valid_from': 11,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[10, 6], [30, 20]]},\n     {'purpose': 'default',\n      'stack': 2,\n      'valid_from': 26,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[5, 6], [5, 6], [45, 10]]},\n     {'purpose': 'default',\n      'stack': 1,\n      'valid_from': 12,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[20, 32], [20, 6]]}],\n    77, None, 24],\n   [20, 'tx']],\n  ['control 2',\n   [[{'purpose': 'default',\n      'stack': 2,\n      'valid_from': 55,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[5, 10], [30, 10]]}],\n    25, 14, 16],\n   [16, 'hw']]],\n [['boundary: profile expires at t',\n   [[{'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': 30,\n      'kind': 'absolute',\n      'periods': [[0, 10]]}],\n    30, None, 32],\n   [32, 'hw']],\n  ['boundary: relative profile without session',\n   [[{'purpose': 'default',\n      'stack': 1,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 8]]}],\n    20, None, 32],\n   [32, 'hw']],\n  ['boundary: tx overrides lower default',\n   [[{'purpose': 'default',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 6]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 20]]}],\n    5, 0, 32],\n   [20, 'tx']],\n  ['regression: validity end exclusivity',\n   [[{'purpose': 'default',\n      'stack': 2,\n      'valid_from': 6,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 32], [10, 16]]},\n     {'purpose': 'max',\n      'stack': 2,\n      'valid_from': 18,\n      'valid_to': 73,\n      'kind': 'relative',\n      'periods': [[30, 32], [0, 6]]},\n     {'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 12,\n      'valid_to': 36,\n      'kind': 'relative',\n      'periods': [[45, 16], [45, 20], [10, 6]]},\n     {'purpose': 'tx',\n      'stack': 2,\n      'valid_from': 2,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 32], [0, 6]]},\n     {'purpose': 'tx',\n      'stack': 2,\n      'valid_from': 13,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 20]]}],\n    73, 46, 16],\n   [16, 'hw']],\n  ['regression: validity end exclusivity (partial repair)',\n   [[{'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 17,\n      'valid_to': 91,\n      'kind': 'absolute',\n      'periods': [[30, 10], [5, 10]]},\n     {'purpose': 'default',\n      'stack': 0,\n      'valid_from': 28,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 20], [30, 6], [10, 16]]}],\n    90, 29, 16],\n   [10, 'tx']],\n  ['control 1',\n   [[{'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 8,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[30, 6]]}],\n    71, 15, 16],\n   [6, 'tx']],\n  ['control 2',\n   [[{'purpose': 'tx',\n      'stack': 2,\n      'valid_from': 39,\n      'valid_to': 108,\n      'kind': 'absolute',\n      'periods': [[20, 16], [30, 32], [20, 20]]},\n     {'purpose': 'max',\n      'stack': 0,\n      'valid_from': 45,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[5, 20]]},\n     {'purpose': 'default',\n      'stack': 1,\n      'valid_from': 21,\n      'valid_to': 46,\n      'kind': 'absolute',\n      'periods': [[5, 20]]}],\n    34, None, 24],\n   [20, 'default']]]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"fixed":{"sha256":"8360fdf404e2aba5206887eea96fa7ca027de0218afd4b0718ce657fb1978f3d","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(profiles, t, session_start, hw_max):\n    best = {}\n    for p in profiles:\n        if not (p['valid_from'] <= t and (p['valid_to'] is None or t < p['valid_to'])):\n            continue\n        if p['kind'] == 'relative':\n            if session_start is None:\n                continue\n            origin = session_start\n        else:\n            origin = p['valid_from']\n        el = t - origin\n        lim = None\n        for off, val in sorted(p['periods']):\n            if off <= el:\n                lim = val\n        if lim is None:\n            continue\n        cur = best.get(p['purpose'])\n        if cur is None or p['stack'] > cur[0]:\n            best[p['purpose']] = [p['stack'], lim]\n    cands = []\n    if 'max' in best:\n        cands.append(['max', best['max'][1]])\n    if 'tx' in best:\n        cands.append(['tx', best['tx'][1]])\n    elif 'default' in best:\n        cands.append(['default', best['default'][1]])\n    cands.append(['hw', hw_max])\n    win = cands[0]\n    for c in cands[1:]:\n        if c[1] < win[1]:\n            win = c\n    return [win[1], win[0]]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['boundary: profile expires at t',\n   [[{'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': 30,\n      'kind': 'absolute',\n      'periods': [[0, 10]]}],\n    30, None, 32],\n   [32, 'hw']],\n  ['boundary: relative profile without session',\n   [[{'purpose': 'default',\n      'stack': 1,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 8]]}],\n    20, None, 32],\n   [32, 'hw']],\n  ['boundary: tx overrides lower default',\n   [[{'purpose': 'default',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 6]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 20]]}],\n    5, 0, 32],\n   [20, 'tx']],\n  ['regression: validity end exclusivity',\n   [[{'purpose': 'default',\n      'stack': 1,\n      'valid_from': 39,\n      'valid_to': 45,\n      'kind': 'absolute',\n      'periods': [[0, 6], [5, 32], [0, 10]]}],\n    45, None, 32],\n   [32, 'hw']],\n  ['regression: validity end exclusivity (partial repair)',\n   [[{'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 17,\n      'valid_to': 91,\n      'kind': 'absolute',\n      'periods': [[30, 10], [5, 10]]},\n     {'purpose': 'default',\n      'stack': 0,\n      'valid_from': 28,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 20], [30, 6], [10, 16]]}],\n    90, 29, 16],\n   [10, 'tx']],\n  ['control 1',\n   [[{'purpose': 'max',\n      'stack': 1,\n      'valid_from': 44,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 10], [0, 10], [5, 10]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 7,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 10], [30, 20]]}],\n    3, None, 24],\n   [24, 'hw']],\n  ['control 2',\n   [[{'purpose': 'max',\n      'stack': 2,\n      'valid_from': 11,\n      'valid_to': 21,\n      'kind': 'relative',\n      'periods': [[30, 32], [10, 20], [45, 6]]},\n     {'purpose': 'max',\n      'stack': 1,\n      'valid_from': 14,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[10, 32]]},\n     {'purpose': 'max',\n      'stack': 0,\n      'valid_from': 19,\n      'valid_to': 56,\n      'kind': 'absolute',\n      'periods': [[0, 6], [45, 10], [20, 16]]},\n     {'purpose': 'max',\n      'stack': 1,\n      'valid_from': 53,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 10], [0, 32], [0, 20]]}],\n    97, None, 16],\n   [16, 'hw']]],\n [['boundary: profile expires at t',\n   [[{'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': 30,\n      'kind': 'absolute',\n      'periods': [[0, 10]]}],\n    30, None, 32],\n   [32, 'hw']],\n  ['boundary: relative profile without session',\n   [[{'purpose': 'default',\n      'stack': 1,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 8]]}],\n    20, None, 32],\n   [32, 'hw']],\n  ['boundary: tx overrides lower default',\n   [[{'purpose': 'default',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 6]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 20]]}],\n    5, 0, 32],\n   [20, 'tx']],\n  ['regression: validity end exclusivity',\n   [[{'purpose': 'default',\n      'stack': 1,\n      'valid_from': 39,\n      'valid_to': 45,\n      'kind': 'absolute',\n      'periods': [[0, 6], [5, 32], [0, 10]]}],\n    45, None, 32],\n   [32, 'hw']],\n  ['regression: validity end exclusivity (partial repair)',\n   [[{'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 17,\n      'valid_to': 91,\n      'kind': 'absolute',\n      'periods': [[30, 10], [5, 10]]},\n     {'purpose': 'default',\n      'stack': 0,\n      'valid_from': 28,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 20], [30, 6], [10, 16]]}],\n    90, 29, 16],\n   [10, 'tx']],\n  ['control 1',\n   [[{'purpose': 'default',\n      'stack': 2,\n      'valid_from': 20,\n      'valid_to': 56,\n      'kind': 'relative',\n      'periods': [[20, 10], [10, 20]]}],\n    53, 38, 24],\n   [20, 'default']],\n  ['control 2',\n   [[{'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 43,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[10, 32]]},\n     {'purpose': 'default',\n      'stack': 1,\n      'valid_from': 44,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[45, 32], [45, 6], [20, 20]]}],\n    88, 57, 24],\n   [24, 'hw']]],\n [['boundary: profile expires at t',\n   [[{'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': 30,\n      'kind': 'absolute',\n      'periods': [[0, 10]]}],\n    30, None, 32],\n   [32, 'hw']],\n  ['boundary: relative profile without session',\n   [[{'purpose': 'default',\n      'stack': 1,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 8]]}],\n    20, None, 32],\n   [32, 'hw']],\n  ['boundary: tx overrides lower default',\n   [[{'purpose': 'default',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 6]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 20]]}],\n    5, 0, 32],\n   [20, 'tx']],\n  ['regression: validity end exclusivity',\n   [[{'purpose': 'default',\n      'stack': 2,\n      'valid_from': 6,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 32], [10, 16]]},\n     {'purpose': 'max',\n      'stack': 2,\n      'valid_from': 18,\n      'valid_to': 73,\n      'kind': 'relative',\n      'periods': [[30, 32], [0, 6]]},\n     {'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 12,\n      'valid_to': 36,\n      'kind': 'relative',\n      'periods': [[45, 16], [45, 20], [10, 6]]},\n     {'purpose': 'tx',\n      'stack': 2,\n      'valid_from': 2,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 32], [0, 6]]},\n     {'purpose': 'tx',\n      'stack': 2,\n      'valid_from': 13,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 20]]}],\n    73, 46, 16],\n   [16, 'hw']],\n  ['regression: validity end exclusivity (partial repair)',\n   [[{'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 17,\n      'valid_to': 91,\n      'kind': 'absolute',\n      'periods': [[30, 10], [5, 10]]},\n     {'purpose': 'default',\n      'stack': 0,\n      'valid_from': 28,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 20], [30, 6], [10, 16]]}],\n    90, 29, 16],\n   [10, 'tx']],\n  ['control 1',\n   [[{'purpose': 'tx',\n      'stack': 2,\n      'valid_from': 29,\n      'valid_to': 52,\n      'kind': 'absolute',\n      'periods': [[30, 16], [45, 32], [0, 16]]},\n     {'purpose': 'max',\n      'stack': 0,\n      'valid_from': 13,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 6], [0, 10], [45, 16]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 58,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[10, 16]]}],\n    74, None, 24],\n   [16, 'max']],\n  ['control 2',\n   [[{'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 8,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[30, 6], [10, 6], [20, 32]]},\n     {'purpose': 'max',\n      'stack': 0,\n      'valid_from': 59,\n      'valid_to': 85,\n      'kind': 'absolute',\n      'periods': [[5, 6], [5, 20], [30, 20]]},\n     {'purpose': 'tx',\n      'stack': 2,\n      'valid_from': 29,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[20, 10], [30, 10]]}],\n    15, 48, 16],\n   [16, 'hw']]],\n [['boundary: profile expires at t',\n   [[{'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': 30,\n      'kind': 'absolute',\n      'periods': [[0, 10]]}],\n    30, None, 32],\n   [32, 'hw']],\n  ['boundary: relative profile without session',\n   [[{'purpose': 'default',\n      'stack': 1,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 8]]}],\n    20, None, 32],\n   [32, 'hw']],\n  ['boundary: tx overrides lower default',\n   [[{'purpose': 'default',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 6]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 20]]}],\n    5, 0, 32],\n   [20, 'tx']],\n  ['regression: validity end exclusivity',\n   [[{'purpose': 'default',\n      'stack': 2,\n      'valid_from': 6,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 32], [10, 16]]},\n     {'purpose': 'max',\n      'stack': 2,\n      'valid_from': 18,\n      'valid_to': 73,\n      'kind': 'relative',\n      'periods': [[30, 32], [0, 6]]},\n     {'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 12,\n      'valid_to': 36,\n      'kind': 'relative',\n      'periods': [[45, 16], [45, 20], [10, 6]]},\n     {'purpose': 'tx',\n      'stack': 2,\n      'valid_from': 2,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 32], [0, 6]]},\n     {'purpose': 'tx',\n      'stack': 2,\n      'valid_from': 13,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 20]]}],\n    73, 46, 16],\n   [16, 'hw']],\n  ['regression: validity end exclusivity (partial repair)',\n   [[{'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 17,\n      'valid_to': 91,\n      'kind': 'absolute',\n      'periods': [[30, 10], [5, 10]]},\n     {'purpose': 'default',\n      'stack': 0,\n      'valid_from': 28,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 20], [30, 6], [10, 16]]}],\n    90, 29, 16],\n   [10, 'tx']],\n  ['control 1',\n   [[{'purpose': 'max',\n      'stack': 2,\n      'valid_from': 22,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[30, 6]]},\n     {'purpose': 'default',\n      'stack': 0,\n      'valid_from': 34,\n      'valid_to': 106,\n      'kind': 'absolute',\n      'periods': [[30, 16], [30, 10]]},\n     {'purpose': 'tx',\n      'stack': 2,\n      'valid_from': 11,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[10, 6], [30, 20]]},\n     {'purpose': 'default',\n      'stack': 2,\n      'valid_from': 26,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[5, 6], [5, 6], [45, 10]]},\n     {'purpose': 'default',\n      'stack': 1,\n      'valid_from': 12,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[20, 32], [20, 6]]}],\n    77, None, 24],\n   [20, 'tx']],\n  ['control 2',\n   [[{'purpose': 'default',\n      'stack': 2,\n      'valid_from': 55,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[5, 10], [30, 10]]}],\n    25, 14, 16],\n   [16, 'hw']]],\n [['boundary: profile expires at t',\n   [[{'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': 30,\n      'kind': 'absolute',\n      'periods': [[0, 10]]}],\n    30, None, 32],\n   [32, 'hw']],\n  ['boundary: relative profile without session',\n   [[{'purpose': 'default',\n      'stack': 1,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 8]]}],\n    20, None, 32],\n   [32, 'hw']],\n  ['boundary: tx overrides lower default',\n   [[{'purpose': 'default',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 6]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 20]]}],\n    5, 0, 32],\n   [20, 'tx']],\n  ['regression: validity end exclusivity',\n   [[{'purpose': 'default',\n      'stack': 2,\n      'valid_from': 6,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 32], [10, 16]]},\n     {'purpose': 'max',\n      'stack': 2,\n      'valid_from': 18,\n      'valid_to': 73,\n      'kind': 'relative',\n      'periods': [[30, 32], [0, 6]]},\n     {'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 12,\n      'valid_to': 36,\n      'kind': 'relative',\n      'periods': [[45, 16], [45, 20], [10, 6]]},\n     {'purpose': 'tx',\n      'stack': 2,\n      'valid_from': 2,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 32], [0, 6]]},\n     {'purpose': 'tx',\n      'stack': 2,\n      'valid_from': 13,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 20]]}],\n    73, 46, 16],\n   [16, 'hw']],\n  ['regression: validity end exclusivity (partial repair)',\n   [[{'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 17,\n      'valid_to': 91,\n      'kind': 'absolute',\n      'periods': [[30, 10], [5, 10]]},\n     {'purpose': 'default',\n      'stack': 0,\n      'valid_from': 28,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 20], [30, 6], [10, 16]]}],\n    90, 29, 16],\n   [10, 'tx']],\n  ['control 1',\n   [[{'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 8,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[30, 6]]}],\n    71, 15, 16],\n   [6, 'tx']],\n  ['control 2',\n   [[{'purpose': 'tx',\n      'stack': 2,\n      'valid_from': 39,\n      'valid_to': 108,\n      'kind': 'absolute',\n      'periods': [[20, 16], [30, 32], [20, 20]]},\n     {'purpose': 'max',\n      'stack': 0,\n      'valid_from': 45,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[5, 20]]},\n     {'purpose': 'default',\n      'stack': 1,\n      'valid_from': 21,\n      'valid_to': 46,\n      'kind': 'absolute',\n      'periods': [[5, 20]]}],\n    34, None, 24],\n   [20, 'default']]]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"}},"limitations":"Deterministic stipulated toy contract for teaching; no claim of conformance with any standard, vendor protocol or production controller. 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.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"w2-ev_charging_session_scheduling-charging-profile-stack-validity-end-exclusivity","generated_at":"2026-09-29T14:51:50.523183+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Depot, workplace and public EV chargers schedule sessions against prices, circuit limits and departure deadlines; a wrong decision silently strands a driver or overloads a feeder.","repair":"Treat valid_to as exclusive: t < valid_to.","root_cause":"The validity end is treated as inclusive.","sha256":"379e2a284d00899a1146b1e7eab6fd4e9af70508e242fdf3af163bd5d5c108b2","title":"Charging profile stack resolution: validity end exclusivity · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":38.124,"exit_code":1,"observations":[{"actual":[32,"hw"],"check":"boundary: profile expires at t","expected":[32,"hw"],"passed":true},{"actual":[32,"hw"],"check":"boundary: relative profile without session","expected":[32,"hw"],"passed":true},{"actual":[20,"tx"],"check":"boundary: tx overrides lower default","expected":[20,"tx"],"passed":true},{"actual":[32,"hw"],"check":"regression: validity end exclusivity","expected":[32,"hw"],"passed":true},{"actual":[6,"default"],"check":"regression: validity end exclusivity (partial repair)","expected":[10,"tx"],"passed":false},{"actual":[24,"hw"],"check":"control 1","expected":[24,"hw"],"passed":true},{"actual":[16,"hw"],"check":"control 2","expected":[16,"hw"],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"boundary: profile expires at t\", \"actual\": [32, \"hw\"], \"expected\": [32, \"hw\"], \"passed\": true}, {\"check\": \"boundary: relative profile without session\", \"actual\": [32, \"hw\"], \"expected\": [32, \"hw\"], \"passed\": true}, {\"check\": \"boundary: tx overrides lower default\", \"actual\": [20, \"tx\"], \"expected\": [20, \"tx\"], \"passed\": true}, {\"check\": \"regression: validity end exclusivity\", \"actual\": [32, \"hw\"], \"expected\": [32, \"hw\"], \"passed\": true}, {\"check\": \"regression: validity end exclusivity (partial repair)\", \"actual\": [6, \"default\"], \"expected\": [10, \"tx\"], \"passed\": false}, {\"check\": \"control 1\", \"actual\": [24, \"hw\"], \"expected\": [24, \"hw\"], \"passed\": true}, {\"check\": \"control 2\", \"actual\": [16, \"hw\"], \"expected\": [16, \"hw\"], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.245,"exit_code":1,"observations":[{"actual":[10,"tx"],"check":"boundary: profile expires at t","expected":[32,"hw"],"passed":false},{"actual":[32,"hw"],"check":"boundary: relative profile without session","expected":[32,"hw"],"passed":true},{"actual":[20,"tx"],"check":"boundary: tx overrides lower default","expected":[20,"tx"],"passed":true},{"actual":[32,"default"],"check":"regression: validity end exclusivity","expected":[32,"hw"],"passed":false},{"actual":[10,"tx"],"check":"regression: validity end exclusivity (partial repair)","expected":[10,"tx"],"passed":true},{"actual":[24,"hw"],"check":"control 1","expected":[24,"hw"],"passed":true},{"actual":[16,"hw"],"check":"control 2","expected":[16,"hw"],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"boundary: profile expires at t\", \"actual\": [10, \"tx\"], \"expected\": [32, \"hw\"], \"passed\": false}, {\"check\": \"boundary: relative profile without session\", \"actual\": [32, \"hw\"], \"expected\": [32, \"hw\"], \"passed\": true}, {\"check\": \"boundary: tx overrides lower default\", \"actual\": [20, \"tx\"], \"expected\": [20, \"tx\"], \"passed\": true}, {\"check\": \"regression: validity end exclusivity\", \"actual\": [32, \"default\"], \"expected\": [32, \"hw\"], \"passed\": false}, {\"check\": \"regression: validity end exclusivity (partial repair)\", \"actual\": [10, \"tx\"], \"expected\": [10, \"tx\"], \"passed\": true}, {\"check\": \"control 1\", \"actual\": [24, \"hw\"], \"expected\": [24, \"hw\"], \"passed\": true}, {\"check\": \"control 2\", \"actual\": [16, \"hw\"], \"expected\": [16, \"hw\"], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":41.218,"exit_code":0,"observations":[{"actual":[32,"hw"],"check":"boundary: profile expires at t","expected":[32,"hw"],"passed":true},{"actual":[32,"hw"],"check":"boundary: relative profile without session","expected":[32,"hw"],"passed":true},{"actual":[20,"tx"],"check":"boundary: tx overrides lower default","expected":[20,"tx"],"passed":true},{"actual":[32,"hw"],"check":"regression: validity end exclusivity","expected":[32,"hw"],"passed":true},{"actual":[10,"tx"],"check":"regression: validity end exclusivity (partial repair)","expected":[10,"tx"],"passed":true},{"actual":[24,"hw"],"check":"control 1","expected":[24,"hw"],"passed":true},{"actual":[16,"hw"],"check":"control 2","expected":[16,"hw"],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"boundary: profile expires at t\", \"actual\": [32, \"hw\"], \"expected\": [32, \"hw\"], \"passed\": true}, {\"check\": \"boundary: relative profile without session\", \"actual\": [32, \"hw\"], \"expected\": [32, \"hw\"], \"passed\": true}, {\"check\": \"boundary: tx overrides lower default\", \"actual\": [20, \"tx\"], \"expected\": [20, \"tx\"], \"passed\": true}, {\"check\": \"regression: validity end exclusivity\", \"actual\": [32, \"hw\"], \"expected\": [32, \"hw\"], \"passed\": true}, {\"check\": \"regression: validity end exclusivity (partial repair)\", \"actual\": [10, \"tx\"], \"expected\": [10, \"tx\"], \"passed\": true}, {\"check\": \"control 1\", \"actual\": [24, \"hw\"], \"expected\": [24, \"hw\"], \"passed\": true}, {\"check\": \"control 2\", \"actual\": [16, \"hw\"], \"expected\": [16, \"hw\"], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}