Method
How the chart is computed
Deterministic calculation, published rules, and a language model that only writes prose.
The calculation is deterministic
A BaZi chart is produced by our own engine, published as spec v1.0.0. Given a birth date, a wall-clock time, an IANA time zone and a longitude, the engine resolves the historical civil time (including daylight-saving transitions and ambiguous local times), applies the equation-of-time correction for apparent solar time, and then computes the four pillars, the day master, stem labels, hidden stems and na yin. The city name is a display label only; the time zone and longitude are the values that affect the result.
Reproducibility
The spec ships with 24 golden vectors; 12 of them can be independently cross-checked against lunar_python 1.4.9 and all agree. Two rule choices that differ between traditions are published rather than hidden: the year pillar changes at 立春 rather than at the lunar new year, and the day changes at 23:00 rather than at midnight. A late-子时 stem difference is documented as a school divergence, not a defect.
What spec v1.0.0 does not compute
Decade-scale luck cycles, yearly and monthly cycles, date selection, favourable elements, pattern labels and the traditional symbolic catalogue are out of scope in v1.0.0. No report prints a value for them and the engine never invents one.
Where a language model is used
The model receives a fact pack of computed chart facts without identity or contact fields. It writes prose only; it never computes a pillar. Interpretive text is AI-assisted and human-edited, checked against a three-language glossary and a public list of sources. Where schools disagree, both readings are printed side by side.
Corrections
Factual and editorial corrections are recorded publicly with a date and a reason on the spec page. The version number of the calculation appears in every report.