{"abstract":"A correction appended with the same timestamp as a mistaken step never takes effect.","category":"Feature flag rollout bucketing","checks":8,"contract":"steps is a possibly unsorted list of [epoch second, percent or None]. Order steps by time, breaking ties by list position (later entries apply later). Every step with time <= now is active in that order; a None percent is a hold that keeps the previous value; numeric percents are clamped to [0, 100]. Before the first step the percentage is 0. Return [percent, original list index of the last active step or -1].","evaluation_group":"w2-feature-flag-rollout-bucketing-scheduled-ramp","failed_approach":"Breaking ties by percentage makes the larger value win regardless of which was written last.","family":"w2-feature-flag-rollout-bucketing-scheduled-ramp-simultaneous-steps","id":"FA-73996","implementations":{"attempt":{"sha256":"56ee13539b8f8405662f8000899e90c006eb6c11bfbe10bb857f301f4425bd16","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(steps, now):\n    order = sorted(range(len(steps)), key=lambda i: (steps[i][0], steps[i][1] if steps[i][1] is not None else -1))\n    current = 0\n    active = -1\n    for i in order:\n        at, pct = steps[i]\n        if at > now:\n            break\n        active = i\n        if pct is not None:\n            current = min(max(pct, 0), 100)\n    return [current, active]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('step scheduled exactly now is active', [[[0, 5], [60, 25]], 60], [25, 1]),\n  ('unsorted schedule is ordered by time', [[[60, 50], [0, 10], [30, 25]], 45], [25, 2]),\n  ('later entry wins a timestamp tie', [[[0, 5], [30, 50], [30, 20]], 40], [20, 2]),\n  ('hold step keeps previous percentage', [[[0, 25], [30, None]], 40], [25, 1]),\n  ('explicit rollback to zero percent', [[[0, 25], [30, 0]], 40], [0, 1]),\n  ('duplicate identical steps report the later entry', [[[10, 10], [10, 10]], 15], [10, 1]),\n  ('ramp schedule sample 1', [[[45, 0], [45, 5], [20, None], [45, 25], [60, -10], [45, None]], 45], [25, 5]),\n  ('ramp schedule sample 2', [[[20, 0], [30, 50]], 10], [0, -1])],\n [('unsorted schedule is ordered by time', [[[60, 50], [0, 10], [30, 25]], 45], [25, 2]),\n  ('later entry wins a timestamp tie', [[[0, 5], [30, 50], [30, 20]], 40], [20, 2]),\n  ('hold step keeps previous percentage', [[[0, 25], [30, None]], 40], [25, 1]),\n  ('explicit rollback to zero percent', [[[0, 25], [30, 0]], 40], [0, 1]),\n  ('over-hundred percent is clamped', [[[0, 150]], 10], [100, 0]),\n  ('duplicate identical steps report the later entry', [[[10, 10], [10, 10]], 15], [10, 1]),\n  ('ramp schedule sample 29', [[[60, 100], [60, 120], [20, 25], [20, 50], [60, 75]], 60], [75, 4]),\n  ('ramp schedule sample 43', [[[20, 5], [20, 0]], 20], [0, 1])],\n [('later entry wins a timestamp tie', [[[0, 5], [30, 50], [30, 20]], 40], [20, 2]),\n  ('hold step keeps previous percentage', [[[0, 25], [30, None]], 40], [25, 1]),\n  ('explicit rollback to zero percent', [[[0, 25], [30, 0]], 40], [0, 1]),\n  ('over-hundred percent is clamped', [[[0, 150]], 10], [100, 0]),\n  ('negative percent is clamped to zero', [[[0, 10], [5, -20]], 10], [0, 1]),\n  ('ramp schedule sample 11', [[[0, 5]], -5], [0, -1]),\n  ('ramp schedule sample 30', [[[20, 120], [10, 120], [0, 50], [20, None]], 20], [100, 3]),\n  ('ramp schedule sample 46', [[[30, 100], [20, 25], [30, -10], [30, 50], [30, None]], 30], [50, 4])],\n [('hold step keeps previous percentage', [[[0, 25], [30, None]], 40], [25, 1]),\n  ('explicit rollback to zero percent', [[[0, 25], [30, 0]], 40], [0, 1]),\n  ('over-hundred percent is clamped', [[[0, 150]], 10], [100, 0]),\n  ('negative percent is clamped to zero', [[[0, 10], [5, -20]], 10], [0, 1]),\n  ('before first step is zero', [[[10, 50]], 5], [0, -1]),\n  ('ramp schedule sample 1', [[[45, 0], [45, 5], [20, None], [45, 25], [60, -10], [45, None]], 45], [25, 5]),\n  ('ramp schedule sample 16', [[[60, 120]], 60], [100, 0]),\n  ('ramp schedule sample 20', [[[45, 25], [45, 75]], 45], [75, 1])],\n [('explicit rollback to zero percent', [[[0, 25], [30, 0]], 40], [0, 1]),\n  ('over-hundred percent is clamped', [[[0, 150]], 10], [100, 0]),\n  ('negative percent is clamped to zero', [[[0, 10], [5, -20]], 10], [0, 1]),\n  ('before first step is zero', [[[10, 50]], 5], [0, -1]),\n  ('active index refers to original position', [[[20, 30], [10, 10]], 15], [10, 1]),\n  ('ramp schedule sample 21', [[], 0], [0, -1]),\n  ('ramp schedule sample 44', [[[60, 5], [45, -10], [30, 100], [30, 50], [60, 25]], 100], [25, 4]),\n  ('ramp schedule sample 46', [[[30, 100], [20, 25], [30, -10], [30, 50], [30, None]], 30], [50, 4])]]\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":"86258f559561cac52bbd46df988b90906db9b465f489c21ee65cb5bed1edb99a","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(steps, now):\n    order = sorted(range(len(steps)), key=lambda i: (steps[i][0], -i))\n    current = 0\n    active = -1\n    for i in order:\n        at, pct = steps[i]\n        if at > now:\n            break\n        active = i\n        if pct is not None:\n            current = min(max(pct, 0), 100)\n    return [current, active]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('step scheduled exactly now is active', [[[0, 5], [60, 25]], 60], [25, 1]),\n  ('unsorted schedule is ordered by time', [[[60, 50], [0, 10], [30, 25]], 45], [25, 2]),\n  ('later entry wins a timestamp tie', [[[0, 5], [30, 50], [30, 20]], 40], [20, 2]),\n  ('hold step keeps previous percentage', [[[0, 25], [30, None]], 40], [25, 1]),\n  ('explicit rollback to zero percent', [[[0, 25], [30, 0]], 40], [0, 1]),\n  ('duplicate identical steps report the later entry', [[[10, 10], [10, 10]], 15], [10, 1]),\n  ('ramp schedule sample 1', [[[45, 0], [45, 5], [20, None], [45, 25], [60, -10], [45, None]], 45], [25, 5]),\n  ('ramp schedule sample 2', [[[20, 0], [30, 50]], 10], [0, -1])],\n [('unsorted schedule is ordered by time', [[[60, 50], [0, 10], [30, 25]], 45], [25, 2]),\n  ('later entry wins a timestamp tie', [[[0, 5], [30, 50], [30, 20]], 40], [20, 2]),\n  ('hold step keeps previous percentage', [[[0, 25], [30, None]], 40], [25, 1]),\n  ('explicit rollback to zero percent', [[[0, 25], [30, 0]], 40], [0, 1]),\n  ('over-hundred percent is clamped', [[[0, 150]], 10], [100, 0]),\n  ('duplicate identical steps report the later entry', [[[10, 10], [10, 10]], 15], [10, 1]),\n  ('ramp schedule sample 29', [[[60, 100], [60, 120], [20, 25], [20, 50], [60, 75]], 60], [75, 4]),\n  ('ramp schedule sample 43', [[[20, 5], [20, 0]], 20], [0, 1])],\n [('later entry wins a timestamp tie', [[[0, 5], [30, 50], [30, 20]], 40], [20, 2]),\n  ('hold step keeps previous percentage', [[[0, 25], [30, None]], 40], [25, 1]),\n  ('explicit rollback to zero percent', [[[0, 25], [30, 0]], 40], [0, 1]),\n  ('over-hundred percent is clamped', [[[0, 150]], 10], [100, 0]),\n  ('negative percent is clamped to zero', [[[0, 10], [5, -20]], 10], [0, 1]),\n  ('ramp schedule sample 11', [[[0, 5]], -5], [0, -1]),\n  ('ramp schedule sample 30', [[[20, 120], [10, 120], [0, 50], [20, None]], 20], [100, 3]),\n  ('ramp schedule sample 46', [[[30, 100], [20, 25], [30, -10], [30, 50], [30, None]], 30], [50, 4])],\n [('hold step keeps previous percentage', [[[0, 25], [30, None]], 40], [25, 1]),\n  ('explicit rollback to zero percent', [[[0, 25], [30, 0]], 40], [0, 1]),\n  ('over-hundred percent is clamped', [[[0, 150]], 10], [100, 0]),\n  ('negative percent is clamped to zero', [[[0, 10], [5, -20]], 10], [0, 1]),\n  ('before first step is zero', [[[10, 50]], 5], [0, -1]),\n  ('ramp schedule sample 1', [[[45, 0], [45, 5], [20, None], [45, 25], [60, -10], [45, None]], 45], [25, 5]),\n  ('ramp schedule sample 16', [[[60, 120]], 60], [100, 0]),\n  ('ramp schedule sample 20', [[[45, 25], [45, 75]], 45], [75, 1])],\n [('explicit rollback to zero percent', [[[0, 25], [30, 0]], 40], [0, 1]),\n  ('over-hundred percent is clamped', [[[0, 150]], 10], [100, 0]),\n  ('negative percent is clamped to zero', [[[0, 10], [5, -20]], 10], [0, 1]),\n  ('before first step is zero', [[[10, 50]], 5], [0, -1]),\n  ('active index refers to original position', [[[20, 30], [10, 10]], 15], [10, 1]),\n  ('ramp schedule sample 21', [[], 0], [0, -1]),\n  ('ramp schedule sample 44', [[[60, 5], [45, -10], [30, 100], [30, 50], [60, 25]], 100], [25, 4]),\n  ('ramp schedule sample 46', [[[30, 100], [20, 25], [30, -10], [30, 50], [30, None]], 30], [50, 4])]]\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":"e7c76f2a218ff1bdd87a82db00b179071d21f2703d6b12394e6821e56aa2e580","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(steps, now):\n    order = sorted(range(len(steps)), key=lambda i: (steps[i][0], i))\n    current = 0\n    active = -1\n    for i in order:\n        at, pct = steps[i]\n        if at > now:\n            break\n        active = i\n        if pct is not None:\n            current = min(max(pct, 0), 100)\n    return [current, active]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('step scheduled exactly now is active', [[[0, 5], [60, 25]], 60], [25, 1]),\n  ('unsorted schedule is ordered by time', [[[60, 50], [0, 10], [30, 25]], 45], [25, 2]),\n  ('later entry wins a timestamp tie', [[[0, 5], [30, 50], [30, 20]], 40], [20, 2]),\n  ('hold step keeps previous percentage', [[[0, 25], [30, None]], 40], [25, 1]),\n  ('explicit rollback to zero percent', [[[0, 25], [30, 0]], 40], [0, 1]),\n  ('duplicate identical steps report the later entry', [[[10, 10], [10, 10]], 15], [10, 1]),\n  ('ramp schedule sample 1', [[[45, 0], [45, 5], [20, None], [45, 25], [60, -10], [45, None]], 45], [25, 5]),\n  ('ramp schedule sample 2', [[[20, 0], [30, 50]], 10], [0, -1])],\n [('unsorted schedule is ordered by time', [[[60, 50], [0, 10], [30, 25]], 45], [25, 2]),\n  ('later entry wins a timestamp tie', [[[0, 5], [30, 50], [30, 20]], 40], [20, 2]),\n  ('hold step keeps previous percentage', [[[0, 25], [30, None]], 40], [25, 1]),\n  ('explicit rollback to zero percent', [[[0, 25], [30, 0]], 40], [0, 1]),\n  ('over-hundred percent is clamped', [[[0, 150]], 10], [100, 0]),\n  ('duplicate identical steps report the later entry', [[[10, 10], [10, 10]], 15], [10, 1]),\n  ('ramp schedule sample 29', [[[60, 100], [60, 120], [20, 25], [20, 50], [60, 75]], 60], [75, 4]),\n  ('ramp schedule sample 43', [[[20, 5], [20, 0]], 20], [0, 1])],\n [('later entry wins a timestamp tie', [[[0, 5], [30, 50], [30, 20]], 40], [20, 2]),\n  ('hold step keeps previous percentage', [[[0, 25], [30, None]], 40], [25, 1]),\n  ('explicit rollback to zero percent', [[[0, 25], [30, 0]], 40], [0, 1]),\n  ('over-hundred percent is clamped', [[[0, 150]], 10], [100, 0]),\n  ('negative percent is clamped to zero', [[[0, 10], [5, -20]], 10], [0, 1]),\n  ('ramp schedule sample 11', [[[0, 5]], -5], [0, -1]),\n  ('ramp schedule sample 30', [[[20, 120], [10, 120], [0, 50], [20, None]], 20], [100, 3]),\n  ('ramp schedule sample 46', [[[30, 100], [20, 25], [30, -10], [30, 50], [30, None]], 30], [50, 4])],\n [('hold step keeps previous percentage', [[[0, 25], [30, None]], 40], [25, 1]),\n  ('explicit rollback to zero percent', [[[0, 25], [30, 0]], 40], [0, 1]),\n  ('over-hundred percent is clamped', [[[0, 150]], 10], [100, 0]),\n  ('negative percent is clamped to zero', [[[0, 10], [5, -20]], 10], [0, 1]),\n  ('before first step is zero', [[[10, 50]], 5], [0, -1]),\n  ('ramp schedule sample 1', [[[45, 0], [45, 5], [20, None], [45, 25], [60, -10], [45, None]], 45], [25, 5]),\n  ('ramp schedule sample 16', [[[60, 120]], 60], [100, 0]),\n  ('ramp schedule sample 20', [[[45, 25], [45, 75]], 45], [75, 1])],\n [('explicit rollback to zero percent', [[[0, 25], [30, 0]], 40], [0, 1]),\n  ('over-hundred percent is clamped', [[[0, 150]], 10], [100, 0]),\n  ('negative percent is clamped to zero', [[[0, 10], [5, -20]], 10], [0, 1]),\n  ('before first step is zero', [[[10, 50]], 5], [0, -1]),\n  ('active index refers to original position', [[[20, 30], [10, 10]], 15], [10, 1]),\n  ('ramp schedule sample 21', [[], 0], [0, -1]),\n  ('ramp schedule sample 44', [[[60, 5], [45, -10], [30, 100], [30, 50], [60, 25]], 100], [25, 4]),\n  ('ramp schedule sample 46', [[[30, 100], [20, 25], [30, -10], [30, 50], [30, None]], 30], [50, 4])]]\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":"A deterministic toy flag-evaluation model with a stipulated contract; it does not reproduce any vendor SDK byte for byte. 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-feature-flag-rollout-bucketing-scheduled-ramp-simultaneous-steps","generated_at":"2026-09-29T14:48:52.625211+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Scheduled ramps move production traffic unattended, so the percentage at any instant must be exact.","repair":"Break equal-time ties by ascending list position so later entries apply later.","root_cause":"Ties are ordered by descending list position, so the earlier entry is applied last.","sha256":"fc15fc21064cd53d52ae45e90b5b91767aabb70d5be9d70d8fed20e14f191700","title":"Scheduled rollout ramp: The earliest-listed step wins a timestamp tie · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":44.495,"exit_code":1,"observations":[{"actual":[25,1],"check":"step scheduled exactly now is active","expected":[25,1],"passed":true},{"actual":[25,2],"check":"unsorted schedule is ordered by time","expected":[25,2],"passed":true},{"actual":[50,1],"check":"later entry wins a timestamp tie","expected":[20,2],"passed":false},{"actual":[25,1],"check":"hold step keeps previous percentage","expected":[25,1],"passed":true},{"actual":[0,1],"check":"explicit rollback to zero percent","expected":[0,1],"passed":true},{"actual":[10,1],"check":"duplicate identical steps report the later entry","expected":[10,1],"passed":true},{"actual":[25,3],"check":"ramp schedule sample 1","expected":[25,5],"passed":false},{"actual":[0,-1],"check":"ramp schedule sample 2","expected":[0,-1],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"step scheduled exactly now is active\", \"actual\": [25, 1], \"expected\": [25, 1], \"passed\": true}, {\"check\": \"unsorted schedule is ordered by time\", \"actual\": [25, 2], \"expected\": [25, 2], \"passed\": true}, {\"check\": \"later entry wins a timestamp tie\", \"actual\": [50, 1], \"expected\": [20, 2], \"passed\": false}, {\"check\": \"hold step keeps previous percentage\", \"actual\": [25, 1], \"expected\": [25, 1], \"passed\": true}, {\"check\": \"explicit rollback to zero percent\", \"actual\": [0, 1], \"expected\": [0, 1], \"passed\": true}, {\"check\": \"duplicate identical steps report the later entry\", \"actual\": [10, 1], \"expected\": [10, 1], \"passed\": true}, {\"check\": \"ramp schedule sample 1\", \"actual\": [25, 3], \"expected\": [25, 5], \"passed\": false}, {\"check\": \"ramp schedule sample 2\", \"actual\": [0, -1], \"expected\": [0, -1], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":39.094,"exit_code":1,"observations":[{"actual":[25,1],"check":"step scheduled exactly now is active","expected":[25,1],"passed":true},{"actual":[25,2],"check":"unsorted schedule is ordered by time","expected":[25,2],"passed":true},{"actual":[50,1],"check":"later entry wins a timestamp tie","expected":[20,2],"passed":false},{"actual":[25,1],"check":"hold step keeps previous percentage","expected":[25,1],"passed":true},{"actual":[0,1],"check":"explicit rollback to zero percent","expected":[0,1],"passed":true},{"actual":[10,0],"check":"duplicate identical steps report the later entry","expected":[10,1],"passed":false},{"actual":[0,0],"check":"ramp schedule sample 1","expected":[25,5],"passed":false},{"actual":[0,-1],"check":"ramp schedule sample 2","expected":[0,-1],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"step scheduled exactly now is active\", \"actual\": [25, 1], \"expected\": [25, 1], \"passed\": true}, {\"check\": \"unsorted schedule is ordered by time\", \"actual\": [25, 2], \"expected\": [25, 2], \"passed\": true}, {\"check\": \"later entry wins a timestamp tie\", \"actual\": [50, 1], \"expected\": [20, 2], \"passed\": false}, {\"check\": \"hold step keeps previous percentage\", \"actual\": [25, 1], \"expected\": [25, 1], \"passed\": true}, {\"check\": \"explicit rollback to zero percent\", \"actual\": [0, 1], \"expected\": [0, 1], \"passed\": true}, {\"check\": \"duplicate identical steps report the later entry\", \"actual\": [10, 0], \"expected\": [10, 1], \"passed\": false}, {\"check\": \"ramp schedule sample 1\", \"actual\": [0, 0], \"expected\": [25, 5], \"passed\": false}, {\"check\": \"ramp schedule sample 2\", \"actual\": [0, -1], \"expected\": [0, -1], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":39.042,"exit_code":0,"observations":[{"actual":[25,1],"check":"step scheduled exactly now is active","expected":[25,1],"passed":true},{"actual":[25,2],"check":"unsorted schedule is ordered by time","expected":[25,2],"passed":true},{"actual":[20,2],"check":"later entry wins a timestamp tie","expected":[20,2],"passed":true},{"actual":[25,1],"check":"hold step keeps previous percentage","expected":[25,1],"passed":true},{"actual":[0,1],"check":"explicit rollback to zero percent","expected":[0,1],"passed":true},{"actual":[10,1],"check":"duplicate identical steps report the later entry","expected":[10,1],"passed":true},{"actual":[25,5],"check":"ramp schedule sample 1","expected":[25,5],"passed":true},{"actual":[0,-1],"check":"ramp schedule sample 2","expected":[0,-1],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"step scheduled exactly now is active\", \"actual\": [25, 1], \"expected\": [25, 1], \"passed\": true}, {\"check\": \"unsorted schedule is ordered by time\", \"actual\": [25, 2], \"expected\": [25, 2], \"passed\": true}, {\"check\": \"later entry wins a timestamp tie\", \"actual\": [20, 2], \"expected\": [20, 2], \"passed\": true}, {\"check\": \"hold step keeps previous percentage\", \"actual\": [25, 1], \"expected\": [25, 1], \"passed\": true}, {\"check\": \"explicit rollback to zero percent\", \"actual\": [0, 1], \"expected\": [0, 1], \"passed\": true}, {\"check\": \"duplicate identical steps report the later entry\", \"actual\": [10, 1], \"expected\": [10, 1], \"passed\": true}, {\"check\": \"ramp schedule sample 1\", \"actual\": [25, 5], \"expected\": [25, 5], \"passed\": true}, {\"check\": \"ramp schedule sample 2\", \"actual\": [0, -1], \"expected\": [0, -1], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}