{"abstract":"Two equal-stack profiles resolve to the later one in the list.","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].","contract_signature":"profiles, t, session_start, hw_max","evaluation_group":"w2-ev_charging_session_scheduling-charging-profile-stack","failed_approach":"Inverting the comparison makes the lowest stack level win.","family":"w2-ev_charging_session_scheduling-charging-profile-stack-stack-level-precedence","id":"FA-92956","implementations":{"attempt":{"sha256":"7490633103ba6c7deeeefc4fb42acdbaeb8a4d3d9614bea5a552a1ace4523078","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: stack level precedence',\n   [[{'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 6,\n      'valid_to': 42,\n      'kind': 'relative',\n      'periods': [[0, 20], [10, 16]]},\n     {'purpose': 'default',\n      'stack': 2,\n      'valid_from': 59,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[20, 32]]},\n     {'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 8,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[10, 32], [0, 6]]}],\n    12, 0, 24],\n   [16, 'tx']],\n  ['regression: stack level precedence (partial repair)',\n   [[{'purpose': 'max',\n      'stack': 1,\n      'valid_from': 5,\n      'valid_to': 49,\n      'kind': 'relative',\n      'periods': [[45, 32], [5, 10], [20, 32]]},\n     {'purpose': 'tx',\n      'stack': 2,\n      'valid_from': 49,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[30, 32], [45, 10]]},\n     {'purpose': 'default',\n      'stack': 1,\n      'valid_from': 4,\n      'valid_to': 75,\n      'kind': 'absolute',\n      'periods': [[10, 10], [45, 10]]},\n     {'purpose': 'max',\n      'stack': 2,\n      'valid_from': 42,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[20, 16], [0, 16]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 50,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 6]]}],\n    95, None, 32],\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: stack level precedence',\n   [[{'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 60,\n      'valid_to': 108,\n      'kind': 'absolute',\n      'periods': [[45, 16]]},\n     {'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 29,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[45, 20]]},\n     {'purpose': 'max',\n      'stack': 1,\n      'valid_from': 35,\n      'valid_to': 81,\n      'kind': 'relative',\n      'periods': [[5, 16]]},\n     {'purpose': 'default',\n      'stack': 1,\n      'valid_from': 19,\n      'valid_to': 86,\n      'kind': 'absolute',\n      'periods': [[10, 16], [30, 32]]},\n     {'purpose': 'default',\n      'stack': 1,\n      'valid_from': 50,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 6], [5, 10], [10, 10]]}],\n    55, None, 24],\n   [24, 'hw']],\n  ['regression: stack level precedence (partial repair)',\n   [[{'purpose': 'max',\n      'stack': 1,\n      'valid_from': 4,\n      'valid_to': 38,\n      'kind': 'absolute',\n      'periods': [[20, 10], [30, 32]]},\n     {'purpose': 'max',\n      'stack': 0,\n      'valid_from': 2,\n      'valid_to': 80,\n      'kind': 'absolute',\n      'periods': [[20, 32]]}],\n    33, 49, 32],\n   [10, 'max']],\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: stack level precedence',\n   [[{'purpose': 'tx',\n      'stack': 2,\n      'valid_from': 2,\n      'valid_to': 49,\n      'kind': 'absolute',\n      'periods': [[20, 20], [10, 6]]},\n     {'purpose': 'max',\n      'stack': 2,\n      'valid_from': 57,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[45, 6], [5, 16], [30, 20]]},\n     {'purpose': 'max',\n      'stack': 2,\n      'valid_from': 31,\n      'valid_to': 98,\n      'kind': 'absolute',\n      'periods': [[0, 6], [0, 20]]},\n     {'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 59,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[5, 6], [0, 20], [30, 10]]},\n     {'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 48,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[45, 10], [0, 20], [30, 20]]}],\n    86, 60, 24],\n   [6, 'tx']],\n  ['regression: stack level precedence (partial repair)',\n   [[{'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 10], [0, 32], [45, 20]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 31,\n      'valid_to': 83,\n      'kind': 'relative',\n      'periods': [[5, 16], [45, 16], [0, 32]]}],\n    42, 37, 32],\n   [32, '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: stack level precedence',\n   [[{'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 6,\n      'valid_to': 42,\n      'kind': 'relative',\n      'periods': [[0, 20], [10, 16]]},\n     {'purpose': 'default',\n      'stack': 2,\n      'valid_from': 59,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[20, 32]]},\n     {'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 8,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[10, 32], [0, 6]]}],\n    12, 0, 24],\n   [16, 'tx']],\n  ['regression: stack level precedence (partial repair)',\n   [[{'purpose': 'default',\n      'stack': 2,\n      'valid_from': 53,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 16], [0, 10], [10, 10]]},\n     {'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 51,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[10, 20], [30, 10]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 27,\n      'valid_to': 96,\n      'kind': 'absolute',\n      'periods': [[0, 10]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 52,\n      'valid_to': 128,\n      'kind': 'absolute',\n      'periods': [[20, 6]]},\n     {'purpose': 'default',\n      'stack': 2,\n      'valid_from': 5,\n      'valid_to': 62,\n      'kind': 'absolute',\n      'periods': [[30, 6], [20, 6], [0, 16]]}],\n    75, 4, 24],\n   [20, '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: stack level precedence',\n   [[{'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 6,\n      'valid_to': 42,\n      'kind': 'relative',\n      'periods': [[0, 20], [10, 16]]},\n     {'purpose': 'default',\n      'stack': 2,\n      'valid_from': 59,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[20, 32]]},\n     {'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 8,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[10, 32], [0, 6]]}],\n    12, 0, 24],\n   [16, 'tx']],\n  ['regression: stack level precedence (partial repair)',\n   [[{'purpose': 'max',\n      'stack': 1,\n      'valid_from': 24,\n      'valid_to': 43,\n      'kind': 'relative',\n      'periods': [[0, 16], [20, 6]]},\n     {'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 3,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[10, 6], [0, 6]]},\n     {'purpose': 'default',\n      'stack': 1,\n      'valid_from': 35,\n      'valid_to': 45,\n      'kind': 'absolute',\n      'periods': [[0, 6]]},\n     {'purpose': 'max',\n      'stack': 0,\n      'valid_from': 60,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 16], [0, 10]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 14,\n      'valid_to': 88,\n      'kind': 'absolute',\n      'periods': [[30, 32], [30, 20], [0, 32]]}],\n    64, 26, 32],\n   [6, '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":"91177028e1703ad819c26c5452b42966988dea1b427716f4d3f162ae9cccfb8f","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: stack level precedence',\n   [[{'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 6,\n      'valid_to': 42,\n      'kind': 'relative',\n      'periods': [[0, 20], [10, 16]]},\n     {'purpose': 'default',\n      'stack': 2,\n      'valid_from': 59,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[20, 32]]},\n     {'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 8,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[10, 32], [0, 6]]}],\n    12, 0, 24],\n   [16, 'tx']],\n  ['regression: stack level precedence (partial repair)',\n   [[{'purpose': 'max',\n      'stack': 1,\n      'valid_from': 5,\n      'valid_to': 49,\n      'kind': 'relative',\n      'periods': [[45, 32], [5, 10], [20, 32]]},\n     {'purpose': 'tx',\n      'stack': 2,\n      'valid_from': 49,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[30, 32], [45, 10]]},\n     {'purpose': 'default',\n      'stack': 1,\n      'valid_from': 4,\n      'valid_to': 75,\n      'kind': 'absolute',\n      'periods': [[10, 10], [45, 10]]},\n     {'purpose': 'max',\n      'stack': 2,\n      'valid_from': 42,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[20, 16], [0, 16]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 50,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 6]]}],\n    95, None, 32],\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: stack level precedence',\n   [[{'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 60,\n      'valid_to': 108,\n      'kind': 'absolute',\n      'periods': [[45, 16]]},\n     {'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 29,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[45, 20]]},\n     {'purpose': 'max',\n      'stack': 1,\n      'valid_from': 35,\n      'valid_to': 81,\n      'kind': 'relative',\n      'periods': [[5, 16]]},\n     {'purpose': 'default',\n      'stack': 1,\n      'valid_from': 19,\n      'valid_to': 86,\n      'kind': 'absolute',\n      'periods': [[10, 16], [30, 32]]},\n     {'purpose': 'default',\n      'stack': 1,\n      'valid_from': 50,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 6], [5, 10], [10, 10]]}],\n    55, None, 24],\n   [24, 'hw']],\n  ['regression: stack level precedence (partial repair)',\n   [[{'purpose': 'max',\n      'stack': 1,\n      'valid_from': 4,\n      'valid_to': 38,\n      'kind': 'absolute',\n      'periods': [[20, 10], [30, 32]]},\n     {'purpose': 'max',\n      'stack': 0,\n      'valid_from': 2,\n      'valid_to': 80,\n      'kind': 'absolute',\n      'periods': [[20, 32]]}],\n    33, 49, 32],\n   [10, 'max']],\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: stack level precedence',\n   [[{'purpose': 'tx',\n      'stack': 2,\n      'valid_from': 2,\n      'valid_to': 49,\n      'kind': 'absolute',\n      'periods': [[20, 20], [10, 6]]},\n     {'purpose': 'max',\n      'stack': 2,\n      'valid_from': 57,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[45, 6], [5, 16], [30, 20]]},\n     {'purpose': 'max',\n      'stack': 2,\n      'valid_from': 31,\n      'valid_to': 98,\n      'kind': 'absolute',\n      'periods': [[0, 6], [0, 20]]},\n     {'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 59,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[5, 6], [0, 20], [30, 10]]},\n     {'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 48,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[45, 10], [0, 20], [30, 20]]}],\n    86, 60, 24],\n   [6, 'tx']],\n  ['regression: stack level precedence (partial repair)',\n   [[{'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 10], [0, 32], [45, 20]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 31,\n      'valid_to': 83,\n      'kind': 'relative',\n      'periods': [[5, 16], [45, 16], [0, 32]]}],\n    42, 37, 32],\n   [32, '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: stack level precedence',\n   [[{'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 6,\n      'valid_to': 42,\n      'kind': 'relative',\n      'periods': [[0, 20], [10, 16]]},\n     {'purpose': 'default',\n      'stack': 2,\n      'valid_from': 59,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[20, 32]]},\n     {'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 8,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[10, 32], [0, 6]]}],\n    12, 0, 24],\n   [16, 'tx']],\n  ['regression: stack level precedence (partial repair)',\n   [[{'purpose': 'default',\n      'stack': 2,\n      'valid_from': 53,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 16], [0, 10], [10, 10]]},\n     {'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 51,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[10, 20], [30, 10]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 27,\n      'valid_to': 96,\n      'kind': 'absolute',\n      'periods': [[0, 10]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 52,\n      'valid_to': 128,\n      'kind': 'absolute',\n      'periods': [[20, 6]]},\n     {'purpose': 'default',\n      'stack': 2,\n      'valid_from': 5,\n      'valid_to': 62,\n      'kind': 'absolute',\n      'periods': [[30, 6], [20, 6], [0, 16]]}],\n    75, 4, 24],\n   [20, '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: stack level precedence',\n   [[{'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 6,\n      'valid_to': 42,\n      'kind': 'relative',\n      'periods': [[0, 20], [10, 16]]},\n     {'purpose': 'default',\n      'stack': 2,\n      'valid_from': 59,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[20, 32]]},\n     {'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 8,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[10, 32], [0, 6]]}],\n    12, 0, 24],\n   [16, 'tx']],\n  ['regression: stack level precedence (partial repair)',\n   [[{'purpose': 'max',\n      'stack': 1,\n      'valid_from': 24,\n      'valid_to': 43,\n      'kind': 'relative',\n      'periods': [[0, 16], [20, 6]]},\n     {'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 3,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[10, 6], [0, 6]]},\n     {'purpose': 'default',\n      'stack': 1,\n      'valid_from': 35,\n      'valid_to': 45,\n      'kind': 'absolute',\n      'periods': [[0, 6]]},\n     {'purpose': 'max',\n      'stack': 0,\n      'valid_from': 60,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 16], [0, 10]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 14,\n      'valid_to': 88,\n      'kind': 'absolute',\n      'periods': [[30, 32], [30, 20], [0, 32]]}],\n    64, 26, 32],\n   [6, '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-stack-level-precedence","generated_at":"2026-09-29T14:51:50.649507+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.","root_cause":"Equal stack levels replace the incumbent, so ties go to the later profile.","sha256":"14b16095c54b583631496f8ff65820f4f1ec66dbf70f87652108d4539c78e30e","title":"Charging profile stack resolution: stack level precedence · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verified":true,"visibility":"public","verification":{"attempt":{"elapsed_ms":40.597,"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":[16,"tx"],"check":"regression: stack level precedence","expected":[16,"tx"],"passed":true},{"actual":[6,"tx"],"check":"regression: stack level precedence (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: stack level precedence\", \"actual\": [16, \"tx\"], \"expected\": [16, \"tx\"], \"passed\": true}, {\"check\": \"regression: stack level precedence (partial repair)\", \"actual\": [6, \"tx\"], \"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":45.372,"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":[6,"tx"],"check":"regression: stack level precedence","expected":[16,"tx"],"passed":false},{"actual":[10,"tx"],"check":"regression: stack level precedence (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\": [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: stack level precedence\", \"actual\": [6, \"tx\"], \"expected\": [16, \"tx\"], \"passed\": false}, {\"check\": \"regression: stack level precedence (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"}},"member_only":{"stages":["fixed"],"fields":["implementations.fixed","verification.fixed","harness","repair"],"note":"The verified repair, its recorded checks, the repair description, and the scoring harness are available to members."}}