dsh-metaphysics 0.62.4 → 0.63.0
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 +101 -1
- package/client.almanac.js +49 -49
- package/client.chart.js +222 -0
- package/client.chenggu.js +57 -57
- package/client.convert.js +50 -50
- package/client.daliuren.js +124 -107
- package/client.fengshui.js +44 -44
- package/client.js +390 -281
- package/client.liuyao.js +123 -106
- package/client.mbti.js +50 -50
- package/client.name.js +70 -70
- package/client.numerology.js +50 -50
- package/client.qimen.js +115 -98
- package/client.star.js +51 -51
- package/client.tarot.js +115 -98
- package/client.xiaoliuren.js +51 -51
- package/client.zeri.js +49 -49
- package/engine/bazi.js +71 -2
- package/engine/citations-fuwen.js +222 -0
- package/engine/citations.js +129 -5
- package/engine/diff.js +1 -1
- package/engine/geju.js +333 -2
- package/engine/index.js +29 -1
- package/engine/interpret-knowledge.js +10 -10
- package/engine/interpret.js +78 -6
- package/engine/qimen.js +9 -0
- package/engine/structure.js +218 -0
- package/engine/xiaoliuren.js +6 -2
- package/package.json +1 -1
- package//345/221/275/347/220/206/346/216/222/347/233/230.html +1099 -56
- package/client.bazi.js +0 -205
- package/client.hepan.js +0 -204
- package/client.trend.js +0 -196
- package/client.ziwei.js +0 -205
package/CHANGELOG.md
CHANGED
|
@@ -1,4 +1,104 @@
|
|
|
1
|
-
## 0.
|
|
1
|
+
## 0.63.0(2026-11-10,已发布)
|
|
2
|
+
|
|
3
|
+
> 本段主题(2026-11-10):修「问进对话」的 chip 挂不上(C3 对话桥)、把命盘类四个 tab 合并成一个分块、补 B15 三项量化字段的输出通道,再按文墨天机的样式重做紫微盘面(三方四正菱形闭环、四化/飞星/三合三视图、自化图示图例)与宿主侧栏宣纸纸纹。**不改任何排盘口径、不新增体系**;文墨 APK 只作只读逆向参照,其安星流派与十干四化变体表只存档、未接入引擎。
|
|
4
|
+
|
|
5
|
+
### C3 对话桥:`slots.inject` 的 callback 必须返回可调用 disposer
|
|
6
|
+
|
|
7
|
+
> 症状:面板里点「问进对话」一直回「对话输入框还没就绪」,输入框右侧也看不到「命理·问」chip。
|
|
8
|
+
> 这条从 0.35.0 挂到现在没修好,之前几轮的排查方向(槽位未声明、注册时机、ctx.effect 包裹)都不对。
|
|
9
|
+
|
|
10
|
+
- **根因:`slots.register` 实测返回对象,不是函数**(`src/app.js`):宿主文档写的是「the idempotent definition disposer」,我们据此认为 `tryReg` 的返回值就是可调用清理器,于是直接 `return d` 交给 `slots.inject` 做 callback 返回值。但真机上 `typeof d === 'object'`——callback 返回的不是可调用 disposer,宿主判这次贡献无效:**座位占住了、`register` 不抛错、组件却永远不渲染**。面板自检把这句话原样打了出来,是这次定位的关键证据:`贡献 sidebar.panellist=object,main=object,input.right=undefined,composer.dock=undefined`。
|
|
11
|
+
- **修法**:新增 `asDisposer()`,按能力探测把返回值归一成函数——函数直接用;有 `dispose` / `off` / `cancel` / `unregister` 方法的包一层;都认不出就退化成空清理器(仍满足「可调用」契约,不静默失效)。`tryReg` 统一走它。
|
|
12
|
+
- **第二处缺陷:补注册与正式注册撞 id**(同上):`sessionSeat` 走 `slots.inject` 的挂起路径时 `tryReg` 还没执行、`seatOk` 是空的,700ms 后的 `seatRetry` 就用**同一个 id** 再注册一次。宿主对同 id 要么抛错要么覆盖,会把先落地的那份挤掉。现在补注册有一次性闸(`seatRetryDone`),且只在 `seatOk` 确实为空时执行。
|
|
13
|
+
- **第三处缺陷:补注册换新 id 会长出多个 chip**(同上):旧实现用 `metaphysics-ask-1/-2/…` 逐轮补注册,而 `conversation.input.right` 是 **list** 槽,每次都挂一个新条目。已改为始终用同一个 id。
|
|
14
|
+
- **`sessionSeat` 的 run 现在透传返回值**:这一处本身不是根因(传给 `slots.inject` 的是 `install`,它本来就返回 disposer),但 `ctx.effect.run` 返回 `undefined` 会让外层 effect 变成空效果、卸载时收不干净,一并修正。
|
|
15
|
+
- **自检文案去掉技术词**(同上):`bridgeDiagText` 原来会打印 `=object` / `=undefined`,而面板有一条「结果里不许出现 null / undefined / NaN」的闸,诊断信息把闸打红了。改成「已挂上 / 未挂上」,信息量不减、不再污染结果卡。
|
|
16
|
+
- **测试补了三条能守住根因的断言**(`test/client-bundle.test.mjs`):① 四个座位的 inject callback 都返回函数;② 把 `register` 的返回值钉成**对象**形态,要求归一化后仍可调用——**这条做过变异验证:撤掉 `asDisposer` 立刻红(`sidebar.panellist→object`),恢复立刻绿**;③ 同一槽位不许用同一 id 注册两次。旧测试的 mock 只提供了 `register`、没有 `inject`,走的是直调分支,所以从来测不到真实路径——这也是这个 bug 能活这么久的原因。
|
|
17
|
+
- **真机确认(2026-11-10,发版前)**:宿主输入框工具条上「识图」与模型选择之间已出现 `命理·问` chip,C3 这条从 0.35.0 挂到现在的链路结案。离线测试只能证明代码契约修对,真机这一眼才是「用户确实看得到」的证据;面板结果卡下方的「桥自检」行保留,后续若再出现挂不上仍可直接读状态。
|
|
18
|
+
|
|
19
|
+
### D1+ 命盘四 tab 合并成一块
|
|
20
|
+
|
|
21
|
+
- **命盘四 tab 合并:18 块 → 15 块,分块合计 gzip 2.56MB → 1.89MB**(`tools/build-client.mjs`):八字 / 紫微 / 合盘 / 趋势原先各自背一套完整公共栈(`index` 42KB + `interpret` 49KB + `interpret-knowledge` 22KB + `plain-summary` 15KB + `classics` 12KB ≈ 140KB gzip)。用户在四个 tab 间切换时每切一次就重复下载一遍——「八字 → 紫微 → 合盘」这条最普通的路径累计 **809KB**,其中约 405KB 是重复字节。合并后单块 gzip **247KB**(几乎等于原来 bazi 单块),四 tab 全逛一遍从 809KB 降到 **336KB**,**省 58%**。
|
|
22
|
+
- **这不是「抽共享块」**:先按常规思路量过,抽共享块在 DSH 上不成立——模块系统要求分块自包含(`dsh.client.external` 只解析到冻结的静态表或独立动态包 row,而本插件只注册一个 entry id),分块 factory 拿到的 `require` 是裸的,只有入口层的 `require.async` 由宿主注入。而且就算抽得出来也**不省**:实测「只看八字」在两种方案下都是 462KB,只是把同样的字节从 A 文件搬到 B 文件。真正能去掉重复的路径是「在一个自包含分块内让多个 tab 共用一套栈」。
|
|
23
|
+
- **单块预算不用动**:合并后最大块 247KB,离 288KB 上限仍有 41KB 余量,`CHUNK_GZIP_CAP` 与 `CHUNKS_TOTAL_GZIP_CAP` 一个数字都没改。`bundle-budget.test.mjs` 的「单块预算没有被抬成空闸」(`max * 1.3 >= CAP`)继续成立。
|
|
24
|
+
- **尺寸底线改成与声明同源**(`test/bundle-budget.test.mjs`):原先写死 `files.length >= 18`,合并后变成假失败。改为「磁盘分块与 `CHUNKS` 声明一一对应」——多一个少一个都算漂移,比一个魔数更能拦住真实问题。
|
|
25
|
+
- **懒加载器的兜底改指 chart**(`src/engine-lazy.js`):未知 tab 原先回落到 `client.bazi.js`,该文件已不存在;改指 `client.chart.js`(命盘类四 tab 共用块),至少能排出命盘而不是取到 404。
|
|
26
|
+
- **测试补了「只下载一次」这条真断言**(`test/chunks.test.mjs`、`test/perf-instrumentation.test.mjs`):原先只断言「缓存不重复拉取」用的是单 tab 重复调用,测不出跨 tab 的重复;现在四个命盘 tab 依次切换后断言 `client.chart.js` 只被取 1 次,跨块切换(命盘 → 六爻)才取第 2 块。这一条正是本次合并的目的,撤掉合并即红。
|
|
27
|
+
- **验证**:九道闸全绿(163/163 文件、47.3s;check-bundle `client.js` 290KB / gzip 90KB、**15 块** gzip 合计 **1.89MB**、单块上限 288KB、逐模块 71 个、宿主形态可执行且与源码逐字节一致;check-verification 新鲜;check-patterns / check-html-sinks / check-perf / check-secrets 均过)。`e2e-dom` 152 项通过。断言基线 **8772 → 8758**——**减少的 14 条全部来自分块数变少**(每块 6 条 × 少 3 块 = 18 条,另新增 4 条缓存断言),没有一条真实检查被删。
|
|
28
|
+
- **顺带修的引用**:`tools/release.mjs` 的发布产物核对清单、`test/autopublish.test.mjs` 的白名单、`test/bridge.test.mjs` 与 `test/ziwei-zuoyao.test.mjs` 读取的分块文件,全部从 `client.bazi.js` / `client.ziwei.js` 改到 `client.chart.js`。这类硬编码文件名在合并时会静默失配(测试读不到文件就跳过),已逐个改到并跑绿。
|
|
29
|
+
|
|
30
|
+
### B15:0.62.5 三项量化字段接上输出通道
|
|
31
|
+
|
|
32
|
+
> 上一版它们只存在于结果对象里——算得出、没人看得见,按本仓「引擎字段 → 摘要/解析 → 面板 → 独立页 → 测试 → CHANGELOG」的每步验收算没做完。**不改任何排盘口径、不改旺衰分与喜忌、不新建知识卡**。
|
|
33
|
+
|
|
34
|
+
- **八大地支结构接进四处,并说清与旺衰分的关系**(`engine/index.js`、`engine/interpret.js`、`src/panel-kit.js`、`test/bazi-structure.test.mjs`):`strength.branchStructure` 自 0.62.5 起就在结果里,但摘要、解析、面板、独立页一处都没显示。现补:摘要新增「地支结构:四支 AABA(年午A、月巳A、日丑B、时未A) 日支独异,不易从(静态从格 ≈20%)」一行;解析新增「地支结构」一节,逐支列阵营与宫位分值、异类支、地支与干支两段平衡,并明写**「这是并列的第二套静态视图,不改上面的旺衰评分,也不参与取格与喜忌」**;面板在「日主强弱」下方加 `.pp-struct` 行(code + 逐支阵营 + 异类 + 从格概率 + 平衡比),悬停给方法与边界。
|
|
35
|
+
- **三柱模式不把占位时支冒充实有**(同上):`hourUnknown` 时第四支是正午占位,摘要写「三支+占位 …… 时午A·占位」,面板同款;从格概率一律不套。这里有一处措辞要留意——`bs.word` 本身已被 `bazi.js` 的 `hourUnknown` 分支改写成「时柱暂缺,第四支为正午占位,不套从格概率」,所以摘要**不能再追加同句**,初版重复说了两遍,已由断言 `(match(/…/g)||[]).length === 1` 钉死。
|
|
36
|
+
- **暗合接进三处,并明确「另列不并」**(同上):`relations.anhe` 同样只算不显。摘要按对数写「暗合:…(另列,不并入上面的合冲刑害;只一对,按口径可忽略 / 共 N 对)」;解析新增「暗合」一节,明写与三合三会六合六冲刑害是**两条线、不合并计分、不折旺衰**;面板在关系行下加 `.pp-anhe` 行。无暗合的盘这三处都不出现(不用空行占位)。
|
|
37
|
+
- **起运岁精确值接进三处**(`engine/index.js`、`engine/interpret.js`、`src/panel-kit.js`、`test/bazi-jiaoyun.test.mjs`):`dayun.startAgeExact` 是 0.62.5 为对齐第三方排盘加的(截断到日/时 23/23 全中,四舍五入到月只有 15/23),但同样没有输出通道——恰恰是它最能解释「为什么和别家差一个月」。摘要新增「起运岁(精确):8 年 2 个月 26 天 8 小时(截断到年月日时;上面「8岁3个月」是四舍五入到月,两者同源)」;解析「时间窗」写明差一个月的边界常出在日/时这两位、第三方给到日时按这行核对;面板页脚在「N岁起运(交运…)」后加「精确 N年N月N天N时(截断到日时;上面是四舍五入到月)」。
|
|
38
|
+
- **旧结果兼容**:三处都是新增可选行,缺字段时整块不渲染(`startAgeExact` / `branchStructure` / `anhe` 任一缺席都不出空行、不出 `undefined`),`test/bazi-jiaoyun.test.mjs` 第十二、十三节与 `test/bazi-structure.test.mjs` 第七至九节各有一组「删字段后照常渲染」的对照断言。
|
|
39
|
+
- **验证**:`build-client` → 改文档 → 再 `build-client` + `build-html` → 全量 `test:ci` 九步全绿(**163/163** 测试文件、46.7s;check-bundle `client.js` 290KB / gzip 89KB、18 块 gzip 合计 2.56MB、单块上限 288KB、逐模块 71 个、宿主形态可执行且与源码逐字节一致;check-verification 两产物新鲜;凭据扫描 345 文件干净;check-patterns 81 文件;HTML 注入面 5 文件;check-perf 29 项,1000 盘 401ms / RSS 76MB;`verify-tests-can-fail` 15 PASS / 1 FAIL → exit 1 符合预期)。断言基线 **8729 → 8772**(+43,全在结构/交运两档),`test/bazi-structure.test.mjs` 81 条、`test/bazi-jiaoyun.test.mjs` 77 条。`e2e-dom` 152 项、`e2e-panel` 110 项通过。分块 gzip:**bazi 247.5KB**(逼近 288KB 上限,因 `interpret` 新增两节),其余不变。
|
|
40
|
+
- **一处已知的取舍(已随 D1+ 解决)**:B15 落地后 `client.bazi.js` 涨到 **247.5KB**,当时解析栈被 bazi/ziwei/hepan/trend 四块各存一份,写着「再加同类文案就该拆共享块」。D1+ 把四块并成 `client.chart.js` 之后,解析栈只存一份,四 tab 共用同一块 247KB——这笔账已结,见上面 D1+ 第一条。
|
|
41
|
+
|
|
42
|
+
### D5:反馈入口、UI 美化与小六壬 meta 修复
|
|
43
|
+
|
|
44
|
+
> 上一轮遗留的「反馈入口」收尾,加上一轮纯 CSS 的层次感整理。不改排盘口径。
|
|
45
|
+
|
|
46
|
+
- **反馈入口常驻面板底部**(`src/app.js`、`src/panel-kit.js`、`test/feedback-report.test.mjs` 28 条):一键「复制反馈报告 / 开 issue」,报告含版本、开关状态、完整输入、结果摘要前 40 行、报错原文与排盘句柄(拿到句柄可精确复现同一张盘),用户只需补一句「哪里不对」。隐私边界写死并钉成断言:不读本机命盘档案、不采集设备信息。
|
|
47
|
+
- **UI 美化只动 CSS,零逻辑改动**(`src/app.js`、`src/panel-kit.js`):学习本机 `dsh-plugin-wallpaper-engine` 的令牌工艺(`--dur` / `--dur-fast` / `--ease` + 圆角令牌,浅暗双主题同注入)与 GitHub `ziwei-chart` 的层次感——宫位卡 hover 光晕、命宫双环选中态、中宫「图章」内框、主星字号锚点、煞星圆点、亮度徽章胶囊化、`prefers-reduced-motion` 全局关停。浏览器实测十二宫格、命宫高亮、中宫内框与亮度徽章均正常渲染。
|
|
48
|
+
- **小六壬 `question` 不再写进 meta**(`engine/xiaoliuren.js`、`engine/index.js`、渲染器):800 次跨体系模糊测试发现 `question` 存在 `meta` 里而句柄按设计不收 `question`,回放后 `meta.question` 变空、看起来像盘变了。移到顶层(与其他体系一致),渲染器兼容旧 `meta.question`。修后 800 次模糊测试 0 异常。
|
|
49
|
+
- **验证**:164/164 文件、8794 条断言全绿;`e2e-dom` 152 项、`e2e-panel` 110 项;九道闸全过;`client.js` gzip 93KB(100KB 预算内)。
|
|
50
|
+
|
|
51
|
+
### D5+:学文墨天机的盘面(三方四正 / 三视图 / 自化图示)与宿主宣纸纸纹
|
|
52
|
+
|
|
53
|
+
> 用户拿文墨天机截图提了三件事:三视图要有真区别、自化图示要看得见、左侧插件面板要有水墨底纹。全程只改 `src/panel-kit.js` 与 `src/app.js` 的渲染/CSS,不动引擎结果。
|
|
54
|
+
|
|
55
|
+
- **三方四正菱形闭环**(`src/panel-kit.js` 的 `drawSanfang()`):点宫位后取 `[本宫, 对宫, 三合1, 三合2]` 四锚点首尾相连成闭环菱形,两条对角线在中宫交叉,与文墨的连线形态一致。纯 SVG overlay、`pointer-events:none` 不挡交互,锚点吸在中宫边界(x=25/75,y 压回 25~75),所有线段都落在中宫矩形内、不穿周边宫位;本宫红点、其余三方墨点,再点收起。浏览器实测「所有线段坐标都在 25~75 内」。
|
|
56
|
+
- **三视图是真分派,不是切个显隐**(`src/panel-kit.js`):新增「四化 / 飞星 / 三合」单选用 CSS 兄弟选择器驱动。四化保留全量四化徽章与自化;飞星把**每宫宫干四化**摊进宫内(`.pp-fx`),同时藏起四化徽章与视图徽章;三合藏掉**全部** `.pp-m` 四化徽章、`.pp-zh` 自化、`.pp-viewhua` 与 `.pp-flywrap` 飞星串连 chip,只留三方四正盘面。第一版只做了浅层显隐、用户反馈「三个都差不多,没区别」,这一版按真派重做,宿主三张截图逐档确认。
|
|
57
|
+
- **飞星数据源修正**:宫位对象本身没有 `mutagenHits`(实测 keys 里只有 `selfHua`),宫干四化在 `r.daxianList[].mutagenHits`。`ziweiHTML()` 先按地支汇成 `flyByBranch`,`fxLineHTML()` 再据此生成「丙戌宫干 禄→官禄 权→财帛 科→交友 忌→父母」这类逐宫行。`.pp-flywrap` 也从 `.pp` 外挪进 `.pp` 内,否则 `#ppm-sc-sanhe:checked~.pp-flywrap` 够不到、三合仍漏飞星 chip。
|
|
58
|
+
- **自化图示图例 + 彩色徽章**(同上):中宫下方新增 `.pp-zhlegend`(`自化图示 →禄 →权 →科 →忌`),四色对应禄/权/科/忌;宫内自化徽章沿用同套色并加虚下划线。**边界要说清**:文墨原版是从宫位边缘飞出的彩色小箭头,本版目前是「图例 + 彩色徽章」,没有做宫缘箭头;用户这轮问的是「能不能理解它划线的逻辑」,连线与划色逻辑已对齐,箭头形态未实现。
|
|
59
|
+
- **宿主侧栏宣纸纸纹**:初版把 `feTurbulence` 纸纹铺在 `.mp-panel::before`,用户反馈「左边插件面板没有、网页端也不明显」——根因是 `.mp-panel` 只是底部表单块,宿主侧栏根是 `.mp-wrap`、上方卡片是 `.mp-tgroup`。最终把纸纹铺到 `.mp-wrap` 整个侧栏(`background-attachment:local`,浅色暖白 / 深色墨底两套),`.mp-tgroup` 换宣纸卡片色,`.mp-panel` 收成同色系表单块。宿主整列从上到下统一米色的截图已确认;离线页 `命理排盘.html` 是另一套 CSS,不作宿主侧栏的验证依据。
|
|
60
|
+
- **文墨天机 APK 只读逆向成果(存档,未实现)**:从 `App.swf` 的 ABC 字符串表取到完整设置树——安星流派开关(庙陷 4 / 命主 2 / 流年四化 2 / 天马 2 / 天空 2 / 截空旬空 4 / 魁钺 4 / 天使天伤 2 / 长生 3)、十干四化变体表、飞星派与四化派两组显示开关、底部三按钮即三种视图。这些与现有 `school` 开关高度重合,作为后续「流派补全」的参照存档;**本版一个都没接进引擎**,三视图只是显示层分派。
|
|
61
|
+
- **验证**:`check-bundle` `client.js` 306KB / gzip 96KB、引擎分块 15 个(gzip 合计 1.89MB,单块上限 288KB)、逐模块编译 71 个、宿主形态可执行且与源码一致;`standalone.test.mjs` 40 PASS / 0 FAIL;`check-assertions.mjs` 164 文件 / 8794 条 PASS(基线未动);全量 `test-all.mjs` 164/164 通过、`test:ci` 九道闸全绿。真机确认三视图三档差异、自化图例、整侧栏宣纸底纹,以及输入框右侧 `命理·问` chip。
|
|
62
|
+
|
|
63
|
+
## 0.62.5(2026-11-09,已发布)
|
|
64
|
+
|
|
65
|
+
## 0.62.5(2026-11-09,已发布)
|
|
66
|
+
|
|
67
|
+
- **八大地支结构接进四处,并说清与旺衰分的关系**(`engine/index.js`、`engine/interpret.js`、`src/panel-kit.js`、`test/bazi-structure.test.mjs`):`strength.branchStructure` 自 0.62.5 起就在结果里,但摘要、解析、面板、独立页一处都没显示。现补:摘要新增「地支结构:四支 AABA(年午A、月巳A、日丑B、时未A) 日支独异,不易从(静态从格 ≈20%)」一行;解析新增「地支结构」一节,逐支列阵营与宫位分值、异类支、地支与干支两段平衡,并明写**「这是并列的第二套静态视图,不改上面的旺衰评分,也不参与取格与喜忌」**;面板在「日主强弱」下方加 `.pp-struct` 行(code + 逐支阵营 + 异类 + 从格概率 + 平衡比),悬停给方法与边界。
|
|
68
|
+
- **三柱模式不把占位时支冒充实有**(同上):`hourUnknown` 时第四支是正午占位,摘要写「三支+占位 …… 时午A·占位」,面板同款;从格概率一律不套。这里有一处措辞要留意——`bs.word` 本身已被 `bazi.js` 的 `hourUnknown` 分支改写成「时柱暂缺,第四支为正午占位,不套从格概率」,所以摘要**不能再追加同句**,初版重复说了两遍,已由断言 `(match(/…/g)||[]).length === 1` 钉死。
|
|
69
|
+
- **暗合接进三处,并明确「另列不并」**(同上):`relations.anhe` 同样只算不显。摘要按对数写「暗合:…(另列,不并入上面的合冲刑害;只一对,按口径可忽略 / 共 N 对)」;解析新增「暗合」一节,明写与三合三会六合六冲刑害是**两条线、不合并计分、不折旺衰**;面板在关系行下加 `.pp-anhe` 行。无暗合的盘这三处都不出现(不用空行占位)。
|
|
70
|
+
- **起运岁精确值接进三处**(`engine/index.js`、`engine/interpret.js`、`src/panel-kit.js`、`test/bazi-jiaoyun.test.mjs`):`dayun.startAgeExact` 是 0.62.5 为对齐第三方排盘加的(截断到日/时 23/23 全中,四舍五入到月只有 15/23),但同样没有输出通道——恰恰是它最能解释「为什么和别家差一个月」。摘要新增「起运岁(精确):8 年 2 个月 26 天 8 小时(截断到年月日时;上面「8岁3个月」是四舍五入到月,两者同源)」;解析「时间窗」写明差一个月的边界常出在日/时这两位、第三方给到日时按这行核对;面板页脚在「N岁起运(交运…)」后加「精确 N年N月N天N时(截断到日时;上面是四舍五入到月)」。
|
|
71
|
+
- **旧结果兼容**:三处都是新增可选行,缺字段时整块不渲染(`startAgeExact` / `branchStructure` / `anhe` 任一缺席都不出空行、不出 `undefined`),`test/bazi-jiaoyun.test.mjs` 第十二、十三节与 `test/bazi-structure.test.mjs` 第七至九节各有一组「删字段后照常渲染」的对照断言。
|
|
72
|
+
- **验证**:`build-client` → 改文档 → 再 `build-client` + `build-html` → 全量 `test:ci` 九步全绿(**163/163** 测试文件、46.7s;check-bundle `client.js` 290KB / gzip 89KB、18 块 gzip 合计 2.56MB、单块上限 288KB、逐模块 71 个、宿主形态可执行且与源码逐字节一致;check-verification 两产物新鲜;凭据扫描 345 文件干净;check-patterns 81 文件;HTML 注入面 5 文件;check-perf 29 项,1000 盘 401ms / RSS 76MB;`verify-tests-can-fail` 15 PASS / 1 FAIL → exit 1 符合预期)。断言基线 **8729 → 8772**(+43,全在结构/交运两档),`test/bazi-structure.test.mjs` 81 条、`test/bazi-jiaoyun.test.mjs` 77 条。`e2e-dom` 152 项、`e2e-panel` 110 项通过。分块 gzip:**bazi 247.5KB**(逼近 288KB 上限,因 `interpret` 新增两节),其余不变。
|
|
73
|
+
- **一处已知的取舍**:`client.bazi.js` 从 243.7 涨到 **247.5KB**,离 288KB 上限还剩 40KB。结构节与暗合节都进了解析栈(`interpret.js`),而解析栈被 bazi/ziwei/hepan/trend 四块各存一份——再加同类文案就该考虑拆共享块,本轮不动。
|
|
74
|
+
|
|
75
|
+
## 0.62.5(2026-11-09,已发布)
|
|
76
|
+
|
|
77
|
+
> 已发布:npm `dsh-metaphysics@0.62.5`,shasum `2be34a0c3be03b1285ae72f10f42bc73c9ce7627`,104 个文件;tag `v0.62.5` → `985b3c4`,[GitHub release](https://github.com/xuanfu-web/dsh-metaphysics/releases/tag/v0.62.5) 已建,`main` 已推送。
|
|
78
|
+
|
|
79
|
+
> 本段主题(2026-11-08,B14):把书目覆盖表里最后 3 项「只有书名、没有原文」升级成有原文——易传(十翼)、奇门遁甲元灵经、奇门遁甲秘笈大全。覆盖表 **74 / 3 / 69 → 77 / 0 / 69**,「只有书名」这一类清零。不改排盘口径、不新建知识卡(`KNOWLEDGE` 仍 59 张)。
|
|
80
|
+
|
|
81
|
+
- **三本新书 33 条入库:16 条接五张已有奇门卡、17 条只进索引页**(`engine/citations.js`、`engine/citations-fuwen.js`、`test/fixtures/citation-sources.json`):`CITATION_BOOKS` 66 → **69 本**(新登记 `yichuan` / `yuanling` / `miji`);引擎侧 `CITATIONS` 166 → **182**、附文库 `FUWEN_CITATIONS` 257 → **274**、`LIBRARY_CITATIONS` 423 → **456**,加八字三书 41 条后索引条目 **464 → 497**,再加穷通宝鉴 120 格摘句,可核验原文 **584 → 617 条**。8 页新底本走仓库自己的 `tools/citation-fetch.mjs` 抓取、由 `merge-citation-sources.mjs` **只补缺**写入 fixture(341 → **349 页**,已有 341 页一字节未动),所以探测文本与 fixture 文本逐字一致。接线口径照旧:能对上引擎已有判定层的才接卡,对不上的只入索引页,不硬挂、不新造断语。
|
|
82
|
+
- **易传 10 条全部只入库,一条不接卡**(`engine/citations-fuwen.js`):后天八卦方位表虽与 `engine/fengshui.js` 的 `PALACE_DIRECTION` 八方相符,但地相一栏本站没有知识卡;性情/类象/先天对待/六画成卦/大衍蓍法/太极/重卦/爻效各篇本站都没有判定层。10 条白话逐条写明为什么不接卡,并有断言钉死「引擎侧零条 `/yijing/` 链接、10 条不被任何卡片/破格规则/成格索引引用」。两处容易混引的地方也钉住了:「变化者进退之象」讲阴阳消长,**不是**六爻的化进神退神,不接 `liuyao-jintui-yong`;「爻效天下之动」讲全体爻,不接 `liuyao-dongbian`。底本只存系辞上下、说卦、序卦、杂卦五篇,**彖、象、文言三传未收**,故「十翼」不全;本批 10 条出自 3 页(说卦 5、系辞上 3、系辞下 2),序卦、杂卦有页未选句。
|
|
83
|
+
- **接卡的 16 条逐格与引擎表对拍,不是「看着像」**(`engine/qimen.js` 新增只读视图 `QIMEN_JU_TABLE` / `QIMEN_BASE_TABLES`、`test/citations.test.mjs` B14 专段):照已有 `QIMEN_CONDITION_TABLES` / `QIMEN_STATE_TABLES` 的「供测试与文档引用」写法导出 24 节气三元局数表与九星八门定宫表,测试**从引文原文里解析出表格**再与引擎逐格比——元灵经卷一局数 **24/24**(底本「惊蜇」归一到惊蛰)、六仪配旬首对 `xunShouLiuYi()` **6/6**、秘笈卷十五六仪刑击格对 `jiXing` **6/6**、门迫歌对 `gatePalaceRelation()` **8 门 13 宫全是「门迫」**、迫制和义格四类 **4/4** 一一对应、三奇入墓歌对 `ruMu` **3/3**、秘笈总序八方对 `PALACE_DIRECTION` **8/8**、说卦传先天对待四对对 `TRI_NAME` 互补相加 **4/4 皆九**;符头三元与阴阳遁分界另与 `buildQimen` 的规则串同口径。九星定宫、八门定宫两条只入库不接卡,但白话里写了「与引擎逐宫相符」,所以也钉成断言(对 `BASIC_STARS` **9/9**、对 `BASIC_GATES` **8/8**),不留只有结构完整性、没有逐宫比对的半截核验。
|
|
84
|
+
- **对不上的照实记异,其中一处改掉了卡片里的过度声称**(`engine/interpret-knowledge.js`、`engine/citations.js`):秘笈卷十五「时墓格」戊六、壬四、丙六与引擎相符,**辛(书艮八/引擎巽四辰)、乙(书坤二/引擎乾六戌)两句相异**;`qimen-rumu` 卡原先的 source 泛称「六仪入墓见《奇门遁甲秘笈大全》卷十五」,等于把全书当成引擎表的出处,现改成写明「只戊、壬、丙三句相符,辛、乙两句相异」。同卷「奇墓格」又作「乙到临坤」(与引擎乙墓戌不同),因此**只入索引页不接卡**;引擎表不动,它另有《统宗·玄机赋》阴干逆行取墓的出处。测试里专门写了一条**反向证伪**断言:辛乙两句必须与引擎不同——哪天引擎表被改成与书一致,这条会先红,逼人来复核而不是悄悄「对齐古籍」。十干克应的三处同格异文(青龙返首/总序作反首、乙加辛青龙逃走的三种断语、甲加甲伏吟/青龙出土)一律并列不合并。
|
|
85
|
+
- **十干克应卡由「通行说」升「已定位」,但 note 写明只证三组不证全表**(`engine/citations.js` 的 `CARD_CITATIONS['qimen-ganying']`、`engine/interpret-knowledge.js`):升级依据是元灵经卷二甲加甲「吉凶不定,惟看门如何。门吉则吉,门凶则凶」,正是该卡「先取成象、再与门星神合看,不单独回答事情成不成」那一层的原文。但卷二「天盘加地盘吉凶」**只存天盘甲、乙、丙三组,各 9 条、三组都缺「加戊」,页面到「丙加地盘癸」为止,丁以下七组未收**,所以 refs 只证这三组与这一层口径,note 与卡片都写明**不证通行 100 组表全文**,其余七十馀组仍取通行表汇编、无单条原文。「通行说」卡片 8 → **7 张**(待补仍 1 张),计数锁同步改。
|
|
86
|
+
- **底本缺陷照录不代改**(`docs/知识扩展与待核实清单.md` 附十三):说卦传第三章被底本误题作「《老子。说卦传》」;震/巽/坎类象有 □①-⑥ 缺字,只引干净的乾、坤两段;大衍章下一句「归奇於□①以象闰」有缺字,引到「揲之以四以象四时」为止(断言钉死 quote 结尾与不含「归奇」);三奇入墓歌「丁奇乙未临艮土」中「乙未」未详,照录并写明疑有讹脱;秘笈页内「干」即乾、「直符」即值符、「尅」即克,引文照原字、解析时归一;秘笈分类页**跳过卷三**(003 是卷二、004 是卷四),实收 29 卷;说卦传只明写六方,**坤西南、兑正西两方本页没有明写**,由秘笈总序补证,两条白话互相点名,不拿说卦传冒充八方俱全。
|
|
87
|
+
|
|
88
|
+
- **验证**:按附五记的收尾顺序重建——改引擎与文案 → `build-client` → 改文档与 CHANGELOG → 再 `build-client` + `build-html` → 生成 `docs/citations.html` → `test-all` → `check-assertions --update` → **再 `build-html`** → 全量 `test:ci` 九步全绿(**155/155** 测试文件,用时 40.4s;check-bundle `client.js` 289 KB / gzip 89 KB、18 块 gzip 合计 **2.51 MB**、单块上限 **288 KB**、逐模块编译 70 个、宿主形态可执行且与源码逐字节一致;check-verification 2 个产物与源码渲染逐字节一致;凭据扫描 **337** 文件干净;check-patterns 80 文件;HTML 注入面 5 文件;check-perf 29 项,1000 混合盘 **336 ms / RSS 94 MB**;`verify-tests-can-fail` 15 PASS / 1 FAIL → exit 1)。断言基线 **8376 → 8415**(只增不减,B14 净增 39 全在 citations 一档),`test/citations.test.mjs` **210 → 249 PASS / 0 FAIL**。分块 gzip:**bazi 233.6 / hepan 232.3 / ziwei 228.8 / liuyao 195.2 / qimen 187.6 KB**,最大块离 288 KB 上限还有约 54 KB——进分块的只有 16 条定位字段、5 张卡的 refs 与 source/note、两个只读视图(`QIMEN_JU_TABLE` / `QIMEN_BASE_TABLES`)与本段条目标题,17 条原文白话与 8 页底本全在不打包的 fuwen/fixture 侧。`docs/citations.html` 重建到 **451 KB**、统计 464 → 497 条,与 `buildCitationsHTML()` 逐字节一致。桌面副本当时停在 0.62.2;已在 0.62.5 收尾时按用户要求一并刷新(覆盖前留了 0.62.4 回滚副本)。
|
|
89
|
+
|
|
90
|
+
> 续(2026-11-09):结掉「交运只有数学自证、没有第三方对拍」这笔欠账,把炳祥课堂的力量量化层接成只读标注,再把已吸收的命理知识收束成一份可执行的口径总纲。全程不改 L0/L1 结论——旺衰分、喜忌、取格、交运字段一律原样,新增字段都是并列只读。
|
|
91
|
+
|
|
92
|
+
- **交运第三方对拍入仓:23 例,四柱 22/22、顺逆 23/23、时间基准 20/20、首运 3/3**(`test/fixtures/baziqa-jiaoyun.json`、`test/fixtures/vendor-jiaoyun-pages.json`、`tools/capture-baziqa-jiaoyun.mjs`、`tools/capture-vendor-jiaoyun.mjs`、`tools/data-jiaoyun.mjs`、`tools/gen-jiaoyun-data.mjs`、`tools/backtest-jiaoyun.mjs`、`test/bazi-jiaoyun-backtest.test.mjs`):BaziQA 固定 commit `3bad3de` 的 117 盘里取 20 例(`qiyun.start_date` 由 lunar-python 1.4.8 算),另取元梓知易 / Multifate / 靈台 三张公开页面作 L0 历法层 3 例;抓取脚本与抓到的正文、sha256 都留在仓库,`gen-jiaoyun-data.mjs --check` 与 `data-jiaoyun.mjs` 逐字节一致。绝对偏差日均 **3.48 天**、最大 10 天、无一例超档,偏差已逐项归因到「BaziQA 的 `after_days` 只有 0/10/20 三档(117/117,一时辰折十日的量化)+ 日历月加算」,不是取节或顺逆算错。
|
|
93
|
+
- **起运岁新增只读并列口径 `dayun.startAgeExact`**(`engine/bazi.js`、`engine/diff.js`):`startAge` 仍按四舍五入到月(口语「几岁几个月」),新字段截断到年/月/日/时,两者同源、互不覆盖。用同一份 `spanDays` 复算:截断到月 **23/23** 全中厂家值,四舍五入只有 **15/23**;8 例差全部是「月内余数 ≥0.5 被进位」,逐例可复算。元梓页把四段都印了(9 年 10 个月 21 天 12 小时),本机四段全中。
|
|
94
|
+
- **炳祥课堂的力量量化层接入为只读标注,不动既有旺衰、喜忌与取格**(新增 `engine/structure.js`,改 `engine/bazi.js` / `engine/geju.js` / `engine/interpret.js`):`strength.branchStructure` 给八大地支结构 code(AAAA…ABBA)、从格静态概率与平衡度;`strength.weightPct` 按柱给年 13% / 月 41% / 日 27% / 时 19%;`frame.bingyao` 病药(正格 >35%、从格 >15%,从格按类型反转喜忌)、`frame.xianshen` 闲神(食伤与官杀较弱者,4% 最佳、≥10% 显忌,显性 ×3 只进文案排序)、`frame.patternScore` 成格评分(只评正八格月令格,建禄/羊刃/月劫等外格不评)、`relations.anhe` 暗合另列、不混入合冲刑害;解析层新增「病药」「闲神」两节与「量化口径」说明。三柱(时辰未知)一律打 `placeholderHour`、不套从格概率、时柱权重不计入合计(81%)且不归一化。七个新测试文件共 238 条断言。
|
|
95
|
+
- **撤掉三处过度声称,命中率从虚高改回可核**(`tools/backtest-jiaoyun.mjs`、`docs/命理口径总纲.md` §6):① 旧样本把上游已扣过夏令时的 `chart.datetime` 再喂 `dst:true`,等于扣两次(民用时间错 1 小时、交运错 5 天),现改喂原文钟表时间 `time.clock` 并加 `frameOk` 闸门(20/20),另用「双重扣必给出不同结果」反向证伪该闸门不是恒真;② Multifate 页面没印四柱与「几天」,旧样本把本机值当厂家值填进去、凭空多出一例「命中」,现一律记 `published:false` 并剔除出分母,四柱命中由 23/23 修正为 **22/22**;③ 枇杷八字那份输出自相矛盾,旧稿替它编了「取节错误」根因,现改判 `UNUSABLE_CASES` 不入分母。偏差均值随之由 3.70 天修正为 **3.48 天**。
|
|
96
|
+
- **《命理口径总纲》入仓:23 条裁决,冲突处直接选定主口径并写清理由与置信边界**(新增 `docs/命理口径总纲.md`、`docs/炳祥八字-课程知识内化.md`,改 `docs/参考资料与对拍来源.md` §7、`docs/知识扩展与待核实清单.md` §三.2、`docs/对话记录与决策日志.md`):明确不做兼透次序/三会改格、体用能量比、紫微破格/奇门入墓/六爻用神多现,应期只到年运不推流日;旺衰保留现有相对分,炳祥百分比只作宫位百分比与结构概率的只读视图;51%、旺衰 90% / 调候 10%、大运:流年 3:2~2:1 等课堂口径只进解读注记,不改判定。
|
|
97
|
+
- **验证**:`build-client` → 改文档与 CHANGELOG → 再 `build-client` + `build-html` → 全量 `test:ci` 九步全绿(**163/163** 测试文件;check-bundle 逐块均在上限内、宿主形态与源码逐字节一致;check-verification 两产物与源码渲染一致;凭据扫描干净;check-patterns / check-html-sinks / check-perf 均过)。断言基线 **8376 → 8729**(只增不减:citations 段 +39,八字新测试 +314),已按 `check-assertions --update` 重算。另顺手钉死 `bool-flags.test.mjs` 里紫微 `flow` 读本机当前时刻带来的偶发噪声(加 `asOf`),不改引擎行为。桌面副本(`~/Desktop/命理排盘.html`)按用户要求随 0.62.5 一并刷新,覆盖前留了一份 0.62.4 回滚副本。
|
|
98
|
+
|
|
99
|
+
## 0.62.4(2026-11-07,已发布)
|
|
100
|
+
|
|
101
|
+
> 已发布:npm `dsh-metaphysics@0.62.4`,shasum `e081b9a3fa7d16aacd912dcc27ca793216b4a5ef`,103 个文件;tag `v0.62.4` → `a16994e`,[GitHub release](https://github.com/xuanfu-web/dsh-metaphysics/releases/tag/v0.62.4) 已建,`main` 已推送。
|
|
2
102
|
|
|
3
103
|
> 本段主题:把手机「书库」13 个分类、146 项书名与仓库引文库逐类对名,补上《紫微斗数全书》卷一的赋文,并把「原文照录 + 本站白话」从浏览器分块里彻底拆出去——引文库从此不再受 232 KB 分块线约束。
|
|
4
104
|
|