Files
Jyotisha/docs/tasks/TASK-report-reader-main-fix-20260925.md
T

55 lines
5.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# TASK · 报告读者版修复单:年运 Year Lord / Muntha 全是「-」+ 投影误删 Bhava Bala(2026-09-25)
## 基线
- `origin/staging = fabe0114`(已部署)。分支 `codex/report-reader-main-fix-20260925`。与 people-archive-p1-fix 不交叉(本单只动 `scripts/` 与 `report-public-projection.ts`),可并行。
- Claude 09-25 验收 `3c2f7bd5`:读者版导入与上游 `23b9609e` 逐函数一致;虚构生日(1990-01-01 12:00 北京)生成读者版 1929 行,D5 全部泄漏词 **0 命中**;KP 与三项 transit 在 `type('Args')` 参数下不再 blocked;`birth_asc_sign_idx` 已补,太阳回归 Muntha 随年份变化(双鱼 → 白羊 → 金牛)、Year Lord 木星 → 火星 → 金星;Python 定向 183 条全绿。以下是未通过项。
## 事故实证
**P1-1 · 两边一致也判"冲突"**:`scripts/annual_tajika_pack.py` `_annual_comparable_value("year_lord")`:太阳回归侧给 `{year_lord: Jupiter, year_lord_sign: Pisces}`,tajika 侧给 `{year_lord: Jupiter, year_lord_sign: None}`(它的字典里是 `muntha_sign` 而不是 `year_lord_sign`)→ 比较失败 → 2026 / 2027 / 2028 全是 `status: conflict`(木星 / 木星、火星 / 火星、金星 / 金星)。参考版仍印「Year Lord 仍要带着分歧标签阅读」。该函数原样来自上游,上游有同样弱点;单测只用键集相同的合成字典,所以通过。
**P1-2 · 读者版年运章 Year Lord / Muntha 全是「-」**:读者版读 `annual.year_lord.data.{year_lord, muntha_sign, selection_basis}`;`year_lord` 是没有 `data` 的冲突字典 → Varshesha、选取依据、年度上升、Muntha 星座**每年都是「-」**,未来年份 Varshapravesha 也是「-」(排查实测与入库 golden `frontend/tests/fixtures/report-reader-main-fictional.json` 一致)。即使修好冲突,`data` 取太阳回归值也没有 `muntha_sign`。上游用 `tajika.calc_panchadhikari_year_lord` 填这些字段,本仓从未同步。Python 测试只查表头里有 "Year Lord" "Muntha" 字样。**用户能看到的年运结论仍不可用**,`docs/testing/report-reader-main-20260924.md` 第 3 条无法通过。
**P2-1 · 投影误删真实章节**:`projectOrdinaryReportMarkdown` 作用于读者版 golden 时整段删掉 `### Bhava Bala 十二宫力量`(标题 + 12 行表,15 行):旧 `tableIsInternal` 把表头 `Score` 当内部词,新 `adjacentInternalTableIndexes` 连前面的标题一起删。D5 只要求删说明段,不删标题;且标题后若还有正常表格会挂到错误章节下。
**P2-2** 新泄漏规则(D5 词表 + 12 个英文单词规则)同时作用于 `fenceIsPublic`、`isAllowlistedSvg` 与 `projectChatExportMarkdown`,会删掉聊天导出里的英文行。
**P3** 读者版五要素表仍露原始键(`overall_score`、`吉性_count`、`total_elements`);姓名行显示「姓名:-」。
## 决策记录
- D1 `_annual_comparable_value("year_lord")` 只比较 `year_lord`(行星);星座字段一侧缺失时不参与比较。在本仓注明与上游的差异与原因。
- D2 读者版年运表数据来源:Varshesha = 太阳回归侧 `year_lord`(D1 后两侧一致时取之,冲突时标注两者),Muntha 星座 = `muntha.data.muntha_sign`,年度上升 = 太阳回归上升;**优先从上游同步 `calc_panchadhikari_year_lord`**(整段引入并注明来源提交),同步不可行时用本地已有字段拼,不得编造。
- D3 投影:`Score` 等通用英文表头不作为内部判据;删内部表时只删紧邻说明段,**不删标题**。
- D4 新泄漏规则只用于报告正文投影,不作用于 `projectChatExportMarkdown`(聊天导出沿用原规则)。
- D5 五要素表原始键映射为中文或删除该列;姓名缺失时整行不输出。
## 硬红线
1. 不改 Ayanamsa / 宫制 / 大运口径;不改上游算法(D1 的比较口径除外,必须注明)。
2. golden 必须由真实引擎重新生成(虚构生日),新增断言:读者版年运章至少两年的 Varshesha 与 Muntha 单元格**不是「-」且彼此不同**;读者版 golden 投影后仍含 `Bhava Bala` 标题与表。
3. 读者版投影后 `ordinaryOutputLeaks = []` 不得弱化。
4. `jyotish_api_server.py` 不增长;Python 快速门与定向测试必跑;前端全量失败名单与基线逐条一致(Node 22 + Linux)。
## 任务分解
- T1 比较口径(D1),单测用**真实引擎**两侧字典。
- T2 读者版年运表数据(D2),含是否同步上游 `calc_panchadhikari_year_lord` 的决定写进 PROGRESS。
- T3 投影(D3、D4)与五要素 / 姓名行(D5)。
- T4 记录:BUG-1028 补"读者可见结果未修"并关联本单;BUG-1026 补投影误删;PROGRESS;更新真机清单。
## 开工前置命令
```bash
git fetch origin --prune
python3 scripts/pre_work_check.py --remote-timeout 8 --command-timeout 45
git worktree add -b codex/report-reader-main-fix-20260925 .worktrees/report-reader-main-fix-20260925 origin/staging
cd .worktrees/report-reader-main-fix-20260925
python3 -m pytest -q tests/test_report_reader_main.py tests/test_annual_tajika_pack.py
```
## BUG 编号
沿用 BUG-1026 / 1028,不新开号。