Repository navigation
(feat) support the DSH 0.1.7 seam line — SettingsForms settings integration + verified 0.1.5–0.1.7 peer band - #180
ranxianglei wants to merge 4 commits into
Conversation
…ration + verified 0.1.5–0.1.7 peer band
…y rejected every 0.1.6/0.1.7 prerelease The single clause '>=0.1.5-alpha.1 <0.1.8-0' looked like it admitted three verified lines, but node-semver compares same-tuple prereleases lexicographically against the bare upper bound (0.1.8 < 0.1.8-0), so every 0.1.6-x / 0.1.7-x prerelease fails the range. npm install against those hosts would have hit ERESOLVE peer conflicts — exactly what the band exists to prevent. Split into one clause per verified line; each clause's upper bound sorts ahead of its own line's prereleases and behind the next line's first prerelease. Accept fixtures now mirror the full published version set per line (verified against the npm registry).
…hot-apply driver regression The union resolution of tests/settings.test.ts during the rebase dropped the closing 'finally' block of both issue #176 preset tests (file no longer parsed). Restored verbatim from origin/main and pointed them at the worktree's LegacySettingsProvider fixture (main's MemorySettingsProvider stands in for the dsh-settings runtime class, which the 0.1.7 baseline does not ship). Also adds the missing end-to-end regression for the 0.1.7 hot-tune loop: a SettingsForms write that the engine picks up on the NEXT agent/pre-step through resyncSettings, asserted by the threshold-inversion warn the engine logs when applySettings sees min >= max.
e7e92b8 to
86926ab
Compare
[bot] 🏷 Review complete — verdict: mergeable, after fixing two issues I found in review (one severe) and rebasing onto current main. All local gates and CI are green on the updated head. ① Issue & direction (#174)Direction is sound and hits the root cause: 0.1.7 removed ② Regression audit (pre-existing behavior on touched paths)
③ Issues found — fixed directly on the PR branch
④ Rebase (was required)The branch was based on v0.2.25; main moved to v0.2.26 meanwhile (#176 preset-fill fix touches the same settings layer). A straight merge would have produced conflicting, contradictory settings wiring. Rebased onto ⑤ Test validity & diff cleanlinessAssertions have teeth (real meter/registry E2E, revision tracking, dual-shape checkpoint fixtures, wire-level byte-stability); the diff stays on-purpose — no stray files or churn. Verification (local, head Branch 中文摘要:审查了 DSH 0.1.7 seam 支持 PR——方向与代码正确,但发现并直接修复了一个严重问题(peer band 因 node-semver 同元组预发布规则实际拒绝了全部 0.1.6/0.1.7 预发布版本,与 PR 声称的准入集不符,已拆分为逐行子句)、补上了缺失的 forms 热更新端到端回归测试和 e2e error turn kind,并把分支 rebase 到最新 main(保留 #176 预设填充语义);本地全部门禁与 CI 均绿,可以合并。 |
|
field report from a real 0.1.7 host — pre-merge evidence that the widened band is needed, plus one question about existing workarounds. 环境:DSH Desktop 2.0.14 (stable) · dsh 1. 未豁免时,用户看到的是"装了但完全不工作"profile 启动期整包跳过,且没有任何 UI 状态区分"待重启"与"被拒绝"——用户会反复重启而不会好转: 第二行值得注意:被跳过不只是"引擎没加载",还会让用户已经写好的 2. 豁免之后,#173/#175 的降级路径在真机上表现与描述一致重启后: 引擎本体与四个工具正常挂载,无 3. 为什么豁免不能当作长期方案(支持尽快合本 PR)豁免是 exact package@version × exact runtime version × per-profile 三元组。后果:
本 PR 把区间显式写成 4. 一个关于既有 workaround 的问题在 #180 之前,被跳过的用户里有一部分是直接在 profile 的 - id: compaction-acp
config:
modelContextLimit: 1000000
nudgeMaxContextLimitPct: 0.85
nudgeEmergencyThresholdPct: 0.95
coreOverrides:
nudge: { growthFloor: 200000, growthCap: 250000, growthRatio: 0.2 }我按 真正想问的是:
不管哪种答案,都不阻塞本 PR —— 只是想知道你们打算把这条边界放在哪,好让 release note 对"已有手写组合行的用户"给一句准确的说法。 5. 我没有验证的部分(避免被当成测试证据)
如果需要在合并前补一份真机数据(Desktop 2.0.14 / Windows / 1M 窗口长会话),我可以在这个 issue 下跑一轮再回报。 |
[bot] 🏷 感谢真机报告——第 1–3 点正是本 PR 要消除的失败模式(第 2 点的 warn 文案与 #173 降级路径逐字一致,交叉印证了豁免后的干净降级)。第 4 点的问题用代码 + 钉住产物直接回答: coreOverrides 不是 volatile——它根本不在设置 schema 里
所以你问题里的「若算」分支不成立: 你的 strip() 读法是对的——且已对钉住产物核验(不依赖源码目测)对
因此本引擎三种写形都保住手写行上的非表单键: 边界放在哪 + release note 建议措辞边界:forms 层恰好拥有那六个
这条边界连同上述产物级核验已写入 docs/settings-integration-design.md §4.9(PR 分支新 commit 关于第 5 点:你的报告按「已发布 0.2.26 + 豁免」的真机状态算作合并前旁证是准确的定位;分支侧验证维持此前报告(385/385 单元 + e2e 5/5,真实 0.1.7-rc.1 宿主栈)。如果你愿意在 Desktop 2.0.14 上补一轮真机数据,欢迎回报——但不阻塞合并。 中文摘要:回答了手写组合行中 coreOverrides 的归属问题——它不在设置 schema 内(非 volatile),并对钉住的 dsh-settings 0.1.7-rc.1 产物逐行核验确认所有 forms 写形都保留行上非表单键(含 reset all),唯一风险是手工删整行且三线上行为一致、非本 PR 引入;边界与 release note 措辞已定并写入设计文档 §4.9,不阻塞合并。 |
Problem
DSH 0.1.7 removed
dsh-settings.installSection(service class renamedSettingsProvider→SettingsForms). After the #173 fix, hosts on the 0.1.7 line degrade cleanly but lose runtime hot-tuning of the six/acp-prune configknobs (composition row + restart only), with a startup warn. This PR brings the 0.1.7 line formally into the supported range.Cause
The settings integration spoke only the ≤0.1.6 dialect (
installSection(owner, ns, schema, entry, hooks)). On 0.1.7 the service exposesconfigure/describe/update/replace/mutate, addressed by profile ENTRY ID, with editable fields gated bymeta.volatileschema annotations;~/.dsh/settings.yamlno longer exists (renamed.importedat startup, imported throughLEGACY_SECTION_ENTRIES, which maps only ui-developer-tools / ui-onboarding / shell).Fix
installSectionpresent → ≤0.1.6 legacy path (unchanged);describe/update/replacepresent → ≥0.1.7 forms path; neither → [bug] DSH 0.1.7 移除 dsh-settings.installSection 后 ACP 设置节注册抛 TypeError(启动 error) #173 single-warn degrade.compaction-acp(the bundle patch row); the six knobs appear in the form because the static plugin Config schema annotates them.volatile(); writes go throughupdate()withSettingsConflictErrorrevision handling; service methods bound to the receiver (host methods read state viathis).agent/pre-stepviaresyncSettings()(before the autoNudge gate, so a just-committed change applies to the current step).>=0.1.5-alpha.1 <0.1.8-0(never caret;0.1.8-0sorts ahead of any 0.1.8-x prerelease, so the next line stays rejected until verified); devDep baseline moved to0.1.7-rc.1(43 dsh-* packages);tests/peer-range.test.tsre-pinned for the three lines.Behavior changes (old → new)
/acp-prune config.Verification
Closes #174