Files
Jyotisha/docs/tasks/PROGRESS-bug-1061-cross-layer-pairing-20260927.md
T
Jesse_ChenandClaude Opus 5.5 fb543d3849 fix(engine): pair double-transit D1+D9 targets by identity, not name digits (BUG-1061)
Every D9 target name contains the "9" of "D9", so the digit comparison never
paired D1 N宫 with D9_N宫 and, for house 9, paired D1 9宫 with any D9 planet
target. Targets now carry structured metadata (layer/kind/house/planet); the
cross-layer loop pairs only the same house or targets that both point at the
D1 house-N lord. Target names and D1/D9/CL layer results are unchanged
(D1/CL golden regenerated byte-identical); 48 samples: cross entries 31 -> 38.
Evidence-card golden regenerated with the capture script.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
2026-09-27 19:08:07 +08:00

5.2 KiB
Raw Blame History

PROGRESS · BUG-1061 双重过运跨层(D1+D9)配对按名字数字比对(2026-09-27)

  • 执行方式:直接执行(产品负责人 2026-09-27 同意修复 BUG-1061,由子代理实现),无单独任务书。
  • 基线:origin/staging = 9aa37197;分支 codex/bug-1061-cross-layer-pairing-20260927,工作树 .worktrees/bug-1061-cross-layer-pairing-20260927;未推送。
  • 开工预检:python3 scripts/pre_work_check.py --remote-timeout 8 --command-timeout 45 退出 0,remote_visibility verified,focused tests ok。
  • 冻结计分清单(ERR-110):scripts/jyotish_engine.py、scripts/run_quality_gate.py 不在 sealed_holdout_rerun.py PRODUCTION_FILES 与 holdout v2/v3 frozen_scoring.files 里;未动 scripts/jyotish_api_server.py、.gitea/**、deploy/**、迁移。

改了什么

文件 改动
scripts/jyotish_engine.py 新增 _double_transit_target_meta(D1 / D9 目标的 layer / kind / house / planet)与 _double_transit_target_identities;cmd_double_transit_pac 跨层两段循环改为身份集合有交集才配对,删掉按名字抽数字的比较。目标名、各层结果、条目格式、摘要文案不变
tests/test_double_transit_cross_layer_pairing.py 新增 8 条回归(三张公开 AA 盘真实引擎)
scripts/run_quality_gate.py 新测试进 CORE_PYTEST_TARGETS
frontend/tests/fixtures/consult-evidence-card-golden.json 用采集脚本重生成(未手改)

配对规则逐条决定与理由见 docs/BUG_HISTORY.md BUG-1061。一句话:只认「同一宫」(D1 第 N 宫 ↔ D9 第 N 宫)与「同为 D1 第 N 宫主这颗星」(D1 宫主 ↔ 它的 D9 星座,以及它恰好也是 D9 第 N 宫主时的那项)。

试算过、未采纳的两种扩大口径(4 组输入 × 12 宫):

口径 跨层条目 摘要句变化 不采纳原因
采纳:同宫 + 同为 D1 第 N 宫主 31 → 38 7 / 48 —
+ 两层第 N 宫主互配(不同星) 31 → 59 14 / 48 不是同一征象星,KN Rao 三点里没有 D9 宫主;扩大技法口径需产品另定
+ 上升主与其 D9 星座互配 31 → 89 24 / 48 与第 N 宫无关,同一对在 12 个宫的调用里重复出现

前后对照(3 张公开 AA 盘 + 报告 golden 虚构输入,各 12 宫;PYTHONHASHSEED=0,chart 缓存 TTL 0)

输入 跨层条目 修复前 修复后 变化
barack_obama 10 10 无
elizabeth_taylor 9 10 +6 宫、+12 宫同宫条目;−9 宫误配 Jupiter(D1)9宫(Cancer) + Saturn(D9)Mars_D9(Capricorn)
steve_jobs 6 9 +2 / 6 / 7 宫同宫条目
虚构输入(报告 golden) 6 9 +1 / 2 / 8 宫同宫条目(报告跑的 7 宫不变,仍 4 条)
合计 31 38 +8 / −1;宫主类条目全部不变

d1、d9、cl、层内(D1 / D9 / CL)条目、stats 48/48 不变;摘要句 7/48 变化(6 处「❌ 无」→「⚠️ 跨层间接」,泰勒 9 宫反向)。

Golden

  • D1 / CL golden:JYOTISH_API_CHART_CACHE_TTL_SECONDS=0 PYTHONHASHSEED=0 python3 tests/test_double_transit_d9_targets.py --capture 重生成,逐字节不变。
  • 数据卡 golden:JYOTISH_API_CHART_CACHE_TTL_SECONDS=0 PYTHONHASHSEED=0 python3 scripts/research/capture_consult_evidence_card_golden.py,两次运行逐字节相同。与原文件比,只有 consultation_native_layers.double_transit 子树变化(其余逐项相同):乔布斯结论 6 → 9、house_7_summary「❌ 无」→「⚠️ 跨层间接」;泰勒 9 → 10;奥巴马不变;family / annual / timing 三路相同。
  • report-density-fictional-reader.json:09-23 冻结快照、无采集脚本,本轮未重生成(报告只跑 7 宫,本轮 7 宫条目数不变)。

测试

项 基线 9aa37197 修复后
Python 门禁集(gate-pytest-args,含 growth contract / privacy markers / validation integrity)+ test_double_transit_d9_targets + test_consultation_native_layers + test_report_reader_main + test_report_density_facts(修复后另加新文件) 978 passed / 1 skipped 986 passed / 1 skipped(+8 新增;同一条 skip)
tests/test_double_transit_cross_layer_pairing.py 在基线引擎上 3 failed / 4 errors(新函数不存在)/ 1 passed(快速门登记) 8 passed
前端受影响 5 个文件(evidence-card v1 / v2 / telemetry、projection native / timing) — 34/34 pass
前端全量(Node 22.14,tsx --test tests/*.test.ts tests/*.test.tsx) 4192 / pass 4138 / fail 24 / skipped 30 / cancelled 0 4192 / pass 4138 / fail 24 / skipped 30 / cancelled 0

前端 24 条失败两边按名字逐条相同(含嵌套子测试比对;全部是需要 Docker / PostgreSQL 的数据库与部署套件),新增失败 0。本轮没有修改任何既有断言。前端基线的做法:同一工作树临时换回基线数据卡 golden 跑全量,再换回新 golden(前端只受这份 fixture 影响)。

未做 / 另记

  • 部署后 chart 缓存(15 分钟 TTL,键不含代码版本)可能短暂返回旧跨层条目。
  • 环境缺口:无 Docker,数据库 / 部署套件以与基线逐条一致的失败清单代替。
  • 无新增缺陷编号。