Jesse_Chen
90bad10d6f
feat(report): carry engine interpretive facts into the evidence bundle
...
The consultation workflow already returns a functional benefic/malefic
table, a shadbala ranking, SAV scores, the current maha/antardasha,
detected yogas and guided-topic copy. The report extraction layer threw
all of it away, so claim cards could only say "the server closed the
minimum evidence group" and the writer had no conclusions to work from.
- ReportEvidenceBundleV2 gains interpretiveFacts (yogas, functionalRoles,
shadbalaRanking, savScores/savTotal, currentDasha, convergenceDomains)
and themeNarrativeSeeds. Both are required, allow empty, keep .strict(),
are covered by the canonical sort + bundleHash, and fail closed on
dangling refs, duplicate ranks/houses/themes and out-of-bound text.
- Extraction is allowlist-style: closed enums for yoga category and
functional role, safeCelestialName for planets, sign->whole-sign-house
projection for SAV, and a forbidden-token scrub that drops any seed line
naming an external provider or internal route.
- Claim card conclusions and supportingFacts are now deterministic
astrological statements built from those facts; risks become
counterFacts. assertionLevel derivation is unchanged, and a theme with
no seed keeps the old receipt wording with consensus capped down.
- filterReportEvidenceBundleForSection trims seeds and SAV houses to the
chapter's theme while letting the chart-wide interpretive receipts ride
along, so every section can cite them.
Contract snapshot taken from a real local /api/consultation_workflow call
with fictional smoke birth data; the new fixture test locks the shapes
that call actually returns, including the fields that are absent.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_016P5RoqzmUQEbeC2qjAkeGr
2026-09-01 20:35:02 +00:00
..
2026-08-15 07:06:19 +08:00
2026-08-18 19:30:13 +08:00
2026-08-22 20:48:01 +08:00
2026-08-30 16:32:58 +08:00
2026-08-16 14:07:57 +08:00
2026-08-17 13:14:15 +08:00
2026-08-18 17:28:22 +08:00
2026-08-31 19:57:08 +08:00
2026-08-07 18:24:16 +08:00
2026-08-08 01:38:50 +08:00
2026-08-16 17:55:15 +08:00
2026-08-08 17:29:17 +08:00
2026-08-17 11:41:35 +08:00
2026-08-16 17:55:15 +08:00
2026-08-06 20:15:50 +08:00
2026-08-18 17:28:22 +08:00
2026-08-31 03:06:15 +08:00
2026-08-16 17:55:15 +08:00
2026-08-25 19:31:14 +08:00
2026-08-23 17:02:06 +08:00
2026-08-15 07:06:19 +08:00
2026-08-31 09:59:53 +08:00
2026-08-19 19:40:50 +08:00
2026-08-22 09:10:47 +08:00
2026-08-27 13:59:38 +08:00
2026-09-01 19:51:19 +08:00
2026-08-07 12:07:57 +08:00
2026-07-30 14:38:17 +08:00
2026-09-01 22:58:02 +08:00
2026-07-20 14:58:57 +08:00
2026-07-19 14:48:02 +08:00
2026-07-22 17:39:11 +08:00
2026-07-21 16:06:30 +08:00
2026-07-19 10:56:09 +08:00
2026-07-20 14:45:08 +08:00
2026-09-01 22:58:02 +08:00
2026-07-19 09:12:45 +08:00
2026-07-19 08:25:33 +08:00
2026-07-19 10:12:18 +08:00
2026-07-21 15:50:02 +08:00
2026-07-19 04:38:20 +08:00
2026-07-21 22:16:18 +08:00
2026-07-19 09:12:45 +08:00
2026-07-19 09:12:45 +08:00
2026-07-19 09:12:45 +08:00
2026-07-19 09:12:45 +08:00
2026-07-19 09:12:45 +08:00
2026-07-19 04:57:43 +08:00
2026-07-19 04:38:20 +08:00
2026-07-19 14:48:02 +08:00
2026-07-19 09:12:45 +08:00
2026-07-21 22:16:18 +08:00
2026-07-19 14:48:02 +08:00
2026-07-19 09:24:23 +08:00
2026-07-19 07:50:23 +08:00
2026-07-19 07:50:23 +08:00
2026-07-19 09:12:45 +08:00
2026-07-21 22:16:18 +08:00
2026-07-21 22:16:18 +08:00
2026-07-19 08:25:33 +08:00
2026-07-18 18:40:23 +08:00
2026-07-19 22:23:29 +08:00
2026-07-19 09:45:32 +08:00
2026-07-19 11:04:25 +08:00
2026-07-19 14:51:06 +08:00
2026-07-18 18:40:23 +08:00
2026-07-18 18:40:23 +08:00
2026-07-18 18:40:23 +08:00
2026-07-20 14:58:57 +08:00
2026-07-20 11:44:56 +08:00
2026-08-17 22:13:03 +08:00
2026-08-22 20:48:01 +08:00
2026-07-18 18:40:23 +08:00
2026-07-27 11:29:12 +08:00
2026-07-18 18:40:23 +08:00
2026-07-18 18:40:23 +08:00
2026-07-18 18:40:23 +08:00
2026-07-25 01:17:14 +08:00
2026-07-29 17:49:19 +08:00
2026-07-19 06:42:17 +08:00
2026-07-20 14:58:57 +08:00
2026-07-18 18:40:23 +08:00
2026-07-19 07:20:40 +08:00
2026-07-19 06:42:17 +08:00
2026-07-19 14:48:02 +08:00
2026-07-18 18:40:23 +08:00
2026-07-19 14:48:02 +08:00
2026-07-19 07:20:40 +08:00
2026-07-18 18:40:23 +08:00
2026-07-18 18:40:23 +08:00
2026-08-15 16:25:39 +08:00
2026-07-18 18:40:23 +08:00
2026-07-21 16:06:30 +08:00
2026-07-18 18:40:23 +08:00
2026-07-18 18:40:23 +08:00
2026-07-18 18:40:23 +08:00
2026-07-18 18:40:23 +08:00
2026-07-18 18:40:23 +08:00
2026-07-18 18:40:23 +08:00
2026-07-19 10:12:18 +08:00
2026-07-22 09:43:11 +08:00
2026-09-01 22:58:02 +08:00
2026-09-01 22:58:02 +08:00
2026-09-01 21:38:21 +08:00
2026-07-20 16:52:53 +08:00
2026-08-19 15:29:04 +08:00
2026-08-23 01:49:05 +08:00
2026-08-19 19:40:50 +08:00
2026-09-01 22:58:02 +08:00
2026-09-02 04:34:14 +08:00
2026-09-01 22:58:02 +08:00
2026-07-21 11:58:42 +08:00
2026-09-02 04:34:14 +08:00
2026-09-01 22:58:02 +08:00
2026-09-02 04:34:14 +08:00
2026-07-22 02:35:31 +08:00
2026-08-29 05:40:29 +00:00
2026-08-30 11:19:50 +08:00
2026-09-01 22:58:02 +08:00
2026-08-31 15:16:23 +08:00
2026-07-15 22:23:17 +08:00
2026-08-23 14:38:50 +08:00
2026-07-17 11:56:29 +08:00
2026-09-02 04:34:14 +08:00
2026-08-20 21:42:47 +08:00
2026-08-15 06:04:23 +08:00
2026-08-15 06:04:23 +08:00
2026-09-01 22:58:02 +08:00
2026-08-22 09:10:47 +08:00
2026-08-19 10:25:55 +08:00
2026-07-17 14:09:57 +08:00
2026-08-21 15:29:58 +08:00
2026-09-01 22:58:02 +08:00
2026-08-18 15:44:19 +08:00
2026-07-22 10:50:23 +08:00
2026-08-22 20:48:01 +08:00
2026-08-23 17:02:06 +08:00
2026-09-01 19:51:19 +08:00
2026-08-19 19:08:17 +08:00
2026-09-01 19:51:19 +08:00
2026-08-23 01:49:05 +08:00
2026-08-23 14:38:50 +08:00
2026-08-22 21:19:00 +08:00
2026-09-01 19:51:19 +08:00
2026-08-18 23:30:36 +08:00
2026-08-17 13:03:57 +08:00
2026-08-17 13:03:57 +08:00
2026-09-01 22:58:02 +08:00
2026-08-30 11:19:50 +08:00
2026-08-11 17:57:40 +08:00
2026-08-11 00:10:24 +08:00
2026-08-07 12:08:58 +08:00
2026-08-06 20:15:50 +08:00
2026-08-16 18:15:28 +08:00
2026-08-31 20:49:59 +08:00
2026-08-18 17:28:22 +08:00
2026-08-06 20:15:50 +08:00
2026-07-21 16:03:53 +08:00
2026-09-01 21:38:21 +08:00
2026-08-15 05:10:37 +08:00
2026-08-30 22:59:17 +08:00
2026-08-07 19:05:01 +08:00
2026-08-10 10:49:25 +08:00
2026-08-11 16:22:02 +08:00
2026-08-22 20:48:01 +08:00
2026-08-17 14:16:05 +08:00
2026-08-05 11:13:34 +08:00
2026-08-16 14:07:57 +08:00
2026-09-02 04:34:14 +08:00
2026-08-31 19:57:08 +08:00
2026-08-15 23:55:57 +08:00
2026-08-19 19:39:01 +08:00
2026-08-20 21:42:47 +08:00
2026-08-26 20:21:49 +08:00
2026-08-18 17:28:22 +08:00
2026-08-29 03:39:43 +08:00
2026-09-02 04:34:14 +08:00
2026-08-10 19:38:27 +08:00
2026-08-10 19:38:27 +08:00
2026-08-10 19:38:27 +08:00
2026-07-21 17:52:25 +08:00
2026-08-10 19:38:27 +08:00
2026-08-10 19:38:27 +08:00
2026-08-06 20:15:50 +08:00
2026-07-21 17:52:25 +08:00
2026-08-11 16:22:02 +08:00
2026-08-07 12:55:32 +08:00
2026-08-11 19:46:11 +08:00
2026-08-22 20:46:30 +08:00
2026-08-29 12:01:50 +00:00
2026-08-31 10:00:03 +08:00
2026-08-17 13:14:15 +08:00
2026-09-01 22:58:02 +08:00
2026-08-05 11:13:34 +08:00
2026-08-17 18:42:54 +08:00
2026-08-07 20:03:20 +08:00
2026-08-08 17:29:17 +08:00
2026-08-08 17:29:17 +08:00
2026-08-22 20:48:01 +08:00
2026-08-18 15:44:19 +08:00
2026-07-18 18:40:23 +08:00
2026-09-01 22:58:02 +08:00
2026-08-22 20:48:01 +08:00
2026-08-18 15:44:19 +08:00
2026-07-22 15:51:54 +08:00
2026-08-30 20:10:10 +08:00
2026-08-31 04:08:20 +08:00
2026-08-15 05:10:37 +08:00
2026-08-09 00:54:55 +08:00
2026-08-29 11:22:39 +00:00
2026-08-15 05:10:37 +08:00
2026-09-01 20:35:02 +00:00
2026-09-01 20:35:02 +00:00
2026-08-15 05:10:37 +08:00
2026-08-15 05:10:37 +08:00
2026-08-15 05:10:37 +08:00
2026-09-01 20:35:02 +00:00
2026-08-15 05:10:37 +08:00
2026-08-30 11:29:58 +00:00
2026-08-18 17:28:22 +08:00
2026-08-31 04:29:38 +08:00
2026-08-18 19:30:13 +08:00
2026-08-31 04:30:40 +08:00
2026-08-15 06:04:23 +08:00
2026-08-15 09:32:28 +08:00
2026-08-22 20:48:01 +08:00
2026-09-02 04:34:14 +08:00
2026-07-17 13:42:50 +08:00
2026-08-28 16:30:09 +08:00
2026-09-02 04:34:14 +08:00
2026-08-22 20:48:01 +08:00
2026-08-05 00:58:53 +08:00
2026-09-01 13:35:51 +08:00
2026-08-20 14:24:05 +08:00
2026-08-30 18:35:16 +08:00
2026-09-01 02:06:53 +08:00
2026-08-31 02:15:12 +08:00
2026-08-30 10:55:11 +08:00
2026-09-01 15:19:00 +08:00
2026-09-01 02:06:53 +08:00
2026-09-01 16:52:01 +08:00
2026-08-29 00:06:17 +08:00
2026-09-01 16:52:01 +08:00
2026-09-01 16:52:01 +08:00
2026-09-01 16:52:01 +08:00
2026-08-30 18:35:16 +08:00
2026-08-28 18:04:34 +08:00
2026-09-01 16:52:01 +08:00
2026-09-01 18:17:33 +08:00
2026-08-24 21:26:57 +08:00
2026-09-01 16:52:01 +08:00
2026-09-01 16:52:01 +08:00
2026-08-31 12:50:30 +08:00
2026-08-19 10:41:47 +08:00
2026-09-01 02:06:53 +08:00
2026-07-19 09:00:14 +08:00
2026-09-01 02:06:53 +08:00
2026-08-27 13:59:38 +08:00
2026-08-30 10:55:11 +08:00
2026-09-01 16:52:01 +08:00
2026-09-01 15:19:00 +08:00
2026-09-01 15:19:00 +08:00
2026-08-28 18:04:34 +08:00
2026-08-31 05:50:28 +08:00
2026-09-01 15:19:00 +08:00
2026-08-28 16:30:09 +08:00
2026-08-30 18:35:16 +08:00
2026-09-01 02:06:53 +08:00
2026-08-27 13:59:38 +08:00
2026-09-01 02:06:53 +08:00
2026-08-27 13:59:38 +08:00
2026-09-01 01:13:04 +08:00
2026-09-01 02:06:53 +08:00
2026-08-19 07:44:23 +08:00
2026-08-27 16:40:47 +08:00
2026-08-14 16:37:53 +08:00
2026-09-01 18:17:33 +08:00
2026-08-31 15:16:23 +08:00
2026-09-01 01:13:04 +08:00
2026-08-27 20:31:05 +08:00
2026-08-15 17:50:51 +08:00
2026-09-01 01:13:04 +08:00
2026-08-19 20:11:51 +08:00
2026-09-01 15:19:00 +08:00
2026-08-30 10:55:11 +08:00
2026-08-30 10:55:11 +08:00
2026-08-07 19:05:01 +08:00
2026-09-01 20:35:02 +00:00
2026-08-30 22:59:17 +08:00
2026-08-19 19:39:01 +08:00
2026-08-17 13:14:15 +08:00
2026-08-29 09:44:53 +08:00
2026-08-19 21:15:33 +08:00
2026-08-20 23:54:20 +08:00
2026-07-17 14:09:57 +08:00
2026-09-01 22:58:02 +08:00
2026-09-02 04:34:14 +08:00
2026-07-17 17:17:10 +08:00
2026-08-29 10:56:04 +08:00
2026-08-19 15:29:04 +08:00
2026-08-14 16:52:35 +08:00
2026-08-14 16:52:35 +08:00
2026-09-01 02:06:53 +08:00
2026-08-21 10:29:43 +08:00
2026-08-06 19:18:04 +08:00
2026-08-29 03:39:43 +08:00
2026-09-01 22:58:02 +08:00
2026-08-15 16:25:39 +08:00
2026-08-08 21:34:03 +08:00
2026-08-29 12:12:06 +00:00
2026-08-18 15:44:19 +08:00
2026-08-30 11:19:50 +08:00
2026-07-22 00:07:42 +08:00
2026-08-30 15:55:45 +08:00