{
  "scope": "Seven generated minute-precision cases, four named regions/UTC using this machine's bundled zone files. Not a real meeting or current global timezone-rules certification. No installation or calendar access.",
  "zone_files": [
    {
      "zone": "America/New_York",
      "sha256": "e9ed07d7bee0c76a9d442d091ef1f01668fee7c4f26014c0a868b19fe6c18a95"
    },
    {
      "zone": "Asia/Seoul",
      "sha256": "2c8f4bb15dd77090b497e2a841ff3323ecbbae4f9dbb9edead2f8dd8fb5d8bb4"
    },
    {
      "zone": "Asia/Kathmandu",
      "sha256": "fd1b1f79259b0abf24338611262ed7bfa8401221d6d7820586c5ec7e16cf8e83"
    },
    {
      "zone": "UTC",
      "sha256": "8b85846791ab2c8a5463c83a5be3c043e2570d7448434d41398969ed47e3e6f2"
    }
  ],
  "cases": [
    {
      "start": "2026-03-08T01:30-05:00",
      "end": "2026-03-08T03:30-04:00",
      "wall_minutes": 120,
      "offset_change_minutes": 60,
      "elapsed_minutes": 60,
      "direct_python_subtraction_minutes": 120,
      "start_utc": "2026-03-08T06:30+00:00",
      "end_utc": "2026-03-08T07:30+00:00",
      "id": "spring"
    },
    {
      "start": "2026-11-01T00:30-04:00",
      "end": "2026-11-01T02:30-05:00",
      "wall_minutes": 120,
      "offset_change_minutes": -60,
      "elapsed_minutes": 180,
      "direct_python_subtraction_minutes": 120,
      "start_utc": "2026-11-01T04:30+00:00",
      "end_utc": "2026-11-01T07:30+00:00",
      "id": "fall-span"
    },
    {
      "start": "2026-11-01T01:30-04:00",
      "end": "2026-11-01T01:30-05:00",
      "wall_minutes": 0,
      "offset_change_minutes": -60,
      "elapsed_minutes": 60,
      "direct_python_subtraction_minutes": 0,
      "start_utc": "2026-11-01T05:30+00:00",
      "end_utc": "2026-11-01T06:30+00:00",
      "id": "fall-repeat"
    },
    {
      "start": "2026-10-24T23:30+09:00",
      "end": "2026-10-25T00:30+09:00",
      "wall_minutes": 60,
      "offset_change_minutes": 0,
      "elapsed_minutes": 60,
      "direct_python_subtraction_minutes": 60,
      "start_utc": "2026-10-24T14:30+00:00",
      "end_utc": "2026-10-24T15:30+00:00",
      "id": "midnight"
    },
    {
      "start": "2026-10-25T09:00+09:00",
      "end": "2026-10-25T00:00+00:00",
      "wall_minutes": -540,
      "offset_change_minutes": -540,
      "elapsed_minutes": 0,
      "direct_python_subtraction_minutes": 0,
      "start_utc": "2026-10-25T00:00+00:00",
      "end_utc": "2026-10-25T00:00+00:00",
      "id": "same-instant"
    },
    {
      "start": "2026-10-25T09:00+09:00",
      "end": "2026-10-25T10:00+09:00",
      "wall_minutes": 60,
      "offset_change_minutes": 0,
      "elapsed_minutes": 60,
      "direct_python_subtraction_minutes": 60,
      "start_utc": "2026-10-25T00:00+00:00",
      "end_utc": "2026-10-25T01:00+00:00",
      "id": "ordinary"
    },
    {
      "start": "2026-10-25T09:00+05:45",
      "end": "2026-10-25T03:30+00:00",
      "wall_minutes": -330,
      "offset_change_minutes": -345,
      "elapsed_minutes": 15,
      "direct_python_subtraction_minutes": 15,
      "start_utc": "2026-10-25T03:15+00:00",
      "end_utc": "2026-10-25T03:30+00:00",
      "id": "quarter-offset"
    }
  ],
  "invalid_inputs": [
    {
      "id": "nonexistent-spring",
      "result": "expected_rejection",
      "reason": "nonexistent local time"
    },
    {
      "id": "ambiguous-without-fold",
      "result": "expected_rejection",
      "reason": "ambiguous: choose fold"
    },
    {
      "id": "bad-date",
      "result": "expected_rejection",
      "reason": "day is out of range for month"
    },
    {
      "id": "bad-fold",
      "result": "expected_rejection",
      "reason": "invalid fold"
    },
    {
      "id": "missing-offset",
      "result": "expected_rejection",
      "reason": "offset required"
    },
    {
      "id": "reversed-utc",
      "result": "expected_rejection",
      "reason": "range"
    }
  ],
  "python_semantics_note": "Direct subtraction with the same tzinfo intentionally follows clock labels; convert to UTC for elapsed-time comparison. This observed difference is documented Python behavior, not a program failure.",
  "browser_module_crosscheck": {
    "actual_module": "/time-lab.mjs",
    "matched_cases": 7,
    "same_author_not_independent_review": true
  }
}
