Files
Jyotisha/docs/tasks/TASK-report-translation-gaps-20261013.md
T

14 KiB
Raw Blame History

TASK · 个人报告中英混杂、正文图盘空白、上升行与同位列(issue #53)

  • 日期:2026-10-13
  • 来源:Gitea issue #53(agent 循环试点),产品负责人截图(截图时间 2026-10-01,早于 10-03 的 BUG-1199~1203 修复与 10-07 完整数据版切换)
  • 执行方:Grok(Windows + Docker),分支 codex/report-translation-gaps-20261013,只推这个分支
  • 验收:Claude(Linux)
  • BUG 编号:BUG-1312 ~ BUG-1315(开工时核对 docs/BUG_HISTORY.md 最大号;本任务书写作时最大号为 BUG-1310,BUG-1311 已预留给 issue #52)

1. 基线

  • 基线 commit:origin/staging 941b06c19
  • 个人报告生成走完整数据版:frontend/src/lib/personal-report-longform-generate.ts 请求体 edition: "full_data",Python 侧 scripts/pl9_full_data_export.py::render_full_data_markdown → scripts/pl9_reader_export.py::render_pl9_parity_markdown。
  • 复现方法(虚构盘,不涉及真实资料):
PYTHONPATH=.:scripts python - <<'EOF'
import copy
from scripts.pl9_reader_export import _pl9_export_markdown_for_edition
from tests.test_report_english_edition import CASES, _packet
p = _packet(CASES["day"])
open("/tmp/r53_zh.md", "w").write(_pl9_export_markdown_for_edition(copy.deepcopy(p), "full_data"))
EOF

2. 事故实证(逐条对照截图,基于 941b06c19 当前代码重跑)

# 用户说的 截图时(10-01) 当前代码(941b06c19) 结论
1 翻译不全、中英混乱 「入旺(入旺)」「落陷取消 (Neecha Bhanga)」、目录大量英文 「入旺(入旺)」型重复已消失;目录标题已中文化;但正文(附录之前)仍有 218 处英文功能词/状态词(listed 92、background 10、Custom condition met 10、native 8、of/in/the/by 等),14 处汉字与英文单词粘连(如「木星Jupiterexalted在巨蟹座」「A 第hemmed in by malefics」「Raja瑜伽 (Mutual 相位)」「宫主 of 星座 occupied in navamsa…」) 仍存在 → BUG-1312
2 「本命与分盘北印度图盘」没显示图 只有一列盘名 完整数据版该节仍是 19 个空的 ##### 小标题,0 个 jyotish-chart 围栏;同一函数的 reader_main 版有 22 个围栏 仍存在 → BUG-1313
3 画框列没数据(Kranti、BAV/承接、Full with 上升) 整列「-」 Kranti 列已删(表名「赤纬 / 速度」);Ashtakavarga 表已拆成 Sodhita SAV / Raw SAV / 上升 BAV / 合计,逐宫有数 已修(BUG-1199 / 1200,ae18952e,10-03 部署);旧报告按当时正文打开,需重新生成
4 「分盘核对……不单独增加结论的确定性」可收起或并入前面的分盘部分 页面末尾「分盘核对」+ 提示句 + 全部分盘 提示句已挪到正文图盘标题下;但因第 2 条正文没有围栏,ReportCalculationCharts 仍在末尾把全部分盘画成「分盘核对」 随第 2 条一并解决(见决策 D1)
5 本命盘上升的星宿、宿主、pada、状态没数据 — 星盘页:BUG-1201 已让上升行有星宿 / 宿主 / pada(10-03 部署)。报告:「本命盘行星原始位置」表根本没有上升行 星盘页已修待真机;报告 → BUG-1314
6 D9 的庙旺和同位没数据 — 庙旺:BUG-1202 已全档(10-03 部署,旧缓存整列隐藏)。同位:chart-vedic-tab.tsx::VargaRow 非同位显示「—」,大多数行星都不是同位,整列几乎全是「—」,读起来像没算 庙旺已修待真机;同位 → BUG-1315(见决策 D2)

3. 根因

  • BUG-1312(中英混杂):中文完整数据版不是独立写中文,而是对上游英文文本做短词替换(scripts/pl9_full_data_export.py::_sanitize_pl9_ai_density_markdown),替换不到的词原样留下,替换到一半的词与英文粘在一起;另有若干字段值本身是英文枚举,中文版直接印出:
    • pl9_reader_export.py::render_pl9_parity_markdown 宫主表最后一列写死 'active' / 'background';
    • 大运边界状态 listed(pl9_interpretation_packs.py、pl9_full_data_export.py 里 partial_verified → listed);
    • rashi_dasha_report.py 的 native;
    • yoga_engine.py 把「自定义条件满足」译成 Custom condition met 后中文版沿用;
    • 瑜伽 formation 文本(如 hemmed in by malefics、occupied in navamsa)未进中文术语表。
    • 为何没拦住:中文版卫生检查 _pl9_markdown_hygiene_receipt 只有一张固定黑名单,没有像英文版「汉字数 = 0」那样的通用残留门(英文版 BUG-1272 有)。
  • BUG-1313(正文图盘空白):render_pl9_parity_markdown 只给每张盘写 ##### p{页} · {盘名} 空标题,从不写图盘围栏;reader_main 版的围栏来自 jyotish_engine.py 的 _render_south_chart,完整数据版没走这条。10-07 个人报告改用完整数据版后,BUG-1203「新报告正文画全分盘、末尾整段消失」的前提失效——这是 BUG-1203 的回归(当时的测试只用 reader_main golden)。
  • BUG-1314(报告无上升行):「本命盘行星原始位置」表只遍历九曜,core_chart.ascendant 已带 nakshatra / nakshatra_pada / nakshatra_lord(BUG-1201 的 _nakshatra_fields)但报告没用。
  • BUG-1315(同位列像没数据):BUG-1099 规定 D9 才显示同位列、不支持时整列隐藏;列内「—」表示「不是同位」,与「没数据」同形。

4. 决策记录

  • 产品负责人在 issue #53 授权修复上述缺口。
  • D1(第 4 条:收起还是并入):推荐「并入」——图盘画进正文「本命与分盘北印度图盘」一节,提示句已在该节标题下,末尾「分盘核对」按 BUG-1203 既有去重规则自动消失,不新增折叠控件。若产品选「收起」,改为末尾段落默认折叠(<details>),其余不变。待产品确认;未确认前按推荐执行。
  • D2(第 6 条同位列措辞):推荐非同位写「否」、同位写「是」(D9 表头仍为「同位」);备选保持「—」只加表头注释。待产品确认;未确认前按推荐执行。
  • 不推翻 BUG-1099 的能力声明规则(非 D9 不显示同位列、旧缓存保守隐藏)。
  • 不推翻 BUG-1203:同一张盘页面只画一次,页面与导出共用 fencedReportChartIds。
  • 上升行「状态」列写「不适用」(沿用 BUG-1099「上升标不适用」口径),不自造上升庙旺。

5. 硬红线

  1. 不改 scripts/jyotish_api_server.py 的类方法数与 __new__ 伪造点(§6);不改数据库结构与迁移。
  2. 不改 scripts/ashtakavarga.py 及 scripts/research/sealed_holdout_rerun.py::PRODUCTION_FILES 内任何文件。
  3. 图盘只用 scripts/report_chart_block.py::build_chart_block 生成围栏,不写第二套画盘逻辑;页面不另写第二套去重。
  4. 不改引擎数值(行星位置、星宿、分盘、庙旺判定);只改报告呈现与中文用词。
  5. 英文版不得退化:tests/test_report_english_edition.py 汉字数 = 0 的断言保持;中英二级标题数保持一致。
  6. 不得在测试、文档、提交里写入任何真实用户出生资料;只用 tests/test_report_english_edition.py::CASES 的虚构盘或公开名人盘。
  7. 改既有断言按 AGENTS.md §7.3 写「原值 / 新值 / 原因」三栏;先 grep frontend/tests/、tests/ 里 分盘核对、本命与分盘北印度图盘、##### p、同位、supportsVargottama 的按文本断言(已知:frontend/tests/report-calculation-charts.test.tsx、frontend/tests/chart-varga-table.test.tsx、frontend/tests/chart-page-hook.test.ts、tests/test_chart_page_vedic_tables_contract.py、tests/test_report_chart_blank_columns.py)。
  8. 不顺手升级依赖、不顺手修任务书外的 warning;年度图盘(「年度北印度图盘」文字表)不在本单范围。

6. 任务分解

T1 · 正文画出本命与分盘图盘(BUG-1313,含决策 D1)

  • 在 pl9_reader_export.py::render_pl9_parity_markdown 的「本命与分盘北印度图盘」节,每个有数据的盘写 ##### 盘名 + build_chart_block(...) 围栏(D1 用 core_chart,月亮盘 id MOON 以月亮星座为参考上升,分盘用 varga_full[Dn_*] 及其 Ascendant)。逆行标记取本命 retrograde,与 jyotish_engine.py::_render_south_chart 一致。
  • 同一 id 只画一次:删掉与「D9 九分盘」重复的「Navamsha」;没有可画 id 的「Bhava (Sripati)」不再输出空标题(其数据已在「月亮盘 / Sripati 宫位精确表」)。
  • 中英两版都要有;英文版标题走 pl9_reader_english_terms.py。
  • 验收:
    • 新测试(建议放 tests/test_report_chart_blank_columns.py 或新文件):虚构日盘完整数据版中英两版,该节内围栏数 = 有数据的盘数,id 不重复,每个围栏能被 report_chart_block.FENCE_RE 解析且 layout == "north";该节内不存在「后面紧跟另一个标题」的空 ##### 标题。
    • 前端:用新生成的完整数据版正文做 golden,fencedReportChartIds 覆盖 calculationCharts 全部 id → ReportCalculationCharts 渲染为空(即末尾「分盘核对」消失)。golden 由真实引擎输出生成,sourceCommand 写明。
    • 导出:frontend 既有导出测试全绿;若冻结哈希因正文变化而变,按三栏说明更新。

T2 · 中文版英文残留清理与残留门(BUG-1312)

  • 把第 3 节列出的英文枚举在中文版里换成中文:active/background → 「当前运行 / 背景」;listed → 「已列出」;native → 「本命」;Custom condition met / custom condition satisfied → 「满足自定义条件」;瑜伽 formation 常见句补进中文术语表(pl9_language_terms 或现有 glossary,别新建第三份)。粘连问题从替换顺序上修(整句/长词先于短词),不靠事后删字。
  • 新增中文版残留门:在 _pl9_markdown_hygiene_receipt(language="zh") 加一项——正文(## 结构化资料附录 之前)汉字与 ≥3 个拉丁字母直接粘连数 = 0,且英文功能词(of/in/the/and/by/from/with/listed/background/native/condition/met/satisfied/occupied)出现数 = 0;允许括号内的梵文专名(星宿、瑜伽、Dasha 名)与表头里的技术缩写(SAV、BAV、KP、D1–D60 等),允许清单写在代码里并注明理由。
  • 验收:
    • 虚构日盘 / 夜盘 + 一张公开名人盘(爱因斯坦或乔布斯,按 BUG-1272 用过的公开资料)中文完整数据版:粘连 0、功能词 0(当前基线:粘连 14、功能词 218)。
    • 故意注入「木星Jupiterexalted」的单测,残留门报 fail。
    • tests/test_report_english_edition.py、tests/test_reader_appendix_language.py、tests/test_reader_appendix_shared_rules.py、tests/test_report_reader_main.py 全绿。

T3 · 报告本命表加上升行(BUG-1314)

  • 「本命盘行星原始位置」表首行加「上升」:星座、度数、黄经、宫位 1、星宿(同九曜的「中文(梵文)」格式)、pada;R/C、速度写「-」;「行星主星与状态」表上升行尊贵状态写「不适用」,星宿主取 nakshatra_lord。中英两版。
  • 验收:新测试断言上升行星宿 / pada / 星宿主与 scripts/jyotish_engine.py::_nakshatra_fields(asc_lon) 一致(虚构日盘);tests/test_report_chart_blank_columns.py 既有用例全绿。

T4 · D9 同位列措辞(BUG-1315,含决策 D2)

  • frontend/src/components/chart-page/chart-vedic-tab.tsx 的 VargaRow / VargaAscendantRow:同位「是」、非同位「否」;列仍只在 supportsVargottama 时出现。同步 frontend/DESIGN.md(星盘页分盘表一节)。
  • 验收:frontend/tests/chart-varga-table.test.tsx 改断言(三栏说明);新增「非同位行显示『否』」与「非 D9 无同位列」两条;tsc --noEmit 0 错、npm run lint 0 error、next build 后 / 仍 Static、首屏 gzip ±2%。

T5 · 记录

  • docs/BUG_HISTORY.md 新增 BUG-1312~1315;BUG-1313 写「复发自 BUG-1203(完整数据版切换后正文无围栏)」,并说明当时只用 reader_main golden 测,没拦住。
  • docs/tasks/PROGRESS-report-translation-gaps-20261013.md、CHANGELOG.md(用户可感知:报告正文出图、中文更干净、上升行、同位列)。
  • 真机清单 docs/testing/report-translation-gaps-20261013.md。

7. 让步顺序

时间不够时按此顺序保留:T1 → T3 → T4 → T2。T2 若只能部分完成,残留门先以「当前计数不得上升」落地,计数写进进度记录,剩余条目写 BLOCKED.md,不得把门放宽成只测黑名单。

8. 验收命令分工

谁 命令
Grok 自跑(工作树 .venv) python -m pytest tests/test_report_chart_blank_columns.py tests/test_report_english_edition.py tests/test_reader_appendix_language.py tests/test_reader_appendix_shared_rules.py tests/test_report_reader_main.py tests/test_chart_page_vedic_tables_contract.py -q;前端 tsc --noEmit、npm run lint、改到的前端测试单文件(node --test,看 fail 与 cancelled 都为 0)。按 TASK-agent-loop-pilot-20261013.md「T1 结果与定稿分工」,前端全量 npm test 与 Python 快速门不跑,以 Claude 为准
Claude 验收 同上全部重跑 + 全量 pytest(引擎相邻改动,见 feedback-full-suite 规则)与基线逐条比对;逐行审 diff(越界文件、断言弱化、隐私);重生成虚构盘中文报告核对粘连 / 功能词计数
不需要 test:db(不动数据库访问层)

9. 开工前置命令

git fetch origin --prune
git worktree add -b codex/report-translation-gaps-20261013 .worktrees/report-translation-gaps-20261013 origin/staging
cd .worktrees/report-translation-gaps-20261013
git log -1 --format=%h   # 应为 941b06c19 或其后代
grep -n "^## BUG-" docs/BUG_HISTORY.md | tail -3   # 核对最大号,BUG-1311 已预留
grep -rln "分盘核对\|本命与分盘北印度图盘\|##### p\|同位\|supportsVargottama" frontend/tests tests

10. 环境缺口(预告)

  • 旧报告按生成时保存的正文打开,修复只对新生成的报告生效;真机验收要重新生成一份。
  • 无登录态时浏览器级验收留给 docs/testing/report-translation-gaps-20261013.md。