Skip to content

fix(格局): 四化加分项按星曜 siHua 判定,不再查不存在的「化X」星名 - #58

Merged
Renhuai123 merged 3 commits into
Renhuai123:mainfrom
kjgggggg:fix/patterns-sihua-bonus
Nov 2, 2026
Merged

Renhuai123 merged 3 commits into
Renhuai123:mainfrom
kjgggggg:fix/patterns-sihua-bonus

Conversation

@kjgggggg

Copy link
Copy Markdown
Contributor

改了什么、为什么

lib/ziwei/patterns.ts 里有 4 处加分项按星名查四化:

  • 府相朝垣「命宫见禄」:hasStar(ming, '化禄')
  • 阳梁昌禄「再会化科」:sanFangSet.has('化科')
  • 机月同梁「再会化科」:sanFangSet.has('化科')
  • 杀破狼「三方有化禄或化权」:sanFangSet.has('化禄') || sanFangSet.has('化权')

可四化是挂在 Star.siHua 字段上的({ name: '天机', siHua: '科' }),盘上从来没有叫「化禄 / 化权 / 化科」的星,所以这几条加分项从来不会出现。同一个文件里的双禄朝垣、三奇加会、化禄入命等用的都是 s.siHua === '禄',这 4 处跟它们不一致。

这次加了两个小工具函数 palaceHasSiHua / sanFangHasSiHua,把这 4 处改成按 siHua 判断。只影响格局卡片 / 命盘摘要里显示的加分项:格局成不成立、等级(等级只看破格项)、排盘结果都不变。

影响面:1990 年逐日午时男命扫一遍,本该带上加分项、修之前却没有的盘:杀破狼 61 张、机月同梁 44 张、阳梁昌禄 7 张。

自查

  • 本地跑过 npm test,全部通过(含新增回归);npm run typecheck 里新改的文件没有报错(说明见下)
  • 新增回归 scripts/regression/patterns-sihua-bonus.test.ts,已登记到 package.json 的 test
  • 一个 PR 只做一件事
  • 没有提交隐私数据

回归测试的做法:1990 全年逐日午时排盘,对上面四个格局逐盘断言「加分项有没有出现」要和「三方四正 / 命宫里有没有带对应 siHua 的星」一致,并且要求每个格局至少触发一次。在旧代码上跑,第一张盘就断言失败(1990-01-02 午时 杀破狼「三方有化禄或化权(动得有力)」应为 true)。

patterns.ts 里有 import 'server-only',可这个包不在依赖里(Next 构建时才有)。所以测试先用 module.registerHooks 把它解析成空模块,然后再 import。registerHooks 要求 Node 22.15+,CI 用的是 Node 22,我在 Node 22.23.4 和 24.22.0 上都跑通了。

🤖 Generated with Claude Code

四化挂在 Star.siHua 上,盘上没有叫「化禄 / 化权 / 化科」的星。府相朝垣「命宫见禄」、
阳梁昌禄与机月同梁「再会化科」、杀破狼「三方有化禄或化权」却用 hasStar /
sanFangAllStars 按星名查,永远查不到,这几条加分项从未出现过(1990 年逐日午时
扫盘:杀破狼 61 盘、机月同梁 44 盘、阳梁昌禄 7 盘本该带上加分项)。

改为与同文件双禄朝垣、三奇加会一致的 siHua 判定;只影响加分项展示,
不改格局成立与否、不改等级、不改排盘结果。新增回归 patterns-sihua-bonus。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Verchiel666

Copy link
Copy Markdown

审查验证记录(第三方核对)

逐行核对 + 本地完整重建仓库实跑,结论:推荐合并。

核对过程

  1. bug 诊断属实:四化挂在 Star.siHua 字段上(algorithm.ts 里 siHua: s.mutagen),盘上不存在名为「化禄/化权/化科」的星;sanFangAllStars 只收集 s.name,旧写法永远查不到。修复与同文件双禄朝垣/三奇加会既有的 s.siHua === '禄' 写法一致,改动仅限 4 处 bonus 条件,格局成立判断、等级、排盘结果均不动。
  2. 本地实跑 npm test(Node v22.22.2):前 10 个回归全过。
  3. 新增测试断言逻辑验证通过:1990 逐日午时,触发盘数 = 杀破狼 61、机月同梁 44、阳梁昌禄 7、府相朝垣 6,与 PR 描述一致。
  4. 反向验证:把 4 处改回旧写法,测试如期在 1990-01-02 午时 杀破狼「三方有化禄或化权(动得有力)」应为 true 挂掉——与 PR 描述一字不差,测试有真实捕获力。

一个非阻塞注意点

registerHooks stub server-only 在 Node 22.22.2 + tsx 4.19 组合下抛 ERR_INVALID_RETURN_PROPERTY_VALUE(loader 层错误,非断言失败;透传 CJS 依赖时 nextLoad 返回无 source 触发校验)。作者在 22.23.4 / 24.22.0 跑通,说明该写法对 Node 小版本敏感。仓库目前未配 CI、测试靠本地跑,建议后续任选其一:

  • 把 server-only 加进 devDependencies(npm 有同名空包),测试即可去掉 hook,最省事;
  • 或 package.json 标 engines / README 注明跑测试需 Node ≥ 22.23。

不阻塞合并。

@Verchiel666

Copy link
Copy Markdown

@Renhuai123 @kjgggggg 审查验证已完成,结论:通过,建议合并(详细核对记录见上一条评论)。

要点:

  • bug 真实存在:4 处加分项按星名查「化X」永远查不到,修复后按 siHua 字段判定,逻辑与同文件既有写法一致;
  • 本地完整重建实跑 npm test,11 个回归全部验证(含反向验证:旧代码在 1990-01-02 午时杀破狼如期断言失败);
  • 一个非阻塞建议:server-only 后续可加进 devDependencies,测试就不必依赖 registerHooks(对 Node 小版本敏感)。

@Renhuai123 合并需要仓库写权限,请点 Squash and merge。

@kjgggggg
kjgggggg force-pushed the fix/patterns-sihua-bonus branch from 1874b27 to 1d43320 Compare October 29, 2026 04:24
@Renhuai123
Renhuai123 merged commit 7264e08 into Renhuai123:main Nov 2, 2026
@Renhuai123

Copy link
Copy Markdown
Owner

非常感谢!诊断准确,四化挂在 siHua 字段上,这 4 处一直查不到。本地合入最新 main 后类型检查和全部回归通过,也复现了你描述的失败点;CI 在 Node 22 上同样通过。也谢谢 Verchiel666 的复核。已合并,线上平台也会同步同样的修复。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants