Files
Jyotisha/docs/tasks/TASK-full-data-parity-1-20261021.md
T
Jesse_ChenandClaude Opus 5.5 f90020efda docs(tasks): full data parity part 1 brief (agent loop, issue #91)
Stage A renders what the engine already computes (71 appendix sections in
6 chapters, zh appendix from its own renderer, export sign names); stage B
ports the missing annual, dasha sub-period and Yogi point calculations on
our sidereal frame. No size cap per product; overturns fix2 F5.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LutgzyJqNhPpZy1nFsJtN3
2026-10-21 23:42:05 +08:00

27 KiB
Raw Blame History

任务书:完整数据版补齐(一)——年运、大运表与原始数据附录对齐上游交付版(agent 循环 issue #91,2026-10-21)

基线

  • 写作基线:origin/staging = bd3ce0e7b。开工时以 #89(英文漏译,BUG-1272 复发)合入后的 origin/staging 为准:#89 改的是同一组渲染文件(scripts/pl9_full_data_export.py、scripts/pl9_reader_english*.py),并带来 200 张固定种子虚构盘的英文汉字回归测试,本单复用它。#89 未合入不得开工。#90(导出弹窗)也动 frontend/src/lib/report-export-*,本单 T3 改同一组文件,与 #90 串行,后开工者先 git merge origin/staging。
  • 分支:codex/full-data-parity-1-20261021;工作树:.worktrees/full-data-parity-1-20261021。执行方 Grok(Windows + Docker),只推这个分支。
  • 本单分 A 段(只动渲染)、B 段(动引擎),同一分支、按第 6 节顺序提交(见第 5 节)。
  • 上游参照(只读,放仓库外):
    • 交付版渲染:https://github.com/732642856/yinduzhanxing.git 分支 codex/customer-export-frozen-20261016(1d549fe9)的 customer-export/registry/。只读 delivery_*.py、ashtakavarga_delivery.py、render_customer_snapshot.py 的渲染函数。不得复制 subjects.json、customer_case.py、subject_guard.py、export_customer_bilingual.py、source_* 审计文件;该分支 README 写明冻结快照含真实个案资料,冻结引擎本体未公开。
    • 计算模块与解释生成器:同仓库 main(258e08e3,10-18 起无新提交)。
  • 关联:BUG-1272、BUG-1275(真恒星口径)、BUG-1210(不回本地加减分)、BUG-1312(中文残留英文)、BUG-1393 / 1283(Niryaana Shoola)、BUG-1205(落陷取消不叫 Raja)、BUG-1282(年运卡 sr_chart);TASK-report-full-data-fix-20261008、TASK-report-full-data-fix2-20261008(F5 被本单推翻,见 D4);TASK-rashi-dashas-native-20261008;后续单 #92 TASK-full-data-parity-2-20261021、#93(独立年度方法参考)。

1. 现状实证

1.1 量测(Claude,Linux,屏蔽 PyJHora 模拟生产,bd3ce0e7b)

虚构盘(1985 年,北京,非真人),走 build_professional_report_reference_packet → render_full_data_markdown,与线上同一路径:

项 中文 英文
Markdown 字符数 411,454 820,922
UTF-8 字节 846,885 821,647
渲染耗时 7~15 s(首次含导入) 1~2 s
排盘 + 资料包 3.3~7 s 同一份

另 8 张随机虚构盘(固定种子)只出中文,端到端每张 10.1~11.6 s。上游英文交付版(产品 10-21 上传,真实个人资料,只统计字符数,不入库)共 4,687,328 字符;本单范围约 0.9 M,#92 范围约 3.1 M。

1.2 小附录:74 节,不是 66

上游英文版在「Research High-Division Raw Data」之后,除 8 个大章外有 74 个二级标题、38.8 万字符(66 是把十来个大运附属节并进「大运附表」后的口径)。试跑方法:把我方资料包补上 raw_full_reading.modules(= 我方 full-reading 的 86 个模块),直接调用上游 registry 的渲染函数。上游读到的 35 个模块名我方全部存在。

类 含义 节数 本单处理
A 数据我方已算好,渲染器没出 60 做(T2)
B 数据在,字段名或形状不同 6 做(T2)
C 我方没算 5 做(T6)
X 即 BUG-1210 删掉的本地加减分(Bhava Bala Relative Score Components / Score Extremes) 2 不做(D6)
E Goel Jaimini Strength and Special-Point Evidence,源码不在归档 1 不做(D7)

另:「Alternative Divisional Calculation Profiles」「Research High-Division Raw Data」(D81 / D108 / D144 等)移到 #92(D11)。

B 类明细:

上游节 我方现状
Navamsha Dasha AD Duration Contract 我方 navamsha_dasha.periods,上游读 major[].antardasha[].duration_months
Current Dasha Convergence by Domain 我方 dasa_convergence.domain_activations,上游读 domain_evaluations
Yoga Participants and Timing Links 上游读 advanced_systems.yoga_interpretation_pack.pages;我方在渲染时由 pl9_interpretation_packs.attach_full_data_interpretation 挂上
Bhava Chalit Planet Placements 路径不同(d1_rasi_bhava.bhava_chalit)
Bhava Bala Three-Component Alternative 我方正式三分量在 modules.bhava_bala.houses(BUG-1210 / 1385)
House Components and Physical Coordinates 三分量同上;Kranti / 速度上游读 kranti_local / speed_display_local,我方 pl9_p33_declination_contract 在资料包里为空,先查 BUG-1199 修好的 Kranti 列取自哪里

C 类明细:

上游节 缺什么
Jaimini Yogi and Ava Yogi 潜在缺陷:scripts/jyotish_engine.py 组装 jaimini 时 from yogi_sphuta import build_yogi_sphuta_local,我方没有这个文件,ModuleNotFoundError 被包成 status: blocked,每张盘都如此(上游 main 有,195 行,不导入 jhora)
Annual Return House Framework solar_return.annual_houses 不产出
Tripataki Chakra Detail 只有 solar_return.tri_pataka 三旗摘要;上游 tripataki_chakra.py(108 行)出星座格与 vedha 行
Natal / Annual Saham Formula Trace sahams.formula_traces 不产出

上游 structural_markdown 英文在我方数据上报 Untranslated structural field: verdict_label:我方有上游词表没覆盖的字段,必须补全中英字段名。

1.3 主章与大章

上游章节(字符) 我方(字符) 根因(按符号定位)
Annual Varshaphala and Tajika(131,265) 41,654 我方渲染器 pl9_reader_export 已会读 monthly_chart_pack、lifetime_annual_chart_pages、annual_chart_series_pack、pl9_annual_dasha_results、normalized_tables,但我方 scripts/annual_tajika_pack.py(780 行)不产出这些键,节被静默跳过。上游同名文件 2,788 行,多 40 个函数:_monthly_chart_pack(月返照=月段)、_lifetime_annual_chart_pages(年龄段)、_annual_chart_series_pack / _local_eight_year_overview、_pl9_annual_dasha_results、_normalized_tables、_native_patyayini_dasha、_native_tithi_pravesh(依赖 tithi_pravesh.py,236 行,我方没有)、_annual_visual_panel 等。_normalize_pyjhora_*、external_engine_comparison 来自 PyJHora 回放,不搬
Annual Chart Numeric Data(189,395) 试跑 1,075 依赖 pl9_annual_visual_panels,我方没有
Standard Dasha Tables(127,598 / 1,792 表行) 52,410 / 894 dasha_master_pack.families 15 个体系全部只有主运(逐体系核对,子运 0 条)。Narayana、Ashtottari、source_bounded_child_periods 已有子运规则,没进 master pack。Kalachakra:我方 scripts/kalachakra_dasha.py 是旧版,只有主运;上游有 _build_subperiods、_attach_recursive_subperiods
Chara Dasha Period Durations(111,160) 无 A 类:modules.jaimini.chara_dasha 有 12 / 144 / 1,728 行,试跑 110,198
Narayana Method Comparison(28,876) 无 B 类:narayana_dasha.method_comparison 在,上游函数报 KeyError: 'direction'
Three-Year Predictive Ephemeris(56,132) 无 three_year_predictive_ephemeris_pack.months 只有慢星,且从目标年 1 月起;kp_monthly_report.months 有 9 星但为 KP 口径。已有 scripts/kp_monthly_transits.py 可按报告口径逐月算
Saturn and KP Tables(7,687) 2,522 缺 Dhayya / Laghu Kalyani / Kantaka 结果段与「KP 原版细格」;数据 sade_sati、kp 已有
Planets, Nakshatras and Houses(8,970) 英 4,608 / 中 1,708 pl9_interpretation_packs.build_graha_interpretation_pack 每星只出 6 句固定骨架(如「六维力量合计为未列出」——合计取不到);上游逐星有传统段落
Bhavesh 宫主逐宫解释 附录 6,352(英) build_bhavesh_interpretation_pack 同样只出骨架句
Independent Annual Method Reference(16,004) 无 内容是 PyJHora 回放(上游写明 Source: PyJHora)。本单不做,另立 #93(D5)
Goel Jaimini Strength(48,057) 无 冻结引擎专有,不做(D7)

1.4 中文乱句、英文丢否定、空表与英文星座名

现象 位置 根因
「时蛇煞: 第5宫条件7planet in」 附录「Dosha 与行运摘要」 源字段 yogas_doshas.kaal_sarp_dosha.summary 是中文「部分Kaal Sarp Dosha——5/7颗行星在轴线之间」。英文附录 _render_pl9_ai_density_raw_data_markdown_en(Dosha 表)原样印 summary,英文清理器删汉字后剩 houses 5/7 condition planet in;中文附录不是从中文源字段出的:render_full_data_markdown 中文分支把英文附录交给 _sanitize_pl9_ai_density_markdown 短词回译。原意「7 颗中 5 颗」变成「第5宫条件7」
「火星 in 12 巨蟹座, : low」 同表 Mangal 行 同一回路。更严重:无火星煞的盘源文「无Mangal Dosha(Mars不在煞宫)」,英文印 Mangal Dosha(Mars in ),中文印「火星婚姻煞(火星 in )」,「无」丢了,读起来像有煞。「Detected / phase」列取 present / detected / status,真实键是 has_dosha / is_active,整列空
「Raja瑜伽 … 火星 and 太阳 together in 第10」 附录「可用瑜伽」,及正文个别瑜伽组合句 同一回路;8 张随机虚构盘每张 31~46 行,265 行在「可用瑜伽」
回译之外的现成实现没用上 pl9_full_data_export.py _render_pl9_ai_density_raw_data_markdown_zh 从未被调用
「行星友敌关系矩阵」只有标题、没有表(中英都是) 附录 _render_pl9_ai_density_raw_data_markdown_en 遍历 planetary_friendship 的键当行星,实际结构是 {status, method, rows: [...]},行全被跳过
中文导出里「第 1 宫 · Leo:…」 导出 Markdown 的「D1 北印度盘」「月亮参考盘」文字列表(排在最后一章「Dosha 与行运摘要」之后,所以产品看到的是这一章) frontend/src/lib/report-export-blocks.ts::houseLine 中文分支直接用 house.sign;toNorthIndianChart(report-chart-block.ts)给出的是英文 SIGNS。引擎正文本身(图盘围栏外)9 张虚构盘英文星座名为 0

2. 根因

  1. 完整数据版只移植了上游 pl9_ai_density 主体(23be1807),没有移植上游交付版在主体之后追加的 registry 附录;我方年运资料包停在旧版,渲染器读的键没人产出,节被静默跳过。
  2. 中文附录用「英文附录 → 短词回译」生成,源字段本身是中文时两次转换丢字、丢否定;附录渲染对资料形状的假设与实际不符时(友敌矩阵)静默出空表。
  3. yogi_sphuta.py 漏搬,导入失败被包成 blocked,测试只看有没有这个键。
  4. 导出的图盘文字列表在中文版没有用中文星座名。

3. 决策记录(产品负责人 2026-10-21)

# 决定
D1 issue 列出的各章补到与上游交付版同等展开,范围以本表为准
D2 数值一律用我方引擎(BUG-1275 之后的真恒星口径),不搬上游视位置算法;与上游数值不同的,在 PROGRESS 逐项列原因
D3 中英两版都要有,英文汉字为 0(复用 #89 的 200 盘扫描)
D4 推翻 TASK-report-full-data-fix2-20261008 F5「Patyayini、Tripataki、月返照、八年总览、生命周期年度返照若我方无数据……不补算」,以及 TASK-report-full-data-fix-20261008 第 22 行「Patyayini 不补算」。本单用我方原生计算补上;PyJHora 回放部分仍不搬
D5 「独立年度方法参考」本单不做,已另立 #93(照上游调用 PyJHora,排在本单之后);本单不写占位
D6 BUG-1210 对应的两节(Bhava Bala Relative Score Components / Score Extremes)不做
D7 Goel Jaimini Strength and Special-Point Evidence 不做
D8 年运:当年 + 后两年,三年全部展开,每一年都有:年盘与年主依据、Muntha、Mudda 与 Patyayini(原生)、月返照(月段)、Tithi Pravesha、Sahams(含公式轨迹)、Tajika 相位 / 瑜伽 / 力量 / Tripataki、年盘整宫框架、年度大运结果、年度图盘数值;年龄段(生命周期年返)与出生地八年总览各出一次,现居地总览只在有现居地时出
D9 三年逐月星历:从报告日期所在月起 36 个月,报告口径 9 星;另列 KP 口径表与五级 Vimshottari 月采样
D10 74 个小附录归为 6 章(第 6 节 T2 的分组表),中英文章节一一对应、顺序一致
D11 D81 / D108 / D144 研究型分盘与「其他分盘口径的计算数据」移到 #92,同样标研究口径;本单不动已有的分盘数值表
D12 逐星解释与宫主逐宫解释补到上游篇幅,按 10-08 的写法:传统段落用「可能」口吻,叠加我方功能吉凶 v2
D13 Kalachakra 子运明细移入本单,标注「简化模型」(英文 Simplified model),不改现有主运
D14 不设大小上限,只记录字符数、字节数、生成时长;碰到前端等待(ENGINE_TIMEOUT_MS 180 s)或存储 / 接口硬上限才停下回报,不得截断
D15 顺带修:空的行星友敌关系矩阵;中文附录改用现成的 _render_pl9_ai_density_raw_data_markdown_zh,不再回译;搬 Yogi 点模块 yogi_sphuta;中文导出图盘列表的英文星座名改中文

4. 硬红线

  1. 口径:所有新经度一律经我方排盘函数取得(与 tests/test_sidereal_nutation_frame.py 同框架:Swiss Ephemeris 星历 + 真岁差,等价 FLG_SIDEREAL)。上游模块里的 FLG_MOSEPH、FLG_TRUEPOS、longitude_profile / position_mode='apparent'、交点偏移一律改走我方函数。新增测试:每个新计算模块在出生时刻取到的日、月经度与 core_chart.planets.*.degree_raw 差 ≤ 1e-6°。
  2. PyJHora:运行时不得导入 jhora(tests/test_runtime_jhora_import_scan.py);*_pyjhora_*、external_engine_comparison、pyjhora_canonical_adapter.py、specialized_dasha_external_replay.py 不搬。
  3. 增长冻结:不改 scripts/jyotish_api_server.py(报告仍走 /api/professional_report_reference);tests/test_api_server_growth_contract.py 不放宽。
  4. 根目录文件数已满:scripts/*.py 现为 448 个 = tests/test_python_hygiene_budget.py 的 ROOT_PY_BUDGET。新渲染代码进 scripts/report_render/;新计算模块(yogi_sphuta、tithi_pravesh、tripataki_chakra 等)进新子包(例如 scripts/annual_native/),引擎里的导入跟着改。不得调高预算。开工时若数字已降,仍优先放子包。
  5. 不新增静默吞错:SILENT_EXCEPT_BUDGET = 1 只给 classical_astrology.py。失败记日志并带具体原因,不得把 ImportError 包成 blocked 了事。
  6. 引擎输出会变:验收必须全量 pytest 与开工基线逐条比对;改既有断言写「原值 / 新值 / 原因」三栏。
  7. 我方报告口径全部保持:_apply_local_report_conventions、BUG-1199~1229、BUG-1205、BUG-1210、BUG-1282、BUG-1312 卫生门、BUG-1393。搬来的模板逐条核:不断言死亡、寿命、疾病诊断、离婚、流产、不孕;不写「再婚 / 几段关系 / 早夭」;吉凶以我方功能吉凶 v2 为准;主题写「可能突出」,不写必然。
  8. 中英各自从源字段生成:中文不得由英文回译,英文不得靠删汉字;每个字段名、单位、枚举值都有中英两套标签,缺标签测试失败,不得印原始键名。
  9. 对话与校正不受影响:read_full_data_domain 经卡片选择后的对话卡对 3 张固定虚构盘逐字节不变;生时校正打分 golden 不变。
  10. 不截断(D14):没有大小上限,但碰到 180 s 前端等待或存储 / 接口报错,就停下推分支、PROGRESS 写实测,不得删行、抽样或降精度。
  11. 不动数据库结构与迁移;不改 .gitea/;不推 main。
  12. 隐私:只用虚构盘与公开名人盘;不复制上游个案文件;PROGRESS 与 Bug 历史实测段只写「虚构盘」。

5. 分段与提交顺序(一个分支)

  • A 段(只动渲染与前端导出,引擎数值不变):T1 → T2 → T3,一条任务一个提交。做完推分支,PROGRESS 标「A 段完成」,Claude 验收后合入 staging。
  • B 段(动引擎):先 git merge origin/staging(不 rebase 已验收的提交),再 T4 → T5 → T6 → T7 → T8 → T9 → T10,一条任务一个提交。

6. 任务分解

# 段 内容 验收标准
T0 A 盘点:上游 82 个二级标题(74 小节 + 8 大章)及标准大运表、Saturn/KP、年运章、逐星与宫主解释的三级标题,逐一对应我方「已有 / A / B / C / X / E / 移 #92 / 移 #93」与源字段路径,核对第 1 节分类 PROGRESS 一张表;与本任务书不同的行单列并写原因
T1 A D15 的渲染部分:中文附录改用 _render_pl9_ai_density_raw_data_markdown_zh(补齐到与英文附录同节同序),删去回译路径;Dosha 摘要、可用瑜伽表中英文都从结构化字段出(has_dosha / type / rahu_house / ketu_house / is_active / phase 等),没有就写「未判定 / Not determined」;正文瑜伽组合句中文取中文源;行星友敌矩阵读 rows(天然友 / 敌 / 中性、临时、复合)。中文卫生门加两条:图盘围栏外英文星座名为 0;汉字紧邻 in / and / or / from / planet / lord 以及 , :、in ) 为 0 200 盘扫描:中文两条新门均为 0,英文汉字 0;无火星煞的盘中英都写「无 / No」;部分时蛇煞的盘写出「7 颗中 5 颗」或等价英文;友敌矩阵 9 行非空;BUG_HISTORY 新编号
T2 A 小附录 71 节(A 类 60 + B 类 6 + C 类 5 的渲染位,C 类数据到 T6 才有)+ Chara 时长 + Narayana 对照 + Bhrigu 推进序列,按我方字段重写渲染(scripts/report_render/),按 D10 归 6 章,见下方分组表。C 类在 T6 之前不出现,不写占位 3 张固定虚构盘中英文:6 章标题中英一一对应、顺序相同;A、B 类每节出现且非空,每节一个结构测试(表头 + 至少一行);字段标签全覆盖测试;Narayana 两种口径分列不拼接
T3 A D15 前端:report-export-blocks.ts::houseLine 中文用中文星座名(SIGN_ZH),英文不变;顺查导出与阅读页其他中文出口有无同类问题 report-export-blocks.test.ts 加断言:中文图盘列表不含任何英文星座名,英文含;tsc、lint 过;PROGRESS 记 A 段生成时长与中英大小
— — A 段交付点:推分支,PROGRESS 标明 —
T4 B 搬 yogi_sphuta 进子包并接线(修潜在缺陷) 虚构盘 jaimini.yogi_avayogi_local.status 不是 blocked;红线 1 经度测试;「Jaimini Yogi and Ava Yogi」中英出现;BUG_HISTORY 新编号
T5 B 标准大运表全量:凡我方模块已有出处子运规则的体系(Narayana、Ashtottari、source_bounded_child_periods 覆盖的体系)把子运写进 dasha_master_pack 并出表;Kalachakra 子运与次小运(D13)搬上游 _build_subperiods / _attach_recursive_subperiods,挂在我方现有主运上,表头与说明标「简化模型 / Simplified model」;若离不开上游新版主运就停下回报,不换主运。没有出处规则的体系写「本体系未提供子运」。Ashtottari 的起运表与适用口径和 PyJHora 不一致(#88 写单时查出,另立单处理),本单只把引擎现有子运原样出表,不改其起运与主运 各体系主运逐行不变;子运条数写进 PROGRESS;Vimshottari 三层不变;Kalachakra 表含「简化模型」
T6 B C 类:搬 tripataki_chakra、本命与年度 Saham formula_traces、年盘整宫 annual_houses,进子包;T2 预留的四节出表 红线 1 经度测试;四节中英出现
T7 B 年运(D4、D8):把上游 annual_tajika_pack.py 缺的原生部分搬进我方(月返照、生命周期年返、八年总览、年度大运结果、normalized_tables 原生行、原生 Patyayini、原生 Tithi Pravesha 连带 tithi_pravesh.py、pl9_annual_visual_panels);当年 + 后两年每年按 D8 清单全部展开;出「年度图盘数值数据」 三年每年 D8 各项中英文都出现(缺项必须在 PROGRESS 写原因);已有年运字段(年主、Muntha、Mudda、Sahams、Tajika)对 3 张虚构盘逐值不变,只多新键;对话年运卡不变
T8 B 三年逐月星历(D9):用 kp_monthly_transits 按报告口径算报告月起 36 个月 × 9 星,另列 KP 口径表与五级 Vimshottari 月采样 每个口径 36 × 9 行,首月 = 报告日期所在月;任取一采样点月亮经度与我方排盘函数同刻结果差 ≤ 1e-6°
T9 B 解释补长(D12):build_graha_interpretation_pack、build_bhavesh_interpretation_pack 按上游 main 对应生成器补传统段落,「可能」口吻,叠加功能吉凶 v2;修「六维力量合计为未列出」;Saturn / KP 表补 Dhayya、Laghu Kalyani、Kantaka 结果段与 KP 细格 「行星、星宿与宫位解释」与宫主逐宫解释中英文字数不低于上游同盘同章(英文按上游 8,970 字符量级,中文按比例),PROGRESS 列逐章字数;红线 7 模板口径测试(中英全文)
T10 B 量测与文档(D14):Linux(Claude 复测)与 Windows 生成时长、中英 Markdown 字符与字节、快照 JSON 大小、.md 导出大小、阅读页章数与最大一章;与上游数值不同的项列表并写原因(预期:真恒星 vs 视位置、Swiss vs Moshier)。BUG_HISTORY、CHANGELOG、PROGRESS、docs/testing/full-data-parity-1-20261021.md(真机:生成新报告、中英切换、逐章翻到底、导出中文 .md 检查图盘列表、旧报告仍能打开) 文档齐;中英合计生成在 180 s 以内,否则按红线 10 停下

T2 分组表(中英一一对应,章内按此顺序):

章 中文标题 英文标题 包含
1 大运附表 Dasha Appendix Vimshottari Birth-Balance、Kalachakra Dasha(主运层)、Yogini 周期、Tribhagi Profile、Tribhagi 周期、Navamsha AD Duration、Nakshatra Dasha Context、Bhrigu Cycle、Bhrigu Approximate Progression、Conditional Dasha Applicability、Dasha Boundary Scan、Current Dasha Convergence、Chara Dasha Period Durations、Narayana Method Comparison
2 年运附表 Annual Appendix Annual Return House Framework、Annual Return Calculation Contract、Tajika Aspect and Yoga Candidates、Tripataki Chakra Detail、Annual Tajika Strength、Annual Saham Formula Trace、Annual Chart Numeric Data(T7)
3 力量与八分法 Strength and Ashtakavarga Shadbala Subcomponent、Shadbala Result、House Components and Physical Coordinates、Bhava Bala Three-Component、Vimsopaka Contribution、AV Contribution and Reduction、AV Yoga Pinda、AV Sign Assessments、Prastara Totals、Avastha Inputs、D30 States、D30 Source Input、Pushkara Basis、Lagna Vargottamamsa
4 关系、相位与瑜伽 Relationships, Aspects and Yogas Neutral and Compound Relationships、Relationship Conventions、Dispositor Terminals、Dispositor Chain、Aspect Geometry、Argala、Congregation、Bhrigu Relationship Geometry、Yoga Participants、Canonical Yoga Rows、Whole-Sign Occupants
5 星宿、特殊点与行运 Nakshatras, Special Points and Transits Nakshatra Reference、Tara-Chandra Matrix、Natal Tithi Lord、Birth Calendar、Pancha Pakshi、Natal Vivah Saham、Natal Saham Formula Basis、Natal Saham Formula Trace、Arudha / UL / A10、Jaimini Calculation Details、Graha Pada、Yogi and Ava Yogi(T4)、Karakamsha、Darakaraka、Rashi Tulya Navamsa、Moon Chart Reference、Sudarshana Points、Dated Transit、Multi-Reference Transit、Double Transit PAC、Lagna / 7th Lord Transit、三年逐月星历(T8)
6 计算口径 Calculation Conventions Natal Calculation Conventions、KP Calculation Conventions、D9 Dignity、Divisional Mapping、Bhava Chalit Planet Placements、Bhava Chalit Centres、Bhava Chalit Convention

合计 71 个小节(74 − X 2 − E 1)+ Chara、Narayana 两个大章 + 两项新数据。

7. 验收分工

检查 Grok 自跑 Claude 验收
改到的与新增的 Python 测试文件(至少: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_*)及 #89 的 200 盘扫描 必跑(工作树 .venv),屏蔽 PyJHora 再跑一次 复验
tsc --noEmit、npm run lint、改到的前端测试文件(report-export-blocks.test.ts 等) 必跑(T3 动了前端) 复验
Python 快速门 run_quality_gate.py --profile quick 不跑 以 Claude 为准
Python 全量 pytest 与开工基线逐条比对(A、B 段各一次) 不跑 以 Claude 为准
前端全量 npm test、npm run build(/ 仍 Static,首屏 gzip ±2%) 不跑 以 Claude 为准
test:db 不动数据库,不要求 —

8. 让步顺序

不让步:T1、T3、红线全部、英文汉字 0、对话与校正不变。时间不够时依次让出:T9 的 Saturn / KP 结果段 → T8 → T5 的 Kalachakra 次小运 → T7 的生命周期年返与八年总览。让出的写进 PROGRESS 留给下一单。A 段不等 B 段。

9. 开工前置命令

git fetch origin --prune
git log origin/staging --oneline | grep -iE "#89|han_leak|1272" | head   # 确认 #89 已合入,否则不开工
git worktree add -b codex/full-data-parity-1-20261021 .worktrees/full-data-parity-1-20261021 origin/staging
cd .worktrees/full-data-parity-1-20261021
# 上游参照放仓库外,只读
git clone --filter=blob:none https://github.com/732642856/yinduzhanxing.git ../yinduzhanxing-ref
git -C ../yinduzhanxing-ref fetch origin codex/customer-export-frozen-20261016
git -C ../yinduzhanxing-ref ls-tree --name-only 1d549fe9 customer-export/registry/
ls scripts/*.py | wc -l                       # 448 = ROOT_PY_BUDGET
grep -n "yogi_sphuta" scripts/jyotish_engine.py
grep -n "_render_pl9_ai_density_raw_data_markdown_zh\|Planetary Friendship Matrix" scripts/pl9_full_data_export.py
grep -n "function houseLine" -A4 frontend/src/lib/report-export-blocks.ts
grep -oE "^## BUG-[0-9]+" docs/BUG_HISTORY.md | sort -u | sort -t- -k2 -n | tail -1

10. BUG 编号

写作时 docs/BUG_HISTORY.md 最大号 BUG-1403。文件里有重复段落,按上面命令 sort -u 后取最大号,开工时最大号 + 1 起(#88~#90 可能先占号)。预计至少三条:中文附录乱句与英文丢否定(T1,含空友敌矩阵);中文导出图盘列表英文星座名(T3);yogi_sphuta 漏搬致 Yogi / Ava Yogi 恒为 blocked(T4)。