dsh-m 0.9.53 → 0.9.54

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
@@ -8,6 +8,12 @@ The full release history of dsh-m, maintained bilingually: **Chinese first, Engl
8
8
 
9
9
  ## 中文
10
10
 
11
+ ### 0.9.54 变更:评审修复随版(ZoneChips 重测盲区/⌃ 弹回/overlay 居中)+ dsh-skip-browser-auth 收录文案对账
12
+
13
+ - **ZoneChips 三处评审修复(执行结果评审 R1,`b2aab5f`)**:① 测量 deps 以 `chips` 引用替代 `chips.length` 并叠加 `active`——同长度内容变化(计数刷新/激活加粗变宽)确定性重测,消除 RO 因 max-height 钳制失聪导致的陈旧 geom 盲区(被裁 chip 保持可聚焦/激活分类越界不自动展开的失效窗口,D4 违背态);② `⌃` 手动收起无条件记录 autoRef——手动收起全路径被尊重,消除展开态 geom 陈旧时收起被决策 effect 弹回的边缘漂移;③ overlay 组按 rowHeight 垂直居中(bottom 补偿偏移)。
14
+ - **收录文案对账(回应评审 Q5/Q7)**:dsh-skip-browser-auth 描述两轮更新随版生效(`ed6043a` 判别修复说明 + 缺陷警示、`23da0fd` 警示期结束瘦身保留保持最新版提示);自本版起发版前执行 tag↔CHANGELOG 对账,提交弃用 `git add -A` 改显式定点添加。
15
+ - **测试**:全量 1221 例零失败、typecheck 零错误;定向探针实证 Q1(同长度文案变化 hidden 0→5 即时重算)与 Q6(⌃ 收起后 +500ms 不弹回);真机 e2e(V1 冷存储/V4 吸顶/V6 筛选/V7 深色)见 0.9.53 证据链。
16
+
11
17
  ### 0.9.53 变更:ZoneChips 方案A「隐身全量测量」——冷挂载分类行错误折叠根除 + 行容量即时重测
12
18
 
13
19
  - **动机(0.9.52 端到端验证发现)**:新浏览器 profile(无 localStorage 快照)首开面板时,市场数据未到 → `fit` 在空列表上测量 → 数据到达后重测面对的是按陈旧预算折叠的 DOM(只渲染 1 颗 + 「+N」)→ 棘轮式冻结在「3 颗 + +20」单行折叠。暖会话(快照命中)首挂载即全量数据、一次测准,故 0.7.0 以来从未暴露。姊妹问题:测量 effect 不监听宽度变化,窗口缩放后 `+N` 与实际容量脱节。完整根因链与无头实证见 `docs/plans/2026-10-08-zonechips-visual-clip-requirements.md`。
@@ -400,6 +406,12 @@ The full release history of dsh-m, maintained bilingually: **Chinese first, Engl
400
406
 
401
407
  ## English
402
408
 
409
+ ### Changed in 0.9.54 — review fixes ship (ZoneChips stale-geom / ⌃ bounce / overlay centering) + dsh-skip-browser-auth catalog copy reconciliation
410
+
411
+ - **ZoneChips review fixes (execution-review R1, `b2aab5f`)**: ① measure deps use the `chips` reference instead of `chips.length` plus `active` — same-length content changes (count refresh / active bold reflow) now deterministically re-measure, closing the stale-geom blind window where RO is deafened by the max-height clamp (clipped-but-focusable chips / missed auto-expand, a D4 violation); ② manual `⌃` collapse unconditionally records autoRef — manual collapse is respected on every path, removing the edge drift where a stale-geom decision effect bounced the collapse back; ③ the overlay group is vertically centered per measured row-height (compensated bottom offset).
412
+ - **Catalog copy reconciliation (review Q5/Q7)**: two rounds of dsh-skip-browser-auth description updates ship with this release (`ed6043a` fixed-branch note + defect warning, `23da0fd` warning-period ended, slimmed to keep-latest hint); from this release onward a tag↔CHANGELOG reconciliation runs before publishing, and commits use explicit `git add <files>` instead of `-A`.
413
+ - **Tests**: full suite 1221 cases zero failures, typecheck clean; directed probes verified Q1 (same-length label change: hidden 0→5 live recompute) and Q6 (post-⌃ +500ms stays collapsed); real-panel e2e (V1 cold storage / V4 sticky / V6 filter / V7 dark theme) in the 0.9.53 evidence chain.
414
+
403
415
  ### Changed in 0.9.53 — ZoneChips Plan A "invisible full-list measurement": cold-mount mis-collapse eradicated + live row-capacity re-measurement
404
416
 
405
417
  - **Motivation (found during 0.9.52 end-to-end verification)**: with a fresh browser profile (no localStorage snapshot), the market data had not arrived when the panel first mounted, so the old `fit` measurement ran on an EMPTY list; when data arrived the re-measure faced a DOM already collapsed by the stale budget (1 chip + "+N") and ratcheted to a frozen "3 chips + +20" single row. Warm sessions hit the snapshot on first mount and measured correctly — which is why this 0.7.0-era defect never surfaced. Sister issue: the measure effect ignores width changes, so `+N` drifts from real capacity after window resizes. Full causal chain with headless evidence: `docs/plans/2026-10-08-zonechips-visual-clip-requirements.md`.
package/lib/client.js CHANGED
@@ -2750,7 +2750,7 @@ function ZoneChips({ zone, counts, labels, active, onPick, trailing, wrapTitle }
2750
2750
  }, [active, activeIdx, expanded, geom]);
2751
2751
  useLayoutEffect(() => {
2752
2752
  if (!expanded) measure();
2753
- }, [chips.length, expanded, zone, stuck, rowHeight, measure]);
2753
+ }, [chips, active, expanded, zone, stuck, rowHeight, measure]);
2754
2754
  useEffect(() => {
2755
2755
  const el = wrapRef.current;
2756
2756
  if (!el || expanded || typeof ResizeObserver === "undefined") return;
@@ -2825,7 +2825,17 @@ function ZoneChips({ zone, counts, labels, active, onPick, trailing, wrapTitle }
2825
2825
  h("button", { "data-chip": "1", className: `dshm-chip${active == null ? " on" : ""}`, onClick: () => onPick(null) }, lookup("cat.all")),
2826
2826
  ...chips.map((c, i) => btn(c, i)),
2827
2827
  expanded ? [
2828
- h("button", { key: "collapse", "data-chip": "1", className: "dshm-chip", onClick: () => setExpanded(false) }, "\u2303"),
2828
+ h("button", {
2829
+ key: "collapse",
2830
+ "data-chip": "1",
2831
+ className: "dshm-chip",
2832
+ // 评审 R1-Q6:手动收起即记录 autoRef——展开态下激活的分类若真实越界(geom 陈旧或
2833
+ // 收起重测后越界),决策 effect 不得立即弹回,「手动收起」无条件被尊重。
2834
+ onClick: () => {
2835
+ if (active) autoRef.current = active;
2836
+ setExpanded(false);
2837
+ }
2838
+ }, "\u2303"),
2829
2839
  trailing || null
2830
2840
  ] : null
2831
2841
  ),
@@ -2834,7 +2844,11 @@ function ZoneChips({ zone, counts, labels, active, onPick, trailing, wrapTitle }
2834
2844
  // ⚠️ 展开态不用 overlay(⌃/筛选 in-flow,与现状一致);弹层锚点 .dsvm-filterwrap 随组定位。
2835
2845
  clip && overlay ? h(
2836
2846
  "div",
2837
- { className: "dsvm-chipmore" },
2847
+ {
2848
+ className: "dsvm-chipmore",
2849
+ // 评审 R1-Q4:按行高垂直居中于末可见行(28px 组盒在 22px 行高上居中 → bottom 补偿 -3px)
2850
+ style: { bottom: `${8 + ((rowHeight || 22) - 28) / 2}px` }
2851
+ },
2838
2852
  trailing || null,
2839
2853
  hiddenCount > 0 ? h("button", { className: "dshm-chip", onClick: () => setExpanded(true) }, `+${hiddenCount}`) : null
2840
2854
  ) : null
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-m",
3
- "version": "0.9.53",
3
+ "version": "0.9.54",
4
4
  "description": "可自定义收录清单的 DSH 插件市场:收录、安装、卸载、升级一站完成,附 agent 工具与 dshm CLI。",
5
5
  "license": "MIT",
6
6
  "type": "module",
package/registry.json CHANGED
@@ -87,7 +87,7 @@
87
87
  {
88
88
  "id": "dsh-skip-browser-auth",
89
89
  "name": "DSH Skip Browser Auth",
90
- "description": "替换官方 Connection 跳过 BrowserAuth,免 Token;已适配七个已审计精确版本对,详见仓库。仅支持 web profile;desktop profile(存在 dsh-desktop-host 的环境)自动休眠,属设计行为。",
90
+ "description": "替换官方 Connection 跳过 BrowserAuth,免 Token;已适配七个已审计精确版本对,详见仓库。仅支持 web profile;desktop 宿主一律自动休眠(多进程树判别),desktop 用户请保持最新版。",
91
91
  "category": "self-dev",
92
92
  "tags": ["BrowserAuth", "连接", "安全", "工具"],
93
93
  "verified": ["0.1.2-rc.1", "0.1.5-rc.1", "0.1.5-rc.2", "0.1.7-rc.1", "0.1.7-rc.2", "0.2.0-rc.1", "0.2.0-rc.2"],