{
  "version": "2026-09",
  "license": "CC0-1.0",
  "description": "Synthetic BaZi regression inputs with convention-specific expected checks. Not a prediction-accuracy benchmark.",
  "convention": {
    "timezone": "explicit IANA record zone",
    "time_basis": "standard unless explicitly apparent_solar",
    "day_rollover": "midnight unless explicitly 23",
    "hour_stem": "derived from selected day stem"
  },
  "sources": [
    {
      "id": "HKO_FEB_2024",
      "url": "https://www.hko.gov.hk/en/gts/astron2024/files/2024cal02.pdf",
      "checked": "2024-02-04 Li Chun 16:27 UTC+8; day 戊戌"
    },
    {
      "id": "HKO_AUG_2024",
      "url": "https://www.hko.gov.hk/en/gts/astron2024/files/2024cal08.pdf",
      "checked": "2024-08-07 Li Qiu 08:09 UTC+8; day 癸卯"
    },
    {
      "id": "IANA",
      "url": "https://www.iana.org/time-zones",
      "checked": "China historical DST and New York DST; named-zone conversion"
    },
    {
      "id": "NOAA",
      "url": "https://gml.noaa.gov/grad/solcalc/solareqns.PDF",
      "checked": "solar correction and equation of time"
    },
    {
      "id": "CLASSICAL",
      "title": "San Ming Tong Hui, month/hour stem derivation",
      "checked": "Five Tigers and Five Rats, including Wu/Gui → Ren-Zi"
    },
    {
      "id": "JADE_INPUTS",
      "url": "https://jadealmanac.com/bazi-calculator/conventions.json",
      "version": "1.2.0",
      "captured_at": "2026-08-01",
      "checked": "borrowed input design and frozen cross-implementation observations; not a current independent certification"
    }
  ],
  "limitations": [
    "Expected values cover specified fields and conventions only.",
    "Jade observations for no-city inputs are not evidence for its city-correction implementation.",
    "lunar-python and other 6tail libraries share ancestry and are not counted as independent astronomical evidence.",
    "Boundary times printed to a minute are tested one minute away, not treated as second-precision truth."
  ],
  "cases": [
    {
      "id": "BASE",
      "input": {
        "year": 1995,
        "month": 6,
        "day": 20,
        "hour": 10,
        "minute": 0,
        "gender": "m",
        "hour_mode": "24h",
        "timezone": "Asia/Shanghai",
        "time_basis": "standard",
        "day_rollover": "midnight"
      },
      "expected_status": 200,
      "expected": {
        "year_pillar": "乙亥",
        "month_pillar": "壬午",
        "day_pillar": "壬午",
        "hour_pillar": "乙巳"
      },
      "note": "Boundary input adapted from Jade Almanac CC0 v1.2.0; expected fields apply to our explicit settings, not every tool."
    },
    {
      "id": "A1",
      "input": {
        "year": 1985,
        "month": 2,
        "day": 10,
        "hour": 12,
        "minute": 0,
        "gender": "m",
        "hour_mode": "24h",
        "timezone": "Asia/Shanghai",
        "time_basis": "standard",
        "day_rollover": "midnight"
      },
      "expected_status": 200,
      "expected": {
        "year_pillar": "乙丑"
      },
      "note": "Boundary input adapted from Jade Almanac CC0 v1.2.0; expected fields apply to our explicit settings, not every tool."
    },
    {
      "id": "A2",
      "input": {
        "year": 1966,
        "month": 1,
        "day": 28,
        "hour": 12,
        "minute": 0,
        "gender": "m",
        "hour_mode": "24h",
        "timezone": "Asia/Shanghai",
        "time_basis": "standard",
        "day_rollover": "midnight"
      },
      "expected_status": 200,
      "expected": {
        "year_pillar": "乙巳"
      },
      "note": "Boundary input adapted from Jade Almanac CC0 v1.2.0; expected fields apply to our explicit settings, not every tool."
    },
    {
      "id": "B1",
      "input": {
        "year": 1990,
        "month": 6,
        "day": 15,
        "hour": 23,
        "minute": 30,
        "gender": "m",
        "hour_mode": "24h",
        "timezone": "Asia/Shanghai",
        "time_basis": "standard",
        "day_rollover": "midnight"
      },
      "expected_status": 200,
      "expected": {
        "day_pillar": "辛亥",
        "hour_pillar": "己亥"
      },
      "note": "Boundary input adapted from Jade Almanac CC0 v1.2.0; expected fields apply to our explicit settings, not every tool. This date was in Chinese daylight saving. These records become 22:30 and 21:30 standard time; they do NOT isolate late-Zi rollover."
    },
    {
      "id": "B2",
      "input": {
        "year": 1990,
        "month": 6,
        "day": 15,
        "hour": 22,
        "minute": 30,
        "gender": "m",
        "hour_mode": "24h",
        "timezone": "Asia/Shanghai",
        "time_basis": "standard",
        "day_rollover": "midnight"
      },
      "expected_status": 200,
      "expected": {
        "day_pillar": "辛亥",
        "hour_pillar": "己亥"
      },
      "note": "Boundary input adapted from Jade Almanac CC0 v1.2.0; expected fields apply to our explicit settings, not every tool. This date was in Chinese daylight saving. These records become 22:30 and 21:30 standard time; they do NOT isolate late-Zi rollover."
    },
    {
      "id": "C1",
      "input": {
        "year": 1988,
        "month": 2,
        "day": 4,
        "hour": 22,
        "minute": 0,
        "gender": "m",
        "hour_mode": "24h",
        "timezone": "Asia/Shanghai",
        "time_basis": "standard",
        "day_rollover": "midnight"
      },
      "expected_status": 200,
      "expected": {
        "year_pillar": "丁卯",
        "month_pillar": "癸丑"
      },
      "note": "Boundary input adapted from Jade Almanac CC0 v1.2.0; expected fields apply to our explicit settings, not every tool."
    },
    {
      "id": "C2",
      "input": {
        "year": 1988,
        "month": 2,
        "day": 4,
        "hour": 23,
        "minute": 0,
        "gender": "m",
        "hour_mode": "24h",
        "timezone": "Asia/Shanghai",
        "time_basis": "standard",
        "day_rollover": "midnight"
      },
      "expected_status": 200,
      "expected": {
        "year_pillar": "戊辰",
        "month_pillar": "甲寅"
      },
      "note": "Boundary input adapted from Jade Almanac CC0 v1.2.0; expected fields apply to our explicit settings, not every tool."
    },
    {
      "id": "D1",
      "input": {
        "year": 1995,
        "month": 6,
        "day": 15,
        "hour": 9,
        "minute": 20,
        "gender": "m",
        "hour_mode": "24h",
        "timezone": "Asia/Shanghai",
        "time_basis": "apparent_solar",
        "day_rollover": "midnight",
        "longitude": 75.9
      },
      "expected_status": 200,
      "expected": {
        "hour_pillar": "癸卯"
      },
      "note": "Boundary input adapted from Jade Almanac CC0 v1.2.0; expected fields apply to our explicit settings, not every tool."
    },
    {
      "id": "D2",
      "input": {
        "year": 1995,
        "month": 6,
        "day": 15,
        "hour": 9,
        "minute": 20,
        "gender": "m",
        "hour_mode": "24h",
        "timezone": "Asia/Shanghai",
        "time_basis": "apparent_solar",
        "day_rollover": "midnight",
        "longitude": 116.4
      },
      "expected_status": 200,
      "expected": {
        "hour_pillar": "乙巳"
      },
      "note": "Boundary input adapted from Jade Almanac CC0 v1.2.0; expected fields apply to our explicit settings, not every tool."
    },
    {
      "id": "E1",
      "input": {
        "year": 1988,
        "month": 7,
        "day": 15,
        "hour": 15,
        "minute": 30,
        "gender": "m",
        "hour_mode": "24h",
        "timezone": "Asia/Shanghai",
        "time_basis": "standard",
        "day_rollover": "midnight"
      },
      "expected_status": 200,
      "expected": {
        "hour_pillar": "乙未"
      },
      "note": "Boundary input adapted from Jade Almanac CC0 v1.2.0; expected fields apply to our explicit settings, not every tool."
    },
    {
      "id": "E2",
      "input": {
        "year": 1988,
        "month": 11,
        "day": 15,
        "hour": 15,
        "minute": 30,
        "gender": "m",
        "hour_mode": "24h",
        "timezone": "Asia/Shanghai",
        "time_basis": "standard",
        "day_rollover": "midnight"
      },
      "expected_status": 200,
      "expected": {
        "hour_pillar": "壬申"
      },
      "note": "Boundary input adapted from Jade Almanac CC0 v1.2.0; expected fields apply to our explicit settings, not every tool."
    },
    {
      "id": "F1",
      "input": {
        "year": 2024,
        "month": 8,
        "day": 7,
        "hour": 8,
        "minute": 0,
        "gender": "m",
        "hour_mode": "24h",
        "timezone": "Asia/Shanghai",
        "time_basis": "standard",
        "day_rollover": "midnight"
      },
      "expected_status": 200,
      "expected": {
        "year_pillar": "甲辰",
        "month_pillar": "辛未",
        "day_pillar": "癸卯",
        "hour_pillar": "丙辰"
      },
      "note": "Boundary input adapted from Jade Almanac CC0 v1.2.0; expected fields apply to our explicit settings, not every tool."
    },
    {
      "id": "F2",
      "input": {
        "year": 2024,
        "month": 8,
        "day": 7,
        "hour": 9,
        "minute": 0,
        "gender": "m",
        "hour_mode": "24h",
        "timezone": "Asia/Shanghai",
        "time_basis": "standard",
        "day_rollover": "midnight"
      },
      "expected_status": 200,
      "expected": {
        "year_pillar": "甲辰",
        "month_pillar": "壬申",
        "day_pillar": "癸卯",
        "hour_pillar": "丁巳"
      },
      "note": "Boundary input adapted from Jade Almanac CC0 v1.2.0; expected fields apply to our explicit settings, not every tool."
    },
    {
      "id": "HKO_LICHUN_BEFORE",
      "input": {
        "year": 2024,
        "month": 2,
        "day": 4,
        "hour": 16,
        "minute": 26,
        "gender": "m",
        "hour_mode": "24h",
        "timezone": "Asia/Shanghai",
        "time_basis": "standard",
        "day_rollover": "midnight"
      },
      "expected_status": 200,
      "expected": {
        "year_pillar": "癸卯",
        "month_pillar": "乙丑",
        "day_pillar": "戊戌"
      }
    },
    {
      "id": "HKO_LICHUN_AFTER",
      "input": {
        "year": 2024,
        "month": 2,
        "day": 4,
        "hour": 16,
        "minute": 28,
        "gender": "m",
        "hour_mode": "24h",
        "timezone": "Asia/Shanghai",
        "time_basis": "standard",
        "day_rollover": "midnight"
      },
      "expected_status": 200,
      "expected": {
        "year_pillar": "甲辰",
        "month_pillar": "丙寅",
        "day_pillar": "戊戌"
      }
    },
    {
      "id": "ZI_MIDNIGHT",
      "input": {
        "year": 1995,
        "month": 6,
        "day": 15,
        "hour": 23,
        "minute": 30,
        "gender": "m",
        "hour_mode": "24h",
        "timezone": "Asia/Shanghai",
        "time_basis": "standard",
        "day_rollover": "midnight"
      },
      "expected_status": 200,
      "expected": {
        "day_pillar": "丁丑",
        "hour_pillar": "庚子"
      }
    },
    {
      "id": "ZI_23",
      "input": {
        "year": 1995,
        "month": 6,
        "day": 15,
        "hour": 23,
        "minute": 30,
        "gender": "m",
        "hour_mode": "24h",
        "timezone": "Asia/Shanghai",
        "time_basis": "standard",
        "day_rollover": "23"
      },
      "expected_status": 200,
      "expected": {
        "day_pillar": "戊寅",
        "hour_pillar": "壬子"
      }
    },
    {
      "id": "NY_SUMMER_STANDARD",
      "input": {
        "year": 2024,
        "month": 7,
        "day": 1,
        "hour": 15,
        "minute": 30,
        "gender": "m",
        "hour_mode": "24h",
        "timezone": "America/New_York",
        "time_basis": "standard",
        "day_rollover": "midnight"
      },
      "expected_status": 200,
      "expected": {
        "true_solar_hour": 14.5
      }
    },
    {
      "id": "NY_DST_GAP",
      "input": {
        "year": 2024,
        "month": 3,
        "day": 10,
        "hour": 2,
        "minute": 30,
        "gender": "m",
        "hour_mode": "24h",
        "timezone": "America/New_York",
        "time_basis": "standard",
        "day_rollover": "midnight"
      },
      "expected_status": 400,
      "expected": {}
    },
    {
      "id": "NY_DST_OVERLAP",
      "input": {
        "year": 2024,
        "month": 11,
        "day": 3,
        "hour": 1,
        "minute": 30,
        "gender": "m",
        "hour_mode": "24h",
        "timezone": "America/New_York",
        "time_basis": "standard",
        "day_rollover": "midnight"
      },
      "expected_status": 400,
      "expected": {}
    },
    {
      "id": "UNKNOWN_ORDINARY",
      "input": {
        "year": 1995,
        "month": 6,
        "day": 20,
        "hour": 12,
        "minute": 0,
        "gender": "m",
        "hour_mode": "unknown",
        "timezone": "Asia/Shanghai",
        "time_basis": "standard",
        "day_rollover": "midnight"
      },
      "expected_status": 200,
      "expected": {
        "hour_pillar": null,
        "dayun": null
      }
    },
    {
      "id": "UNKNOWN_TERM_DAY",
      "input": {
        "year": 2024,
        "month": 8,
        "day": 7,
        "hour": 12,
        "minute": 0,
        "gender": "m",
        "hour_mode": "unknown",
        "timezone": "Asia/Shanghai",
        "time_basis": "standard",
        "day_rollover": "midnight"
      },
      "expected_status": 200,
      "expected": {
        "hour_pillar": null,
        "month_pillar": null
      }
    },
    {
      "id": "INVALID_DATE",
      "input": {
        "year": 2023,
        "month": 2,
        "day": 29,
        "hour": 12,
        "minute": 0,
        "gender": "m",
        "hour_mode": "24h",
        "timezone": "Asia/Shanghai",
        "time_basis": "standard",
        "day_rollover": "midnight"
      },
      "expected_status": 400,
      "expected": {}
    }
  ]
}