FA-74301 / Feature flag rollout bucketing / Open access
Timestamp targeting clause: Offset timestamps are read as UTC · case 01
A clause user value of 23:13:20+01:00 is treated as 23:13:20 UTC, an hour late.
ROOT CAUSE
The parser reads the first 19 characters and ignores whatever zone suffix follows.
VERIFIED REPAIR
Accept only strings ending in "Z" with the exact 20-character layout.
Unsuccessful approach: Also accepting "+00:00" admits a spelling the contract rejects.
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) >= 19:
try:
d = datetime.datetime.strptime(v[:19], '%Y-%m-%dT%H:%M:%S').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),
('explicit UTC offset spelling is unusable', ['2023-11-14T22:13:20+00:00', 'before', 1800000000000], False),
('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),
('explicit UTC offset spelling is unusable', ['2023-11-14T22:13:20+00:00', 'before', 1800000000000], False),
('timestamp pair sample 6', [True, 'after', 1700000000001], False),
('timestamp pair sample 24', ['2023-11-14T23:13:20+01:00', '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),
('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 12', ['2023-11-14T22:13:21Z', 'after', 1700000000001], True),
('timestamp pair sample 13', [1700000000, 'before', 1700000000], 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),
('timestamp pair sample 16', ['2023-11-14T22:13:20Z', 'before', True], False),
('timestamp pair sample 17', [1699999999999, 'before', 1], False),
('timestamp pair sample 24', ['2023-11-14T23:13:20+01:00', 'after', 0], 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 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),
('timestamp pair sample 23', [1700000000, 'before', False], 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 |
| explicit UTC offset spelling is unusable | True | False | Failed |
| timestamp pair sample 1 | False | False | Passed |
| timestamp pair sample 2 | True | True | Passed |
SHA-256 / 16d2ddfc9906772f9090db8586856ac7964e1061de26f7c162c67ba74445cafa
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') or len(v) == 25 and v.endswith('+00:00')):
try:
d = datetime.datetime.strptime(v[:19] + 'Z', '%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),
('explicit UTC offset spelling is unusable', ['2023-11-14T22:13:20+00:00', 'before', 1800000000000], False),
('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),
('explicit UTC offset spelling is unusable', ['2023-11-14T22:13:20+00:00', 'before', 1800000000000], False),
('timestamp pair sample 6', [True, 'after', 1700000000001], False),
('timestamp pair sample 24', ['2023-11-14T23:13:20+01:00', '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),
('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 12', ['2023-11-14T22:13:21Z', 'after', 1700000000001], True),
('timestamp pair sample 13', [1700000000, 'before', 1700000000], 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),
('timestamp pair sample 16', ['2023-11-14T22:13:20Z', 'before', True], False),
('timestamp pair sample 17', [1699999999999, 'before', 1], False),
('timestamp pair sample 24', ['2023-11-14T23:13:20+01:00', 'after', 0], 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 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),
('timestamp pair sample 23', [1700000000, 'before', False], 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 |
| explicit UTC offset spelling is unusable | True | False | Failed |
| timestamp pair sample 1 | False | False | Passed |
| timestamp pair sample 2 | True | True | Passed |
SHA-256 / a29fd4e4f3d52507423f2f8694e3fbe5d44a8b28c8c707324c1da166e5cd30c1
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),
('explicit UTC offset spelling is unusable', ['2023-11-14T22:13:20+00:00', 'before', 1800000000000], False),
('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),
('explicit UTC offset spelling is unusable', ['2023-11-14T22:13:20+00:00', 'before', 1800000000000], False),
('timestamp pair sample 6', [True, 'after', 1700000000001], False),
('timestamp pair sample 24', ['2023-11-14T23:13:20+01:00', '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),
('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 12', ['2023-11-14T22:13:21Z', 'after', 1700000000001], True),
('timestamp pair sample 13', [1700000000, 'before', 1700000000], 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),
('timestamp pair sample 16', ['2023-11-14T22:13:20Z', 'before', True], False),
('timestamp pair sample 17', [1699999999999, 'before', 1], False),
('timestamp pair sample 24', ['2023-11-14T23:13:20+01:00', 'after', 0], 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 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),
('timestamp pair sample 23', [1700000000, 'before', False], 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 |
| explicit UTC offset spelling is unusable | False | False | Passed |
| timestamp pair sample 1 | False | False | Passed |
| timestamp pair sample 2 | True | True | Passed |
SHA-256 / f2cc9336bc23d6c802aab61f7c5c4c0768367292290a32867594d110b9637471
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.381625+00:00.
Case digest / b8d415bd1a1292ac4bfc98c744962c1a08fa1184b284c86a94d8c8ceb4a0d9a0