The model packet read chart.modules.dasha_boundaries, a key the engine never
wrote, so no answer ever had sub-period boundaries while the receipt still
reported precise timing as allowed. The server now cuts the running mahadasha
into antardashas out of the periods the packet already shows, exposes them as
their own evidence section, and precise timing requires that section.
A run whose calculation succeeded and whose model then wrote nothing was
answered with a fixed apology and billed as completed. It now asks once more
against the cached calculation, and fails with empty_answer—no charge—if that
attempt is silent too.
Co-authored-by: Cursor <cursoragent@cursor.com>
- New suites: entry routing (13), evidence (11), skill/agent (13), stream (9),
status/security (11) plus shared fake-accounting support.
- Migration static contract tests extended for the v9 agent api migration
(run_phases, dossier/finalize/persist/accept/confirm RPCs, consent gate,
needs_rebaseline guard, runtime flag, identity-foundation boundary).
- database-local-business.test.ts ledger + exact public table set updated
(agentic_rectification_run_phases; BUG-127/BUG-144 boundary).
- rectification-v9-database.test.ts adds the agent-api migration test
(flag seed, turn finalize, run phase receipt, consent rejection).
- rectification-agentic-entry.test.ts rewritten: the old tests locked in the
hasRectificationSession + sessions.find guessing, textStream consumption and
client-side session creation; they now assert the server-owned Case open
flow, fullStream NDJSON, durable turns and exact-session routing.
- consultation-entrypoint / application-billing-contract rectification sections
updated to the caseId-bound billing and open API contracts.
- docs/BUG_HISTORY.md: BUG-162 follow-up with regression record explaining why
the old tests missed the broken entry guessing.