{"abstract":"Chargers plugged in after the tariff switch are scheduled to start in the past.","category":"EV charging session scheduling","checks":7,"contract":"To avoid a demand spike at a tariff switch each charger delays its start by delay = sum((i+1)*ord(c) for i, c in enumerate(cid)) % (max_delay+1) minutes after max(tariff_start, now). If that start is later than depart - dur it is pulled back to max(depart - dur, now). Status is 'ok' when start + dur <= depart else 'late'. Return [start, delay, status].","contract_signature":"cid, tariff_start, now, depart, dur, max_delay","evaluation_group":"w2-ev_charging_session_scheduling-staggered-tariff-start","failed_approach":"Staggering from now ignores the tariff switch and starts on the expensive tariff.","family":"w2-ev_charging_session_scheduling-staggered-tariff-start-stagger-base-time","id":"FA-93296","implementations":{"attempt":{"sha256":"4f82245a630d6f52f4ffd950c1afbd3cf9bf7c420bfe7fdf15e8d90cc60e565c","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(cid, tariff_start, now, depart, dur, max_delay):\n    delay = sum((i + 1) * ord(c) for i, c in enumerate(cid)) % (max_delay + 1)\n    start = now + delay\n    latest = depart - dur\n    if start > latest:\n        start = max(latest, now)\n    status = 'ok' if start + dur <= depart else 'late'\n    return [start, delay, status]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['boundary: no stagger configured', ['CP7', 100, 50, 400, 60, 0], [100, 0, 'ok']],\n  ['boundary: deadline forces immediate start', ['CP12', 100, 50, 120, 70, 30], [50, 16, 'ok']],\n  ['boundary: tariff already active', ['CP3', 10, 50, 400, 60, 10], [56, 6, 'ok']],\n  ['regression: stagger base time', ['CP201', 49, 94, 552, 247, 5], [98, 4, 'ok']],\n  ['regression: stagger base time (partial repair)', ['CP778', 179, 65, 525, 61, 0],\n   [179, 0, 'ok']],\n  ['control 1', ['CP310', 208, 18, 199, 159, 0], [40, 0, 'ok']],\n  ['control 2', ['CP766', 294, 150, 208, 201, 30], [150, 10, 'late']]],\n [['boundary: no stagger configured', ['CP7', 100, 50, 400, 60, 0], [100, 0, 'ok']],\n  ['boundary: deadline forces immediate start', ['CP12', 100, 50, 120, 70, 30], [50, 16, 'ok']],\n  ['boundary: tariff already active', ['CP3', 10, 50, 400, 60, 10], [56, 6, 'ok']],\n  ['regression: stagger base time', ['CP321', 7, 32, 498, 89, 15], [41, 9, 'ok']],\n  ['regression: stagger base time (partial repair)', ['CP363', 205, 166, 509, 88, 10],\n   [209, 4, 'ok']],\n  ['control 1', ['CP883', 235, 120, 211, 80, 5], [131, 4, 'ok']],\n  ['control 2', ['CP742', 19, 177, 199, 247, 10], [177, 3, 'late']]],\n [['boundary: no stagger configured', ['CP7', 100, 50, 400, 60, 0], [100, 0, 'ok']],\n  ['boundary: deadline forces immediate start', ['CP12', 100, 50, 120, 70, 30], [50, 16, 'ok']],\n  ['boundary: tariff already active', ['CP3', 10, 50, 400, 60, 10], [56, 6, 'ok']],\n  ['regression: stagger base time', ['CP473', 52, 113, 448, 84, 0], [113, 0, 'ok']],\n  ['regression: stagger base time (partial repair)', ['CP201', 269, 83, 492, 35, 10],\n   [269, 0, 'ok']],\n  ['control 1', ['CP783', 204, 99, 341, 202, 5], [139, 1, 'ok']],\n  ['control 2', ['CP490', 211, 107, 512, 167, 10], [215, 4, 'ok']]],\n [['boundary: no stagger configured', ['CP7', 100, 50, 400, 60, 0], [100, 0, 'ok']],\n  ['boundary: deadline forces immediate start', ['CP12', 100, 50, 120, 70, 30], [50, 16, 'ok']],\n  ['boundary: tariff already active', ['CP3', 10, 50, 400, 60, 10], [56, 6, 'ok']],\n  ['regression: stagger base time', ['CP951', 78, 134, 388, 193, 0], [134, 0, 'ok']],\n  ['regression: stagger base time (partial repair)', ['CP907', 199, 117, 410, 31, 0],\n   [199, 0, 'ok']],\n  ['control 1', ['CP137', 10, 19, 66, 6, 15], [24, 5, 'ok']],\n  ['control 2', ['CP783', 210, 193, 350, 267, 30], [193, 3, 'late']]],\n [['boundary: no stagger configured', ['CP7', 100, 50, 400, 60, 0], [100, 0, 'ok']],\n  ['boundary: deadline forces immediate start', ['CP12', 100, 50, 120, 70, 30], [50, 16, 'ok']],\n  ['boundary: tariff already active', ['CP3', 10, 50, 400, 60, 10], [56, 6, 'ok']],\n  ['regression: stagger base time', ['CP544', 22, 72, 471, 102, 5], [74, 2, 'ok']],\n  ['regression: stagger base time (partial repair)', ['CP353', 241, 118, 320, 150, 5],\n   [170, 1, 'ok']],\n  ['control 1', ['CP873', 194, 7, 146, 117, 15], [29, 6, 'ok']],\n  ['control 2', ['CP733', 56, 136, 418, 4, 0], [136, 0, 'ok']]]]\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":"22ba04f6720bfb5ffa258ab6d687aa06a2c341941b98b076dbfa1fb1edadbd1f","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(cid, tariff_start, now, depart, dur, max_delay):\n    delay = sum((i + 1) * ord(c) for i, c in enumerate(cid)) % (max_delay + 1)\n    start = tariff_start + delay\n    latest = depart - dur\n    if start > latest:\n        start = max(latest, now)\n    status = 'ok' if start + dur <= depart else 'late'\n    return [start, delay, status]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['boundary: no stagger configured', ['CP7', 100, 50, 400, 60, 0], [100, 0, 'ok']],\n  ['boundary: deadline forces immediate start', ['CP12', 100, 50, 120, 70, 30], [50, 16, 'ok']],\n  ['boundary: tariff already active', ['CP3', 10, 50, 400, 60, 10], [56, 6, 'ok']],\n  ['regression: stagger base time', ['CP201', 49, 94, 552, 247, 5], [98, 4, 'ok']],\n  ['regression: stagger base time (partial repair)', ['CP778', 179, 65, 525, 61, 0],\n   [179, 0, 'ok']],\n  ['control 1', ['CP310', 208, 18, 199, 159, 0], [40, 0, 'ok']],\n  ['control 2', ['CP766', 294, 150, 208, 201, 30], [150, 10, 'late']]],\n [['boundary: no stagger configured', ['CP7', 100, 50, 400, 60, 0], [100, 0, 'ok']],\n  ['boundary: deadline forces immediate start', ['CP12', 100, 50, 120, 70, 30], [50, 16, 'ok']],\n  ['boundary: tariff already active', ['CP3', 10, 50, 400, 60, 10], [56, 6, 'ok']],\n  ['regression: stagger base time', ['CP321', 7, 32, 498, 89, 15], [41, 9, 'ok']],\n  ['regression: stagger base time (partial repair)', ['CP363', 205, 166, 509, 88, 10],\n   [209, 4, 'ok']],\n  ['control 1', ['CP883', 235, 120, 211, 80, 5], [131, 4, 'ok']],\n  ['control 2', ['CP742', 19, 177, 199, 247, 10], [177, 3, 'late']]],\n [['boundary: no stagger configured', ['CP7', 100, 50, 400, 60, 0], [100, 0, 'ok']],\n  ['boundary: deadline forces immediate start', ['CP12', 100, 50, 120, 70, 30], [50, 16, 'ok']],\n  ['boundary: tariff already active', ['CP3', 10, 50, 400, 60, 10], [56, 6, 'ok']],\n  ['regression: stagger base time', ['CP473', 52, 113, 448, 84, 0], [113, 0, 'ok']],\n  ['regression: stagger base time (partial repair)', ['CP201', 269, 83, 492, 35, 10],\n   [269, 0, 'ok']],\n  ['control 1', ['CP783', 204, 99, 341, 202, 5], [139, 1, 'ok']],\n  ['control 2', ['CP490', 211, 107, 512, 167, 10], [215, 4, 'ok']]],\n [['boundary: no stagger configured', ['CP7', 100, 50, 400, 60, 0], [100, 0, 'ok']],\n  ['boundary: deadline forces immediate start', ['CP12', 100, 50, 120, 70, 30], [50, 16, 'ok']],\n  ['boundary: tariff already active', ['CP3', 10, 50, 400, 60, 10], [56, 6, 'ok']],\n  ['regression: stagger base time', ['CP951', 78, 134, 388, 193, 0], [134, 0, 'ok']],\n  ['regression: stagger base time (partial repair)', ['CP907', 199, 117, 410, 31, 0],\n   [199, 0, 'ok']],\n  ['control 1', ['CP137', 10, 19, 66, 6, 15], [24, 5, 'ok']],\n  ['control 2', ['CP783', 210, 193, 350, 267, 30], [193, 3, 'late']]],\n [['boundary: no stagger configured', ['CP7', 100, 50, 400, 60, 0], [100, 0, 'ok']],\n  ['boundary: deadline forces immediate start', ['CP12', 100, 50, 120, 70, 30], [50, 16, 'ok']],\n  ['boundary: tariff already active', ['CP3', 10, 50, 400, 60, 10], [56, 6, 'ok']],\n  ['regression: stagger base time', ['CP544', 22, 72, 471, 102, 5], [74, 2, 'ok']],\n  ['regression: stagger base time (partial repair)', ['CP353', 241, 118, 320, 150, 5],\n   [170, 1, 'ok']],\n  ['control 1', ['CP873', 194, 7, 146, 117, 15], [29, 6, 'ok']],\n  ['control 2', ['CP733', 56, 136, 418, 4, 0], [136, 0, 'ok']]]]\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-staggered-tariff-start-stagger-base-time","generated_at":"2026-09-29T14:51:53.808903+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":"The stagger is added to the tariff start without considering the current time.","sha256":"7b9bf5a2cc206e67e91448801ea74b64a717ef50b13ddd36be0eb5ce0e4e2323","title":"Staggered start after tariff switch: stagger base time · 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":39.06,"exit_code":1,"observations":[{"actual":[50,0,"ok"],"check":"boundary: no stagger configured","expected":[100,0,"ok"],"passed":false},{"actual":[50,16,"ok"],"check":"boundary: deadline forces immediate start","expected":[50,16,"ok"],"passed":true},{"actual":[56,6,"ok"],"check":"boundary: tariff already active","expected":[56,6,"ok"],"passed":true},{"actual":[98,4,"ok"],"check":"regression: stagger base time","expected":[98,4,"ok"],"passed":true},{"actual":[65,0,"ok"],"check":"regression: stagger base time (partial repair)","expected":[179,0,"ok"],"passed":false},{"actual":[18,0,"ok"],"check":"control 1","expected":[40,0,"ok"],"passed":false},{"actual":[150,10,"late"],"check":"control 2","expected":[150,10,"late"],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"boundary: no stagger configured\", \"actual\": [50, 0, \"ok\"], \"expected\": [100, 0, \"ok\"], \"passed\": false}, {\"check\": \"boundary: deadline forces immediate start\", \"actual\": [50, 16, \"ok\"], \"expected\": [50, 16, \"ok\"], \"passed\": true}, {\"check\": \"boundary: tariff already active\", \"actual\": [56, 6, \"ok\"], \"expected\": [56, 6, \"ok\"], \"passed\": true}, {\"check\": \"regression: stagger base time\", \"actual\": [98, 4, \"ok\"], \"expected\": [98, 4, \"ok\"], \"passed\": true}, {\"check\": \"regression: stagger base time (partial repair)\", \"actual\": [65, 0, \"ok\"], \"expected\": [179, 0, \"ok\"], \"passed\": false}, {\"check\": \"control 1\", \"actual\": [18, 0, \"ok\"], \"expected\": [40, 0, \"ok\"], \"passed\": false}, {\"check\": \"control 2\", \"actual\": [150, 10, \"late\"], \"expected\": [150, 10, \"late\"], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":39.756,"exit_code":1,"observations":[{"actual":[100,0,"ok"],"check":"boundary: no stagger configured","expected":[100,0,"ok"],"passed":true},{"actual":[50,16,"ok"],"check":"boundary: deadline forces immediate start","expected":[50,16,"ok"],"passed":true},{"actual":[16,6,"ok"],"check":"boundary: tariff already active","expected":[56,6,"ok"],"passed":false},{"actual":[53,4,"ok"],"check":"regression: stagger base time","expected":[98,4,"ok"],"passed":false},{"actual":[179,0,"ok"],"check":"regression: stagger base time (partial repair)","expected":[179,0,"ok"],"passed":true},{"actual":[40,0,"ok"],"check":"control 1","expected":[40,0,"ok"],"passed":true},{"actual":[150,10,"late"],"check":"control 2","expected":[150,10,"late"],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"boundary: no stagger configured\", \"actual\": [100, 0, \"ok\"], \"expected\": [100, 0, \"ok\"], \"passed\": true}, {\"check\": \"boundary: deadline forces immediate start\", \"actual\": [50, 16, \"ok\"], \"expected\": [50, 16, \"ok\"], \"passed\": true}, {\"check\": \"boundary: tariff already active\", \"actual\": [16, 6, \"ok\"], \"expected\": [56, 6, \"ok\"], \"passed\": false}, {\"check\": \"regression: stagger base time\", \"actual\": [53, 4, \"ok\"], \"expected\": [98, 4, \"ok\"], \"passed\": false}, {\"check\": \"regression: stagger base time (partial repair)\", \"actual\": [179, 0, \"ok\"], \"expected\": [179, 0, \"ok\"], \"passed\": true}, {\"check\": \"control 1\", \"actual\": [40, 0, \"ok\"], \"expected\": [40, 0, \"ok\"], \"passed\": true}, {\"check\": \"control 2\", \"actual\": [150, 10, \"late\"], \"expected\": [150, 10, \"late\"], \"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."}}