feat(synastry): store the upstream seven-item marriage match

Move the bde5d615 engine and full-synastry skill in unchanged, save both profiles without billing or a page, and retire the old synastry module.

Checked targeted pytest, tsc 0, lint 0 errors, service tests 6/6, and test:db 73 pass / 13 fail matching the Windows known list.

Co-Authored-By: Grok (agent loop)
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
jesse-ux
2026-10-18 16:44:05 +08:00
co-authored by Grok (agent loop) Cursor
parent e7bf60c1f2
commit cf063834ca
44 changed files with 5387 additions and 313 deletions
+80
View File
@@ -36488,3 +36488,83 @@
- 相关记录:BUG-1361、BUG-1362。
- 复发自:无。
- 修复版本:分支 `codex/beta-safety-net-20261014`。本机没有装到生产主机,也没有点生产按钮。
## BUG-1370 | 合盘结果把本人固定当成男方
- 状态:resolved
- 首次发现:2026-10-17
- 最近更新:2026-10-18
- 影响面:合盘计算
- 用户现象:同一对人互换顺序,合盘结果会变;网页路径把本人固定放在男方。
- 触发条件:用两份出生资料做合盘,或把两人的顺序对调。
- 根因:旧接口只收两个月亮度数,并写死男方 / 女方。
- 修复:改用上游合盘模块。配对层对两个方向取平均,不读性别。
- 验证:上游产品测试与本地对调测试。公开名人证据包可以进入解读。
- 防复发:对调后配对分、火星冲克和婚姻宫压力一致的测试。
- 相关记录:BUG-1371。
- 复发自:无。
- 修复版本:分支 `codex/marriage-match-p1-20261017`。
## BUG-1371 | 网页合盘不算火星冲克
- 状态:resolved
- 首次发现:2026-10-17
- 最近更新:2026-10-18
- 影响面:合盘计算
- 用户现象:合盘结果里没有火星冲克。
- 触发条件:走网页合盘接口。该接口只把两个月亮度数交给计算。
- 根因:计算函数拿不到整盘,火星冲克字段一直空着。
- 修复:证据包先做两次完整排盘,再交给上游合盘模块。默认口径和 Raman 口径各算一次并保存。
- 验证:证据包测试要求公开名人对的结果达到可写解读;快照接口的金样不含旧的五星合分。
- 防复发:产品测试断言火星冲克不带分数、不按性别比较。
- 相关记录:BUG-1370、BUG-1333。
- 复发自:无。
- 修复版本:分支 `codex/marriage-match-p1-20261017`。
## BUG-1372 | 旧合盘模块把互控写死,星宿下标会越界
- 状态:resolved
- 首次发现:2026-10-17
- 最近更新:2026-10-18
- 影响面:旧合盘模块
- 用户现象:旧命令算出的互控分不随星盘变化;极端经度可能越界。
- 触发条件:调用已退役的合盘模块。
- 根因:互控被写成固定 2.0,星宿下标没有取模。
- 修复:删除该模块。命令改为 `marriage-match`,只收已经算好的盘快照。附加 Kuta 仍留在 `ashtakoot.py`。
- 验证:旧合盘模块已删除。开源集成测试改走 `ashtakoot.calculate_ashtakoot`。
- 防复发:新功能不得调用旧的五星合分函数;这两个函数的说明已标成旧版。
- 相关记录:BUG-1374。
- 复发自:无。
- 修复版本:分支 `codex/marriage-match-p1-20261017`。
## BUG-1373 | 合盘结果卡被删掉后只剩一句聊天草稿
- 状态:investigating
- 首次发现:2026-10-17
- 最近更新:2026-10-18
- 影响面:合盘页面
- 用户现象:做完合盘看不到结果卡,输入框里只出现一句草稿问题。
- 触发条件:从档案页点旧的合盘入口。
- 根因:结果卡随旧面板一起删除,没有新的结果页接上。
- 修复:本单不改页面。由后续 issue #82 做结果页并改为 resolved。
- 验证:无。本单没有页面。
- 防复发:无。留给 #82。
- 相关记录:BUG-1370。
- 复发自:无。
- 修复版本:未修。
## BUG-1374 | 文档把 Papasamya 和 Mangal 匹配写成已经实现
- 状态:resolved
- 首次发现:2026-10-17
- 最近更新:2026-10-18
- 影响面:技能说明、速查表、能力矩阵
- 用户现象:文档写旧合盘已经覆盖 Papasamya 加权和 Mangal 匹配,代码里没有这套结果。
- 触发条件:按文档里的旧合盘命令理解合盘能力。
- 根因:说明跟着旧模块起草,没有对着真实返回核对。
- 修复:删掉这三处虚报。命令表改为 `marriage-match`:七项满分 35,火星冲克和婚姻宫压力分开列,没有 Papasamya 加权总分。
- 验证:速查表、能力矩阵和技能命令表已改;旧模块已删除。
- 防复发:能力矩阵写明旧模块已删除。
- 相关记录:BUG-1372。
- 复发自:无。
- 修复版本:分支 `codex/marriage-match-p1-20261017`。
@@ -0,0 +1,48 @@
# 进度:婚恋合盘第一期(2026-10-18)
## 做了什么
按任务书第六版,只做后端。基线 `origin/staging` = `e7bf60c1`。
- T1:`scripts/marriage_match.py` 与 `skills/jyotish-full-synastry-reading/` 从 `bde5d615` 副本原样搬入。胶水在 `scripts/synastry_full_dossier.py`:两次 `full-reading` 并行,再补 Raman。
- T2:`POST /api/marriage-match`、`POST /api/synastry_full_dossier`。证据包在有 `GITHUB_SHA` 时按两人出生资料和提交号做磁盘缓存;没有提交号则不缓存。CLI 命令 `marriage-match`。
- T3:删除 `scripts/synastry.py` 和 CLI `synastry`。`calc_kuja_dosha` / `match_kuja_dosha` 标为旧版。速查表、能力矩阵、技能命令表去掉 Papasamya / Mangal 已实现的虚报。
- T4:`synastry_reports` 加人物引用、指纹、规则版本和结构化结果。删档案人物时,引用该人物的合盘行一起删除。旧行不回填。
- T5:`frontend/src/lib/marriage-match-service.ts`。不扣点,不做路由。
- T6 / T7 / T8:按第六版不做。
## 与上游的差异
上游 `marriage_match.py` 和技能目录与副本逐字节相同,没有本地改动。
上游测试 `test_api_handler_uses_the_new_product_contract_without_legacy_kuja_score`:
| | |
| --- | --- |
| 原值 | `JyotishAPIHandler._compute_marriage_match` |
| 新值 | `marriage_match_api.compute_marriage_match` |
| 原因 | 类方法数不得增长,计算放在独立模块 |
`tests/test_open_source_integrations.py` 的附加 Kuta 测试同样改走 `ashtakoot.calculate_ashtakoot`,因为 `synastry.py` 已删除。
## 证据包截取
`frontend/tests/fixtures/synastry-full-dossier-truncated.json` 只留:schema、`delivery_readiness`、默认 profile、国际核心合计与满分、Raman profile、两边行星名。度数和模块正文不进金样。`marriage-match-snapshot.json` 是快照接口的完整引擎输出(虚构度数,不是出生资料)。
## 命令与结果
| 检查 | 命令 | 结果 |
| --- | --- | --- |
| 开工预检 | `python scripts/pre_work_check.py --remote-timeout 8 --command-timeout 45` | 远端可见。碎片扫描 90 秒超时,聚焦测试 45 秒超时。未据此宣称通过。 |
| 合盘单测 | `pytest tests/test_marriage_match_product.py tests/test_marriage_match_api.py tests/test_open_source_integrations.py tests/test_ashtakoot.py tests/test_api_server_growth_contract.py tests/test_api_heavy_compute_gate.py tests/test_synastry_full_dossier.py` | 产品测试、缓存、增长合同、公开名人证据包通过。证据包测试约 27 秒,`delivery_readiness = ready_for_narrative`。 |
| 服务端函数 | `node node_modules/tsx/dist/cli.mjs --test tests/marriage-match-service.test.ts` | 6 通过,0 失败,0 取消。 |
| 类型检查 | `frontend\node_modules\.bin\tsc --noEmit -p frontend` | 0 错。 |
| lint | `npm run lint`(frontend) | 0 error,123 warning(原有 warning)。 |
| 数据库 | `npm run test:db` | 86 项:73 通过,13 失败,0 取消。13 条失败名称与 `tools/agent-loop/windows-known-failures.txt` 逐条相同。婚恋合盘这一项通过。 |
| 全量 pytest / 快速门 | 未跑 | Windows 执行约定由验收方跑。 |
## 偏离
- 不做页面、不扣点,与第六版一致。
- 类方法不能增加,所以没有把 `_compute_marriage_match` 加回 `JyotishAPIHandler`。
- 预检的两个超时是本机限时,不是计算失败。
+1 -1
View File
@@ -501,7 +501,7 @@
| `TASK-data-layer-types-20261013.md` | `PROGRESS-data-layer-types-20261013.md` | 数据访问层改用自己的 DataClient 类型第一阶段(BUG-1351;任务书预留的 1343 已被更大编号越过) | 待验收 | `codex/data-layer-types-20261013` |
| `TASK-contracts-helpers-dedupe-20261013.md` | — | 前后端契约与小工具去重第一阶段 | 待领取(排队:frontend-dead-code、consult-route-split) | `codex/contracts-helpers-dedupe-20261013` |
| `TASK-people-archive-limit-20-20261017.md` | — | 星盘档案上限 5→20 人(触发器新迁移 + 常量 + 文案;婚恋合盘前置单) | 待领取 | `codex/people-archive-limit-20-20261017`;动表,需 test:db |
| `TASK-marriage-match-p1-20261017.md` | #79 | 婚恋合盘引擎(搬上游 bde5d615:marriage_match + 合盘证据包;35 分七项、不分男女;第六版不扣点、不做页面)(BUG-1370 起) | 待执行(不再等 #78) | `codex/marriage-match-p1-20261017`;动表 |
| `TASK-marriage-match-p1-20261017.md` | #79 | 婚恋合盘引擎(搬上游 bde5d615:marriage_match + 合盘证据包;35 分七项、不分男女;第六版不扣点、不做页面)(BUG-1370 起) | 待验收 | `codex/marriage-match-p1-20261017`;动表 |
| `TASK-full-reading-module-parity-20261018.md` | #81 | full-reading 补齐上游 5 个模块(西占层文件没搬致永远 blocked、Navamsha / Niryaana 用我们自己的实现填键、Lagna Vargottamamsa / Pushkara / Punarphoo)(BUG-1375 起) | 待执行(可与 #78 并行) | `codex/full-reading-module-parity-20261018` |
| `TASK-synastry-full-report-20261018.md` | #82 | 婚恋合盘:选人页 + 完整合盘报告(关系画像九节:结论+折叠的分析逻辑+关系时间线+技术依据摘要;英文按需;计费键 synastry.full) | 排队(等 #78、#79、#81) | `codex/synastry-full-report-20261018`;动表 |
| `TASK-synastry-report-chat-20261018.md` | #83 | 从合盘报告某一节进入对话问依据(绑定报告与节、对话里可用术语、只依据已存计算结果并逐条核对、计费照普通对话) | 排队(等 #82) | `codex/synastry-report-chat-20261018`;动表 |