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
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
037cd1aa1d
commit
fb543d3849
@@ -0,0 +1,60 @@
|
||||
# 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,数据库 / 部署套件以与基线逐条一致的失败清单代替。
|
||||
- 无新增缺陷编号。
|
||||
@@ -36,6 +36,7 @@
|
||||
| 任务书 | 进度 | 主题 | 状态 | 落点 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| —(子代理直接执行,无任务书) | `PROGRESS-bug-1060-d9-double-transit-20260927.md` | **双重过运 D9 目标错配(BUG-1060)**:D9 第 N 宫目标误用 D9 上升、D9 宫主目标误用 D1 度数,改为标签所写的 D9 星座;D1 / CL 层逐字节不变;数据卡 golden 重采集(一张盘跨层结论 9→10);另记 BUG-1061 跨层数字比对(未修) | 已验收(待部署) | `codex/bug-1060-d9-double-transit-20260927`(未推送) |
|
||||
| —(子代理直接执行,无任务书;产品 2026-09-27 授权) | `PROGRESS-bug-1061-cross-layer-pairing-20260927.md` | **双重过运跨层配对按名字数字比对(BUG-1061)**:改为结构化身份配对(D1 第 N 宫↔D9 第 N 宫;D1 第 N 宫主↔同一颗星的 D9 目标);各层结果与 D1/CL golden 逐字节不变;48 样本跨层条目 31→38;数据卡 golden 重采集(乔布斯 6→9、泰勒 9→10) | 待验收 | `codex/bug-1061-cross-layer-pairing-20260927`(未推送) |
|
||||
| `TASK-rectification-fewer-probes-card-20260926.md` | [PROGRESS](PROGRESS-rectification-fewer-probes-card-20260926.md) | **减少无效追问 + 卡片区间为主**:引导补件离线新增达标 0 → 上限 6→2、定向题问完门槛未达直接出卡;卡片区间为主标题、代表分钟副标题,第一二名差距 ≥5 个百分点才显示百分比,否则写「目前区分不开」。不放宽任何置信度。先做 | 已验收(真机清单欠) | `4e6e8d87` + 验收补改 `7203d94e`(区分不开时隐藏「最可能」),deploy-staging run 2933 已部署;回放真值 ±30/±60 19→20、宽度中位 ±1 分钟、提问 11.4→7.8;Skill 10.0.30;真机清单 `docs/testing/rectification-fewer-probes-card-20260926.md` 未走 |
|
||||
| `TASK-rectification-grounding-20260927.md` | `PROGRESS-rectification-grounding-20260927.md` | **生时校正旁白事实有据 + 去重试 + 资料瘦身**:服务端范围句被裁句裁掉(BUG-1055,复发自 588);重试按钮盲写不校验→校正里下线(1056);read-case 超限先删对话记忆(1057);点选题带经历时范围变化无人说(1058);offer/compare 剥离推断前数据、报告去重;Skill 按轮次切片、关 skills 注入 | 已验收(真机欠) | `0e0baaa7`…`2efe2258`;BUG-1055~1058;固定开销 12.0K→6.5K token、offer 100K→28.8K 字节;Skill 未 bump |
|
||||
| `TASK-rectification-telemetry-20260926.md` | [PROGRESS](PROGRESS-rectification-telemetry-20260926.md) | **匿名聚合统计**:每会话一行只存数字 / 枚举(题数分类、宽度、差距、停止原因、门槛达标、耗时、版本),管理后台只看汇总、保留 180 天;动表须 test:db。排在 fewer-probes 后 | 已验收(后台登录走查欠) | `d0bfc1fc`,门禁 run 2938 含真实 PG 测试通过、migrate 2940、deploy 2941(`e801fcf5`);只存数字/枚举、不存用户 id;后台「校正统计」页 |
|
||||
|
||||
Reference in New Issue
Block a user