Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
6.6 KiB
6.6 KiB
TASK:太阳返照时刻对齐(出生太阳同参考系 + 保留秒)— 2026-10-03
基线与串行
- 必须在第三批(
TASK-astrologer-rulings-batch3-20261003,分支codex/astrologer-rulings-batch3-20261003)合入 staging 之后开工。 两边都改scripts/solar_return.py,第三批 T1 还改了年运下游。 - 以合入后的
origin/staging为基线。分支codex/annual-return-frame-20261003,工作树.worktrees/annual-return-frame-20261003。 - 依据:
docs/research/shared_engine_reuse_audit_2026_10_03.md§S1。 - 上游参照:
/workspace/yinduzhanxing的7cc6425d(出生太阳改在求解器同一参考系重算)和46ed9399(年盘保留秒)。只读,不提交、不推送上游。
事故实证(按符号定位)
- 目标经度和求解器不在同一参考系。
scripts/solar_return.py:calc_solar_return_chart里,birth_sun_lon = sun_data.get('degree_raw', …)取自jyotish_engine.compute_chart_data的出生太阳。_find_solar_return_swe用_get_sun_lon_jd(swe.calc_ut+sidereal_flags)逐步逼近。- 标准盘(1963-08-07 21:15 IST Sambalpur,Lahiri)两者相差 15.1″,2025 年返照时刻差 6 分 16 秒(网站 18:24:47,上游 18:31:03)。
- 年盘丢秒。 同一函数用
sr_hour_int, sr_minute_int调compute_chart_data,没传second,年盘时刻截到整分钟。 - 外部复核。 PyJHora
drik.next_solar_date在 5 个样本年与「同参考系 + 保留秒」相差 0.0 分钟,与现状相差 −7.2~+6.8 分钟。 - 影响面。 9 位公开名人(
tests/test_pancha_mahapurusha_main_detector.py:FIGURES)× 2000–2026 年 = 243 张年盘:- 年盘上升星座变 13 张(5.3%);
- 年主变 11 张(4.5%);
- 昼夜判定变 0 张。
根因
网站引擎从上游同步到 f2241463(2026-09-03)后,solar_return.py 只按 BUG 单补过本地化与返照地点(41d1c740)。上游 9 月 7–8 日的两处修正没进来。与 ERR-109「同步太阳返照只核对函数在不在」同类。
决策记录
- 返照的定义是「太阳回到出生时的恒星黄经」。出生和返照必须用同一参考系计算,这不是方法分歧,而是计算错误。产品负责人 2026-10-03 晚确认:按上游
7cc6425d/46ed9399的做法修,第三批合入 staging 后开工,由 Claude 直接执行。 - 只搬这两处。上游同期加的
position_mode、solar_return_time_offset_seconds、node_longitude_offset_arcseconds、annual_house_system_for_sahams参数不搬(产品不用,属研究回放参数)。 - 本地化(
_localize_return_datetime、annual_location)保留网站现有实现,不回退成上游的birth_tz。
硬红线
- 不改冻结身份里的文件(
references/rectification_sealed_holdout.v1.json→production_scoring_files)。solar_return.py、tajika.py不在清单内;v5 77 例必须与改动前逐项相同(校正不用年盘,跑一遍证明)。 - 不改普通对话提示词,不动迁移,不升打分版本。
- PyJHora(AGPL)只能作为外部对照:只允许把它算出的返照 JD 数字写进 golden,不得 import 进产品代码或测试运行路径。
- 改到
references/*.json的字符串要有_en对照;tests/test_report_english_dictionary.py单独跑。 - 禁止
git stash。开工前df -h /,少于 15G 停下。
任务分解
T1 出生太阳与求解器同参考系
- 在
calc_solar_return_chart中改为birth_sun_lon = _get_sun_lon_jd(birth_jd_ut, ayanamsa_name=ayanamsa_name);拿不到时才退回出生盘的degree_raw。行文照上游7cc6425d。 solar_return返回值加target_sun_frame: "swe_sidereal_flags",便于日后核对。- 验收:
- 新测试:标准盘 2025 年返照 JD 与 PyJHora 参照值(预先算好写死在 fixture,注明来源
pyjhora drik.next_solar_date)相差 ≤ 0.5 分钟; - 另取乔布斯 2012、齐达内 2002 两例同样断言。
- 新测试:标准盘 2025 年返照 JD 与 PyJHora 参照值(预先算好写死在 fixture,注明来源
T2 年盘保留秒
- 调
compute_chart_data时传second=sr_dt_ut.second,去掉sr_hour_int / sr_minute_int的截断。照上游46ed9399。 - 验收: 新测试断言年盘
jd与返照jd_ut相差 < 1 秒。
T3 下游与 golden
- 用真实引擎重采受影响的 golden:
frontend/tests/fixtures/consult-evidence-card-golden.json;- 报告与年运包相关 golden(以
grep -rl "solar_return\|varshesha\|mudda" tests frontend/tests实测为准)。
- 每个改动的断言写「原值 / 新值 / 原因」三栏。
- 验收:
- 进度记录附 243 张年盘前后对比表:年盘上升、昼夜、年主、Mudda 首运星(第三批后 Mudda 首运星不随年盘变,应 0 变化,作为回归证据);
- 历史报告能打开(旧报告存的是生成时的结果,不重算)。
T4 记录
docs/BUG_HISTORY.md新条目:现象、根因(两处)、修复、验证(PyJHora 对照、243 张影响表)、防复发(同参考系测试 + 同步清单加「返照求解参考系」一行),关联 ERR-109、BUG-1026~1028。docs/research/pre_work_error_ledger.md在 ERR-109 下补一行复发说明。CHANGELOG.md(用户可感知:约 5% 的年份年盘上升和年主会变);PROGRESS-annual-return-frame-20261003.md;docs/tasks/README.md改状态。
让步顺序
T1 → T2 → T4 → T3。T1 的 PyJHora 对照不过(> 0.5 分钟)时停下回报,不做 T2 以后。
开工前置命令
cd /workspace/Jyotisha && git status -sb | head -1
git fetch origin --prune
git log --oneline origin/staging | grep -m1 "BUG-1218" # 确认第三批已合入,否则不开工
git worktree add -b codex/annual-return-frame-20261003 .worktrees/annual-return-frame-20261003 origin/staging
df -h /
grep -oE "BUG-1[0-9]{3}" docs/BUG_HISTORY.md | sort -u | tail -1
git -C /workspace/yinduzhanxing show 7cc6425d -- scripts/solar_return.py
git -C /workspace/yinduzhanxing show 46ed9399 -- scripts/solar_return.py
python3 scripts/pre_work_check.py --remote-timeout 8 --command-timeout 45
验收口径
- Python 定向测试;
run_quality_gate.py --profile quick;另跑tests/test_report_english_dictionary.py。 - v5 逐项相同。
- 前端:
tsc0 错;lint 0 error;npm test失败名单与开工基线逐条相同。 - 不 push,由 Claude 验收后推 staging。部署后
/api/health的gitCommit等于含门禁改动的提交。
BUG 编号起点
开工时核对当前最大号。第三批计划用到 BUG-1216 起若干条,本单预计从 BUG-1220 起。