FAILURE MAP
← Case archive

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.

Verified by executionVariant 1 · 7 checks per implementationDownload source bundle ↓JSON ↗

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 fixtureActualExpectedOutcome
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 fixtureActualExpectedOutcome
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 fixtureActualExpectedOutcome
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