Most BaZi tools compute in secret and present output as oracles. We do the opposite: every convention that shapes your chart is declared below, every boundary case is covered by a permanent test suite, and every bug we have ever found is published in a corrections log. If a chart can't be audited, it can't be trusted.
Charts are computed by the open-source lunar-javascript astronomical calendar library (maintained by 6tail), wrapped in our own convention layer — BaZi Engine v0.3.2 — which handles true solar time, time zones, daylight saving, the midnight rule, and ten-god attribution. The same engine code powers this website and our backend test rig, verified by an automated regression suite of 33 boundary cases that compares every pillar, hidden stem, ten god, and NaYin between the two implementations. When the two ever disagree, the site build fails.
The year changes at the exact Lìchūn (Start of Spring) instant — not at Lunar New Year. A Feb 3 vs Feb 4 birth can be different years.
Month pillars change at each Jié solar term — a single global astronomical moment. We compare your birth instant (in UTC) against the term table, never by calendar date.
Births at or after 23:00 roll the day pillar to the next day (Zi Ping mainstream, sect=1). The midnight rule is offered as a school option and your chart is labeled with the rule used.
Clock time is corrected by (birth longitude − timezone central meridian) × 4 min. The central meridian is always the timezone offset × 15 (UTC+8 → 120°E). The Equation of Time (±16 min) is not yet applied — planned for v2, and we will announce it here when it ships.
Solar-term boundaries are global moments, so the year and month pillars are determined by your birth instant converted to UTC — essential for far-longitude births near a term boundary. Day & hour pillars still use local true solar time, because the day rolls at local Zi hour.
Ten-god labels for the year and month stems are always computed against your actual day master — even when the absolute-instant chart has technically crossed into the next day (common for Americas births).
If you were born in mainland China between May 4 and Sep 14, 1986–1991, one hour is subtracted automatically and the correction is flagged on your result.
An unknown birth hour yields an explicit three-pillar chart — we never guess. Five-element counts are shown in three conventions (stems + branch main-qi / hidden stems half-weight / full), because counting is itself a school difference.
Some questions have no single right answer — only schools. Where a convention choice changes your chart, we don't hide it behind a default:
Clock vs true solar time A 15:30 birth corrected to 14:29 crosses from Wei hour to Shen hour. We compute true solar time and show the applied correction; charts built on raw clock time may show the adjacent hour. 23:00 vs midnight Both day-pillar rules are available; yours is labeled. Element counting Three conventions, side by side.
Every defect found in this engine, how it was found, and what changed. This log starts on day one — including the bugs below — because a methodology page without corrections is a marketing page.
| Date | Version | Defect & fix | How it was found |
|---|---|---|---|
| 2026-09-16 | v0.1 → v0.2 | True-solar baseline was hardcoded to 120°E (China's central meridian), breaking every overseas birth. Added explicit tzOffsetHours parameter (includes DST, e.g. London in July = UTC+1). | Manual expert spot-check: 1991-03-23 11:00 New York — correct chart 辛未 辛卯 壬辰 丙午. |
| 2026-09-16 | v0.2 → v0.3 | Year/month pillars now determined by the absolute instant (UTC) against the solar-term table; v0.2 fed local time where Beijing time was expected, mis-dating far-longitude births near a term boundary. | Manual expert spot-check: 1993-07-07 15:30 London. Xiǎoshǔ 1993 = Jul 7 10:32:02 Beijing (three independent sources agree); birth = 22:30 Beijing → after the term → month pillar Jǐ-Wèi (己未). A popular app showing Wù-Wǔ (戊午) switches months by date, not by instant. |
| 2026-09-16 | v0.3 → v0.3.1 | Ten-god labels for year/month stems were computed against the absolute-instant chart's day master, which has changed by the time an Americas birth converts to Beijing time. Ten gods are now always relative to the true day master. | Dual-engine regression suite (33 cases, pillar-by-pillar) built during the web port. |
| 2026-09-16 | v0.3.1 → v0.3.2 | The longitude-rounding heuristic for the true-solar baseline (e.g. Chengdu 104°E → 105°) contradicted the engine's own ±2h documentation for Ürümqi. Baseline is now always UTC-offset × 15, matching the textbook definition. | Dual-engine regression suite — the web port's first gate caught two convention-level defects before launch. |
33-case boundary suite Permanent fixtures covering Lìchūn boundaries, term-day crossovers (before/after the instant, down to the minute), late-Zi under both schools, unknown hour, the 1986–91 China DST window, extreme longitudes (Ürümqi −2h09m), cross-day overseas births, leap days, and full coverage of the ten day masters.
Dual-engine regression The browser engine and the backend engine are one shared implementation, rerun against all fixtures on every change; any drift fails the build.
Human expert gate A domain expert spot-checks boundary charts against trusted references. Both defects caught by this gate are in the log above — which is exactly why the gate stays.
BaZi is a traditional Chinese metaphysical framework for self-understanding and reflection — closer to a personality lens than a prediction machine. We make no claims about health, wealth, or the future, and nothing here is advice of any kind. Your birth data is used to compute your chart and nothing else.
Cast your chart →