新六章有 12 节读错公开包字段,整节只剩未判定,而且六章绕过了口径替换。按资料包改读路径,先拼六章再统一替换措辞,并把中文附录实际丢掉的组合句数出来。

Co-Authored-By: Grok (agent loop)
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
jesse-ux
2026-10-22 18:51:54 +08:00
co-authored by Grok (agent loop) Cursor
parent 365b1e647e
commit 92b4e220f2
8 changed files with 647 additions and 135 deletions
@@ -0,0 +1,95 @@
# PROGRESS:#91 A 段第 1 次打回(只修报告写法)
- 分支:`codex/full-data-parity-1-20261021`
- 范围:修复单 J1–J4。B 段 T4–T10、#93 未做。
- 状态:本地完成,未推送。
## 结论
0、1、9 号虚构盘的中英两版里,新六章除下面 4 节以外,每一节都至少有一行真实数据。这 4 节公开资料包没有对应模块,仍印「未判定」,第一行写明原因。
中文附录的年运表列名过滤在 200 张盘上没有丢掉任何列,所以没有补 `FIELD_ZH`。瑜伽「作用」的粘连过滤也没有删条目。瑜伽「组合」会把英文句子整格印成「未判定」:200 张盘全部中招,去重后 1030 条,源头不改。
## J1 十二节
读的是 `build_professional_report_reference_packet` 放进公开工作表的位置。0、1、9 号盘中英两版都由测试确认至少一行不是「未判定 / Not determined」。
| 节 | 公开包位置 |
| --- | --- |
| Vimsopaka 分盘贡献 | `strengths_and_scores.vimsopaka` 下直接是行星键(分数、分档) |
| Karakamsha | `advanced_systems.jaimini.karakamsha` 的星座、度数、宫主 |
| Darakaraka | `advanced_systems.jaimini.darakaraka` 的 `dk_planet`、`dk_sign`、`dk_house`、`dk_degree`、`d9_sign`、`d9_dignity` |
| D9 尊贵 | `divisional_and_special_charts.varga_full.D9_Navamsa`,行星是直接键,尊贵在 `_dignity` |
| 分盘映射 | 同上各分盘的 `Ascendant.sign`。盘名印成 `D9 Navamsa` 这种,不印带下划线的键。D81 / D108 / D144 不进这张表 |
| D30 状态 | `varga_full.D30_Trimsamsa` 与 `_dignity` |
| D30 输入 | `strengths_and_scores.shadbala.planets.*.sthana_bala.sapta_d30` |
| 行星状态输入 | `advanced_systems.avasthas.<planet>.avasthas` 的 Jagrat / Deeptadi 状态,外加度数 |
| 定位星终点与循环 | `advanced_systems.final_dispositors`。自循环印主星,多星循环印「循环 / Cycle」 |
| Sudarshana 参考点 | `divisional_and_special_charts.sudarshana.raw.reference_points` |
| Bhava Chalit 宫心 | `divisional_and_special_charts.bhava_chalit.raw.boundaries.houses` |
| 本命特殊点公式依据 | `advanced_systems.sahams` 里带星座或黄经的点,印名称、星座、度数、黄经。不印公式轨迹 |
| 注明日期的行运 | `timing_and_predictive_systems.transit_multi_reference` 的 `transit_analysis` 与 `target_date`,星宿来自 `advanced_systems.nakshatra_dasha.transit_overlay` |
## 四节白名单
公开报告资料包未带这些模块(只在被拿掉的原始阅读结果里)。每节第一行是「公开报告资料包未带此模块」/ `This module is not in the public report packet`,表内仍是「未判定」。没有为它们改引擎。
| 节 | 原因 |
| --- | --- |
| Navamsha 小运时长 | `navamsha_dasha` 没有复制进公开工作表 |
| 五鸟活动 | `pancha_pakshi` 没有复制进公开工作表 |
| Rashi Tulya Navamsa | `rashi_tulya_navamsa` 没有复制进公开工作表 |
| 当前多系统收敛 | `dasa_convergence` 的逐领域行没有复制进公开工作表。不再用 `convergence_top_domains` 充数 |
## J2 / J3
`tests/test_full_data_parity_chapters.py` 的 `test_every_section_has_a_real_cell_except_the_four_public_gaps`:0、1、9 号盘中英两版,白名单外每一节至少有一个数据单元格不是「未判定 / Not determined」。表头和分隔行不算。白名单只有上表 4 节,每项带了原因。
`test_parity_chapters_go_through_local_conventions`:六章先拼进正文,再走 `_apply_local_report_conventions`。中文源字段「必然」渲染成该函数的结果「可能」;英文字段 `divorce` 渲染成 `relationship strain`。
## J4 丢弃统计
200 张虚构盘,PyJHora 已屏蔽。汉字为 0。计数在中文渲染里,同一条若被阅读表、资料附录和解释包各走一次,调用次数会高于条目数。条目数是每张盘内按规则和原文去重后再相加。
| 处 | 丢掉了什么 | 条目 | 调用 | 受影响盘 |
| --- | --- | --- | --- | --- |
| 年运表列名 | 无。过滤执行了 800 次(每盘 4 张表),没有列被 `FIELD_ZH` 拿掉 | 0 | 800 次过滤 | 0 |
| 瑜伽「作用」 | 无。粘连过滤没有删掉任何一条 | 0 | 0 | 0 |
| 瑜伽「组合」 | 非空的组合句整格变成「未判定」 | 1030 | 2496 | 200 |
年运表优先列本来就有中文名,所以没有新列要补进 `FIELD_ZH`。`reading` 这类额外字段到不了这道过滤:优先列已经有值,回退列名单不会启用。
「作用」里的英文整句没有被删。粘连规则只删「汉字紧挨 in/and/or/from/planet/lord」、英文星座名,以及 `, :` / `in )`。BVR 规则的 `effects` 要么是纯中文,要么是纯英文,纯英文留在格子里。本单不改 `references/yoga_rules.json`。
「组合」变成「未判定」的源头:
- `scripts/yoga_engine.py` 的 `_eval_semantic_condition`:没有中文模板时,用规则里的英文 `note` 当组合句。规则在 `references/yoga_rules.json`。按渲染调用次数:`bvr_krisanga_yoga` 501,`bvr_budha_aaditya_yoga` 315,`bvr_paasa_yoga` 282,`bvr_kedaara_yoga` 162,`bvr_vanchana_chora_bheethi_yoga` 144,`bvr_dehasthoulya_yoga` 125,`bvr_daama_yoga` 126,`bvr_kalpadruma_yoga` 108,`bvr_bahu_sthree_yoga` 102,`bvr_bhaarathi_yoga` 69,`bvr_grihanasa_yoga` 66,`bvr_asubha_yoga` 45,`bvr_subha_yoga` 45,`bvr_bandhu_pujya_yoga` 54,`bvr_guhyaroga_yoga` 27(句中有英文星座名),`bvr_vallaki_yoga` 18,`bvr_soola_yoga` 12,`bvr_rajalakshana_yoga` 9,`bvr_kalaanidhi_yoga` 3。
- 没有 `rule_id` 的 283 次来自 `scripts/yogas_doshas.py`:`calc_raj_yogas` 与 `calc_dhana_yogas` 写出 `H*_Lord(...) in H*` 这种英文组合句。句子里的行星随盘变化,这里不列具体星。
这些句子是中文报告在用的英文字段。本单只计数,不改规则文件,也不改这两个函数。
## 阅读页上的英文星座名
`frontend/src/lib/personal-report-generation.ts` 的 `assembleReportDocumentV2`。它在组装 v2 报告文档时,把 D1 事实里的英文 `sign` 写进「本命基础」的 `narrative`,以及 `keyFactors` 里「第 N 宫落 {sign}」;宫内对象还是英文行星标识,两处句子加这一列,改一处星座映射盖不住。
阅读页 `frontend/src/components/personal-report/personal-report-page.tsx` 渲染的是 Markdown(`PersonalReportMarkdownView`)、盘图和事实表,不渲染这段 `natalFoundation`。`frontend/src/lib/report-public-projection.ts` 的 `foundationSection` 只是把它放到接口文档上。导出图盘列表的 `houseLine` 已经用中文星座名。本单不改前端,留给 Claude。
## 测试
解释器:`G:\Ferti\Jyotisha\.worktrees\agent-loop\.venv\Scripts\python.exe`。`PYTHONUTF8=1`。虚构盘助手已屏蔽 PyJHora。未跑快速门、全量 pytest、前端全量 `npm test`、`next build`。未改前端,未跑 `tsc` / `lint`。
| 命令 | 退出码 |
| --- | --- |
| `pytest tests/test_full_data_parity_chapters.py -q --tb=line` | 0(7 项,约 61 秒) |
| `pytest` 附录、英文冒烟、`test_report_english_edition`、`test_report_full_data_fix`、`test_full_data_domain_reader`、`test_python_hygiene_budget`、`test_api_server_growth_contract`、`test_runtime_jhora_import_scan`、`test_sidereal_nutation_frame`、`test_rashi_dashas_native`、`test_bhava_bala_formal`、`test_year_lord_blocked_no_fallback`、`test_year_lord_basis_label`、`test_repo_privacy_markers` | 0(172 项,约 925 秒) |
| `pytest tests/test_report_english_sweep.py -q --tb=line` | 0(200 张,约 1293 秒;汉字 0) |
隐私标记在写完本文之后再跑一次。
## 偏离
- 没有推送,没有设上游,没有改标签,没有发 Gitea 评论。
- 没有改 `scripts/jyotish_api_server.py`、`scripts/jaimini.py`、冻结打分文件、`references/yoga_rules.json`。没有提高 `ROOT_PY_BUDGET`。
- 没有新的 BUG 编号。BUG-1416、BUG-1417 保持不变。
- 年运列和瑜伽「作用」的实测丢弃是 0,所以没有补中文列名,也没有改瑜伽英文源。
- 组合句的 1030 条是「非空原文被印成未判定」的盘内去重数,比「句中正好有 in/and/or/from/planet/lord」的范围稍宽,多出来的是纯英文说明句。调用次数 2496 是同一条被多处渲染重复计入。
+1 -1
View File
@@ -523,4 +523,4 @@
| `TASK-full-data-parity-3-20261022.md` | — | #93 完整数据版补齐(三):「独立年度方法参考」正式环境调 PyJHora(子进程隔离;装上后其余输出逐字节不变,7 个换路径开关钉死);输入默认用本地时间与正确年份(D6 待产品确认) | 待领取(等 #91 合入) | `codex/full-data-parity-3-20261022` |
| `TASK-synastry-staging-fix-fix-20261022.md` | `PROGRESS-synastry-staging-fix-fix-20261022.md` | **#85 第 1 次打回**(T7~T11 主体通过):新地址没登记进路由清单致快速门红;CHANGELOG 与 T11 矛盾;侧栏点亮测试是空断言 | 已合入 staging | `codex/synastry-staging-fix-20261021` |
| `TASK-report-english-han-leak-fix-20261022.md` | `PROGRESS-report-english-han-leak-fix-20261022.md` | **#89 第 1 次打回**:改了冻结的校正打分文件 `jaimini.py`;测试的 PyJHora 屏蔽没传到子进程(测的不是生产那份报告,也是慢的原因);缺英文时留空藏住漏洞 | 已合入 staging | `codex/report-english-han-leak-20261021` |
| `TASK-full-data-parity-1-fix-20261022.md` | `PROGRESS-full-data-parity-1-20261021.md` | **#91 A 段第 1 次打回**:新六章 69 节里 16 节在三张虚构盘上整节「未判定」,其中 12 节数据在资料包里、是读错了字段;测试抓不到整节未判定;新六章绕过了报告口径替换;中文附录悄悄丢列和瑜伽条目要量出来 | 待执行 | `codex/full-data-parity-1-20261021` |
| `TASK-full-data-parity-1-fix-20261022.md` | `PROGRESS-full-data-parity-1-fix-20261022.md` | **#91 A 段第 1 次打回**:新六章 69 节里 16 节在三张虚构盘上整节「未判定」,其中 12 节数据在资料包里、是读错了字段;测试抓不到整节未判定;新六章绕过了报告口径替换;中文附录悄悄丢列和瑜伽条目要量出来 | 本地完成,待验收 | `codex/full-data-parity-1-20261021` |