Repository navigation
【经验】从"双目录分裂 + 8 小时宕机"到一套可复制的工作区治理规范 #5265
DaRin1403
started this conversation in
Show Your Plugins!
Replies: 1 comment
|
这套治理规范很实在——尤其「会话身份绑死头帧、注册表是派生的」这两条源码级结论,值得后来人少走弯路。补一个和你经历互补的视角:第一次迁移脚本引发 8 小时宕机,本质是动手时没有退路——如果当时 我现在动工作区/迁移前必做: dsh plugin --profile web add @xiaoyuyu6420/dsh-backup
/backup # 动手前 10 秒备份(dsh 版本变化时它还会自动打 dsh-pre-upgrade- 快照)
/backup restore latest --dry-run # 改坏了先预览再还原,恢复失败自动回滚你的三处对齐方案是「防患」(减少出事概率),一份随时可回退的备份是「兜底」(出事了能回去)——两层叠上,迁移这事才算真的稳。要求 DSH 0.1.1-rc.2 或兼容版本(安装时会校验 peer)。 |
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
我的工作区被误建成了
w<工作区名>(多了个 w),UI 改名后底层 path 未同步 → 文件散落两处、会话绑死旧路径、系统反复自动重建旧目录。第一次迁移脚本引发 8 小时宕机(PS5.1 写 BOM + 只改会话目录名)。读源码重写后,现在三处(注册表/会话存储/物理目录)对齐,并沉淀出一套"目录分级标准 + AGENTS.md 注入 + 项目索引"的治理方案。分享给社区。一、事故机制(源码级确认)
session.jsonl.zstd是多帧 zstd 流,头帧(frame 0)是单行 JSON 会话头;启动时assertStoredIdentity校验"头帧 cwd 的转义名 ↔ 会话目录名"。只改目录名、不改头帧,必崩。realpath(会话头 cwd)分组重建——所以"只改 workspace.json 的 path"下次启动必然分裂出第二个工作区。Set-Content -Encoding UTF8会写 BOM,Node JSON.parse 直接失败——配置文件必须字节级写入。二、正确姿势(28 个会话实测通过)
停机(端口守卫)→ 备份 → 只重写每个会话的头帧 cwd(用
node:zlib的 zstd API + 官方同款scanZstdFrames帧扫描,checksum 参数对齐)→ 逐文件全量解码校验(帧数/行数/id)→ 会话目录移到新转义名 → 删旧根(失败可安全重跑)→ 改注册表与缓存 → 旧目录可先用目录联接过渡 → 重启验证。三、沉淀的治理方案
$DSH_HOME/AGENTS.md+ 工作区AGENTS.md,靠 DSH 官方的dsh-agent-instructions插件让每个新会话自动遵守(实测新文件一写入立即注入);session-dump.js(会话标题映射/解压)、workspace-migrate.js(frame-safe 迁移,dry-run/守卫/校验)。以上已打包成开源仓库(脱敏版):
agent-workspace-kithttps://github.com/DaRin1403/agent-workspace-kit
四、给官方/社区的三个建议
dsh-agent-instructions很好用,希望在官方文档里更显眼地介绍(全局/项目/子目录三层 + local 覆盖);附:教训清单
All reactions