Files
Jyotisha/docs/tasks/TASK-full-data-parity-1-fix-20261022.md
T

5.9 KiB
Raw Blame History

修复单:完整数据版补齐(一)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 复验。