dsh-metaphysics 0.57.0 → 0.58.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/README.md CHANGED
@@ -18,7 +18,7 @@ Chinese metaphysics (玄学 / xuanxue) for [DeepSeek Harness](https://github.com
18
18
  - **梅花**:时间/数字起卦、体用生克分档、互变错综四卦齐出,本卦上下卦分块标体用
19
19
  - **大六壬**:天地盘 4×4 方盘(天盘大字、地盘小字、天将右下)、四课、九宗门三传、格局(贼克/元首/重审/伏吟/返吟/八专等)
20
20
  - **奇门遁甲**:时家转盘,拆补 / 超神接气 / 置闰三流派取局;九宫、值符值使、空亡驿马、门迫与宫制门严格区分;六仪击刑(按地支相刑定宫)与三奇入墓(按五行墓库定宫)逐宫标出;八门、九星与天盘干按月令分旺相休囚死;天盘干与所落宫另论干宫生克(干克宫/宫克干/干生宫/宫生干/比和)
21
- - **合盘**:八字或紫微双盘对照(日主、夫妻宫、五行互补 / 互落宫、四化引动)
21
+ - **合盘**:八字或紫微双盘对照(日主、夫妻宫、五行互补 / 互落宫、四化引动);可再加第三人做**三方合盘**——你×对方、你×第三方、对方×第三方三对并列,指出最顺/最需磨合的一对与分歧最大的一维,不合成「三人总分」
22
22
  - **塔罗**:78 张全牌、1/3/5 张牌阵,逐牌牌位义 + 整体解读,体系与逆位口径写明
23
23
  - **速查十件**:黄历(四柱/建除/宜忌/冲煞/节气 + 值日十二神/时辰吉凶/二十八宿/胎神/吉神方位/纳音/六合三合)、农历(公农历互转)、择日(27 类事项、按五组归类、冲属相排除)、称骨(骨重 + 称骨歌原文 + 释义)、
24
24
  小六壬(时间/报数起课)、星座(档案 + 当日基调)、生命数字(生命路径/生日/态度数)、人生 K 线(逐年分与形态)、
@@ -34,9 +34,9 @@ Chinese metaphysics (玄学 / xuanxue) for [DeepSeek Harness](https://github.com
34
34
  - **一句话改参**:工具参数 `revise`(可配合 `handle`)接住「换成紫微看 2030 年事业」「女命」「晚子时算次日」「出生在成都」「不用真太阳时」「详细解读一下」这类原话,引擎翻成参数补丁再排盘,并在结果 `revision` 里回报改了哪些、没认哪些。只认明确句式——换体系要有切换词,单提一句「紫微里怎么说」不换盘;出生年份与时辰一句话给不出分秒,不猜,改为提示直传 `datetime`。识别不到时盘面一字不动。摘要给「【改参】原话 + 旧 → 新 + 未处理」,面板与独立页给改参卡
35
35
  - **八字 × 紫微 交叉验证**:工具参数 `cross`,五项并列对照,标注同向 / 有张力 / 互补
36
36
  - **晚子时开关**:23:00 后算次日还是当日,面板与独立页都能切;奇门另有「归当日 / 归次日」
37
- - **口径对照**:同一个盘只换一个开关——八字晚子时 / 真太阳时;紫微闰月、真太阳时与十类流派开关(共 12 组);奇门取局 / 晚子时归日。结果下方折叠列出「根因字段 旧值 → 新值」与连带变化数;面板、独立页与工具参数 `diff: true` 共用同一份开关表。只列差异,不判哪套更准,不改盘面
37
+ - **口径对照**:同一个盘只换一个开关——八字晚子时 / 真太阳时;紫微闰月、真太阳时与十类流派开关(共 12 组);奇门取局 / 晚子时归日。结果下方折叠列出「根因字段 旧值 → 新值」、几项关键结论的两列并排(日柱 / 旺衰 / 格局 / 喜用 / 起运等,只列变化项)与连带变化数;面板、独立页与工具参数 `diff: true` 共用同一份开关表。只列差异,不判哪套更准,不改盘面
38
38
  - **影子盘 ID**:工具参数 `shadow: true`(面板与独立页默认开启)为结果生成 `LY-XXXXXXX` 短 ID。同一组归一化参数——键序无关、默认值等价、地址与等值经度等价——在任何机器上得到同一 ID;`baseId` 不含版本,`id` 含版本。面板可一键复制,同一 `baseId` 重排时自动与本地上一张盘比对,版本升级或字段变化会展开列出根因(如「时柱 甲子 → 壬辰」)。塔罗 / 六爻未给 `seed` 时把实际牌面 / 六爻值算进 ID,不把两次不同的抽牌误认成同一张盘
39
- - **推导链**:工具参数 `trace: true`(面板与独立页对六爻 / 八字 / 紫微 / 奇门 / 大六壬默认开启)返回每一层的 `{field, rule, inputs, result, source}`——六爻是纳甲 → 六亲 → 世应 → 伏神 → 旺衰,八字是旺衰分值与格局取用,紫微是格局命中条件,奇门是盘面事实 → 用神落宫 → 门/星/干旺衰 → 宫位生克,大六壬是天地盘 → 四课 → 三传。只读盘面,不重算、不改盘;面板用右侧抽屉逐层展开规则、结构化输入、结果与出处。六爻的询问方向参与起卦计算,改方向时只重算用神 / 旺衰 / 伏神三层,不重摇一卦;奇门改方向同样只重算用神落宫层,不重新起局。开 `trace` 时结果同时带 `traceText`——同一份层的 Markdown,可直接贴进对话或文档;面板抽屉里也可一键复制
39
+ - **推导链**:工具参数 `trace: true`(面板与独立页对六爻 / 八字 / 紫微 / 奇门 / 大六壬默认开启)返回每一层的 `{field, rule, inputs, result, source}`——六爻是纳甲 → 六亲 → 世应 → 伏神 → 旺衰,八字是旺衰分值与格局取用,紫微是格局命中条件,奇门是盘面事实 → 用神落宫 → 门/星/干旺衰 → 宫位生克,大六壬是天地盘 → 四课 → 三传。只读盘面,不重算、不改盘;面板用右侧抽屉逐层展开规则、结构化输入、结果与出处。**每层出处分两类**(A1+):能对上已录入篇名的写「《书》卷·篇;实现:engine/…」,例如六爻伏神引《增删卜易》卷二·飛伏神章第二十八、六爻旺衰引卷一月將章与日辰章、八字格局引《子平真诠》八、论用神(调候参《穷通宝鉴》五行总论)、奇门引《奇门遁甲统宗》卷一/卷二/卷三/卷十一·玄机赋(中)、紫微引《紫微斗数全书》卷三;对不上的明写「规则表 / 非古籍定数 / 未录入古籍章页」——八字旺衰是本仓量化规则,奇门用神与十干克应、六爻纳甲与世应是本仓规则表,大六壬没有可稳定核验的公有领域章页,三层都只标「通行口诀,未标卷次」。书名只出已登记的五本,测试会拦下表外的书名。六爻的询问方向参与起卦计算,改方向时只重算用神 / 旺衰 / 伏神三层,不重摇一卦;奇门改方向同样只重算用神落宫层,不重新起局。开 `trace` 时结果同时带 `traceText`——同一份层的 Markdown,可直接贴进对话或文档;面板抽屉里也可一键复制
40
40
  - **验前事**:列出过去几年流年信号,自评准/不准/不确定后算贴合度;只读,不改盘
41
41
  - **生时校正**:给定过去 2–3 件大事,对候选时辰逐一排盘打分排序;只缩小范围,不替代出生记录
42
42
  - **导出**:`.md`(盘面 + 解析)与 PNG 摘要长图(Canvas 直出,零依赖);独立页支持打印/存 PDF
@@ -45,7 +45,7 @@ Chinese metaphysics (玄学 / xuanxue) for [DeepSeek Harness](https://github.com
45
45
  - **《穷通宝鉴》120 格**:十天干 × 十二月令逐格录入用神顺序与原文摘句(「十二月乙木,木寒宜丙」这类原句照录),调候卡里直接给出「这一格书上取什么」与出处章号
46
46
  - **方法与验证页**:独立页内置静态页,写明对拍数据、测试与闸门、口径与已知边界
47
47
  - **公开对拍报告**(0.54.0 起):[docs/verification.html](docs/verification.html) 汇总 128 条《卜筮正宗》卦例(成对 93 + 静卦 35;源 138 条中剔除 5 条并逐条给理由)、312 张紫微盘 × 34 条格局(10,608 条独立判定)、20 个奇门时辰 × 9 宫(180 个宫位)与 12 个交运案例。可按「一致 / 剔除 + 理由 / 不一致」和体系筛选,34 条格局的命中分布单独列出;README 顶部徽章由同一生成器写出,并披露「5 剔除」。报告、徽章与 `test/verification.test.mjs` 共用 `tools/verification.mjs`,判定变了或报告没重建,CI 就红
48
- - **引文索引**(B6):[docs/citations.html](docs/citations.html) 把每张知识卡指到书名、卷章、原文与链接;引文库 90 条(八字经典 41 + 引文索引 49:紫微 23、三命通会 6、增删卜易 13、奇门 5、穷通宝鉴 1、梅花 1),53 张卡里 43 张已定位到可核验原文,由 `test/citations.test.mjs` 逐条核验「原文子串确实出现在来源正文里」,其余 9 张通行说与 1 张待补单独标出,不冒充原文(大六壬缺公有领域章页,仍列通行说;《增删卜易》底本为繁体,原文照录)。原文快照在 `test/fixtures/citation-sources.json`,由 `tools/sync-citation-sources.mjs` 抓取公共领域古籍生成
48
+ - **引文索引**(B6):[docs/citations.html](docs/citations.html) 把每张知识卡指到书名、卷章、原文与链接;引文库 94 条(八字经典 41 + 引文索引 53:紫微 23、三命通会 6、增删卜易 13、奇门 5、穷通宝鉴 1、梅花 1、大六壬 3、滴天髓 1),53 张卡里 46 张已定位到可核验原文,由 `test/citations.test.mjs` 逐条核验「原文子串确实出现在来源正文里」,其余 6 张通行说与 1 张待补单独标出,不冒充原文(大六壬已补《大六壬大全》四库本卷一·起例与卷二·神将释,加时布盘仍标通行口诀;《增删卜易》底本为繁体,原文照录)。原文快照在 `test/fixtures/citation-sources.json`(58 个章页),由 `tools/sync-citation-sources.mjs` 抓取公共领域古籍生成
49
49
  - **参考资料登记**:[docs/参考资料与对拍来源.md](docs/参考资料与对拍来源.md) 记下 ziwei.pub/bazi 的四宫公式与信息层次、tyme4ts 对拍证据、玄空 B5 的替卦与紫白底本,以及历法 / 卦例 / 紫微 / 八字 / 奇门的外部来源入口;新增参考先登记再改代码,采用范围必须能指向一条测试或对拍证据
50
50
  - **离线单文件页(随包分发)**:`命理排盘.html` 一份文件、零依赖、双击即开,十九个入口按用途分三组(也能一键切回平铺),断网可用;它随 npm 包发布,装完插件就有(路径见下)
51
51
 
@@ -126,7 +126,7 @@ Chinese metaphysics (玄学 / xuanxue) for [DeepSeek Harness](https://github.com
126
126
  速查结果用等宽文本卡渲染,不套命盘模板。**全部本地确定性计算**:同一天、同一输入永远同一结果。
127
127
 
128
128
  - **黄历 `almanac`**:农历、四柱干支(年柱按立春、月柱按节)、建除十二神、宜忌简表、冲煞、上一/下一节气、每日一卦,以及**值日十二神(黄道/黑道)、十二时辰吉凶(五鼠遁干支 + 时家十二神)、二十八宿、胎神、财神/喜神/福神/阳贵/阴贵方位、日柱纳音、六合三合吉配生肖**;值日神/二十八宿/胎神/吉神方位与 lunar-javascript 逐日对拍。`scope` 明写未收录逐日全量吉凶神煞与彭祖百忌
129
- - **择日 `zeri`**:27 类事项(婚嫁类领证/提亲/收送聘金/满月酒,生活类旅行/访亲友/入学,建造类动土/装修建造/试车买车,工商类交易/投资/签订合同/纳财/赴任等)按「常用 / 婚嫁 / 生活 / 建造 / 工商」五组归类 × 建除适配逐日打分,分「推荐 / 可用 / 回避」,当事人属相冲煞日直接排除且每条回避带理由;这是**排序引导**,不是吉凶断语
129
+ - **择日 `zeri`**:27 类事项(婚嫁类领证/提亲/收送聘金/满月酒,生活类旅行/访亲友/入学,建造类动土/装修建造/试车买车,工商类交易/投资/签订合同/纳财/赴任等)按「常用 / 婚嫁 / 生活 / 建造 / 工商」五组归类 × 建除适配逐日打分,分「推荐 / 可用 / 回避」,当事人属相冲煞日直接排除且每条回避带理由;这是**排序引导**,不是吉凶断语。**候选日比较**(C4-b):`candidates: ["2026-12-01","2026-12-08"]` 或用面板的「候选日」输入只比这几天,结果给逐日分数与 `compare.best`(这一组最优、同分者、分差),面板画成表并标「最优」;不换算成「好多少」,全部被冲属相排除时直说,不硬推
130
130
  - **公农历互转 `convert`**:公历 → 农历(农历年月日、是否闰月、干支四柱、生肖)与农历 → 公历(需显式指定闰月,小月无三十会报错),往返自洽;只知道农历生日时可先转公历再排盘
131
131
  - **称骨 `chenggu`**:年/月/日/时四项骨重求和,按总重查**通行本《称骨歌》原文**(二两一钱…七两二钱共 52 首),并给白话释义与分档批语(如 1990-08-15 巳时 = 五两六钱,歌诀「此格推来礼义通…」);骨重表对拍公开黄历页,不采信其他插件的表
132
132
  - **小六壬 `xiaoliuren`**:时间起课(农历月/日/时三掐)与报数起课(三个 1–99),六宫吉凶与白话断语;缺时辰会明确要求补,不默认某个时辰
@@ -154,6 +154,7 @@ Chinese metaphysics (玄学 / xuanxue) for [DeepSeek Harness](https://github.com
154
154
  - **方法与验证**:独立页内置同页「方法与验证」(体系、128 条卦例与 20 个奇门时辰对拍、测试文件与断言条数取自断言基线、七道闸、口径与已知边界),离线可开
155
155
  - **夏令时校正(0.18 新增)**:1986–1991 年中国夏令时期间的钟面时间在排盘前自动减 1 小时(跨日回退),八字/紫微/合盘/验前事/生时校正统一生效;出生证已是真实太阳口径时可用 `dst: false` 关闭
156
156
  - **合婚明细层(0.18 新增)**:合盘新增属相六合/三合/六冲/相害/相刑、天干五合、双向十神、跨盘地支、年命纳音与吉凶象计数分档;只作明细,不改原总分
157
+ - **三方合盘(C4-a)**:`partner2` 给第三个人(字段同 `partner`)→ 结果多一个 `triple`:三对分数与三维度并列,`best` / `hardest` / `focus`(三对分歧最大的一维)。**不合成「三人总分」**——和不同的人相处是不同的事;三对分差不足 3 分时不点名「最顺」,只说分数接近。八字与紫微两种合盘都支持;第三人进句柄与影子盘指纹,下一轮只传 `handle` 就能复现
157
158
  - **晚子时开关**:面板与独立页都能切「23:00 后算次日/当日」;奇门另可切「归当日/归次日」——这是排盘口径,不是结果重算
158
159
  - **验前事**:八字报告下方列出过去 6 年流年信号,用户自评「准/不准/不确定」,算一个贴合度提示;只读、不改盘
159
160
  - **生时校正**:输入过去 2–3 件大事(年份 + 类别),对候选时辰逐一排盘并按固定规则打分,返回候选排序——用于缩小时辰范围,不替代出生记录
@@ -219,7 +220,7 @@ dsh plugin install ./dsh-metaphysics-0.17.0.tgz
219
220
 
220
221
  结果卡下方的追问行里,输入问题后可以点「追问」(在本地按盘面字段直接答,不联网)或「问进对话」(把提问发进 DSH 对话窗,由模型接着答)。
221
222
 
222
- > 独立页(`命理排盘.html`)同样是这十九个 tab:速查 tab 在左侧展开对应小表单(择日的起算日/事项/天数/属相、农历的转换方向/农历日期/闰月、小六壬的时间或报数、风水的命卦/门主灶/玄空与坐向、运、兼向度数、飞星日期与时刻(结果都是方位网格:八向标吉凶、玄空九宫列运/山/向三数,替卦与年月日时另列事实行)、起名的评估或生成、十六型人格的分页问卷(4 题一页、1–5 打分,答满 12 题可先看结果));合盘要填双方出生信息、可选八字/紫微两种合盘;奇门用「换局规则」单选组(拆补/超神接气/置闰)与「询问方向」定用神。这份文件与侧栏面板是**各自生成**的两份产物(同一份 `engine/`),随包发布的是仓库根这一份;自己在桌面另存过的话,用 `npm run build:desktop` 一次刷新两处,别手工拷。
223
+ > 独立页(`命理排盘.html`)同样是这十九个 tab:速查 tab 在左侧展开对应小表单(择日的起算日/事项/天数/属相/候选日、农历的转换方向/农历日期/闰月、小六壬的时间或报数、风水的命卦/门主灶/玄空与坐向、运、兼向度数、飞星日期与时刻(结果都是方位网格:八向标吉凶、玄空九宫列运/山/向三数,替卦与年月日时另列事实行)、起名的评估或生成、十六型人格的分页问卷(4 题一页、1–5 打分,答满 12 题可先看结果));合盘要填双方出生信息、可选八字/紫微两种合盘,勾「三方合盘」再加第三人;奇门用「换局规则」单选组(拆补/超神接气/置闰)与「询问方向」定用神。这份文件与侧栏面板是**各自生成**的两份产物(同一份 `engine/`),随包发布的是仓库根这一份;自己在桌面另存过的话,用 `npm run build:desktop` 一次刷新两处,别手工拷。
223
224
 
224
225
  > 首屏默认按用途分三组:**问一件事**(六爻/梅花/塔罗/奇门/六壬/小六壬)、**看一个人**(八字/紫微/合盘/人格/称骨/数字/人生K)、**查日子**(黄历/择日/农历/星座/风水/起名),每项带一句白话(如「摇六次,问一件事」);用过的入口会进「最近用过」,最多 3 条。19 个平铺 tab 仍保留,右上角「分组 / 平铺」随时切换,选择记在本机;手机端每组先露 4 项,其余点「还有 N 个」展开。这份分组数据只有一份(`src/groups.mjs`),独立页与宿主侧栏面板在构建时各自取用;侧栏宽度不等同窗口宽度,收纳按容器查询生效。
225
226
 
@@ -235,14 +236,14 @@ dsh plugin install ./dsh-metaphysics-0.17.0.tgz
235
236
  - **农历**:定朔(Meeus 第 49 章,误差约 1 分钟)+ 冬至所在月为十一月 + 无中气置闰
236
237
  - **真太阳时**:经度差 + 均时差;内置 34 个省会 + 200 个地级市坐标(±0.2°),地址更细时可开「联网精确到区县」(Nominatim)。**单盘与合盘用的是同一套修正**(合盘双方各按自己出生地算)。只按经度修正,**未含历史时区与夏令时**:海外出生请先把当地钟表时间换算成东八区标准时再输入;没给经度时摘要首行会出 ⚠
237
238
  - **晚子时**:八字/大六壬默认 23:00 后换日,奇门默认归当日;`lateZi` 与 `lateZiHourMode` 是同一个开关的两个名字。各体系摘要都会写明本次采用的口径,不改默认值、不偷偷改盘
238
- - **口径对照**:`caliberCompare` 只做「当前口径 → 另一档」的逐字段比对,根因按柱 / 命宫 / 局数 / 起运归类,`total` 是变化字段数、不是分数;没有根因时写明「无单一根因」(如真太阳时只改起运时刻)。紫微的 12 组含十类流派开关(亮度 / 庚干四化 / 天马 / 天空 / 截空旬空 / 魁钺 / 天伤天使 / 长生 / 晚子时 / 身主),平铺参数与 `schools` 嵌套都能读;取局流派、晚子时归日、闰月政策与流派回显属于口径回显,不计入差异;「其他」是尚未归类的派生字段,不隐藏也不折算。对照会按开关数多排盘(工具里由 `diff: true` 显式开启)
239
+ - **口径对照**:`caliberCompare` 只做「当前口径 → 另一档」的逐字段比对,根因按柱 / 命宫 / 局数 / 起运归类,`total` 是变化字段数、不是分数;没有根因时写明「无单一根因」(如真太阳时只改起运时刻)。紫微的 12 组含十类流派开关(亮度 / 庚干四化 / 天马 / 天空 / 截空旬空 / 魁钺 / 天伤天使 / 长生 / 晚子时 / 身主),平铺参数与 `schools` 嵌套都能读;取局流派、晚子时归日、闰月政策与流派回显属于口径回显,不计入差异;「其他」是尚未归类的派生字段,不隐藏也不折算。每行另给 `views`:八字(日柱 / 时柱 / 旺衰 / 格局 / 喜用 / 起运)、紫微(命宫 / 身宫支 / 五行局 / 身主 / 起大限)、奇门(日柱 / 局数 / 值符 / 值使)的两列并排,只列变化项,摘要里写成「并排:日柱 丙辰 → 乙卯」,面板与独立页画成表格。对照会按开关数多排盘(工具里由 `diff: true` 显式开启)
239
240
  - **八字五合**:干支关系只标「有合」,摘要写「戊癸合(化火待定)」;是否真化另看月令、化神与争合妒合,不在关系层直接断「合化火」
240
241
  - **可复现**:塔罗/六爻给 `seed` 即得同一次抽牌/摇卦;紫微流月流日流时、塔罗的抽牌时刻、八字的流年基准年都可传 `asOf` 钉死。**影子盘** `shadow: true` 另给一个短 ID:同参数同 ID、换版本 `id` 变而 `baseId` 不变;面板与独立页把快照存在本地,同盘重排自动做字段级 diff。未固定 `asOf` 时流年随「此刻」变化,卡片会提示先固定再比对;与 `seed` 一样,随机源不写进 ID 时无法复算,所以塔罗 / 六爻的实际牌面会算入指纹。**推导链** `trace: true` 则逐层给出规则、输入、结果与出处,只读结果,不改变盘面与 ID
241
242
  - **紫微四化**:中州派常用表(庚干作太阳禄、武曲权、太阴科、天同忌)
242
243
  - **问进对话**:只做文本组装,不改盘、不调模型——面板把 `Engine.askPrompt` 生成的一段话交给 DSH 客户端槽位 `conversation.input.right` 拿到的 `inputActions`,先 `setDraft` 再 `submit`(官方输入框的正常提交路径);桥不在时退回复制剪贴板并给出提示。提问里带的盘面摘要按 3000 字截断并标注「摘要已截断」;摘要之前先给「盘面层次」(按体系列 4–6 层阅读顺序,未知体系走通用兜底),再给摘要与回答骨架,让模型先复述事实、再讲结构与时间;面板已有解析时,模板在摘要之前插入「开场结论」小节(直答 + 说人话,原样取自面板结果),让对话开场与面板同一口径;固定骨架(抬头 + 层次 + 回答要求)约 700 字,不随 `maxChars` 变,`test/ask-prompt.test.mjs` 有断言盯它别长成小作文。这条链依赖 Harness 的客户端 slot API(`conversation.input.right` + `inputActions`),升级 Harness 后若槽位改名,按钮会静默退回「复制」而不是报错
243
244
  - **紫微飞星串连**:只认宫干四化表、星落哪宫就是哪宫之力,串连只跟**同一支化**逐宫跳(不混支、不借对宫),满 12 步或回到走过的宫即停;宫干四化在 12 宫上是「一个宫 → 一个宫」的函数映射,所以完整盘上每条链必然成环(实测 1/3/4/5/6 步),「断点」只可能来自星未上盘。这一层只描方向与牵引,不断吉凶,也不叠大限流年算力重
244
245
  - **八字 × 紫微交叉验证**:五项只并列、不合并成总分。任一侧当前阶段取不到时(八字尚未起运、紫微大限不在范围内),该项标「互补」并写明缺的是哪一边,不把「没取到」当成「没有问题」;节奏一项的说明按实情分档——八字顺而紫微煞星多、八字偏紧而紫微平静、八字为平而紫微煞星多,三种说法各写各的,不共用一句「一边顺、一边压」
245
- - **日主旺衰**:量化算法,非唯一流派。合会折根的折算比例与 0.3 的虚透门槛是本仓取值,不是古籍定数;五行喜忌只分喜、忌两档,没有「中性」档,接近零分的那一行要结合盘面另看
246
+ - **日主旺衰**:量化算法,非唯一流派。合会折根的折算比例与 0.3 的虚透门槛是本仓取值,不是古籍定数;五行喜忌分喜、忌两档,忌神里全局分量不足 0.5 的另列「中性偏忌」——只是展示分档,`avoid` 不变,大运/流年遇之仍按忌计
246
247
  - **奇门宫位条件**:门迫只认同宫内「门五行克宫五行」,宫克门是「宫制门」不为迫;六仪击刑按月支相刑定宫(甲子戊震三、甲戌己坤二、甲申庚艮八、甲午辛离九、甲辰壬巽四、甲寅癸巽四),三奇入墓按五行墓库定宫(乙木墓未→坤二、丙丁火墓戌→乾六),六仪入墓按同一墓库(戊墓戌→乾六、己庚墓丑→艮八、辛壬墓辰→巽四、癸墓未→坤二)。这四项只判**天盘**、只作宫位条件,不自动断用神受制,也不打分排序
247
248
  - **奇门旺衰**:八门、九星与天盘干(三奇六仪)按月支五行判旺相休囚死(同气旺、月令所生相、生月令休、克月令囚、被月令克死),只报力量强弱不折吉凶;门旺而宫克门仍受宫制。
248
249
  - **六爻用神旺衰**:月建按月支五行定五态(同气旺、月令所生相、生月令休、克月令囚、被月令克死),日辰定五关系(日生/日克/比和/泄/耗),月建冲爻标月破、日辰冲静爻标暗动、冲旬空标冲空;只报状态标签,不折成分数
@@ -297,6 +298,8 @@ npm run release # 测试 → 构建 → 校验产物 → 发 npm → 核对
297
298
 
298
299
  另有一道**性能门槛** `tools/check-perf.mjs`(D3):跑 `tools/bench.mjs` 的八体系样本,对首次 150ms / p50 10ms / p95 25ms / 带解析 250ms / 1000 盘 4000ms / RSS 800MB 判超限,CI 同样执行。阈值按文档目标留 5–10 倍余量,拦的是数量级回退而非毫秒级抖动;慢机用 `DSH_PERF_SCALE=3` 按倍数放大上限。`npm run bench` 只测量不判错,用来做改动前后的 A/B 对比。
299
300
 
301
+ 结果卡顶部还有一行**首屏耗时**(D1+):`首屏 42ms|引擎 18ms(首次加载)· 排盘 9ms`。数字是这一次在本机的实测——面板从点击到两帧后计时,独立页量「组 HTML + 写 DOM」的同步时间(不含浏览器真正绘制的那一帧);引擎那段的「首次加载 / 已缓存」来自分块缓存状态。只在本机显示,不上报、不发网络请求;缺哪段省略哪段。
302
+
300
303
  `client.js` 与 `client.<name>.js` 都是构建产物,不要手改。入口只带界面;面板按当前 tab 用 `require.async` 取引擎分块,首次打开不再下载整套引擎。改动记录见 [CHANGELOG.md](CHANGELOG.md)。
301
304
 
302
305
  ### 发版
@@ -311,6 +314,15 @@ node tools/release.mjs --verify-only # 只核对 registry 上当前版
311
314
 
312
315
  脚本会拦下:工作区不干净、`client.js` 未随源码重建、registry 上已有同版本;发布后自动核对新版本与 `dist-tags`,并提示补 `git tag`。
313
316
 
317
+ **发失败 / 核对失败怎么办**:`release.mjs` 在这两条失败路径上会打印回滚步骤(把 `latest` 指回上一版、`deprecate` 问题版本、网页 2FA 删包、升补丁号、CHANGELOG 改回未发布段;打过 tag 时另有删 tag 两步),但**不自动执行**。同样的步骤可以单独取:
318
+
319
+ ```bash
320
+ node tools/release-rollback.mjs --version 0.57.1 --previous 0.57.0 --reason verify-failed
321
+ NPM_TOKEN=... node tools/release-rollback.mjs --version 0.57.1 --previous 0.57.0 --apply dist-tag
322
+ ```
323
+
324
+ `--apply` 只支持 `dist-tag`(把 `latest` 指回上一版);`unpublish` / `deprecate` / 删远程 tag 属于共享状态变更,脚本只打印命令,由人确认后执行。
325
+
314
326
  **发布后为什么要看附件,而不是只看 `npm publish` 的输出**:npm 的发布是异步的,版本条目会先出现在 packument 里(连 shasum、签名、`latest` 都齐),tarball 附件却可能晚几分钟才落盘。这中间别人 `npm i` 会撞 404,而 `npm publish` 早就打印了成功。所以 `tools/verify-publish.mjs` 的判据是四条:tarball 返回 200、下载到的字节 sha1 与 registry 记的 `shasum` 一致、`fileCount` 对得上、包里该有的文件(`package.json`/`client.js`/`命理排盘.html`)确实在。15 分钟内一直对不上就判定失败并给出处置路径。
315
327
 
316
328
  另外记一条实操限制:`unpublish`/`deprecate` 属于「绕过 2FA 的破坏性动作」,granular token 会被 403 拒绝(`Granular access tokens that bypass two-factor authentication may not perform this action`),这类动作只能在 npm 网页上用 2FA 做;真要撤版,把版本号升一个补丁号重发通常更快。