Repository navigation
profile 清单被写入 UTF-8 BOM 后加载器解析即崩,且恢复流程会再次写坏,无法自救 #11731
Replies: 1 comment 2 replies
|
先把 $p = "$env:USERPROFILE\.dsh\profiles\desktop\package.json"
$t = [IO.File]::ReadAllText($p).TrimStart([char]0xFEFF)
[IO.File]::WriteAllText($p, $t, (New-Object System.Text.UTF8Encoding($false)))
[BitConverter]::ToString([IO.File]::ReadAllBytes($p)[0..2]) # 期望 7B-0A-20读侧的位置和你说的对得上: 有一句要改。「恢复流程会再次写坏」不成立: 这条证据反过来有用:你在 0:26 看到了 写侧也别在 DSH 里找: 修法形状:读侧 去掉 BOM 后如果还崩,把 只读了 master |
Uh oh!
There was an error while loading. Please reload this page.
DSH 0.2.1-rc.3(Windows x64,Electron 44.7.0)在某些写入路径下会给
profiles/<name>/package.json加上 UTF-8 BOM(EF BB BF);加载器readProfileManifest直接JSON.parse、不剥离 BOM,启动即抛Unexpected token ''崩掉;崩溃弹窗的「恢复重启」又会走同一条坏路径,形成无法自救的崩溃循环(实测连续 9 次,16:09–16:31 UTC)。证据四条:
efbbbf;更早的历史备份(466/344 字节)全是7b0a20—— BOM 是后来某次写入才引入的。cordis.patch.yml.bak-1793378185239(正是「back up profile patch」的痕迹),0:27 立刻复崩 —— 恢复动作确实执行过,且没校验就重启。Set-Content/Out-File/utf8-sig这类写法;PowerShell Operational 日志(enabled)在崩溃窗口内检索package.json命中 0 条。7b0a20,此后 21 小时零崩溃 —— 不是「写清单一律加 BOM」,是某条特定路径(失败/恢复流程)才加。按 RFC 8259 §8.1:写入方 MUST NOT 加 BOM,解析方 MAY 忽略 BOM。这里是写侧违规、读侧又把可选容错做成了致命失败。
建议修复(按优先级):
.bad-<ts>→ 从 last-known-good 恢复 → 用同一加载器校验能 parse 再启动;加崩溃循环检测与安全模式。另附一条:插件安装子进程未继承用户级 PATH,pnpm 解析 GitHub 依赖时报
'git' 不是内部或外部命令(git 实际已安装可用)。建议 spawn 时继承完整 PATH,或允许配置 git 路径。本问题由用户在日常使用中发现,证据按时间线整理;已知此前有若干同类报告(【Bug】桌面版启动崩溃:profile package.json 含 UTF-8 BOM 时 JSON 解析失败(readProfileManifest) #11182、[Bug] 0.2.1-rc.3 Windows 启动必崩:profile 清单带 U+FEFF,JSON.parse 直接失败 #10883、[Bug] 桌面端启动即崩:profile manifest 的 UTF-8 BOM 未被容忍;dsh plugin add 中断后无法自愈 #10159、Two desktop-app (0.2.0-rc.2) bugs: BOM written into profile package.json crashes boot; turn resume after interrupted tool call crashes with 'prepare' undefined #8837),本条补充的是「恢复流程会再次写坏、形成无法自救的崩溃循环」这一段。
证据2-插件安装失败日志.log
证据1-BOM坏掉的配置文件.json
All reactions