Method
Calculation first
Unifate never asks a language model to invent pillars, planets, palaces, or oracle draws. A domain engine consumes declared birth or cast inputs and emits structured evidence. Wiki articles define doctrine. The model may only narrate what those two sources contain.
Unknown hour and DST
Unknown birth time is stored as unknown. We do not silently fill noon. Historical daylight saving is recorded as a dstPolicy on the profile; Phase 0 does not guess an offset.
Receipts
Every later chart carries a calculation receipt: engine id, version, policy, UTC candidates, and warnings. Phase 0 ships the type and a visible stub so the UI contract exists before the Bazi engine is wired in Phase 1.
Calculation receipt
{
"engineId": "unifate-stub",
"engineVersion": "0.0.0-phase0",
"policyId": "unifate-phase0-receipt-stub",
"normalizedUtcCandidates": [
"1998-12-13T04:00:00.000Z"
],
"warnings": [
"Phase 0 stub: no chart engine ran. Identical inputs will produce a receipt starting in Phase 1.",
"Historical DST is stored as dstPolicy on the birth profile; Phase 0 does not guess offsets."
]
}