dsh-metaphysics 0.61.1 → 0.61.2

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,6 +1,34 @@
1
- ## 未发布
2
-
3
- ## 0.61.1(2026-11-03,发版中)
1
+ ## 0.61.2(2026-11-03,发版中)
2
+
3
+ > 本版主题:输入与状态 bug 批——跨盘残留、历史漏参、生时校正跟错盘、K 线出生地失效等 13 处,全部有真机回归锁;排盘引擎与历算口径一字未动。
4
+
5
+ - **0.61.1 之后又查出的一批输入与状态 bug**(`src/app.js`、`src/web-ui.js`、`src/panel-kit.js`、`test/date-input.test.mjs`、`test/features.test.mjs`、`tools/e2e-dom.mjs`、`tools/e2e-panel.mjs`):
6
+ - 现象一(面板 · 日期被截断):0.61.1 把日期框改成受控输入后,打字过程中一解析出合法日期就 `props.onChange`,父组件回写 `value` 把草稿冲掉——敲 `1990-05-12`,中途 `1990-05-1` 被补成 `1990-05-01`,再敲 `2` 丢位,最终**静默排成 1 日**。`page.fill` 一次写整串测不出来,真实键盘逐字输入必现。
7
+ - 现象二(独立页 · 藏起来的字段还在拦人):塔罗、人格两个体系把日期框隐藏了,但 `run()` 仍拿 `usesTimeInput()` 校验日期——日期框一旦为空,点「抽牌」就被「请填写公历日期」挡住,且无从下手。
8
+ - 现象三(独立页 · 跨盘残留):验前事的自评、贴合度与生时校正的候选时辰是模块级变量,换一张盘只重绘不清空,旧候选时辰会贴在另一张盘下面。
9
+ - 现象四(面板 · 历史记成上一张盘):切体系 / 看示例 / 载入档案都是「同一个 handler 里先 `setState` 再 `run`」,历史条目读的却是渲染闭包里的旧 `date/time/gender/address`;「时辰未知」的三柱盘重放后被当成正午出生;`localStorage` 里旧版本或半截写入的坏条目会让 `x.date.slice` 抛错,整块面板白屏。
10
+ - 现象五(面板 · 生时校正跟错盘):反推候选时辰时用的是表单此刻的日期/性别/出生地,而不是屏幕上这张盘的值;档案没存出生地时会沿用上一个地址。
11
+ - 现象六(独立页 · 小六壬):时刻框被清空时 `Number('') === 0`,悄悄按子时起课,而不是退回正午。
12
+ - 现象七(面板 · 合盘重放排成另一个人):合盘历史只记主方生日,没记对方(及第三方)的生日、性别、出生地;点旧条目时 `run()` 读的是表单里此刻的对方资料,排出来的已不是当初那张盘。更隐蔽的是两条「主方相同、对方不同」的合盘会被 `sameEntry` 当成重复条目,短的一条被直接顶掉。
13
+ - 现象八(独立页 · 生时校正跟错盘):排完盘后只改表单的性别 / 出生地 / 真太阳时 / 晚子时(不重新排盘),再点「计算候选时辰」,`doRectify()` 读的是表单此刻的值,候选时辰会按另一套输入反推,与屏幕上这张盘对不上。
14
+ - 现象九(独立页 · 档案把上一个地址带进来):档案允许不填出生地,但「载入」与「改名读回」只在字段非空时才写回输入框;上一张盘的地址留在框里,这张档案随即按别人的地方算真太阳时。点「改名」再「更新」还会把那个错地址存进档案,从此固定下来。
15
+ - 现象十(面板 · 历史漏记两个开关):真太阳时与晚子时都会改变时柱,历史条目却只记生日 / 时刻 / 性别 / 出生地。排完盘再拨动开关、点回旧条目,重放会跟着表单此刻的勾选重算;两条只差开关的盘还会被 `sameEntry` 当成重复条目顶掉。
16
+ - 现象十一(人生K线 · 出生地不起作用):K 线页是出生盘,表单给着性别、出生地、真太阳时与晚子时,但 `run()` 只对八字 / 紫微 / 合盘传地址,K 线拿不到经度——出生地填了等于没填,真太阳时开关也跟着失效;同一份输入在八字页与 K 线页可能算出不同的时柱。
17
+ - 现象十二(档案 · 两个开关没入档):命盘档案只存了生日 / 时刻 / 性别 / 出生地,真太阳时与晚子时没存。存卡时关着这两个开关,过几天载入,重排却跟着表单此刻的勾选走;档案层 `profFromForm` 也没把开关带出来(面板、独立页两端同时缺)。旧档案因此永远按「都开」的默认处理,而不是表单此刻的状态。
18
+ - 现象十三(面板 · 历史漏记各体系自己的输入):历史条目只记了各体系共用的生日 / 时刻 / 性别 / 出生地,奇门流派与晚子时、择日事项 / 天数 / 属相 / 候选日、小六壬起课方式与三个数、K 线算到几岁、风水看什么 / 坐向 / 运、起名方式 / 姓 / 名 / 候选数、公农历转换方向 / 农历日 / 闰月,全都没进条目。点回旧条目时按表单此刻的值重算,看到的已不是当初那张;`sameEntry` 也没比这些参数与六爻方向 / 张数、梅花动爻,两条输入不同的盘会被当成重复条目顶掉。
19
+ - 改法:面板日期框打字只写草稿,提交只发生在失焦 / 回车(并补真机逐字输入断言);独立页的日期显隐与校验共用 `usesTimeInput()` 一处判断;每次新盘成功落盘前清空 `pastMarks / pastFit / rectOut`;历史条目改记本次实际生效的输入(覆盖值 `dt/genderV/addressV`),新增 `hourUnknown` 字段并纳入去重与重放,读入时过滤非对象条目,渲染对缺失字段做兜底;生时校正改用 `result.at / result.gender / result.address / trueSolar / lateZi` 快照(面板与独立页各一套,独立页把这几项一并存进 `last`);档案载入与改名读回都把 `date / time / gender / address` 无条件写回输入框(空出生地按空字符串覆盖,面板此前已经是这个口径);小六壬按 `HH:` 正则取小时,取不到退回 12;历史条目补记 `trueSolar / lateZi` 并在 `sameEntry` 里按「缺字段=默认开」比对,`replay` 时一并还原(旧条目缺字段则保持表单现状);人生K线并入出生盘分支,与八字共用同一段「性别 + 出生地 → 经纬度 → 真太阳时」透传(面板与独立页各一处,`cross` 仍只给八字 / 紫微);合盘历史把 `hpChart / partnerDate / partnerTime / partnerGender / partnerAddress / thirdOn / p2Date / p2Time / p2Gender / p2Address` 一并存下,`sameEntry` 比对它们,`replay` 逐项还原(旧条目缺字段时不动当前值);档案层 `profFromForm` 落 `trueSolar / lateZi`,面板存卡、载入(含 `run` 覆盖参数)与独立页载入 / 存卡都带上这两个开关,旧档案缺字段按默认「都开」;各体系自己的输入(奇门流派 / 晚子时、择日事项 / 天数 / 属相 / 候选日、小六壬方式与三个数、K 线岁数、风水模式 / 运 / 坐向、起名模式 / 姓 / 名 / 候选数、转换方向 / 农历日 / 闰月)一并存入历史并进 `sameEntry`,`replay` 按条目类型逐项还原(旧条目缺字段则不动表单);六爻 `direction / count` 与梅花 `changing` 也进去重比对。
20
+ - 回归锁:`test/date-input.test.mjs` 新增 19 条口径断言(打字不提交、显隐与校验同源、清空模块状态、历史参数、坏条目过滤、独立页校正按 `last` 快照、档案空地址清残留、K 线并入出生盘分支等);`test/features.test.mjs` 新增 14 条历史与档案断言(合盘条目带对方信息、去重比对对方信息、重放逐项还原、两个开关入历史 / 入去重 / 入重放、各体系参数入条目 / 入去重 / 入重放、档案层与两端都存两个开关);`e2e-dom` 新增 15 项真机断言(逐字输入、日期空着抽塔罗、换盘清候选、改出生地不重排时候选不跟着换、无地址档案载入/改名不被上一张盘的地址带偏、K 线换地址结果随之变化);`e2e-panel` 新增 19 项(含「看示例」历史条目必须是示例盘自己的参数;合盘换对方后两条历史并存,点回旧条目对方生日与时刻复原;两个开关重放复原;K 线的出生地生效;择日「开业 / 嫁娶」各占一条历史,点回旧条目事项与候选日复原)。把任一修复回退,对应断言都会转红——已逐条验过。
21
+ - 随 0.61.2 发布;引擎与排盘口径未动,同一份输入出的盘与 0.61.1 逐字节相同。
22
+
23
+ - **自动发布还有一处同类漏口**(`tools/autopublish.mjs`、`test/autopublish.test.mjs`):
24
+ - 现象:0.61.1 的发布回写只改 CHANGELOG 与文档,源码指纹没变;主流程在「指纹与上次一致」处直接 return,连「本地是否领先远端」都没查——那一类假成功刚修完,更早的一处仍在积压永不推送的提交。
25
+ - 改法:把领先数抽成 `aheadCount()`(`origin/main..HEAD` 全仓库只有这一处实现),指纹未变时也先查它:为 0 才报「无改动,跳过」,不为 0 就记「指纹未变(…),但本地领先远端 N 个提交,继续推送」并走同一条推送路径;`--dry-run` 的 reason 同步区分「源码/配置有改动」与「本地领先远端,只推送已提交的 commit」,日志不再把未变的指纹说成「检测到改动」。
26
+ - 回归锁:新增 4 条源码级断言(指纹分支查领先、只有不领先才 return、领先时继续推、日志两种说法都在)+1 条「`origin/main..HEAD` 只许有一份实现」的结构锁;把指纹分支回退成直接 return,前两条立刻转红。
27
+ - 只动工具链,不进 npm 包(发版清单里没有它),排盘与页面产物一字未改。
28
+
29
+ ## 0.61.1(2026-11-03,已发布)
30
+
31
+ > 已发布:npm `dsh-metaphysics@0.61.1`,shasum `0254c8a0d40ea443d9abe006c141a470234f6c04`,100 个文件;tag `v0.61.1` 指向发版提交 `3799db4` 并已推,GitHub release 已建,tarball 已下载核对。
4
32
 
5
33
  > 本版主题:输入层与自证层——出生日期不再跟着浏览器区域翻顺序,产物自己说得出「这一版之后又改了什么」,顺带修掉自动发布的假成功。
6
34
 
@@ -348,7 +376,7 @@
348
376
  >
349
377
  > 包含:C3 对话桥替代(深链 / 复制 / 结构化参数)、§5.8 自动发布加固、B6 通行说复核、B6 通根透干复核(误署纠正)、B6 第五批(大六壬 3 条)、C4-a 三方合盘、C4-b 择日候选日比较、C4-c 同盘多口径并排、D1+ 首屏耗时回显、A1+ 推导链出处、D4 发布回滚、自检修复(见下)。
350
378
 
351
- ## 未发布
379
+ ### 0.58.0 明细(原「未发布」草稿,随该版发布)
352
380
 
353
381
  - **凭据扫描进约定闸:token 形态的字符串提交不进去**(`tools/check-patterns.mjs`):
354
382
  - 起因:npm / GitHub 的发布凭据存在 `<用户目录>/.dsh/metaphysics-autopublish.json`,只从环境变量喂给 `tools/release.mjs`;它一旦被贴进对话、写进文档或提交到仓库,撤回版本也撤不回已推送的历史。