dsh-session-guard 4.1.5 → 4.1.15

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.ja.md CHANGED
@@ -11,6 +11,18 @@
11
11
  - [Changelog на русском](./CHANGELOG.ru.md)
12
12
  - [Changelog en español](./CHANGELOG.es.md)
13
13
 
14
+ ## 4.1.14 — 2026-10-08
15
+
16
+ ### 削除
17
+
18
+ ## 4.1.13 — 2026-10-08
19
+
20
+ ### 修正 — ≤0.1.5 でのブリッジ記述子スケルトン(5セルゲートで発覚)
21
+
22
+ - **≤0.1.5 ホストの describe `value` はフィールドスケルトン**(実測:`{enabled:{},…}`、実値は `base`+`user` 層)。旧世代で `descriptor.value` をそのまま消費すると `officialProviders` が `{}` になり `?? []` を素通りして `ListRow` の `values.join` が throw、`dsh-family.tab` スロット全体が殉葬していた。`descriptorPlainValue()` がスケルトンを検出して `{...base, ...user}` を再構築。
23
+ - **カード字段消毒(多層防御)**:スロットは一つの描画エラーで全族タブが死ぬため、`ListRow` 入力を `toList()` で無毒化、`拦截方式` セレクトは非 `error` 値を `hold` にフォールバック。
24
+ - 5セルファームゲートで検証:0.1.0/0.1.5 はブリッジ経由、0.1.7 は configForms 経由でシード値 `321123` の読み返しを確認。
25
+
14
26
  ## 4.0.0 — 2026-09-29
15
27
 
16
28
  ### Changed
package/CHANGELOG.ko.md CHANGED
@@ -11,6 +11,18 @@
11
11
  - [Changelog на русском](./CHANGELOG.ru.md)
12
12
  - [Changelog en español](./CHANGELOG.es.md)
13
13
 
14
+ ## 4.1.14 — 2026-10-08
15
+
16
+ ### 제거
17
+
18
+ ## 4.1.13 — 2026-10-08
19
+
20
+ ### 수정 — ≤0.1.5 브리지 디스크립터 스켈레톤(5셀 게이트 발견)
21
+
22
+ - **≤0.1.5 호스트의 describe `value`는 필드 스켈레톤**(실측: `{enabled:{},…}`, 실값은 `base`+`user` 레이어). 구세대에서 `descriptor.value`를 그대로 쓰면 `officialProviders`가 `{}`가 되어 `?? []`를 통과하고 `ListRow`의 `values.join`이 throw, `dsh-family.tab` 슬롯 전체가 순직.`descriptorPlainValue()`가 스켈레톤을 감지해 `{...base, ...user}`로 재구성.
23
+ - **카드 필드 소독(다층 방어)**: 슬롯은 렌더 오류 하나로 전체 탭이 죽으므로 `ListRow` 입력을 `toList()`로 무독화, `拦截方式` 셀렉트는 non-`error` 값을 `hold`로 폴백.
24
+ - 5셀 팜 게이트 검증: 0.1.0/0.1.5는 브리지 경유, 0.1.7은 configForms 경유로 시드값 `321123` 재판독 확인.
25
+
14
26
  ## 4.0.0 — 2026-09-29
15
27
 
16
28
  ### Changed
package/CHANGELOG.md CHANGED
@@ -11,6 +11,92 @@ All notable changes to `dsh-session-guard` are recorded here. Versions follow se
11
11
  - [Changelog на русском](./CHANGELOG.ru.md)
12
12
  - [Changelog en español](./CHANGELOG.es.md)
13
13
 
14
+ ## 4.1.14 — 2026-10-08
15
+
16
+ ### Removed
17
+
18
+ ## 4.1.13 — 2026-10-08
19
+
20
+ ### Fixed — bridge descriptor skeleton on ≤0.1.5 (five-cell gate catch, 2026-10-08)
21
+
22
+ - **Host describe `value` is a field skeleton on ≤0.1.5** (0.1.0/0.1.5 empirical):
23
+ the old host generations serialize `descriptor.value` as `{enabled:{},…,officialProviders:{}}`
24
+ (one empty object per schema field) while the real merged config lives in
25
+ `descriptor.base` (combined defaults) + `descriptor.user` (user layer).
26
+ `BridgeDocHandle` consumed `value` verbatim, so `officialProviders` arrived as
27
+ `{}` — truthy non-array, invisible to `?? []` — and `ListRow`'s
28
+ `values.join` threw, crashing the whole `dsh-family.tab` slot (guard card +
29
+ IT card + TL nav all died together). `descriptorPlainValue()` now detects the
30
+ skeleton (object whose every own value is an empty plain object — impossible
31
+ for guard's scalar/array config) and rebuilds the effective value as
32
+ `{...base, ...user}` (shallow merge is exact for guard's flat config).
33
+ - **Card-field sanitization (defense in depth)**: any card render error kills
34
+ the entire family tab slot on these hosts, so `ListRow` inputs are now
35
+ sanitized at the call sites (`toList()` — non-arrays become `[]`) and the
36
+ `拦截方式` select falls back to `hold` for any non-`error` value. A malformed
37
+ descriptor may degrade one field, never the tab.
38
+ - Verified on the five-cell farm gate: describe replays on 0.1.0/0.1.5 now
39
+ yield plain merged values; the seeded `stepGateTimeoutMs: 321123` reads back
40
+ through the bridge on ≤0.1.5 and natively (configForms) on 0.1.7.
41
+
42
+ ## 4.1.12 — 2026-10-08
43
+
44
+ ### Added — settings webServer bridge (M4/T20-b): dual-track card data plane
45
+
46
+ - **Top-level card registration refactor (prerequisite)**: the three settings
47
+ faces (`dsh-family.tab`, `plugins.bundle.config`, `settings.plugin.item`,
48
+ `shell.overlay`) were registered inside the `onScope` callback of the dual
49
+ scoped-inject waist — on ≤0.1.5 that callback never fires (settingsScope fiber
50
+ never resolves; 0.1.0/0.1.1 lack both services), so the cards never registered
51
+ and a bridge would have had no consumer. All registrations now run at apply
52
+ top level with a `scopeRef` live reference; the callback degrades to a pure
53
+ data arm (perm-gate `client/index.ts` L166-257 shape).
54
+ - **Server bridge** (`src/settings-bridge.js`): `describe`/`mutate` endpoints at
55
+ `/api/session-guard/settings/*` (POST-only, `{ok,value|error}` envelope,
56
+ redacted describe filtered to the plugin ns, ops forwarded to the host
57
+ settings service with `expectedRevision` optimistic concurrency, 256 KB cap).
58
+ Registration is fail-open (error log, never blocks plugin load).
59
+ - **Client bridge handle** (`src/client/settings-bridge.ts`): `BridgeDocHandle`
60
+ implements the same `SettingsScope` face as the native handles
61
+ (getSnapshot/subscribe/set/unset); describe misses retry within a bounded
62
+ budget (settings service resolving later than card mount) before landing on
63
+ `unavailable`. Card faces read `scopeRef.scope ?? bridgeScope()` — native
64
+ first, bridge fallback (perm-gate T13b dual-track). **Generation split in the
65
+ data arm (five-cell empirical, 2026-10-08 night)**: on 0.1.2/0.1.5 the
66
+ `settingsScope` handle is write-alive but read-dead — `set()` persists to
67
+ settings.yaml while `getSnapshot().value` stays `undefined`, so that arm
68
+ deliberately leaves `scopeRef` empty and the card falls to the bridge (bridge
69
+ mutate lands in the same host service; describe heals the read path).
70
+
71
+ ### Corrected — 4.1.11 publication note
72
+
73
+ - The 4.1.11 entry said "none of 4.1.5-4.1.10 was published to npm"; **4.1.5
74
+ was published** (npm registry confirms `4.1.5` in versions, and `latest`
75
+ pointed at it until this release line). 4.1.6-4.1.10 indeed never shipped.
76
+ The earlier claim came from reading the npmmirror mirror instead of the
77
+ authoritative registry (registry-pin discipline, B2+).
78
+
79
+ ## 4.1.11 — 2026-10-08
80
+
81
+ ### Fixed — family-section takeover rebuilt (4.1.5 → 4.1.11 arc; none of 4.1.5-4.1.10 was published to npm)
82
+
83
+ - **4.1.5 "half backfill" root cause**: the takeover body read `props.hooks.tabs`,
84
+ but the host's `bindInjectHooks` strips an inject face's `hooks` key into
85
+ `use<Tab>` props on every generation — the component threw, the slot abdicated,
86
+ and the takeover body never rendered anywhere. It now reads the `useTabs`
87
+ compartment first, with a raw-hooks `useState`/`useEffect` fallback.
88
+ - **Apply-time inject registration (4.1.10)**: the slots core fires inject
89
+ factories only on declaration events (= the settings panel opening), so the
90
+ grace-delayed registration of 4.1.7/4.1.8 waited for a declaration that never
91
+ came. The `settings.section` inject now registers at apply time.
92
+ - **Deferred yield-election (4.1.11)**: ≤0.1.7 shells give every same-id section
93
+ entry its own nav row — the old "priority-10 shadow stays invisible" assumption
94
+ produced a double 起子插件设置 row on all five farm cells. The factory now waits
95
+ 500 ms after the declaration batch and stands down when a `dsh-family` entry is
96
+ already seated (thinking-levels head); it takes over only when TL is absent.
97
+ Verified single-row on all five farm cells (0.1.0 → 0.1.7), pairing with
98
+ dsh-thinking-levels 4.2.0-beta.26's symmetric stand-down.
99
+
14
100
  ## 4.0.0 — 2026-09-29
15
101
 
16
102
  ### Changed
package/dsh.plugin.json CHANGED
@@ -1,16 +1,16 @@
1
- {
2
- "id": "dsh-external/dsh-session-guard",
3
- "version": "4.0.0",
4
- "main": "./src/index.js",
5
- "description": "高峰自动会话门:step 级门控 + 周末模式 + 高峰自动暂停 + 官方源二维判定 + 会话级冻结 + 后端自动重试。",
6
- "engines": {
7
- "dsh": ">=0.2.0-rc.1 <0.2.1-0"
8
- },
9
- "contributes": {
10
- "tools": [],
11
- "skills": []
12
- },
13
- "client": {
14
- "main": "./lib/client.js"
15
- }
16
- }
1
+ {
2
+ "id": "dsh-external/dsh-session-guard",
3
+ "version": "4.1.14",
4
+ "main": "./src/index.js",
5
+ "description": "高峰自动会话门:step 级门控 + 周末模式 + 高峰自动暂停 + 官方源二维判定 + 会话级冻结 + 后端自动重试。",
6
+ "engines": {
7
+ "dsh": ">=0.2.0-rc.1 <0.2.1-0"
8
+ },
9
+ "contributes": {
10
+ "tools": [],
11
+ "skills": []
12
+ },
13
+ "client": {
14
+ "main": "./lib/client.js"
15
+ }
16
+ }