Co-Authored-By: Claude (agent loop) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SKLQ768nneCz8kp5QwHfhf
14 KiB
14 KiB
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/staging941b06c19 - 个人报告生成走完整数据版:
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. 硬红线
- 不改
scripts/jyotish_api_server.py的类方法数与__new__伪造点(§6);不改数据库结构与迁移。 - 不改
scripts/ashtakavarga.py及scripts/research/sealed_holdout_rerun.py::PRODUCTION_FILES内任何文件。 - 图盘只用
scripts/report_chart_block.py::build_chart_block生成围栏,不写第二套画盘逻辑;页面不另写第二套去重。 - 不改引擎数值(行星位置、星宿、分盘、庙旺判定);只改报告呈现与中文用词。
- 英文版不得退化:
tests/test_report_english_edition.py汉字数 = 0 的断言保持;中英二级标题数保持一致。 - 不得在测试、文档、提交里写入任何真实用户出生资料;只用
tests/test_report_english_edition.py::CASES的虚构盘或公开名人盘。 - 改既有断言按 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)。 - 不顺手升级依赖、不顺手修任务书外的 warning;年度图盘(「年度北印度图盘」文字表)不在本单范围。
6. 任务分解
T1 · 正文画出本命与分盘图盘(BUG-1313,含决策 D1)
- 在
pl9_reader_export.py::render_pl9_parity_markdown的「本命与分盘北印度图盘」节,每个有数据的盘写##### 盘名+build_chart_block(...)围栏(D1 用core_chart,月亮盘 idMOON以月亮星座为参考上升,分盘用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 --noEmit0 错、npm run lint0 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。