FA-74286 / Feature flag rollout bucketing / Open access
Timestamp targeting clause: ISO dates are converted to seconds · case 01
Every millisecond timestamp is "after" any ISO clause date, so scheduled launches fire immediately.
ROOT CAUSE
Parsed dates return whole seconds while numeric values are milliseconds.
VERIFIED REPAIR
Multiply parsed seconds by 1000.
Unsuccessful approach: Dividing by 1000 moves the unit mismatch in the other direction.
Case contract
Values are epoch milliseconds (int or float) or UTC strings exactly "YYYY-MM-DDTHH:MM:SSZ" converted to milliseconds; booleans, other strings and invalid dates are unusable and make the clause false. op before means user < clause, after means user > clause (strict); other ops are false.
Why this case matters
Date clauses schedule launches and trials; unit and timezone slips shift them by days or years.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
import datetime
N = 1
observations = []
def solve(user_value, op, clause_value):
def ms(v):
if isinstance(v, bool):
return None
if isinstance(v, (int, float)):
return v
if isinstance(v, str) and len(v) == 20 and v.endswith('Z'):
try:
d = datetime.datetime.strptime(v, '%Y-%m-%dT%H:%M:%SZ').replace(tzinfo=datetime.timezone.utc)
except ValueError:
return None
return int(d.timestamp())
return None
a, b = ms(user_value), ms(clause_value)
if a is None or b is None:
return False
if op == 'before':
return a < b
if op == 'after':
return a > b
return False
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('ISO clause converts to milliseconds', [1700000000001, 'after', '2023-11-14T22:13:20Z'], True),
('boolean user value is unusable', [True, 'after', 0], False),
('false user value is unusable', [False, 'before', 1], False),
('equal timestamps are not before', [1700000000000, 'before', '2023-11-14T22:13:20Z'], False),
('one millisecond earlier is before', [1699999999999, 'before', 1700000000000], True),
('seconds epoch compared as milliseconds', [1700000000, 'before', '2023-11-14T22:13:20Z'], True),
('timestamp pair sample 1', ['2023-11-14T23:13:20+01:00', 'on', True], False),
('timestamp pair sample 2', [0, 'before', 1700000000000], True)],
[('boolean user value is unusable', [True, 'after', 0], False),
('false user value is unusable', [False, 'before', 1], False),
('equal timestamps are not before', [1700000000000, 'before', '2023-11-14T22:13:20Z'], False),
('one millisecond earlier is before', [1699999999999, 'before', 1700000000000], True),
('offset string is unusable', ['2023-11-14T23:13:20+01:00', 'before', '2023-11-14T22:13:21Z'], False),
('seconds epoch compared as milliseconds', [1700000000, 'before', '2023-11-14T22:13:20Z'], True),
('timestamp pair sample 12', ['2023-11-14T22:13:21Z', 'after', 1700000000001], True),
('timestamp pair sample 34', ['2023-11-14T22:13:20Z', 'before', 1699999999999], False)],
[('false user value is unusable', [False, 'before', 1], False),
('equal timestamps are not before', [1700000000000, 'before', '2023-11-14T22:13:20Z'], False),
('one millisecond earlier is before', [1699999999999, 'before', 1700000000000], True),
('offset string is unusable', ['2023-11-14T23:13:20+01:00', 'before', '2023-11-14T22:13:21Z'], False),
('explicit UTC offset spelling is unusable', ['2023-11-14T22:13:20+00:00', 'before', 1800000000000], False),
('timestamp pair sample 11', ['soon', 'after', 1700000000001], False),
('timestamp pair sample 29', ['2023-11-14T22:13:20Z', 'before', '2023-11-14T22:13:21Z'], True),
('timestamp pair sample 34', ['2023-11-14T22:13:20Z', 'before', 1699999999999], False)],
[('equal timestamps are not before', [1700000000000, 'before', '2023-11-14T22:13:20Z'], False),
('one millisecond earlier is before', [1699999999999, 'before', 1700000000000], True),
('offset string is unusable', ['2023-11-14T23:13:20+01:00', 'before', '2023-11-14T22:13:21Z'], False),
('explicit UTC offset spelling is unusable', ['2023-11-14T22:13:20+00:00', 'before', 1800000000000], False),
('invalid calendar date is unusable', ['2023-02-30T00:00:00Z', 'before', 1800000000000], False),
('seconds epoch compared as milliseconds', [1700000000, 'before', '2023-11-14T22:13:20Z'], True),
('timestamp pair sample 12', ['2023-11-14T22:13:21Z', 'after', 1700000000001], True),
('timestamp pair sample 16', ['2023-11-14T22:13:20Z', 'before', True], False)],
[('one millisecond earlier is before', [1699999999999, 'before', 1700000000000], True),
('offset string is unusable', ['2023-11-14T23:13:20+01:00', 'before', '2023-11-14T22:13:21Z'], False),
('explicit UTC offset spelling is unusable', ['2023-11-14T22:13:20+00:00', 'before', 1800000000000], False),
('invalid calendar date is unusable', ['2023-02-30T00:00:00Z', 'before', 1800000000000], False),
('seconds epoch compared as milliseconds', [1700000000, 'before', '2023-11-14T22:13:20Z'], True),
('timestamp pair sample 12', ['2023-11-14T22:13:21Z', 'after', 1700000000001], True),
('timestamp pair sample 21', ['soon', 'after', '2023-11-14T22:13:20Z'], False),
('timestamp pair sample 22', ['2023-11-14T22:13:20Z', 'after', '2023-11-14T22:13:20+00:00'], False)]]
for label, args, expected in fixtures[N - 1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| ISO clause converts to milliseconds | True | True | Passed |
| boolean user value is unusable | False | False | Passed |
| false user value is unusable | False | False | Passed |
| equal timestamps are not before | False | False | Passed |
| one millisecond earlier is before | True | True | Passed |
| seconds epoch compared as milliseconds | False | True | Failed |
| timestamp pair sample 1 | False | False | Passed |
| timestamp pair sample 2 | True | True | Passed |
SHA-256 / cda439527fdda8fa02bb19e7ec0e7c6827999f8434a78b0340ab8dd477a0aa7b
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
import datetime
N = 1
observations = []
def solve(user_value, op, clause_value):
def ms(v):
if isinstance(v, bool):
return None
if isinstance(v, (int, float)):
return v
if isinstance(v, str) and len(v) == 20 and v.endswith('Z'):
try:
d = datetime.datetime.strptime(v, '%Y-%m-%dT%H:%M:%SZ').replace(tzinfo=datetime.timezone.utc)
except ValueError:
return None
return int(d.timestamp() / 1000)
return None
a, b = ms(user_value), ms(clause_value)
if a is None or b is None:
return False
if op == 'before':
return a < b
if op == 'after':
return a > b
return False
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('ISO clause converts to milliseconds', [1700000000001, 'after', '2023-11-14T22:13:20Z'], True),
('boolean user value is unusable', [True, 'after', 0], False),
('false user value is unusable', [False, 'before', 1], False),
('equal timestamps are not before', [1700000000000, 'before', '2023-11-14T22:13:20Z'], False),
('one millisecond earlier is before', [1699999999999, 'before', 1700000000000], True),
('seconds epoch compared as milliseconds', [1700000000, 'before', '2023-11-14T22:13:20Z'], True),
('timestamp pair sample 1', ['2023-11-14T23:13:20+01:00', 'on', True], False),
('timestamp pair sample 2', [0, 'before', 1700000000000], True)],
[('boolean user value is unusable', [True, 'after', 0], False),
('false user value is unusable', [False, 'before', 1], False),
('equal timestamps are not before', [1700000000000, 'before', '2023-11-14T22:13:20Z'], False),
('one millisecond earlier is before', [1699999999999, 'before', 1700000000000], True),
('offset string is unusable', ['2023-11-14T23:13:20+01:00', 'before', '2023-11-14T22:13:21Z'], False),
('seconds epoch compared as milliseconds', [1700000000, 'before', '2023-11-14T22:13:20Z'], True),
('timestamp pair sample 12', ['2023-11-14T22:13:21Z', 'after', 1700000000001], True),
('timestamp pair sample 34', ['2023-11-14T22:13:20Z', 'before', 1699999999999], False)],
[('false user value is unusable', [False, 'before', 1], False),
('equal timestamps are not before', [1700000000000, 'before', '2023-11-14T22:13:20Z'], False),
('one millisecond earlier is before', [1699999999999, 'before', 1700000000000], True),
('offset string is unusable', ['2023-11-14T23:13:20+01:00', 'before', '2023-11-14T22:13:21Z'], False),
('explicit UTC offset spelling is unusable', ['2023-11-14T22:13:20+00:00', 'before', 1800000000000], False),
('timestamp pair sample 11', ['soon', 'after', 1700000000001], False),
('timestamp pair sample 29', ['2023-11-14T22:13:20Z', 'before', '2023-11-14T22:13:21Z'], True),
('timestamp pair sample 34', ['2023-11-14T22:13:20Z', 'before', 1699999999999], False)],
[('equal timestamps are not before', [1700000000000, 'before', '2023-11-14T22:13:20Z'], False),
('one millisecond earlier is before', [1699999999999, 'before', 1700000000000], True),
('offset string is unusable', ['2023-11-14T23:13:20+01:00', 'before', '2023-11-14T22:13:21Z'], False),
('explicit UTC offset spelling is unusable', ['2023-11-14T22:13:20+00:00', 'before', 1800000000000], False),
('invalid calendar date is unusable', ['2023-02-30T00:00:00Z', 'before', 1800000000000], False),
('seconds epoch compared as milliseconds', [1700000000, 'before', '2023-11-14T22:13:20Z'], True),
('timestamp pair sample 12', ['2023-11-14T22:13:21Z', 'after', 1700000000001], True),
('timestamp pair sample 16', ['2023-11-14T22:13:20Z', 'before', True], False)],
[('one millisecond earlier is before', [1699999999999, 'before', 1700000000000], True),
('offset string is unusable', ['2023-11-14T23:13:20+01:00', 'before', '2023-11-14T22:13:21Z'], False),
('explicit UTC offset spelling is unusable', ['2023-11-14T22:13:20+00:00', 'before', 1800000000000], False),
('invalid calendar date is unusable', ['2023-02-30T00:00:00Z', 'before', 1800000000000], False),
('seconds epoch compared as milliseconds', [1700000000, 'before', '2023-11-14T22:13:20Z'], True),
('timestamp pair sample 12', ['2023-11-14T22:13:21Z', 'after', 1700000000001], True),
('timestamp pair sample 21', ['soon', 'after', '2023-11-14T22:13:20Z'], False),
('timestamp pair sample 22', ['2023-11-14T22:13:20Z', 'after', '2023-11-14T22:13:20+00:00'], False)]]
for label, args, expected in fixtures[N - 1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| ISO clause converts to milliseconds | True | True | Passed |
| boolean user value is unusable | False | False | Passed |
| false user value is unusable | False | False | Passed |
| equal timestamps are not before | False | False | Passed |
| one millisecond earlier is before | True | True | Passed |
| seconds epoch compared as milliseconds | False | True | Failed |
| timestamp pair sample 1 | False | False | Passed |
| timestamp pair sample 2 | True | True | Passed |
SHA-256 / e8b435e064d737a4476ffca2e532d83432f9dbd5298a6f98882a273176d322aa
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
import datetime
N = 1
observations = []
def solve(user_value, op, clause_value):
def ms(v):
if isinstance(v, bool):
return None
if isinstance(v, (int, float)):
return v
if isinstance(v, str) and len(v) == 20 and v.endswith('Z'):
try:
d = datetime.datetime.strptime(v, '%Y-%m-%dT%H:%M:%SZ').replace(tzinfo=datetime.timezone.utc)
except ValueError:
return None
return int(d.timestamp()) * 1000
return None
a, b = ms(user_value), ms(clause_value)
if a is None or b is None:
return False
if op == 'before':
return a < b
if op == 'after':
return a > b
return False
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('ISO clause converts to milliseconds', [1700000000001, 'after', '2023-11-14T22:13:20Z'], True),
('boolean user value is unusable', [True, 'after', 0], False),
('false user value is unusable', [False, 'before', 1], False),
('equal timestamps are not before', [1700000000000, 'before', '2023-11-14T22:13:20Z'], False),
('one millisecond earlier is before', [1699999999999, 'before', 1700000000000], True),
('seconds epoch compared as milliseconds', [1700000000, 'before', '2023-11-14T22:13:20Z'], True),
('timestamp pair sample 1', ['2023-11-14T23:13:20+01:00', 'on', True], False),
('timestamp pair sample 2', [0, 'before', 1700000000000], True)],
[('boolean user value is unusable', [True, 'after', 0], False),
('false user value is unusable', [False, 'before', 1], False),
('equal timestamps are not before', [1700000000000, 'before', '2023-11-14T22:13:20Z'], False),
('one millisecond earlier is before', [1699999999999, 'before', 1700000000000], True),
('offset string is unusable', ['2023-11-14T23:13:20+01:00', 'before', '2023-11-14T22:13:21Z'], False),
('seconds epoch compared as milliseconds', [1700000000, 'before', '2023-11-14T22:13:20Z'], True),
('timestamp pair sample 12', ['2023-11-14T22:13:21Z', 'after', 1700000000001], True),
('timestamp pair sample 34', ['2023-11-14T22:13:20Z', 'before', 1699999999999], False)],
[('false user value is unusable', [False, 'before', 1], False),
('equal timestamps are not before', [1700000000000, 'before', '2023-11-14T22:13:20Z'], False),
('one millisecond earlier is before', [1699999999999, 'before', 1700000000000], True),
('offset string is unusable', ['2023-11-14T23:13:20+01:00', 'before', '2023-11-14T22:13:21Z'], False),
('explicit UTC offset spelling is unusable', ['2023-11-14T22:13:20+00:00', 'before', 1800000000000], False),
('timestamp pair sample 11', ['soon', 'after', 1700000000001], False),
('timestamp pair sample 29', ['2023-11-14T22:13:20Z', 'before', '2023-11-14T22:13:21Z'], True),
('timestamp pair sample 34', ['2023-11-14T22:13:20Z', 'before', 1699999999999], False)],
[('equal timestamps are not before', [1700000000000, 'before', '2023-11-14T22:13:20Z'], False),
('one millisecond earlier is before', [1699999999999, 'before', 1700000000000], True),
('offset string is unusable', ['2023-11-14T23:13:20+01:00', 'before', '2023-11-14T22:13:21Z'], False),
('explicit UTC offset spelling is unusable', ['2023-11-14T22:13:20+00:00', 'before', 1800000000000], False),
('invalid calendar date is unusable', ['2023-02-30T00:00:00Z', 'before', 1800000000000], False),
('seconds epoch compared as milliseconds', [1700000000, 'before', '2023-11-14T22:13:20Z'], True),
('timestamp pair sample 12', ['2023-11-14T22:13:21Z', 'after', 1700000000001], True),
('timestamp pair sample 16', ['2023-11-14T22:13:20Z', 'before', True], False)],
[('one millisecond earlier is before', [1699999999999, 'before', 1700000000000], True),
('offset string is unusable', ['2023-11-14T23:13:20+01:00', 'before', '2023-11-14T22:13:21Z'], False),
('explicit UTC offset spelling is unusable', ['2023-11-14T22:13:20+00:00', 'before', 1800000000000], False),
('invalid calendar date is unusable', ['2023-02-30T00:00:00Z', 'before', 1800000000000], False),
('seconds epoch compared as milliseconds', [1700000000, 'before', '2023-11-14T22:13:20Z'], True),
('timestamp pair sample 12', ['2023-11-14T22:13:21Z', 'after', 1700000000001], True),
('timestamp pair sample 21', ['soon', 'after', '2023-11-14T22:13:20Z'], False),
('timestamp pair sample 22', ['2023-11-14T22:13:20Z', 'after', '2023-11-14T22:13:20+00:00'], False)]]
for label, args, expected in fixtures[N - 1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| ISO clause converts to milliseconds | True | True | Passed |
| boolean user value is unusable | False | False | Passed |
| false user value is unusable | False | False | Passed |
| equal timestamps are not before | False | False | Passed |
| one millisecond earlier is before | True | True | Passed |
| seconds epoch compared as milliseconds | True | True | Passed |
| timestamp pair sample 1 | False | False | Passed |
| timestamp pair sample 2 | True | True | Passed |
SHA-256 / adb0f8b782ce2e0d10af4a76d076ac785cf862c80a835e96617814a310b0041b
Verification & scope
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.
Observations recorded using Python 3.12.14 at 2026-09-29T14:48:55.196184+00:00.
Case digest / 18f2f959ce423f51949d8715dae4abc3d2885c55e224912f9c37c2bc2ef6cc1d