methodology verified computation
computed, not generated — every number on your chart is reproducible from public math
the engine
- Day pillar — a pure Julian-day count, exact and checkable by hand. 2000-01-01 = 戊午; that anchor calibrates every other day.
- Year and month pillars — the true solar-term boundaries (立春 for the year; the 12 节 for the months), computed with the VSOP87D planetary series, nutation, ΔT, and the equation of time.
- Hour pillar — two schools, both shown: clock time and 真太阳时 true solar time (longitude + equation of time). No school is chosen for you silently.
- Doctrine tables — 十神, 藏干, 纳音, 空亡, 大运 / 起运, 合冲刑害, 神煞 — pinned test-by-test against an independent Python oracle (lunar_python) in CI.
how we verify
- The oracle gate — a Python reference implementation (skyfield + JPL DE421 ephemeris, lunar_python) regenerates the pinned fixtures on every CI run; the TypeScript engine must byte-match. The badge is the trust artifact.
- Precision targets — solar-term times within ±120 seconds of skyfield+DE421; equation of time within ±30 seconds.
- Independent review — every engine sprint is reviewed by a fresh, independent code reviewer before it is accepted; findings are fixed and pinned as regression tests.
- Open source — MIT-licensed. Anyone can rerun the corpus, the fixtures, and the tests. Nothing here depends on our say-so.
boundary honesty
- A birth within ±1 minute of a 节 gets an explicit warning: the pillar may split across schools. The app says so instead of guessing.
- Unknown birth hour? The app supports it as a question mark — better an honest gap than a fabricated pillar.
- Both hour schools (clock / true solar) are always displayed with their school named.
data, plainly
Computing runs in your browser, and there is no account to make. But this is a research commons: entering your birth data is consent — every chart computed here becomes a research record (the birth inputs you entered plus everything derived from them: pillars, 十神, 藏干, 纳音, 空亡, 大运). Records are held under covenant and are deletable from the intake page; they are queued in this browser until the commons endpoint ships.
If that trade is not for you, close the tab — the engine is MIT-licensed and can be run offline from source, no data kept by anyone.