Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LutgzyJqNhPpZy1nFsJtN3
5.9 KiB
修复单:完整数据版补齐(一)A 段(issue #91,第 1 次打回,2026-10-22)
- 被验提交:
aed9de537(分支codex/full-data-parity-1-20261021,A 段 T1~T3) - 原任务书:
TASK-full-data-parity-1-20261021.md - 执行方:Grok。同一分支继续,只推这个分支;本修复单做完才进 B 段。BUG 编号 1416、1417 保持不变,新问题从当时最大号 +1 起。
验收结论(Claude,Linux)
做对了的:中文附录改由同一渲染函数按中文字段出,回译路径已删;Dosha 摘要改读 has_dosha 等结构化字段,无火星煞的盘中英都写「无 / No」,部分时蛇煞写出「7 颗中 5 颗」;友敌矩阵读 rows;六章标题中英一一对应;Narayana 两种口径分列;Goel 一节带出处;导出图盘列表中文用中文星座名;冻结文件交集为空;中英卫生门为 0。
未通过:T2「A、B 类每节出现且非空」。 新六章共 69 节,Claude 用任务书指定的 0、1、9 号虚构盘(屏蔽 PyJHora)逐节统计:16 节在三张盘、中英两版里整节只有「未判定 / Not determined」。其中 12 节的数据在资料包里是有的,是渲染函数读错了位置或字段名;现有测试只检查「节不为空」,整节「未判定」也算通过,所以没拦住。
J1 · 有数据却整节「未判定」(必修)
下表是 Claude 在 0 号虚构盘的资料包里查到的实际位置(以 build_professional_report_reference_packet 的输出为准,开工时自行核对):
| 节 | 现在读的 | 资料包里实际的 |
|---|---|---|
| Vimsopaka Contribution | strengths_and_scores.vimsopaka.planets |
strengths_and_scores.vimsopaka.<行星>(直接以行星为键,含 total_score、category、varga_scores) |
| Karakamsha | jaimini.karakamsha 的 planet / sign / house |
advanced_systems.jaimini.karakamsha 的 karakamsha_sign、karakamsha_degree、karakamsha_lord |
| Darakaraka | 同上 | advanced_systems.jaimini.darakaraka 的 dk_planet、dk_sign、dk_house、dk_degree、d9_sign、d9_dignity 等 |
| D9 Dignity | varga_full.D9 / Navamsa |
divisional_and_special_charts.varga_full.D9_Navamsa,行星直接是键(另有 _meta、Ascendant) |
| Divisional Mapping | 各分盘 ascendant.sign |
键名形如 D9_Navamsa,上升在 Ascendant.sign(大写) |
| D30 States、D30 Source Input | — | varga_full.D30_Trimsamsa;Shadbala 的 sthana_bala.sapta_d30 |
| Avastha Inputs | — | advanced_systems.avasthas.<行星>.avasthas |
| Dispositor Terminals | — | advanced_systems.final_dispositors(行星 → 终点星)、advanced_systems.dispositor_chains |
| Sudarshana Points | — | divisional_and_special_charts.sudarshana.raw.reference_points |
| Bhava Chalit Centres | — | divisional_and_special_charts.bhava_chalit.raw(宫心 / 宫界在 raw 下) |
| Natal Saham Formula Basis | — | advanced_systems.sahams.<名>_saham |
| Dated Transit | — | timing_and_predictive_systems.transit_multi_reference、advanced_systems.nakshatra_dasha.transit_overlay |
另 4 节(Navamsha AD Duration、Pancha Pakshi、Rashi Tulya Navamsa,以及你回报里说的逐领域收敛)在公开资料包里只出现在 raw_module_usage_map,确实没有数据。这 4 节保留「未判定」,但每节第一行写一句原因(例如「公开报告资料包未带此模块」/ "This module is not in the public report packet"),并在 PROGRESS 列出;是否在 B 段把模块接进资料包,由 Claude 验收时再定。
验收:上表 12 节在 0、1、9 号盘中英两版都至少有一行真实数据(不是「未判定」)。
J2 · 测试要能抓住「整节未判定」(必修)
tests/test_full_data_parity_chapters.py 加一条:0、1、9 号盘中英两版,每节至少一行数据单元格不全是「未判定 / Not determined」;允许整节未判定的节写成测试里的白名单(只放 J1 末尾那 4 节),每项带一句原因。白名单之外出现整节未判定,测试失败。
J3 · 新六章绕过了报告口径替换(必修,小)
render_full_data_markdown 现在先跑 _apply_local_report_conventions(「必然→可能」「divorce→relationship strain」、去掉 BUG-1210 本地加减分等),之后才 _append_parity_chapters,所以新六章不经过这层(红线 7)。改成先拼六章、再统一跑口径替换(中英两路都改)。加一条测试:给某节源字段塞入「必然」/ divorce,渲染结果里已被替换。
J4 · 中文附录里被悄悄丢掉的内容要数出来(必修,只量测)
中文附录有三处会不声不响地丢内容:
- 年运等表只保留
FIELD_ZH里有中文名的列(keys = [field for field in keys if field in FIELD_ZH]); - 可用瑜伽表的「作用」里,带英文连接词的条目被删掉;
- 「组合」带英文连接词时整格变成「未判定」。
跑 200 张扫描时顺带统计这三处各丢了多少(列名清单、条目数、受影响的盘数),写进 PROGRESS。被丢掉的列只要补一个中文列名就能印的,直接补进 FIELD_ZH;瑜伽条目是中文源字段本身带英文的,列出源头(yoga_rules.json 哪条或哪个函数),交 Claude 判断,本单不改源头。
顺手(小)
- 回报里说「阅读页里另一处中文叙述仍可能带英文星座名」:PROGRESS 写清是哪个文件哪个函数、在什么情况下出现。只改一处映射就能修的,本单修并加断言;否则留给 Claude 另立单。
交回前必跑
pytest tests/test_full_data_parity_chapters.py tests/test_full_data_parity_appendix.py tests/test_report_english_sweep_smoke.py及原任务书第 7 节列出的文件。- 200 张英文扫描(屏蔽 PyJHora)。
tsc --noEmit、npm run lint(若又动了前端)。- 快速门、全量 pytest、前端全量与 build 由 Claude 复验。