dsh-metaphysics 0.46.5 → 0.50.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,149 @@
1
+ ## 0.50.5(2026-10-30)
2
+
3
+ 修 GitHub issue #1:「身弱喜火土,给分析成忌火土了」——顺带修掉同源的「同一五行同时出现在喜用与忌神」。
4
+
5
+ - **问题在哪**:`engine/geju.js` 的 `yongshenOf` 先按扶抑定喜忌,再让调候在「调候优先」时把 `climate.avoidElement` 插进 `avoid`;如果这个五行本来就在扶抑的 `favor` 里(例:偏弱己土燥盘,火为印、喜火,调候又忌火),两份列表就会重叠。摘要行仍写「喜水火土……忌金木」,但面板、解读、喜忌筛选各取一份,用户看到的就是「一会儿喜火、一会儿忌火」。身强寒湿盘的水同理。
6
+ - **修法**:调候所忌若已在 `favor`,不再插入 `avoid`,改记入 `disputed`(元素、扶抑角色、调候气候),喜用保留该行;调候所需要素仍按原逻辑从 `avoid` 移除。新增 `disputedTenGods`;`detail`、摘要「用神」「寒暖」行、解读「用神」「寒暖」节、白话、面板用神行与寒暖卡都标「有争议」,并说明「保留在喜用,不列入忌」。没有冲突的盘不出现该标记。
7
+ - **口径**:这是「两派并存」的显式标注,不改旺衰、不改调候判断、不替用户选边;扶抑与调候仍然各自成立,只是不允许同一行同时被判喜与忌。
8
+ - **界面验证**:390px 宽度下,争议行在 366px 内折 2 行,喜忌行与寒暖卡(338/338)均无横向溢出;浅色正文对比度 4.77:1、深色 7.73:1。
9
+ - **测试**:新增 `test/yongshen-disputed.test.mjs`(23 条):两张真实争议盘(1962-03-22 偏弱燥火、2000-01-01 偏强寒湿水)的 favor/avoid/disputed/disputedTenGods、无冲突盘不误报、216 盘扫描喜忌无交集、文本 / 解读 / 白话 / 面板四处可见、白话与解读内嵌一致。统计 **103 个测试文件 / 4593 条断言**,七道闸全绿。
10
+ - **讨论群二维码**:GitHub README 的外部图片会被改写成 `camo.githubusercontent.com`,部分网络下断链;改挂 GitHub Release 附件直链(不经 camo / raw),并保留微信邀请链接兜底。Chrome 内实测 1161×1623 正常加载,README-only,不改运行时与断言数。
11
+
12
+ ## 0.50.4(2026-10-30)
13
+
14
+ 把「口径对照」从命令行搬到结果下面:同一个盘只换一个开关(晚子时 / 真太阳时 / 闰月归月 / 奇门取局 / 晚子时归日),差在哪几个字,现在展开就能看见。
15
+
16
+ - **缺口在哪**:`engine/diff.js` 与 `tools/caliber-diff.mjs` 0.24 起就有,但只停在 CLI;面板与独立页切口径后只给新盘,用户不知道变的是日柱、命宫还是起运。紫微与奇门的差异还落成 `soul.ganzhi`、`siZhu.day` 这种原始路径,读不出来。
17
+ - **引擎**(`engine/index.js`):新增 `caliberCompare(args)`,按 `CALIBER_SWITCHES` 把**当前口径**与**另一档**各排一次,返回 `{currentLabel, altLabel, total, summary, roots, categories}`;对照前剔掉 `cross / verifyPast / question / direction` 等只影响解析与附加模块的参数。`renderText` 在 `result.caliber` 存在时追加【口径对照】段。
18
+ - **标签与根因**(`engine/diff.js`):补紫微(命宫 / 身宫 / 宫位 / 星曜 / 大限 / 飞星 / 格局)与奇门(四柱 / 局数 / 阴阳遁)的标签;`soul.ganzhi`、`siZhu.day`、`ju`、`dayun.jiao.at` 等进入根因表。口径回显字段(`juMethod / juMethodNote / lateZiHourMode / leapPolicy`)不再算差异——此前奇门两张完全相同的盘会被报成「2 处」,非闰月紫微也会凭空多 1 处。
19
+ - **界面**(`src/panel-kit.js` / `src/app.js` / `src/web-ui.js`):结果下新增折叠的「口径对照」卡;summary 先用一句话说「几组开关中几组影响此盘」,展开后逐行给「当前 · A → 换成 · B」、根因旧值→新值、连带分类计数。只对八字 / 紫微 / 奇门出现;对照失败时不影响主结果。卡内走共享调色板,深色只换变量;窄屏隐藏「展开」提示、summary 保持 44px 触摸目标;打印时强制展开。
20
+ - **工具与 CLI**:根 `index.js` 新增 `diff: true`(默认关,每次多排 2–3 张盘);`tools/caliber-diff.mjs` 改用同一个 `caliberCompare`,开关表只维护一份;`tools/build-client.mjs` 把 `diff` 模块打进 `client.js`。
21
+ - **口径**:只列同一组输入下的逐字段差异与根因,不判哪套口径更准,不改盘、不折吉凶;没有根因时如实写「无单一根因」(例如真太阳时只改起运时刻、不改柱)。`total` 是变化字段数,不是分数。
22
+ - **验证**:390×844 同源 iframe 实测(1996-01-19 23:40 · 安徽池州):`scrollWidth 375 < innerWidth 390`,对照卡 351px,展开后无横向溢出;强制展开深色媒体块后卡底 `#211f18`、正文与注 6.74:1、标题 6.49:1。
23
+ - **测试**:`test/caliber-diff.test.mjs` 由 19 条扩到 129 条——开关表、标签 / 根因、口径回显忽略、八字 / 紫微 / 奇门真实盘独立复算(当前→另一档方向、`total / summary / roots` 与 `diffObjects` 对拍)、无变化与无根因边界、XSS 转义、面板 / 独立页 / 工具接线。统计 **102 个测试文件 / 4570 条断言**,七道闸全绿。
24
+ - **文档**:讨论群二维码换新图(`docs/assets/dsh-metaphysics-group.jpg`,11 月 6 日前有效),README 有效期同步;旧 PNG 删除、改用新文件名,避免旧图缓存继续命中。不涉及运行时与断言数。
25
+
26
+ ## 0.50.3(2026-10-30)
27
+
28
+ 给「岁运提示」补上最后一段干支关系:大运与本命四柱的伏吟 / 反吟。以前只比「大运 × 流年」和「流年 × 本命柱」,大运压到本命柱上的那一步一直空着,知识卡的 note 也明写着「未逐年标注」。
29
+
30
+ - **引擎**(`engine/bazi.js`):逐年 `suiyun.signals` 新增 `大运伏吟`(当值大运与本命某柱干支相同)与 `大运反吟`(天克地冲),对年 / 月 / 日 / 时四柱逐柱比对;target 写成「第N步大运·某柱」,detail 写明具体干支。整步大运都在,随每年重复列出,note 与解析层都写明「不当成逐年加重」。原四类信号与顺序不变,`岁运并临` 仍优先于同一组大运的 `运年反吟`。
31
+ - **接线**:摘要、解析层、面板沿用旧路径;摘要与面板 chip 对「大运」类信号也带柱位(`大运反吟(第8步大运·日柱)`),面板 chip 悬停仍给完整依据。`suiyunClassicOf` 口径不变:任一类信号出现就附《三命通会·卷二·总论岁运》原文。
32
+ - **口径**:仍只标干支重复与对冲,不折分数、不判吉凶;大运伏吟/反吟是整步十年的背景,不是逐年加码。选这一条而不是六爻应期具体日期,是因为后者在清单里明确要先建 20 条以上《卜筮正宗》应验日期对拍集,缺语料时输出日期等于拍脑袋。
33
+ - **文档与知识卡**:`bazi-suiyun` 由「四类」改「六类」,note 改为交代「连续多年出现、不逐年加重」;README「岁运提示」、清单 §3 与 0.50.3 说明块同步。
34
+ - **测试**:`test/suiyun.test.mjs` 的独立参照补上两类(六类信号逐条复算),新增 1950 盘钉住「大运伏吟整步重复 2026–2028」、同年 type+target 不重复、摘要与面板柱位、知识卡六类与 note;`test/sanming.test.mjs` 的无信号样例改用 1996-02-18(1984-10-18 在新口径下已有大运信号)。统计 **102 个测试文件 / 4460 条断言**,七道闸全绿。
35
+
36
+ ## 0.50.2(2026-10-30)
37
+
38
+ 给 0.49.0 的「人元司权」补上原文出处:录入《三命通会》卷二·论人元司事(典藏网 7529),并如实并列该本与本插件不同的日数分法。
39
+
40
+ - **缺口在哪**:0.49.0 起每张八字盘都会算「生在本月第几日、哪一干当权」,知识卡却只写「之说见《渊海子平》」,没有卷次、没有链接,解释层也没有一句原文——这是全插件少数「有算法、无出处」的地方。
41
+ - **原文**(`engine/classics.js`):新增 `smt-renyuan`,照录「故支吕所藏者主命,谓之人元……寅中有艮土用事五日,丙火长生五日,甲木二十日;二月建卯,卯中有甲木用事七日,乙木二十三日」,81 字逐字核验通过;来源本写作「支吕」,按「异文不改字」原样保留,不替它改字或圆场。
42
+ - **口径分歧**:该本寅月作 5/5/20、卯月作 7/23,本插件通行 30 日表作 7/7/16、10/20;`plain` 与解析层都写明「不是同一套分法、不改取格」,两表并列。新增 scene「人元」,与「岁运」一样不进五条取条表:`compute` 在有 `renyuan` 时挂 `r.renyuanClassic`,摘要人元行加「原文见《三命通会·卷二·论人元司事》」、解析层人元节附原文与白话、面板经通用 section 渲染自动出现;`RENYUAN_TABLE`、旺衰与取格一行未改。
43
+ - **知识卡**:`bazi-yueling-siquan` 的 detail/source/note 补上 7529 与 5/5/20,状态仍为 `variant`。
44
+ - **文档**:README「古籍原文」「人元司权」「致谢」三处、清单 §二.1 / §三表 / §四.1 与 0.50.2 说明块同步。
45
+ - **测试**:`test/classic-quotes.test.mjs` +4(scene 枚举加「人元」、原文/出处/plain、不进五条),`test/sanming.test.mjs` 由 17 条改为 18 条并 +11(结果层/摘要/解析层/面板/知识卡),`test/renyuan.test.mjs` +11(用 `RENYUAN_TABLE` 独立对照原文日数、结果层接线、5/5/20 可见)。统计 **102 个测试文件 / 4432 条断言**,七道闸全绿。
46
+
47
+ ## 0.50.1(已发布 2026-10-30)
48
+
49
+ 宿主侧栏面板的首屏与独立页并轨:三组卡片、最近用过、分组↔平铺、窄屏收纳,全部从同一份数据生成,不再「页面一套、侧栏一套」。
50
+
51
+ - **缺口在哪**:0.39.0 给独立页做了分组首屏(问一件事 / 看一个人 / 查日子、最近用过、分组↔平铺),面板一直是 19 个 tab 平铺加自己那套 `.mp-tabs`——既没有最近用过,也没有「每组先露 4 项」的收纳;窄侧栏里 tab 条先吃掉大半屏,卡片与表单被推到下面。
52
+ - **唯一数据源**(新增 `src/groups.mjs`):三组标题、白话提示与 19 个入口(含「人生K」铺满整行)只写一份。`tools/build-html.mjs` 用它在构建时生成页面分组 HTML;`tools/build-client.mjs` 用 `JSON.stringify` 注入 `window.__MPGroups` 给面板。页面产物与面板不再各抄一份,`test/panel-first-screen.test.mjs` 逐项对拍页面生成的入口与数据源。
53
+ - **面板首屏**(`src/app.js`):React 版分组卡片(`.mp-tgroup` / `.mp-tool`)、最近用过(`mp.recent.tabs`,最多 3 条,先过 TABS 白名单)、分组↔平铺开关(`mp.first.view`,默认分组)、窄屏折叠(「还有 N 个」/「收起」,带 `aria-expanded`)。两套入口共用 `activate` → `recordRecent` + `switchTo`,排盘参数与结果路径不变。
54
+ - **平铺 tab 重构**:19 个 tab 从「分段控件」改为圆角胶囊网格(与独立页同形),窄屏单行横滑、44px 触摸目标;分组视图下 tab 条整体隐藏(`.mp-tabs.hide`)。
55
+ - **收纳用容器查询**:侧栏宽度不等于窗口宽度,`@container (max-width:560px)` 让 420px 侧栏与 390px 手机都按「每组 4 项 + 还有 N 个」收,不再用窗口媒体查询猜。
56
+ - **口径**:分组只是另一套入口——19 个 tab 原样保留,不改变任何默认值、排盘参数与结果;存储不可用(隐私模式)只少记「最近用过」,面板照常可用。
57
+ - **测试**:新增 `test/panel-first-screen.test.mjs` 40 条——分组数据、唯一数据源、页面产物对拍、面板接线、折叠与降级。统计 **102 个测试文件 / 4406 条断言**,七道闸全绿。
58
+
59
+ ## 0.50.0(已并入 0.50.1)
60
+
61
+ 知识卡 `liuyao-yingqi` 一直写着「应期只作时间窗口的提示」,引擎却一行都没给:用神旺衰算了、伏神出伏算了,轮到「什么时候见分晓」只剩「未做」。这一版把诚实的那一半补上——列出该留意的地支与快慢方向,仍不给具体日期。
62
+
63
+ - **引擎**(`engine/liuyao.js`):新增 `yingqiWindow(result, useGod, { monthBranch })`。用神在卦上取用神、不上卦取伏神,每支列出逢值(本支)、逢冲(对支)、逢合(六合支)三支;用神旬空时本支追加「出空填实」、对支追加「冲空」。快慢按月建五态:旺 / 相 → 偏速,休 / 囚 / 死 → 偏缓,月破或旬空 → 待解,缺月建 → 未定;用神两现时逐支归并去重,快慢不一致记未定。结果挂在 `r.yingqi`。
64
+ - **四处可见**:摘要加「应期线索:偏缓 · 逢值/逢冲辰 · …(只列地支,不出日期)」;解析层新增「应期线索」一节,逐条写月态与触发支;白话加一句「应期上大体偏远……不换算成具体哪天」;面板在伏神与进退之间加一排 chip(偏速绿、待解琥珀)。
65
+ - **口径**:只做「该留意哪一支」与快慢方向——不换算日期、不排先后、不判忌神受制、不叠动变连环;近事以日计、远事以月计,用哪把尺由事情远近决定,不代选。知识卡 `liuyao-yingqi` 仍为 `variant`,`liuyao-yingqi-exact` 仍为 `todo`(具体日期未做)。
66
+ - **口径变更连带**:解析层「未纳入」原写「应期仍未做」,现改为「应期的具体日期未做」;`test/liuyao-chufu.test.mjs` 第 212 行同步改断言(从锁旧句改为锁新句),不涉及伏神判定本身。
67
+ - **文档**:README「六爻」「精度与口径」两条、清单 §3.1 / §4.3 与 0.50.0 说明块同步;package description 补「应期线索」。
68
+ - **测试**:新增 `test/liuyao-yingqi.test.mjs` 73 条——12 支冲合独立复算、64 卦 × 13 组月建(12 支 + 缺月建)× 4 方向 3328 盘逐条复算(月态 / 月破 / 旬空 / 快慢 / 归并去重)、旬空 / 月破 / 用神两现 / 伏神 / 缺月建 / 两现快慢不一六条边界、四处可见与不出现日期、旧结果兼容、确定性。统计 **101 个测试文件 / 4366 条断言**,七道闸全绿。
69
+
70
+ ## 0.49.3(已并入 0.50.1)
71
+
72
+ 离线页(`命理排盘.html`)的「农历」tab 一直是坏的:转换方向那条分段控件从来没显示出来,农历日期怎么填都被判格式错;同一次真机检查还量出深色主题下「选中态实心底上的白字」只有约 3:1。这一版把断链接通,把强调面文字换成变量(两套配色各自过 WCAG),并顺手收掉窄屏闰月勾选框被拉高的毛病。
73
+
74
+ - **断链**(`src/web-ui.js`):① `setTab` 的速查子表单显隐漏了 `#qk-convert`,只有「公历 → 农历」的默认分支能跑,切到「农历 → 公历」的入口根本看不到;② 农历日期正则写成 `/^(d{4})-(d{1,2})-(d{1,2})$/`(少反斜杠),`d` 被当字面量,任何输入都匹配失败;③ 日期标签用硬编码名单判「起卦」,convert 漏在名单外被标成「起卦日期(公历)」。现改为与面板同一套正则,标签跟随 `TIME_KIND` 的 date 类写成「日期(公历)」。
75
+ - **深色强调面**(`tools/build-html.mjs`):深色块里的 `.tab.on,.seg button.on,.go{color:#14130f}` 写在基础规则之前,同优先级被后面的 `color:#fff` 盖掉——深色下实际是白字压浅珊瑚底,约 3:1。改为 `--accent-bg / --accent-bg2 / --on-accent / --on-accent-soft` 四个变量,7 处实心强调面(印章、选中 tab、分组卡片、评分格、主按钮、分段按钮、追问/chip)统一走变量。浅色仍是白字压 `#a72c23 → #7d1f18`(6.9 / 9.8:1),深色改为深字压 `#f0a38e → #e2755f`(9.1 / 6.1:1),渐变两端都 ≥4.5:1;页面样式里不再出现 `color:#fff`。
76
+ - **口径**:这是一次设计口径变更,先把 `test/theme.test.mjs` 第三节改成锁变量与逐端对比度(含副文字按 alpha 叠色后复算),再改实现;`test/first-screen.test.mjs` 里锁旧元素规则的一条同步换成 `--on-accent` 规则。
77
+ - **窄屏(≤640px)**:`#qk-convert` 独占整行,方向分段按钮不再折行;闰月改用 `.field.check`,勾选框保持 18px,触摸区由外层 label 撑到 44px(此前继承输入框的 `min-height:44px`,变成 18×44 长条)。
78
+ - **验证**:真 390×844(CDP 设备模拟)浅/深各跑一遍——无横向溢出(scrollW=390)、`农历2026年九月十七 ⇄ 2026-10-26` 正常出结果、日期标签为「日期(公历)」、勾选框 18×18、tab 与主按钮触摸目标 44/48px。
79
+ - **测试**:新增 `test/convert-ui.test.mjs` 31 条(两个入口同一套正则、2026-9-17 与闰六月前后边界、每个 `#qk-*` 都有显隐接线、闰月与 datetime 透传、格式错误文案走 textContent);`test/theme.test.mjs` 现为 65 条。统计 **100 个测试文件 / 4293 条断言**,七道闸全绿。
80
+
81
+ ## 0.49.2(已并入 0.50.1)
82
+
83
+ 黄历卡片里的二十八宿,把「壁水貐」写成了「壁水獝」、「胃土雉」写成了「胃土彘」——两个字都只是动物名,不影响排盘、宜忌与宿值日,但它是用户每天在摘要和面板上能看到的原文。这一版按通行二十八宿名逐字改正,并把整张表在测试里独立重录一遍,逐字对拍。
84
+
85
+ - **数据**(`engine/almanac.js`):`MANSIONS` 的壁宿动物 `獝` → `貐`、胃宿动物 `彘` → `雉`;宿名仍按「宿·五行·动物」写法,其余 26 宿未动。四宫、吉凶、五行、值日轮转规则一行未改。
86
+ - **口径**:值日宿仍按「日支 + 星期」定,28 日一循环;壁宿落周三(水)、胃宿落周六(土),与七曜一致。本次只改动物名,不改任何日期落到哪一宿。
87
+ - **文案**:`engine/almanac.js` 顶部「诚实边界」注释同步——二十八宿、胎神、值日神、吉神方位已收录,未收录的只剩逐日全量吉凶神煞与彭祖百忌(旧注释把已收录项也写成了「未收录」,与返回值的 `scope` 打架)。
88
+ - **测试**:新增 `test/almanac-xiu.test.mjs` 60 条——通行表在测试里独立录 28 行逐字对拍(含壁水貐、胃土雉)、四宫各七、动物不重、12 支 × 7 日的七曜顺序、13 段 56 天的 28 日循环与 28 日不重不漏、2026 全年不再出现「獝」「彘」、壁/胃的星期锚点、结果层/文本摘要/面板三处可见、同日两次逐字段一致、400 天宿五行与星期七曜一致。统计 **99 个测试文件 / 4262 条断言**,七道闸全绿。
89
+
90
+ ## 0.49.1(已并入 0.50.1)
91
+
92
+ 「岁运提示」是引擎里唯一一节没有原文支撑的能力:逐年标出岁运并临 / 运年反吟 / 流年伏吟反吟,读法却是自己写的;知识卡 `bazi-suiyun` 的出处只写「见《三命通会》《渊海子平》」,没有卷次也没有链接。这一版补上《三命通会》卷二「总论岁运」原文,并顺手记下一处口径分歧。
93
+
94
+ - **原文**(`engine/classics.js`):新增 `smt-suiyun`(卷二·总论岁运,典藏网 7539),照录「行运以生月为运元,最怕行运与太岁冲克,若岁运冲月必祸;若岁运与日相对,谓之返吟,岁运压日,谓之伏吟,二者不利六亲,非横破财,不为吉兆。」——用 `verify-quotes.pl` 对章页逐字核验通过(67 字,连续子串),白话自撰。
95
+ - **口径分歧写进 plain**:原文的「返吟」指岁运与日柱相对、「伏吟」指岁运压日;本插件按通行用法取「干支相同为伏吟、天克地冲为反吟」,两者并列、不合并。末句「不利六亲、破财」是旧说的重话,只作变动提示。新增 `scene: '岁运'`,不挂格局 tag。
96
+ - **不进五条上限**(`suiyunClassicOf`):`classicsFor` 仍是「格局两条 + 气候两条 + 总纲一条」;岁运原文只在 `liunian` 真有信号时随该节出现——原文讲的正是冲克,没冲没克时挂出来只会误导。结果挂 `r.suiyunClassic`。
97
+ - **三处可见**:摘要「岁运提示」行末加「古籍见《三命通会·卷二·总论岁运》」;解析层「岁运提示」节补原文与白话;面板岁运 chip 下加一行原文(悬停看白话,样式只走 `--muted`),无信号时三处都不出现。
98
+ - **知识卡**(`engine/interpret-knowledge.js`):`bazi-suiyun` 的 source 换成带链接的《三命通会》卷二·总论岁运,detail 写明返吟/伏吟的定义分歧;状态仍 `variant`。
99
+ - **口径**:只补出处与定义对照,四类信号的判定、分档与「不判吉凶」的边界一行不动。
100
+ - **文档**:README「古籍原文」「岁运提示」与致谢、清单 §二·7 与文末注同步;三命通会条目 16 → 17。
101
+ - **测试**:`test/sanming.test.mjs` +14 条(原文抽检、章名/链接、scene 与 tag、不进五条表、有/无信号两向的结果层/摘要/解析层/面板表现、知识卡出处),条目计数 16 → 17;`test/classic-quotes.test.mjs` +4 条(原文、出处、plain 口径)并把 scene 枚举加入「岁运」。统计 **98 个测试文件 / 4202 条断言**,七道闸全绿。
102
+
103
+ ## 0.49.0(已并入 0.50.1)
104
+
105
+ 「月令是什么」此前只答到月支本气:知识卡 `bazi-yueling-siquan` 写着「月内分日轮值」,引擎却一个字段都没给,面板与摘要里也看不到「生在本月第几日、哪一干当权」。这一版把《渊海子平》的人元司权分日落进引擎与解释层,补上清单 §3.3 里挂得最久的争议项。
106
+
107
+ - **引擎**(`engine/bazi.js`):新增 `RENYUAN_TABLE` 与 `renyuanOf(monthBranch, birthJdn, termJd)`——固定通行 30 日表(余气 → 中气 → 本气,合计 30 日,如寅月戊7丙7甲16),从「节」的当日算第 1 日,日差取本盘所用时刻(含真太阳时)所在日;第 31 日以后不硬分摊,按本气算并标 `beyond`。返回当权干与五行、所在日段、下一段距今天数、是否在本柱藏干表内。结果挂在 `bazi.renyuan`,并带 `term`(起算的节与时刻)。
108
+ - **摘要**(`engine/index.js`):节气行后加一行「人元:X月第N日,干+五行司权(各段日数)」,超出 30 日表时注明。
109
+ - **解析层**(`engine/interpret.js`):新增「人元司权」一节,说明从哪个节起算、这一日谁当权、下一段几日起交;同时写明分日只作解释层细节,**不改取格**;司权表比本柱藏干表宽的地方(子月壬、卯月甲、午月丙、酉月庚、亥月戊只出现在司权表)两表各照原样。
110
+ - **知识卡**(`engine/interpret-knowledge.js`):`bazi-yueling-siquan` 的 detail 与 note 补齐实现口径,状态仍为 `variant`——7/7/16、9/3/18 等分法未并列实现,轮值不参与旺衰与取格。
111
+ - **口径**:只认「节」不认「气」;节当日为第 1 日;30 日表固定,不按流派切换;第 31 日起按本气;司权与取格、旺衰解耦,删掉该字段后 `primary` / `favor` 逐字不变。
112
+ - **文档**:README「人元司权」一条;清单 §3.3 与 §4.1 同步,并补实现说明块。
113
+ - **测试**:新增 `test/renyuan.test.mjs` 361 条——逐支核表(合计 30、连续、五行、末段为本气、2–3 段)、纯边界(首日/末日/下一段/第 31 日/第 0 日夹取)、12 张真实盘独立复算日差、已知盘 1990-05-12(巳月第 7 日庚)与 1990-11-08(亥月第 1 日戊,不在藏干表)、2023-06-05(第 31 日按本气)、立春前后 30 分钟切换、删字段不改格、确定性、摘要/解析层/知识卡口径,并禁绝「一定/必然/注定/百分百」。统计 **98 个测试文件 / 4185 条断言**,七道闸全绿。
114
+
115
+ ## 0.48.0(已并入 0.50.1)
116
+
117
+ 在 390×844 的真视口(无头 Edge + DevTools 协议,浅色与系统深色各跑一遍)里把「交叉验证」和三张表量了一遍:大运表六列排到 748px,屏幕只露出左半边,右边界既没有渐隐也没有「还能滑」的提示;交叉验证是五段「八字——…;紫微——…;判断:…」的长句连读;表头 11px 的 `--label` 对 `--band` 只有 3.51:1;目录链接 22px、证据摘要 33px、名词解释 22px,都够不着 44px 的触摸目标。这一版按测量结果改样式与结构,`test/theme.test.mjs` 锁的深色/打印/窄屏规则一条没动,七道闸全绿。
118
+
119
+ - **交叉验证改对照卡**(`engine/crosscheck.js`、`src/panel-kit.js`):新增 `crossSection(cross)`,把文本和 `items` 一起交给面板——同一份数据两个去处,面板不用再拆文本。每个方面一张卡:标题行带「同向 / 有张力 / 互补」语气标签(绿 / 琥珀 / 蓝),八字、紫微各占一栏,注释放最后一行;≤640px 改单列,标签跟正文走。Markdown 与工具输出仍是原来的五行文本,口径不变。
120
+ - **三张表不再横着截断**:渲染时给每个 `td` 打 `data-label`、表头加 `scope="col"`;≤640px 隐藏表头,一行一张卡、每格用列名当行标,首列抬成卡头。390px 下大运表从 748px 横滑变成 342px 宽的可读卡片,触发事件表同理(418px → 342px);宽屏与打印仍是原表格。
121
+ - **对比度**:表头从 `--label` 改 `--ink2`(浅色 3.51 → 10.53:1,深色 9.98:1);卡内标签与备注用 `--muted`(5.29 / 6.74:1)。三档标签、目录链接、正文在两套变量下逐对算 WCAG 亮度比,全部 ≥4.5:1。
122
+ - **触摸目标**:窄屏目录改单行横滑胶囊(隐藏滚动条、首尾留 11px),链接与证据摘要、名词解释摘要统一 `min-height:44px`;390px 实测全部 44px,折叠标题 ≥46px。正文宽度不变,页面横向溢出为 0。
123
+ - **入口统一**:独立页与面板都改用 `Engine.crossSection`,不再各自拼 `crossText`。
124
+ - **侧栏也生效**:dsh 侧栏是「窗口宽、报告窄」,`@media` 不触发;`.mp-it` 声明为查询容器,同一批窄屏规则另挂一份 `@container (max-width:640px)`。实测把报告放进 420px 容器(窗口 1280px):表格 1092px → 396px 且不再横滑、目录链接 44px、对照卡单列,与 390px 视口下的结果一致。
125
+ - **测试**:新增 `test/narrow-report.test.mjs` 52 条——结构(五张卡、十个分栏、`data-label` 数量、转义)、窄屏样式规则(含容器查询版)、触摸目标、两套调色板逐对对比度,并反向锁住「表头若改回 label 会掉到 3.51:1」。统计 **97 个测试文件 / 3824 条断言**,七道闸全绿。
126
+
127
+ ## 0.47.1(已并入 0.50.1)
128
+
129
+ 交叉验证是 README 里挂了很久的能力,但测试只在外围点了六下(条目数、三档词、文本出现),五项判定的阈值、性别分支与节奏真值表一条没锁;顺手查出两处「说得比数据多」的文案。
130
+
131
+ - **测试补真**(新增 `test/crosscheck.test.mjs`,71 条):把交叉验证当纯函数测——事业「官杀 + 食伤 ≥ 2」、财富「财 ≥ 2」、感情按性别取「妻星(财)/ 夫星(官杀)」的 1.9 / 2.0 边界;节奏用 5 档 × 煞星轻重共 10 组真值表逐格核判断与说明;再用 10 张真实盘 × 男女共 20 组,从原始 `godStats` / 宫位星曜 / 大运档位独立复算五项判断与文案;另锁条目恰好五项、次序固定、只带六个字段(没有合并分数)、输入不被改写、两次调用同结果、八字入口与紫微入口的对照逐字节一致、`crossText` 五行结构。用「事业阈值 2 改成 3」做过变异检查:2 条立即变红,恢复后 71 条全绿。
132
+ - **文案与实现对齐**(`engine/crosscheck.js`):① 节奏一项原先只有一句「一边顺、一边压」,但八字大运为「平」时也会套用——1980-03-05、2005-01-13 等盘就是「平 + 紫微煞星 2 颗」。现在按实情分三句:八字顺而紫微煞星多、八字偏紧而紫微平静、八字为平而紫微煞星多,各写各的处理方式。② 大限没取到时,紫微侧原来写成「大限未取到;无煞星」,把缺数据说成了没有问题;现在只写「大限未取到」。③ 任一侧当前阶段缺失(八字未起运、紫微大限不在范围)时,判断由「同向 / 有张力」改为「互补」,说明里点名缺的是哪边,并写明「不下两边对照的结论」——不再拿「没取到」冒充「没问题」。
133
+ - **口径**:五项仍只并列、不合并成总分;三档仍是同向 / 有张力 / 互补,「互补」现在也明确承担「只有一边有信号」这一情形。健康项固定「互补」不变。
134
+ - **文档**:README「精度与口径」补一条,写明缺一侧时的标法与节奏说明的分档。
135
+ - **测试**:96 个测试文件 / 3772 条断言,七道闸全绿。
136
+
137
+ ## 0.47.0(已并入 0.50.1)
138
+
139
+ 四墓月(辰戌丑未)此前只取月令本气,藏干透了也用不上、三合会成了局也看不见;同一段代码还把戊辰、戊戌、己丑、己未当成建禄,把透干/会支取到的劫财写成「劫财格」。这一版把《子平真诠》十六「论杂气如何取用」落进引擎与原文库。
140
+
141
+ - **取格三级**(`engine/geju.js`):杂气月按「透干 → 三合会支 → 本气」取格。藏干透到年/月/时干仍优先;没有透干时,若其余三支与月支凑齐同一三合局,取局中五行对应的那一藏干(甲生辰月、年支申日支子 → 取水印);三合不齐才回本气。依据里写明走的是哪一条(透于某干 / 某某会成某局 / 以月令本气取格),会支只认三合、不认三会方。
142
+ - **两处误标**:`base.god === '比肩'` 原先一律给建禄格,戊辰、戊戌、己丑、己未这类「本气比肩但不在禄位」的杂气月因此冒称建禄——现加禄位校验,改判比肩格并在依据里点明「禄在巳、不在辰」;杂气月由透干或会支取到劫财时,按原文「透乙则用月劫」改判月劫格,不再落到「劫财格」。
143
+ - **原文与知识卡**(`engine/classics.js`、`engine/interpret-knowledge.js`):新增 `zp-zaji`(十六、论杂气如何取用,典藏网 53636),原文照录「何谓透干……透而又会,则透与会并用」、白话自撰。用神总纲位由三选一改为四选一:化气 > 四墓杂气 > 组合 > 通用总纲,杂气与组合同现时取杂气;位次不增,整节仍以 5 条为限。知识卡 `bazi-zaji-quyong` 补一条,标「各家有异说」。
144
+ - **口径**:原文「兼透则兼用」只给原则,落到单一格名必须择一,本插件取最先透出的那一干;会支只认三合、不认三会方;不判原文所说的「有情 / 无情」。这几点写进 README 与清单,不替分歧圆场。
145
+ - **测试**:新增 `test/zaji.test.mjs` 52 条,用 9 张真实盘正反两向钉住——透干压会支(1996-01-19)、会支取用(1985-02-03 / 2005-01-13 / 2002-10-13)、三合不齐回本气(1992-04-05)、非杂气月不启用会支(1979-11-13 / 1985-09-15)、建禄不误标(1989-03-05 / 1983-08-20 / 1990-04-13)、月劫三路(1985-04-05 / 1996-08-05 / 1990-10-28),并核总纲位次序、上限、确定性、摘要/解释层/面板与知识卡。`test/classic-quotes.test.mjs` +5 条,把总纲位改判为四选一并加原文抽检。统计 **95 个测试文件 / 3701 条断言**,七道闸全绿。
146
+
1
147
  ## 0.46.5(已发布 2026-10-30)
2
148
 
3
149
  「问进对话」只把盘面摘要和问题送进对话,模型得自己再推一遍结论——同一张盘,面板里读到的「说人话」和对话开场可能不是一套口径。这一版把面板已算好的白话结论一并交给模型。
@@ -308,6 +454,8 @@
308
454
 
309
455
  0.39.0–0.46.4 同样只提交在本地;这些内容随 **0.46.5** 一并发布(2026-10-30),npm 上的 latest 从 0.38.2 直接跳到 0.46.5。
310
456
 
457
+ 0.47.0–0.50.0 同样只提交在本地;这些内容随 **0.50.1** 一并发布(2026-10-30),npm 上的 latest 从 0.46.5 跳到 0.50.1。
458
+
311
459
  ## 0.34.0(已发布)
312
460
 
313
461
  六爻补上**用神旺衰**:月建给这一段时令的气,日辰给当天的扶克。此前用神只算到「落在哪一爻、与卦体怎么对」,旺不旺一律写「仍要月建日辰」,等于把最关键的一半留白。
package/README.md CHANGED
@@ -30,11 +30,12 @@ Chinese metaphysics (玄学 / xuanxue) for [DeepSeek Harness](https://github.com
30
30
  - **追问**:工具参数 `ask`,围绕已算好的盘回答「2027 年事业怎么样」这类问题;不重排、不猜测,找不到会明说
31
31
  - **八字 × 紫微 交叉验证**:工具参数 `cross`,五项并列对照,标注同向 / 有张力 / 互补
32
32
  - **晚子时开关**:23:00 后算次日还是当日,面板与独立页都能切;奇门另有「归当日 / 归次日」
33
+ - **口径对照**:同一个盘只换一个开关(晚子时 / 真太阳时 / 闰月归月 / 奇门取局 / 晚子时归日),结果下方折叠列出「根因字段 旧值 → 新值」与连带变化数;面板、独立页与工具参数 `diff: true` 共用同一份开关表。只列差异,不判哪套更准,不改盘面
33
34
  - **验前事**:列出过去几年流年信号,自评准/不准/不确定后算贴合度;只读,不改盘
34
35
  - **生时校正**:给定过去 2–3 件大事,对候选时辰逐一排盘打分排序;只缩小范围,不替代出生记录
35
36
  - **导出**:`.md`(盘面 + 解析)与 PNG 摘要长图(Canvas 直出,零依赖);独立页支持打印/存 PDF
36
37
  - **调候解释**:解释层新增「寒暖燥湿」一节,文本摘要加「寒暖:」一行
37
- - **古籍原文**:《子平真诠》论用神/正官/财/印/食神/偏官/伤官/阳刃/建禄月劫/用神配气候/用神成败救应/用神变化 12 章 + 《滴天髓》通神论寒暖/燥湿/衰旺/中和/官杀/伤官/月令/体用/精神/通关 10 条 + 《三命通会》卷五、卷六论正官/正财/偏财/印绶/食神/伤官/阳刃/建禄 8 条与卷五官煞去留杂论 1 条,另有专旺五格(曲直/炎上/从革/润下/稼穑)与弃命从煞/从财 7 篇,按格局与气候匹配后附在结果里(原句照录、白话释义、出处章号)。同一个格,子平真诠在前讲「怎么用」,三命通会紧随作对照讲「怎么取、怕什么」,两条并列、不合并成一句断语;正财与偏财在三命通会里分章,两格各取本格一条,七杀没有单列「论偏官」,取卷五「官煞去留杂论」讲混杂时的去留。命中的专旺格与从财/从杀格先取单章原文(从儿、从强三书无专章,不硬凑)。用神总纲位按盘三选一:有化气格取「用神变化」,见组合取「用神成败救应」,其余取「论用神」总纲——不另加位次,整节仍以 5 条为限;通关结构成立且关可通时,另以「通关」条占去泛论气候的那一位,寒暖/燥湿的具体条目照留
38
+ - **古籍原文**:《子平真诠》论用神/正官/财/印/食神/偏官/伤官/阳刃/建禄月劫/用神配气候/用神成败救应/用神变化/杂气如何取用 13 章 + 《滴天髓》通神论寒暖/燥湿/衰旺/中和/官杀/伤官/月令/体用/精神/通关 10 条 + 《三命通会》卷五、卷六论正官/正财/偏财/印绶/食神/伤官/阳刃/建禄 8 条与卷五官煞去留杂论 1 条,另有专旺五格(曲直/炎上/从革/润下/稼穑)与弃命从煞/从财 7 篇,按格局与气候匹配后附在结果里(原句照录、白话释义、出处章号)。同一个格,子平真诠在前讲「怎么用」,三命通会紧随作对照讲「怎么取、怕什么」,两条并列、不合并成一句断语;正财与偏财在三命通会里分章,两格各取本格一条,七杀没有单列「论偏官」,取卷五「官煞去留杂论」讲混杂时的去留。命中的专旺格与从财/从杀格先取单章原文(从儿、从强三书无专章,不硬凑)。另有《三命通会》卷二「总论岁运」一条,只在盘面出现岁运并临/反吟/伏吟时随「岁运提示」给出——它不占 5 条上限;原文的「返吟/伏吟」按「岁运与日柱相对 / 岁运压日」说,与本插件「干支相同为伏吟、天克地冲为反吟」不是同一套定义,两者并列、不合并。另录《三命通会》卷二「论人元司事」一条,随「人元司权」一节给出,同样不占 5 条上限;该本日数(寅月 5/5/20、卯月 7/23)与本插件通行 30 日表不同,原文并列、不改取格。用神总纲位按盘四选一:有化气格取「用神变化」,辰戌丑未四墓月取「杂气如何取用」,见组合取「用神成败救应」,其余取「论用神」总纲——不另加位次,整节仍以 5 条为限;通关结构成立且关可通时,另以「通关」条占去泛论气候的那一位,寒暖/燥湿的具体条目照留。杂气月取格按「透干 → 三合会支 → 本气」的次序:会支只认三合、不认三会方,兼透时只取最先透出的那一干,依据里写明走的是哪一条——原文的「兼透则兼用」只列原则,落到单一格名时必须择一,这块取舍仍属各家分歧
38
39
  - **《穷通宝鉴》120 格**:十天干 × 十二月令逐格录入用神顺序与原文摘句(「十二月乙木,木寒宜丙」这类原句照录),调候卡里直接给出「这一格书上取什么」与出处章号
39
40
  - **方法与验证页**:独立页内置静态页,写明对拍数据、测试与闸门、口径与已知边界
40
41
  - **离线单文件页(随包分发)**:`命理排盘.html` 一份文件、零依赖、双击即开,十九个入口按用途分三组(也能一键切回平铺),断网可用;它随 npm 包发布,装完插件就有(路径见下)
@@ -56,11 +57,12 @@ Chinese metaphysics (玄学 / xuanxue) for [DeepSeek Harness](https://github.com
56
57
  - **十二长生**:地势(日干对各支)、自坐(各柱干对本支)
57
58
  - **神煞(42 星,7 类)**:贵人(天乙、太极、天德、月德、月德合、福星、天官、国印、天厨、天医)、文星(文昌、德秀)、婚姻(桃花、红鸾、天喜、孤辰、寡宿、金舆)、性情(华盖、羊刃、飞刃、魁罡、童子煞、六秀日、日德、日贵)、事业(禄神、将星、驿马)、凶煞(劫煞、灾煞、亡神、空亡、十恶大败、阴差阳错、四废日、流霞、天罗、地网)、格局(天赦日、金神、三奇贵人)。天干类双查年干与日干,三合类双查年支与日支;每颗星附查法依据,界面悬停可见
58
59
  - **日主旺衰**:月令权重 + 通根 + 天干帮扶,量化分档,并给出依据(季节权重、通根地支、帮扶/耗泄明细)
60
+ - **人元司权**:按「节」到出生日的日差,算出本月第几日、哪一藏干当权(30 日表:余气 → 中气 → 本气;节当日为第 1 日,第 31 日以后按本气并标出)。另有 7/7/16、9/3/18 等分法,结果里只列本插件口径;三命通会卷二「论人元司事」此本又作寅月 5/5/20、卯月 7/23,原文随该节并列、不改取格。司权表比本柱藏干表宽(子月壬、卯月甲、午月丙、酉月庚、亥月戊只出现在司权表里),两表各照原样。分日只作解释层的一层细节,取格仍按本气、透干与会支判定,不随轮值改判
59
61
  - **寒暖燥湿(调候优先)**:月令温度 + 全局火水比例 + 湿土燥土判定气候,给出调候所取(寒湿取丙火、燥热取壬水)与所忌、温度/燥湿标尺、按日主五行的体感白话;流年大运评分接入调候(寒局再逢水加重扣权);面板在「用神」下有寒暖卡
60
62
  - **《穷通宝鉴》120 格**:按「日主 + 月令」查到该格用神顺序(如乙木丑月取丙),附原文摘句与章号;寒暖卡里与调候判定并列显示,两者不同向时以调候为先(「书里的取用」与「这一盘的气候」各自摆出来,不悄悄合并)
61
- - **格局与用神**:月令取格(建禄/阳刃/月劫/十神格)+特格(化气、专旺、从格)+十神组合(官印、杀印、食伤生财、财官、伤官配印、伤官见官、羊刃驾杀),每条附判定依据;用神按「调候优先 + 扶抑校验」:先判寒暖燥湿(寒/寒湿/寒燥/湿滞/平/燥/燥热/温热,附温度与燥湿量化值与依据),调候所需与扶抑冲突时显式仲裁并说明理由,不冲突时注明同向;再列喜忌十神;两行相战时另判通关(克方所生、又能生用神的那一行,五行里唯一),按局中分量报强弱
63
+ - **格局与用神**:月令取格(建禄/阳刃/月劫/十神格)+特格(化气、专旺、从格)+十神组合(官印、杀印、食伤生财、财官、伤官配印、伤官见官、羊刃驾杀),每条附判定依据;用神按「调候优先 + 扶抑校验」:先判寒暖燥湿(寒/寒湿/寒燥/湿滞/平/燥/燥热/温热,附温度与燥湿量化值与依据),调候所需与扶抑冲突时显式仲裁并说明理由,不冲突时注明同向;再列喜忌十神;若调候所忌正好是扶抑所喜,保留在喜用、单列「有争议」,不把同一五行同时判喜判忌;两行相战时另判通关(克方所生、又能生用神的那一行,五行里唯一),按局中分量报强弱
62
64
  - **行运吉凶**:大运、流年按喜忌五行与十神加权评分,分大吉/吉/平/忌/大忌五档,悬停可看逐项理由
63
- - **岁运提示**:逐年标出**岁运并临**(当值大运与流年干支相同)、**运年反吟**(大运与流年天克地冲)、**流年伏吟 / 反吟**(流年与原局某柱干支相同 / 天克地冲);流年按立春起算,交运落在年内时前后两步大运并列。只标干支重复与对冲、不判吉凶,摘要、解析、白话与面板四处可见
65
+ - **岁运提示**:逐年标出**岁运并临**(当值大运与流年干支相同)、**运年反吟**(大运与流年天克地冲)、**大运伏吟 / 反吟**(大运与原局某柱干支相同 / 天克地冲)、**流年伏吟 / 反吟**(流年与原局某柱干支相同 / 天克地冲);流年按立春起算,交运落在年内时前后两步大运并列。大运与本命四柱的伏吟/反吟整步大运都在,会连续多年出现,不逐年加重。只标干支重复与对冲、不判吉凶,摘要、解析、白话与面板四处可见;有信号时解析层另附《三命通会·卷二·总论岁运》原文(含「返吟/伏吟」与本书口径不同的说明)
64
66
  - **大运交运日**:按「三日折一年」把出生到节令的间隔放大,算出**交运时刻(日/时辰级)**与每步大运的起止日期(同月同日同时刻换,闰日退到 2 月 28 日);大运表的「交运」列、面板曲线与 chip 悬停都能看到
65
67
  - **干支关系**:五合、相冲、相克;六合、三合半合、三会半会拱会、冲、害、破、刑
66
68
  - 大运、流年(含与原局地支的关系)、真太阳时(按出生地经度修正)
@@ -88,6 +90,7 @@ Chinese metaphysics (玄学 / xuanxue) for [DeepSeek Harness](https://github.com
88
90
  - **化进/化退力重**:方向之外再按月建五态落档——旺相 → 后劲足(退则退得缓)、休囚 → 后劲有限(退则退得实)、死 → 进得虚、逢月破 → 月破失据、缺月建 → 只报趋势;旬空另标、不改结论。只给档位,不折加权分数
89
91
  - 用神落位:按所问之事取六亲——求财看妻财、工作职位看官鬼、文书考试看父母、健康以官鬼为病(子孙为医药)、出行以世爻为用、感情男看妻财女看官鬼;用神不上卦时回到本宫首卦取伏神,标出飞伏生克(飞生伏 / 伏生飞 / 飞克伏 / 伏克飞 / 比和),首卦两现时列候选**不代选**;再叠月建与日辰:月令五态(旺相休囚死)看这一段时令,日辰五关系(日生/日克/比和/泄/耗)看当天扶克,月建冲爻标月破、日辰冲静爻标暗动、冲旬空标冲空,只报状态不折成分数
90
92
  - **伏神出伏条件**:用神不上卦时,把飞伏生克与月建日辰并起来看——飞生伏、伏克飞、日辰生/比和、月建旺/相算「助」,飞克伏、日辰克、月破算「压」;有助无压为「可出」、有助有压为「有助有压」、有压无助为「受压难出」、两者都无为「未得助」。四档只并列条件、不排各家优先级;旬空只标出、不并入档位,也不出应期日期
93
+ - **应期线索**:只给「该留意哪一支」与快慢方向——用神(不上卦则取伏神)逢值、逢冲、逢合三支列出,旬空另标出空填实与冲空;按月建五态给偏速 / 偏缓 / 待解 / 未定。不换算成具体日期、不排先后、不判忌神受制,摘要、解析层、白话与面板四处可见
91
94
  - **全卦逐爻旺衰**:月建与日辰落到全部六爻(不只挑出来的用神)——每爻给月令五态与日辰五关系,另标月破/暗动/冲空,世应、动爻、旬空单独标出;再给五态分布(旺相休囚死各几爻)与最旺/最弱爻,看出整张卦的气聚在哪一头。不指定所问之事也能出
92
95
  - 用神与卦体联动:把用神所处的卦体一并标出——用神在六冲卦(主散)/ 六合卦(主成)/ 逢变六冲 / 逢变六合 / 在内卦伏吟 / 在外卦反吟(注明地支全冲还是八卦正对)/ 化进神 / 化退神 / 爻伏吟 / 爻反吟 / 旬空 / 持世 / 临应 / 发动
93
96
  - 面板:本卦与变卦并列对照,真爻线渲染(阳整、阴断、动描红),世应与动爻一目了然;卦体标签与用神标签各以 chip 行列出
@@ -132,12 +135,12 @@ Chinese metaphysics (玄学 / xuanxue) for [DeepSeek Harness](https://github.com
132
135
  - **分层结构与逐宫(0.43 新增)**:紫微多出**命身底色**(命宫主星 + 亮度 + 双星组合 + 身宫落点)、**逐宫分析**(十二宫各一条:宫位取象 + 主星亮度 + 吉星/煞星 + 四化,下接一句读法)与**三层格局**(有利格局 / 结构提示 / 忌格提醒,每条写名称、人话、依据与做法);八字多出**命局框架**(日主/用神/格局 + 一句命局基调)、**正面画像**(外在取象 / 性格底色 / 事业与家庭)、**流年时间轴**(近三年逐条给档位与理由)与**专业建议**(喜用落地 / 忌神自觉 / 地支关系 / 调候)。措辞取自两份独立词库 `engine/ziwei-words.js`、`engine/bazi-words.js`——引擎只出事实,词库只出说法,词库里没有任何判断条件
133
136
  - **五个维度**:整体运势、工作与职业选择、事业发展、爱情与感情、健康状况——每项给「解读 + 行动建议」;紫微的维度只点名六煞(擎羊/陀罗/火星/铃星/地空/地劫),其余杂曜留在逐宫,避免满屏星名
134
137
  - **依据可核对**:每个维度都附一行「依据」,列出这条结论引用的事实——命盘类(八字/紫微)给日主旺衰、月令、喜忌、大运流年、宫位主星与煞星;卦象类(六爻/梅花/六壬)给本卦互卦变卦、世应、动爻、三传四课与神将;塔罗给牌阵、主轴、正逆位与元素分布。面板与文本两条输出路径都会显示
135
- - **报告化阅读**:解析区顶部有「一页读懂」(整体/事业/财富/感情/节奏五条摘要)、目录锚点,以及三张表——八字是「大运表 / 流年表 / 触发事件表」,紫微是「大限表 / 流年表 / 触发事件表」。表格只把已有字段摊平,不新增判断;打印时表格不撕页、目录自动隐藏
138
+ - **报告化阅读**:解析区顶部有「一页读懂」(整体/事业/财富/感情/节奏五条摘要)、目录锚点,以及三张表——八字是「大运表 / 流年表 / 触发事件表」,紫微是「大限表 / 流年表 / 触发事件表」。表格只把已有字段摊平,不新增判断;打印时表格不撕页、目录自动隐藏;≤640px 时表头隐藏、一行摊成一张卡(每格用列名当行标),不再出现六列排到 748px、右半边被截断又看不出能横滑的情况
136
139
  - **证据卡与置信度**:每个维度的依据收进可展开的 `<details>`,点开可见逐条盘面事实与所用技法;维度旁标注「置信度 强/中/弱」(按证据条数分档,不引新算法)。文本输出同样带「置信度:…」
137
140
  - **看示例**:面板与独立页都有「看示例」按钮,用固定的示例盘(1990-05-12 14:30 男 石家庄)走与真实排盘相同的渲染路径
138
141
  - **追问**:工具参数 `ask`、面板与独立页的追问输入框——围绕**已算好的盘**回答「2027 年事业怎么样」「财运如何」这类问题;只取盘面已有字段(流年/大运/宫位/分节),不重排、不猜测;年份超出已排范围或没识别到方面时,明确说找不到并给出可问范围
139
142
  - **问进对话**:面板追问框旁边多一个「问进对话」按钮——把这张盘的白话结论、摘要和你的问题拼成一段提问,**直接写进 DSH 的对话输入框并提交**(走输入框正常的回车路径,有回合在跑时排队、不打断当前回答),由对话里的模型接着答;提问模板把面板已算好的「直答 / 说人话」放进「开场结论」小节,要求模型开场先沿用它再展开,并写明「不用重排盘、要引到具体柱/宫/爻、没依据就说看不出来、别给绝对化断言」,按「开头一句无术语结论 → 每条判断分**盘面|白话|倾向|边界**四行 → 收尾一句『如果只记一件事』」的骨架答,术语出现一个就当场翻成日常话(调候 / 化气 / 通关 / 空亡 / 争合 单独点名)。插件的对话桥还没挂上时(例如插件刚装好还没重启)退回复制,提示你粘进对话窗
140
- - **八字 × 紫微 交叉验证**:工具参数 `cross`(或面板勾选)会用同一份出生信息再排另一套盘,对事业/财富/感情/身体/节奏五项并列对照,标注「同向 / 有张力 / 互补」;只作对照,不把两套体系折算成同一个分数
143
+ - **八字 × 紫微 交叉验证**:工具参数 `cross`(或面板勾选)会用同一份出生信息再排另一套盘,对事业/财富/感情/身体/节奏五项并列对照,标注「同向 / 有张力 / 互补」;只作对照,不把两套体系折算成同一个分数。面板与独立页把它画成**对照卡**:一个方面一张卡,标题行带判断标签(绿 / 琥珀 / 蓝),八字与紫微各占一栏,注释放最后一行;窄屏改单列——不再是五段「八字——…;紫微——…;判断:…」的长句连读(Markdown 与工具输出仍是原来的五行文本)
141
144
  - **量化口径**:只量化引擎已有数据(十神权重、大运/流年档位、宫位与四化计数),**不换算金额、不给健康诊断**;报告里有「量化口径」分节写明这条边界
142
145
  - **方法与验证**:独立页内置同页「方法与验证」(体系、128 条卦例对拍、测试文件与断言条数取自断言基线、七道闸、口径与已知边界),离线可开
143
146
  - **夏令时校正(0.18 新增)**:1986–1991 年中国夏令时期间的钟面时间在排盘前自动减 1 小时(跨日回退),八字/紫微/合盘/验前事/生时校正统一生效;出生证已是真实太阳口径时可用 `dst: false` 关闭
@@ -151,6 +154,7 @@ Chinese metaphysics (玄学 / xuanxue) for [DeepSeek Harness](https://github.com
151
154
  - **塔罗**额外给:整盘连贯解读(把几张牌串成一条线,避免各张互相矛盾)与牌面结构(大阿卡纳占比、元素分布、正逆位)
152
155
  - **文案口径**:第二人称、温和、只给倾向与建议,不作绝对判断;底部保留理性参考的免责提示
153
156
  - **解读区可折叠**:内容较长(五维度 + 体系模块),点标题栏或箭头即可展开/收起;宽屏默认展开、窄屏默认收起,手动切过之后按你的选择来
157
+ - **窄屏与深色(0.48 新增)**:390×844 下实测并修过一轮——目录改成单行横滑胶囊(隐藏滚动条、首尾留 11px),目录链接、证据摘要、名词解释摘要统一 44px 触摸高度;表头从 `--label` 换成 `--ink2`(浅色 10.5:1、深色 10:1),卡内标签与备注用 `--muted`(5.3:1 / 6.7:1),三档判断标签与目录链接在两套变量下都 ≥4.5:1;全部只走主题变量,深色仍然只换变量。dsh 侧栏「窗口宽、报告窄」不触发 `@media`,同一批规则按 `.mp-it` 的容器宽度另挂一份 `@container`,420px 侧栏下同样摊成卡片
154
158
 
155
159
  ### 所问之事与询问方向(六爻 / 梅花 / 大六壬 / 塔罗)
156
160
 
@@ -208,7 +212,7 @@ dsh plugin install ./dsh-metaphysics-0.17.0.tgz
208
212
 
209
213
  > 独立页(`命理排盘.html`)同样是这十九个 tab:速查 tab 在左侧展开对应小表单(择日的起算日/事项/天数/属相、农历的转换方向/农历日期/闰月、小六壬的时间或报数、风水的命卦/门主灶/玄空与坐向、运(结果都是方位网格:八向标吉凶、玄空九宫列运/山/向三数)、起名的评估或生成、十六型人格的分页问卷(4 题一页、1–5 打分,答满 12 题可先看结果));合盘要填双方出生信息、可选八字/紫微两种合盘;奇门用「换局规则」单选组(拆补/超神接气/置闰)与「询问方向」定用神。这份文件与侧栏面板是**各自生成**的两份产物(同一份 `engine/`),随包发布的是仓库根这一份;自己在桌面另存过的话,用 `npm run build:desktop` 一次刷新两处,别手工拷。
210
214
 
211
- > 首屏默认按用途分三组:**问一件事**(六爻/梅花/塔罗/奇门/六壬/小六壬)、**看一个人**(八字/紫微/合盘/人格/称骨/数字/人生K)、**查日子**(黄历/择日/农历/星座/风水/起名),每项带一句白话(如「摇六次,问一件事」);用过的入口会进「最近用过」,最多 3 条。19 个平铺 tab 仍保留,右上角「分组 / 平铺」随时切换,选择记在本机;手机端每组先露 4 项,其余点「还有 N 个」展开。
215
+ > 首屏默认按用途分三组:**问一件事**(六爻/梅花/塔罗/奇门/六壬/小六壬)、**看一个人**(八字/紫微/合盘/人格/称骨/数字/人生K)、**查日子**(黄历/择日/农历/星座/风水/起名),每项带一句白话(如「摇六次,问一件事」);用过的入口会进「最近用过」,最多 3 条。19 个平铺 tab 仍保留,右上角「分组 / 平铺」随时切换,选择记在本机;手机端每组先露 4 项,其余点「还有 N 个」展开。这份分组数据只有一份(`src/groups.mjs`),独立页与宿主侧栏面板在构建时各自取用;侧栏宽度不等同窗口宽度,收纳按容器查询生效。
212
216
 
213
217
  ### 深色与导出
214
218
 
@@ -222,10 +226,12 @@ dsh plugin install ./dsh-metaphysics-0.17.0.tgz
222
226
  - **农历**:定朔(Meeus 第 49 章,误差约 1 分钟)+ 冬至所在月为十一月 + 无中气置闰
223
227
  - **真太阳时**:经度差 + 均时差;内置 34 个省会 + 200 个地级市坐标(±0.2°),地址更细时可开「联网精确到区县」(Nominatim)。**单盘与合盘用的是同一套修正**(合盘双方各按自己出生地算)。只按经度修正,**未含历史时区与夏令时**:海外出生请先把当地钟表时间换算成东八区标准时再输入;没给经度时摘要首行会出 ⚠
224
228
  - **晚子时**:八字/大六壬默认 23:00 后换日,奇门默认归当日;`lateZi` 与 `lateZiHourMode` 是同一个开关的两个名字。各体系摘要都会写明本次采用的口径,不改默认值、不偷偷改盘
229
+ - **口径对照**:`caliberCompare` 只做「当前口径 → 另一档」的逐字段比对,根因按柱 / 命宫 / 局数 / 起运归类,`total` 是变化字段数、不是分数;没有根因时写明「无单一根因」(如真太阳时只改起运时刻)。取局流派、晚子时归日、闰月政策属于口径回显,不计入差异;「其他」是尚未归类的派生字段,不隐藏也不折算。对照会用同一组输入多排 2–3 张盘(工具里由 `diff: true` 显式开启)
225
230
  - **可复现**:塔罗/六爻给 `seed` 即得同一次抽牌/摇卦;紫微流月流日流时、塔罗的抽牌时刻、八字的流年基准年都可传 `asOf` 钉死
226
231
  - **紫微四化**:中州派常用表(庚干作太阳禄、武曲权、太阴科、天同忌)
227
232
  - **问进对话**:只做文本组装,不改盘、不调模型——面板把 `Engine.askPrompt` 生成的一段话交给 DSH 客户端槽位 `conversation.input.right` 拿到的 `inputActions`,先 `setDraft` 再 `submit`(官方输入框的正常提交路径);桥不在时退回复制剪贴板并给出提示。提问里带的盘面摘要按 3000 字截断并标注「摘要已截断」;面板已有解析时,模板会在摘要之前插入「开场结论」小节(直答 + 说人话,原样取自面板结果),让对话开场与面板同一口径;固定骨架(抬头 + 回答要求)约 520 字,不随 `maxChars` 变,`test/ask-prompt.test.mjs` 有断言盯它别长成小作文。这条链依赖 Harness 的客户端 slot API(`conversation.input.right` + `inputActions`),升级 Harness 后若槽位改名,按钮会静默退回「复制」而不是报错
228
233
  - **紫微飞星串连**:只认宫干四化表、星落哪宫就是哪宫之力,串连只跟**同一支化**逐宫跳(不混支、不借对宫),满 12 步或回到走过的宫即停;宫干四化在 12 宫上是「一个宫 → 一个宫」的函数映射,所以完整盘上每条链必然成环(实测 1/3/4/5/6 步),「断点」只可能来自星未上盘。这一层只描方向与牵引,不断吉凶,也不叠大限流年算力重
234
+ - **八字 × 紫微交叉验证**:五项只并列、不合并成总分。任一侧当前阶段取不到时(八字尚未起运、紫微大限不在范围内),该项标「互补」并写明缺的是哪一边,不把「没取到」当成「没有问题」;节奏一项的说明按实情分档——八字顺而紫微煞星多、八字偏紧而紫微平静、八字为平而紫微煞星多,三种说法各写各的,不共用一句「一边顺、一边压」
229
235
  - **日主旺衰**:量化算法,非唯一流派
230
236
  - **奇门宫位条件**:门迫只认同宫内「门五行克宫五行」,宫克门是「宫制门」不为迫;六仪击刑按月支相刑定宫(甲子戊震三、甲戌己坤二、甲申庚艮八、甲午辛离九、甲辰壬巽四、甲寅癸巽四),三奇入墓按五行墓库定宫(乙木墓未→坤二、丙丁火墓戌→乾六)。这三项只判**天盘**、只作宫位条件,不自动断用神受制,也不打分排序
231
237
  - **奇门旺衰**:八门、九星与天盘干(三奇六仪)按月支五行判旺相休囚死(同气旺、月令所生相、生月令休、克月令囚、被月令克死),只报力量强弱不折吉凶;门旺而宫克门仍受宫制。
@@ -235,9 +241,10 @@ dsh plugin install ./dsh-metaphysics-0.17.0.tgz
235
241
  - **紫微夹局与刑囚夹印**:「夹」只要求两星分居命宫前后、不分左右(日月、左右、魁钺本来就没有固定左右;0.38.2 之前按固定顺序判,昌曲夹命与羊陀夹命从未命中,日月/左右/魁钺各漏约一半)。擎羊在禄存 +1、陀罗在禄存 −1,两星只能夹禄存,所以「羊陀夹命」即禄存守命、「羊陀夹忌」即化忌与禄存同宫。刑囚夹印按字面判夹不成立(廉贞与天相永远隔偶数宫),取通行说法「廉贞天相同守命宫于子午、擎羊同宫」,判的是守命那一宫,其它宫位三星同宫不报;命宫卯酉、廉贞天相对照遇擎羊的变体未纳入。34 条格局的判定与 `test/ziwei-patterns.test.mjs` 的独立谓词逐条对齐,并要求每条至少命中一次
236
242
  - **奇门干宫生克**:天盘干(三奇六仪)与所落宫五行的关系另算一层——干克宫/宫克干/干生宫/宫生干/比和,与门宫关系并列各说各的、不折成一个分数;十干克应(天盘干加地盘干的 100 组)仍未做
237
243
  - **六爻化进化退**:只按「同五行地支顺次」定方向(木 寅→卯、火 巳→午、金 申→酉、水 亥→子,土 丑→辰→未→戌→丑 成环),同五行不相邻不算;方向之外再按月建五态给一档力重(旺相 → 后劲足、休囚 → 后劲有限、死 → 进得虚;退则得令退得缓、失令退得实;月破压过一切),只给档位、不折加权分数,也不据此断吉凶。土的进退次序各家说法不完全一致
244
+ - **六爻应期线索**:只做「时间窗口的方向」——用神(不上卦取伏神)的逢值、逢冲、逢合三支,旬空另加出空填实与冲空;快慢按月建五态分偏速 / 偏缓 / 待解 / 未定(两现而旺衰不一或缺月建记未定)。不换算日期、不排先后、不判忌神受制,也不叠动变连环;近事以日计、远事以月计,用哪把尺由事情远近决定,本插件不代选。具体应期日期仍是 `liuyao-yingqi-exact` 的待办项
238
245
  - **八字交运日**:交运时刻 = 出生时刻 + 「出生到起运侧节令」的真实天数 × 365.2422/3,顺排数到下一节、逆排数到上一节;同一条比例即古法「三日折一年、一日折四月、一时辰折十日」。每步大运在同月同日同时刻换,闰日退位。一年取回归年 365.2422 日——按 360 日折算的流派会差一两天,`dayun.jiao.yearDays` 把这个口径写进了结果
239
246
  - **八字通关**:只在「用神与克它的忌神两行在局中各 ≥1.5 分」时成立相战,通关行由五行生克唯一确定(克方所生、又生用神;金克木以水为关),按局中分量分「可通 / 关弱 / 为忌 / 未通」四档,`usable` 仅指「可通」;通关行若在本盘属忌神,只标「为忌」、不当桥用。只写进用神 detail、摘要与解释层,不折分数、不断吉凶,也不判通关之力够不够用。`test/tongguan.test.mjs` 用五组相克、阈值边界与 24 年逐月真实盘独立重算核对
240
- - **岁运提示**:四类信号只认干支事实——**天克地冲**要求天干相克且地支相冲,缺一不算(例如丙子年对丙午年柱是同干相冲,不标反吟);当值大运取与「该年立春到次年立春」相交的步,交运落在年内时前后两步并列。不折分数、不判吉凶,「岁运并临主大凶」一说不采;大运与原局之间的伏吟反吟未逐年标,四柱十神的引化也未叠入
247
+ - **岁运提示**:六类信号只认干支事实——**天克地冲**要求天干相克且地支相冲,缺一不算(例如丙子年对丙午年柱是同干相冲,不标反吟);当值大运取与「该年立春到次年立春」相交的步,交运落在年内时前后两步并列。不折分数、不判吉凶,「岁运并临主大凶」一说不采;大运与本命四柱的伏吟/反吟整步大运都在,随每年重复列出、不逐年加重;四柱十神的引化也未叠入
241
248
  - **六爻用神**:只落到「哪一爻是用神、它与卦体/动变/旬空什么关系、月建日辰给它什么状态」这一层——不叠出一个月建日辰换算的力重分数,用神两现时把候选都列出来而不代选;伏神给出伏于何爻、飞伏生克与出伏条件(飞生伏、伏克飞、日辰生/比和、月建旺/相算助,飞克伏、日辰克、月破算压,归四档),条件只并列、不排各家优先级,也不出具体日期与应期
242
249
  - **十六型人格**:MBTI **风格**的自建问卷,不是官方 MBTI 量表——题目、计分与常模都是本插件自己的,不与任何商业量表对齐;四维净分 =(分数 − 3)× 侧向求和,平手按 I / N / F / P 取并标「临界」,强度是按「净分 / (答数 × 2)」分的四档,不代表任何总体分布。结果只作自我参照,不用来评价他人能力、做招聘或临床判断
243
250
  - **入参**:日期按月份天数与闰年校验(`1990-02-30` 直接报错,不滚到下个月);八字/紫微/合盘的性别必填(性别决定大运大限顺逆,不做默认);六爻爻值必须正好 6 个,留空才随机摇卦。非法入参带错误码返回(`E_INPUT` / `E_LINES` / `E_COUNT` / `E_ASOF` / `E_PARTNER`),不静默改成另一个盘;风水缺坐向、非 24 山、坐向不对宫、运越界与运非整数(含字符串)同样归 `E_INPUT`,工具层不会把它们标成内部错误,也不会把 `2.5` 静默当成缺省九运
@@ -264,7 +271,7 @@ npm run check:patterns # 单独跑工程约定检查
264
271
  npm run release # 测试 → 构建 → 校验产物 → 发 npm → 核对附件(token 从 NPM_TOKEN 读)
265
272
  ```
266
273
 
267
- 也可以直接调脚本:`node tools/build-client.mjs`、`node tools/build-html.mjs`、`node tools/check-bundle.mjs`、`node tools/test-all.mjs`、`node tools/check-assertions.mjs`、`node tools/verify-tests-can-fail.mjs`、`node tools/check-html-sinks.mjs`、`node tools/check-patterns.mjs`、`node tools/release.mjs`、`node tools/verify-publish.mjs`(被 release 调用,也可单独用来核对某个版本)。
274
+ 也可以直接调脚本:`node tools/build-client.mjs`、`node tools/build-html.mjs`、`node tools/caliber-diff.mjs`(同盘换口径的逐字段对照)、`node tools/check-bundle.mjs`、`node tools/test-all.mjs`、`node tools/check-assertions.mjs`、`node tools/verify-tests-can-fail.mjs`、`node tools/check-html-sinks.mjs`、`node tools/check-patterns.mjs`、`node tools/release.mjs`、`node tools/verify-publish.mjs`(被 release 调用,也可单独用来核对某个版本)。
268
275
 
269
276
  **测试的七道闸**:
270
277
 
@@ -329,16 +336,16 @@ node tools/release.mjs --verify-only # 只核对 registry 上当前版
329
336
 
330
337
  微信群:**dsh-metaphysics**
331
338
 
332
- ![dsh-metaphysics 讨论群二维码](docs/assets/dsh-metaphysics-group.png)
339
+ <img src="https://github.com/xuanfu-web/dsh-metaphysics/releases/download/v0.50.1/dsh-metaphysics-group-2026-10-30.jpg" alt="dsh-metaphysics 讨论群二维码" width="480">
333
340
 
334
- 这批二维码 7 天内有效(至 2026-11-05);过期了在 [issues](https://github.com/xuanfu-web/dsh-metaphysics/issues) 说一声,我换新图。只想提问题、不想进群的,开 issue 一样算数。
341
+ 这批二维码 7 天内有效(11 月 6 日前,2026-10-30 更新);过期了在 [issues](https://github.com/xuanfu-web/dsh-metaphysics/issues) 说一声,我换新图。只想提问题、不想进群的,开 issue 一样算数。
335
342
 
336
343
  ## 致谢
337
344
 
338
345
  本插件的十套速查体系(农历互转为自有实现)在**能力范围**上参考了同生态的 [dsh-xuanji(玄机阁)](https://github.com/huangziyuan-general/dsh-xuanji)(MIT):黄历、择日、称骨、小六壬、星座、生命数字、人生 K 线、风水、起名。
339
346
  **实现是独立的**:没有拷贝对方源码,也没有引入它的依赖(iztro / lunar-javascript),全部按行为规格用本项目的 calendar / lunar / dst 模块重写,并逐项与公开通行表或 lunar-javascript 对拍(称骨表的初版错误就是这样查出来的)。特此致谢。
340
347
 
341
- 《子平真诠》《滴天髓》《三命通会》的原文摘句取自 [中华典藏网](https://www.diancang.xyz/)(古籍,public domain),照录通行本、附章名与链接;释义为白话自撰。三命通会取与格局取用直接相关的十六篇——论十神八篇(正财、偏财在该本分章),加专旺五格(曲直/炎上/从革/润下/稼穑)与弃命从煞、弃命从财七篇,另取卷五官煞去留杂论作七杀格的对照(该本没有单列的「论偏官」);从儿、从强三书没有可整段照录的专章,未硬凑。
348
+ 《子平真诠》《滴天髓》《三命通会》的原文摘句取自 [中华典藏网](https://www.diancang.xyz/)(古籍,public domain),照录通行本、附章名与链接;释义为白话自撰。三命通会取与格局取用直接相关的十六篇——论十神八篇(正财、偏财在该本分章),加专旺五格(曲直/炎上/从革/润下/稼穑)与弃命从煞、弃命从财七篇,另取卷五官煞去留杂论作七杀格的对照(该本没有单列的「论偏官」);另录卷二「总论岁运」「论人元司事」两条,分别作岁运提示与人元司权的出处(人元一条的日数与通行表不同,原文并列、不改判)。从儿、从强三书没有可整段照录的专章,未硬凑。
342
349
 
343
350
  《穷通宝鉴》120 格的原文摘句取自 [luckclub.cn](https://www.luckclub.cn/bazi/004/)(古籍,public domain),用神顺序参考 [knowyourbazi.com](https://knowyourbazi.com/zh-hans/qiongtong/) 的整理表;两者逐格对读,原文全章未见某个用神字时(如八月丁火的「丙」),数据里直接标了 note 说明「按整理表录入、待以善本核对」,没有替它圆场。
344
351