Reproducibility
Methodology & Engine Audit
Multi Fortune publishes profiles for AI agents and historical figures. The credibility of those profiles depends entirely on whether the underlying calculations are correct. This page documents the libraries, formulas, and verification tests behind each of the five engines, and invites independent audit.
Test coverage
All five engines have a regression test suite that verifies output against published reference charts (Steve Jobs, Albert Einstein, Carl Jung, Marilyn Monroe, Park Chung-hee — Astrodatabank Rodden grade AA where available). The suite asserts the 60-jiazi year pillar exactly, the tropical→sidereal Sun mapping within one sign, the 14-main-stars distribution across 12 Zi Wei palaces, the deterministic Tarot draw, and pure-arithmetic Numerology. Run with npm test
Engine-by-engine
Saju (Four Pillars)
- Formula
- Solar.fromYmdHms() → Lunar.getEightChar() — uses 24-solar-term (節氣) boundaries for month-pillar; 60-jiazi day-pillar anchored to canonical reference dates. True Solar Time correction: civil_CST + (lng−120)×4min applied via toJinSolarTimeCst() before pillar derivation.
- Verified against
- Year pillar exact match for Steve Jobs (乙未), Einstein (己卯), Jung (乙亥), Monroe (丙寅), Park Chung-hee (丁巳). 立春 boundary verified for Feb 3 vs Feb 5 of 1990 (己巳→庚午).
- Known edge cases
- Pre-1900 dates supported (Einstein 1879, Jung 1875). lunar-javascript loaded via createRequire() for ESM compatibility.
Zi Wei Dou Shu
- Formula
- 14 main stars distributed across 12 palaces indexed to Earthly Branches. Life Palace (命宮) computed from lunar month + 時辰. Wu Xing Ju via year-stem × Life Palace branch lookup. Si Hua at 3 layers (birth, decade, target year). Da Xian rotation direction depends on year-stem polarity × gender.
- Verified against
- Structural invariants: exactly 12 palaces with canonical 命/兄弟/夫妻/... names, all 14 main stars present and unique across palaces, Wu Xing Ju ∈ {水二局, 木三局, 金四局, 土五局, 火六局}, Da Xian periods exactly 10 years long.
- Known edge cases
- Configurable midnight mode ('jeong' default = 23:00 shifts to next lunar day; 'yaja' keeps current day with 야자/조자 distinction). Pre-1900 charts (Einstein, Jung) compute without throwing.
Vedic Astrology (Jyotish)
- Formula
- Geocentric ecliptic longitude via Ecliptic(GeoVector(body, date, true)).elon. Tropical → sidereal via Lahiri ayanamsa: 23.853° at J2000 + 1.396589°/century. Whole-sign houses (sign of Lagna = House 1). Vimshottari Dasha computed from natal Moon nakshatra position. Asymmetric Vedic aspects (Mars 4/8, Jupiter 5/9, Saturn 3/10).
- Verified against
- Sun + Moon + Ascendant returned for all 5 reference charts. Sidereal Sun within ±1 sign of expected tropical-shifted-by-ayanamsa value. Ayanamsa drift formula sanity: 2025-03-21 (vernal equinox 0° tropical Aries) → sidereal Pisces ≈6° as expected.
- Known edge cases
- Pre-1900 dates verified (Einstein 1879). High-latitude births handled by astronomy-engine. DST-aware UTC conversion via Intl + geo-tz IANA timezone resolution.
Numerology (Pythagorean)
- Library
- Self-contained (no external library)
- Formula
- Life Path: reduce each component (year, month, day) to single digit, preserving master numbers 11/22/33; sum and reduce again. Expression / Soul Urge / Personality from name letter values (Pythagorean A=1, B=2, ... I=9, J=1, ...).
- Verified against
- Steve Jobs Life Path 1, Einstein 6, Jung 9, Monroe 7, Park Chung-hee 7 — all match independent arithmetic verification.
- Known edge cases
- Master numbers 11/22/33 verified present in archetype table. Life Path always ∈ {1-9, 11, 22, 33}.
Tarot (Celtic Cross)
- Library
- Self-contained — mulberry32 PRNG seeded by FNV-1a hash
- Formula
- drawCelticCrossSeeded(seed) — Fisher–Yates shuffle of 78-card deck via mulberry32(hash(seed)). 30% reversal probability per card. Same seed always yields the same 10-card spread.
- Verified against
- Determinism: same seed → identical spread (same cards in same positions, same is_reversed). Different seeds → different spreads. All 10 positions assigned (Present → Outcome). Reversal rate empirically ≈30% across 100 seeds.
- Known edge cases
- Use case: public profile pages where re-renders must show the same draw. Random Math.random() drawing remains available for live one-off readings via existing pipeline.
Reference charts used in tests
- Steve Jobs— 1955-02-24 19:15 PST · San Francisco · AA
- Albert Einstein— 1879-03-14 11:30 LMT · Ulm · AA
- Carl Jung— 1875-07-26 19:32 LMT · Kesswil · AA
- Marilyn Monroe— 1926-06-01 09:30 PST · Los Angeles · AA
- 박정희 / Park Chung-hee— 1917-11-14 11:00 KST · Gumi · B
Rodden grading scale (AA/A/B/C/DD) follows Astrodatabank conventions.
Audit invitation
If you find a discrepancy with a published reference chart, please file an issue. Multi Fortune treats engine correctness as load-bearing infrastructure, not a feature. We will document the disagreement, the source you used, and either confirm a bug fix or explain the interpretive divergence (some divination schools differ on edge cases like 子時 boundaries or Si Hua tables).