docs: BUG-1060 resolved pending deploy, BUG-1061 recorded
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
f6fa367f2b
commit
3a0ffb72fc
+37
-7
@@ -14281,15 +14281,45 @@
|
||||
|
||||
## BUG-1060 | 双重过运的九分盘「第 N 宫」目标实际检查的是九分盘上升
|
||||
|
||||
- 状态:investigating(本单不修:红线不许改既有计算结果;需产品决定是否另开单)
|
||||
- 状态:resolved(待部署;分支 `codex/bug-1060-d9-double-transit-20260927`,本机回归通过,staging 未部署)
|
||||
- 首次发现 / 最近更新:2026-09-27 / 2026-09-27
|
||||
- 影响面:`scripts/jyotish_engine.py` `cmd_double_transit_pac` 的 D9 层;凡调用它的路径(全读 / 报告的 `double_transit_pac`,以及本单起普通对话数据卡的时运、婚恋双重过运结论)。
|
||||
- 影响面:`scripts/jyotish_engine.py` `cmd_double_transit_pac` 的 D9 层;凡调用它的路径(全读 / 报告的 `double_transit_pac`,以及普通对话数据卡的时运、婚恋双重过运结论,经 `scripts/consultation_native_layers.py`)。D1 层与月亮上升(CL)层不受影响。
|
||||
- 现象:数据卡 v2 接入双重过运(TASK-consult-evidence-card-v2-20260927 T1)时核对 PAC 结果发现:目标名写「D9_7宫(<D9 第 7 宫星座>)」,但用来判定同宫 / 相位 / 合相的经度是 D9 上升星座的中点。用一张公开 AA 盘复现:土星对「D9_7宫」判为「10 宫相位」,按标签所写的 D9 第 7 宫算应无相位,按 D9 上升算才是 10 宫相位。
|
||||
- 触发条件:`house` ≠ 1 时的任意一次调用;`house = 1` 时两者恰好相同。
|
||||
- 根因:`d9_event_house_lon = (d9_asc_idx * 30) + 15` 用了 D9 上升索引,应为 D9 第 N 宫的星座索引 `d9_event_si`(同函数 D1 层用的是 `event_si`)。已核对代码与一次复现;未核对该函数其余 D9 目标的取法是否合 KN Rao 原意。
|
||||
- 修复:未修。数据卡照原生输出复制该函数的结论(不在卡上另行换算)。
|
||||
- 验证:—(修复时需加「house ≠ 1 时 D9 第 N 宫目标用 D9 第 N 宫星座」的回归,并按冻结计分清单确认不涉及 ERR-110 的文件)。
|
||||
- 防复发:接入原生函数时逐个核对目标名与实际参与计算的值是否一致。
|
||||
- 相关记录:无
|
||||
- 根因:`d9_event_house_lon = (d9_asc_idx * 30) + 15` 用了 D9 上升索引,应为 D9 第 N 宫的星座索引 `d9_event_si`(同函数 D1 层用的是 `event_si`)。审计同函数其余 D9 目标时另查出一处同类错配:「D9_<宫主>(宫主)」(D9 第 N 宫的宫主)取的是该星的 **D1 度数**,而 D9 层把过境星按 D1 星座叠到 D9 盘、宫位从 D9 上升数,D1 度数放进这个坐标系里既不是 D1 宫也不是 D9 宫。
|
||||
- D9 目标逐条决定(依据 `references/marriage-timing-comprehensive-techniques.md` 的 KN Rao 规则「木星 / 土星关联事件宫 / 宫主 / 宫主 D9 星座」与 `strict-workflow-router.md` 的 Double Transit 行):
|
||||
|
||||
| 目标名 | 修复前参与计算的值 | 决定 | 理由 |
|
||||
| --- | --- | --- | --- |
|
||||
| `D9_{N}宫(<星座>)` | D9 上升星座中点 | **改**为 D9 第 N 宫星座中点 | 标签写的就是 D9 第 N 宫;D1 层同名目标用的是第 N 宫星座 |
|
||||
| `D9_{宫主}(宫主)` | 该星 D1 黄经 | **改**为该星 D9 星座中点 | D9 层所有目标都在 D9 盘的星座上;与同层 `{星}_D9` 目标取法一致 |
|
||||
| `{D1 第 N 宫主}_D9(<星座>)` | 该星 D9 星座中点 | 保留 | 正是 KN Rao「宫主 D9 星座」,标签与值一致 |
|
||||
| `{上升主}_D9(<星座>)` | 该星 D9 星座中点 | 保留 | 标签与值一致 |
|
||||
|
||||
目标名(字典键)一个不改,下游按名字取值的地方不受影响。
|
||||
- 修复:D9 目标的构造抽成 `_double_transit_d9_targets(asc_deg, natal, event_house, event_lord, ll_name)`(返回 D9 上升索引与目标表),`cmd_double_transit_pac` 调用它;只改上表两行的取值,D1 / CL 层与跨层判定代码未动。
|
||||
- 验证:
|
||||
- 新增 `tests/test_double_transit_d9_targets.py`(7 条,已进快速门 `CORE_PYTEST_TARGETS`),三张公开 AA 盘真实引擎运行:`house` 2–12 时 D9 第 N 宫目标 = D9 第 N 宫星座中点且 ≠ D9 上升中点;`house = 1` 仍等于 D9 上升中点;D9 宫主目标 = 该星 D9 星座中点;命令实际按目标表逐个做 PAC;复现盘 7 宫的土星「10 宫相位」消失、木星「同宫(7宫)」出现。在基线代码上跑这份测试,6 条失败、只有 D1/CL golden 通过。
|
||||
- D1 / CL 层逐字节不变:`tests/fixtures/double_transit_d1_cl_golden.json` 在基线 `5671039a` 上用 `PYTHONHASHSEED=0` 生成,修复后重生成与之逐字节相同(3 盘 × 12 宫)。另用 4 组输入(3 张公开盘 + 报告 golden 的虚构输入)× 12 宫共 48 次直接比对:`d1`、`cl`、`summary` 48/48 不变;`d9` 47/48 变化;`double_transit` 条目 2/48 变化(均为新增 D1+D9 跨层条目)。
|
||||
- 数据卡 golden `frontend/tests/fixtures/consult-evidence-card-golden.json` 用采集脚本重生成:与原文件忽略键序后唯一差异是一张盘双重过运结论 9 → 10 条(家庭 / 年运 / 时运三路相同,新增 10 宫 `Saturn(D1)Venus(宫主) + Jupiter(D9)D9_Venus(宫主)`)。
|
||||
- 对报告的影响:报告里「双重过运」一节的 D9 行会变(目标命中与否、D1+D9 跨层条目数);报告摘要句本轮 48 个样本中无一变化。`frontend/tests/fixtures/report-density-fictional-reader.json` 是 09-23 的冻结快照、没有采集脚本、测试不拿它与现引擎比对,本轮未重生成;按现引擎它的「双重触发条目=2」会变成 4。
|
||||
- 部署注意:API 的 chart 缓存(`scratch/local/api_chart_cache`,15 分钟 TTL,键不含代码版本)在部署后最多 15 分钟内可能仍返回旧的 D9 结果。
|
||||
- 防复发:接入原生函数时逐个核对目标名与实际参与计算的值是否一致;D9 目标集中在一个可单测的函数里。采集数据卡 golden 用 `JYOTISH_API_CHART_CACHE_TTL_SECONDS=0 PYTHONHASHSEED=0`:chart 缓存按排序后的键存盘,热缓存会改变字典与列表顺序(值不变),09-27 的 golden 正是冷热混合顺序,已写进采集脚本说明。
|
||||
- 相关记录:BUG-1061(同函数跨层 D1+D9 判定按数字拼接比对,本轮未修)
|
||||
- 复发自:无
|
||||
- 修复版本:`codex/bug-1060-d9-double-transit-20260927`(待合入 staging)
|
||||
|
||||
## BUG-1061 | 双重过运跨层(D1+D9)判定按目标名里的数字比对,D9 前缀的「9」会误配也会漏配
|
||||
|
||||
- 状态:investigating(BUG-1060 审计时发现,本轮不修)
|
||||
- 首次发现 / 最近更新:2026-09-27 / 2026-09-27
|
||||
- 影响面:`scripts/jyotish_engine.py` `cmd_double_transit_pac` 「跨层 Double Transit」段;报告与数据卡的 D1+D9 结论。
|
||||
- 现象:跨层配对用 `''.join(c for c in name if c.isdigit())` 比较 D1 与 D9 目标名。D9 目标名都带「D9」,数字串总含「9」:`D9_7宫(...)` → 「97」,永远配不上 D1 的「7宫」(本意的同宫号跨层配对从不发生);而 `house = 9` 时 D1 的「9宫(...)」→「9」会与任何 `{星}_D9(...)` / `D9_{星}(宫主)` 配上。实证:数据卡 golden 里一张公开盘 9 宫有一条 `Jupiter(D1)9宫(Cancer) + Saturn(D9)Mars_D9(Capricorn)`,这里的 `Mars_D9` 是上升主的 D9 星座目标,与 D1 第 9 宫不是同一目标,配上只因两边数字都是「9」。
|
||||
- 触发条件:任意调用都漏配同宫号;`house = 9` 时误配。
|
||||
- 根因:按目标名字符串抽数字判断「同一目标」,未排除层前缀。已核对代码与 golden 一条实例;未评估改法对报告结论数量的影响。
|
||||
- 修复:未修。改法需产品决定(例如按目标类型 + 宫号结构化比对),会改变报告和数据卡的跨层条目。
|
||||
- 验证:—
|
||||
- 防复发:跨层配对不要解析展示用的名字。
|
||||
- 相关记录:BUG-1060
|
||||
- 复发自:无
|
||||
- 修复版本:待定
|
||||
|
||||
Reference in New Issue
Block a user