FA-306 / Time representation / Open access
Sorting local timestamp text reverses the order of absolute instants · case 01
An event with a later wall-clock reading is placed after an event that actually occurred later in UTC.
ROOT CAUSE
Timestamp text or timezone-stripped wall time is treated as the ordering key.
VERIFIED REPAIR
Parse each explicit offset and compare UTC instants, preserving input order for equal instants.
Unsuccessful approach: Parsing timestamps but discarding their timezone information still compares wall clocks from different offsets.
Case contract
Given [identifier, ISO timestamp] records with explicit numeric offsets, return identifiers in increasing absolute-time order. Keep input order for ties. This models explicit fixed offsets only, not named-zone DST resolution.
Why this case matters
Correlating logs from different offsets requires a common time basis. Text sorting is safe only under a much narrower normalized-format contract.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
from datetime import datetime, timezone
N = 1
observations = []
def solve(records):
return [record[0] for record in sorted(records, key=lambda record: record[1])]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
offset = N + 1
check('positive offset reverses wall-clock order', solve([['east', f'2024-01-01T10:00:00+{offset:02d}:00'], ['utc', '2024-01-01T09:00:00+00:00']]), ['east', 'utc'])
check('negative offset reverses wall-clock order', solve([['west', '2024-01-01T08:00:00-05:00'], ['utc', '2024-01-01T12:00:00+00:00']]), ['utc', 'west'])
check('equal instants keep input order', solve([['first', '2024-01-01T10:00:00+02:00'], ['second', '2024-01-01T08:00:00+00:00']]), ['first', 'second'])
check('offset crosses calendar date', solve([['next-local-day', '2024-01-02T00:00:00+14:00'], ['same-utc-day', '2024-01-01T23:00:00+00:00']]), ['next-local-day', 'same-utc-day'])
check('fractional seconds retain order', solve([['later', '2024-01-01T00:00:00.002000+00:00'], ['earlier', '2024-01-01T00:00:00.001000+00:00']]), ['earlier', 'later'])
check('single record', solve([['only', f'2024-01-0{N}T00:00:00+00:00']]), ['only'])
check('no records', solve([]), [])
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 |
|---|---|---|---|
| positive offset reverses wall-clock order | ['utc', 'east'] | ['east', 'utc'] | Failed |
| negative offset reverses wall-clock order | ['west', 'utc'] | ['utc', 'west'] | Failed |
| equal instants keep input order | ['second', 'first'] | ['first', 'second'] | Failed |
| offset crosses calendar date | ['same-utc-day', 'next-local-day'] | ['next-local-day', 'same-utc-day'] | Failed |
| fractional seconds retain order | ['earlier', 'later'] | ['earlier', 'later'] | Passed |
| single record | ['only'] | ['only'] | Passed |
| no records | [] | [] | Passed |
SHA-256 / 185b2aa41d676c10b81bdeda9123bb920605ebc1167a01e51022257432b1e1dc
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
from datetime import datetime, timezone
N = 1
observations = []
def solve(records):
return [record[0] for record in sorted(records, key=lambda record: datetime.fromisoformat(record[1]).replace(tzinfo=None))]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
offset = N + 1
check('positive offset reverses wall-clock order', solve([['east', f'2024-01-01T10:00:00+{offset:02d}:00'], ['utc', '2024-01-01T09:00:00+00:00']]), ['east', 'utc'])
check('negative offset reverses wall-clock order', solve([['west', '2024-01-01T08:00:00-05:00'], ['utc', '2024-01-01T12:00:00+00:00']]), ['utc', 'west'])
check('equal instants keep input order', solve([['first', '2024-01-01T10:00:00+02:00'], ['second', '2024-01-01T08:00:00+00:00']]), ['first', 'second'])
check('offset crosses calendar date', solve([['next-local-day', '2024-01-02T00:00:00+14:00'], ['same-utc-day', '2024-01-01T23:00:00+00:00']]), ['next-local-day', 'same-utc-day'])
check('fractional seconds retain order', solve([['later', '2024-01-01T00:00:00.002000+00:00'], ['earlier', '2024-01-01T00:00:00.001000+00:00']]), ['earlier', 'later'])
check('single record', solve([['only', f'2024-01-0{N}T00:00:00+00:00']]), ['only'])
check('no records', solve([]), [])
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 |
|---|---|---|---|
| positive offset reverses wall-clock order | ['utc', 'east'] | ['east', 'utc'] | Failed |
| negative offset reverses wall-clock order | ['west', 'utc'] | ['utc', 'west'] | Failed |
| equal instants keep input order | ['second', 'first'] | ['first', 'second'] | Failed |
| offset crosses calendar date | ['same-utc-day', 'next-local-day'] | ['next-local-day', 'same-utc-day'] | Failed |
| fractional seconds retain order | ['earlier', 'later'] | ['earlier', 'later'] | Passed |
| single record | ['only'] | ['only'] | Passed |
| no records | [] | [] | Passed |
SHA-256 / 2c7fb19a50771c3a060a3bb13a561d86fe57b2a515e3adfe6ef557221ac408c8
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
from datetime import datetime, timezone
N = 1
observations = []
def solve(records):
return [record[0] for record in sorted(records, key=lambda record: datetime.fromisoformat(record[1]).astimezone(timezone.utc))]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
offset = N + 1
check('positive offset reverses wall-clock order', solve([['east', f'2024-01-01T10:00:00+{offset:02d}:00'], ['utc', '2024-01-01T09:00:00+00:00']]), ['east', 'utc'])
check('negative offset reverses wall-clock order', solve([['west', '2024-01-01T08:00:00-05:00'], ['utc', '2024-01-01T12:00:00+00:00']]), ['utc', 'west'])
check('equal instants keep input order', solve([['first', '2024-01-01T10:00:00+02:00'], ['second', '2024-01-01T08:00:00+00:00']]), ['first', 'second'])
check('offset crosses calendar date', solve([['next-local-day', '2024-01-02T00:00:00+14:00'], ['same-utc-day', '2024-01-01T23:00:00+00:00']]), ['next-local-day', 'same-utc-day'])
check('fractional seconds retain order', solve([['later', '2024-01-01T00:00:00.002000+00:00'], ['earlier', '2024-01-01T00:00:00.001000+00:00']]), ['earlier', 'later'])
check('single record', solve([['only', f'2024-01-0{N}T00:00:00+00:00']]), ['only'])
check('no records', solve([]), [])
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 |
|---|---|---|---|
| positive offset reverses wall-clock order | ['east', 'utc'] | ['east', 'utc'] | Passed |
| negative offset reverses wall-clock order | ['utc', 'west'] | ['utc', 'west'] | Passed |
| equal instants keep input order | ['first', 'second'] | ['first', 'second'] | Passed |
| offset crosses calendar date | ['next-local-day', 'same-utc-day'] | ['next-local-day', 'same-utc-day'] | Passed |
| fractional seconds retain order | ['earlier', 'later'] | ['earlier', 'later'] | Passed |
| single record | ['only'] | ['only'] | Passed |
| no records | [] | [] | Passed |
SHA-256 / 1a8d37a19600895d654cba9ff5dd669da48c29ddf6c5e42bc6cbca5c90371654
Verification & scope
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:36:52.069144+00:00.
Case digest / 0448bf1e33ccbf1d1bbcba01499cd1a18b8a424ce15e4971ebd210853d6787b4