Files
Jyotisha/docs/tasks/PROGRESS-bug-1060-d9-double-transit-20260927.md
T
Jesse_ChenandClaude Opus 5.5 7a06aa00d7
Independent Staging Quality Gate / validate (push) Successful in 11m46s
Independent Staging Quality Gate / publish (push) Successful in 3m41s
docs(tasks): BUG-1060 acceptance
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
2026-09-27 17:38:22 +08:00

5.6 KiB
Raw Blame History

PROGRESS · BUG-1060 双重过运 D9 目标错配(2026-09-27)

  • 执行方式:直接执行(产品负责人授权子代理修复证据卡工作中发现的引擎 Bug),无单独任务书。
  • 基线:origin/staging = 5671039a;分支 codex/bug-1060-d9-double-transit-20260927,工作树 .worktrees/bug-1060-d9-double-transit-20260927;未推送。
  • 开工预检:python3 scripts/pre_work_check.py --remote-timeout 8 --command-timeout 45 退出 0,六项检查全部 ok(remote_visibility verified)。
  • 冻结计分清单(ERR-110):scripts/jyotish_engine.py 不在 sealed_holdout_rerun.py PRODUCTION_FILES 与 holdout v2/v3 frozen_scoring.files 里;本轮未动任何冻结文件,未动 scripts/jyotish_api_server.py。

改了什么

文件 改动
scripts/jyotish_engine.py D9 目标构造抽成 _double_transit_d9_targets;D9_{N}宫 改用 D9 第 N 宫星座中点,D9_{宫主}(宫主) 改用该星 D9 星座中点;{宫主}_D9 / {上升主}_D9 保留;目标名不变;D1 / CL / 跨层代码未动
tests/test_double_transit_d9_targets.py + tests/fixtures/double_transit_d1_cl_golden.json 新增 7 条回归;D1/CL golden 在基线上生成
scripts/run_quality_gate.py 新测试进 CORE_PYTEST_TARGETS
frontend/tests/fixtures/consult-evidence-card-golden.json 用采集脚本重生成(未手改)
scripts/research/capture_consult_evidence_card_golden.py 只改说明:采集命令加 JYOTISH_API_CHART_CACHE_TTL_SECONDS=0(原因见下)

D9 目标逐条决定与理由见 docs/BUG_HISTORY.md BUG-1060。

前后对照(公开 AA 盘,研究参考日,raman,mean node)

复现盘 7 宫(D9 上升摩羯、D9 第 7 宫巨蟹):

目标 修复前 修复后
D9_7宫(Cancer) 土星「10 宫相位」(实为对 D9 上升的相位);木星无 木星「同宫(7宫)」;土星无
D9_Moon(宫主) 土星「同宫(3宫)」+「合相 3.08°」(月亮 D1 度数) 无命中
Mercury_D9(Cancer) / Jupiter_D9(Gemini) 木星同宫(7宫) / 土星 3 宫相位 不变
摘要句 跨层间接 Double Transit 不变

48 次直接比对(3 张公开盘 + 报告 golden 虚构输入,各 12 宫):d1、cl、summary 48/48 不变;d9 47/48 变化;double_transit 条目 2/48 变化,都是新增跨层条目——一张公开盘 10 宫新增 Saturn(D1)Venus(宫主) + Jupiter(D9)D9_Venus(宫主);虚构输入 7 宫 2 → 4 条(D9 7 宫主与 D1 7 宫主是同一颗星,两个目标落在同一 D9 星座)。

Golden

  • 数据卡 golden:JYOTISH_API_CHART_CACHE_TTL_SECONDS=0 PYTHONHASHSEED=0 python scripts/research/capture_consult_evidence_card_golden.py,两次运行逐字节相同。与原文件忽略键序后唯一差异:一张公开盘双重过运结论 9 → 10 条(family / annual / timing 三路)。
  • 采集可复现性:基线代码连跑采集得到 3 种不同字节(值相同、字典键序与列表顺序不同)。原因是 chart 缓存按 sort_keys 存盘,热缓存返回排序后的顺序;原 golden 是冷热混合顺序。TTL 0 让每次都冷算,已写进脚本说明。
  • report-density-fictional-reader.json:内含双重过运摘要(「双重触发条目=2」),没有采集脚本、测试不与现引擎比对,本轮未重生成;按现引擎会是 4。
  • 新增 D1/CL golden:在基线工作树(5671039a)上 PYTHONHASHSEED=0 python tests/test_double_transit_d9_targets.py --capture 生成,修复后重生成逐字节相同。

测试

项 基线 5671039a 修复后
Python 门禁集(gate-pytest-args)+ test_consultation_native_layers + test_report_reader_main + test_report_density_facts 971 passed / 1 skipped 978 passed / 1 skipped(+7 新增;同一条 skip:shadbala 私有 oracle 不随公开版分发;含 growth contract、privacy markers)
tests/test_double_transit_d9_targets.py 6 failed / 1 passed(仅 D1/CL golden 通过) 7 passed
前端受影响 4 个文件(evidence-card v1/v2、projection native/timing) — 30/30 pass
前端全量(Node 22.14,tsx --test tests/*.test.ts tests/*.test.tsx) 4174 / pass 4122 / fail 24 / skipped 28 / cancelled 0 4174 / pass 4122 / fail 24 / skipped 28 / cancelled 0

前端 24 条失败两边按名字逐条相同(全部是需要 Docker / PostgreSQL 的数据库与部署套件),新增失败 0。本轮没有修改任何既有断言。

未做 / 另记

  • BUG-1061(investigating):跨层 D1+D9 配对按目标名里的数字比对,同宫号永远配不上、9 宫会误配;改法会改变报告与数据卡条目数,需产品决定。
  • 部署后 chart 缓存(15 分钟 TTL,键不含代码版本)可能短暂返回旧 D9 结果。
  • 环境缺口:无 Docker,数据库 / 部署套件以与基线逐条一致的失败清单代替。

验收(Claude,2026-09-27)

基于 5671039a 独立复跑(Node 22.14,顺序执行):tsc 0;lint 0 error;npm test 4174 / 24 fail / 28 skip,失败名单与 v2 基线逐条一致、无消失测试名;Python 门禁集退出 0;tests/test_double_transit_d9_targets.py + tests/test_consultation_native_layers.py 通过;build 正常。代码抽查:新 helper _double_transit_d9_targets 四个 D9 目标的值与标签一致,D1 / 月亮上升层与交叉层未动。部署后图表缓存最多 15 分钟内可能仍返回旧 D9 结果。BUG-1061(交叉层按目标名数字配对、「D9」里的 9 导致漏配和误配)待产品决定。