Files
Jyotisha/docs/tasks/TASK-full-reading-module-parity-20261018.md
T

9.1 KiB
Raw Blame History

任务书:full-reading 补齐上游 5 个模块(2026-10-18)

基线与顺序

  • origin/staging = 47b4a2317(开工前 git fetch origin --prune,以最新为准)。
  • 分支:codex/full-reading-module-parity-20261018;工作树:.worktrees/full-reading-module-parity-20261018。
  • 顺序:纯 Python,和 #78(档案上限,只改前端与迁移)没有文件冲突,可以先做。和 #79(婚恋合盘引擎)都可能动 scripts/jyotish_engine.py,两边都只加不改,后合入的一方解决冲突。必须在 TASK-synastry-full-report-20261018.md 开工前合入。
  • 上游参照:占星师仓库 yinduzhanxing 提交 bde5d615。上游仓库私有,本单需要的文件副本在 docs/research/upstream_full_reading_parity_bde5d615/(.py.txt 搬入时去掉 .txt)。

现状实证

Claude 10-18 用两位公开名人(布拉德·皮特、安吉丽娜·朱莉,出生资料来自公开星盘库)在两边各跑一次 full-reading(--ayanamsa lahiri --node-mode mean --today 2026-10-18):我们 81 个模块,上游 86 个。

# 模块(modules.<key>) 我们现状 上游 定位
1 unified_western_reading 永远 blocked:No module named 'unified_western_reading'。引擎里有调用,文件从没搬过来 parameter_sensitive,有原始结果 我们 scripts/jyotish_engine.py 里 from unified_western_reading import build_unified_western_reading(full-reading 内);上游 scripts/unified_western_reading.py
2 lagna_vargottamamsa 没有这个键 D1 / D9 上升是否同星座 上游引擎 _calc_lagna_vargottamamsa
3 pushkara_planets 没有这个键(原始 pushkara 有) 落在 Pushkara 的行星简表 上游引擎 _summarize_pushkara_planets
4 punarphoo 没有这个键;scripts/punarphoo.py 与上游逐字相同,只是 full-reading 没调用 observation_only 上游 full-reading 里 detect_punarphoo(planets)
5 navamsha_dasha 没有这个键 Goel Method 1(goel_method_1_v1) 上游 scripts/navamsha_dasha.py(依赖上游 dasha_profile_arbitration、rashi_dasha_explicit_contract,我们都没有)
6 niryaana_shoola_dasha 没有这个键 上游 scripts/niryaana_shoola_dasha.py 见下条

我们已有更好的两套:Navamsha Dasha 与 Niryaana Shoola 在 scripts/rashi_dashas_native.py(_navamsha 用 goel_method_1_v1,Niryaana Shoola 用 goel_nirayana_shoola_v1),完整数据版报告经 scripts/rashi_dasha_report.py 在用。BUG-1283 已定:上游那份 niryaana_shoola_dasha.py(按 365.25636 日一年、上升与第 7 宫平手就停)不得再被新路径调用;上游 bde5d615 的版本仍是 YEAR_DAYS = 365.25636。

影响:上游合盘证据包的「次要大运互证」一项因 navamsha_dasha 缺失整项 blocked;西占层在个人报告与合盘里都拿不到。

根因

前几轮上游同步只按提交范围挑,这几处是上游 7~9 月加进 full-reading 的(fad247d4、568d8d20、2ff139de、680f94e5 等),我们同步时漏了;unified_western_reading 则是调用搬了、文件没搬。

决策记录(产品负责人 2026-10-18)

# 决定
F1 比上游少的模块都补上,让我们的 full-reading 是上游的超集
F2 navamsha_dasha、niryaana_shoola_dasha 两个键用我们自己的 rashi_dashas_native 结果填,不搬上游那两份文件(BUG-1283 的红线不变)。键名与上游一致,形状按上游合盘校验器能识别的方式包一层(见 T3)
F2b 10-18 更正(占星师 7a773d13):我们 rashi_dashas_native 里的 Niryaana Shoola(goel_nirayana_shoola_v1)其实是 Shoola 的规则,正确口径另立单 TASK-niryaana-shoola-pvr-20261018.md。所以本单 niryaana_shoola_dasha 键不再用它填,只写占位 {"execution_status": "blocked", "reason": "口径更正中,见 TASK-niryaana-shoola-pvr-20261018"};合盘校验器对这一行本来就固定判「不适用」,不影响合盘。navamsha_dasha 照原计划
F3 西占层(unified_western_reading)按上游搬入。它在报告里的用途与上游一致:只作补充,合盘报告不得出现方法名(合盘任务书红线 3)
F4 个人报告里如果因为西占层从 blocked 变成有结果而多出内容,这是预期的修复,不是回归;改动的断言写三栏说明

硬红线

  1. scripts/jyotish_api_server.py 不动。scripts/jyotish_engine.py 只在 full-reading 组装处加键,不改既有键的值。
  2. 不得 import scripts/niryaana_shoola_dasha.py(BUG-1283 的语法树断言 tests/test_rashi_dashas_native.py 必须仍然绿)。
  3. 生产不 import PyJHora。验收会屏蔽 PyJHora 模拟生产(见 feedback-acceptance-prod-deps)。
  4. 运行时不得联网、不得调外部程序(T1 测试②守住)。
  5. full-reading 耗时:两位名人各跑 3 次取中位数,前后对比写进 PROGRESS。增加超过 20% 要说明来源,超过 50% 停下报 Claude。
  6. 全量 pytest 与开工基线逐条比对,无新增失败。改既有断言写「原值 / 新值 / 原因」三栏。

任务分解

# 内容 验收标准
T1 西占层:搬上游 scripts/unified_western_reading.py。它在导入时需要 scripts/classical_astrology.py(上游约 1.3 万行,我们没有这个文件)以及 western_chart_engine.py、western_timing_engine.py 里的若干函数(这两份与上游有差异)。做法:classical_astrology.py 原样整份搬入(Claude 已用语法树核对:build_classical_astrology_packet 走不到任何 urlopen / subprocess.run;联网和调外部程序的只有 OCR、Astrolog、公开案例抓取那几个研究用函数,full-reading 不调用);western_* 只补 unified_western_reading 与 classical_astrology 需要的函数,其余差异记进 PROGRESS,不顺手同步 两位名人 modules.unified_western_reading.status 不再是 blocked;新增测试:① full-reading 里该模块能导入(防止再出现「调用搬了、文件没搬」);② 把 urllib.request.urlopen 和 subprocess.run 打桩成抛错后跑一次 full-reading,仍然成功(证明运行时不联网)
T2 三个简单键:从上游引擎搬 _calc_lagna_vargottamamsa、_summarize_pushkara_planets 两个函数,并在 full-reading 里写 lagna_vargottamamsa、pushkara_planets、punarphoo(调用现有 scripts/punarphoo.py,包法照上游,异常时写 {"status": "blocked", "reason": …}) 每个键各一条测试;名人结果与上游同一输入逐字段一致
T3 两个大运键:用 rashi_dashas_native.calculate_rashi_dashas 的 Navamsha 与 Niryaana Shoola 结果填 navamsha_dasha、niryaana_shoola_dasha。保留我们的 profile id 和期间表;外层加上游校验器读的状态字段(以上游 skills/jyotish-full-synastry-reading/scripts/validate_full_synastry_packets.py 的 _status 为准:不能是 blocked / not_available / unavailable / skipped,也不能只有 error) 用上游 validate_full_synastry_packets.py 跑两位名人:Navamsha Dasha、Niryaana Shoola Dasha 两行都是 executed 或 parameter_sensitive;合盘任务「secondary-dasha convergence」不再是 blocked;名人的 Navamsha 大运首段与上游 goel_method_1_v1 一致(不一致写进 PROGRESS 交 Claude 仲裁)
T4 超集断言:新增测试固定 full-reading 的模块键清单(至少包含上游 86 个键名),以后少了会红 测试绿
T5 记录:BUG_HISTORY(下节编号)、CHANGELOG(报告里西占层恢复)、PROGRESS(耗时对比、未同步的西占差异、上游与我们 Navamsha 首段对比) 文档齐

让步顺序

T3 → T2 → T1 → T4。T1 若因依赖差异过大做不完,先交 T2–T4,T1 写进 BLOCKED 并单独回报,不得为了搬它而整份覆盖我们的 western_* 文件。

开工前置命令

git fetch origin --prune
git worktree add -b codex/full-reading-module-parity-20261018 .worktrees/full-reading-module-parity-20261018 origin/staging
cd .worktrees/full-reading-module-parity-20261018
ls docs/research/upstream_full_reading_parity_bde5d615/
grep -n "from unified_western_reading" scripts/jyotish_engine.py
grep -n "BUG-1[0-9][0-9][0-9]" docs/BUG_HISTORY.md | tail -3
python3 scripts/pre_work_check.py --remote-timeout 8 --command-timeout 45

验证:全量 pytest tests -n 4 与开工基线逐条比对;run_quality_gate.py --profile quick;屏蔽 PyJHora 后再跑一遍 tests/test_rashi_dashas_native.py 与新增测试。

BUG 编号

#79 已预留 BUG-1370~1374。本单从 BUG-1375 起(开工时核对最大号,冲突整体顺延):

建议编号 事实
BUG-1375 full-reading 的西占层永远 blocked:引擎调用了 unified_western_reading,文件没搬(实证 1)
BUG-1376 full-reading 比上游少 5 个模块键,合盘证据包「次要大运互证」整项 blocked(实证 2~6)