# 发布说明 v0.8.2（项目监听不再钉住工作区）

[← 返回 README](../README.zh.md) ｜ 相关：[v0.7.2 发布说明](v0.7.2.md)

**发布日期**：2026-10-17 ｜ **区间**：`v0.8.0 → v0.8.2`
**宿主**：dsh `0.2.0` 线（从 `0.2.0-rc.2` 起），与 v0.8.0 相同。配置口径与装载语义不变。

v0.8.1 是未正常发布的内部版本，不作为对外发布。本说明沿用它的内容。v0.8.2 与 `dsh-project-mcp-ui` 0.8.2 同步升版。源码版本和 Git 标签不表示两个包已经发布到 npm。

v0.8.2 收窄项目层文件监听。此前 chokidar 以 depth 2 对项目根下两层内的每个目录和文件调用 `fs.watch`。Windows 上这些句柄让目录停在 delete-pending，构建脚本删除 `lib/` 会得到 `ENOTEMPTY`，并且在宿主重启前无法在原路径重建。

---

## 亮点速览

| 主题 | 一句话 |
|---|---|
| 监听范围 | 只放行项目根、`.dsh` 和三个配置文件，depth 改为 1 |
| 热重载 | `.dsh` 事后创建，以及三个配置文件的新增、修改、删除，仍然触发对账 |
| 用户层 | 用户层与 profile 层仍按精确文件路径监听，这次没有改 |

---

## 变更明细

- **allow-list**：`syncWatcher` 只打开项目根、`.dsh`、`.dsh/mcp.yml`、`.dsh/mcp.json`、`.mcp.json`。其它路径一律忽略，因此不会打开 `lib/`、`src/`、`build/`。
- **depth**：用 1。0 看不到 `.dsh` 里的文件；再深就会打开工作区第一层目录。
- **三个配置文件留在集合里**：目录重读只发出新增和删除，内容变化靠文件自己的 `fs.watch`。
- **不能改成只盯三个尚不存在的路径**。`.dsh` 还不存在时，chokidar 会退回监听项目根，并且只匹配根下名叫 `mcp.yml` 的文件，之后创建的 `.dsh/mcp.yml` 收不到。
- **文档**：npm 0.8.0 web profile 的验证记录和本地一次性产物的清理口径归档到 `docs/testing/`。

## 验证

`pnpm test` 在本机 Windows 10.0.26200、Node v26.7.0 上通过（model 34 / mcp-file 7 / json-file 13 / json-write 6 / registry 63 / project-watch 5 / cli 21 / ui-collapse 14 / ui-paste 14 / ui-display 7 / panel-helpers 7，bundle 与 UI 生命周期一并通过）。新增 `test/test-project-watch.mjs` 的路径断言与 `normalizePathKey` 一样，在 Windows 上先转小写再比较。

另用本机 DSH 运行时（DeepSeek Harness 的 Electron，Node v24.18.1，libuv 1.52.1）对照过监听集合：旧的 depth 2 会把 `lib/`、`src/` 放进 `getWatched()`，这一版的 allow-list 只留下 `.dsh` 和配置文件；两种监听下改 `.dsh/mcp.yml` 都收到 `change`。这台系统上，监听开着时 `rmSync('lib')` 已经能删掉并重建，`ENOTEMPTY` 没有复现。修复保证的是这些目录不再被打开。
