@@ -0,0 +1,104 @@
# TASK:个人报告几处露出的原始字段和格式问题(2026-11-12)
- Gitea: #204
- 分支:`codex/report-wording-fixes-20261112` (基于 staging `017e650fdafac4a841487dbba4aca803c761dad8` )
- Bug 编号:BUG-1849。开工时核对 `docs/BUG_HISTORY.md` 末尾;若已被占用,顺延,并在 PROGRESS 写明。
- 负责验收:Claude( jyotisha-de)
不得自行写“产品决定/裁定”;任务书没写的取舍一律选需拍板。
不得修改或删除既有断言来让测试通过;确需修改必须写原值/新值/原因,并在 PROGRESS 里逐条列出。
## 背景
2026-11-12, Claude 用 `tests/public_chart_reports.py` 的第一张公开名人盘渲染了中英文个人报告(`public_chart_reports(PUBLIC_REPORT_CASES[0])` ),看到下面几处问题。它们都在报告渲染层,引擎的值本身没有错。
| # | 版本 | 现在显示 | 位置 |
|---|---|---|---|
| 1 | 中、英 | Mudda 区间小表「本报告覆盖区间」一行写 `365.2555787037037 天` | `scripts/pl9_reader_export.py::_mudda_coverage_lines` , `coverage.get('days')` |
| 2 | 中 | 区间表下方一句:`报告覆盖区间视图(本次真实返照 → 下一次真实返照);完整原始时间线见 raw_periods` | 同一函数,`periods_view.label` 。英文版用的是 `label_en` |
| 3 | 中 | 跨返照那句 `……(原始计算延伸至2027-02-27T20:28:43) ` 句末没有句号 | 同一函数,`MUDDA_CROSSING_TEXT` |
| 4 | 中 | 第二年及以后的年度表里,Mudda 表头是英文键:`balance_profile \| lord \| start \| end \| boundary_status` | `pl9_reader_export.py` 渲染 `annual_pack` 的 `table_key == 'mudda_rows'` 那段(约 :3240) |
| 5 | 中 | 「Strength Layers」审计行结尾是 `Vimsopaka status=良好。` | 技法审计表 Strength Layers 一行的组装处,自己定位 |
| 6 | 中、英 | 行星表和主星表里,**上升**一行的「R/C」「速度」「力量比」「分主」是 `未列` / `not listed` | 行星表、行星主星与状态表的组装处,自己定位 |
| 7 | 英 | 技法审计表的 Status 列写成 `calculation: executed; interpretation: primary` | 英文版审计表。中文版同一格写的是「计算已执行,解读主要依据」 |
## 要做的
1. **天数 ** :保留 4 位小数,中英文都改,例如 `365.2556 天` / `365.2556 days` 。表里其他数值不动。
2. * * `raw_periods` **:用户能看到的文字里不出现字段名。
- 中文改为:`报告覆盖区间视图(本次真实返照 → 下一次真实返照);完整原始时间线见上表「原始完整时间线」一行` ;
- 英文改为与之对应的一句。
- 在报告层替换,不改引擎和 `scripts/tajika_mudda.py` 。
3. **句号 ** :中文跨返照句末补「。」。在报告层补,`consultation_native_layers.py` 是冻结文件,不改。
4. **英文表头 ** :中文版第二年及以后的 Mudda 表,表头改用第一年那张表的中文表头:`余额口径 | 主星 | 开始 | 结束 | 边界口径` 。
- 单元格里的枚举值,用第一年那张表现成的映射显示。
- 英文版不变。
- 别的 `annual_pack` 表如果在中文版里也露出英文键,**列进 PROGRESS,本单不改**。
5. **Vimsopaka ** :去掉 `status=良好` 这类等级词。
- 改为写出每颗行星的 Vimsopaka 原始值,取值与报告 Vimsopaka 表相同、单位相同;
- 如果拿不到原始值,就整段去掉,不写任何等级词。
- 英文版同样处理。
6. **上升行 ** :上升点没有逆行、速度、力量比和分主。
- 这几格改为 `—` ,中英文相同,只改上升一行;
- 表格说明里已经写了 `—` 表示“缺数据或核验限制”。若这个含义和“不适用”冲突,就选需拍板,不要另造新词。
7. **英文 Status 列 ** :按中文版的映射,一一对应写英文短语。
- 先在 PROGRESS 列出中文全部取值和你拟的英文译法,再改代码;
- 只改展示文字,不改状态值本身。
## 要改的文件
- `scripts/pl9_reader_export.py`
- 技法审计表与行星表的组装文件(自己定位,在 PROGRESS 写明)
- 新建 `tests/test_report_wording_fixes_20261112.py`
- `docs/BUG_HISTORY.md` :只在末尾追加一条。
- `docs/tasks/PROGRESS-report-wording-fixes-20261112.md`
## 不要碰
- 冻结文件:
- `scripts/jyotish_engine.py`
- `scripts/jyotish_api_server.py`
- `scripts/yoga_engine.py`
- `scripts/consultation_native_layers.py`
- `scripts/tajika_mudda.py`
- `scripts/shadbala*.py`
- `scripts/narayana_*.py`
- `scripts/report_render/reading_facts.py` 、`frontend/src/lib/personal-report-reading*.ts` 、`frontend/src/mastra/personal-report-reading.ts` : Claude 在 #192 里改。
- `references/**`
## 验收标准(写进新测试)
用两张公开名人盘渲染中英文报告,断言下面 7 条:
1. 不再出现 `\d+\.\d{5,} 天` 和 `\d+\.\d{5,} days` 。
2. 用户可见文字里没有 `raw_periods` 。
3. 跨返照句以「。」结尾。
4. 中文版里没有 `| balance_profile | lord |` 这样的表头。
5. 没有 `Vimsopaka status=` 。
6. 上升行的 R/C 和速度两格是 `—` 。
7. 英文版没有 `calculation: ` 、`; interpretation: ` 这种写法。
另外,`tests/test_report_*` 里现有的全部测试都要通过。
## 自测命令(在仓库根目录)
```
python -m pytest -q tests/test_report_wording_fixes_20261112.py
python scripts/run_quality_gate.py --profile quick --skip-frontend-runtime
```
## 进度记录
写在 `docs/tasks/PROGRESS-report-wording-fixes-20261112.md` ,内容包括:
- 每一处改在哪里;
- 第 7 条的中英对照表;
- 第 4 条发现的其他英文键表;
- 测试结果,以及在 staging 上也复现的基线失败。
## 何时停下来选“需拍板”
- 某一处只能改冻结文件才能修好。
- 第 6 条里,`—` 的现有含义和“不适用”冲突。
- 第 5 条拿不到 Vimsopaka 原始值,而去掉整段会让这一行变空。