dsh-metaphysics 0.61.0 → 0.61.1

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,4 +1,34 @@
1
- ## 0.61.0(2026-11-03)
1
+ ## 未发布
2
+
3
+ ## 0.61.1(2026-11-03,发版中)
4
+
5
+ > 本版主题:输入层与自证层——出生日期不再跟着浏览器区域翻顺序,产物自己说得出「这一版之后又改了什么」,顺带修掉自动发布的假成功。
6
+
7
+ - **排盘日期框固定成「年-月-日」**(`src/app.js`、`src/web-ui.js`、`tools/build-html.mjs`、新增 `test/date-input.test.mjs`):
8
+ - 现象:出生日一直用原生 `<input type="date">`,显示顺序由**浏览器区域**决定——中文环境给 `年/月/日`,一旦被切成 en-US 就变成 `月/日/年`,独立页与面板都跟着翻。用户按习惯填「5 月 12 日」,引擎收到的是 5 月 12 日还是 12 月 5 日,取决于宿主区域设置,排错盘还很难归因。
9
+ - 改法:删掉原生 date 控件,改成文本输入 + 自制掩码(`maskDateText` / `normalizeDateText` / `isoDateOk` 三件套,面板与独立页各一份、口径逐字对齐)。输入时只留数字并自动补连字符(`19900512` → `1990-05-12`),同时认 `1990/5/12`、`1990年5月12日` 这类粘贴写法;失焦或回车才补零成 `YYYY-MM-DD` 并往引擎提交,非法值不提交。
10
+ - 为什么中间态不补零:刚敲下 `1990-05-1` 就补成 `-01`,下一个 `2` 会拼成 `012` 被截掉,看起来「吞键」。掩码只放行 `^\d{0,4}(-\d{0,2}){0,2}$` 这种半成品,把补零推迟到失焦——这是真机逐字敲出来的 bug,不是假想。
11
+ - 非法兜底:输入过程中非法就 `aria-invalid` 转红(模板加了对应 CSS),失焦时非法值**退回最近一次有效值**而不是留一个引擎不认的串;独立页点「排盘」时日期不合法直接给出「按年-月-日填写,例如 1990-05-12」并中止,面板则把同样的话写进提示区。合盘/三方/紫微飞星的四字段时间输入一并改。
12
+ - 验证:`test/date-input.test.mjs` 用 `new Function` 把两处辅助函数从源码里取出来独立求值,13 条用例 × 2 入口 + 7 条「面板与独立页结果一致」+ 6 条模板守卫(`type="text"`、占位符写明顺序、全页不得再出现 `type="date"`)。断言基线 7524 → 7565(152 → 153 个文件)。Playwright 在真 Edge 里跑过逐字输入、带连字符输入、非法月日回退三条路径;`e2e-dom` 137 项通过。
13
+ - 引擎、历算、口径一律未动:这是纯输入层修复,同一份 `YYYY-MM-DD` 进去,出的盘与改动前逐字节相同。桌面版 exe 里的 HTML 已随这次一并重建。
14
+
15
+ - **不发版本号,也要能自证改了什么**(新增 `tools/unreleased.mjs`、`test/unreleased.test.mjs`;接线 `tools/build-html.mjs`、`tools/build-client.mjs`、`src/app.js`):
16
+ - 起因就是上一条:日期输入的修复不动版本号,npm 仍是 0.61.0。于是用户手上的单文件页与桌面 exe——带没带这个修复——左上角都写着 `v0.61.0`,谁也没法回答「我这版到底新不新」。
17
+ - 改法:把 CHANGELOG 的「未发布」段做成唯一数据源,构建时读出顶层粗体条目标题(遇到下一个 `##` 即止,嵌套子条目不算一条),三处消费:① 版本徽标旁加一枚小牌「另含 N 项未发版改动」,悬停 `title` 逐条列出;②「方法与验证」新增一段「本版之后又改了什么(版本号未变)」,逐条列出并指回 CHANGELOG;③ 面板错误边界的环境行在版本号后追加「未发版改动 N 项」,报错截图自带新旧判断。
18
+ - 刻意不留第二份手写清单:清单为空时小牌与整段都不渲染(不会出现「另含 0 项」这种话);窄屏 ≤640px 藏掉小牌,方法段的完整清单仍在,横向溢出 0px。
19
+ - 顺手修掉一个够不到 AA 的新增文本:小牌是 11px 字,压在 `--panel2` 上,用 `--dim` 浅色档只有 4.41:1;改 `--ink2` 后浅 10.19:1 / 深 10.60:1,两条对比度断言一并进闸。
20
+ - 验证:34 条断言(解析口径 7 条含 CRLF / null / 段末收口,渲染 11 条含转义与空清单,真 CHANGELOG 4 条,产物接线与对比度若干)。把小牌与方法段从 `build-html` 里摘掉,4 条立刻转红。
21
+ - 引擎与排盘口径未动;`client.js` 285KB / gzip 87KB(+1KB,多的是那份 JSON 清单)。
22
+
23
+ - **自动发布修掉「假成功」**(`tools/autopublish.mjs`、`test/autopublish.test.mjs`):
24
+ - 现象:发版提交只落在本地时,autopublish 看到「允许清单内没有改动」就直接返回,主流程却照样打印「完成:已推送 main」。远端整整落后一个版本,日志仍是绿的。
25
+ - 改法:无改动时先查 `git rev-list --count origin/main..HEAD`——本地领先就继续走 push,不领先才报「本轮不推送」;`commitAndPush` 返回布尔,主流程按实际结果分别记录「已推送」与「无改动可推送」。
26
+ - 回归锁:新增 6 条源码级断言(领先检查、继续推送、`return false`、`return true`、分别报告、不再无条件打印);把修复回退回事故版本,前五条都会红。
27
+ - 只动工具链,不进 npm 包(发版清单里没有它),只随本版一并记录。
28
+
29
+ ## 0.61.0(2026-11-03,已发布)
30
+
31
+ > 已发布:npm `dsh-metaphysics@0.61.0`,shasum `5498dde08a729076a69b77c3e33eb62262cf0950`,100 个文件;tag `v0.61.0` 已推(指向发版提交 `8644f6b`,其后为自动发布修复与文档回写),tarball 已下载核对。
2
32
 
3
33
  > 本版主题(续):择日不再只数建除宜忌——按《协纪辨方书》卷十一「用事」的逐条神煞计分,再按卷十「宜忌」的六等与德神制化定轻重,起法逐条可回溯。随 0.61.0 发布。
4
34